Merge "[freetype] Build freetype2 as a shared library."
diff --git a/.gitignore b/.gitignore
index b5db9d8..a47f568 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
config.mk
objs/vc2010/
+build
diff --git a/.mailmap b/.mailmap
index a3c5f94..c406e23 100644
--- a/.mailmap
+++ b/.mailmap
@@ -5,3 +5,5 @@
Suzuki, Toshiya (鈴木俊哉) <mpsuzuki@hiroshima-u.ac.jp> <sssa@flavor1.ipc.hiroshima-u.ac.jp>
Suzuki, Toshiya (鈴木俊哉) <mpsuzuki@hiroshima-u.ac.jp> sssa <sssa@IPA2004-mps.local>
Suzuki, Toshiya (鈴木俊哉) <mpsuzuki@hiroshima-u.ac.jp> suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+Ben Wagner <bungeman@gmail.com> Bungeman <bungeman@gmail.com>
+Ewald Hew (Hew Yih Shiuan 丘毅宣) <ewaldhew@gmail.com>
diff --git a/BUILD.gn b/BUILD.gn
index a16e06b..af6c1e5 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -30,6 +30,15 @@
include_dirs = [
"include",
]
+
+ cflags = []
+
+ if (is_clang) {
+ cflags += [
+ "-Wno-unused-function",
+ "-Wno-unused-variable",
+ ]
+ }
}
#TODO(mikejurka): Remove once we've migrated to the freetype2 target everywhere
@@ -54,12 +63,10 @@
"src/base/ftbase.c",
"src/base/ftbbox.c",
"src/base/ftbitmap.c",
- "src/base/ftfntfmt.c",
"src/base/ftfstype.c",
"src/base/ftgasp.c",
"src/base/ftglyph.c",
"src/base/ftinit.c",
- "src/base/ftlcdfil.c",
"src/base/ftmm.c",
"src/base/ftstroke.c",
"src/base/ftsystem.c",
@@ -92,6 +99,8 @@
# Long directory name to avoid accidentally using wrong headers.
"FT_CONFIG_MODULES_H=<freetype-fuchsia-config/ftmodule.h>",
"FT_CONFIG_OPTIONS_H=<freetype-fuchsia-config/ftoption.h>",
+ # Reduce visibility of symbols.
+ "FT_EXPORT(x)=x",
]
if (shared_lib) {
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6631fde..ad8ded0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,9 +1,9 @@
# CMakeLists.txt
#
-# Copyright 2013-2015 by
+# Copyright 2013-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
-# Written by John Cary <cary@txcorp.com>
+# Written originally by John Cary <cary@txcorp.com>
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
@@ -12,45 +12,84 @@
# fully.
#
#
-# Say
+# The following will 1. create a build directory and 2. change into it and
+# call cmake to configure the build with default parameters as a static
+# library.
#
-# cmake CMakeLists.txt
-#
-# to create a Makefile that builds a static version of the library.
+# cmake -E make_directory build
+# cmake -E chdir build cmake ..
#
# For a dynamic library, use
#
-# cmake CMakeLists.txt -DBUILD_SHARED_LIBS:BOOL=true
+# cmake -E chdir build cmake -D BUILD_SHARED_LIBS:BOOL=true ..
#
# For a framework on OS X, use
#
-# cmake CMakeLists.txt -DBUILD_FRAMEWORK:BOOL=true -G Xcode
-#
-# instead.
+# cmake -E chdir build cmake -G Xcode -D BUILD_FRAMEWORK:BOOL=true ..
#
# For an iOS static library, use
#
-# cmake CMakeLists.txt -DIOS_PLATFORM=OS -G Xcode
+# cmake -E chdir build cmake -G Xcode -D IOS_PLATFORM=OS ..
#
# or
#
-# cmake CMakeLists.txt -DIOS_PLATFORM=SIMULATOR -G Xcode
+# cmake -E chdir build cmake -G Xcode -D IOS_PLATFORM=SIMULATOR ..
+#
+# Finally, build the project with:
+#
+# cmake --build build
+#
+# Install it with
+#
+# (sudo) cmake --build build --target install
+#
+# A binary distribution can be made with
+#
+# cmake --build build --config Release --target package
#
# Please refer to the cmake manual for further options, in particular, how
# to modify compilation and linking parameters.
#
# Some notes.
#
-# . `cmake' will overwrite FreeType's original (top-level) `Makefile' file.
+# . `cmake' creates configuration files in
+#
+# <build-directory>/include/freetype/config
+#
+# which should be further modified if necessary.
#
# . You can use `cmake' directly on a freshly cloned FreeType git
# repository.
#
-# . `CMakeLists.txt' is provided as-is since it is not used by the
+# . `CMakeLists.txt' is provided as-is since it is normally not used by the
# developer team.
+#
+# . Set the `FT_WITH_ZLIB', `FT_WITH_BZIP2', `FT_WITH_PNG', and
+# `FT_WITH_HARFBUZZ' CMake variables to `ON' to force using a dependency.
+# Leave a variable undefined (which is the default) to use the dependency
+# only if it is available. Set `CMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE' to
+# disable a dependency completely (CMake package name, so `BZip2' instead of
+# `BZIP2'). Example:
+#
+# cmake -DFT_WITH_ZLIB=ON -DCMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE [...]
+#
+# . Installation of FreeType can be controlled with the CMake variables
+# `SKIP_INSTALL_HEADERS', `SKIP_INSTALL_LIBRARIES', and `SKIP_INSTALL_ALL'
+# (this is compatible with the same CMake variables in zlib's CMake
+# support).
+# FreeType explicitly marks the API to be exported and relies on the compiler
+# to hide all other symbols. CMake supports a C_VISBILITY_PRESET property
+# starting with 2.8.12.
+cmake_minimum_required(VERSION 2.8.12)
-cmake_minimum_required(VERSION 2.6)
+if (NOT CMAKE_VERSION VERSION_LESS 3.3)
+ # Allow symbol visibility settings also on static libraries. CMake < 3.3
+ # only sets the propery on a shared library build.
+ cmake_policy(SET CMP0063 NEW)
+endif ()
+
+include(CheckIncludeFile)
# CMAKE_TOOLCHAIN_FILE must be set before `project' is called, which
# configures the base build environment and references the toolchain file
@@ -78,7 +117,7 @@
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_TOOLCHAIN_FILE
- ${PROJECT_SOURCE_DIR}/builds/cmake/iOS.cmake)
+ ${CMAKE_SOURCE_DIR}/builds/cmake/iOS.cmake)
endif ()
else ()
if (DEFINED IOS_PLATFORM)
@@ -86,7 +125,49 @@
endif ()
endif ()
-project(freetype)
+
+project(freetype C)
+
+set(VERSION_MAJOR "2")
+set(VERSION_MINOR "9")
+set(VERSION_PATCH "1")
+
+# SOVERSION scheme: CURRENT.AGE.REVISION
+# If there was an incompatible interface change:
+# Increment CURRENT. Set AGE and REVISION to 0
+# If there was a compatible interface change:
+# Increment AGE. Set REVISION to 0
+# If the source code was changed, but there were no interface changes:
+# Increment REVISION.
+set(LIBRARY_VERSION "6.16.0")
+set(LIBRARY_SOVERSION "6")
+
+# These options mean "require x and complain if not found". They'll get
+# optionally found anyway. Use `-DCMAKE_DISABLE_FIND_PACKAGE_x=TRUE` to disable
+# searching for a packge entirely (x is the CMake package name, so "BZip2"
+# instead of "BZIP2").
+option(FT_WITH_ZLIB "Use system zlib instead of internal library." OFF)
+option(FT_WITH_BZIP2 "Support bzip2 compressed fonts." OFF)
+option(FT_WITH_PNG "Support PNG compressed OpenType embedded bitmaps." OFF)
+option(FT_WITH_HARFBUZZ "Improve auto-hinting of OpenType fonts." OFF)
+
+
+# Disallow in-source builds
+if ("${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
+ message(FATAL_ERROR
+ "In-source builds are not permitted! Make a separate folder for"
+ " building, e.g.,\n"
+ " cmake -E make_directory build\n"
+ " cmake -E chdir build cmake ..\n"
+ "Before that, remove the files created by this failed run with\n"
+ " cmake -E remove CMakeCache.txt\n"
+ " cmake -E remove_directory CMakeFiles")
+endif ()
+
+
+# Add local cmake modules
+list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/builds/cmake)
+
if (BUILD_FRAMEWORK)
if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
@@ -97,67 +178,114 @@
set(BUILD_SHARED_LIBS ON)
endif ()
-set(VERSION_MAJOR "2")
-set(VERSION_MINOR "6")
-set(VERSION_PATCH "0")
-set(PROJECT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
-# Compiler definitions for building the library
-add_definitions(-DFT2_BUILD_LIBRARY)
+# Find dependencies
+if (FT_WITH_HARFBUZZ)
+ find_package(HarfBuzz 1.3.0 REQUIRED)
+else ()
+ find_package(HarfBuzz 1.3.0)
+endif ()
-# Specify library include directories
-include_directories("${PROJECT_SOURCE_DIR}/include")
+if (FT_WITH_PNG)
+ find_package(PNG REQUIRED)
+else ()
+ find_package(PNG)
+endif ()
+
+if (FT_WITH_ZLIB)
+ find_package(ZLIB REQUIRED)
+else ()
+ find_package(ZLIB)
+endif ()
+
+if (FT_WITH_BZIP2)
+ find_package(BZip2 REQUIRED)
+else ()
+ find_package(BZip2)
+endif ()
# Create the configuration file
-message(STATUS "Creating directory, ${PROJECT_BINARY_DIR}/include/freetype2.")
-file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/include/freetype2)
+if (UNIX)
+ check_include_file("unistd.h" HAVE_UNISTD_H)
+ check_include_file("fcntl.h" HAVE_FCNTL_H)
+ check_include_file("stdint.h" HAVE_STDINT_H)
-# For the auto-generated ftconfig.h file
-include_directories(BEFORE "${PROJECT_BINARY_DIR}/include/freetype2")
-message(STATUS "Creating ${PROJECT_BINARY_DIR}/include/freetype2/ftconfig.h.")
-execute_process(
- COMMAND sed -e "s/FT_CONFIG_OPTIONS_H/<ftoption.h>/" -e "s/FT_CONFIG_STANDARD_LIBRARY_H/<ftstdlib.h>/" -e "s?/undef ?#undef ?"
- INPUT_FILE ${PROJECT_SOURCE_DIR}/builds/unix/ftconfig.in
- OUTPUT_FILE ${PROJECT_BINARY_DIR}/include/freetype2/ftconfig.h
-)
+ file(READ "${PROJECT_SOURCE_DIR}/builds/unix/ftconfig.in"
+ FTCONFIG_H)
+ if (HAVE_UNISTD_H)
+ string(REGEX REPLACE
+ "#undef +(HAVE_UNISTD_H)" "#define \\1 1"
+ FTCONFIG_H "${FTCONFIG_H}")
+ endif ()
+ if (HAVE_FCNTL_H)
+ string(REGEX REPLACE
+ "#undef +(HAVE_FCNTL_H)" "#define \\1 1"
+ FTCONFIG_H "${FTCONFIG_H}")
+ endif ()
+ if (HAVE_STDINT_H)
+ string(REGEX REPLACE
+ "#undef +(HAVE_STDINT_H)" "#define \\1 1"
+ FTCONFIG_H "${FTCONFIG_H}")
+ endif ()
+ string(REPLACE "/undef " "#undef "
+ FTCONFIG_H "${FTCONFIG_H}")
+ file(WRITE "${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h"
+ "${FTCONFIG_H}")
+endif ()
-file(GLOB PUBLIC_HEADERS "include/*.h")
-file(GLOB PUBLIC_CONFIG_HEADERS "include/config/*.h")
-file(GLOB PRIVATE_HEADERS "include/internal/*.h")
+
+# Create the options file
+file(READ "${PROJECT_SOURCE_DIR}/include/freetype/config/ftoption.h"
+ FTOPTION_H)
+if (ZLIB_FOUND)
+ string(REGEX REPLACE
+ "/\\* +(#define +FT_CONFIG_OPTION_SYSTEM_ZLIB) +\\*/" "\\1"
+ FTOPTION_H "${FTOPTION_H}")
+endif ()
+if (BZIP2_FOUND)
+ string(REGEX REPLACE
+ "/\\* +(#define +FT_CONFIG_OPTION_USE_BZIP2) +\\*/" "\\1"
+ FTOPTION_H "${FTOPTION_H}")
+endif ()
+if (PNG_FOUND)
+ string(REGEX REPLACE
+ "/\\* +(#define +FT_CONFIG_OPTION_USE_PNG) +\\*/" "\\1"
+ FTOPTION_H "${FTOPTION_H}")
+endif ()
+if (HARFBUZZ_FOUND)
+ string(REGEX REPLACE
+ "/\\* +(#define +FT_CONFIG_OPTION_USE_HARFBUZZ) +\\*/" "\\1"
+ FTOPTION_H "${FTOPTION_H}")
+endif ()
+file(WRITE "${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h"
+ "${FTOPTION_H}")
+
+
+file(GLOB PUBLIC_HEADERS "include/ft2build.h" "include/freetype/*.h")
+file(GLOB PUBLIC_CONFIG_HEADERS "include/freetype/config/*.h")
+file(GLOB PRIVATE_HEADERS "include/freetype/internal/*.h")
+
set(BASE_SRCS
src/autofit/autofit.c
- src/base/ftadvanc.c
+ src/base/ftbase.c
src/base/ftbbox.c
src/base/ftbdf.c
src/base/ftbitmap.c
- src/base/ftcalc.c
src/base/ftcid.c
- src/base/ftdbgmem.c
- src/base/ftdebug.c
- src/base/ftfntfmt.c
src/base/ftfstype.c
src/base/ftgasp.c
- src/base/ftgloadr.c
src/base/ftglyph.c
src/base/ftgxval.c
src/base/ftinit.c
- src/base/ftlcdfil.c
src/base/ftmm.c
- src/base/ftobjs.c
src/base/ftotval.c
- src/base/ftoutln.c
src/base/ftpatent.c
src/base/ftpfr.c
- src/base/ftrfork.c
- src/base/ftsnames.c
- src/base/ftstream.c
src/base/ftstroke.c
src/base/ftsynth.c
src/base/ftsystem.c
- src/base/fttrigon.c
src/base/fttype1.c
- src/base/ftutil.c
src/base/ftwinfnt.c
src/bdf/bdf.c
src/bzip2/ftbzip2.c
@@ -170,7 +298,7 @@
src/pfr/pfr.c
src/psaux/psaux.c
src/pshinter/pshinter.c
- src/psnames/psmodule.c
+ src/psnames/psnames.c
src/raster/raster.c
src/sfnt/sfnt.c
src/smooth/smooth.c
@@ -180,21 +308,26 @@
src/winfonts/winfnt.c
)
-include_directories("src/truetype")
-include_directories("src/sfnt")
-include_directories("src/autofit")
-include_directories("src/smooth")
-include_directories("src/raster")
-include_directories("src/psaux")
-include_directories("src/psnames")
+if (WIN32)
+ enable_language(RC)
+ list(APPEND BASE_SRCS builds/windows/ftdebug.c
+ src/base/ftver.rc)
+elseif (WINCE)
+ list(APPEND BASE_SRCS builds/wince/ftdebug.c)
+else ()
+ list(APPEND BASE_SRCS src/base/ftdebug.c)
+endif ()
if (BUILD_FRAMEWORK)
- set(BASE_SRCS
- ${BASE_SRCS}
- builds/mac/freetype-Info.plist
- )
+ list(APPEND BASE_SRCS builds/mac/freetype-Info.plist)
endif ()
+
+if (NOT DISABLE_FORCE_DEBUG_POSTFIX)
+ set(CMAKE_DEBUG_POSTFIX d)
+endif()
+
+
add_library(freetype
${PUBLIC_HEADERS}
${PUBLIC_CONFIG_HEADERS}
@@ -202,6 +335,36 @@
${BASE_SRCS}
)
+set_target_properties(
+ freetype PROPERTIES
+ C_VISIBILITY_PRESET hidden)
+
+target_compile_definitions(
+ freetype PRIVATE FT2_BUILD_LIBRARY)
+
+if (WIN32)
+ target_compile_definitions(
+ freetype PRIVATE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS)
+endif ()
+
+if (BUILD_SHARED_LIBS)
+ set_target_properties(freetype PROPERTIES
+ VERSION ${LIBRARY_VERSION}
+ SOVERSION ${LIBRARY_SOVERSION})
+endif ()
+
+target_include_directories(
+ freetype BEFORE # Pick up ftconfig.h and ftoption.h generated above.
+ PRIVATE "${PROJECT_BINARY_DIR}/include")
+
+target_include_directories(
+ freetype
+ PRIVATE "${PROJECT_SOURCE_DIR}/include")
+
+target_include_directories(
+ freetype
+ PUBLIC $<INSTALL_INTERFACE:include/freetype2>)
+
if (BUILD_FRAMEWORK)
set_property(SOURCE ${PUBLIC_CONFIG_HEADERS}
PROPERTY MACOSX_PACKAGE_LOCATION Headers/config
@@ -214,40 +377,121 @@
)
endif ()
-# Installations
-# Note the trailing slash in the argument to the `DIRECTORY' directive
-install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/
- DESTINATION include/freetype2
- PATTERN "internal" EXCLUDE
-)
-install(TARGETS freetype
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib
- FRAMEWORK DESTINATION Library/Frameworks
-)
+
+set(PKG_CONFIG_REQUIRED_PRIVATE "")
+
+if (ZLIB_FOUND)
+ target_link_libraries(freetype PRIVATE ${ZLIB_LIBRARIES})
+ target_include_directories(freetype PRIVATE ${ZLIB_INCLUDE_DIRS})
+ list(APPEND PKG_CONFIG_REQUIRED_PRIVATE zlib)
+endif ()
+if (BZIP2_FOUND)
+ target_link_libraries(freetype PRIVATE ${BZIP2_LIBRARIES})
+ target_include_directories(freetype PRIVATE ${BZIP2_INCLUDE_DIR}) # not BZIP2_INCLUDE_DIRS
+ list(APPEND PKG_CONFIG_REQUIRED_PRIVATE bzip2)
+endif ()
+if (PNG_FOUND)
+ target_link_libraries(freetype PRIVATE ${PNG_LIBRARIES})
+ target_compile_definitions(freetype PRIVATE ${PNG_DEFINITIONS})
+ target_include_directories(freetype PRIVATE ${PNG_INCLUDE_DIRS})
+ list(APPEND PKG_CONFIG_REQUIRED_PRIVATE libpng)
+endif ()
+if (HARFBUZZ_FOUND)
+ target_link_libraries(freetype PRIVATE ${HARFBUZZ_LIBRARIES})
+ target_include_directories(freetype PRIVATE ${HARFBUZZ_INCLUDE_DIRS})
+ list(APPEND PKG_CONFIG_REQUIRED_PRIVATE harfbuzz)
+endif ()
+
+
+# Installation
+include(GNUInstallDirs)
+
+if (NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL)
+ install(
+ # Note the trailing slash in the argument to `DIRECTORY'!
+ DIRECTORY ${PROJECT_SOURCE_DIR}/include/
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/freetype2
+ COMPONENT headers
+ PATTERN "internal" EXCLUDE
+ PATTERN "ftconfig.h" EXCLUDE
+ PATTERN "ftoption.h" EXCLUDE)
+ install(
+ FILES ${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h
+ ${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/freetype2/freetype/config
+ COMPONENT headers)
+endif ()
+
+if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
+ # Generate the pkg-config file
+ if (UNIX)
+ file(READ ${PROJECT_SOURCE_DIR}/builds/unix/freetype2.in FREETYPE2_PC_IN)
+
+ string(REPLACE ";" ", " PKG_CONFIG_REQUIRED_PRIVATE "${PKG_CONFIG_REQUIRED_PRIVATE}")
+
+ string(REPLACE "%prefix%" ${CMAKE_INSTALL_PREFIX}
+ FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
+ string(REPLACE "%exec_prefix%" "\${prefix}"
+ FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
+ string(REPLACE "%libdir%" "\${prefix}/${CMAKE_INSTALL_LIBDIR}"
+ FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
+ string(REPLACE "%includedir%" "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}"
+ FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
+ string(REPLACE "%ft_version%" "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
+ FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
+ string(REPLACE "%REQUIRES_PRIVATE%" "${PKG_CONFIG_REQUIRED_PRIVATE}"
+ FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
+ string(REPLACE "%LIBS_PRIVATE%" "" # All libs support pkg-config
+ FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
+
+ file(WRITE ${PROJECT_BINARY_DIR}/freetype2.pc ${FREETYPE2_PC_IN})
+
+ install(
+ FILES ${PROJECT_BINARY_DIR}/freetype2.pc
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
+ COMPONENT pkgconfig)
+ endif ()
+
+ install(
+ TARGETS freetype
+ EXPORT freetype-targets
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ FRAMEWORK DESTINATION Library/Frameworks
+ COMPONENT libraries)
+ install(
+ EXPORT freetype-targets
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/freetype
+ FILE freetype-config.cmake
+ COMPONENT headers)
+endif ()
+
# Packaging
-# CPack version numbers for release tarball name.
+set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The FreeType font rendering library.")
+set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/docs/LICENSE.TXT")
+
set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
-set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}})
-if (NOT DEFINED CPACK_PACKAGE_DESCRIPTION_SUMMARY)
- set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${CMAKE_PROJECT_NAME}")
-endif ()
-if (NOT DEFINED CPACK_SOURCE_PACKAGE_FILE_NAME)
- set(CPACK_SOURCE_PACKAGE_FILE_NAME
- "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}-r${PROJECT_REV}"
- CACHE INTERNAL "tarball basename"
- )
-endif ()
-set(CPACK_SOURCE_GENERATOR TGZ)
-set(CPACK_SOURCE_IGNORE_FILES
- "/CVS/;/.svn/;.swp$;.#;/#;/build/;/serial/;/ser/;/parallel/;/par/;~;/preconfig.out;/autom4te.cache/;/.config")
-set(CPACK_GENERATOR TGZ)
+set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH})
+set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
+
+if (WIN32)
+ set(CPACK_GENERATOR ZIP)
+else()
+ set(CPACK_GENERATOR TGZ)
+endif()
+
+set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries")
+set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C/C++ Headers")
+set(CPACK_COMPONENT_LIBRARIES_DESCRIPTION
+ "Library used to build programs which use FreeType")
+set(CPACK_COMPONENT_HEADERS_DESCRIPTION
+ "C/C++ header files for use with FreeType")
+set(CPACK_COMPONENT_HEADERS_DEPENDS libraries)
+set(CPACK_COMPONENT_LIBRARIES_GROUP "Development")
+set(CPACK_COMPONENT_HEADERS_GROUP "Development")
+
include(CPack)
-
-# add make dist target
-add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
-
-# eof
diff --git a/ChangeLog b/ChangeLog
index fea19b9..806b835 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,16 +1,16 @@
-2015-06-07 Werner Lemberg <wl@gnu.org>
+2018-05-01 Werner Lemberg <wl@gnu.org>
- * Version 2.6 released.
- =======================
+ * Version 2.9.1 released.
+ =========================
- Tag sources with `VER-2-6'.
+ Tag sources with `VER-2-9-1'.
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.6.
+ * docs/VERSION.TXT: Add entry for version 2.9.1.
+ * docs/CHANGES: Updated.
* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
- builds/windows/vc2005/index.html,
+ src/base/ftver.rc, builds/windows/vc2005/index.html,
builds/windows/vc2008/freetype.vcproj,
builds/windows/vc2008/index.html,
builds/windows/vc2010/freetype.vcxproj,
@@ -24,485 +24,271 @@
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.5/2.6/, s/255/26/.
+ builds/wince/vc2008-ce/index.html: s/2.9/2.9.1/, s/29/291/.
- * include/freetype/freetype.h (FREETYPE_MINOR): Set to 6.
- (FREETYPE_PATCH): Set to 0.
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
- * builds/unix/configure.raw (version_info): Set to 18:0:12.
- * CMakeLists.txt (VERSION_MINOR): Set to 0.
- (VERSION_PATCH): Set to 6.
+ * builds/unix/configure.raw (version_info): Set to 22:1:16.
+ * CMakeLists.txt (VERSION_PATCH): Set to 1.
- * src/autofit/afmodule.c [!FT_MAKE_OPTION_SINGLE_OBJECT]: Add
- declarations for dumping functions.
+ * include/freetype/ftgasp.h: Use FT_BEGIN_HEADER and FT_END_HEADER.
- * src/truetype/ttinterp.c (TT_New_Context): Pacify compiler.
+2018-04-26 Werner Lemberg <wl@gnu.org>
- * builds/toplevel.mk: Use `freetype.mk's code to compute the version
- string.
- Don't include a zero patch level in version string.
- * builds/freetype.mk: Remove code for computing the version string.
+ Another fix for handling invalid format 2 cmaps.
-2015-06-06 Ashish Azad <ashish.azad@samsung.com>
+ Sigh.
- Fix Savannah bug #45260.
+ Reported as
- * src/pfr/pfrdrivr.c (pfr_get_kerning): Fix typo.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8003
-2015-06-03 Werner Lemberg <wl@gnu.org>
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition to avoid
+ an endless loop.
- [truetype] Fix memory leak.
+2018-04-24 Ben Wagner <bungeman@google.com>
- Problem reported by Grissiom <chaos.proton@gmail.com>; in
+ [base] Avoid undefined behaviour in lcd filtering code (#53727).
- http://lists.nongnu.org/archive/html/freetype/2015-05/msg00013.html
+ * src/base/ftlcdfil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy):
+ Ensure `height > 0'.
- there is an example code to trigger the bug.
+2018-04-22 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttobjs.c (tt_size_init_bytecode): Free old `size'
- data before allocating again. Bug most probably introduced four
- years ago in version 2.4.3.
+ * src/base/ftoutln.c (FT_Outline_Decompose): Improve error tracing.
-2015-06-02 Werner Lemberg <wl@gnu.org>
+2018-04-22 Alexei Podtelezhnikov <apodtele@gmail.com>
- [raster] Add more tracing.
+ [base] Fix bitmap emboldening.
- * src/raster/ftraster.c (FT_TRACE7) [_STANDALONE_]: Define.
- (Vertical_Sweep_Span, Vertical_Sweep_Drop, Horizontal_Sweep_Span,
- Horizontal_Sweep_Drop, Render_Glyph): Add tracing calls.
+ Bug introduced after release 2.8.
-2015-06-01 Werner Lemberg <wl@gnu.org>
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): We use
+ `FT_QALLOC_MULT', which doesn't zero out the buffer. Adjust the
+ bitmap copying code to take care of this fact.
- [truetype] While tracing opcodes, show code position and stack.
+2018-04-22 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttinterp.c: Change all existing TRACE7 calls to
- TRACE6.
- (opcode_name): Add string lengths.
- (TT_RunIns): Implement display of code position and stack.
+ Another fix for handling invalid format 2 cmaps.
-2015-05-31 Werner Lemberg <wl@gnu.org>
+ The previous commit was incomplete.
- [truetype] In GX, make private point numbers work correctly.
+ Reported as
- This is completely missing in Apple's documentation: If a `gvar'
- tuple uses private point numbers (this is, deltas are specified for
- some points only), the uncovered points must be interpolated for
- this tuple similar to the IUP bytecode instruction. Examples that
- need this functionality are glyphs `Oslash' and `Q' in Skia.ttf.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7928
- * src/truetype/ttgxvar.c (tt_delta_shift, tt_delta_interpolate,
- tt_handle_deltas): New functions.
- (TT_Vary_Get_Glyph_Deltas): Renamed to...
- (TT_Vary_Apply_Glyph_Deltas): ... this; it directly processes the
- points and does no longer return an array of deltas.
- Add tracing information.
- Call `tt_handle_deltas' to interpolate missing deltas.
- Also fix a minor memory leak in case of error.
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition to avoid
+ an endless loop.
- * src/truetype/ttgxvar.h: Updated.
+2018-04-19 Werner Lemberg <wl@gnu.org
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
- load_truetype_glyph): Updated.
+ [autofit] Add support for Georgian Mtavruli characters.
-2015-05-31 Werner Lemberg <wl@gnu.org>
+ This will be part of the forthcoming Unicode 11.0.
- [truetype] In GX, make intermediate tuplets work at extrema.
-
- * src/truetype/ttgxvar.c (ft_var_apply_tuple): Fix range condition.
-
-2015-05-31 Werner Lemberg <wl@gnu.org>
-
- [truetype] Add tracing information to GX code.
-
- * src/truetype/ttgxvar.c (ft_var_load_avar, ft_var_load_gvar,
- ft_var_apply_tuple, TT_Get_MM_Var, TT_Set_MM_Blend,
- TT_Set_Var_Design, tt_face_vary_cvt): Do it.
-
-2015-05-28 Werner Lemberg <wl@gnu.org>
-
- * src/tools/apinames.c (names_dump): Fix invalid reference.
-
- Problem reported by Guzman Mosqueda, Jose R
- <jose.r.guzman.mosqueda@intel.com>.
-
-2015-05-24 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix commit from 2015-05-22.
-
- * src/truetype/ttgload.c, src/truetype/ttinterp.c: Guard new code
- with `TT_CONFIG_OPTION_SUBPIXEL_HINTING'.
-
- Problem reported by Nikolaus Waxweiler <madigens@gmail.com>.
-
-2015-05-23 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix return values of GETINFO bytecode instruction.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): New fields
- `vertical_lcd' and `gray_cleartype'.
-
- * src/truetype/ttgload.c (tt_loader_init): Initialize new fields.
- Change `symmetrical smoothing' to TRUE, since FreeType produces
- exactly this.
-
- * src/truetype/ttinterp.c (Ins_GETINFO): Fix selector/return bit
- values for symmetrical smoothing, namely 11/18.
- Handle bits for vertical LCD subpixels (8/15) and Gray ClearType
- (12/19).
-
-2015-05-23 Werner Lemberg <wl@gnu.org>
-
- [truetype] Minor.
-
- * src/truetype/ttinterp.h (TT_ExecContext):
- s/subpixel/subpixel_hinting.
-
- * src/truetype/ttgload.c, src/truetype/ttgload.h: Updated.
-
-2015-05-22 Werner Lemberg <wl@gnu.org>
-
- [truetype] Support selector index 3 of the INSTCTRL instruction.
-
- This flag activates `native ClearType hinting', disabling backwards
- compatibility mode as described in Greg Hitchcocks whitepaper. In
- other words, it enables unrestricted functionality of all TrueType
- instructions in ClearType.
-
- * src/truetype/ttgload.c (tt_get_metrics): Call `sph_set_tweaks'
- unconditionally.
- (tt_loader_init): Unset `ignore_x_mode' flag if bit 2 of
- `GS.instruct_control' is active.
-
- * src/truetype/ttinterp.c (Ins_INSTCTRL): Handle selector index 3.
- (Ins_GETINFO): Updated.
-
- * docs/CHANGES: Document it.
-
-2015-05-20 Werner Lemberg <wl@gnu.org>
-
- [truetype] Minor.
-
- * src/truetype/ttinterp.h (SetSuperRound): Fix type of `GridPeriod'
- argument.
-
-2015-05-17 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix loading of composite glyphs.
-
- * src/truetype/ttgload.c (TT_Load_Composite_Glyph): If the
- ARGS_ARE_XY_VALUES flag is not set, handle argument values as
- unsigned. I trust `ttx' (which has exactly such code) that it does
- the right thing here...
-
- The reason that noone has ever noticed this bug is probably the fact
- that point-aligned subglyphs are rare, as are subglyphs with a
- number of points in the range [128;255], which is quite large (or
- even in the range [32768;65535], which is extremely unlikely).
-
-2015-05-12 Chris Liddell <chris.liddell@artifex.com>
-
- [cff] Make the `*curveto' operators more tolerant.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString): The opcodes
- `vvcurveto', `hhcurveto', `vhcurveto', and `hvcurveto' all iterate,
- pulling values off the stack until the stack is exhausted.
- Implicitly the stack must be a multiple (or for subtly different
- behaviour) a multiple plus a specific number of extra values deep.
- If that's not the case, enforce it (as the old code did).
-
-2015-05-12 Chris Liddell <chris.liddell@artifex.com>
-
- [cff] fix incremental interface with new cff code.
-
- * src/cff/cf2ft.c (cf2_getSeacComponent): When using the incremental
- interface to retrieve glyph data for a SEAC, it be left to the
- incremental interface callback to apply the encoding to raw
- character index (as it was in the previous code).
-
-2015-04-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [autofit] Speed up IUP.
-
- * src/autofit/afhints.c (af_iup_interp): Separate trivial snapping to
- the same position from true interpolation, use `scale' to reduce
- divisions.
-
-2015-04-28 Werner Lemberg <wl@gnu.org>
-
- [cff] Use `name' table for PS name if we have a SFNT-CFF.
-
- This follows the OpenType 1.7 specification. See
-
- http://tug.org/pipermail/tex-live/2015-April/036634.html
-
- for a discussion.
-
- * src/cff/cffdrivr.c (cff_get_ps_name): Use the `sfnt' service if we
- have an SFNT.
-
-2015-04-27 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Speed up IUP.
-
- * src/truetype/ttinterp.c (_iup_worker_interpolate): Separate trivial
- snapping to the same position from true interpolation.
-
-2015-04-21 Werner Lemberg <wl@gnu.org>
-
- [autofit] By default, enable warping code but switch off warping.
-
- Suggested by Behdad.
-
- * include/config/ftoption.h: Define AF_CONFIG_OPTION_USE_WARPER.
-
- * src/autofit/afmodule.c (af_autofitter_init): Initialize `warping'
- with `false'.
-
-2015-04-21 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2015-04-21 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce `warping' property.
-
- This code replaces the debugging hook from the previous commit with
- a better, more generic solution.
-
- * include/ftautoh.h: Document it.
-
- * src/autofit/afmodule.h (AF_ModuleRec)
- [AF_CONFIG_OPTION_USE_WARPER]: Add `warping' field.
-
- * src/autofit/afmodule.c (_af_debug_disable_warper): Remove.
- (af_property_set, af_property_get, af_autofitter_init)
- [AF_CONFIG_OPTION_USE_WARPER]: Handle `warping' option.
-
- * src/autofit/afhints.h (AF_HINTS_DO_WARP): Remove use of the no
- longer existing `_af_debug_disable_warper'.
-
- * src/autofit/afcjk.c (af_cjk_hints_init), src/autofit/aflatin.c
- (af_latin_hints_init), src/autofit/aflatin2.c (af_latin2_hints_init)
- [AF_CONFIG_OPTION_USE_WARPER]: Add `AF_SCALER_FLAG_NO_WARPER' to the
- scaler flags if warping is off.
-
- * src/autofit/aftypes.h: Updated.
-
-2015-04-16 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add debugging hook to disable warper.
-
- * src/autofit/afmodule.c (_af_debug_disable_warper)
- [FT_DEBUG_AUTOFIT]: New global variable.
-
- * src/autofit/aftypes.h: Updated.
- (AF_SCALER_FLAG_NO_WARPER): New macro (not actively used yet).
-
- * src/autofit/afhints.h (AF_HINTS_DO_WARP): New macro.
-
- * src/autofi/aflatin.c (af_latin_hints_apply)
- [AF_CONFIG_OPTION_USE_WARPER]: Use `AF_HINTS_DO_WARP' to control use
- of warper.
-
- * src/autofit/afcjk.c (af_cjk_hints_init, af_cjk_hints_apply)
- [AF_CONFIG_OPTION_USE_WARPER]: Synchronize with `aflatin.c'.
-
- * src/autofit/aflatin2.c (af_latin2_hints_apply)
- [AF_CONFIG_OPTION_USE_WARPER]: Synchronize with `aflatin.c'.
-
-2015-04-10 Werner Lemberg <wl@gnu.org>
-
- [cff] Update advance width handling to OpenType 1.7.
-
- Problem reported by Behdad.
-
- * src/cff/cffdrivr.c (cff_get_advances): Handle SFNT case
- separately.
-
- * src/cff/cffgload.c (cff_slot_load): Use advance width and side
- bearing values from `hmtx' table if present.
-
-2015-04-03 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Use do-while loop.
-
-2015-04-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/autofit/aflatin.c (af_latin_hint_edges): Reduce logic.
-
-2015-04-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [autofit] Finish the thought.
-
- * src/autofit/afhints.c (af_direction_compute): make sure the long arm
- is never negative so that its `FT_ABS' is not necessary.
-
-2015-04-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Call dumper functions for tracing.
-
- * src/autofit/afcjk.c (af_cjk_hints_apply): Remove dead code.
- * src/autofit/afhints.c (af_glyph_hints_dump_points): Minor
- improvement.
- * src/autofit/afmodule.c (af_autofitter_load_glyph): Implement it.
-
-2015-04-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make debugging stuff work again.
-
- The interface to ftgrid was broken in the series of commits starting
- with
-
- [autofit] Allocate AF_Loader on the stack instead of AF_Module.
-
- from 2015-01-14.
-
- * src/autofit/afmodule.c (_af_debug_hints_rec) [FT_DEBUG_AUTOFIT]:
- Use a global AF_GlyphHintsRec object for debugging.
- (af_autofitter_done, af_autofitter_load_glyph): Updated.
-
- * src/autofit/afloader.c (af_loader_init, af_loader_done): Updated.
-
-2015-04-01 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afhints.c (af_glyph_hints_done): Fix minor thinko.
-
-2015-03-29 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #44629.
-
- * src/cff/cf2font.h (CF2_MAX_SUBR), src/cff/cffgload.h
- (CFF_MAX_SUBRS_CALLS): Set to 16.
-
-2015-03-29 Werner Lemberg <wl@gnu.org>
-
- [type1, truetype] Make the MM API more flexible w.r.t. `num_coords'.
-
- This commit allows `num_coords' to be larger or smaller than the
- number of available axes while selecting a design instance, either
- ignoring excess data or using defaults if data is missing.
-
- * src/truetype/ttgxvar.c (TT_Set_MM_Blend, TT_Set_Var_Design):
- Implement it.
-
- * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design,
- T1_Set_Var_Design): Ditto.
-
-2015-03-29 Werner Lemberg <wl@gnu.org>
-
- [type1] Minor.
-
- * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design): Use
- FT_THROW.
- (T1_Set_Var_Design): Use T1_MAX_MM_AXIS and FT_THROW.
-
-2015-03-27 Werner Lemberg <wl@gnu.org>
-
- [cff] Trace charstring nesting levels.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdCALLGSUBR,
- cf2_cmdCALLSUBR, cf2_cmdRETURN>: Implement it.
-
- * src/cff/cffgload.c (cff_decoder_parse_charstrings)
- <cff_op_callsubr, cff_op_callgsubr, cff_op_return>: Ditto.
-
-2015-03-21 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Optimize `FT_Angle_Diff'.
-
- Under normal circumstances we are usually close to the desired range
- of angle values, so that the remainder is not really necessary.
-
- * src/base/fttrigon.c (FT_Angle_Diff): Use loops instead of remainder.
-
- * src/autofit/aftypes.h (AF_ANGLE_DIFF): Ditto in the unused macro.
-
-2015-03-21 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve `gvar' handling.
-
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Correctly handle
- single-element runs. Cf. glyph `Q' in Skia.ttf with weights larger
- than the default.
-
-2015-03-20 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/fttrigon.c (FT_Vector_Rotate): Minor refactoring.
-
-2015-03-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Fix Savannah bug #44412 (part 2).
-
- * src/base/fttrigon.c (FT_Sin, FT_Cos, FT_Tan): Call `FT_Vector_Unit'.
-
-2015-03-11 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Arabic script.
-
- Thanks to Titus Nemeth <tn@tntypography.eu> for guidance!
-
- * src/autofit/afblue.dat: Add blue zone data for Arabic.
-
+ * src/autofit/afblue.dat: Add blue zone data for Mtavruli.
* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
- * src/autofit/afscript.h: Add Arabic standard characters.
+ * src/autofit/afscript.h: Add Mtavruli standard character.
- * src/autofit/afranges.c: Add Arabic data.
+2018-04-18 Werner Lemberg <wl@gnu.org>
- * src/autofit/afstyles.h: Add Arabic data.
+ Fix handling of invalid format 2 cmaps.
- * docs/CHANGES: Document it.
+ The problem was introduced after the last release.
-2015-03-11 Werner Lemberg <wl@gnu.org>
+ Reported as
- Rename `svxf86nm.h' to `svfntfmt.h'; update related symbols.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7828
- * include/internal/ftserv.h (FT_SERVICE_XFREE86_NAME_H): Renamed
- to...
- (FT_SERVICE_FONT_FORMAT_H): This.
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Avoid endless loop.
- * include/internal/services/svfntfmt.h (FT_XF86_FORMAT_*): Renamed
- to ...
- (FT_FONT_FORMAT_*): This.
+2018-04-17 Werner Lemberg <wl@gnu.org>
- src/base/ftfntfmt.c, src/bdf/bdfdrivr.c, src/cff/cffdrivr.c,
- src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/pfr/pfrdrivr.c,
- src/truetype/ttdriver.c, src/type1/t1driver.c,
- src/type42/t42drivr.c, src/winfonts/winfnt.c: Updated.
+ [truetype] Integer overflow issues.
-2015-03-11 Werner Lemberg <wl@gnu.org>
+ Reported as
- [base] Rename `FT_XFREE86_H' to `FT_FONT_FORMATS_H'.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7739
- * include/config/ftheader.h: Implement it.
- * src/base/ftfntfmt.c, docs/CHANGES: Updated.
+ * src/truetype/ttinterp.c (Ins_CEILING): Use FT_PIX_CEIL_LONG.
-2015-03-11 Werner Lemberg <wl@gnu.org>
+2018-04-16 Werner Lemberg <wl@gnu.org>
- [base] Rename `FT_Get_X11_Font_Format' to `FT_Get_Font_Format'.
+ [truetype] Integer overflow issues.
- * include/ftfntfmt.h, src/base/ftfntfmt.c: Implement it.
+ Reported as
- * docs/CHANGES: Updated.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7718
-2015-03-11 Werner Lemberg <wl@gnu.org>
+ * src/truetype/ttinterp.c (Ins_MIRP): Use ADD_LONG.
- Fix automatic copyright updating.
+2018-04-15 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/tools/update-copyright: Make scanning of `no-copyright'
- actually work.
+ [build] Use `info' function of make 3.81.
- * src/tools/no-copyright: Don't include README in general.
+ * configure, docs/INSTALL, docs/INSTALL.CROSS, docs/INSTALL.GNU,
+ docs/INSTALL.UNIX, docs/MAKEPP: Bump make version requirements.
-2015-03-11 Werner Lemberg <wl@gnu.org>
+ * builds/detect.mk (std_setup): Replace `echo' with `info'.
+ (dos_setup): Removed.
+ * builds/unix/install.mk, builds/modules.mk, builds/dos/detect.mk,
+ builds/windows/detect.mk, builds/os2/detect.mk: Updated.
+ * builds/newline: No longer needed.
- Rename `ftxf86.[ch]' to `ftfntfmt.[ch]'.
+2018-04-15 Werner Lemberg <wl@gnu.org>
- CMakeLists.txt, builds/amiga/makefile, builds/amiga/makefile.os4,
+ [truetype]: Limit `SLOOP' bytecode argument to 16 bits.
+
+ This fixes
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7707
+
+ * src/truetype/ttinterp.c (Ins_SLOOP): Do it.
+
+2018-04-14 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow issues.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7652
+
+ * src/truetype/ttinterp.c (Ins_MDAP): Use SUB_LONG.
+
+2018-04-14 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Update to Unicode 11.0.0.
+
+ But no support new scripts (volunteers welcomed).
+
+ * src/autofit/afranges.c (af_arab_nonbase_uniranges,
+ af_beng_nonbase_uniranges, af_cakm_nonbase_uniranges,
+ af_deva_nonbase_uniranges, af_geor_uniranges,
+ af_gujr_nonbase_uniranges, af_mlym_nonbase_uniranges,
+ af_nkoo_nonbase_uniranges, af_telu_nonbase_uniranges,
+ af_hani_uniranges): Add new data.
+
+2018-04-10 Nikolaus Waxweiler <madigens@gmail.com>
+
+ * CMakeLists.txt, builds/cmake/FindHarfBuzz.cmake: Extensive
+ modernization measures.
+
+ This brings up the minimum required CMake version to 2.8.12.
+
+ The installation paths follow the GNU defaults now, e.g. installing on a
+ 64 bit host will place binaries into the lib64/ folder on e.g. Fedora.
+
+ Symbols are hidden by default (e.g. `-fvisibility=hidden' on GCC).
+
+ CMake will no longer look for a C++ compiler.
+
+ Library and .so version now match the Autotools build.
+
+ Comments in the build file and informational messages now use platform
+ agnostic example commands.
+
+ ftoption.h and ftconfig.h are written directly without a redundant `-new'
+ copy.
+
+ External dependencies are expressed as option()s and will turn up as such
+ in cmake-gui.
+
+ Internal: Properties such as dependencies and include directories are now
+ privately set on the freetype library instead of globally.
+
+ The CPack definitions have been cleaned up, the `make dist' has been
+ removed. Source packages generated with CPack don't contain Autotools
+ files and aren't used by the maintainters anyway.
+
+ On Windows, src/base/ftver.rc is compiled to decorate the library with
+ version and copyright information.
+
+ A pkg-config file is now generated and installed.
+
+2018-04-09 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow issues.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7453
+
+ * src/truetype/ttinterp.c (Round_Super, Round_Super_45): Use
+ ADD_LONG and SUB_LONG.
+
+2018-04-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [windows, wince] Clean up legacy project files.
+
+ * builds/wince/vc2005-ce/freetype.vcproj,
+ builds/wince/vc2008-ce/freetype.vcproj,
+ builds/windows/vc2005/freetype.vcproj,
+ builds/windows/vc2008/freetype.vcproj,
+ builds/windows/visualce/freetype.vcproj,
+ builds/windows/visualce/freetype.dsp,
+ builds/windows/visualc/freetype.vcproj,
+ builds/windows/visualc/freetype.dsp: Remove per-file compile flags.
+
+2018-04-04 Werner Lemberg <wl@gnu.org>
+
+ [cff, type1] Sanitize `BlueFuzz' and `BlueShift'.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7371
+
+ * src/cff/cffload.c (cff_load_private_dict): Sanitize
+ `priv->blue_shift' and `priv->blue_fuzz' to avoid overflows later
+ on.
+
+ * src/type1/t1load.c (T1_Open_Face): Ditto.
+
+2018-04-04 Ben Wagner <bungeman@google.com>
+
+ * src/truetype/ttobjs.c (trick_names): Add 3 tricky fonts (#53554),
+ `DFHei-Md-HK-BF', `DFKaiShu-Md-HK-BF' and `DFMing-Bd-HK-BF'.
+ (tt_check_trickyness_sfnt_ids): Add checksums for 3 tricky fonts
+ in above.
+
+2018-04-01 Werner Lemberg <wl@gnu.org>
+
+ * builds/toplevel.mk (work): Use $(SEP).
+
+ This fixes the `make refdoc' using Cygwin: $(CAT) is `type' on this
+ platform, and this program only understands backslashes in paths.
+
+ Reported by Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>.
+
+2018-03-30 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix memory leak (only if tracing is on).
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var) [FT_DEBUG_LEVEL_TRACE}: Fix
+ it.
+
+2018-03-23 Ben Wagner <bungeman@google.com>
+
+ [sfnt] Correctly handle missing bitmaps in sbix format (#53404).
+
+ * src/sfnt/ttfsbit.c (tt_face_load_sbix_image): Fix return value.
+
+2018-03-23 Ben Wagner <bungeman@google.com>
+
+ [truetype] Fix advance of empty glyphs in bitmap fonts (#53393).
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Apply scaling to metrics
+ for empty bitmaps.
+
+2018-03-22 Werner Lemberg <wl@gnu.org>
+
+ Remove `ftlcdfil.c' and `ftfntfmt.c' from build files (#53415).
+
+ builds/amiga/makefile, builds/amiga/makefile.os4,
builds/amiga/smakefile, builds/mac/FreeType.m68k_cfm.make.txt,
builds/mac/FreeType.m68k_far.make.txt,
builds/mac/FreeType.ppc_carbon.make.txt,
- builds/mac/FreeType.ppc_classic.make.txt, builds/symbian/bld.inf,
+ builds/mac/FreeType.ppc_classic.make.txt,
builds/symbian/freetype.mmp, builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2008-ce/freetype.vcproj,
builds/windows/vc2005/freetype.vcproj,
@@ -512,6275 +298,2045 @@
builds/windows/visualc/freetype.dsp,
builds/windows/visualc/freetype.vcproj,
builds/windows/visualce/freetype.dsp,
- builds/windows/visualce/freetype.vcproj, docs/INSTALL.ANY,
- include/config/ftheader.h, include/ftfntfmt.h, modules.cfg,
- src/base/ftfntfmt.c, vms_make.com: Updated.
+ builds/windows/visualce/freetype.vcproj, vms_make.com: Do it.
-2015-03-10 Alexei Podtelezhnikov <apodtele@gmail.com>
+2018-03-13 Werner Lemberg <wl@gnu.org>
- Fix Savannah bug #44412 (part 1).
+ * src/sfnt/ttcmap.c (tt_cmap2_validate): Fix potential numeric
+ overflow.
- * src/base/ftstroke.c (ft_stroker_inside): Handle near U-turns.
+2018-03-13 Werner Lemberg <wl@gnu.org>
-2015-03-10 Werner Lemberg <wl@gnu.org>
+ Fix cmap format 2 handling (#53320).
- [base] Rename `FT_Bitmap_New' to `FT_Bitmap_Init'.
+ The patch introduced for #52646 was not correct.
- * include/ftbitmap.h, src/base/ftbitmap.c: Implement it.
- Update all callers.
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition.
+
+2018-03-10 Nikolaus Waxweiler <madigens@gmail.com>
+
+ * CMakeLists.txt (BASE_SRCS): Update to changes from 2018-03-05.
+
+2018-03-09 Chun-wei Fan <fanc999@yahoo.com.tw>
+
+ * CMakeLists.txt [win32]: Allow MSVC DLL builds (#53287).
+
+ Do not limit DLL builds to MinGW, since we already have
+ `__declspec(dllexport)' directives in `ftconfig.h'.
+ Also suppress more warnings for POSIX functions.
+
+2018-03-08 Hugh McMaster <hugh.mcmaster@outlook.com>
+
+ Make installation of `freetype-config' optional (#53093).
+
+ * builds/unix/configure.raw: Add option `--enable-freetype-config'
+ and set `INSTALL_FT2_CONFIG'.
+ * builds/unix/unix-def.in (INSTALL_FT2_CONFIG): Define.
+ * builds/unix/install.mk (install): Handle it.
+
+2018-03-05 Werner Lemberg <wl@gnu.org>
+
+ Make `ftlcdfil.c' part of the `base' module.
+
+ `ftobjs.c' needs `ft_lcd_padding'.
+
+ Problem reported by duhuanpeng <548708880@qq.com>.
+
+ * modules.cfg (BASE_EXTENSIONS): Don't include `ftlcdfil.c'.
+
+ * src/base/ftbase.c: Include `ftlcdfil.c'.
+ * src/base/rules.mk (BASE_SRC): Add `ftlcdfil.c'.
+ * src/base/Jamfile (_sources): Adjusted.
+
+ * docs/INSTALL.ANY: Updated.
+
+2018-03-05 Werner Lemberg <wl@gnu.org>
+
+ Make `ftfntfmt.c' part of the `base' module.
+
+ `ftobjs.c' needs `FT_Get_Font_Format'.
+
+ Problem reported by duhuanpeng <548708880@qq.com>.
+
+ * modules.cfg (BASE_EXTENSIONS): Don't include `ftfntfmt.c'.
+
+ * src/base/ftbase.c: Include `ftfntfmt.c'.
+ * src/base/rules.mk (BASE_SRC): Add `ftfntfmt.c'.
+ * src/base/Jamfile (_sources): Adjusted.
+
+ * docs/INSTALL.ANY: Updated.
+
+2018-03-01 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (TT_RunIns): Fix tracing arguments.
+
+2018-02-23 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.raw: Need HarfBuzz 1.3.0 or newer.
+
+ Problem reported by Alan Coopersmith <alan.coopersmith@oracle.com>.
+
+2018-02-17 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Prefer `CBDT'/`CBLC' over `glyf' table (#53154).
+
+2018-02-06 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow issues.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=6027
+
+ * src/truetype/ttinterp.c (Ins_MSIRP, Ins_MIAP, Ins_MIRP): Use
+ SUB_LONG; avoid FT_ABS.
+
+2018-02-04 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [unix] Use -fvisibility=hidden.
+
+ It is now widely recommended that ELF shared libraries hide symbols
+ except those with explicit __attribute__((visibility("default"))).
+ This is supported by all major compilers and should rather be an
+ option in libtool.
+
+ * builds/unix/configure.raw: Add -fvisibility=hidden to CFLAGS.
+ * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
+ include/freetype/config/ftconfig.h (FT_EXPORT): Use visibility
+ attribute.
+
+2018-01-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Better protection against invalid VF data.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5739
+
+ Bug introduced in commit 08cd62deedefe217f2ea50e392923ce8b5bc7ac7.
+
+ * src/truetype/ttgxvar.c (TT_Set_Var_Design): Always initialize
+ `normalizedcoords'.
+
+2018-01-27 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Ins_GETVARIATION): Avoid NULL reference.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5736
+
+2018-01-27 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (tt_set_mm_blend): Minor.
+
+2018-01-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Better trace VF instances.
+
+ * src/truetype/ttgxvar.c (ft_var_to_normalized): Don't emit number
+ of coordinates.
+ (TT_Get_MM_Var): Trace instance indices names.
+ (TT_Set_Var_Design): Updated.
+
+2018-01-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Beautify tracing of VF axis records.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Show axis records in a
+ table-like manner.
+
+2018-01-26 Ben Wagner <bungeman@google.com>
+
+ [truetype] Fix multiple calls of `FT_Get_MM_Var' (#52955).
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Set
+ `face->blend->num_axis' in case we have to initialize the
+ `face->blend'.
+
+2018-01-23 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [apinames] Anonymous version map for GNU linker.
+
+ * src/tools/apinames.c (PROGRAM_VERSION): Set to 0.3.
+ (OutputFormat): Add `OUTPUT_GNU_VERMAP'.
+ (names_dump): Handle it.
+ (usage): Updated.
+ (main): Handle new command line flag `-wL'.
+
+2018-01-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [unix] Call libtool to clean up.
+
+ * builds/unix/install.mk (clean_project_unix, distclean_project_unix):
+ Use libtool.
+ * builds/freetype.mk: Minor.
+
+2018-01-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftver.rc: Fix mingw-w64 compilation.
+
+2018-01-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Enable VERSIONINFO resource for Cygwin/MinGW.
+
+ * builds/unix/configure.raw: Check for resource compiler.
+ * builds/unix/unix-cc.in: Conditionally set up resource compiler.
+ * builds/freetype.mk: Add conditional rule for `ftver.rc'.
+ * src/base/ftver.rc: Copyright notice and year update.
+
+2018-01-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Move VERSIONINFO resource.
+
+ * builds/windows/vc2010/freetype.vcxproj: Updated.
+ * builds/windows/ftver.rc: Move file from here...
+ * src/base/ftver.rc: ... to here.
+
+2018-01-12 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Expand dllexport/dllimport to Cygwin/MinGW.
+
+ * include/freetype/config/ftconfig.h: Respect DLL_EXPORT,
+ s/_MSC_VER/_WIN32/.
+ * builds/unix/ftconfig.in: Replicate here.
+ * builds/vms/ftconfig.h: Replicate here.
+
+2018-01-12 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [build] Improve and document MSVC build.
+
+ * include/freetype/config/ftconfig.h: Guard dllexport/dllimport
+ attributes with _DLL and FT2_DLLIMPORT.
+ * builds/windows/vc2010/index.html: Update documentation.
+
+2018-01-10 Steve Robinson <ssrobins@gmail.com>
+
+ * CMakeLists.txt [win32]: Suppress warnings for POSIX functions.
+
+2018-01-10 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Correctly handle Flex features (#52846).
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdVMOVETO,
+ cf2_cmdHMOVETO>: Do not move if doing Flex.
+
+2018-01-09 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * builds/windows/vc2010/freetype.sln: Synchronize with the project.
+
+2018-01-08 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.9 released.
+ =======================
+
+
+ Tag sources with `VER-2-9'.
+
+ * docs/VERSION.TXT: Add entry for version 2.9.
+
+ * 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/windows/ftver.rc,
+ 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.8.1/2.9/, s/281/29/.
+
+ * include/freetype/freetype.h (FREETYPE_MINOR): Set to 9.
+ (FREETYPE_PATCH): Set to 0.
+
+ * builds/unix/configure.raw (version_info): Set to 22:0:16.
+ * CMakeLists.txt (VERSION_PATCH): Set to 0.
+
+2018-01-07 Werner Lemberg <wl@gnu.org>
+
+ Add check for librt, needed for `ftbench' (#52824).
+
+ * builds/unix/configure.raw (LIB_CLOCK_GETTIME): Define; this will
+ hold `-lrt' if necessary.
+
+ * builds/unix/unix-cc.in (LIB_CLOCK_GETTIME): New variable.
+
+2018-01-07 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Fix Type 1 glyphs with too many stem hints.
+
+ According to the CFF specification, charstrings can have up to 96 stem
+ hints. Due to hint replacement routines in Type 1 charstrings, some
+ glyphs are rejected by the Adobe engine, which implements the above
+ limit. This fix turns off hinting for such glyphs.
+
+ * src/psaux/pshints.c (cf2_hintmap_build): Reset the error from calling
+ `cf2_hintmask_setAll' on a problematic Type 1 charstring and turn off
+ hinting.
+
+2018-01-06 Werner Lemberg <wl@gnu.org>
+
+ Add `FT_Done_MM_Var'.
+
+ This is necessary in case the application's memory routines differ
+ from FreeType. A typical example is a Python application on Windows
+ that calls FreeType compiled as a DLL via the `ctypes' interface.
+
+ * include/freetype/ftmm.h, src/base/ftmm.c (FT_Done_MM_Var): Declare
+ and define.
* docs/CHANGES: Updated.
-2015-03-06 Werner Lemberg <wl@gnu.org>
+2018-01-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Round offsets of glyph components only if hinting is on.
+
+ * src/truetype/ttgload.c (TT_Process_Composite_Component): Implement
+ it.
+
+2018-01-03 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (ft_var_to_design): Remove dead code.
+
+ This is a better fix than the previous commit, which is now
+ reverted.
+
+2018-01-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Move internal LCD-related declarations.
+
+ * include/freetype/ftlcdfil.h (ft_lcd_padding, ft_lcd_filter_fir):
+ Move from here...
+ * include/freetype/internal/ftobjs.h: ... to here.
+
+2018-01-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF)
+ [_MSC_VER]: Limit Visual C++ attributes.
+
+2018-01-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Make blend/design coordinate round-tripping work.
+
+ Behdad reported that setting blend coordinates, then getting design
+ coordinates did incorrectly return the default instance's
+ coordinates.
+
+ * src/truetype/ttgxvar.c (tt_set_mm_blend): Fix it.
+
+2017-12-31 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Fix endless loop.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4838
+
+2017-12-31 Werner Lemberg <wl@gnu.org>
+
+ Synchronize other Windows project files.
+
+ * builds/windows/*: Add missing files.
+
+2017-12-31 Werner Lemberg <wl@gnu.org>
+
+ Update Visual C 2010 project files.
+
+ Problem reported by Hin-Tak.
+
+ * builds/windows/vc2010/freetype.vcxproj: Add files `ftbdf.c' and
+ `ftcid.c'.
+ Sort entries.
+ * builds/windows/vc2010/freetype.vcxproj.filter: Ditto.
+ Fix members of `FT_MODULE' group.
+
+2017-12-30 Werner Lemberg <wl@gnu.org>
+
+ * builds/vms/ftconfig.h: Synchronize with unix `ftconfig.in' file.
+
+2017-12-28 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ftconfig.in: Synchronize with main `ftconfig.h' file.
+
+ Reported by Nikolaus.
+
+2017-12-27 Werner Lemberg <wl@gnu.org>
+
+ Fix compiler warnings.
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Make `pitch' and
+ `new_pitch' unsigned.
+
+ * src/base/ftpsprop.c: Include FT_INTERNAL_POSTSCRIPT_PROPS_H.
+
+2017-12-27 Werner Lemberg <wl@gnu.org>
+
+ Fixes for `make multi'.
+
+ * include/freetype/internal/ftpsprop.h: Use `FT_BASE_CALLBACK'.
+ (ps_property_get): Harmonize declaration with corresponding
+ function typedef.
+
+ * include/freety[e/internal/fttrace.h: Add `trace_psprops'.
+
+ * src/base/ftpsprop.c: Include necessary header files.
+ (FT_COMPONENT): Define.
+ (ps_property_set): Tag with `FT_BASE_CALLBACK_DEF'.
+ (ps_property_get): Tag with `FT_BASE_CALLBACK_DEF'.
+ Harmonize declaration with corresponding function typedef.
+
+2017-12-27 Werner Lemberg <wl@gnu.org>
+
+ Provide support for intra-module callback functions.
+
+ This is needed especially for `make multi' with C++.
+
+ * include/freetype/config/ftconfig.h (FT_BASE_CALLBACK,
+ FT_BASE_CALLBACK_DEF): New macros.
+
+2017-12-25 Ewald Hew <ewaldhew@gmail.com>
+
+ Move PostScript drivers' property handlers to `base'.
+
+ This reduces the amount of duplicated code across PostScript
+ drivers.
+
+ * src/cff/cffdrivr.c, src/cid/cidriver.c, src/type1/t1driver.c
+ ({cff,cid,t1}_property_{get,set}): Moved to...
+ * include/freetype/internal/ftpsprop.h: ...this new file.
+ (ps_property_{get,set}): New functions to replace moved ones.
+
+ * src/base/ftpsprop.c: New file that implements above functions.
+
+ * include/freetype/internal/internal.h
+ (FT_INTERNAL_POSTSCRIPT_PROPS_H): New macro.
+
+ * src/cff/cffdrivr.c, src/cid/cidriver.c, src/type1/t1driver.c:
+ Updated.
+
+ * src/base/Jamfile, src/base/rules.mk (BASE_SRC), src/base/ftbase.c:
+ Updated.
+
+2017-12-20 Werner Lemberg <wl@gnu.org>
+
+ Speed up FT_Set_Var_{Design,Blend}_Coordinates if curr == new.
+
+ We exit early if the current design or blend coordinates are
+ identical to the new ones.
+
+ * src/truetype/ttgxvar.c (tt_set_mm_blend, TT_Set_Var_Design):
+ Implement it, returning internal error code -1 if there will be no
+ variation change.
+
+ * src/type1/t1load.c (t1_set_mm_blend): Ditto.
+
+ * src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
+ FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates): Updated.
+
+2017-12-18 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix charmap type 2 iterator (#52646).
+
+ The subsetted demo font of the report that exhibits the bug has a
+ very unusual type 2 cmap for Unicode(!): It contains only two
+ sub-headers, one for one-byte characters (covering the range 0x20 to
+ 0xFA), and a second one for higher byte 0x01 (just for character
+ code U+0131).
+
+ Before this commit, the iterator wasn't able to correctly handle a
+ sub-header for higher byte 0x01.
+
+ * src/sfnt/ttcmap.c (tt_cmap2_char_next): Fix character increment
+ for outer loop.
+
+2017-12-18 Matthias Clasen <matthias.clasen@gmail.com>
+
+ [truetype] Fix clamping, minor tracing code beautification.
+
+ * src/truetype/ttgxvar.c (ft_var_to_normalized): Trace number of
+ design coordinates.
+ Use clamped value.
+
+2017-12-18 Werner Lemberg <wl@gnu.org>
+
+ * src/*/*: Only use `ft_' and `FT_' variants of stdc library stuff.
+
+2017-12-18 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (tt_face_vary_cvt): Add size guard (#52688).
+
+2017-12-18 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix previous commit.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Correctly handle
+ unhinted phantom points, which must be properly scaled.
+
+2017-12-18 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Don't apply HVAR and VVAR deltas twice (#52683).
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Always adjust
+ `pp1' to `pp4', except if we have an HVAR and/or VVAR table.
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Handle
+ alternative code branch identically w.r.t. presence of an HVAR
+ and/or VVAR table.
+
+2017-12-17 Jonathan Kew <jfkthame@gmail.com>
+
+ [truetype] Correctly handle variation font phantom points (#52683).
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix phantom
+ point indices.
+
+2017-12-17 Jonathan Kew <jfkthame@gmail.com>
+
+ Fix incorrect advance width scaling (#52683).
+
+ * src/base/ftadvance.c (FT_Get_Advances): Always respect the
+ FT_LOAD_NO_SCALE flag if present.
+
+2017-12-16 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * builds/windows/vc2010/freetype.vcxproj: AfterBuild copy.
+ * objs/.gitignore: Ignore almost everything.
+
+2017-12-11 Werner Lemberg <wl@gnu.org>
+
+ Fix compiler warning (#52640).
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Remove unused
+ variable.
+
+2017-12-08 Azzuro <azzuro@team-mediaportal.com>
+
+ * builds/windows/vc2010/freetype.vcxproj: Adjust output directory.
+
+ This allows builds with different configurations in parallel.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ Fix `make setup dos', second try (#52622).
+
+ * builds/detect.mk (dos_setup): Don't use literal `>' character at
+ all. Mixing the different escaping rules from make, dos, and
+ windows is too fragile.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Fix code section parsing.
+
+ Stuff like
+
+ {
+ <bla>
+ }
+
+ confused the parser, which incorrectly treated `<bla>' as a markup
+ tag.
+
+ * src/tools/docmaker/content.py (ContentProcessor::process_content):
+ Apply `re_markup_tags' only outside of code sections.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ New `ftdriver.h' file, covering all driver modules.
+
+ This reduces redundancy and increases synergy; it also reduces the
+ number of header files.
+
+ * include/freetype/config/ftheader.h (FT_DRIVER_H): New macro.
+ (FT_AUTOHINTER_H, FT_CFF_DRIVER_H, FT_TRUETYPE_DRIVER_H,
+ FT_PCF_DRIVER_H, FT_TYPE1_DRIVER_H): Make them aliases to
+ FT_DRIVER_H.
+
+ * include/freetype/ftautoh.h, include/freetype/ftcffdrv.h,
+ include/freetype/ftpcfdrv.h, include/freetype/ftt1drv.h,
+ include/freetype/ftttdrv.h: Replaced with...
+ * include/freetype/ftdriver.h: ...this new file.
+ (FT_CFF_HINTING_ADOBE, FT_T1_HINTING_ADOBE): Renamed to...
+ (FT_HINTING_ADOBE): ... this new macro.
+ (FT_CFF_HINTING_FREETYPE, FT_T1_HINTING_FREETYPE): Renamed to...
+ (FT_HINTING_FREETYPE): ... this new macro.
+
+ * src/*/*: Updated accordingly.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ Move `ftdriver.h' to `ftdrv.h'.
+
+ * include/freetype/internal/ftdriver.h: Renamed to...
+ * include/freetype/internal/ftdrv.h: ... this name.
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_DRIVER_H):
+ Updated.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ Fix access to uninitalized memory (#52613).
+
+ Also reported as
+
+ https://bugs.chromium.org/p/chromium/issues/detail?id=791317
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): If increasing the
+ bitmap size needs a larger bitmap buffer, assure that the new memory
+ areas are initialized also.
+
+2017-12-08 Werner Lemberg <wl@gnu.org>
+
+ Fix `make setup dos' (#52622).
+
+ * builds/detect.mk (dos_setup): Properly escape literal `>'
+ character.
+
+2017-12-07 Werner Lemberg <wl@gnu.org>
+
+ Fix C++ compilation.
+
+ * src/psaux/psauxmod.h: Use FT_CALLBACK_TABLE macro where necessary.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Fix warning.
+
+2017-12-07 Werner Lemberg <wl@gnu.org>
+
+ Fix `make multi'.
+
+ * include/freetype/internal/fttrace.h: Remove unused tracing macros.
+ s/pshalgo2/pshalgo/.
+ Add `trace_cffdecode'.
+ * src/pshinter/pshalgo.c (FT_COMPONENT): Updated.
+
+ * src/cff/cffload.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+ * src/cff/cffobjs.c: Include FT_SERVICE_METRICS_VARIATIONS_H and
+ FT_SERVICE_CFF_TABLE_LOAD_H.
+
+ * src/cid/cidriver.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+
+ * src/psaux/cffdecode.c: Include FT_FREETYPE_H and
+ FT_INTERNAL_DEBUG_H.
+ (FT_COMPONENT): Define.
+ * src/psaux/cffdecode.h: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+ * src/psaux/psauxmod.h: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+ Declare `cff_builder_funcs' and `ps_builder_funcs'.
+ * src/psaux/psft.c: Include `psobjs.h' and `cffdecode.h'.
+ * src/psaux/psobjs.c : Include `psauxmod.h'.
+
+2017-12-07 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/config/ftheader.h: Some clean-up.
+
+ This commit removes documentation of deprecated macros and does some
+ minor streamlining.
+
+2017-12-06 Werner Lemberg <wl@gnu.org>
+
+ * builds/symbian/bld.inf: Updated.
+
+2017-12-06 Werner Lemberg <wl@gnu.org>
+
+ New header file `ftparams.h' that collects all parameter tags.
+
+ * include/freetype/config/ftheader.h (FT_PARAMETER_TAGS_H): New
+ macro.
+ (FT_TRUETYPE_UNPATENTED_H, FT_UNPATENTED_HINTING_H): Define it to
+ `ftparams.h'.
+
+ * include/freetype/ftautoh.h, include/freetype/ftcffdrv.h,
+ include/freetype/ftincrem.h, include/freetype/ftlcdfil.h,
+ include/freetype/ftsnames.h, include/freetype/ftt1drv.h: Include
+ FT_PARAMETER_TAGS_H.
+ Move FT_PARAM_TAG_XXX definitions to...
+ * include/freetype/ftparams.h: ...this new file.
+
+ * include/freetype/ttunpat.h: Remove. No longer needed.
+
+2017-12-05 Werner Lemberg <wl@gnu.org>
+
+ Improve tracing messages by using singular and plural forms.
+
+ * src/*/*.c: Implement it.
+
+2017-12-04 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Allow shared points in `cvar' table (#52532).
+
+ * src/truetype/ttgxvar.c (tt_face_vary_cvt): Implement it by copying
+ and adjusting the corresponding code from
+ `TT_Vary_Apply_Glyph_Deltas'.
+
+2017-11-28 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Improving tracing of composite glyphs.
+
+ * src/truetype/ttgload.c (TT_Load_Composite_Glyph)
+ [FT_DEBUG_LEVEL_TRACE]: Show composite glyph information.
+
+2017-11-27 Werner Lemberg <wl@gnu.org>
+
+ [type1] Allow (again) `/Encoding' with >256 elements (#52464).
+
+ In version 2.6.1, this has been disallowed to better reject
+ malformed fonts; however, this restriction was too strong. This
+ time, we only take the first 256 elements into account, since
+ encoding arrays are always accessed with a 8bit integer, according
+ to the PostScript Language Reference.
+
+ * src/type1/t1load.c (parse_encoding): Implement it.
+
+2017-11-27 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+ Fix last commit (#52522).
+
+ * builds/freetype.mk: Set `FT_OPTION_H' and `FTOPTION_FLAG'
+ properly if we have `ftoption.h' in `BUILD_DIR'.
+
+2017-11-24 Werner Lemberg <wl@gnu.org>
+
+ [unix] Install a massaged `ftoption.h' file (#51780).
+
+ * builds/unix/configure.raw (ftoption_set, ftoption_unset): New
+ auxiliary functions to construct...
+ (FTOPTION_H_SED): ... this new variable.
+ Apply it as a sed argument while copying `ftoption.h' to the
+ `builds/unix' directory (using `AC_CONFIG_FILES').
+ Simplify code of test that checks cpp's computation of bit length
+ (the test previously created an empty `ftoption.h' file and deleted
+ it immediately afterwards); without this change, it can happen on my
+ GNU/Linux box that `configure's execution of `config.status' doesn't
+ create `ftoption.h' (no idea why this happens).
+
+ * builds/unix/install.mk (install): Install
+ `builds/unix/ftoption.h'.
+
+ * builds/unix/unix-def.in (DISTCLEAN): Updated.
+
+ * builds/unix/.gitignore: Updated.
+
+2017-11-23 Tor Andersson <tor.andersson@artifex.com>
+
+ Silence unused function warnings (#52465).
+
+ Some static function declarations cause unused function warnings if
+ certain config options are turned off via `ftoption.h'.
+
+ * src/base/ftbase.h, src/base/ftrfork.c, src/sfnt/ttbdf.h,
+ src/truetype/ttgxvar.h: Add #ifdef guards around these sections.
+
+2017-11-22 Ewald Hew <ewaldhew@gmail.com>
+
+ * src/psaux/psft.c (cf2_setGlyphWidth): Check format before setting.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4377
+
+2017-11-22 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Fix CFF advance widths. (#52466)
+
+ Glyph advance widths were being written to the new `PS_Decoder' but not
+ saved to the underlying format specific decoder. This caused pure CFF
+ fonts to have bad advance width.
+
+ * include/freetype/internal/psaux.h (PS_Decoder): Change `glyph_width'
+ field to pointer.
+ Remove unused fields.
+ * src/psaux/psobjs.c (ps_decoder_init): Change `glyph_width' from copy
+ to reference.
+ Remove unused.
+ * src/psaux/psft.c (cf2_setGlyphWidth): Update code.
+
+2017-11-15 Vlad Tsyrklevich <vtsyrklevich@google.com>
+
+ * include/freetype/ftrender.h: Fix `FT_Renderer_RenderFunc' type.
+
+2017-11-14 Nikolaus Waxweiler <madigens@gmail.com>
+
+ Use Adobe hinting engine for `light' hinting of both CFF and Type 1.
+
+ Since Ewald Hew factored the Adobe hinting engine out of the CFF
+ driver code, we can now use it on Type 1 (and CID) font formats, as
+ both have the same hinting philosophy.
+
+ This change activates the Adobe hinter when in LIGHT mode, and
+ therefore always unless explicitly asking for the auto-hinter. This
+ makes LIGHT behavior consistent with CFF fonts. As of this commit,
+ the hinting engine table looks as follows.
+
+ LIGHT NORMAL
+ -------------------------
+ TrueType Auto v40
+ CFF Adobe Adobe
+ Type 1 Adobe Adobe
+
+2017-11-10 Yuri Levchenko <yuri_levchenko@boolat.com>
+
+ * CMakeLists.txt: Add `DISABLE_FORCE_DEBUG_PREFIX' option.
+
+2017-11-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Relocate condition.
+
+2017-11-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_set_cell): Fix uninitialized variables.
+
+2017-11-03 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Fix PostScript interpreter rewinding in Type 1 mode. (#52251)
+
+ The interpreter in Type 1 mode rewinds the charstring after collecting
+ all hints for building the initial hintmap (commit d52dd7f). However,
+ some charstrings use `endchar' in a final subroutine call, rewinding to
+ the start of that subroutine, and only a small section of the actual
+ glyph is drawn.
+
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdENDCHAR>:
+ Ensure we are on the top level charstring before rewinding.
+
+2017-11-03 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [truetype] Add more tricky fonts.
+
+ See the report by Yang Yinsen.
+ https://lists.gnu.org/archive/html/freetype-devel/2017-11/msg00000.html
+
+ * src/truetype/ttobjs.c (trick_names): Add `DFGothic-EB',
+ `DFGyoSho-Lt', `DFHSGothic-W5', `DFHSMincho-W3' and `DFHSMincho-W7'.
+ (tt_check_trickyness_sfnt_ids): Add checksums for DFGothic-EB,
+ DFGyoSho-Lt, DFHSGothic-W5, DFHSMincho-W3 and DFHSMincho-W7. Also
+ add checksums for DLCLiShu and DLCHayBold which their family names
+ were already listed but their checksums were previously unknown.
+
+2017-11-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Fix complex rendering at high ppem.
+
+ We used to split large glyphs into horizontal bands and continue
+ bisecting them still horizontally if that was not enough. This is
+ guaranteed to fail when a single scanline cannot fit into the
+ rendering memory pool. Now we bisect the bands vertically so that
+ the smallest unit is a column of the band height, which is guranteed
+ to fit into memory.
+
+ * src/smooth/ftgrays.c (gray_convert_glyph): Implement it.
+
+2017-10-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Improve complex rendering at high ppem.
+
+ At large sizes almost but not exactly horizontal segments can quickly
+ drain the rendering pool. This patch at least avoids filling the pool
+ with trivial cells. Beyond this, we can only increase the pool size.
+
+ Reported, analyzed, and tested by Colin Fahey.
+
+ * src/smooth/ftgrays.c (gray_set_cell): Do not record trivial cells.
+
+2017-10-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Improve tracing in FT_Load_Glyph, FT_*_Size.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Tag tracing messages with
+ function name, glyph index, and load flags.
+ (FT_Select_Metrics, FT_Request_Metrics): Remove all tracing.
+ (FT_Select_Size, FT_Request_Size): Improve tracing.
+
+2017-10-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Improve tracing in FT_Render_Glyph.
+
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal): Add total coverage
+ calculations and downgrade Netpbm dump to bitmap:7.
+
+2017-10-15 Ewald Hew <ewaldhew@gmail.com>
+
+ [cff] Fix segfault on missing `psaux' (#52218)
+
+ * src/cff/cffload.c (cff_done_blend): Add a check for possible nullptr.
+
+ * modules.cfg: Update dependency list.
+
+2017-10-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base, cff] Fix MSVC warnings.
+
+ * src/base/ftobjs.c (FT_New_Library): C4702: unreachable code.
+ (ft_glyphslot_preset_bitmap): C4244: possible loss of data.
+ * src/cff/cffload.c (cff_blend_doBlend): C4244: possible loss of data.
+ Turn `sum' into unsigned.
+
+2017-10-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Netpbm image tracing.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Trace bitmap size.
+ (FT_Render_Glyph_Internal): Trace bitmap in Netpbm format.
+
+ * src/smooth/ftgrays.c (gray_sweep): Sweep remnants of span tracing.
+
+2017-10-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * builds/windows/ftdebug.c (FT_Message): Print to stderr.
+ * builds/wince/ftdebug.c (FT_Message): Ditto.
+
+2017-10-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [afshaper] Delay creating `hb_set' objects until needed.
+
+ In runs on Noto Naskh Arabic, this results in 89 sets created
+ instead of 340 before. Makes auto-hinter setup with HarfBuzz
+ enabled 20% to 30% faster.
+
+ * src/autofit/afshaper.c (af_shaper_get_coverage): Implement it.
+
+2017-10-12 Ewald Hew <ewaldhew@gmail.com>
+
+ [type1, cid] Add hinting engine switch.
+
+ Implement property service in `type1' and `cid' drivers to allow
+ switching between FreeType or Adobe hinting engine when both are
+ available.
+
+ * src/cid/cidriver.c (cid_property_{set,get}, cid_services),
+ src/type1/t1driver.c (t1_property_{set,get}, t1_services): Add
+ Properties service.
+
+ * src/cid/cidobjs.c (cid_driver_init), src/type1/t1objs.c
+ (T1_Driver_Init): Add default property values.
+
+2017-10-12 Ewald Hew <ewaldhew@gmail.com>
+
+ Add T1_CONFIG_OPTION_OLD_ENGINE configuration option.
+
+ This controls whether the old Type 1 engine gets compiled into FreeType.
+ It is disabled by default.
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (T1_CONFIG_OPTION_OLD_ENGINE): New macro.
+
+ * include/freetype/internal/psaux.h (PS_Decoder): Remove unused field.
+ * include/freetype/internal/psaux.h, src/cid/cidgload.c
+ (cid_load_glyph), src/psaux/psauxmod.c, src/psaux/psobjs.c
+ (ps_builder_add_point), src/psaux/t1decode.c
+ (t1_lookup_glyph_by_stdcharcode, t1_decoder_parse_glyph,
+ t1operator_seac, t1_decoder_parse_charstrings), src/psaux/t1decode.h,
+ src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Surround
+ relevant code with macro.
+ Minor code changes.
+
+2017-10-12 Ewald Hew <ewaldhew@gmail.com>
+
+ Extract width parsing from Type 1 parser.
+
+ Duplicate the fast advance width calculations from the old parser.
+ This is to facilitate adding options for compiling out the old parser.
+
+ * src/psaux/t1decode.{c,h} (t1_decoder_parse_metrics): New function.
+ * include/freetype/internal/psaux.h (T1_Decoder_Funcs): New entry
+ `parse_metrics'.
+ * src/psaux/psauxmod.c: Set the new entry.
+
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String),
+ src/cid/cidgload.c (cid_load_glyph): Separate
+ conditional for selecting engine.
+
+2017-10-09 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftoutln.c (FT_Outline_Translate): Fix integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/chromium/issues/detail?id=772775
+
+2017-10-08 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3579
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Adjust behaviour of PS font names for variation fonts.
+
+ * src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Use a named instance's
+ PS name only if no variation is applied.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Adjust behaviour of named instances.
+
+ This commit completely separates the interaction between named
+ instances and variation functions. In particular, resetting the
+ variation returns to the current named instance (if set) and not to
+ the base font.
+
+ As a side effect, variation functions no longer change the named
+ instance index.
+
+ * src/cff/cffobjs.c (cff_face_init): Use MM service's `set_instance'
+ function.
+ Also apply `MVAR' table to named instances.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Add cast.
+ (tt_set_mm_blend): No longer check whether requested variation
+ coincides with a named instance.
+ (TT_Set_Var_Design): Use current named instance for default
+ coordinates.
+ * src/truetype/ttobjs.c (tt_face_init): Use `TT_Set_Named_Instance'.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ Make `FT_Set_Named_Instance' work.
+
+ * src/cff/cffdrivr.c (cff_set_instance): New function.
+ (cff_service_multi_masters): Register it.
+
+ * src/truetype/ttgxvar.c (TT_Set_Named_Instance): New function.
+ * src/truetype/ttgxvar.h: Updated.
+ * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Register
+ it.
+
+ * src/type1/t1load.c (T1_Reset_MM_Blend): New function.
+ * src/type1/t1load.h: Updated.
+ * src/type1/t1driver.c (t1_service_multi_masters): Register it.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ Make `FT_FACE_FLAG_VARIATION' work.
+
+ * include/freetype/internal/tttypes.h (TT_Face): Remove
+ `is_default_instance'; this can be replaced with a combination of
+ `FT_IS_VARIATION' and `FT_IS_INSTANCE'.
+
+ * src/cff/cffdrivr.c (cff_get_advances): Updated.
+
+ * src/sfnt/sfdriver.c (sfnt_get_ps_name), src/sfnt/sfobjs.c
+ (sfnt_init_face): Updated.
+
+ * src/truetype/ttdriver.c (tt_get_advances), src/truetype/ttgload.c
+ (TT_Process_Simple_Glyph, load_truetype_glyph, IS_DEFAULT_INSTANCE),
+ src/truetype/ttgxvar.c (tt_set_mm_blend): Updated.
+ * src/truetype/ttgxvar.c (TT_Set_MM_Blend, TT_Set_Var_Design):
+ Handle `FT_FACE_FLAG_VARIATION'.
+
+ * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design): Handle
+ `FT_FACE_FLAG_VARIATION'.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ New function `FT_Set_Named_Instance'.
+
+ No effect yet.
+
+ * src/base/ftmm.c (FT_Set_Named_Instance): New function.
+
+ * include/freetype/ftmm.h: Updated.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ Add macros for checking whether a font variation is active.
+
+ * include/freetype/freetype.h (FT_FACE_FLAG_VARIATION,
+ FT_IS_VARIATION): New macros.
+ No effect yet.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ Add framework for setting named instance in MM service.
+
+ * include/freetype/internal/services/svmm.h (FT_Set_Instance_Func):
+ New function typedef.
+ (MultiMasters): Add `set_instance' member.
+ (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
+
+ * src/cff/cffdrivr.c (cff_service_multi_masters),
+ src/truetype/ttdriver (tt_service_gx_multi_masters),
+ src/type1/t1driver.c (t1_service_multi_masters): Updated.
+
+2017-10-07 Werner Lemberg <wl@gnu.org>
+
+ [type1] Minor code shuffling.
+
+ * src/type1/t1load.c (T1_Set_MM_Blend): Make it a wrapper of...
+ (t1_set_mm_blend): ...this new function.
+ (T1_Set_MM_Design): Use `t1_set_mm_blend'.
+
+2017-10-05 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Fix integer
+ overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3539
+
+2017-10-05 Werner Lemberg <wl@gnu.org>
+
+ Fix compiler warnings.
+
+ * src/cff/cffdrivr.c (cff_ps_get_font_extra): Avoid code that relies
+ on numeric overflow.
+ Add cast.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Fix variable
+ types, add cast.
+
+2017-10-04 John Tytgat <John.Tytgat@esko.com>
+
+ [cff] Add support for `FSType'.
+
+ * include/freetype/internal/cfftypes.h (CFF_FontRec): Add
+ `font_extra' entry.
+
+ * src/cff/cffdrivr.c (cff_ps_get_font_extra): New function to
+ retrieve FSType info from the embedded PostScript data.
+ (cff_service_ps_info): Register function.
+
+ * src/cff/cffload.c (cff_font_done): Free `font_extra'.
+
+2017-09-30 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Signedness fixes in bitmap presetting.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3514.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Exlicitly signed height.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Explicitly unsigned
+ subtraction.
+
+2017-09-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Bitmap metrics presetting [2/2].
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Preset the bitmap metrics when
+ appropriate but `FT_Render_Glyph' is not called.
+ * include/freetype/freetype.h (FT_GlyphSlotRec): Document the change.
+
+2017-09-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth, raster] Miscellaneous cleanups.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Clean up the exit.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Reduce
+ translations and clean up the exit.
+ (ft_smooth_render_lcd, ft_smooth_render_lcd): Remove unused `error'.
+
+2017-09-28 Ben Wagner <bungeman@google.com>
+
+ [truetype] Really, really fix #52082.
+
+ * src/truetype/ttinterp.c (Ins_MDRP): Correct conditional.
+
+2017-09-28 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/psintrp.c (cf2_doStems): Fix integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3510
+
+2017-09-28 Ewald Hew <ewaldhew@gmail.com>
+
+ * src/cid/cidgload.c (cid_slot_load_glyph): Fix memory leak.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3489
+
+2017-09-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Bitmap metrics presetting [1/2].
+
+ This mainly just extracts the code for presetting the bitmap metrics
+ from the monochrome, grayscale, and LCD renderers into a separate
+ function.
+
+ * src/base/ftobjs.c (ft_glyphslot_preset_bitmap): New function that
+ calculates prospective bitmap metrics for the given rendering mode.
+ * include/freetype/internal/ftobjs.h (ft_glyphslot_preset_bitmap):
+ Declare it.
+
+ * src/base/ftlcdfil.c (ft_lcd_padding): New helper function that adds
+ padding to CBox taking into account pecularities of LCD rendering.
+ * include/freetype/ftlcdfil.h (ft_lcd_padding): Declare it.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Reworked to use
+ `ft_glyphslot_preset_bitmap'.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
+ (ft_smooth_render_lcd, ft_smooth_render_lcd): The pixel_mode setting
+ is moved to `ft_glyphslot_preset_bitmap'.
+
+2017-09-28 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Fix compiler warning.
+
+ * src/psaux/pshints.c (cf2_hintmap_dump): Add switch for tracing
+ code.
+
+2017-09-27 Werner Lemberg <wl@gnu.org>
* src/sfnt/ttload.c (tt_face_load_font_dir): Fix compiler warning.
- Found by Alexei.
+2017-09-25 Werner Lemberg <wl@gnu.org>
-2015-03-05 Alexei Podtelezhnikov <apodtele@gmail.com>
+ [psaux] Fix compiler warnings.
- * src/base/ftstroke.c: Simplify.
+ * src/psaux/psft.c (cf2_initLocalRegionBuffer): Remove redundant
+ test.
-2015-03-04 Werner Lemberg <wl@gnu.org>
+ * src/psaux/psintrp.c (cf2_interpT2CharString)
+ <cf2_escCALLOTHERSUBR>: Add casts.
- [truetype] Some fixes and code refactoring in `ttgxvar.c'.
+ * src/psaux/psobjs.c (ps_decoder_init): Add cast.
- * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Fix return value
- of `point_cnt' if two bytes are read.
- Use a more vertical coding style.
- (ft_var_readpackeddeltas): Use FT_UInt for `delta_cnt' parameter.
- Use a more vertical coding style.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
-2015-03-03 Werner Lemberg <wl@gnu.org>
+ [psaux] Minor fixes.
- [autofit] Fix Savannah bug #44241.
+ * include/freetype/internal/psaux.h, src/psaux/psobjs.{c,h}:
+ Rearrange `ps_builder_init' arguments to conventional order.
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Reject glyphs
- with less than 3 points.
+ * src/psaux/psft.c (cf2_decoder_parse_charstrings): Add a check and
+ notice for `SubFont' in Type 1 mode.
-2015-03-02 Werner Lemberg <wl@gnu.org>
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- Simplify `TYPEOF' macro.
+ [psaux] Move `psdecode' into `psobjs'.
- No need for two arguments.
+ As the former only contains a single procedure, move it into
+ `psobjs' for simplicity. Also change the parameter order to the
+ conventional one.
- * include/config/ftconfig.h, builds/unix/ftconfig.in,
- builds/vms/ftconfig.h (TYPEOF): Updated.
+ * src/psaux/psdecode.c (ps_decoder_init): Moved to...
+ * src/psaux/psobjs.c: ...Here.
+ * src/psaux/psdecode.h, src/psaux/psobjs.h: Ditto.
- * include/internal/ftobjs.h (FT_PAD_FLOOR, FT_PIX_FLOOR),
- src/autofit/afwarp.h (AF_WARPER_FLOOR): Updated.
+ * include/freetype/internal/psaux.h (PSAux_ServiceRec): Update
+ `ps_decoder_init' function signature.
-2015-03-01 Werner Lemberg <wl@gnu.org>
+ * src/cff/cffgload.c, src/cid/cidgload.c, src/type1/t1gload.c:
+ Update calls.
- Various compiler warning fixes for `make multi'.
+ * src/psaux/psaux.c, src/psaux/psauxmod.c: Update includes.
- * src/autofit/afcjk.c (af_cjk_hints_compute_blue_edges),
- src/autofit/aflatin.c (af_latin_hint_compute_blue_edges,
- af_latin_hint_edges), src/autofit/aflatin2.c
- (af_latin2_hints_compute_blue_edges, af_latin2_hint_edges): Declare
- as `static'.
+ * src/psaux/Jamfile (_sources), src/psaux/rules.mk (PSAUX_DRV_SRC):
+ Update file references.
- * src/cache/ftccmap.c (FTC_CMAP_QUERY_HASH, FTC_CMAP_NODE_HASH):
- Removed. Unused.
- * src/cache/ftcimage.c: Include FT_INTERNAL_OBJECTS_H.
- * src/cache/ftcmanag.c (FTC_LRU_GET_MANAGER): Removed. Unused.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- * src/cff/cf2intrp.c: Include `cf2intrp.h'.
- * src/cff/cffdrivr.c (PAIR_TAG): Removed. Unused.
+ [psaux] Fix Type 1 hinting.
- * src/gzip/ftgzip.c (NO_DUMMY_DECL): Removed. Unused.
+ Type 1 hinting breaks sometimes when mid-charstring hints should
+ have been in the initial hintmap. This fix adds a preprocessing
+ pass that reads all hints and builds the correct initial hintmap
+ first, before proceeding to build the glyph outline.
- * src/psaux/afmparse.c (afm_parser_read_int): Declare as `static'.
+ * src/psaux/psintrp.c (cf2_interpT2CharString): New
+ `initial_map_ready' boolean flag.
+ Ignore outline commands and hint changes on first pass.
+ <cf2_cmdENDCHAR>: Add section to build hintmap and rewind.
- * src/pshinter/pshalgo.c (STRONGER, PSH_ZONE_MIN, PSH_ZONE_MAX):
- Removed. Unused.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- * src/raster/ftraster.c (Render_Glyph): Declare as `static'.
+ [psaux] Add tracing for hints.
- * src/sfnt/ttpost.c (load_format_20): Fix signedness warning.
+ * src/psaux/pshints.c (cf2_hintmap_dump): New function.
+ (cf2_hintmap_insertHint): Trace incoming and inserted hints.
+ (cf2_hintmap_build): Dump hintmap before and after hint adjustment.
- * src/truetype/ttdriver.c (PAIR_TAG): Removed. Unused.
- * src/truetype/ttsubpix.c (is_member_of_family_class,
- is_member_of_style_class): Declare as `static'.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Declare
- as `static'.
- * src/type1/t1load.c (mm_axis_unmap, mm_weights_unmap): Declare as
- `static'.
- (T1_FIELD_COUNT): Removed. Unused.
- * src/type1/t1parse.h (T1_Done_Table): Removed. Unused.
+ [psaux] Minor fixes.
- * src/type42/t42parse.c (T1_Done_Table): Removed. Unused.
+ * src/psaux/psintrp.c (cf2_interpT2CharString): Fix check for pop
+ results.
+ s/font->decoder/decoder/ where necessary.
+ <cf2_cmdHSTEM, cf2_cmdVSTEM, cf2_escHSTEM3, cf2_escVSTEM3>: Use
+ offset parameter in `cf2_doStems' instead of doing correction for
+ left-sidebearing.
-2015-02-25 Werner Lemberg <wl@gnu.org>
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- [psaux] Signedness fixes.
+ [cid] Use the new engine.
- * include/internal/psaux.h, src/psaux/afmparse.c,
- src/psaux/afmparse.h, src/psaux/psconv.c, src/psaux/psobjs.c,
- src/psaux/t1cmap.c, src/psaux/t1decode.c: Apply.
+ * src/cid/cidgload.c: Update includes.
+ (cid_load_glyph, cid_slot_load_glyph): Implement changes to glyph
+ loading code as with `type1' module.
-2015-02-25 Werner Lemberg <wl@gnu.org>
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- [otvalid] Signedness fixes.
+ [cid] Add Adobe engine configuration.
- * src/otvalid/otvcommn.c, src/otvalid/otvgdef.c,
- src/otvalid/otvgpos.c, src/otvalid/otvgsub.c, src/otvalid/otvmath.c:
- Apply.
+ This is similar to what was done in the `type1' module.
-2015-02-25 Werner Lemberg <wl@gnu.org>
+ * src/cid/cidriver.c (t1cid_driver_class): Update declaration.
+ * src/cid/cidobjs.c: Include FT_TYPE1_DRIVER_H.
+ (cid_driver_init): Update code.
- * src/bzip2/ftbzip2.c (ft_bzip2_alloc): Signedness fix.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
-2015-02-25 Werner Lemberg <wl@gnu.org>
+ [psaux] Change subfont synthesis for CID fonts.
- [lzw] Signedness fixes.
+ Change `t1_make_subfont' to take in the Private dict record as an
+ argument. This is because Type 1 and CID font records in FreeType
+ have this in different places.
- * src/lzw/ftzopen.c, src/lzw/ftzopen.h: Apply.
+ * src/psaux/psobjs.c (t1_make_subfont): Change `T1_Face' to
+ `FT_Face' so that CID is also accepted.
+ Take `PS_Private' as an argument and let caller figure out where the
+ Private dict actually is.
+ Update references.
-2015-02-25 Werner Lemberg <wl@gnu.org>
+ * include/freetype/internal/psaux.h, src/psaux/psobjs.h: Update
+ declaration.
- [gxvalid] Signedness fixes.
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Update
+ call.
- * src/gxvalid/gxvbsln.c, src/gxvalid/gxvcommn.c,
- src/gxvalid/gxvcommn.h, src/gxvalid/gxvjust.c,
- src/gxvalid/gxvkern.c, src/gxvalid/gxvlcar.c, src/gxvalid/gxvmort.c,
- src/gxvalid/gxvmort1.c, src/gxvalid/gxvmort2.c,
- src/gxvalid/gxvmorx.c, src/gxvalid/gxvmorx1.c,
- src/gxvalid/gxvmorx2.c, src/gxvalid/gxvopbd.c,
- src/gxvalid/gxvprop.c, src/gxvalid/gxvtrak.c: Apply.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
-2015-02-25 Werner Lemberg <wl@gnu.org>
+ [type1] Switch to Adobe engine.
- [cache] Signedness fixes.
+ * src/type1/t1objs.c (T1_Driver_Init): Set default to Adobe engine.
- * src/cache/ftcbasic.c, src/cache/ftccmap.c, src/cache/ftcimage.c,
- src/cache/ftcmanag.c, src/cache/ftcsbits.c: Apply.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
-2015-02-25 Werner Lemberg <wl@gnu.org>
+ [psaux] Extend Adobe interpreter (seac).
- Change dimension fields in `FTC_ImageTypeRec' to unsigned type.
+ This concludes the changes needed to add Type 1 support.
- This doesn't break ABI.
+ * src/psaux/psintrp.c: Update includes.
+ (cf2_interpT2CharString) <cf2_escSEAC>: Implement this similarly to
+ implied seac for CFF.
- * include/ftcache.h (FTC_ImageTypeRec): Use unsigned types for
- `width' and `height'.
+ * src/psaux/t1decode.c (t1_lookup_glyph_by_stdcharcode_ps): New
+ function to look up the glyph index.
- * docs/CHANGES: Document it.
+ * src/psaux/psft.c (cf2_getT1SeacComponent,
+ cf2_freeT1SeacComponent): New functions to get the charstrings for
+ seac components.
-2015-02-25 Werner Lemberg <wl@gnu.org>
+ * src/psaux/t1decode.h, src/psaux/psft.h: Update declarations.
- [cache] Don't use `labs'.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- This is the only place in FreeType where this function was used.
+ [psaux] Extend Adobe interpreter (flex in callothersubr).
- * include/config/ftstdlib.h (ft_labs): Remove.
+ * src/psaux/psintrp.c (cf2_interpT2CharString)
+ <cf2_escCALLOTHERSUBR>: Fix Flex feature handling (OtherSubrs 0, 1,
+ 2).
+ <cf2_cmdRMOVETO>: Do not actually move the `glyphPath' while doing
+ flex. This is to avoid closing the current contour.
- * src/cache/ftcimage.c (ftc_inode_weight): Replace `ft_labs' with
- `FT_ABS'.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
-2015-02-23 Werner Lemberg <wl@gnu.org>
+ [psaux] Extend Adobe interpreter (callothersubr).
- [cache] Replace `FT_PtrDist' with `FT_Offset'.
+ * src/psaux/psintrp.c (cf2_interpT2CharString)
+ <cf2_escCALLOTHERSUBR>: Copy code from
+ `t1_decoder_parse_charstrings' (in `t1decode.c').
+ OtherSubr 3 (change hints) should reset the hintmask, so that the
+ new hints are applied.
+ Fix function calls and stack access.
- * src/cache/ftccache.h (FTC_NodeRec): `FT_Offset' (a.k.a. `size_t')
- is a better choice for `hash' to hold a pointer than `FT_PtrDist'
- (a.k.a. `ptrdiff_t'), especially since the latter is signed,
- causing zillions of signedness warnings. [Note that `hash' was of
- type `FT_UInt32' before the change to `FT_PtrDist'.]
- Update all users.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- * src/cache/ftcbasic.c, src/cache/ftccache.c, src/cache/ftccmap.c,
- src/cache/ftcglyph.c, src/cache/ftcglyph.h: Updated.
+ [psaux] Extend Adobe interpreter (pop).
-2015-02-23 Werner Lemberg <wl@gnu.org>
+ * src/psaux/psintrp.c (cf2_interpT2CharString): Change how unhandled
+ OtherSubr results are stored. Implement the PostScript stack using
+ an array.
+ <cf2_escPOP>: Ensure that the stack is not cleared after getting
+ `OtherSubr' results.
+ Fix stack access.
- [smooth, raster] Re-enable standalone compilation.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- * src/raster/ftraster.c (FT_RENDER_POOL_SIZE, FT_MAX)
- [_STANDALONE_]: Define macros.
+ [psaux] Extend Adobe interpreter (callsubr).
- * src/smooth/ftgrays.c (FT_RENDER_POOL_SIZE, FT_MAX, FT_ABS,
- FT_HYPOT) [_STANDALONE_]: Define macros.
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdCALLSUBR>:
+ Type 1 mode.
-2015-02-22 Werner Lemberg <wl@gnu.org>
+ * src/psaux/psft.c (cf2_initLocalRegionBuffer): Add Type 1 mode.
- [smooth] Signedness fixes.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- * src/smooth/ftgrays.c, src/smooth/ftsmooth.c: Apply.
+ [psaux] Extend Adobe interpreter (div, four-byte numbers).
-2015-02-22 Werner Lemberg <wl@gnu.org>
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_escDIV>: Add
+ Type 1 mode. Type 1 requires large integers to be followed by
+ `div'; cf. `Adobe Type 1 Font Format', section 6.2.
+ <op == 255>: Push Type 1 four-byte numbers as `Int' always. This is
+ to ensure `div' and `callsubr' get values they can use.
- * src/raster/ftraster.c: Use the file's typedefs everywhere.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
-2015-02-22 Werner Lemberg <wl@gnu.org>
+ [psaux] Extend Adobe interpreter (hints).
- * src/sfnt/ttpost.c (load_format_20): Fix error tracing message.
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdHSTEM,
+ cf2_cmdVSTEM>: Add correction for left sidebearing in Type 1 mode.
+ Allow adding hints mid-charstring.
+ <cf2_escVSTEM3, cf2_escHSTEM3>: Translate into equivalent commands
+ for three normal stem hints. This requires some recalculation of
+ stem positions.
+ Correction for left sidebearing.
- Bug introduced 6 commits earlier.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
-2015-02-22 Werner Lemberg <wl@gnu.org>
+ [psaux] Extend Adobe interpreter (hsbw, sbw).
- [pshinter] Fix thinko.
+ * src/psaux/psintrp.c (cf2_doStems): `hsbw' or `sbw' must be the
+ first operation in a Type 1 charstring.
+ (cf2_interpT2CharString): Remove unused variables.
+ <cf2_cmdHMOVETO, cf2_cmdVMOVETO, cf2_cmdRMOVETO>: `hsbw' or `sbw'
+ must be the first operation in a Type 1 charstring.
+ <cf2_cmdHSBW, cf2_escSBW>: Fix data access and add correction for
+ left sidebearing.
- * src/pshinter/pshalgo.c (psh_glyph_find_strong_points): Correctly
- check `count'.
- Bug introduced two commits earlier.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
-2015-02-22 Werner Lemberg <wl@gnu.org>
+ [psaux] Extend Adobe interpreter (setcurrentpoint).
- [raster] Signedness fixes.
+ * src/psaux/psintrp.c (cf2_interpT2CharString)
+ <cf2_escSETCURRENTPT>: Fix stack access.
- * src/raster/ftraster.c, src/raster/ftrend1.c: Apply.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
-2015-02-22 Werner Lemberg <wl@gnu.org>
+ [psaux] Extend Adobe interpreter (closepath).
- [pshinter] Signedness fixes.
+ * src/psaux/psintrp.c (cf2_interpT2CharString) <c2f_cmdCLOSEPATH>:
+ Use the right builder function. We can use the `haveWidth' boolean
+ already present, instead of implementing `parse_state'.
- * src/pshinter/pshalgo.c, src/pshinter/pshglob.c,
- src/pshinter/pshrec.c: Apply.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
-2015-02-22 Werner Lemberg <wl@gnu.org>
+ [psaux] Add Type 1 operations to Adobe CFF interpreter.
- [pshinter] Use macros for (unsigned) flags, not enumerations.
+ The following Type 1 specific ops have been added (copied from
+ `t1decode'):
- * src/pshinter/pshalgo.h (PSH_Hint_Flags): Replace with macros.
- Updated.
- * src/pshinter/pshrec.h (PS_Hint_Flags): Replace with macros.
+ closepath
+ vstem3
+ hstem3
+ seac
+ sbw
+ callothersubr
+ pop
+ setcurrentpoint
+ hsbw
-2015-02-22 Werner Lemberg <wl@gnu.org>
+ The following require a Type 1 mode, because of differences in
+ specification:
- * src/pshinter/pshrec.c: Simplify.
- (ps_hints_open, ps_hints_stem): Remove switch statement.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Signedness fixes.
-
- * src/sfnt/pngshim.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap.c,
- src/sfnt/ttkern.c, src/sfnt/ttload.c, src/sfnt/ttpost.c,
- src/sfnt/ttsbit.c: Apply.
- * src/sfnt/sfdriver.c: Apply.
- (sfnt_get_ps_name): Simplify.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [bdf] Signedness fixes.
-
- * src/bdf/bdf.h, src/bdf/bdfdrivr.c, src/bdf/bdfdrivr.h,
- src/bdf/bdflib.c: Apply.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- * src/bdf/bdflib.c (_bdf_atous): New function.
- (_bdf_parse_glyphs, _bdf_parse_start): Use it.
-
-2015-02-22 Werner Lemberg <wl@gnu.org>
-
- [pcf] Signedness fixes.
-
- * src/pcf/pcf.h, src/pcf/pcfdrivr.c: Apply.
- * src/pcf/pcfread.c: Apply.
- (pcf_get_encodings): Ignore invalid negative encoding offsets.
-
-2015-02-21 Werner Lemberg <wl@gnu.org>
-
- * src/winfonts/winfnt.c: Signedness fixes.
-
-2015-02-21 Werner Lemberg <wl@gnu.org>
-
- [type42] Signedness fixes.
-
- * src/type42/t42parse.c, src/type42/t42parse.h,
- src/type42/t42types.h: Apply.
-
-2015-02-21 Werner Lemberg <wl@gnu.org>
-
- [pfr] Signedness fixes.
-
- * src/pfr/pfrdrivr.c, src/pfr/pfrgload.c, src/pfr/pfrload.c,
- src/pfr/pfrload.h, src/pfr/pfrobjs.c, src/pfr/pfrsbit.c,
- src/pfr/pfrtypes.h: Apply.
-
-2015-02-21 Werner Lemberg <wl@gnu.org>
-
- [cff] Minor signedness fixes related to last commit.
-
- * src/cff/cf2ft.c, src/cff/cf2intrp.c, src/cff/cffgload.c: Apply.
-
-2015-02-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Thinkos in bias handling.
-
- Only the final result is always positive.
-
- Bug introduced three commits earlier.
-
- * src/cff/cffgload.c, src/cff/cffgload.h: Apply.
-
-2015-02-20 Werner Lemberg <wl@gnu.org>
-
- [cid] Fix signedness issues and emit some better error codes.
-
- * src/cid/cidgload.c, src/cid/cidload.h, src/cid/cidobjs.c,
- src/cid/cidparse.h: Apply.
- * src/cid/cidload.c: Apply.
- (parse_fd_array): Reject negative values for number of dictionaries.
- * src/cid/cidparse.c: Apply.
- (cid_parser_new): Reject negative values for hex data length.
-
-2015-02-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Signedness fixes for new engine.
-
- * src/cff/cf2arrst.c, src/cff/cf2fixed.h, src/cff/cf2ft.c,
- src/cff/cf2ft.h, src/cff/cf2hints.c, src/cff/cf2intrp.c: Apply.
-
-2015-02-20 Werner Lemberg <wl@gnu.org>
-
- [cff] Signedness fixes for basic infrastructure and old engine.
-
- * include/internal/pshints.h, src/cff/cffdrivr.c,
- src/cff/cffgload.c, src/cff/cffgload.h, src/cff/cffload.c,
- src/cff/cffobjs.c, src/cff/cffparse.c, src/pshinter/pshrec.c: Apply.
-
-2015-02-19 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Ignore `countSizePairs'.
-
- This is hard-coded to value 2 in `fvar' version 1.0 (and no newer
- version exists), but some fonts set it incorrectly.
-
- Problem reported by Adam Twardoch <adam@fontlab.com>.
-
-2015-02-19 Werner Lemberg <wl@gnu.org>
-
- [cff] Emit better error code for invalid private dict size.
-
- * src/cff/cffparse.c (cff_parse_private_dict): Reject negative
- values for size and offset.
-
-2015-02-19 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix signedness issues.
-
- * src/autofit/afangles.c, src/autofit/afcjk.c,
- src/autofit/afglobal.c, src/autofit/afhints.c,
- src/autofit/aflatin.c, src/autofit/aflatin2.c, src/autofit/afwarp.c,
- src/autofit/hbshim.c: Apply.
-
-2015-02-19 Werner Lemberg <wl@gnu.org>
-
- [autofit] Use macros for (unsigned) flags, not enumerations.
-
- This harmonizes with other code in FreeType (and reduces the number
- of necessary casts to avoid compiler warnings).
-
- * src/autofit/afblue.hin: Make flag macros unsigned.
- * src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afcjk.h: Replace flag enumeration with macros.
- * src/autofit/afcjk.c: Updated.
-
- * src/autofit/afhints.h (AF_Flags, AF_Edge_Flags): Replace with
- macros.
- * src/autofit/afhints.c: Updated.
-
- * src/autofit/aflatin.h: Replace flag enumerations with macros.
- * src/autofit/aflatin.c, src/autofit/aflatin2.c: Updated.
-
- * src/autofit/aftypes.h (AF_ScalerFlags): Replace with macros.
-
-2015-02-18 Werner Lemberg <wl@gnu.org>
-
- [type1] Fix signedness issues.
-
- * include/internal/psaux.h, include/internal/t1types.h,
- src/psaux/psobjs.c, src/psaux/psobjs.h, src/psaux/t1decode.c,
- src/type1/t1gload.c, src/type1/t1load.c, src/type1/t1parse.c: Apply.
-
-2015-02-18 Werner Lemberg <wl@gnu.org>
-
- [psaux, type1] Fix minor AFM issues.
-
- * include/internal/t1types.h (AFM_KernPairRec): Make indices
- unsigned.
- Update users.
- (AFM_FontInfoRec): Make element counters unsigned.
- Update users.
- * src/psaux/afmparse.h (AFM_ValueRec): Add union member for unsigned
- int.
-
- * src/psaux/afmparse.c (afm_parse_track_kern, afm_parse_kern_pairs):
- Reject negative values for number of kerning elements.
-
- * src/type1/t1afm.c, src/tools/test_afm.c: Updated.
-
-2015-02-18 Werner Lemberg <wl@gnu.org>
-
- Don't use `FT_PtrDist' for lengths.
-
- Use FT_UInt instead.
-
- * include/internal/psaux.h (PS_Table_FuncsRec, PS_TableRec,
- T1_DecoderRec): Do it.
-
- * include/internal/t1types.h (T1_FontRec): Ditto.
-
- * src/cid/cidload.c (cid_parse_dict): Updated.
- * src/pfr/pfrload.c (pfr_extra_item_load_font_id): Ditto.
- * src/psaux/psobjs.c (ps_table_add), src/psaux/psobjs.h: Ditto.
- * src/type1/t1load.c (parse_blend_axis_types, parse_encoding,
- parse_chharstrings, parse_dict): Ditto.
- * src/type42/t42parse.c (t42_parse_encoding, t42_parse_charstrings,
- t42_parse_dict): Ditto.
-
-2015-02-18 Werner Lemberg <wl@gnu.org>
-
- * src/type1/t1driver.c (t1_ps_get_font_value): Clean up.
- This handles negative values better, avoiding many casts.
-
-2015-02-17 Werner Lemberg <wl@gnu.org>
-
- [base] Fix Savannah bug #44284.
-
- * src/base/ftcalc.c (FT_MulFix): Typos.
-
-2015-02-17 Werner Lemberg <wl@gnu.org>
-
- [truetype] Finish compiler warning fixes for signedness issues.
-
- * src/truetype/ttgxvar.c, src/truetype/ttsubpix.c,
- src/truetype/ttsubpix.h: Apply.
-
-2015-02-17 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttsubpix.c: Adding missing `static' keywords.
-
-2015-02-17 Werner Lemberg <wl@gnu.org>
-
- [truetype] More signedness fixes.
-
- * include/internal/tttypes.h, src/truetype/ttinterp.h,
- src/truetype/ttobjs.h, src/truetype/ttinterp.c,
- src/truetype/ttobjs.c: Apply.
-
-2015-02-17 Werner Lemberg <wl@gnu.org>
-
- [truetype] Various signedness fixes.
-
- * include/internal/ftgloadr.h, src/truetype/ttpload.c: Apply.
-
- * src/truetype/ttgload.c: Apply.
- (TT_Get_VMetrics): Protect against invalid ascenders and descenders
- while constructing advance height.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- [base] Finish compiler warning fixes for signedness issues.
-
- * src/base/ftglyph.c, src/base/ftlcdfil.c, src/base/ftstroke.c:
- Apply.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- * include/tttables.h (TT_OS2): `fsType' must be FT_UShort.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- More minor signedness warning fixes.
-
- * src/base/ftbbox.c, src/base/ftbitmap.c, src/base/fttrigon.c,
- src/base/ftutil.c: Apply.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- Next round of minor compiler warning fixes.
-
- * include/internal/ftrfork.h (FT_RFork_Ref): Change `offset' member
- type to `FT_Long'.
- (CONST_FT_RFORK_RULE_ARRAY_BEGIN): Add `static' keyword.
-
- * include/internal/ftstream.h (FT_Stream_Pos): Return `FT_ULong'.
-
- * src/base/ftoutln.c, src/base/ftrfork.c, src/base/ftstream.c:
- Signedess fixes.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- Various minor signedness fixes.
-
- * include/ftadvanc.h, include/internal/ftobjs.h,
- src/base/ftgloadr.c, src/base/ftobjs.c: Apply.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- New `TYPEOF' macro.
-
- This helps suppress signedness warnings, avoiding issues with
- implicit conversion changes.
-
- * include/config/ftconfig.h, builds/unix/ftconfig.in,
- builds/vms/ftconfig.h (TYPEOF): Define.
-
- * include/internal/ftobjs.h (FT_PAD_FLOOR, FT_PIX_FLOOR),
- src/autofit/afwarp.h (AF_WARPER_FLOOR): Use it.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftsystem.c: Use casts in standard C function wrappers.
- (ft_alloc, ft_realloc, ft_ansi_stream_io, FT_Stream_Open): Do it.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #44261.
-
- * builds/unix/detect.mk (setup) [unix]: Set `CONFIG_SHELL' in the
- environment also while calling the configure script.
-
-2015-02-16 Werner Lemberg <wl@gnu.org>
-
- * include/internal/ftmemory.h: Add some `FT_Offset' casts.
- (FT_MEM_SET, FT_MEM_COPY, FT_MEM_MOVE, FT_ARRAY_ZERO, FT_ARRAY_COPY,
- FT_MEM_MOVE): Do it.
-
-2015-02-15 Werner Lemberg <wl@gnu.org>
-
- [base] Clean up signedness issues in `ftdbgmem.c'.
-
- Also fix other minor issues.
-
- * src/base/ftdbgmem.c (FT_MemTableRec): Replace all FT_ULong types
- with FT_Long for consistency.
- (ft_mem_primes): Change type to `FT_Int'.
- (ft_mem_closest_prime, ft_mem_table_set): Updated.
-
- (ft_mem_debug_panic, ft_mem_debug_alloc, ft_mem_debug_free,
- ft_mem_debug_realloc): Use `static' keyword and fix signedness
- warnings where necessary.
-
- (ft_mem_table_resize, ft_mem_table_new, ft_mem_table_destroy,
- ft_mem_table_get_nodep, ft_mem_debug_init, FT_DumpMemory): Fix types
- and add or remove casts to avoid signedness warnings.
-
-2015-02-15 Werner Lemberg <wl@gnu.org>
-
- [base] Clean up signedness in arithmetic functions.
-
- This makes the code more readable and reduces compiler warnings.
-
- * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round, FT_MulFix,
- FT_DivFix): Convert input parameters to unsigned, do the
- computation, then convert the result back to signed.
- (ft_corner_orientation): Fix casts.
-
-2015-02-07 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #44184.
-
- * src/sfnt/ttload.c (check_table_dir, tt_face_load_font_dir): No
- longer reject `htmx' and `vmtx' tables with invalid length but
- sanitize them.
-
-2015-02-06 Jon Anderson <jon@websupergoo.com>
-
- [truetype] Fix regression in the incremental glyph loader.
-
- * src/truetype/ttgload.c (load_truetype_glyph): For incremental
- fonts, the glyph index may be greater than the number of glyphs
- indicated, so guard the check with a preprocessor conditional.
-
-2015-02-06 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix potential memory leak.
-
- While this doesn't show up with FreeType, exactly the same code
- leaks with ttfautohint's modified auto-hinter code (which gets used
- in a slightly different way).
-
- It certainly doesn't harm since it is similar to already existing
- checks in the code for embedded arrays.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Set `max_contours'
- and `max_points' for all cases.
-
-2015-01-31 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Thai script.
-
- Thanks to Ben Mitchell <ben@rosettatype.com> for guidance with blue
- zone characters!
-
- * src/autofit/afblue.dat: Add blue zone data for Thai.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Thai standard characters.
-
- * src/autofit/afranges.c: Add Thai data.
-
- * src/autofit/afstyles.h: Add Thai data.
-
-2015-01-23 Behdad Esfahbod <behdad@behdad.org>
-
- [raster] Handle `FT_RASTER_FLAG_AA' correctly.
-
- This fixes a breakage caused by the commit `[raster] Remove
- 5-level gray AA mode from monochrome rasterizer.'.
-
- Problem reported by Markus Trippelsdorf <markus@trippelsdorf.de>.
-
- * src/raster/ftraster.c (ft_black_render): Handle
- `FT_RASTER_FLAG_AA'.
-
- * src/raster/ftrend1.c (ft_raster1_render): Remove gray AA mode
- remnants.
-
-2015-01-18 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_New_Library): Fix compiler warning.
-
-2015-01-18 Chris Liddell <chris.liddell@artifex.com>
-
- [raster] Fix Savannah bug #44022.
-
- Add fallback for glyphs with degenerate bounding boxes.
-
- If a glyph has only one very narrow feature, the bbox can end up
- with either the width or height of the bbox being 0, in which case
- no raster memory is allocated and no attempt is made to render the
- glyph. This is less than ideal when the drop-out compensation in
- the rendering code would actually result in the glyph being
- rendered.
-
- This problem can be observed with the `I' glyph (gid 47) in the
- Autodesk RomanS TrueType font.
-
- * src/raster/ftrend1.c (ft_raster1_render): Add a fallback if either
- dimension is zero to explicitly round up/down (instead of simply
- round).
-
-2015-01-17 Werner Lemberg <wl@gnu.org>
-
- Add some tools to handle yearly copyright notice updates.
-
- We are now following the GNU guidelines: A new release automatically
- means that the copyright year of all affected files gets updated; it
- is no longer used to track years of modification changes.
-
- * src/tools/update-copyright-year: New Perl script.
- * src/tools/update-copyright: New shell script that calls
- `update-copyright-year' on all files.
- * src/tools/no-copyright: Exceptions that should not be handled by
- `update-copyright'
-
-2015-01-14 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated, using a description from Behdad.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- * src/autofit/afmodule.c (af_autofitter_done): Fix compiler warning.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Add embedded array of segments and edges.
-
- Avoids multiple mallocs per typical glyphs.
-
- With this and recent changes to avoid mallocs, the thread-safe
- stack-based loader is now as fast as the previous model that had one
- cached singleton.
-
- * src/autofit/afhints.h (AF_SEGMENTS_EMBEDDED, AF_EDGES_EMBEDDED):
- New macros.
- (AF_AxisHintsRec): Add two arrays for segments and edges.
-
- * src/autofit/afhints.c (af_axis_hints_new_segment): Only allocate
- data if number of segments exceeds given threshold value.
- (af_axis_hints_new_edge): Only allocate data if number of edges
- exceeds given threshold value.
- (af_glyph_hints_done): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Add embedded arrays for points and contours.
-
- This avoids at least two malloc calls for typical glyphs.
-
- * src/autofit/afhints.h (AF_POINTS_EMBEDDED, AF_CONTOURS_EMBEDDED):
- New macros.
- (AF_GlyphHintsRec): Add two arrays for contours and points.
-
- * src/autofit/afhints.c (af_glyph_hints_init, af_glyph_hints_done):
- Updated.
- (af_glyph_hints_reload): Only allocate data if number of contours or
- points exceeds given threshold values.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Allocate hints object on the stack.
-
- This avoids one malloc per load.
-
- * src/autofit/afloader.h (AF_LoaderRec): Change type of `hints' to
- `AF_GlyphHints'.
- Update prototype.
-
- * src/autofit/afloader.c (af_loader_init): Use `AF_GlyphHints'
- parameter instead of `FT_Memory'.
- (af_loader_done): Directly reset `load_hints'.
- (af_loader_load_g): Updated.
-
- * src/autofit/afmodule.c (af_autofitter_load_glyph): Use local
- `hints' object.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Reuse slot glyph loader.
-
- No need to create a new glyph loader; we can reuse the one from
- `slot->internal->loader'. It's hard to tell why it was written that
- way originally, but new code looks sound and correct to me, and
- avoids lots of allocations.
-
- * src/autofit/afloader.c (af_loader_init): Change return type to
- `void'.
- Don't call `FT_GlyphLoader_New'.
- (af_loader_reset): Don't call `FT_GlyphLoader_Rewind'.
- (af_loader_load_g): Update code to use `internal->loader', which
- doesn't need copying of data.
-
- * src/autofit/afloader.h (AF_LoaderRec): Remove `gloader' member.
- Update prototype.
-
- * src/autofit/afmodule.c (af_autofitter_load_glyph): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Remove (unused) support for composite glyphs.
-
- We never have to deal with composite glyphs in the autohinter, as
- those will be loaded into FORMAT_OUTLINE by the recursed
- `FT_Load_Glyph' function.
-
- In the rare cases that FT_LOAD_NO_RECURSE is set, it will imply
- FT_LOAD_NO_SCALE as per `FT_Load_Glyph', which then implies
- FT_LOAD_NO_HINTING:
-
- /* resolve load flags dependencies */
-
- if ( load_flags & FT_LOAD_NO_RECURSE )
- load_flags |= FT_LOAD_NO_SCALE |
- FT_LOAD_IGNORE_TRANSFORM;
-
- if ( load_flags & FT_LOAD_NO_SCALE )
- {
- load_flags |= FT_LOAD_NO_HINTING |
- FT_LOAD_NO_BITMAP;
-
- load_flags &= ~FT_LOAD_RENDER;
- }
-
- and as such the auto-hinter is never called. Thus, the recursion in
- `af_loader_load_g' never actually happens. So remove the depth
- counter as well.
-
- * src/autofit/afloader.c (af_loader_load_g): Remove `depth'
- parameter.
- <FT_GLYPH_FORMAT_COMPOSITE>: Remove associated code.
- (af_loader_load_glyph): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [raster] Fix uninitialized memory access.
-
- Apparently `ras.cProfile' might be uninitialized. This will be the
- case if `ras.top == ras.cProfile->offset', as can be seen in
- `End_Profile'. The overshoot code introduced in a change `Fix B/W
- rasterization of subglyphs with different drop-out modes.' (from
- 2009-06-18) violated this, accessing `ras.cProfile->flags'
- unconditionally just before calling `End_Profile' (which then
- detected that `cProfile' is uninitialized and didn't touch it).
-
- This was harmless, and was not detected by valgrind before because
- the objects were allocated on the `raster_pool', which was always
- initialized. With recent change to allocate raster buffers on the
- stack, valgrind now reported this invalid access.
-
- * src/raster/ftraster.c (Convert_Glyph): Don't access an
- uninitialized `cProfile'.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [smooth] Fix uninitialized memory access.
-
- Looks like `ras.span_y' could always be used without initialization.
- This was never detected by valgrind before because the library-wide
- `raster_pool' was used for the worker object and `raster_pool' was
- originally zero'ed. But subsequent reuses of it were using `span_y'
- uninitialized. With the recent change to not use `render_pool' and
- allocate worker and buffer on the stack, valgrind now detects this
- uninitialized access.
-
- * src/smooth/ftgrays.c (gray_raster_render): Initialize
- `ras.span_y'.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [base] Don't initialize unused `driver->glyph_loader'.
-
- * src/base/ftobjs.c (Destroy_Driver): Don't call
- `FT_GlyphLoader_Done'.
- (FT_Add_Module): Don't call `FT_GlyphLoader_New'.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [base] Don't allocate `library->raster_pool' anymore.
-
- It's unused after the following commits:
-
- [raster] Allocate render pool for mono rasterizer on the stack.
- [raster] Remove 5-level gray AA mode from monochrome rasterizer.
-
- The value of FT_RENDER_POOL_SIZE still serves the purpose it used to
- serve, which is, to adjust the pool size. But the pool is now
- allocated on the stack on demand.
-
- * src/base/ftobjs.c (FT_New_Library, FT_Done_Library): Implement.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [base] Do not reorder library->renderers upon use.
-
- Instead of keeping `library->renderers' in a MRU order, just leave
- it as-is. The MRU machinery wasn't thread-safe.
-
- With this patch, rasterizing glyphs from different faces from
- different threads doesn't fail choosing rasterizer
- (FT_Err_Cannot_Render_Glyph).
-
- Easiest to see that crash was to add a `printf' (or otherwise let
- thread yield in FT_Throw with debugging enabled).
-
- * src/base/ftobjs.c (FT_Render_Glyph_Internal), src/base/ftoutln.c
- (FT_Outline_Render): Don't call `FT_Set_Renderer'.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [raster] Allocate render pool for mono rasterizer on the stack.
-
- Instead of using the `render_pool' member of `FT_Library' that is
- provided down to the rasterizer, completely ignore that and allocate
- needed objects on the stack instead.
-
- With this patch, rasterizing glyphs from different faces from
- different threads doesn't crash in the monochrome rasterizer.
-
- * src/raster/ftraster.c (black_TRaster): Remove `buffer',
- `buffer_size', and `worker' members.
-
- (ft_black_render): Create `buffer' locally.
- (ft_black_reset): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [raster] Remove 5-level gray AA mode from monochrome rasterizer.
-
- It was off by default and couldn't be turned on at runtime. And the
- smooth rasterizer superceded it over ten years ago. No point in
- keeping. Comments suggested that it was there for compatibility
- with FreeType 1.
-
- 550 lines down.
-
- * src/raster/ftraster.c (FT_RASTER_OPTION_ANTI_ALIASING,
- RASTER_GRAY_LINES): Remove macros and all associated code.
-
- (black_TWorker): Remove `gray_min_x' and `gray_max_x'.
- (black_TRaster): Remove `grays' and `gray_width'.
-
- (Vertical_Sweep_Init, Vertical_Sweep_Span, Vertical_Sweep_Drop,
- ft_black_render): Updated.
-
- * src/raster/ftrend1.c (ft_raster1_render): Simplify code.
- (ft_raster5_renderer_class): Removed.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [smooth] Allocate render pool for smooth rasterizer on the stack.
-
- Instead of using the `render_pool' member of `FT_Library' that is
- provided down to the rasterizer, completely ignore that and allocate
- needed objects on the stack instead.
-
- With this patch, rasterizing glyphs from different faces from
- different threads doesn't crash in the smooth rasterizer.
-
- Bugs:
-
- https://bugzilla.redhat.com/show_bug.cgi?id=678397
- https://bugzilla.redhat.com/show_bug.cgi?id=1004315
- https://bugzilla.redhat.com/show_bug.cgi?id=1165471
- https://bugs.freedesktop.org/show_bug.cgi?id=69034
-
- * src/smooth/ftgrays.c (gray_TRaster): Remove `buffer',
- `buffer_size', `band_size', and `worker' members.
-
- (gray_raster_render): Create `buffer', `buffer_size', and
- `band_size' locally.
- (gray_raster_reset): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [truetype] Allocate TT_ExecContext in TT_Size instead of TT_Driver.
-
- Previously the code had stipulation for using a per-TT_Size exec
- context if `size->debug' was true. But there was no way that
- `size->debug' could *ever* be true. As such, the code was always
- using the singleton `TT_ExecContext' that was stored in `TT_Driver'.
- This was, clearly, not threadsafe.
-
- With this patch, loading glyphs from different faces from different
- threads doesn't crash in the bytecode loader code.
-
- * src/truetype/ttobjs.h (TT_SizeRec): Remove `debug' member.
- (TT_DriverRec): Remove `context' member.
-
- * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Remove
- `TT_ExecContext' code related to a global `TT_Driver' object.
-
- (tt_driver_done): Don't remove `TT_ExecContext' object here but ...
- (tt_size_done_bytecode): ... here.
-
- (tt_driver_init): Don't create `TT_ExecContext' object here but ...
- (tt_size_init_bytecode): ... here, only on demand.
-
- * src/truetype/ttinterp.c (TT_Run_Context): Remove defunct debug
- code.
- (TT_New_Context): Remove `TT_ExecContext' code related to a global
- `TT_Driver' object.
-
- * src/truetype/ttinterp.h: Updated.
-
- * src/truetype/ttgload.c (TT_Hint_Glyph, tt_loader_init): Updated.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- [autofit] Allocate AF_Loader on the stack instead of AF_Module.
-
- Stop sharing a global `AF_Loader'. Allocate one on the stack during
- glyph load.
-
- Right now this results in about 25% slowdown, to be fixed in a
- following commit.
-
- With this patch loading glyphs from different faces from different
- threads doesn't immediately crash in the autohinting loader code.
-
- Bugs:
-
- https://bugzilla.redhat.com/show_bug.cgi?id=1164941
-
- * src/autofit/afloader.c (af_loader_init): Pass
- `AF_Loader' and `FT_Memory' instead of `AF_Module' as arguments.
- (af_loader_reset, af_loader_load_glyph): Also pass `loader' as
- argument.
- (af_loader_done): Use `AF_Loader' instead of `AF_Module' as
- argument.
-
- * src/autofit/afmodule.c (af_autofitter_init): Don't call
- `af_loader_init'.
- (af_autofitter_done): Don't call `af_loader_done'.
- (af_autofitter_load_glyph): Use a local `AF_Loader' object.
-
- * src/autofit/afloader.h: Include `afmodule.h'.
- Update prototypes.
- Move typedef for `AF_Module' to...
-
- * src/autofit/afmodule.h: ... this place.
- No longer include `afloader.h'.
-
-2015-01-14 Behdad Esfahbod <behdad@behdad.org>
-
- * src/type42/t42objs.h (T42_DriverRec): Remove unused member.
-
-2015-01-12 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #43976.
-
- Assure that FreeType's internal include directories are found before
- `CPPFLAGS' (which might be set by the user in the environment), and
- `CPPFLAGS' before `CFLAGS'.
-
- * builds/freetype.mk (FT_CFLAGS): Don't add `INCLUDE_FLAGS'.
- (FT_COMPILE): Make this a special variable for compiling only the
- files handled in `freetype.mk'.
- (.c.$O): Removed, unused.
-
- * src/*/rules.mk (*_COMPILE): Fix order of include directories.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] Prettyfing.
-
- * src/truetype/ttinterp.c (project, dualproj, fast_project,
- fast_dualproj): Rename to...
- (PROJECT, DUALPROJ, FAST_PROJECT, FAST_DUALPROJ): ... this.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Ins_JROT, Ins_JROF): Simplify.
-
- Based on a patch from Behdad.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Ins_SxVTL): Simplify function call.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Normalize): Remove unused argument.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- * src/truetype/ttinterp.c (FT_UNUSED_EXEC): Remove macro by
- expansion.
-
-2015-01-11 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- * src/truetype/ttinterp.c (INS_ARG): Remove macro by expansion,
- adjusting funtion calls where necessary.
- (FT_UNUSED_ARG): Removed, no longer needed.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- Based on a patch from Behdad.
-
- * src/truetype/ttinterp.c (DO_*): Expand macros into corresponding
- `Ins_*' functions.
- (TT_RunIns): Replace `DO_*' macros with `Ins_*' function calls.
- (ARRAY_BOUND_ERROR): Remove second definition, which is no longer
- needed.
- (Ins_SVTCA, Ins_SPVTCA, Ins_SFVTCA): Replaced with...
- (Ins_SxyTCA): New function.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Remove TT_CONFIG_OPTION_INTERPRETER_SWITCH.
-
- Behdad suggested this code simplification, and nobody objected...
-
- * include/config/ftoption.h, devel/ftoption.h
- (TT_CONFIG_OPTION_INTERPRETER_SWITCH): Remove.
-
- * src/truetype/ttinterp.c [TT_CONFIG_OPTION_INTERPRETER_SWITCH]:
- Remove related code.
- (ARRAY_BOUND_ERROR): Use do-while loop.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- * src/truetype/ttinterp.c, src/truetype/ttinterp.h (EXEC_ARG_,
- EXEC_ARG): Remove by replacing with expansion.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- Based on a patch from Behdad.
-
- * src/truetype/ttinterp.c (SKIP_Code, GET_ShortIns, NORMalize,
- SET_SuperRound, ROUND_None, INS_Goto_CodeRange, CUR_Func_move,
- CUR_Func_move_orig, CUR_Func_round, CUR_Func_cur_ppem,
- CUR_Func_read_cvt, CUR_Func_write_cvt, CUR_Func_move_cvt,
- CURRENT_Ratio, INS_SxVTL, COMPUTE_Funcs, COMPUTE_Round,
- COMPUTE_Point_Displacement, MOVE_Zp2_Point): Remove by replacing
- with expansion.
-
- (Cur_Func_project, CUR_Func_dualproj, CUR_fast_project,
- CUR_fast_dualproj): Replace with macros `project', `dualproj',
- `fast_project', `fast_dualproj'.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] More macro expansions.
-
- * src/truetype/ttinterp.c (EXEC_OP_, EXEC_OP): Remove by replacing
- with expansion.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Remove code for static TrueType interpreter.
-
- This is a follow-up patch.
-
- * src/truetype/ttinterp.c, src/truetype/ttinterp.h
- [TT_CONFIG_OPTION_STATIC_INTERPRETER,
- TT_CONFIG_OPTION_STATIC_RASTER]: Remove macros and related code.
-
-2015-01-10 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (CUR): Remove by replacing with expansion.
-
- This starts a series of patches that simplifies the code of the
- bytecode interpreter.
-
-2014-12-30 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.5 released.
- =========================
-
-
- Tag sources with `VER-2-5-5'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.5.
-
- * 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.4/2.5.5/, s/254/255/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.
-
- * builds/unix/configure.raw (version_info): Set to 17:4:11.
- * CMakeLists.txt (VERSION_PATCH): Set to 5.
- * docs/CHANGES: Updated.
-
- * builds/toplevel.mk (dist): Fix typos.
-
-2014-12-24 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Formatting and nanooptimizations.
-
- * src/base/ftcalc.c,
- * src/base/fttrigon.c: Revise sign restoration.
-
-2014-12-13 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread.c (pcf_read_TOC): Improve fix from 2014-12-08.
-
-2014-12-11 Werner Lemberg <wl@gnu.org>
-
- * builds/toplevel.mk (dist): Use older POSIX standard for `tar'.
-
- Apparently, BSD tar isn't capable yet of handling POSIX-1.2001
- (contrary to GNU tar), so force the POSIX-1.1988 format.
-
- Problem reported by Stephen Fisher <sfisher@SDF.ORG>.
-
-2014-12-11 Werner Lemberg <wl@gnu.org>
-
- * src/type42/t42parse.c (t42_parse_sfnts): Reject invalid TTF size.
-
-2014-12-11 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Get_Glyph_Name): Fix off-by-one check.
-
- Problem reported by Dennis Felsing <dennis@felsin9.de>.
-
-2014-12-11 Werner Lemberg <wl@gnu.org>
-
- * src/type42/t42parse.c (t42_parse_sfnts): Check `string_size'.
-
- Problem reported by Dennis Felsing <dennis@felsin9.de>.
-
-2014-12-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [gxvalid] Fix a naming convention conflicting with ftvalid.
-
- See previous changeset for otvalid.
-
- * src/gxvalid/{gxvcommn.h, gxvmort.h, gxvmorx.h}: Replace
- `valid' by `gxvalid'.
- * src/gxvalid/{gxvbsln.c, gxvcommn.c, gxvfeat.c, gxvjust.c,
- gxvkern.c, gxvlcar.c, gxvmort.c, gxvmort0.c, gxvmort1.c,
- gxvmort2.c, gxvmort4.c, gxvmort5.c, gxvmorx.c, gxvmorx0.c,
- gxvmorx1.c, gxvmorx2.c, gxvmorx4.c, gxvmorx5.c, gxvopbd.c,
- gxvprop.c, gxvtrak.c}: Replace `valid' by `gxvalid' if
- it is typed as GXV_Validator.
-
-2014-12-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [otvalid] Fix a naming convention conflicting with ftvalid.
-
- Some prototypes in ftvalid.h use `valid' for the variables
- typed as FT_Validator. Their implementations in src/base/
- ftobjs.c and utilizations in src/sfnt/ttcmap.c do similar.
-
- Some macros in otvcommn.h assume the exist of the variable
- `valid' typed as OTV_Validator in the caller.
-
- Mixing these two conventions cause invalid pointer conversion
- and unexpected SEGV in longjmp. To prevent it, all variables
- typed as OTV_Validator are renamed to `otvalid'.
-
- * src/otvalid/otvcommn.h: Replace `valid' by `otvalid'.
- * src/otvalid/{otvcommn.c, otvbase.c, otvgdef.c, otvgpos.c,
- otvgsub.c, otvjstf.c, otvmath.c}: Replace `valid' by `otvalid'
- if it is typed as OTV_Validator.
-
-2014-12-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [ftvalid] Introduce FT_THROW() in FT_INVALID_XXX macros.
-
- Original patch is designed by Werner Lemberg. Extra part
- for otvalid and gxvalid are added by suzuki toshiya, see
- discussion:
- http://lists.nongnu.org/archive/html/freetype-devel/2014-12/msg00002.html
- http://lists.nongnu.org/archive/html/freetype-devel/2014-12/msg00007.html
-
- * include/internal/ftvalid.h: Introduce FT_THROW() in FT_INVALID_().
- * src/gxvalid/gxvcommn.h: Ditto.
- * src/otvalid/otvcommn.h: Ditto.
-
-2014-12-08 Werner Lemberg <wl@gnu.org>
-
- [pcf] Fix Savannah bug #43774.
-
- Work around `features' of X11's `pcfWriteFont' and `pcfReadFont'
- functions. Since the PCF format doesn't have an official
- specification, we have to exactly follow these functions' behaviour.
-
- The problem was unveiled with a patch from 2014-11-06, fixing issue
- #43547.
-
- * src/pcf/pcfread.c (pcf_read_TOC): Don't check table size for last
- element. Instead, assign real size.
-
-2014-12-07 Werner Lemberg <wl@gnu.org>
-
- Work around a bug in Borland's C++ compiler.
-
- See
-
- http://qc.embarcadero.com/wc/qcmain.aspx?d=118998
-
- for Borland's bug tracker entry.
-
- Reported by Yuliana Zigangirova <zigangirova@inbox.ru>,
- http://lists.gnu.org/archive/html/freetype-devel/2014-04/msg00001.html.
-
- * include/internal/ftvalid.h (FT_ValidatorRec), src/smooth/ftgrays.c
- (gray_TWorker_): Move `ft_jmp_buf' field to be the first element.
-
-2014-12-07 Werner Lemberg <wl@gnu.org>
-
- */*: Decorate hex constants with `U' and `L' where appropriate.
-
-2014-12-07 Werner Lemberg <wl@gnu.org>
-
- [truetype] Prevent memory leak for buggy fonts.
-
- * src/truetype/ttobjs.c (tt_size_done): Unconditionally call
- `tt_size_done_bytecode'.
-
-2014-12-06 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.4 released.
- =========================
-
-
- Tag sources with `VER-2-5-4'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.4.
-
- * 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.3/2.5.4/, s/253/254/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.
-
- * builds/unix/configure.raw (version_info): Set to 17:3:11.
- * CMakeLists.txt (VERSION_PATCH): Set to 4.
- * docs/CHANGES: Updated.
-
-2014-12-04 Werner Lemberg <wl@gnu.org>
-
- docs/CHANGES: Updated, formatted.
-
-2014-12-04 Dave Arnold <darnold@adobe.com>
-
- [cff] Modify an FT_ASSERT.
-
- * src/cff/cf2hints.c (cf2_hintmap_map): After the fix for Savannah
- bug #43661, the test font `...aspartam.otf' still triggers an
- FT_ASSERT. Since hintmap still works with count==0, ...
- (cf2_glyphpath_lineTo, cf2_glyphpath_curveTo): ... add that term to
- suppress the assert.
-
-2014-12-04 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix Savannah bug #43661.
-
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdHSTEM,
- cf2_cmdVSTEM, cf2_cmdHINTMASK>: Don't append to stem arrays after
- hintmask is constructed.
-
- * src/cff/cf2hints.c (cf2_hintmap_build): Add defensive code to
- avoid reading past end of hintmask.
-
-2014-12-03 Werner Lemberg <wl@gnu.org>
-
- docs/CHANGES: Updated.
-
-2014-12-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Better fix for conversion specifiers in debug messages.
-
- Using `%ld' for pointer differences causes warnings on 32bit
- platforms. The correct type would be (the relatively new) `%td',
- however, this is missing on some important platforms.
-
- This patch improves the change from 2014-11-28.
-
- * src/autofit/afhints.c (AF_INDEX_NUM): Use `int' typecast. Our
- pointer differences are always sufficiently small.
- (af_glyph_hints_dump_points, af_glyph_hints_dump_segments,
- af_glyph_hints_dump_edge): Revert to `%d' and use `AF_INDEX_NUM'.
-
-2014-12-03 Werner Lemberg <wl@gnu.org>
-
- FT_Sfnt_Tag: s/ft_sfnt_xxx/FT_SFNT_XXX/ for orthogonality.
-
- All public FreeType enumeration and flag values are uppercase...
-
- * include/tttables.h (FT_Sfnt_Tag): Implement it. For backwards
- compatilibity, retain the old values as macros.
-
- * src/base/ftfstype.c (FT_Get_FSType_Flags), src/sfnt/sfdriver.c
- (get_sfnt_table): Updated.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- * include/*: Improve structure of documentation.
-
- . Add and update many `<Order>' tags.
- . Apply various documentation fixes.
- . Remove details to deprecated (or never implemented) data.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Always handle `<Order>' section elements.
-
- Previously, those elements were handled only for sections present in
- a `<Sections>' chapter element.
-
- * src/tools/docmaker/content.py (ContentProcessor::finish):
- Implement it.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Properly handle empty rows in Synopsis.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::section_enter): Emit
- ` ' for empty fields.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Thinko.
-
- * src/tools/docmaker/content.py (DocBlock::get_markup_words_all):
- Emit `/empty/' string for first element also.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Honour empty lines in `<Order>' section element.
-
- This greatly improves the readability of the `Synopsis' links.
-
- * src/tools/docmaker/content.py (DocBlock::get_markup_words_all):
- Insert string `/empty/' between items.
-
- * src/tools/docmaker/formatter.py (Formatter::section_dump): Make it
- robust against nonexistent keys.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::section_enter): Emit
- empty <td> elements for `/empty/'.
-
-2014-12-02 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Ensure Python 3 compatibility.
-
- * src/tools/docmaker/content.py (ContentProcessor::set_section,
- ContentProcessor::finish): Replace `has_key' function with `in'
- keyword.
-
- * src/tools/docmaker/formatter.py (Formatter::__init__): Replace
- sorting function with a key generator.
- (Formatter::add_identifier): Replace `has_key' function with `in'
- keyword.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::html_source_quote):
- Replace `has_key' function with `in' keyword.
- (HtmlFormatter::index_exit, HtmlFormatter::section_enter): Use
- integer division.
- s/<>/>/.
-
- * src/tools/docmaker/utils.py: Import `itertools'.
- (index_sort): Replaced by...
- (index_key): ... this new key generator (doing exactly the same).
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Don't output a block multiple times.
-
- This bug was hidden by not processing all lines of `<Order>' blocks.
-
- * src/tools/docmaker/formatter.py (Formatter::section_dump): Filter
- out field names.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Use field values as HTML link targets where possible.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::make_block_url):
- Accept second, optional argument to specify a name.
- (HtmlFormatter::html_source_quote): Link to field ID if possible.
- (HtmlFormatter::print_html_field_list): Emit `id' attribute.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Allow empty lines in `<Order>' blocks.
-
- Before this patch, the suggested order of entries stopped at the
- first empty line.
-
- Obviously, nobody noticed that this problem caused a much reduced
- set of links in the `Synopsis' sections; in particular, the
- `<Order>' blocks contain a lot of entries that wouldn't be listed
- otherwise...
-
- * src/tools/docmaker/content.py (DocBlock::get_markup_words_all):
- New function to iterate over all items.
- (DocSection::process): Use it.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/sources.py (column) [Format 2]: Fix regexp.
-
- After the single asterisk there must be no other immediately following
- asterisk.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Improve CSS for vertical spacing.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Improve HTML code for table of contents.
-
- * src/tools/docmaker/tohtml.py: Introduce a new table class `toc',
- together with proper CSS.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Provide higher-level markup and simplify HTML.
-
- * src/tools/docmaker/tohtml.py: Instead of using extraneous `<div>'
- elements, use CSS descendants (of class `section') to format the
- data.
-
- Also remove reduntant <p> and <br> elements, replacing them with
- proper CSS.
-
- Globally reduce page width to 75%.
-
- (block_header): Rename <div> class to `section'.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Add `top' links after blocks.
-
- * src/tools/docmaker/tohtml.py (block_footer_middle): Implement it.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Improve CSS for fields.
-
- Make fields align horizontally relative to full line width.
-
-2014-11-29 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Fix index and TOC templates.
-
- This thinko was introduced 2014-11-27.
-
-2014-11-28 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Format field lists with CSS.
-
- This also simplifies the inserted HTML code.
-
- * src/tools/docmaker/tohtml.py
- (HtmlFormatter::print_html_field_list): Do it.
-
-2014-11-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix compiler warning to the comparison between signed and
- unsigned variable.
-
- * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Fix the comparison
- between `ypos + ysize' and FT_INT_{MAX,MIN}.
-
-2014-11-28 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Replace empty `<td>' with CSS.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::section_enter): Do
- it.
-
-2014-11-28 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Replace some `<table>' tags with `<h4>' and `<div>'.
-
- * src/tools/docmaker/tohtml.py (marker_*): Use `<h4>'.
- (source_*): Use `<div>'.
- (HtmlFormatter::block_enter): s/<h4>/<h3>/.
-
-2014-11-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix compiler warning to conversion specifiers in debug messages.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_points): Add length
- modifier to dump long integers.
- (af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Ditto.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Use more CSS for index.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Replace `name' attribute of `<a>' with `id'.
-
- * src/tools/docmaker/tohtml.py (HtmlFormatter::block_enter): Do it.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Remove remaining `width' attributes.
-
- For `Index' and `TOC' links, we now simply use the `text-align' CSS
- property of `<td>' to enforce flush-left and flush-right,
- eliminating the hack with an empty, full-width `<td>' element
- inbetween.
-
- The change also enforces the same (smaller) size for all index and
- TOC links.
-
-2014-11-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/cff/cf2font.c: Include `ftcalc.h' to use FT_MSB(),
- cf2font.c could not find it under `make multi' build.
-
-2014-11-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Remove
- unrequired negative value check for `width' and `height'.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: More HTML table refactoring.
-
- Replace some `<table>' tags with `<div>' to simplify structure.
-
- Move `bgcolor' attribute to CSS.
-
- Replace most `width' attributes with CSS. The remaining instances
- (providing a similar effect as LaTeX's `\hfill' command) are removed
- in a later patch.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Replace <font> with CSS.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Center <table> with CSS.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Replace `<center>' with `<div>'.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/tohtml.py: Remove redundant `<center>' tags.
-
- This starts a series of commits into the direction of generating
- valid HTML 5 code, especially using much more CSS.
-
-2014-11-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Prevent too negative values (< FT_INT_MIN) in bitmap metrics,
- suggested by Alexei.
-
- * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Prevent too
- negative values in `xpos' and `ypos + ysize'.
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Prevent
- too negative values in `x_left' and `y_top'. Either negative
- values in `width' and `height' are checked.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Produce better HTML code.
-
- * src/tools/docmaker/tohtml.py: Always use double quotes for
- attribute values.
- (source_footer): Close `td' and `tr' groups.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- Use better way to disable creation of .pyc files for `make refdoc'.
-
- Python 2.6 was released in 2008...
-
- * builds/freetype.mk (refdoc): Use python's `-B' option.
-
- * builds/detect.mk (std_setup, dos_setup): Mention required python
- version for `refdoc' target.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/tools/docmaker/sources.py (re_bold, re_italic): Use
- non-grouping parentheses.
- * src/tools/docmaker/tohtml.py (HtmlFormatter::make_html_word):
- Updated.
-
-2014-11-27 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftobjs.c (FT_Get_Glyph_Name): Fix compiler warning.
-
- Introdruced in previous change. Reported by Alexei.
-
-2014-11-26 Werner Lemberg <wl@gnu.org>
-
- * src/*: Add checks for parameters of API functions where missing.
-
- `API functions' are functions tagged with `FT_EXPORT_DEF'.
-
- Besides trivial fixes, the following changes are included, too.
-
- * src/base/ftbdf.c (FT_Get_BDF_Charset_ID, FT_Get_BDF_Property): Set
- error code if no service is available.
-
- * src/base/ftinit.c (FT_Done_FreeType): Change return value for
- invalid `library' parameter to `Invalid_Library_Handle'.
-
- * src/base/ftobjs.c (FT_New_Size): Change return value for invalid
- `asize' parameter to `Invalid_Argument'.
-
- * src/base/ftoutln.c (FT_Outline_Copy): Change return value for
- invalid `source' and `target' parameters to `Invalid_Outline'.
- (FT_Outline_Done_Internal): Change return value for invalid
- `outline' parameter to `Invalid_Outline'.
-
-2014-11-26 Werner Lemberg <wl@gnu.org>
-
- * src/cache/ftcbasic.c: Use single calls to `FT_TRACE'.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobj.c (Mac_Read_POST_Resource): Additional
- overflow check in the summation of POST fragment lengths,
- suggested by Mateusz Jurczyk <mjurczyk@google.com>.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Insert comments
- and fold too long tracing messages.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #43540.
-
- * src/base/ftmac.c (parse_fond): Prevent a buffer overrun
- caused by a font including too many (> 63) strings to store
- names[] table.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Use unsigned long
- variables to read the lengths in POST fragments. Suggested by
- Mateusz Jurczyk <mjurczyk@google.com>.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #43539.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Fix integer overflow
- by a broken POST table in resource-fork.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix Savannah bug #43538.
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Fix integer overflow
- by a broken POST table in resource-fork.
-
-2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- * src/base/ftobjs.c (Mac_Read_POST_Resource): Avoid memory leak
- by a broken POST table in resource-fork. Return after freeing
- the buffered POST table when it is found to be broken.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- */*: s/Invalid_Argument/Invalid_Size_Handle/ where appropriate.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- */*: s/Invalid_Argument/Invalid_Stream_Handle/ where appropriate.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- */*: s/Invalid_Argument/Invalid_Library_Handle/ where appropriate.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- */*: s/Invalid_Argument/Invalid_Outline/ where appropriate.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- */*: s/Invalid_Argument/Invalid_Face_Handle/ where appropriate.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [Savannah bug #43682] Adjust some renderer callbacks.
-
- * src/raster/ftraster.c (ft_black_set_mode): Change return type to
- `int' to stay in sync with `FT_Renderer_SetModeFunc' prototype.
-
- * src/smooth/ftgrays.c (gray_raster_set_mode): New dummy function
- for orthogonality.
- (ft_grays_raster): Use it.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- [Savannah bug #43682] Properly handle missing return errors.
-
- The functions in this patch *do* return non-trivial errors that must
- be taken care of.
-
- * src/autofit/afloader.c (af_loader_load_g), src/base/ftobjs.c
- (FT_Render_Glyph_Internal), src/base/ftoutln.c (FT_Outline_Render),
- src/cff/cffgload.c (cff_decoder_parse_charstrings) <cff_op_endchar>,
- src/psaux/psobjs.c (ps_parser_load_field_table), src/psaux/t1decode
- (t1_decoder_parse_charstrings) <op_endchar>, src/truetype/ttgload.c
- (load_truetype_glyph <subglyph loop>, tt_loader_init,
- TT_Load_Glyph), src/truetype/ttgxvar.c (TT_Set_MM_Blend),
- src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Do it.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- [Savannah bug #43682] Add/remove `void' casts to some functions.
-
- We use a cast to indicate that we intentionally ignore a function's
- return value. However, this doesn't apply to API functions where
- errors can only happen for trivially invalid input.
-
- * src/base/ftstroke.c (FT_Glyph_Stroke, FT_Glyph_StrokeBorder),
- src/base/ftsynth.c (FT_GlyphSlot_Embolden), src/cff/cffgload.c
- (cff_slot_load), src/pfr/pfrdrivr.c (pfr_get_kerning),
- src/type1/t1load.c (parse_encoding), src/type42/t42parse.c
- (t42_parse_encoding): Do it.
-
-2014-11-25 Werner Lemberg <wl@gnu.org>
-
- [Savannah bug #43682] Change some signatures to `void' return type.
-
- * include/internal/pshints.h (PSH_Globals_SetScaleFunc),
- include/internal/sfnt.h (TT_Get_Metrics_Func),
- src/pshinter/pshglob.c (psh_globals_set_scale),
- src/pshinter/pshrec.c (ps_hints_init), src/sfnt/ttmtx.c
- (tt_face_get_metrics), src/truetype/ttinterp.c (TT_Goto_CodeRange,
- TT_Set_CodeRange, TT_Clear_CodeRange, TT_Done_Context,
- TT_Save_Context): Do it.
-
- * src/pshinter/pshglob.h, src/pshinter/pshrec.h, src/sfnt/ttmtx.h,
- src/truetype/ttgload.c (TT_Hint_Glyph), src/truetype/ttinterp.c
- (TT_Run_Context), src/truetype/ttinterp.h, src/truetype/ttobjs.c
- (tt_size_run_fpgm, tt_size_run_prep): Updated.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- Remove all code related to FT_MAX_CHARMAP_CACHEABLE.
-
- This is no longer used.
-
- * src/base/ftobjs.c, src/cache/ftccmap.c, src/cff/cffobjs.c,
- src/sfnt/ttcmap.c: Do it.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43680.
-
- This adds an additional constraint to make the fix from 2013-01-25
- really work.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_image) <index_format==4>:
- Check `p' before `num_glyphs'.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix Savannah bug #43679.
-
- * src/truetype/ttpload.c (tt_face_load_hdmx): Check minimum size of
- `record_size'.
-
-2014-11-24 Jarkko Pöyry <jarkko.poyry@gmail.com>
-
- [cff, pfr, psaux, winfonts] Fix Savannah bug #43676.
-
- Don't cast cmap init function pointers to an incompatible type.
-
- Without this patch, the number of parameters between declaration and
- the real signature differs. Calling such a function results in
- undefined behavior.
-
- ISO/IEC 9899:TC3 (Committee Draft September 7, 2007)
- 6.5.2.2 Function calls
- 9 If the function is defined with a type that is not
- compatible with the type (of the expression) pointed to by
- the expression that denotes the called function, the
- behavior is undefined.
-
- On certain platforms (c -> js with emscripten) this causes
- termination of execution or invalid calls because in the emscripten
- implementation, function pointers of different types are stored in
- different pointer arrays. Incorrect pointer type here results in
- indexing of an incorrect array.
-
- * src/cff/cffcmap.c (cff_cmap_encoding_init, cff_cmap_unicode_init),
- src/pfr/pfrcmap.c (pfr_cmap_init), src/psaux/t1cmap.c
- t1_cmap_standard_init, t1_cmap_expert_init, t1_cmap_custom_init,
- t1_cmap_unicode_init), src/winfonts/winfnt.c (fnt_cmap_init): Fix
- signature.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43672.
-
- * src/sfnt/ttkern.c (tt_face_load_kern): Use correct value for
- minimum table length test.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [type1, type42] Another fix for Savannah bug #43655.
-
- * src/type1/t1load.c (parse_charstrings), src/type42/t42parse.c
- (t42_parse_charstrings): Add another boundary testing.
-
-2014-11-24 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Formatting, copyright, improved documentation.
-
- * src/tools/docmaker/*: No code changes besides trivial
- modifications.
-
-2014-11-22 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #43660.
-
- * src/bdf/bdflib.c (_bdf_parse_glyphs) <"ENDFONT">: Check
- `_BDF_GLYPH_BITS'.
-
-2014-11-22 Werner Lemberg <wl@gnu.org>
-
- [type42] Allow only embedded TrueType fonts.
-
- This is a follow-up to Savannah bug #43659.
-
- * src/type42/t42objs.c (T42_Face_Init): Exclusively use the
- `truetype' font driver for loading the font contained in the `sfnts'
- array.
-
-2014-11-22 Werner Lemberg <wl@gnu.org>
-
- [type42] Fix Savannah bug #43659.
-
- * src/type42/t42objs.c (T42_Open_Face): Initialize `face->ttf_size'.
-
- * src/type42/t42parse.c (t42_parse_sfnts): Always set
- `face->ttf_size' directly. This ensures a correct stream size in
- the call to `FT_Open_Face', which follows after parsing, even for
- buggy input data.
- Fix error messages.
-
-2014-11-22 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #43658.
-
- * src/cff/cf2ft.c (cf2_builder_lineTo, cf2_builder_cubeTo): Handle
- return values of point allocation routines.
-
-2014-11-22 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43656.
-
- * src/sfnt/ttcmap.c (tt_cmap4_validate): Fix order of validity
- tests.
-
-2014-11-21 Werner Lemberg <wl@gnu.org>
-
- [type1, type42] Fix Savannah bug #43655.
-
- * src/type1/t1load.c (parse_charstrings), src/type42/t42parse.c
- (t42_parse_charstrings): Fix boundary testing.
-
-2014-11-21 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread.c (pcf_get_metrics): Sanitize invalid metrics.
-
-2014-11-21 Werner Lemberg <wl@gnu.org>
-
- [ftlcdfil] Obey flow direction.
-
- * src/base/ftlcdfil.c (_ft_lcd_filter_fir, _ft_lcd_filter_legacy):
- Handle `up' flow.
-
-2014-11-21 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbitmap.c (FT_Bitmap_Convert): Improve.
-
- This commit completes argument checks and adds support for different
- flow directions.
-
-2014-11-21 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbitmap.c (FT_Bitmap_Copy): Improve.
-
- This commit adds argument checks and support for different flow
- directions.
-
-2014-11-20 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftbitmap.c (FT_Bitmap_New): Check argument.
-
-2014-11-19 Werner Lemberg <wl@gnu.org>
-
- Change some fields in `FT_Bitmap' to unsigned type.
-
- This doesn't break ABI.
-
- * include/ftimage.h (FT_Bitmap): Make `rows', `width', `num_grays',
- `pixel_mode', and `palette_mode' unsigned types.
-
- * src/base/ftbitmap.c: Updated.
- (FT_Bitmap_Copy): Fix casts.
-
- * src/cache/ftcsbits.c, src/raster/ftraster.c, src/sfnt/pngshim.c:
- Updated.
-
-2014-11-19 Werner Lemberg <wl@gnu.org>
-
- Make `FT_Bitmap_Convert' correctly handle negative `pitch' values.
-
- * src/base/ftbitmap.c (FT_Bitmap_Convert): Always use positive value
- for the pitch while copying data.
- Correctly set pitch sign in target bitmap.
-
-2014-11-19 Werner Lemberg <wl@gnu.org>
-
- Minor code improvement in `FT_Bitmap_Embolden'.
-
- * src/base/ftbitmap.c (FT_Bitmap_Embolden) <FT_PIXEL_MODE_GRAY[24]>:
- Fix thinko.
-
-2014-11-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/fttrigon.c: Use dedicated `FT_Angle' for arctan table.
-
-2014-11-19 Behdad Esfahbod <behdad@behdad.org>
-
- Avoid compiler warnings on x86-64 for `FT_MulFix'.
-
- `FT_MulFix' takes `FT_Long' parameters as defined in `freetype.h',
- but several inline implementations of it in `ftcalc.h' take
- `FT_Int32' arguments. This is causing compiler warnings on x86-64:
- If parameters of type `FT_Fixed' (= `FT_Long') are passed to the
- inline implementation of this function, integer values are truncated
- from 64bit to 32bit.
-
- * include/internal/ftcalc.h (FT_MulFix) [FT_MULFIX_ASSEMBLER]: Add
- casts.
-
-2014-11-15 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43597.
-
- * src/sfnt/pngshim.c (Load_SBit_Png): Protect against too large
- bitmaps.
-
-2014-11-12 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43591.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_init): Protect against addition
- and multiplication overflow.
-
-2014-11-12 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43590.
-
- * src/sfnt/ttload.c (check_table_dir, tt_face_load_font_dir):
- Protect against addition overflow.
-
-2014-11-12 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43589.
-
- * src/sfnt/sfobjs.c (woff_open_font): Protect against addition
- overflow.
-
-2014-11-12 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43588.
-
- * src/sfnt/ttcmap.c (tt_cmap8_validate, tt_cmap10_validate,
- tt_cmap12_validate, tt_cmap13_validate, tt_cmap14_validate): Protect
- against overflow in additions and multiplications.
-
-2014-11-10 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] CORDIC improvements.
-
- The scaling between the hypotenuse and its CORDIC approximation is
- based on regression analysis. The smaller padding for `theta' is
- justifed by its maximum error of less than 6.
-
- * src/base/fttrigon.c (ft_trig_downscale): Borrow code from
- ./ftcalc.c (ft_multo64), change linear intercept.
- (ft_trig_pseudo_polarize): Decrease `theta' padding.
-
-2014-11-09 Werner Lemberg <wl@gnu.org>
-
- * src/base/ftstroke.c (ft_stroker_inside): Fix border intersections.
-
- One more place to check whether `radius' is zero.
-
- Problem reported by Marco Wertz <marco.wertz@gmx.de>.
-
-2014-11-07 Werner Lemberg <wl@gnu.org>
-
- [bdf] Fix Savannah bug #43535.
-
- * src/bdf/bdflib.c (_bdf_strncmp): New macro that checks one
- character more than `strncmp'.
- s/ft_strncmp/_bdf_strncmp/ everywhere.
-
-2014-11-06 Werner Lemberg <wl@gnu.org>
-
- [pcf] Fix Savannah bug #43548.
-
- * src/pcf/pcfread.c (pcf_get_encodings): Add sanity checks for row
- and column values.
-
-2014-11-06 Werner Lemberg <wl@gnu.org>
-
- [pcf] Fix Savannah bug #43547.
-
- * src/pcf/pcfread.c (pcf_read_TOC): Check `size' and `offset'
- values.
-
-2014-11-06 Werner Lemberg <wl@gnu.org>
-
- * src/pcf/pcfread.c (pcf_read_TOC): Avoid memory leak.
-
-2014-11-03 Infinality <infinality@infinality.net>
-
- * src/truetype/ttsubpix.c (COMPATIBILITY_MODE_Rules): Updated.
-
- The previous commit deteriorates rendering of DejaVu and similar
- fonts; this gets compensated with this rule.
-
-2014-11-03 Werner Lemberg <wl@gnu.org>
-
- * src/truetype/ttinterp.c (Ins_DELTAP): Fix subpixel hinting.
-
- Before this patch, it was impossible to ever call DELTAP[123] in
- subpixel hinting mode as described in the ClearType whitepaper; it
- only worked if in `compatibility mode'. However, compatibility mode
- essentially disables SHPIX, completely ruining hinting of
- ttfautohint output, for example.
-
- We now follow the whitepaper more closely so that DELTAP[123]
- instructions for touched points in the non-subpixel direction are
- executed.
-
-2014-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Improve code readability.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Rearrange code.
-
-2014-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Reduce outline translations during rendering.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Translate origin
- virtually by modifying cbox, actually translate outline if cumulative
- shift is not zero.
-
-2014-10-30 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Fix Savannah bug #35604 (cont'd).
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Remove checks and
- casts that became unnecessary after the variable type upgrades.
-
-2014-10-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [smooth] Improve code readability.
-
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Rearrange code.
-
-2014-10-29 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Unify hypotenuse approximations.
-
- * include/internal/ftcalc.h (FT_HYPOT): Move macro from here...
- * include/internal/ftobjs.h: ... to here, next to required `FT_ABS'.
- * src/smooth/ftgrays.c (gray_render_cubic): Use it here.
-
-2014-10-25 Werner Lemberg <wl@gnu.org>
-
- [cff] Test valid darkening parameter macros in `ftoption.h'.
-
- We no longer need an otherwise unused typedef that can cause a gcc
- warning.
- Problem reported by Alexei.
-
- * src/cff/cffobjs.c (cff_driver_init): Use
- `CFF_CONFIG_OPTION_DARKENING_PARAMETER_XXX' macros directly.
- (SET_DARKENING_PARAMETERS): Removed.
- Compile time tests are now ...
-
- * devel/ftoption.h, include/config/ftoption.h: ... here.
-
-2014-10-25 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Improve flat corner definition.
-
- * include/internal/ftcalc.h (FT_HYPOT): Macro to approximate Euclidean
- distance with the alpha max plus beta min algorithm.
- * src/base/ftcalc.c (ft_corner_is_flat): Use it instead of Taxicab
- metric.
-
-2014-10-23 David Weiß <David.Weiss@ptvgroup.com>
-
- [build] Improve property file for vc2010.
-
- User-defined properties should be empty by default to prevent linker
- failures.
-
- * builds/windows/vc2010/freetype.user.props,
- builds/windows/vc2010/freetype.vcxproj:
- s/OptionsDirectory/UserOptionDirectory/.
- Comment out all user options.
-
-2014-10-23 Werner Lemberg <wl@gnu.org>
-
- [cff] Work around bug in preprocessor of MSVC 2010.
-
- We have been hit by
-
- https://connect.microsoft.com/VisualStudio/feedback/details/718976/msvc-pr
-
- * devel/ftoption.h, include/config/ftoption.h: Replace
- `CFF_CONFIG_OPTION_DARKENING_PARAMETERS' with eight macros
- `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}'.
-
- * src/cff/cffobjs.c (SET_DARKENING_PARAMETERS): Removed. We no
- longer need double expansion.
- (SET_DARKENING_PARAMETERS_0): Renamed to ...
- (SET_DARKENING_PARAMETERS): ... this.
- Update call.
-
-2014-10-20 Werner Lemberg <wl@gnu.org>
-
- [sbit] Minor fixes.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit) [TT_SBIT_TABLE_TYPE_SBIX]:
- Accept overlay format also, but emit warning message in that case.
- (tt_sbit_decoder_load_metrics): Add missing newline to error
- message.
- (tt_sbit_load_sbix_image): Add `rgbl' graphic type (as used on iOS
- 7.1) to the list of unsupported formats.
-
-2014-10-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Clean up bytecode rounding.
-
- Zero distance does not have to be treated specially if you follow
- specifications and check the sign as the very last step of rounding.
-
- * src/truetype/ttinterp.c (Round_None, Round_To_Grid,
- Round_Down_To_Grid, Round_Up_To_Grid, Round_To_Double_Grid): Use
- macros when available, do not check for non-zero distance.
- (Round_To_Half_Grid, Round_Super, Round_Super_45): Ditto, return phase
- if sign changed.
-
-2014-10-18 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Unwrap engine compensation settings.
-
- * src/truetype/ttobjs.c (tt_size_init_bytecode): Updated.
-
-2014-10-18 David Weiß <David.Weiss@ptvgroup.com>
-
- [build] Add property file to vc2010 project.
-
- This simplifies custom build configurations, especially for
- automated build environments.
-
- * builds/windows/vc2010/freetype.user.props: New configuration file.
-
- * builds/windows/vc2010/freetype.vcxproj: Include
- `freetype.user.props' and use its data fields.
-
- * builds/windows/vc2010/index.html: Updated.
-
-2014-10-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Telugu.
-
- This essentially moves the Telugu script from the `Indic' hinter to
- the `Latin' hinter.
-
- Note that this is a first shot and quite certainly needs
- refinements.
-
- * src/autofit/afblue.dat: Add blue zone data for Telugu.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Telugu standard characters and move
- data out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Telugu data out of
- AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afstyles.h: Update Telugu data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2014-10-18 David Wimsey <david@wimsey.us>
-
- [cmake] Add iOS build support.
- From Savannah patch #8497.
-
- * builds/cmake/iOS.cmake: New file. Universal binaries are built
- with both 32 and 64 bit arm architectures.
-
- * CMakeLists.txt (IOS_PLATFORM): New variable for running the iOS
- toolchain. Possible values are `OS' to build on iOS, or
- `SIMULATOR' to build on APPLE.
-
-2014-10-16 Behdad Esfahbod <behdad@behdad.org>
- Werner Lemberg <wl@gnu.org>
-
- [cff] Add `CFF_CONFIG_OPTION_DARKENING_PARAMETERS' config macro.
-
- * devel/ftoption.h, include/config/ftoption.h
- (CFF_CONFIG_OPTION_DARKENING_PARAMETERS): New macro.
-
- * src/cff/cffobjs.c (SET_DARKENING_PARAMETERS,
- SET_DARKENING_PARAMETERS_0): New macros.
- (cff_driver_init): Use new macros.
-
-2014-10-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Limit delta shift range.
-
- The valid range for delta shift is zero through six. Negative values
- are invalid according to
-
- https://developer.apple.com/fonts/TrueType-Reference-Manual/RM04/Chap4.html#delta%20shift
-
- * src/truetype/ttobjs.h (delta_shift, delta_base): Make unsigned.
- * src/truetype/ttinterp.h (DO_SDS): Throw an error if `delta_shift'
- is out of range.
- (Ins_DELTAP, Ins_DELTAC): Optimize for valid `delta_shift'.
-
-2014-10-16 Werner Lemberg <wl@gnu.org>
-
- A better fix for Savannah bug #43392.
- Suggested by Doug Felt <dougfelt@gmail.com>.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_metrics): Set
- `vertAdvance' to zero...
-
- * src/truetype/ttgload.c (TT_Load_Glyph): ... and set here a default
- value for `vertAdvance' based on `linearVertAdvance' in case
- `vertAdvance' is zero. Note that the previous computed ad-hoc value
- for `linearVertAdvance' was apparently not tested in a real-life
- situation.
-
-2014-10-14 David Weiß <David.Weiss@ptvgroup.com>
-
- [build] Better optimization settings for vc2010 solution file.
-
- * builds/windows/vc2010/freetype.sln,
- builds/windows/vc2010/freetype.vcxproj: Updated.
-
-2014-10-14 Werner Lemberg <wl@gnu.org>
-
- [autofit] Adjust Devenagari character range.
-
- * src/autofit/afranges.c (af_deva_uniranges): Omit characters that
- are common to all other Indic scripts.
-
-2014-10-12 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix Savannah bug #43392.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_metrics): Don't let
- vertical metrics uninitialized.
-
-2014-10-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Small bbox correction.
-
- * src/base/ftbbox.c (FT_Outline_Get_BBox): Start from nonsense bbox
- instead of initial point that could be `off' in conic outlines.
-
-2014-10-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Fix Savannah bug #43356.
-
- * src/base/ftbbox.c (BBox_Move_To, BBox_Conic_To): Update bbox in case
- of implicit `to'.
- (BBox_Line_To): New emitter that does not update bbox.
-
-2014-10-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Introduce and use new macro `FT_UPDATE_BBOX'
-
- * src/base/ftbbox.c (FT_UPDATE_BBOX): New macro.
- (FT_Outline_Get_BBox): Use it here.
-
-2014-10-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Significant optimization of `ft_div64by32'
-
- We shift as many bits as we can into the high register, perform
- 32-bit division with modulo there, then work through the remaining
- bits with long division. This optimization is especially noticeable
- for smaller dividends that barely use the high register.
-
- * src/base/ftcalc.c (ft_div64by32): Updated.
-
-2014-10-02 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix Savannah bug #43271.
-
- * src/cff/cf2font.c (cf2_computeDarkening): Change overflow
- detection to use logarithms and clamp `scaledStem'.
-
-2014-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftcalc.c: Remove miscellaneous type casts.
-
-2014-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Use more common `FT_MSB' implementation with masks.
-
- * src/base/ftcalc.c (FT_MSB): Updated.
-
-2014-09-30 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Clean up.
-
- * src/base/ftcalc.c (FT_MOVE_SIGN): New macro for frequently used
- code.
-
-2014-09-25 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Avoid unnecessary long division.
-
- This applies to `FT_MulDiv' but not to `FT_DivFix', where overflows or
- lack thereof are predicted accurately.
-
- * src/base/ftcalc.c (ft_div64by32): Improve readability.
- (FT_MulDiv, FT_MulDiv_No_Round) [!FT_LONG64]: Use straight division
- when multiplication stayed within 32 bits.
-
-2014-09-24 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor clean-ups.
-
- * src/autofit/afhints.c (AF_FLAGS): Remove obsolete values.
-
- * src/autofit/afhints.c (af_glyph_hints_dump_points,
- af_glyph_hints_align_strong_points): Updated.
-
- * src/autofit/aflatin.c (af_latin_hints_link_segments,
- af_latin_hints_compute_segments), src/autofit/afcjk.c
- (af_cjk_hints_link_segments), src/autofit/aflatin2.c
- (af_latin2_hints_link_segments, af_latin2_hints_compute_segments):
- There are no longer fake segments since more than 10 years...
-
-2014-09-22 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor code streamlining.
-
- * src/autofit/afhints.c (af_axis_hints_new_edge): Remove redundant
- initialization.
-
-2014-09-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftcalc.c: Harmonize code.
-
-2014-09-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Tighten the overflow check in `FT_MulDiv'.
-
- * src/base/ftcalc.c (FT_MulDiv) [!FT_LONG64]: Updated.
-
-2014-09-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Fix Savannah bug #43153.
-
- * src/psaux/psconv.c (PS_Conv_ToFixed): Add protection against
- overflow in `divider'.
-
-2014-09-03 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Tighten the overflow check in `FT_DivFix'.
-
- This fixes a 13-year old bug. The original overflow check should have
- been updated when rounding was introduced into this function
- (c2cd00443b).
-
- * src/base/ftcalc.c (FT_DivFix) [!FT_LONG64]: Updated.
- * include/freetype.h (FT_DivFix): Updated documentation.
-
-2014-09-03 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Tighten the overflow check in `FT_MulFix'.
-
- * src/base/ftcalc.c (FT_MulFix) [!FT_LONG64]: Updated.
-
-2014-09-02 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Shortcut ppem calculations for square pixels.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): New field
- `cur_ppem_func' with a function pointer.
- * src/truetype/ttinterp.c (TT_RunIns): Initialize `cur_ppem_func'
- depending on the pixel geometry to either...
- (Current_Ppem_Stretched): ... this for stretched pixels.
- (Current_Ppem): ... or this for square pixels.
- (DO_MPPEM, DO_MPS, Ins_DELTAP, Ins_DELTAC): Use `cur_ppem_func'.
-
-2014-08-31 Behdad Esfahbod <behdad@behdad.org>
-
- Don't use `register' keyword. Fixes compiler warnings.
-
- * src/base/ftcalc.c (FT_Add64) [!FT_LONG64]: Do it.
- * src/gzip/inftrees.c (huft_build): Ditto.
- * src/truetype/ttinterp.c (TT_MulFix14_arm): Ditto.
-
-2014-08-24 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [truetype] Optimize DELTAP and DELTAC.
-
- * src/truetype/ttinterp.c (Ins_DELTAP, Ins_DELTAC): Move ppem
- calculations outside of the loop.
-
-2014-08-21 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Fix Savannah bug #43033.
-
- * include/config/ftconfig.h, builds/unix/ftconfig.in,
- builds/vms/ftconfig.h [FT_LONG64]: Do not disable the macro when
- 64-bit type is `long'.
-
-2014-08-20 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Small optimization of `FT_MulFix'.
-
- * src/base/ftcalc.c (FT_MulFix): Loosen up the condition for direct
- 32-bit calculations.
-
-2014-08-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Use unsigned calculation in `FT_MulDiv'.
-
- * src/base/ftcalc.c (FT_MulDiv): Updated to expand 32-bit range.
-
-2014-08-18 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Remove truncation in `FT_DivFix'.
-
- * src/base/ftcalc.c (FT_DivFix): Updated.
-
-2014-08-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Minor refactoring.
-
- * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round): Updated.
-
-2014-08-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Turn FT_MSB into a macro when using gcc builtins.
-
- * src/base/ftcalc.c, include/internal/ftcalc.h: Updated.
-
-2014-08-12 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Avoid undefined FT_MSB in `BBox_Cubic_Check'.
-
- * src/base/ftbbox.c (BBox_Cubic_Check): Update.
- (update_cubic_max): Repalce with...
- (cubic_peak): ... this, which now handles upscaling.
-
-2014-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Handle collapsed outlines to avoid undefined FT_MSB.
-
- * src/base/ftoutln.c (FT_Outline_Get_Orientation): Update.
-
-2014-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Restore FT_MulFix inlining.
-
- * include/freetype.h (FT_MulFix): Unconditionally defined.
-
- * src/base/ftcalc.c [FT_MULFIX_ASSEMBLER]: Move code from here...
-
- * include/internal/ftcalc.h [FT_MULFIX_ASSEMBLER]: ... to here,
- which conditionally replaces the function with an inline version
- through the macro.
-
-2014-08-08 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Refactor.
-
-2014-07-26 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix typo.
-
- * src/cff/cf2hints.c (cf2_glyphpath_computeOffset): Use correct
- offsets in third quadrant.
-
- Reported by maks <maksqwe1@ukr.net>.
-
-2014-07-17 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #42788.
-
- * src/pfr/pfrobjs.c: Include `ftcalc.h'.
-
-2014-07-16 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- Replace `ft_highpow2' function.
-
- * src/pfr/pfrobjs.c (pfr_face_get_kerning): Use `FT_MSB' instead of
- `ft_highpow2'.
-
- * src/base/ftutil.c, include/internal/ftobjs.h (ft_highpow2): Remove
- it.
-
-2014-07-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * src/base/ftcalc.c (FT_MSB): Utilize gcc builtins.
-
-2014-07-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Move assembler code back in the source file.
-
- FT_MulFix assembler used to reside in ftcalc.c before f47d263f1b.
-
- * include/config/ftconfig.h, builds/unix/ftconfig.in,
- builds/vms/ftconfig.h [FT_MULFIX_ASSEMBLER]: Move code from here...
-
- * src/base/ftcalc.c [FT_MULFIX_ASSEMBLER]: ... to here.
-
-2014-07-14 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Further clean up color bitmap conversion.
-
- * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Stop
- using FT_MulFix and FT_DivFix since all calculations fit into 32 bits.
-
-2014-07-13 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve handling of buggy `prep' tables.
-
- In case of an error in the `prep' table, no longer try to execute it
- again and again. This makes FreeType handle endless loops in buggy
- fonts much faster.
-
- * src/truetype/ttobjs.h (TT_SizeRec): The fields `bytecode_ready'
- and `cvt_ready' are now negative if not initialized yet, otherwise
- they indicate the error code of the last run.
-
- * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep,
- tt_size_done_bytecode, tt_size_init_bytecode,
- tt_size_ready_bytecode, tt_size_init, tt_size_done, tt_size_reset):
- Updated.
-
- * src/truetype/ttgload.c (tt_loader_init): Updated.
- * src/truetype/ttinterp.c (TT_RunIns): Force reexecution of `fpgm'
- and `prep' only if we are in the `glyf' table.
-
-2014-07-12 Werner Lemberg <wl@gnu.org>
-
- * builds/vms/ftconfig.h: Synchronize.
- Problem reported by Alexei.
-
-2014-07-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Clean up bitmap conversion.
-
- * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Use
- appropriate FT_DivFix and remove superfluous upscaling.
-
-2014-07-04 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Small optimization of the ancient code.
-
- * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round): Loosen up the
- condition for direct 32-bit calculations.
-
-2014-06-27 Werner Lemberg <wl@gnu.org>
-
- Fix Apple standard glyph names.
-
- * src/sfnt/ttpost.c (tt_post_default_names): Synchronize with
- `tools/glnames.py'
-
- Problem reported by Adam Twardoch <adam@fontlab.com>.
-
-2014-06-17 Werner Lemberg <wl@gnu.org>
-
- Partially revert commit from 2014-06-13.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Move
- declaration of `p_first' and `p_last' out of the loop.
-
-2014-06-17 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/freetype2.m4: s/AC_PATH_PROG/AC_PATH_TOOL/.
-
- This simplifies cross-compiling.
-
-2014-06-13 Werner Lemberg <wl@gnu.org>
-
- Fix more compiler warnings.
- Reported by Wojciech Mamrak <wmamrak@gmail.com>.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
- Make integer constant unsigned.
-
- * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
- <TT_SBIT_TABLE_TYPE_SBIX>: Fix types.
- (tt_sbit_decoder_load_compound, tt_face_load_sbix_image): Add proper
- casts.
-
-2014-06-13 Werner Lemberg <wl@gnu.org>
-
- Fix compiler warnings.
- Reported by Wojciech Mamrak <wmamrak@gmail.com>.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage),
- src/autofit/afmodule.c (af_property_set): Fix `signed' vs.
- `unsigned' issues.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Make compiler
- happy.
-
- * src/base/ftlcdfil.c (_ft_lcd_filter_fir): Use only four elements
- for `fir'.
- Fix `signed' vs. `unsigned' issues.
-
- * src/sfnt/sfobjs.c (WRITE_BYTE): Removed, unused.
- (WRITE_USHORT, WRITE_ULONG): Add proper casts.
-
- * src/truetype/ttgload.c (TT_Get_VMetrics): Add proper casts.
-
- * src/truetype/ttinterp.c (Ins_DELTAP): Add proper casts for `B1'
- and `B2'.
-
-2014-05-16 Alexey Petruchik <alexey.petruchik@gmail.com>
-
- [cmake] Add option to build OS X framework.
-
- * CMakeLists.txt: Update accordingly.
-
- * builds/mac/freetype-Info.plist: New file.
-
-2014-05-13 Pavel Koshevoy <pkoshevoy@gmail.com>
-
- * CMakeLists.txt (BASE_SRCS): Add missing `ftbdf.c'.
-
-2014-05-11 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix variable initializations.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Assign default
- values to `in_dir' and `out_dir' for all points.
-
-2014-05-11 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix crash with font `CabinSketch-Bold.ttf'.
-
- Problem reported by Ralf S. Engelschall <rse@engelschall.com>.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Fix threshold for
- finding first non-near point.
- Properly initialize non-near point deltas.
-
-2014-05-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue-zone support for Devanagari.
-
- This essentially moves the Devanagari script from the `Indic' hinter
- to the `Latin' hinter. Thanks to Girish Dalvi
- <girish.dalvi@gmail.com> for guidance with blue zone characters!
-
- * src/autofit/afblue.dat: Add blue zone data for Devanagari.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/afscript.h: Add Devanagari standard characters and
- move data out of AF_CONFIG_OPTION_INDIC block.
-
- * src/autofit/afranges.c: Move Devanagari data out of
- AF_CONFIG_OPTION_INDIC block.
- Move U+20B9, (new) Rupee sign, from Latin to Devanagari.
-
- * src/autofit/afstyles.h: Update Devanagari data; in particular, use
- AF_WRITING_SYSTEM_LATIN.
-
-2014-05-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix handling of neutral blue zones in stems.
-
- * src/autofit/afhints.h (AF_Edge_Flags): New value
- `AF_EDGE_NEUTRAL'.
-
- * src/autofit/aflatin.c (af_latin_hints_compute_blue_edges): Trace
- neutral blue zones with AF_EDGE_NEUTRAL.
- (af_latin_hint_edges): Skip neutral blue zones if necessary.
-
-2014-04-28 Werner Lemberg <wl@gnu.org>
-
- [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-25 Werner Lemberg <wl@gnu.org>
-
- * 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-23 Werner Lemberg <wl@gnu.org>
-
- * 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-22 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/pngshim.c (error_callback): s/longjmp/ft_longjmp/.
-
-2014-04-20 Werner Lemberg <wl@gnu.org>
-
- [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-17 Werner Lemberg <wl@gnu.org>
-
- [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 Werner Lemberg <wl@gnu.org>
-
- 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-15 Werner Lemberg <wl@gnu.org>
-
- [afblue.pl]: Minor improvements.
-
- * src/tools/afblue.pl: Allow whitespace before comments.
- Ignore whitespace in strings.
-
-2014-04-14 Werner Lemberg <wl@gnu.org>
-
- [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-13 David Weber <weber.aulendorf@googlemail.com>
-
- [smooth] Fix stand-alone compilation.
-
- * src/smooth/ftgrays.c (FT_BEGIN_STMNT, FT_END_STMNT): Define.
-
-2014-04-12 Werner Lemberg <wl@gnu.org>
-
- [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-05 Werner Lemberg <wl@gnu.org>
-
- [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-03 Werner Lemberg <wl@gnu.org>
-
- 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-03-27 Werner Lemberg <wl@gnu.org>
-
- 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-24 Werner Lemberg <wl@gnu.org>
-
- 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-22 Werner Lemberg <wl@gnu.org>
-
- 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-20 Werner Lemberg <wl@gnu.org>
-
- CMakeLists.txt: Another fix for include directories.
-
- Problem reported by Taylor Holberton <taylorcholberton@gmail.com>.
-
-2014-03-19 Werner Lemberg <wl@gnu.org>
-
- CMakeLists.txt: Fix include directories.
-
- Problem reported by Taylor Holberton <taylorcholberton@gmail.com>.
-
-2014-03-19 Werner Lemberg <wl@gnu.org>
-
- 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-18 Sean McBride <sean@rogue-research.com>
- Werner Lemberg <wl@gnu.org>
-
- 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-17 Werner Lemberg <wl@gnu.org>
-
- 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-14 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.raw: Don't show error messages of `which'.
-
-2014-03-09 Alan Coopersmith <alan.coopersmith@oracle.com>
-
- Fix cppcheck 1.64 warning.
-
- * src/autofit/afglobal.c (af_face_globals_new): Catch NULL pointer
- dereference in case of error.
-
-2014-03-09 Sean McBride <sean@rogue-research.com>
-
- * src/sfnt/ttcmap.c (tt_face_build_cmaps): Remove clang warning.
-
-2014-03-06 Werner Lemberg <wl@gnu.org>
-
- * 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 Werner Lemberg <wl@gnu.org>
-
- 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 Sean McBride <sean@rogue-research.com>
-
- Remove more clang analyzer warnings.
-
- * src/bdf/bdflib.c (_bdf_readstream), src/truetype/ttgload.c
- (TT_Load_Glyph): Remove dead stores.
-
-2014-03-05 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/configure.raw: Simplify.
-
-2014-03-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Fix a bug in configure in library dependency setting
- Reported in https://bugs.freedesktop.org/show_bug.cgi?id=75652.
-
- * builds/unix/configure.raw: Use `x"${xxx}" != xno' style.
-
-2014-03-04 Werner Lemberg <wl@gnu.org>
-
- 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 Sean McBride <sean@rogue-research.com>
-
- 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-03 Werner Lemberg <wl@gnu.org>
-
- Rewrite library option handling in `configure'.
-
- 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.
- * docs/freetype-config.1: Document `--static'.
-
- * builds/unix/freetype2.in, builds/unix/unix-def.in: Updated.
-
-2014-03-01 Werner Lemberg <wl@gnu.org>
-
- 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 Werner Lemberg <wl@gnu.org>
-
- * docs/INSTALL.CROSS: Revised and updated.
-
-2014-03-01 Werner Lemberg <wl@gnu.org>
-
- 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 Werner Lemberg <wl@gnu.org>
-
- 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 Werner Lemberg <wl@gnu.org>
-
- 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-02-28 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [cff] Math simplifications.
-
- * src/cf2blues.c (cf2_blues_init): Use `FT_MulDiv'.
- * src/cf2ft.c (cf2_getScaleAndHintFlag): Use simple division.
-
-2014-02-28 Dave Arnold <darnold@adobe.com>
-
- [cff] 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 Dave Arnold <darnold@adobe.com>
-
- [cff] 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-26 Werner Lemberg <wl@gnu.org>
-
- [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 Werner Lemberg <wl@gnu.org>
-
- [winfnt] Fix Savannah bug #41694.
-
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Check glyph offset.
-
-2014-02-26 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #41693.
-
- * src/cff/cffload.c (CFF_Load_FD_Select): Reject empty array.
-
-2014-02-26 Werner Lemberg <wl@gnu.org>
-
- [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-17 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [autofit] Fix `make multi' compilation.
-
- * src/autofit/hbshim.c: Include `afglobal.h' and `aftypes.h'.
-
-2014-02-19 Werner Lemberg <wl@gnu.org>
- Simon Bünzli <zeniko@gmail.com>
-
- 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 Simon Bünzli <zeniko@gmail.com>
-
- Fix Savannah bug #41590.
-
- * src/type1/t1load.c (parse_encoding): Protect against invalid
- number.
-
-2014-02-12 Dave Arnold <darnold@adobe.com>
-
- [cff] Optimize by using `FT_MulDiv'.
- Suggested by Alexei.
-
- * src/cff/cf2font.c (cf2_computeDarkening): Do it.
-
-2014-02-12 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41465.
-
- * builds/unix/unix-def.in (CLEAN): Add `freetype-config'.
- (DISTCLEAN): Remove `freetype-config'.
-
-2014-02-08 Sean McBride <sean@rogue-research.com>
-
- Fix clang static analyzer and compiler warnings.
-
- * src/autofit/afhints.c (af_glyph_hints_align_weak_points),
- src/autofit/afloader (af_loader_load_g) <FT_GLYPH_FORMAT_COMPOSITE>,
- src/base/ftcalc.c (FT_MSB), src/base/ftoutln.c
- (FT_Outline_Decompose), src/bdf/bdfdrivr.c (bdf_interpret_style),
- src/cff/cffparse.c (cff_parse_integer), src/cid/cidparse.c
- (cid_parser_new), src/pfr/pfrload.c (pfr_phy_font_load),
- src/raster/ftraster.c (Decompose_Curve), src/sfnt/sfdriver.c
- (sfnt_get_ps_name), src/sfnt/ttcmap.c (tt_cmap12_next,
- tt_cmap13_next), src/smooth/ftgrays.c (gray_hline): Remove dead
- code.
-
- * src/autofit/afmodule.c (af_property_get_face_globals,
- af_property_set, af_property_get), src/base/ftbitmap.c
- (ft_gray_for_premultiplied_srgb_bgra): Make functions static.
-
- * src/base/ftobjs.c (ft_remove_renderer): Protect against
- library == NULL.
- (ft_property_do): Make function static.
-
- * src/base/ftrfork.c: Include `ftbase.h'.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbix_image)
- [!FT_CONFIG_OPTION_USE_PNG], src/type1/t1gload.c
- (T1_Compute_Max_Advance): Avoid compiler warning.
-
- * src/truetype/ttinterp.c (TT_New_Context): Reduce scope of
- variable.
-
-2014-02-08 Werner Lemberg <wl@gnu.org>
-
- Fix Windows build directories.
-
- The build target is now `windows' instead of `win32'.
-
- Problem reported by Nickolas George <darknova.clan@gmail.com>.
-
- * builds/modules.mk: Don't use `win32' and `win16' (!) but
- `windows'.
-
- * builds/windows/detect.mk, builds/windows/win32-def.mk:
- s/win32/windows/.
-
-2014-02-08 Eugen Sawin <esawin@mozilla.com>
-
- Fix Savannah bug #41507.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap)
- [!FT_CONFIG_OPTION_USE_PNG] <17, 17, 19>: Fix error handling.
-
-2014-02-08 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix minor performance bug.
-
- * src/cff/cf2font.c (cf2_font_setup): Darkening amount and blue zone
- calculations are now cached and not recomputed on each glyph.
-
-2014-02-05 Werner Lemberg <wl@gnu.org>
-
- Fix problems with perl 5.8.8 as distributed with current MinGW.
-
- * src/tools/afblue.pl: Work-around for Perl bug #63402.
- (string_re): Avoid `possessive quantifiers', which have been
- introduced in Perl version 5.10.
-
-2014-02-04 Werner Lemberg <wl@gnu.org>
-
- Fix compilation with MinGW.
-
- Right now, compilation out of the box with latest MinGW is broken
- due to bugs in header files of mingwrt 4.0.3 in strict ANSI mode,
- cf.
-
- https://sourceforge.net/p/mingw/bugs/2024/
- https://sourceforge.net/p/mingw/bugs/2046/
-
- * builds/unix/configure.raw: Don't set `-ansi' flag for MinGW.
-
-2014-02-04 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor fix.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
- src/autofit/aflatin.c (af_latin_metrics_init_widths): Fix handling
- of alternative standard characters.
- This also fixes a compilation warning in non-debug mode.
-
-2014-02-03 Werner Lemberg <wl@gnu.org>
-
- [cff] Fix Savannah bug #41363.
-
- * src/cff/cf2ft.c (cf2_checkTransform): Convert assertion into
- parameter check.
- (cf2_decoder_parse_charstrings): Call `cf2_checkTransform' only if
- we are scaling the outline.
- (cf2_getPpemY): Remove problematic assertion.
-
-2014-01-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce two more slots for standard characters.
-
- This is useful for OpenType features like `c2sc' (caps to small
- caps) that don't have lowercase letters by definition, or other
- features that mainly operate on numerals.
-
- * src/autofit/afscript.h: Add more standard characters.
-
- * src/autofit/aftypes.h: Update use of `SCRIPT' macro.
- (AF_ScriptClassRec): Add members to hold two more standard
- characters.
- (AF_DEFINE_SCRIPT_CLASS): Updated.
-
- * src/autofit/afglobal.c, src/autofit/afglobal.h,
- * src/autofit/afpic.c, src/autofit/afranges.h, src/autofit/hbshim.c:
- Update use of `SCRIPT' macro.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
- src/autofit/aflatin.c (af_latin_metrics_init_widths): Scan two more
- standard characters.
-
-2014-01-24 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41320.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues)
- <AF_LATIN_IS_LONG_BLUE>: Avoid negative index of `last'.
-
-2014-01-23 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41310.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap) <glyph_format==5>:
- Don't check metrics, which this format doesn't have.
- This is another correction to the commit from 2013-11-21.
-
-2014-01-23 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41309.
-
- * src/type1/t1load.c (t1_parse_font_matrix): Properly handle result
- of `T1_ToFixedArray'.
-
- * src/cid/cidload.c (cid_parse_font_matrix): Synchronize with
- `t1_parse_font_matrix'.
-
- * src/type42/t42parse.c (t42_parse_font_matrix): Synchronize with
- `t1_parse_font_matrix'.
- (t42_parse_encoding): Synchronize with `t1_parse_encoding'.
-
- * src/psaux/psobjs.c (ps_parser_load_field) <T1_FIELD_TYPE_BBOX>,
- <T1_FIELD_TYPE_MMOX>: Properly handle result of `ps_tofixedarray'.
-
-2014-01-22 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/hbshim.c (af_get_coverage): Fix memory leaks.
-
-2014-01-16 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing of style coverages.
-
- * include/internal/fttrace.h: Add `afglobal' for tracing style
- coverages.
-
- * src/autofit/afglobal.c: Include FT_INTERNAL_DEBUG_H.
- (FT_COMPONENT): Define.
- (af_face_globals_compute_style_coverage): Trace `gstyles' array
- data.
-
-2014-01-09 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #41158.
-
- * builds/unix/install.mk (install): Create man page directory.
-
-2014-01-08 Chongyu Zhu <lembacon@gmail.com>
-
- [arm] Fix Savannah bug #41138, part 2.
-
- * builds/unix/ftconfig.in (FT_MulFix_arm), include/config/ftconfig.h
- (FT_MulFix_arm), src/truetype/ttinterp.c (TT_MulFix14_arm): Fix
- preprocessor conditionals for `add.w'.
-
-2014-01-08 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix Savannah bug #41138, part 1.
-
- * src/tools/afblue.pl <Handling #endif>: Produce correct auxiliary
- enumeration names for generated `#else'.
-
- * src/autofit/afblue.h: Regenerated.
-
-2014-01-06 Werner Lemberg <wl@gnu.org>
-
- Add manual page for `freetype-config'.
- Contributed by Nis Martensen <nis.martensen@web.de>.
-
- * docs/freetype-config.1: New file.
-
- * builds/unix/unix-def.in (mandir): Define.
- * builds/unix/install.mk (install, uninstall): Handle manpage.
-
-2014-01-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Minor fixes for `afblue.pl'.
-
- * src/tools/afblue.pl (aux_name): Don't use `reverse'.
- <Handling #endif>: Use proper indentation for generated `#else'.
-
- * src/autofit/afblue.h: Regenerated.
-
-2014-01-04 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix Indic scripts.
-
- Split the single, incorrect Indic entry into separate scripts so
- that the covered ranges are the same: Bengali, Devanagari, Gujarati,
- Gurmukhi, Kannada, Limbu, Malayalam, Oriya, Sinhala, Sundanese,
- Syloti Nagri, Tamil, Telugu, and Tibetan. At the same time, remove
- entries for Meetai Mayak and Sharada – the Unicode ranges were
- incorrect (and nobody has complained about that), fonts are scarce
- for those scripts, and the Indic auto-hinter support is rudimentary
- anyways.
-
- * src/autofit/afscript.h: Updated, using AF_CONFIG_OPTION_INDIC and
- AF_CONFIG_OPTION_CJK.
-
- * src/autofit/afstyles.h (STYLE_DEFAULT_INDIC): New auxiliary macro.
- Use it, together with AF_CONFIG_OPTION_INDIC and
- AF_CONFIG_OPTION_CJK, to update.
-
- * src/autofit/afranges.c [AF_CONFIG_OPTION_INDIC]: Updated.
- [!AF_CONFIG_OPTION_INDIC, !AF_CONFIG_OPTION_CJK]: Removed.
- Sort entries by tags.
-
-2014-01-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Thinko.
-
- * src/autofit/hbshim.c (af_get_char_index): Similar to
- `af_get_coverage', reject glyphs which are not substituted.
-
-2014-01-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix handling of default coverages.
-
- With this commit, the implementation of coverage handling is
- completed.
-
- * src/autofit/hbshim.c (af_get_coverage): Exit early if nothing to
- do.
- Reject coverages which don't contain appropriate glyphs for blue
- zones.
-
-2014-01-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix handling of default coverages.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
- First handle non-default coverages, then the default coverage of the
- default script, and finally the other default coverages.
-
-2014-01-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix scaling of HarfBuzz shaping.
-
- * src/autofit/hbshim.c (af_get_char_index): Scale to units per EM.
-
-2014-01-03 Werner Lemberg <wl@gnu.org>
-
- [autofit] Better ftgrid support.
-
- * src/autofit/afhints.c (af_glyph_hints_get_segment_offset): Add
- parameters `is_blue' and `blue_offset'.
-
-2014-01-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Remove some styles.
-
- * src/autofit/afcover.h: Remove coverages for alternative fractions,
- denominators, numerators, and fractions.
-
- * src/autofit/afstyles.h (META_STYLE_LATIN): Updated.
-
-2014-01-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add more styles.
-
- * src/autofit/afstyles.h (STYLE_LATIN, META_STYLE_LATIN): New
- auxiliary macros; use them to define styles for Cyrillic, Greek, and
- Latin.
-
- * src/autofit/afcover.h: Remove coverage for oldstyle figures.
- Since those digits are used in combination with ordinary letters, it
- makes no sense to handle them separately.
-
- * src/autofit/afglobal.c (af_face_globals_get_metrics): Don't limit
- `options' parameter to 4 bits.
-
-2014-01-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix style assignments to glyphs.
-
- * src/autofit/hbshim.c (af_get_coverage)
- [FT_CONFIG_OPTION_USE_HARFBUZZ]: Scan GPOS coverage of features also
- so that we can skip glyphs that have both GSUB and GPOS data.
-
-2014-01-01 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/hbshim.c: s/{lookups,glyphs}/gsub_{lookups,glyphs}/.
-
-2014-01-01 Werner Lemberg <wl@gnu.org>
-
- [autofit] Implement and use `af_get_char_index' with HarfBuzz.
-
- * src/autofit/hbshim.c (COVERAGE) [FT_CONFIG_OPTION_USE_HARFBUZZ]:
- Redefine to construct HarfBuzz features.
- (af_get_char_index) [FT_CONFIG_OPTION_USE_HARFBUZZ]: Rewritten.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Use
- `y_offset' to adjust `best_y'.
-
-2013-12-31 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/AF_STYLE_...._DEFAULT/AF_STYLE_...._DFLT/i.
-
-2013-12-31 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix interface of `af_get_char_index'.
-
- * src/autofit/hbshim.c (af_get_char_index): Return error value.
- Add argument for y offset (to be used in a yet-to-come patch).
-
- * src/autofit/hbshim.h, src/autofit/afcjk.c,
- src/autofit/aflatin.c: Updated.
-
-2013-12-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Don't combine multiple features into one set.
-
- Combining them, as originally envisioned, would lead to much more
- complicated code, as investigations have shown meanwhile. The major
- drawback is that we run out of available style slots much earlier.
- However, this is only a theoretical issue since we don't support a
- large number of scripts currently.
-
- * src/autofit/afcover.h: Replace `COVERAGE_{1,2,3}' macros with
- a single-element `COVERAGE' macro, sort the elements by the feature
- tags, and add entry for `ruby'.
-
- * src/autofit/aftypes.h: Updated.
- * src/autofit/hbshim.c: Updated.
-
-2013-12-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Code shuffling to reduce use of cpp macros.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
- Call `af_get_coverage' unconditionally.
-
- * src/autofit/autofit.c: Include `hbshim.c' unconditionally.
-
- * src/autofit/hbshim.c (af_get_coverage)
- [!FT_CONFIG_OPTION_USE_HARFBUZZ]: Provide dummy function.
-
- * src/autofit/hbshim.h: Provide function declarations
- unconditionally.
-
-2013-12-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add wrapper function for `FT_Get_Char_Index'.
-
- Yet-to-come changes will provide HarfBuzz functionality for the new
- function.
-
- * src/autofit/hbshim.c (af_get_char_index): New function.
- * src/autofit/hbshim.h: Updated.
-
- * 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.
-
-2013-12-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Use `global' HarfBuzz font object.
-
- We now use `hb_font' instead of `hb_face' since yet-to-come changes
- need this.
-
- * src/autofit/afglobal.h: Include `hbshim.h'.
- (AF_FaceGlobalsRec) [FT_CONFIG_OPTION_USE_HARFBUZZ]: New member
- `hb_font'.
-
- * src/autofit/afglobal.c (af_face_globals_new)
- [FT_CONFIG_OPTION_USE_HARFBUZZ]: Create `hb_font'.
- (af_face_globals_free) [FT_CONFIG_OPTION_USE_HARFBUZZ]: Destroy
- `hb_font'.
-
- * src/autofit/hbshim.h: Include HarfBuzz headers.
-
- * src/autofit/hbshim.c: Include `hbshim.h' instead of HarfBuzz
- headers.
- (af_get_coverage): Updated.
-
-2013-12-27 Werner Lemberg <wl@gnu.org>
-
- [autofit] Handle `DFLT' OpenType script for coverages.
-
- * include/ftautoh.h: Document new `default-script' property.
-
- * src/autofit/hbshim.c (af_get_coverage): Use `AF_FaceGlobals' for
- type of first parameter.
- (script_tags): Add one more element.
- (af_get_coverage): Adjust `script_tags' to handle `DFLT' script tag.
-
- * src/autofit/hbshim.h: Updated.
-
- * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
- Updated.
-
- * src/autofit/afglobal.h (AF_SCRIPT_DEFAULT): New macro.
-
- * src/autofit/afmodule.h (AF_ModuleRec): New `default_script'
- member.
-
- * src/autofit/afmodule.c (af_property_set, af_property_get): Handle
- `default-script' property.
- (af_autofitter_init): Updated.
-
-2013-12-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [ftrfork] Fix the face order difference between POSIX and Carbon.
-
- The fragmented resources in Suitcase and .dfont should be reordered
- when `POST' resource for Type1 is being restored, but reordering of
- sfnt resources induces the different face order. Now the ordering
- is restricted to `POST' resource only, to prevent the different
- order issue (e.g. the face index in the fontconfig cache generated
- with Carbon framework is incompatible with that by FreeType 2
- without Carbon framework.) Found by Khaled Hosny and Hin-Tak Leung.
-
- http://lists.gnu.org/archive/html/freetype-devel/2013-02/msg00035.html
- http://lists.gnu.org/archive/html/freetype-devel/2013-12/msg00027.html
-
- * src/base/ftrfork.c (FT_Raccess_Get_DataOffsets): Add a switch
- `sort_by_res_id' to control the fragmented resource ordering.
- * include/internal/ftrfork.h: Declare new switch.
- * src/base/ftobjs.c (IsMacResource): Enable the sorting for `POST'
- resource, and disable the sorting for `sfnt' resource.
-
-2013-12-25 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #40997.
-
- * src/bdf/bdfdrivr.c (BDF_Face_Init): Only use OR operator to
- adjust face flags since FT_FACE_FLAG_EXTERNAL_STREAM might already
- be set.
- * src/cff/cffobjs.c (cff_face_init): Ditto.
- * src/cid/cidobjs.c (cid_face_init): Ditto.
- * src/pcf/pcfread.c (pcf_load_font): Ditto.
- * src/pfr/pfrobjs.c (pfr_face_init): Ditto.
- * src/type1/t1objs.c (T1_Face_Init): Ditto.
- * src/type42/t42objs.c (T42_Face_Init): Ditto.
- * src/winfonts/winfnt.c (FNT_Face_Init): Ditto.
-
-2013-12-21 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce `coverages'.
-
- Coverages are the interface to the HarfBuzz library to acces
- OpenType features for handling glyphs not addressable by the cmap.
-
- Right now, compilation of HarfBuzz is only added to the development
- build. A solution for standard build mode will be delayed until
- HarfBuzz gets split into two libraries to avoid mutual dependencies
- between FreeType and HarfBuzz.
-
- Note that this is only a first step in handling coverages, basically
- providing the framework only. Code for handling selected OpenType
- features (this is, actually using the data in `afcover.h') will
- follow.
-
- * devel/ftoption.h, include/config/ftoption.h
- (FT_CONFIG_OPTION_USE_HARFBUZZ): New macro.
-
- * src/autofit/hbshim.c, src/autofit/hbshim.h, src/autofit/afcover.h:
- New files.
-
- * src/autofit/afscript.h: Add HarfBuzz script name tags.
-
- * src/autofit/afstyles.h: Add default coverage enumeration values.
-
- * src/autofit/aftypes.h: Update use of `SCRIPT' and `STYLE' macros.
- (AF_Coverage): New enumeration (generated by `afcover.h').
- (AF_StyleClassRec): New member `coverage'.
- (AF_DEFINE_STYLE_CLASS): Updated.
-
- * include/internal/fttrace.h: Add `afharfbuzz' for tracing coverage
- data.
-
- * src/autofit/afglobal.h: Update use of `SCRIPT' and `STYLE' macros.
- (AF_SCRIPT_FALLBACK): Renamed to ...
- (AF_STYLE_FALLBACK): ... this.
-
- * src/autofit/afglobal.c: Include `hbshim.c'.
- Update use of `SCRIPT' and `STYLE' macros.
- (af_face_globals_compute_style_coverage)
- [FT_CONFIG_OPTION_USE_HARFBUZZ]: Call `af_get_coverage'.
- Update.
-
- * src/autofit/afmodule.h (AF_ModuleRec):
- s/fallback_script/fallback_style/.
-
- * src/autofit/afmodule.c (af_property_set): Adapt handling of
- `fallback-script' property to set a fallback style.
- (af_property_get, af_autofitter_init): Updated.
-
- * src/autofit/afpic.c: Update use of `SCRIPT' and `STYLE' macros.
-
- * src/autofit/afranges.h: Update use of `SCRIPT' macro.
-
- * src/autofit/autofit.c [FT_CONFIG_OPTION_USE_HARFBUZZ]: Include
- `hbshim.c'.
-
- * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `hbshim.c'.
- (AUTOF_DRV_H): Add `afcover.h'.
-
- * builds/freetype.mk (INCLUDE_FLAGS) [DEVEL_DIR]: Use pkg-config for
- all libraries needed by FreeType.
-
-2013-12-21 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #40975 (sort of).
-
- * src/truetype/ttinterp.c (Ins_IP): Fix sign typo to make FreeType
- behave the same as the Windows TrueType engine for the invalid case.
-
-2013-12-21 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make PIC mode work actually.
-
- * src/autofit/afpic.h (AFModulePIC): Fix array sizes to fit the
- enumeration values automatically generated by including `afscript.h'
- and friends.
-
- * src/autofit/afpic.c (autofit_module_class_pic_init): Updated.
-
-2013-12-21 Werner Lemberg <wl@gnu.org>
-
- Fix PIC linking.
-
- * include/internal/ftrfork.h (CONST_FT_RFORK_RULE_ARRAY_BEGIN): Fix
- generated function name.
-
- * src/base/basepic.c (FT_Init_Table_raccess_guess_table): Rename
- to ...
- (FT_Init_Table_ft_raccess_guess_table): ... this so that the
- function name correctly corresponds to what the macro framework
- expects.
-
- * src/psnames/rules.mk (PSNAMES_DRV_SRC_S): Use correct file name so
- that PIC functions are compiled also.
-
-2013-12-21 Werner Lemberg <wl@gnu.org>
-
- [base] Add missing dependencies to Makefile.
-
- * src/base/rules.mk (BASE_SRC): Add `basepic.c' and `ftpic.c'.
- (BASE_H): Add `basepic.h'.
-
-2013-12-20 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix PIC compilation.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
- src/autofit/aflatin.c (af_latin_metrics_init_widths)
- [FT_CONFIG_OPTION_PIC]: Declare `globals'.
-
- * src/autofit/afglobal.c: Always call AF_DEFINE_SCRIPT_CLASS, and
- AF_DEFINE_STYLE_CLASS.
-
- * src/autofit/afpic.c: Include `afglobal.h'.
- (autofit_module_class_pic_init): Typo.
-
- * src/autofit/aftypes.h (AF_DEFINE_SCRIPT_CLASS,
- AF_DEFINE_STYLE_CLASS): Don't use the same identifier for macro
- parameter and structure member.
-
-2013-12-20 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce `styles'.
-
- This is the new top-level structure for handling glyph input data;
- scripts are now defined separately.
-
- * src/autofit/aftypes.h (SCRIPT): Updated.
- (AF_ScriptClassRec): Move `blue_stringset' and `writing_system'
- members to ...
- (AF_Style_ClassRec): ... this new structure.
- (AF_Style): New enumeration.
- (AF_StyleMetricsRec): Replace `script' enumeration with
- `style_class' pointer.
- (AF_DEFINE_SCRIPT_CLASS, AF_DECLARE_SCRIPT_CLASS): Updated.
- (AF_DEFINE_STYLE_CLASS, AF_DECLARE_STYLE_CLASS): New macros.
-
- * src/autofit/afstyles.h: New file, using data from `afscript.h'.
- * src/autofit/afscript.h: Updated.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths,
- af_cjk_metrics_init_blues, af_cjk_hint_edges): Updated.
-
- * src/autofit/afglobal.c (SCRIPT): Updated.
- (STYLE): Redefine macro to load `afstyles.h'.
- (af_script_names) [FT_DEBUG_LEVEL_TRACE]: Replace with...
- (af_style_names): ... this array.
- (af_face_globals_compute_script_coverage): Renamed to...
- (af_face_globals_compute_style_coverage): ... this.
- Updated.
- (af_face_globals_new, af_face_globals_free,
- af_face_globals_get_metrics): Updated.
-
- * src/autofit/afglobal.h (SCRIPT): Updated.
- (STYLE): Redefine macro to load `afstyles.h'.
- (AF_SCRIPT_FALLBACK): Update definition. This will get more
- refinements with later on.
- (AF_SCRIPT_UNASSIGNED): Replace with...
- (AF_STYLE_UNASSIGNED): ... this macro.
- (AF_FaceGlobalsRec): Updated.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths,
- af_latin_metrics_init_blues, af_latin_metrics_scale_dim,
- af_latin_hint_edges): Updated.
-
- * src/autofit/aflatin2.c (af_latin2_metrics_init_widths): Updated.
- (af_ltn2_uniranges): Removed.
-
- * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
- Updated.
-
- * src/autofit/afpic.c (autofit_module_class_pic_init): Updated.
- * src/autofit/afpic.h (AF_STYLE_CLASSES_GET): New macro.
- (AFModulePIC): Add `af_style_classes' and `af_style_classes_rec'
- members.
-
- * src/autofit/afranges.h: Updated.
-
- * src/autofit/rules.mk (AUTOF_DRV_H): Add `afstyles.h'.
-
-2013-12-19 Werner Lemberg <wl@gnu.org>
-
- [autofit] Factor scripts and uniranges out of writing system files.
-
- * src/autofit/afranges.c, src/autofit/afranges.h: New files.
-
- * src/autofit/afscript.h: Extend `SCRIPT' macro with more
- parameters, taking data from the writing system files.
-
- * src/autofit/aftypes.h: Updated.
-
- * src/autofit/afglobal.c: Include `afranges.h'.
- Load `afscript.h' to call AF_DEFINE_SCRIPT_CLASS.
- * src/autofit/afglobal.c: Include `afranges.h'.
- Load `afscript.h' to call AF_DECLARE_SCRIPT_CLASS.
-
- * src/autofit/afcjk.c, src/autofit/afcjk.h: Updated.
- * src/autofit/afdummy.c, src/autofit/afdummy.h: Updated.
- * src/autofit/afindic.c, src/autofit/afindic.h: Updated.
- * src/autofit/aflatin.c, src/autofit/aflatin.h: Updated.
- * src/autofit/aflatn2.c, src/autofit/aflatn2.h: Updated.
-
- * src/autofit/afpic.c: Updated.
-
- * src/autofir/autofit.c: Include `afranges.c'.
- * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `afranges.c'.
-
-2013-12-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] More code orthogonality.
-
- * src/autofit/aftypes.h (AF_StyleMetrics): Replace `script_class'
- pointer to an `AF_ScriptClass' structure with `script' index of type
- `AF_Script'.
- Move some code around.
-
- * src/autofit/afcjk.c: Include `afpic.h'.
- (af_cjk_metrics_init_widths, af_cjk_metrics_init_blues,
- af_cjk_hint_edges): Updated.
-
- * src/autofit/aflatin.c: Include `afpic.h'.
- (af_latin_metrics_init_widths, af_latin_metrics_init_blues,
- af_latin_metrics_scale_dim, af_latin_hint_edges): Updated.
-
- * src/autofit/afglobal.c (af_face_globals_get_metrics): Updated.
-
- * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
- Updated.
-
-2013-12-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/ScriptMetrics/StyleMetrics/.
-
-2013-12-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/script_{metrics,hints}/style_{metrics,hints}/
-
-2013-12-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/gscripts/gstyles/.
-
-2013-12-18 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/glyph_scripts/glyph_styles/.
-
- This is the first commit of a series to create a new top-level
- structure (a `style') for handling scripts, writing_systems, and
- soon-to-be-added coverages.
-
-2013-12-17 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/AF_Script_/AF_WritingSystem_/ where appropriate.
-
-2013-12-11 Infinality <infinality@infinality.net>
-
- [truetype] Simplify logic of rendering modes.
-
- This patch unifies the subpixel and non-subpixel cases.
-
- * src/truetype/ttinterp.h (TT_ExecContextRec): Remove
- `grayscale_hinting'; all code should refer to `grayscale' instead.
- Remove unused `native_hinting' member.
- Rename `subpixel_hinting' member to `subpixel.
-
- * src/truetype/ttgload.c (TT_LOADER_SET_PP): Updated.
- (tt_loader_init): Updated.
-
- * src/truetype/ttinterp.c (Ins_GETINFO): Simplify.
- Updated.
-
-2013-12-11 Werner Lemberg <wl@gnu.org>
-
- [documentation] Add section how to include FreeType header files.
- Problem reported by David Kastrup <dak@gnu.org>.
-
- Surprisingly, a description how to do that was completely missing in
- the API reference.
-
- * include/freetype.h, include/ftchapters.h: New documentation
- section `header_inclusion'.
-
-2013-12-10 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/DFLT/NONE/, s/dflt/none/.
-
-2013-12-10 Werner Lemberg <wl@gnu.org>
-
- [autofit] s/AF_SCRIPT_NONE/AF_SCRIPT_UNASSIGNED/.
-
-2013-12-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix scaling of vertical phantom points.
-
- * src/truetype/ttgload.c (load_truetype_glyph): Scale pp3.x and
- pp4.x also.
-
-2013-12-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix positioning of composite glyphs.
- Problem reported by Nigel Tao <nigeltao@golang.org>.
-
- * src/truetype/ttgload.c (TT_Hint_Glyph): Remove code that shifts
- the glyph (component) by a fractional value computed from the LSB
- phantom point. This is wrong, since the horizontal phantom points
- get rounded horizontally later on.
-
-2013-12-08 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.2 released.
- =========================
-
-
- Tag sources with `VER-2-5-2'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.2.
-
- * 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.1/2.5.2/, s/251/252/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 2.
-
- * builds/unix/configure.raw (version_info): Set to 17:1:11.
- * CMakeLists.txt (VERSION_PATCH): Set to 2.
- * docs/CHANGES: Updated.
-
-2013-12-07 Werner Lemberg <wl@gnu.org>
-
- [truetype] Next round in phantom point handling.
-
- Greg Hitchcock provided very interesting insights into the
- complicated history of the horizontal positions of the TSB and BSB
- phantom points.
-
- * src/truetype/ttgload.c (TT_LOADER_SET_PP)
- [TT_CONFIG_OPTION_SUBPIXEL_HINTING]: Use `subpixel_hinting' and
- `grayscale_hinting' flags as conditionals for the x position of TSB
- and BSB.
-
-2013-12-05 Werner Lemberg <wl@gnu.org>
-
- * builds/freetype.mk (FT_CC): Removed. Unused.
-
-2013-12-04 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix handling of embedded bitmap strikes.
-
- This corrects the commit from 2013-11-21. Problem reported by
- Andrey Panov <panov@canopus.iacp.dvo.ru>.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Fix logic to
- detect excessive bytes for bit-aligned bitmaps.
-
-2013-12-03 Werner Lemberg <wl@gnu.org>
-
- [truetype] Remove dead code.
-
- Reported by Nigel Tao <nigeltao@golang.org>.
-
- * include/internal/tttypes.h (TT_LoaderRec): Remove unused
- `preserve_pps' field.
- * src/truetype/ttgload.c (TT_Hint_Glyph): Updated.
-
-2013-12-03 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix phantom point handling.
-
- This is a further improvement to the changes from 2013-11-06.
-
- * src/truetype/ttgload.c (TT_Hint_Glyph): Horizontal phantom points
- are rounded horizontally, vertical ones are rounded vertically.
- (TT_LOADER_SET_PP): The horizontal position of vertical phantom
- points in pre-ClearType mode is zero, as shown in the OpenType
- specification.
-
-2013-12-02 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix change from 2013-11-20.
-
- Problem reported by Akira Kakuto <kakuto@fuk.kindai.ac.jp>.
-
- * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Protect call to
- `Update_Max' with both a TT_USE_BYTECODE_INTERPRETER guard and a
- `IS_HINTED' clause.
- Also remove redundant check using `maxSizeOfInstructions' – in
- simple glyphs, the bytecode data comes before the outline data, and
- a validity test for this is already present.
-
-2013-11-27 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix use of dumping functions in `ftgrid' demo program.
-
- * src/autofit/afhints.c (AF_DUMP) [FT_DEBUG_AUTOFIT]: New macro.
- (af_glyph_hints_dump_points, af_glyph_hints_dump_segments,
- af_glyph_hints_dump_edges) [FT_DEBUG_AUTOFIT]: Add parameter to
- handle output to stdout.
- Use AF_DUMP.
- (af_glyph_hints_dump_points, af_glyph_hints_dump_segments,
- af_glyph_hints_dump_edges) [!FT_DEBUG_AUTOFIT]: Removed.
-
-2013-11-25 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.1 released.
- =========================
-
-
- Tag sources with `VER-2-5-1'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.1.
-
- * 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.0/2.5.1/, s/250/251/.
-
- * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
-
- * builds/unix/configure.raw (version_info): Set to 17:0:11.
- * CMakeLists.txt (VERSION_PATCH): Set to 1.
- * docs/CHANGES, docs/release: Updated.
-
-2013-11-23 Werner Lemberg <wl@gnu.org>
-
- [truetype]: Add tricky font names `hkscsiic.ttf' and `iicore.ttf'.
-
- * src/truetype/ttobjs.c (TRICK_NAMES_MAX_CHARACTERS,
- TRICK_NAMES_COUNT): Updated.
- (trick_names): Add family name for the two fonts.
-
-2013-11-23 Werner Lemberg <wl@gnu.org>
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Typo.
-
-2013-11-21 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Typo.
-
- Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Return correct `bsize->width'
- value if the font lacks an `OS/2' table.
-
-2013-11-21 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Improve handling of buggy embedded bitmap strikes.
-
- We are now able to successfully load `AppleMyoungJo.ttf'.
- Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Don't trust glyph
- format.
-
-2013-11-20 Werner Lemberg <wl@gnu.org>
-
- [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-16 Werner Lemberg <wl@gnu.org>
-
- [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-13 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/ft2unix.h: Remove. No longer necessary.
-
- * builds/unix/install.mk (install): Updated.
-
-2013-11-13 Werner Lemberg <wl@gnu.org>
-
- 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-12 Werner Lemberg <wl@gnu.org>
-
- [truetype] Fix last `truetype' commit.
-
- * src/truetype/ttgload.c (tt_get_metrics): Preserve stream position.
- Return error value.
- (load_truetype_glyph): Updated.
-
-2013-11-10 Werner Lemberg <wl@gnu.org>
-
- * docs/CMAKE: New dummy file.
-
-2013-11-08 Dave Arnold <darnold@adobe.com>
-
- [cff] Fix for hints that touch.
-
- * src/cff/cf2hints.c (cf2_hintmap_insertHint): Fix condition for
- finding index value of insertion point.
-
-2013-11-06 Werner Lemberg <wl@gnu.org>
-
- [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 Werner Lemberg <wl@gnu.org>
-
- [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-05 Werner Lemberg <wl@gnu.org>
-
- * 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 Werner Lemberg <wl@gnu.org>
-
- [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-02 Werner Lemberg <wl@gnu.org>
-
- [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 Werner Lemberg <wl@gnu.org>
-
- 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-01 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2013-11-01 Werner Lemberg <wl@gnu.org>
-
- [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-10-27 Werner Lemberg <wl@gnu.org>
-
- [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-24 Werner Lemberg <wl@gnu.org>
-
- * README.git, docs/CHANGES, docs/INSTALL: Updated.
-
-2013-10-24 John Cary <cary@txcorp.com>
-
- Provide cmake support.
-
- * CMakeLists.txt: New file.
-
-2013-10-23 Kenneth Miller <kennethadammiller@yahoo.com>
- Werner Lemberg <wl@gnu.org>
-
- 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-22 Werner Lemberg <wl@gnu.org>
-
- * src/base/md5.c, src/base/md5.h: Updated to recent version.
-
- * src/base/ftobjs.c: Updated; `md5.c' no longer uses `free'.
-
- The canonical URL to get updates for this file is
-
- http://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/popa3d/popa3d/md5/
-
- as the author told me in private communication.
-
-2013-10-19 Werner Lemberg <wl@gnu.org>
-
- [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 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/afblue.dat: s/MINOR/DESCENDER/.
-
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
-2013-10-16 Werner Lemberg <wl@gnu.org>
-
- [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-16 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing message for extra light flag.
-
- * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Do it.
-
-2013-10-15 Chongyu Zhu <lembacon@gmail.com>
-
- [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-12 Werner Lemberg <wl@gnu.org>
-
- [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-03 Dave Arnold <darnold@adobe.com>
-
- * src/cff/cf2font.c (cf2_computeDarkening): Avoid division by zero.
-
- Note that the old code avoided using a region of the piecewise
- linear function where the slope was zero. The recovery was to use a
- different section of the function, which produced a different,
- incorrect amount of darkening.
-
-2013-10-02 Darrell Bellert <darrell.bellert@hl.konicaminolta.us>
-
- * src/sfnt/ttload.c (tt_face_load_pclt): Fix `pclt_fields'.
-
-2013-10-02 Dave Arnold <darnold@adobe.com>
-
- * 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-09-29 Dave Arnold <darnold@adobe.com>
-
- 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-25 Werner Lemberg <wl@gnu.org>
-
- * src/autofit/aflatin.c (af_{grek,cyrl}_uniranges): Fix arrays.
-
-2013-09-25 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [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 if 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 later.
-
-2013-09-23 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #40090.
-
- * src/autofit/afcjk.c (af_cjk_metrics_scale): Revert commit
- 306f8c5d (from 2013-08-25) affecting this function.
-
-2013-09-22 Werner Lemberg <wl@gnu.org>
-
- [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-20 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2013-09-20 Behdad Esfahbod <behdad@behdad.org>
-
- 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-11 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- * include/freetype/ftoutln.h: Correct FT_Outline_Get_Orientation
- algorithm description.
-
-2013-09-11 Werner Lemberg <wl@gnu.org>
-
- [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-08-28 Behdad Esfahbod <behdad@google.com>
-
- [sfnt] Fix frame access while reading WOFF table directory.
-
- * src/sfnt/sfobjs.c (woff_open_font): Using single memory frame
- while reading the directory entries for the whole loop.
-
-2013-08-29 Werner Lemberg <wl@gnu.org>
- Behdad Esfahbod <behdad@google.com>
-
- Implement support for WOFF containers.
-
- We simply synthesize a SFNT from the WOFF, create a memory stream
- for the new data, and load the SFNT as usual.
-
- Does NOT add any API to access WOFF metadata or private blocks.
-
- * include/freetype/internal/tttypes.h (WOFF_HeaderRec,
- WOFF_TableRec): New structures.
-
- * include/freetype/tttags.h (TTAG_wOFF): New macro.
-
- * src/base/ftobjs.c (FT_Open_Face): Set `stream' after calling
- `open_face'.
-
- * src/sfnt/sfobjs.c [FT_CONFIG_OPTION_SYSTEM_ZLIB]: Include
- `FT_GZIP_H'.
- (WRITE_BYTE, WRITE_USHORT, WRITE_ULONG): New temporary macros for
- writing to a stream.
- (sfnt_stream_close, compare_offsets, woff_open_font): New functions.
- (sfnt_open_font): Handle `TTAG_wOFF'.
- (sfnt_init_face): Set `stream' after calling `sfnt_open_font'.
-
- * src/truetype/ttobjs.c (tt_face_init): Set `stream' after calling
- `sfnt->init_face'.
-
- * src/base/ftobjs.c (open_face): Use a pointer to FT_Stream as an
- argument so that a changed stream survives.
- Update callers.
-
-2013-08-28 Werner Lemberg <wl@gnu.org>
-
- [gzip] New function `FT_Gzip_Uncompress'.
-
- This is modeled after zlib's `uncompress' function. We need this
- for WOFF support.
-
- * include/freetype/ftgzip.h, src/gzip/ftgzip.c (FT_Gzip_Uncompress):
- New function.
-
- * src/gzip/rules.mk: Rewrite to better reflect dependencies.
-
-2013-08-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix `make multi' compilation.
-
- * src/autofit/afblue.cin, src/autofit/afblue.c: Don't include
- `afblue.h' but `aftypes.h'.
- * src/autofit/afcjk.c: Don't include `aftypes.h' but `afglobal.h'.
-
-2013-08-28 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix C++ compilation.
-
- * src/autofit/afglobal.c (af_face_globals_get_metrics),
- src/autofit/afdummy.c (af_dflt_script_class), src/autofit/afindic.c
- (af_deva_script_class): Use proper casts.
-
-2013-08-27 Behdad Esfahbod <behdad@google.com>
-
- * src/sfnt/ttload.c (tt_face_load_font_dir): Fix sign typos.
-
-2013-08-27 Behdad Esfahbod <behdad@google.com>
-
- FT_Open_Face: Improve external stream handling.
-
- If the font's `clazz->init_face' function wants to swap to new
- stream, handling of whether original stream was external could
- result to either memory leak or double free. Mark externality into
- face flags before calling `init_face' such that the clazz can handle
- external streams properly.
-
- * src/base/ftobjs.c (FT_Open_Face): Move code to set
- FT_FACE_FLAG_EXTERNAL_STREAM to...
- (open_face): This function.
-
-2013-08-27 Werner Lemberg <wl@gnu.org>
-
- Remove `FT_SqrtFixed' function.
-
- It's no longer used.
-
- * include/freetype/internal/ftcalc.h, src/base/ftcalc.c: Do it.
-
-2013-08-27 Werner Lemberg <wl@gnu.org>
-
- [autofit] While tracing, report script names instead of ID values.
-
- * src/autofit/afglobal.c (af_script_names) [FT_DEBUG_LEVEL_TRACE]:
- New array.
- * src/autofit/afglobal.h: Updated.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths,
- af_cjk_hint_edges): Use `af_script_names'.
- * src/autofit/aflatin.c (af_latin_metrics_init_widths,
- af_latin_hint_edges): Ditto.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Report used script while hinting a glyph.
-
- * src/autofit/afcjk.c (af_cjk_hint_edges), src/autofit/aflatin.c
- (af_latin_hint_edges): Implement it.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add support for Hebrew script.
-
- * src/autofit/afblue.dat: Add blue strings for Hebrew.
- * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
- * src/autofit/aflatin.c (af_hebr_uniranges): New array.
- (af_hebr_script_class): New script.
- * src/autofit/aflatin.h, src/autofit/afscript.h: Updated.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve tracing messages.
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths): Mention script
- ID in tracing message.
- (af_cjk_metrics_init_blues): Initialize `axis' outside of the inner
- loop.
- Improve tracing messages.
- (af_cjk_hint_edges) [FT_DEBUG_LEVEL_TRACE]: New variable
- `num_actions' to count hinting actions.
- Improve tracing messages.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths): Mention
- script ID in tracing message.
- (af_latin_metrics_init_blues, af_latin_hint_edges): Improve tracing
- messages.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- Better tracing of loaded glyphs.
-
- Previously, the loading of a glyph was traced at level 4, if at all.
- With this change, all font loading routines emit a tracing message
- at level 1, making it easier to select tracing output (for example
- using F2_DEBUG="any:1 afhints:7 aflatin:7").
-
- * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Add tracing message.
- * src/cff/cffdrivr.c (cff_glyph_load): Ditto.
- * src/cff/cffgload.c (cff_decoder_prepare): Improve tracing
- messages.
- * src/cid/cidgload.c (cid_load_glyph): Use level 1 for tracing
- message.
- * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Ditto.
- * src/pfr/pfrobjs.c (pfr_slot_load): Add tracing message.
- * src/truetype/ttgload.c (TT_Load_Glyph): Ditto.
- * src/type1/t1gload.c (T1_Load_Glyph): Ditto.
- * src/type42/t42objs.c (T42_GlyphSlot_Load): Ditto.
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Ditto.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix script selection.
-
- * src/autofit/afglobal.c (af_face_globals_get_metrics): Use
- `AF_SCRIPT_DFLT', not value 0.
- Simplify code.
-
- * src/autofit/afscript.h: Sort by script name.
-
-2013-08-26 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make `dummy' hinter work as expected.
-
- * src/autofit/afdummy.c (af_dummy_hints_init): Properly set scaling
- information.
- (af_dummy_hints_apply): Scale the glyphs.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make `cjk' module use blue stringsets.
-
- * src/autofit/afcjk.c (AF_CJK_MAX_TEST_CHARACTERS): Removed.
- (af_cjk_hani_blue_chars): Removed.
- (AF_CJK_BLUE_TYPE_*): Removed.
- (af_cjk_metrics_init_blues): Replace AF_CJK_MAX_TEST_CHARACTERS with
- AF_BLUE_STRING_MAX_LEN.
- Change loops to use offsets (in file `afblue.h') into the new arrays
- `af_blue_stringsets' and `af_blue_strings' (in file `afblue.c').
- Instead of three dimensions (as used in the old blue string array)
- we now use properties to do the same, saving one loop nesting level.
-
- * src/autofit/afcjk.h: Remove old enumeration values superseded by
- the new data in `afblue.h'.
- (AF_CJK_IS_TOP_BLUE, AF_CJK_IS_HORIZ_BLUE, AF_CJK_IS_FILLED_BLUE,
- AF_CJK_IS_RIGHT_BLUE): New macros, to be used in
- `af_cjk_metrics_init_blues'.
- (AF_CJK_BLUE_IS_RIGHT): Remove this now redundant enum value.
- (AF_CJK_BLUE_IS_TOP): Renamed to...
- (AF_CJK_BLUE_TOP): This.
- (AF_CJK_MAX_BLUES): Remove.
- (AF_CJKAxisRec): Updated.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Typo.
-
- * src/autofit/afblue.hin, src/autofit/afblue.c (GET_UTF8_CHAR): Use
- cast.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Synchronize `cjk' with `latin' module (and vice versa).
-
- * src/autofit/afcjk.c (af_cjk_metrics_init_widths): Add tracing
- messages.
- (af_cjk_metrics_init_blues): Don't pass blue string array as
- argument but use the global array directly.
- Use `outline' directly.
- Update and add tracing messages.
- (af_cjk_metrics_init): Simplify code.
- (af_cjk_metrics_scale_dim): Improve tracing message.
- (af_cjk_metrics_scale): Synchronize.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_widths,
- af_latin_metrics_init_blues): Improve and add tracing messages.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Make `latin' module use blue stringsets.
-
- * src/autofit/aflatin.c (AF_LATIN_MAX_TEST_CHARACTERS): Removed.
- (af_latin_blue_chars): Removed.
- (af_latin_metrics_init_blues): Replace AF_LATIN_MAX_TEST_CHARACTERS
- with AF_BLUE_STRING_MAX_LEN.
- Change loops to use offsets (in file `afblue.h') into the new arrays
- `af_blue_stringsets' and `af_blue_strings' (in file `afblue.c').
- Use `AF_LATIN_IS_SMALL_TOP_BLUE' macro.
-
- * src/autofit/aflatin.h: Remove old enumeration values superseded by
- the new data in `afblue.h'.
- (AF_LATIN_IS_TOP_BLUE): Updated definition.
- (AF_LATIN_IS_SMALL_TOP_BLUE): New macro.
- (AF_LATIN_MAX_BLUES): Remove.
- (AF_LatinAxisRec): Updated.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Add blue stringsets.
-
- * src/autofit/aftypes.h: Include `afblue.h'.
- (AF_ScriptClassRec): Add `blue_stringset' field.
- (AF_DEFINE_SCRIPT_CLASS): Updated.
-
- * src/autofit/autofit.c: Include `afblue.c'.
-
- * src/autofit/afcjk.c (af_hani_script_class), src/autofit/afdummy.c
- (af_dflt_script_class), src/autofit/afindic.c
- (af_deva_script_class), src/autofit/aflatin.c
- (af_latn_script_class), src/autofit/aflatin2.c
- (af_ltn2_script_class): Updated.
-
- * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `afblue.c'.
-
-2013-08-25 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce data file for blue strings.
-
- The idea is to have a central file which gets processed by a Perl
- script to create proper `.c' and `.h' files using templates. There
- are two other reasons to do that:
-
- . The data file should be easily readable. We use UTF-8 encoding
- which then gets converted to single bytes.
-
- . Since the number of supported scripts will increase soon, the
- current usage of blue string arrays is a waste of space. Using
- the Perl script it is possible to imitate jagged arrays,
- defining enumeration constants as offsets into the arrays.
-
- This commit only adds files without changing any functionality.
-
- * src/autofit/afblue.dat: New data file.
- * src/tools/afblue.pl: New Perl script for processing `afblue.dat'.
-
- * src/autofit/afblue.cin, src/autofit/afblue.hin: New template files
- for...
- * src/autofit/afblue.c, src/autofit/afblue.c: New source files.
- To avoid a dependency on Perl, we add them too.
-
-2013-08-19 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Enable new algorithm for `BBox_Cubic_Check'.
-
- * src/base/ftbbox.c: Enable new BBox_Cubic_Check algorithm, remove
- the old one.
- Improve comments.
-
-2013-08-18 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/unix-def.in (freetype2.pc): Don't set executable bit.
-
-2013-08-18 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #39804.
-
- * builds/unix/configure.raw (LIBPNG): Define and export.
- * builds/unix/freetype-config.in, builds/unix/freetype2.in: Handle
- libpng.
-
-2013-08-17 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Clean up BBox_Conic_Check.
-
- * src/base/ftbbox.c (BBox_Conic_Check): Remove redundant checks for
- extremum at the segment ends, which are already within the bbox.
- Slightly modify calculations.
-
-2013-08-15 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Finish experimental (disabled) BBox_Cubic_Check implementation.
-
- * src/base/ftbbox.c (BBox_Cubic_Check): Scale arguments to improve
- accuracy and avoid overflows.
-
-2013-08-13 Alexei Podtelezhnikov <apodtele@gmail.com>
-
- [base] Refactor experimental (disabled) BBox_Cubic_Check.
-
- * src/base/ftbbox.c (BBox_Cubic_Check): Implement the minimum search
- as the mirror image of the maximum search implemented here...
- (update_max): New function.
-
-2013-08-06 John Tytgat <John.Tytgat@esko.com>
-
- Fix Savannah bug #39702.
-
- * src/cff/cffload.c (cff_index_get_pointers): Check for `cur_offset
- != 0'; this stronger test is mandated by the CFF specification.
- Fix test for INDEX structures which have one or more empty entries
- at the end.
-
-2013-08-05 Werner Lemberg <wl@gnu.org>
-
- Fix gcc pragmas, part 2.
-
- * src/truetype/ttinterp.c (TT_MulFix14_long_long,
- TT_DotFix14_long_long): `#pragma gcc diagnostic {push,pop}' has been
- introduced with gcc version 4.6.
-
-2013-08-05 Werner Lemberg <wl@gnu.org>
-
- Fix gcc pragmas.
-
- * src/truetype/ttinterp.c (TT_MulFix14_long_long,
- TT_DotFix14_long_long): Older gcc versions don't accept diagnostic
- pragmas within a function body.
-
-2013-08-05 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #39700.
-
- * builds/unix/ftconfig.h: Synchronize with
- `include/freetype/config/ftconfig.h'.
-
- * builds/vms/ftconfig.h: Ditto.
- Make the differences to the master `ftconfig.h' file as small as
- possible for easier maintainance.
-
-2013-08-05 Werner Lemberg <wl@gnu.org>
-
- [autofit] Improve handling of `near' points.
-
- Points which are very near to each other are now marked as such.
- The `weak' flag is then computed by using the `in' vector of the
- first and the `out' vector of the last point of a group of near
- points.
-
- For example, this fixes the rendering of glyph `Oslash' in
- `Roboto-Thin.ttf'.
-
- * src/autofit/afhints.h (AF_Flags): New value `AF_FLAGS_NEAR'.
-
- * src/autofit/afhints.c (af_glyph_hints_reload): Introduce
- the heuristic value `near_limit' to decide whether the current point
- is near to the previous one, then set `AF_FLAG_NEAR' accordingly.
- Store good `in' vector (of last non-near point) in
- `last_good_in_{x,y}' and use it as an argument to
- `ft_corner_is_flat' if necessary.
-
-2013-08-02 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/ftcffdrv.h: Improve documentation.
- This is based on blog entries from David Lemon and Dave Arnold (both
- from Adobe) with kind permission. Dave also helped in
- proof-reading.
-
-2013-08-02 Werner Lemberg <wl@gnu.org>
-
- [autofit] Move declaration of scripts into separate file.
-
- This has the benefit that we don't need to duplicate the data at
- different places.
-
- * src/autofit/afscript.h: New file.
-
- * src/autofit/aftypes.h (AF_Script): Include `afscript.h' to define
- the enumeration values.
-
- * src/autofit/afglobal.c: Include `afscript.h' to get the script
- specific header files.
- (af_script_classes): Include `afscript.h' to fill this array.
-
- * src/autofit/afpic.c: Include `afscript.h' to get the script
- specific header files.
- (autofit_module_class_pic_init): Include `afscript.h' for
- initialization.
- * src/autofit/afpic.h (AF_SCRIPT_CLASSES_COUNT,
- AF_SCRIPT_CLASSES_REC_COUNT): Removed. Use `AF_SCRIPT_MAX' instead.
-
- * src/autofit/rules.mk (AUTOF_DRV_H): Updated.
-
-2013-08-02 Werner Lemberg <wl@gnu.org>
-
- [autofit] Move declaration of writing systems into separate file.
-
- This has the benefit that we don't need to duplicate the data at
- different places.
-
- * src/autofit/afwrtsys.h: New file.
-
- * src/autofit/aftypes.h (AF_WritingSystem): Include `afwrtsys.h' to
- define the enumeration values.
-
- * src/autofit/afglobal.c: Include `afwrtsys.h' to get the writing
- system specific header files.
- Include `afpic.h'.
- (af_writing_system_classes): Include `afwrtsys.h' to fill this
- array.
-
- * src/autofit/afpic.c: Include `afwrtsys.h' to get the writing
- system specific header files.
- (autofit_module_class_pic_init): Include `afwrtsys.h' for
- initialization.
- * src/autofit/afpic.h (AF_WRITING_SYSTEM_CLASSES_COUNT,
- AF_WRITING_SYSTEM_CLASSES_REC_COUNT): Removed. Use
- `AF_WRITING_SYSTEM_MAX' instead.
-
-2013-08-02 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Fix compilation with g++.
-
- * src/sfnt/pngshim.c (error_callback, read_data_from_FT_stream): Use
- cast.
- (Load_SBit_Png): Pacify compiler.
-
-2013-08-02 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
- Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix `make multi'.
-
- * include/freetype/config/ftconfig.h (FT_LOCAL_ARRAY,
- FT_LOCAL_ARRAY_DEF): New macros.
-
- * src/autofit/afglobal.c (af_writing_system_classes,
- af_script_classes): Use FT_LOCAL_ARRAY_DEF.
- * src/autofit/afglobal.h: Declare `af_writing_system_classes' and
- `af_script_classes'.
- * src/autofit/afloader.c: Include `afpic.h'.
-
-2013-08-01 Werner Lemberg <wl@gnu.org>
-
- Another round of cppcheck nitpicks.
-
- The call was (from the top-level of the FreeType tree):
-
- cppcheck --force \
- --enable=all \
- -I /usr/include \
- -I /usr/local/include \
- -I /usr/lib/gcc/i586-suse-linux/4.7/include \
- -I include \
- -I include/freetype \
- -I include/freetype/config \
- -I include/freetype/internal \
- -DFT2_BUILD_LIBRARY \
- . &> cppcheck.log
-
- using cppcheck git commit f7e93f99.
-
- Note that cppcheck still can't handle `#include FOO' (with `FOO' a
- macro).
-
- */* Improve variable scopes.
- */* Remove redundant initializations which get overwritten.
-
- * src/gxvalid/*: Comment out redundant code or guard it with
- FT_DEBUG_LEVEL_TRACE.
-
-2013-07-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Introduce `writing systems'.
-
- This patch adds a new top level to the auto-hinter's script class
- hierarchy. It defines `writing systems' which can contain multiple
- scripts.
-
- For example, the `latin' writing system (in file `aflatin.c') is
- able to support scripts like Latin, Cyrillic, Armenian, etc., which
- can be handled similarly.
-
- Scripts are now named using four-letter OpenType tags.
-
- * src/autofit/aftypes.h (AF_ScriptClassRec): Move relevant members
- to...
- (AF_WritingSystemClassRec): This new structure. It holds pointers
- to functions which can be shared among related scripts.
- (AF_WritingSystem): New enumeration.
- (AF_Script): Revised values using four-letter tags.
- (AF_DEFINE_WRITING_SYSTEM_CLASS): New macro.
- (AF_DEFINE_SCRIPT_CLASS): Updated.
-
- * src/autofit/afglobal.c (af_writing_system_classes): New global,
- constant array.
- (af_script_classes): Updated.
- (af_face_globals_free): Updated.
- Remove assertion.
- (af_face_globals_get_metrics): Updated.
-
- * src/autofit/afglobal.h (AF_SCRIPT_FALLBACK)
- [!AF_CONFIG_OPTION_CJK]: Handle this case.
-
- * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
- Updated.
-
- * src/autofit/afpic.c (autofit_module_class_pic_init): Updated;
- initialize structures for both writing systems and scripts.
- * src/autofit/afpic.h: Updated.
- (AF_WRITING_SYSTEM_CLASSES_GET): New macro.
-
- * src/autofit/afcjk.c (af_cjk_writing_system_class): New writing
- system.
- (af_cjk_uniranges): Renamed to...
- (af_hani_uniranges): This.
- (af_cjk_script_class): Reduced and renamed to...
- (af_hani_script_class): This.
- * src/autofit/afcjk.h: Updated.
-
- * src/autofit/afdummy.c (af_dummy_writing_system_class): New writing
- system.
- (af_dummy_script_class): Reduced and renamed to...
- (af_dflt_script_class): This.
- * src/autofit/afdummy.h: Updated.
-
- * src/autofit/afindic.c (af_indic_writing_system_class): New writing
- system.
- (af_indic_uniranges): Renamed to...
- (af_deva_uniranges): This.
- (af_indic_script_class): Reduced and renamed to...
- (af_deva_script_class): This.
- * src/autofit/afcjk.h: Updated.
-
- * src/autofit/aflatin.c (af_latin_writing_system_class): New writing
- system.
- (af_latin_uniranges): Renamed to...
- (af_latn_uniranges): This.
- (af_latin_script_class): Reduced and renamed to...
- (af_latn_script_class): This.
- * src/autofit/aflatin.h: Updated.
-
- * src/autofit/aflatin2.c (af_latin2_writing_system_class): New
- writing system.
- (af_latin2_uniranges): Renamed to...
- (af_ltn2_uniranges): This.
- Synchronize ranges with `latin'.
- (af_latin2_script_class): Reduced and renamed to...
- (af_ltn2_script_class): This.
- * src/autofit/aflatin2.h: Updated.
-
-2013-07-30 Werner Lemberg <wl@gnu.org>
-
- [autofit] Variable renaming.
-
- * src/autofit/aftypes.h (AF_ScriptMetricsRec):
- s/clazz/script_class/.
- Update all users.
-
-2013-07-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- Ignore libpng-config under cross-building configuration,
- because it will return the flags for the hosting environment.
-
- * builds/unix/configure.raw: Ignore libpng-config when
- `cross_compiling' == yes.
-
-2013-07-30 Behdad Esfahbod <behdad@google.com>
-
- Prevent division by zero by a transparent color.
-
- * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra):
- Return 0 immediately, when alpha channel is zero.
-
-2013-07-25 Behdad Esfahbod <behdad@google.com>
-
- Add FT_FACE_FLAG_COLOR and FT_HAS_COLOR.
-
- Also disambiguate Google's color bitmap tables.
-
- * include/freetype/freetype.h (FT_FACE_FLAG_COLOR, FT_HAS_COLOR):
- New macros.
-
- * include/freetype/internal/tttypes.h (TT_SbitTableType): Add
- TT_SBIT_TABLE_TYPE_CBLC.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Handle FT_FACE_FLAG_COLOR.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit,
- tt_face_load_strike_metrics, tt_face_load_sbit_image): Handle
- TT_SBIT_TABLE_TYPE_CBLC.
-
-2013-07-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
-
- [sfnt] Fix for `make multi' target.
-
- * src/sfnt/pngshim.c (Load_SBit_Png): Use FT_LOCAL_DEF().
-
-2013-07-20 Werner Lemberg <wl@gnu.org>
-
- * docs/INSTALL.GNU: Updated.
-
-2013-07-20 Behdad Esfahbod <behdad@google.com>
-
- [sfnt] Fix `sbix' table version handling.
-
- * src/sfnt/ttsbit.c (tt_face_load_sbit) [TT_SBIT_TABLE_TYPE_SBIX]:
- USHORT version numbers are to be considered as `minor'.
-
-2013-07-19 Werner Lemberg <wl@gnu.org>
-
- [autofit] Fix segment classification for blue zones.
-
- The old code (essentially unchanged since the very beginning)
- incorrectly handled this configuration
-
- x -o- x
- / \
- / \
- / \
- o o
-
- as flat and this
-
- o o
- / /
- x| x|
- | |
- o---------------o
-
- as round. (`o' and `x' are on and off points, respectively).
-
- This is a major change which should improve the rendering results
- enormously for many TrueType fonts, especially in the range approx.
- 20-40ppem, fixing the appearance of many overshoots.
-
- * src/autofit/aflatin.c (af_latin_metrics_init_blues): Look at the
- first and last points of the segment, not the points right before
- and after.
-
-2013-07-19 Behdad Esfahbod <behdad@google.com>
-
- [sfnt] `sbix' fix-ups.
-
- * src/sfnt/sfobjs.c (sfnt_load_face): Apple's `sbix' color bitmaps
- are rendered scaled and then the `glyf' outline rendered on top. We
- don't support that yet, so just ignore the `glyf' outline and
- advertise it as a bitmap-only font.
-
- * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
- [TT_SBIT_TABLE_TYPE_SBIX]: Return metrics in 26.6 units.
- (tt_face_load_sbix_image): Typo.
-
-2013-07-18 Behdad Esfahbod <behdad@google.com>
-
- [sfnt] Add support for Apple's `sbix' color bitmap table.
-
- * include/freetype/internal/tttypes.h (TT_SBit_MetricsRec): Widen
- fields to FT_Short and FT_UShort, respectively.
- (TT_SBitTableType): New enumeration.
- (TT_FaceRec): Add `sbit_table_type' field.
-
- * include/freetype/tttags.h (TTAG_sbix): New macro.
-
- * src/sfnt/pngshim.c (Load_SBit_Png): Pass a more generic
- FT_GlyphSlot argument instead FT_Bitmap.
- Add flag to control map and metrics handling.
- Update all users.
-
- * src/sfnt/ttsbit.c: Include `ttmtx.h'.
- (tt_face_load_eblc): Renamed to...
- (tt_face_load_sbit): This.
- Handlic `sbix' bitmaps.
- (tt_face_free_eblc): Renamed to...
- (tt_face_load_sbit): This.
- Updated.
- (tt_face_load_strike_metrics): Handle `sbix' bitmaps.
- (tt_face_load_sbix_image): New function.
- (tt_sbit_decoder_alloc_bitmap, tt_sbit_decoder_load_image,
- tt_sbit_decoder_load_byte_aligned, tt_sbit_decoder_load_bit_aligned,
- tt_sbit_decoder_load_compound, tt_sbit_decoder_load_png,
- tt_sbit_decoder_load_image, tt_sbit_decoder_load_bitmap): Don't pass
- and handle load flags.
- (tt_sbit_decoder_load_bitmap) [!FT_CONFIG_OPTION_USE_PNG]: Better
- handle formats 17-19.
- Move color to grayscale conversion to...
- (tt_face_load_sbit_image): Here.
- Handle `sbix' bitmaps.
-
- * src/sfnt/pngshim.h: Updated.
- * src/sfnt/ttsbit.h: Updated.
- * src/sfnt/sfdriver.c: Updated.
-
-2013-07-18 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Ignore invalid magic number in `head' or `bhed'.
-
- Other font engines seem to ignore it also. Problem reported by
- Hin-Tak Leung <htl10@users.sourceforge.net>.
-
- * src/sfnt/ttload.c (check_table_dir): Don't abort but warn only if
- we have an invalid magic number.
-
-2013-07-16 Werner Lemberg <wl@gnu.org>
-
- [smooth] Fix segfault caused by previous commit.
-
- * src/smooth/ftgrays.c (gray_set_cell): Always compute
- `ras.invalid'.
-
-2013-07-16 David Turner <digit@google.com>
-
- [smooth] Improve performance.
-
- Provide a work-around for an ARM-specific performance bug in GCC.
- This speeds up the rasterizer by more than 5%.
-
- Also slightly optimize `set_gray_cell' and `gray_record_cell' (which
- also improves performance on other platforms by a tiny bit (<1%).
-
- * src/smooth/ftgrays.c (FT_DIV_MOD): New macro.
- Use it where appropriate.
-
- (gray_record_cell, gray_set_cell, gray_move_to,
- gray_convert_glyph_inner): Streamline condition handling.
-
-2013-07-16 David Turner <digit@google.com>
-
- [truetype] Add assembler code for TT_MulFix14 and TT_DotFix14.
-
- This patch provides slightly optimized versions for ARM, x86, and
- x86_64 CPUs if built with GCC.
-
- Also remove some dead code.
-
- * src/truetype/ttinterp.c (TT_MulFix14_arm, TT_MulFix14_long_long,
- TT_DotFix14_long_long): New functions.
-
-2013-07-16 David Turner <digit@google.com>
-
- Optimize FT_MulFix for x86_64 GCC builds.
-
- This patch provides an optimized `FT_MulFix' implementation for
- x86_64 machines when FreeType is built with GCC, or compatible
- compilers like Clang.
-
- Example:
- bin/ftbench -p -t 5 -s 14 -f 0008 Arial.ttf
-
- Before:
-
- Load 4.863 us/op
- Load_Advances (Normal) 4.816 us/op
- Load_Advances (Fast) 0.028 us/op
- Render 2.753 us/op
- Get_Glyph 0.463 us/op
- Get_CBox 0.077 us/op
- Get_Char_Index 0.023 us/op
- Iterate CMap 13.898 us/op
- New_Face 12.368 us/op
- Embolden 0.028 us/op
- Get_BBox 0.302 us/op
-
- After:
-
- Load 4.617 us/op
- Load_Advances (Normal) 4.645 us/op
- Load_Advances (Fast) 0.027 us/op
- Render 2.789 us/op
- Get_Glyph 0.460 us/op
- Get_CBox 0.077 us/op
- Get_Char_Index 0.024 us/op
- Iterate CMap 13.403 us/op
- New_Face 12.278 us/op
- Embolden 0.028 us/op
- Get_BBox 0.301 us/op
-
- * builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
- (FT_MulFix_x86_64): New function.
-
-2013-07-16 David Turner <digit@google.com>
-
- Speed up ARMv7 support.
-
- When building for ARMv7 with thumb2 instructions, the optimized
- `FT_MulFix_arm' assembly routine was not being used.
-
- The reason for this is in the `ftconfig.h' header, namely:
-
- - The assembly routine uses the `smull' instruction which is not
- available when generating Thumb-1 machine code. It is available
- in Thumb-2 mode, though.
-
- - The header was written a long time ago before Thumb-2 became
- widely popular (e.g. with Android). So it simply doesn't use the
- assembly routine if the `__thumb__' built-in macro is defined.
-
- - When compiling in Thumb-2 mode, the compiler will define both
- `__thumb__' and `__thumb2__'.
-
- By checking for `(__thumb2__ || !__thumb__)', we ensure that the
- assembly routine is only avoided when generating Thumb-1 code.
-
- Given that this is performance-sensitive function, this improves
- `ftbench' as follows on a Galaxy Nexus:
-
- Before (us/op) After (us/op)
-
- - loading Arial.ttf glyphs at 14 ppem [1]
-
- Load 34.285 33.098
-
- - same operation with the light auto-hinter [2]
-
- Load 31.317 29.590
-
- - same operation without hinting [3]
-
- Load 6.143 5.376
-
- - loading Arial.ttf advances at 14 ppem [4]
-
- Load_Advances (normal) 34.216 33.016
- Load_Advances (fast) 0.176 0.176
-
- [1] ftbench -t 5 -p -s 14 -b a -f 0008 Arial.ttf
- [2] ftbench -t 5 -p -s 14 -b a -r 1 -f 0028 Arial.ttf
- [3] ftbench -t 5 -p -s 14 -b a -f 000a Arial.ttf
- [4] ftbench -t 5 -p -s 14 -b b -f 0008 Arial.ttf
-
- * builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
- (FT_MULFIX_ASSEMBLER): Fix handling for ARMv7.
-
-2013-06-28 Werner Lemberg <wl@gnu.org>
-
- * docs/CHANGES: Updated.
-
-2013-06-27 Werner Lemberg <wl@gnu.org>
-
- * src/winfonts/winfnt.c (FNT_Load_Glyph): Fix bitmap width guard.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- [cff] Add darkening limit to `darkening-parameters'.
-
- * src/cff/cffdrivr.c (cff_property_set): Add check.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- [cff] Add `darkening-parameters' property.
-
- * include/freetype/ftcffdrv.h: Document it.
-
- * src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
- `darkening-parameters' property.
-
- * src/cff/cf2font.h (CF2_FontRec): Add `darkenParams' array.
-
- * src/cff/cf2font.c (cf2_computeDarkening): Add `darkenParams'
- argument and use it.
- Update all callers.
-
- * src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Copy
- `darken_params' values.
-
- * src/cff/cffobjs.h (CFF_DriverRec): Add `darken_params' array.
-
- * src/cff/cffobjs.c (cff_driver_init): Set default values for
- `darken_params'.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Code shuffling.
-
- * src/tools/docmaker/tohtml.py (re_url): Move regexp...
- * src/tools/docmaker/sources.py: ... to this file.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Remove unused functions.
-
- * src/tools/docmaker/content.py (DocMarkup.get_start,
- DocBlock.get_markup_name): Removed.
- * src/tools/docmaker/tohtml.py (html_quote0, dump_html_code,
- HtmlFormatter.make_html_words): Removed.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- * builds/freetype.mk (dll): Remove target.
-
- Problem reported by Jörg Günnewig <joerg.guennewig@googlemail.com>.
-
-2013-06-25 Werner Lemberg <wl@gnu.org>
-
- [docmaker] Recognise URLs.
-
- * src/tools/docmaker/tohtml.py (re_url): New regular expression.
- (make_html_para): Use it.
-
-2013-06-19 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.0.1 released.
- ===========================
-
-
- Tag sources with `VER-2-5-0-1'.
-
- * include/freetype/config/ftoption.h: Undefine
- CFF_CONFIG_OPTION_OLD_ENGINE.
- * devel/ftoption.h: Define CFF_CONFIG_OPTION_OLD_ENGINE.
-
-2013-06-19 Werner Lemberg <wl@gnu.org>
-
- * builds/unix/install.mk (install): Don't create `cache' directory.
-
- Found by Peter Breitenlohner <peb@mppmu.mpg.de>.
-
-2013-06-19 Werner Lemberg <wl@gnu.org>
-
- * Version 2.5.0 released.
- =========================
-
-
- Tag sources with `VER-2-5-0'.
-
- * docs/VERSION.DLL: Update documentation and bump version number to
- 2.5.0.
-
- * README, Jamfile (RefDoc),
- builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
- builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
- builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
- builds/win32/visualc/freetype.dsp,
- builds/win32/visualc/freetype.vcproj,
- builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
- builds/win32/visualce/freetype.vcproj,
- builds/win32/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.4.12/2.5.0/, s/2412/250/.
-
- * include/freetype/freetype.h (FREETYPE_MINOR): Set to 5.
- (FREETYPE_PATCH): Set to 0.
-
- * builds/unix/configure.raw (version_info): Set to 16:2:10.
-
- * src/base/ftobjs.c (FT_Open_Face): Pacify compiler.
- * src/truetype/ttinterp.c (Ins_MSIRP, Ins_MIRP): Ditto.
-
-2013-06-18 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #39269.
-
- * src/base/ftgloadr.c (FT_GlyphLoader_CheckPoints): Free memory in
- case of reacollocation failures.
-
-2013-06-18 Andrew Church <achurch+savannah@achurch.org>
-
- Fix Savannah bug #39266.
-
- If memory allocations fail at certain points while opening a font,
- FreeType can either crash due to a NULL dereference or leak memory.
-
- * include/freetype/internal/ftobjs.c (FT_Face_InternalRec,
- FT_LibraryRec): Make `refcount' a signed integer. If, for example,
- FT_Open_Face() fails in a memory allocation before the face's
- reference count is set to 1, a subsequent `FT_Done_Library' call
- would otherwise loop over `FT_Done_Face' 2^32 times before freeing
- the face.
-
- * src/base/ftobjs.c (open_face): Initialize `stream' and friends
- earlier.
- (FT_Open_Face) <Fail>: Behave correctly if `node' is NULL.
- (FT_Destroy_Module) <Fail>: Check that `renderer_clazz' is valid.
-
-2013-06-14 Werner Lemberg <wl@gnu.org>
-
- * src/smooth/ftgrays.c One final pragma to silence 64-bit MSVC.
-
-2013-06-06 Dave Arnold <darnold@adobe.com>
- Werner Lemberg <wl@gnu.org>
-
- [cff] Add code to Adobe's engine to handle ppem > 2000.
-
- * src/cff/cffgload.c (cff_slot_load): If we get
- FT_Err_Glyph_Too_Big, retry unhinted and scale up later on.
-
-2013-06-12 Werner Lemberg <wl@gnu.org>
-
- Another try on pragmas.
-
- * include/freetype/internal/ftdebug.h: Move pragmas to...
- * include/freetype/internal/internal.h: ... this file since it gets
- included by all source files.
- * include/freetype/internal/ftserv.h: Remove pragma which has no
- effect.
-
-2013-06-12 Werner Lemberg <wl@gnu.org>
-
- * include/freetype/internal/ftdebug.h: Disable MSVC warning C4127.
-
- This partially undoes commit 3f6e0e0c.
-
-2013-06-12 Werner Lemberg <wl@gnu.org>
-
- More compiler warning fixes.
-
- */*: Use cast to `FT_Bool' (or `Bool') where appropriate.
-
-2013-06-10 Werner Lemberg <wl@gnu.org>
-
- [truetype] Improve handling of broken sbit advance widths.
-
- * src/truetype/ttgload.c (TT_Load_Glyph): Use the glyph's (scaled)
- `linearHoriAdvance' if the sbit's `horiAdvance' value is zero.
-
- Cf. font `Fixedsys Excelsior' v3.01 (FSEX300.ttf), glyph A, 16ppem.
-
-2013-06-10 Werner Lemberg <wl@gnu.org>
-
- [sfnt] Improve embedded bitmap tracing.
-
- * src/base/ftobjs.c (FT_Request_Size): Move trace message regarding
- bitmap strike match to...
- (FT_Match_Size): This function.
-
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_metrics,
- tt_sbit_decoder_load_byte_aligned, tt_sbit_decoder_load_bit_aligned,
- tt_sbit_decoder_load_compound, tt_sbit_decoder_load_png,
- tt_sbit_decoder_load_image): Decorate with tracing messages.
-
-2013-06-10 Werner Lemberg <wl@gnu.org>
-
- Fix Savannah bug #39160.
-
- * src/truetype/ttinterp.c (Ins_SDPVTL): Set projection vector too
- for the degenerate case.
-
-2013-06-09 David Turner <digit@google.com>
-
- * src/cache/ftcmanag.c (FTC_Manager_Reset): Add missing cache flush.
-
- This code, present since eight(!) years in the unused `CACHE'
- branch, has been forgotten to apply to the master branch. It's
- really amazing that noone has ever complained since
- `FTC_Manager_Reset' is pretty useless without flushing the cache.
-
-2013-06-07 Werner Lemberg <wl@gnu.org>
-
- Add and improve pragmas for MSVC compiler.
-
- * include/freetype/internal/ftdebug.h: Remove pragmas.
- * include/freetype/internal/ftserv.h: Use push and pop for pragmas.
- * include/freetype/internal/ftvalid.h: Handle warning C4324.
- * src/base/ftobjs.c: Use push and pop for pragmas.
- * src/gzip/ftgzip.c: Handle warning C4244.
-
-2013-06-07 Werner Lemberg <wl@gnu.org>
-
- [cff] s/cf2_getGlyphWidth/cf2_getGlyphOutline/.
-
- * src/cff/cf2font.c, src/cff/cf2font.h, src/cff/cf2ft.c: Do it.
-
-2013-06-06 Dave Arnold <darnold@adobe.com>
-
- [cff] Add early exit feature for width-only calls.
-
- This is for `FT_Get_Advance'.
-
- There are 7 places where the spec says the width can be defined:
-
- hstem/hstemhm
- vstem/vstemhm
- cntrmask/hintmask
- hmoveto
+ hstem
+ vstem
vmoveto
+ callsubr
+ div
rmoveto
- endchar
+ hmoveto
+ Numbers
- * src/cff/cf2intrp.c (cf2_doStems): Exit early for width-only calls,
- if possible.
+ The subsequent commits will implement these changes and adapt
+ accesses of data and objects to the new interpreter.
- (cf2_interpT2CharString) <cf2_cmdHSTEM>, <cf2_cmdVSTEM>,
- <cf2_cmdVMOVETO>, <cf2_cmdENDCHAR>, <cf2_cmdHINTMASK>,
- <cf2_cmdRMOVETO>, <cf2_cmdHMOVETO>: Exit early for width-only calls.
+ NOTE: Will not compile in the meantime!
-2013-06-06 Werner Lemberg <wl@gnu.org>
+ * src/psaux/psintrp.c: Add opcodes to enum.
+ (cf2_interpT2CharString): Copy relevant code over from
+ `t1_decoder_parse_charstrings' (in `t1decode.c').
- Next round of compiler fixes.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- * builds/win32/ftdebug.c, builds/wince/ftdebug.c (ft_debug_init):
- Add proper cast.
+ [type1] Fixes for rendering.
- * include/freetype/internal/ftserv.h (FT_SERVICE_UNAVAILABLE): Fix
- cast.
- * include/freetype/internal/ftstream.h: Decorate stream and frame
- macros with `FT_Long' and `FT_ULong' as appropriate.
+ The Type 1 advance width calculation passes null for glyph slot,
+ etc, which can cause null pointer access in the new interpreter.
+ Fall back to the old one for now.
- * src/base/ftrfork.c (raccess_guess_darwin_hfsplus,
- raccess_guess_darwin_newvfs): Use cast.
+ Fix the large glyph retry code and ensure hinting and scaling flags
+ are set properly.
- * src/bdf/bdflib.c (_bdf_set_default_spacing): Use cast.
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add a
+ check for metrics_only.
+ Set the `force_scaling' flag.
+ (T1_Parse_Glyph): Updated.
+ (T1_Load_Glyph): Add `hinting' and `scaled' flags.
- * src/cache/ftcmanag.c (FTC_Manager_Check): Fix cast.
- * src/cache/ftcmanag.h (FTC_ManagerRec): Ditto.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- * src/cff/cf2arrst.c (cf2_arrstack_setNum_Elements): Use cast.
- * src/cff/cf2ft.c (cf2_freeSeacComponent): Ditto.
- * src/cff/cffobjs.c (remove_subset_prefix, remove_style): Ditto.
+ [psaux] Add missing objects (2/2).
- * src/cid/cidparse.c (cid_parser_new): Use cast.
+ Synthesize a `SubFont' object for Type 1 fonts. This is used in the
+ interpreter to access Private dict data, which are stored in
+ different places for Type 1 and CFF. This allows the same data to
+ be used in either mode.
- * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Use cast.
+ * src/psaux/psobjs.c (t1_make_subfont): New procedure to copy
+ required values to a dummy `CFF_SubFont' object. This is similar to
+ `cff_make_private_dict'.
+ * src/psaux/psobjs.h: Add the new declaration.
- * src/psaux/psobjs.c (reallocate_t1_table): Fix argument type.
+ * include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Ditto.
+ Add this to the PSAux Service for future use with CID fonts.
- * src/raster/ftraster.c (ft_black_reset): Use cast.
+ * src/type1/t1gload.c: Include FT_INTERNAL_CFF_TYPES_H.
+ (T1_Parse_Glyph_And_Get_Char_String): Add the call.
- * src/truetype/ttgxvar.c (FT_Stream_FTell): Use cast.
- (ALL_POINTS): Fix cast.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- * src/type1/t1driver.c (t1_ps_get_font_value): Add casts.
- * src/type1/t1parse.c (T1_Get_Private_Dict): Add cast.
+ [psaux] Add missing objects for Type 1 (1/2).
-2013-06-05 Dave Arnold <darnold@adobe.com>
+ Move `CF2_Font' instance to `PS_Decoder'. This is the context for
+ the interpreter and since it is currently stored in `CFF_Font', is
+ unavailable in Type 1 mode.
- Fix more MSVC Win32 compiler warnings.
+ * include/freetype/internal/psaux.h (T1_Decoder, PS_Decoder): New
+ `cf2_instance' field.
- * src/base/ftobjs.c: Fix typo in MS pragma.
+ * src/psaux/psdecode.c (ps_decoder_init): Copy `cf2_instance' to
+ `PS_Decoder'.
- * src/base/bdflib.c (_bdf_set_default_spacing, _bdf_add_property):
- `lineno' is only used in debug mode.
+ * src/psaux/t1decode.c (t1_decoder_done): Add finalization code.
- * src/cff/cf2ft.c (cf2_builder_moveTo): `params' is only used in
- debug mode.
+ * src/psaux/psft.c (cf2_decoder_parse_charstrings): Update accesses.
-2013-06-05 Werner Lemberg <wl@gnu.org>
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- Fix compiler warnings.
+ Allow `type1' module to use the Adobe engine.
- * include/freetype/internal/ftmemory.h: Decorate memory allocation
- macros with `FT_Long' where appropriate.
- Remove duplicate of FT_MEM_QRENEW_ARRAY definition.
+ Add the callback and some conditionals to switch between the two
+ engines.
- * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Use
- cast.
+ * include/freetype/internal/psaux.h (T1_Decoder_FuncsRec): Change
+ function declarations.
+ * src/psaux/psauxmod.c (T1_Decoder_FuncsRec): Register the
+ callbacks.
- * src/base/ftobjs.c: Add warning disabling pragma for MSVC while
- including `md5.c'.
+ * src/psaux/psobjs.c (ps_builder_add_point): Add conditionals for
+ number conversion.
- * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdESC>: Add
- cast.
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add code
+ to choose which renderer to use.
- * src/sfnt/ttsbit.c (tt_sbit_decoder_load_compound): Fix casts.
- (tt_sbit_decoder_load_bitmap): Beautification.
+ * src/cid/cidgload.c (cid_load_glyph): Update call.
+ * src/base/ftobjs.c, src/psaux/psobjs.c, src/type1/t1gload.c: Update
+ includes.
- * src/smooth/ftsmooth.c (ft_smooth_render_generic): Initialize
- variables (earlier).
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Pacify compiler.
+ [type1] Add Adobe engine configuration.
- * src/truetype/ttgxvar.c (TT_Get_MM_Var): Use unsigned constants
- where appropriate.
+ Use the previously changed PS_Driver in type1 module to store
+ hinting engine configuration.
- * src/type1/t1load.c (T1_Get_MM_Var): Ditto.
+ * include/freetype/ftt1drv.h: New file.
+ Duplicate and rename config options from CFF.
+ * include/freetype/config/ftheader.h (FT_TYPE1_DRIVER_H): New macro.
-2013-06-04 Werner Lemberg <wl@gnu.org>
+ * src/type1/t1driver.c (t1_driver_class): Update declaration.
+ * src/type1/t1objs.c: Include FT_TYPE1_DRIVER_H.
+ (T1_Driver_Init): Update code.
- * src/cff/cf2font.c (cf2_getGlyphWidth): Initialize `advWidth'.
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- Problem reported by Ingmar Sittl <ingmar.sittl@elektrobit.com>.
+ [cff] Move and rename `CFF_Driver'.
-2013-06-04 Werner Lemberg <wl@gnu.org>
+ This is so that we can use the same hinting engine parameters for
+ Type 1.
- Apply fixes for cppcheck nitpicks.
+ * include/freetype/internal/cffotypes.h (CFF_Driver): Rename and
+ move to...
+ * include/freetype/internal/psaux.h (PS_Driver): ...here.
- http://cppcheck.sourceforge.net/
+ * src/cff/cffdrivr.c, src/cff/cffgload.c, src/cff/cffload.c,
+ src/cff/cffobjs.c, src/cff/cffobjs.h, src/psaux/psft.c,
+ src/psaux/psobjs.c: Update references.
- The call was (from the top-level of the FreeType tree):
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
- cppcheck --force \
- --enable=all \
- -I include \
- -I include/freetype/ \
- -I include/freetype/config/ \
- -I include/freetype/internal/ \
- . &> cppcheck.log
+ [psaux, type1] Reorganize object fields.
+
+ Make some fields more generic, so that we can access them the same
+ way regardless of Type 1 or CFF.
+
+ * include/freetype/internal/psaux.h (PS_Builder): Change `TT_Face'
+ to `FT_Face'.
+ Remove unused fields.
+
+ * src/psaux/psft.c: Update all accesses of `PS_Builder.face'.
+ Add some asserts to guard against casting `T1_Face' as `TT_Face'.
+
+ * src/type1/t1objs.h (T1_GlyphSlot): Reorder fields to follow
+ `CFF_GlyphSlot', so that we can pretend they are the same in the
+ interpreter.
+
+ * src/psaux/psobjs.c (ps_builder_init, ps_builder_add_point):
+ Updated with above changes.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Prepare for Type 1 mode.
+
+ Add some checks for Type 1 data passing through.
+
+ * src/psaux/psfont.h (CF2_Font): Add `isT1' flag.
+ * src/psaux/psfont.c (cf2_font_setup): Skip the variations and blend
+ code which is not applicable for Type 1.
+
+ * src/psaux/psft.c (cf2_decoder_parse_charstrings): Avoid accessing
+ `decoder->cff' in Type 1 mode.
+ Copy `is_t1' flag to `CF2_Font'.
+
+2017-09-25 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Use the new objects.
+
+ * include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Fix
+ switching between new and old engines.
+
+ * src/cff/cffgload.c, src/cff/cffparse.c: Update calls.
+
+ * src/psaux/psblues.c, src/psaux/psfont.c, src/psaux/psfont.h,
+ src/psaux/psft.c, src/psaux/psft.h, src/psaux/psintrp.c: Update all
+ to use new objects.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Objects for new interpreter (part 2).
+
+ Make the new objects copy over values. They are essentially wrapper
+ types for the different decoders/builders.
+
+ * include/freetype/internal/psaux.h: Update declarations.
+ (PS_Builder): Add `is_t1' flag.
+ (PS_Decoder_{Get,Free}_Glyph_Callback): Renamed to...
+ (CFF_Decoder_{Get,Free}_Glyph_Callback: ... this.
+ (PS_Decoder): Updated.
+ Add `t1_parse_callback' member.
+ (PSAux_ServiceRec): Add `ps_decoder_init' member.
+
+ * src/psaux/psdecode.h, src/psaux/psobjs.h: Update declarations.
+
+ * src/psaux/psdecode.c, src/psaux/psobjs.c: Implement copy with two
+ modes.
+
+ * src/psaux/psauxmod.c: Add builder and decoder functions to `PSAux'
+ service.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Add objects for new interpreter.
+
+ Introduce `PS_Decoder' and `PS_Builder' which include all fields
+ from either Type 1 or CFF decoders/builders.
+
+ * include/freetype/internal/psaux.h (PS_Builder, PS_Decoder): New
+ structs.
+
+ * src/psaux/psobjs.c, src/psaux/psobjs.h: Add `PS_Builder'
+ functions.
+
+ * src/psaux/psdecode.c, src/psaux/psdecode.h: New files to hold
+ `PS_Decoder' initialization functions.
+
+ * src/psaux/psaux.c, src/psaux/Jamfile (_sources),
+ src/psaux/rules.mk (PSAUX_DRV_SRC): Updated.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Rename files.
+
+ Replace the `cf2' file name prefix with `ps' as the Adobe engine
+ will be used for both PostScript Types 1 and 2 (CFF) instead of just
+ CFF.
+
+ s/cf2/ps/ for all following.
+
+ * src/psaux/cf2*: Rename files.
+ * src/psaux/*: Update includes.
+
+ * src/psaux/Jamfile (_sources), src/psaux/rules.mk (PSAUX_DRC_SRC,
+ PSAUX_DRV_H): Update file references.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux] Minor fix.
+
+ Use `MultiMasters' service in `psaux' instead of a call to `cff'.
+ The project builds if CFF_CONFIG_OPTION_OLD_ENGINE is not defined.
+
+ * src/psaux/cf2ft.c: Update includes.
+ (cf2_getNormalizedVector): Use `mm->get_var_blend' instead of
+ `cff_get_var_blend'.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Move `cff_random' into `psaux' service.
+
+ NOTE: Does not compile!
+
+ Minor fix to allow both `cff' and `psaux' to use `cff_random'.
+
+ * src/cff/cffload.c (cff_random): Move to...
+ * src/psaux/psobjs.c: Here.
+ * src/cff/cffload.h: Move corresponding declaration to
+ `src/psaux/psobjs.h'.
+
+ * include/freetype/internal/psaux.h (PSAux_ServiceRec): Register the
+ function here...
+ * src/psaux/psauxmod.c: And here.
+
+ * src/cff/cffload.c, src/psaux/cf2intrp.c: Update code.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [cff] Move struct declarations to `freetype/internal'.
+
+ NOTE: Does not compile!
+
+ This is so that the CFF functions moved to `psaux' can access the
+ same structs that they need.
+
+ * src/cff/cfftypes.h: Moved to...
+ * include/freetype/internal/cfftypes.h: ...Here.
+
+ * src/cff/cffobjs.h: Moved the struct declarations to...
+ * include/freetype/internal/cffotypes.h: ... this new file.
+
+ * include/freetype/internal/internal.h (FT_INTERNAL_CFF_TYPES_H,
+ FT_INTERNAL_CFF_OBJECT_TYPES_H): New macros.
+
+ * src/cff/cffcmap.h, src/cff/cffdrivr.c, src/cff/cffgload.c,
+ src/cff/cffgload.h, src/cff/cffload.h, src/cff/cffobjs.c,
+ src/cff/cffobjs.h, src/cff/cffparse.h, src/psaux/psobjs.h,
+ include/freetype/internal/psaux.h,
+ include/freetype/internal/services/svcfftl.h: Update includes.
+
+ * src/cff/rules.mk (CFF_DRV_H): Updated.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Add new service for inter-module calls.
+
+ NOTE: Does not compile!
+
+ This is to allow CFF functions moved to `psaux' to call functions
+ declared in `src/cff/cffload.h'.
+
+ * include/freetype/internal/services/svcfftl.h: New file, setting up
+ a `CFFLoad' service.
+
+ * include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC10,
+ FT_DEFINE_SERVICEDESCREC): New macros.
+ (FT_SERVICE_CFF_TABLE_LOAD_H): New macro.
+
+ * src/cff/cffdrivr.c, src/cff/cffpic.h: Register the new service.
+
+ * src/cff/cfftypes.h (CFF_FontRec), src/psaux/cf2font.h
+ (CF2_FontRec): Add service interface.
+
+ * src/cff/cffobjs.c, src/psaux/cf2font.c, src/psaux/cf2ft.c,
+ src/psaux/cf2intrp.c, src/psaux/cffdecode.c: Use the new service.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Add callbacks for inter-module calls.
+
+ NOTE: Does not compile!
+
+ * include/freetype/internal/psaux.h: Add function pointer
+ declarations.
+
+ * src/psaux/cffdecode.c (cff_decoder_init): Update to take in
+ callbacks.
+ * src/psaux/cffdecode.h: Ditto.
+
+ * src/cff/cffgload.c (cff_compute_max_advance, cff_slot_load):
+ Update calls to pass in callbacks.
+ * src/psaux/cf2ft.c, src/psaux/cffdecode.c: Use them.
+
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
+
+ [psaux, cff] Create new `PSAux' service interface entries.
+
+ NOTE: Does not compile!
+
+ * include/freetype/internal/psaux.h: Include
+ FT_INTERNAL_TRUETYPE_TYPES_H.
+ (CFF_Builder_FuncsRec, CFF_Decocer_FuncsRec): New function tables.
+ (CFF_Builder): Updated.
+ Fix for forward declaration.
+ (PSAux_ServiceRec): New field `cff_decoder_funcs'.
- Note that the current version heavily chokes on FreeType, delivering
- many wrong results. I will report those issues to the cppcheck team
- so that a newer version gives improved results hopefully.
+ * src/psaux/psauxmod.c (cff_builder_funcs, cff_decoder_funcs): New
+ function tables.
+ (PSAux_Interface): Updated.
- */* Improve variable scopes.
- */* Remove redundant initializations which get overwritten.
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Add `psaux'
+ service interface.
- * src/base/ftmac.c, builds/mac/ftmac.c (count_faces_scalable):
- Remove unused variable.
+ * src/cff/cffgload.c, src/cff/cffobjs.c, src/cff/cffparse.c: Update
+ function calls to use psaux service.
- * src/base/ftdbgmem.c (ft_mem_table_destroy): `table' can't be zero.
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
- * src/gxvalid/gxvkern.c (gxv_kern_subtable_fmt1_entry_validate):
- Remove functionless code.
+ [psaux, cff] Move CFF builder components into `psaux' module.
- * src/tools/ftrandom.c (main): Fix memory leak.
+ NOTE: Does not compile!
-2013-06-03 Werner Lemberg <wl@gnu.org>
+ * src/cff/cffgload.c
+ (cff_builder_{init,done,add_point,add_point1,add_contour,start_point,close_contour},
+ cff_check_points): Move to...
+ * src/psaux/psobjs.c: Here.
- Add CFF_CONFIG_OPTION_OLD_ENGINE configuration option.
+ * src/cff/cffgload.h: Move corresponding declarations to
+ `src/psaux/psobjs.h'.
- This controls whether the old FreeType CFF engine gets compiled into
- FreeType. It is now disabled by default.
+ * src/cff/cffgload.h (CFF_Builder): Move struct declaration to...
+ * include/freetype/internal/psaux.h: Here.
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (CFF_CONFIG_OPTION_OLD_ENGINE): New macro.
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
- * src/cff/cffdrivr.c (cff_property_set), src/cff/cffgload.c
- (CFF_Operator, cff_argument_counts, cff_builder_add_point,
- cff_operator_seac, cff_decoder_parse_charstrings, cff_slot_load),
- src/cff/cffgload.h, src/cff/cffobjs.c (cff_driver_init): Use
- CFF_CONFIG_OPTION_OLD_ENGINE to guard the affected code.
+ [psaux, cff] Move CFF decoder components into `psaux' module.
- * docs/CHANGES: Updated.
+ NOTE: Does not compile!
-2013-06-02 Werner Lemberg <wl@gnu.org>
+ * src/cff/cffgload.c (CFF_Operator,
+ CFF_COUNT_{CHECK_WIDTH,EXACT,CLEAR_STACK}, cff_argument_counts,
+ cff_operator_seac, cff_compute_bias,
+ cff_lookup_glyph_by_stdcharcode,
+ cff_decoder_{parse_charstrings,init,prepare}): Move to...
+ * src/psaux/cffdecode.c: This new file.
- Fix PNG library handling.
+ * src/cff/cffgload.h: Move corresponding declarations to...
+ * src/psaux/cffdecode.h: This new file.
- * builds/unix/configure.raw: Don't use LIBPNG_LIBS but
- LIBPNG_LDFLAGS.
+ * src/cff/cffgload.h (CFF_MAX_{OPERANDS,SUBRS_CALLS,TRANS_ELEMENTS},
+ CFF_Decoder_Zone, CFF_Decoder): Move declarations to...
+ * include/freetype/internal/psaux.h: Here.
-2013-05-23 Behdad Esfahbod <behdad@google.com>
+ * src/psaux/cf2ft.h: Update include.
- Add support for color embedded bitmaps (eg. color emoji).
+ * src/psaux/psaux.c, src/psaux/rules.mk (PSAUX_DRV_SRC): Update with
+ the new file.
- A new load flag, FT_LOAD_COLOR, makes FreeType load color
- embedded-bitmaps, following this draft specification
+2017-09-24 Ewald Hew <ewaldhew@gmail.com>
- https://color-emoji.googlecode.com/git/specification/v1.html
+ [psaux, cff] Move Adobe's engine components into `psaux' module.
- which defines two new SFNT tables, `CBDT' and `CBLC' (named and
- modeled after `EBDT' and `EBLC', respectively). The color bitmaps
- are stored in the new FT_PIXEL_MODE_BGRA format to represent BGRA
- pre-multiplied sRGB images. If PNG support is available, PNG color
- images as defined in the same proposed specification are supported
- also.
+ This is the first patch of a sequence to move the Type 2 charstring
+ processing capability from the `cff' module to the `psaux' module.
- Note that color bitmaps are converted to grayscale if client didn't
- ask for color.
+ NOTE: Does not compile!
- * builds/unix/configure.raw: Search for libpng.
- Add `--without-png' option.
+ * src/cff/cf2*: Move these files to...
+ * src/psaux/cf2*: Here.
- * devel/ftoption.h, include/freetype/config/ftoption.h
- (FT_CONFIG_OPTION_USE_PNG): New macro.
+ * src/cff/Jamfile (_sources), src/cff/rules.mk (CFF_DRV_SRC,
+ CFF_DRV_H), src/cff/cff.c, src/cff/cffgload.c: Remove file
+ references.
- * include/freetype/freetype.h (FT_LOAD_COLOR): New load flag.
+ * src/psaux/Jamfile (_sources), src/psaux/rules.mk, src/psaux/psaux.c
+ (PSAUX_DRV_SRC, PSAUX_DRV_H): Add file references.
- * include/freetype/ftimage.h (FT_Pixel_Mode): Add
- `FT_PIXEL_MODE_BGRA'.
+2017-09-24 Alexei Podtelezhnikov <apodtele@gmail.com>
- * include/freetype/tttags.h (TTAG_CBDT, TTAG_CBLC): New tags.
+ Tweak per-face LCD filtering controls.
- * src/base/ftbitmap.c (FT_Bitmap_Embolden): Updated.
- (ft_gray_for_premultiplied_srgb_bgra): New function.
- (FT_Bitmap_Convert): Handle FT_PIXEL_MODE_BGRA.
+ Thing are simpler with a NULL-function pointer.
- * src/sfnt/pngshim.c, src/sfnt/pngshim.h: New files.
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): New
+ pointer to the filter function.
+ (FT_LibraryRec): Remove unused `lcd_filter'.
+ (FT_Bitmap_LcdFilterFunc, ft_lcd_filter_fir): Move from here...
+ * include/freetype/ftlcdfil.h (FT_Bitmap_LcdFilterFunc,
+ ft_lcd_filter_fir): ... to here.
- * src/sfnt/sfnt.c: Include `pngshim.c'.
+ * src/base/ftobjs.c (ft_open_face_internal): NULL-initialize the
+ per-face filter.
+ (FT_Face_Properties): Set it.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Simplify.
- * src/sfnt/ttsbit.c: Include FT_BITMAP_H and `pngshim.h'
- (tt_face_load_eblc): Load `CBLC'.
- (tt_sbit_decoder_init): Load `CBDT'.
- (tt_sbit_decoder_alloc_bitmap): Pass load flags to select between
- color and grayscale bitmaps.
- Set `num_grays'. This is used by `ftview' to choose the blending
- algorithm.
- (tt_sbit_decoder_load_byte_aligned,
- tt_sbit_decoder_load_bit_aligned, tt_sbit_decoder_load_compound,
- tt_sbit_decoder_load_image): Pass load flag.
- s/write/pwrite/.
- Don't call `tt_sbit_decoder_alloc_bitmap'.
- Updated.
- (tt_sbit_decoder_load_png) [FT_CONFIG_OPTION_USE_PNG]: New function.
- (tt_sbit_decoder_load_bitmap): Pass load flag.
- Handle new glyph formats 17, 18, and 19.
- Call `tt_sbit_decoder_alloc_bitmap'.
- Flatten color bitmaps if necessary.
- (tt_face_load_sbit_image): Updated.
+ * src/base/ftlcdfil.c (ft_lcd_filter_fir, FT_Libary_SetLcdFilter):
+ Minor.
- * src/sfnt/rules.mk (SFNT_DRV_SRC): Add `pngshim.c'.
+2017-09-24 Jonathan Kew <jfkthame@gmail.com>
- * docs/CHANGES: Updated.
+ [sfnt] Fix `premultiply_data' (#52092).
-2013-05-24 Guenter <info@gknw.net>
+ * src/sfnt/pngshim.c (premultiply_data): Don't use vector extension
+ if we have less than 16 bytes of data.
- Apply Savannah patch #8055.
+2017-09-24 Werner Lemberg <wl@gnu.org>
- Make `apinames' create an import file for NetWare.
+ [otvalid] Fix handling of ValueRecords.
- * src/tools/apinames.c (PROGRAM_VERSION): Set to 0.2.
- (OutputFormat): Add `OUTPUT_NETWARE_IMP'.
- (names_dump): Handle it.
- (usage): Updated.
- (main): Handle new command line flag `-wN'.
+ For GPOS pair positioning format 1 the description of ValueRecords
+ in the OpenType specification (1.8.2, from today) is wrong – the
+ offset has to be taken from the parent structure; in this case the
+ `PairSet' table.
-2013-05-23 Behdad Esfahbod <behdad@behdad.org>
+ * src/otvalid/otvgpos.c (otv_PairSet_validate): Set `extra3'.
+ (otv_PairPos_validate): Adjust.
- Compilation fix.
+2017-09-23 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttinterp.c (TT_RunIns)
- [!TT_CONFIG_OPTION_SUBPIXEL_HINTING]: Make it work.
+ [otvalid] Handle `GSUB' and `GPOS' v1.1 tables.
-2013-05-22 Infinality <infinality@infinality.net>
+ * src/otvalid/otvgsub.c (otv_GSUB_validate), src/otvalid/otvgpos.c
+ (otv_GPOS_validate): Implement it.
- [truetype] Formatting and an additional subpixel tweak.
+2017-09-23 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttinterp.c (Ins_SHPIX): Formatting fix.
- * src/truetype/ttsubpix.c (SKIP_NONPIXEL_Y_MOVES_Rules):
- Revert previous modification for Verdana clones.
+ [otvalid] Update common table handling to OpenType 1.8.2.
-2013-05-22 Infinality <infinality@infinality.net>
+ * src/otvalid/otvcommn.c (otv_Device_validate): Handle
+ VariationIndex subtable.
+ (otv_Lookup_validate): Handle MarkFilteringSet.
- [truetype] Adjust subpixel zp2 moves and tweak rules.
+2017-09-23 Alexei Podtelezhnikov <apodtele@gmail.com>
- These modifications fix thin diagonal stems in some legacy fonts.
+ [build] Windows-style DLL versioning.
- * src/truetype/ttinterp.c (Direct_Move_X): Remove unused macro.
- (Move_Zp2_Point): Don't always disable x moves for subpixel rendering.
- (Ins_SHP): Disable x moves here for subpixel rendering.
- (Ins_SHPIX): Only disable x moves in compatibility mode.
- Split out zp2 move reversals and reorder conditional respectively.
+ * build/windows/ftver.rc: New VERSIONINFO resource.
+ * build/windows/vc2010/freetype.vcxproj: Further improvements.
- * src/truetype/ttsubpix.c (SKIP_NONPIXEL_Y_MOVES_Rules): Fix oversight.
- Only adjust Verdana clones for 17 ppem.
- (SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions): Add Courier New.
- (ALWAYS_SKIP_DELTAP_Rules): Found additional cases for Arial `s'.
+2017-09-23 Ben Wagner <bungeman@google.com>
-2013-05-20 Infinality <infinality@infinality.net>
+ [truetype] Really fix #52082.
- [truetype] Simplify and improve subpixel function detection.
+ * src/truetype/ttinterp.c (Ins_MDRP): Correct conditional.
- Some small enhancements have allowed the removal of many macros and
- the simplification of existing rules in `ttsubpix.c'.
+2017-09-23 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttsubpix.h (SPH_TWEAK_ALLOW_X_DMOVEX,
- SPH_TWEAK_ALLOW_X_MOVE_ZP2,
- SPH_TWEAK_DELTAP_SKIP_EXAGGERATED_VALUES,
- SPH_TWEAK_SKIP_INLINE_DELTAS, SPH_TWEAK_MIRP_CVT_ZERO): Removed.
- (SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP): New rule macro.
+ [otvalid] Handle `GDEF' v1.2 and v1.3 tables.
- * src/truetype/ttsubpix.c: Updated affected rules.
+ No validation of variation stuff yet.
- * src/truetype/ttinterp.c (Direct_Move_X): Updated.
- (INS_FDEF): Add additional function detection.
- (INS_ENDF): Set runtime flag.
- (Ins_CALL): Skip the call under certain conditions.
- Remove bad code.
- (Ins_LOOPCALL): Skip the call under certain conditions.
- Remove bad code.
- (Move_Zp2_Point): Updated.
- (Ins_SHPIX): Updated.
- Skip the move under some situations.
- (Ins_MIAP): Improve conditions.
- (Ins_MIRP): Updated.
- (Ins_DELTAP): Skip move under certain conditions.
- Simplify conditions.
- (TT_RunIns): Updated.
- Add code to handle new function detection.
- Trace messages.
+ * src/otvalid/otvgdef.c (otv_MarkGlyphSets_validate): New function.
+ (otv_GDEF_validate): Implement it.
-2013-05-17 Werner Lemberg <wl@gnu.org>
+2017-09-22 Werner Lemberg <wl@gnu.org>
- Update more FT_Err_XXX macros using FT_ERR and FT_THROW;
+ [otvalid] Handle `BASE' v1.1 table.
- * builds/amiga/src/base/ftsystem.c, builds/mac/ftmac.c,
- builds/unix/ftsystem.c, builds/vms/ftsystem.c: Do it.
+ No validation of variation stuff yet.
-2013-05-15 Werner Lemberg <wl@gnu.org>
+ * src/otvalid/otvbase.c (otv_BASE_validate): Implement it.
- [truetype] Add `interpreter-version' property.
+2017-09-22 Werner Lemberg <wl@gnu.org>
- This makes the option TT_CONFIG_OPTION_SUBPIXEL_HINTING controllable
- at runtime.
+ [otvalid] Macros for 32bit offset support.
- * include/freetype/ftttdrv.h: New file.
+ * src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE32,
+ OTV_OPTIONAL_OFFSET32, OTV_SIZE_CHECK32): New macros.
- * include/freetype/config/ftheader.h (FT_TRUETYPE_DRIVER_H): New
- macro.
+2017-09-21 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/truetype/ttdriver.c: Include FT_TRUETYPE_DRIVER_H.
- (tt_property_set, tt_property_get): Fill templates.
+ [build] Simplify Visual C++ 2010 project.
- * src/truetype/ttobjs.h (TT_DriverRec): Add `interpreter_version'
- member.
- Remove unused `extension_component' member.
+ * build/windows/vc2010/freetype.vcxproj: Remove fake singlethreaded
+ configurations and tweak.
- * src/truetype/ttgload.c: Include FT_TRUETYPE_DRIVER_H.
- (tt_get_metrics, TT_Hint_Glyph, TT_Process_Simple_Glyph,
- compute_glyph_metrics, tt_loader_init): Use `interpreter_version'.
+2017-09-21 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttinterp.c: Include FT_TRUETYPE_DRIVER_H.
- (SUBPIXEL_HINTING): New macro to check `interpreter_version' flag.
- Update all affected functions to use it.
- Use TT_INTERPRETER_VERSION_XXX where appropriate.
+ [truetype] Integer overflow (#52082).
- * src/truetype/ttobjs.c: Include FT_TRUETYPE_DRIVER_H.
- (tt_driver_init): Initialize `interpreter_version'.
+ * src/truetype/ttinterp.c (Ins_MDRP): Avoid FT_ABS.
- * src/truetype/ttsubpix.c: Include FT_TRUETYPE_DRIVER_H.
- Use TT_INTERPRETER_VERSION_XXX where appropriate.
+2017-09-21 Werner Lemberg <wl@gnu.org>
-2013-05-13 Werner Lemberg <wl@gnu.org>
+ [sfnt] Fix postscript name for default instance of variation fonts.
- [truetype] Avoid empty source file.
+ Problem reported by Behdad.
- * src/truetype/ttsubpix.c [!TT_CONFIG_OPTION_SUBPIXEL_HINTING]:
- Provide dummy typedef.
+ * src/sfnt/sfdriver.c (sfnt_get_ps_name): Test
+ `is_default_instance'.
-2013-05-13 Werner Lemberg <wl@gnu.org>
+2017-09-21 Werner Lemberg <wl@gnu.org>
- * src/cff/cf2font.c (cf2_getGlyphWidth): Fix uninitialized variable.
+ [truetype] Fix `mmvar' array pointers, part 2.
- Fix suggested by Vaibhav Nagarnaik <vnagarnaik@gmail.com>.
+ The previous commit was incomplete.
-2013-05-13 Brian Nixon <bnixon@yahoo.com>
+ * src/truetype/ttgxvar.c: Properly initialize sub-array offsets for
+ `master' also.
- Fix Savannah bug #38970.
+2017-09-21 Werner Lemberg <wl@gnu.org>
- * src/base/ftdebug.c, builds/win32/ftdebug.c,
- builds/wince/ftdebug.c, builds/amiga/src/base/ftdebug.c
- (ft_debug_init): Don't read past the environment variable FT2_DEBUG.
+ [truetype] Fix `mmvar' array pointers.
-2013-05-12 Werner Lemberg <wl@gnu.org>
+ Without this change, clang's AddressSanitizer reports many runtime
+ errors due to misaligned addresses.
- [truetype] Add framework for TrueType properties.
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Use multiples of pointer
+ size for sub-array offsets into `mmvar'.
- * src/truetype/ttdrivr.c: Include FT_SERVICE_PROPERTIES_H.
- (tt_property_set, tt_property_get): New functions, still empty.
- Define `tt_service_properties' service.
- Update `tt_services'.
+2017-09-20 Werner Lemberg <wl@gnu.org>
- * src/truetype/ttpic.h: Include FT_SERVICE_PROPERTIES_H.
- (TT_SERVICE_PROPERTIES_GET): New macro.
- (TTModulePIC): Add `tt_service_properties'.
+ [truetype] Integer overflows.
-2013-05-12 Werner Lemberg <wl@gnu.org>
+ Changes triggered by
- Fix Savannah bug #38967.
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3429
- * src/base/ftcalc.c (FT_DivFix) [FT_LONG64]: Fix cast.
+ * src/truetype/ttinterp.c (Ins_SHPIX, Ins_DELTAP): Use NEG_LONG.
+ (Ins_MIAP): Use SUB_LONG.
-2013-05-12 Werner Lemberg <wl@gnu.org>
+2017-09-19 Alexei Podtelezhnikov <apodtele@gmail.com>
- Introduce unsigned 64bit type (if available).
+ [build] Fix DLL builds in Visual C++ project.
- * include/freetype/config/ftconfig.h: Define FT_UINT64 if available.
- [FT_LONG64]: Provide FT_UInt64.
+ * build/windows/vc2010/freetype.vcxproj: Use DynamicLibrary in Debug
+ and Release configurations.
+ * include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF)
+ [_DLL]: Use Visual C++ extensions.
- * builds/unix/ftconfig.in: Synchronized.
+2017-09-19 John Tytgat <John.Tytgat@esko.com>
-2013-05-12 Werner Lemberg <wl@gnu.org>
+ [cff] Fix family name logic of pure CFF fontdata (#52056).
- Fix Savannah bug #38968.
+ 1. If `FamilyName' is present in the CFF font, use this for
+ FT_Face's `family_name'.
+ 2. Otherwise, use the face name and chop off any subset prefix.
+ 3. If at this point FT_Face's `family_name' is set, use this
+ together with the full name to determine the style.
+ 4. Otherwise, use `CIDFontName' as FT_Face's `family_name'.
+ 5. If we don't have a valid style, use "Regular".
- * include/freetype/ftmodapi.h: Add `FT_EXPORT' to
- FT_Property_{Set,Get}.
- * src/base/ftobjs.c: Add `FT_EXPORT_DEF' to
- FT_Property_{Set,Get}.
+ Previously, FT_Face's `family_name' entry for pure CFF fontdata
+ nearly always was the fontname itself, instead of the `FamilyName'
+ entry in the CFF font (assuming there is one).
-2013-05-10 Werner Lemberg <wl@gnu.org>
+ * src/cff/cffobjs.c (cff_face_init) [pure_cff]: Implement it.
- [sfnt] Clean up bitmap code.
+2017-09-18 Alexei Podtelezhnikov <apodtele@gmail.com>
- * src/sfnt/ttsbit.c: Deleted.
- * src/sfnt/ttsbit0.c: Renamed to `ttsbit.c'.
- * rules.mk (SFNT_DRV_H): Updated.
+ [build] Declutter Visual C++ 2010-2017 project.
-2013-05-10 Werner Lemberg <wl@gnu.org>
+ * build/windows/vc2010/freetype.vcxproj: Use MaxSpeed (/02)
+ optimization for Release configuration throughout the project.
- */* [FT_CONFIG_OPTION_OLD_INTERNALS]: Remove macro and guarded code.
----------------------------------------------------------------------------
-Copyright 2013-2015 by
+Copyright 2017-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.20 b/ChangeLog.20
index 6dae58e..63e3116 100644
--- a/ChangeLog.20
+++ b/ChangeLog.20
@@ -330,7 +330,7 @@
2001-12-22 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
- * src/pfc/pcfread.c (pcf_load_font): Handle property `POINT_SIZE'
+ * src/pcf/pcfread.c (pcf_load_font): Handle property `POINT_SIZE'
and fix incorrect computation of `available_sizes'.
2001-12-22 David Turner <david@freetype.org>
@@ -412,7 +412,7 @@
* src/cff/cffgload.h: Updated.
* src/cff/cffobjs.c: Include FT_INTERNAL_POSTSCRIPT_HINTS_H.
(CFF_Size_Get_Globals_Funcs, CFF_Size_Done, CFF_Size_Init,
- CFF_Size_Reset, CFF_GlyphSlot_Done, CFF_GLyphSlot_Init): New
+ CFF_Size_Reset, CFF_GlyphSlot_Done, CFF_GlyphSlot_Init): New
functions.
(CFF_Init_Face): Renamed to ...
(CFF_Face_Init): This.
@@ -1056,7 +1056,7 @@
2001-08-30 Anthony Feik <afeick@hotmail.com>
- * src/type1/t1afm.c (T1_Read_Afm): Now correctly sets the flag
+ * src/type1/t1afm.c (T1_Read_AFM): Now correctly sets the flag
FT_FACE_FLAG_KERNING when appropriate for Type1 + AFM files.
2001-08-25 Werner Lemberg <wl@gnu.org>
@@ -1176,7 +1176,7 @@
* include/freetype/internal/psaux.h (PS_Table): Use FT_Offset for
`cursor' and `capacity'.
- * src/psaux/psobjc.c (reallocate_t1_table): Use FT_Long for second
+ * src/psaux/psobjs.c (reallocate_t1_table): Use FT_Long for second
parameter.
(PS_Table_Add): Use FT_Offset for `new_size'.
@@ -1338,7 +1338,7 @@
(cff_compute_bias): Use `U' for constant.
* src/cid/cidload.c (cid_decrypt): Ditto.
* src/psaux/psobjs.c (T1_Decrypt): Ditto.
- * src/psaux/t1decode.c (T1_Decoder_Parse_CharStrings): Ditto.
+ * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): Ditto.
* src/sfnt/ttload.c (TT_Load_Kern): Remove unused `version'
variable.
* src/sfnt/ttsbit.c (TT_Load_SBit_Image): Remove unused `top'
@@ -1524,7 +1524,7 @@
* src/base/ftcalc.c (FT_DivFix): Fixed a bug in the 64-bit code that
created incorrect scale factors!
- (FT_Round_Fix, FT_CeilFix, FT_FloorFix): Minor improvements.
+ (FT_RoundFix, FT_CeilFix, FT_FloorFix): Minor improvements.
2001-05-12 Werner Lemberg <wl@gnu.org>
@@ -1710,7 +1710,7 @@
`FT_Err_*' with `CFF_Err_*'.
* src/cid/cidparse.c: Replaced `FT_Err_*' with `T1_Err_*'.
* src/psaux/psobjs.c, src/psaux/t1decode.c: Ditto.
- * src/sfnt/sfobcs.c, src/sfnt/ttload.c: Replaced `FT_Err_*' with
+ * src/sfnt/sfobjs.c, src/sfnt/ttload.c: Replaced `FT_Err_*' with
`TT_Err_*'.
* src/truetype/ttgload.c, src/truetype/ttobjs.c: Ditto.
* src/type1/t1gload.c, src/type1/t1load.c, src/type1/t1objs.c,
@@ -1730,7 +1730,7 @@
* src/cff/cffobjs.c (CFF_Init_Face, CFF_Done_Face): Use
FT_LOCAL_DEF.
* src/cid/cidobjs.c (CID_Done_Driver): Ditto.
- * src/trutype/ttobjs.c (TT_Init_Face, TT_Done_Face, TT_Init_Size):
+ * src/truetype/ttobjs.c (TT_Init_Face, TT_Done_Face, TT_Init_Size):
Ditto.
* src/type1/t1objs.c (T1_Done_Driver): Ditto.
* src/pcf/pcfdriver.c (PCF_Done_Face): Ditto.
@@ -1759,7 +1759,7 @@
2001-03-20 Werner Lemberg <wl@gnu.org>
- * builds/win32/detekt.mk: Fix .PHONY target for Intel compiler.
+ * builds/win32/detect.mk: Fix .PHONY target for Intel compiler.
2001-03-20 David Turner <david.turner@freetype.org>
@@ -2159,7 +2159,7 @@
* include/freetype/internal/t2types.h,
include/freetype/internal/cfftypes.h: Changed the structures for
- CFF_Encoding and CFF_Encoding for the new implementations of the
+ CFF_Charset and CFF_Encoding for the new implementations of the
charset and encoding parsers in the CFF driver.
* src/cff/t2gload.c (t2_lookup_glyph_by_stdcharcode,
@@ -2338,7 +2338,7 @@
2000-12-06 Werner Lemberg <wl@gnu.org>
* builds/module.mk: Replaced `xxx #' with `xxx$(space).
- * builds/os2/detekt.mk, builds/win32/detekt.mk: Moved comment to
+ * builds/os2/detect.mk, builds/win32/detect.mk: Moved comment to
avoid trailing spaces in variable.
* builds/freetype.mk: Use $(D) instead of $D to make statement more
readable.
@@ -2412,7 +2412,7 @@
* builds/unix/detect.mk (.PHONY): Adding `devel', `unix', `lcc',
`setup'.
-2000-11-30 David Turner <david.turner@freetype.ogr>
+2000-11-30 David Turner <david.turner@freetype.org>
* INSTALL: Slightly updated the quick starter documentation to
include IDE compilation, prevent against BSD Make, and specify `make
@@ -2597,7 +2597,7 @@
----------------------------------------------------------------------------
-Copyright 2000-2015 by
+Copyright 2000-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.21 b/ChangeLog.21
index a6f8be7..1adc817 100644
--- a/ChangeLog.21
+++ b/ChangeLog.21
@@ -170,7 +170,7 @@
FTC_CACHE_TRYLOOP_END): New macros.
* src/cache/ftccache.c (FTC_Cache_NewNode), src/cache/ftcsbits.c
- (ftc_snode_compare): Use FT_CACHE_TRYLOOP and FTC_CACE_TRYLOOP_END.
+ (ftc_snode_compare): Use FT_CACHE_TRYLOOP and FTC_CACHE_TRYLOOP_END.
2005-05-23 Werner Lemberg <wl@gnu.org>
@@ -327,7 +327,7 @@
Blaskey <listtarget@danbala.com>).
* src/sfnt/ttcmap.h (TT_CMap): Add member `unsorted'.
- * src/sfnt/ttcmac.c: Use SFNT_Err_Ok where appropriate.
+ * src/sfnt/ttcmap.c: Use SFNT_Err_Ok where appropriate.
(tt_cmap0_validate, tt_cmap2_validate, tt_cmap6_validate,
tt_cmap8_validate, tt_cmap10_validate, tt_cmap12_validate): Use
@@ -571,7 +571,7 @@
doing anything else. This avoids unnecessary heap allocations
(400KByte of heap memory for the LZW decoder).
- * src/gzip/ftgzip.c (FT_Stream_OpenGZip): Ditto for the gzip
+ * src/gzip/ftgzip.c (FT_Stream_OpenGzip): Ditto for the gzip
decoder, although the code savings are smaller.
* docs/CHANGES: Updated.
@@ -617,7 +617,7 @@
`ft_get_adobe_glyph_index', a new function defined in `pstables.h'.
(ps_get_macintosh_name, ps_get_standard_strings): Updated.
- * src/base/ftobjs.c (FT_Set_Char_Sizes): Handle fractional sizes
+ * src/base/ftobjs.c (FT_Set_Char_Size): Handle fractional sizes
more carefully. This fixes Savannah bug #12263.
2005-03-06 David Turner <david@freetype.org>
@@ -756,7 +756,7 @@
(AF_AxisHintsRec): Add `max_segments' and `max_edges'.
(af_axis_hints_new_segment, af_axis_hints_new_edge): New prototypes.
- * src/autofit/aflatin.c (af_latin_metricsc_scale): Don't call
+ * src/autofit/aflatin.c (af_latin_metrics_scale): Don't call
AF_SCALER_EQUAL_SCALES.
(af_latin_hints_compute_segments): Change return type to FT_Error.
Update all callers.
@@ -1014,7 +1014,7 @@
t42_parse_charstrings, t42_parse_dict): Check parser error value
after call to T1_Skip_PS_Token (where necessary).
- * src/psaux/psobjc.c (skip_string, ps_parser_skip_PS_token,
+ * src/psaux/psobjs.c (skip_string, ps_parser_skip_PS_token,
ps_tobytes): Add error messages.
2005-02-12 Werner Lemberg <wl@gnu.org>
@@ -1112,7 +1112,7 @@
but return them as-is.
* docs/CHANGES: Mention new bitmap API.
- * include/freetype/ftchapter.s: Updated.
+ * include/freetype/ftchapters.h: Updated.
2004-12-11 Robert Clark <freetype@ratty.org.uk>
@@ -1159,7 +1159,7 @@
(ah_test_extremum, ah_get_orientation): Removed.
(ah_outline_load): Use FT_Outline_Get_Orientation.
- * src/base/ftsynth.c (ft_test_extrama, ft_get_orientation): Removed.
+ * src/base/ftsynth.c (ft_test_extrema, ft_get_orientation): Removed.
(FT_GlyphSlot_Embolden): Use FT_Outline_Get_Orientation.
2004-11-23 Fernando Papa <fpapa@netgate.com.uy>
@@ -1819,7 +1819,7 @@
2004-08-11 Detlef Würkner <TetiSoft@apg.lahn.de>
* src/base/ftrfork.c (FT_Raccess_Guess)
- [!FT_CONFIG_OPTION_GUESSING_EMBEDDED_FORK]: Remove compiler
+ [!FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK]: Remove compiler
warnings.
2004-08-06 Adam Piotrowski <st_intel@poczta.onet.pl>
@@ -1829,7 +1829,7 @@
2004-08-05 David Turner <david@freetype.org>
- `Activate' gray-scale specifing hinting within the TrueType
+ `Activate' gray-scale specifying hinting within the TrueType
bytecode interpreter. This is an experimental feature which
should probably be made optional.
@@ -1839,7 +1839,7 @@
(TT_Load_Glyph): Here.
Set `grayscale' flag except for `FT_LOAD_TARGET_MONO'.
- * src/truetyep/ttinterp.c (Ins_GETINFO): Return MS rasterizer
+ * src/truetype/ttinterp.c (Ins_GETINFO): Return MS rasterizer
version 1.7.
Return rotation and stretching info only if glyph is rotated or
stretched, respectively.
@@ -1868,7 +1868,7 @@
(LITTLE_ENDIAN_USHORT, LITTLE_ENDIAN_UINT): New macros.
(T1_Read_PFM): New function.
(T1_Read_Metrics): New higher-level function to be used instead of
- T1Read_AFM.
+ T1_Read_AFM.
Update all callers.
2004-07-31 Werner Lemberg <wl@gnu.org>
@@ -2048,7 +2048,7 @@
pcf_get_metrics, pcf_get_bitmaps, pcf_get_encodings): Improve
debugging messages.
- * src/pcf/pcfdrivr.c (FT_COMPOMENT): Move up.
+ * src/pcf/pcfdrivr.c (FT_COMPONENT): Move up.
(PCF_Face_Init): Simplify code.
* src/bdf/bdfdrivr.h (BDF_FaceRec): New element `default_glyph'.
@@ -2101,7 +2101,7 @@
2004-06-08 David Turner <david@freetype.org>
- * include/freetype/freetype.h (FT_GlyphMetrics): Move `lsb_delta'
+ * include/freetype/freetype.h (FT_Glyph_Metrics): Move `lsb_delta'
and `rsb_delta' elements to...
(FT_GlyphSlotRec): Here to retain binary compatibility with older
FreeType versions.
@@ -2116,7 +2116,7 @@
* include/freetype/cache/ftcmru.h (FTC_MruNode_CompareFunc): Change
return type to FT_Bool.
- * src/cache/ftbasic.c (ftc_basic_family_compare): Change return
+ * src/cache/ftcbasic.c (ftc_basic_family_compare): Change return
type to FT_Bool.
* src/cache/ftccache.c (FTC_Cache_Init, ftc_cache_init): Make
@@ -2153,7 +2153,7 @@
* docs/CHANGES: Updated.
-2004-06-04 David Chester <davidchester@gmx.net>
+2004-06-04 David Chester <davidchester@qmx.net>
Improve inter-letter spacing for autohinted glyphs.
@@ -2289,7 +2289,7 @@
* src/cff/cffgload.h (CFF_Builder): Remove `error'.
* src/cff/cffgload.c (cff_decoder_parse_charstrings): Replace
- `Memory_Error' with `Fail' und update all users.
+ `Memory_Error' with `Fail' and update all users.
2004-05-11 Werner Lemberg <wl@gnu.org>
@@ -2528,7 +2528,7 @@
* src/truetype/ttgload.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
ttgxvar.h.
(TT_Process_Simple_Glyph, load_truetype_glyph)
- [TT_CONFIG_OPTION_GX_VAR_SUPPORT] :Support GX var fonts.
+ [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Support GX var fonts.
* src/truetype/ttobjs.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
ttgxvar.h.
@@ -2864,7 +2864,7 @@
(psh_blues_snap_stem): Don't use blue_shift but blue_threshold.
* src/pshinter/pshalgo.c (PSH_STRONG_THRESHOLD_MAXIMUM): New macro.
- (psh_glyph_find_string_points): Use PSH_STRONG_THRESHOLD_MAXIMUM.
+ (psh_glyph_find_strong_points): Use PSH_STRONG_THRESHOLD_MAXIMUM.
(psh_glyph_find_blue_points): New function. Needed for fonts like
p052003l.pfb (URW Palladio L Roman) which have flex curves at the
base line within blue zones, but the flex curves aren't covered by
@@ -2899,7 +2899,7 @@
Improve MacOS fond support. Provide a new API
`FT_New_Face_From_FSSpec' similar to `FT_New_Face'.
- * src/base/ftmac.c [__MWERKS__]: Include FSp_fpopen.h.
+ * src/base/ftmac.c [__MWERKS__]: Include FSp_fopen.h.
STREAM_FILE [__MWERKS__]: New macro.
(ft_FSp_stream_close, ft_FSp_stream_io) [__MWERKS__]: New functions.
(file_spec_from_path) [__MWERKS__]: Updated #if statement.
@@ -3331,7 +3331,7 @@
* src/cff/cffdrivr.c (cff_get_cmap_info): Call sfnt module's TT CMap
Info service function if the cmap comes from sfnt. Return 0 if the
- cmap is sythesized in cff module.
+ cmap is synthesized in cff module.
2004-01-20 David Turner <david@freetype.org>
@@ -3361,7 +3361,7 @@
* src/base/ftstroke.c: Include FT_INTERNAL_OBJECTS_H.
(FT_Outline_GetOutsideBorder): Inverse result.
- (FT_Stroker_Rewind, FT_Glyph_Stroke, FT_GlyphStrokeBorder): New
+ (FT_Stroker_Rewind, FT_Glyph_Stroke, FT_Glyph_StrokeBorder): New
functions.
(FT_Stroker_EndSubPath): Close path if needed.
(FT_Stroker_Set, FT_Stroker_ParseOutline): Use FT_Stroker_Rewind.
@@ -3460,7 +3460,7 @@
2003-12-25 Werner Lemberg <wl@gnu.org>
- * src/base/fttrigon.c, src/base/ftgloadr.c: Inlude
+ * src/base/fttrigon.c, src/base/ftgloadr.c: Include
FT_INTERNAL_OBJECTS_H.
* src/base/ftstroke.c (FT_Outline_GetInsideBorder,
@@ -3493,8 +3493,8 @@
2003-12-23 David Turner <david@freetype.org>
* include/freetype/internal/ftobjs.h (FT_PAD_FLOOR, FT_PAD_ROUND,
- FT_PAD_CEIL, FT_PIX_FLOOR, FT_PIX_ROUND, FT_CEIL): New macros. They
- are used to avoid compiler warnings with very pedantic compilers.
+ FT_PAD_CEIL, FT_PIX_FLOOR, FT_PIX_ROUND, FT_PIX_CEIL): New macros.
+ They are used to avoid compiler warnings with very pedantic compilers.
Note that `(x) & -64' causes a warning if (x) is not signed. Use
`(x) & ~63' instead!
Updated all related code.
@@ -3539,7 +3539,7 @@
src/cache/ftcsbits.c,
src/cache/ftccmap.c,
src/cache/ftcbasic.c (added),
- src/cache/ftclru.c (removed):
+ src/cache/ftlru.c (removed):
*Complete* rewrite of the cache sub-system to `solve' the
following points:
@@ -4010,7 +4010,7 @@
* src/cff/cffload.h, src/cff/cffobjs.h, src/cff/cffparse.h: Don't
include FT_INTERNAL_CFF_TYPES_H but cfftypes.h directly.
- * src/cif/cidriver.c: Include FT_SERVICE_POSTSCRIPT_INFO_H.
+ * src/cid/cidriver.c: Include FT_SERVICE_POSTSCRIPT_INFO_H.
(cid_ps_get_font_info): New function.
(cid_service_ps_info): New service.
(cid_services): Updated.
@@ -4119,7 +4119,7 @@
(fnt_cmap_class_rec, fnt_cmap_class), src/bdf/bdflib.c (empty,
_num_bdf_properties), src/gzip/infutil.c (inflate_mask),
src/gzip/inffixed.h (fixed_bl, fixed_bd, fixed_tl, fixed_td),
- src/gzip/inftrees.h (inflate_trees_fixed), srf/gzip/inftrees.c
+ src/gzip/inftrees.h (inflate_trees_fixed), src/gzip/inftrees.c
(inflate_trees_fixed): Decorate with more `const' to avoid
writable global variables which are disallowed on ARM.
@@ -4231,7 +4231,7 @@
(t42_parse_encoding): Use `ft_isdigit'.
- * src/base/ftmm.c (ft_face_get_mm_service): Return FT_Err_OK if
+ * src/base/ftmm.c (ft_face_get_mm_service): Return FT_Err_Ok if
success.
2003-10-05 Werner Lemberg <wl@gnu.org>
@@ -4355,7 +4355,7 @@
new POSTSCRIPT_NAMES service.
* src/psaux/t1decode.h (t1_lookup_glyph_by_stdcharcode,
t1_decode_init): Use new POSTSCRIPT_NAMES service.
- * src/psaux/t1cmap.h, src/psaux/t1decode.h: Dont' include
+ * src/psaux/t1cmap.h, src/psaux/t1decode.h: Don't include
FT_INTERNAL_POSTSCRIPT_NAMES_H.
* src/psnames/psmodule.c: Don't include
@@ -4659,7 +4659,7 @@
* src/type42/t42drivr.c: Include FT_SERVICE_XFREE86_NAME_H,
FT_SERVICE_GLYPH_DICT_H, and FT_SERVICE_POSTSCRIPT_NAME_H.
- (t42_service_glyph_dict, t42_service_ps_name): New strucures
+ (t42_service_glyph_dict, t42_service_ps_name): New structures
providing Type 42 services.
(t42_services): New services list.
(T42_Get_Interface): Use `ft_service_list_lookup'.
@@ -4683,7 +4683,7 @@
(gindex,gindex).
* src/base/ftpfr.c (ft_pfr_check): Fix serious typo.
- * src/pfr/prfload.c: Remove dead code.
+ * src/pfr/pfrload.c: Remove dead code.
(pfr_get_gindex, pfr_compare_kern_pairs, pfr_sort_kerning_pairs):
New functions.
(pfr_phy_font_done): Free `kern_pairs'.
@@ -4749,8 +4749,7 @@
* include/freetype/ttunpat.h: Fixing documentation comment.
* include/freetype/config/ftoption.h, devel/ftoption.h
- (TT_CONFIG_OPTION_OPTION_COMPILE_UNPATENTED_HINTING): Replaced
- with...
+ (TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING): Replaced with...
(TT_CONFIG_OPTION_UNPATENTED_HINTING): This. Updated all users.
(TT_CONFIG_OPTION_FORCE_UNPATENTED_HINTING): Removed.
@@ -5024,7 +5023,7 @@
drivers.
* src/base/ftobjs.c (FT_Set_Char_Size): Remove redundant code.
- (FT_Set_Pixel_Size): Assign value to `metrics' after validation of
+ (FT_Set_Pixel_Sizes): Assign value to `metrics' after validation of
arguments.
2003-06-20 Werner Lemberg <wl@gnu.org>
@@ -5116,7 +5115,7 @@
ft_glyph_bbox_subpixels, ft_glyph_bbox_gridfit,
ft_glyph_bbox_truncate, ft_glyph_bbox_pixels): Replaced with
FT_GLYPH_BBOX_UNSCALED, FT_GLYPH_BBOX_SUBPIXELS,
- FT_GLYPH_BBIX_GRIDFIT, FT_GLYPH_BBOX_TRUNCATE, FT_GLYPH_BBOX_PIXELS.
+ FT_GLYPH_BBOX_GRIDFIT, FT_GLYPH_BBOX_TRUNCATE, FT_GLYPH_BBOX_PIXELS.
The lowercase variants are now (deprecated aliases) to the uppercase
versions.
Updated all other files.
@@ -5200,7 +5199,7 @@
* src/cid/cidload.c (cid_load_keyword): Handle
T1_FIELD_LOCATION_BBOX.
(parse_font_bbox): Commented out.
- (cid_field_record): Comment out element for parsing FontBBox.
+ (cid_field_records): Comment out element for parsing FontBBox.
* src/type42/t42parse.c (t42_parse_font_bbox): Commented out.
(t42_keywords): Handle FontBBox with T1_FIELD_BBOX, not with
@@ -5346,7 +5345,7 @@
* src/cff/cffload (cff_subfont_load): Fix default values of
expansion_factor and blue_scale.
- * src/cif/cidtoken.h, src/type1/t1tokens.h: Use T1_FIELD_FIXED_1000
+ * src/cid/cidtoken.h, src/type1/t1tokens.h: Use T1_FIELD_FIXED_1000
for blue_scale.
* src/pshinter/pshglob.c (psh_globals_new): Fix default value of
@@ -5569,7 +5568,7 @@
* src/bdf/bdfdrivr.c (BDF_Face_Init), src/pcf/pcfdriver.c
(PCF_Face_Init): Test for charset registry case-insensitively.
- * src/gzip/ftgzip.c (ft_gzip_fil_io): Revert change from yesterday;
+ * src/gzip/ftgzip.c (ft_gzip_file_io): Revert change from yesterday;
it has already been fixed differently.
* src/truetype/ttinterp.c (DO_SFVTL): Add missing braces around
@@ -5706,7 +5705,7 @@
(ah_outline_compute_edges): Scale `edge_distance_threshold' down
after rounding instead of scaling comparison value in loop.
- * src/autohint/ahhint.c (ah_hinter_align_stong_points): Provide
+ * src/autohint/ahhint.c (ah_hinter_align_strong_points): Provide
alternative code which runs faster.
Handle `before->scale == 0'.
@@ -5916,7 +5915,7 @@
2003-04-23 Werner Lemberg <wl@gnu.org>
* src/pfr/pfrload.c (pfr_extra_item_load_font_id): Use FT_PtrDist
- instead of FT_Uint for `len'.
+ instead of FT_UInt for `len'.
2003-04-22 Werner Lemberg <wl@gnu.org>
@@ -5960,7 +5959,7 @@
2003-03-27 David Turner <david@freetype.org>
- * README: Udpated.
+ * README: Updated.
* README.UNX: Removed (now replaced by docs/INSTALL.UNX).
@@ -6275,7 +6274,7 @@
(bdf_driver_class): Use `bdf_driver_requester'.
* src/pcf/pcfdrivr.c: Include FT_BDF_H.
- (pcf_get_bdf_property, pdc_driver_requester): New functions
+ (pcf_get_bdf_property, pcf_driver_requester): New functions
(pcf_driver_class): Use `pcf_driver_requester'.
* src/pcf/pcfread.c: Include `pcfread.h'.
@@ -6547,10 +6546,10 @@
2002-11-07 David Turner <david@freetype.org>
- * src/cache/ftcsbit.c (ftc_sbit_node_load): Fixed a small bug that
+ * src/cache/ftcsbits.c (ftc_sbit_node_load): Fixed a small bug that
caused problems with embedded bitmaps.
- * src/otlayout/otlayout.h, src/otlyaout/otlconf.h,
+ * src/otlayout/otlayout.h, src/otlayout/otlconf.h,
src/otlayout/otlgsub.c, src/otlayout/otlgsub.h,
src/otlayout/otlparse.c, src/otlayout/otlparse.h,
src/otlayout/otlutils.h: Updating the OpenType Layout code, adding
@@ -6608,7 +6607,7 @@
2002-11-01 David Turner <david@freetype.org>
- Added PFR-specific public API. Fixed the kerning retrievel routine
+ Added PFR-specific public API. Fixed the kerning retrieval routine
(it returned invalid values when the outline and metrics resolution
differ).
@@ -6695,7 +6694,7 @@
* src/pfr/pfrgload.c: Include `pfrsbit.h'.
* src/pfr/pfrload.c (pfr_extra_item_load_kerning_pairs): Rewritten.
(pfr_phy_font_done, pfr_phy_font_load): Updated.
- * src/pfr/pfrobks.c: Include `pfrsbit.h'.
+ * src/pfr/pfrobjs.c: Include `pfrsbit.h'.
(pfr_face_init): Handle kerning and embedded bitmaps.
(pfr_slot_load): Load embedded bitmaps.
(PFR_KERN_INDEX): Removed.
@@ -6973,7 +6972,7 @@
* src/pshinter/pshalgo2.c (psh2_glyph_find_strong_points),
src/pshinter/pshalgo3.c (psh3_glyph_find_strong_points): Adding fix
- to prevent seg fault when hints are provided in an empty glyph.
+ to prevent segfault when hints are provided in an empty glyph.
* src/cache/ftccache.i (GEN_CACHE_LOOKUP) [FT_DEBUG_LEVEL_ERROR]:
Removed conditional code. This fixes a bug that prevented
@@ -6996,7 +6995,7 @@
2002-09-08 David Turner <david@freetype.org>
- Various updates to correctly support sub-pixel rendering.
+ Various updates to correctly support subpixel rendering.
* include/freetype/config/ftmodule.h: Add two renderers for LCD.
@@ -7032,7 +7031,7 @@
(FTC_Image_Cache_Lookup): This function.
(ftc_image_family_init): Updated.
- * src/cache/ftcsbit.c (FTC_SBitQueryRec, FTC_SBitFamilyRec):
+ * src/cache/ftcsbits.c (FTC_SBitQueryRec, FTC_SBitFamilyRec):
Updated.
(ftc_sbit_node_load): Updated.
Moved code to convert type flags to load flags to...
@@ -7155,7 +7154,7 @@
to ...
(FT_Glyph_{Init,Done,Transform,GetBBox,Copy,Prepare}Func): This.
(FTRenderer_{render,transform,getCBox,setMode}): Renamed to ...
- (FT_Renderer_{RenderFunc,TransformFunc,GetCBoxFunc,SeteModeFunc}):
+ (FT_Renderer_{RenderFunc,TransformFunc,GetCBoxFunc,SetModeFunc}):
This.
Updated all affected code.
@@ -7239,7 +7238,7 @@
(ft_smooth_render, ft_smooth_render_lcd, ft_smooth_render_lcd_v):
New functions.
- (ft_smooth_locd_renderer_class, ft_smooth_lcdv_renderer_class): New
+ (ft_smooth_lcd_renderer_class, ft_smooth_lcdv_renderer_class): New
classes.
* src/truetype/ttobjs.c (TT_{Done,New}_GlyphZone): Renamed to...
@@ -7376,7 +7375,7 @@
* src/pcf/pcfdriver.c (PCF_Glyph_Load): Fix computation of
horiBearingX.
- * src/bdf/bdfdrivr.c (BDF_GlyphLoad): Fix computation of
+ * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Fix computation of
horiBearingY.
2002-08-16 George Williams <gww@silcom.com>
@@ -7556,7 +7555,7 @@
Get glyph offset.
* src/truetype/ttobjs.c (TT_Face_Init)
- [FT_CONFIG_OPTION_INCOREMENTAL]: Added the incremental loading
+ [FT_CONFIG_OPTION_INCREMENTAL]: Added the incremental loading
system for the TrueType driver.
* src/cid/cidgload.c (cid_load_glyph)
@@ -7581,7 +7580,7 @@
* 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.
+ (FTC_CACHE_USE_LINEAR_HASHING): Removed also.
FT_CONFIG_OPTION_USE_CMAPS is now the default.
@@ -7603,7 +7602,7 @@
* src/cid/cidriver.c (Cid_Get_Char_Index, Cid_Get_Next_Char):
Removed.
- (t1_cid_driver_class): Updated.
+ (t1cid_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.
@@ -7698,7 +7697,7 @@
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_Get_Globals_Funcs -> cff_size_get_globals_funcs
CFF_Size_Done -> cff_size_done
CFF_Size_Init -> cff_size_init
CFF_Size_Reset -> cff_size_reset
@@ -7897,7 +7896,7 @@
2002-06-21 Sven Neumann <sven@convergence.de>
- * src/prf/pfrtypes.h (PFR_KernPair): New structure.
+ * src/pfr/pfrtypes.h (PFR_KernPair): New structure.
(PFR_PhyFont): Use it.
(PFR_KernFlags): New enumeration.
* src/pfr/pfrload.c (pfr_extra_item_load_kerning_pairs): New
@@ -8245,7 +8244,7 @@
`fttype1.c' in src/base.
* src/pshinter/pshglob.c (psh_blues_scale_zones): Fixed a bug that
- prevented family blue zones substitution from hapenning correctly.
+ prevented family blue zones substitution from happening correctly.
* include/freetype/ftbdf.h FT_Get_BDF_Charset_ID): Adding
documentation comment.
@@ -8622,7 +8621,7 @@
2002-04-19 Werner Lemberg <wl@gnu.org>
- * src/pfr/pfrload.c (pfr_extra_items_farse): Fix debug message.
+ * src/pfr/pfrload.c (pfr_extra_items_parse): Fix debug message.
(pfr_phy_font_load): s/size/Size/ for local variable to avoid
compiler warning.
* src/pfr/pfrobjs.c (pfr_face_init): Fix debug message.
@@ -8636,7 +8635,7 @@
src/pfr/*: New files.
* include/freetype/config/ftmodule.h,
- include/freetype/internal/fttrace.h, src/Jamefile: Updated.
+ include/freetype/internal/fttrace.h, src/Jamfile: Updated.
* src/type1/t1gload.h (T1_Load_Glyph), src/type1/t1gload.c
(T1_Load_Glyph): Fixed incorrect parameter sign-ness in callback
@@ -8676,7 +8675,7 @@
2002-04-16 Francesco Zappa Nardelli <Francesco.Zappa.Nardelli@ens.fr>
- * src/pcf/pcfread (pcf_get_accell): Fix parsing of accelerator
+ * src/pcf/pcfread.c (pcf_get_accel): Fix parsing of accelerator
tables.
2002-04-15 David Turner <david@freetype.org>
@@ -8716,7 +8715,7 @@
src/cache/ftcimage.c, src/cache/ftcsbits.c,
- src/cff/cffdriver.c, src/cff/cffload.c, src/cff/cffobjs.c,
+ src/cff/cffdrivr.c, src/cff/cffload.c, src/cff/cffobjs.c,
src/cid/cidload.c, src/cid/cidparse.c, src/cid/cidriver.c,
@@ -9063,12 +9062,12 @@
FT_Glyph_Name_Requester => FT_Face_GetGlyphNameFunc
FT_Name_Index_Requester => FT_Face_GetGlyphNameIndexFunc
- * src/base/ftapi.c: New file. It contains backwards compatibility
+ * src/base/ftapi.c: New file. It contains backward compatibility
functions.
* include/freetype/internal/psaux.h, src/cid/cidload.c,
src/cidtoken.h, src/psaux/psobjs.c, src/psaux/psobjs.h,
- src/psaux/t1decode.c, stc/type1/t1load.c, src/type1/t1tokens.h:
+ src/psaux/t1decode.c, src/type1/t1load.c, src/type1/t1tokens.h:
Updated common PostScript type definitions.
Renamed all enumeration values like to uppercase variants:
@@ -9076,7 +9075,7 @@
t1_field_cid_info => T1_FIELD_LOCATION_CID_INFO
etc.
- * include/freetype/internal/psglobals.h: Removed.
+ * include/freetype/internal/psglobal.h: Removed.
* include/freetype/internal/pshints.h, src/pshinter/pshglob.h:
Updated.
@@ -9106,7 +9105,7 @@
FT_Realloc_Debug, FT_Free_Debug): Fix compiler warnings.
* src/base/ftcalc.c (FT_MulFix): Ditto.
* src/cff/cffdrivr.c (cff_get_name_index): Ditto.
- * src/cff/cffobjs.c (CFF_Size_Get_Global_Funcs, CFF_Size_Init,
+ * src/cff/cffobjs.c (CFF_Size_Get_Globals_Funcs, CFF_Size_Init,
CFF_GlyphSlot_Init): Ditto.
* src/cid/cidobjs.c (CID_GlyphSlot_Init,
CID_Size_Get_Globals_Funcs): Ditto.
@@ -9247,7 +9246,7 @@
{
} PS_StructRec, *PS_Struct;
- typedef PS_StructRec T1_Struct; /* backwards-compatibility */
+ typedef PS_StructRec T1_Struct; /* backward compatibility */
Hence, we increase the coherency of the source code by effectively
using the `Rec' prefix for structure types.
@@ -9384,7 +9383,7 @@
* src/pcf/pcfread.c (pcf_seek_to_table_type): Ditto.
* src/sfnt/sfdriver.c (get_sfnt_postscript_name): Ditto.
(pcf_get_bitmaps): The same for `sizebitmaps'.
- * src/psaux/t1decode.c (T1_Decode_Parse_Charstrings): The same for
+ * src/psaux/t1decode.c (T1_Decoder_Parse_Charstrings): The same for
`orig_y'.
(t1operator_seac): Comment out more dead code.
* src/pshinter/pshalgo2.c (ps2_hints_apply): Add `DEBUG_HINTER'
@@ -9423,7 +9422,7 @@
----------------------------------------------------------------------------
-Copyright 2002-2015 by
+Copyright 2002-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.22 b/ChangeLog.22
index 08c5877..4517c32 100644
--- a/ChangeLog.22
+++ b/ChangeLog.22
@@ -189,7 +189,7 @@
* src/base/ftdbgmem.c (_ft_debug_file, _ft_debug_lineno)
[FT_DEBUG_MEMORY]: New global variables, replacing...
- (FT_MemTable_Rec) [FT_DEBUG_MEMORY]: Remove `filename' and
+ (FT_MemTableRec) [FT_DEBUG_MEMORY]: Remove `filename' and
`line_no'. Update all callers.
(ft_mem_debug_alloc) [FT_DEBUG_MEMORY]: Avoid possible integer
overflow.
@@ -260,7 +260,7 @@
2006-04-26 Werner Lemberg <wl@gnu.org>
* src/psaux/psobjs.c (shift_elements): Don't use FT_Long but
- FT_PtrDiff for `delta'. Reported by Céline PILLET
+ FT_PtrDist for `delta'. Reported by Céline PILLET
<Celine.Pillet@Tagginfo.com>.
2006-04-21 David Turner <david@freetype.org>
@@ -352,7 +352,7 @@
* src/tools/docmaker/sources.py (re_bold, re_italic): Accept "'"
also.
-2006-03-23 David Turner <david@freetype.org>
+2006-03-23 David Turner <david@freetype.org>
Add FT_Get_SubGlyph_Info API to retrieve subglyph data. Note that
we do not expose the FT_SubGlyphRec structure.
@@ -360,7 +360,7 @@
* include/freetype/internal/ftgloadr.h (FT_SUBGLYPH_FLAGS_*): Moved
to...
* include/freetype/freetype.h (FT_SUBGLYPH_FLAGS_*): Here.
- (FT_Get_SybGlyph_Info): New declaration.
+ (FT_Get_SubGlyph_Info): New declaration.
* src/base/ftobjs.c (FT_Get_SubGlyph_Info): New function.
@@ -387,10 +387,10 @@
(FTC_INode_Weight): Commented out.
* src/cache/ftcimage.h: Updated.
- * src/cache/ftmanag.c (FTC_Manager_Compress,
+ * src/cache/ftcmanag.c (FTC_Manager_Compress,
FTC_Manager_RegisterCache, FTC_Manager_FlushN):
s/FT_EXPORT/FT_LOCAL/.
- * src/cache/ftmanag.h: Updated.
+ * src/cache/ftcmanag.h: Updated.
* src/cache/ftcsbits.c (FTC_SNode_Free, FTC_SNode_New,
FTC_SNode_Compare): s/FT_EXPORT/FT_LOCAL/.
@@ -494,7 +494,7 @@
FTC_MruList_Init, FTC_MruList_Reset, FTC_MruList_Done,
FTC_MruList_New, FTC_MruList_Remove, FTC_MruList_RemoveSelection):
Declare as FT_LOCAL_DEF.
- (FTC_MruListFind, FTC_MruList_Lookup) [!FTC_INLINE]: Compile
+ (FTC_MruList_Find, FTC_MruList_Lookup) [!FTC_INLINE]: Compile
conditionally.
Declare as FT_LOCAL_DEF.
@@ -605,14 +605,14 @@
* docs/release: Minor additions and clarifications.
- * docs/CHANGES: Updated to reflect many fixes for backwards
+ * docs/CHANGES: Updated to reflect many fixes for backward
compatibility. Still incomplete.
2006-02-26 David Turner <david@freetype.org>
* src/base/ftobjs.c (ft_recompute_scaled_metrics): Re-enable
conservative rounding of metrics to avoid breaking clients like
- Pango (see http://bugzilla.gnome.org/show_bug.cgi?id=327852).
+ Pango (see https://bugzilla.gnome.org/show_bug.cgi?id=327852).
2006-02-25 Werner Lemberg <wl@gnu.org>
@@ -814,7 +814,7 @@
* include/freetype/ftcache.h (FTC_IMAGE_TYPE_COMPARE,
FTC_IMAGE_TYPE_HASH), src/cache/ftcbasic.c (FTC_OldFontRec,
FTC_OldImageDescRec, FTC_ImageCache_Lookup, FTC_Image_Cache_New,
- FTC_OldImage_Desc, FTC_OLD_IMAGE_FORMAT, ftc_old_image_xxx,
+ FTC_OldImageDesc, FTC_OLD_IMAGE_FORMAT, ftc_old_image_xxx,
ftc_image_type_from_old_desc, FTC_Image_Cache_Lookup,
FTC_SBitCache_Lookup, FTC_SBit_Cache_New, FTC_SBit_Cache_Lookup)
[FT_CONFIG_OPTION_OLD_INTERNALS]: Try to revive old functions of the
@@ -934,7 +934,7 @@
* include/freetype/freetype.h (FT_GlyphSlotRec): Improve
documentation of `outline' field.
- * src/sfnt/sfobjc.s: Inckude FT_INTERNAL_DEBUG_H.
+ * src/sfnt/sfobjs.c: Include FT_INTERNAL_DEBUG_H.
* src/sfnt/sfdriver.c: Include ttmtx.h.
* src/autofit/afcjk.c: Include aftypes.h and aflatin.h.
@@ -1630,8 +1630,8 @@
* include/freetype/internal/t1types.h (T1_FaceRec): Updated.
- * src/psaux/t1cmap.h (T1_CmapStdRec): Updated.
- (T1_CmapUnicode, T1_CmapUnicodeRec): Removed.
+ * src/psaux/t1cmap.h (T1_CMapStdRec): Updated.
+ (T1_CMapUnicode, T1_CMapUnicodeRec): Removed.
* src/psaux/t1cmap.c (t1_get_glyph_name): New callback function.
(t1_cmap_unicode_init, t1_cmap_unicode_done,
@@ -1781,7 +1781,7 @@
Note that this doesn't force auto-hinting for all fonts, however.
* src/autofit/afhints.c (af_glyph_hints_reload): Don't set
- scaler_fiags here but...
+ scaler_flags here but...
(af_glyph_hints_rescale): Here.
* src/autofit/aflatin.c (af_latin_hints_init): Disable horizontal
@@ -1813,7 +1813,7 @@
[TT_CONFIG_OPTION_BDF]: New structure.
(TT_FaceRec) [TT_CONFIG_OPTION_BDF]: New member `bdf'.
- * include/freetype/ttags.h (TTAG_BDF): New macro.
+ * include/freetype/tttags.h (TTAG_BDF): New macro.
* src/sfnt/Jamfile (_sources): Add ttbdf.
@@ -1835,7 +1835,7 @@
2005-12-07 Werner Lemberg <wl@gnu.org>
- * src/sfnt/sfobjc.c (sfnt_init_face): Move tag check to...
+ * src/sfnt/sfobjs.c (sfnt_init_face): Move tag check to...
* src/sfnt/ttload.c (sfnt_init): Here, before handling TTCs.
2005-12-06 Chia-I Wu <b90201047@ntu.edu.tw>
@@ -1962,7 +1962,7 @@
* docs/CHANGES: Mention scaling bug.
-2005-11-18 susuzki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+2005-11-18 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
* include/freetype/ftgxval.h, src/base/ftgxval.c
(FT_TrueTypeGX_Free, FT_ClassicKern_Free): New functions to free
@@ -2311,16 +2311,16 @@
CJK font). A SING Glyphlet Font is an OpenType font that contains
the outline(s), either in a `glyf' or `CFF' table, for a glyph;
`cmap', `BASE', and `GSUB' tables are present with the same format
- and functionaliy as a regular OpenType font; there are no `name',
+ and functionality as a regular OpenType font; there are no `name',
`head', `OS/2', and `post' tables; there are two new tables, `SING'
which contains details about the glyphlet, and `META' which contains
metadata.
Further information on the SING Glyphlet format can be found at:
- http://www.adobe.com/products/indesign/sing_gaiji.html
+ https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5148.SING_Tutorial.pdf
- * include/freetype/ttags.h (TTAG_SING, TTAG_META): New macros for
+ * include/freetype/tttags.h (TTAG_SING, TTAG_META): New macros for
the OpenType tables `SING' and `META'. These two tables are used in
SING Glyphlet Format fonts.
@@ -2371,7 +2371,7 @@
(gxv_kern_subtable_fmt1_valueTable_load,
gxv_kern_subtable_fmt1_subtable_setup,
gxv_kern_subtable_fmt1_entry_validate): Fix C++ compiler errors.
- (gxv_kern_coverage_validate): Use KERN_DIALECT_UNKWOWN.
+ (gxv_kern_coverage_validate): Use KERN_DIALECT_UNKNOWN.
Improve trace message.
(gxv_kern_validate_generic): Fix C++ compiler error.
Improve trace message.
@@ -2458,8 +2458,8 @@
* src/gxvalid/gxvbsln.c (GXV_BSLN_VALUE_EMPTY): Add `U'.
- * src/gxvalid/gxmort1.c (GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE),
- src/gxvalid/gxmort2.c (GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE): Fix
+ * src/gxvalid/gxvmort1.c (GXV_MORT_SUBTABLE_TYPE1_HEADER_SIZE),
+ src/gxvalid/gxvmort2.c (GXV_MORT_SUBTABLE_TYPE2_HEADER_SIZE): Fix
typo.
* src/gxvalid/gxvmorx0.c, src/gxvalid/gxvmorx1.c,
@@ -2787,7 +2787,7 @@
2005-06-15 Kirill Smelkov <kirr@mns.spb.ru>
The next release will be 2.2.0, so don't worry about source code
- backwards compatibility.
+ backward compatibility.
* include/freetype/ftimage.h (FT_Outline_MoveToFunc,
FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
@@ -2821,7 +2821,7 @@
----------------------------------------------------------------------------
-Copyright 2005-2015 by
+Copyright 2005-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.23 b/ChangeLog.23
index 93fd33c..85253f1 100644
--- a/ChangeLog.23
+++ b/ChangeLog.23
@@ -43,7 +43,7 @@
* src/base/ftoutln.c (FT_Outline_New_Internal): The length of
FT_Outline->points[] should be numPoints, not 2 * numPoints.
Found by Paul Messmer, see
- http://lists.gnu.org/archive/html/freetype-devel/2010-02/msg00003.html
+ https://lists.gnu.org/archive/html/freetype-devel/2010-02/msg00003.html
2010-02-10 Ken Sharp <ken.sharp@artifex.com>
@@ -108,7 +108,7 @@
Preferred family names should be used for legacy systems that
can hold only a few faces (<= 4) for a family name. Suggested by
Andreas Heinrich.
- http://lists.gnu.org/archive/html/freetype/2010-01/msg00001.html
+ https://lists.gnu.org/archive/html/freetype/2010-01/msg00001.html
* include/freetype/ftsnames.h (FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY,
FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY): Define.
@@ -139,7 +139,7 @@
Fix compilation warning.
* src/base/ftbase.h: s/LOCAL_DEF/LOCAL/.
- * src/base/ftobjc.s: Include ftbase.h conditionally.
+ * src/base/ftobjs.c: Include ftbase.h conditionally.
2010-01-11 Kwang Yul Seo <skyul@company100.net>
@@ -197,7 +197,7 @@
Fix Savannah bug #28395.
* src/truetype/ttdriver.c (Load_Glyph), src/type1/t1gload.c
- (T1_Loada_Glyph): Don't check `num_glyphs' if incremental interface
+ (T1_Load_Glyph): Don't check `num_glyphs' if incremental interface
is used.
2010-01-05 Ken Sharp <ken.sharp@artifex.com>
@@ -607,7 +607,7 @@
(ft_black_render): Initialize `worker->gray_lines' (problem found by
valgrind).
- (FT_RASTER_OPTION_ANTI_ALIASING, DEBUG_RASTER): Dont' #undef, just
+ (FT_RASTER_OPTION_ANTI_ALIASING, DEBUG_RASTER): Don't #undef, just
comment out.
2009-09-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -631,7 +631,7 @@
The issue of incompatible cast between unsigned long and void*
on LLP64 platform is reported by NightStrike from MinGW-Win64
project. See
- http://lists.gnu.org/archive/html/freetype/2009-09/msg00000.html
+ https://lists.gnu.org/archive/html/freetype/2009-09/msg00000.html
* src/bdf/bdf.h: The type of hashnode->data is changed from
void* to size_t.
@@ -655,9 +655,9 @@
[Win64] Improve the computation of random seed from stack address.
On LLP64 platform, the conversion from pointer to FT_Fixed need
- to drop higher 32-bit. Explict casts are required. Reported by
+ to drop higher 32-bit. Explicit casts are required. Reported by
NightStrike from MinGW-w64 project. See
- http://lists.gnu.org/archive/html/freetype/2009-09/msg00000.html
+ https://lists.gnu.org/archive/html/freetype/2009-09/msg00000.html
* src/cff/cffgload.c: Convert the pointers to FT_Fixed explicitly.
@@ -671,7 +671,7 @@
* src/raster/rules.mk: Don't handle ftmisc.h. It is needed for
stand-alone mode only.
- * src/raster/ftmisc.h (FT_MemoryRec , FT_Alloc_Func, FT_Free_Func,
+ * src/raster/ftmisc.h (FT_MemoryRec, FT_Alloc_Func, FT_Free_Func,
FT_Realloc_Func): Copy declarations from ftsystem.h.
2009-09-02 Bram Tassyns <bramt@enfocus.be>
@@ -864,7 +864,7 @@
LP64 systems: Higher bits are not used.
16-bit systems: Drop can occur.
See
- http://lists.gnu.org/archive/html/freetype-devel/2008-12/msg00065.html
+ https://lists.gnu.org/archive/html/freetype-devel/2008-12/msg00065.html
These functions will be refined to take FT_ULong flags in
next bump with incompatible API change.
@@ -891,7 +891,7 @@
pcf: Fix a comparison between FT_Long and FT_ULong.
* src/pcf/pcfread.c (pcf_get_bitmaps): Return an error
- if PCF_Face->nemetrics is negative.
+ if PCF_Face->nmetrics is negative.
2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -929,7 +929,7 @@
type1: Fix a data type mismatching with its source.
* include/freetype/internal/t1types.h: The type of
- T1_Face->buildchar is matched with T1_Decorder->top.
+ T1_Face->buildchar is matched with T1_Decoder->top.
2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -944,7 +944,7 @@
pfr: Fix a data type mismatching with its source.
- * src/pfr/pfrtypes.h: The type of PFR_PhysFont->chars_offset
+ * src/pfr/pfrtypes.h: The type of PFR_PhyFont->chars_offset
is extended from FT_UInt32 to FT_Offset, because it is
calculated with the pointer difference in pfr_phy_font_load().
@@ -975,8 +975,8 @@
psaux: Fix a data type mismatching with its source.
* include/freetype/internal/psaux.h: The type of
- T1_DecorderRec.buildchar is matched with
- T1_DecorderRec.top.
+ T1_DecoderRec.buildchar is matched with
+ T1_DecoderRec.top.
2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -1150,7 +1150,7 @@
2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
- cache: Insert explict casts for LP64 systems.
+ cache: Insert explicit casts for LP64 systems.
* src/cache/ftcbasic.c (FTC_ImageCache_Lookup,
FTC_SBitCache_Lookup): The type of FTC_ImageType->width
@@ -1409,7 +1409,7 @@
base: Prevent some overflows on LP64 systems.
- * src/base/ftadvance.c (FT_Get_Advances): Cast the
+ * src/base/ftadvanc.c (FT_Get_Advances): Cast the
unsigned long constant FT_LOAD_ADVANCE_ONLY to FT_UInt32
for LP64 platforms.
@@ -1499,7 +1499,7 @@
bdf: Fix some data types mismatching with their sources.
- * src/bdf/bdrdrivr.c (bdf_cmap_char_index): The type
+ * src/bdf/bdfdrivr.c (bdf_cmap_char_index): The type
of `code' is matched with BDF_encoding_el->enc.
(bdf_cmap_char_next): The type of `charcode' is
matched with BDF_encoding_el->enc. When *acharcode
@@ -1545,7 +1545,7 @@
* src/cache/ftcbasic.c (FTC_ImageCache_Lookup): Exclude
the legacy behaviour from 16-bit platform, because the
current hack cannot detect the caller uses this function
- via legacy convension.
+ via legacy convention.
(FTC_SBitCache_Lookup): Ditto.
2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -1585,7 +1585,7 @@
2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
- fttypes.h: Cast FT_MAKE_TAG output to FT_Tag exlicitly.
+ fttypes.h: Cast FT_MAKE_TAG output to FT_Tag explicitly.
* include/freetype/fttypes.h (FT_MAKE_TAG):
Cast the result to FT_Tag.
@@ -1687,7 +1687,7 @@
sfnt: Count the size of the memory object by ptrdiff_t.
* src/sfnt/ttbdf.c (tt_face_find_bdf_prop): The type of
- `peroperty_len' is changed from FT_UInt to FT_Offset,
+ `property_len' is changed from FT_UInt to FT_Offset,
to match with size_t, which is appropriate type for the
object in the memory buffer.
@@ -1765,7 +1765,7 @@
ftgzip.c by FT2 are enabled by default. To use
zlib zcalloc() & zfree(), define USE_ZLIB_ZCALLOC.
See discussion:
- http://lists.gnu.org/archive/html/freetype-devel/2009-02/msg00000.html
+ https://lists.gnu.org/archive/html/freetype-devel/2009-02/msg00000.html
2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -1904,7 +1904,7 @@
2009-07-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
Borland C++ compiler patch proposed by Mirco Babin.
- http://lists.gnu.org/archive/html/freetype/2009-07/msg00016.html.
+ https://lists.gnu.org/archive/html/freetype/2009-07/msg00016.html.
* builds/exports.mk: Delete unused flags, CCexe_{CFLAGS,LDFLAGS}.
Fix APINAMES_C and APINAMES_EXE pathnames to reflect the platform
@@ -1929,7 +1929,7 @@
* src/tools/chktrcmp.py: A script to check trace_XXXX macros
that are used in C source but undefined in fttrace.h, or
defined in fttrace.h but unused in C sources. See
- http://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00013.html.
+ https://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00013.html.
* docs/DEBUG: Mention on chktrcmp.py.
* docs/release: Ditto.
@@ -1961,7 +1961,7 @@
* include/freetype/internal/fttrace.h: Add FT_TRACE_DEF( t1afm )
and FT_TRACE_DEF( ttbdf ). See
- http://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00013.html
+ https://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00013.html
2009-07-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -1975,8 +1975,8 @@
Prevent the overflows by a glyph with too many points or contours.
The bug is reported by Boris Letocha <b.letocha@gmc.net>. See
- http://lists.gnu.org/archive/html/freetype-devel/2009-06/msg00031.html
- http://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00002.html
+ https://lists.gnu.org/archive/html/freetype-devel/2009-06/msg00031.html
+ https://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00002.html
* include/freetype/ftimage.h (FT_OUTLINE_CONTOURS_MAX,
FT_OUTLINE_POINTS_MAX): New macros to declare the maximum
@@ -2001,7 +2001,7 @@
2009-06-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
ftpatent: Fix a bug by wrong usage of service->table_info().
- http://lists.gnu.org/archive/html/freetype-devel/2008-12/msg00039.html
+ https://lists.gnu.org/archive/html/freetype-devel/2008-12/msg00039.html
* include/freetype/internal/services/svsfnt.h: Extend
FT_SFNT_TableInfoFunc() to take new argument to obtain the offset
@@ -2069,7 +2069,7 @@
* builds/unix/configure.raw: Fix a bug in sed script to extract
native suffix for binary executables, patch by Peter Breitenlohner.
- http://lists.gnu.org/archive/html/freetype-devel/2009-04/msg00036.html
+ https://lists.gnu.org/archive/html/freetype-devel/2009-04/msg00036.html
2009-06-26 Werner Lemberg <wl@gnu.org>
@@ -2122,10 +2122,10 @@
Use 16.16 format everywhere (except for large integers followed by a
`div').
[CAN_HANDLE_NON_INTEGRAL_T1_OPERANDS]: Remove #ifdef and activate
- code uncoditionally.
+ code unconditionally.
Add support for random numbers and update remaining code
accordingly; this should work now.
- (t1_operator_seac): Updated.
+ (t1operator_seac): Updated.
* src/psaux/pshrec.c: Include FT_INTERNAL_CALC_H.
(ps_hints_t1stem3, t1_hints_stem): Updated.
@@ -2479,7 +2479,7 @@
af_latin_script_class struct will have function to init it instead of
being allocated in the global scope.
Change af_latin_blue_chars to be PIC-compatible by being a two
- dimentional array rather than array of pointers.
+ dimensional array rather than array of pointers.
* src/autofit/aflatin2.h declare af_latin2_script_class
@@ -2489,11 +2489,11 @@
af_latin2_script_class struct will have function to init it instead of
being allocated in the global scope.
Change af_latin2_blue_chars to be PIC-compatible by being a two
- dimentional array rather than array of pointers.
+ dimensional array rather than array of pointers.
* src/autofit/afglobal.c when FT_CONFIG_OPTION_PIC is defined
af_script_classes array initialization was moved to afpic.c and
- is later refered using macros defeined in afpic.h.
+ is later referred using macros defined in afpic.h.
New Files:
* src/autofit/afpic.h declare struct to hold PIC globals for autofit
@@ -2573,7 +2573,7 @@
Macros will be used from rastpic.h in order to access
ft_standard_raster from the pic_container (allocated in ftraster.c).
In ft_raster1_render when PIC is enabled, the last letter of
- module_name is used to verfy the renderer class rather than the
+ module_name is used to verify the renderer class rather than the
class pointer.
* src/raster/ftraster.c when FT_CONFIG_OPTION_PIC is defined
@@ -2594,14 +2594,14 @@
Position Independent Code (PIC) support in smooth renderer.
* src/smooth/ftsmooth.h declare ft_smooth_renderer_class,
- ft_smooth_lcd_renderer_class and ft_smooth_lcd_v_renderer_class
+ ft_smooth_lcd_renderer_class and ft_smooth_lcdv_renderer_class
using macros from ftrender.h,
when FT_CONFIG_OPTION_PIC is defined create and destroy
functions will be declared.
* src/smooth/ftsmooth.c when FT_CONFIG_OPTION_PIC is defined
the following structs:
ft_smooth_renderer_class, ft_smooth_lcd_renderer_class
- and ft_smooth_lcd_v_renderer_class
+ and ft_smooth_lcdv_renderer_class
will have functions to init or create and destroy them
instead of being allocated in the global scope.
And macros will be used from ftspic.h in order to access
@@ -2755,7 +2755,7 @@
And macros will be used from ttpic.h in order to access them
from the pic_container.
* src/truetype/ttobjs.c change trick_names array to be
- PIC-compatible by being a two dimentional array rather than array
+ PIC-compatible by being a two dimensional array rather than array
of pointers.
New Files:
@@ -2784,14 +2784,14 @@
Add macros to declare, allocate and initialize drivers
(FT_Driver_ClassRec).
* include/freetype/internal/ftpic.h new file to declare the
- FT_PIC_Container struct and the functions to allocate and detroy it.
+ FT_PIC_Container struct and the functions to allocate and destroy it.
* include/freetype/internal/ftserv.h add macros to allocate and
- destory arrays of FT_ServiceDescRec.
+ destroy arrays of FT_ServiceDescRec.
* include/freetype/internal/internal.h define macro to include
ftpic.h.
New Files:
- * src/base/ftpic.c implement functions to allocate and destory the
+ * src/base/ftpic.c implement functions to allocate and destroy the
global pic_container.
* src/base/basepic.h declare struct to hold PIC globals for base and
macros to access them.
@@ -2814,8 +2814,8 @@
* src/base/ftglyph.c when FT_CONFIG_OPTION_PIC is defined
ft_bitmap_glyph_class and ft_outline_glyph_class will be allocated
in the pic_container instead of the global scope and use macros from
- basepic.h to access them.
- * src/base/ftbbox.c allocate bbox_interface stract on the stack
+ basepic.h to access them.
+ * src/base/ftbbox.c allocate bbox_interface struct on the stack
instead of the global scope when FT_CONFIG_OPTION_PIC is defined.
* src/base/ftstroke.c access ft_outline_glyph_class allocated in
ftglyph.c via macros from basepic.h
@@ -3469,8 +3469,8 @@
faces includes broken face which FT_Done_Face() cannot free,
FT_Done_Library() retries FT_Done_Face() and it can fall into
an endless loop. See the discussion:
- http://lists.gnu.org/archive/html/freetype-devel/2008-09/msg00047.html
- http://lists.gnu.org/archive/html/freetype-devel/2008-10/msg00000.html
+ https://lists.gnu.org/archive/html/freetype-devel/2008-09/msg00047.html
+ https://lists.gnu.org/archive/html/freetype-devel/2008-10/msg00000.html
2009-01-07 Werner Lemberg <wl@gnu.org>
@@ -3492,7 +3492,7 @@
* builds/unix/configure.raw: Don't call AC_CANONICAL_BUILD and
AC_CANONICAL_TARGET and use $host_os only. A nice explanation for
this change can be found at
- http://blog.flameeyes.eu/s/canonical-target.
+ https://blog.flameeyes.eu/s/canonical-target.
From Savannah patch #6712.
@@ -3519,7 +3519,7 @@
2008-12-21 Werner Lemberg <wl@gnu.org>
* src/pfr/pfrdrivr.c, src/winfonts/winfnt.c, src/cache/ftcmanag.c,
- src/smooth/ftgrays.c, src/base/ftobjc.s, src/sfobjs.c:
+ src/smooth/ftgrays.c, src/base/ftobjs.c, src/sfobjs.c:
s/_Err_Bad_Argument/_Err_Invalid_Argument/. The former is for
errors in the bytecode interpreter only.
@@ -3576,7 +3576,7 @@
* docs/CHANGES: Updated.
-2008-12-18 Bevan, David <dbevan@emtex.com>
+2008-12-18 David Bevan <dbevan@emtex.com>
Provide API for accessing embedding and subsetting restriction
information.
@@ -3656,12 +3656,12 @@
* src/sfnt/sfobjs.c (sfnt_load_face): A font with neither outlines
nor bitmaps is scalable.
-2008-12-05 Werner Lemberg <wl@nu.org>
+2008-12-05 Werner Lemberg <wl@gnu.org>
* src/autofit/aflatin.c (af_latin_uniranges): Add more ranges. This
fixes Savannah bug #21190 which also provides a basic patch.
-2008-12-05 Werner Lemberg <wl@nu.org>
+2008-12-05 Werner Lemberg <wl@gnu.org>
* include/freetype/freetype.h (FT_LOAD_ADVANCE_ONLY): Use value
0x100 instead of 0x10000; the latter value is already occupied by
@@ -4098,7 +4098,7 @@
2008-09-18 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
* src/cff/cffobjs.c (cff_face_init): Use TTAG_OTTO defined
- in ttags.h instead of numerical value 0x4F54544FL.
+ in tttags.h instead of numerical value 0x4F54544FL.
2008-09-16 Werner Lemberg <wl@gnu.org>
@@ -4156,11 +4156,11 @@
2008-09-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
* builds/unix/configure.raw: Clear FT2_EXTRA_LIBS when Carbon or
- ApplicationService framework is missing. Although this value is not
+ ApplicationServices framework is missing. Although this value is not
used in building of FreeType2, it is written in `freetype2.pc' and
`freetype-config'.
-2008-09-01 david turner <david@freetype.org>
+2008-09-01 David Turner <david@freetype.org>
* src/cache/ftccmap.c (FTC_CMapCache_Lookup): Accept a negative cmap
index to mean `use default cached FT_Face's charmap'. This fixes
@@ -4248,7 +4248,7 @@
2008-08-29 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
* src/sfnt/sfobjs.c (sfnt_open_font): Use TTAG_OTTO defined in
- ttags.h instead of FT_MAKE_TAG( 'O', 'T', 'T', 'O' ).
+ tttags.h instead of FT_MAKE_TAG( 'O', 'T', 'T', 'O' ).
2008-08-28 Werner Lemberg <wl@gnu.org>
@@ -4258,7 +4258,7 @@
2008-08-23 Werner Lemberg <wl@gnu.org>
- * src/type/t1afm.c (compare_kern_pairs), src/pxaux/afmparse.c
+ * src/type/t1afm.c (compare_kern_pairs), src/psaux/afmparse.c
(afm_compare_kern_pairs): Fix comparison. This fixes Savannah bug
#24119.
@@ -4387,7 +4387,7 @@
* src/cff/cffload.c (cff_font_load): Pass `pure_cff'.
Invert sids table only if `pure_cff' is set.
- * src/cff/cffload.h: Udpated.
+ * src/cff/cffload.h: Updated.
* src/cff/cffobjs.c (cff_face_init): Updated.
Set FT_FACE_FLAG_CID_KEYED only if pure_cff is set.
@@ -4516,7 +4516,7 @@
recommends to add the option only to CFLAGS, LDFLAGS should include
it because libfreetype.la is built with -no-undefined. This fixes a
bug reported by Ryan Schmidt in MacPorts,
- http://trac.macports.org/ticket/15331.
+ https://trac.macports.org/ticket/15331.
2008-06-21 Werner Lemberg <wl@gnu.org>
@@ -4861,7 +4861,7 @@
2008-04-14 Werner Lemberg <wl@gnu.org>
* src/pcf/pcfdrivr.c (PCF_Face_Init): Protect call to
- `FT_Stream_OpenLZW' with `FT_CONFIG_OPTION_USE_LZ'. From Savannah
+ `FT_Stream_OpenLZW' with `FT_CONFIG_OPTION_USE_LZW'. From Savannah
bug #22909.
2008-04-13 Werner Lemberg <wl@gnu.org>
@@ -4931,7 +4931,7 @@
tt_cmap14_find_variant): Return correct value.
(tt_cmap14_variant_chars): Fix check for `di'.
-2008-02-29 Wermer Lemberg <wl@gnu.org>
+2008-02-29 Werner Lemberg <wl@gnu.org>
* docs/CHANGES: Updated.
@@ -5243,7 +5243,7 @@
functions related to cmap type 14 support to the
`FT_Object_ActionName' scheme:
- FT_Get_Char_Variant_index -> FT_Face_GetCharVariantIndex
+ FT_Get_Char_Variant_Index -> FT_Face_GetCharVariantIndex
FT_Get_Char_Variant_IsDefault -> FT_Face_GetCharVariantIsDefault
FT_Get_Variant_Selectors -> FT_Face_GetVariantSelectors
FT_Get_Variants_Of_Char -> FT_Face_GetVariantsOfChar
@@ -5329,7 +5329,7 @@
2007-08-18 Werner Lemberg <wl@gnu.org>
- * src/otvalid/otvcmmn.c (otv_x_y_ux_sy): Skip context glyphs. Found
+ * src/otvalid/otvcommn.c (otv_x_y_ux_sy): Skip context glyphs. Found
by Imran Yousaf. Fixes Savannah bug #20773.
(otv_Lookup_validate): Correct handling of LookupType. Found by
@@ -5383,7 +5383,7 @@
* include/freetype/ftotval.h (FT_VALIDATE_MATH): New macro.
(FT_VALIDATE_OT): Updated.
- * src/otvalid/otmath.c: New file.
+ * src/otvalid/otvmath.c: New file.
* src/otvalid/otvalid.c: Include otvmath.c.
* src/otvalid/otvmod.c (otv_validate): Handle `MATH' table.
@@ -5428,7 +5428,7 @@
* include/freetype/config/ftheader.h (FT_CID_H): New macro.
* include/freetype/ftcid.h: New file.
- * include/freetype/internal/ftserv.h (FT_SERVIVE_CID_H): New macro.
+ * include/freetype/internal/ftserv.h (FT_SERVICE_CID_H): New macro.
* include/freetype/internal/services/svcid.h: New file.
* src/base/ftcid.c: New file.
@@ -5530,7 +5530,7 @@
* src/truetype/ttinterp.c (Ins_IUP): Add missing variable
initialization.
- * src/autofit/aflatin.c (af_latin_metric_init_blues): Get rid of an
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Get rid of an
infinite loop in the case of degenerate fonts.
2007-06-26 Rahul Bhalerao <b.rahul.pm@gmail.com>
@@ -5938,7 +5938,7 @@
Savannah patch #5929.
- * include/freetype/tttables.h, src/base/ftobjcs.c
+ * include/freetype/tttables.h, src/base/ftobjs.c
(FT_Get_CMap_Format): New function.
* include/freetype/internal/services/svttcmap.c (TT_CMapInfo): Add
@@ -5965,7 +5965,7 @@
* include/freetype/config/ftstdlib.h,
include/freetype/internal/ftobjs.h: As suggested by Graham Asher,
ensure that ft_isalnum, ft_isdigit, etc., use hard-coded values
- instead on relying on the locale-dependent functions provided by
+ instead of relying on the locale-dependent functions provided by
<ctypes.h>.
2007-05-15 Graham Asher <graham.asher@btinternet.com>
@@ -6005,7 +6005,7 @@
2007-05-11 David Turner <david@freetype.org>
- * src/cache/ftbasic.c, include/freetype/ftcache.h
+ * src/cache/ftcbasic.c, include/freetype/ftcache.h
(FTC_ImageCache_LookupScaler, FTC_SBit_Cache_LookupScaler): Two new
functions that allow us to look up glyphs using an FTC_Scaler object
to specify the size, making it possible to use fractional pixel
@@ -6097,8 +6097,8 @@
2007-04-06 David Turner <david@freetype.org>
- * src/base/ftbimap.c (ft_bitmap_assure_buffer): Fix buffer-overwrite bug
- (Savannah bug #19536).
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Fix buffer-overwrite
+ bug (Savannah bug #19536).
2007-04-04 Werner Lemberg <wl@gnu.org>
@@ -6187,13 +6187,13 @@
* builds/unix/ftsystem.c (FT_Stream_Open): Temporary fix to prevent
32bit unsigned long overflow by 64bit filesize on LP64 platform, as
proposed by Sean McBride:
- http://lists.gnu.org/archive/html/freetype-devel/2007-03/msg00032.html
+ https://lists.gnu.org/archive/html/freetype-devel/2007-03/msg00032.html
2007-03-22 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
* builds/unix/ftconfig.in: Suppress SGI compiler's warning against
setjmp, proposed by Sean McBride:
- http://lists.gnu.org/archive/html/freetype-devel/2007-03/msg00032.html
+ https://lists.gnu.org/archive/html/freetype-devel/2007-03/msg00032.html
2007-03-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -6201,14 +6201,14 @@
conftest.c, to avoid unexpected shell evaluation. Possibly it is a
bug or undocumented behaviour of autoconf.
-2007-03-18 David Turner <david@freetype.org>
+2007-03-18 David Turner <david@freetype.org>
* src/truetype/ttinterp.c (Ins_MDRP): Another bytecode regression
fix; testing still needed.
* src/truetype/ttinterp.c (Ins_MD): Another bytecode regression fix.
-2007-03-17 David Turner <david@freetype.org>
+2007-03-17 David Turner <david@freetype.org>
* src/truetype/ttinterp.c (Ins_IP): Fix wrong handling of the
(undocumented) twilight zone special case.
@@ -6256,7 +6256,7 @@
case FT_Init_FreeType fails for some reason. Problem reported by
Maximilian Schwerin <maximilian.schwerin@buelowssiege.de>.
- * src/truetype/ttobs.c (tt_size_init_bytecode): Clear the `x_ppem'
+ * src/truetype/ttobjs.c (tt_size_init_bytecode): Clear the `x_ppem'
and `y_ppem' fields of the `TT_Size.metrics' structure, not those of
`TT_Size.root.metrics'. Problem reported by Daniel Glöckner
<daniel-gl@gmx.net>.
@@ -6335,7 +6335,7 @@
* src/base/ftutil.c (ft_mem_dup, ft_mem_strdup, ft_mem_strcpyn): New
functions.
- * src/bfd/bfddrivr.c (bdf_interpret_style, BDF_Face_Init),
+ * src/bdf/bdfdrivr.c (bdf_interpret_style, BDF_Face_Init),
src/bdf/bdflib.c (_bdf_add_property), src/pcf/pcfread.c
(pcf_get_properties, pcf_interpret_style, pcf_load_font),
src/cff/cffdrivr.c (cff_get_glyph_name), src/cff/cffload.c
@@ -6546,7 +6546,7 @@
2007-01-16 David Turner <david@freetype.org>
* src/autofit/aflatin.c (af_latin_hints_compute_segments),
- src/cff/cffdriver.c (cff_ps_get_font_info), src/truetype/ttobjs.c
+ src/cff/cffdrivr.c (cff_ps_get_font_info), src/truetype/ttobjs.c
(tt_face_init), src/truetype/ttinterp.c (Ins_SHC): Fix compiler
warnings.
@@ -6592,7 +6592,7 @@
* src/cff/cffload.c: Include FT_TYPE1_TABLES_H.
(cff_font_done): Free font->font_info if necessary.
- * src/cff/cffdrvr.c (cff_ps_get_font_info): New function.
+ * src/cff/cffdrivr.c (cff_ps_get_font_info): New function.
(cff_service_ps_info): Register cff_ps_get_font_info.
2007-01-13 Werner Lemberg <wl@gnu.org>
@@ -6734,7 +6734,7 @@
files are not used.
* include/freetype/internal/tttypes.h (TT_FaceRec): Add members
- `horz_metrics_offset' and `vert_metrics_ofset'.
+ `horz_metrics_offset' and `vert_metrics_offset'.
* src/sfnt/ttmtx.c (tt_face_load_hmtx, tt_face_get_metrics):
Updated.
@@ -6852,7 +6852,7 @@
* include/freetype/internal/services/svotval.h: Add `volatile' to
sync with the modification by Jens Claudius on 2006-08-22; cf.
- http://cvs.savannah.gnu.org/viewcvs/freetype/freetype2/src/otvalid/otvmod.c?r1=1.4&r2=1.5
+ https://cvs.savannah.gnu.org/viewcvs/freetype/freetype2/src/otvalid/otvmod.c?r1=1.4&r2=1.5
2006-12-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -6876,7 +6876,7 @@
* src/base/ftobjs.c: Improvement of resource fork handler for
POSIX, cf.
- http://lists.gnu.org/archive/html/freetype-devel/2006-10/msg00025.html
+ https://lists.gnu.org/archive/html/freetype-devel/2006-10/msg00025.html
(Mac_Read_sfnt_Resource): Count only `sfnt' resource of suitcase font
format or .dfont, to simulate the face index number counted by ftmac.c.
(IsMacResource): Return the number of scalable faces correctly.
@@ -7023,7 +7023,7 @@
(_ft_lcd_filter_fir): This.
Update parameters.
(_ft_lcd_filter_legacy) [USE_LEGACY]: New filter function.
- (FT_Library_Set_LcdFilter): Update parameters.
+ (FT_Library_SetLcdFilter): Update parameters.
Handle new filter modes.
* include/internal/ftobjs.h: Include FT_LCD_FILTER_H.
@@ -7366,7 +7366,7 @@
to recognize a few fonts that require the automatic unpatented
loader.
- * src/smooth/ftgrays.c: Optmize the performance of the anti-aliased
+ * src/smooth/ftgrays.c: Optimize the performance of the anti-aliased
rasterizer. The speed improvement is between 15% and 25%, depending
on the font data.
@@ -7517,14 +7517,14 @@
2006-08-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
* modules.cfg (BASE_EXTENSIONS): Compile in ftgxval.c by default to
- build ftvalid in ft2demos. This has been inadvertedly changed
+ build ftvalid in ft2demos. This has been inadvertently changed
2006-08-13.
2006-08-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
`ft_validator_run' wrapping `setjmp' can cause a crash, as found by
Jens:
- http://lists.gnu.org/archive/html/freetype-devel/2006-08/msg00004.htm.
+ https://lists.gnu.org/archive/html/freetype-devel/2006-08/msg00004.htm.
* src/otvalid/otvmod.c: Replace `ft_validator_run' by `ft_setjmp'.
It reverts the change introduced on 2005-08-20.
@@ -7647,7 +7647,7 @@
`len_buildchar'.
Remove `keywords_flags'.
- * src/type1/t1load.h (T1_LoaderRect): New field
+ * src/type1/t1load.h (T1_LoaderRec): New field
`keywords_encountered'.
(T1_PRIVATE, T1_FONTDIR_AFTER_PRIVATE): New macros.
@@ -7721,7 +7721,7 @@
2006-06-24 Eugeniy Meshcheryakov <eugen@univ.kiev.ua>
Fix two hinting bugs as reported in
- http://lists.gnu.org/archive/html/freetype-devel/2006-06/msg00057.html.
+ https://lists.gnu.org/archive/html/freetype-devel/2006-06/msg00057.html.
* include/freetype/internal/tttypes.h (TT_GlyphZoneRec): Add
`first_point' member.
@@ -7761,7 +7761,7 @@
should return `FT_Err_Unimplemented_Feature' if validation service
is unavailable (disabled in `modules.cfg'). It is originally
suggested by David Turner, cf.
- http://lists.gnu.org/archive/html/freetype-devel/2005-11/msg00078.html
+ https://lists.gnu.org/archive/html/freetype-devel/2005-11/msg00078.html
* src/base/ftgxval.c (FT_TrueTypeGX_Validate): Return
FT_Err_Unimplemented_Feature if TrueTypeGX validation service is
@@ -7840,7 +7840,7 @@
* src/base/ftobjs.c (load_face_in_embedded_rfork): Replace
`FT_Stream_Close' by `FT_Stream_Free' to fix memory leak.
- * src/base/ftrfrk.c (raccess_guess_linux_double_from_file_name):
+ * src/base/ftrfork.c (raccess_guess_linux_double_from_file_name):
Replace `FT_Stream_Close' by `FT_Stream_Free' to fix memory leak.
2006-05-19 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -7857,7 +7857,7 @@
2006-05-18 Werner Lemberg <wl@gnu.org>
* src/truetype/ttgload.c (TT_Load_Composite_Glyph)
- [FT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Make it compilable again.
+ [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Make it compilable again.
2006-05-17 David Turner <david@freetype.org>
@@ -7902,7 +7902,7 @@
(FT_Stream_OpenGzip): Use it to handle small files directly in
memory.
- * src/psaux/psconv.c (PS_Conv_ASCIIHexDecode, PS_ConvEexecDecode):
+ * src/psaux/psconv.c (PS_Conv_ASCIIHexDecode, PS_Conv_EexecDecode):
Improve performance.
* src/truetype/ttgload.c (TT_Access_Glyph_Frame): Set `cursor' and
@@ -7932,7 +7932,7 @@
----------------------------------------------------------------------------
-Copyright 2006-2015 by
+Copyright 2006-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.24 b/ChangeLog.24
index df2119d..44abc40 100644
--- a/ChangeLog.24
+++ b/ChangeLog.24
@@ -335,7 +335,7 @@
* include/freetype/ftmoderr.h: Fix commit from 2013-03-11.
- The previous version was not backwards compatible. Reported by
+ The previous version was not backward compatible. Reported by
Behdad.
2013-03-14 Werner Lemberg <wl@gnu.org>
@@ -744,7 +744,7 @@
2013-01-16 David 'Digit' Turner <digit@google.com>
- [truetype] Improve sub-pixel code.
+ [truetype] Improve subpixel code.
This patches fixes many issues with the ttsubpix implementation.
@@ -780,11 +780,11 @@
Move font tweaking tables to...
- * src/truetype/ttsubpic.c: This file and decorate them with `static'
+ * src/truetype/ttsubpix.c: This file and decorate them with `static'
and `const' where appropriate.
(X_SCALING_Rules, X_SCALING_RULES_SIZE): Renamed to...
- (spu_X_SCALING_Rules, SPH_X_SCALING_RULES_SIZE): This.
+ (sph_X_SCALING_Rules, SPH_X_SCALING_RULES_SIZE): This.
Update all users.
2013-01-12 Alexei Podtelezhnikov <apodtele@gmail.com>
@@ -978,7 +978,7 @@
[base] Clean up trigonometric core.
- * src/base/fttrrigon.c (ft_trig_pseudo_polarize): Align algorithm
+ * src/base/fttrigon.c (ft_trig_pseudo_polarize): Align algorithm
with `ft_trig_pseudo_rotate'.
2012-12-18 Infinality <infinality@infinality.net>
@@ -990,7 +990,7 @@
2012-12-17 Infinality <infinality@infinality.net>
- [truetype] Remove unusued code and variables.
+ [truetype] Remove unused code and variables.
* src/truetype/ttinterp.c: Updated.
(Ins_FDEF): Remove opcode patterns that are not being used.
@@ -1012,7 +1012,7 @@
2012-12-16 Infinality <infinality@infinality.net>
- [truetype] Remove unusued code and variables. Add minor fixes.
+ [truetype] Remove unused code and variables. Add minor fixes.
* src/truetype/ttsubpix.h: Updated.
(SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions): Add Trebuchet MS.
@@ -1037,7 +1037,7 @@
(Ins_FDEF): Rework code to fix bugs and add more detection.
(Ins_CALL): Remove unused code.
(Ins_LOOPCALL): Remove unused code.
- (TT_RunIns): Remove unusued code.
+ (TT_RunIns): Remove unused code.
(Ins_SHPIX): Add logic to handle ttfautohinted fonts.
(Ins_MIRP): Don't round x in cut-in calculation. Add logic to handle
ttfautohinted fonts.
@@ -1395,7 +1395,7 @@
[autofit] Minor optimization.
- * src/autofit/afglobals.c (af_face_globals_compute_script_coverage):
+ * src/autofit/afglobal.c (af_face_globals_compute_script_coverage):
Add loop condition.
2012-09-29 Werner Lemberg <wl@gnu.org>
@@ -1859,11 +1859,11 @@
Fix `checking if gcc static flag -static works' test.
- On my linux build tree, I receive yes answer in in every package I
- build except freetype for this test checking if gcc static flag
+ On my linux build tree, I receive yes answer in every package I
+ build except FreeType for this test checking if gcc static flag
`-static' works
- On freetype, no is received, unless bzip2 and zlib are disabled using
+ In FreeType, no is received, unless bzip2 and zlib are disabled using
./configure --without-bzip2 --without-zlib
@@ -1977,7 +1977,7 @@
Most of the code is based on the ClearType whitepaper written by
Greg Hitchcock
- http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
+ https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
which gives a detailed overview of the necessary changes to the
Microsoft rasterizer so that older fonts are supported. However, a
@@ -2014,7 +2014,7 @@
(compute_glyph_metrics): Handle `compatible widths' option.
(tt_loader_init): Handle ClearType GETINFO information bits.
- * src/truetype/rules.mk (TT_DRC_SRC): Updated.
+ * src/truetype/rules.mk (TT_DRV_SRC): Updated.
* src/truetype/ttinterp.c: Include `ttsubpix.h'.
[Where necessary, changes below are guarded by
@@ -2103,7 +2103,7 @@
NEC FA family dated in 1996 have different checksum.
Reported by Johnson Y. Yan <yinsen_yan@foxitsoftware.com>; see
- http://lists.gnu.org/archive/html/freetype-devel/2012-06/msg00023.html
+ https://lists.gnu.org/archive/html/freetype-devel/2012-06/msg00023.html
* src/truetype/ttobjs.c (tt_check_trickyness_sfnt_ids): 4 sets
of fpgm & prep table checksums for FA-Gothic, FA-Minchou,
@@ -2117,7 +2117,7 @@
Problem reported by jola <hans-jochen.lau@lhsystems.com>; see
- http://lists.gnu.org/archive/html/freetype-devel/2012-05/msg00036.html
+ https://lists.gnu.org/archive/html/freetype-devel/2012-05/msg00036.html
* src/raster/ftraster.c (SMulDiv_No_Round): New macro.
(Line_Up): Use it.
@@ -2141,7 +2141,7 @@
* include/freetype/ftoutln.h (FT_Outline_EmboldenXY): Define it.
* src/base/ftoutln.c (FT_Outline_EmboldenXY): Implement it, using a
- simplified embolding algorithm.
+ simplified emboldening algorithm.
(FT_Outline_Embolden): Make it a special case of
`FT_Outline_EmboldenXY'
@@ -2546,7 +2546,7 @@
* src/bdf/bdflib.c (_bdf_is_atom): Fix handling of property value.
-2012-02-24 Vinnie Falco <vinnie.falco@gmail.com>
+2012-02-24 Vinnie Falco <vinnie.falco@gmail.com>
Prepare source code for amalgamation (6/6).
@@ -2556,20 +2556,20 @@
s/t1_init_loader/cid_init_loader/.
s/t1_done_loader/cid_done_loader/.
- * src/pxaux/t1cmap.c: s/t1_get_glyph_name/psaux_get_glyph_name/.
+ * src/psaux/t1cmap.c: s/t1_get_glyph_name/psaux_get_glyph_name/.
* src/truetype/ttdriver.c: s/Load_Glyph/tt_glyph_load/.
* src/type1/t1load.c: s/parse_font_matrix/t1_parse_font_matrix/.
-2012-02-24 Vinnie Falco <vinnie.falco@gmail.com>
+2012-02-24 Vinnie Falco <vinnie.falco@gmail.com>
Prepare source code for amalgamation (5/6).
* include/freetype/fterrors.h: Undefine FT_KEEP_ERR_PREFIX after
using it.
-2012-02-22 Vinnie Falco <vinnie.falco@gmail.com>
+2012-02-22 Vinnie Falco <vinnie.falco@gmail.com>
Prepare source code for amalgamation (4/6).
@@ -2581,7 +2581,7 @@
* src/raster/ftraster.c: s/TRaster/gray_TRaster/,
s/PRaster/gray_PRaster/.
-2012-02-20 Vinnie Falco <vinnie.falco@gmail.com>
+2012-02-20 Vinnie Falco <vinnie.falco@gmail.com>
Prepare source code for amalgamation (3/6).
@@ -2590,20 +2590,20 @@
* src/raster/ftraster.c: s/TWorker/gray_TWorker/,
s/PWorker/gray_PWorker/.
-2012-02-20 Vinnie Falco <vinnie.falco@gmail.com>
+2012-02-20 Vinnie Falco <vinnie.falco@gmail.com>
Prepare source code for amalgamation (2/6).
* src/smooth/ftgrays.c, src/raster/ftraster.c: Undefine FLOOR,
CEILING, TRUNC, and SCALED before defining it.
-2012-02-20 Vinnie Falco <vinnie.falco@gmail.com>
+2012-02-20 Vinnie Falco <vinnie.falco@gmail.com>
Prepare source code for amalgamation (1/6).
See discussion starting at
- http://lists.gnu.org/archive/html/freetype-devel/2012-01/msg00037.html
+ https://lists.gnu.org/archive/html/freetype-devel/2012-01/msg00037.html
* src/smooth/ftgrays.c: s/TBand/gray_TBand/.
* src/raster/ftraster.c: s/TBand/black_TBand/.
@@ -2616,7 +2616,7 @@
`outline.flags' so that this information is preserved. See
discussion starting at
- http://lists.gnu.org/archive/html/freetype-devel/2012-02/msg00046.html
+ https://lists.gnu.org/archive/html/freetype-devel/2012-02/msg00046.html
2012-02-11 Werner Lemberg <wl@gnu.org>
@@ -2677,7 +2677,7 @@
[raccess] Modify for PIC build.
Based on the patch provided by Erik Dahlstrom <ed@opera.com>,
- http://lists.gnu.org/archive/html/freetype-devel/2012-01/msg00010.html
+ https://lists.gnu.org/archive/html/freetype-devel/2012-01/msg00010.html
Also `raccess_guess_table[]' and `raccess_rule_by_darwin_vfs()'
are renamed with `ft_' suffixes.
@@ -2796,9 +2796,9 @@
[base] Fix a dereference of uninitialized variable in PIC mode.
* src/base/ftglyph.c (FT_Glyph_To_Bitmap): `glyph' must be
- set before derefering to obtain `library'. The initialization
+ set before dereferring to obtain `library'. The initialization
of `clazz', `glyph', `library' and NULL pointer check are
- reordered to minimize PIC conditonals.
+ reordered to minimize PIC conditionals.
2012-01-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -2941,10 +2941,10 @@
[type42] Remove casts.
- * src/type42/t42driver.c (t42_driver_class): Remove all casts and
+ * src/type42/t42drivr.c (t42_driver_class): Remove all casts and
update affected functions.
- * src/type42/t42objs.c, src/type42/t42objs.h: Updated for t42driver
+ * src/type42/t42objs.c, src/type42/t42objs.h: Updated for t42 driver
changes.
2011-11-30 Werner Lemberg <wl@gnu.org>
@@ -3127,7 +3127,7 @@
According to
- http://www.gnu.org/prep/maintain/html_node/Copyright-Notices.html
+ https://www.gnu.org/prep/maintain/html_node/Copyright-Notices.html
this should be mentioned explicitly.
@@ -3261,7 +3261,7 @@
2011-09-17 Alexei Podtelezhnikov <apodtele@gmail.com>
- [smooth] Slightly optimize conic and cubic flatterners.
+ [smooth] Slightly optimize conic and cubic flatteners.
* src/smooth/ftgrays.c (gray_render_conic, gray_render_cubic): Move
out some code from the main loop to speed it up.
@@ -3456,7 +3456,7 @@
See
- http://lists.gnu.org/archive/html/freetype-devel/2011-07/msg00049.html
+ https://lists.gnu.org/archive/html/freetype-devel/2011-07/msg00049.html
for some comparison images.
@@ -3556,7 +3556,7 @@
See
- http://lists.gnu.org/archive/html/freetype-devel/2011-07/msg00001.html
+ https://lists.gnu.org/archive/html/freetype-devel/2011-07/msg00001.html
for example documents. The FreeType stroker now produces results
very similar to that produced by GhostScript and Distiller for these
@@ -3621,7 +3621,7 @@
* src/base/ftstroke.c: Revised.
* include/freetype/ftstroke.h: Updated.
-2011-06-30 İsmail Dönmez <ismail@namtrac.org>
+2011-06-30 İsmail Dönmez <ismail@namtrac.org>
* builds/toplevel.mk: We use git, not CVS, thus skip `.gitignore'.
@@ -3680,7 +3680,7 @@
[autogen.sh] Reflect environment variable LIBTOOLIZE.
-2011-06-18 Werner Lemberg <wl@gnu.org>
+2011-06-18 Werner Lemberg <wl@gnu.org>
Update license documentation.
@@ -3776,7 +3776,7 @@
[gxvalid] Fix gcc4.6 compiler warnings in gxvtrak.c.
* src/gxvalid/gxvtrak.c (gxv_trak_trackTable_validate):
- Check different entries pointing same traking value.
+ Check different entries pointing same tracking value.
(gxv_trak_validate): Remove unused variable `table_size'.
2011-06-14 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -3788,12 +3788,12 @@
(gxv_morx_chain_validate): Conditionalize unvalidated
variable `defaultFlags'.
- * src/gxvalid/gxmorx0.c
+ * src/gxvalid/gxvmorx0.c
(gxv_morx_subtable_type0_entry_validate):
Conditionalize unvalidated variables; `markFirst',
`dontAdvance', `markLast', `verb'.
- * src/gxvalid/gxmorx1.c
+ * src/gxvalid/gxvmorx1.c
(gxv_morx_subtable_type1_entry_validate): Conditionalize
unvalidated variables; `setMark', `dontAdvance'.
@@ -3826,11 +3826,11 @@
(gxv_mort_chain_validate): Conditionalize unvalidated
variable `defaultFlags'.
- * src/gxvalid/gxmort0.c
+ * src/gxvalid/gxvmort0.c
(gxv_mort_subtable_type0_entry_validate): Check the
conflict of the marks for the glyphs.
- * src/gxvalid/gxmort1.c
+ * src/gxvalid/gxvmort1.c
(gxv_mort_subtable_type1_offset_to_subst_validate):
Local variables `min_gid', `max_gid' are replaced by
variables in the validator.
@@ -4000,14 +4000,14 @@
[autofit] Add bluezones for CJK Ideographs.
- To remove extremas of vertical strokes of CJK Ideographs at
+ To remove extrema of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
- http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
+ https://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
+ https://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
+ https://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
@@ -4029,7 +4029,7 @@
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
- (af_cjk_hints_edges): Add code to align the edge stems to blue zones.
+ (af_cjk_hint_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
@@ -4075,8 +4075,8 @@
the TrueType font header. Some bad PDF generators write
wrong values. For details see examples and benchmark tests
of the latency by recalculation:
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00091.html
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00096.html
+ https://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00091.html
+ https://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00096.html
2011-04-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -4109,7 +4109,7 @@
Because some PDF generators mangle the family name badly,
the trickyness check by the checksum should be invoked always.
For sample PDF, see
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00073.html
+ https://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00073.html
* src/truetype/ttobjs.c (tt_check_trickyness): Even when
tt_check_trickyness_family() finds no trickyness,
@@ -4120,7 +4120,7 @@
[autofit] Add more Indic scripts with hanging baseline.
* src/autofit/afindic.c (af_indic_uniranges): Tibetan, Limbu,
- Sundanese, Meetei Mayak, Syloti Nagri and Sharada scripts are
+ Sundanese, Meetei Mayek, Syloti Nagri and Sharada scripts are
added.
2011-04-21 Behdad Esfahbod <behdad@behdad.org>
@@ -4146,8 +4146,8 @@
When there are too many stems to preserve their gaps in the
rasterization of CJK Ideographs at a low resolution, blur the
stems instead of showing clumped stems. See
- http://lists.gnu.org/archive/html/freetype-devel/2011-02/msg00011.html
- http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00046.html
+ https://lists.gnu.org/archive/html/freetype-devel/2011-02/msg00011.html
+ https://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00046.html
for details.
* src/autofit/afcjk.c (af_cjk_hint_edges): Store the position of
@@ -4343,7 +4343,7 @@
[cache] Fix an off-by-one bug in `FTC_Manager_RemoveFaceID'.
Found by <ychen1392001@yahoo.com.cn>, see detail in
- http://lists.gnu.org/archive/html/freetype/2011-01/msg00023.html
+ https://lists.gnu.org/archive/html/freetype/2011-01/msg00023.html
* src/cache/ftccache.c (FTC_Cache_RemoveFaceID): Check the node
buckets[cache->p + cache->mask] too.
@@ -4464,7 +4464,7 @@
Johnson Y. Yan. The bug report by Qt developers is
considered too.
- http://bugreports.qt.nokia.com/browse/QTBUG-6521
+ https://bugreports.qt.io/browse/QTBUG-6521
2011-01-15 Werner Lemberg <wl@gnu.org>
@@ -4756,7 +4756,7 @@
* src/bzip2/*: New files.
* src/pcf/pcf.h: s/gzip_/comp_/.
- * src/pcf/pcfdrvr.c: Include FT_BZIP2_H.
+ * src/pcf/pcfdrivr.c: Include FT_BZIP2_H.
s/gzip_/comp_/.
(PCF_Face_Init): Handle bzip2 compressed files.
@@ -4768,7 +4768,7 @@
If we encounter a space in a string then the sbit buffer is NULL,
height and width are 0s. So the check in ftc_snode_compare will
- always pass for spaces (comparision with 255). Here the comments
+ always pass for spaces (comparison with 255). Here the comments
above the condition are proper but the implementation is not. When
we create an snode I think it is the proper way to initialize the
width to 255 and then put a check for being equal to 255 in snode
@@ -4923,7 +4923,7 @@
Partially undo change from 2010-10-15 by using ONE_PIXEL/4; this has
been tested with demo images sent to the mailing list. See
- http://lists.gnu.org/archive/html/freetype-devel/2010-10/msg00055.html
+ https://lists.gnu.org/archive/html/freetype-devel/2010-10/msg00055.html
and later mails in this thread.
@@ -4943,7 +4943,7 @@
Problem reported by Tom Bishop <wenlin@wenlin.com>; see
thread starting with
- http://lists.gnu.org/archive/html/freetype/2010-10/msg00049.html
+ https://lists.gnu.org/archive/html/freetype/2010-10/msg00049.html
* src/raster/ftraster.c (Line_Up): Replace FMulDiv with SMulDiv
since the involved multiplication exceeds 32 bits.
@@ -5007,7 +5007,7 @@
normal clients.
For the history of these macros, see the investigation:
- http://lists.gnu.org/archive/html/freetype/2010-10/msg00022.html
+ https://lists.gnu.org/archive/html/freetype/2010-10/msg00022.html
2010-10-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
@@ -5054,7 +5054,7 @@
by Darwin VFS are skipped. It reduces the warnings of the
deprecated resource fork access method by recent Darwin kernel.
Fix MacPorts ticket #18859:
- http://trac.macports.org/ticket/18859
+ https://trac.macports.org/ticket/18859
* src/base/ftobjs.c (load_face_in_embedded_rfork):
When `FT_Stream_New' returns FT_Err_Cannot_Open_Stream, it
@@ -5182,7 +5182,7 @@
[smooth] Fix splitting of cubics for negative values.
Reported by Róbert Márki <gsmiko@gmail.com>; see
- http://lists.gnu.org/archive/html/freetype/2010-09/msg00019.html.
+ https://lists.gnu.org/archive/html/freetype/2010-09/msg00019.html.
* src/smooth/ftgrays.c (gray_render_cubic): Fix thinko.
@@ -5349,7 +5349,7 @@
Ignore the environmental setting of LIBTOOL.
Patch is suggested by Adrian Bunk, to prevent unexpected
reflection of environmental LIBTOOL. See:
- http://savannah.nongnu.org/patch/?7290
+ https://savannah.nongnu.org/patch/?7290
* builds/unix/unix-cc.in: LIBTOOL is unconditionally set to
$(FT_LIBTOOL_DIR)/libtool. FT_LIBTOOL_DIR is set to $(BUILD_DIR)
@@ -5406,8 +5406,8 @@
for nameless fonts is safer for PDFs including embedded Chinese
fonts. Written by David Bevan, see:
- http://lists.gnu.org/archive/html/freetype-devel/2010-08/msg00021.html
- http://lists.freedesktop.org/archives/poppler/2010-August/006310.html
+ https://lists.gnu.org/archive/html/freetype-devel/2010-08/msg00021.html
+ https://lists.freedesktop.org/archives/poppler/2010-August/006310.html
* src/truetype/ttobjs.c (tt_check_trickyness): If a NULL pointer by
nameless font is given, TRUE is returned to enable hinting.
@@ -5420,7 +5420,7 @@
a Kaishu typeface paired with `HuaTianSongTi?' by Huatian
Information Industry.
-2010-08-17 Teijo Kinnunen <Teijo.Kinnunen@nuance.com>
+2010-08-17 Teijo Kinnunen <Teijo.Kinnunen@nuance.com>
[cache] Fix Savannah bug #30788.
@@ -5548,7 +5548,7 @@
Add reference counters and to FT_Library and FT_Face objects.
* include/freetype/freetype.h (FT_Reference_Face): New function.
- * include/freetype/ftmodapi.h (FT_Rererence_Library): New function.
+ * include/freetype/ftmodapi.h (FT_Reference_Library): New function.
* include/freetype/internal/ftobjs.h (FT_Face_InternalRec,
FT_LibraryRec): New field `refcount'.
@@ -5669,7 +5669,7 @@
Use defined macros to set {platform,encoding}_id.
* src/bdf/bdfdrivr.c: Include ttnameid.h and use macros to
- set charmap.{platfom,encoding}_id.
+ set charmap.{platform,encoding}_id.
* src/pcf/pcfdrivr.c: Ditto.
* src/winfonts/winfnt.c: Ditto.
* src/type1/t1objs.c: Ditto.
@@ -5792,8 +5792,8 @@
* src/cff/cffobjs.c (cff_face_init): Check error value by
`FT_CMap_New'.
* src/pfr/pfrobjs.c (pfr_face_init): Ditto.
- * src/type1/t1jobjs.c (T1_Face_Init): Ditto.
- * src/type42/t42jobjs.c (T42_Face_Init): Ditto.
+ * src/type1/t1objs.c (T1_Face_Init): Ditto.
+ * src/type42/t42objs.c (T42_Face_Init): Ditto.
2010-07-03 Werner Lemberg <wl@gnu.org>
@@ -5968,7 +5968,7 @@
* src/smooth/ftgrays.c (gray_render_cubic): Fix algorithm.
The previous version was too aggressive, as demonstrated in
- http://lists.gnu.org/archive/html/freetype-devel/2010-06/msg00020.html.
+ https://lists.gnu.org/archive/html/freetype-devel/2010-06/msg00020.html.
2010-06-24 Werner Lemberg <wl@gnu.org>
@@ -6065,7 +6065,7 @@
simplified algorithm to find out whether the spline can be replaced
with two straight lines. See this thread for more:
- http://lists.gnu.org/archive/html/freetype-devel/2010-06/msg00000.html
+ https://lists.gnu.org/archive/html/freetype-devel/2010-06/msg00000.html
2010-06-09 Werner Lemberg <wl@gnu.org>
@@ -6220,7 +6220,7 @@
Add new function `FT_Library_SetLcdFilterWeights'.
This is based on code written by Lifter
- <http://unixforum.org/index.php?showuser=11691>. It fixes
+ <https://unixforum.org/index.php?showuser=11691>. It fixes
FreeDesktop bug #27386.
* src/base/ftlcdfil.c (FT_Library_SetLcdFilterWeights): New
@@ -6278,8 +6278,8 @@
Use real types instead of `void' for `pshinter' and `psnames' fields.
* src/cff/cffload.c: Don't include PS cmaps service.
- (cff_index_get_pointers): Add `pool' parameter which allows to
- insert an extra NUL character for each String INDEX entry.
+ (cff_index_get_pointers): Add `pool' parameter which allows inserting
+ an extra NUL character for each String INDEX entry.
(cff_index_get_name): Make it a local function.
(cff_index_get_string): New function.
(cff_subfont_load): Updated.
@@ -6344,7 +6344,7 @@
----------------------------------------------------------------------------
-Copyright 2010-2015 by
+Copyright 2010-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.25 b/ChangeLog.25
new file mode 100644
index 0000000..59cf2bf
--- /dev/null
+++ b/ChangeLog.25
@@ -0,0 +1,5161 @@
+2014-12-30 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.5.5 released.
+ =========================
+
+
+ Tag sources with `VER-2-5-5'.
+
+ * docs/VERSION.DLL: Update documentation and bump version number to
+ 2.5.5.
+
+ * 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.4/2.5.5/, s/254/255/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.
+
+ * builds/unix/configure.raw (version_info): Set to 17:4:11.
+ * CMakeLists.txt (VERSION_PATCH): Set to 5.
+ * docs/CHANGES: Updated.
+
+ * builds/toplevel.mk (dist): Fix typos.
+
+2014-12-24 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Formatting and nanooptimizations.
+
+ * src/base/ftcalc.c,
+ * src/base/fttrigon.c: Revise sign restoration.
+
+2014-12-13 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfread.c (pcf_read_TOC): Improve fix from 2014-12-08.
+
+2014-12-11 Werner Lemberg <wl@gnu.org>
+
+ * builds/toplevel.mk (dist): Use older POSIX standard for `tar'.
+
+ Apparently, BSD tar isn't capable yet of handling POSIX-1.2001
+ (contrary to GNU tar), so force the POSIX-1.1988 format.
+
+ Problem reported by Stephen Fisher <sfisher@SDF.ORG>.
+
+2014-12-11 Werner Lemberg <wl@gnu.org>
+
+ * src/type42/t42parse.c (t42_parse_sfnts): Reject invalid TTF size.
+
+2014-12-11 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Get_Glyph_Name): Fix off-by-one check.
+
+ Problem reported by Dennis Felsing <dennis@felsin9.de>.
+
+2014-12-11 Werner Lemberg <wl@gnu.org>
+
+ * src/type42/t42parse.c (t42_parse_sfnts): Check `string_size'.
+
+ Problem reported by Dennis Felsing <dennis@felsin9.de>.
+
+2014-12-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [gxvalid] Fix a naming convention conflicting with ftvalid.
+
+ See previous changeset for otvalid.
+
+ * src/gxvalid/{gxvcommn.h, gxvmort.h, gxvmorx.h}: Replace
+ `valid' by `gxvalid'.
+ * src/gxvalid/{gxvbsln.c, gxvcommn.c, gxvfeat.c, gxvjust.c,
+ gxvkern.c, gxvlcar.c, gxvmort.c, gxvmort0.c, gxvmort1.c,
+ gxvmort2.c, gxvmort4.c, gxvmort5.c, gxvmorx.c, gxvmorx0.c,
+ gxvmorx1.c, gxvmorx2.c, gxvmorx4.c, gxvmorx5.c, gxvopbd.c,
+ gxvprop.c, gxvtrak.c}: Replace `valid' by `gxvalid' if
+ it is typed as GXV_Validator.
+
+2014-12-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [otvalid] Fix a naming convention conflicting with ftvalid.
+
+ Some prototypes in ftvalid.h use `valid' for the variables
+ typed as FT_Validator. Their implementations in src/base/
+ ftobjs.c and utilizations in src/sfnt/ttcmap.c do similar.
+
+ Some macros in otvcommn.h assume the exist of the variable
+ `valid' typed as OTV_Validator in the caller.
+
+ Mixing these two conventions cause invalid pointer conversion
+ and unexpected SEGV in longjmp. To prevent it, all variables
+ typed as OTV_Validator are renamed to `otvalid'.
+
+ * src/otvalid/otvcommn.h: Replace `valid' by `otvalid'.
+ * src/otvalid/{otvcommn.c, otvbase.c, otvgdef.c, otvgpos.c,
+ otvgsub.c, otvjstf.c, otvmath.c}: Replace `valid' by `otvalid'
+ if it is typed as OTV_Validator.
+
+2014-12-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [ftvalid] Introduce FT_THROW() in FT_INVALID_XXX macros.
+
+ Original patch is designed by Werner Lemberg. Extra part
+ for otvalid and gxvalid are added by suzuki toshiya, see
+ discussion:
+ https://lists.nongnu.org/archive/html/freetype-devel/2014-12/msg00002.html
+ https://lists.nongnu.org/archive/html/freetype-devel/2014-12/msg00007.html
+
+ * include/internal/ftvalid.h: Introduce FT_THROW() in FT_INVALID_().
+ * src/gxvalid/gxvcommn.h: Ditto.
+ * src/otvalid/otvcommn.h: Ditto.
+
+2014-12-08 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Fix Savannah bug #43774.
+
+ Work around `features' of X11's `pcfWriteFont' and `pcfReadFont'
+ functions. Since the PCF format doesn't have an official
+ specification, we have to exactly follow these functions' behaviour.
+
+ The problem was unveiled with a patch from 2014-11-06, fixing issue
+ #43547.
+
+ * src/pcf/pcfread.c (pcf_read_TOC): Don't check table size for last
+ element. Instead, assign real size.
+
+2014-12-07 Werner Lemberg <wl@gnu.org>
+
+ Work around a bug in Borland's C++ compiler.
+
+ See
+
+ http://qc.embarcadero.com/wc/qcmain.aspx?d=118998
+
+ for Borland's bug tracker entry.
+
+ Reported by Yuliana Zigangirova <zigangirova@inbox.ru>,
+ https://lists.gnu.org/archive/html/freetype-devel/2014-04/msg00001.html.
+
+ * include/internal/ftvalid.h (FT_ValidatorRec), src/smooth/ftgrays.c
+ (gray_TWorker_): Move `ft_jmp_buf' field to be the first element.
+
+2014-12-07 Werner Lemberg <wl@gnu.org>
+
+ */*: Decorate hex constants with `U' and `L' where appropriate.
+
+2014-12-07 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Prevent memory leak for buggy fonts.
+
+ * src/truetype/ttobjs.c (tt_size_done): Unconditionally call
+ `tt_size_done_bytecode'.
+
+2014-12-06 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.5.4 released.
+ =========================
+
+
+ Tag sources with `VER-2-5-4'.
+
+ * docs/VERSION.DLL: Update documentation and bump version number to
+ 2.5.4.
+
+ * 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.3/2.5.4/, s/253/254/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.
+
+ * builds/unix/configure.raw (version_info): Set to 17:3:11.
+ * CMakeLists.txt (VERSION_PATCH): Set to 4.
+ * docs/CHANGES: Updated.
+
+2014-12-04 Werner Lemberg <wl@gnu.org>
+
+ docs/CHANGES: Updated, formatted.
+
+2014-12-04 Dave Arnold <darnold@adobe.com>
+
+ [cff] Modify an FT_ASSERT.
+
+ * src/cff/cf2hints.c (cf2_hintmap_map): After the fix for Savannah
+ bug #43661, the test font `...aspartam.otf' still triggers an
+ FT_ASSERT. Since hintmap still works with count==0, ...
+ (cf2_glyphpath_lineTo, cf2_glyphpath_curveTo): ... add that term to
+ suppress the assert.
+
+2014-12-04 Dave Arnold <darnold@adobe.com>
+
+ [cff] Fix Savannah bug #43661.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdHSTEM,
+ cf2_cmdVSTEM, cf2_cmdHINTMASK>: Don't append to stem arrays after
+ hintmask is constructed.
+
+ * src/cff/cf2hints.c (cf2_hintmap_build): Add defensive code to
+ avoid reading past end of hintmask.
+
+2014-12-03 Werner Lemberg <wl@gnu.org>
+
+ docs/CHANGES: Updated.
+
+2014-12-03 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Better fix for conversion specifiers in debug messages.
+
+ Using `%ld' for pointer differences causes warnings on 32bit
+ platforms. The correct type would be (the relatively new) `%td',
+ however, this is missing on some important platforms.
+
+ This patch improves the change from 2014-11-28.
+
+ * src/autofit/afhints.c (AF_INDEX_NUM): Use `int' typecast. Our
+ pointer differences are always sufficiently small.
+ (af_glyph_hints_dump_points, af_glyph_hints_dump_segments,
+ af_glyph_hints_dump_edge): Revert to `%d' and use `AF_INDEX_NUM'.
+
+2014-12-03 Werner Lemberg <wl@gnu.org>
+
+ FT_Sfnt_Tag: s/ft_sfnt_xxx/FT_SFNT_XXX/ for orthogonality.
+
+ All public FreeType enumeration and flag values are uppercase...
+
+ * include/tttables.h (FT_Sfnt_Tag): Implement it. For backward
+ compatibility, retain the old values as macros.
+
+ * src/base/ftfstype.c (FT_Get_FSType_Flags), src/sfnt/sfdriver.c
+ (get_sfnt_table): Updated.
+
+2014-12-02 Werner Lemberg <wl@gnu.org>
+
+ * include/*: Improve structure of documentation.
+
+ . Add and update many `<Order>' tags.
+ . Apply various documentation fixes.
+ . Remove details to deprecated (or never implemented) data.
+
+2014-12-02 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Always handle `<Order>' section elements.
+
+ Previously, those elements were handled only for sections present in
+ a `<Sections>' chapter element.
+
+ * src/tools/docmaker/content.py (ContentProcessor::finish):
+ Implement it.
+
+2014-12-02 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Properly handle empty rows in Synopsis.
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::section_enter): Emit
+ ` ' for empty fields.
+
+2014-12-02 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Thinko.
+
+ * src/tools/docmaker/content.py (DocBlock::get_markup_words_all):
+ Emit `/empty/' string for first element also.
+
+2014-12-02 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Honour empty lines in `<Order>' section element.
+
+ This greatly improves the readability of the `Synopsis' links.
+
+ * src/tools/docmaker/content.py (DocBlock::get_markup_words_all):
+ Insert string `/empty/' between items.
+
+ * src/tools/docmaker/formatter.py (Formatter::section_dump): Make it
+ robust against nonexistent keys.
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::section_enter): Emit
+ empty <td> elements for `/empty/'.
+
+2014-12-02 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Ensure Python 3 compatibility.
+
+ * src/tools/docmaker/content.py (ContentProcessor::set_section,
+ ContentProcessor::finish): Replace `has_key' function with `in'
+ keyword.
+
+ * src/tools/docmaker/formatter.py (Formatter::__init__): Replace
+ sorting function with a key generator.
+ (Formatter::add_identifier): Replace `has_key' function with `in'
+ keyword.
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::html_source_quote):
+ Replace `has_key' function with `in' keyword.
+ (HtmlFormatter::index_exit, HtmlFormatter::section_enter): Use
+ integer division.
+ s/<>/>/.
+
+ * src/tools/docmaker/utils.py: Import `itertools'.
+ (index_sort): Replaced by...
+ (index_key): ... this new key generator (doing exactly the same).
+
+2014-11-29 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Don't output a block multiple times.
+
+ This bug was hidden by not processing all lines of `<Order>' blocks.
+
+ * src/tools/docmaker/formatter.py (Formatter::section_dump): Filter
+ out field names.
+
+2014-11-29 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Use field values as HTML link targets where possible.
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::make_block_url):
+ Accept second, optional argument to specify a name.
+ (HtmlFormatter::html_source_quote): Link to field ID if possible.
+ (HtmlFormatter::print_html_field_list): Emit `id' attribute.
+
+2014-11-29 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Allow empty lines in `<Order>' blocks.
+
+ Before this patch, the suggested order of entries stopped at the
+ first empty line.
+
+ Obviously, nobody noticed that this problem caused a much reduced
+ set of links in the `Synopsis' sections; in particular, the
+ `<Order>' blocks contain a lot of entries that wouldn't be listed
+ otherwise...
+
+ * src/tools/docmaker/content.py (DocBlock::get_markup_words_all):
+ New function to iterate over all items.
+ (DocSection::process): Use it.
+
+2014-11-29 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/sources.py (column) [Format 2]: Fix regexp.
+
+ After the single asterisk there must be no other immediately following
+ asterisk.
+
+2014-11-29 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py: Improve CSS for vertical spacing.
+
+2014-11-29 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Improve HTML code for table of contents.
+
+ * src/tools/docmaker/tohtml.py: Introduce a new table class `toc',
+ together with proper CSS.
+
+2014-11-29 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Provide higher-level markup and simplify HTML.
+
+ * src/tools/docmaker/tohtml.py: Instead of using extraneous `<div>'
+ elements, use CSS descendants (of class `section') to format the
+ data.
+
+ Also remove redundant <p> and <br> elements, replacing them with
+ proper CSS.
+
+ Globally reduce page width to 75%.
+
+ (block_header): Rename <div> class to `section'.
+
+2014-11-29 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Add `top' links after blocks.
+
+ * src/tools/docmaker/tohtml.py (block_footer_middle): Implement it.
+
+2014-11-29 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py: Improve CSS for fields.
+
+ Make fields align horizontally relative to full line width.
+
+2014-11-29 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py: Fix index and TOC templates.
+
+ This thinko was introduced 2014-11-27.
+
+2014-11-28 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Format field lists with CSS.
+
+ This also simplifies the inserted HTML code.
+
+ * src/tools/docmaker/tohtml.py
+ (HtmlFormatter::print_html_field_list): Do it.
+
+2014-11-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Fix compiler warning to the comparison between signed and
+ unsigned variable.
+
+ * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Fix the comparison
+ between `ypos + ysize' and FT_INT_{MAX,MIN}.
+
+2014-11-28 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Replace empty `<td>' with CSS.
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::section_enter): Do
+ it.
+
+2014-11-28 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Replace some `<table>' tags with `<h4>' and `<div>'.
+
+ * src/tools/docmaker/tohtml.py (marker_*): Use `<h4>'.
+ (source_*): Use `<div>'.
+ (HtmlFormatter::block_enter): s/<h4>/<h3>/.
+
+2014-11-28 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Fix compiler warning to conversion specifiers in debug messages.
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_points): Add length
+ modifier to dump long integers.
+ (af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Ditto.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py: Use more CSS for index.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Replace `name' attribute of `<a>' with `id'.
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::block_enter): Do it.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py: Remove remaining `width' attributes.
+
+ For `Index' and `TOC' links, we now simply use the `text-align' CSS
+ property of `<td>' to enforce flush-left and flush-right,
+ eliminating the hack with an empty, full-width `<td>' element
+ inbetween.
+
+ The change also enforces the same (smaller) size for all index and
+ TOC links.
+
+2014-11-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/cff/cf2font.c: Include `ftcalc.h' to use FT_MSB(),
+ cf2font.c could not find it under `make multi' build.
+
+2014-11-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Remove
+ unrequired negative value check for `width' and `height'.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py: More HTML table refactoring.
+
+ Replace some `<table>' tags with `<div>' to simplify structure.
+
+ Move `bgcolor' attribute to CSS.
+
+ Replace most `width' attributes with CSS. The remaining instances
+ (providing a similar effect as LaTeX's `\hfill' command) are removed
+ in a later patch.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py: Replace <font> with CSS.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py: Center <table> with CSS.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py: Replace `<center>' with `<div>'.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/tohtml.py: Remove redundant `<center>' tags.
+
+ This starts a series of commits into the direction of generating
+ valid HTML 5 code, especially using much more CSS.
+
+2014-11-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Prevent too negative values (< FT_INT_MIN) in bitmap metrics,
+ suggested by Alexei.
+
+ * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Prevent too
+ negative values in `xpos' and `ypos + ysize'.
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Prevent
+ too negative values in `x_left' and `y_top'. Either negative
+ values in `width' and `height' are checked.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Produce better HTML code.
+
+ * src/tools/docmaker/tohtml.py: Always use double quotes for
+ attribute values.
+ (source_footer): Close `td' and `tr' groups.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ Use better way to disable creation of .pyc files for `make refdoc'.
+
+ Python 2.6 was released in 2008...
+
+ * builds/freetype.mk (refdoc): Use python's `-B' option.
+
+ * builds/detect.mk (std_setup, dos_setup): Mention required python
+ version for `refdoc' target.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/sources.py (re_bold, re_italic): Use
+ non-grouping parentheses.
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::make_html_word):
+ Updated.
+
+2014-11-27 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Get_Glyph_Name): Fix compiler warning.
+
+ Introduced in previous change. Reported by Alexei.
+
+2014-11-26 Werner Lemberg <wl@gnu.org>
+
+ * src/*: Add checks for parameters of API functions where missing.
+
+ `API functions' are functions tagged with `FT_EXPORT_DEF'.
+
+ Besides trivial fixes, the following changes are included, too.
+
+ * src/base/ftbdf.c (FT_Get_BDF_Charset_ID, FT_Get_BDF_Property): Set
+ error code if no service is available.
+
+ * src/base/ftinit.c (FT_Done_FreeType): Change return value for
+ invalid `library' parameter to `Invalid_Library_Handle'.
+
+ * src/base/ftobjs.c (FT_New_Size): Change return value for invalid
+ `asize' parameter to `Invalid_Argument'.
+
+ * src/base/ftoutln.c (FT_Outline_Copy): Change return value for
+ invalid `source' and `target' parameters to `Invalid_Outline'.
+ (FT_Outline_Done_Internal): Change return value for invalid
+ `outline' parameter to `Invalid_Outline'.
+
+2014-11-26 Werner Lemberg <wl@gnu.org>
+
+ * src/cache/ftcbasic.c: Use single calls to `FT_TRACE'.
+
+2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftobjs.c (Mac_Read_POST_Resource): Additional
+ overflow check in the summation of POST fragment lengths,
+ suggested by Mateusz Jurczyk <mjurczyk@google.com>.
+
+2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftobjs.c (Mac_Read_POST_Resource): Insert comments
+ and fold too long tracing messages.
+
+2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Fix Savannah bug #43540.
+
+ * src/base/ftmac.c (parse_fond): Prevent a buffer overrun
+ caused by a font including too many (> 63) strings to store
+ names[] table.
+
+2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftobjs.c (Mac_Read_POST_Resource): Use unsigned long
+ variables to read the lengths in POST fragments. Suggested by
+ Mateusz Jurczyk <mjurczyk@google.com>.
+
+2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Fix Savannah bug #43539.
+
+ * src/base/ftobjs.c (Mac_Read_POST_Resource): Fix integer overflow
+ by a broken POST table in resource-fork.
+
+2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Fix Savannah bug #43538.
+
+ * src/base/ftobjs.c (Mac_Read_POST_Resource): Fix integer overflow
+ by a broken POST table in resource-fork.
+
+2014-11-26 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ * src/base/ftobjs.c (Mac_Read_POST_Resource): Avoid memory leak
+ by a broken POST table in resource-fork. Return after freeing
+ the buffered POST table when it is found to be broken.
+
+2014-11-25 Werner Lemberg <wl@gnu.org>
+
+ */*: s/Invalid_Argument/Invalid_Size_Handle/ where appropriate.
+
+2014-11-25 Werner Lemberg <wl@gnu.org>
+
+ */*: s/Invalid_Argument/Invalid_Stream_Handle/ where appropriate.
+
+2014-11-25 Werner Lemberg <wl@gnu.org>
+
+ */*: s/Invalid_Argument/Invalid_Library_Handle/ where appropriate.
+
+2014-11-25 Werner Lemberg <wl@gnu.org>
+
+ */*: s/Invalid_Argument/Invalid_Outline/ where appropriate.
+
+2014-11-25 Werner Lemberg <wl@gnu.org>
+
+ */*: s/Invalid_Argument/Invalid_Face_Handle/ where appropriate.
+
+2014-11-24 Werner Lemberg <wl@gnu.org>
+
+ [Savannah bug #43682] Adjust some renderer callbacks.
+
+ * src/raster/ftraster.c (ft_black_set_mode): Change return type to
+ `int' to stay in sync with `FT_Renderer_SetModeFunc' prototype.
+
+ * src/smooth/ftgrays.c (gray_raster_set_mode): New dummy function
+ for orthogonality.
+ (ft_grays_raster): Use it.
+
+2014-11-25 Werner Lemberg <wl@gnu.org>
+
+ [Savannah bug #43682] Properly handle missing return errors.
+
+ The functions in this patch *do* return non-trivial errors that must
+ be taken care of.
+
+ * src/autofit/afloader.c (af_loader_load_g), src/base/ftobjs.c
+ (FT_Render_Glyph_Internal), src/base/ftoutln.c (FT_Outline_Render),
+ src/cff/cffgload.c (cff_decoder_parse_charstrings) <cff_op_endchar>,
+ src/psaux/psobjs.c (ps_parser_load_field_table), src/psaux/t1decode
+ (t1_decoder_parse_charstrings) <op_endchar>, src/truetype/ttgload.c
+ (load_truetype_glyph <subglyph loop>, tt_loader_init,
+ TT_Load_Glyph), src/truetype/ttgxvar.c (TT_Set_MM_Blend),
+ src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Do it.
+
+2014-11-25 Werner Lemberg <wl@gnu.org>
+
+ [Savannah bug #43682] Add/remove `void' casts to some functions.
+
+ We use a cast to indicate that we intentionally ignore a function's
+ return value. However, this doesn't apply to API functions where
+ errors can only happen for trivially invalid input.
+
+ * src/base/ftstroke.c (FT_Glyph_Stroke, FT_Glyph_StrokeBorder),
+ src/base/ftsynth.c (FT_GlyphSlot_Embolden), src/cff/cffgload.c
+ (cff_slot_load), src/pfr/pfrdrivr.c (pfr_get_kerning),
+ src/type1/t1load.c (parse_encoding), src/type42/t42parse.c
+ (t42_parse_encoding): Do it.
+
+2014-11-25 Werner Lemberg <wl@gnu.org>
+
+ [Savannah bug #43682] Change some signatures to `void' return type.
+
+ * include/internal/pshints.h (PSH_Globals_SetScaleFunc),
+ include/internal/sfnt.h (TT_Get_Metrics_Func),
+ src/pshinter/pshglob.c (psh_globals_set_scale),
+ src/pshinter/pshrec.c (ps_hints_init), src/sfnt/ttmtx.c
+ (tt_face_get_metrics), src/truetype/ttinterp.c (TT_Goto_CodeRange,
+ TT_Set_CodeRange, TT_Clear_CodeRange, TT_Done_Context,
+ TT_Save_Context): Do it.
+
+ * src/pshinter/pshglob.h, src/pshinter/pshrec.h, src/sfnt/ttmtx.h,
+ src/truetype/ttgload.c (TT_Hint_Glyph), src/truetype/ttinterp.c
+ (TT_Run_Context), src/truetype/ttinterp.h, src/truetype/ttobjs.c
+ (tt_size_run_fpgm, tt_size_run_prep): Updated.
+
+2014-11-24 Werner Lemberg <wl@gnu.org>
+
+ Remove all code related to FT_MAX_CHARMAP_CACHEABLE.
+
+ This is no longer used.
+
+ * src/base/ftobjs.c, src/cache/ftccmap.c, src/cff/cffobjs.c,
+ src/sfnt/ttcmap.c: Do it.
+
+2014-11-24 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #43680.
+
+ This adds an additional constraint to make the fix from 2013-01-25
+ really work.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_image) <index_format==4>:
+ Check `p' before `num_glyphs'.
+
+2014-11-24 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix Savannah bug #43679.
+
+ * src/truetype/ttpload.c (tt_face_load_hdmx): Check minimum size of
+ `record_size'.
+
+2014-11-24 Jarkko Pöyry <jarkko.poyry@gmail.com>
+
+ [cff, pfr, psaux, winfonts] Fix Savannah bug #43676.
+
+ Don't cast cmap init function pointers to an incompatible type.
+
+ Without this patch, the number of parameters between declaration and
+ the real signature differs. Calling such a function results in
+ undefined behavior.
+
+ ISO/IEC 9899:TC3 (Committee Draft September 7, 2007)
+ 6.5.2.2 Function calls
+ 9 If the function is defined with a type that is not
+ compatible with the type (of the expression) pointed to by
+ the expression that denotes the called function, the
+ behavior is undefined.
+
+ On certain platforms (c -> js with emscripten) this causes
+ termination of execution or invalid calls because in the emscripten
+ implementation, function pointers of different types are stored in
+ different pointer arrays. Incorrect pointer type here results in
+ indexing of an incorrect array.
+
+ * src/cff/cffcmap.c (cff_cmap_encoding_init, cff_cmap_unicode_init),
+ src/pfr/pfrcmap.c (pfr_cmap_init), src/psaux/t1cmap.c
+ t1_cmap_standard_init, t1_cmap_expert_init, t1_cmap_custom_init,
+ t1_cmap_unicode_init), src/winfonts/winfnt.c (fnt_cmap_init): Fix
+ signature.
+
+2014-11-24 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #43672.
+
+ * src/sfnt/ttkern.c (tt_face_load_kern): Use correct value for
+ minimum table length test.
+
+2014-11-24 Werner Lemberg <wl@gnu.org>
+
+ [type1, type42] Another fix for Savannah bug #43655.
+
+ * src/type1/t1load.c (parse_charstrings), src/type42/t42parse.c
+ (t42_parse_charstrings): Add another boundary testing.
+
+2014-11-24 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Formatting, copyright, improved documentation.
+
+ * src/tools/docmaker/*: No code changes besides trivial
+ modifications.
+
+2014-11-22 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Fix Savannah bug #43660.
+
+ * src/bdf/bdflib.c (_bdf_parse_glyphs) <"ENDFONT">: Check
+ `_BDF_GLYPH_BITS'.
+
+2014-11-22 Werner Lemberg <wl@gnu.org>
+
+ [type42] Allow only embedded TrueType fonts.
+
+ This is a follow-up to Savannah bug #43659.
+
+ * src/type42/t42objs.c (T42_Face_Init): Exclusively use the
+ `truetype' font driver for loading the font contained in the `sfnts'
+ array.
+
+2014-11-22 Werner Lemberg <wl@gnu.org>
+
+ [type42] Fix Savannah bug #43659.
+
+ * src/type42/t42objs.c (T42_Open_Face): Initialize `face->ttf_size'.
+
+ * src/type42/t42parse.c (t42_parse_sfnts): Always set
+ `face->ttf_size' directly. This ensures a correct stream size in
+ the call to `FT_Open_Face', which follows after parsing, even for
+ buggy input data.
+ Fix error messages.
+
+2014-11-22 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix Savannah bug #43658.
+
+ * src/cff/cf2ft.c (cf2_builder_lineTo, cf2_builder_cubeTo): Handle
+ return values of point allocation routines.
+
+2014-11-22 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #43656.
+
+ * src/sfnt/ttcmap.c (tt_cmap4_validate): Fix order of validity
+ tests.
+
+2014-11-21 Werner Lemberg <wl@gnu.org>
+
+ [type1, type42] Fix Savannah bug #43655.
+
+ * src/type1/t1load.c (parse_charstrings), src/type42/t42parse.c
+ (t42_parse_charstrings): Fix boundary testing.
+
+2014-11-21 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfread.c (pcf_get_metrics): Sanitize invalid metrics.
+
+2014-11-21 Werner Lemberg <wl@gnu.org>
+
+ [ftlcdfil] Obey flow direction.
+
+ * src/base/ftlcdfil.c (_ft_lcd_filter_fir, _ft_lcd_filter_legacy):
+ Handle `up' flow.
+
+2014-11-21 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftbitmap.c (FT_Bitmap_Convert): Improve.
+
+ This commit completes argument checks and adds support for different
+ flow directions.
+
+2014-11-21 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftbitmap.c (FT_Bitmap_Copy): Improve.
+
+ This commit adds argument checks and support for different flow
+ directions.
+
+2014-11-20 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftbitmap.c (FT_Bitmap_New): Check argument.
+
+2014-11-19 Werner Lemberg <wl@gnu.org>
+
+ Change some fields in `FT_Bitmap' to unsigned type.
+
+ This doesn't break ABI.
+
+ * include/ftimage.h (FT_Bitmap): Make `rows', `width', `num_grays',
+ `pixel_mode', and `palette_mode' unsigned types.
+
+ * src/base/ftbitmap.c: Updated.
+ (FT_Bitmap_Copy): Fix casts.
+
+ * src/cache/ftcsbits.c, src/raster/ftraster.c, src/sfnt/pngshim.c:
+ Updated.
+
+2014-11-19 Werner Lemberg <wl@gnu.org>
+
+ Make `FT_Bitmap_Convert' correctly handle negative `pitch' values.
+
+ * src/base/ftbitmap.c (FT_Bitmap_Convert): Always use positive value
+ for the pitch while copying data.
+ Correctly set pitch sign in target bitmap.
+
+2014-11-19 Werner Lemberg <wl@gnu.org>
+
+ Minor code improvement in `FT_Bitmap_Embolden'.
+
+ * src/base/ftbitmap.c (FT_Bitmap_Embolden) <FT_PIXEL_MODE_GRAY[24]>:
+ Fix thinko.
+
+2014-11-19 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/fttrigon.c: Use dedicated `FT_Angle' for arctan table.
+
+2014-11-19 Behdad Esfahbod <behdad@behdad.org>
+
+ Avoid compiler warnings on x86-64 for `FT_MulFix'.
+
+ `FT_MulFix' takes `FT_Long' parameters as defined in `freetype.h',
+ but several inline implementations of it in `ftcalc.h' take
+ `FT_Int32' arguments. This is causing compiler warnings on x86-64:
+ If parameters of type `FT_Fixed' (= `FT_Long') are passed to the
+ inline implementation of this function, integer values are truncated
+ from 64bit to 32bit.
+
+ * include/internal/ftcalc.h (FT_MulFix) [FT_MULFIX_ASSEMBLER]: Add
+ casts.
+
+2014-11-15 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #43597.
+
+ * src/sfnt/pngshim.c (Load_SBit_Png): Protect against too large
+ bitmaps.
+
+2014-11-12 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #43591.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_init): Protect against addition
+ and multiplication overflow.
+
+2014-11-12 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #43590.
+
+ * src/sfnt/ttload.c (check_table_dir, tt_face_load_font_dir):
+ Protect against addition overflow.
+
+2014-11-12 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #43589.
+
+ * src/sfnt/sfobjs.c (woff_open_font): Protect against addition
+ overflow.
+
+2014-11-12 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #43588.
+
+ * src/sfnt/ttcmap.c (tt_cmap8_validate, tt_cmap10_validate,
+ tt_cmap12_validate, tt_cmap13_validate, tt_cmap14_validate): Protect
+ against overflow in additions and multiplications.
+
+2014-11-10 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] CORDIC improvements.
+
+ The scaling between the hypotenuse and its CORDIC approximation is
+ based on regression analysis. The smaller padding for `theta' is
+ justified by its maximum error of less than 6.
+
+ * src/base/fttrigon.c (ft_trig_downscale): Borrow code from
+ ./ftcalc.c (ft_multo64), change linear intercept.
+ (ft_trig_pseudo_polarize): Decrease `theta' padding.
+
+2014-11-09 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftstroke.c (ft_stroker_inside): Fix border intersections.
+
+ One more place to check whether `radius' is zero.
+
+ Problem reported by Marco Wertz <marco.wertz@gmx.de>.
+
+2014-11-07 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Fix Savannah bug #43535.
+
+ * src/bdf/bdflib.c (_bdf_strncmp): New macro that checks one
+ character more than `strncmp'.
+ s/ft_strncmp/_bdf_strncmp/ everywhere.
+
+2014-11-06 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Fix Savannah bug #43548.
+
+ * src/pcf/pcfread.c (pcf_get_encodings): Add sanity checks for row
+ and column values.
+
+2014-11-06 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Fix Savannah bug #43547.
+
+ * src/pcf/pcfread.c (pcf_read_TOC): Check `size' and `offset'
+ values.
+
+2014-11-06 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfread.c (pcf_read_TOC): Avoid memory leak.
+
+2014-11-03 Infinality <infinality@infinality.net>
+
+ * src/truetype/ttsubpix.c (COMPATIBILITY_MODE_Rules): Updated.
+
+ The previous commit deteriorates rendering of DejaVu and similar
+ fonts; this gets compensated with this rule.
+
+2014-11-03 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Ins_DELTAP): Fix subpixel hinting.
+
+ Before this patch, it was impossible to ever call DELTAP[123] in
+ subpixel hinting mode as described in the ClearType whitepaper; it
+ only worked if in `compatibility mode'. However, compatibility mode
+ essentially disables SHPIX, completely ruining hinting of
+ ttfautohint output, for example.
+
+ We now follow the whitepaper more closely so that DELTAP[123]
+ instructions for touched points in the non-subpixel direction are
+ executed.
+
+2014-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Improve code readability.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Rearrange code.
+
+2014-10-31 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Reduce outline translations during rendering.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Translate origin
+ virtually by modifying cbox, actually translate outline if cumulative
+ shift is not zero.
+
+2014-10-30 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Fix Savannah bug #35604 (cont'd).
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Remove checks and
+ casts that became unnecessary after the variable type upgrades.
+
+2014-10-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Improve code readability.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Rearrange code.
+
+2014-10-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Unify hypotenuse approximations.
+
+ * include/internal/ftcalc.h (FT_HYPOT): Move macro from here...
+ * include/internal/ftobjs.h: ... to here, next to required `FT_ABS'.
+ * src/smooth/ftgrays.c (gray_render_cubic): Use it here.
+
+2014-10-25 Werner Lemberg <wl@gnu.org>
+
+ [cff] Test valid darkening parameter macros in `ftoption.h'.
+
+ We no longer need an otherwise unused typedef that can cause a gcc
+ warning.
+ Problem reported by Alexei.
+
+ * src/cff/cffobjs.c (cff_driver_init): Use
+ `CFF_CONFIG_OPTION_DARKENING_PARAMETER_XXX' macros directly.
+ (SET_DARKENING_PARAMETERS): Removed.
+ Compile time tests are now ...
+
+ * devel/ftoption.h, include/config/ftoption.h: ... here.
+
+2014-10-25 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Improve flat corner definition.
+
+ * include/internal/ftcalc.h (FT_HYPOT): Macro to approximate Euclidean
+ distance with the alpha max plus beta min algorithm.
+ * src/base/ftcalc.c (ft_corner_is_flat): Use it instead of Taxicab
+ metric.
+
+2014-10-23 David Weiß <David.Weiss@ptvgroup.com>
+
+ [build] Improve property file for vc2010.
+
+ User-defined properties should be empty by default to prevent linker
+ failures.
+
+ * builds/windows/vc2010/freetype.user.props,
+ builds/windows/vc2010/freetype.vcxproj:
+ s/OptionsDirectory/UserOptionDirectory/.
+ Comment out all user options.
+
+2014-10-23 Werner Lemberg <wl@gnu.org>
+
+ [cff] Work around bug in preprocessor of MSVC 2010.
+
+ We have been hit by
+
+ https://connect.microsoft.com/VisualStudio/feedback/details/718976/msvc-pr
+
+ * devel/ftoption.h, include/config/ftoption.h: Replace
+ `CFF_CONFIG_OPTION_DARKENING_PARAMETERS' with eight macros
+ `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}'.
+
+ * src/cff/cffobjs.c (SET_DARKENING_PARAMETERS): Removed. We no
+ longer need double expansion.
+ (SET_DARKENING_PARAMETERS_0): Renamed to ...
+ (SET_DARKENING_PARAMETERS): ... this.
+ Update call.
+
+2014-10-20 Werner Lemberg <wl@gnu.org>
+
+ [sbit] Minor fixes.
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbit) [TT_SBIT_TABLE_TYPE_SBIX]:
+ Accept overlay format also, but emit warning message in that case.
+ (tt_sbit_decoder_load_metrics): Add missing newline to error
+ message.
+ (tt_sbit_load_sbix_image): Add `rgbl' graphic type (as used on iOS
+ 7.1) to the list of unsupported formats.
+
+2014-10-19 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [truetype] Clean up bytecode rounding.
+
+ Zero distance does not have to be treated specially if you follow
+ specifications and check the sign as the very last step of rounding.
+
+ * src/truetype/ttinterp.c (Round_None, Round_To_Grid,
+ Round_Down_To_Grid, Round_Up_To_Grid, Round_To_Double_Grid): Use
+ macros when available, do not check for non-zero distance.
+ (Round_To_Half_Grid, Round_Super, Round_Super_45): Ditto, return phase
+ if sign changed.
+
+2014-10-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [truetype] Unwrap engine compensation settings.
+
+ * src/truetype/ttobjs.c (tt_size_init_bytecode): Updated.
+
+2014-10-18 David Weiß <David.Weiss@ptvgroup.com>
+
+ [build] Add property file to vc2010 project.
+
+ This simplifies custom build configurations, especially for
+ automated build environments.
+
+ * builds/windows/vc2010/freetype.user.props: New configuration file.
+
+ * builds/windows/vc2010/freetype.vcxproj: Include
+ `freetype.user.props' and use its data fields.
+
+ * builds/windows/vc2010/index.html: Updated.
+
+2014-10-18 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add blue-zone support for Telugu.
+
+ This essentially moves the Telugu script from the `Indic' hinter to
+ the `Latin' hinter.
+
+ Note that this is a first shot and quite certainly needs
+ refinements.
+
+ * src/autofit/afblue.dat: Add blue zone data for Telugu.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Telugu standard characters and move
+ data out of AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afranges.c: Move Telugu data out of
+ AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afstyles.h: Update Telugu data; in particular, use
+ AF_WRITING_SYSTEM_LATIN.
+
+2014-10-18 David Wimsey <david@wimsey.us>
+
+ [cmake] Add iOS build support.
+ From Savannah patch #8497.
+
+ * builds/cmake/iOS.cmake: New file. Universal binaries are built
+ with both 32 and 64 bit arm architectures.
+
+ * CMakeLists.txt (IOS_PLATFORM): New variable for running the iOS
+ toolchain. Possible values are `OS' to build on iOS, or
+ `SIMULATOR' to build on APPLE.
+
+2014-10-16 Behdad Esfahbod <behdad@behdad.org>
+ Werner Lemberg <wl@gnu.org>
+
+ [cff] Add `CFF_CONFIG_OPTION_DARKENING_PARAMETERS' config macro.
+
+ * devel/ftoption.h, include/config/ftoption.h
+ (CFF_CONFIG_OPTION_DARKENING_PARAMETERS): New macro.
+
+ * src/cff/cffobjs.c (SET_DARKENING_PARAMETERS,
+ SET_DARKENING_PARAMETERS_0): New macros.
+ (cff_driver_init): Use new macros.
+
+2014-10-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [truetype] Limit delta shift range.
+
+ The valid range for delta shift is zero through six. Negative values
+ are invalid according to
+
+ https://developer.apple.com/fonts/TrueType-Reference-Manual/RM04/Chap4.html#delta%20shift
+
+ * src/truetype/ttobjs.h (delta_shift, delta_base): Make unsigned.
+ * src/truetype/ttinterp.h (DO_SDS): Throw an error if `delta_shift'
+ is out of range.
+ (Ins_DELTAP, Ins_DELTAC): Optimize for valid `delta_shift'.
+
+2014-10-16 Werner Lemberg <wl@gnu.org>
+
+ A better fix for Savannah bug #43392.
+ Suggested by Doug Felt <dougfelt@gmail.com>.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_metrics): Set
+ `vertAdvance' to zero...
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): ... and set here a default
+ value for `vertAdvance' based on `linearVertAdvance' in case
+ `vertAdvance' is zero. Note that the previous computed ad-hoc value
+ for `linearVertAdvance' was apparently not tested in a real-life
+ situation.
+
+2014-10-14 David Weiß <David.Weiss@ptvgroup.com>
+
+ [build] Better optimization settings for vc2010 solution file.
+
+ * builds/windows/vc2010/freetype.sln,
+ builds/windows/vc2010/freetype.vcxproj: Updated.
+
+2014-10-14 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Adjust Devanagari character range.
+
+ * src/autofit/afranges.c (af_deva_uniranges): Omit characters that
+ are common to all other Indic scripts.
+
+2014-10-12 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #43392.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_metrics): Don't let
+ vertical metrics uninitialized.
+
+2014-10-11 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Small bbox correction.
+
+ * src/base/ftbbox.c (FT_Outline_Get_BBox): Start from nonsense bbox
+ instead of initial point that could be `off' in conic outlines.
+
+2014-10-08 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Fix Savannah bug #43356.
+
+ * src/base/ftbbox.c (BBox_Move_To, BBox_Conic_To): Update bbox in case
+ of implicit `to'.
+ (BBox_Line_To): New emitter that does not update bbox.
+
+2014-10-08 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Introduce and use new macro `FT_UPDATE_BBOX'
+
+ * src/base/ftbbox.c (FT_UPDATE_BBOX): New macro.
+ (FT_Outline_Get_BBox): Use it here.
+
+2014-10-02 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Significant optimization of `ft_div64by32'
+
+ We shift as many bits as we can into the high register, perform
+ 32-bit division with modulo there, then work through the remaining
+ bits with long division. This optimization is especially noticeable
+ for smaller dividends that barely use the high register.
+
+ * src/base/ftcalc.c (ft_div64by32): Updated.
+
+2014-10-02 Dave Arnold <darnold@adobe.com>
+
+ [cff] Fix Savannah bug #43271.
+
+ * src/cff/cf2font.c (cf2_computeDarkening): Change overflow
+ detection to use logarithms and clamp `scaledStem'.
+
+2014-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftcalc.c: Remove miscellaneous type casts.
+
+2014-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Use more common `FT_MSB' implementation with masks.
+
+ * src/base/ftcalc.c (FT_MSB): Updated.
+
+2014-09-30 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Clean up.
+
+ * src/base/ftcalc.c (FT_MOVE_SIGN): New macro for frequently used
+ code.
+
+2014-09-25 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Avoid unnecessary long division.
+
+ This applies to `FT_MulDiv' but not to `FT_DivFix', where overflows or
+ lack thereof are predicted accurately.
+
+ * src/base/ftcalc.c (ft_div64by32): Improve readability.
+ (FT_MulDiv, FT_MulDiv_No_Round) [!FT_LONG64]: Use straight division
+ when multiplication stayed within 32 bits.
+
+2014-09-24 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Minor clean-ups.
+
+ * src/autofit/afhints.c (AF_FLAGS): Remove obsolete values.
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_points,
+ af_glyph_hints_align_strong_points): Updated.
+
+ * src/autofit/aflatin.c (af_latin_hints_link_segments,
+ af_latin_hints_compute_segments), src/autofit/afcjk.c
+ (af_cjk_hints_link_segments), src/autofit/aflatin2.c
+ (af_latin2_hints_link_segments, af_latin2_hints_compute_segments):
+ There are no longer fake segments since more than 10 years...
+
+2014-09-22 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Minor code streamlining.
+
+ * src/autofit/afhints.c (af_axis_hints_new_edge): Remove redundant
+ initialization.
+
+2014-09-19 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftcalc.c: Harmonize code.
+
+2014-09-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Tighten the overflow check in `FT_MulDiv'.
+
+ * src/base/ftcalc.c (FT_MulDiv) [!FT_LONG64]: Updated.
+
+2014-09-08 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Fix Savannah bug #43153.
+
+ * src/psaux/psconv.c (PS_Conv_ToFixed): Add protection against
+ overflow in `divider'.
+
+2014-09-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Tighten the overflow check in `FT_DivFix'.
+
+ This fixes a 13-year old bug. The original overflow check should have
+ been updated when rounding was introduced into this function
+ (c2cd00443b).
+
+ * src/base/ftcalc.c (FT_DivFix) [!FT_LONG64]: Updated.
+ * include/freetype.h (FT_DivFix): Updated documentation.
+
+2014-09-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Tighten the overflow check in `FT_MulFix'.
+
+ * src/base/ftcalc.c (FT_MulFix) [!FT_LONG64]: Updated.
+
+2014-09-02 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [truetype] Shortcut ppem calculations for square pixels.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): New field
+ `cur_ppem_func' with a function pointer.
+ * src/truetype/ttinterp.c (TT_RunIns): Initialize `cur_ppem_func'
+ depending on the pixel geometry to either...
+ (Current_Ppem_Stretched): ... this for stretched pixels.
+ (Current_Ppem): ... or this for square pixels.
+ (DO_MPPEM, DO_MPS, Ins_DELTAP, Ins_DELTAC): Use `cur_ppem_func'.
+
+2014-08-31 Behdad Esfahbod <behdad@behdad.org>
+
+ Don't use `register' keyword. Fixes compiler warnings.
+
+ * src/base/ftcalc.c (FT_Add64) [!FT_LONG64]: Do it.
+ * src/gzip/inftrees.c (huft_build): Ditto.
+ * src/truetype/ttinterp.c (TT_MulFix14_arm): Ditto.
+
+2014-08-24 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [truetype] Optimize DELTAP and DELTAC.
+
+ * src/truetype/ttinterp.c (Ins_DELTAP, Ins_DELTAC): Move ppem
+ calculations outside of the loop.
+
+2014-08-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Fix Savannah bug #43033.
+
+ * include/config/ftconfig.h, builds/unix/ftconfig.in,
+ builds/vms/ftconfig.h [FT_LONG64]: Do not disable the macro when
+ 64-bit type is `long'.
+
+2014-08-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Small optimization of `FT_MulFix'.
+
+ * src/base/ftcalc.c (FT_MulFix): Loosen up the condition for direct
+ 32-bit calculations.
+
+2014-08-19 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Use unsigned calculation in `FT_MulDiv'.
+
+ * src/base/ftcalc.c (FT_MulDiv): Updated to expand 32-bit range.
+
+2014-08-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Remove truncation in `FT_DivFix'.
+
+ * src/base/ftcalc.c (FT_DivFix): Updated.
+
+2014-08-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Minor refactoring.
+
+ * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round): Updated.
+
+2014-08-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Turn FT_MSB into a macro when using gcc builtins.
+
+ * src/base/ftcalc.c, include/internal/ftcalc.h: Updated.
+
+2014-08-12 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Avoid undefined FT_MSB in `BBox_Cubic_Check'.
+
+ * src/base/ftbbox.c (BBox_Cubic_Check): Update.
+ (update_cubic_max): Replace with...
+ (cubic_peak): ... this, which now handles upscaling.
+
+2014-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Handle collapsed outlines to avoid undefined FT_MSB.
+
+ * src/base/ftoutln.c (FT_Outline_Get_Orientation): Update.
+
+2014-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Restore FT_MulFix inlining.
+
+ * include/freetype.h (FT_MulFix): Unconditionally defined.
+
+ * src/base/ftcalc.c [FT_MULFIX_ASSEMBLER]: Move code from here...
+
+ * include/internal/ftcalc.h [FT_MULFIX_ASSEMBLER]: ... to here,
+ which conditionally replaces the function with an inline version
+ through the macro.
+
+2014-08-08 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Refactor.
+
+2014-07-26 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix typo.
+
+ * src/cff/cf2hints.c (cf2_glyphpath_computeOffset): Use correct
+ offsets in third quadrant.
+
+ Reported by maks <maksqwe1@ukr.net>.
+
+2014-07-17 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #42788.
+
+ * src/pfr/pfrobjs.c: Include `ftcalc.h'.
+
+2014-07-16 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Replace `ft_highpow2' function.
+
+ * src/pfr/pfrobjs.c (pfr_face_get_kerning): Use `FT_MSB' instead of
+ `ft_highpow2'.
+
+ * src/base/ftutil.c, include/internal/ftobjs.h (ft_highpow2): Remove
+ it.
+
+2014-07-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftcalc.c (FT_MSB): Utilize gcc builtins.
+
+2014-07-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Move assembler code back in the source file.
+
+ FT_MulFix assembler used to reside in ftcalc.c before f47d263f1b.
+
+ * include/config/ftconfig.h, builds/unix/ftconfig.in,
+ builds/vms/ftconfig.h [FT_MULFIX_ASSEMBLER]: Move code from here...
+
+ * src/base/ftcalc.c [FT_MULFIX_ASSEMBLER]: ... to here.
+
+2014-07-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Further clean up color bitmap conversion.
+
+ * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Stop
+ using FT_MulFix and FT_DivFix since all calculations fit into 32 bits.
+
+2014-07-13 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Improve handling of buggy `prep' tables.
+
+ In case of an error in the `prep' table, no longer try to execute it
+ again and again. This makes FreeType handle endless loops in buggy
+ fonts much faster.
+
+ * src/truetype/ttobjs.h (TT_SizeRec): The fields `bytecode_ready'
+ and `cvt_ready' are now negative if not initialized yet, otherwise
+ they indicate the error code of the last run.
+
+ * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep,
+ tt_size_done_bytecode, tt_size_init_bytecode,
+ tt_size_ready_bytecode, tt_size_init, tt_size_done, tt_size_reset):
+ Updated.
+
+ * src/truetype/ttgload.c (tt_loader_init): Updated.
+ * src/truetype/ttinterp.c (TT_RunIns): Force reexecution of `fpgm'
+ and `prep' only if we are in the `glyf' table.
+
+2014-07-12 Werner Lemberg <wl@gnu.org>
+
+ * builds/vms/ftconfig.h: Synchronize.
+ Problem reported by Alexei.
+
+2014-07-11 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Clean up bitmap conversion.
+
+ * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Use
+ appropriate FT_DivFix and remove superfluous upscaling.
+
+2014-07-04 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Small optimization of the ancient code.
+
+ * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round): Loosen up the
+ condition for direct 32-bit calculations.
+
+2014-06-27 Werner Lemberg <wl@gnu.org>
+
+ Fix Apple standard glyph names.
+
+ * src/sfnt/ttpost.c (tt_post_default_names): Synchronize with
+ `tools/glnames.py'
+
+ Problem reported by Adam Twardoch <adam@fontlab.com>.
+
+2014-06-17 Werner Lemberg <wl@gnu.org>
+
+ Partially revert commit from 2014-06-13.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Move
+ declaration of `p_first' and `p_last' out of the loop.
+
+2014-06-17 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/freetype2.m4: s/AC_PATH_PROG/AC_PATH_TOOL/.
+
+ This simplifies cross-compiling.
+
+2014-06-13 Werner Lemberg <wl@gnu.org>
+
+ Fix more compiler warnings.
+ Reported by Wojciech Mamrak <wmamrak@gmail.com>.
+
+ * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
+ Make integer constant unsigned.
+
+ * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
+ <TT_SBIT_TABLE_TYPE_SBIX>: Fix types.
+ (tt_sbit_decoder_load_compound, tt_face_load_sbix_image): Add proper
+ casts.
+
+2014-06-13 Werner Lemberg <wl@gnu.org>
+
+ Fix compiler warnings.
+ Reported by Wojciech Mamrak <wmamrak@gmail.com>.
+
+ * src/autofit/afglobal.c (af_face_globals_compute_style_coverage),
+ src/autofit/afmodule.c (af_property_set): Fix `signed' vs.
+ `unsigned' issues.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Make compiler
+ happy.
+
+ * src/base/ftlcdfil.c (_ft_lcd_filter_fir): Use only four elements
+ for `fir'.
+ Fix `signed' vs. `unsigned' issues.
+
+ * src/sfnt/sfobjs.c (WRITE_BYTE): Removed, unused.
+ (WRITE_USHORT, WRITE_ULONG): Add proper casts.
+
+ * src/truetype/ttgload.c (TT_Get_VMetrics): Add proper casts.
+
+ * src/truetype/ttinterp.c (Ins_DELTAP): Add proper casts for `B1'
+ and `B2'.
+
+2014-05-16 Alexey Petruchik <alexey.petruchik@gmail.com>
+
+ [cmake] Add option to build OS X framework.
+
+ * CMakeLists.txt: Update accordingly.
+
+ * builds/mac/freetype-Info.plist: New file.
+
+2014-05-13 Pavel Koshevoy <pkoshevoy@gmail.com>
+
+ * CMakeLists.txt (BASE_SRCS): Add missing `ftbdf.c'.
+
+2014-05-11 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix variable initializations.
+
+ * src/autofit/afhints.c (af_glyph_hints_reload): Assign default
+ values to `in_dir' and `out_dir' for all points.
+
+2014-05-11 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix crash with font `CabinSketch-Bold.ttf'.
+
+ Problem reported by Ralf S. Engelschall <rse@engelschall.com>.
+
+ * src/autofit/afhints.c (af_glyph_hints_reload): Fix threshold for
+ finding first non-near point.
+ Properly initialize non-near point deltas.
+
+2014-05-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add blue-zone support for Devanagari.
+
+ This essentially moves the Devanagari script from the `Indic' hinter
+ to the `Latin' hinter. Thanks to Girish Dalvi
+ <girish.dalvi@gmail.com> for guidance with blue zone characters!
+
+ * src/autofit/afblue.dat: Add blue zone data for Devanagari.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Devanagari standard characters and
+ move data out of AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afranges.c: Move Devanagari data out of
+ AF_CONFIG_OPTION_INDIC block.
+ Move U+20B9, (new) Rupee sign, from Latin to Devanagari.
+
+ * src/autofit/afstyles.h: Update Devanagari data; in particular, use
+ AF_WRITING_SYSTEM_LATIN.
+
+2014-05-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix handling of neutral blue zones in stems.
+
+ * src/autofit/afhints.h (AF_Edge_Flags): New value
+ `AF_EDGE_NEUTRAL'.
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_blue_edges): Trace
+ neutral blue zones with AF_EDGE_NEUTRAL.
+ (af_latin_hint_edges): Skip neutral blue zones if necessary.
+
+2014-04-28 Werner Lemberg <wl@gnu.org>
+
+ [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-25 Werner Lemberg <wl@gnu.org>
+
+ * 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-23 Werner Lemberg <wl@gnu.org>
+
+ * 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-22 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/pngshim.c (error_callback): s/longjmp/ft_longjmp/.
+
+2014-04-20 Werner Lemberg <wl@gnu.org>
+
+ [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-17 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ 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-15 Werner Lemberg <wl@gnu.org>
+
+ [afblue.pl]: Minor improvements.
+
+ * src/tools/afblue.pl: Allow whitespace before comments.
+ Ignore whitespace in strings.
+
+2014-04-14 Werner Lemberg <wl@gnu.org>
+
+ [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-13 David Weber <weber.aulendorf@googlemail.com>
+
+ [smooth] Fix stand-alone compilation.
+
+ * src/smooth/ftgrays.c (FT_BEGIN_STMNT, FT_END_STMNT): Define.
+
+2014-04-12 Werner Lemberg <wl@gnu.org>
+
+ [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-05 Werner Lemberg <wl@gnu.org>
+
+ [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-03 Werner Lemberg <wl@gnu.org>
+
+ 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-03-27 Werner Lemberg <wl@gnu.org>
+
+ 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-24 Werner Lemberg <wl@gnu.org>
+
+ 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-22 Werner Lemberg <wl@gnu.org>
+
+ 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-20 Werner Lemberg <wl@gnu.org>
+
+ CMakeLists.txt: Another fix for include directories.
+
+ Problem reported by Taylor Holberton <taylorcholberton@gmail.com>.
+
+2014-03-19 Werner Lemberg <wl@gnu.org>
+
+ CMakeLists.txt: Fix include directories.
+
+ Problem reported by Taylor Holberton <taylorcholberton@gmail.com>.
+
+2014-03-19 Werner Lemberg <wl@gnu.org>
+
+ 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-18 Sean McBride <sean@rogue-research.com>
+ Werner Lemberg <wl@gnu.org>
+
+ 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-17 Werner Lemberg <wl@gnu.org>
+
+ 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-14 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.raw: Don't show error messages of `which'.
+
+2014-03-09 Alan Coopersmith <alan.coopersmith@oracle.com>
+
+ Fix cppcheck 1.64 warning.
+
+ * src/autofit/afglobal.c (af_face_globals_new): Catch NULL pointer
+ dereference in case of error.
+
+2014-03-09 Sean McBride <sean@rogue-research.com>
+
+ * src/sfnt/ttcmap.c (tt_face_build_cmaps): Remove clang warning.
+
+2014-03-06 Werner Lemberg <wl@gnu.org>
+
+ * 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 Werner Lemberg <wl@gnu.org>
+
+ 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 Sean McBride <sean@rogue-research.com>
+
+ Remove more clang analyzer warnings.
+
+ * src/bdf/bdflib.c (_bdf_readstream), src/truetype/ttgload.c
+ (TT_Load_Glyph): Remove dead stores.
+
+2014-03-05 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.raw: Simplify.
+
+2014-03-05 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Fix a bug in configure in library dependency setting
+ Reported in https://bugs.freedesktop.org/show_bug.cgi?id=75652.
+
+ * builds/unix/configure.raw: Use `x"${xxx}" != xno' style.
+
+2014-03-04 Werner Lemberg <wl@gnu.org>
+
+ 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 Sean McBride <sean@rogue-research.com>
+
+ 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-03 Werner Lemberg <wl@gnu.org>
+
+ Rewrite library option handling in `configure'.
+
+ 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.
+ * docs/freetype-config.1: Document `--static'.
+
+ * builds/unix/freetype2.in, builds/unix/unix-def.in: Updated.
+
+2014-03-01 Werner Lemberg <wl@gnu.org>
+
+ 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 Werner Lemberg <wl@gnu.org>
+
+ * docs/INSTALL.CROSS: Revised and updated.
+
+2014-03-01 Werner Lemberg <wl@gnu.org>
+
+ 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 Werner Lemberg <wl@gnu.org>
+
+ 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 Werner Lemberg <wl@gnu.org>
+
+ 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-02-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [cff] Math simplifications.
+
+ * src/cf2blues.c (cf2_blues_init): Use `FT_MulDiv'.
+ * src/cf2ft.c (cf2_getScaleAndHintFlag): Use simple division.
+
+2014-02-28 Dave Arnold <darnold@adobe.com>
+
+ [cff] 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 Dave Arnold <darnold@adobe.com>
+
+ [cff] 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-26 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [winfnt] Fix Savannah bug #41694.
+
+ * src/winfonts/winfnt.c (FNT_Load_Glyph): Check glyph offset.
+
+2014-02-26 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix Savannah bug #41693.
+
+ * src/cff/cffload.c (CFF_Load_FD_Select): Reject empty array.
+
+2014-02-26 Werner Lemberg <wl@gnu.org>
+
+ [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-17 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [autofit] Fix `make multi' compilation.
+
+ * src/autofit/hbshim.c: Include `afglobal.h' and `aftypes.h'.
+
+2014-02-19 Werner Lemberg <wl@gnu.org>
+ Simon Bünzli <zeniko@gmail.com>
+
+ 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 Simon Bünzli <zeniko@gmail.com>
+
+ Fix Savannah bug #41590.
+
+ * src/type1/t1load.c (parse_encoding): Protect against invalid
+ number.
+
+2014-02-12 Dave Arnold <darnold@adobe.com>
+
+ [cff] Optimize by using `FT_MulDiv'.
+ Suggested by Alexei.
+
+ * src/cff/cf2font.c (cf2_computeDarkening): Do it.
+
+2014-02-12 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #41465.
+
+ * builds/unix/unix-def.in (CLEAN): Add `freetype-config'.
+ (DISTCLEAN): Remove `freetype-config'.
+
+2014-02-08 Sean McBride <sean@rogue-research.com>
+
+ Fix clang static analyzer and compiler warnings.
+
+ * src/autofit/afhints.c (af_glyph_hints_align_weak_points),
+ src/autofit/afloader (af_loader_load_g) <FT_GLYPH_FORMAT_COMPOSITE>,
+ src/base/ftcalc.c (FT_MSB), src/base/ftoutln.c
+ (FT_Outline_Decompose), src/bdf/bdfdrivr.c (bdf_interpret_style),
+ src/cff/cffparse.c (cff_parse_integer), src/cid/cidparse.c
+ (cid_parser_new), src/pfr/pfrload.c (pfr_phy_font_load),
+ src/raster/ftraster.c (Decompose_Curve), src/sfnt/sfdriver.c
+ (sfnt_get_ps_name), src/sfnt/ttcmap.c (tt_cmap12_next,
+ tt_cmap13_next), src/smooth/ftgrays.c (gray_hline): Remove dead
+ code.
+
+ * src/autofit/afmodule.c (af_property_get_face_globals,
+ af_property_set, af_property_get), src/base/ftbitmap.c
+ (ft_gray_for_premultiplied_srgb_bgra): Make functions static.
+
+ * src/base/ftobjs.c (ft_remove_renderer): Protect against
+ library == NULL.
+ (ft_property_do): Make function static.
+
+ * src/base/ftrfork.c: Include `ftbase.h'.
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbix_image)
+ [!FT_CONFIG_OPTION_USE_PNG], src/type1/t1gload.c
+ (T1_Compute_Max_Advance): Avoid compiler warning.
+
+ * src/truetype/ttinterp.c (TT_New_Context): Reduce scope of
+ variable.
+
+2014-02-08 Werner Lemberg <wl@gnu.org>
+
+ Fix Windows build directories.
+
+ The build target is now `windows' instead of `win32'.
+
+ Problem reported by Nickolas George <darknova.clan@gmail.com>.
+
+ * builds/modules.mk: Don't use `win32' and `win16' (!) but
+ `windows'.
+
+ * builds/windows/detect.mk, builds/windows/win32-def.mk:
+ s/win32/windows/.
+
+2014-02-08 Eugen Sawin <esawin@mozilla.com>
+
+ Fix Savannah bug #41507.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap)
+ [!FT_CONFIG_OPTION_USE_PNG] <17, 17, 19>: Fix error handling.
+
+2014-02-08 Dave Arnold <darnold@adobe.com>
+
+ [cff] Fix minor performance bug.
+
+ * src/cff/cf2font.c (cf2_font_setup): Darkening amount and blue zone
+ calculations are now cached and not recomputed on each glyph.
+
+2014-02-05 Werner Lemberg <wl@gnu.org>
+
+ Fix problems with perl 5.8.8 as distributed with current MinGW.
+
+ * src/tools/afblue.pl: Work-around for Perl bug #63402.
+ (string_re): Avoid `possessive quantifiers', which have been
+ introduced in Perl version 5.10.
+
+2014-02-04 Werner Lemberg <wl@gnu.org>
+
+ Fix compilation with MinGW.
+
+ Right now, compilation out of the box with latest MinGW is broken
+ due to bugs in header files of mingwrt 4.0.3 in strict ANSI mode,
+ cf.
+
+ https://sourceforge.net/p/mingw/bugs/2024/
+ https://sourceforge.net/p/mingw/bugs/2046/
+
+ * builds/unix/configure.raw: Don't set `-ansi' flag for MinGW.
+
+2014-02-04 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Minor fix.
+
+ * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
+ src/autofit/aflatin.c (af_latin_metrics_init_widths): Fix handling
+ of alternative standard characters.
+ This also fixes a compilation warning in non-debug mode.
+
+2014-02-03 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix Savannah bug #41363.
+
+ * src/cff/cf2ft.c (cf2_checkTransform): Convert assertion into
+ parameter check.
+ (cf2_decoder_parse_charstrings): Call `cf2_checkTransform' only if
+ we are scaling the outline.
+ (cf2_getPpemY): Remove problematic assertion.
+
+2014-01-26 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Introduce two more slots for standard characters.
+
+ This is useful for OpenType features like `c2sc' (caps to small
+ caps) that don't have lowercase letters by definition, or other
+ features that mainly operate on numerals.
+
+ * src/autofit/afscript.h: Add more standard characters.
+
+ * src/autofit/aftypes.h: Update use of `SCRIPT' macro.
+ (AF_ScriptClassRec): Add members to hold two more standard
+ characters.
+ (AF_DEFINE_SCRIPT_CLASS): Updated.
+
+ * src/autofit/afglobal.c, src/autofit/afglobal.h,
+ * src/autofit/afpic.c, src/autofit/afranges.h, src/autofit/hbshim.c:
+ Update use of `SCRIPT' macro.
+
+ * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
+ src/autofit/aflatin.c (af_latin_metrics_init_widths): Scan two more
+ standard characters.
+
+2014-01-24 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #41320.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues)
+ <AF_LATIN_IS_LONG_BLUE>: Avoid negative index of `last'.
+
+2014-01-23 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #41310.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap) <glyph_format==5>:
+ Don't check metrics, which this format doesn't have.
+ This is another correction to the commit from 2013-11-21.
+
+2014-01-23 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #41309.
+
+ * src/type1/t1load.c (t1_parse_font_matrix): Properly handle result
+ of `T1_ToFixedArray'.
+
+ * src/cid/cidload.c (cid_parse_font_matrix): Synchronize with
+ `t1_parse_font_matrix'.
+
+ * src/type42/t42parse.c (t42_parse_font_matrix): Synchronize with
+ `t1_parse_font_matrix'.
+ (t42_parse_encoding): Synchronize with `t1_parse_encoding'.
+
+ * src/psaux/psobjs.c (ps_parser_load_field) <T1_FIELD_TYPE_BBOX>,
+ <T1_FIELD_TYPE_MMOX>: Properly handle result of `ps_tofixedarray'.
+
+2014-01-22 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/hbshim.c (af_get_coverage): Fix memory leaks.
+
+2014-01-16 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve tracing of style coverages.
+
+ * include/internal/fttrace.h: Add `afglobal' for tracing style
+ coverages.
+
+ * src/autofit/afglobal.c: Include FT_INTERNAL_DEBUG_H.
+ (FT_COMPONENT): Define.
+ (af_face_globals_compute_style_coverage): Trace `gstyles' array
+ data.
+
+2014-01-09 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #41158.
+
+ * builds/unix/install.mk (install): Create man page directory.
+
+2014-01-08 Chongyu Zhu <lembacon@gmail.com>
+
+ [arm] Fix Savannah bug #41138, part 2.
+
+ * builds/unix/ftconfig.in (FT_MulFix_arm), include/config/ftconfig.h
+ (FT_MulFix_arm), src/truetype/ttinterp.c (TT_MulFix14_arm): Fix
+ preprocessor conditionals for `add.w'.
+
+2014-01-08 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix Savannah bug #41138, part 1.
+
+ * src/tools/afblue.pl <Handling #endif>: Produce correct auxiliary
+ enumeration names for generated `#else'.
+
+ * src/autofit/afblue.h: Regenerated.
+
+2014-01-06 Werner Lemberg <wl@gnu.org>
+
+ Add manual page for `freetype-config'.
+ Contributed by Nis Martensen <nis.martensen@web.de>.
+
+ * docs/freetype-config.1: New file.
+
+ * builds/unix/unix-def.in (mandir): Define.
+ * builds/unix/install.mk (install, uninstall): Handle manpage.
+
+2014-01-05 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Minor fixes for `afblue.pl'.
+
+ * src/tools/afblue.pl (aux_name): Don't use `reverse'.
+ <Handling #endif>: Use proper indentation for generated `#else'.
+
+ * src/autofit/afblue.h: Regenerated.
+
+2014-01-04 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix Indic scripts.
+
+ Split the single, incorrect Indic entry into separate scripts so
+ that the covered ranges are the same: Bengali, Devanagari, Gujarati,
+ Gurmukhi, Kannada, Limbu, Malayalam, Oriya, Sinhala, Sundanese,
+ Syloti Nagri, Tamil, Telugu, and Tibetan. At the same time, remove
+ entries for Meetei Mayek and Sharada – the Unicode ranges were
+ incorrect (and nobody has complained about that), fonts are scarce
+ for those scripts, and the Indic auto-hinter support is rudimentary
+ anyways.
+
+ * src/autofit/afscript.h: Updated, using AF_CONFIG_OPTION_INDIC and
+ AF_CONFIG_OPTION_CJK.
+
+ * src/autofit/afstyles.h (STYLE_DEFAULT_INDIC): New auxiliary macro.
+ Use it, together with AF_CONFIG_OPTION_INDIC and
+ AF_CONFIG_OPTION_CJK, to update.
+
+ * src/autofit/afranges.c [AF_CONFIG_OPTION_INDIC]: Updated.
+ [!AF_CONFIG_OPTION_INDIC, !AF_CONFIG_OPTION_CJK]: Removed.
+ Sort entries by tags.
+
+2014-01-03 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Thinko.
+
+ * src/autofit/hbshim.c (af_get_char_index): Similar to
+ `af_get_coverage', reject glyphs which are not substituted.
+
+2014-01-03 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix handling of default coverages.
+
+ With this commit, the implementation of coverage handling is
+ completed.
+
+ * src/autofit/hbshim.c (af_get_coverage): Exit early if nothing to
+ do.
+ Reject coverages which don't contain appropriate glyphs for blue
+ zones.
+
+2014-01-03 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix handling of default coverages.
+
+ * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
+ First handle non-default coverages, then the default coverage of the
+ default script, and finally the other default coverages.
+
+2014-01-03 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix scaling of HarfBuzz shaping.
+
+ * src/autofit/hbshim.c (af_get_char_index): Scale to units per EM.
+
+2014-01-03 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Better ftgrid support.
+
+ * src/autofit/afhints.c (af_glyph_hints_get_segment_offset): Add
+ parameters `is_blue' and `blue_offset'.
+
+2014-01-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Remove some styles.
+
+ * src/autofit/afcover.h: Remove coverages for alternative fractions,
+ denominators, numerators, and fractions.
+
+ * src/autofit/afstyles.h (META_STYLE_LATIN): Updated.
+
+2014-01-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add more styles.
+
+ * src/autofit/afstyles.h (STYLE_LATIN, META_STYLE_LATIN): New
+ auxiliary macros; use them to define styles for Cyrillic, Greek, and
+ Latin.
+
+ * src/autofit/afcover.h: Remove coverage for oldstyle figures.
+ Since those digits are used in combination with ordinary letters, it
+ makes no sense to handle them separately.
+
+ * src/autofit/afglobal.c (af_face_globals_get_metrics): Don't limit
+ `options' parameter to 4 bits.
+
+2014-01-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix style assignments to glyphs.
+
+ * src/autofit/hbshim.c (af_get_coverage)
+ [FT_CONFIG_OPTION_USE_HARFBUZZ]: Scan GPOS coverage of features also
+ so that we can skip glyphs that have both GSUB and GPOS data.
+
+2014-01-01 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/hbshim.c: s/{lookups,glyphs}/gsub_{lookups,glyphs}/.
+
+2014-01-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Implement and use `af_get_char_index' with HarfBuzz.
+
+ * src/autofit/hbshim.c (COVERAGE) [FT_CONFIG_OPTION_USE_HARFBUZZ]:
+ Redefine to construct HarfBuzz features.
+ (af_get_char_index) [FT_CONFIG_OPTION_USE_HARFBUZZ]: Rewritten.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Use
+ `y_offset' to adjust `best_y'.
+
+2013-12-31 Werner Lemberg <wl@gnu.org>
+
+ [autofit] s/AF_STYLE_...._DEFAULT/AF_STYLE_...._DFLT/i.
+
+2013-12-31 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix interface of `af_get_char_index'.
+
+ * src/autofit/hbshim.c (af_get_char_index): Return error value.
+ Add argument for y offset (to be used in a yet-to-come patch).
+
+ * src/autofit/hbshim.h, src/autofit/afcjk.c,
+ src/autofit/aflatin.c: Updated.
+
+2013-12-30 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Don't combine multiple features into one set.
+
+ Combining them, as originally envisioned, would lead to much more
+ complicated code, as investigations have shown meanwhile. The major
+ drawback is that we run out of available style slots much earlier.
+ However, this is only a theoretical issue since we don't support a
+ large number of scripts currently.
+
+ * src/autofit/afcover.h: Replace `COVERAGE_{1,2,3}' macros with
+ a single-element `COVERAGE' macro, sort the elements by the feature
+ tags, and add entry for `ruby'.
+
+ * src/autofit/aftypes.h: Updated.
+ * src/autofit/hbshim.c: Updated.
+
+2013-12-28 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Code shuffling to reduce use of cpp macros.
+
+ * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
+ Call `af_get_coverage' unconditionally.
+
+ * src/autofit/autofit.c: Include `hbshim.c' unconditionally.
+
+ * src/autofit/hbshim.c (af_get_coverage)
+ [!FT_CONFIG_OPTION_USE_HARFBUZZ]: Provide dummy function.
+
+ * src/autofit/hbshim.h: Provide function declarations
+ unconditionally.
+
+2013-12-28 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add wrapper function for `FT_Get_Char_Index'.
+
+ Yet-to-come changes will provide HarfBuzz functionality for the new
+ function.
+
+ * src/autofit/hbshim.c (af_get_char_index): New function.
+ * src/autofit/hbshim.h: Updated.
+
+ * 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.
+
+2013-12-28 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Use `global' HarfBuzz font object.
+
+ We now use `hb_font' instead of `hb_face' since yet-to-come changes
+ need this.
+
+ * src/autofit/afglobal.h: Include `hbshim.h'.
+ (AF_FaceGlobalsRec) [FT_CONFIG_OPTION_USE_HARFBUZZ]: New member
+ `hb_font'.
+
+ * src/autofit/afglobal.c (af_face_globals_new)
+ [FT_CONFIG_OPTION_USE_HARFBUZZ]: Create `hb_font'.
+ (af_face_globals_free) [FT_CONFIG_OPTION_USE_HARFBUZZ]: Destroy
+ `hb_font'.
+
+ * src/autofit/hbshim.h: Include HarfBuzz headers.
+
+ * src/autofit/hbshim.c: Include `hbshim.h' instead of HarfBuzz
+ headers.
+ (af_get_coverage): Updated.
+
+2013-12-27 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Handle `DFLT' OpenType script for coverages.
+
+ * include/ftautoh.h: Document new `default-script' property.
+
+ * src/autofit/hbshim.c (af_get_coverage): Use `AF_FaceGlobals' for
+ type of first parameter.
+ (script_tags): Add one more element.
+ (af_get_coverage): Adjust `script_tags' to handle `DFLT' script tag.
+
+ * src/autofit/hbshim.h: Updated.
+
+ * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
+ Updated.
+
+ * src/autofit/afglobal.h (AF_SCRIPT_DEFAULT): New macro.
+
+ * src/autofit/afmodule.h (AF_ModuleRec): New `default_script'
+ member.
+
+ * src/autofit/afmodule.c (af_property_set, af_property_get): Handle
+ `default-script' property.
+ (af_autofitter_init): Updated.
+
+2013-12-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [ftrfork] Fix the face order difference between POSIX and Carbon.
+
+ The fragmented resources in Suitcase and .dfont should be reordered
+ when `POST' resource for Type1 is being restored, but reordering of
+ sfnt resources induces the different face order. Now the ordering
+ is restricted to `POST' resource only, to prevent the different
+ order issue (e.g. the face index in the fontconfig cache generated
+ with Carbon framework is incompatible with that by FreeType 2
+ without Carbon framework.) Found by Khaled Hosny and Hin-Tak Leung.
+
+ https://lists.gnu.org/archive/html/freetype-devel/2013-02/msg00035.html
+ https://lists.gnu.org/archive/html/freetype-devel/2013-12/msg00027.html
+
+ * src/base/ftrfork.c (FT_Raccess_Get_DataOffsets): Add a switch
+ `sort_by_res_id' to control the fragmented resource ordering.
+ * include/internal/ftrfork.h: Declare new switch.
+ * src/base/ftobjs.c (IsMacResource): Enable the sorting for `POST'
+ resource, and disable the sorting for `sfnt' resource.
+
+2013-12-25 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #40997.
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Only use OR operator to
+ adjust face flags since FT_FACE_FLAG_EXTERNAL_STREAM might already
+ be set.
+ * src/cff/cffobjs.c (cff_face_init): Ditto.
+ * src/cid/cidobjs.c (cid_face_init): Ditto.
+ * src/pcf/pcfread.c (pcf_load_font): Ditto.
+ * src/pfr/pfrobjs.c (pfr_face_init): Ditto.
+ * src/type1/t1objs.c (T1_Face_Init): Ditto.
+ * src/type42/t42objs.c (T42_Face_Init): Ditto.
+ * src/winfonts/winfnt.c (FNT_Face_Init): Ditto.
+
+2013-12-21 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Introduce `coverages'.
+
+ Coverages are the interface to the HarfBuzz library to access
+ OpenType features for handling glyphs not addressable by the cmap.
+
+ Right now, compilation of HarfBuzz is only added to the development
+ build. A solution for standard build mode will be delayed until
+ HarfBuzz gets split into two libraries to avoid mutual dependencies
+ between FreeType and HarfBuzz.
+
+ Note that this is only a first step in handling coverages, basically
+ providing the framework only. Code for handling selected OpenType
+ features (this is, actually using the data in `afcover.h') will
+ follow.
+
+ * devel/ftoption.h, include/config/ftoption.h
+ (FT_CONFIG_OPTION_USE_HARFBUZZ): New macro.
+
+ * src/autofit/hbshim.c, src/autofit/hbshim.h, src/autofit/afcover.h:
+ New files.
+
+ * src/autofit/afscript.h: Add HarfBuzz script name tags.
+
+ * src/autofit/afstyles.h: Add default coverage enumeration values.
+
+ * src/autofit/aftypes.h: Update use of `SCRIPT' and `STYLE' macros.
+ (AF_Coverage): New enumeration (generated by `afcover.h').
+ (AF_StyleClassRec): New member `coverage'.
+ (AF_DEFINE_STYLE_CLASS): Updated.
+
+ * include/internal/fttrace.h: Add `afharfbuzz' for tracing coverage
+ data.
+
+ * src/autofit/afglobal.h: Update use of `SCRIPT' and `STYLE' macros.
+ (AF_SCRIPT_FALLBACK): Renamed to ...
+ (AF_STYLE_FALLBACK): ... this.
+
+ * src/autofit/afglobal.c: Include `hbshim.c'.
+ Update use of `SCRIPT' and `STYLE' macros.
+ (af_face_globals_compute_style_coverage)
+ [FT_CONFIG_OPTION_USE_HARFBUZZ]: Call `af_get_coverage'.
+ Update.
+
+ * src/autofit/afmodule.h (AF_ModuleRec):
+ s/fallback_script/fallback_style/.
+
+ * src/autofit/afmodule.c (af_property_set): Adapt handling of
+ `fallback-script' property to set a fallback style.
+ (af_property_get, af_autofitter_init): Updated.
+
+ * src/autofit/afpic.c: Update use of `SCRIPT' and `STYLE' macros.
+
+ * src/autofit/afranges.h: Update use of `SCRIPT' macro.
+
+ * src/autofit/autofit.c [FT_CONFIG_OPTION_USE_HARFBUZZ]: Include
+ `hbshim.c'.
+
+ * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `hbshim.c'.
+ (AUTOF_DRV_H): Add `afcover.h'.
+
+ * builds/freetype.mk (INCLUDE_FLAGS) [DEVEL_DIR]: Use pkg-config for
+ all libraries needed by FreeType.
+
+2013-12-21 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #40975 (sort of).
+
+ * src/truetype/ttinterp.c (Ins_IP): Fix sign typo to make FreeType
+ behave the same as the Windows TrueType engine for the invalid case.
+
+2013-12-21 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Make PIC mode work actually.
+
+ * src/autofit/afpic.h (AFModulePIC): Fix array sizes to fit the
+ enumeration values automatically generated by including `afscript.h'
+ and friends.
+
+ * src/autofit/afpic.c (autofit_module_class_pic_init): Updated.
+
+2013-12-21 Werner Lemberg <wl@gnu.org>
+
+ Fix PIC linking.
+
+ * include/internal/ftrfork.h (CONST_FT_RFORK_RULE_ARRAY_BEGIN): Fix
+ generated function name.
+
+ * src/base/basepic.c (FT_Init_Table_raccess_guess_table): Rename
+ to ...
+ (FT_Init_Table_ft_raccess_guess_table): ... this so that the
+ function name correctly corresponds to what the macro framework
+ expects.
+
+ * src/psnames/rules.mk (PSNAMES_DRV_SRC_S): Use correct file name so
+ that PIC functions are compiled also.
+
+2013-12-21 Werner Lemberg <wl@gnu.org>
+
+ [base] Add missing dependencies to Makefile.
+
+ * src/base/rules.mk (BASE_SRC): Add `basepic.c' and `ftpic.c'.
+ (BASE_H): Add `basepic.h'.
+
+2013-12-20 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix PIC compilation.
+
+ * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
+ src/autofit/aflatin.c (af_latin_metrics_init_widths)
+ [FT_CONFIG_OPTION_PIC]: Declare `globals'.
+
+ * src/autofit/afglobal.c: Always call AF_DEFINE_SCRIPT_CLASS, and
+ AF_DEFINE_STYLE_CLASS.
+
+ * src/autofit/afpic.c: Include `afglobal.h'.
+ (autofit_module_class_pic_init): Typo.
+
+ * src/autofit/aftypes.h (AF_DEFINE_SCRIPT_CLASS,
+ AF_DEFINE_STYLE_CLASS): Don't use the same identifier for macro
+ parameter and structure member.
+
+2013-12-20 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Introduce `styles'.
+
+ This is the new top-level structure for handling glyph input data;
+ scripts are now defined separately.
+
+ * src/autofit/aftypes.h (SCRIPT): Updated.
+ (AF_ScriptClassRec): Move `blue_stringset' and `writing_system'
+ members to ...
+ (AF_Style_ClassRec): ... this new structure.
+ (AF_Style): New enumeration.
+ (AF_StyleMetricsRec): Replace `script' enumeration with
+ `style_class' pointer.
+ (AF_DEFINE_SCRIPT_CLASS, AF_DECLARE_SCRIPT_CLASS): Updated.
+ (AF_DEFINE_STYLE_CLASS, AF_DECLARE_STYLE_CLASS): New macros.
+
+ * src/autofit/afstyles.h: New file, using data from `afscript.h'.
+ * src/autofit/afscript.h: Updated.
+
+ * src/autofit/afcjk.c (af_cjk_metrics_init_widths,
+ af_cjk_metrics_init_blues, af_cjk_hint_edges): Updated.
+
+ * src/autofit/afglobal.c (SCRIPT): Updated.
+ (STYLE): Redefine macro to load `afstyles.h'.
+ (af_script_names) [FT_DEBUG_LEVEL_TRACE]: Replace with...
+ (af_style_names): ... this array.
+ (af_face_globals_compute_script_coverage): Renamed to...
+ (af_face_globals_compute_style_coverage): ... this.
+ Updated.
+ (af_face_globals_new, af_face_globals_free,
+ af_face_globals_get_metrics): Updated.
+
+ * src/autofit/afglobal.h (SCRIPT): Updated.
+ (STYLE): Redefine macro to load `afstyles.h'.
+ (AF_SCRIPT_FALLBACK): Update definition. This will get more
+ refinements with later on.
+ (AF_SCRIPT_UNASSIGNED): Replace with...
+ (AF_STYLE_UNASSIGNED): ... this macro.
+ (AF_FaceGlobalsRec): Updated.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_widths,
+ af_latin_metrics_init_blues, af_latin_metrics_scale_dim,
+ af_latin_hint_edges): Updated.
+
+ * src/autofit/aflatin2.c (af_latin2_metrics_init_widths): Updated.
+ (af_ltn2_uniranges): Removed.
+
+ * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
+ Updated.
+
+ * src/autofit/afpic.c (autofit_module_class_pic_init): Updated.
+ * src/autofit/afpic.h (AF_STYLE_CLASSES_GET): New macro.
+ (AFModulePIC): Add `af_style_classes' and `af_style_classes_rec'
+ members.
+
+ * src/autofit/afranges.h: Updated.
+
+ * src/autofit/rules.mk (AUTOF_DRV_H): Add `afstyles.h'.
+
+2013-12-19 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Factor scripts and uniranges out of writing system files.
+
+ * src/autofit/afranges.c, src/autofit/afranges.h: New files.
+
+ * src/autofit/afscript.h: Extend `SCRIPT' macro with more
+ parameters, taking data from the writing system files.
+
+ * src/autofit/aftypes.h: Updated.
+
+ * src/autofit/afglobal.c: Include `afranges.h'.
+ Load `afscript.h' to call AF_DEFINE_SCRIPT_CLASS.
+ * src/autofit/afglobal.c: Include `afranges.h'.
+ Load `afscript.h' to call AF_DECLARE_SCRIPT_CLASS.
+
+ * src/autofit/afcjk.c, src/autofit/afcjk.h: Updated.
+ * src/autofit/afdummy.c, src/autofit/afdummy.h: Updated.
+ * src/autofit/afindic.c, src/autofit/afindic.h: Updated.
+ * src/autofit/aflatin.c, src/autofit/aflatin.h: Updated.
+ * src/autofit/aflatin2.c, src/autofit/aflatin2.h: Updated.
+
+ * src/autofit/afpic.c: Updated.
+
+ * src/autofit/autofit.c: Include `afranges.c'.
+ * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `afranges.c'.
+
+2013-12-18 Werner Lemberg <wl@gnu.org>
+
+ [autofit] More code orthogonality.
+
+ * src/autofit/aftypes.h (AF_StyleMetrics): Replace `script_class'
+ pointer to an `AF_ScriptClass' structure with `script' index of type
+ `AF_Script'.
+ Move some code around.
+
+ * src/autofit/afcjk.c: Include `afpic.h'.
+ (af_cjk_metrics_init_widths, af_cjk_metrics_init_blues,
+ af_cjk_hint_edges): Updated.
+
+ * src/autofit/aflatin.c: Include `afpic.h'.
+ (af_latin_metrics_init_widths, af_latin_metrics_init_blues,
+ af_latin_metrics_scale_dim, af_latin_hint_edges): Updated.
+
+ * src/autofit/afglobal.c (af_face_globals_get_metrics): Updated.
+
+ * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
+ Updated.
+
+2013-12-18 Werner Lemberg <wl@gnu.org>
+
+ [autofit] s/ScriptMetrics/StyleMetrics/.
+
+2013-12-18 Werner Lemberg <wl@gnu.org>
+
+ [autofit] s/script_{metrics,hints}/style_{metrics,hints}/
+
+2013-12-18 Werner Lemberg <wl@gnu.org>
+
+ [autofit] s/gscripts/gstyles/.
+
+2013-12-18 Werner Lemberg <wl@gnu.org>
+
+ [autofit] s/glyph_scripts/glyph_styles/.
+
+ This is the first commit of a series to create a new top-level
+ structure (a `style') for handling scripts, writing_systems, and
+ soon-to-be-added coverages.
+
+2013-12-17 Werner Lemberg <wl@gnu.org>
+
+ [autofit] s/AF_Script_/AF_WritingSystem_/ where appropriate.
+
+2013-12-11 Infinality <infinality@infinality.net>
+
+ [truetype] Simplify logic of rendering modes.
+
+ This patch unifies the subpixel and non-subpixel cases.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): Remove
+ `grayscale_hinting'; all code should refer to `grayscale' instead.
+ Remove unused `native_hinting' member.
+ Rename `subpixel_hinting' member to `subpixel.
+
+ * src/truetype/ttgload.c (TT_LOADER_SET_PP): Updated.
+ (tt_loader_init): Updated.
+
+ * src/truetype/ttinterp.c (Ins_GETINFO): Simplify.
+ Updated.
+
+2013-12-11 Werner Lemberg <wl@gnu.org>
+
+ [documentation] Add section how to include FreeType header files.
+ Problem reported by David Kastrup <dak@gnu.org>.
+
+ Surprisingly, a description how to do that was completely missing in
+ the API reference.
+
+ * include/freetype.h, include/ftchapters.h: New documentation
+ section `header_inclusion'.
+
+2013-12-10 Werner Lemberg <wl@gnu.org>
+
+ [autofit] s/DFLT/NONE/, s/dflt/none/.
+
+2013-12-10 Werner Lemberg <wl@gnu.org>
+
+ [autofit] s/AF_SCRIPT_NONE/AF_SCRIPT_UNASSIGNED/.
+
+2013-12-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix scaling of vertical phantom points.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Scale pp3.x and
+ pp4.x also.
+
+2013-12-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix positioning of composite glyphs.
+ Problem reported by Nigel Tao <nigeltao@golang.org>.
+
+ * src/truetype/ttgload.c (TT_Hint_Glyph): Remove code that shifts
+ the glyph (component) by a fractional value computed from the LSB
+ phantom point. This is wrong, since the horizontal phantom points
+ get rounded horizontally later on.
+
+2013-12-08 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.5.2 released.
+ =========================
+
+
+ Tag sources with `VER-2-5-2'.
+
+ * docs/VERSION.DLL: Update documentation and bump version number to
+ 2.5.2.
+
+ * 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.1/2.5.2/, s/251/252/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 2.
+
+ * builds/unix/configure.raw (version_info): Set to 17:1:11.
+ * CMakeLists.txt (VERSION_PATCH): Set to 2.
+ * docs/CHANGES: Updated.
+
+2013-12-07 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Next round in phantom point handling.
+
+ Greg Hitchcock provided very interesting insights into the
+ complicated history of the horizontal positions of the TSB and BSB
+ phantom points.
+
+ * src/truetype/ttgload.c (TT_LOADER_SET_PP)
+ [TT_CONFIG_OPTION_SUBPIXEL_HINTING]: Use `subpixel_hinting' and
+ `grayscale_hinting' flags as conditionals for the x position of TSB
+ and BSB.
+
+2013-12-05 Werner Lemberg <wl@gnu.org>
+
+ * builds/freetype.mk (FT_CC): Removed. Unused.
+
+2013-12-04 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix handling of embedded bitmap strikes.
+
+ This corrects the commit from 2013-11-21. Problem reported by
+ Andrey Panov <panov@canopus.iacp.dvo.ru>.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Fix logic to
+ detect excessive bytes for bit-aligned bitmaps.
+
+2013-12-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Remove dead code.
+
+ Reported by Nigel Tao <nigeltao@golang.org>.
+
+ * include/internal/tttypes.h (TT_LoaderRec): Remove unused
+ `preserve_pps' field.
+ * src/truetype/ttgload.c (TT_Hint_Glyph): Updated.
+
+2013-12-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix phantom point handling.
+
+ This is a further improvement to the changes from 2013-11-06.
+
+ * src/truetype/ttgload.c (TT_Hint_Glyph): Horizontal phantom points
+ are rounded horizontally, vertical ones are rounded vertically.
+ (TT_LOADER_SET_PP): The horizontal position of vertical phantom
+ points in pre-ClearType mode is zero, as shown in the OpenType
+ specification.
+
+2013-12-02 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix change from 2013-11-20.
+
+ Problem reported by Akira Kakuto <kakuto@fuk.kindai.ac.jp>.
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Protect call to
+ `Update_Max' with both a TT_USE_BYTECODE_INTERPRETER guard and a
+ `IS_HINTED' clause.
+ Also remove redundant check using `maxSizeOfInstructions' – in
+ simple glyphs, the bytecode data comes before the outline data, and
+ a validity test for this is already present.
+
+2013-11-27 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix use of dumping functions in `ftgrid' demo program.
+
+ * src/autofit/afhints.c (AF_DUMP) [FT_DEBUG_AUTOFIT]: New macro.
+ (af_glyph_hints_dump_points, af_glyph_hints_dump_segments,
+ af_glyph_hints_dump_edges) [FT_DEBUG_AUTOFIT]: Add parameter to
+ handle output to stdout.
+ Use AF_DUMP.
+ (af_glyph_hints_dump_points, af_glyph_hints_dump_segments,
+ af_glyph_hints_dump_edges) [!FT_DEBUG_AUTOFIT]: Removed.
+
+2013-11-25 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.5.1 released.
+ =========================
+
+
+ Tag sources with `VER-2-5-1'.
+
+ * docs/VERSION.DLL: Update documentation and bump version number to
+ 2.5.1.
+
+ * 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.0/2.5.1/, s/250/251/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
+
+ * builds/unix/configure.raw (version_info): Set to 17:0:11.
+ * CMakeLists.txt (VERSION_PATCH): Set to 1.
+ * docs/CHANGES, docs/release: Updated.
+
+2013-11-23 Werner Lemberg <wl@gnu.org>
+
+ [truetype]: Add tricky font names `hkscsiic.ttf' and `iicore.ttf'.
+
+ * src/truetype/ttobjs.c (TRICK_NAMES_MAX_CHARACTERS,
+ TRICK_NAMES_COUNT): Updated.
+ (trick_names): Add family name for the two fonts.
+
+2013-11-23 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Typo.
+
+2013-11-21 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Typo.
+
+ Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Return correct `bsize->width'
+ value if the font lacks an `OS/2' table.
+
+2013-11-21 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Improve handling of buggy embedded bitmap strikes.
+
+ We are now able to successfully load `AppleMyoungJo.ttf'.
+ Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Don't trust glyph
+ format.
+
+2013-11-20 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Don't trust `maxp's `maxSizeOfInstructions'.
+
+ Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>; see
+
+ https://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-16 Werner Lemberg <wl@gnu.org>
+
+ [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-13 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/ft2unix.h: Remove. No longer necessary.
+
+ * builds/unix/install.mk (install): Updated.
+
+2013-11-13 Werner Lemberg <wl@gnu.org>
+
+ 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.
+
+ * CMakeLists.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-12 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix last `truetype' commit.
+
+ * src/truetype/ttgload.c (tt_get_metrics): Preserve stream position.
+ Return error value.
+ (load_truetype_glyph): Updated.
+
+2013-11-10 Werner Lemberg <wl@gnu.org>
+
+ * docs/CMAKE: New dummy file.
+
+2013-11-08 Dave Arnold <darnold@adobe.com>
+
+ [cff] Fix for hints that touch.
+
+ * src/cff/cf2hints.c (cf2_hintmap_insertHint): Fix condition for
+ finding index value of insertion point.
+
+2013-11-06 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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-05 Werner Lemberg <wl@gnu.org>
+
+ * 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 Werner Lemberg <wl@gnu.org>
+
+ [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-02 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ 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-01 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2013-11-01 Werner Lemberg <wl@gnu.org>
+
+ [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-10-27 Werner Lemberg <wl@gnu.org>
+
+ [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-24 Werner Lemberg <wl@gnu.org>
+
+ * README.git, docs/CHANGES, docs/INSTALL: Updated.
+
+2013-10-24 John Cary <cary@txcorp.com>
+
+ Provide cmake support.
+
+ * CMakeLists.txt: New file.
+
+2013-10-23 Kenneth Miller <kennethadammiller@yahoo.com>
+ Werner Lemberg <wl@gnu.org>
+
+ 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-22 Werner Lemberg <wl@gnu.org>
+
+ * src/base/md5.c, src/base/md5.h: Updated to recent version.
+
+ * src/base/ftobjs.c: Updated; `md5.c' no longer uses `free'.
+
+ The canonical URL to get updates for this file is
+
+ http://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/popa3d/popa3d/md5/
+
+ as the author told me in private communication.
+
+2013-10-19 Werner Lemberg <wl@gnu.org>
+
+ [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/aflatin2.c: Updated.
+
+2013-10-19 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afblue.dat: s/MINOR/DESCENDER/.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+2013-10-16 Werner Lemberg <wl@gnu.org>
+
+ [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-16 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve tracing message for extra light flag.
+
+ * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Do it.
+
+2013-10-15 Chongyu Zhu <lembacon@gmail.com>
+
+ [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-12 Werner Lemberg <wl@gnu.org>
+
+ [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-03 Dave Arnold <darnold@adobe.com>
+
+ * src/cff/cf2font.c (cf2_computeDarkening): Avoid division by zero.
+
+ Note that the old code avoided using a region of the piecewise
+ linear function where the slope was zero. The recovery was to use a
+ different section of the function, which produced a different,
+ incorrect amount of darkening.
+
+2013-10-02 Darrell Bellert <darrell.bellert@hl.konicaminolta.us>
+
+ * src/sfnt/ttload.c (tt_face_load_pclt): Fix `pclt_fields'.
+
+2013-10-02 Dave Arnold <darnold@adobe.com>
+
+ * 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-09-29 Dave Arnold <darnold@adobe.com>
+
+ 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-25 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/aflatin.c (af_{grek,cyrl}_uniranges): Fix arrays.
+
+2013-09-25 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [bdf, pcf] Refuse non-zero face_index.
+
+ Suggested by Akira Tagoh, see
+
+ https://lists.gnu.org/archive/html/freetype/2013-09/msg00030.html
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Return `Invalid_Argument'
+ error if 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 later.
+
+2013-09-23 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #40090.
+
+ * src/autofit/afcjk.c (af_cjk_metrics_scale): Revert commit
+ 306f8c5d (from 2013-08-25) affecting this function.
+
+2013-09-22 Werner Lemberg <wl@gnu.org>
+
+ [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-20 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2013-09-20 Behdad Esfahbod <behdad@behdad.org>
+
+ 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-11 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * include/freetype/ftoutln.h: Correct FT_Outline_Get_Orientation
+ algorithm description.
+
+2013-09-11 Werner Lemberg <wl@gnu.org>
+
+ [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-08-28 Behdad Esfahbod <behdad@google.com>
+
+ [sfnt] Fix frame access while reading WOFF table directory.
+
+ * src/sfnt/sfobjs.c (woff_open_font): Using single memory frame
+ while reading the directory entries for the whole loop.
+
+2013-08-29 Werner Lemberg <wl@gnu.org>
+ Behdad Esfahbod <behdad@google.com>
+
+ Implement support for WOFF containers.
+
+ We simply synthesize a SFNT from the WOFF, create a memory stream
+ for the new data, and load the SFNT as usual.
+
+ Does NOT add any API to access WOFF metadata or private blocks.
+
+ * include/freetype/internal/tttypes.h (WOFF_HeaderRec,
+ WOFF_TableRec): New structures.
+
+ * include/freetype/tttags.h (TTAG_wOFF): New macro.
+
+ * src/base/ftobjs.c (FT_Open_Face): Set `stream' after calling
+ `open_face'.
+
+ * src/sfnt/sfobjs.c [FT_CONFIG_OPTION_SYSTEM_ZLIB]: Include
+ `FT_GZIP_H'.
+ (WRITE_BYTE, WRITE_USHORT, WRITE_ULONG): New temporary macros for
+ writing to a stream.
+ (sfnt_stream_close, compare_offsets, woff_open_font): New functions.
+ (sfnt_open_font): Handle `TTAG_wOFF'.
+ (sfnt_init_face): Set `stream' after calling `sfnt_open_font'.
+
+ * src/truetype/ttobjs.c (tt_face_init): Set `stream' after calling
+ `sfnt->init_face'.
+
+ * src/base/ftobjs.c (open_face): Use a pointer to FT_Stream as an
+ argument so that a changed stream survives.
+ Update callers.
+
+2013-08-28 Werner Lemberg <wl@gnu.org>
+
+ [gzip] New function `FT_Gzip_Uncompress'.
+
+ This is modeled after zlib's `uncompress' function. We need this
+ for WOFF support.
+
+ * include/freetype/ftgzip.h, src/gzip/ftgzip.c (FT_Gzip_Uncompress):
+ New function.
+
+ * src/gzip/rules.mk: Rewrite to better reflect dependencies.
+
+2013-08-28 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix `make multi' compilation.
+
+ * src/autofit/afblue.cin, src/autofit/afblue.c: Don't include
+ `afblue.h' but `aftypes.h'.
+ * src/autofit/afcjk.c: Don't include `aftypes.h' but `afglobal.h'.
+
+2013-08-28 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix C++ compilation.
+
+ * src/autofit/afglobal.c (af_face_globals_get_metrics),
+ src/autofit/afdummy.c (af_dflt_script_class), src/autofit/afindic.c
+ (af_deva_script_class): Use proper casts.
+
+2013-08-27 Behdad Esfahbod <behdad@google.com>
+
+ * src/sfnt/ttload.c (tt_face_load_font_dir): Fix sign typos.
+
+2013-08-27 Behdad Esfahbod <behdad@google.com>
+
+ FT_Open_Face: Improve external stream handling.
+
+ If the font's `clazz->init_face' function wants to swap to new
+ stream, handling of whether original stream was external could
+ result to either memory leak or double free. Mark externality into
+ face flags before calling `init_face' such that the clazz can handle
+ external streams properly.
+
+ * src/base/ftobjs.c (FT_Open_Face): Move code to set
+ FT_FACE_FLAG_EXTERNAL_STREAM to...
+ (open_face): This function.
+
+2013-08-27 Werner Lemberg <wl@gnu.org>
+
+ Remove `FT_SqrtFixed' function.
+
+ It's no longer used.
+
+ * include/freetype/internal/ftcalc.h, src/base/ftcalc.c: Do it.
+
+2013-08-27 Werner Lemberg <wl@gnu.org>
+
+ [autofit] While tracing, report script names instead of ID values.
+
+ * src/autofit/afglobal.c (af_script_names) [FT_DEBUG_LEVEL_TRACE]:
+ New array.
+ * src/autofit/afglobal.h: Updated.
+
+ * src/autofit/afcjk.c (af_cjk_metrics_init_widths,
+ af_cjk_hint_edges): Use `af_script_names'.
+ * src/autofit/aflatin.c (af_latin_metrics_init_widths,
+ af_latin_hint_edges): Ditto.
+
+2013-08-26 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Report used script while hinting a glyph.
+
+ * src/autofit/afcjk.c (af_cjk_hint_edges), src/autofit/aflatin.c
+ (af_latin_hint_edges): Implement it.
+
+2013-08-26 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add support for Hebrew script.
+
+ * src/autofit/afblue.dat: Add blue strings for Hebrew.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/aflatin.c (af_hebr_uniranges): New array.
+ (af_hebr_script_class): New script.
+ * src/autofit/aflatin.h, src/autofit/afscript.h: Updated.
+
+2013-08-26 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve tracing messages.
+
+ * src/autofit/afcjk.c (af_cjk_metrics_init_widths): Mention script
+ ID in tracing message.
+ (af_cjk_metrics_init_blues): Initialize `axis' outside of the inner
+ loop.
+ Improve tracing messages.
+ (af_cjk_hint_edges) [FT_DEBUG_LEVEL_TRACE]: New variable
+ `num_actions' to count hinting actions.
+ Improve tracing messages.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_widths): Mention
+ script ID in tracing message.
+ (af_latin_metrics_init_blues, af_latin_hint_edges): Improve tracing
+ messages.
+
+2013-08-26 Werner Lemberg <wl@gnu.org>
+
+ Better tracing of loaded glyphs.
+
+ Previously, the loading of a glyph was traced at level 4, if at all.
+ With this change, all font loading routines emit a tracing message
+ at level 1, making it easier to select tracing output (for example
+ using F2_DEBUG="any:1 afhints:7 aflatin:7").
+
+ * src/bdf/bdfdrivr.c (BDF_Glyph_Load): Add tracing message.
+ * src/cff/cffdrivr.c (cff_glyph_load): Ditto.
+ * src/cff/cffgload.c (cff_decoder_prepare): Improve tracing
+ messages.
+ * src/cid/cidgload.c (cid_load_glyph): Use level 1 for tracing
+ message.
+ * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Ditto.
+ * src/pfr/pfrobjs.c (pfr_slot_load): Add tracing message.
+ * src/truetype/ttgload.c (TT_Load_Glyph): Ditto.
+ * src/type1/t1gload.c (T1_Load_Glyph): Ditto.
+ * src/type42/t42objs.c (T42_GlyphSlot_Load): Ditto.
+ * src/winfonts/winfnt.c (FNT_Load_Glyph): Ditto.
+
+2013-08-26 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix script selection.
+
+ * src/autofit/afglobal.c (af_face_globals_get_metrics): Use
+ `AF_SCRIPT_DFLT', not value 0.
+ Simplify code.
+
+ * src/autofit/afscript.h: Sort by script name.
+
+2013-08-26 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Make `dummy' hinter work as expected.
+
+ * src/autofit/afdummy.c (af_dummy_hints_init): Properly set scaling
+ information.
+ (af_dummy_hints_apply): Scale the glyphs.
+
+2013-08-25 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Make `cjk' module use blue stringsets.
+
+ * src/autofit/afcjk.c (AF_CJK_MAX_TEST_CHARACTERS): Removed.
+ (af_cjk_hani_blue_chars): Removed.
+ (AF_CJK_BLUE_TYPE_*): Removed.
+ (af_cjk_metrics_init_blues): Replace AF_CJK_MAX_TEST_CHARACTERS with
+ AF_BLUE_STRING_MAX_LEN.
+ Change loops to use offsets (in file `afblue.h') into the new arrays
+ `af_blue_stringsets' and `af_blue_strings' (in file `afblue.c').
+ Instead of three dimensions (as used in the old blue string array)
+ we now use properties to do the same, saving one loop nesting level.
+
+ * src/autofit/afcjk.h: Remove old enumeration values superseded by
+ the new data in `afblue.h'.
+ (AF_CJK_IS_TOP_BLUE, AF_CJK_IS_HORIZ_BLUE, AF_CJK_IS_FILLED_BLUE,
+ AF_CJK_IS_RIGHT_BLUE): New macros, to be used in
+ `af_cjk_metrics_init_blues'.
+ (AF_CJK_BLUE_IS_RIGHT): Remove this now redundant enum value.
+ (AF_CJK_BLUE_IS_TOP): Renamed to...
+ (AF_CJK_BLUE_TOP): This.
+ (AF_CJK_MAX_BLUES): Remove.
+ (AF_CJKAxisRec): Updated.
+
+2013-08-25 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Typo.
+
+ * src/autofit/afblue.hin, src/autofit/afblue.c (GET_UTF8_CHAR): Use
+ cast.
+
+2013-08-25 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Synchronize `cjk' with `latin' module (and vice versa).
+
+ * src/autofit/afcjk.c (af_cjk_metrics_init_widths): Add tracing
+ messages.
+ (af_cjk_metrics_init_blues): Don't pass blue string array as
+ argument but use the global array directly.
+ Use `outline' directly.
+ Update and add tracing messages.
+ (af_cjk_metrics_init): Simplify code.
+ (af_cjk_metrics_scale_dim): Improve tracing message.
+ (af_cjk_metrics_scale): Synchronize.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_widths,
+ af_latin_metrics_init_blues): Improve and add tracing messages.
+
+2013-08-25 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Make `latin' module use blue stringsets.
+
+ * src/autofit/aflatin.c (AF_LATIN_MAX_TEST_CHARACTERS): Removed.
+ (af_latin_blue_chars): Removed.
+ (af_latin_metrics_init_blues): Replace AF_LATIN_MAX_TEST_CHARACTERS
+ with AF_BLUE_STRING_MAX_LEN.
+ Change loops to use offsets (in file `afblue.h') into the new arrays
+ `af_blue_stringsets' and `af_blue_strings' (in file `afblue.c').
+ Use `AF_LATIN_IS_SMALL_TOP_BLUE' macro.
+
+ * src/autofit/aflatin.h: Remove old enumeration values superseded by
+ the new data in `afblue.h'.
+ (AF_LATIN_IS_TOP_BLUE): Updated definition.
+ (AF_LATIN_IS_SMALL_TOP_BLUE): New macro.
+ (AF_LATIN_MAX_BLUES): Remove.
+ (AF_LatinAxisRec): Updated.
+
+2013-08-25 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add blue stringsets.
+
+ * src/autofit/aftypes.h: Include `afblue.h'.
+ (AF_ScriptClassRec): Add `blue_stringset' field.
+ (AF_DEFINE_SCRIPT_CLASS): Updated.
+
+ * src/autofit/autofit.c: Include `afblue.c'.
+
+ * src/autofit/afcjk.c (af_hani_script_class), src/autofit/afdummy.c
+ (af_dflt_script_class), src/autofit/afindic.c
+ (af_deva_script_class), src/autofit/aflatin.c
+ (af_latn_script_class), src/autofit/aflatin2.c
+ (af_ltn2_script_class): Updated.
+
+ * src/autofit/rules.mk (AUTOF_DRV_SRC): Add `afblue.c'.
+
+2013-08-25 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Introduce data file for blue strings.
+
+ The idea is to have a central file which gets processed by a Perl
+ script to create proper `.c' and `.h' files using templates. There
+ are two other reasons to do that:
+
+ . The data file should be easily readable. We use UTF-8 encoding
+ which then gets converted to single bytes.
+
+ . Since the number of supported scripts will increase soon, the
+ current usage of blue string arrays is a waste of space. Using
+ the Perl script it is possible to imitate jagged arrays,
+ defining enumeration constants as offsets into the arrays.
+
+ This commit only adds files without changing any functionality.
+
+ * src/autofit/afblue.dat: New data file.
+ * src/tools/afblue.pl: New Perl script for processing `afblue.dat'.
+
+ * src/autofit/afblue.cin, src/autofit/afblue.hin: New template files
+ for...
+ * src/autofit/afblue.c, src/autofit/afblue.c: New source files.
+ To avoid a dependency on Perl, we add them too.
+
+2013-08-19 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Enable new algorithm for `BBox_Cubic_Check'.
+
+ * src/base/ftbbox.c: Enable new BBox_Cubic_Check algorithm, remove
+ the old one.
+ Improve comments.
+
+2013-08-18 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/unix-def.in (freetype2.pc): Don't set executable bit.
+
+2013-08-18 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #39804.
+
+ * builds/unix/configure.raw (LIBPNG): Define and export.
+ * builds/unix/freetype-config.in, builds/unix/freetype2.in: Handle
+ libpng.
+
+2013-08-17 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Clean up BBox_Conic_Check.
+
+ * src/base/ftbbox.c (BBox_Conic_Check): Remove redundant checks for
+ extremum at the segment ends, which are already within the bbox.
+ Slightly modify calculations.
+
+2013-08-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Finish experimental (disabled) BBox_Cubic_Check implementation.
+
+ * src/base/ftbbox.c (BBox_Cubic_Check): Scale arguments to improve
+ accuracy and avoid overflows.
+
+2013-08-13 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Refactor experimental (disabled) BBox_Cubic_Check.
+
+ * src/base/ftbbox.c (BBox_Cubic_Check): Implement the minimum search
+ as the mirror image of the maximum search implemented here...
+ (update_max): New function.
+
+2013-08-06 John Tytgat <John.Tytgat@esko.com>
+
+ Fix Savannah bug #39702.
+
+ * src/cff/cffload.c (cff_index_get_pointers): Check for `cur_offset
+ != 0'; this stronger test is mandated by the CFF specification.
+ Fix test for INDEX structures which have one or more empty entries
+ at the end.
+
+2013-08-05 Werner Lemberg <wl@gnu.org>
+
+ Fix gcc pragmas, part 2.
+
+ * src/truetype/ttinterp.c (TT_MulFix14_long_long,
+ TT_DotFix14_long_long): `#pragma gcc diagnostic {push,pop}' has been
+ introduced with gcc version 4.6.
+
+2013-08-05 Werner Lemberg <wl@gnu.org>
+
+ Fix gcc pragmas.
+
+ * src/truetype/ttinterp.c (TT_MulFix14_long_long,
+ TT_DotFix14_long_long): Older gcc versions don't accept diagnostic
+ pragmas within a function body.
+
+2013-08-05 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #39700.
+
+ * builds/unix/ftconfig.h: Synchronize with
+ `include/freetype/config/ftconfig.h'.
+
+ * builds/vms/ftconfig.h: Ditto.
+ Make the differences to the master `ftconfig.h' file as small as
+ possible for easier maintenance.
+
+2013-08-05 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve handling of `near' points.
+
+ Points which are very near to each other are now marked as such.
+ The `weak' flag is then computed by using the `in' vector of the
+ first and the `out' vector of the last point of a group of near
+ points.
+
+ For example, this fixes the rendering of glyph `Oslash' in
+ `Roboto-Thin.ttf'.
+
+ * src/autofit/afhints.h (AF_Flags): New value `AF_FLAGS_NEAR'.
+
+ * src/autofit/afhints.c (af_glyph_hints_reload): Introduce
+ the heuristic value `near_limit' to decide whether the current point
+ is near to the previous one, then set `AF_FLAG_NEAR' accordingly.
+ Store good `in' vector (of last non-near point) in
+ `last_good_in_{x,y}' and use it as an argument to
+ `ft_corner_is_flat' if necessary.
+
+2013-08-02 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftcffdrv.h: Improve documentation.
+ This is based on blog entries from David Lemon and Dave Arnold (both
+ from Adobe) with kind permission. Dave also helped in
+ proof-reading.
+
+2013-08-02 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Move declaration of scripts into separate file.
+
+ This has the benefit that we don't need to duplicate the data at
+ different places.
+
+ * src/autofit/afscript.h: New file.
+
+ * src/autofit/aftypes.h (AF_Script): Include `afscript.h' to define
+ the enumeration values.
+
+ * src/autofit/afglobal.c: Include `afscript.h' to get the script
+ specific header files.
+ (af_script_classes): Include `afscript.h' to fill this array.
+
+ * src/autofit/afpic.c: Include `afscript.h' to get the script
+ specific header files.
+ (autofit_module_class_pic_init): Include `afscript.h' for
+ initialization.
+ * src/autofit/afpic.h (AF_SCRIPT_CLASSES_COUNT,
+ AF_SCRIPT_CLASSES_REC_COUNT): Removed. Use `AF_SCRIPT_MAX' instead.
+
+ * src/autofit/rules.mk (AUTOF_DRV_H): Updated.
+
+2013-08-02 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Move declaration of writing systems into separate file.
+
+ This has the benefit that we don't need to duplicate the data at
+ different places.
+
+ * src/autofit/afwrtsys.h: New file.
+
+ * src/autofit/aftypes.h (AF_WritingSystem): Include `afwrtsys.h' to
+ define the enumeration values.
+
+ * src/autofit/afglobal.c: Include `afwrtsys.h' to get the writing
+ system specific header files.
+ Include `afpic.h'.
+ (af_writing_system_classes): Include `afwrtsys.h' to fill this
+ array.
+
+ * src/autofit/afpic.c: Include `afwrtsys.h' to get the writing
+ system specific header files.
+ (autofit_module_class_pic_init): Include `afwrtsys.h' for
+ initialization.
+ * src/autofit/afpic.h (AF_WRITING_SYSTEM_CLASSES_COUNT,
+ AF_WRITING_SYSTEM_CLASSES_REC_COUNT): Removed. Use
+ `AF_WRITING_SYSTEM_MAX' instead.
+
+2013-08-02 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix compilation with g++.
+
+ * src/sfnt/pngshim.c (error_callback, read_data_from_FT_stream): Use
+ cast.
+ (Load_SBit_Png): Pacify compiler.
+
+2013-08-02 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+ Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix `make multi'.
+
+ * include/freetype/config/ftconfig.h (FT_LOCAL_ARRAY,
+ FT_LOCAL_ARRAY_DEF): New macros.
+
+ * src/autofit/afglobal.c (af_writing_system_classes,
+ af_script_classes): Use FT_LOCAL_ARRAY_DEF.
+ * src/autofit/afglobal.h: Declare `af_writing_system_classes' and
+ `af_script_classes'.
+ * src/autofit/afloader.c: Include `afpic.h'.
+
+2013-08-01 Werner Lemberg <wl@gnu.org>
+
+ Another round of cppcheck nitpicks.
+
+ The call was (from the top-level of the FreeType tree):
+
+ cppcheck --force \
+ --enable=all \
+ -I /usr/include \
+ -I /usr/local/include \
+ -I /usr/lib/gcc/i586-suse-linux/4.7/include \
+ -I include \
+ -I include/freetype \
+ -I include/freetype/config \
+ -I include/freetype/internal \
+ -DFT2_BUILD_LIBRARY \
+ . &> cppcheck.log
+
+ using cppcheck git commit f7e93f99.
+
+ Note that cppcheck still can't handle `#include FOO' (with `FOO' a
+ macro).
+
+ */* Improve variable scopes.
+ */* Remove redundant initializations which get overwritten.
+
+ * src/gxvalid/*: Comment out redundant code or guard it with
+ FT_DEBUG_LEVEL_TRACE.
+
+2013-07-30 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Introduce `writing systems'.
+
+ This patch adds a new top level to the auto-hinter's script class
+ hierarchy. It defines `writing systems' which can contain multiple
+ scripts.
+
+ For example, the `latin' writing system (in file `aflatin.c') is
+ able to support scripts like Latin, Cyrillic, Armenian, etc., which
+ can be handled similarly.
+
+ Scripts are now named using four-letter OpenType tags.
+
+ * src/autofit/aftypes.h (AF_ScriptClassRec): Move relevant members
+ to...
+ (AF_WritingSystemClassRec): This new structure. It holds pointers
+ to functions which can be shared among related scripts.
+ (AF_WritingSystem): New enumeration.
+ (AF_Script): Revised values using four-letter tags.
+ (AF_DEFINE_WRITING_SYSTEM_CLASS): New macro.
+ (AF_DEFINE_SCRIPT_CLASS): Updated.
+
+ * src/autofit/afglobal.c (af_writing_system_classes): New global,
+ constant array.
+ (af_script_classes): Updated.
+ (af_face_globals_free): Updated.
+ Remove assertion.
+ (af_face_globals_get_metrics): Updated.
+
+ * src/autofit/afglobal.h (AF_SCRIPT_FALLBACK)
+ [!AF_CONFIG_OPTION_CJK]: Handle this case.
+
+ * src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
+ Updated.
+
+ * src/autofit/afpic.c (autofit_module_class_pic_init): Updated;
+ initialize structures for both writing systems and scripts.
+ * src/autofit/afpic.h: Updated.
+ (AF_WRITING_SYSTEM_CLASSES_GET): New macro.
+
+ * src/autofit/afcjk.c (af_cjk_writing_system_class): New writing
+ system.
+ (af_cjk_uniranges): Renamed to...
+ (af_hani_uniranges): This.
+ (af_cjk_script_class): Reduced and renamed to...
+ (af_hani_script_class): This.
+ * src/autofit/afcjk.h: Updated.
+
+ * src/autofit/afdummy.c (af_dummy_writing_system_class): New writing
+ system.
+ (af_dummy_script_class): Reduced and renamed to...
+ (af_dflt_script_class): This.
+ * src/autofit/afdummy.h: Updated.
+
+ * src/autofit/afindic.c (af_indic_writing_system_class): New writing
+ system.
+ (af_indic_uniranges): Renamed to...
+ (af_deva_uniranges): This.
+ (af_indic_script_class): Reduced and renamed to...
+ (af_deva_script_class): This.
+ * src/autofit/afcjk.h: Updated.
+
+ * src/autofit/aflatin.c (af_latin_writing_system_class): New writing
+ system.
+ (af_latin_uniranges): Renamed to...
+ (af_latn_uniranges): This.
+ (af_latin_script_class): Reduced and renamed to...
+ (af_latn_script_class): This.
+ * src/autofit/aflatin.h: Updated.
+
+ * src/autofit/aflatin2.c (af_latin2_writing_system_class): New
+ writing system.
+ (af_latin2_uniranges): Renamed to...
+ (af_ltn2_uniranges): This.
+ Synchronize ranges with `latin'.
+ (af_latin2_script_class): Reduced and renamed to...
+ (af_ltn2_script_class): This.
+ * src/autofit/aflatin2.h: Updated.
+
+2013-07-30 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Variable renaming.
+
+ * src/autofit/aftypes.h (AF_ScriptMetricsRec):
+ s/clazz/script_class/.
+ Update all users.
+
+2013-07-30 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ Ignore libpng-config under cross-building configuration,
+ because it will return the flags for the hosting environment.
+
+ * builds/unix/configure.raw: Ignore libpng-config when
+ `cross_compiling' == yes.
+
+2013-07-30 Behdad Esfahbod <behdad@google.com>
+
+ Prevent division by zero by a transparent color.
+
+ * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra):
+ Return 0 immediately, when alpha channel is zero.
+
+2013-07-25 Behdad Esfahbod <behdad@google.com>
+
+ Add FT_FACE_FLAG_COLOR and FT_HAS_COLOR.
+
+ Also disambiguate Google's color bitmap tables.
+
+ * include/freetype/freetype.h (FT_FACE_FLAG_COLOR, FT_HAS_COLOR):
+ New macros.
+
+ * include/freetype/internal/tttypes.h (TT_SbitTableType): Add
+ TT_SBIT_TABLE_TYPE_CBLC.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Handle FT_FACE_FLAG_COLOR.
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbit,
+ tt_face_load_strike_metrics, tt_face_load_sbit_image): Handle
+ TT_SBIT_TABLE_TYPE_CBLC.
+
+2013-07-24 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [sfnt] Fix for `make multi' target.
+
+ * src/sfnt/pngshim.c (Load_SBit_Png): Use FT_LOCAL_DEF().
+
+2013-07-20 Werner Lemberg <wl@gnu.org>
+
+ * docs/INSTALL.GNU: Updated.
+
+2013-07-20 Behdad Esfahbod <behdad@google.com>
+
+ [sfnt] Fix `sbix' table version handling.
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbit) [TT_SBIT_TABLE_TYPE_SBIX]:
+ USHORT version numbers are to be considered as `minor'.
+
+2013-07-19 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix segment classification for blue zones.
+
+ The old code (essentially unchanged since the very beginning)
+ incorrectly handled this configuration
+
+ x -o- x
+ / \
+ / \
+ / \
+ o o
+
+ as flat and this
+
+ o o
+ / /
+ x| x|
+ | |
+ o---------------o
+
+ as round. (`o' and `x' are on and off points, respectively).
+
+ This is a major change which should improve the rendering results
+ enormously for many TrueType fonts, especially in the range approx.
+ 20-40ppem, fixing the appearance of many overshoots.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Look at the
+ first and last points of the segment, not the points right before
+ and after.
+
+2013-07-19 Behdad Esfahbod <behdad@google.com>
+
+ [sfnt] `sbix' fix-ups.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Apple's `sbix' color bitmaps
+ are rendered scaled and then the `glyf' outline rendered on top. We
+ don't support that yet, so just ignore the `glyf' outline and
+ advertise it as a bitmap-only font.
+
+ * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
+ [TT_SBIT_TABLE_TYPE_SBIX]: Return metrics in 26.6 units.
+ (tt_face_load_sbix_image): Typo.
+
+2013-07-18 Behdad Esfahbod <behdad@google.com>
+
+ [sfnt] Add support for Apple's `sbix' color bitmap table.
+
+ * include/freetype/internal/tttypes.h (TT_SBit_MetricsRec): Widen
+ fields to FT_Short and FT_UShort, respectively.
+ (TT_SbitTableType): New enumeration.
+ (TT_FaceRec): Add `sbit_table_type' field.
+
+ * include/freetype/tttags.h (TTAG_sbix): New macro.
+
+ * src/sfnt/pngshim.c (Load_SBit_Png): Pass a more generic
+ FT_GlyphSlot argument instead FT_Bitmap.
+ Add flag to control map and metrics handling.
+ Update all users.
+
+ * src/sfnt/ttsbit.c: Include `ttmtx.h'.
+ (tt_face_load_eblc): Renamed to...
+ (tt_face_load_sbit): This.
+ Handle `sbix' bitmaps.
+ (tt_face_free_eblc): Renamed to...
+ (tt_face_load_sbit): This.
+ Updated.
+ (tt_face_load_strike_metrics): Handle `sbix' bitmaps.
+ (tt_face_load_sbix_image): New function.
+ (tt_sbit_decoder_alloc_bitmap, tt_sbit_decoder_load_image,
+ tt_sbit_decoder_load_byte_aligned, tt_sbit_decoder_load_bit_aligned,
+ tt_sbit_decoder_load_compound, tt_sbit_decoder_load_png,
+ tt_sbit_decoder_load_image, tt_sbit_decoder_load_bitmap): Don't pass
+ and handle load flags.
+ (tt_sbit_decoder_load_bitmap) [!FT_CONFIG_OPTION_USE_PNG]: Better
+ handle formats 17-19.
+ Move color to grayscale conversion to...
+ (tt_face_load_sbit_image): Here.
+ Handle `sbix' bitmaps.
+
+ * src/sfnt/pngshim.h: Updated.
+ * src/sfnt/ttsbit.h: Updated.
+ * src/sfnt/sfdriver.c: Updated.
+
+2013-07-18 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Ignore invalid magic number in `head' or `bhed'.
+
+ Other font engines seem to ignore it also. Problem reported by
+ Hin-Tak Leung <htl10@users.sourceforge.net>.
+
+ * src/sfnt/ttload.c (check_table_dir): Don't abort but warn only if
+ we have an invalid magic number.
+
+2013-07-16 Werner Lemberg <wl@gnu.org>
+
+ [smooth] Fix segfault caused by previous commit.
+
+ * src/smooth/ftgrays.c (gray_set_cell): Always compute
+ `ras.invalid'.
+
+2013-07-16 David Turner <digit@google.com>
+
+ [smooth] Improve performance.
+
+ Provide a work-around for an ARM-specific performance bug in GCC.
+ This speeds up the rasterizer by more than 5%.
+
+ Also slightly optimize `set_gray_cell' and `gray_record_cell' (which
+ also improves performance on other platforms by a tiny bit (<1%).
+
+ * src/smooth/ftgrays.c (FT_DIV_MOD): New macro.
+ Use it where appropriate.
+
+ (gray_record_cell, gray_set_cell, gray_move_to,
+ gray_convert_glyph_inner): Streamline condition handling.
+
+2013-07-16 David Turner <digit@google.com>
+
+ [truetype] Add assembler code for TT_MulFix14 and TT_DotFix14.
+
+ This patch provides slightly optimized versions for ARM, x86, and
+ x86_64 CPUs if built with GCC.
+
+ Also remove some dead code.
+
+ * src/truetype/ttinterp.c (TT_MulFix14_arm, TT_MulFix14_long_long,
+ TT_DotFix14_long_long): New functions.
+
+2013-07-16 David Turner <digit@google.com>
+
+ Optimize FT_MulFix for x86_64 GCC builds.
+
+ This patch provides an optimized `FT_MulFix' implementation for
+ x86_64 machines when FreeType is built with GCC, or compatible
+ compilers like Clang.
+
+ Example:
+ bin/ftbench -p -t 5 -s 14 -f 0008 Arial.ttf
+
+ Before:
+
+ Load 4.863 us/op
+ Load_Advances (Normal) 4.816 us/op
+ Load_Advances (Fast) 0.028 us/op
+ Render 2.753 us/op
+ Get_Glyph 0.463 us/op
+ Get_CBox 0.077 us/op
+ Get_Char_Index 0.023 us/op
+ Iterate CMap 13.898 us/op
+ New_Face 12.368 us/op
+ Embolden 0.028 us/op
+ Get_BBox 0.302 us/op
+
+ After:
+
+ Load 4.617 us/op
+ Load_Advances (Normal) 4.645 us/op
+ Load_Advances (Fast) 0.027 us/op
+ Render 2.789 us/op
+ Get_Glyph 0.460 us/op
+ Get_CBox 0.077 us/op
+ Get_Char_Index 0.024 us/op
+ Iterate CMap 13.403 us/op
+ New_Face 12.278 us/op
+ Embolden 0.028 us/op
+ Get_BBox 0.301 us/op
+
+ * builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
+ (FT_MulFix_x86_64): New function.
+
+2013-07-16 David Turner <digit@google.com>
+
+ Speed up ARMv7 support.
+
+ When building for ARMv7 with thumb2 instructions, the optimized
+ `FT_MulFix_arm' assembly routine was not being used.
+
+ The reason for this is in the `ftconfig.h' header, namely:
+
+ - The assembly routine uses the `smull' instruction which is not
+ available when generating Thumb-1 machine code. It is available
+ in Thumb-2 mode, though.
+
+ - The header was written a long time ago before Thumb-2 became
+ widely popular (e.g. with Android). So it simply doesn't use the
+ assembly routine if the `__thumb__' built-in macro is defined.
+
+ - When compiling in Thumb-2 mode, the compiler will define both
+ `__thumb__' and `__thumb2__'.
+
+ By checking for `(__thumb2__ || !__thumb__)', we ensure that the
+ assembly routine is only avoided when generating Thumb-1 code.
+
+ Given that this is performance-sensitive function, this improves
+ `ftbench' as follows on a Galaxy Nexus:
+
+ Before (us/op) After (us/op)
+
+ - loading Arial.ttf glyphs at 14 ppem [1]
+
+ Load 34.285 33.098
+
+ - same operation with the light auto-hinter [2]
+
+ Load 31.317 29.590
+
+ - same operation without hinting [3]
+
+ Load 6.143 5.376
+
+ - loading Arial.ttf advances at 14 ppem [4]
+
+ Load_Advances (normal) 34.216 33.016
+ Load_Advances (fast) 0.176 0.176
+
+ [1] ftbench -t 5 -p -s 14 -b a -f 0008 Arial.ttf
+ [2] ftbench -t 5 -p -s 14 -b a -r 1 -f 0028 Arial.ttf
+ [3] ftbench -t 5 -p -s 14 -b a -f 000a Arial.ttf
+ [4] ftbench -t 5 -p -s 14 -b b -f 0008 Arial.ttf
+
+ * builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
+ (FT_MULFIX_ASSEMBLER): Fix handling for ARMv7.
+
+2013-06-28 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2013-06-27 Werner Lemberg <wl@gnu.org>
+
+ * src/winfonts/winfnt.c (FNT_Load_Glyph): Fix bitmap width guard.
+
+2013-06-25 Werner Lemberg <wl@gnu.org>
+
+ [cff] Add darkening limit to `darkening-parameters'.
+
+ * src/cff/cffdrivr.c (cff_property_set): Add check.
+
+2013-06-25 Werner Lemberg <wl@gnu.org>
+
+ [cff] Add `darkening-parameters' property.
+
+ * include/freetype/ftcffdrv.h: Document it.
+
+ * src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
+ `darkening-parameters' property.
+
+ * src/cff/cf2font.h (CF2_FontRec): Add `darkenParams' array.
+
+ * src/cff/cf2font.c (cf2_computeDarkening): Add `darkenParams'
+ argument and use it.
+ Update all callers.
+
+ * src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Copy
+ `darken_params' values.
+
+ * src/cff/cffobjs.h (CFF_DriverRec): Add `darken_params' array.
+
+ * src/cff/cffobjs.c (cff_driver_init): Set default values for
+ `darken_params'.
+
+2013-06-25 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Code shuffling.
+
+ * src/tools/docmaker/tohtml.py (re_url): Move regexp...
+ * src/tools/docmaker/sources.py: ... to this file.
+
+2013-06-25 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Remove unused functions.
+
+ * src/tools/docmaker/content.py (DocMarkup.get_start,
+ DocBlock.get_markup_name): Removed.
+ * src/tools/docmaker/tohtml.py (html_quote0, dump_html_code,
+ HtmlFormatter.make_html_words): Removed.
+
+2013-06-25 Werner Lemberg <wl@gnu.org>
+
+ * builds/freetype.mk (dll): Remove target.
+
+ Problem reported by Jörg Günnewig <joerg.guennewig@googlemail.com>.
+
+2013-06-25 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Recognise URLs.
+
+ * src/tools/docmaker/tohtml.py (re_url): New regular expression.
+ (make_html_para): Use it.
+
+2013-06-19 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.5.0.1 released.
+ ===========================
+
+
+ Tag sources with `VER-2-5-0-1'.
+
+ * include/freetype/config/ftoption.h: Undefine
+ CFF_CONFIG_OPTION_OLD_ENGINE.
+ * devel/ftoption.h: Define CFF_CONFIG_OPTION_OLD_ENGINE.
+
+2013-06-19 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/install.mk (install): Don't create `cache' directory.
+
+ Found by Peter Breitenlohner <peb@mppmu.mpg.de>.
+
+2013-06-19 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.5.0 released.
+ =========================
+
+
+ Tag sources with `VER-2-5-0'.
+
+ * docs/VERSION.DLL: Update documentation and bump version number to
+ 2.5.0.
+
+ * README, Jamfile (RefDoc),
+ builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
+ builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
+ builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
+ builds/win32/visualc/freetype.dsp,
+ builds/win32/visualc/freetype.vcproj,
+ builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
+ builds/win32/visualce/freetype.vcproj,
+ builds/win32/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.4.12/2.5.0/, s/2412/250/.
+
+ * include/freetype/freetype.h (FREETYPE_MINOR): Set to 5.
+ (FREETYPE_PATCH): Set to 0.
+
+ * builds/unix/configure.raw (version_info): Set to 16:2:10.
+
+ * src/base/ftobjs.c (FT_Open_Face): Pacify compiler.
+ * src/truetype/ttinterp.c (Ins_MSIRP, Ins_MIRP): Ditto.
+
+2013-06-18 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #39269.
+
+ * src/base/ftgloadr.c (FT_GlyphLoader_CheckPoints): Free memory in
+ case of reallocation failures.
+
+2013-06-18 Andrew Church <achurch+savannah@achurch.org>
+
+ Fix Savannah bug #39266.
+
+ If memory allocations fail at certain points while opening a font,
+ FreeType can either crash due to a NULL dereference or leak memory.
+
+ * include/freetype/internal/ftobjs.c (FT_Face_InternalRec,
+ FT_LibraryRec): Make `refcount' a signed integer. If, for example,
+ FT_Open_Face() fails in a memory allocation before the face's
+ reference count is set to 1, a subsequent `FT_Done_Library' call
+ would otherwise loop over `FT_Done_Face' 2^32 times before freeing
+ the face.
+
+ * src/base/ftobjs.c (open_face): Initialize `stream' and friends
+ earlier.
+ (FT_Open_Face) <Fail>: Behave correctly if `node' is NULL.
+ (FT_Destroy_Module) <Fail>: Check that `renderer_clazz' is valid.
+
+2013-06-14 Werner Lemberg <wl@gnu.org>
+
+ * src/smooth/ftgrays.c One final pragma to silence 64-bit MSVC.
+
+2013-06-06 Dave Arnold <darnold@adobe.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [cff] Add code to Adobe's engine to handle ppem > 2000.
+
+ * src/cff/cffgload.c (cff_slot_load): If we get
+ FT_Err_Glyph_Too_Big, retry unhinted and scale up later on.
+
+2013-06-12 Werner Lemberg <wl@gnu.org>
+
+ Another try on pragmas.
+
+ * include/freetype/internal/ftdebug.h: Move pragmas to...
+ * include/freetype/internal/internal.h: ... this file since it gets
+ included by all source files.
+ * include/freetype/internal/ftserv.h: Remove pragma which has no
+ effect.
+
+2013-06-12 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftdebug.h: Disable MSVC warning C4127.
+
+ This partially undoes commit 3f6e0e0c.
+
+2013-06-12 Werner Lemberg <wl@gnu.org>
+
+ More compiler warning fixes.
+
+ */*: Use cast to `FT_Bool' (or `Bool') where appropriate.
+
+2013-06-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Improve handling of broken sbit advance widths.
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): Use the glyph's (scaled)
+ `linearHoriAdvance' if the sbit's `horiAdvance' value is zero.
+
+ Cf. font `Fixedsys Excelsior' v3.01 (FSEX300.ttf), glyph A, 16ppem.
+
+2013-06-10 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Improve embedded bitmap tracing.
+
+ * src/base/ftobjs.c (FT_Request_Size): Move trace message regarding
+ bitmap strike match to...
+ (FT_Match_Size): This function.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_metrics,
+ tt_sbit_decoder_load_byte_aligned, tt_sbit_decoder_load_bit_aligned,
+ tt_sbit_decoder_load_compound, tt_sbit_decoder_load_png,
+ tt_sbit_decoder_load_image): Decorate with tracing messages.
+
+2013-06-10 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #39160.
+
+ * src/truetype/ttinterp.c (Ins_SDPVTL): Set projection vector too
+ for the degenerate case.
+
+2013-06-09 David Turner <digit@google.com>
+
+ * src/cache/ftcmanag.c (FTC_Manager_Reset): Add missing cache flush.
+
+ This code, present since eight(!) years in the unused `CACHE'
+ branch, has been forgotten to apply to the master branch. It's
+ really amazing that noone has ever complained since
+ `FTC_Manager_Reset' is pretty useless without flushing the cache.
+
+2013-06-07 Werner Lemberg <wl@gnu.org>
+
+ Add and improve pragmas for MSVC compiler.
+
+ * include/freetype/internal/ftdebug.h: Remove pragmas.
+ * include/freetype/internal/ftserv.h: Use push and pop for pragmas.
+ * include/freetype/internal/ftvalid.h: Handle warning C4324.
+ * src/base/ftobjs.c: Use push and pop for pragmas.
+ * src/gzip/ftgzip.c: Handle warning C4244.
+
+2013-06-07 Werner Lemberg <wl@gnu.org>
+
+ [cff] s/cf2_getGlyphWidth/cf2_getGlyphOutline/.
+
+ * src/cff/cf2font.c, src/cff/cf2font.h, src/cff/cf2ft.c: Do it.
+
+2013-06-06 Dave Arnold <darnold@adobe.com>
+
+ [cff] Add early exit feature for width-only calls.
+
+ This is for `FT_Get_Advance'.
+
+ There are 7 places where the spec says the width can be defined:
+
+ hstem/hstemhm
+ vstem/vstemhm
+ cntrmask/hintmask
+ hmoveto
+ vmoveto
+ rmoveto
+ endchar
+
+ * src/cff/cf2intrp.c (cf2_doStems): Exit early for width-only calls,
+ if possible.
+
+ (cf2_interpT2CharString) <cf2_cmdHSTEM>, <cf2_cmdVSTEM>,
+ <cf2_cmdVMOVETO>, <cf2_cmdENDCHAR>, <cf2_cmdHINTMASK>,
+ <cf2_cmdRMOVETO>, <cf2_cmdHMOVETO>: Exit early for width-only calls.
+
+2013-06-06 Werner Lemberg <wl@gnu.org>
+
+ Next round of compiler fixes.
+
+ * builds/win32/ftdebug.c, builds/wince/ftdebug.c (ft_debug_init):
+ Add proper cast.
+
+ * include/freetype/internal/ftserv.h (FT_SERVICE_UNAVAILABLE): Fix
+ cast.
+ * include/freetype/internal/ftstream.h: Decorate stream and frame
+ macros with `FT_Long' and `FT_ULong' as appropriate.
+
+ * src/base/ftrfork.c (raccess_guess_darwin_hfsplus,
+ raccess_guess_darwin_newvfs): Use cast.
+
+ * src/bdf/bdflib.c (_bdf_set_default_spacing): Use cast.
+
+ * src/cache/ftcmanag.c (FTC_Manager_Check): Fix cast.
+ * src/cache/ftcmanag.h (FTC_ManagerRec): Ditto.
+
+ * src/cff/cf2arrst.c (cf2_arrstack_setNumElements): Use cast.
+ * src/cff/cf2ft.c (cf2_freeSeacComponent): Ditto.
+ * src/cff/cffobjs.c (remove_subset_prefix, remove_style): Ditto.
+
+ * src/cid/cidparse.c (cid_parser_new): Use cast.
+
+ * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Use cast.
+
+ * src/psaux/psobjs.c (reallocate_t1_table): Fix argument type.
+
+ * src/raster/ftraster.c (ft_black_reset): Use cast.
+
+ * src/truetype/ttgxvar.c (FT_Stream_FTell): Use cast.
+ (ALL_POINTS): Fix cast.
+
+ * src/type1/t1driver.c (t1_ps_get_font_value): Add casts.
+ * src/type1/t1parse.c (T1_Get_Private_Dict): Add cast.
+
+2013-06-05 Dave Arnold <darnold@adobe.com>
+
+ Fix more MSVC Win32 compiler warnings.
+
+ * src/base/ftobjs.c: Fix typo in MS pragma.
+
+ * src/base/bdflib.c (_bdf_set_default_spacing, _bdf_add_property):
+ `lineno' is only used in debug mode.
+
+ * src/cff/cf2ft.c (cf2_builder_moveTo): `params' is only used in
+ debug mode.
+
+2013-06-05 Werner Lemberg <wl@gnu.org>
+
+ Fix compiler warnings.
+
+ * include/freetype/internal/ftmemory.h: Decorate memory allocation
+ macros with `FT_Long' where appropriate.
+ Remove duplicate of FT_MEM_QRENEW_ARRAY definition.
+
+ * src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Use
+ cast.
+
+ * src/base/ftobjs.c: Add warning disabling pragma for MSVC while
+ including `md5.c'.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdESC>: Add
+ cast.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_compound): Fix casts.
+ (tt_sbit_decoder_load_bitmap): Beautification.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Initialize
+ variables (earlier).
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph): Pacify compiler.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Use unsigned constants
+ where appropriate.
+
+ * src/type1/t1load.c (T1_Get_MM_Var): Ditto.
+
+2013-06-04 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cf2font.c (cf2_getGlyphWidth): Initialize `advWidth'.
+
+ Problem reported by Ingmar Sittl <ingmar.sittl@elektrobit.com>.
+
+2013-06-04 Werner Lemberg <wl@gnu.org>
+
+ Apply fixes for cppcheck nitpicks.
+
+ http://cppcheck.sourceforge.net/
+
+ The call was (from the top-level of the FreeType tree):
+
+ cppcheck --force \
+ --enable=all \
+ -I include \
+ -I include/freetype/ \
+ -I include/freetype/config/ \
+ -I include/freetype/internal/ \
+ . &> cppcheck.log
+
+ Note that the current version heavily chokes on FreeType, delivering
+ many wrong results. I will report those issues to the cppcheck team
+ so that a newer version gives improved results hopefully.
+
+ */* Improve variable scopes.
+ */* Remove redundant initializations which get overwritten.
+
+ * src/base/ftmac.c, builds/mac/ftmac.c (count_faces_scalable):
+ Remove unused variable.
+
+ * src/base/ftdbgmem.c (ft_mem_table_destroy): `table' can't be zero.
+
+ * src/gxvalid/gxvkern.c (gxv_kern_subtable_fmt1_entry_validate):
+ Remove functionless code.
+
+ * src/tools/ftrandom.c (main): Fix memory leak.
+
+2013-06-03 Werner Lemberg <wl@gnu.org>
+
+ Add CFF_CONFIG_OPTION_OLD_ENGINE configuration option.
+
+ This controls whether the old FreeType CFF engine gets compiled into
+ FreeType. It is now disabled by default.
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (CFF_CONFIG_OPTION_OLD_ENGINE): New macro.
+
+ * src/cff/cffdrivr.c (cff_property_set), src/cff/cffgload.c
+ (CFF_Operator, cff_argument_counts, cff_builder_add_point,
+ cff_operator_seac, cff_decoder_parse_charstrings, cff_slot_load),
+ src/cff/cffgload.h, src/cff/cffobjs.c (cff_driver_init): Use
+ CFF_CONFIG_OPTION_OLD_ENGINE to guard the affected code.
+
+ * docs/CHANGES: Updated.
+
+2013-06-02 Werner Lemberg <wl@gnu.org>
+
+ Fix PNG library handling.
+
+ * builds/unix/configure.raw: Don't use LIBPNG_LIBS but
+ LIBPNG_LDFLAGS.
+
+2013-05-23 Behdad Esfahbod <behdad@google.com>
+
+ Add support for color embedded bitmaps (eg. color emoji).
+
+ A new load flag, FT_LOAD_COLOR, makes FreeType load color
+ embedded-bitmaps, following this draft specification
+
+ https://color-emoji.googlecode.com/git/specification/v1.html
+
+ which defines two new SFNT tables, `CBDT' and `CBLC' (named and
+ modeled after `EBDT' and `EBLC', respectively). The color bitmaps
+ are stored in the new FT_PIXEL_MODE_BGRA format to represent BGRA
+ pre-multiplied sRGB images. If PNG support is available, PNG color
+ images as defined in the same proposed specification are supported
+ also.
+
+ Note that color bitmaps are converted to grayscale if client didn't
+ ask for color.
+
+ * builds/unix/configure.raw: Search for libpng.
+ Add `--without-png' option.
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (FT_CONFIG_OPTION_USE_PNG): New macro.
+
+ * include/freetype/freetype.h (FT_LOAD_COLOR): New load flag.
+
+ * include/freetype/ftimage.h (FT_Pixel_Mode): Add
+ `FT_PIXEL_MODE_BGRA'.
+
+ * include/freetype/tttags.h (TTAG_CBDT, TTAG_CBLC): New tags.
+
+ * src/base/ftbitmap.c (FT_Bitmap_Embolden): Updated.
+ (ft_gray_for_premultiplied_srgb_bgra): New function.
+ (FT_Bitmap_Convert): Handle FT_PIXEL_MODE_BGRA.
+
+ * src/sfnt/pngshim.c, src/sfnt/pngshim.h: New files.
+
+ * src/sfnt/sfnt.c: Include `pngshim.c'.
+
+ * src/sfnt/ttsbit.c: Include FT_BITMAP_H and `pngshim.h'
+ (tt_face_load_eblc): Load `CBLC'.
+ (tt_sbit_decoder_init): Load `CBDT'.
+ (tt_sbit_decoder_alloc_bitmap): Pass load flags to select between
+ color and grayscale bitmaps.
+ Set `num_grays'. This is used by `ftview' to choose the blending
+ algorithm.
+ (tt_sbit_decoder_load_byte_aligned,
+ tt_sbit_decoder_load_bit_aligned, tt_sbit_decoder_load_compound,
+ tt_sbit_decoder_load_image): Pass load flag.
+ s/write/pwrite/.
+ Don't call `tt_sbit_decoder_alloc_bitmap'.
+ Updated.
+ (tt_sbit_decoder_load_png) [FT_CONFIG_OPTION_USE_PNG]: New function.
+ (tt_sbit_decoder_load_bitmap): Pass load flag.
+ Handle new glyph formats 17, 18, and 19.
+ Call `tt_sbit_decoder_alloc_bitmap'.
+ Flatten color bitmaps if necessary.
+ (tt_face_load_sbit_image): Updated.
+
+ * src/sfnt/rules.mk (SFNT_DRV_SRC): Add `pngshim.c'.
+
+ * docs/CHANGES: Updated.
+
+2013-05-24 Guenter <info@gknw.net>
+
+ Apply Savannah patch #8055.
+
+ Make `apinames' create an import file for NetWare.
+
+ * src/tools/apinames.c (PROGRAM_VERSION): Set to 0.2.
+ (OutputFormat): Add `OUTPUT_NETWARE_IMP'.
+ (names_dump): Handle it.
+ (usage): Updated.
+ (main): Handle new command line flag `-wN'.
+
+2013-05-23 Behdad Esfahbod <behdad@behdad.org>
+
+ Compilation fix.
+
+ * src/truetype/ttinterp.c (TT_RunIns)
+ [!TT_CONFIG_OPTION_SUBPIXEL_HINTING]: Make it work.
+
+2013-05-22 Infinality <infinality@infinality.net>
+
+ [truetype] Formatting and an additional subpixel tweak.
+
+ * src/truetype/ttinterp.c (Ins_SHPIX): Formatting fix.
+ * src/truetype/ttsubpix.c (SKIP_NONPIXEL_Y_MOVES_Rules):
+ Revert previous modification for Verdana clones.
+
+2013-05-22 Infinality <infinality@infinality.net>
+
+ [truetype] Adjust subpixel zp2 moves and tweak rules.
+
+ These modifications fix thin diagonal stems in some legacy fonts.
+
+ * src/truetype/ttinterp.c (Direct_Move_X): Remove unused macro.
+ (Move_Zp2_Point): Don't always disable x moves for subpixel rendering.
+ (Ins_SHP): Disable x moves here for subpixel rendering.
+ (Ins_SHPIX): Only disable x moves in compatibility mode.
+ Split out zp2 move reversals and reorder conditional respectively.
+
+ * src/truetype/ttsubpix.c (SKIP_NONPIXEL_Y_MOVES_Rules): Fix oversight.
+ Only adjust Verdana clones for 17 ppem.
+ (SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions): Add Courier New.
+ (ALWAYS_SKIP_DELTAP_Rules): Found additional cases for Arial `s'.
+
+2013-05-20 Infinality <infinality@infinality.net>
+
+ [truetype] Simplify and improve subpixel function detection.
+
+ Some small enhancements have allowed the removal of many macros and
+ the simplification of existing rules in `ttsubpix.c'.
+
+ * src/truetype/ttsubpix.h (SPH_TWEAK_ALLOW_X_DMOVEX,
+ SPH_TWEAK_ALLOW_X_MOVE_ZP2,
+ SPH_TWEAK_DELTAP_SKIP_EXAGGERATED_VALUES,
+ SPH_TWEAK_SKIP_INLINE_DELTAS, SPH_TWEAK_MIRP_CVT_ZERO): Removed.
+ (SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP): New rule macro.
+
+ * src/truetype/ttsubpix.c: Updated affected rules.
+
+ * src/truetype/ttinterp.c (Direct_Move_X): Updated.
+ (INS_FDEF): Add additional function detection.
+ (INS_ENDF): Set runtime flag.
+ (Ins_CALL): Skip the call under certain conditions.
+ Remove bad code.
+ (Ins_LOOPCALL): Skip the call under certain conditions.
+ Remove bad code.
+ (Move_Zp2_Point): Updated.
+ (Ins_SHPIX): Updated.
+ Skip the move under some situations.
+ (Ins_MIAP): Improve conditions.
+ (Ins_MIRP): Updated.
+ (Ins_DELTAP): Skip move under certain conditions.
+ Simplify conditions.
+ (TT_RunIns): Updated.
+ Add code to handle new function detection.
+ Trace messages.
+
+2013-05-17 Werner Lemberg <wl@gnu.org>
+
+ Update more FT_Err_XXX macros using FT_ERR and FT_THROW;
+
+ * builds/amiga/src/base/ftsystem.c, builds/mac/ftmac.c,
+ builds/unix/ftsystem.c, builds/vms/ftsystem.c: Do it.
+
+2013-05-15 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add `interpreter-version' property.
+
+ This makes the option TT_CONFIG_OPTION_SUBPIXEL_HINTING controllable
+ at runtime.
+
+ * include/freetype/ftttdrv.h: New file.
+
+ * include/freetype/config/ftheader.h (FT_TRUETYPE_DRIVER_H): New
+ macro.
+
+ * src/truetype/ttdriver.c: Include FT_TRUETYPE_DRIVER_H.
+ (tt_property_set, tt_property_get): Fill templates.
+
+ * src/truetype/ttobjs.h (TT_DriverRec): Add `interpreter_version'
+ member.
+ Remove unused `extension_component' member.
+
+ * src/truetype/ttgload.c: Include FT_TRUETYPE_DRIVER_H.
+ (tt_get_metrics, TT_Hint_Glyph, TT_Process_Simple_Glyph,
+ compute_glyph_metrics, tt_loader_init): Use `interpreter_version'.
+
+ * src/truetype/ttinterp.c: Include FT_TRUETYPE_DRIVER_H.
+ (SUBPIXEL_HINTING): New macro to check `interpreter_version' flag.
+ Update all affected functions to use it.
+ Use TT_INTERPRETER_VERSION_XXX where appropriate.
+
+ * src/truetype/ttobjs.c: Include FT_TRUETYPE_DRIVER_H.
+ (tt_driver_init): Initialize `interpreter_version'.
+
+ * src/truetype/ttsubpix.c: Include FT_TRUETYPE_DRIVER_H.
+ Use TT_INTERPRETER_VERSION_XXX where appropriate.
+
+2013-05-13 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Avoid empty source file.
+
+ * src/truetype/ttsubpix.c [!TT_CONFIG_OPTION_SUBPIXEL_HINTING]:
+ Provide dummy typedef.
+
+2013-05-13 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cf2font.c (cf2_getGlyphWidth): Fix uninitialized variable.
+
+ Fix suggested by Vaibhav Nagarnaik <vnagarnaik@gmail.com>.
+
+2013-05-13 Brian Nixon <bnixon@yahoo.com>
+
+ Fix Savannah bug #38970.
+
+ * src/base/ftdebug.c, builds/win32/ftdebug.c,
+ builds/wince/ftdebug.c, builds/amiga/src/base/ftdebug.c
+ (ft_debug_init): Don't read past the environment variable FT2_DEBUG.
+
+2013-05-12 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add framework for TrueType properties.
+
+ * src/truetype/ttdriver.c: Include FT_SERVICE_PROPERTIES_H.
+ (tt_property_set, tt_property_get): New functions, still empty.
+ Define `tt_service_properties' service.
+ Update `tt_services'.
+
+ * src/truetype/ttpic.h: Include FT_SERVICE_PROPERTIES_H.
+ (TT_SERVICE_PROPERTIES_GET): New macro.
+ (TTModulePIC): Add `tt_service_properties'.
+
+2013-05-12 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #38967.
+
+ * src/base/ftcalc.c (FT_DivFix) [FT_LONG64]: Fix cast.
+
+2013-05-12 Werner Lemberg <wl@gnu.org>
+
+ Introduce unsigned 64bit type (if available).
+
+ * include/freetype/config/ftconfig.h: Define FT_UINT64 if available.
+ [FT_LONG64]: Provide FT_UInt64.
+
+ * builds/unix/ftconfig.in: Synchronized.
+
+2013-05-12 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #38968.
+
+ * include/freetype/ftmodapi.h: Add `FT_EXPORT' to
+ FT_Property_{Set,Get}.
+ * src/base/ftobjs.c: Add `FT_EXPORT_DEF' to
+ FT_Property_{Set,Get}.
+
+2013-05-10 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Clean up bitmap code.
+
+ * src/sfnt/ttsbit.c: Deleted.
+ * src/sfnt/ttsbit0.c: Renamed to `ttsbit.c'.
+ * rules.mk (SFNT_DRV_H): Updated.
+
+2013-05-10 Werner Lemberg <wl@gnu.org>
+
+ */* [FT_CONFIG_OPTION_OLD_INTERNALS]: Remove macro and guarded code.
+
+----------------------------------------------------------------------------
+
+Copyright 2013-2018 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used, modified,
+and distributed under the terms of the FreeType project license,
+LICENSE.TXT. By continuing to use, modify, or distribute this file you
+indicate that you have read the license and understand and accept it
+fully.
+
+
+Local Variables:
+version-control: never
+coding: utf-8
+End:
diff --git a/ChangeLog.26 b/ChangeLog.26
new file mode 100644
index 0000000..ea89e91
--- /dev/null
+++ b/ChangeLog.26
@@ -0,0 +1,5711 @@
+2016-07-12 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.6.5 released.
+ =========================
+
+
+ Tag sources with `VER-2-6-5'.
+
+ This commit immediately follows `[mac] Fix ftexport.sym target in
+ Jamfile.' on a separate branch, which was then merged with master
+ after the release.
+
+ * include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_SUBPIXEL_HINTING): Comment out.
+
+ * docs/VERSION.TXT: Add entry for version 2.6.5.
+
+ * 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.6.4/2.6.5/, s/264/265/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.
+
+ * builds/unix/configure.raw (version_info): Set to 18:5:12.
+ * CMakeLists.txt (VERSION_PATCH): Set to 5.
+
+ * docs/CHANGES: Updated.
+
+2016-07-11 Werner Lemberg <wl@gnu.org>
+
+ Conditionally compile environment support.
+
+ * include/freetype/internal/ftobjs.h, src/autofit/afmodule.c,
+ src/base/ftobjs.c, src/cff/cffdrivr.c, src/truetype/ttdriver.c:
+ Decorate with `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES' where
+ necessary.
+
+2016-07-11 Werner Lemberg <wl@gnu.org>
+
+ Handle properties in `FREETYPE_PROPERTIES' environment variable.
+
+ This commit covers the most important one.
+
+ * src/autofit/afmodule.c (af_property_set): Handle `warping',
+ `darkening-parameters', and `no-stem-darkening'.
+
+ * src/cff/cffdrivr.c (cff_property_set): Handle
+ `darkening-parameters', `hinting-engine', and `no-stem-darkening'.
+
+ * src/truetype/ttdriver.c (tt_property_set): Handle
+ `interpreter-version'.
+
+2016-07-11 Werner Lemberg <wl@gnu.org>
+
+ Replace calls to `atol' with `strtol'.
+
+ We later on need strtol's `endptr' feature.
+
+ * include/freetype/config/ftstdlib.h (ft_atol): Replace with...
+ (ft_strtol): ... this.
+
+ * src/base/ftdbgmem.c (ft_mem_debug_init): Updated.
+ * src/cid/cidparse.c (cid_parser_new): Ditto.
+ * src/type42/t42drivr.c (t42_get_name_index), src/type42/t42objs.c
+ (T42_GlyphSlot_Load): Ditto.
+
+2016-07-10 Werner Lemberg <wl@gnu.org>
+
+ Implement handling of `FREETYPE_PROPERTIES' environment variable.
+
+ Recognizing properties follows in another commit.
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES): New macro.
+
+ * include/freetype/config/ftstdlib.h (ft_getenv): New macro.
+
+ * src/base/ftinit.c (ft_set_default_properties): New function to
+ parse `FREETYPE_PROPERTIES' and calling `ft_property_string_set'.
+ (FT_Init_FreeType): Updated.
+
+2016-07-09 Werner Lemberg <wl@gnu.org>
+
+ Add function `ft_property_string_set'.
+
+ This is a preparation for handling an `FREETYPE_PROPERTIES'
+ environment variable to control (some) driver properties.
+
+ No change in functionality.
+
+ * src/base/ftobjs.c (ft_property_do): Add `value_is_string'
+ parameter.
+ (ft_property_string_set): New function.
+ (FT_Property_Set, FT_Property_Get): Updated.
+
+ * include/freetype/internal/ftobjs.h: Updated.
+
+ * include/freetype/internal/services/svprop.h
+ (FT_Properties_SetFunc): Add `value_is_string' parameter.
+
+ * src/autofit/afmodule.c (af_property_set), src/cff/cffdrivr.c
+ (cff_property_set), src/truetype/ttdriver.c (tt_property_set):
+ Updated, emitting an error currently if `value_is_string' is set.
+
+2016-07-09 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [mac] Fix ftexport.sym target in Jamfile.
+
+ * Jamfile: Update the directories of the header files scanned for
+ ftexport.sym. They were incorrect since the migration of the
+ header files, on 2015-06-22. Either inexisting include/cache
+ (removed on 2006-03-20) is not needed to be listed explicitly.
+ Now ftmac.h is scanned only in the case of Mac OS & Mac OS X.
+
+2016-07-08 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Sub-banding protocol revision.
+
+ Rasterization sub-banding is utilized at large sizes while using a
+ rather small fixed memory pool. Indeed it is possible to make an
+ educated guess how much memory is necessary at a given size for a
+ given glyph. It turns out that, for a large majority of European
+ glyphs, you should store about 8 times more boundary pixels than
+ their height. Or, vice versa, if your memory pool can hold 800
+ pixels the band height should be 100 and you should sub-band
+ anything larger than that. Should you still run out of memory,
+ FreeType bisects the band but you have wasted some time. This is
+ what has been implemented in FreeType since the beginning.
+
+ It was overlooked, however, that the top band could grow to twice
+ the default band size leading to unnecessary memory overflows there.
+ This commit fixes that. Now the bands are distributed more evenly
+ and cannot exceed the default size.
+
+ Now the magic number 8 is really suitable for rather simple European
+ scripts. For complex Chinese logograms the magic number should be
+ 13 but that is subject for another day.
+
+ * src/smooth/ftgrays.c (gray_convert_glyph): Revise sub-banding
+ protocol.
+
+2016-07-07 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [mac] Fix Savannah bug #48417.
+
+ Mac OS X linker throws errors when `-exported_symbol_list' input
+ file includes non-existing symbols. Reported by Ryan Schmidt.
+
+ * builds/exports.mk: Exclude ftmac.h from the headers for apinames
+ by default. Include it when ftmac.c would be compiled.
+
+2016-07-06 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (TInstruction_Function): Removed, unused.
+
+2016-07-05 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.6.4 released.
+ =========================
+
+
+ Tag sources with `VER-2-6-4'.
+
+ * docs/VERSION.TXT: Update documentation and bump version number to
+ 2.6.4.
+
+ * 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.6.3/2.6.4/, s/263/264/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.
+
+ * builds/unix/configure.raw (version_info): Set to 18:4:12.
+ * CMakeLists.txt (VERSION_PATCH): Set to 4.
+
+ * docs/CHANGES: Updated.
+
+2016-07-05 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Fix compiler warning.
+
+2016-07-04 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Variable type revision (part 2).
+
+ * src/smooth/ftgrays.c (TArea): Restore original definition as `int'.
+ (gray_render_line) [FT_LONG64]: Updated.
+ (gray_convert_glyph): 32-bit band bisection stack should be 32 bands.
+ (gray_convert_glyph_inner): Trace successes and failures.
+
+2016-07-04 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Handle single-point contours as segments.
+
+ Doing so allows us to link them to edges – some fonts like
+ `NotoSansGurmukhi-Regular' have such isolated points sitting exactly
+ on other outlines.
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_segments): Don't
+ ignore one-point contours but handle them specially as one-point
+ segments.
+ (af_latin_hints_compute_edges): Append one-point segments to edges
+ if possible.
+
+2016-07-02 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Remove unused structure members.
+
+ * src/autofit/afhints.h (AF_SegmentRec, AF_EdgeRec): Remove
+ `num_linked'.
+
+ * src/autofit/afcjk.c (af_cjk_hints_link_segments): Updated.
+
+2016-07-02 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Update to Unicode 9.0.0.
+
+ * src/autofit/afranges.c (af_arab_nonbase_uniranges,
+ af_cyrl_uniranges): Add new data.
+
+2016-07-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Variable type revision (part 1).
+
+ This patch restores original `TCoord' definition as `int' so that the
+ rendering pool is used more efficiently on LP64 platforms (unix).
+
+ * src/smooth/ftgrays.c (gray_TWorker, TCell, gray_TBand): Switch some
+ fields to `TCoord'.
+ (gray_find_cell, gray_render_scanline, gray_render_line, gray_hline,
+ gray_sweep, gray_convert_glyph): Updated.
+
+2016-06-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Minor clean-ups.
+
+ * src/smooth/ftgrays.c (gray_TWorker): Remove redundant `ycount'.
+ (gray_sweep, gray_convert_glyph, gray_dump_cells): Updated.
+
+2016-06-27 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Minor clean-ups.
+
+ * src/smooth/ftgrays.c (gray_convert_glyph): Do not use volatile
+ qualifier.
+ (gray_raster_render): Move span initializations from here.
+ (gray_sweep): ... to here and remove unused `target' argument.
+
+2016-06-26 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [pcf] Fix handling of very large fonts (#47708).
+
+ * src/pcf/pcfread.c (pcf_get_encodings): Make `encodingOffset' an
+ unsigned short.
+ Only reject `0xFFFF' as an invalid encoding offset.
+
+2016-06-25 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Really fix deallocation in case of error (#47726).
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Thinko; initialize
+ `outline.points' also.
+
+2016-06-23 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Consolidate memory management.
+
+ * src/smooth/ftgrays.c (gray_init_cells): Remove function.
+ (gray_TWorker): Remove fields that become local variables.
+ (gray_raster_render): Move rendering buffer declaration from here.
+ (gray_convert_glyph): ... to here and update accordingly.
+
+2016-06-22 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Consolidate boundary checks.
+
+ Removing the checks from `gray_hline' shaves 1% off rendering speed.
+
+ * src/smooth/ftgrays.c [STANDALONE_]: Duplicate `FT_MIN' and `FT_MAX'.
+ (gray_TWorker): No need to store `clip_box'.
+ (gray_hline): Remove unnecessary boundary checks.
+ (gray_convert_glyph): Move boundary checks from here.
+ (gray_raster_render): ... to here and consolidate.
+
+2016-06-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Use `FT_Outline_Get_CBox'.
+
+ * src/smooth/ftgrays.c [STANDALONE_]: Duplicate `FT_Outline_Get_CBox'.
+ (gray_compute_cbox): Remove this function.
+ (gray_convert_glyph): Update to use `FT_Outline_Get_CBox'.
+
+2016-06-20 Werner Lemberg <wl@gnu.org>
+
+ [smooth] Remove compiler warnings.
+
+ * src/smooth/ftgrays.c (gray_convert_glyph): Fix reports from clang.
+
+2016-06-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Sanitize memory management.
+
+ * src/smooth/ftgrays.c (gray_convert_glyph): Cleaned up.
+
+2016-06-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Remove `band_shoot' that never worked.
+
+ * src/smooth/ftgrays.c (gray_TWorker): Remove `band_shoot'.
+ (gray_convert_glyph): Updated.
+
+2016-06-17 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [raster, smooth] Handle FT_RENDER_POOL_SIZE better.
+
+ * src/raster/ftraster.c (FT_MAX_BLACK_POOL): New macro.
+ (ft_black_render): Updated.
+ * src/smooth/ftgrays.c (FT_MAX_GRAY_POOL): New macro.
+ (gray_raster_render): Updated.
+
+2016-06-16 Werner Lemberg <wl@gnu.org>
+
+ * src/base/md5.c: Updated to recent version.
+
+2016-06-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_hline): Optimize if-condition.
+
+2016-06-13 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add support for Cherokee script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Cherokee.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Cherokee standard characters.
+
+ * src/autofit/afranges.c: Add Cherokee data.
+
+ * src/autofit/afstyles.h: Add Cherokee data.
+
+2016-06-09 David Capello <davidcapello@gmail.com>
+
+ [cmake] Avoid modifying `ftconfig.h' and `ftoption.h' files.
+
+ * CMakeLists.txt: Each time cmake is run those files are
+ modified and the whole FreeType library is recompiled. With this
+ change we change the files only if there are real modifications, so
+ we can avoid recompilations.
+
+2016-06-09 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Check number of properties (#48166).
+
+ * src/bdf/bdflib.c (_bdf_parse_start): Implement.
+
+2016-06-08 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Re-enable new line renderer on 64-bit archs.
+
+ * src/smooth/ftgrays.c (gray_render_line): Conditionally re-enable new
+ implementation, where it is safe from overflows.
+
+2016-06-08 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Minor clean-ups.
+
+ * src/smooth/ftgrays.c (gray_dump_cells): Move out of the way.
+ (gray_render_span): Remove spurious casts and streamline.
+
+2016-06-07 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add support for Ethiopic script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Ethiopic.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Ethiopic standard characters.
+
+ * src/autofit/afranges.c: Add Ethiopic data.
+
+ * src/autofit/afstyles.h: Add Ethiopic data.
+
+2016-06-07 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix compilation with VS2016 (#48126).
+
+ This compiler doesn't recognize the end-of-comment sequence `*/' if
+ it immediately follows non-ASCII characters.
+
+ * src/autofit/afscript.h: Ensure whitespace before `*/'.
+
+2016-06-04 Werner Lemberg <wl@gnu.org>
+
+ Fix a test for named instances (#48122).
+
+ This was missed while giving negative face indices an extended
+ meaning.
+
+ * src/base/ftobjs.c (Mac_Read_sfnt_Resource): Implement.
+
+2016-05-31 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [truetype] Let SHPIX move points in the twilight zone in v40.
+
+ * src/truetype/ttinterp.c (Ins_SHPIX): Allow SHPIX to move points in
+ the twilight zone. Otherwise, treat SHPIX the same as DELTAP.
+ Unbreaks various fonts such as older versions of Rokkitt and DTL
+ Argo T Light that would glitch severely after calling ALIGNRP after a
+ blocked SHPIX.
+
+2016-05-30 Werner Lemberg <wl@gnu.org>
+
+ [type42] Support `CharStrings' entry format as created by LilyPond.
+
+ * src/type42/t42parse.c (t42_parse_charstrings): Handle entries
+ having the format
+
+ (foo) cvn 12345 def
+
+2016-05-28 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afranges.c: Remove `UL' postfix from hex numbers.
+
+ Suggested by Alexei. `UL' is only needed for 16bit compilers, but
+ it seems noone is using this anymore (and we no longer test whether
+ FreeType compiles in such an environment). Otherwise, it is easy to
+ add the postfix to the `AF_UNICODE_RANGE' macro.
+
+2016-05-26 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Shrink bisection stack.
+
+ The convergence of Bézier flatteners is fast with the deviation
+ from straight line being asymptotically cut 4-fold on each bisection.
+ This justifies smaller bisection stack size.
+
+ * src/smooth/ftgrays.c (gray_TWorker): Remove common `bez_stack'.
+ (gray_render_conic): Create and use conic `bez_stack'. Move back the
+ band analysis from...
+ (gray_conic_to): ... here.
+ (gray_render_cubic): Create and use cubic `bez_stack'. Move back the
+ band analysis from...
+ (gray_cubic_to): ... here.
+ (gray_move_to): Updated.
+
+2016-05-25 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fixes for Armenian and Gujarati ranges.
+
+ * src/autofit/afranges.c (af_armn_uniranges): Corrected.
+ (af_guru_nonbase_uniranges): Make U+0A3E a base character.
+
+2016-05-24 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add support for Armenian script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Armenian.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Armenian standard characters.
+
+ * src/autofit/afranges.c: Add Armenian data.
+
+ * src/autofit/afstyles.h: Add Armenian data.
+
+2016-05-23 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/unix-cc.in (LINK_LIBRARY): Use `-export-symbols'.
+
+ This was commented about 10 years ago – I think the reason then to
+ disable libtool's `-export-symbols' option was to give some badly
+ programmed applications access to internal FreeType functions.
+
+ I believe that we should no longer take care of such programs; the
+ number of symbols exported should be rather restricted as much as
+ possible.
+
+2016-05-22 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add blue-zone support for Gurmukhi script.
+
+ This essentially moves the Gurmukhi script from the `Indic' hinter to
+ the `Latin' hinter.
+
+ * src/autofit/afblue.dat: Add blue zone data for Gurmukhi.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Gurmukhi standard characters and move
+ data out of AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afranges.c: Move Gurmukhi data out of
+ AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afstyles.h: Update Gurmukhi data; in particular, use
+ AF_WRITING_SYSTEM_LATIN.
+
+2016-05-21 Werner Lemberg <wl@gnu.org>
+
+ Minor clang++ fixes.
+
+ * src/base/ftobjs.c (FT_Add_Module), src/psaux/psobjs.c
+ (ps_parser_load_field), src/type1/t1load.c (parse_subrs): Add
+ initializer.
+
+ * src/cache/ftccache.h (FTC_CACHE_TRYLOOP_END): Avoid implicit
+ conversion from NULL to boolean.
+
+2016-05-21 Werner Lemberg <wl@gnu.org>
+
+ Work around a bug of the C 8.0.0.1 compiler on AIX 5.3 (#47955).
+
+ * include/freetype/internal/ftmemory.h (cplusplus_typeof): Use
+ braces for `extern "C++"'.
+
+2016-05-17 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [truetype] Make TT_LOADER_SET_PP support subpixel hinting [3/3].
+
+ * src/truetype/ttgload.c (TT_LOADER_SET_PP): Replace macro with...
+ (tt_loader_set_pp): ... this new function.
+ Update all callers.
+
+2016-05-17 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [truetype] New implementation of v38 bytecode interpreter [2/3].
+
+ This patch actually modifies the bytecode interpreter.
+
+ See added comments in `ttinterp.h' for more information on this and
+ the following commit in the series.
+
+ * src/truetype/ttinterp.c (SUBPIXEL_HINTING): Replaced by...
+ (NO_SUBPIXEL_HINTING, SUBPIXEL_HINTING_INFINALITY,
+ SUBPIXEL_HINTING_MINIMAL): ...new macros.
+ (Direct_Move, Direct_Move_X, Direct_Move_Y): Handle backward
+ compatibility.
+ Updated.
+ (Ins_RS, Ins_FDEF, Ins_ENDF, Ins_CALL, Ins_LOOPCALL, Ins_MD):
+ Updated.
+ (Ins_INSTCTRL): Handle native ClearType mode flag.
+ Updated.
+ (Ins_FLIPPT, Ins_FLIPRGON, Ins_FLIPRGOFF): Handle backward
+ compatibility.
+ (Move_Zp2_Point): Ditto.
+ (Ins_SHP): Updated.
+ (Ins_SHPIX): Handle backward compatibility.
+ Updated.
+ (Ins_MSIRP, Ins_MDAP, Ins_MIAP, Ins_MDRP, Ins_MIRP): Updated.
+ (Ins_ALIGNRP): Updated.
+ (Ins_IUP, Ins_DELTAP): Handle backward compatibility.
+ Updated.
+ (Ins_GETINFO): Handle v38 flags.
+ Updated.
+ (TT_RunIns): Handle backward compatibility mode.
+ Updated.
+
+2016-05-17 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [truetype] New implementation of v38 bytecode interpreter [1/3].
+
+ This patch prepares data structures and the like.
+
+ See added comments in `ttinterp.h' for more information on this and
+ the following commits in the series.
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_SUBPIXEL_HINTING): Assign values to differentiate
+ between subpixel versions.
+ (TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY,
+ TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL): New macros.
+
+ * include/freetype/ftttdrv.h (TT_INTERPRETER_VERSION_40): New macro.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Updated.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): Define new fields
+ `subpixel_hinting_lean', `vertical_lcd_lean',
+ `backward_compatibility', `iupx_called', iupy_called', and
+ `grayscale_cleartype' for new hinting mode.
+
+ * src/truetype/ttdriver.c (tt_property_set): Handle v38 and v40
+ interpreters conditionally.
+
+ * src/truetype/ttgload.c (TT_Hint_Glyph): Save phantom points unless
+ in v38 backward compatibility mode.
+ Updated.
+ (compute_glyph_metrics): Add v38 backward compatibility mode
+ constraint for adjusting advance widths.
+ Updated.
+ (tt_loader_init): Handle new flags `subpixel_hinting_lean',
+ `grayscale_cleartype', and `vertical_lcd_lean'.
+ Updated.
+ (tt_get_metrics, TT_Process_Simple_Glyph, TT_LOADER_SET_PP):
+ Updated.
+
+ * src/truetype/ttobjs.c (tt_driver_init): Conditionally set
+ default interpreter version number.
+
+ * src/truetype/ttsubpix.c, src/truetype/ttsubpix.h: Updated.
+
+2016-05-17 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix matrix scaling (#47848).
+
+ * include/freetype/config/ftstdlib.h (FT_LONG_MIN): New macro.
+
+ * src/cff/cffparse.c (cff_parse_font_matrix): Use largest scaling
+ value of all matrix coefficients to scale matrix.
+
+ * src/cff/cffobjs.c (cff_face_init): Use `matrix->yx' member for
+ matrix normalization if `matrix->yy' is zero.
+
+2016-05-16 Werner Lemberg <wl@gnu.org>
+
+ [base] Reject invalid sfnt Mac resource (#47891).
+
+ * src/base/ftobjs.c (open_face_PS_from_sfnt_stream): Check validity
+ of `CID ' and `TYPE1' table offset and length.
+
+2016-05-16 Werner Lemberg <wl@gnu.org>
+
+ [cid] Fix scanning for `StartData' and `/sfnts' (#47892).
+
+ * src/cid/cidparse.c (STARTDATA, STARTDATA_LEN, SFNTS, SFNTS_LEN):
+ New macros.
+ (cid_parser_new): Fix and document algorithm.
+
+2016-05-16 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [truetype] Improve the recursive reference detector.
+
+ The previous fix for #46372 misunderstood a composite glyph referring
+ same component twice as a recursive reference. See the discussion
+
+ https://lists.gnu.org/archive/html/freetype/2016-05/msg00000.html
+
+ Thanks to Khaled Hosny for finding this issue.
+
+ * src/truetype/ttgload.c (ft_list_get_node_at): A function to get
+ the i-th node from FT_List.
+ (load_truetype_glyph): In the traversal scan of the reference tree
+ in the composite glyph, we clear the nodes filled by previous
+ sibling chain.
+
+2016-05-07 Werner Lemberg <wl@gnu.org>
+
+ [cache] Allow value 0 for face ID.
+
+ We never dereference `face_id', and some implementations might use a
+ running number instead of a pointer. Additionally, disallowing
+ value zero was undocumented.
+
+ * src/cache/ftccmap.c (FTC_CMapCache_Lookup), src/cache/ftcmanag.c
+ (FTC_Manager_LookupFace, FTC_Manager_RemoveFaceID): Remove test for
+ `face_id'.
+
+2016-05-05 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] More efficient accounting of conic splits and draws.
+
+ A single decrement counter of segments to draw, instead of an array,
+ contains all the information necessary to decide when to split and
+ when to draw a conic segment. The number of splits before each draw is
+ equal to the number of trailing zeros in the counter.
+
+ * src/smooth/ftgrays.c (gray_TWorker): Remove `lev_stack'.
+ (gray_render_conic): Updated to use decrement counter of segments.
+
+2016-05-05 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Fix logic for `FT_Property_Set'.
+
+ Otherwise some properties could be set to arbitrary values, which is
+ harmless, but querying could give wrong positive results.
+
+ * src/cff/cffdrivr.c (cff_property_set) [hinting-engine],
+ * src/truetype/ttdriver.c (tt_property_set) [interpreter-version]:
+ Only allow defined values.
+
+2016-04-25 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add blue-zone support for Gujarati script.
+
+ This essentially moves the Gujarati script from the `Indic' hinter to
+ the `Latin' hinter.
+
+ * src/autofit/afblue.dat: Add blue zone data for Gujarati.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Gujarati standard characters and move
+ data out of AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afranges.c: Move Gujarati data out of
+ AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afstyles.h: Update Gujarati data; in particular, use
+ AF_WRITING_SYSTEM_LATIN.
+
+2016-04-24 Werner Lemberg <wl@gnu.org>
+
+ Minor.
+
+ * include/freetype/freetype.h (FT_HAS_*, FT_IS_*): Protect macro
+ argument with parentheses.
+
+2016-04-24 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix deallocation in case of error (#47726).
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Initialize fields in
+ `outline' that are going to be deallocated in case of error.
+
+2016-04-23 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve Georgian blue zone characters.
+
+ Suggested by Akaki Razmadze <razmadzekoko@gmail.com>.
+
+ * src/autofit/afblue.dat (AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM):
+ Updated.
+
+ * src/autofit/afblue.c: Regenerated.
+
+2016-04-16 David Capello <davidcapello@gmail.com>
+
+ [cmake] Honor SKIP_INSTALL_* settings (as used in zlib).
+
+ As FreeType depends on zlib, if we don't install zlib (e.g., because
+ we defined SKIP_INSTALL_ALL), FreeType cannot be installed, too
+ (cmake triggers an error saying that FreeType cannot be installed
+ because zlib target isn't in the export set).
+
+ * CMakeLists.txt: Honor `SKIP_INSTALL_HEADERS',
+ `SKIP_INSTALL_LIBRARIES', and `SKIP_INSTALL_ALL' settings.
+
+2016-04-16 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] Another fix for non-intermediate GX tuples.
+
+ * src/truetype/ttgxvar.c (ft_var_apply_tuple): Add some missing
+ cases.
+
+2016-04-12 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Remove forgotten macro.
+
+ * include/freetype/internal/internal.h
+ [FT_INTERNAL_POSTSCRIPT_GLOBALS_H]: Remove.
+
+2016-04-09 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add support for Georgian scripts.
+
+ Georgian is problematic, since `uppercase' forms of Mkhedruli
+ (called Mtavruli) are not yet defined in Unicode, which means that
+ proper blue zones can't be defined. However, there is already a
+ proposal submitted to Unicode; see
+
+ https://www.unicode.org/L2/L2016/16034-n4707-georgian.pdf
+
+ Additionally, due to historical reasons, Unicode treats Khutsuri as
+ the same script as Mkhedruli, and so does OpenType. However, since
+ the two scripts have completely different shapes it can happen that
+ blue zones differ considerably. The tag `geok' used here (derived
+ from ISO 15924) to differentiate the two scripts is not an OpenType
+ tag in use. If we now have a font that contains both glyphs for
+ Mkhedruli and Khutsuri, and it uses OpenType features for both also,
+ HarfBuzz unavoidably treats all glyphs as `geor'. As a consequence,
+ blue zones for `geok' are not used for glyphs involved in the
+ OpenType features.
+
+ An issue not yet resolved is which OpenType feature should be used
+ to access Mtavruli glyph shapes; right now, FreeType doesn't set up
+ support for them, but it is easy to add them later on as soon as
+ more information is available.
+
+ * src/autofit/afblue.dat: Add blue zone data for Georgian.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Georgian standard characters.
+
+ * src/autofit/afranges.c: Add Georgian data.
+
+ * src/autofit/afstyles.h: Add Georgian data.
+
+2016-04-05 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Provide dummy blue zone for pseudo script `none'.
+
+ Even if the dummy hinter is used as the handler for `none' (which
+ doesn't use blue zones), it is more consistent than the old value
+ (which was 0), pointing to Arabic...
+
+ * src/autofit/afblue.dat: Add `AF_BLUE_STRINGSET_NONE'.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afstyles.h (none_dflt): Use AF_BLUE_STRINGSET_NONE.
+
+2016-03-30 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrload.c (pfr_aux_name_load): Thinko (#47567).
+
+2016-03-30 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrload.c (pfr_log_font_count): Better font size estimate.
+
+2016-03-30 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrload.c (pfr_aux_name_load): Fix memory leak (#47567).
+
+2016-03-29 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftadvanc.c (FT_Get_Advances): Fix invalid left shift.
+
+2016-03-29 Werner Lemberg <wl@gnu.org>
+
+ [pfr] Fix binary search (#47514).
+
+ * src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Handle border
+ conditions correctly.
+
+2016-03-29 Werner Lemberg <wl@gnu.org>
+
+ [pfr] Minor.
+
+ * src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Replace `left',
+ `right', and `middle' with `min', `max', and `mid' as used in other
+ FreeType binary search code.
+ (pfr_load_bitmap_metrics): Fix invalid left shift.
+
+2016-03-29 Werner Lemberg <wl@gnu.org>
+
+ * src/pfr/pfrtypes.h: Replace all enums with macros.
+
+ We need `~FOO' to unset bits, and only with unsigned values (which
+ `enum' isn't normally) this works cleanly.
+
+2016-03-26 Werner Lemberg <wl@gnu.org>
+
+ [pfr] Robustify bitmap strike handling (#47514).
+
+ We did a binary search for a charcode without ensuring that the
+ searched data is ordered. Validating the order is now done lazily,
+ this is, the first access to a bitmap glyph triggers the order check
+ in the corresponding bitmap strike.
+
+ * src/pfr/pfrtypes.h (PFR_BitmapFlags): New values
+ `PFR_BITMAP_VALID_CHARCODES' and `PFR_BITMAP_CHARCODES_VALIDATED'.
+
+ * src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Make `flags' argument
+ a pointer. Handle new PFR_BITMAP_XXX flags.
+ (pfr_slot_load_bitmap): Updated.
+
+2016-03-26 Werner Lemberg <wl@gnu.org>
+
+ [pfr] Fix handling of compound glyphs.
+
+ Extra items are indicated with different bit positions.
+
+ * src/pfr/pfrtypes.h (PFR_GlyphFlags): Replace
+ `PFR_GLYPH_EXTRA_ITEMS' with `PFR_GLYPH_SIMPLE_EXTRA_ITEMS' and
+ `PFR_GLYPH_COMPOUND_EXTRA_ITEMS'.
+
+ * src/pfr/pfrgload.c (pfr_glyph_load_simple,
+ pfr_glyph_load_compound): Use them.
+
+2016-03-25 Werner Lemberg <wl@gnu.org>
+
+ [pfr] Minor.
+
+ * src/pfr/pfrsbit.c, src/pfr/pfrobjs.c: Use flag names instead of
+ bare numbers.
+
+2016-03-25 Werner Lemberg <wl@gnu.org>
+
+ [pfr] Various clang sanitizer fixes.
+
+ * src/pfr/pfrsbit.c (pfr_load_bitmap_metrics): Correctly handle
+ signed nibbles.
+ (pfr_slot_load_bitmap): Correctly exit frame in case of error.
+ Fix invalid left shifts.
+
+2016-03-23 Werner Lemberg <wl@gnu.org>
+
+ Rename `VERSION.DLL' (#47472).
+
+ * docs/VERSION.DLL: Renamed to...
+ * docs/VERSIONS.TXT: ...this.
+
+2016-03-23 Werner Lemberg <wl@gnu.org>
+
+ [raster, smooth] Directly test outline size (#47500).
+
+ This improves stand-alone compilation.
+
+ * src/base/ftoutln.c (FT_Outline_Render): Move cbox size test to...
+
+ * src/raster/ftraster.c (ft_black_render), src/smooth/ftgrays.c
+ (gray_raster_render): ...these functions.
+
+2016-03-23 Werner Lemberg <wl@gnu.org>
+
+ [raster, smooth] Fix some clang sanitizer runtime issues.
+
+ * src/raster/ftraster.c (ft_black_reset, ft_black_set_mode,
+ ft_black_render): Harmonize signatures with `ftimage.h'.
+
+ * src/smooth/ftgrays.c (gray_raster_render, gray_raster_reset):
+ Ditto.
+
+2016-03-22 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Minor.
+
+ This fixes an AddressSanitizer issue:
+
+ ttgload.c:430:7: runtime error: null pointer passed as argument 1,
+ which is declared to never be null
+
+2016-03-21 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afhints.c (af_glyph_hints_reload): Thinko.
+
+ This fixes the previous commit to this file.
+
+2016-03-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Partly revert recent changes.
+
+ * src/smooth/ftgrays.c (gray_conic_to, gray_cubic_to): Rework
+ conditions to fix rendering issues.
+
+2016-03-20 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Show `near' points in tracing.
+
+ * src/autofit/afhints.h (AF_FLAG_NEAR): New macro.
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_points): Implement it.
+ (af_glyph_hints_reload): Handle AF_FLAG_NEAR.
+
+2016-03-18 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Minor refactoring and microoptimizations.
+
+ * src/smooth/ftgrays.c (gray_render_conic, gray_render_cubic): Move
+ band clipping from here.
+ (gray_conic_to, gray_cubic_to): ... to here.
+ (gray_render_line, gray_render_scanline): Initialize variables closer
+ to their use.
+
+2016-03-17 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Minor refactoring.
+
+ * src/smooth/ftgrays.c (gray_render_conic, gray_render_cubic): Move
+ upscaling from here.
+ (gray_conic_to, gray_cubic_to): ... to here.
+
+2016-03-15 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/aflatin.c (af_latin_compute_stem_width): Optimize.
+
+2016-03-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Temporarily revert 6eb6158dd787 (#47114).
+
+ * src/smooth/ftgrays.c (gray_render_line): Old implementation.
+
+2016-03-12 Werner Lemberg <wl@gnu.org>
+
+ [ftfuzzer] Improve coverage of rasterfuzzer.
+
+ * src/tools/ftfuzzer/rasterfuzzer.cc (LLVMFuzzerTestOneInput): Use
+ input data for `tags' array also.
+ Trim input data to get more positive hits.
+
+2016-03-11 Pavlo Denysov <paul.kiev+savannah@gmail.com>
+
+ Fix CMake issues for iOS (patch #8941).
+
+ * CMakeLists.txt (CMAKE_TOOLCHAIN_FILE): Fix directory.
+ * builds/cmake/iOS.cmake: No longer enforce gcc.
+
+2016-03-09 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] Fix handling of non-intermediate GX tuples.
+
+ We probably did not notice this as all fonts we tested had only
+ tuple_coords[i] be +1 or -1 for non-intermediate tuples.
+
+ * src/truetype/ttgxvar.c (ft_var_apply_tuple): Implement it.
+
+2016-03-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Refuse to render enormous outlines (#47114).
+
+ The goal is to avoid integer overflows in the rendering algorithms.
+ The limit is chosen arbitrarily at some 2^18 pixels, which should be
+ enough for modern devices including printers.
+
+ * src/base/ftoutln.c (FT_Outline_Render): Check CBox and reject
+ enormous outlines.
+
+2016-03-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Replace left shifts with multiplications (#47114).
+
+ * src/smooth/ftgrays.c (SUBPIXELS, UPSCALE, DOWNSCALE): Do it.
+
+2016-03-05 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Avoid excessive stem length rounding (#25392).
+
+ * src/autofit/aflatin.c (af_latin_compute_stem_width): Add argument
+ to pass difference between hinted and unhinted position of base
+ point; use this to adjust the stem width depending on the PPEM so
+ that it doesn't become too large under certain circumstances.
+ Update all callers using value 0 for this argument except...
+ (af_latin_align_linked_edge): Pass position delta of base point to
+ `af_latin_compute_stem_width'.
+
+2016-03-05 J Raynor <jxraynor@gmail.com>
+
+ Make FreeType compile on AIX out of the box.
+
+ * builds/unix/configure.raw (XX_ANSIFLAGS): Don't use `-ansi' on
+ AIX.
+
+2016-03-01 Werner Lemberg <wl@gnu.org>
+ Kostya Serebryany <kcc@google.com>
+
+ [ftfuzzer] Add unit for testing smooth and black rasterizers.
+
+ * src/tools/ftfuzzer/rasterfuzzer.cc: New file.
+
+2016-03-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix reallocation error introduced in 2016-02-27 (#47310).
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_segments): Reassign
+ `prev_segment' after reallocation.
+
+2016-03-01 Werner Lemberg <wl@gnu.org>
+
+ Fix clang warnings.
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_segments): Use
+ FT_UShort for `min_flags' and `max_flags'.
+ Initialize `prev_*' variables.
+
+ * src/cff/cffobjs.c (cff_face_init) [FT_DEBUG_LEVEL_TRACE]: Fix
+ types of local variables.
+
+ * src/smooth/ftgrays.c (gray_dump_cells) [FT_DEBUG_LEVEL_TRACE]:
+ Update `printf' format string.
+
+ * src/tools/ftfuzzer/ftfuzzer.cc (setIntermediateAxis): Add cast.
+ (LLVMFuzzerTestOneInput): Fix loop type.
+
+2016-02-29 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add blue-zone support for Sinhala script.
+
+ This essentially moves the Sinhala script from the `Indic' hinter to
+ the `Latin' hinter.
+
+ * src/autofit/afblue.dat: Add blue zone data for Sinhala.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Sinhala standard character and move data
+ out of AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afranges.c: Move Sinhala data out of
+ AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afstyles.h: Update Sinhala data; in particular, use
+ AF_WRITING_SYSTEM_LATIN.
+
+2016-02-27 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Properly handle spikes pointing to the x-axis.
+
+ An example that gets better rendered is glyph `uusignTaml' (glyph
+ index 2286) in font `FreeSerif.ttf' (Version 0412.2263) at 22ppem.
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_segments): Properly
+ handle segments where the last point of the first segment is
+ identical to the first point in the second one. This can happen for
+ malformed fonts or spikes. We either merge the new segment with the
+ previous one (both segments point into the same direction), or we
+ discard the shorter segment if they point into different directions.
+
+2016-02-27 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Minor code clean-up.
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_segments): Change
+ some local variable names to better differentiate between values
+ along a segment and values orthogonal to it.
+
+2016-02-26 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve BOUND action.
+
+ In complex glyph shapes, the original logic was too simple to cater
+ for situations that would actually need something similar to PS Hint
+ masks. This fix should alleviate the worst cases.
+
+ * src/autofit/aflatin.c (af_latin_hint_edges): Don't allow
+ complete disappearance of stems.
+
+2016-02-25 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add blue-zone support for Tamil script.
+
+ This essentially moves the Tamil script from the `Indic' hinter to
+ the `Latin' hinter.
+
+ * src/autofit/afblue.dat: Add blue zone data for Tamil.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Tamil standard character and move data
+ out of AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afranges.c: Move Tamil data out of
+ AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afstyles.h: Update Tamil data; in particular, use
+ AF_WRITING_SYSTEM_LATIN.
+
+2016-02-18 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add blue-zone support for Malayalam script.
+
+ This essentially moves the Malayalam script from the `Indic' hinter
+ to the `Latin' hinter.
+
+ * src/autofit/afblue.dat: Add blue zone data for Malayalam.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Malayalam standard characters and move
+ data out of AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afranges.c: Move Malayalam data out of
+ AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afstyles.h: Update Malayalam data; in particular, use
+ AF_WRITING_SYSTEM_LATIN.
+
+2016-02-16 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Fix integer overflow (#47114).
+
+ * src/smooth/ftgrays.c (TArea): Make it unconditionally `long'.
+
+2016-02-15 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffparse.c (cff_parse_multiple_master): Improve tracing.
+
+2016-02-15 Werner Lemberg <wl@gnu.org>
+
+ [cff] Handle T2 operator only with old CFF engine (#47157).
+
+ * src/cff/cffparse.c (cff_parser_run) <opcode 31>: Enclose with
+ #ifdef CFF_CONFIG_OPTION_OLD_ENGINE...#endif.
+
+2016-02-15 Werner Lemberg <wl@gnu.org>
+
+ [cff] Partially handle `load' and `store' ops in old CFF engine.
+
+ Now all glyphs of MM CFFs like `ITCGaramondMM-It.otf' can be
+ displayed.
+
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings) <cff_op_store,
+ cff_op_load>: Partially implement it.
+
+ * src/cff/cffparse.c (cff_parser_init): Add new parameter to pass
+ the number of Multiple Master axes.
+ Update all callers.
+ (cff_parse_multiple_master): Get number of axes.
+ (cff_parser_run) <opcode 31>: Updated.
+ * src/cff/cffparse.h: Updated.
+ (CFF_ParserRec): Add `num_axes' field.
+
+ * src/cff/cffload.c: Updated.
+
+ * src/cff/cfftypes.h (CFF_FontRecDictRec): Add `num_axes' field.
+
+2016-02-15 Werner Lemberg <wl@gnu.org>
+
+ [cff] Correctly trace SIDs that contain NULL bytes.
+
+ We need this to properly trace Multiple Master CFFs, which contain
+ two SIDs that are charstrings.
+
+ This commit makes FreeType also show the last SID, omitted
+ previously due to a bug.
+
+ * src/cff/cfftypes.h (CFF_FontRec): Add `string_pool_size' field.
+
+ * src/cff/cffload.c (cff_index_get_pointers): Add argument to return
+ the pool size.
+ Update all callers.
+
+ * src/cff/cffobjs.c (cff_face_init) [FT_DEBUG_LEVEL_TRACE]: Directly
+ access `cff->strings' to display the non-default strings.
+
+2016-02-14 Werner Lemberg <wl@gnu.org>
+
+ * src/base/fthash.c: Include FT_INTERNAL_MEMORY_H.
+
+2016-02-14 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffparse.c: Include `cffgload.h'.
+
+ Problem reported by Colin Walters <walters@verbum.org>.
+
+2016-02-14 Werner Lemberg <wl@gnu.org>
+
+ [cff] Make old CFF engine show MM CFFs (without variations).
+
+ The new code only displays the first master in the font.
+
+ * src/cff/cffgload.c (cff_decode_parse_charstrings): Add new
+ parameter to allow function calls from dictionaries also.
+ <cff_op_blend>: Partially implement it.
+ Update all callers.
+ * src/cff/cffgload.h: Updated.
+
+ * src/cff/cffparse.c (cff_parser_init): Add new parameter to pass the
+ number of Multiple Master designs.
+ Update all callers.
+ (cff_parse_multiple_master): New function to rudimentarily parse
+ operator.
+ (cff_parser_run): Handle `T2' operator.
+ * src/cff/cffparse.h: Updated.
+ (CFF_ParserRec): Add `num_designs' field.
+
+ * src/cff/cffload.c: Updated.
+
+ * src/cff/cfftoken.h: Handle `MultipleMaster' operator.
+
+ * src/cff/cfftypes.h (CFF_FontRecDictRec): Add `num_designs' field.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Don't handle `fvar' table for
+ MM CFFs.
+
+2016-02-09 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Don't emit trailing newlines.
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::make_html_code):
+ Use `rstrip'.
+
+2016-02-07 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.6.3 released.
+ =========================
+
+
+ Tag sources with `VER-2-6-3'.
+
+ * docs/VERSION.DLL: Update documentation and bump version number to
+ 2.6.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.6.2/2.6.3/, s/262/263/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 3.
+
+ * builds/unix/configure.raw (version_info): Set to 18:3:12.
+ * CMakeLists.txt (VERSION_PATCH): Set to 3.
+
+ * docs/CHANGES: Updated.
+
+2016-02-07 Werner Lemberg <wl@gnu.org>
+
+ Fix another runtime error found by clang's sanitizer (#47082).
+
+ * src/base/ftstroke.c (ft_stroke_border_export): Properly handle
+ empty input buffer.
+
+2016-02-07 Werner Lemberg <wl@gnu.org>
+
+ Fix runtime errors found by clang's sanitizer (#47082).
+
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal), src/base/ftoutln.c
+ (FT_Outline_Copy), src/cache/ftcsbits.c (ftc_sbit_copy_bitmap):
+ Properly handle empty input buffer.
+
+2016-02-07 Werner Lemberg <wl@gnu.org>
+
+ [cff] Minor.
+
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings) <cff_op_sqrt>:
+ Remove dead code.
+
+2016-02-07 Werner Lemberg <wl@gnu.org>
+
+ [cff] Implement missing operators in new engine (except `random').
+
+ * src/cff/cf2font.h (CF2_STORAGE_SIZE): New macro.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString): Implement the
+ following operators: abs, add, and, div, drop, dup, eq, exch, get,
+ ifelse, index, mul, neg, not, or, put, roll, sqrt, sub.
+
+ * src/cff/cf2stack.h, src/cff/cf2stack.c (cf2_stack_roll): New
+ auxiliary function for `roll' operator.
+
+2016-02-06 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix some Type 2 operators in old CFF engine.
+
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings): Fix `eq'
+ operator, add `not' and (unsupported) `blend' operators.
+
+2016-02-05 Sebastian Rasmussen <sebras@gmail.com>
+
+ Make direct call of `make install' work (#47072).
+
+ * builds/unix/unix-def.in (freetype-config): Make sure
+ `freetype-config' is generated for both make targets (`all' and
+ `install').
+
+2016-02-05 Werner Lemberg <wl@gnu.org>
+
+ [base] Fix advance width loading for MM and GX fonts (#47064).
+
+ * src/base/ftadvanc.c (LOAD_ADVANCE_FAST_CHECK): Return false for
+ MM and GX fonts.
+ Update callers.
+
+2016-02-03 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix handling of face_index == -1 for pure CFF.
+
+ * src/cff/cffobjs.c (cff_face_init): Return correct number of faces.
+
+2016-01-30 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Minor tracing improvement.
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_points): Insert newline
+ at the start of a new contour.
+
+2016-01-28 Nikolaus Waxweiler <madigens@gmail.com>
+
+ Remove unpatented hinter (3/3).
+
+ * include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_UNPATENTED_HINTING): Remove.
+
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Remove
+ `ignore_unpatented_hinter' field.
+ Update users.
+ (FT_DEBUG_HOOK_UNPATENTED_HINTING): Remove.
+ Update users.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Remove
+ `unpatented_hinting' field.
+ Update users.
+
+ * src/base/ftpatent.c (_tt_check_patents_in_range,
+ _tt_check_patents_in_table, _tt_face_check_patents): Remove.
+ (FT_Face_CheckTrueTypePatents, FT_Face_SetUnpatentedHinting):
+ Replace code with dummies.
+
+ * src/truetype/ttobjs.c (tt_face_init): Remove now defunct code.
+ * src/truetype/ttobjs.h (TT_GraphicsState): Remove `both_x_axis'
+ field.
+
+2016-01-28 Nikolaus Waxweiler <madigens@gmail.com>
+
+ Remove unpatented hinter (2/3).
+
+ * devel/ftoption.h (TT_CONFIG_OPTION_UNPATENTED_HINTING): Remove.
+
+2016-01-28 Nikolaus Waxweiler <madigens@gmail.com>
+
+ Remove unpatented hinter (1/3).
+
+ * src/truetype/ttinterp.c [TT_CONFIG_OPTION_UNPATENTED_HINTING]:
+ Remove all code related to this macro.
+
+2016-01-28 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add blue-zone support for Kannada script.
+
+ This essentially moves the Kannada script from the `Indic' hinter to
+ the `Latin' hinter.
+
+ * src/autofit/afblue.dat: Add blue zone data for Kannada.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Kannada standard characters and move
+ data out of AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afranges.c: Move Kannada data out of
+ AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afstyles.h: Update Kannada data; in particular, use
+ AF_WRITING_SYSTEM_LATIN.
+
+2016-01-22 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Better access to 64-bit integers for C99 compilers.
+
+ * include/freetype/config/ftconfig.h [FT_LONG64]: Use
+ __STDC_VERSION__ to define 64-bit integers.
+ * builds/unix/ftconfig.in [FT_LONG64]: Ditto.
+ * builds/vms/ftconfig.h [FT_LONG64]: Ditto.
+
+2016-01-21 Werner Lemberg <wl@gnu.org>
+
+ [gxvalid] Remove commented out code.
+
+ * src/gxvalid/gxvcommn.c (gxv_EntryTable_validate): Do it.
+
+2016-01-20 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Complete last autofit commit.
+
+ Problem reported by Kostya Serebryany <kcc@google.com>.
+
+ * src/autofit/afshaper.c (af_shaper_get_coverage)
+ [!FT_CONFIG_OPTION_USE_HARFBUZZ]: Update signature.
+
+2016-01-20 Werner Lemberg <wl@gnu.org>
+
+ Still handle `__FTERRORS_H__'.
+
+ We need this for backward compatibility.
+
+ Problem reported by John Emmas <johne53@tiscali.co.uk>.
+
+ * include/freetype/fterrors.h: Fix inclusion guard so that
+ undefining either `FTERRORS_H_' or `__FTERRORS_H__' works as
+ expected.
+
+2016-01-19 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix handling of default script.
+
+ Patch taken from ttfautohint, commit
+ 071ae2c00e0d67f9d19418f4fade1c23d27dc185.
+
+ There were two bugs.
+
+ - We now use non-standard script tags like `khms' for special
+ purposes. However, HarfBuzz maps such tags to `DFLT', and
+ without this commit the associated lookups were incorrectly
+ assigned to the non-standard tags.
+
+ - Let's assume we have a Bengali font, and the font's `DFLT'
+ script tag handles the necessary lookups for Bengali, too.
+ Without this commit, the `DFLT' lookups were assigned to
+ ttfautohint's default script (usually `latn') before the
+ standard lookups for Bengali were handled.
+
+ We now have the following order while searching for covered
+ glyph indices.
+
+ special features of scripts (e.g. `sups' for Cyrillic)
+ Unicode mappings of scripts
+ remaining features of scripts (especially important for Indic
+ scripts)
+ default features of default script
+
+ * src/autofit/afshaper.c, src/autofit/afshaper.h
+ (af_shaper_get_coverage): Add boolean parameter to indicate default
+ script.
+ Update all callers.
+
+ * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
+ Fix search order for coverages.
+
+2016-01-19 Werner Lemberg <wl@gnu.org>
+
+ Various minor clang fixes.
+
+ * src/autofit/afcjk.c (af_cjk_metrics_init_widths),
+ src/autofit/aflatin.c (af_latin_metrics_init_widths): Initialize
+ `ch'.
+
+ * src/base/ftcalc.c (FT_MulFix) [FT_LONG64]: Add cast.
+
+ * src/base/ftdbgmem.c (ft_mem_table_destroy): Add cast.
+
+ * src/base/fthash.c (hash_num_lookup): Add cast.
+
+ * src/base/fttrigon.c (ft_trig_downscale) [FT_LONG64]: Fix cast.
+
+ * src/gxvalid/gxvcommn.c (gxv_EntryTable_validate): Comment out
+ redundant code.
+
+ * src/type1/t1driver.c (t1_get_ps_font_value) <PS_DICT_SUBR>: Add
+ cast.
+
+ * src/type1/t1load.c (parse_subrs): Fix type of `count'.
+
+2016-01-19 Derek B. Noonburg <derekn@glyphandcog.com>
+
+ [truetype] Add another tricky font.
+
+ * src/truetype/ttobjs.c (TRICK_SFNT_IDS_NUM_FACES): Increase.
+ (sfnt_id): Add variant of `DFKaiShu'.
+
+2016-01-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Empower `FT_Library_SetLcdFilterWeights'.
+
+ * src/base/ftlcdfil.c (FT_Library_SetLcdFilterWeights): Enable filter
+ in addition to setting weights.
+ (FT_Library_SetLcdFilter): Clean out FT_FORCE_LIGHT_LCD_FILTER and
+ FT_FORCE_LEGACY_LCD_FILTER.
+ * include/freetype/ftlcdfil.h: Documentation update.
+
+2016-01-12 Werner Lemberg <wl@gnu.org>
+
+ Don't use macro names that start with `_[A-Z]' [3/3].
+
+ Such macro names are reserved for both C and C++.
+
+ * src/cache/ftccache.h: s/_FTC_FACE_ID_HASH/FTC_FACE_ID_HASH/.
+ Update all callers.
+ (FTC_CACHE_LOOKUP_CMP): Replace `_XXX' with `XXX_'.
+ * src/cache/ftcmru.c (FTC_MRULIST_LOOKUP_CMP): Ditto.
+
+2016-01-12 Werner Lemberg <wl@gnu.org>
+
+ Don't use macro names that start with `_[A-Z]' [2/3].
+
+ Such macro names are reserved for both C and C++.
+
+ * include/freetype/ftimage.h, src/raster/ftraster.c,
+ src/smooth/ftgrays.c, src/smooth/ftgrays.h:
+ s/_STANDALONE_/STANDALONE_/.
+
+2016-01-12 Werner Lemberg <wl@gnu.org>
+
+ 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 Werner Lemberg <wl@gnu.org>
+
+ 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 Werner Lemberg <wl@gnu.org>
+
+ 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-10 Jered Gray <jegray@google.com>
+
+ [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.
+
+2015-12-25 Werner Lemberg <wl@gnu.org>
+
+ [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-24 Werner Lemberg <wl@gnu.org>
+
+ [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-23 Werner Lemberg <wl@gnu.org>
+
+ [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, src/autofit/afglobal.h,
+ src/autofit/afpic.c, src/autofit/afranges.h, src/autofit/afshaper.c,
+ src/autofit/aftypes.h: Extend `SCRIPT' definitions.
+
+2015-12-22 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_subrs): Fix memory leak (#46744).
+
+2015-12-22 Werner Lemberg <wl@gnu.org>
+
+ [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-21 Werner Lemberg <wl@gnu.org>
+
+ [type1] Avoid shift of negative numbers (#46732).
+
+ * src/type1/t1load.c (parse_subrs): Do it.
+
+2015-12-20 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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-19 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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-15 Werner Lemberg <wl@gnu.org>
+
+ [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-14 Ben Wagner <bungeman@gmail.com>
+
+ [bdf] Remove dead code (#46625).
+
+ The BDF specification only allows decimal numbers, no octal or
+ hexadecimal 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 Werner Lemberg <wl@gnu.org>
+
+ [base] Fix calls to `FT_Stream_Seek'.
+
+ * src/base/ftobjs.c (Mac_Read_sfnt_Resource, FT_Open_Face): Set
+ `error'.
+
+2015-12-14 Ben Wagner <bungeman@gmail.com>
+
+ [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 length from
+ user supplied data. Use of this these values must be checked.
+
+2015-12-13 Werner Lemberg <wl@gnu.org>
+
+ [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-12 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Minor.
+
+2015-12-12 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afscript.h: Avoid potential crash.
+
+2015-12-10 Werner Lemberg <wl@gnu.org>
+
+ [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-10 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Remove redundant code.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_widths): Do it.
+
+2015-12-09 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix tracing message.
+
+ * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Display
+ inactive blue zones also.
+
+2015-12-06 Werner Lemberg <wl@gnu.org>
+
+ * 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-06 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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/afglobal.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 Werner Lemberg <wl@gnu.org>
+
+ [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 Werner Lemberg <wl@gnu.org>
+
+ [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-05 Werner Lemberg <wl@gnu.org>
+
+ * 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 Werner Lemberg <wl@gnu.org>
+
+ * 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 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afblue.hin (GET_UTF8_CHAR): Use `do...while(0)'.
+
+ * src/autofit/afblue.h: Regenerated.
+
+2015-12-05 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afwarp.c: s/INT_MIN/FT_INT_MIN/.
+
+2015-12-03 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/install.mk (install): Remove stale `ft2build.h'.
+
+2015-12-01 Werner Lemberg <wl@gnu.org>
+
+ [type1] Avoid dangling pointer (#46572).
+
+ * src/type1/t1afm.c (T1_Read_Metrics): Properly reset
+ `face->afm_data'.
+
+2015-11-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * include/freetype/ftlcdfil.h: Documentation tweak.
+
+2015-11-28 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.6.2 released.
+ =========================
+
+
+ Tag sources with `VER-2-6-2'.
+
+ * docs/VERSION.DLL: Update documentation and bump version number to
+ 2.6.2.
+
+ * 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.6.1/2.6.2/, s/261/262/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 2.
+
+ * builds/unix/configure.raw (version_info): Set to 18:2:12.
+ * CMakeLists.txt (VERSION_PATCH): Set to 2.
+
+ * docs/CHANGES: Updated.
+
+2015-11-28 Werner Lemberg <wl@gnu.org>
+
+ Fix C++ compilation.
+
+ * src/autofit/afloader.c: Include FT_INTERNAL_CALC_H.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Pacify compiler.
+
+2015-11-28 Nikolaus Waxweiler <madigens@gmail.com>
+
+ Change default LCD filter to be normalized and color-balanced.
+
+ * src/base/ftlcdfil.c (FT_Library_SetLcdFilter): Update
+ `default_filter'.
+
+2015-11-28 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Allow references to section names.
+
+ In the reference, we show the section's title enclosed in single
+ quotes.
+
+ * src/tools/docmaker/formatter.py (Formatter::__init__): Collect
+ section names as identifiers.
+
+ * src/tools/docmaker/tohtml.py (section_title_header): Split into...
+ (section_title_header1, section_title_header2): ... these two
+ strings.
+ (HtmlFormatter::make_block_url, make_html_word, html_source_quote):
+ Handle sections.
+ (HtmlFormatter::section_enter): Updated to add `id' HTML attribute.
+
+2015-11-27 Tamas Kenez <tamas.kenez@adasworks.com>
+
+ [cmake] Add script to test the config module.
+
+ * builds/cmake/testbuild.sh: New file.
+
+2015-11-27 Tamas Kenez <tamas.kenez@adasworks.com>
+
+ * CMakeLists.txt: Create `freetype-config.cmake' config module.
+
+2015-11-27 Tamas Kenez <tamas.kenez@adasworks.com>
+
+ * CMakeLists.txt: Set CMAKE_DEBUG_POSTFIX to `d'.
+
+2015-11-27 Tamas Kenez <tamas.kenez@adasworks.com>
+
+ [cmake] Add better control of library dependencies.
+
+ * CMakeLists.txt: Add `WITH_*' variables to force/auto/omit
+ ZLIB/BZip2/PNG/HarfBuzz.
+
+2015-11-27 Tamas Kenez <tamas.kenez@adasworks.com>
+
+ [cmake] Make `FindHarfBuzz' observe the REQUIRED option.
+
+ * builds/cmake/FindHarfBuzz.cmake: Implement it.
+
+2015-11-27 Werner Lemberg <wl@gnu.org>
+
+ [cmake] Collect files specific to cmake in `builds/cmake'.
+
+ * builds/FindHarfBuzz.cmake: Move to ...
+ * builds/cmake/FindHarfBuzz.cmake: ... this place.
+
+ * CMakeLists.txt (CMAKE_MODULE_PATH): Updated.
+
+2015-11-27 Alexander Bock <alexander.j.bock@nasa.gov>
+
+ CMakeLists.txt: Honour new command line flag `FREETYPE_NO_DIST'.
+
+2015-11-26 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Allow `foo[bar]' as identifier.
+
+ We need this to handle equally named properties in different
+ modules.
+
+ * src/tools/docmaker/content.py (re_identifier),
+ src/tools/docmaker/sources.py (re_crossref): Allow `foo[bar]'.
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::make_html_word,
+ HtmlFormatter::index_exit, HtmlFormatter::section_enter,
+ HtmlFormatter::block_enter): Handle `foo[bar]'.
+
+2015-11-25 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdflib.c (bdf_load_font): Fix small memory leak (#46480).
+
+ (_bdf_parse_glyphs): Always reset `p->glyph_name' after moving its
+ contents.
+
+2015-11-21 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftcalc.h: Don't use `register' keyword.
+
+ This fixes compiler warnings.
+
+ Reported by Behdad.
+
+2015-11-20 Werner Lemberg <wl@gnu.org>
+
+ Add `FT_LCD_FILTER_LEGACY1' enum value.
+
+ This does the same as `FT_LCD_FILTER_LEGACY'.
+
+ See
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=92981
+
+ for the reasoning.
+
+ * include/freetype/ftlcdfil.h (FT_LcdFilter): New value
+ `FT_LCD_FILTER_LEGACY1'.
+
+ * src/base/ftlcdfil.c (FT_Library_SetLcdFilter): Use it.
+
+2015-11-15 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afhints.c (af_get_segment_index): Fix it.
+
+ The old code was too simple, returning invalid values in most cases
+ where a segment crosses the contour start.
+
+2015-11-15 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdflib.c (bdf_load_font): Fix small memory leak (#46439).
+
+2015-11-11 Werner Lemberg <wl@gnu.org>
+
+ [cff, autofit] Switch off stem darkening by default.
+
+ * src/autofit/afmodule.c (af_autofitter_init), src/cff/cffobjs.c
+ (cff_driver_init): Do it.
+
+2015-11-10 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+ Allow native CFF hinter in FT_RENDER_MODE_LIGHT.
+
+ Both the native CFF hinter and the auto-hinter now have a very
+ similar rendering style.
+
+ * include/freetype/freetype.h: Mention that FT_LOAD_TARGET_LIGHT no
+ longer implies FT_LOAD_FORCE_AUTOHINT.
+
+ * include/freetype/ftmodapi.h (FT_MODULE_DRIVER_HINTS_LIGHTLY): New
+ macro.
+
+ * include/freetype/internal/ftobjs.h (FT_DRIVER_HINTS_LIGHTLY): New
+ macro.
+
+ * src/cff/cffdrivr.c (cff_driver_class): Use it.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Update auto-hinter selection
+ logic.
+
+2015-11-09 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidload.c (cid_face_open): Fix GDBytes guard (#46408).
+
+2015-11-09 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Remove integer to pointer conversion compiler warning.
+
+ Problem reported by Alexei.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Use a solution found
+ in the glib library to fix the issue.
+
+2015-11-08 Behdad Esfahbod <behdad@behdad.org>
+
+ [sfnt] Accept version 3 of `EBLC' and `CBLC' tables also.
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbit): Implement it.
+
+2015-11-08 Philipp Knechtges <philipp-dev@knechtges.com>
+
+ [autofit] Don't distort (latin) glyphs too much (#46195).
+
+ * src/autofit/aflatin.h (AF_LatinBlueRec): Add `ascender' and
+ `descender' fields.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Collect
+ ascender and descender data for blue zones.
+ (af_latin_metrics_scale_dim): Reject vertical scaling values that
+ change the result by more than two pixels.
+
+2015-11-05 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Ignore embedded bitmaps with zero size (#46379).
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bit_aligned): Implement
+ it.
+
+2015-11-04 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Catch infinite recursion in subglyphs (#46372).
+
+ * include/freetype/internal/tttypes.h (TT_LoaderRec): New field
+ `composites'.
+
+ * src/truetype/ttgload.c: Include FT_LIST_H.
+ (load_truetype_glyph): Add composite subglyph index to a list;
+ abort if index is already in list.
+ (tt_loader_init): Updated.
+ (tt_loader_done): New function.
+ (TT_Load_Glyph): Call `tt_loader_done'.
+
+2015-11-04 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Better tracing of composite glyphs.
+
+ * src/truetype/ttgload.c (TT_Load_Composite_Glyph,
+ load_truetype_glyph): Implement it.
+
+2015-11-03 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Protect against zero-size bitmaps (#46345).
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bitmap): Check
+ `glyph_size'.
+
+2015-11-02 Nikolaus Waxweiler <madigens@gmail.com>
+
+ * src/autofit/afloader.c (af_loader_load_g): Implement emboldening.
+
+2015-11-02 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [autofit] Implement darkening computation function.
+
+ This is a crude adaption of the original `cf2_computeDarkening'
+ function.
+
+ * src/autofit/afloader.c (af_intToFixed, af_fixedToInt,
+ af_floatToFixed): New macros, taken from `cf2fixed.h'.
+ (af_loader_compute_darkening): New function.
+ * src/autofit/afloader.h: Updated.
+
+2015-11-02 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [autofit] Add functions to get standard widths for writing systems.
+
+ We need the computed standard horizontal and vertical widths for the
+ emboldening calculation. This method provides a convenient way to
+ extract it from writing-system-specific metrics structures, which
+ all script definitions must implement.
+
+ * src/autofit/aftypes.h (AF_WritingSystem_GetStdWidthsFunc): New
+ function type.
+ (AF_WritingSystemClassRec): New member `style_metrics_getstdw'.
+ (AF_DEFINE_WRITING_SYSTEM_CLASS): Updated.
+
+ * src/autofit/afcjk.c (af_cjk_get_standard_width): New function.
+ (af_cjk_writing_system_class): Updated.
+ * src/autofit/afdummy.c (af_dummy_writing_system_class): Updated.
+ * src/autofit/afindic.c (af_cjk_get_standard_width): New function.
+ (af_indic_writing_system_class): Updated.
+ * src/autofit/aflatin.c (af_latin_get_standard_width): New function.
+ (af_indic_writing_system_class): Updated.
+ * src/autofit/aflatin.c (af_latin_get_standard_width): New function.
+ (af_indic_writing_system_class): Updated.
+
+2015-11-02 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [autofit] Extend `AF_FaceGlobalsRec' to hold emboldening data.
+
+ * src/autofit/afglobal.h (AF_FaceGlobalsRec): Add fields.
+
+ * src/autofit/afglobal.c (af_face_globals_new): Initialize new
+ fields.
+ (af_face_globals_free): Reset new fields.
+
+2015-11-02 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [autofit] Add stem-darkening properties.
+
+ Actual code follows in a later commit.
+
+ * include/freetype/ftautoh.h: Document `no-stem-darkening' and
+ `darkening-parameters'.
+
+ * src/autofit/afmodule.h: New fields `no_stem_darkening' and
+ `darken_params'.
+
+ * src/autofit/afmodule.c (af_property_set, af_property_get):
+ Handle them.
+ (af_autofitter_init): Initialize them.
+
+2015-11-02 Ben Wagner <bungeman@gmail.com>
+
+ [ftfuzzer] Add support for multiple files (patch #8779).
+
+ Currently, libFuzzer only supports mutation of a single file. We
+ circumvent this problem by using an uncompressed tar archive as
+ multiple-file input for the fuzzer.
+
+ This patch enables tests of `FT_Attach_Stream' and AFM/PFM parsing;
+ a constructed tarball should contain a font file as the first
+ element, and files to be attached as further elements.
+
+ * src/tools/ftfuzzer/ftfuzzer.cc: Include libarchive headers.
+ (archive_read_entry_data, parse_data): New functions.
+ (LLVMFuzzerTestOneInput): Updated.
+
+ * src/tools/ftfuzzer/ftmutator.cc: New file, providing a custom
+ mutator for libFuzzer that can mutate tarballs in a sensible way.
+
+2015-10-31 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix cmap 14 validation (#46346).
+
+ * src/sfnt/ttcmap.c (tt_cmap14_validate): Check limit before
+ accessing `numRanges' and `numMappings'.
+ Fix size check for non-default UVS table.
+
+2015-10-31 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Handle infinite recursion in bitmap strikes (#46344).
+
+ * src/sfnt/ttsbit.c (TT_SBitDecoder_LoadFunc,
+ tt_sbit_decoder_load_bitmap, tt_sbit_decoder_load_byte_aligned,
+ tt_sbit_decoder_load_bit_aligned, tt_sbit_decoder_load_png): Add
+ argument for recursion depth.
+ (tt_sbit_decoder_load_compound): Add argument for recursion depth.
+ Increase recursion counter for recursive call.
+ (tt_sbit_decoder_load_image): Add argument for recursion depth.
+ Check recurse depth.
+ (tt_face_load_sbit_image): Updated.
+
+2015-10-29 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_points): Minor.
+
+2015-10-29 Werner Lemberg <wl@gnu.org>
+
+ * CMakeLists.txt: Remove code to set MSVC's /FD compiler switch.
+
+ Problem reported by David Capello <davidcapello@gmail.com>; see
+
+ https://lists.nongnu.org/archive/html/freetype-devel/2015-10/msg00108.html
+
+ for details.
+
+2015-10-27 Werner Lemberg <wl@gnu.org>
+
+ [pfr] Add some safety guards (#46302).
+
+ * src/pfr/pfrload.h (PFR_CHECK): Rename to...
+ (PFR_CHECK_SIZE): ... this.
+ (PFR_SIZE): [!PFR_CONFIG_NO_CHECKS]: Define to PFR_CHECK_SIZE.
+
+ * src/pfr/pfrload.c (pfr_log_font_count): Check `count'.
+ (pfr_extra_item_load_kerning_pairs): Remove tracing message.
+ (pfr_phy_font_load): Use PFR_CHECK_SIZE where appropriate.
+ Allocate `chars' after doing a size checks.
+
+ * src/pfr/pfrsbit.c (pfr_load_bitmap_bits): Move test for invalid
+ bitmap format to...
+ (pfr_slot_load_bitmap): ... this function.
+ Check bitmap size.
+
+2015-10-26 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix sanitizing logic for `loca' (#46223).
+
+ * src/truetype/ttpload.c (tt_face_load_loca): A thinko caused an
+ incorrect adjustment of the number of glyphs, most often using far
+ too large values.
+
+2015-10-25 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve tracing.
+
+ * src/autofit/afhints.c (af_print_idx, af_get_segment_index,
+ af_get_edge_index): New functions.
+
+ (af_glyph_hints_dump_points): Remove unnecessary `|', `[', and `]'.
+ Add segment and edge index for each point.
+ Slightly change printing order of some elements.
+ Don't print `-1' but `--' for missing elements.
+
+ (af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Remove
+ unnecessary `|', `[', and `]'.
+ Don't print `-1' but `--' for missing elements.
+
+2015-10-24 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Sanitize bitmap strike glyph height.
+
+ Problem reported by Nikolay Sivov <bunglehead@gmail.com>.
+
+ * src/sfnt/ttsbit.c (tt_face_load_strike_metrics): Avoid zero value
+ for `metrics->height' by applying some heuristics.
+
+2015-10-22 Werner Lemberg <wl@gnu.org>
+
+ [sfnt, type42] Fix clang compiler warnings.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Initialize `offset'.
+
+ * src/type42/t42parse.c (t42_parse_sfnts): Use proper cast.
+
+2015-10-22 Dave Arnold <darnold@adobe.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [cff] Avoid overflow/module arithmetic.
+
+ This modifies the addition of subroutine number to subroutine bias
+ from unsigned to signed, but does not change any results.
+
+ * src/cff/cf2ft.c (cf2_initGlobalRegionBuffer,
+ cf2_initLocalRegionBuffer): Change variable names from (unsigned)
+ `idx' to (signed) `subrNum', since it is not an index until after
+ the bias is added.
+ * src/cff/cf2ft.h: Updated.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdCALLSUBR>:
+ Updated similarly.
+
+2015-10-22 Werner Lemberg <wl@gnu.org>
+
+ [cid] Better check of `SubrCount' dictionary entry (#46272).
+
+ * src/cid/cidload.c (cid_face_open): Add more sanity tests for
+ `fd_bytes', `gd_bytes', `sd_bytes', and `num_subrs'.
+
+2015-10-21 Werner Lemberg <wl@gnu.org>
+
+ [base] Pacify compiler (#46266).
+
+ * src/base/ftoutln.c (FT_Outline_EmboldenXY): Initialize `in' and
+ `anchor'.
+
+2015-10-21 Werner Lemberg <wl@gnu.org>
+
+ [type42] Fix heap buffer overflow (#46269).
+
+ * src/type42/t42parse.c (t42_parse_sfnts): Fix off-by-one error in
+ bounds checking.
+
+2015-10-21 Dave Arnold <darnold@adobe.com>
+
+ [cff] Fix limit in assert for max hints.
+
+ * src/cff/cf2interp.c (cf2_hintmask_setAll): Allow mask equal to the
+ limit (96 bits).
+
+2015-10-21 Dave Arnold <darnold@adobe.com>
+
+ [cff] Remove an assert (#46107).
+
+ * src/cff/cf2hints.c (cf2_hintmap_insertHint): Ignore paired edges
+ in wrong order.
+
+2015-10-21 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Avoid unnecessarily large allocation for WOFFs (#46257).
+
+ * src/sfnt/sfobjs.c (woff_open_font): Use WOFF's `totalSfntSize'
+ only after thorough checks.
+ Add tracing messages.
+
+2015-10-21 Werner Lemberg <wl@gnu.org>
+
+ [type42] Better check invalid `sfnts' array data (#46255).
+
+ * src/type42/t42parse.c (t42_parse_sfnts): Table lengths must be
+ checked individually against available data size.
+
+2015-10-20 Werner Lemberg <wl@gnu.org>
+
+ [cid] Add a bunch of safety checks.
+
+ * src/cid/cidload.c (parse_fd_array): Check `num_dicts' against
+ stream size.
+ (cid_read_subrs): Check largest offset against stream size.
+ (cid_parse_dict): Move safety check to ...
+ (cid_face_open): ... this function.
+ Also test length of binary data and values of `SDBytes',
+ `SubrMapOffset', `SubrCount', `CIDMapOffset', and `CIDCount'.
+
+2015-10-20 Werner Lemberg <wl@gnu.org>
+
+ [cid] Avoid segfault with malformed input (#46250).
+
+ * src/cid/cidload.c (cid_read_subrs): Return a proper error code for
+ unsorted offsets.
+
+2015-10-20 StudioEtrange <nomorgan@gmail.com>
+
+ * CMakeLists.txt: Enable shared library builds on MinGW (#46233).
+
+2015-10-20 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1afm.c (T1_Read_Metrics): Fix memory leak (#46229).
+
+2015-10-19 Ben Wagner <bungeman@gmail.com>
+
+ [cid] Better handle invalid glyph stream offsets (#46221).
+
+ * src/cid/cidgload.c (cid_load_glyph): Check minimum size of glyph
+ length.
+
+2015-10-18 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Fix tracing of negative numbers.
+
+ Due to incorrect casting negative numbers were shown as very large
+ (positive) integers on 64bit systems.
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings) <op_none>:
+ Use division instead of shift.
+
+2015-10-18 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Improve TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES (#46223).
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h: Surround it
+ with #ifndef ... #endif, as suggested in the tracker issue.
+
+2015-10-18 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Better protection against malformed `fpgm' (#46223).
+
+ * src/truetype/ttobjs.c (tt_size_init_bytecode): Don't execute a
+ malformed `fpgm' table more than once.
+
+2015-10-17 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidgload.c (cid_load_glyph): Fix memory leak.
+
+ Reported by Kostya Serebryany <kcc@google.com>.
+
+2015-10-17 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Prevent memory leak (#46217).
+
+ * src/bdf/bdflib.c (_bdf_parse_glyphs) <STARTCHAR>: Check
+ _BDF_GLYPH_BITS.
+
+2015-10-17 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Use stream size to adjust number of glyphs.
+
+ * src/bdf/bdflib.c (ACMSG17): New message macro.
+ (_bdf_parse_t): Add member `size'.
+ (bdf_load_font): Set `size'.
+ (_bdf_parse_glyphs): Adjust `cnt' if necessary.
+
+2015-10-17 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidload.c (cid_parse_dict): Check `[FG]DBytes' size.
+
+2015-10-17 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidgload.c (cid_glyph_load): Check file offsets (#46222).
+
+2015-10-17 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Fix heap buffer overflow (#46221).
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstring) <operator 12>:
+ Fix limit check.
+
+2015-10-17 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidload.c (cid_parse_dict): Handle invalid input (#46220).
+
+2015-10-15 Kostya Serebryany <kcc@google.com>
+
+ [ftfuzzer] Add README.
+
+ * src/tools/ftfuzzer/README: New file.
+
+2015-10-15 Ben Wagner <bungeman@gmail.com>
+
+ [bdf] Fix memory leak (#46213).
+
+ * src/bdf/bdflib.c (bdf_load_font): Always go to label `Fail' in
+ case of error.
+
+2015-10-15 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES (#46208).
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES): New configuration macro.
+
+ * src/truetype/ttinterp.c (MAX_RUNNABLE_OPCODES): Removed.
+ (TT_RunIns): Updated.
+
+2015-10-15 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (TT_RunIns): Fix bytecode stack tracing.
+
+ The used indices were off by 1.
+
+2015-10-15 Ben Wagner <bungeman@gmail.com>
+ Werner Lemberg <wl@gnu.org>
+
+ * src/tools/ftfuzzer/ftfuzzer.cc: Handle fixed sizes (#46211).
+
+2015-10-15 Werner Lemberg <wl@gnu.org>
+
+ [base] Compute MD5 checksums only if explicitly requested.
+
+ This improves profiling accuracy.
+
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal): Implement it.
+
+2015-10-14 Werner Lemberg <wl@gnu.org>
+
+ [base] Use `FT_' namespace for MD5 functions (#42366).
+
+ * src/base/ftobjs.c (MD5_*): Define as `FT_MD5_*'.
+ Undefine HAVE_OPENSSL.
+
+2015-10-13 Werner Lemberg <wl@gnu.org>
+
+ [type1] Correctly handle missing MM axis names (#46202).
+
+ * src/type1/t1load.c (T1_Get_MM_Var): Implement it.
+
+2015-10-13 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Quickly exit if font index < 0.
+
+ Similar to other font formats, this commit makes the parser no
+ longer check the whole PCF file but only the header and the TOC if
+ we just want to get the number of available faces (and a proper
+ recognition of the font format).
+
+ * src/pcf/pcfdrivr.c (PCF_Face_Init): Updated.
+ Exit quickly if face_index < 0.
+
+ * src/pcfread.c (pcf_load_font): Add `face_index' argument.
+ Exit quickly if face_index < 0.
+
+ * src/pcf/pcf.h: Updated.
+
+2015-10-13 Werner Lemberg <wl@gnu.org>
+
+ [ftfuzzer] Handle TTCs and MM/GX variations.
+
+ This patch also contains various other improvements.
+
+ * src/tools/ftfuzzer/ftfuzzer.cc: Add preprocessor guard to reject
+ pre-C++11 compilers.
+ (FT_Global): New class. Use it to provide a global constructor and
+ destructor for the `FT_Library' object.
+ (setIntermediateAxis): New function to select an (arbitrary)
+ instance.
+ (LLVMFuzzerTestOneInput): Loop over all faces and named instances.
+ Also call `FT_Set_Char_Size'.
+
+2015-10-13 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Refine some GX sanity tests.
+
+ Use the `gvar' table size instead of the remaining bytes in the
+ stream.
+
+ * src/truetype/ttgxvar.h (GX_BlendRec): New field `gvar_size'.
+
+ * src/truetype/ttgxvar.c (ft_var_load_gvar): Set `gvar_size'.
+ (ft_var_readpackedpoints, ft_var_readpackeddeltas: New argument
+ `size'.
+ (tt_face_vary_cvt, TT_Vary_Apply_Glyph_Deltas): Updated.
+
+2015-10-13 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Another GX sanity test.
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Check
+ `tupleCount'.
+ Add tracing message.
+
+2015-10-13 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix memory leak for broken GX fonts (#46188).
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix scope of
+ deallocation.
+
+2015-10-13 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix commit from 2015-10-10.
+
+ * src/truetype/ttgxvar.c (ft_var_load_gvar): Add missing error
+ handling body to condition.
+
+2015-10-12 Werner Lemberg <wl@gnu.org>
+
+ [unix] Make MKDIR_P actually work.
+
+ * builds/unix/configure.raw: Fix underquoting of `INSTALL' and
+ `MKDIR_P'.
+
+ Problem reported by Dan Liddell <lddll@yahoo.com>.
+
+2015-10-11 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Improve extraction of number of named instances.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face)
+ [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Check number of instances against
+ `fvar' table size.
+
+2015-10-10 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftoutln.c (FT_Outline_Get_Orientation): Fix overflow
+ (#46149).
+
+2015-10-10 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix infinite loops with broken cmaps (#46167).
+
+ * src/sfnt/ttcmap.c (tt_cmap8_char_next, tt_cmap12_next): Take care
+ of border conditions (i.e., if the loops exit naturally).
+
+2015-10-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More sanity tests for GX handling.
+
+ These tests should mainly help avoid unnecessarily large memory
+ allocations in case of malformed fonts.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackedpoints,
+ ft_var_readpackeddeltas): Check number of points against stream
+ size.
+ (ft_var_load_avar): Check `pairCount' against table length.
+ (ft_var_load_gvar): Check `globalCoordCount' and `glyphCount'
+ against table length.
+ (tt_face_vary_cvt): Check `tupleCount' and `offsetToData'.
+ Fix trace.
+ (TT_Vary_Apply_Glyph_Deltas): Fix trace.
+ Free `sharedpoints' to avoid memory leak.
+
+2015-10-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Better protection against malformed GX data (#46166).
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Correctly
+ handle empty `localpoints' array.
+
+2015-10-10 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfread.c (pcf_read_TOC): Check stream size (#46162).
+
+2015-10-09 Werner Lemberg <wl@gnu.org>
+
+ * src/gzip/ftgzip.c (FT_Stream_OpenGzip): Use real stream size.
+
+2015-10-08 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Protect against invalid number of TOC entries (#46159).
+
+ * src/pcf/pcfread.c (pcf_read_TOC): Check number of TOC entries
+ against size of data stream.
+
+2015-10-08 Werner Lemberg <wl@gnu.org>
+
+ [type42] Protect against invalid number of glyphs (#46159).
+
+ * src/type42/t42parse.c (t42_parse_charstrings): Check number of
+ `CharStrings' dictionary entries against size of data stream.
+
+2015-10-08 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix some signed overflows (#46149).
+
+ * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
+ <TT_SBIT_TABLE_TYPE_SBIX>: Use `FT_MulDiv'.
+
+2015-10-08 Werner Lemberg <wl@gnu.org>
+
+ [type1] Protect against invalid number of subroutines (#46150).
+
+ * src/type1/t1load.c (parse_subrs): Check number of
+ `Subrs' dictionary entries against size of data stream.
+
+2015-10-07 Kostya Serebryany <kcc@google.com>
+
+ [ftfuzzer] Add support for LLVM's LibFuzzer.
+
+ * src/tools/ftfuzzer/ftfuzzer.cc, src/tools/runinput.cc: New files.
+
+2015-10-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Faster alternative line renderer.
+
+ This implementation renders the entire line segment at once without
+ subdividing it into scanlines. The main speed improvement comes from
+ reducing the number of divisions to just two per line segment, which
+ is a bare minimum to calculate cell coverage in a smooth rasterizer.
+ Notably, the progression from cell to cell does not itself require any
+ divisions at all. The speed improvement is more noticeable at larger
+ sizes.
+
+ * src/smooth/ftgrays.c (gray_render_line): New implementation.
+
+2015-10-06 Werner Lemberg <wl@gnu.org>
+
+ [cff] Return correct PS names from pure CFF (#46130).
+
+ * src/cff/cffdrivr.c (cff_get_ps_name): Use SFNT service only for
+ SFNT.
+
+2015-10-04 Werner Lemberg <wl@gnu.org>
+
+ [base] Replace left shifts with multiplication (#46118).
+
+ * src/base/ftglyph.c (ft_bitmap_glyph_bbox, FT_Get_Glyph): Do it.
+
+2015-10-04 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.6.1 released.
+ =========================
+
+
+ Tag sources with `VER-2-6-1'.
+
+ * docs/VERSION.DLL: Update documentation and bump version number to
+ 2.6.1.
+
+ * 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.6/2.6.1/, s/26/261/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
+
+ * builds/unix/configure.raw (version_info): Set to 18:1:12.
+ * CMakeLists.txt (VERSION_PATCH): Set to 1.
+
+ * src/autofit/afmodule.c [AF_DEBUG_AUTOFIT]: Ensure C linking for
+ dumping functions.
+
+2015-10-04 Werner Lemberg <wl@gnu.org>
+
+ [bzip2, gzip] Avoid access of uninitialized memory (#46109).
+
+ * src/bzip2/ftbzip2.c (ft_bzip2_file_fill_input), src/gzip/ftgzip.c
+ (ft_gzip_file_fill_input): In case of an error, adjust the limit to
+ avoid copying uninitialized memory.
+
+2015-10-03 Werner Lemberg <wl@gnu.org>
+
+ [bzip2, gzip] Avoid access of uninitialized memory (#46109).
+
+ * src/bzip2/ftbzip2.c (ft_bzip2_file_fill_output), src/gzip/ftgzip.c
+ (ft_gzip_file_fill_output): In case of an error, adjust the limit to
+ avoid copying uninitialized memory.
+
+2015-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Clean up worker.
+
+ * src/smooth/ftgrays.c (gray_TWorker): Remove never used fields.
+
+2015-10-01 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Make `tt_cmap4_char_map_linear' more robust (#46078).
+
+ * src/sfnt/ttcmap.c (tt_cmap4_char_map_linear): Take care of
+ border conditions (i.e., if the loop exits naturally).
+
+2015-10-01 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afranges.c (af_deva_nonbase_uniranges): Fix ranges.
+ They should be a subset of `af_deva_uniranges'.
+
+2015-10-01 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Make `tt_cmap4_char_map_linear' faster (#46078).
+
+ * src/sfnt/ttcmap.c (tt_cmap4_char_map_linear): Use inner loop to
+ reject too large glyph indices.
+
+2015-09-30 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Clean up worker.
+
+ * src/smooth/ftgrays.c (gray_TWorker): Remove lightly used `last_ey'.
+ (gray_start_cell, gray_render_line): Update.
+
+2015-09-30 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Replace `no-base' with `non-base'.
+
+ * src/autofit/*: Do it.
+
+2015-09-30 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Rewrite `tt_cmap4_char_map_linear' (#46078).
+
+ * src/sfnt/ttcmap.c (tt_cmap4_char_map_linear): Add code to better
+ skip invalid segments.
+ If searching the next character, provide a more efficient logic to
+ speed up the code.
+
+2015-09-30 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Adjust number of glyphs for malformed `loca' tables.
+
+ * src/truetype/ttpload.c (tt_face_load_loca): Implement it.
+
+2015-09-29 Werner Lemberg <wl@gnu.org>
+
+ [pshinter] Avoid harmless overflow (#45984).
+
+ * src/pshinter/pshglob.c (psh_blues_set_zones): Fix it.
+
+2015-09-28 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add support for Lao script.
+
+ Thanks to Danh Hong <danhhong@gmail.com> for guidance with blue zone
+ characters!
+
+ * src/autofit/afblue.dat: Add blue zone data for Lao.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Lao standard characters.
+
+ * src/autofit/afranges.c: Add Lao data.
+
+ * src/autofit/afstyles.h: Add Lao data.
+
+2015-09-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [base] Fix a leak by broken sfnt-PS or resource fork (#46028).
+
+ open_face_from_buffer() frees passed buffer if valid font
+ is not found. But if copying to the buffer is failed,
+ the allocated buffer should be freed within the caller.
+
+ * src/base/ftobjs.c (open_face_PS_from_sfnt_stream): Free
+ the buffer `sfnt_ps' if an error caused before calling
+ open_face_from_buffer().
+ (Mac_Read_sfnt_Resource): Free the buffer `sfnt_data' if
+ an error caused before calling open_face_from_buffer();
+
+2015-09-27 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [mac] Fix buffer size calculation for LWFN font.
+
+ * src/base/ftmac.c (read_lwfn): Cast post_size to FT_ULong
+ to prevent confused copy by too large chunk size.
+
+2015-09-26 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (PIXEL_MASK): Remove unused macro.
+
+2015-09-26 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Minor tracing improvement.
+
+ * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Don't emit
+ blue zones header line if there are no blue zones.
+
+2015-09-26 Werner Lemberg <wl@gnu.org>
+
+ [bzip2, gzip, lzw] Harmonize function signatures with prototype.
+
+ Suggested by Hin-Tak Leung.
+
+ * src/bzip2/ftbzip2.c (ft_bzip2_stream_io), src/gzip/ftgzip.c
+ (ft_gzip_stream_io), src/lzw/ftlzw.c (ft_lzw_stream_io): Do it.
+
+2015-09-26 Hin-Tak Leung <htl10@users.sourceforge.net>
+
+ Add new FT_LOAD_COMPUTE_METRICS load flag.
+
+ * include/freetype/freetype.h (FT_LOAD_COMPUTE_METRICS): New macro.
+ * src/truetype/ttgload.c (compute_glyph_metrics): Usage.
+
+2015-09-26 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (Mac_Read_sfnt_Resource): Add cast.
+
+2015-09-25 Werner Lemberg <wl@gnu.org>
+
+ [type1] Protect against invalid number of glyphs (#46029).
+
+ * src/type1/t1load.c (parse_charstrings): Check number of
+ `CharStrings' dictionary entries against size of data stream.
+
+2015-09-23 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Better checks for invalid cmaps (2/2) (#46019).
+
+ While the current code in `FT_Get_Next_Char' correctly rejects
+ out-of-bounds glyph indices, it can be extremely slow for malformed
+ cmaps that use 32bit values. This commit tries to improve that.
+
+ * src/sfnt/ttcmap.c (tt_cmap8_char_next, tt_cmap12_next,
+ tt_cmap12_char_map_binary, tt_cmap13_next,
+ tt_cmap13_char_map_binary): Reject glyph indices larger than or
+ equal to the number of glyphs.
+
+2015-09-23 Werner Lemberg <wl@gnu.org>
+
+ [base, sfnt] Better checks for invalid cmaps (1/2).
+
+ * src/base/ftobjs.c (FT_Get_Char_Index): Don't return out-of-bounds
+ glyph indices.
+ (FT_Get_First_Char): Updated.
+
+ * src/sfnt/ttcmap.c (tt_cmap6_char_next): Don't return character
+ codes greater than 0xFFFF.
+
+ (tt_cmap8_char_index): Avoid integer overflow in computation of
+ glyph index.
+ (tt_cmap8_char_next): Avoid integer overflows in computation of
+ both next character code and glyph index.
+
+ (tt_cmap10_char_index): Fix unsigned integer logic.
+ (tt_cmap10_char_next): Avoid integer overflow in computation of
+ next character code.
+
+ (tt_cmap12_next): Avoid integer overflows in computation of both
+ next character code and glyph index.
+ (tt_cmap12_char_map_binary): Ditto.
+ (tt_cmap12_char_next): Simplify.
+
+ (tt_cmap13_char_map_binary): Avoid integer overflow in computation
+ of next character code.
+ (tt_cmap13_char_next): Simplify.
+
+2015-09-21 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [base] Check too long POST and sfnt resource (#45919).
+
+ * src/base/ftbase.h (FT_MAC_RFORK_MAX_LEN): Maximum length of the
+ resource fork for Mac OS. Resource forks larger than 16 MB can be
+ written but can't be handled correctly, at least in Carbon routine.
+ See https://support.microsoft.com/en-us/kb/130437.
+
+ * src/base/ftobjs.c (Mac_Read_POST_Resource): No need to use `0x'
+ prefix for `%p' formatter.
+
+ * src/base/ftbase.c (Mac_Read_POST_Resource): Check the fragment and
+ total size of the concatenated POST resource before buffer
+ allocation.
+ (Mac_Read_sfnt_Resource): Check the declared size of sfnt resource
+ before buffer allocation.
+
+ * src/base/ftmac.c (read_lwfn, FT_New_Face_From_SFNT): Check the
+ total resource size before buffer allocation.
+
+2015-09-19 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Improve handling of invalid SFNT table entries (#45987).
+
+ This patch fixes weaknesses in function `tt_face_load_font_dir'.
+
+ - It incorrectly assumed that valid tables are always at the
+ beginning. As a consequence, some valid tables after invalid
+ entries (which are ignored) were never seen.
+
+ - Duplicate table entries (this is, having the same tag) were not
+ rejected.
+
+ - The number of valid tables was sometimes too large, leading to
+ access of invalid tables.
+
+ * src/sfnt/ttload.c (check_table_dir): Add argument to return number
+ of valid tables.
+ Add another tracing message.
+ (tt_face_load_font_dir): Only allocate table array for valid
+ entries as returned by `check_table_dir'.
+ Reject duplicate tables and adjust number of valid tables
+ accordingly.
+
+2015-09-19 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Improve `FT_ABS' fix from 2015-09-17 (#45999).
+
+ * src/pcf/pcfread.c (pcf_load_font): Do first the cast to FT_Short,
+ then take the absolute value.
+ Also apply FT_ABS to `height'.
+
+2015-09-17 Werner Lemberg <wl@gnu.org>
+
+ [type42] Fix memory leak (#45989).
+
+ * src/type42/t42parse.c (t42_parse_charstrings): Allow only a single
+ `CharStrings' array.
+
+2015-09-17 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Fix memory leak (#45986).
+
+ * src/psaux/psobjs.c (ps_parser_load_field) <T1_FIELD_TYPE_MM_BBOX>:
+ Free `temp' in case of error.
+
+2015-09-17 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Improve tracing message.
+
+ * src/psaux/psobjs.c (ps_parser_load_field) <T1_FIELD_TYPE_MM_BBOX>:
+ Handle plural correctly.
+
+2015-09-17 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Fix integer overflows (#45985).
+
+ * src/pcf/pcfread.c (pcf_load_font): Use FT_MulDiv.
+
+2015-09-17 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Use FT_ABS for some property values (#45893).
+
+ * src/pcf/pcfread.c (pcf_load_font): Take absolute values for
+ AVERAGE_WIDTH, POINT_SIZE, PIXEL_SIZE, RESOLUTION_X, and
+ RESOLUTION_Y. In tracing mode, add warnings.
+
+2015-09-16 Werner Lemberg <wl@gnu.org>
+
+ Minor fixes for some clang warnings.
+
+ * src/base/ftoutln.c (FT_Outline_EmboldenXY): Cast, possible missing
+ initialization.
+
+ * src/truetype/ttgload.c (TT_Process_Composite_Component): Cast.
+
+2015-09-15 Werner Lemberg <wl@gnu.org>
+
+ [type1, type42] Fix memory leaks (#45966).
+
+ * src/type1/t1load.c (parse_blend_axis_types): Handle multiple axis
+ names.
+ (parse_blend_design_map): Allow only a single design map.
+ (parse_encoding): Handle multiple encoding vectors.
+
+ * src/type42/t42parse.c (t42_parse_encoding): Handle multiple
+ encoding vectors.
+
+2015-09-15 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix integer type (#45965).
+
+ * src/truetype/ttobjs.c (tt_synth_sfnt_checksum): Implement it.
+
+2015-09-15 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfread.c (pcf_load_font): Fix integer overflow (#45964).
+
+2015-09-15 Werner Lemberg <wl@gnu.org>
+
+ [type1, type42] Check encoding array size (#45961).
+
+ * src/type1/t1load.c (parse_encoding), src/type42/t42parse.c
+ (t42_parse_encoding): Do it.
+
+2015-09-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftcalc.c (FT_MulFix) [FT_LONG64]: Improve.
+
+2015-09-14 Werner Lemberg <wl@gnu.org>
+
+ [type1] Fix another potential buffer overflow (#45955).
+
+ * src/type1/t1parse (T1_Get_Private_Dict): Assure that check for
+ `eexec' doesn't exceed `limit'.
+
+2015-09-13 Werner Lemberg <wl@gnu.org>
+
+ Replace `mkinstalldirs' with AC_PROG_MKDIR_P.
+
+ * builds/unix/mkinstalldirs: Removed, no longer needed.
+
+ * builds/unix/configure.raw: Call `AC_PROG_MKDIR_P'.
+ Update pwd call for `$INSTALL'.
+
+ * builds/unix/unix-def.in (MKINSTALLDIRS): Use `@MKDIR_P@'.
+
+ * autogen.sh: Updated.
+
+2015-09-13 Werner Lemberg <wl@gnu.org>
+
+ [winfonts] Check alignment shift count for resource data (#45938).
+
+ * src/winfonts/winfnt.c (fnt_face_get_dll_font): Implement it.
+
+2015-09-13 Werner Lemberg <wl@gnu.org>
+
+ [type1] Fix potential buffer overflow (#45923).
+
+ * src/type1/t1parse.c (T1_Get_Private_Dict): Assure `cur' doesn't
+ point to end of file buffer.
+
+2015-09-13 Werner Lemberg <wl@gnu.org>
+
+ [gzip] Fix access of small compressed files (#45937).
+
+ * src/gzip/ftgzip.c (ft_gzip_stream_close): Avoid memory leak.
+
+ (ft_gzip_get_uncompressed_file): Correct byte order while reading
+ unsigned long value. Without this change, the whole optimization of
+ accessing small files in `FT_Stream_OpenGzip' is never executed! As
+ a consequence, access to PCF files in general (which are normally
+ small files) should be much improved now as originally intended.
+
+2015-09-11 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Fix potential buffer overflow (#45922).
+
+ * src/psaux/psobjs.c (ps_parser_skip_PS_token): If a token is
+ enclosed in balanced expressions, ensure that the cursor position
+ doesn't get larger than the current limit.
+
+2015-09-11 Werner Lemberg <wl@gnu.org>
+
+ [base] Avoid crash while tracing `load_mac_face'.
+
+ Reported in Savannah bug #45919.
+
+ * src/base/ftobjs.c (load_mac_face): Honour FT_OPEN_MEMORY while
+ tracing.
+
+2015-09-11 Werner Lemberg <wl@gnu.org>
+
+ [type42] Fix endless loop (#45920).
+
+ * src/type42/t42parse.c (t42_parse_encoding): Synchronize with
+ type1's `parse_encoding'.
+
+2015-09-10 Werner Lemberg <wl@gnu.org>
+
+ [docmaker] Allow `-' in bold and italic markup.
+
+ * src/tools/docmaker/sources.py (re_italic, re_bold): Adjust
+ accordingly.
+
+2015-09-09 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftcalc.c (FT_RoundFix): Improve.
+
+2015-09-09 Wojciech Mamrak <wmamrak@gmail.com>
+
+ * src/base/ftcalc.c (FT_CeilFix, FT_FloorFix): Normalize.
+
+ This commit makes the functions behave as expected, this is,
+ rounding towards plus or minus infinity.
+
+2015-09-07 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_render_line): Simplify clipping.
+
+2015-09-04 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [raster,smooth] Microoptimizations.
+
+ * src/raster/ftraster.c (Insert_Y_Turn, Finalize_Profile_Table,
+ Bezier_Up): Use do-while loops.
+
+ * src/smooth/ftgrays.c (gray_render_scanline, gray_render_line,
+ gray_convert_glyph): Ditto.
+
+2015-09-04 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Redesign code ranges (2/2).
+
+ This commit adds two fallback scripts (`latb', `latp') and
+ implements support for the no-base character ranges introduced in
+ the previous commit.
+
+ * src/autofit/aftypes.h (AF_ScriptClassRec): Add
+ `script_uni_nobase_ranges' field.
+ (AF_DEFINE_SCRIPT_CLASS): Updated.
+
+ * src/autofit/afscript.h, src/autofit/afstyles.h: Add `latb' and
+ `latp' fallback scripts.
+
+ * src/autofit/afblue.dat: Add blue zones for Latin subscript and
+ superscript fallback scripts.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afglobal.h (AF_NOBASE): New style flag for no-base
+ characters.
+ (AF_STYLE_MASK): Updated.
+
+ * src/autofit/afglobal.c (SCRIPT): Updated.
+ (af_face_globals_compute_style_coverage): Handle new style flag.
+
+ * src/autofit/aflatin.c (af_latin_hints_apply): Handle new style
+ flag.
+
+ * src/autofit/afranges.h (SCRIPT): Use it to export no-base ranges.
+
+2015-09-04 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Redesign code ranges (1/2).
+
+ This patch introduces auxiliary code ranges that identify no-base
+ characters; they refer to glyphs of a script that should be hinted
+ without alignments to blue zones (mostly diacritics).
+
+ It also splits off ranges for fallback scripts that handle subscript
+ and superscript characters not covered by OpenType features. For
+ example, this greatly helps improve the hinting of various phonetic
+ alphabets, which contain a large amount characters that look like
+ superscript glyphs.
+
+ Finally, code ranges are updated to Unicode 8.0, and enclosed
+ characters are removed in general since they normally look better if
+ they stay unhinted.
+
+ * src/autofit/afranges.c (af_latn_uniranges): Updated to Unicode
+ 8.0.
+ Split off superscript-like and subscript-like glyphs into...
+
+ (af_latb_uniranges, af_latp_uniranges): ... these two new arrays.
+
+ (af_xxxx_nobase_uniranges): New arrays that hold no-base characters
+ of the corresponding character ranges.
+
+2015-09-03 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Pass glyph index to hinting function.
+
+ No functionality change yet.
+
+ * src/autofit/aftypes.h (AF_WritingSystem_ApplyHintsFunc): Pass
+ glyph index.
+
+ * src/autofit/afcjk.c, src/autofit/afcjk.h (af_cjk_hints_apply),
+ src/autofit/afdummy.c (af_dummy_hints_apply), src/autofit/afindic.c
+ (af_indic_hints_apply), src/autofit/aflatin.c
+ (af_latin_hints_apply), src/autofit/aflatin2.c
+ (af_latin2_hints_apply), src/autofit/afloader.c (af_loader_load_g):
+ Updated.
+
+2015-08-30 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Code clean-up.
+
+ * src/autofit/afglobal.h (AF_STYLE_MASK): New macro.
+ (AF_STYLE_UNASSIGNED): Use AF_STYLE_MASK for definition.
+
+ * src/autofit/afglobal.c (af_face_globals_compute_style_coverage):
+ Updated.
+
+2015-08-30 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Make glyph style array use 16bit values.
+
+ * include/freetype/ftautoh.h (FT_Prop_GlyphToScriptMap): Use
+ `FT_UShort' for `map' field.
+
+ * src/autofit/afglobal.c (af_face_globals_compute_style_coverage,
+ af_face_globals_new), src/autofit/hbshim.c, src/autofit/hbshim.h
+ (af_get_coverage): Use FT_UShort for `glyph_styles' array.
+
+ * src/autofit/afglobal.h (AF_STYLE_UNASSIGNED, AF_DIGIT): Extend to
+ 16 bits.
+ (AF_FaceGlobalsRec): Use `FT_UShort' for `glyph_styles' field.
+
+2015-08-26 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/configure.raw: Need harfbuzz >= 0.9.21 (#45828).
+
+2015-08-25 Werner Lemberg <wl@gnu.org>
+
+ [base] Improve kerning tracing and documentation.
+
+ * src/base/ftobjs.c (FT_Get_Kerning): Emit tracing message if
+ scaled-down kerning values differ.
+
+2015-08-18 Werner Lemberg <wl@gnu.org>
+
+ [raster] Remove last remnants of `raster5' driver.
+
+ * src/raster/ftrend1.h (ft_raster5_renderer_class): Removed.
+
+ * src/raster/rastpic.c, src/raster/rastpic.h
+ (ft_raster5_renderer_class_pic_init,
+ ft_raster5_renderer_class_pic_free): Removed.
+
+2015-08-17 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Improve emboldener (#45596).
+
+ * src/base/ftoutln.c (FT_Outline_EmboldenXY): Correct displacement
+ of zero-length segments.
+
+2015-08-16 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Reoptimize arithmetic.
+
+ * src/base/ftcalc.c (FT_MulDiv, FT_MulFix) [!FT_LONG64]: Remove
+ special cases that slow down the general use.
+
+2015-08-15 pazer <ibemad@gmail.com>
+
+ Fix C++ compilation (#45762).
+
+ * src/base/ftstroke.c (ft_outline_glyph_class): Use
+ FT_CALLBACK_TABLE.
+
+2015-08-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [truetype] Clean up.
+
+ * src/truetype/ttgload.c (TT_Process_Composite_Component): Use
+ `FT_Outline_Transform' and `FT_Outline_Translate'.
+ (translate_array): Dropped.
+
+2015-08-14 Andreas Enge <andreas.enge@inria.fr>
+
+ * builds/unix/detect.mk (CONFIG_SHELL): Don't handle it (#44261).
+
+2015-08-13 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Introduce named instance access to GX fonts.
+
+ For functions querying a face, bits 16-30 of the face index can hold
+ the named instance index if we have a GX font. The indices start
+ with value 1; value 0 indicates font access without GX variation
+ data.
+
+ * include/freetype/freetype.h (FT_FaceRec): Update documentation.
+ * include/freetype/internal/sfnt.h: Ditto.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face)
+ [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Get number of named instances and
+ do argument checks.
+ (sfnt_load_face): Updated.
+
+ * src/truetype/ttobjs.c (tt_face_init)
+ [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Use named instance, overwriting
+ the style name.
+
+ * src/base/ftobjs.c (open_face_from_buffer,
+ open_face_PS_from_sfnt_stream): Updated.
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Updated.
+ * src/cff/cffload.c (cff_font_load): Updated.
+
+ * src/cff/cffobjs.c (cff_face_init): Make function exit early for
+ pure CFF fonts if `font_index < 0'.
+ Updated.
+
+ * src/cid/cidobjs.c (cid_face_init): Updated.
+ * src/pcf/pcfdrivr.c (PCF_Face_Init): Updated.
+ * src/pfr/pfrobjs.c (pfr_face_init): Updated.
+ * src/type1/t1objs.c (T1_Face_Init): Updated.
+ * src/type42/t42objs.c (T42_Face_Init): Updated.
+ * src/winfonts/winfnt.c (fnt_face_get_dll_font, FNT_Face_Init):
+ Updated.
+
+ * docs/CHANGES: Updated.
+
+2015-08-12 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [type1,cff,cid] Streamline font matrix application.
+
+ * src/type1/t1gload.c (T1_Load_Glyph): Directly modify advances only
+ if font matrix is not trivial.
+ * src/cff/cffgload.c (cff_slot_load): Ditto.
+ * src/cid/cidgload.c (cid_slot_load_glyph): Ditto for advances and the
+ entire outline.
+
+2015-08-11 Werner Lemberg <wl@gnu.org>
+
+ [builds/unix] Minor.
+
+ * builds/unix/configure.raw:
+ s/lib{priv,staticconf}/libs{priv,staticconf}/ for orthogonality with
+ similarly named uppercase variables.
+
+2015-08-10 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [type1,cid,type42] Minor improvements.
+
+ * src/type1/t1load.c (t1_parse_font_matrix): Scale units per EM only
+ when necessary. Refresh comments.
+ * src/cid/cidload.c (cid_parse_font_matrix): Ditto.
+ * src/type42/t42parse.c (t42_parse_font_matrix): Refresh comments.
+
+2015-08-08 Werner Lemberg <wl@gnu.org>
+
+ [type42] Fix glyph access.
+
+ This is a severe bug: We've missed one level of indirection, as
+ described in the Type 42 specification. As a result, ftview
+ sometimes showed incorrect glyphs for given glyph names, and even
+ displayed `error 0x0006' (invalid argument!) in case the number of
+ glyph indices differed between the Type 42 font and the embedded
+ TTF.
+
+ Apparently, noone ever noticed it; this shows how much Type 42 fonts
+ are in use...
+
+ * src/type42/t42objs.c (T42_GlyphSlot_Load): Map Type 42 glyph index
+ to embedded TTF's glyph index.
+
+2015-08-08 Werner Lemberg <wl@gnu.org>
+
+ [type42] Minor clean-up.
+
+ * src/type42/t42parse.c (t42_parse_font_matrix): Remove unused
+ variable.
+
+2015-08-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [type42] Parse FontMatrix according to specifications.
+
+ * src/type42/t42parse.c (t42_parse_font_matrix): Type 42 FontMatrix
+ does not need scaling by 1000. Units_per_EM are taken from the
+ embedded TrueType.
+
+2015-08-06 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve Arabic hinting.
+
+ Problem reported by Titus Nemeth <tn@tntypography.eu> (by using
+ ttfautohint).
+
+ * src/autofit/afblue.dat: Add neutral blue zone for the tatweel
+ character.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+2015-08-05 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [truetype] Clean up types.
+
+ * src/truetype/ttobjs.c (TT_Size): Move declaration from here.
+ * include/freetype/internal/tttypes.h (TT_Size): ... to here.
+ (TT_LoaderRec): Switch to appropriate types for `face' and `size'.
+ * src/truetype/ttgload.c: Remove corresponding type casts.
+ * src/truetype/ttsubpix.c: Ditto.
+
+2015-08-05 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve recognition of flat vs. rounded segments.
+
+ Lower the flatness threshold from upem/8 to upem/14, making the
+ auto-hinter accept shorter elements.
+
+ Synchronize flat/round stem selection algorithm with blue zone code.
+
+ * src/autofit/aflatin.c (FLAT_THRESHOLD): New macro.
+ (af_latin_metrics_init_blues): Use it.
+ (af_latin_hints_compute_segments): Collect information on maximum
+ and minimum coordinates of `on' points; use this to add a constraint
+ for the flat/round decision similar to
+ `af_latin_metrics_init_blues'.
+
+2015-08-04 Werner Lemberg <wl@gnu.org>
+
+ Another left-shift bug (#45681).
+
+ * src/base/ftobjs.c (IsMacBinary): Only accept positive values for
+ `dlen'.
+
+2015-08-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Fix `ft_corner_orientation'.
+
+ Remove casting from `FT_Long' to `FT_Int' that might change the sign
+ of the return value and make it faster too.
+
+ * src/base/ftcalc.c (ft_corner_orientation): On 32-bit systems, stay
+ with 32-bit arithmetic when safe. Use plain math on 64-bit systems.
+ * src/pshinter/pshalgo.c: Remove old unused code.
+
+2015-08-03 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c (load_truetype_glyph)
+ [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Fix crash for composite glyphs
+ having a depth greater than 1.
+
+2015-08-03 Werner Lemberg <wl@gnu.org>
+
+ Fix typo in clang bug from 2015-07-31 (#45678).
+
+ * src/base/ftrfork.c (FT_Raccess_Get_HeaderInfo): Fix inequality.
+
+2015-08-02 Werner Lemberg <wl@gnu.org>
+
+ * CMakeLists.txt: Improve shared library support.
+
+ Based on a patch from John Cary <cary@txcorp.com>.
+
+2015-08-02 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/freetype-config.in (enable_shared): Remove. Unused.
+
+2015-08-02 Werner Lemberg <wl@gnu.org>
+
+ Fix more invalid left-shifts.
+
+ * src/pfr/pfrgload.c (pfr_glyph_load_compound): Use multiplication,
+ not left-shift.
+
+ * src/truetype/ttgxvar.c (ft_var_load_avar, ft_var_load_gvar,
+ tt_face_vary_cvt, TT_Vary_Apply_Glyph_Deltas): Use multiplication,
+ not left-shift.
+
+2015-07-31 Werner Lemberg <wl@gnu.org>
+
+ Fix some bugs found by clang's `-fsanitize=undefined' (#45661).
+
+ * src/base/ftrfork.c (FT_Raccess_Get_HeaderInfo): Only accept
+ positive values from header.
+ Check overflow.
+
+ * src/base/ftoutln.c (SCALED): Correctly handle left-shift of
+ negative values.
+
+ * src/bdf/bdf.h (_bdf_glyph_modified, _bdf_set_glyph_modified,
+ _bdf_clear_glyph_modified): Use unsigned long constant.
+
+ * src/bdf/bdfdrivr.c (BDF_Size_Select, BDF_Glyph_Load): Don't
+ left-shift values that can be negative.
+
+ * src/pcf/pcfdrivr.c (PCF_Size_Select, PCF_Glyph_Load): Don't
+ left-shift values that can be negative.
+
+ * src/raster/ftraster.c (SCALED): Correctly handle left-shift of
+ negative values.
+
+ * src/sfnt/ttsbit.c (tt_face_load_strike_metrics): Don't left-shift
+ values that can be negative.
+
+ * src/truetype/ttgload.c (TT_Load_Composite_Glyph,
+ compute_glyph_metrics, load_sbit_image): Don't left-shift values
+ that can be negative.
+
+2015-07-31 Werner Lemberg <wl@gnu.org>
+
+ Define FT_LONG_MAX.
+
+ * include/freetype/config/ftstdlib.h (FT_LONG_MAX): New macro.
+ * src/cff/cf2arrst.c (cf2_arrstack_setNumElements): Use it.
+
+2015-07-28 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftcalc.c (FT_Vector_NormLen): Clarify.
+
+2015-07-27 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftcalc.c (FT_Vector_NormLen): Explicate type conversions.
+
+2015-07-26 Matthias Clasen <matthias.clasen@gmail.com>
+
+ [cff] Don't use `hmtx' table for LSB (#45520).
+
+ * src/cff/cffgload.c (cff_slot_load): Use `htmx' table for advance
+ width only. Bug introduced 2015-04-10.
+
+2015-07-09 Werner Lemberg <wl@gnu.org>
+
+ Better support of user-supplied C++ namespaces.
+
+ See
+
+ https://lists.nongnu.org/archive/html/freetype-devel/2015-07/msg00008.html
+
+ for a rationale.
+
+ * src/autofit/afpic.h, src/base/basepic.h, src/cff/cffpic.h,
+ src/pshinter/pshpic.h, src/psnames/pspic.h, src/raster/rastpic.h,
+ src/sfnt/sfntpic.h, src/smooth/ftspic.h, src/truetype/ttpic.h
+ (FT_BEGIN_HEADER, FT_END_HEADER): Move macro calls to not enclose
+ header files that contain FT_{BEGIN,END}_HEADER macros by
+ themselves.
+
+ * src/autofit/aftypes.h [FT_DEBUG_AUTOFIT]: Include
+ FT_CONFIG_STANDARD_LIBRARY_H earlier.
+
+ * src/truetype/ttpic.h: Include FT_INTERNAL_PIC_H.
+
+2015-07-07 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Make `tt_face_get_name' member of the SFNT interface.
+
+ * include/freetype/internal/sfnt.h (TT_Get_Name_Func): New
+ prototype.
+ (SFNT_Interface, FT_DEFINE_SFNT_INTERFACE): New member `get_name'.
+
+ * src/sfnt/sfdriver.c (sfnt_interface): Updated.
+
+ * src/sfnt/sfobjs.c (tt_face_get_name): Tag it with `LOCAL_DEF'.
+ * src/sfnt/sfobjs.h: Add prototype for it.
+
+2015-06-30 Werner Lemberg <wl@gnu.org>
+
+ Fix some clang compiler warnings.
+
+ * src/base/ftoutln.c (FT_Outline_EmboldenXY), src/cff/cf2intrp.c
+ (cf2_interpT2CharString), src/truetype/ttgload.c
+ (load_truetype_glyph), src/truetype/ttgxvar.c (tt_handle_deltas),
+ src/truetype/ttinterp.c (Ins_INSTCTRL): Fix signedness issues.
+
+2015-06-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [truetype] Speed up bytecode interpreter.
+
+ * src/truetype/ttinterp.c (Normalize): Use `FT_Vector_NormLen'.
+
+2015-06-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Speed up emboldening.
+
+ * src/base/ftoutln.c (FT_Outline_EmboldenXY): Use
+ `FT_Vector_NormLen'.
+
+2015-06-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Implement fast vector normalization.
+
+ The function uses Newton's iterations instead of dividing vector
+ components by its length, which needs a square root. This is,
+ literally, a bit less accurate but a lot faster.
+
+ * src/base/ftcalc.c (FT_Vector_NormLen): New function.
+
+2015-06-28 Werner Lemberg <wl@gnu.org>
+
+ * CMakeLists.txt: Always create `ftconfig.h'.
+
+ For non-UNIX builds, the file stays unmodified. However, it's
+ better to have the main configuration files at the same place
+ regardless of the OS.
+
+2015-06-28 Werner Lemberg <wl@gnu.org>
+
+ * CMakeLists.txt: Improve MSVC support (#43737).
+
+2015-06-28 Werner Lemberg <wl@gnu.org>
+
+ [cmake] Check for libraries and create `ftoption.h'.
+
+ * builds/FindHarfBuzz.cmake: New file, taken from
+
+ https://trac.webkit.org/browser/trunk/Source/cmake/FindHarfBuzz.cmake
+
+ * CMakeLists.Txt: Add path to local cmake modules.
+ Find dependencies for zlib, bzip2, libpng, and harfbuzz.
+ Create `ftoption.h' file.
+ Set up include and linker stuff for libraries.
+
+2015-06-28 Werner Lemberg <wl@gnu.org>
+
+ * CMakeLists.txt: Fix creation of `ftconfig.h'.
+ Check for UNIX header files using `check_include_file'.
+ Set up correct header include directories.
+
+2015-06-28 Werner Lemberg <wl@gnu.org>
+
+ * CMakeLists.txt: Disallow in-source builds.
+
+2015-06-27 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/docmaker/utils.py (check_output): Add missing `\n'.
+
+2015-06-26 Werner Lemberg <wl@gnu.org>
+
+ * CMakeLists.txt: Select platform-dependent `ftdebug.c'.
+
+2015-06-25 Werner Lemberg <wl@gnu.org>
+
+ * CMakeLists.txt: Use cmake functions for generating `ftconfig.h'.
+ Additionally, do this for UNIX only.
+
+2015-06-25 Werner Lemberg <wl@gnu.org>
+
+ * CMakeLists.txt (BASE_SRCS): Use `ftbase.c' and `psnames.c'.
+
+2015-06-25 Werner Lemberg <wl@gnu.org>
+
+ Another adjustment to header locations.
+
+ This change is a result of a discussion thread on freetype-devel
+
+ https://lists.nongnu.org/archive/html/freetype-devel/2015-06/msg00041.html
+
+ Re-introduce the `freetype2' subdirectory for all FreeType header
+ files after installation, and rename the `freetype2' subdirectory in
+ the git repository to `freetype'.
+
+ * include/freetype2: Renamed to...
+ * include/freetype: This.
+
+ * CMakeLists.txt (PUBLIC_HEADERS, PUBLIC_CONFIG_HEADERS,
+ PRIVATE_HEADERS): Updated.
+ Update creation of `ftconfig.h'.
+ Install generated `ftconfig.h'.
+
+ * Jamfile (HDRMACRO, RefDoc), autogen.sh: Updated.
+
+ * builds/amiga/include/config/ftconfig.h, builds/freetype.mk
+ (PUBLIC_DIR), builds/symbian/bld.inf, builds/toplevel.mk (work),
+ builds/unix/freetype2.in: Updated.
+
+ * builds/unix/freetype-config.in: Updated.
+ * builds/unix/configure.raw: Don't check for `rmdir'.
+ * builds/unix/unix-def.in (DELDIR): Use `rm -rf', which is portable
+ according to the autoconf info manual.
+ * builds/unix/install.mk (install, uninstall,
+ distclean_project_unix): Update and simplify.
+
+ * builds/wince/*, builds/windows/*: Updated.
+
+ * devel/ft2build.h, include/ft2build.h: Updated.
+
+ * include/freetype2/config/ftheader.h,
+ include/freetype2/internal/ftserv.h,
+ include/freetype2/internal/internal.h: Update all header file
+ macros.
+
+ * src/tools/chktrcmp.py (TRACE_DEF_FILES): Updated.
+
+ * docs/*: Updated.
+
+2015-06-24 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/bdf/bdflib.c (_bdf_parse_start): Disallow 0 bpp.
+
+2015-06-24 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/bdf/bdflib.c (_bdf_parse_start): Simplify bpp parsing.
+
+2015-06-23 Werner Lemberg <wl@gnu.org>
+
+ s/TYPEOF/FT_TYPEOF/ (#45376).
+
+ * builds/unix/ftconfig.in, builds/vms/ftconfig.in,
+ include/freetype2/config/ftconfig.h,
+ include/freetype2/internal/ftobjs.h, src/autofit/afwarp.h: Do it.
+
+2015-06-22 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #45097.
+
+ We no longer `pollute' the namespace of possible header file names;
+ instead we move `ft2build.h' up by one level so that it gets
+ installed in the default include directory (e.g.,
+ /usr/local/include). After this commit, only `ft2build.h' stays in
+ the compiler's include path.
+
+ No visible changes for the user who follows the standard FreeType
+ header inclusion rules.
+
+ * include/*: Move to ...
+ * include/freetype2/*: This directory, except `ft2build.h'.
+
+ * CMakeLists.txt (PUBLIC_HEADERS, PUBLIC_CONFIG_HEADERS,
+ PRIVATE_HEADERS), Jamfile (HDRMACRO, RefDoc), autogen.sh: Updated.
+
+ * builds/amiga/include/config/ftconfig.h, builds/freetype.mk
+ (PUBLIC_DIR), builds/symbian/bld.inf, builds/toplevel.mk (work),
+ builds/unix/install.mk (install, uninstall),
+ builds/unix/freetype2.in: Updated.
+
+ * builds/unix/freetype-config.in: Updated.
+ Emit -I directory only if it is not `/usr/include'.
+
+ * builds/wince/*, builds/windows/*: Updated.
+
+ * devel/ft2build.h, include/ft2build.h: Updated.
+
+ * include/freetype2/config/ftheader.h,
+ include/freetype2/internal/ftserv.h,
+ include/freetype2/internal/internal.h: Update all header file
+ macros.
+
+ * src/tools/chktrcmp.py (TRACE_DEF_FILES): Updated.
+
+2015-06-21 Werner Lemberg <wl@gnu.org>
+
+ Make Jam support work again.
+
+ This is just very basic stuff and just a little bit tested on
+ GNU/Linux only. I won't delve into this since I'm not a Jam user.
+
+ * Jamfile: Call `HDRMACRO' for `ftserv.h' also.
+ (DEFINES): Replace with...
+ (CCFLAGS): ... this.
+
+ * src/Jamfile: Don't call `HDRMACRO' for `internal.h'; this is
+ already handled in the top-level Jamfile.
+
+ * src/autofit/Jamfile (DEFINES): Replace with...
+ (CCFLAGS): ... this.
+ (_sources): Add missing files.
+
+ * src/cache/Jamfile: Don't call `HDRMACRO' for `ftcache.h'; it no
+ longer contains macro header definitions.
+
+ * src/base/Jamfile, src/cff/Jamfile, src/sfnt/Jamfile,
+ src/truetype/Jamfile (_sources): Add missing files.
+
+2015-06-16 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #45326.
+
+ * src/sfnt/sfntpic.h (SFNT_SERVICES_GET): Remove duplicate
+ definitions.
+
+2015-06-07 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.6 released.
+ =======================
+
+
+ Tag sources with `VER-2-6'.
+
+ * docs/VERSION.DLL: Update documentation and bump version number to
+ 2.6.
+
+ * 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.5/2.6/, s/255/26/.
+
+ * include/freetype/freetype.h (FREETYPE_MINOR): Set to 6.
+ (FREETYPE_PATCH): Set to 0.
+
+ * builds/unix/configure.raw (version_info): Set to 18:0:12.
+ * CMakeLists.txt (VERSION_MINOR): Set to 6.
+ (VERSION_PATCH): Set to 0.
+
+ * src/autofit/afmodule.c [!FT_MAKE_OPTION_SINGLE_OBJECT]: Add
+ declarations for dumping functions.
+
+ * src/truetype/ttinterp.c (TT_New_Context): Pacify compiler.
+
+ * builds/toplevel.mk: Use `freetype.mk's code to compute the version
+ string.
+ Don't include a zero patch level in version string.
+ * builds/freetype.mk: Remove code for computing the version string.
+
+2015-06-06 Ashish Azad <ashish.azad@samsung.com>
+
+ Fix Savannah bug #45260.
+
+ * src/pfr/pfrdrivr.c (pfr_get_kerning): Fix typo.
+
+2015-06-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix memory leak.
+
+ Problem reported by Grissiom <chaos.proton@gmail.com>; in
+
+ https://lists.nongnu.org/archive/html/freetype/2015-05/msg00013.html
+
+ there is an example code to trigger the bug.
+
+ * src/truetype/ttobjs.c (tt_size_init_bytecode): Free old `size'
+ data before allocating again. Bug most probably introduced four
+ years ago in version 2.4.3.
+
+2015-06-02 Werner Lemberg <wl@gnu.org>
+
+ [raster] Add more tracing.
+
+ * src/raster/ftraster.c (FT_TRACE7) [_STANDALONE_]: Define.
+ (Vertical_Sweep_Span, Vertical_Sweep_Drop, Horizontal_Sweep_Span,
+ Horizontal_Sweep_Drop, Render_Glyph): Add tracing calls.
+
+2015-06-01 Werner Lemberg <wl@gnu.org>
+
+ [truetype] While tracing opcodes, show code position and stack.
+
+ * src/truetype/ttinterp.c: Change all existing TRACE7 calls to
+ TRACE6.
+ (opcode_name): Add string lengths.
+ (TT_RunIns): Implement display of code position and stack.
+
+2015-05-31 Werner Lemberg <wl@gnu.org>
+
+ [truetype] In GX, make private point numbers work correctly.
+
+ This is completely missing in Apple's documentation: If a `gvar'
+ tuple uses private point numbers (this is, deltas are specified for
+ some points only), the uncovered points must be interpolated for
+ this tuple similar to the IUP bytecode instruction. Examples that
+ need this functionality are glyphs `Oslash' and `Q' in Skia.ttf.
+
+ * src/truetype/ttgxvar.c (tt_delta_shift, tt_delta_interpolate,
+ tt_handle_deltas): New functions.
+ (TT_Vary_Get_Glyph_Deltas): Renamed to...
+ (TT_Vary_Apply_Glyph_Deltas): ... this; it directly processes the
+ points and does no longer return an array of deltas.
+ Add tracing information.
+ Call `tt_handle_deltas' to interpolate missing deltas.
+ Also fix a minor memory leak in case of error.
+
+ * src/truetype/ttgxvar.h: Updated.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
+ load_truetype_glyph): Updated.
+
+2015-05-31 Werner Lemberg <wl@gnu.org>
+
+ [truetype] In GX, make intermediate tuplets work at extrema.
+
+ * src/truetype/ttgxvar.c (ft_var_apply_tuple): Fix range condition.
+
+2015-05-31 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add tracing information to GX code.
+
+ * src/truetype/ttgxvar.c (ft_var_load_avar, ft_var_load_gvar,
+ ft_var_apply_tuple, TT_Get_MM_Var, TT_Set_MM_Blend,
+ TT_Set_Var_Design, tt_face_vary_cvt): Do it.
+
+2015-05-28 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/apinames.c (names_dump): Fix invalid reference.
+
+ Problem reported by Guzman Mosqueda, Jose R
+ <jose.r.guzman.mosqueda@intel.com>.
+
+2015-05-24 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix commit from 2015-05-22.
+
+ * src/truetype/ttgload.c, src/truetype/ttinterp.c: Guard new code
+ with `TT_CONFIG_OPTION_SUBPIXEL_HINTING'.
+
+ Problem reported by Nikolaus Waxweiler <madigens@gmail.com>.
+
+2015-05-23 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix return values of GETINFO bytecode instruction.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): New fields
+ `vertical_lcd' and `gray_cleartype'.
+
+ * src/truetype/ttgload.c (tt_loader_init): Initialize new fields.
+ Change `symmetrical smoothing' to TRUE, since FreeType produces
+ exactly this.
+
+ * src/truetype/ttinterp.c (Ins_GETINFO): Fix selector/return bit
+ values for symmetrical smoothing, namely 11/18.
+ Handle bits for vertical LCD subpixels (8/15) and Gray ClearType
+ (12/19).
+
+2015-05-23 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Minor.
+
+ * src/truetype/ttinterp.h (TT_ExecContext):
+ s/subpixel/subpixel_hinting.
+
+ * src/truetype/ttgload.c, src/truetype/ttgload.h: Updated.
+
+2015-05-22 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Support selector index 3 of the INSTCTRL instruction.
+
+ This flag activates `native ClearType hinting', disabling backward
+ compatibility mode as described in Greg Hitchcocks whitepaper. In
+ other words, it enables unrestricted functionality of all TrueType
+ instructions in ClearType.
+
+ * src/truetype/ttgload.c (tt_get_metrics): Call `sph_set_tweaks'
+ unconditionally.
+ (tt_loader_init): Unset `ignore_x_mode' flag if bit 2 of
+ `GS.instruct_control' is active.
+
+ * src/truetype/ttinterp.c (Ins_INSTCTRL): Handle selector index 3.
+ (Ins_GETINFO): Updated.
+
+ * docs/CHANGES: Document it.
+
+2015-05-20 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Minor.
+
+ * src/truetype/ttinterp.h (SetSuperRound): Fix type of `GridPeriod'
+ argument.
+
+2015-05-17 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix loading of composite glyphs.
+
+ * src/truetype/ttgload.c (TT_Load_Composite_Glyph): If the
+ ARGS_ARE_XY_VALUES flag is not set, handle argument values as
+ unsigned. I trust `ttx' (which has exactly such code) that it does
+ the right thing here...
+
+ The reason that noone has ever noticed this bug is probably the fact
+ that point-aligned subglyphs are rare, as are subglyphs with a
+ number of points in the range [128;255], which is quite large (or
+ even in the range [32768;65535], which is extremely unlikely).
+
+2015-05-12 Chris Liddell <chris.liddell@artifex.com>
+
+ [cff] Make the `*curveto' operators more tolerant.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString): The opcodes
+ `vvcurveto', `hhcurveto', `vhcurveto', and `hvcurveto' all iterate,
+ pulling values off the stack until the stack is exhausted.
+ Implicitly the stack must be a multiple (or for subtly different
+ behaviour) a multiple plus a specific number of extra values deep.
+ If that's not the case, enforce it (as the old code did).
+
+2015-05-12 Chris Liddell <chris.liddell@artifex.com>
+
+ [cff] fix incremental interface with new cff code.
+
+ * src/cff/cf2ft.c (cf2_getSeacComponent): When using the incremental
+ interface to retrieve glyph data for a SEAC, it be left to the
+ incremental interface callback to apply the encoding to raw
+ character index (as it was in the previous code).
+
+2015-04-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [autofit] Speed up IUP.
+
+ * src/autofit/afhints.c (af_iup_interp): Separate trivial snapping to
+ the same position from true interpolation, use `scale' to reduce
+ divisions.
+
+2015-04-28 Werner Lemberg <wl@gnu.org>
+
+ [cff] Use `name' table for PS name if we have a SFNT-CFF.
+
+ This follows the OpenType 1.7 specification. See
+
+ https://tug.org/pipermail/tex-live/2015-April/036634.html
+
+ for a discussion.
+
+ * src/cff/cffdrivr.c (cff_get_ps_name): Use the `sfnt' service if we
+ have an SFNT.
+
+2015-04-27 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [truetype] Speed up IUP.
+
+ * src/truetype/ttinterp.c (_iup_worker_interpolate): Separate trivial
+ snapping to the same position from true interpolation.
+
+2015-04-21 Werner Lemberg <wl@gnu.org>
+
+ [autofit] By default, enable warping code but switch off warping.
+
+ Suggested by Behdad.
+
+ * include/config/ftoption.h: Define AF_CONFIG_OPTION_USE_WARPER.
+
+ * src/autofit/afmodule.c (af_autofitter_init): Initialize `warping'
+ with `false'.
+
+2015-04-21 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2015-04-21 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Introduce `warping' property.
+
+ This code replaces the debugging hook from the previous commit with
+ a better, more generic solution.
+
+ * include/ftautoh.h: Document it.
+
+ * src/autofit/afmodule.h (AF_ModuleRec)
+ [AF_CONFIG_OPTION_USE_WARPER]: Add `warping' field.
+
+ * src/autofit/afmodule.c (_af_debug_disable_warper): Remove.
+ (af_property_set, af_property_get, af_autofitter_init)
+ [AF_CONFIG_OPTION_USE_WARPER]: Handle `warping' option.
+
+ * src/autofit/afhints.h (AF_HINTS_DO_WARP): Remove use of the no
+ longer existing `_af_debug_disable_warper'.
+
+ * src/autofit/afcjk.c (af_cjk_hints_init), src/autofit/aflatin.c
+ (af_latin_hints_init), src/autofit/aflatin2.c (af_latin2_hints_init)
+ [AF_CONFIG_OPTION_USE_WARPER]: Add `AF_SCALER_FLAG_NO_WARPER' to the
+ scaler flags if warping is off.
+
+ * src/autofit/aftypes.h: Updated.
+
+2015-04-16 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add debugging hook to disable warper.
+
+ * src/autofit/afmodule.c (_af_debug_disable_warper)
+ [FT_DEBUG_AUTOFIT]: New global variable.
+
+ * src/autofit/aftypes.h: Updated.
+ (AF_SCALER_FLAG_NO_WARPER): New macro (not actively used yet).
+
+ * src/autofit/afhints.h (AF_HINTS_DO_WARP): New macro.
+
+ * src/autofit/aflatin.c (af_latin_hints_apply)
+ [AF_CONFIG_OPTION_USE_WARPER]: Use `AF_HINTS_DO_WARP' to control use
+ of warper.
+
+ * src/autofit/afcjk.c (af_cjk_hints_init, af_cjk_hints_apply)
+ [AF_CONFIG_OPTION_USE_WARPER]: Synchronize with `aflatin.c'.
+
+ * src/autofit/aflatin2.c (af_latin2_hints_apply)
+ [AF_CONFIG_OPTION_USE_WARPER]: Synchronize with `aflatin.c'.
+
+2015-04-10 Werner Lemberg <wl@gnu.org>
+
+ [cff] Update advance width handling to OpenType 1.7.
+
+ Problem reported by Behdad.
+
+ * src/cff/cffdrivr.c (cff_get_advances): Handle SFNT case
+ separately.
+
+ * src/cff/cffgload.c (cff_slot_load): Use advance width and side
+ bearing values from `hmtx' table if present.
+
+2015-04-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/autofit/afhints.c (af_glyph_hints_reload): Use do-while loop.
+
+2015-04-02 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/autofit/aflatin.c (af_latin_hint_edges): Reduce logic.
+
+2015-04-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [autofit] Finish the thought.
+
+ * src/autofit/afhints.c (af_direction_compute): make sure the long arm
+ is never negative so that its `FT_ABS' is not necessary.
+
+2015-04-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Call dumper functions for tracing.
+
+ * src/autofit/afcjk.c (af_cjk_hints_apply): Remove dead code.
+ * src/autofit/afhints.c (af_glyph_hints_dump_points): Minor
+ improvement.
+ * src/autofit/afmodule.c (af_autofitter_load_glyph): Implement it.
+
+2015-04-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Make debugging stuff work again.
+
+ The interface to ftgrid was broken in the series of commits starting
+ with
+
+ [autofit] Allocate AF_Loader on the stack instead of AF_Module.
+
+ from 2015-01-14.
+
+ * src/autofit/afmodule.c (_af_debug_hints_rec) [FT_DEBUG_AUTOFIT]:
+ Use a global AF_GlyphHintsRec object for debugging.
+ (af_autofitter_done, af_autofitter_load_glyph): Updated.
+
+ * src/autofit/afloader.c (af_loader_init, af_loader_done): Updated.
+
+2015-04-01 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afhints.c (af_glyph_hints_done): Fix minor thinko.
+
+2015-03-29 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix Savannah bug #44629.
+
+ * src/cff/cf2font.h (CF2_MAX_SUBR), src/cff/cffgload.h
+ (CFF_MAX_SUBRS_CALLS): Set to 16.
+
+2015-03-29 Werner Lemberg <wl@gnu.org>
+
+ [type1, truetype] Make the MM API more flexible w.r.t. `num_coords'.
+
+ This commit allows `num_coords' to be larger or smaller than the
+ number of available axes while selecting a design instance, either
+ ignoring excess data or using defaults if data is missing.
+
+ * src/truetype/ttgxvar.c (TT_Set_MM_Blend, TT_Set_Var_Design):
+ Implement it.
+
+ * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design,
+ T1_Set_Var_Design): Ditto.
+
+2015-03-29 Werner Lemberg <wl@gnu.org>
+
+ [type1] Minor.
+
+ * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design): Use
+ FT_THROW.
+ (T1_Set_Var_Design): Use T1_MAX_MM_AXIS and FT_THROW.
+
+2015-03-27 Werner Lemberg <wl@gnu.org>
+
+ [cff] Trace charstring nesting levels.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdCALLGSUBR,
+ cf2_cmdCALLSUBR, cf2_cmdRETURN>: Implement it.
+
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings)
+ <cff_op_callsubr, cff_op_callgsubr, cff_op_return>: Ditto.
+
+2015-03-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Optimize `FT_Angle_Diff'.
+
+ Under normal circumstances we are usually close to the desired range
+ of angle values, so that the remainder is not really necessary.
+
+ * src/base/fttrigon.c (FT_Angle_Diff): Use loops instead of remainder.
+
+ * src/autofit/aftypes.h (AF_ANGLE_DIFF): Ditto in the unused macro.
+
+2015-03-21 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Improve `gvar' handling.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Correctly handle
+ single-element runs. Cf. glyph `Q' in Skia.ttf with weights larger
+ than the default.
+
+2015-03-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/fttrigon.c (FT_Vector_Rotate): Minor refactoring.
+
+2015-03-17 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Fix Savannah bug #44412 (part 2).
+
+ * src/base/fttrigon.c (FT_Sin, FT_Cos, FT_Tan): Call `FT_Vector_Unit'.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add support for Arabic script.
+
+ Thanks to Titus Nemeth <tn@tntypography.eu> for guidance!
+
+ * src/autofit/afblue.dat: Add blue zone data for Arabic.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Arabic standard characters.
+
+ * src/autofit/afranges.c: Add Arabic data.
+
+ * src/autofit/afstyles.h: Add Arabic data.
+
+ * docs/CHANGES: Document it.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ Rename `svxf86nm.h' to `svfntfmt.h'; update related symbols.
+
+ * include/internal/ftserv.h (FT_SERVICE_XFREE86_NAME_H): Renamed
+ to...
+ (FT_SERVICE_FONT_FORMAT_H): This.
+
+ * include/internal/services/svfntfmt.h (FT_XF86_FORMAT_*): Renamed
+ to ...
+ (FT_FONT_FORMAT_*): This.
+
+ src/base/ftfntfmt.c, src/bdf/bdfdrivr.c, src/cff/cffdrivr.c,
+ src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/pfr/pfrdrivr.c,
+ src/truetype/ttdriver.c, src/type1/t1driver.c,
+ src/type42/t42drivr.c, src/winfonts/winfnt.c: Updated.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ [base] Rename `FT_XFREE86_H' to `FT_FONT_FORMATS_H'.
+
+ * include/config/ftheader.h: Implement it.
+ * src/base/ftfntfmt.c, docs/CHANGES: Updated.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ [base] Rename `FT_Get_X11_Font_Format' to `FT_Get_Font_Format'.
+
+ * include/ftfntfmt.h, src/base/ftfntfmt.c: Implement it.
+
+ * docs/CHANGES: Updated.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ Fix automatic copyright updating.
+
+ * src/tools/update-copyright: Make scanning of `no-copyright'
+ actually work.
+
+ * src/tools/no-copyright: Don't include README in general.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ Rename `ftxf86.[ch]' to `ftfntfmt.[ch]'.
+
+ CMakeLists.txt, builds/amiga/makefile, builds/amiga/makefile.os4,
+ builds/amiga/smakefile, builds/mac/FreeType.m68k_cfm.make.txt,
+ builds/mac/FreeType.m68k_far.make.txt,
+ builds/mac/FreeType.ppc_carbon.make.txt,
+ builds/mac/FreeType.ppc_classic.make.txt, builds/symbian/bld.inf,
+ builds/symbian/freetype.mmp, builds/wince/vc2005-ce/freetype.vcproj,
+ builds/wince/vc2008-ce/freetype.vcproj,
+ builds/windows/vc2005/freetype.vcproj,
+ builds/windows/vc2008/freetype.vcproj,
+ builds/windows/vc2010/freetype.vcxproj,
+ builds/windows/vc2010/freetype.vcxproj.filters,
+ builds/windows/visualc/freetype.dsp,
+ builds/windows/visualc/freetype.vcproj,
+ builds/windows/visualce/freetype.dsp,
+ builds/windows/visualce/freetype.vcproj, docs/INSTALL.ANY,
+ include/config/ftheader.h, include/ftfntfmt.h, modules.cfg,
+ src/base/ftfntfmt.c, vms_make.com: Updated.
+
+2015-03-10 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Fix Savannah bug #44412 (part 1).
+
+ * src/base/ftstroke.c (ft_stroker_inside): Handle near U-turns.
+
+2015-03-10 Werner Lemberg <wl@gnu.org>
+
+ [base] Rename `FT_Bitmap_New' to `FT_Bitmap_Init'.
+
+ * include/ftbitmap.h, src/base/ftbitmap.c: Implement it.
+ Update all callers.
+
+ * docs/CHANGES: Updated.
+
+2015-03-06 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (tt_face_load_font_dir): Fix compiler warning.
+
+ Found by Alexei.
+
+2015-03-05 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftstroke.c: Simplify.
+
+2015-03-04 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Some fixes and code refactoring in `ttgxvar.c'.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Fix return value
+ of `point_cnt' if two bytes are read.
+ Use a more vertical coding style.
+ (ft_var_readpackeddeltas): Use FT_UInt for `delta_cnt' parameter.
+ Use a more vertical coding style.
+
+2015-03-03 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix Savannah bug #44241.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Reject glyphs
+ with less than 3 points.
+
+2015-03-02 Werner Lemberg <wl@gnu.org>
+
+ Simplify `TYPEOF' macro.
+
+ No need for two arguments.
+
+ * include/config/ftconfig.h, builds/unix/ftconfig.in,
+ builds/vms/ftconfig.h (TYPEOF): Updated.
+
+ * include/internal/ftobjs.h (FT_PAD_FLOOR, FT_PIX_FLOOR),
+ src/autofit/afwarp.h (AF_WARPER_FLOOR): Updated.
+
+2015-03-01 Werner Lemberg <wl@gnu.org>
+
+ Various compiler warning fixes for `make multi'.
+
+ * src/autofit/afcjk.c (af_cjk_hints_compute_blue_edges),
+ src/autofit/aflatin.c (af_latin_hint_compute_blue_edges,
+ af_latin_hint_edges), src/autofit/aflatin2.c
+ (af_latin2_hints_compute_blue_edges, af_latin2_hint_edges): Declare
+ as `static'.
+
+ * src/cache/ftccmap.c (FTC_CMAP_QUERY_HASH, FTC_CMAP_NODE_HASH):
+ Removed. Unused.
+ * src/cache/ftcimage.c: Include FT_INTERNAL_OBJECTS_H.
+ * src/cache/ftcmanag.c (FTC_LRU_GET_MANAGER): Removed. Unused.
+
+ * src/cff/cf2intrp.c: Include `cf2intrp.h'.
+ * src/cff/cffdrivr.c (PAIR_TAG): Removed. Unused.
+
+ * src/gzip/ftgzip.c (NO_DUMMY_DECL): Removed. Unused.
+
+ * src/psaux/afmparse.c (afm_parser_read_int): Declare as `static'.
+
+ * src/pshinter/pshalgo.c (STRONGER, PSH_ZONE_MIN, PSH_ZONE_MAX):
+ Removed. Unused.
+
+ * src/raster/ftraster.c (Render_Glyph): Declare as `static'.
+
+ * src/sfnt/ttpost.c (load_format_20): Fix signedness warning.
+
+ * src/truetype/ttdriver.c (PAIR_TAG): Removed. Unused.
+ * src/truetype/ttsubpix.c (is_member_of_family_class,
+ is_member_of_style_class): Declare as `static'.
+
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Declare
+ as `static'.
+ * src/type1/t1load.c (mm_axis_unmap, mm_weights_unmap): Declare as
+ `static'.
+ (T1_FIELD_COUNT): Removed. Unused.
+ * src/type1/t1parse.h (T1_Done_Table): Removed. Unused.
+
+ * src/type42/t42parse.c (T1_Done_Table): Removed. Unused.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Signedness fixes.
+
+ * include/internal/psaux.h, src/psaux/afmparse.c,
+ src/psaux/afmparse.h, src/psaux/psconv.c, src/psaux/psobjs.c,
+ src/psaux/t1cmap.c, src/psaux/t1decode.c: Apply.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [otvalid] Signedness fixes.
+
+ * src/otvalid/otvcommn.c, src/otvalid/otvgdef.c,
+ src/otvalid/otvgpos.c, src/otvalid/otvgsub.c, src/otvalid/otvmath.c:
+ Apply.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ * src/bzip2/ftbzip2.c (ft_bzip2_alloc): Signedness fix.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [lzw] Signedness fixes.
+
+ * src/lzw/ftzopen.c, src/lzw/ftzopen.h: Apply.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [gxvalid] Signedness fixes.
+
+ * src/gxvalid/gxvbsln.c, src/gxvalid/gxvcommn.c,
+ src/gxvalid/gxvcommn.h, src/gxvalid/gxvjust.c,
+ src/gxvalid/gxvkern.c, src/gxvalid/gxvlcar.c, src/gxvalid/gxvmort.c,
+ src/gxvalid/gxvmort1.c, src/gxvalid/gxvmort2.c,
+ src/gxvalid/gxvmorx.c, src/gxvalid/gxvmorx1.c,
+ src/gxvalid/gxvmorx2.c, src/gxvalid/gxvopbd.c,
+ src/gxvalid/gxvprop.c, src/gxvalid/gxvtrak.c: Apply.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [cache] Signedness fixes.
+
+ * src/cache/ftcbasic.c, src/cache/ftccmap.c, src/cache/ftcimage.c,
+ src/cache/ftcmanag.c, src/cache/ftcsbits.c: Apply.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ Change dimension fields in `FTC_ImageTypeRec' to unsigned type.
+
+ This doesn't break ABI.
+
+ * include/ftcache.h (FTC_ImageTypeRec): Use unsigned types for
+ `width' and `height'.
+
+ * docs/CHANGES: Document it.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [cache] Don't use `labs'.
+
+ This is the only place in FreeType where this function was used.
+
+ * include/config/ftstdlib.h (ft_labs): Remove.
+
+ * src/cache/ftcimage.c (ftc_inode_weight): Replace `ft_labs' with
+ `FT_ABS'.
+
+2015-02-23 Werner Lemberg <wl@gnu.org>
+
+ [cache] Replace `FT_PtrDist' with `FT_Offset'.
+
+ * src/cache/ftccache.h (FTC_NodeRec): `FT_Offset' (a.k.a. `size_t')
+ is a better choice for `hash' to hold a pointer than `FT_PtrDist'
+ (a.k.a. `ptrdiff_t'), especially since the latter is signed,
+ causing zillions of signedness warnings. [Note that `hash' was of
+ type `FT_UInt32' before the change to `FT_PtrDist'.]
+ Update all users.
+
+ * src/cache/ftcbasic.c, src/cache/ftccache.c, src/cache/ftccmap.c,
+ src/cache/ftcglyph.c, src/cache/ftcglyph.h: Updated.
+
+2015-02-23 Werner Lemberg <wl@gnu.org>
+
+ [smooth, raster] Re-enable standalone compilation.
+
+ * src/raster/ftraster.c (FT_RENDER_POOL_SIZE, FT_MAX)
+ [_STANDALONE_]: Define macros.
+
+ * src/smooth/ftgrays.c (FT_RENDER_POOL_SIZE, FT_MAX, FT_ABS,
+ FT_HYPOT) [_STANDALONE_]: Define macros.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [smooth] Signedness fixes.
+
+ * src/smooth/ftgrays.c, src/smooth/ftsmooth.c: Apply.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ * src/raster/ftraster.c: Use the file's typedefs everywhere.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttpost.c (load_format_20): Fix error tracing message.
+
+ Bug introduced 6 commits earlier.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [pshinter] Fix thinko.
+
+ * src/pshinter/pshalgo.c (psh_glyph_find_strong_points): Correctly
+ check `count'.
+ Bug introduced two commits earlier.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [raster] Signedness fixes.
+
+ * src/raster/ftraster.c, src/raster/ftrend1.c: Apply.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [pshinter] Signedness fixes.
+
+ * src/pshinter/pshalgo.c, src/pshinter/pshglob.c,
+ src/pshinter/pshrec.c: Apply.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [pshinter] Use macros for (unsigned) flags, not enumerations.
+
+ * src/pshinter/pshalgo.h (PSH_Hint_Flags): Replace with macros.
+ Updated.
+ * src/pshinter/pshrec.h (PS_Hint_Flags): Replace with macros.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshrec.c: Simplify.
+ (ps_hints_open, ps_hints_stem): Remove switch statement.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Signedness fixes.
+
+ * src/sfnt/pngshim.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap.c,
+ src/sfnt/ttkern.c, src/sfnt/ttload.c, src/sfnt/ttpost.c,
+ src/sfnt/ttsbit.c: Apply.
+ * src/sfnt/sfdriver.c: Apply.
+ (sfnt_get_ps_name): Simplify.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Signedness fixes.
+
+ * src/bdf/bdf.h, src/bdf/bdfdrivr.c, src/bdf/bdfdrivr.h,
+ src/bdf/bdflib.c: Apply.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdflib.c (_bdf_atous): New function.
+ (_bdf_parse_glyphs, _bdf_parse_start): Use it.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Signedness fixes.
+
+ * src/pcf/pcf.h, src/pcf/pcfdrivr.c: Apply.
+ * src/pcf/pcfread.c: Apply.
+ (pcf_get_encodings): Ignore invalid negative encoding offsets.
+
+2015-02-21 Werner Lemberg <wl@gnu.org>
+
+ * src/winfonts/winfnt.c: Signedness fixes.
+
+2015-02-21 Werner Lemberg <wl@gnu.org>
+
+ [type42] Signedness fixes.
+
+ * src/type42/t42parse.c, src/type42/t42parse.h,
+ src/type42/t42types.h: Apply.
+
+2015-02-21 Werner Lemberg <wl@gnu.org>
+
+ [pfr] Signedness fixes.
+
+ * src/pfr/pfrdrivr.c, src/pfr/pfrgload.c, src/pfr/pfrload.c,
+ src/pfr/pfrload.h, src/pfr/pfrobjs.c, src/pfr/pfrsbit.c,
+ src/pfr/pfrtypes.h: Apply.
+
+2015-02-21 Werner Lemberg <wl@gnu.org>
+
+ [cff] Minor signedness fixes related to last commit.
+
+ * src/cff/cf2ft.c, src/cff/cf2intrp.c, src/cff/cffgload.c: Apply.
+
+2015-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Thinkos in bias handling.
+
+ Only the final result is always positive.
+
+ Bug introduced three commits earlier.
+
+ * src/cff/cffgload.c, src/cff/cffgload.h: Apply.
+
+2015-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cid] Fix signedness issues and emit some better error codes.
+
+ * src/cid/cidgload.c, src/cid/cidload.h, src/cid/cidobjs.c,
+ src/cid/cidparse.h: Apply.
+ * src/cid/cidload.c: Apply.
+ (parse_fd_array): Reject negative values for number of dictionaries.
+ * src/cid/cidparse.c: Apply.
+ (cid_parser_new): Reject negative values for hex data length.
+
+2015-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Signedness fixes for new engine.
+
+ * src/cff/cf2arrst.c, src/cff/cf2fixed.h, src/cff/cf2ft.c,
+ src/cff/cf2ft.h, src/cff/cf2hints.c, src/cff/cf2intrp.c: Apply.
+
+2015-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Signedness fixes for basic infrastructure and old engine.
+
+ * include/internal/pshints.h, src/cff/cffdrivr.c,
+ src/cff/cffgload.c, src/cff/cffgload.h, src/cff/cffload.c,
+ src/cff/cffobjs.c, src/cff/cffparse.c, src/pshinter/pshrec.c: Apply.
+
+2015-02-19 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Ignore `countSizePairs'.
+
+ This is hard-coded to value 2 in `fvar' version 1.0 (and no newer
+ version exists), but some fonts set it incorrectly.
+
+ Problem reported by Adam Twardoch <adam@fontlab.com>.
+
+2015-02-19 Werner Lemberg <wl@gnu.org>
+
+ [cff] Emit better error code for invalid private dict size.
+
+ * src/cff/cffparse.c (cff_parse_private_dict): Reject negative
+ values for size and offset.
+
+2015-02-19 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix signedness issues.
+
+ * src/autofit/afangles.c, src/autofit/afcjk.c,
+ src/autofit/afglobal.c, src/autofit/afhints.c,
+ src/autofit/aflatin.c, src/autofit/aflatin2.c, src/autofit/afwarp.c,
+ src/autofit/hbshim.c: Apply.
+
+2015-02-19 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Use macros for (unsigned) flags, not enumerations.
+
+ This harmonizes with other code in FreeType (and reduces the number
+ of necessary casts to avoid compiler warnings).
+
+ * src/autofit/afblue.hin: Make flag macros unsigned.
+ * src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afcjk.h: Replace flag enumeration with macros.
+ * src/autofit/afcjk.c: Updated.
+
+ * src/autofit/afhints.h (AF_Flags, AF_Edge_Flags): Replace with
+ macros.
+ * src/autofit/afhints.c: Updated.
+
+ * src/autofit/aflatin.h: Replace flag enumerations with macros.
+ * src/autofit/aflatin.c, src/autofit/aflatin2.c: Updated.
+
+ * src/autofit/aftypes.h (AF_ScalerFlags): Replace with macros.
+
+2015-02-18 Werner Lemberg <wl@gnu.org>
+
+ [type1] Fix signedness issues.
+
+ * include/internal/psaux.h, include/internal/t1types.h,
+ src/psaux/psobjs.c, src/psaux/psobjs.h, src/psaux/t1decode.c,
+ src/type1/t1gload.c, src/type1/t1load.c, src/type1/t1parse.c: Apply.
+
+2015-02-18 Werner Lemberg <wl@gnu.org>
+
+ [psaux, type1] Fix minor AFM issues.
+
+ * include/internal/t1types.h (AFM_KernPairRec): Make indices
+ unsigned.
+ Update users.
+ (AFM_FontInfoRec): Make element counters unsigned.
+ Update users.
+ * src/psaux/afmparse.h (AFM_ValueRec): Add union member for unsigned
+ int.
+
+ * src/psaux/afmparse.c (afm_parse_track_kern, afm_parse_kern_pairs):
+ Reject negative values for number of kerning elements.
+
+ * src/type1/t1afm.c, src/tools/test_afm.c: Updated.
+
+2015-02-18 Werner Lemberg <wl@gnu.org>
+
+ Don't use `FT_PtrDist' for lengths.
+
+ Use FT_UInt instead.
+
+ * include/internal/psaux.h (PS_Table_FuncsRec, PS_TableRec,
+ T1_DecoderRec): Do it.
+
+ * include/internal/t1types.h (T1_FontRec): Ditto.
+
+ * src/cid/cidload.c (cid_parse_dict): Updated.
+ * src/pfr/pfrload.c (pfr_extra_item_load_font_id): Ditto.
+ * src/psaux/psobjs.c (ps_table_add), src/psaux/psobjs.h: Ditto.
+ * src/type1/t1load.c (parse_blend_axis_types, parse_encoding,
+ parse_charstrings, parse_dict): Ditto.
+ * src/type42/t42parse.c (t42_parse_encoding, t42_parse_charstrings,
+ t42_parse_dict): Ditto.
+
+2015-02-18 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1driver.c (t1_ps_get_font_value): Clean up.
+ This handles negative values better, avoiding many casts.
+
+2015-02-17 Werner Lemberg <wl@gnu.org>
+
+ [base] Fix Savannah bug #44284.
+
+ * src/base/ftcalc.c (FT_MulFix): Typos.
+
+2015-02-17 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Finish compiler warning fixes for signedness issues.
+
+ * src/truetype/ttgxvar.c, src/truetype/ttsubpix.c,
+ src/truetype/ttsubpix.h: Apply.
+
+2015-02-17 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttsubpix.c: Adding missing `static' keywords.
+
+2015-02-17 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More signedness fixes.
+
+ * include/internal/tttypes.h, src/truetype/ttinterp.h,
+ src/truetype/ttobjs.h, src/truetype/ttinterp.c,
+ src/truetype/ttobjs.c: Apply.
+
+2015-02-17 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Various signedness fixes.
+
+ * include/internal/ftgloadr.h, src/truetype/ttpload.c: Apply.
+
+ * src/truetype/ttgload.c: Apply.
+ (TT_Get_VMetrics): Protect against invalid ascenders and descenders
+ while constructing advance height.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ [base] Finish compiler warning fixes for signedness issues.
+
+ * src/base/ftglyph.c, src/base/ftlcdfil.c, src/base/ftstroke.c:
+ Apply.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ * include/tttables.h (TT_OS2): `fsType' must be FT_UShort.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ More minor signedness warning fixes.
+
+ * src/base/ftbbox.c, src/base/ftbitmap.c, src/base/fttrigon.c,
+ src/base/ftutil.c: Apply.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ Next round of minor compiler warning fixes.
+
+ * include/internal/ftrfork.h (FT_RFork_Ref): Change `offset' member
+ type to `FT_Long'.
+ (CONST_FT_RFORK_RULE_ARRAY_BEGIN): Add `static' keyword.
+
+ * include/internal/ftstream.h (FT_Stream_Pos): Return `FT_ULong'.
+
+ * src/base/ftoutln.c, src/base/ftrfork.c, src/base/ftstream.c:
+ Signedness fixes.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ Various minor signedness fixes.
+
+ * include/ftadvanc.h, include/internal/ftobjs.h,
+ src/base/ftgloadr.c, src/base/ftobjs.c: Apply.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ New `TYPEOF' macro.
+
+ This helps suppress signedness warnings, avoiding issues with
+ implicit conversion changes.
+
+ * include/config/ftconfig.h, builds/unix/ftconfig.in,
+ builds/vms/ftconfig.h (TYPEOF): Define.
+
+ * include/internal/ftobjs.h (FT_PAD_FLOOR, FT_PIX_FLOOR),
+ src/autofit/afwarp.h (AF_WARPER_FLOOR): Use it.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftsystem.c: Use casts in standard C function wrappers.
+ (ft_alloc, ft_realloc, ft_ansi_stream_io, FT_Stream_Open): Do it.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #44261.
+
+ * builds/unix/detect.mk (setup) [unix]: Set `CONFIG_SHELL' in the
+ environment also while calling the configure script.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ * include/internal/ftmemory.h: Add some `FT_Offset' casts.
+ (FT_MEM_SET, FT_MEM_COPY, FT_MEM_MOVE, FT_ARRAY_ZERO, FT_ARRAY_COPY,
+ FT_MEM_MOVE): Do it.
+
+2015-02-15 Werner Lemberg <wl@gnu.org>
+
+ [base] Clean up signedness issues in `ftdbgmem.c'.
+
+ Also fix other minor issues.
+
+ * src/base/ftdbgmem.c (FT_MemTableRec): Replace all FT_ULong types
+ with FT_Long for consistency.
+ (ft_mem_primes): Change type to `FT_Int'.
+ (ft_mem_closest_prime, ft_mem_table_set): Updated.
+
+ (ft_mem_debug_panic, ft_mem_debug_alloc, ft_mem_debug_free,
+ ft_mem_debug_realloc): Use `static' keyword and fix signedness
+ warnings where necessary.
+
+ (ft_mem_table_resize, ft_mem_table_new, ft_mem_table_destroy,
+ ft_mem_table_get_nodep, ft_mem_debug_init, FT_DumpMemory): Fix types
+ and add or remove casts to avoid signedness warnings.
+
+2015-02-15 Werner Lemberg <wl@gnu.org>
+
+ [base] Clean up signedness in arithmetic functions.
+
+ This makes the code more readable and reduces compiler warnings.
+
+ * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round, FT_MulFix,
+ FT_DivFix): Convert input parameters to unsigned, do the
+ computation, then convert the result back to signed.
+ (ft_corner_orientation): Fix casts.
+
+2015-02-07 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #44184.
+
+ * src/sfnt/ttload.c (check_table_dir, tt_face_load_font_dir): No
+ longer reject `htmx' and `vmtx' tables with invalid length but
+ sanitize them.
+
+2015-02-06 Jon Anderson <jon@websupergoo.com>
+
+ [truetype] Fix regression in the incremental glyph loader.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): For incremental
+ fonts, the glyph index may be greater than the number of glyphs
+ indicated, so guard the check with a preprocessor conditional.
+
+2015-02-06 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix potential memory leak.
+
+ While this doesn't show up with FreeType, exactly the same code
+ leaks with ttfautohint's modified auto-hinter code (which gets used
+ in a slightly different way).
+
+ It certainly doesn't harm since it is similar to already existing
+ checks in the code for embedded arrays.
+
+ * src/autofit/afhints.c (af_glyph_hints_reload): Set `max_contours'
+ and `max_points' for all cases.
+
+2015-01-31 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add support for Thai script.
+
+ Thanks to Ben Mitchell <ben@rosettatype.com> for guidance with blue
+ zone characters!
+
+ * src/autofit/afblue.dat: Add blue zone data for Thai.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Thai standard characters.
+
+ * src/autofit/afranges.c: Add Thai data.
+
+ * src/autofit/afstyles.h: Add Thai data.
+
+2015-01-23 Behdad Esfahbod <behdad@behdad.org>
+
+ [raster] Handle `FT_RASTER_FLAG_AA' correctly.
+
+ This fixes a breakage caused by the commit `[raster] Remove
+ 5-level gray AA mode from monochrome rasterizer.'.
+
+ Problem reported by Markus Trippelsdorf <markus@trippelsdorf.de>.
+
+ * src/raster/ftraster.c (ft_black_render): Handle
+ `FT_RASTER_FLAG_AA'.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Remove gray AA mode
+ remnants.
+
+2015-01-18 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_New_Library): Fix compiler warning.
+
+2015-01-18 Chris Liddell <chris.liddell@artifex.com>
+
+ [raster] Fix Savannah bug #44022.
+
+ Add fallback for glyphs with degenerate bounding boxes.
+
+ If a glyph has only one very narrow feature, the bbox can end up
+ with either the width or height of the bbox being 0, in which case
+ no raster memory is allocated and no attempt is made to render the
+ glyph. This is less than ideal when the drop-out compensation in
+ the rendering code would actually result in the glyph being
+ rendered.
+
+ This problem can be observed with the `I' glyph (gid 47) in the
+ Autodesk RomanS TrueType font.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Add a fallback if either
+ dimension is zero to explicitly round up/down (instead of simply
+ round).
+
+2015-01-17 Werner Lemberg <wl@gnu.org>
+
+ Add some tools to handle yearly copyright notice updates.
+
+ We are now following the GNU guidelines: A new release automatically
+ means that the copyright year of all affected files gets updated; it
+ is no longer used to track years of modification changes.
+
+ * src/tools/update-copyright-year: New Perl script.
+ * src/tools/update-copyright: New shell script that calls
+ `update-copyright-year' on all files.
+ * src/tools/no-copyright: Exceptions that should not be handled by
+ `update-copyright'
+
+2015-01-14 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated, using a description from Behdad.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ * src/autofit/afmodule.c (af_autofitter_done): Fix compiler warning.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Add embedded array of segments and edges.
+
+ Avoids multiple mallocs per typical glyphs.
+
+ With this and recent changes to avoid mallocs, the thread-safe
+ stack-based loader is now as fast as the previous model that had one
+ cached singleton.
+
+ * src/autofit/afhints.h (AF_SEGMENTS_EMBEDDED, AF_EDGES_EMBEDDED):
+ New macros.
+ (AF_AxisHintsRec): Add two arrays for segments and edges.
+
+ * src/autofit/afhints.c (af_axis_hints_new_segment): Only allocate
+ data if number of segments exceeds given threshold value.
+ (af_axis_hints_new_edge): Only allocate data if number of edges
+ exceeds given threshold value.
+ (af_glyph_hints_done): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Add embedded arrays for points and contours.
+
+ This avoids at least two malloc calls for typical glyphs.
+
+ * src/autofit/afhints.h (AF_POINTS_EMBEDDED, AF_CONTOURS_EMBEDDED):
+ New macros.
+ (AF_GlyphHintsRec): Add two arrays for contours and points.
+
+ * src/autofit/afhints.c (af_glyph_hints_init, af_glyph_hints_done):
+ Updated.
+ (af_glyph_hints_reload): Only allocate data if number of contours or
+ points exceeds given threshold values.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Allocate hints object on the stack.
+
+ This avoids one malloc per load.
+
+ * src/autofit/afloader.h (AF_LoaderRec): Change type of `hints' to
+ `AF_GlyphHints'.
+ Update prototype.
+
+ * src/autofit/afloader.c (af_loader_init): Use `AF_GlyphHints'
+ parameter instead of `FT_Memory'.
+ (af_loader_done): Directly reset `load_hints'.
+ (af_loader_load_g): Updated.
+
+ * src/autofit/afmodule.c (af_autofitter_load_glyph): Use local
+ `hints' object.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Reuse slot glyph loader.
+
+ No need to create a new glyph loader; we can reuse the one from
+ `slot->internal->loader'. It's hard to tell why it was written that
+ way originally, but new code looks sound and correct to me, and
+ avoids lots of allocations.
+
+ * src/autofit/afloader.c (af_loader_init): Change return type to
+ `void'.
+ Don't call `FT_GlyphLoader_New'.
+ (af_loader_reset): Don't call `FT_GlyphLoader_Rewind'.
+ (af_loader_load_g): Update code to use `internal->loader', which
+ doesn't need copying of data.
+
+ * src/autofit/afloader.h (AF_LoaderRec): Remove `gloader' member.
+ Update prototype.
+
+ * src/autofit/afmodule.c (af_autofitter_load_glyph): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Remove (unused) support for composite glyphs.
+
+ We never have to deal with composite glyphs in the autohinter, as
+ those will be loaded into FORMAT_OUTLINE by the recursed
+ `FT_Load_Glyph' function.
+
+ In the rare cases that FT_LOAD_NO_RECURSE is set, it will imply
+ FT_LOAD_NO_SCALE as per `FT_Load_Glyph', which then implies
+ FT_LOAD_NO_HINTING:
+
+ /* resolve load flags dependencies */
+
+ if ( load_flags & FT_LOAD_NO_RECURSE )
+ load_flags |= FT_LOAD_NO_SCALE |
+ FT_LOAD_IGNORE_TRANSFORM;
+
+ if ( load_flags & FT_LOAD_NO_SCALE )
+ {
+ load_flags |= FT_LOAD_NO_HINTING |
+ FT_LOAD_NO_BITMAP;
+
+ load_flags &= ~FT_LOAD_RENDER;
+ }
+
+ and as such the auto-hinter is never called. Thus, the recursion in
+ `af_loader_load_g' never actually happens. So remove the depth
+ counter as well.
+
+ * src/autofit/afloader.c (af_loader_load_g): Remove `depth'
+ parameter.
+ <FT_GLYPH_FORMAT_COMPOSITE>: Remove associated code.
+ (af_loader_load_glyph): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [raster] Fix uninitialized memory access.
+
+ Apparently `ras.cProfile' might be uninitialized. This will be the
+ case if `ras.top == ras.cProfile->offset', as can be seen in
+ `End_Profile'. The overshoot code introduced in a change `Fix B/W
+ rasterization of subglyphs with different drop-out modes.' (from
+ 2009-06-18) violated this, accessing `ras.cProfile->flags'
+ unconditionally just before calling `End_Profile' (which then
+ detected that `cProfile' is uninitialized and didn't touch it).
+
+ This was harmless, and was not detected by valgrind before because
+ the objects were allocated on the `raster_pool', which was always
+ initialized. With recent change to allocate raster buffers on the
+ stack, valgrind now reported this invalid access.
+
+ * src/raster/ftraster.c (Convert_Glyph): Don't access an
+ uninitialized `cProfile'.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [smooth] Fix uninitialized memory access.
+
+ Looks like `ras.span_y' could always be used without initialization.
+ This was never detected by valgrind before because the library-wide
+ `raster_pool' was used for the worker object and `raster_pool' was
+ originally zero'ed. But subsequent reuses of it were using `span_y'
+ uninitialized. With the recent change to not use `render_pool' and
+ allocate worker and buffer on the stack, valgrind now detects this
+ uninitialized access.
+
+ * src/smooth/ftgrays.c (gray_raster_render): Initialize
+ `ras.span_y'.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [base] Don't initialize unused `driver->glyph_loader'.
+
+ * src/base/ftobjs.c (Destroy_Driver): Don't call
+ `FT_GlyphLoader_Done'.
+ (FT_Add_Module): Don't call `FT_GlyphLoader_New'.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [base] Don't allocate `library->raster_pool' anymore.
+
+ It's unused after the following commits:
+
+ [raster] Allocate render pool for mono rasterizer on the stack.
+ [raster] Remove 5-level gray AA mode from monochrome rasterizer.
+
+ The value of FT_RENDER_POOL_SIZE still serves the purpose it used to
+ serve, which is, to adjust the pool size. But the pool is now
+ allocated on the stack on demand.
+
+ * src/base/ftobjs.c (FT_New_Library, FT_Done_Library): Implement.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [base] Do not reorder library->renderers upon use.
+
+ Instead of keeping `library->renderers' in a MRU order, just leave
+ it as-is. The MRU machinery wasn't thread-safe.
+
+ With this patch, rasterizing glyphs from different faces from
+ different threads doesn't fail choosing rasterizer
+ (FT_Err_Cannot_Render_Glyph).
+
+ Easiest to see that crash was to add a `printf' (or otherwise let
+ thread yield in FT_Throw with debugging enabled).
+
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal), src/base/ftoutln.c
+ (FT_Outline_Render): Don't call `FT_Set_Renderer'.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [raster] Allocate render pool for mono rasterizer on the stack.
+
+ Instead of using the `render_pool' member of `FT_Library' that is
+ provided down to the rasterizer, completely ignore that and allocate
+ needed objects on the stack instead.
+
+ With this patch, rasterizing glyphs from different faces from
+ different threads doesn't crash in the monochrome rasterizer.
+
+ * src/raster/ftraster.c (black_TRaster): Remove `buffer',
+ `buffer_size', and `worker' members.
+
+ (ft_black_render): Create `buffer' locally.
+ (ft_black_reset): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [raster] Remove 5-level gray AA mode from monochrome rasterizer.
+
+ It was off by default and couldn't be turned on at runtime. And the
+ smooth rasterizer superseded it over ten years ago. No point in
+ keeping. Comments suggested that it was there for compatibility
+ with FreeType 1.
+
+ 550 lines down.
+
+ * src/raster/ftraster.c (FT_RASTER_OPTION_ANTI_ALIASING,
+ RASTER_GRAY_LINES): Remove macros and all associated code.
+
+ (black_TWorker): Remove `gray_min_x' and `gray_max_x'.
+ (black_TRaster): Remove `grays' and `gray_width'.
+
+ (Vertical_Sweep_Init, Vertical_Sweep_Span, Vertical_Sweep_Drop,
+ ft_black_render): Updated.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Simplify code.
+ (ft_raster5_renderer_class): Removed.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [smooth] Allocate render pool for smooth rasterizer on the stack.
+
+ Instead of using the `render_pool' member of `FT_Library' that is
+ provided down to the rasterizer, completely ignore that and allocate
+ needed objects on the stack instead.
+
+ With this patch, rasterizing glyphs from different faces from
+ different threads doesn't crash in the smooth rasterizer.
+
+ Bugs:
+
+ https://bugzilla.redhat.com/show_bug.cgi?id=678397
+ https://bugzilla.redhat.com/show_bug.cgi?id=1004315
+ https://bugzilla.redhat.com/show_bug.cgi?id=1165471
+ https://bugs.freedesktop.org/show_bug.cgi?id=69034
+
+ * src/smooth/ftgrays.c (gray_TRaster): Remove `buffer',
+ `buffer_size', `band_size', and `worker' members.
+
+ (gray_raster_render): Create `buffer', `buffer_size', and
+ `band_size' locally.
+ (gray_raster_reset): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] Allocate TT_ExecContext in TT_Size instead of TT_Driver.
+
+ Previously the code had stipulation for using a per-TT_Size exec
+ context if `size->debug' was true. But there was no way that
+ `size->debug' could *ever* be true. As such, the code was always
+ using the singleton `TT_ExecContext' that was stored in `TT_Driver'.
+ This was, clearly, not threadsafe.
+
+ With this patch, loading glyphs from different faces from different
+ threads doesn't crash in the bytecode loader code.
+
+ * src/truetype/ttobjs.h (TT_SizeRec): Remove `debug' member.
+ (TT_DriverRec): Remove `context' member.
+
+ * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Remove
+ `TT_ExecContext' code related to a global `TT_Driver' object.
+
+ (tt_driver_done): Don't remove `TT_ExecContext' object here but ...
+ (tt_size_done_bytecode): ... here.
+
+ (tt_driver_init): Don't create `TT_ExecContext' object here but ...
+ (tt_size_init_bytecode): ... here, only on demand.
+
+ * src/truetype/ttinterp.c (TT_Run_Context): Remove defunct debug
+ code.
+ (TT_New_Context): Remove `TT_ExecContext' code related to a global
+ `TT_Driver' object.
+
+ * src/truetype/ttinterp.h: Updated.
+
+ * src/truetype/ttgload.c (TT_Hint_Glyph, tt_loader_init): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Allocate AF_Loader on the stack instead of AF_Module.
+
+ Stop sharing a global `AF_Loader'. Allocate one on the stack during
+ glyph load.
+
+ Right now this results in about 25% slowdown, to be fixed in a
+ following commit.
+
+ With this patch loading glyphs from different faces from different
+ threads doesn't immediately crash in the autohinting loader code.
+
+ Bugs:
+
+ https://bugzilla.redhat.com/show_bug.cgi?id=1164941
+
+ * src/autofit/afloader.c (af_loader_init): Pass
+ `AF_Loader' and `FT_Memory' instead of `AF_Module' as arguments.
+ (af_loader_reset, af_loader_load_glyph): Also pass `loader' as
+ argument.
+ (af_loader_done): Use `AF_Loader' instead of `AF_Module' as
+ argument.
+
+ * src/autofit/afmodule.c (af_autofitter_init): Don't call
+ `af_loader_init'.
+ (af_autofitter_done): Don't call `af_loader_done'.
+ (af_autofitter_load_glyph): Use a local `AF_Loader' object.
+
+ * src/autofit/afloader.h: Include `afmodule.h'.
+ Update prototypes.
+ Move typedef for `AF_Module' to...
+
+ * src/autofit/afmodule.h: ... this place.
+ No longer include `afloader.h'.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ * src/type42/t42objs.h (T42_DriverRec): Remove unused member.
+
+2015-01-12 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #43976.
+
+ Assure that FreeType's internal include directories are found before
+ `CPPFLAGS' (which might be set by the user in the environment), and
+ `CPPFLAGS' before `CFLAGS'.
+
+ * builds/freetype.mk (FT_CFLAGS): Don't add `INCLUDE_FLAGS'.
+ (FT_COMPILE): Make this a special variable for compiling only the
+ files handled in `freetype.mk'.
+ (.c.$O): Removed, unused.
+
+ * src/*/rules.mk (*_COMPILE): Fix order of include directories.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Prettifying.
+
+ * src/truetype/ttinterp.c (project, dualproj, fast_project,
+ fast_dualproj): Rename to...
+ (PROJECT, DUALPROJ, FAST_PROJECT, FAST_DUALPROJ): ... this.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Ins_JROT, Ins_JROF): Simplify.
+
+ Based on a patch from Behdad.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Ins_SxVTL): Simplify function call.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Normalize): Remove unused argument.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ * src/truetype/ttinterp.c (FT_UNUSED_EXEC): Remove macro by
+ expansion.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ * src/truetype/ttinterp.c (INS_ARG): Remove macro by expansion,
+ adjusting function calls where necessary.
+ (FT_UNUSED_ARG): Removed, no longer needed.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ Based on a patch from Behdad.
+
+ * src/truetype/ttinterp.c (DO_*): Expand macros into corresponding
+ `Ins_*' functions.
+ (TT_RunIns): Replace `DO_*' macros with `Ins_*' function calls.
+ (ARRAY_BOUND_ERROR): Remove second definition, which is no longer
+ needed.
+ (Ins_SVTCA, Ins_SPVTCA, Ins_SFVTCA): Replaced with...
+ (Ins_SxyTCA): New function.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Remove TT_CONFIG_OPTION_INTERPRETER_SWITCH.
+
+ Behdad suggested this code simplification, and nobody objected...
+
+ * include/config/ftoption.h, devel/ftoption.h
+ (TT_CONFIG_OPTION_INTERPRETER_SWITCH): Remove.
+
+ * src/truetype/ttinterp.c [TT_CONFIG_OPTION_INTERPRETER_SWITCH]:
+ Remove related code.
+ (ARRAY_BOUND_ERROR): Use do-while loop.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ * src/truetype/ttinterp.c, src/truetype/ttinterp.h (EXEC_ARG_,
+ EXEC_ARG): Remove by replacing with expansion.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ Based on a patch from Behdad.
+
+ * src/truetype/ttinterp.c (SKIP_Code, GET_ShortIns, NORMalize,
+ SET_SuperRound, ROUND_None, INS_Goto_CodeRange, CUR_Func_move,
+ CUR_Func_move_orig, CUR_Func_round, CUR_Func_cur_ppem,
+ CUR_Func_read_cvt, CUR_Func_write_cvt, CUR_Func_move_cvt,
+ CURRENT_Ratio, INS_SxVTL, COMPUTE_Funcs, COMPUTE_Round,
+ COMPUTE_Point_Displacement, MOVE_Zp2_Point): Remove by replacing
+ with expansion.
+
+ (Cur_Func_project, CUR_Func_dualproj, CUR_fast_project,
+ CUR_fast_dualproj): Replace with macros `project', `dualproj',
+ `fast_project', `fast_dualproj'.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ * src/truetype/ttinterp.c (EXEC_OP_, EXEC_OP): Remove by replacing
+ with expansion.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Remove code for static TrueType interpreter.
+
+ This is a follow-up patch.
+
+ * src/truetype/ttinterp.c, src/truetype/ttinterp.h
+ [TT_CONFIG_OPTION_STATIC_INTERPRETER,
+ TT_CONFIG_OPTION_STATIC_RASTER]: Remove macros and related code.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (CUR): Remove by replacing with expansion.
+
+ This starts a series of patches that simplifies the code of the
+ bytecode interpreter.
+
+
+----------------------------------------------------------------------------
+
+Copyright 2015-2018 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used, modified,
+and distributed under the terms of the FreeType project license,
+LICENSE.TXT. By continuing to use, modify, or distribute this file you
+indicate that you have read the license and understand and accept it
+fully.
+
+
+Local Variables:
+version-control: never
+coding: utf-8
+End:
diff --git a/ChangeLog.27 b/ChangeLog.27
new file mode 100644
index 0000000..0e82b2f
--- /dev/null
+++ b/ChangeLog.27
@@ -0,0 +1,2106 @@
+2016-12-30 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.7.1 released.
+ =========================
+
+
+ Tag sources with `VER-2-7-1'.
+
+ * docs/VERSION.TXT: Add entry for version 2.7.1.
+
+ * 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.7/2.7.1/, s/27/271/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
+
+ * builds/unix/configure.raw (version_info): Set to 19:0:13.
+ * CMakeLists.txt (VERSION_PATCH): Set to 1.
+
+2016-12-30 Werner Lemberg <wl@gnu.org>
+
+ [ftfuzzer] Replace `rand' with an xorshift algorithm.
+
+ * src/tools/ftfuzzer/ftfuzzer.cc: Don't include `stdlib.h'.
+ (Random): Implement and use a 32bit `xorshift' algorithm.
+
+2016-12-30 Werner Lemberg <wl@gnu.org>
+
+ [ftfuzzer] Restrict number of tested bitmap strikes.
+
+ Malformed fonts often have large values for the number of bitmap
+ strikes, and FreeType doesn't check the validity of all bitmap
+ strikes in advance.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=353
+
+ * src/tools/ftfuzzer/ftfuzzer.cc: Include `stdlib.h' for `rand'.
+ (Random): Small class to provide n randomly selected numbers
+ (without repetition) out of the value set [1,N].
+ (LLVMFuzzerTestOneInput): Use it to test only up to 10 bitmap
+ strikes.
+
+2016-12-29 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Variation font API stability issues.
+
+ Make some functions work before a call to `TT_Set_MM_Blend'.
+
+ * src/truetype/ttgxvar.c (tt_hadvance_adjust): Exit immediately if
+ we don't blend.
+ (TT_Get_MM_Blend, TT_Get_Var_Design): Return default values if we
+ don't blend.
+
+2016-12-29 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Check axis data.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=348
+
+2016-12-29 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Tracing fixes.
+
+ * src/truetype/ttgxvar.c (tt_hadvance_adjust): Emit correct
+ information.
+ (TT_Set_Var_Design): Fix typo.
+ (TT_Get_Var_Design): Fix typos.
+
+2016-12-29 Werner Lemberg <wl@gnu.org>
+
+ */*: Use `0.5f' for tracing 16.16 numbers.
+
+2016-12-29 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Protect against gzip bombs.
+
+ Fix suggested by Kostya; reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=345
+
+ * src/pcf/pcfread.c (pcf_read_TOC): Limit number of TOC entries to
+ 1024.
+
+2016-12-28 Werner Lemberg <wl@gnu.org>
+
+ [psnames] Only declare, not define, data in `pstables.h' (#49949).
+
+ Pdfium includes `pstables.h' a second time; moving the definition
+ from `pstables.h' to `psmodule.c' saves more than 60kByte data
+ segment space for this case.
+
+ * src/tools/glnames.py (StringTable::dump,
+ StringTable::dump_sublist, dump_encoding, dump_array): Emit
+ additional code to only define tables if `DEFINE_PS_TABLES' is set.
+
+ * src/psnames/pstables.h: Regenerated.
+ * src/psnames/psmodule.c (DEFINE_PS_TABLES): Define.
+
+2016-12-28 Werner Lemberg <wl@gnu.org>
+
+ [cff] Catch `blend' op in non-variant fonts.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=334
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdBLEND>: Don't
+ allow `blend' op for non-variant fonts.
+
+2016-12-28 Werner Lemberg <wl@gnu.org>
+
+ [cff] Better check of number of blends.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdBLEND>,
+ src/cff/cffparse.c (cff_parse_blend): Compare number of blends with
+ stack size.
+
+2016-12-27 Werner Lemberg <wl@gnu.org>
+
+ Documentation updates.
+
+ * docs/CHANGES: Add missing information.
+
+ * docs/formats.txt: Rewritten and updated.
+
+2016-12-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype, type1] Implement `FT_Get_Var_Design_Coordinates'.
+
+ * src/truetype/ttgxvar.c (TT_Get_Var_Design): Implement.
+ (TT_Set_Var_Design): Fix tracing.
+
+ * src/type1/t1load.c (T1_Get_Var_Design): Implement.
+
+2016-12-24 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttpload.c (tt_face_load_hdmx): Ignore `version'.
+
+ Problem reported by 張俊芝 <418092625@qq.com>.
+
+2016-12-24 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbit): Allow more version values.
+
+ Some fonts seem to have the `version' field in the wrong byte order.
+
+ Problem reported by 張俊芝 <418092625@qq.com>.
+
+2016-12-24 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttpload.c (tt_face_load_loca): Sanitize table length.
+
+ This trivial fix allows us to accept more fonts.
+
+ Problem reported by 張俊芝 <418092625@qq.com>.
+
+2016-12-24 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Fix tracing.
+
+2016-12-22 Werner Lemberg <wl@gnu.org>
+
+ * CMakeLists.txt: Make it work with cmake 2.8.11.2 (#49909).
+
+2016-12-22 Werner Lemberg <wl@gnu.org>
+
+ Ensure used preprocessor symbols are defined (#49790).
+
+ * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
+ include/freetype/config/ftconfig.h: Check `__GNUC__', `__IBMC__',
+ and `__SUNPRO_C' correctly.
+
+2016-12-22 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftrfork.c (FT_Raccess_Get_DataOffsets): Check `count'.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=308
+
+2016-12-22 Werner Lemberg <wl@gnu.org>
+
+ [cff] Protect against invalid `vsindex' and `blend' values.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=305
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdVSINDEX,
+ cf2_cmdBLEND>: Implement it.
+
+2016-12-22 Werner Lemberg <wl@gnu.org>
+
+ [ftfuzzer] Always use Adobe CFF engine.
+
+ * src/tools/ftfuzzer/ftfuzzer.cc (FT_Global::FT_Global): Implement
+ it.
+
+2016-12-21 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Thinko.
+
+ I should really stop coding late in the evening...
+
+ Thanks again to Ben for checking.
+
+2016-12-21 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Support variation fonts.
+
+ (This ChangeLog entry was added later on.)
+
+ * src/autofit/afglobal.c (af_face_globals_free): Remove useless
+ code.
+
+ * src/base/ftmm.c (FT_Set_MM_Design_Coordinates,
+ * FT_Set_Var_Design_Coordinates, FT_Set_MM_Blend_Coordinates,
+ FT_Set_Var_Blend_Coordinates): Finalize
+ auto-hinter data to enforce recomputation. Note that this is a
+ brute-force method which should be improved.
+
+2016-12-21 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Thinko.
+
+ Don't apply deltas twice for non-phantom points.
+
+ Spotted by Ben Wagner.
+
+2016-12-21 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Another try for #49829.
+
+ * src/cff/cffdrivr.c: Don't include
+ `FT_SERVICE_METRICS_VARIATIONS_H'.
+ (cff_get_advances): Use `ttface->variation_support'.
+
+ * src/truetype/ttdriver.c (tt_get_advances): Use
+ `ttface->variation_support'.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
+ load_truetype_glyph): Use `ttface->variation_support'.
+
+2016-12-21 Werner Lemberg <wl@gnu.org>
+
+ [truetype, sfnt] Introduce font variation flags to `TT_Face'.
+
+ * include/freetype/internal/tttypes.h (TT_FACE_FLAG_VAR_XXX):
+ New macros describing available functionality of various OpenType
+ tables related to font variation.
+ (TT_Face): New fields `variation_support' and `mvar_support',
+ replacing and extending `use_fvar'.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face, sfnt_load_face): Use
+ `variation_support'.
+
+ * src/truetype/ttgxvar.c (ft_var_load_hvar): Set `variation_support'
+ field.
+ (TT_Vary_Apply_Glyph_Deltas): Updated.
+
+2016-12-21 Werner Lemberg <wl@gnu.org>
+
+ [base] Improve sanity check for Mac resources (#49888).
+
+ * src/base/ftobjs.c (Mac_Read_sfnt_Resource): Abort if `rlen' is not
+ positive.
+
+2016-12-20 Werner Lemberg <wl@gnu.org>
+
+ [base] More sanity checks for Mac resources.
+
+ We use
+
+ https://github.com/kreativekorp/ksfl/wiki/Macintosh-Resource-File-Format
+
+ and
+
+ https://developer.apple.com/legacy/library/documentation/mac/pdf/MoreMacintoshToolbox.pdf#page=151
+
+ as references.
+
+ * include/freetype/internal/ftrfork.h (FT_RFork_Ref): Use FT_Short
+ for `res_id'.
+
+ * src/base/ftrfork.c (FT_Raccess_Get_HeaderInfo): Extract map length
+ and use it to improve sanity checks.
+ Follow the specification more closely;in particular, all data types
+ are signed, not unsigned.
+ (FT_Raccess_Get_DataOffsets): Follow the specification more closely;
+ in particular, all data types are signed, not unsigned.
+ Add some sanity checks.
+
+2016-12-20 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Improve logic for getting fast advance widths.
+
+ * src/cff/cffdrivr.c (cff_get_advances), src/truetype/ttdriver.c
+ (tt_get_advances): Use `is_default_instance' for test; this gets
+ recomputed after changing blend coordinates.
+
+2016-12-20 Ben Wagner <bungeman@google.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix linear metrics of GX variation fonts (#49829).
+
+ When asking for an unhinted non-default variations,
+ `linearVertAdvance' is currently the value from the `hmtx' table
+ instead of the actual value after applying the variation. `HVAR'
+ support fixes this, but fonts will exist without that table and will
+ need sane fallback.
+
+ Problem also reported as
+
+ https://bugs.chromium.org/p/skia/issues/detail?id=5917
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
+ load_truetype_glyph): Implement linear advance adjustments if `HVAR'
+ or `VVAR' tables are missing.
+
+2016-12-20 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Fast advance width retrieval for fonts with HVAR.
+
+ Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
+
+ * src/base/ftadvanc.c (LOAD_ADVANCE_FAST_CHECK): Don't handle MM.
+
+ * src/cff/cffdrivr.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
+ (cff_get_advances): Test for HVAR and VVAR.
+
+ * src/truetype/ttdriver.c (tt_get_advances): Test for HVAR and VVAR.
+
+2016-12-18 Werner Lemberg <wl@gnu.org>
+
+ [base] Fix invalid mac font recursion.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=304
+
+ * src/base/ftobjs.c (FT_Open_Face): Code moved to...
+ (ft_open_face_internal): ... this function.
+ Add a parameter to control whether we try special Mac font handling
+ in case of failure.
+ (FT_Open_Face, FT_New_Face, FT_New_Memory_Face,
+ open_face_from_buffer): Use `ft_open_face_internal'.
+
+2016-12-18 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffobjs.c (cff_face_init): Make named instances work.
+
+2016-12-18 Werner Lemberg <wl@gnu.org>
+
+ [truetype, cff] Extend `get_var_blend' function of MM service.
+
+ In particular, we need access to named instance data.
+
+ * include/freetype/internal/services/svmm.h (FT_Get_Var_Blend_Func):
+ Add argument for `FT_MM_Var'.
+
+ * src/cff/cffload.c (cff_get_var_blend): Updated.
+ * src/cff/cffload.h: Updated.
+
+ * src/cff/cf2ft.c (cf2_getNormalizedVector): Updated.
+
+ * src/truetype/ttgxvar.c (tt_get_var_blend): Updated.
+ Accept value `NULL' for arguments.
+ * src/truetype/ttgxvar.h: Updated.
+
+2016-12-18 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Handle `fvar' with zero axes as a non-MM font.
+
+ This is better behaviour than exiting with an error.
+
+ * include/freetype/internal/tttypes.h (TT_Face): Add `use_fvar'
+ field.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Compute `use_fvar', also
+ updating the validation code.
+ Use `use_fvar' to compute FT_FACE_FLAG_MULTIPLE_MASTERS.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Remove `fvar' validation
+ code.
+
+2016-12-18 Werner Lemberg <wl@gnu.org>
+
+ Minor GX code shuffling.
+
+ * include/freetype/internal/tttypes.h (TT_Face): Move
+ `is_default_instance' into TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ block.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Updated.
+ * src/truetype/ttgload.c (IS_DEFAULT_INSTANCE): New macro.
+ (TT_Load_Glyph): Use it.
+
+2016-12-18 Werner Lemberg <wl@gnu.org>
+
+ [cff] Better handling of non-CFF font formats.
+
+ * src/cff/cffload.c (cff_font_load): Pure CFFs don't have a
+ signature, so return `FT_Err_Unknown_File_Format' more often.
+
+2016-12-17 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffload.c (cff_build_blend_vector): Remove redundant code.
+
+2016-12-17 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttobjs.c (tt_face_init): Simplify conditional code.
+
+2016-12-17 Werner Lemberg <wl@gnu.org>
+
+ [sfnt, truetype] Various sanitizing fixes.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): If the axis count in `fvar' is
+ zero, set `num_instances' to zero.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Handle `fvar' table with
+ zero axes as invalid.
+
+ * src/truetype/ttobjs.c (tt_face_init): Improve logic of loading
+ `loca', `cvt', `fpgm', and `prep' table.
+
+2016-12-17 Werner Lemberg <wl@gnu.org>
+
+ Improve tracing of `FT_Open_Face'.
+
+ * src/base/ftobjs.c (FT_Open_Face): Return info on number of
+ available faces and numbered instances, or the indices of the
+ requested face and numbered instance.
+
+ * src/sfnt/sfobjs. (sfnt_open_font): Trace number of subfonts.
+
+2016-12-17 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffload.c (cff_load_private_dict): Always init `blend'.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=295
+
+2016-12-16 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix `cvar' sanity test.
+
+ Reported by Dave Arnold.
+
+ * src/truetype/ttgxvar.c (tt_face_vary_cvt): Use tuple count mask.
+
+2016-12-16 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Remove compiler warnings; fix `make multi'.
+
+ * src/cff/cf2font.h: Include `cffload.h'.
+
+ * src/cff/cffload.c: Include FT_MULTIPLE_MASTERS_H and
+ FT_SERVICE_MULTIPLE_MASTERS_H.
+ (cff_vstore_load): Eliminate `vsSize'.
+ (cff_load_private_dict): Tag as `FT_LOCAL_DEF'.
+
+ * src/cff/cffload.h: Include `cffobjs.h'.
+ Provide declaration for `cff_load_private_dict'.
+
+ * src/truetype/ttgxvar.c (ft_var_load_hvar): Eliminate
+ `minorVersion' and `map_offset'.
+
+2016-12-16 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix heap buffer overflow (#49858).
+
+ * src/cff/cffparse.c (cff_parser_run): Add one more stack size
+ check.
+
+2016-12-15 Werner Lemberg <wl@gnu.org>
+
+ Fix clang warnings.
+
+ * src/cff/cffload.c (cff_blend_doBlend): Add cast.
+ (cff_subfont_load): Set `error' correctly.
+
+ * src/sfnt/ttmtx.c (tt_face_get_metrics): Typo.
+
+2016-12-15 Dave Arnold <darnold@adobe.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [cff] Implement CFF2 support (2/2).
+
+ The font variation code. All parts dependent on the GX code in the
+ `truetype' module are guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
+ In other words, you can still compile the `cff' module without
+ defining TT_CONFIG_OPTION_GX_VAR_SUPPORT (which brings you CFF2
+ support without font variation).
+
+ * src/cff/cf2font.c (cf2_font_setup): Add support for font
+ variation.
+ * src/cff/cf2font.h (CF2_Font): Add fields for variation data.
+
+ * src/cff/cf2ft.c (cf2_free_instance): Free blend data.
+ (cf2_getVStore, cf2_getNormalizedVector): New functions.
+ * src/cff/cf2ft.h: Updated.
+
+ * src/cff/cf2intrp.c: Include `cffload.h'.
+ (cf2_cmdRESERVED_15, cf2_cmdRESERVED_16): Replace with...
+ (cf2_cmdVSINDEX, cf2_cmdBLEND): ... this new enum values.
+ (cf2_doBlend): New function.
+ (cf2_interpT2CharString): Handle `vsindex' and `blend' opcodes.
+
+ * src/cff/cffload.c (FT_fdot14ToFixed): New macro.
+ (cff_vstore_done, cff_vstore_load): New functions.
+ (cff_blend_clear, cff_blend_doBlend, cff_blend_build_vector,
+ cff_blend_check_vector): New functions.
+ (cff_load_private_dict): Add arguments for blend vector.
+ Handle blend data.
+ (cff_subfont_load, cff_subfont_done): Updated.
+ (cff_font_load): Handle CFF2 variation store data.
+ (cff_font_done): Updated.
+ * src/cff/cffload.h: Include `cffparse.h'.
+ Updated.
+
+ * src/cff/cffobjs.c (cff_face_done): Updated.
+
+ * src/cff/cffparse.c: Include `cffload.h'.
+ (cff_parse_num): Handle internal value 255.
+ (cff_parse_vsindex, cff_parse_blend): New functions.
+ (CFF_FIELD_BLEND): New macro.
+ (cff_parser_run): Updated.
+ * src/cff/cffparse.h (cff_kind_blend): New enum value.
+
+ * src/cff/cfftoken.h: Handle `vstore', `vsindex', and `blend'
+ dictionary values.
+
+ * src/cff/cfftypes.h (CFF_VarData, CFF_AxisCoords, CFF_VarRegion,
+ CFF_VStore, CFF_Blend): New structures.
+ (CFF_FontRecDict): Add `vstore_offset' field.
+ (CFF_Private): Add `vsindex' field.
+ (CFF_SubFont): Add fields for blend data.
+ (CFF_Font): Add `vstore' field.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): `CFF2' is equal to `gvar',
+ since glyph variation data is directly embedded.
+ (TT_Set_MM_Blend): Don't load `gvar' table for CFF2 fonts.
+
+2016-12-15 Dave Arnold <darnold@adobe.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [cff] Implement CFF2 support (1/2).
+
+ This commit does not contain the blend code for font variation
+ support, which follows in another commit.
+
+ You should ignore whitespace while inspecting this commit.
+
+ * include/freetype/internal/tttypes.h (TT_Face): Add `isCFF2'
+ member.
+
+ * src/cff/cf2font.h (CF2_Font): Add `isCFF2' member.
+
+ * src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Handle `isCFF2'
+ flag.
+ (cf2_getMaxstack): New function.
+ * src/cff/cf2ft.h: Updated.
+
+ * src/cff/cf2intrp.c (cf2_escRESERVED_38): New enum.
+ (cf2_interpT2CharString): Handle CFF2 differences.
+ Add tracing message for errors.
+
+ * src/cff/cffdrivr.c (cff_get_glyph_name, cff_get_name_index):
+ Update for CFF2.
+
+ * src/cff/cffload.c (FT_FIXED_ONE): New macro.
+ (cff_index_init, cff_index_load_offsets, cff_index_access_element,
+ cff_index_get_name, cff_ft_select_get, cff_load_private_dict,
+ cff_subfont_load, cff_font_load): Handle CFF2.
+ * src/cff/cffload.h: Updated.
+
+ * src/cff/cffobjs.c (cff_face_init): Handle CFF2.
+
+ * src/cff/cffparse.c (cff_parse_maxstack): New function.
+ (CFFCODE_TOPDICT, CFFCODE_PRIVATE): Removed
+ * src/cff/cffparse.h (CFF2_MAX_STACK, CFF2_DEFAULT_STACK): New
+ macros.
+ (CFF2_CODE_TOPDICT, CFF2_CODE_FONTDICT, CFF2_CODE_PRIVATE): New
+ macros.
+
+ * src/cff/cfftoken.h: Add fields for CFF2 dictionaries (but no blend
+ stuff).
+
+ * src/cff/cfftypes.h (CFF_Index): Add `hdr_size' field.
+ (CFF_FontRecDict): Add `maxstack' field.
+ (CFF_Private): Add `subfont' field.
+ (CFF_Font): Add `top_dict_length' and `cff2' fields.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Handle `CFF2' table.
+
+2016-12-15 Werner Lemberg <wl@gnu.org>
+ Dave Arnold <darnold@adobe.com>
+
+ [truetype] Provide HVAR advance width variation as a service.
+
+ Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
+
+ * src/truetype/ttdriver.c (tt_service_metrics_variations): Updated.
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Prevent
+ double adjustment of advance width.
+
+ * src/sfnt/ttmtx.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
+ (tt_face_get_metrics): Apply metrics variations.
+
+2016-12-15 Dave Arnold <darnold@adobe.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [truetype] Provide function to apply `HVAR' advance width variation.
+
+ Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
+
+ * src/truetype/ttgxvar.c (tt_hadvance_adjust): New function.
+ * src/truetype/ttgxvar.h: Updated.
+
+2016-12-15 Dave Arnold <darnold@adobe.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add `HVAR' table parsing.
+
+ Note that this is not complete yet; it only handles advance width
+ variation.
+
+ Activation of the code follows in another commit.
+
+ Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
+
+ * include/freetype/ftmm.h (FT_Var_Named_Style): Add `psid' member.
+
+ * src/truetype/ttgxvar.h (GX_HVarData, GX_AxisCoords, GX_HVarRegion,
+ GX_HVStore, GX_WidthMap): New auxiliary structures for...
+ (GX_HVarTable): ... HVAR main structure.
+ (GX_BlendRec): Add data for HVAR loading.
+
+ * src/truetype/ttgxvar.c (FT_FIXED_ONE, FT_fdot14ToFixed,
+ FT_intToFixed, FT_fixedToInt): New macros.
+ (ft_var_load_hvar): New function.
+ (TT_Get_MM_Var): Updated.
+ (tt_done_blend): Deallocate HVAR data.
+
+2016-12-15 Dave Arnold <darnold@adobe.com>
+
+ [cff] Extend number parsing.
+
+ The forthcoming CFF2 support needs a dynamic parsing limit.
+
+ * src/cff/cffparse.c (cff_parse_num, do_fixed, cff_parse_fixed,
+ cff_parse_fixed_scaled, cff_parse_fixed_dynamic): Add argument for
+ parser.
+ (cff_parse_font_matrix, cff_parse_font_bbox, cff_parse_private_dict,
+ cff_parse_multiple_master, cff_parse_cid_ros, cff_parser_run): Updated.
+
+ * src/cff/cffparse.h (cff_parse_num): Export locally.
+
+2016-12-15 Dave Arnold <darnold@adobe.com>
+
+ [cff] Implement dynamic stack size for Adobe engine.
+
+ This also adds `cf2_stack_setReal' and `cf2_stack_pop', needed for
+ the forthcoming CFF2 support.
+
+ * src/cff/cf2stack.c (cf2_stack_init): Add argument for stack size.
+ (cf2_stack_free): Deallocate stack.
+ (cf2_stack_count, cf2_stack_pushInt, cf2_stack_pushFixed,
+ cf2_stack_popInt, cf2_stack_popFixed, cf2_stack_getReal,
+ cf2_stack_clear): Updated.
+ (cf2_stack_setReal, cf2_stack_pop): New functions.
+
+ * src/cff/cf2stack.h (CF2_Stack): Add `stackSize' member.
+ Update function declarations.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString): Updated.
+
+ * src/cff/cffparse.c (cff_parser_init): Add parameter for stack
+ size; return error code.
+ (cff_parser_done): New function.
+ (cff_parser_run): Updated.
+
+ * src/cff/cffparse.h (CFF_Parser): Add `stackSize' member and make
+ `stack' a pointer.
+ Update function declarations.
+
+ * src/cff/cffload.c (cff_load_private_dict, cff_subfont_load):
+ Updated.
+
+2016-12-15 Dave Arnold <darnold@adobe.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [cff] Code shuffling.
+
+ * src/cff/cfftypes.h (CFF_Font): Add `library' and `base_offset'
+ fields.
+
+ * src/cff/cffload.c (cff_subfont_load): Change last argument to
+ `CFF_Font'
+ Split off parsing of private dictionary into...
+ (cff_load_private_dict): ...this new function.
+ (cff_font_load): Updated.
+
+2016-12-14 Werner Lemberg <wl@gnu.org>
+
+ [sfnt, truetype] Add framework for Metrics Variations service.
+
+ No effect yet; service functions will be implemented later on.
+
+ Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
+
+ * include/freetype/internal/services/svmetric.h: New file.
+
+ * include/freetype/internal/ftserv.h
+ (FT_SERVICE_METRICS_VARIATIONS_H): New macro.
+
+ * include/freetype/internal/tttypes.h (TT_Face): New field `var'.
+
+ * src/sfnt/sfobjs.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
+ (sfnt_init_face): Initialize `face->var'.
+
+ * src/truetype/ttdriver.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
+ (tt_service_metrics_variations): New service.
+ (tt_services): Updated.
+
+ * src/truetype/ttpic.h: Updated.
+
+2016-12-14 Werner Lemberg <wl@gnu.org>
+
+ [cff] Add Multiple Masters service.
+
+ The code simply uses the MM functions from the `truetype' module.
+
+ Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
+
+ * include/freetype/internal/tttypes.h (TT_Face): New field `mm'.
+
+ * src/cff/cffdrivr.c: Include FT_SERVICE_MULTIPLE_MASTERS_H.
+ (cff_set_mm_blend, cff_get_mm_blend, cff_get_mm_var,
+ cff_set_var_design, cff_get_var_design): New functions.
+ (cff_service_multi_masters): New service.
+ (cff_services): Updated.
+
+ * src/cff/cffload.c (cff_get_var_blend, cff_done_blend): New
+ functions.
+ * src/cff/cffload.h: Updated.
+
+ * src/cff/cffpic.h (CFF_SERVICE_MULTI_MASTERS_GET): New macro.
+
+ * src/sfnt/sfobjs.c: Include FT_SERVICE_MULTIPLE_MASTERS_H.
+ (sfnt_init_face): Initialize `face->mm'.
+
+2016-12-14 Werner Lemberg <wl@gnu.org>
+
+ Extend functionality of `ft_module_get_service'.
+
+ It can now differentiate between local and global searches.
+
+ * src/base/ftobjs.c (ft_module_get_service): Add `global' argument.
+ (FT_Get_TrueType_Engine_Type): Updated.
+
+ * src/cff/cffdrivr.c (cff_get_ps_name, cff_get_cmap_info): Updated.
+
+ * include/freetype/internal/ftobjs.h: Updated.
+ * include/freetype/internal/ftserv.h (FT_FACE_FIND_GLOBAL_SERVICE):
+ Updated.
+
+2016-12-14 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (tt_get_var_blend): Fix compiler warning.
+
+2016-12-14 Dave Arnold <darnold@adobe.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [sfnt, cff] Minor preparations.
+
+ * include/freetype/tttags.h (TTAG_CFF2, TTAG_HVAR, TTAG_MVAR,
+ TTAG_VVAR): New SFNT table tags.
+
+ * src/cff/cf2fixed.h (CF2_FIXED_ONE, CF2_FIXED_EPSILON): Add cast.
+
+2016-12-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype, type1] Add `get_var_blend' to MM service.
+
+ For internal use; we want to share code between the forthcoming CFF2
+ support and TrueType.
+
+ * include/freetype/internal/services/svmm.h (FT_Get_Var_Blend_Func):
+ New typedef.
+ (MultiMasters): Add `get_var_blend'.
+ (FT_Service_MultiMasters): Updated.
+
+ * src/truetype/ttgxvar.c (tt_get_var_blend): New function.
+ * src/truetype/ttgxvar.h: Updated.
+
+ * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated.
+ * src/type1/t1driver.c (t1_service_multi_masters): Updated.
+
+2016-12-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype, type1] Add `done_blend' to MM service.
+
+ For internal use; we want to share code between the forthcoming CFF2
+ support and TrueType.
+
+ * include/freetype/internal/services/svmm.h (FT_Done_Blend_Func):
+ New typedef.
+ (MultiMasters): Add `done_blend'.
+ (FT_Service_MultiMasters): Updated.
+
+ * src/truetype/ttgxvar.c (tt_done_blend): Use `TT_Face' as argument.
+ * src/truetype/ttgxvar.h: Updated.
+
+ * src/truetype/ttobjs.c (TT_Face_Done): Updated.
+
+ * src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated.
+ * src/type1/t1driver.c (t1_service_multi_masters): Updated.
+
+2016-12-09 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Revert change from 2016-12-08.
+
+ I missed the functionality of `ft_module_get_service', which makes
+ the change unnecessary.
+
+2016-12-08 Werner Lemberg <wl@gnu.org>
+
+ Add framework to support services with 8 functions.
+
+ We will need this for CFF variation font support.
+
+ * include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC8):
+ New macro.
+
+2016-12-08 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Add `get_glyph_name' and `get_name_index' to SFNT interface.
+
+ CFF2 fonts will need access to those two functions.
+
+ * include/freetype/internal/sfnt.h: Include FT_SERVICE_GLYPH_DICT_H.
+ (SFNT_Interface): Add `get_glyph_name' and `get_name_index' members.
+ (FT_DEFINE_SFNT_INTERFACE): Updated.
+
+ * src/sfnt/sfdriver.c (sfnt_get_glyph_name, sfnt_get_name_index):
+ Fix signatures to exactly correspond to the glyph dict service
+ function typedefs.
+ (sfnt_interface): Updated.
+
+2016-12-06 Dave Arnold <darnold@adobe.com>
+
+ Add `FT_Get_Var_Design_Coordinates' function.
+
+ Note that the low-level functions aren't implemented yet.
+
+ * include/freetype/ftmm.h: Declare.
+
+ * include/freetype/internal/services/svmm.h
+ (FT_Get_Var_Design_Func): New typedef.
+ (MultiMasters): New MM service function `get_var_design'.
+ (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
+ Update all callers.
+
+ * src/base/ftmm.c (FT_Get_Var_Design_Coordinates): Implement.
+
+ * src/truetype/ttdriver.c: Updated.
+
+ * src/truetype/ttgxvar.c (TT_Get_Var_Design): New dummy function to
+ handle `get_var_design' service.
+ * src/truetype/ttgxvar.h: Updated.
+
+ * src/type1/t1driver.c: Updated.
+
+ * src/type1/t1load.c (T1_Get_Var_Design): New dump function to
+ handle `get_var_design' service.
+ * src/type1/t1load.h: Updated.
+
+2016-12-06 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_subrs): Fix memory leak.
+
+ The `subrs' keyword might erroneously occur multiple times.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=231
+
+2016-12-01 Werner Lemberg <wl@gnu.org>
+
+ [gzip] Improve building with external zlib (#49673).
+
+ Building FreeType with external zlib 1.2.8 makes msvc 14 stop with
+ the following error.
+
+ ftgzip.c
+ zlib-1.2.8\zlib.h(86): error C2061:
+ syntax error: identifier 'z_const'
+ zlib-1.2.8\zlib.h(94): error C2054:
+ expected '(' to follow 'z_const'
+ zlib-1.2.8\zlib.h(94): error C2085:
+ 'msg': not in formal parameter list
+ ...
+ zlib-1.2.8\zlib.h(877): fatal error C1003:
+ error count exceeds 100; stopping compilation
+
+ The error happens because FreeType keeps an own copy of zlib-1.1.4
+ under `src/gzip'. When building `src/gzip/ftgzip.c' with
+ FT_CONFIG_OPTION_SYSTEM_ZLIB defined, it uses
+
+ #include <zlib.h>
+
+ which correctly finds an external `zlib.h', but `zlib.h' itself has
+ a line
+
+ #include "zconf.h"
+
+ which makes Visual Studio 2015 find `src/gzip/zconf.h' while
+ compiling the files in `src/gzip'.
+
+ * src/gzip/zconf.h: Rename to...
+ * src/gzip/ftzconf.h: ... this.
+ * src/gzip/zlib.h, src/gzip/rules.mk (GZIP_DRV_SRCS): Updated.
+
+2016-12-01 Oleksandr Chekhovskyi <oleksandr.chekhovskyi@gmail.com>
+
+ [autofit] Fix Emscripten crash (patch #9180).
+
+ Function calls through pointers must use a matching signature to
+ work on Emscripten, since such calls are dispatched through lookup
+ tables grouped by signature.
+
+ * src/autofit/aftypes.h (AF_WritingSystem_ApplyHintsFunc): Fix
+ typedef.
+
+2016-11-29 Werner Lemberg <wl@gnu.org>
+
+ [smooth] Revert previous commit. Already fixed with 6ca54c64.
+
+2016-11-29 Werner Lemberg <wl@gnu.org>
+
+ [smooth] Avoid conditional jump on uninitialized value (#49711).
+
+ * src/smooth/ftgrays.c (gray_raster_render): Initialize `worker'.
+
+2016-11-27 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [autofit] Code shuffling.
+
+ Also improve some comments and remove unused code.
+
+ No functional change.
+
+ * src/autofit/afloader.c (af_loader_load_g): Merged with...
+ (af_loader_load_glyph): ...this function.
+ Split off emboldening code into...
+ (af_loader_embolden_glyph_in_slot): ... this function.
+
+2016-11-17 Werner Lemberg <wl@gnu.org>
+
+ Better support of LLP64 systems with gcc (and clang).
+
+ * builds/unix/configure.raw: Call `AC_TYPE_LONG_LONG_INT'.
+
+ * builds/unix/ftconfig.in (FT_LONG64): Enable for LLP64 systems (and
+ suppress warnings) even without `FT_CONFIG_OPTION_FORCE_INT64'.
+
+2016-11-10 Werner Lemberg <wl@gnu.org>
+
+ Fix `lcd_weights' array size.
+
+ * include/freetype/internal/ftobjs.h (FT_LibraryRec): Do it.
+
+ Reported by Nikolaus.
+
+2016-11-06 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal): Fix tracing.
+
+2016-11-06 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Improve FT_LOAD_BITMAP_METRICS_ONLY for `sbix' format.
+
+ It's unavoidable to call the PNG engine, but to get the metrics it
+ is sufficient to read the PNG image's header only.
+
+ * src/sfnt/pngshim.c (Load_SBit_Png): Add argument to control the
+ allocation of the glyph slot.
+ * src/sfnt/pngshim.h: Updated.
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_png,
+ tt_face_load_sbix_image, tt_face_load_sbit_image): Updated.
+
+2016-11-06 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Speed up `sbix' lookup.
+
+ This also fixes a bug introduced in 2016-10-01 which prevents
+ display of embedded bitmap fonts that use the `sbix' format.
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbit): Store `sbix' size and
+ offset also in `ebdt_size' and `ebdt_start', respectively. This
+ makes the test for an embedded bitmap data table succeed for this
+ format.
+
+ (tt_face_load_strike_metrics) <TT_SBIT_TABLE_TYPE_SBIX>: Use
+ `ebdt_size' and `ebdt_start'
+ (tt_face_load_sbix_image): Ditto.
+
+2016-11-06 Seigo Nonaka <nona@google.com>
+ Werner Lemberg <wl@gnu.org>
+
+ Introduce a way of quickly retrieving (embedded) bitmap metrics.
+
+ `FT_Load_Glyph' doesn't generate a bitmap for a non-bitmap glyph
+ until the user calls `FT_Render_Glyph'. However, it always
+ allocates memory for bitmaps and copies or decodes the contents of a
+ bitmap glyph, which can be quite slow for PNG data.
+
+ * include/freetype/freetype.h (FT_LOAD_BITMAP_METRICS_ONLY): New
+ macro.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Unset FT_LOAD_RENDER if
+ FT_LOAD_BITMAP_METRICS_ONLY is used.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_alloc_bitmap,
+ tt_sbit_decoder_load_bitmap): Add argument to control allocation of
+ the glyph slot.
+ (tt_sbit_decoder_load_image, tt_sbit_decoder_load_compound,
+ tt_face_load_sbit_image): Updated.
+
+ * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Quickly exit if
+ `FT_LOAD_BITMAP_METRICS_ONLY' is set.
+
+ * src/pfr/pfrsbit.c, src/pfr/pfrsbit.h (pfr_slot_load_bitmap): Add
+ argument to control allocation of the glyph slot.
+ * src/pfr/pfrobjs (pfr_slot_load): Updated.
+
+ * src/winfonts/winfnt.c (FNT_Load_Glyph): Ditto.
+
+ * docs/CHANGES: Updated.
+
+2016-11-06 Werner Lemberg <wl@gnu.org>
+
+ Synchronize with gnulib (#49448).
+
+ * include/freetype/config/ftconfig.h, builds/unix/ftconfig.in,
+ builds/vms/ftconfig.h (FT_TYPEOF): Update code to use definition in
+ current version of `intprops.h'.
+ Other minor synchronization to reduce code differences between the
+ three files.
+
+2016-11-03 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] Clamp variation requests to valid range.
+
+ This is required by OpenType 1.8; it also avoids rounding surprises.
+
+ * src/truetype/ttgxvar.c (TT_Set_Var_Design): Clamp design coordinates
+ outside of the allowed range to always stay within the range instead
+ of producing an error.
+
+2016-10-29 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Remove clang warnings.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): Using `FT_ULong' for
+ loop counter handling.
+
+ * src/truetype/ttinterp.c: Updated.
+ (Ins_SCANTYPE): Use signed constant.
+ (TT_RunIns): Ensure `num_twilight_points' is 16bit.
+
+2016-10-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix commit from 2014-11-24.
+
+ Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
+
+ * src/truetype/ttpload.c (tt_face_load_hdmx): Fix file checking
+ logic.
+
+2016-10-26 Werner Lemberg <wl@gnu.org>
+
+ Add `FT_Get_{MM,Var}_Blend_Coordinates' functions.
+
+ * include/freetype/ftmm.h: Declare.
+
+ * include/freetype/internal/services/svmm.h (FT_Get_MM_Blend_Func):
+ New typedef.
+ (MultiMasters): New MM service function `get_mm_blend'.
+ (FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
+ Update all callers.
+
+ * src/base/ftmm.c (FT_Get_MM_Blend_Coordinates,
+ FT_Get_Var_Blend_Coordinates): Implement.
+
+ * src/truetype/ttdriver.c: Updated.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Blend): New function to handle
+ `get_mm_blend' service.
+ * src/truetype/ttgxvar.h: Updated.
+
+ * src/type1/t1driver.c: Updated.
+
+ * src/type1/t1load.c (T1_Get_MM_Blend): New function to handle
+ `get_mm_blend' service.
+ * src/type1/t1load.h: Updated.
+
+ * docs/CHANGES: Document.
+
+2016-10-26 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1load.c (parse_subrs): Fix limit check.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=81
+
+2016-10-25 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [cff] Correct cmap format reporting (#24819).
+
+ * src/cff/cffdrivr.c (cff_get_cmap_info): Throw an error on synthetic
+ charmap instead of guessing its format and language.
+
+2016-10-22 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix SCANTYPE instruction (#49394).
+
+ * src/truetype/ttinterp.c (Ins_SCANTYPE): Only use lower 16bits.
+
+2016-10-22 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Improve handling of invalid post 2.5 tables [#49393].
+
+ * src/sfnt/ttpost.c (load_format_25): We need at least a single
+ table entry.
+
+2016-10-14 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix handling of `cvar' table data.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=53
+
+ * src/truetype/ttgxvar.c (tt_face_vary_cvt): Ignore invalid CVT
+ indices.
+
+2016-10-11 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Fix handling of invalid flex subrs.
+
+ Problem reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=52
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
+ <op_callothersubr>: Set `flex_state' after error checking.
+
+2016-10-11 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (tt_done_blend): Fix deallocation.
+
+2016-10-08 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidload.c (cid_face_open): Properly propagate `error'.
+
+2016-10-08 Werner Lemberg <wl@gnu.org>
+
+ [cid] Fix parsing of subr offsets.
+
+ Bug introduced 2016-05-16.
+
+ * src/cid/cidparse.c (cid_parser_new): Fix off-by-one error.
+
+2016-10-01 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Disable bitmap strikes if we don't have a bitmap data table.
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbit): Check whether we have
+ a bitmap data table.
+
+2016-10-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Remove impossibility.
+
+ * src/smooth/ftgrays.c (TWorker): Rearrange fields.
+ (gray_convert_glyph): Remove impossible condition and clean up.
+
+2016-09-29 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Enrich family name with foundry name and glyph width info.
+
+ This is a very old patch from openSuSE (from 2006, submitted to
+ FreeType in 2011) that I forgot to apply.
+
+ https://build.opensuse.org/package/view_file/openSUSE:Factory/freetype2/freetype2-bitmap-foundry.patch
+
+ Prepend the foundry name plus a space to the family name. There are
+ many fonts just called `Fixed' which look completely different, and
+ which have nothing to do with each other. When selecting `Fixed' in
+ KDE or Gnome one gets results that appear rather random, the style
+ changes often if one changes the size and one cannot select some
+ fonts at all.
+
+ We also check whether we have `wide' characters; all put together,
+ we get family names like `Sony Fixed' or `Misc Fixed Wide'.
+
+ * src/pcf/pcfread.c (pcf_load_font): Implement it.
+
+ * docs/CHANGES: Document it.
+
+2016-09-29 Werner Lemberg <wl@gnu.org>
+
+ [ftfuzzer] Speed up.
+
+ * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Don't
+ check for embedded bitmaps if we have a non-default instance.
+
+2016-09-29 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Disallow bitmap strikes for non-default instances.
+
+ Also speed up access of default instances if GX variations are
+ active.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Add
+ `is_default_instance' member.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Initialize
+ `is_default_instance'.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
+ load_truetype_glyph): Add test for default instance.
+ (TT_Load_Glyph): Load embedded bitmaps for default instance only.
+
+ * src/truetype/ttgxvar.c (TT_Set_MM_Blend): Compute
+ `is_default_instance'.
+
+2016-09-29 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Clean up `TT_Face' structure.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Remove unused
+ fields `horz_metrics' and `vert_metrics'.
+ Update documentation.
+
+ * src/sfnt/sfobjs.c (sfnt_done_face): Updated.
+
+2016-09-28 Werner Lemberg <wl@gnu.org>
+
+ More FT_ZERO usage.
+
+ * src/gxvalid/gxvcommn.c (gxv_ClassTable_validate):
+ s/ft_memset/FT_MEM_ZERO/.
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings):
+ s/ft_memset/FT_ARRAY_ZERO/.
+
+ * src/raster/ftraster.c (FT_ZERO): Define.
+ (ft_black_new): Use it.
+ * src/raster/ftrend1.c (ft_raster1_get_cbox):
+ s/FT_MEM_ZERO/FT_ZERO/.
+
+ * src/smooth/ftgrays.c (FT_ZERO): Define.
+ (gray_raster_new): Use it.
+ * src/smooth/ftsmooth.c (ft_smooth_get_cbox):
+ s/FT_MEM_ZERO/FT_ZERO/.
+
+2016-09-28 Werner Lemberg <wl@gnu.org>
+
+ */*: s/FT_MEM_ZERO/FT_ZERO/ where appropriate.
+
+2016-09-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Trace number of executed opcodes.
+
+ * src/truetype/ttinterp.c (TT_RunIns): Implement it.
+
+2016-09-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Speed up `TT_Load_Glyph'.
+
+ This avoids additional calls to `tt_face_lookup_table' for the
+ `glyf' table, which can be expensive.
+
+ * include/freetype/internal/tttypes.h (TT_LoaderRec): Move
+ `glyf_offset' field to ...
+ (TT_FaceRec): ... this structure.
+ * src/truetype/ttgload.c (load_truetype_glyph): Updated.
+ (tt_loader_init): Move initialization of `glyf_offset' to ...
+ * src/truetype/ttpload.c (tt_face_load_loca): ... this function.
+
+2016-09-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Introduce dynamic limits for some bytecode opcodes.
+
+ This speeds up FreeType's handling of malformed fonts.
+
+ * src/truetype/ttinterp.c (TT_RunIns): Set up limits for the number
+ of twilight points, the total number of negative jumps, and the
+ total number of loops in LOOPCALL opcodes. The values are based on
+ the number of points and entries in the CVT table.
+ (Ins_JMPR): Test negative jump counter.
+ (Ins_LOOPCALL): Test loopcall counter.
+
+ * src/truetype/ttinterp.h (TT_ExecContext): Updated.
+
+ * docs/CHANGES: Updated.
+
+2016-09-25 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Sanitize only last entry of `loca' table.
+
+ Without this patch, a loca sequence like `0 100000 0 100000 ...',
+ where value 100000 is larger than the `glyf' table size, makes
+ FreeType handle the whole `glyf' table as a single glyph again and
+ again, which is certainly invalid (and can be very slow, too).
+
+ * src/truetype/ttpload.c (tt_face_get_location): Implement.
+ Improve tracing messages.
+
+2016-09-25 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Fix typo.
+
+2016-09-24 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Tracing fixes.
+
+ * src/autofit/afmodule.c (af_autofitter_load_glyph): Call dumping
+ functions only if we actually do tracing.
+
+2016-09-22 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Reduce divisions in the line renderer.
+
+ We don't need some divisions if a line segments stays within a single
+ row or a single column of pixels.
+
+ * src/smooth/ftgrays.c (gray_render_line) [FT_LONG64]: Make divisions
+ conditional.
+
+2016-09-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_sweep): Remove check for empty table.
+
+2016-09-14 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Another tiny speed-up.
+
+ * src/smooth/ftgrays.c (gray_find_cell): Merge into...
+ (gray_record_cell): ... this function.
+
+2016-09-11 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_{find,set}_cell): Remove dubious code.
+
+2016-09-11 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Fix valgrind warning and reoptimize.
+
+ The algorithm calls `gray_set_cell' at the start of each new contour
+ or when the contours cross the cell boundaries. Double-checking for
+ that is wasteful.
+
+ * src/smooth/ftgrays.c (gray_set_cell): Remove check for a new cell.
+ (gray_convert_glyph): Remove initialization introduced by 44b172e88.
+
+2016-09-10 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix previous commit.
+
+ Problems reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40
+
+ We now map the strike index right before accessing the physical
+ data, not earlier.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Set `face->sbit_strike_map'
+ after creating the map so that...
+
+ * src/sfnt/ttsbit.c (tt_face_load_strike_metrics): ... this function
+ can be used before and after setting up `sbit_strike_map'.
+ (tt_face_set_sbit_strike): Revert change.
+ (tt_sbit_decoder_init, tt_face_load_sbix_image): Map strike index.
+
+ * src/truetype/ttdriver.c (tt_size_select): Revert change.
+
+2016-09-09 Werner Lemberg <wl@gnu.org>
+
+ [ftfuzzer] Minor improvements.
+
+ * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Ignore
+ invalid strikes.
+ Use better values for call to `FT_Set_Char_Size'.
+
+2016-09-09 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Don't provide (completely) broken strike data.
+
+ FreeType tries to sanitize strike header data; we now reject
+ completely broken ones.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): New
+ `sbit_strike_map' array pointer.
+
+ * src/base/ftobjs.c (FT_Match_Size): Reject matches where either
+ width or height would be zero.
+ Add tracing message in case of error.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Populate `sbit_strike_map',
+ only using (more or less) valid strike header data for
+ FT_Face's `available_sizes' array.
+ (sfnt_done_face): Updated.
+
+ * src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Use
+ `sbit_strike_map'.
+ (tt_face_load_strike_metrics): Improve tracing.
+
+ * src/truetype/ttdriver.c (tt_size_select): Use `sbit_strike_map'.
+
+2016-09-08 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.7 released.
+ =======================
+
+
+ Tag sources with `VER-2-7'.
+
+ * docs/VERSION.TXT: Add entry for version 2.7.
+
+ * 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.6.5/2.7/, s/265/27/.
+
+ * include/freetype/freetype.h (FREETYPE_MINOR): Set to 7.
+ (FREETYPE_PATCH): Set to 0.
+
+ * builds/unix/configure.raw (version_info): Set to 18:6:12.
+ * CMakeLists.txt (VERSION_MINOR): Set to 7.
+ (VERSION_PATCH): Set to 0.
+
+ * docs/CHANGES: Updated.
+
+2016-09-08 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c: Include `ttgxvar.h'.
+
+ This fixes the `multi' build.
+
+2016-09-08 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Another improvement to Armenian support.
+
+ Suggested by Hrant H Papazian <hpapazian@gmail.com>.
+
+ * src/autofit/afscript.h: Use better suited characters to derive
+ default stem widths.
+
+2016-09-07 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_hline): Micro-optimize.
+
+2016-09-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Operate in absolute bitmap coordinates.
+
+ Simpler bitmap addressing improves performance by 1.5%.
+
+ * src/smooth/ftgrays.c (gray_TWorker): Remove count fields.
+ (gray_dump_cells, gray_find_cell, gray_set_cell, gray_hline,
+ gray_sweep, gray_convert_glyph, gray_raster_render): Updated.
+
+2016-09-06 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Improve contour start (take 2).
+
+ * src/smooth/ftgrays.c (gray_move_to): Call `gray_set_cell' directly
+ instead of...
+ (gray_start_cell): ... this function, which is removed.
+ (gray_convert_glyph): Make initial y-coordinate invalid.
+
+2016-09-06 Werner Lemberg <wl@gnu.org>
+
+ [type1] MM fonts support exactly zero named instances (#48748).
+
+ * src/type1/t1load.c (T1_Get_MM_Var): Set `num_namedstyles' to zero.
+
+2016-09-06 Jonathan Kew <jfkthame@gmail.com>
+
+ [cff] Fix uninitialized memory.
+
+ Problem reported as
+
+ https://bugzilla.mozilla.org/show_bug.cgi?id=1270288
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString): Initialize `storage'
+ array to handle a `get' opcode without a previous `put'.
+
+2016-09-05 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_move_to, gray_start_cell): Revert.
+
+2016-09-05 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Improve contour start.
+
+ * src/smooth/ftgrays.c (gray_move_to): Call `gray_set_cell' directly
+ instead of...
+ (gray_start_cell): ... this function, which is removed.
+
+2016-09-05 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix memory initialization.
+
+ * src/cff/cf2stack.c (cf2_stack_init): Use `FT_NEW'. The `Q'
+ variants of FreeType's memory allocation macros don't do zeroing.
+
+2016-09-05 Werner Lemberg <wl@gnu.org>
+
+ [ftrandom] Minor improvements.
+
+ * src/tools/ftrandom/ftrandom.c (_XOPEN_SOURCE): New macro, set to
+ 500.
+
+ * src/tools/ftrandom/Makefile (CFLAGS): Split off include
+ directories to ...
+ (INCLUDES): ... this new variable.
+ (LDFLAGS): New variable.
+ (ftrandom.o, ftrandom): Updated.
+
+2016-09-05 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve Armenian support.
+
+ Thanks to Hrant H Papazian <hpapazian@gmail.com> for help.
+
+ * src/autofit/afblue.dat (AF_BLUE_STRING_ARMENIAN_*): Improve
+ selection of characters.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+2016-09-04 Werner Lemberg <wl@gnu.org>
+
+ [ftrandom] Improve Makefile.
+
+ It now supports both a normal build (`./configure && make') and a
+ development build (`make devel').
+
+ * src/tools/ftrandom/Makefile (VPATH): Set it so that
+ `libfreetype.a' gets searched in both `objs' (for the development
+ build) and `objs/.libs' (for a normal build which uses libtool).
+ (LIBS): Add missing libraries.
+ (ftrandom.o): New rule.
+ (ftrandom): Use automatic variables.
+
+2016-09-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More fixes for handling of GX deltas.
+
+ Problems reported by Bob Taylor <Bob.Taylor@monotype.com>.
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix rough
+ sanity test for glyph variation array header size.
+ Always set stream position before reading packed x and y deltas.
+ Fix thinko w.r.t. `localpoints' array.
+
+2016-09-03 Werner Lemberg <wl@gnu.org>
+
+ [ftrandom] Various fixes.
+
+ * src/tools/ftrandom/ftrandom.c (GOOD_FONTS_DIR): Provide better
+ default.
+ (error_fraction): Make it of type `double' to work as advertized –
+ this was completely broken.
+ Update all related code.
+ (error_count, fcnt): Make it unsigned to fix compiler warnings.
+ Update all related code.
+ (fontlist): Change `len' member to `long' to fix compiler warnings.
+ (FT_MoveTo, FT_LineTo, FT_ConicTo, FT_CubicTo, abort_test): Tag
+ unused variables.
+ (TestFace, FindFonts, copyfont, do_test): Fix compiler warnings.
+ (ExecuteTest): Ditto.
+ Call `FT_Done_FreeType'.
+ (getErrorCnt): Replace `ceil' with an ordinary cast to `unsigned
+ int'.
+ (usage): Improve output.
+ (main): Fix compiler warnings.
+
+ * src/tools/ftrandom/README: Updated.
+
+2016-09-03 Werner Lemberg <wl@gnu.org>
+
+ [base] Avoid negative bitmap strike dimensions (#48985).
+
+ * src/base/ftobjs.c (FT_Open_Face): Check whether negation was
+ actually successful. For example, this can fail for value
+ -32768 if the type is `signed short'. If there are problems,
+ disable the strike.
+
+2016-09-03 Werner Lemberg <wl@gnu.org>
+
+ [cff] Avoid null pointer passed to FT_MEM_COPY (#48984).
+
+ * src/cff/cffload.c (cff_index_get_name): Check `byte_len'.
+
+2016-09-02 Werner Lemberg <wl@gnu.org>
+
+ [unix] Enable 64bit support in file system access (#48962).
+
+ * builds/unix/configure.raw: Call `AC_SYS_LARGEFILE'.
+
+2016-09-02 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Avoid left shift of negative value (#48980).
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_bit_aligned): Use unsigned
+ constant.
+
+2016-09-02 Werner Lemberg <wl@gnu.org>
+
+ * src/smooth/ftgrays.c (gray_hline): Fix clang compiler warnings.
+
+2016-09-02 Werner Lemberg <wl@gnu.org>
+
+ Some preparations for the next release.
+
+ * include/freetype/config/ftoption.h
+ (TT_CONFIG_OPTION_SUBPIXEL_HINTING): Enable.
+
+ * docs/CHANGES: Updated.
+
+2016-09-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Simplify span rendering more.
+
+ It turns out that there is significant cost associated with `FT_Span'
+ creation and calls to `gray_render_span' because it happens so
+ frequently. This removes these steps from our internal use but leaves
+ it alone for `FT_RASTER_FLAG_DIRECT" to preserve API. The speed gain
+ is about 5%.
+
+ * src/smooth/ftgrays.c (gray_render_span): Removed. The code is
+ migrated to...
+ (gray_hline): ... here.
+
+2016-08-30 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Streamline pixmap drawing a bit more.
+
+ Zero coverage is unlikely (1 out of 256) to warrant checking. This
+ gives 0.5% speed improvement in rendering simple glyphs.
+
+ * src/smooth/ftgrays.c (gray_hline, gray_render_span): Remove checks.
+
+2016-08-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Streamline pixmap drawing.
+
+ This gives 2% speed improvement in rendering simple glyphs.
+
+ * src/smooth/ftgrays.c (TPixmap): Reduced pixmap descriptor with a
+ pointer to its bottom-left and pitch to be used in...
+ (gray_TWorker): ... here.
+ (gray_render_span): Move pixmap flow check from here...
+ (gray_raster_render): .. to here.
+
+2016-08-27 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Reduce stack of band boundaries.
+
+ * src/smooth/ftgrays.c (gray_TBand): Removed.
+ (gray_convert_glyph): Updated to stack band boundaries concisely.
+
+2016-08-26 Werner Lemberg <wl@gnu.org>
+
+ * src/cid/cidload.c (cid_face_open): Improve handling of `SDBytes'.
+
+2016-08-26 Werner Lemberg <wl@gnu.org>
+
+ [cid] Fix commit from 2016-05-16.
+
+ * src/cid/cidparse.c (cid_parser_new): Fix off-by-one errors.
+
+2016-08-26 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Cache offset and size to bitmap data table.
+
+ This commit avoids `EBDT' and friends being looked up again and
+ again while loading a single embedded bitmap.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec)
+ [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: New fields `ebdt_start' and
+ `ebdt_size'.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_init): Move table lookup to ...
+ (tt_face_load_sbit): ... this function; also store the table size
+ and offset.
+
+2016-08-26 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_raster_render): Minor tweaks.
+
+2016-08-26 Werner Lemberg <wl@gnu.org>
+
+ [type1] Fix heap buffer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36
+
+ * src/type1/t1load.c (parse_charstrings): Reject fonts that don't
+ contain glyph names.
+
+2016-08-25 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix previous commit (#48901).
+
+ * src/sfnt/ttcmap.c (tt_cmap4_char_map_binary): Thinkos.
+
+2016-08-25 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Speed up handling of invalid format 4 cmaps.
+
+ * src/sfnt/ttcmap.c (tt_cmap4_next, tt_cmap4_char_map_binary): Add
+ tests for `num_glyph' from `tt_cmap4_char_map_linear'.
+
+2016-08-25 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftdriver.h: Remove unused typedefs.
+
+2016-08-22 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Simplify span rendering.
+
+ This removes unnecessary complexity of span merging and buffering.
+ Instead, the spans are rendered as they come, speeding up the
+ rendering by about 5% as a result.
+
+ * src/smooth/ftgrays.c [FT_MAX_GRAY_SPANS]: Macro removed.
+ (gray_TWorker): Remove span buffer and related fields.
+ (gray_sweep, gray_hline): Updated.
+
+ * include/freetype/ftimage.h: Remove documentation note about
+ `FT_MAX_GRAY_SPANS', which was never in `ftoption.h' and is now gone.
+
+2016-08-16 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix `MPS' instruction.
+
+ According to Greg Hitchcock, MPS in DWrite really returns the point
+ size.
+
+ * src/truetype/ttobjs.h (TT_SizeRec): Add `point_size' member.
+
+ * src/truetype/ttdriver.c (tt_size_request): Set `point_size'.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): Add `pointSize'
+ member.
+
+ * src/truetype/ttinterp.c (TT_Load_Context): Updated.
+ (Ins_MPS): Fix instruction.
+
+2016-08-16 Werner Lemberg <wl@gnu.org>
+
+ [lzw] Optimize last commit.
+
+ * src/lzw/ftzopen.c (ft_lzwstate_get_code): Move check into
+ conditional clause.
+
+2016-08-16 Werner Lemberg <wl@gnu.org>
+
+ [lzw] Avoid invalid left shift.
+
+ Reported as
+
+ https://bugzilla.mozilla.org/show_bug.cgi?id=1295366
+
+ * src/lzw/ftzopen.c (ft_lzwstate_get_code): Limit `num_bits'.
+
+2016-08-16 Werner Lemberg <wl@gnu.org>
+
+ [lzw] Avoid buffer overrun.
+
+ Reported as
+
+ https://bugzilla.mozilla.org/show_bug.cgi?id=1273283
+
+ * src/lzw/ftzopen.c (ft_lzwstate_refill): Ensure `buf_size' doesn't
+ underflow.
+
+2016-08-16 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix compiler warning.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Add cast.
+
+2016-08-13 Werner Lemberg <wl@gnu.org>
+
+ [winfonts] Avoid zero bitmap width and height.
+
+ Reported as
+
+ https://bugzilla.mozilla.org/show_bug.cgi?id=1272173
+
+ * src/winfonts/winfnt.c (FNT_Face_Init): Check zero pixel height.
+ (FNT_Load_Glyph): Check for zero pitch.
+
+2016-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/truetype/ttinterp.c (Pop_Push_Count): Revert changes.
+
+2016-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/truetype/ttinterp.c (TT_RunIns): Minor and formatting.
+
+2016-08-11 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/truetype/ttinterp.c (Pop_Push_Count): Fix some entries.
+
+2016-08-10 Peter Klotz <Peter.Klotz@ith-icoserve.com>
+
+ * src/smooth/ftgrays.c (gray_hline): Fix uninitialized access.
+
+2016-08-10 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Use correct type for `italicAngle' field (#48732).
+
+ * src/sfnt/ttload.c (tt_face_load_post): Fix types.
+
+2016-08-06 Jon Spencer <jon@jonspencer.ca>
+
+ [sfnt] Fix `FT_Get_Advance' for bitmap strikes.
+
+ `FT_Get_Advance' returns 0 for bitmap fonts. It first gets the
+ advance value from the font table and then scales it by the
+ `font->size->metrics->x_scale' field. But `FT_Select_Size' doesn't
+ set that value for bitmap fonts and the advance gets scaled to zero.
+
+ Taken from
+
+ https://github.com/behdad/harfbuzz/issues/252
+
+ * src/sfnt/ttsbit.c (tt_face_load_strike_metrics)
+ <TT_SBIT_TABLE_TYPE_EBLC>: Set scale values.
+
+2016-08-06 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] Fix GX variation handling of composites.
+
+ * src/truetype/ttgload.c (load_truetype_glyph)
+ [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Check `ARGS_ARE_XY_VALUES' flag.
+
+2016-08-05 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Minor refactoring.
+
+ * src/smooth/ftgrays.c (gray_render_scanline, gray_render_line):
+ Updated.
+
+2016-07-29 Werner Lemberg <wl@gnu.org>
+
+ [sfnt, truetype] Don't abort on invalid `maxComponentDepth'.
+
+ Since 2016-05-16 we detect infinite recursion directly.
+
+ * src/sfnt/ttload.c (tt_face_load_maxp): Don't adjust
+ `maxComponentDepth'.
+ * src/truetype/ttgload.c (load_truetype_glyph): Don't abort if
+ `maxComponentDepth' is not valid. Instead, simply adjust its value
+ and emit a tracing message.
+
+2016-07-26 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Minor.
+
+ No functional change.
+
+2016-07-22 Hin-Tak Leung <htl10@users.sourceforge.net>
+
+ [truetype] Record the end of IDEFs.
+
+ To match the logic in FDEF. The value of the end is only used for
+ bound-checking in `Ins_JMPR', so it may not have been obvious that
+ it was not recorded. Tested (as part of Font Validator 2.0) all the
+ fonts on Fedora and did not see any change.
+
+ * src/truetype/ttinterp.c (Ins_IDEF): Updated.
+
+2016-07-19 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Sanitizer fix, second try.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Fix boundary
+ tests and use only one slot more.
+
+2016-07-19 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Sanitizer fix.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Increase array
+ to fix nested loops.
+
+2016-07-18 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Make GETDATA work only for GX fonts.
+
+ * src/truetype/ttinterp.c (opcode_name): Updated.
+ (Ins_GETDATA): Only define for `TT_CONFIG_OPTION_GX_VAR_SUPPORT'.
+ (TT_RunIns): Updated.
+
+2016-07-17 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add support for Apple's
+
+ GETDATA[], opcode 0x92
+
+ bytecode instruction. It always returns 17, and we have absolutely
+ no idea what it is good for...
+
+ * src/truetype/ttinterp.c (Pop_Push_Count, opcode_name): Updated.
+ (Ins_GETDATA): New function.
+ (TT_RunIns): Add it.
+
+2016-07-16 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add bytecode support for GX variation fonts.
+
+ This commit implements undocumented (but confirmed) stuff from
+ Apple's old bytecode engine.
+
+ GETVARIATION[], opcode 0x91
+ This opcode pushes normalized variation coordinates for all axes
+ onto the stack (in 2.14 format). Coordinate of first axis gets
+ pushed first.
+
+ GETINFO[], selector bit 3
+ If GX variation support is enabled, bit 10 of the result is set
+ to 1.
+
+ * src/truetype/ttinterp.c: Include FT_MULTIPLE_MASTERS_H.
+ (opcode_name) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Updated.
+ (Ins_GETINFO) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Handle selector
+ bit 3, checking support for variation glyph hinting.
+ (Ins_GETVARIATION) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: New function
+ to implement opcode 0x91.
+ (TT_RunIns) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Handle opcode 0x91.
+
+2016-07-16 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix GETINFO bytecode instruction.
+
+ * src/truetype/ttinterp.c (Ins_GETINFO): Fix return value for
+ stretching information.
+
+2016-07-16 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] Make all glyphs in `Zycon' GX font work.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Fix boundary
+ tests.
+
+2016-07-16 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix GX delta tracing.
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Trace
+ relative point movements.
+
+2016-07-16 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] More fixes for GX.
+
+ This finally fixes the rendering of the cyclist and the lizard in
+ the `Zycon' font.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackedpoints): `first' point
+ index is always cumulative.
+
+ (tt_handle_deltas): Rename to...
+ (tt_interpolate_deltas): ... This.
+ Add new parameter for output point array.
+ Update caller.
+
+ (TT_Vary_Apply_Glyph_Deltas): Add `points_out' array; it now holds
+ the intermediate results of `tt_interpolate_deltas' that are to be
+ added to `outline->points'.
+
+2016-07-15 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_segments): Thinko.
+
+ `max_pos' is always larger than `min_pos' so `FT_ABS' is not needed.
+
+ Reported by Alexei.
+
+2016-07-16 Nikolaus Waxweiler <madigens@gmail.com>
+
+ * src/truetype/ttinterp.c (Ins_MIRP): Fix copy-and-paste error.
+
+ Problem reported by Hin-Tak Leung.
+
+2016-07-15 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Update and improve segment and edge tracing.
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_segments): Trace
+ `delta' also.
+ Don't show first point of segment as a replacement for `pos'; this
+ is (a) misleading, since the difference to `pos' can be almost
+ arbitrarily large in corner cases, and (b) it is better to have all
+ segment data in font units instead of a single value given in output
+ space coordinates.
+ Improve layout.
+ (af_glyph_hints_dump_edges): Show px->units and units->px conversion
+ values for convenience.
+ Improve layout.
+
+2016-07-15 Werner Lemberg <wl@gnu.org>
+
+ [autofit] For edges, reject segments wider than 1px (#41334).
+
+ * src/autofit/afhints.h (AF_SegmentRec): New member `delta'.
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_segments): Compute
+ `delta'.
+ (af_latin_hints_compute_edges): Reject segments with a delta larger
+ than 0.5px.
+
+2016-07-14 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h (FT_IS_NAMED_INSTANCE): New macro.
+
+2016-07-14 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix `face_index' value in `FT_Face' for named instances.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Don't strip off higher 16bits.
+
+2016-07-14 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix tracing.
+
+2016-07-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] Fix gxvar delta interpolation.
+
+ The coordinates of the base font should be used for interpolation
+ purposes, NOT the current points (i.e., the result of accumulation
+ of previous deltas).
+
+ * src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Initialize
+ `points_org' before looping over all tuples.
+
+
+----------------------------------------------------------------------------
+
+Copyright 2016-2018 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used, modified,
+and distributed under the terms of the FreeType project license,
+LICENSE.TXT. By continuing to use, modify, or distribute this file you
+indicate that you have read the license and understand and accept it
+fully.
+
+
+Local Variables:
+version-control: never
+coding: utf-8
+End:
diff --git a/ChangeLog.28 b/ChangeLog.28
new file mode 100644
index 0000000..ca1ff38
--- /dev/null
+++ b/ChangeLog.28
@@ -0,0 +1,3136 @@
+2017-09-16 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.8.1 released.
+ =========================
+
+
+ Tag sources with `VER-2-8-1'.
+
+ * docs/VERSION.TXT: Add entry for version 2.8.1.
+ * docs/CHANGES: Updated.
+
+ * 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.8/2.8.1/, s/28/281/.
+
+ * include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
+
+ * builds/unix/configure.raw (version_info): Set to 21:0:15.
+ * CMakeLists.txt (VERSION_PATCH): Set to 1.
+
+2017-09-13 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [sfnt] lowest gcc for vectors (e1d0249e) is changed to 4.7.
+
+ __builtin_shuffle() was introduced in gcc-4.7. The lowest
+ gcc to enable vector operation is delayed from 4.6 to 4.7.
+
+ * src/sfnt/pngshim.c (premultiply_data): Fix cpp-macro to
+ enable the vector operation, to change the lowest gcc version
+ from 4.6 to 4.7.
+
+2017-09-13 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [cache] Fix a possible overflow by signed integer comparison.
+
+ Improve the code by 5d3ff05615dda6d1325ed612381a17a0df04c975 ,
+ issues are found by Behdad Esfahbod and Werner Lemberg.
+
+ * src/cache/ftcbasic.c (FTC_ImageCache_Lookup): Replace
+ a subtraction to check higher bit by a bit operation,
+ and cpp-conditionalize for appropriate systems. Add better
+ documentation to the comment.
+ (FTC_ImageCache_LookupScaler): Ditto.
+ (FTC_SBitCache_Lookup): Ditto.
+ (FTC_SBitCache_LookupScaler): Ditto.
+
+2017-09-13 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Really fix #41334 (#52000).
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_segments): Set
+ `segment->delta' everywhere.
+
+2017-09-12 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [autofit, sfnt] Fix for `make multi'.
+
+ * src/autofit/afshaper.c: Include FT_ADVANCE_H, to use
+ FT_Get_Advance() in it.
+ * src/sfnt/ttcmap.c: Include FT_SERVICE_POSTSCRIPT_CMAPS_H
+ to use PS_Unicodes in it, also include `ttpost.h' to use
+ tt_face_get_ps_name() in it.
+
+2017-09-11 Azzuro <azzuro@team-mediaportal.com>
+
+ [build] Improve builds with different MS Visual Studio versions.
+
+ * builds/windows/vc2010/freetype.vcxproj: Switch platform toolset
+ according to the Visual Studio version.
+
+2017-09-11 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttkern.c (tt_face_load_kern): Reject format 2 tables.
+
+ Reported by Behdad.
+
+2017-09-09 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Improve communication with ftgrid.
+
+ * src/autofit/afhints.c (af_glyph_hints_get_segment_offset):
+ Provide values in font units.
+
+2017-09-08 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [base] Remove a check for resource ID in the resource fork driver.
+
+ LastResort.dfont has a marginal resource ID 0xFFFF for sfnt
+ resource. Inside Macintosh: More Macintosh Toolbox, `Resource IDs'
+ (1-46), tells that some IDs are reserved and should not be used.
+ FreeType2 just uses resource ID to sort the fragmented resource.
+ To accept the marginal fonts, the checking is removed.
+
+ * src/base/ftrfork.c (FT_Raccess_Get_DataOffsets): Remove res_id
+ validity check, fix a trace message format.
+
+2017-09-08 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
+ [sfnt, truetype] Register the tags for marginal fonts.
+
+ The first 32bit of standard TrueType variants is 0x00010000,
+ `OTTO', `ttcf', `true' or `typ1'. 2 marginal dfonts on legacy Mac
+ OS X, Keyboard.dfont and LastResort.dfont, have the sfnt resources
+ starting 0xA5 followed by `kbd' or `lst'. Considering the following
+ data could be parsed as conventional TrueType fonts, the header
+ checking is updated to allow these tags. It seems that recent Mac
+ OS X has already switched to normal TTF for these fonts.
+
+ See the discussion at
+ http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=3931.0
+
+ * include/freetype/tttags.h (TTAG_0xA5kbd, TTAG_0xA5lst): New header
+ tags for Keyboard.dfont and LastResort.dfont.
+ * src/sfnt/sfobjs.c (sfnt_open_font): Accept the sfnt resource
+ starts with TTAG_0xA5kbd or TTAG_0xA5lst.
+ * src/truetype/ttobjs.c (tt_face_init): Accept the face with the
+ format tag is TTAG_0xA5kbd or TTAG_0xA5lst.
+
+2017-09-05 Werner Lemberg <wl@gnu.org>
+
+ Fix multiple calls of `FT_Bitmap_Convert'.
+
+ The documentation of `FT_Bitmap_Convert' says that multiple calls do
+ proper reallocation of the target FT_Bitmap object. However, this
+ failed for the sequence
+
+ non-empty bitmap
+ empty bitmap
+ non-empty bitmap
+
+ Reason was that `FT_Bitmap_Convert' only reallocated the bitmap
+ buffer if it became too small; it didn't make the buffer smaller.
+ For an empty bitmap following a non-empty one, only the buffer
+ dimension got set to zero, without deallocation. If the next call
+ was a non-empty buffer again, an assertion in `ft_mem_qrealloc' was
+ triggered.
+
+ * src/base/ftbitmap.c (FT_Bitmap_Convert): Always reallocate target
+ buffer to the correct size.
+
+ * docs/CHANGES: Document it.
+
+2017-09-05 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Fix size and resolution handling.
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Use `SIZE' values if
+ `POINT_SIZE', `RESOLUTION_X', or `RESOLUTION_Y' properties are
+ missing.
+
+ * docs/CHANGES: Document it.
+
+2017-08-25 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Swap `ALLOC_MULT' arguments (#51833).
+
+ * src/base/ftbitmap.c (ft_bitmap_assure_buffer): Updated.
+ * src/winfonts/winfnt.c (FNT_Load_Glyph): Updated.
+ * src/raster/ftrend1.c (ft_raster1_render): Updated.
+
+2017-08-23 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix clang compilation (#51788).
+
+ * src/sfnt/pngshim.c (premultiply_data): Use vectors instead of
+ scalars.
+ (vector_shuffle): New macro to take care of a different built-in
+ function name on clang.
+
+2017-08-22 Werner Lemberg <wl@gnu.org>
+
+ [base] Don't zero out allocated memory twice (#51816).
+
+ Patch applied from bug report.
+
+ * src/base/ftutil.c (ft_mem_qrealloc): Use low-level allocation to
+ avoid unnecessary overhead.
+
+2017-08-22 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow.
+
+ Changes triggered by
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3107
+
+ * src/truetype/ttinterp.c (Ins_MDRP, Ins_MIRP, Ins_ALIGNPTS): Use
+ NEG_LONG.
+
+2017-08-17 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [sfnt] Avoid synthetic unicode for symbol fonts with PUA.
+
+ Reported as
+
+ https://bugs.chromium.org/p/chromium/issues/detail?id=754574
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Check for FT_ENCODING_MS_SYMBOL.
+
+2017-08-16 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/pngshim.c (premultiply_data): Fix compiler warnings.
+
+2017-08-15 Behdad Esfahbod <behdad@behdad.org>
+
+ [sfnt] Speed up PNG image loading.
+
+ This reduces the overhead of `premultiply_data' by 60%.
+
+ * src/sfnt/pngshim.c (premultiply_data): Provide code which uses
+ gcc's (and clang's) `vector_byte' attribute to process 4 pixels at a
+ time.
+
+2017-08-11 Werner Lemberg <wl@gnu.org>
+
+ [sfnt, truetype] Improve handling of missing sbits.
+
+ Requested by Behdad.
+
+ Modern bitmap-only SFNTs like `NotoColorEmoji.ttf' don't contain
+ entries in the bitmap strike(s) for empty glyphs. Instead, they
+ rely that a space glyph gets created from the font's metrics data.
+ This commit makes FreeType behave accordingly.
+
+ * include/freetype/fterrdef.h (FT_Err_Missing_Bitmap): New error
+ code.
+
+ * src/sfnt/ttsbit.c (tt_sbit_decoder_load_image): Change error codes
+ to make a distinction between a missing bitmap in a composite and a
+ simple missing bitmap.
+
+ * src/truetype/ttgload.c (TT_Load_Glyph): For a missing bitmap (in a
+ bitmap-only font), synthesize an empty bitmap glyph if metrics are
+ available.
+
+2017-08-10 Werner Lemberg <wl@gnu.org>
+
+ [base] Minor API improvement for default variation axis setting.
+
+ * src/base/ftmm.c (FT_Set_MM_Design_Coordinates,
+ FT_Set_Var_Design_Coordinates, FT_Set_MM_Blend_Coordinates,
+ FT_Set_Var_Blend_Coordinates): Allow coords==NULL if num_coords==0.
+
+ * docs/CHANGES: Updated.
+
+2017-08-08 Werner Lemberg <wl@gnu.org>
+
+ [psnames] Really fix issue #49949.
+
+ We now use a separate preprocessor macro to handle both definition
+ and declaration of the glyph name arrays.
+
+ * src/psnames/psmodule.c (DEFINE_PS_TABLE_DATA): New macro.
+
+ * src/tools/glnames.py (StringTable::dump,
+ StringTable::dump_sublist): Use `DEFINE_PS_TABLE_DATA'.
+ (dump_encoding): Ditto.
+ (main): Use `wb' mode for writing the output file, which works on
+ Windows also.
+
+ * src/psnames/pstables.h: Regenerated.
+
+2017-08-08 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Harmony LCD rendering.
+
+ This is a new technology for LCD-optimized rendering. It capitalizes
+ on the fact that each color channel grid is shifted by a third of a
+ pixel. Therefore it is logical to render 3 separate monochrome
+ bitmaps shifting the outline by 1/3 pixel, and then combine them.
+ Importantly, the resulting output does not require additional LCD
+ filtering.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic)
+ [!FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Implement new LCD-optimized
+ rendering.
+
+ * include/freetype/ftlcdfil.h, include/freetype/freetype.h,
+ include/freetype/config/ftoption.h, devel/ftoption.h: Updated
+ documentation.
+
+2017-08-08 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Clean up.
+
+2017-08-08 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/sfnt/ttpost.c (format): Use otspec-compliant versions.
+
+2017-08-05 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2868
+
+ * src/truetype/ttinterp.c (Ins_ALIGNRP): Use NEG_LONG.
+
+2017-08-05 Werner Lemberg <wl@gnu.org>
+
+ [base, truetype] New function `FT_Get_Var_Axis_Flags'.
+
+ The reserved `flags' field got a value in OpenType version 1.8.2;
+ unfortunately, the public `FT_Var_Axis' structure misses the
+ corresponding element. Since we can't add a new field, we add an
+ access function.
+
+ * src/base/ftmm.c (FT_Get_Var_Axis_Flags): New function.
+
+ * include/freetype/ftmm.h (FT_VAR_AXIS_FLAG_HIDDEN): New macro.
+ Updated.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Increase allocated memory
+ of `mmvar' to hold axis flags.
+ Fill the axis flags array.
+
+ * docs/CHANGES: Updated.
+
+2017-08-03 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [truetype] Fix metrics of B/W hinting in v40 mode.
+
+ Phantom points are now saved outside v40 backwards compatibility
+ mode. This fixes the jumping glyphs when switching between v35 and
+ v40 monochrome mode.
+
+ * src/truetype/ttgload.c (TT_Hint_Glyph): Fix inversed bool logic.
+
+2017-08-03 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [truetype] Do not set any ClearType flags in v40 monochrome mode.
+
+ This fixes weird behavior of instructions that resulted in rendering
+ differences between v35 and v40 in monochrome mode, e.g., in
+ `timesbi.ttf'.
+
+ * src/truetype/ttinterp.c (Ins_GETINFO)
+ [TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL]: Check
+ `subpixel_hinting_lean'.
+
+2017-08-01 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Fix thinko.
+
+2017-08-01 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] Fix loading of named instances.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Preserve file position
+ while loading the `avar' table.
+
+2017-08-01 Werner Lemberg <wl@gnu.org>
+
+ [sfnt, truetype] Minor adjustments for OpenType 1.8.2.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): The units per EM value has now
+ (tighter) limits.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): The new OpenType
+ version explicitly allows all negative values for the number of
+ contours if we have a composite glyph (this is for better backwards
+ compatibility I guess), but it still recommends value -1.
+
+2017-07-26 Werner Lemberg <wl@gnu.org>
+
+ [cff] Integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2738
+
+ * src/cff/cf2hints.c (cf2_glyphpath_computeOffset,
+ cf2_glyphpath_curveTo): Use ADD_INT32.
+
+2017-07-13 Werner Lemberg <wl@gnu.org>
+
+ [base] Fix memory leak.
+
+ Reported as
+
+ https://bugs.chromium.org/p/chromium/issues/detail?id=738362
+
+ * src/base/ftglyph.c (FT_Get_Glyph): Do proper deallocation in case
+ of error.
+
+2017-07-12 Werner Lemberg <wl@gnu.org>
+
+ [base] Integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2573
+
+ * src/base/ftobjs.c (ft_glyphslot_grid_fit_metrics): Use
+ FT_PIX_CEIL_LONG and FT_PIX_ROUND_LONG.
+
+2017-07-12 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttpload.c (tt_face_get_location): Off-by-one typo.
+
+ Also improve tracing message.
+
+ Problem reported as
+
+ https://bugs.chromium.org/p/chromium/issues/detail?id=738919
+
+2017-07-07 Werner Lemberg <wl@gnu.org>
+
+ [cff] Integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2517
+
+ * src/cff/cf2blues.c (cf2_blues_capture): Use SUB_INT32.
+
+2017-07-05 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttcmap.c (tt_cmap_unicode_class_rec): Fix warning.
+
+2017-07-05 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (FT_Stream_SeekSet): Fix warning (#51395).
+
+2017-07-04 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Prevent address overflow (#51365).
+
+ * src/truetype/ttgxvar.c (FT_Stream_SeekSet): Add guard.
+
+2017-07-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftlcdfil.c (ft_lcd_filter_fir): Improve code.
+
+2017-07-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2455
+
+ * src/truetype/ttinterp.c (Ins_SCFS): Use SUB_LONG.
+
+2017-07-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Ignore No_Unicode_Glyph_Name.
+
+2017-06-28 Ben Wagner <bungeman@google.com>
+
+ Avoid Microsoft compiler warnings (#51331).
+
+ While clang's sanitizer recommends a cast to unsigned for safe
+ negation (to handle -INT_MIN), both MSVC and Visualc emit warning
+ C4146 if an unsigned value gets negated.
+
+ * include/freetype/internal/ftcalc.h (NEG_LONG, NEG_INT32),
+ src/base/ftcalc.c (FT_MOVE_SIGN): Replace negation with a
+ subtraction.
+
+2017-06-27 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffparse.c (do_fixed): Fix typo.
+
+ Spotted by chris <chris@gcjd.org>.
+
+2017-06-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2384
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2391
+
+ * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round, FT_DivFix): Use
+ NEG_LONG.
+
+ * src/truetype/ttinterp.c (Ins_SxVTL): Use NEG_LONG.
+
+2017-06-24 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2364
+
+ * src/truetype/ttinterp.c (Ins_ISECT): Use NEG_LONG.
+
+2017-06-22 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2323
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2328
+
+ * src/cff/cf2blues.c (cf2_blues_capture): Use ADD_INT32 and
+ SUB_INT32.
+
+ * src/truetype/ttinterp.c (Ins_SDPVTL): Use SUB_LONG and NEG_LONG.
+
+2017-06-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [sfnt] Synthesize a Unicode charmap if one is missing.
+
+ * src/sfnt/ttcmap.h (tt_cmap_unicode_class_rec): Declare it.
+ * src/sfnt/ttcmap.c (tt_get_glyph_name, tt_cmap_unicode_init,
+ tt_cmap_unicode_done, tt_cmap_unicode_char_index,
+ tt_cmap_unicode_char_next, tt_cmap_unicode_class_rec): Implement
+ synthetic Unicode charmap class.
+ (tt_get_cmap_info): Make sure the callback is available.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face)
+ [FT_CONFIG_OPTION_POSTSCRIPT_NAMES]: If Unicode charmap is missing,
+ synthesize one.
+
+ * include/freetype/config/ftoption.h: Document it.
+ * devel/ftoption.h: Ditto.
+
+2017-06-20 Tony Theodore <tonyt@logyst.com>
+
+ Fix pkg-config in freetype-config for cross-compiling (#51274).
+
+ * builds/unix/unix-def.in (PKG_CONFIG): New variable.
+ (freetype-config): Use it in sed expression.
+
+ * builds/unix/freetype-config.in: s/pkg-config/%PKG_CONFIG%/.
+
+2017-06-20 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2300
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2313
+
+ * src/cff/cf2hints.c (cf2_hintmap_adjustHints): Use ADD_INT32.
+
+ * src/truetype/ttinterp.c (Ins_ABS): Avoid FT_ABS.
+
+2017-06-17 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base, smooth] LCD filtering cleanups.
+
+ * src/base/ftlcdfil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy):
+ Clean up, start filtering from the bottom-left origin.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Updated.
+
+2017-06-16 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2270
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2276
+
+ * src/truetype/ttinterp.c (Ins_MDRP, _iup_worker_interpolate): Use
+ ADD_LONG and SUB_LONG.
+
+2017-06-15 Werner Lemberg <wl@gnu.org>
+
+ [bdf, cff] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2244
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2261
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Replace calls to FT_ABS with
+ direct code to avoid value negation.
+
+ * src/cff/cf2blues.c (cf2_blues_capture): Use SUB_INT32 and
+ ADD_INT32.
+
+2017-06-13 Werner Lemberg <wl@gnu.org>
+
+ * src/winfonts/winfnt.c (FNT_Face_Init): Don't set active encoding.
+
+ FreeType only sets a default active encoding for Unicode.
+
+2017-06-13 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2216
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2218
+
+ * src/cff/cf2fixed.h (cf2_fixedAbs): Use NEG_INT32.
+
+ * src/truetype/ttinterp.c (Ins_IP): Use SUB_LONG.
+
+2017-06-11 Werner Lemberg <wl@gnu.org>
+
+ [cff] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2200
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2210
+
+ * src/cff/cf2hints.c (cf2_hintmap_insertHint): Use SUB_INT32 and
+ ADD_INT32.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdVMOVETO>: Use
+ ADD_INT32.
+
+2017-06-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix TT_Set_Var_Design.
+
+ Reported by Nikolaus Waxweiler <madigens@gmail.com>.
+
+ * src/truetype/ttgxvar.c (TT_Set_Var_Design): Correctly handle the
+ case where we have less input coordinates than axes.
+
+2017-06-10 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftcalc.c (FT_DivFix): Fix embarrassing typo.
+
+ Bug introduced 2017-05-28.
+
+2017-06-09 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2144
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2151
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2153
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2173
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2186
+
+ * src/cff/cf2blues.c (cf2_blues_init): Use SUB_INT32.
+
+ * src/truetype/ttinterp.c (Round_None, Round_To_Grid,
+ Round_To_Half_Grid, Round_Down_To_Grid, Round_Up_To_Grid,
+ Round_To_Double_Grid, Round_Super, Round_Super_45): Use ADD_LONG,
+ SUB_LONG, NEG_LONG, FT_PIX_ROUND_LONG, FT_PIX_CEIL_LONG,
+ FT_PAD_ROUND_LONG
+ (Ins_SxVTL, Ins_MIRP): Use SUB_LONG.
+ (_iup_worker_shift): Use SUB_LONG and ADD_LONG.
+
+2017-06-09 Werner Lemberg <wl@gnu.org>
+
+ Provide more macros for flooring, ceiling, and rounding.
+
+ These versions don't produce run-time errors due to integer
+ overflow.
+
+ * include/freetype/internal/ftobjs.h: Include FT_INTERNAL_CALC_H.
+ (FT_PAD_ROUND_LONG, FT_PAD_CEIL_LONG, FT_PIX_ROUND_LONG,
+ FT_PIX_CEIL_LONG): New macros.
+ (FT_PAD_ROUND_INT32, FT_PAD_CEIL_INT32, FT_PIX_ROUND_INT32,
+ FT_PIX_CEIL_INT32): New macros.
+
+2017-06-09 Werner Lemberg <wl@gnu.org>
+
+ Remove unused macros.
+
+ * include/freetype/internal/ftcalc.h (ADD_INT, SUB_INT, MUL_INT,
+ NEG_INT): Deleted.
+
+2017-06-09 Werner Lemberg <wl@gnu.org>
+
+ */*: Remove `OVERFLOW_' prefix.
+
+ This increases readability.
+
+2017-06-07 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2133
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2137
+
+ * src/cff/cf2hints.c (cf2_hint_init): Use OVERFLOW_SUB_INT32.
+
+ * src/truetype/ttinterp.c (PROJECT, DUALPROJ): Use
+ OVERFLOW_SUB_LONG.
+
+2017-06-06 Werner Lemberg <wl@gnu.org>
+
+ [cff] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2109
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2110
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2122
+
+ * src/cff/cf2blues.c (cf2_blues_init): Use OVERFLOW_SUB_INT32.
+
+ * src/cff/cf2hints.c (cf2_hintmap_map): Synchronize if-else
+ branches.
+
+2017-06-05 Werner Lemberg <wl@gnu.org>
+
+ [cff] Integer overflow.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2089
+
+ * src/cff/cffload.c (cff_blend_doBlend): User OVERFLOW_ADD_INT32.
+
+2017-06-04 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2075
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2088
+
+ * src/cff/cf2font.c (cf2_font_setup): Use OVERFLOW_MUL_INT32.
+
+ * src/truetype/ttinterp.c (Ins_ISECT): Use OVERFLOW_MUL_LONG,
+ OVERFLOW_ADD_LONG, and OVERFLOW_SUB_LONG.
+
+2017-06-03 Werner Lemberg <wl@gnu.org>
+
+ [base, cff, truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2060
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2062
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2063
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2068
+
+ * src/base/ftobjs.c (ft_glyphslot_grid_fit_metrics): Use
+ OVERFLOW_ADD_LONG and OVERFLOW_SUB_LONG.
+
+ * src/cff/cf2blues.c (cf2_blues_capture), src/cff/cf2hints.c
+ (cf2_hintmap_adjustHints): Use OVERFLOW_SUB_INT32.
+
+ * src/truetype/ttgload.c (compute_glyph_metrics): User
+ OVERFLOW_SUB_LONG.
+
+ * src/truetype/ttinterp.c (Direct_Move, Direct_Move_Orig,
+ Direct_Move_X, Direct_Move_Y, Direct_Move_Orig_X,
+ Direct_Move_Orig_Y, Move_Zp2_Point, Ins_MSIRP): Use
+ OVERFLOW_ADD_LONG and OVERFLOW_SUB_LONG.
+
+2017-06-03 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/freetype-config.in: Fix pkg-config test (#51162).
+
+ Patch directly taken from bug report.
+
+2017-06-03 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Synchronize sanity checks with pcf driver.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2054
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2058
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Check font ascent and descent.
+ Check AVERAGE_WIDTH, POINT_SIZE, PIXEL_SIZE, RESOLUTION_X, and
+ RESOLUTION_Y properties.
+
+2017-06-03 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2047
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2057
+
+ * src/cff/cf2hints.c (cf2_hintmap_map): Use OVERFLOW_SUB_INT32.
+
+ * src/truetype/ttinterp.c (Ins_ADD): Use OVERFLOW_ADD_LONG.
+ (Ins_SUB): Use OVERFLOW_SUB_LONG.
+ (Ins_NEG): Use NEG_LONG.
+
+2017-06-03 Werner Lemberg <wl@gnu.org>
+
+ ftcalc.h: Avoid left-shift of negative numbers.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2055
+
+ * include/freetype/internal/ftcalc.h (INT_TO_F26DOT6,
+ INT_TO_F2DOT14, INT_TO_FIXED, F2DOT14_TO_FIXED): Use multiplication.
+
+2017-06-02 Werner Lemberg <wl@gnu.org>
+
+ [cff] Even more integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2046
+
+ * src/cff/cf2intrp.c (cf2_doStems, cf2_interpT2CharString): Use
+ OVERFLOW_ADD_INT32.
+
+2017-06-02 Werner Lemberg <wl@gnu.org>
+
+ [cff] More integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2032
+
+ * src/cff/cf2blues.c (cf2_blues_init): Use OVERFLOW_SUB_INT32.
+
+2017-06-02 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Don't left-shift negative numbers.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2031
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init): Use multiplication.
+
+2017-06-02 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Fix integer scanning routines.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2029
+
+ * src/bdf/bdflib.c (_bdf_atoul, _bdf_atol, _bdf_atous, _bdf_atos):
+ Stop scanning if result would overflow.
+
+2017-06-02 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix integer overflows.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2027
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2028
+
+ * src/cff/cf2hints.c (cf2_hintmap_insertHint), src/cff/cf2intrp.c
+ (cf2_doFlex): Use OVERFLOW_ADD_INT32 and OVERFLOW_SUB_INT32.
+
+2017-06-01 Werner Lemberg <wl@gnu.org>
+
+ [smooth] Some 32bit integer overflow run-time errors.
+
+ * src/smooth/ftgrays.c [STANDALONE] (OVERFLOW_ADD_LONG,
+ OVERFLOW_SUB_LONG, OVERFLOW_MUL_LONG, NEG_LONG): New macros.
+ [!STANDALONE]: Include FT_INTERNAL_CALC_H.
+ (gray_render_cubic): Use those macros where appropriate.
+
+2017-06-01 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftglyph.c (FT_Get_Glyph): Check `slot->advance'.
+
+2017-06-01 Werner Lemberg <wl@gnu.org>
+
+ [psaux] 32bit integer overflow tun-time errors (#46149).
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings): Use
+ OVERFLOW_ADD_LONG and OVERFLOW_SUB_LONG where appropriate.
+
+2017-06-01 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (TT_RunIns): Adjust loop counter again.
+
+ Problem reported by Marek Kašík <mkasik@redhat.com>.
+
+ The problematic font that exceeds the old limit is Padauk-Bold,
+ version 3.002, containing bytecode generated by a buggy version of
+ ttfautohint.
+
+2017-05-31 Werner Lemberg <wl@gnu.org>
+
+ [cff] 32bit integer overflow run-time errors 2/2 (#46149).
+
+ This commit handles the new engine.
+
+ * include/freetype/internal/ftcalc.h (OVERFLOW_ADD_INT32,
+ OVERFLOW_SUB_INT32, OVERFLOW_MUL_INT32, NEG_INT, NEG_LONG,
+ NEG_INT32): New macros.
+
+ * src/cff/cf2ft.c (cf2_getScaleAndHintFlag): Use OVERFLOW_ADD_INT32.
+
+ * src/cff/cf2hints.c (cf2_getWindingMomentum, cf2_hint_init,
+ cf2_hintmap_map, cf2_glyphpath_hintPoint,
+ cf2_glyphpath_computeIntersection, cf2_glyphpath_computeOffset,
+ cf2_glyphpath_lineTo, cf2_glyphpath_curveTo): Use
+ OVERFLOW_ADD_INT32, OVERFLOW_SUB_INT32, OVERFLOW_MUL_INT32, and
+ NEG_INT32 where appropriate.
+
+ * src/cff/cf2intrp.c (cf2_doFlex, cf2_doBlend,
+ cf2_interpT2CharString): Ditto.
+ Also add some other code where needed to avoid overflow.
+
+2017-05-30 Werner Lemberg <wl@gnu.org>
+
+ [cff] 32bit integer overflow run-time errors 1/2 (#46149).
+
+ This commit handles the old engine.
+
+ * src/cff/cffgload.c: Include FT_INTERNAL_CALC_H.
+ (cff_decoder_parse_charstrings): Use OVERFLOW_ADD_LONG and
+ OVERFLOW_SUB_LONG where needed.
+
+ * src/cff/cffparse.c: Include FT_INTERNAL_CALC_H.
+ (power_ten_limits): New static array.
+ (do_fixed): Use it to prevent multiplication overflow.
+ (cff_parser_run): Use OVERFLOW_ADD_LONG.
+
+2017-05-30 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Correctly handle sequences of multiple number signs.
+
+ * src/psaux/psconv.c (PS_Conv_Strtol, PS_Conv_ToFixed): Return zero
+ if we encounter more than a single sign.
+
+2017-05-29 Werner Lemberg <wl@gnu.org>
+
+ [pcf] 32bit integer overflow run-time errors (#46149).
+
+ * src/pcf/pcfread.c (pcf_get_accel): Add sanity checks for
+ `fontAscent' and `fontDescent'.
+ (pcf_load_font): Add sanity checks for global height.
+ Add sanity checks for AVERAGE_WIDTH, POINT_SIZE, PIXEL_SIZE,
+ RESOLUTION_X, and RESOLUTION_Y properties.
+
+2017-05-29 Werner Lemberg <wl@gnu.org>
+
+ Handle some integer overflow run-time errors (#46149, #48979).
+
+ This commit (mainly for 32bit CPUs) is the first of a series of
+ similar commits to handle known integer overflows. Basically, all
+ of them are harmless, since they affect rendering of glyphs only,
+ not posing security threats. It is expected that fuzzying will show
+ up more overflows, to be fixed in due course.
+
+ The idea is to mark places where overflows can occur, using macros
+ that simply cast to unsigned integers, because overflow arithmetic
+ is well defined in this case. Doing so suppresses run-time errors
+ of sanitizers without adding computational overhead.
+
+ * include/freetype/internal/ftcalc.h (OVERFLOW_ADD_INT,
+ OVERFLOW_SUB_INT, OVERFLOW_MUL_INT, OVERFLOW_ADD_LONG,
+ OVERFLOW_SUB_LONG, OVERFLOW_MUL_LONG): New macros.
+
+ * src/base/ftcalc.c (FT_RoundFix, FT_CeilFix, FT_Matrix_Multiply,
+ FT_Matrix_Multiply_Scaled, FT_Vector_Transform_Scaled,
+ ft_corner_orientation): Use new macros.
+
+ * src/base/ftoutln.c (FT_Outline_Get_Orientation): Use new macros.
+
+2017-05-28 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/ftcalc.h (FLOAT_TO_FIXED): Remove.
+
+ This macro is not used.
+
+2017-05-28 Werner Lemberg <wl@gnu.org>
+
+ [cff] s/cf2_floatToFixed/cf2_doubleToFixed/.
+
+ The new name better describes what the macro actually does;
+ additionally, we don't need a trailing `f' for literals (there was
+ only a single such instance in the code, but this caused a clang
+ warning because the macro itself uses `double' literals).
+
+ * src/cff/cf2blues.c, src/cff/cf2blues.h, src/cff/cf2fixed.h,
+ src/cff/cf2font.c, src/cff/cf2hints.c: Updated.
+
+2017-05-28 Werner Lemberg <wl@gnu.org>
+
+ Fix negation of INT_MIN and LONG_MIN (#46149).
+
+ * src/base/ftcalc.c (FT_MOVE_SIGN): Add argument to pass unsigned
+ value, to be used as the result.
+ (FT_MulDiv, FT_MulDiv_No_Round, FT_DivFix, FT_MulFix,
+ FT_Vector_NormLen): Updated.
+
+2017-05-27 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix handling of design coordinates (#51127).
+
+ * src/truetype/ttgxvar.c (tt_set_mm_blend): Compute all design
+ coordinates if we have to create the `blends->coord' array.
+ (TT_Get_MM_Blend, TT_Get_Var_Design): Select default instance
+ coordinates if no instance is selected yet.
+
+2017-05-24 Werner Lemberg <wl@gnu.org>
+
+ [bdf, pcf] Support ISO646.1991-IRV character encoding (aka ASCII).
+
+ Problem reported by Marek Kašík <mkasik@redhat.com>, cf.
+
+ https://bugzilla.redhat.com/show_bug.cgi?id=1451795
+
+ * src/bdf/bdfdrivr.c (BDF_Face_Init), src/pcf/pcfdrivr.c
+ (PCF_Face_Init): Implement it.
+
+2017-05-20 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [truetype] Always use interpreter v35 for B/W rendering (#51051).
+
+ * src/truetype/ttgload.c (tt_loader_init)
+ [TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL]: Adjust
+ `subpixel_hinting_lean', `grayscale_cleartype', and
+ `vertical_lcd_lean' accordingly.
+
+ * src/truetype/ttinterp.c (Ins_GETINFO): Updated.
+ (TT_RunIns): Update `backward_compatibility' flag.
+
+2017-05-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [smooth] Implement minimal dynamic padding for LCD filtering.
+
+ Extra bitmap padding for LCD filtering depends on the filter. The
+ default 5-tap filter needs 2 extra subpixels. The light 3-tap filter
+ needs only 1 extra subpixel. This space could be already available
+ due to rounding. In order to optimize the padding, we now expand
+ CBox for the given filter weights before rounding.
+
+ This change breaks current Skia (and Firefox).
+
+ * include/freetype/internal/ftobjs.h (FT_LibraryRec)
+ [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Remove `lcd_extra' field.
+
+ * src/base/ftlcdfil.c (FT_Library_SetLcdFilterWeights,
+ FT_Library_SetLcdFilter): Remove `lcd_extra' initializations.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic): Implement dymanic
+ LCD padding.
+
+2017-05-15 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Return proper scaling values for SBIX bitmaps.
+
+ Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
+
+ * src/sfnt/ttsbit.c (tt_face_load_strike_metrics): Implement it.
+
+2017-05-15 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix error handling for embedded bitmaps.
+
+ Problem reported by Hin-Tak Leung <htl10@users.sourceforge.net>.
+
+ * src/truetype/ttgload.c (TT_Load_Glyph)
+ [TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: Handle error if font is not
+ scalable.
+
+2017-05-15 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [autofit] Make autohint warping NORMAL option.
+
+ This moves warping option from LIGHT to NORMAL mode. This makes LIGHT
+ truly void of hinting in x-direction, with left side bearing never
+ changed and right side bearing only altered by advance rounding.
+ Therefore, LIGHT is now ready to return fractional advance. As a
+ NORMAL option, warping substitutes normal hinting.
+
+ * src/autofit/afcjk.c (af_cjk_hints_apply): Updated.
+ * src/autofit/aflatin.c (af_latin_hints_apply): Updated.
+ * src/autofit/aflatin2.c (af_latin2_hints_apply): Updated.
+
+ * src/autofit/afloader.c (af_loader_load_glyph): Handle warping
+ phantom points as normal.
+
+2017-05-14 Werner Lemberg <wl@gnu.org>
+
+ Remove remnants of raster pool.
+
+ * include/freetype/internal/ftobjs.h (FT_LibraryRec): Remove
+ `raster_pool' and `raster_pool_size' fields.
+
+ * src/base/ftobjs.c (FT_New_Library), src/raster/ftrend1.c
+ (ft_raster1_init), src/smooth/ftsmooth.c (ft_smooth_init): Updated.
+
+2017-05-13 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.8 released.
+ =======================
+
+
+ Tag sources with `VER-2-8'.
+
+ * docs/VERSION.TXT: Add entry for version 2.8.
+ * docs/CHANGES: Updated.
+
+ * 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.7.1/2.8/, s/271/28/.
+
+ * include/freetype/freetype.h (FREETYPE_MINOR): Set to 8.
+ (FREETYPE_PATCH): Set to 0.
+
+ * builds/unix/configure.raw (version_info): Set to 20:0:14.
+ * CMakeLists.txt (VERSION_MINOR): Set to 8.
+ (VERSION_PATCH): Set to 0.
+
+2017-05-12 Hin-Tak Leung <htl10@users.sourceforge.net>
+
+ Fix `FT_UINT_TO_POINTER' macro for Windows.
+
+ * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
+ include/freetype/config/ftconfig.h (FT_UINT_TO_POINTER) [_WIN64]:
+ Fix definition.
+
+2017-05-11 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Chakma script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Chakma.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Chakma standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Chakma data.
+
+2017-05-10 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Kayah Li script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Kayah Li.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Kayah Li standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Kayah Li data.
+
+2017-05-10 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Bamum script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Bamum.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Bamum standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Bamum data.
+
+2017-05-10 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Saurashtra script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Saurashtra.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Saurashtra standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Saurashtra
+ data.
+
+2017-05-10 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Buhid script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Buhid.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Buhid standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Buhid data.
+
+2017-05-08 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Shavian script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Shavian.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Shavian standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Shavian data.
+
+2017-05-08 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Vai script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Vai.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Vai standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Vai data.
+
+2017-05-08 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Osmanya script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Osmanya.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Osmanya standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Osmanya data.
+
+2017-05-08 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Coptic script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Coptic.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Coptic standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Coptic data.
+
+2017-05-08 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Carian script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Carian.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Carian standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Carian data.
+
+2017-05-07 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add tricky font `DFGirl-W6-WIN-BF' (from Dynalab).
+
+ Reported by Roy Tam <roytam@gmail.com>.
+
+ * src/truetype/ttobjs.c (tt_check_trickyness_family): Implement it.
+
+2017-05-07 Roy Tam <roytam@gmail.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [truetype] More tricky fonts (mainly from Dynalab).
+
+ * src/truetype/ttobjs.c (tt_check_trickyness_family,
+ tt_check_trickyness_sfnt_ids): Add them.
+
+2017-05-07 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add tricky font `DLCHayMedium' (from Dynalab).
+
+ Reported by Roy Tam <roytam@gmail.com>.
+
+ * src/truetype/ttobjs.c (tt_check_trickyness_family): Implement it.
+
+2017-05-03 Werner Lemberg <wl@gnu.org>
+
+ */*: s/backwards compatibility/backward compatibility/.
+
+2017-05-03 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Unified Canadian Syllabics script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Unified Canadian
+ Syllabics.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Unified Canadian Syllabics standard
+ character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Unified
+ Canadian Syllabics data.
+
+2017-05-03 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add blue-zone support for Sundanese script.
+
+ This essentially moves the Sundanese script from the `Indic' hinter
+ to the `Latin' hinter.
+
+ * src/autofit/afblue.dat: Add blue zone data for Sundanese.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Sundanese standard character and move
+ data out of AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afranges.c: Move Sundanese data out of
+ AF_CONFIG_OPTION_INDIC block.
+
+ * src/autofit/afstyles.h: Update Sundanese data; in particular, use
+ AF_WRITING_SYSTEM_LATIN.
+
+2017-05-03 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Avestan script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Avestan.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Avestan standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Avestan data.
+
+2017-05-02 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] Make `IUP' gvar deltas do the same as Apple (#50832).
+
+ When points are not touched by gvar interpolation deltas, FreeType
+ gave a slightly different result than Apple's CoreText.
+
+ The OpenType working group will update the specification to document
+ the following behaviour: If the two points with deltas to the `left'
+ and `right' of the untouched point have the same coordinate, then
+ the inferred delta for the untouched point should be zero.
+
+ * src/truetype/ttgxvar.c (tt_delta_interpolate): Implement new
+ behaviour.
+
+2017-05-02 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Remove `slight' auto-hint mode again.
+
+ A poll on freetype-devel favoured changes directly applied to
+ `light'.
+
+ * include/freetype/freetype.h (FT_LOAD_TARGET_SLIGHT,
+ FT_RENDER_MODE_SLIGHT): Removed.
+
+ * src/autofit/afcjk.c (af_cjk_hints_init), src/autofit/aflatin.c
+ (af_latin_hints_init), src/autofit/aflatin2.c
+ (af_latin2_hints_init): Revert change from 2017-04-22.
+
+ * src/autofit/afloader.c (af_loader_load_glyph) Remove references to
+ FT_RENDER_MODE_SLIGHT.
+ [AF_CONFIG_OPTION_TT_SIZE_METRICS]: Enable TrueType-like metrics
+ unconditionally.
+
+ * src/base/ftadvanc.c (LOAD_ADVANCE_FAST_CHECK): Revert change from
+ 2017-04-22.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Revert change from 2017-04-22.
+
+ * src/pshinter/pshalgo.c (ps_hints_apply): Revert change from
+ 2017-04-22.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render): Revert change from
+ 2017-04-22.
+
+ * docs/CHANGES: Updated.
+
+2017-04-30 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix metrics computation.
+
+ Problem reported by Markus Trippelsdorf <markus@trippelsdorf.de> and
+ Nikolaus Waxweiler <madigens@gmail.com>.
+
+ * src/base/ftobjs.c (FT_Request_Size): Trigger recomputation of
+ auto-hinter metrics. Without this change, multiple size changing
+ calls for a single face fail.
+
+2017-04-29 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttdriver.c (tt_size_request): Properly check `error'.
+
+ Reported by Earnestly <zibeon@googlemail.com> in
+
+ https://lists.nongnu.org/archive/html/freetype/2017-04/msg00031.html
+
+2017-04-27 Werner Lemberg <wl@gnu.org>
+
+ Introduce AF_CONFIG_OPTION_TT_SIZE_METRICS configuration option.
+
+ * include/freetype/config/ftoption.h
+ (AF_CONFIG_OPTION_TT_SIZE_METRICS): New option, commented out by
+ default.
+
+ * src/autofit/afloader.c (af_loader_load_glyph): Use
+ AF_CONFIG_OPTION_TT_SIZE_METRICS to guard the corresponding code.
+
+2017-04-26 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/freetype.h (FT_Render_Mode): Fix order.
+
+ This retains backward compatibility.
+
+ Noted by Alexei.
+
+2017-04-22 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Do linear scaling for FT_LOAD_NO_HINTING (#50470).
+
+ * src/truetype/ttobjs.h (TT_SizeRec): Add field `hinted_metrics' to
+ hold hinted metrics.
+ Make `metrics' a pointer so that `tt_glyph_load' can easily switch
+ between metrics.
+
+ * src/truetype/ttdriver.c (tt_size_request): Updated.
+ (tt_glyph_load): Use top-level metrics if FT_LOAD_NO_HINTING is
+ used.
+
+ * src/truetype/ttgload.c (TT_Hint_Glyph, TT_Process_Simple_Glyph,
+ TT_Process_Composite_Component, load_truetype_glyph,
+ compute_glyph_metrics, TT_Load_Glyph): Updated.
+
+ * src/truetype/ttinterp.c (TT_Load_Context): Updated.
+
+ * src/truetype/ttobjs.c (tt_size_reset): Updated.
+
+ * src/truetype/ttsubpix.c (sph_set_tweaks): Updated.
+
+2017-04-22 Werner Lemberg <wl@gnu.org>
+
+ Add new `slight' auto-hinting mode.
+
+ This mode uses fractional advance widths and doesn't scale glyphs
+ horizontally, only applying vertical scaling and hinting.
+
+ At the same time, the behaviour of the `light' auto-hinter gets
+ restored for backward compatibility: Both vertical and horizontal
+ scaling is again based on rounded metrics values (this was changed
+ in a commit from 2017-03-30 as a side effect). To be more precise,
+ the behaviour is restored for TrueType fonts only; for other font
+ formats like Type 1, this is a new feature of the `light' hinting
+ mode.
+
+ * include/freetype/freetype.h (FT_LOAD_TARGET_SLIGHT): New macro.
+ (FT_RENDER_MODE_SLIGHT): New render mode.
+
+ * include/freetype/internal/ftobjs.h (FT_Size_InternalRec): Add
+ `autohint_mode' and `autohint_metrics' fields.
+
+ * src/autofit/afcjk.c (af_cjk_hints_init), src/autofit/aflatin.c
+ (af_latin_hints_init), src/autofit/aflatin2 (af_latin2_hints_init):
+ Updated.
+
+ * src/autofit/afloader.c (af_loader_embolden_glyph_in_slot): Use
+ `autohint_metrics'.
+ (af_loader_load_glyph): s/internal/slot_internal/.
+ Initialize `autohint_metrics' and `autohint_mode' depending on
+ current auto-hint mode.
+ Use `autohint_metrics'.
+ Updated.
+
+ * src/base/ftadvanc.c (LOAD_ADVANCE_FAST_CHECK): Updated.
+
+ * src/base/ftobjs.c (FT_Load_Glyph): Updated.
+ (FT_New_Size): Allocate `internal' object.
+
+ * src/pshinter/pshalgo.c (ps_hints_apply): Updated.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render): Updated.
+
+2017-04-22 Werner Lemberg <wl@gnu.org>
+
+ Introduce `FT_Size_InternalRec' structure.
+
+ We are going to extend this later on.
+
+ * include/freetype/internal/ftobjs.h (FT_Size_InternalRec): New
+ structure with a single field `module_data'.
+
+ * src/base/ftobjs.c (FT_New_Size): Allocate `internal' field of
+ `FT_Size' structure.
+
+ * src/cff/cffgload.c (cff_builder_init, cff_decoder_prepare): Use
+ `size->internal->module_data' instead of `size->internal'.
+
+ * src/cff/cffobjs.c (cff_size_done): Deallocate `module_data'.
+ (cff_size_init, cff_size_select, cff_size_request): Use
+ `size->internal->module_data' instead of `size->internal'.
+
+ * src/cif/cidobjs.c (cid_size_done, cid_size_init,
+ cid_size_request): Use `size->internal->module_data' instead of
+ `size->internal'.
+
+ * src/psaux/psobjs.c (t1_builder_ini): Use
+ `size->internal->module_data' instead of `size->internal'.
+
+ * src/type1/t1objs.c (T1_Size_Done, T1_Size_Init, T1_Size_Request):
+ Use `size->internal->module_data' instead of `size->internal'.
+
+2017-04-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftsmooth.h: Remove unused guards and declaration.
+
+2017-04-16 Hin-Tak Leung <htl10@users.sourceforge.net>
+
+ Fix tracing messages.
+
+ * src/base/ftobjs.c (FT_Face_GetCharVariantIndex,
+ FT_Face_GetCharVariantIsDefault, FT_Face_GetVariantsOfChar): Print
+ correct function name.
+
+2017-04-08 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Old Turkic script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Old Turkic.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Old Turkic standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Old Turkic data.
+
+2017-04-08 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Gothic script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Gothic.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Gothic standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Gothic data.
+
+2017-04-08 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Cypriot script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Cypriot.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Cypriot standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Cypriot data.
+
+2017-04-08 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Deseret script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Deseret.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Deseret standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Deseret data.
+
+2017-04-07 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix invalid character range description (#50745).
+
+ Also reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=1034
+
+ * src/autofit/afranges.c (af_glag_nonbase_uniranges): Fix typo in
+ recent commit.
+
+2017-04-07 Werner Lemberg <wl@gnu.org>
+
+ [ftfuzzer] Fix clang warnings.
+
+ * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Add
+ casts.
+
+2017-04-06 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Lisu script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Lisu.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Lisu standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Lisu data.
+
+2017-04-06 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Osage script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Osage.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Osage standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Osage data.
+
+2017-04-06 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Glagolitic script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Glagolitic.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Glagolitic standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Glagolitic data.
+
+2017-04-06 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Tai Viet script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Tai Viet.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Tai Viet standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Tai Viet data.
+
+2017-04-06 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for Tifinagh script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Tifinagh.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Tifinagh standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Tifinagh data.
+
+2017-04-06 Sascha Brawer <sascha@google.com>
+ Werner Lemberg <wl@gnu.org
+
+ [autofit] Add support for N'Ko script.
+
+ * src/autofit/afblue.dat: Add blue zone data for N'Ko.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add N'Ko standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add N'Ko data.
+
+2017-04-06 Sascha Brawer <sascha@google.com>
+
+ [autofit] Add support for Adlam script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Adlam.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Adlam standard characters.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Adlam data.
+
+2017-04-06 Sascha Brawer <sascha@google.com>
+
+ [autofit] Add support for Ol Chiki script.
+
+ * src/autofit/afblue.dat: Add blue zone data for Ol Chiki.
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Ol Chiki standard character.
+
+ * src/autofit/afranges.c, src/autofit/afstyles.h: Add Ol Chiki data.
+
+2017-04-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Avoid reexecution of `fpgm' and `prep' in case of error.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=981
+
+ * include/freetype/fterrdef.h (FT_Err_DEF_In_Glyf_Bytecode): New
+ error code.
+
+ * src/truetype/ttinterp.c (Ins_FDEF, Ins_IDEF): Prohibit execution
+ of these two opcodes in `glyf' bytecode.
+ (TT_RunIns): Don't enforce reexecution of `fpgm' and `prep' bytecode
+ in case of error since function tables can no longer be modified
+ (due to the changes in `Ins_FDEF' and `Ins_IDEF'). This change can
+ enormously speed up handling of broken fonts.
+
+2017-04-02 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [autofit] Disable metrics adjustment for `FT_LOAD_TARGET_LCD'.
+
+ * src/autofit/aflatin.c (af_latin_hints_init): Updated.
+ * src/autofit/aflatin2.c (af_latin2_hints_init): Ditto.
+
+2017-04-01 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgload.c: Include FT_CONFIG_CONFIG_H.
+
+ Otherwise FT_UINT_TO_POINTER might not be defined.
+
+ Problem reported by Alexei.
+
+2017-03-31 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [autofit] Disable stem adjustment for `FT_LOAD_TARGET_LCD'.
+
+ * include/freetype/freetype.h (FT_LOAD_TARGET_LCD): Document it.
+ * src/autofit/afcjk.c (af_cjk_hints_init): Updated.
+ * src/autofit/aflatin.c (af_latin_hints_init): Ditto.
+ * src/autofit/aflatin2.c (af_latin2_hints_init): Ditto.
+
+2017-03-31 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffload.c (cff_font_load): Improve fix from 2017-01-04.
+
+ Allow CFFs containing a single font to have an empty font name.
+
+ Problem reported by 張俊芝 <418092625@qq.com> in
+
+ https://lists.nongnu.org/archive/html/freetype-devel/2017-03/msg00074.html
+
+2017-03-30 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffparse.h (CFF2_DEFAULT_STACK): Set to 513 also.
+
+ Requested by Dave Arnold.
+
+2017-03-30 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix HVAR and VVAR handling (#50678).
+
+ * src/truetype/ttgxvar.c (tt_hvadvance_adjust): Handle
+ glyph indices larger than `mapCount' as described in the
+ specification.
+
+2017-03-30 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Allow linear scaling for unhinted rendering (#50470).
+
+ * src/truetype/ttdriver.c (tt_size_request): Revert change from
+ 2011-07-16; the intended metrics fix seems now to be implemented in
+ a different way, making the patch unnecessary. Note that this
+ change was usually patched out by all major GNU/Linux distributions
+ due to heavy side effects.
+
+ * src/truetype/ttgload.c (compute_glyph_metrics, TT_Load_Glyph):
+ Refer to the metrics of the `TT_Size' object.
+
+2017-03-29 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix thinko related to PS name of default named instance.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): `strid' and `psid' are
+ name ID values, not indices into the array of name entries.
+
+2017-03-27 Werner Lemberg <wl@gnu.org>
+
+ [cid, truetype] Don't use `index' as a variable name.
+
+ At least on FreeBSD there is a global declaration of `index' in file
+ `/usr/include/strings.h'.
+
+ * src/cff/cf2intrp.c, src/truetype/ttgload.c: s/index/idx/ where
+ appropriate.
+
+2017-03-27 Wojciech Mamrak <wmamrak@gmail.com>
+
+ [sfnt] Minor improvement for handling kern tables.
+
+ * src/sfnt/ttkern.c (tt_face_load_kern): Don't check for
+ cross-stream kerning tables since we reject format 2 tables later
+ on anyways.
+ Modify code for limit test...
+ (tt_face_get_kerning): ... to avoid a limit test here.
+
+2017-03-27 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Fix compiler warnings.
+
+ Reported by Alexander Hedges <ahedges@student.ethz.ch>.
+
+ * src/pcf/pcfdrivr.c (pcf_property_set, pcf_property_get): Tag
+ `property_name' with `FT_UNUSED' where necessary.
+
+2017-03-26 Werner Lemberg <wl@gnu.org>
+
+ * src/psaux/psobjs.c (t1_builder_close_contour): Add safety guard.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=941
+
+2017-03-23 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Better protect `flex' handling.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=935
+
+ * src/psaux/t1decode.c (t1_decoder_parse_charstrings)
+ <callothersubr>: Since there is not a single flex operator but a
+ series of subroutine calls, malformed fonts can call arbitrary other
+ operators after the start of a flex, possibly adding points. For
+ this reason we have to check the available number of points before
+ inserting a point.
+
+2017-03-23 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix check for default named instance.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): A `fixed' number needs four
+ bytes, not two...
+
+2017-03-23 Werner Lemberg <wl@gnu.org>
+
+ Make MM fonts work (again).
+
+ * src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
+ FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates): Ignore
+ return value of `ft_face_get_mvar_service'; instead, check whether a
+ service is actually returned.
+
+2017-03-20 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Some variable renamings.
+
+ Too much local variables holding different structures were called
+ `metrics'.
+
+ * src/truetype/ttdriver.c (tt_size_select): s/metrics/size_metrics/.
+
+ * src/truetype/ttgload.c (tt_get_metrics_incr_overrides,
+ compute_glyph_metrics): s/metrics/incr_metrics/.
+ (load_sbit_image): s/metrics/sbit_metrics/.
+
+ * src/truetype/ttobjs.c (tt_size_run_fpgm): s/metrics/size_metrics/.
+ (tt_size_init_bytecode): s/metrics/tt_metrics/.
+ (tt_size_reset): s/metrics/size_metrics/.
+
+2017-03-20 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Don't add instances to non-variation fonts.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Fix it.
+
+2017-03-20 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffgload.c (cff_builder_init): Add safety guard (#50578).
+
+2017-03-18 Werner Lemberg <wl@gnu.org>
+
+ Introduce FT_UINT_TO_POINTER macro (#50560).
+
+ We have to make a separate case for Windows 64's LLP64 data model.
+
+ * builds/unix/ftconfig.in, builds/vms/ftconfig.h,
+ include/freetype/config/ftconfig.h (FT_UINT_TO_POINTER): New macro.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): Use it.
+
+2017-03-18 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (TT_RunIns): Adjust loop counter (#50573).
+
+ The problematic font that exceeds the old limit is Lato-Regular,
+ version 2.007, containing bytecode generated by a buggy version of
+ ttfautohint.
+
+2017-03-18 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Another limitation for bytecode loop count maximum.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=900
+
+ * src/truetype/ttinterp.c (TT_RunIns): Limit `loopcall_counter_max'
+ by number of glyphs also.
+
+2017-03-18 Werner Lemberg <wl@gnu.org>
+
+ [ftfuzzer] Minor improvement.
+
+ * src/tools/ftfuzzer/ftfuzzer.cc: Don't set intermediate axis if
+ bitmap strikes are active.
+
+2017-03-18 Werner Lemberg <wl@gnu.org>
+
+ Improve `make multi'.
+
+ * src/autofit/aflatin2.c: Guard file with FT_OPTION_AUTOFIT2.
+
+ * src/base/ftmac.c: Guard more parts of the file with FT_MACINTOSH.
+
+ * src/psaux/afmparse.c: Guard file with T1_CONFIG_OPTION_NO_AFM.
+
+ * src/sfnt/pngshim.c: Guard file with
+ TT_CONFIG_OPTION_EMBEDDED_BITMAPS also.
+
+ * src/sfnt/ttbdf.c: Avoid empty source file.
+ * src/sfnt/ttpost.c: Guard file with
+ TT_CONFIG_OPTION_POSTSCRIPT_NAMES.
+ * src/sfnt/ttsbit.c: Guard file with
+ TT_CONFIG_OPTION_EMBEDDED_BITMAPS.
+
+ * src/truetype/ttgxvar.c, src/truetype/ttinterp.c: Avoid empty
+ source file.
+
+ * src/truetype/ttsubpix.c: Guard file with
+ TT_USE_BYTECODE_INTERPRETER also.
+
+ * src/type1/t1afm.c: Guard file with T1_CONFIG_OPTION_NO_AFM.
+
+ * src/autofit/autofit.c, src/base/ftbase.c, src/cache/ftcache.c,
+ src/cff/cff.c, src/cid/type1cid.c, src/gxvalid/gxvalid.c,
+ src/pcf/pcf.c, src/pfr/pfr.c, src/psaux/psaux.c,
+ src/pshinter/pshinter.c, src/psnames/psnames.c, src/raster/raster.c,
+ src/sfnt/sfnt.c, src/smooth/smooth.c, src/truetype/truetype.c,
+ src/type1/type1.c, src/type42/type42.c: Remove conditionals; sort
+ entries.
+
+2017-03-17 Werner Lemberg <wl@gnu.org>
+
+ Fixes for conditional compilation.
+
+ * src/autofit/afcjk.c, src/autofit/afindic.c: Include `afcjk.h'
+ earlier.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Put `memory' variable into
+ TT_CONFIG_OPTION_GX_VAR_SUPPORT block.
+ (sfnt_done_face): Protect some code with
+ TT_CONFIG_OPTION_GX_VAR_SUPPORT.
+
+ * src/sfnt/ttsbit.c (tt_face_load_sbix_image): Remove compiler
+ warning.
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Put `tmp' variable
+ into TT_USE_BYTECODE_INTERPRETER block.
+
+ (tt_loader_init): Put `error' variable into
+ TT_USE_BYTECODE_INTERPRETER block.
+
+2017-03-17 Werner Lemberg <wl@gnu.org>
+
+ Fix preprocessor warning.
+
+ * devel/ftoption.h, include/freetype/config/ftoption.h: Test whether
+ TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined before checking its
+ value.
+
+2017-03-17 Werner Lemberg <wl@gnu.org>
+
+ `make multi' fixes; compiler warnings.
+
+ * src/base/ftsnames.c: Include FT_INTERNAL_DEBUG_H.
+
+ * src/cff/cffobjs.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
+ FT_MULTIPLE_MASTERS_H and FT_SERVICE_MULTIPLE_MASTERS_H.
+
+ * src/sfnt/sfdriver.c [TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Include
+ FT_MULTIPLE_MASTERS_H and FT_SERVICE_MULTIPLE_MASTERS_H.
+ (get_win_string, get_apple_string): Initialize `result'.
+
+2017-03-17 Dave Arnold <darnold@adobe.com>
+
+ [cff] Fix potential bugs in default NDV for CFF2.
+
+ * src/cff/cffload.c (cff_blend_build_vector): Explicitly build blend
+ vector when `lenNDV' is zero; don't rely on zero-init.
+ Save `lenNDV' as part of cache key even when `lenNDV' is zero.
+
+2017-03-17 Dave Arnold <darnold@adobe.com>
+
+ [cff] Fix CFF2 stack allocation.
+
+ * src/cff/cffparse.c (cff_parser_init) add 1 for operator.
+
+2017-03-16 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (tt_done_blend): Free `vvar_table'.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=883
+
+2017-03-15 Werner Lemberg <wl@gnu.org>
+
+ Remove clang compiler warnings (#50548).
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): Make
+ `var_postscript_prefix_len' unsigned.
+
+ * src/autofit/afwarp.c (af_warper_compute_line_best): Remove
+ redundant assignment.
+
+ * src/cff/cffload.c (cff_subfont_load): Add casts.
+
+ * src/cff/cffparse.c (cff_parse_blend): Remove redundant assignment.
+
+ * src/sfnt/sfdriver.c (fmix32, murmur_hash_3_128): Add `static'
+ keyword.
+ Add casts.
+ (fixed2float): Add cast.
+ (sfnt_get_var_ps_name): Make `p' always initialized.
+ Add casts.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Add casts.
+
+2017-03-15 Werner Lemberg <wl@gnu.org>
+
+ [ftfuzzer] Limit number of tested faces and instances.
+
+ This is inspired by the discussion in and analysis of
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=859
+
+ * src/tools/ftfuzzer/ftfuzzer.cc (LLVMFuzzerTestOneInput): Use only
+ up to 20 face indices.
+ Use only up to 20 instance indices.
+
+2017-03-15 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/ftfuzzer/ftfuzzer.cc: Improve readability; formatting.
+
+2017-03-14 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Implement PS names for font instances [3/3].
+
+ Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
+
+ * include/freetype/internal/tttypes.h (TT_FaceRec): New fields
+ `var_postscript_prefix' and `var_postscript_prefix_len'.
+
+ * src/sfnt/sfdriver.c: Include FT_TRUETYPE_IDS_H.
+ (sfnt_is_alphanumeric): New wrapperfunction for `ft_isalnum'.
+ (get_win_string, get_apple_string): Remove `const' from return
+ value.
+ (MAX_VALUE_DESCRIPTOR_LEN, MAX_PS_NAME_LEN): New macros.
+ (hexdigits): New array.
+ (sfnt_get_var_ps_name): New function, implementing Adobe TechNote
+ 5902 to construct a PS name for a variation font instance.
+ (sfnt_get_ps_name): Call `sfnt_get_var_ps_name' for font instances.
+
+ * src/sfnt/sfobjs.c (sfnt_done_face): Updated.
+
+ * src/truetype/ttgxvar.c (tt_set_mm_blend): Reset
+ `face->postscript_name' to trigger recalculation for new instance
+ parameters.
+
+2017-03-14 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Implement PS names for font instances [2/3].
+
+ * src/sfnt/sfdriver.c (fix2float) [TT_CONFIG_OPTION_GX_VAR_SUPPORT]:
+ New function to find the shortest representation of a 16.16
+ fractional number.
+
+2017-03-14 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Implement PS names for font instances [1/3].
+
+ Add 128bit MurmurHash 3 function.
+
+ Everything is guarded with TT_CONFIG_OPTION_GX_VAR_SUPPORT.
+
+ * src/sfnt/sfdriver.c (ROTL32): New macro.
+ (fmix32, murmur_hash_3_128): New functions.
+
+2017-03-13 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Ignore invalid MVAR tags.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=838
+
+ * src/truetype/ttgxvar.c (ft_var_load_mvar): Ignore value and emit
+ warning for invalid tags.
+ (tt_apply_mvar): Ignore invalid tags.
+
+2017-03-12 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Store and use design coordinates also.
+
+ * include/freetype/internal/services/svmm.h (FT_Get_Var_Blend_Func):
+ Add `normalizedcoords' argument.
+
+ * src/truetype/ttgxvar.h (GX_BlendRec): Add `coords' field to store
+ the design coordinates of the current instance.
+ Updated.
+
+ * src/truetype/ttgxvar.c (TT_Set_MM_Blend): Move functionality to...
+ (tt_set_mm_blend): ... New function.
+ Convert data in `normalizedcoords' array to `coords' array on
+ demand.
+ (TT_Set_Var_Design): Store argument data in `coords' array.
+ (TT_Get_Var_Design): Get data from `coords' array.
+ (tt_get_var_blend): Updated.
+ (tt_done_blend): Updated.
+
+ * src/cff/cffload.c, src/cff/cffload.h (cff_get_var_blend): Updated.
+
+ * src/cff/cf2ft.c (cf2_getNormalizedVector): Updated.
+
+ * src/cff/cffobjs.c (cff_face_init): Updated.
+
+2017-03-12 Werner Lemberg <wl@gnu.org>
+
+ src/truetype/ttgxvar.[ch]: s/avar_checked/avar_loaded/.
+
+2017-03-08 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Another fix for buggy variation fonts.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=759
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): While setting number of
+ instances to zero for `CFF' fonts table, ensure that there is no
+ `CFF2' present also (which gets priority).
+
+2017-03-07 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Improve handling for buggy variation fonts.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=738
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): While setting number of
+ instances to zero for `CFF' fonts table, ensure that there is no
+ `glyf' table present also (which gets priority).
+
+2017-03-06 Werner Lemberg <wl@gnu.org>
+
+ [sfnt, truetype] Always provide default instance.
+
+ As documented in the OpenType specification, an entry for the
+ default instance may be omitted in the named instance table. In
+ particular this means that even if there is no named instance table
+ in the font we actually do have a named instance, namely the default
+ instance.
+
+ For consistency, we always want the default instance in our list of
+ named instances. If it is missing, we try to synthesize it.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Check whether the default
+ instance is in the table of named instances. Otherwise adjust
+ number of instances.
+
+ * src/truetype/ttgxvar.c: Include FT_TRUETYPE_IDS_H.
+ (TT_Get_MM_Var): Use `face->root.style_flags' as the number of named
+ instances.
+ Sythesize a named instance entry if necessary.
+ (tt_done_blend): Free `normalized_stylecoords'.
+
+2017-03-05 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Remove redundant code.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Remove second test for
+ `num_instances', which will always succeed.
+
+2017-03-04 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Add `get_name_id' service.
+
+ * include/freetype/internal/sfnt.h (TT_Get_Name_ID_Func): New
+ typedef.
+ (SFNT_Interface): Add `get_name_id' field.
+ (FT_DEFINE_SFNT_INTERFACE): Updated.
+
+ * src/sfnt/sfdriver.c (search_name_id): Rename to...
+ (sfnt_get_name_id): ... this.
+ (sfnt_get_ps_name, sfnt_interface): Updated.
+
+2017-03-04 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Make `TT_Set_MM_Blend' set named instance index.
+
+ * src/truetype/ttgxvar.h (GX_Blend): New array
+ `normalized_stylecoords'.
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Allocate and fill
+ `normalized_stylecoords'.
+ (TT_Set_MM_Blend): Check instance tuple and adjust `face_index'
+ accordingly.
+
+2017-03-02 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Split off designer/normalized conversion routines.
+
+ * src/truetype/ttgxvar.c (TT_Set_Var_Design): Split off conversion
+ code designer->normalized coordinates to...
+ (ft_var_to_normalized): ... New function.
+ (TT_Get_Var_Design): Split off conversion code normalized->designer
+ coordinates to...
+ (ft_var_to_design): ... New function.
+
+2017-02-28 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Further generalize `sfnt_get_ps_name'; report invalid data.
+
+ * src/sfnt/sfdriver.c (sfnt_ps_map): New array.
+ (sfnt_is_postscript): New function.
+ (char_type_func): New typedef.
+ (get_win_string, get_apple_string): Add argument to specify
+ character checking function.
+ Add argument whether argument checking failures should be reported.
+ Update callers.
+ (search_name_id): Fix return value.
+
+2017-02-23 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Split off another bit of `sfnt_get_ps_name'.
+
+ * src/sfnt/sfdriver.c (sfnt_get_ps_name): Split off some
+ functionality into...
+ (search_name_id): ... New function.
+
+2017-02-23 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Modularize `sfnt_get_ps_name'.
+
+ * src/sfnt/sfdriver.c (sfnt_get_ps_name): Split off some
+ functionality into...
+ (IS_WIN, IS_APPLE): ... New macros.
+ (get_win_string, get_apple_string): ... New functions.
+
+2017-02-23 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Minor improvement.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
+ load_truetype_glyph): Remove unnecessary tests.
+
+2017-02-23 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/internal/tttypes.h (TT_Face): s/isCFF2/is_cff2/.
+
+ For orthogonality with other structure field names.
+
+ Update all users.
+
+2017-02-22 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_hline): Improve code.
+
+2017-02-20 Dominik Röttsches <drott@google.com>
+
+ Fix some `ttnameid.h' entries (#50313).
+
+ * include/freetype/ttnameid.h:
+ s/TT_MS_LANGID_SPANISH_INTERNATIONAL_SORT/TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT/,
+ s/TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIA/TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN/.
+
+2017-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Finish support for `random' operator.
+
+ * src/cff/cfftypes.h (CFF_SubFontRec): Add `random' field.
+
+ * src/cff/cffobjs.c: Updated.
+ (cff_driver_init): Initialize random seed value.
+
+ * src/cff/cffload.c (cff_random): New function.
+ (cff_subfont_load): Add `face' argument.
+ Update all callers.
+ Initialize random number generator with a proper seed value.
+ (cff_font_load): Add `face' argument.
+ Update all callers.
+
+ * src/cff/cffload.h: Updated.
+
+ * src/cff/cf2intrp.c (CF2_FIXME): Removed.
+ (cf2_interpT2CharString) <cf2_escRANDOM>: Implement opcode.
+
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings): Don't
+ initialize random seed value.
+ <cff_op_random>: Use new random seed framework.
+
+2017-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Sanitize `initialRandomSeed'.
+
+ * src/cff/cffload.c (cff_load_private_dict): Make
+ `initial_random_seed' value always positive.
+
+2017-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Introduce `random-seed' property (2/2).
+
+ * src/base/ftobjs.c: Include `FT_CFF_DRIVER_H'.
+ (open_face): Initialize `face->internal->random_seed'.
+ (FT_Face_Properties): Handle `FT_PARAM_TAG_RANDOM_SEED'.
+
+ * src/cff/cffdrivr.c (cff_property_set): Handle `random-seed'
+ property.
+
+2017-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Introduce `random-seed' property (1/2).
+
+ We need this for support of the `random' operator.
+
+ * include/freetype/ftcffdrv.h (FT_PARAM_TAG_RANDOM_SEED): New macro.
+
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): New
+ field `random_seed'.
+
+ * src/cff/cffobjs.h (CFF_DriverRec): New field `random_seed'.
+
+2017-02-17 Werner Lemberg <wl@gnu.org>
+
+ Remove clang warnings.
+
+ * src/autofit/aflatin.c (af_latin_sort_blue): Add missing `static'
+ keyword.
+
+ * src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
+ FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates):
+ Initialize some variables.
+
+2017-02-16 Nikolaus Waxweiler <madigens@gmail.com>
+ Werner Lemberg <wl@gnu.org>
+
+ Add face property for stem darkening.
+
+ * include/freetype/ftautoh.h (FT_PARAM_TAG_STEM_DARKENING): New
+ macro.
+
+ * include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Add
+ `no_stem_darkening' field.
+
+ * src/autofit/afloader.c (af_loader_load_glyph),
+ src/autofit/afmodule.c (af_property_set): Updated.
+
+ * src/base/ftobjs.c: Include FT_AUTOHINTER_H.
+ (ft_open_face_internal): Updated.
+ (FT_Face_Properties): Handle FT_PARAM_TAG_STEM_DARKENING.
+
+ * src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Updated.
+
+ * src/cff/cffdrivr.c (cff_property_set): Updated.
+
+2017-02-16 Nikolaus Waxweiler <madigens@gmail.com>
+ Werner Lemberg <wl@gnu.org>
+
+ Add face property for LCD filter weights.
+
+ * include/freetype/ftlcdfil.h (FT_PARAM_TAG_LCD_FILTER_WEIGHTS,
+ FT_LCD_FILTER_FIVE_TAPS): New macros.
+ (FT_LcdFiveTapFilter): New typedef.
+
+ * include/freetype/ftobjs.h (FT_Face_InternalRec)
+ [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Add `lcd_weights' field.
+ (FT_Bitmap_LcdFilterFunc): Change third argument to weights array.
+ (ft_lcd_filter_fir): New prototype.
+ (FT_LibraryRec): Updated.
+
+ * src/base/ftlcdfil.c (_ft_lcd_filter_fir): Renamed to...
+ (ft_lcd_filter_fir): ... this base function.
+ Updated.
+ (_ft_lcd_filter_legacy): Updated.
+ (FT_Library_SetLcdFilterWeights, FT_Library_SetLcdFilter): Updated.
+
+ * src/base/ftobjs.c (ft_open_face_internal): Updated.
+ (FT_Face_Properties): Handle FT_PARAM_TAG_LCD_FILTER_WEIGHTS.
+
+ * src/smooth/ftsmooth.c (ft_smooth_render_generic)
+ [FT_CONFIG_OPTION_SUBPIXEL_RENDERING]: Handle LCD weights from
+ `FT_Face_Internal'.
+
+2017-02-14 Nikolaus Waxweiler <madigens@gmail.com>
+ Werner Lemberg <wl@gnu.org>
+
+ Add new function `FT_Face_Properties'.
+
+ This commit provides the framework, to be filled with something
+ useful in the next commits.
+
+ * include/freetype/freetype.h (FT_Face_Properties): Declare.
+
+ * src/base/ftobjs.c (FT_Face_Properties): New function.
+
+2017-02-13 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Prevent overlapping blue zones.
+
+ Problem reported as
+
+ https://github.com/google/fonts/issues/632
+
+ The font in question (Nunito) has values 705 and 713 for the
+ reference and overshoot values, respectively, of the first blue
+ zone. Blue zone 2, however, has value 710 for both the reference
+ and overshoot. At 12ppem, reference and overshoot of blue zone 0
+ becomes 8px, while blue zone 2 becomes 9px.
+
+ A peculiarity of this font is that the tops of isolated vertical
+ stems like `N' have a slight overshoot also. The auto-hinter tries
+ to find the nearest blue zone using the *original* coordinates. For
+ vertical stems, this is value 713. For normal horizontal tops like
+ in character `E', this is value 710. Since value 713 is mapped to
+ 8px but value 710 to 9px, `N' and similar characters are one pixel
+ higher than `E', which looks very bad.
+
+ This commit sanitizes blue zones to avoid such a behaviour.
+
+ * src/autofit/aflatin.c (af_latin_sort_blue): New function.
+ (af_latin_metrics_init_blues): Sort blue values and remove overlaps.
+
+2017-02-12 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_sweep): Improve code.
+
+2017-02-06 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Implement `VVAR' table support.
+
+ * src/truetype/ttgxvar.h (GX_HVarTable): Renamed to...
+ (GX_HVVarTable): ...This.
+ (GX_Blend): Add fields for `VVAR' table handling.
+ Other minor updates.
+
+ * src/truetype/ttgxvar.c (ft_var_load_hvar): Renamed to...
+ (ft_var_load_hvvar): ...This.
+ Handle VVAR loading also (controlled by an additional parameter).
+ (tt_hadvance_adjust): Renamed to...
+ (tt_hvadvance_adjust): ...This.
+ Handle application of advance height also (controlled by an
+ additional parameter).
+ (tt_hadvance_adjust, tt_vadvance_adjust): Wrappers for
+ `tt_hvadvance_adjust'.
+
+ * src/truetype/ttdriver.c (tt_service_metrics_variations): Updated.
+
+2017-02-05 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Use better blue zone characters for lowercase latin.
+
+ The number of lowercase characters for computing the top flat blue
+ zone value was too small (in most cases only `x' and `z'). If one
+ of the two characters has a large serif, say, it can happen that
+ FreeType must select between two different values, having a 50%
+ chance to use the wrong one. As a result, rendering at larger PPEM
+ values could yield uneven lowercase glyph heights.
+
+ Problem reported by Christoph Koeberlin <christoph@koe.berlin>.
+
+ * src/autofit/afblue.dat (AF_BLUE_STRING_LATIN_SMALL): Replaced
+ with...
+ (AF_BLUE_STRING_LATIN_SMALL_TOP, AF_BLUE_STRING_LATIN_SMALL_BOTTOM):
+ ... New, extended sets.
+ (AF_BLUE_STRINGSET_LATN): Updated.
+
+ * src/autofit/afblue.c, scr/autofit/afblue.h: Regenerated.
+
+2017-02-04 Werner Lemberg <wl@gnu.org>
+
+ Make `freetype-config' a wrapper of `pkg-config' if possible.
+
+ Based on ideas taken from
+
+ http://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-multilib.patch
+ http://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-2.5.3-freetype-config-prefix.patch
+
+ * builds/unix/freetype-config.in: Rewritten. Use `pkg-config' to
+ set output variables if program is available.
+
+ * docs/CHANGES, docs/freetype-config.1: Updated.
+
+2017-02-04 Werner Lemberg <wl@gnu.org>
+
+ * builds/unix/unix-def.in (freetype-config): Fix permissions.
+
+2017-02-03 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afglobal.c (af_face_globals_free): Erase useless code.
+
+2017-02-03 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ftgasp.h (FT_GASP_SYMMETRIC_GRIDFIT): Fix value.
+
+ Reported by Behdad.
+
+2017-02-02 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix MVAR post-action handling.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=509
+
+ * src/truetype/ttobjs.c (tt_size_reset): Do nothing for CFF2. This
+ is important to make `tt_size_reset_iterator' (called in
+ `tt_apply_mvar') always work.
+
+2017-02-02 Werner Lemberg <wl@gnu.org>
+
+ Make compilation with FT_CONFIG_OPTION_PIC work again.
+
+ All code committed here is guarded with `FT_CONFIG_OPTION_PIC'.
+
+ * include/freetype/internal/services/svmetric.h
+ (FT_DEFINE_SERVICE_METRICSVARIATIONSREC): Remove trailing semicolon.
+
+ * src/autofit/aflatin.c (af_latin_hints_compute_edges,
+ af_latin_hint_edges): Provide `globals' variable.
+
+ * src/autofit/afloader.c (af_loader_load_glyph): Remove shadowing
+ variable.
+
+ * src/autofit/afmodule.c (AF_SCRIPT_CLASSES_GET,
+ AF_STYLE_CLASSES_GET): Redefine.
+
+ * src/autofit/aftypes.h (AF_DEFINE_WRITING_SYSTEM_CLASS): Fix typo.
+
+ * src/cff/cffparse.c (CFF_FIELD_BLEND): Provide it.
+
+ * src/cff/cffpic.h (CffModulePIC): Fix typo.
+
+2017-01-31 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/smooth/ftgrays.c (gray_render_scanline): Improve code.
+
+2017-01-31 Werner Lemberg <wl@gnu.org>
+
+ [cff] Provide metrics variation service interface (#50196).
+
+ Only now I've got an OTF with an HVAR table for testing...
+
+ The code in `ftmm.c' uses `FT_FACE_LOOKUP_SERVICE' to get the
+ metrics variations interface. However, this didn't work with
+ `FT_FACE_FIND_GLOBAL_SERVICE' used in `sfnt_init_face'.
+
+ * src/cff/cffdrivr.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
+ (cff_hadvance_adjust, cff_metrics_adjust): Wrapper functions for
+ metric service functions from the `truetype' module.
+ (cff_service_metrics_variations): New service.
+ (cff_services): Updated.
+
+ * src/cff/cffpic.h (CFF_SERVICE_METRICS_VAR_GET): New macro.
+ [FT_CONFIG_OPTION_PIC]: Synchronize code.
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Replace call to
+ FT_FACE_FIND_GLOBAL_SERVICE with `ft_module_get_service' to always
+ load the service from the `truetype' module.
+
+2017-01-31 Werner Lemberg <wl@gnu.org>
+
+ Add framework to support services with 9 functions.
+
+ * include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC9):
+ New macro.
+
+2017-01-31 Werner Lemberg <wl@gnu.org>
+
+ [base] Fix error handing in MM functions.
+
+ * src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
+ FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates):
+ Implement it.
+
+2017-01-31 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix sanity check for `gvar' table (#50184).
+
+ * src/truetype/ttgxvar.c (ft_var_load_gvar): There might be missing
+ variation data for some glyphs.
+
+2017-01-31 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Avoid uninitialized jumps (#50191).
+
+ * src/autofit/afcjk.c (af_cjk_metrics_check_digits),
+ src/autofit/aflatin.c (af_latin_metrics_check_digits): Initialize
+ `advance'.
+
+2017-01-27 Werner Lemberg <wl@gnu.org>
+
+ s/GB2312/PRC/.
+
+ * include/freetype/freetype.h (FT_ENCODING_PRC): New enum value.
+ (FT_ENCODING_GB2312): Deprecated.
+
+ * include/freetype/ttnameid.h (TT_MS_ID_PRC): New macro.
+ (TT_MS_ID_GB2312): Deprecated.
+
+ * src/sfnt/sfobjs.c (sfnt_find_encoding): Updated.
+
+ * docs/CHANGES: Updated.
+
+2017-01-26 Werner Lemberg <wl@gnu.org>
+
+ [base] Add `FT_Get_Sfnt_LangTag' function.
+
+ * include/freetype/ftsnames.h (FT_SfntLangTag): New structure.
+ (FT_Get_Sfnt_LangTag): New declaration.
+
+ * src/base/ftsnames.c (FT_Get_Sfnt_LangTag): New function.
+
+ * docs/CHANGES: Updated.
+
+2017-01-26 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Support `name' table format 1.
+
+ * include/freetype/internal/tttypes.h (TT_LangTagRec): New
+ structure.
+ (TT_NameTableRec): Add fields `numLangTagRecords' and `langTags'.
+
+ * src/sfnt/ttload.c (tt_face_load_name): Add support for language
+ tags.
+ Reduce array size of name strings in case of invalid entries.
+ (tt_face_free_name): Updated.
+
+ * docs/CHANGES: Updated.
+
+2017-01-25 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] s/TT_NameEntry/TT_Name/.
+
+ * include/freetype/internal/tttypes.h (TT_NameEntryRec): Renamed
+ to...
+ (TT_NameRec): This.
+ (TT_NameTableRec): Updated.
+
+ * src/base/ftsnames.c (FT_Get_Sfnt_Name): Updated.
+
+ * src/sfnt/sfdriver.c (sfnt_get_ps_name): Updated.
+
+ * src/sfnt/sfobjs.c (tt_name_entry_ascii_from_utf16,
+ tt_name_entry_ascii_from_other): Renamed to...
+ (tt_name_ascii_from_utf16, tt_name_entry_ascii_from_other): This,
+ respectively.
+ (TT_NameEntry_ConvertFunc): Renamed to...
+ (TT_Name_ConvertFunc): This.
+ (tt_face_get_name): Updated.
+
+ * src/sfnt/ttload.c (tt_face_load_name, tt_face_free_name):
+ Updated.
+
+2017-01-24 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Postscript name service for symbol fonts.
+
+ * src/sfnt/sfdriver.c (sfnt_get_ps_name): Accept PID/EID=3/0
+ entries also.
+
+2017-01-24 Werner Lemberg <wl@gnu.org>
+
+ [truetype] For OpenType 1.7: s/preferred/typographic/ (sub)family.
+
+ * include/freetype/ftsnames.h
+ (FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY,
+ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY): New macros.
+ (FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY,
+ FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY): Deprecated.
+
+ * include/freetype/ttnameid.h (TT_NAME_ID_TYPOGRAPHIC_FAMILY,
+ TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY): New macros.
+ (TT_NAME_ID_PREFERRED_FAMILY, TT_NAME_ID_PREFERRED_SUBFAMILY):
+ Deprecated.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Updated.
+
+ * docs/CHANGES: Updated.
+
+2017-01-23 Werner Lemberg <wl@gnu.org>
+
+ [base] Add `FT_Set_Default_Properties' (#49187).
+
+ * include/freetype/ftmodapi.h: Add declaration.
+
+ * src/base/ftinit.c (ft_set_default_properties): Renamed to...
+ (FT_Set_Default_Properties): ... this.
+ (FT_Init_FreeType): Updated.
+
+ * docs/CHANGES: Updated.
+
+2017-01-23 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Minor updates for OpenType 1.8.1.
+
+ * src/truetype/ttgxvar.h (GX_MVarTable): `axisCount' has been
+ removed from the specification; it is now reserved.
+
+ * src/truetype/ttgxvar.c (ft_var_load_mvar): Updated.
+ (GX_FVar_Head): Remove `countSizePairs'; the corresponding data
+ field in the `MVAR' table is now reserved.
+ (fvar_fields): Updated.
+
+2017-01-23 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Avoid segfault for invalid variation data.
+
+ * src/truetype/ttgxvar.c (ft_var_load_item_variation_store): Assure
+ `itemCount' is not zero.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=441
+
+2017-01-20 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (TT_RunIns): Adjust loop detector limits.
+
+2017-01-17 Werner Lemberg <wl@gnu.org>
+
+ * include/freetype/ttnameid.h: Updated to OpenType 1.8.1.
+
+ (TT_APPLE_ID_FULL_UNICODE): New macro.
+
+ (TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC,
+ TT_MS_LANGID_UPPER_SORBIAN_GERMANY,
+ TT_MS_LANGID_LOWER_SORBIAN_GERMANY, TT_MS_LANGID_IRISH_IRELAND,
+ TT_MS_LANGID_INUKTITUT_CANADA_LATIN, TT_MS_LANGID_BASHKIR_RUSSIA,
+ TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG,
+ TT_MS_LANGID_GREENLANDIC_GREENLAND, TT_MS_LANGID_MAPUDUNGUN_CHILE,
+ TT_MS_LANGID_MOHAWK_MOHAWK, TT_MS_LANGID_BRETON_FRANCE,
+ TT_MS_LANGID_OCCITAN_FRANCE, TT_MS_LANGID_CORSICAN_FRANCE,
+ TT_MS_LANGID_ALSATIAN_FRANCE, TT_MS_LANGID_YAKUT_RUSSIA,
+ TT_MS_LANGID_KICHE_GUATEMALA, TT_MS_LANGID_KINYARWANDA_RWANDA,
+ TT_MS_LANGID_WOLOF_SENEGAL, TT_MS_LANGID_DARI_AFGHANISTAN): New
+ macros.
+
+ (TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC): Fix value.
+
+ (TT_MS_LANGID_GERMAN_LIECHTENSTEIN, TT_MS_LANGID_CATALAN_CATALAN,
+ TT_MS_LANGID_CHINESE_MACAO, TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT,
+ TT_MS_LANGID_KOREAN_KOREA, TT_MS_LANGID_ROMANSH_SWITZERLAND,
+ TT_MS_LANGID_SLOVENIAN_SLOVENIA, TT_MS_LANGID_BASQUE_BASQUE,
+ TT_MS_LANGID_SETSWANA_SOUTH_AFRICA,
+ TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA,
+ TT_MS_LANGID_ISIZULU_SOUTH_AFRICA, TT_MS_LANGID_KAZAKH_KAZAKHSTAN,
+ TT_MS_LANGID_KYRGYZ_KYRGYZSTAN, TT_MS_LANGID_KISWAHILI_KENYA,
+ TT_MS_LANGID_TATAR_RUSSIA, TT_MS_LANGID_ODIA_INDIA,
+ TT_MS_LANGID_MONGOLIAN_PRC, TT_MS_LANGID_TIBETAN_PRC,
+ TT_MS_LANGID_WELSH_UNITED_KINGDOM, TT_MS_LANGID_GALICIAN_GALICIAN,
+ TT_MS_LANGID_SINHALA_SRI_LANKA, TT_MS_LANGID_TAMAZIGHT_ALGERIA,
+ TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA, TT_MS_LANGID_YI_PRC,
+ TT_MS_LANGID_UIGHUR_PRC): New aliases.
+
+ Remove commented out code.
+
+ (TT_NAME_ID_LIGHT_BACKGROUND, TT_NAME_ID_DARK_BACKGROUND,
+ TT_NAME_ID_VARIATIONS_PREFIX): New macros.
+
+ (HAVE_LIMIT_ON_IDENTS): Remove macro (which was useless since many
+ years), use guarded long macros by default and define short versions
+ as aliases for the long ones.
+
+2017-01-15 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (tt_apply_var): Handle underline parameters
+ also.
+
+2017-01-11 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (ft_open_face_internal): Improve tracing.
+
+2017-01-11 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Actually use metrics variation service.
+
+ * src/base/ftmm.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
+ (ft_face_get_mvar_service): New auxiliary function to look up
+ metrics variation service.
+ (FT_Set_Var_Design_Coordinates, FT_Set_MM_Blend_Coordinates,
+ FT_Set_Var_Blend_Coordinates): Call metrics variation service.
+
+ * src/truetype/ttobjs.c (tt_face_init): Use metrics variations for
+ named instances.
+
+2017-01-11 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Provide metrics variation service.
+
+ * include/freetype/internal/services/svmetric.h
+ (FT_Metrics_Adjust_Func): Reduce number of necessary parameters.
+
+ * src/truetype/ttgxvar.c: Include FT_LIST_H.
+ (tt_size_reset_iterator): New auxiliary function for...
+ (tt_apply_var): New function.
+
+ * src/truetype/ttgxvar.h: Updated.
+
+ * src/truetype/ttdriver.c (tt_service_metrics_variations): Add
+ `tt_apply_mvar'.
+
+ * include/freetype/internal/ftserv.h (FT_ServiceCache): Add metrics
+ variation service.
+
+2017-01-11 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Parse `MVAR' table.
+
+ * src/truetype/ttgxvar.h (MVAR_TAG_XXX): New macros for MVAR tags.
+ (GX_Value, GX_MVarTable): New structures.
+ (GX_Blend): Add it.
+
+ * src/truetype/ttgxvar.c (GX_VALUE_SIZE, GX_VALUE_CASE,
+ GX_GASP_CASE): New macros.
+ (ft_var_get_value_pointer): New auxiliary function to get a pointer
+ to a value from various SFNT tables already stored in `TT_Face'.
+ (ft_var_load_mvar): New function.
+ (TT_Get_MM_Var): Call it.
+ (tt_done_blend): Updated.
+
+2017-01-11 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More preparations for MVAR support.
+
+ * src/truetype/ttobjs.c (tt_size_reset): Add argument to make
+ function only recompute ascender, descender, and height.
+
+ * src/truetype/ttobjs.h: Updated.
+
+ * src/truetype/ttdriver.c (tt_size_select, tt_size_request):
+ Updated.
+
+2017-01-09 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Disable long family names by default.
+
+ * include/freetype/config/ftoption.h
+ (PCF_CONFIG_OPTION_LONG_FAMILY_NAMES): Comment out.
+
+2017-01-09 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Make long family names configurable.
+
+ The change from 2016-09-29 was too radical (except for people using
+ the openSuSE GNU/Linux distribution). To ameliorate the situation,
+ PCF_CONFIG_OPTION_LONG_FAMILY_NAMES gets introduced which controls
+ the feature; if set, a new PCF property option
+ `no-long-family-names' can be used to switch this feature off.
+
+ * include/freetype/config/ftoption.h, devel/ftoption.h
+ (PCF_CONFIG_OPTION_LONG_FAMILY_NAMES): New option.
+
+ * include/freetype/ftpcfdrv.h: New header file (only containing
+ comments currently, used for building the documentation).
+
+ * include/freetype/config/ftheader.h (FT_PCF_DRIVER_H): New macro.
+
+ * src/pcf/pcf.h (PCF_Driver): Add `no_long_family_names' field.
+
+ * src/pcf/pcfdrivr.c: Include FT_SERVICE_PROPERTIES_H and
+ FT_PCF_DRIVER_H.
+ (pcf_property_set, pcf_property_get): New functions.
+ (pcf_service_properties): New service.
+ (pcf_services): Updated.
+ (pcf_driver_init) [PCF_CONFIG_OPTION_LONG_FAMILY_NAMES]: Handle
+ `no_long_family_names'.
+
+ * src/pcf/pcfread.c (pcf_load_font): Handle `no_long_family_names'
+ and PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.
+
+ * docs/CHANGES: Updated.
+
+2017-01-09 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Introduce a driver structure.
+
+ To be filled later on with something useful.
+
+ * src/pcf/pcf.h (PCF_Driver): New structure.
+
+ * src/pcf/pcfdrivr.c (pcf_driver_init, pcf_driver_done): New dummy
+ functions.
+ (pcf_driver_class): Updated.
+
+2017-01-08 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Again some GX code shuffling.
+
+ We need this later on for MVAR also.
+
+ * src/truetype/ttgxvar.c (tt_hadvance_adjust): Split off computing
+ an item store variation delta into...
+ (ft_var_get_item_delta): ...new function.
+
+2017-01-08 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Adjust font variation flags for MVAR.
+
+ * include/freetype/internal/tttypes.h (TT_FACE_FLAG_VAR_XXX):
+ Remove all flags related to MVAR; replace it with...
+ (TT_FACE_FLAG_VAR_MVAR): ...this new macro.
+ (TT_Face): Remove `mvar_support' field (which was still unused).
+
+2017-01-06 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More GX code shuffling.
+
+ We need this later on for MVAR also.
+
+ * src/truetype/ttgxvar.c (tt_done_blend): Split off handling of item
+ variation store into...
+ (ft_var_done_item_variation_store): ...new function.
+
+2017-01-06 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More generalization of GX stuff.
+
+ We need this later on for MVAR also.
+
+ * src/truetype/ttgxvar.c (ft_var_load_delta_set_index_mapping): Add
+ parameters for delta-set index mapping and item variation store.
+ (ft_var_load_item_variation_store): Add parameter for item variation
+ store.
+ s/hvarData/varData/.
+ Move allocation of `hvar_table' to...
+ (ft_var_load_hvar): ...this function.
+ Updated.
+
+2017-01-06 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Some GX structure renames for generalization.
+
+ We need this later on for MVAR also.
+
+ * src/truetype/ttgxvar.h (GX_HVarData): Renamed to...
+ (GX_ItemVarData): ...this.
+ (GX_HVarRegion): Renamed to...
+ (GX_VarRegion): ...this.
+ (GX_HVStore): Renamed to...
+ (GX_ItemVarStore): ...this.
+ (GX_WidthMap): Renamed to...
+ (GX_DeltaSetIdxMap): ...this.
+
+ (GX_HVarTable): Updated.
+
+ * src/truetype/ttgxvar.c: Updated.
+
+2017-01-06 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Code shuffling.
+
+ * src/truetype/ttgxvar.c (ft_var_load_hvar): Split off loading of
+ item variation store and delta set index mapping into...
+ (ft_var_load_item_variation_store,
+ ft_var_load_delta_set_index_mapping): ...new functions.
+
+2017-01-06 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add HVAR access without advance width map.
+
+ * src/truetype/ttgxvar.c (ft_var_load_hvar): Handle case where
+ `offsetToAdvanceWidthMapping' is zero.
+ (tt_hadvance_adjust): Implement direct deltaSet access by glyph
+ index.
+
+2017-01-06 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Revise driver.
+
+ This commit improves tracing and handling of malformed fonts. In
+ particular, the changes to `pcf_get_properties' fix
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=379
+
+ * src/pcf/pcfread.c (tableNames): Use long names for better
+ readability.
+ (pcf_read_TOC): Allow at most 9 tables.
+ (pcf_get_properties): Allow at most 256 properties.
+ Limit strings array length to 256 * (65536 + 1) bytes.
+ Better tracing.
+ (pcf_get_metric): Trace metric data.
+ (pcf_get_metrics): Allow at most 65536 metrics.
+ Fix comparison of `metrics->ascent' and `metrics->descent' to avoid
+ potential overflow.
+ Better tracing.
+ (pcf_get_bitmaps): Allow at most 65536 bitmaps.
+ Better tracing.
+ (pcf_get_encodings, pcf_get_accel): Better tracing.
+
+ * src/pcf/pcfdrivr.c (PCF_Glyph_Load): Don't trace `format' details.
+ These are now shown by `pcf_get_bitmaps'.
+
+2017-01-04 Werner Lemberg <wl@gnu.org>
+
+ * src/pcf/pcfdrivr.c (PCF_Face_Init): Trace compression format.
+
+2017-01-04 Werner Lemberg <wl@gnu.org>
+
+ [cff] More consistency checks for pure CFFs.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=378
+
+ * src/cff/cffload.c (cff_font_load): Check element number and size
+ of Name and Top DICT indices.
+
+2017-01-04 Werner Lemberg <wl@gnu.org>
+
+ [cff, truetype] Minor tracing improvement.
+
+ * src/cff/cffobjs.c (cff_face_init), src/truetype/ttobjs.c
+ (tt_face_init): Indent first tracing message from SFNT driver.
+
+2017-01-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Various minor fixes.
+
+ * src/truetype/ttgload.c (TT_Load_Simple_Glyph): Check instruction
+ size only if we do native hinting.
+ (TT_Load_Glyph): Trace returned error code.
+
+ * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Trace
+ returned error code.
+ (tt_size_ready_bytecode): Don't run `prep' table if `fpgm' table is
+ invalid.
+
+2017-01-03 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Don't fail if PCLT, EBLC (and similar tables) are invalid.
+
+ These tables are optional.
+
+ * src/sfnt/sfobjs.c (sfnt_load_face): Implement it.
+
+2017-01-03 Werner Lemberg <wl@gnu.org>
+
+ * src/cff/cffparse.c (cff_parse_num): Simplify.
+
+2017-01-03 Werner Lemberg <wl@gnu.org>
+
+ Various fixes for clang's undefined behaviour sanitizer.
+
+ * src/cff/cffload.c (FT_fdot14ToFixed): Fix casting.
+ (cff_blend_doBlend): Don't left-shift negative numbers.
+ Handle 5-byte numbers byte by byte to avoid alignment issues.
+
+ * src/cff/cffparse.c (cff_parse_num): Handle 5-byte numbers byte by
+ byte to avoid alignment issues.
+
+ * src/cid/cidload (cid_read_subrs): Do nothing if we don't have any
+ subrs.
+
+ * src/psaux/t1decode.c (t1_decode_parse_charstring): Fix tracing.
+
+ * src/tools/glnames.py (main): Put `DEFINE_PSTABLES' guard around
+ definition of `ft_get_adobe_glyph_index'.
+
+ * src/psnames/pstables.h: Regenerated.
+
+ * src/psnames/psmodule.c: Include `pstables.h' twice to get both
+ declaration and definition.
+
+ * src/truetype/ttgxvar.c (FT_fdot14ToFixed, FT_intToFixed): Fix
+ casting.
+
+2017-01-01 Werner Lemberg <wl@gnu.org>
+
+ [cff] Handle multiple `blend' operators in a row correctly.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=368
+
+ * src/cff/cffload.c (cff_blend_doBlend): Adjust `parser->stack'
+ pointers into `subFont->blend_stack' after reallocation.
+
+2017-01-01 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Return correct number of named instances for TTCs.
+
+ Without this patch, requesting information for face index N returned
+ the data for face index N+1 (or index 0).
+
+ * src/sfnt/sfobjs.c (sfnt_init_face): Correctly adjust `face_index'
+ for negative `face_instance_index' values.
+
+2016-12-31 Werner Lemberg <wl@gnu.org>
+
+ */*: Use hex numbers for errors in tracing messages.
+
+2016-12-31 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Check axis count in HVAR table.
+
+ Reported as
+
+ https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=362
+
+ * src/truetype/ttgxvar.c (ft_var_load_hvar): Check axis count.
+ (ft_var_load_avar): Fix tracing message.
+
+
+----------------------------------------------------------------------------
+
+Copyright 2016-2018 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used, modified,
+and distributed under the terms of the FreeType project license,
+LICENSE.TXT. By continuing to use, modify, or distribute this file you
+indicate that you have read the license and understand and accept it
+fully.
+
+
+Local Variables:
+version-control: never
+coding: utf-8
+End:
diff --git a/Jamfile b/Jamfile
index 61fa018..9078a5f 100644
--- a/Jamfile
+++ b/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 top Jamfile.
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -73,20 +73,20 @@
FT2_COMPONENTS ?= autofit # auto-fitter
base # base component (public APIs)
bdf # BDF font driver
+ bzip2 # support for bzip2-compressed PCF font
cache # cache sub-system
cff # CFF/CEF font driver
cid # PostScript CID-keyed font driver
- pcf # PCF font driver
- bzip2 # support for bzip2-compressed PCF font
gzip # support for gzip-compressed PCF font
lzw # support for LZW-compressed PCF font
+ pcf # PCF font driver
pfr # PFR/TrueDoc font driver
psaux # common PostScript routines module
pshinter # PostScript hinter module
psnames # PostScript names handling
raster # monochrome rasterizer
- smooth # anti-aliased rasterizer
sfnt # SFNT-based format support routines
+ smooth # anti-aliased rasterizer
truetype # TrueType font driver
type1 # PostScript Type 1 font driver
type42 # PostScript Type 42 (embedded TrueType) driver
@@ -121,17 +121,16 @@
}
-# We need `freetype2/include' in the current include path in order to
+# We need `include' in the current include path in order to
# compile any part of FreeType 2.
-#: updating documentation for upcoming release
-
+#
HDRS += $(FT2_INCLUDE) ;
# We need to #define FT2_BUILD_LIBRARY so that our sources find the
# internal headers
#
-DEFINES += FT2_BUILD_LIBRARY ;
+CCFLAGS += -DFT2_BUILD_LIBRARY ;
# Uncomment the following line if you want to build individual source files
# for each FreeType 2 module. This is only useful during development, and
@@ -140,12 +139,13 @@
# FT2_MULTI = true ;
-# The file <config/ftheader.h> is used to define macros that are later used
-# in #include statements. It needs to be parsed in order to record these
-# definitions.
+# The files `ftheader.h', `internal.h', and `ftserv.h' are used to define
+# macros that are later used in #include statements. They need to be parsed
+# in order to record these definitions.
#
-HDRMACRO [ FT2_SubDir include freetype config ftheader.h ] ;
-HDRMACRO [ FT2_SubDir include freetype internal internal.h ] ;
+HDRMACRO [ FT2_SubDir $(FT2_INCLUDE_DIR) freetype config ftheader.h ] ;
+HDRMACRO [ FT2_SubDir $(FT2_INCLUDE_DIR) freetype internal internal.h ] ;
+HDRMACRO [ FT2_SubDir $(FT2_INCLUDE_DIR) freetype internal ftserv.h ] ;
# Now include the Jamfile in `freetype2/src', used to drive the compilation
@@ -153,7 +153,7 @@
#
SubInclude FT2_TOP $(FT2_SRC_DIR) ;
-# Handle the generation of the `ftexport.sym' file which contain the list
+# Handle the generation of the `ftexport.sym' file, which contains the list
# of exported symbols. This can be used on Unix by libtool.
#
SubInclude FT2_TOP $(FT2_SRC_DIR) tools ;
@@ -161,7 +161,20 @@
rule GenExportSymbols
{
local apinames = apinames$(SUFEXE) ;
- local headers = [ Glob $(2) : *.h ] ;
+ local aheader ;
+ local headers ;
+
+ for aheader in [ Glob $(2) : *.h ]
+ {
+ switch $(aheader)
+ {
+ case */ftmac.h :
+ if ( $(MAC) || $(OS) = MACOSX ) {
+ headers += $(aheader) ;
+ }
+ case *.h : headers += $(aheader) ;
+ }
+ }
LOCATE on $(1) = $(ALL_LOCATE_TARGET) ;
@@ -177,7 +190,7 @@
$(APINAMES) $(2) > $(1)
}
-GenExportSymbols ftexport.sym : include include/cache ;
+GenExportSymbols ftexport.sym : include/freetype ;
# Test files (hinter debugging). Only used by FreeType developers.
#
@@ -195,7 +208,12 @@
actions RefDoc
{
- python $(FT2_SRC)/tools/docmaker/docmaker.py --prefix=ft2 --title=FreeType-2.6 --output=$(DOC_DIR) $(FT2_INCLUDE)/*.h $(FT2_INCLUDE)/config/*.h
+ python $(FT2_SRC)/tools/docmaker/docmaker.py
+ --prefix=ft2
+ --title=FreeType-2.9.1
+ --output=$(DOC_DIR)
+ $(FT2_INCLUDE)/freetype/*.h
+ $(FT2_INCLUDE)/freetype/config/*.h
}
RefDoc refdoc ;
diff --git a/Jamrules b/Jamrules
index 91d1966..bdd04bc 100644
--- a/Jamrules
+++ b/Jamrules
@@ -1,6 +1,6 @@
# FreeType 2 JamRules.
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/Makefile b/Makefile
index c807b0b..0c7ee0e 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/README b/README
index ff20745..c23b99e 100644
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
- FreeType 2.6
- ============
+ FreeType 2.9.1
+ ==============
- Homepage: http://www.freetype.org
+ Homepage: https://www.freetype.org
FreeType is a freely available software library to render fonts.
@@ -20,17 +20,17 @@
documentation is available as a separate package from our sites. Go
to
- http://download.savannah.gnu.org/releases/freetype/
+ https://download.savannah.gnu.org/releases/freetype/
and download one of the following files.
- freetype-doc-2.6.tar.bz2
- freetype-doc-2.6.tar.gz
- ftdoc26.zip
+ freetype-doc-2.9.1.tar.bz2
+ freetype-doc-2.9.1.tar.gz
+ ftdoc291.zip
To view the documentation online, go to
- http://www.freetype.org/freetype2/documentation.html
+ https://www.freetype.org/freetype2/documentation.html
Mailing Lists
@@ -42,10 +42,11 @@
general use and discussion: freetype@nongnu.org
engine internals, porting, etc.: freetype-devel@nongnu.org
announcements: freetype-announce@nongnu.org
+ git repository tracker: freetype-commit@nongnu.org
The lists are moderated; see
- http://www.freetype.org/contact.html
+ https://www.freetype.org/contact.html
how to subscribe.
@@ -70,7 +71,7 @@
----------------------------------------------------------------------
-Copyright 2006-2015 by
+Copyright 2006-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/README.git b/README.git
index 2350e78..a3d7fc0 100644
--- a/README.git
+++ b/README.git
@@ -37,7 +37,7 @@
----------------------------------------------------------------------
-Copyright 2005-2015 by
+Copyright 2005-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/autogen.sh b/autogen.sh
index 9729af4..ab90e64 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2005-2015 by
+# Copyright 2005-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -139,7 +139,7 @@
check_tool_version $AUTOCONF autoconf AUTOCONF 2.62
# This sets freetype_major, freetype_minor, and freetype_patch.
-eval `sed -nf version.sed include/freetype.h`
+eval `sed -nf version.sed include/freetype/freetype.h`
# We set freetype-patch to an empty value if it is zero.
if test "$freetype_patch" = ".0"; then
@@ -156,7 +156,6 @@
run $LIBTOOLIZE --force --copy --install
run autoconf --force
-chmod +x mkinstalldirs
chmod +x install-sh
cd ../..
diff --git a/builds/amiga/README b/builds/amiga/README
index 1a68b10..29e97d6 100644
--- a/builds/amiga/README
+++ b/builds/amiga/README
@@ -1,7 +1,7 @@
README for the builds/amiga subdirectory.
-Copyright 2005-2015 by
+Copyright 2005-2018 by
Werner Lemberg and Detlef Würkner.
This file is part of the FreeType project, and may only be used, modified,
@@ -51,8 +51,8 @@
- ftdebug.o, an object module containing the standard version of the
debugging code which uses vprintf() and exit() (not pure).
- Debugging can be turned on in FT:include/config/ftoption.h and with
- FT_SetTraceLevel().
+ Debugging can be turned on in FT:include/freetype/config/ftoption.h
+ and with FT_SetTraceLevel().
- ftdebugpure.o, an object module containing the pure version of the
debugging code which uses KVPrintf() from lib:debug.lib and no
@@ -64,14 +64,15 @@
ftsystem.o would force ALL FreeType2 modules to be linked to your
program, I decided to use a different scheme: You must #include
FT:src/base/ftinit.c in your sourcecode and specify with #define
- statements which modules you need. See include/config/ftmodule.h.
+ statements which modules you need. See
+ include/freetype/config/ftmodule.h.
To use in your own programs:
- Insert the #define and #include statements from top of
- include/config/ftmodule.h in your source code and uncomment the
- #define statements for the FreeType2 modules you need.
+ include/freetype/config/ftmodule.h in your source code and
+ uncomment the #define statements for the FreeType2 modules you need.
- You can use either PARAMETERS=REGISTER or PARAMETERS=STACK for
calling the FreeType2 functions, because the link library and the
@@ -100,8 +101,8 @@
useful for the src directory).
- An example of how to replace/workaround a problematic include file
- is include/config/ftconfig.h; it changes a #define that would
- prevent SAS/C from generating XDEF's where it should do that and
+ is include/freetype/config/ftconfig.h; it changes a #define that
+ would prevent SAS/C from generating XDEF's where it should do that and
then includes the standard FreeType2 include file.
Local Variables:
diff --git a/builds/amiga/include/config/ftconfig.h b/builds/amiga/include/config/ftconfig.h
index 790eeec..0217e0e 100644
--- a/builds/amiga/include/config/ftconfig.h
+++ b/builds/amiga/include/config/ftconfig.h
@@ -4,7 +4,7 @@
/* */
/* Amiga-specific configuration file (specification only). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* Werner Lemberg and Detlef Würkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -34,9 +34,9 @@
/* Now include the original file */
#ifndef __MORPHOS__
#ifdef __SASC
-#include "FT:include/config/ftconfig.h"
+#include "FT:include/freetype/config/ftconfig.h"
#else
-#include "/FT/include/config/ftconfig.h"
+#include "/FT/include/freetype/config/ftconfig.h"
#endif
#else
/* We must define that, it seems that
@@ -45,7 +45,7 @@
* binaries from http://www.morphos.de)
*/
#define _LIBC_LIMITS_H_
-#include "/FT/include/config/ftconfig.h"
+#include "/FT/include/freetype/config/ftconfig.h"
#endif
/*
diff --git a/builds/amiga/include/config/ftmodule.h b/builds/amiga/include/config/ftmodule.h
index 77a66db..f8baab5 100644
--- a/builds/amiga/include/config/ftmodule.h
+++ b/builds/amiga/include/config/ftmodule.h
@@ -4,7 +4,7 @@
/* */
/* Amiga-specific FreeType module selection. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* Werner Lemberg and Detlef Würkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/builds/amiga/makefile b/builds/amiga/makefile
index bcb45b9..6a7700a 100644
--- a/builds/amiga/makefile
+++ b/builds/amiga/makefile
@@ -5,7 +5,7 @@
#
-# Copyright 2005-2015 by
+# Copyright 2005-2018 by
# Werner Lemberg and Detlef Würkner.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -43,7 +43,7 @@
#
# link your programs with libft2_ppc.a and either ftsystem.ppc.o or ftsystempure.ppc.o
# (and either ftdebug.ppc.o or ftdebugpure.ppc.o if you enabled FT_DEBUG_LEVEL_ERROR or
-# FT_DEBUG_LEVEL_TRACE in include/config/ftoption.h).
+# FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h).
all: libft2_ppc.a ftsystem.ppc.o ftsystempure.ppc.o
@@ -96,9 +96,6 @@
ftcid.ppc.o: $(FTSRC)/base/ftcid.c
$(CC) -c $(CFLAGS) -o $@ $<
-ftfntfmt.ppc.o: $(FTSRC)/base/ftfntfmt.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
ftfstype.ppc.o: $(FTSRC)/base/ftfstype.c
$(CC) -c $(CFLAGS) -o $@ $<
@@ -111,9 +108,6 @@
ftgxval.ppc.o: $(FTSRC)/base/ftgxval.c
$(CC) -c $(CFLAGS) -o $@ $<
-ftlcdfil.ppc.o: $(FTSRC)/base/ftlcdfil.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
ftmm.ppc.o: $(FTSRC)/base/ftmm.c
$(CC) -c $(CFLAGS) -o $@ $<
@@ -270,8 +264,8 @@
$(CC) -c $(CFLAGS) -o $@ $<
BASEPPC = ftbase.ppc.o ftbbox.ppc.o ftbdf.ppc.o ftbitmap.ppc.o ftcid.ppc.o \
- ftfntfmt.ppc.oftfstype.ppc.o ftgasp.ppc.o ftglyph.ppc.o \
- ftgxval.ppc.o ftlcdfil.ppc.o ftmm.ppc.o ftotval.ppc.o \
+ oftfstype.ppc.o ftgasp.ppc.o ftglyph.ppc.o \
+ ftgxval.ppc.o ftmm.ppc.o ftotval.ppc.o \
ftpatent.ppc.o ftpfr.ppc.o ftstroke.ppc.o ftsynth.ppc.o \
fttype1.ppc.o ftwinfnt.ppc.o
diff --git a/builds/amiga/makefile.os4 b/builds/amiga/makefile.os4
index 481fe59..0d340cf 100644
--- a/builds/amiga/makefile.os4
+++ b/builds/amiga/makefile.os4
@@ -4,7 +4,7 @@
#
-# Copyright 2005-2015 by
+# Copyright 2005-2018 by
# Werner Lemberg and Detlef Würkner.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -40,7 +40,7 @@
#
# link your programs with libft2_ppc.a and either ftsystem.ppc.o or ftsystempure.ppc.o
# (and either ftdebug.ppc.o or ftdebugpure.ppc.o if you enabled FT_DEBUG_LEVEL_ERROR or
-# FT_DEBUG_LEVEL_TRACE in include/config/ftoption.h).
+# FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h).
all: assign libft2_ppc.a ftsystem.ppc.o ftsystempure.ppc.o
@@ -99,9 +99,6 @@
ftdebugpure.ppc.o: src/base/ftdebug.c
$(CC) -c $(CFLAGS) -o $@ src/base/ftdebug.c
-ftfntfmt.ppc.o: FT:src/base/ftfntfmt.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftfntfmt.c
-
ftfstype.ppc.o: FT:src/base/ftfstype.c
$(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftfstype.c
@@ -114,9 +111,6 @@
ftgxval.ppc.o: FT:src/base/ftgxval.c
$(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftgxval.c
-ftlcdfil.ppc.o: FT:src/base/ftlcdfil.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftlcdfil.c
-
ftmm.ppc.o: FT:src/base/ftmm.c
$(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftmm.c
@@ -274,8 +268,8 @@
$(CC) -c $(CFLAGS) -o $@ /FT/src/otvalid/otvalid.c
BASE = ftbase.ppc.o ftbbox.ppc.o ftbdf.ppc.o ftbitmap.ppc.o ftcid.ppc.o \
- ftfntfmt.ppc.o ftfstype.ppc.o ftgasp.ppc.o ftglyph.ppc.o \
- ftgxval.ppc.o ftlcdfil.ppc.o ftmm.ppc.o ftotval.ppc.o \
+ ftfstype.ppc.o ftgasp.ppc.o ftglyph.ppc.o \
+ ftgxval.ppc.o ftmm.ppc.o ftotval.ppc.o \
ftpatent.ppc.o ftpfr.ppc.o ftstroke.ppc.o ftsynth.ppc.o \
fttype1.ppc.o ftwinfnt.ppc.o
diff --git a/builds/amiga/smakefile b/builds/amiga/smakefile
index 156beb2..f5de308 100644
--- a/builds/amiga/smakefile
+++ b/builds/amiga/smakefile
@@ -3,7 +3,7 @@
#
-# Copyright 2005-2015 by
+# Copyright 2005-2018 by
# Werner Lemberg and Detlef Würkner.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -40,10 +40,10 @@
#
# link your programs with ft2_680x0.lib and either ftsystem.o or ftsystempure.o
# (and either ftdebug.o or ftdebugpure.o if you enabled FT_DEBUG_LEVEL_ERROR or
-# FT_DEBUG_LEVEL_TRACE in include/config/ftoption.h).
+# FT_DEBUG_LEVEL_TRACE in include/freetype/config/ftoption.h).
-OBJBASE = ftbase.o ftbbox.o ftbdf.o ftbitmap.o ftcid.o ftfntfmt.o ftfstype.o \
- ftgasp.o ftglyph.o ftgxval.o ftlcdfil.o ftmm.o ftotval.o \
+OBJBASE = ftbase.o ftbbox.o ftbdf.o ftbitmap.o ftcid.o ftfstype.o \
+ ftgasp.o ftglyph.o ftgxval.o ftmm.o ftotval.o \
ftpatent.o ftpfr.o ftstroke.o ftsynth.o fttype1.o ftwinfnt.o
OBJSYSTEM = ftsystem.o ftsystempure.o
@@ -133,8 +133,6 @@
sc $(SCFLAGS) objname=$@ $<
ftcid.o: $(CORE)base/ftcid.c
sc $(SCFLAGS) objname=$@ $<
-ftfntfmt.o: $(CORE)base/ftfntfmt.c
- sc $(SCFLAGS) objname=$@ $<
ftfstype.o: $(CORE)base/ftfstype.c
sc $(SCFLAGS) objname=$@ $<
ftgasp.o: $(CORE)base/ftgasp.c
@@ -143,8 +141,6 @@
sc $(SCFLAGS) objname=$@ $<
ftgxval.o: $(CORE)base/ftgxval.c
sc $(SCFLAGS) objname=$@ $<
-ftlcdfil.o: $(CORE)base/ftlcdfil.c
- sc $(SCFLAGS) objname=$@ $<
ftmm.o: $(CORE)base/ftmm.c
sc $(SCFLAGS) objname=$@ $<
ftotval.o: $(CORE)base/ftotval.c
diff --git a/builds/amiga/src/base/ftdebug.c b/builds/amiga/src/base/ftdebug.c
index 891a597..f3ba48c 100644
--- a/builds/amiga/src/base/ftdebug.c
+++ b/builds/amiga/src/base/ftdebug.c
@@ -4,7 +4,7 @@
/* */
/* Debugging and logging component for amiga (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -176,7 +176,7 @@
/* the memory and stream components which are set to 7 and 5, */
/* respectively. */
/* */
- /* See the file <include/internal/fttrace.h> for details of the */
+ /* See the file `include/freetype/internal/fttrace.h' for details of the */
/* available toggle names. */
/* */
/* The level must be between 0 and 7; 0 means quiet (except for serious */
diff --git a/builds/amiga/src/base/ftsystem.c b/builds/amiga/src/base/ftsystem.c
index bb3ccfd..babaeeb 100644
--- a/builds/amiga/src/base/ftsystem.c
+++ b/builds/amiga/src/base/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* Amiga-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/builds/ansi/ansi-def.mk b/builds/ansi/ansi-def.mk
index 35b9f32..1484f96 100644
--- a/builds/ansi/ansi-def.mk
+++ b/builds/ansi/ansi-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/ansi/ansi.mk b/builds/ansi/ansi.mk
index 2816e14..c06732c 100644
--- a/builds/ansi/ansi.mk
+++ b/builds/ansi/ansi.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/atari/ATARI.H b/builds/atari/ATARI.H
index 9f78c92..4ddd2eb 100644
--- a/builds/atari/ATARI.H
+++ b/builds/atari/ATARI.H
@@ -1,4 +1,4 @@
-#if defined( __GXVALID_H__ )
+#if defined( GXVALID_H_ )
#pragma warn -aus /* too many unevaluated variables in gxvalid */
#endif
diff --git a/builds/atari/README.TXT b/builds/atari/README.TXT
index 04eec63..ffe6545 100644
--- a/builds/atari/README.TXT
+++ b/builds/atari/README.TXT
@@ -18,8 +18,8 @@
- The file `freetype2/include/Ft2build.h' must be patched as follows to
include ATARI.H:
- #ifndef __FT2_BUILD_GENERIC_H__
- #define __FT2_BUILD_GENERIC_H__
+ #ifndef FT2_BUILD_GENERIC_H_
+ #define FT2_BUILD_GENERIC_H_
#include "ATARI.H"
@@ -43,8 +43,8 @@
- In der Datei freetype2/include/Ft2build.h muss zu Beginn
ein #include "ATARI.H" wie folgt eingefgt werden:
- #ifndef __FT2_BUILD_GENERIC_H__
- #define __FT2_BUILD_GENERIC_H__
+ #ifndef FT2_BUILD_GENERIC_H_
+ #define FT2_BUILD_GENERIC_H_
#include "ATARI.H"
diff --git a/builds/beos/beos-def.mk b/builds/beos/beos-def.mk
index 5ddedc0..89c54dd 100644
--- a/builds/beos/beos-def.mk
+++ b/builds/beos/beos-def.mk
@@ -5,7 +5,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/beos/beos.mk b/builds/beos/beos.mk
index 6c7fca1..619ceaf 100644
--- a/builds/beos/beos.mk
+++ b/builds/beos/beos.mk
@@ -2,7 +2,7 @@
# FreeType 2 configuration rules for a BeOS system
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/beos/detect.mk b/builds/beos/detect.mk
index b23f94e..82f6205 100644
--- a/builds/beos/detect.mk
+++ b/builds/beos/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/cmake/FindHarfBuzz.cmake b/builds/cmake/FindHarfBuzz.cmake
new file mode 100644
index 0000000..ee0d52e
--- /dev/null
+++ b/builds/cmake/FindHarfBuzz.cmake
@@ -0,0 +1,81 @@
+# Copyright (c) 2012, Intel Corporation
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors may
+# be used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# Try to find Harfbuzz include and library directories.
+#
+# After successful discovery, this will set for inclusion where needed:
+# HARFBUZZ_INCLUDE_DIRS - containg the HarfBuzz headers
+# HARFBUZZ_LIBRARIES - containg the HarfBuzz library
+
+include(FindPkgConfig)
+pkg_check_modules(PC_HARFBUZZ QUIET harfbuzz)
+
+find_path(HARFBUZZ_INCLUDE_DIRS
+ NAMES hb.h
+ HINTS ${PC_HARFBUZZ_INCLUDEDIR}
+ ${PC_HARFBUZZ_INCLUDE_DIRS}
+ PATH_SUFFIXES harfbuzz
+)
+
+find_library(HARFBUZZ_LIBRARIES NAMES harfbuzz
+ HINTS ${PC_HARFBUZZ_LIBDIR}
+ ${PC_HARFBUZZ_LIBRARY_DIRS}
+)
+
+if (HARFBUZZ_INCLUDE_DIRS)
+ if (EXISTS "${HARFBUZZ_INCLUDE_DIRS}/hb-version.h")
+ file(READ "${HARFBUZZ_INCLUDE_DIRS}/hb-version.h" _harfbuzz_version_content)
+
+ string(REGEX MATCH "#define +HB_VERSION_STRING +\"([0-9]+\\.[0-9]+\\.[0-9]+)\"" _dummy "${_harfbuzz_version_content}")
+ set(HARFBUZZ_VERSION "${CMAKE_MATCH_1}")
+ endif ()
+endif ()
+
+if ("${harfbuzz_FIND_VERSION}" VERSION_GREATER "${HARFBUZZ_VERSION}")
+ message(FATAL_ERROR "Required version (" ${harfbuzz_FIND_VERSION} ") is higher than found version (" ${HARFBUZZ_VERSION} ")")
+endif ()
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+ harfbuzz
+ REQUIRED_VARS HARFBUZZ_INCLUDE_DIRS HARFBUZZ_LIBRARIES
+ VERSION_VAR HARFBUZZ_VERSION)
+
+mark_as_advanced(
+ HARFBUZZ_INCLUDE_DIRS
+ HARFBUZZ_LIBRARIES
+)
+
+# Allows easy linking as in
+# target_link_libraries(freetype PRIVATE Harfbuzz::Harfbuzz)
+if (NOT CMAKE_VERSION VERSION_LESS 3.1)
+ if (HARFBUZZ_FOUND AND NOT TARGET Harfbuzz::Harfbuzz)
+ add_library(Harfbuzz::Harfbuzz INTERFACE IMPORTED)
+ set_target_properties(
+ Harfbuzz::Harfbuzz PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${HARFBUZZ_INCLUDE_DIRS}")
+ endif ()
+endif ()
diff --git a/builds/cmake/iOS.cmake b/builds/cmake/iOS.cmake
index 7970f2b..c6da70c 100644
--- a/builds/cmake/iOS.cmake
+++ b/builds/cmake/iOS.cmake
@@ -1,6 +1,6 @@
# iOS.cmake
#
-# Copyright 2014-2015 by
+# Copyright 2014-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# Written by David Wimsey <david@wimsey.us>
@@ -85,11 +85,6 @@
DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
endif (CMAKE_UNAME)
-# force the compilers to gcc for iOS
-include(CMakeForceCompiler)
-CMAKE_FORCE_C_COMPILER(gcc gcc)
-CMAKE_FORCE_CXX_COMPILER(g++ g++)
-
# skip the platform compiler checks for cross compiling
set(CMAKE_CXX_COMPILER_WORKS TRUE)
set(CMAKE_C_COMPILER_WORKS TRUE)
diff --git a/builds/cmake/testbuild.sh b/builds/cmake/testbuild.sh
new file mode 100755
index 0000000..1fa3a18
--- /dev/null
+++ b/builds/cmake/testbuild.sh
@@ -0,0 +1,157 @@
+#!/bin/sh -e
+
+# Copyright 2015-2018 by
+# David Turner, Robert Wilhelm, and Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# This script tests the CMake build. Simply run
+#
+# builds/cmake/testbuild.sh
+#
+# or
+#
+# BUILD_SHARED_LIBS=1 builds/cmake/testbuild.sh
+#
+# The script:
+#
+# - builds the main CMakeLists.txt
+# - builds and runs a small test app in a separate build tree so
+# the config-module is tested, too
+#
+# Options (environment variables):
+#
+# - The variable BUILD_SHARED_LIBS will be forwarded to the CMake project
+# that builds the library.
+#
+
+
+# prepare temporary dir
+
+cd `dirname $0`/../..
+ftdir=`pwd`
+tmpdir=/tmp/freetype-cmake-testbuild
+rm -rf $tmpdir
+mkdir -p $tmpdir
+
+
+# build and install freetype
+
+if test -n "$BUILD_SHARED_LIBS"; then
+ bsl=-DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS
+else
+ bsl=-UBUILD_SHARED_LIBS
+fi
+
+build_opts="-DWITH_ZLIB=0 \
+ -DWITH_BZip2=0 \
+ -DWITH_PNG=0 \
+ -DWITH_HarfBuzz=0 \
+ $bsl \
+ -DCMAKE_INSTALL_PREFIX=$tmpdir/out"
+
+(set -x; cmake -H$ftdir \
+ -B$tmpdir/ftb \
+ -DCMAKE_BUILD_TYPE=Debug \
+ $build_opts)
+(set -x; cmake --build $tmpdir/ftb \
+ --config Debug \
+ --target install)
+
+(set -x; cmake $tmpdir/ftb \
+ -DCMAKE_BUILD_TYPE=Release)
+(set -x; cmake --build $tmpdir/ftb \
+ --config Release \
+ --target install \
+ --clean-first)
+
+
+# create test project CMakeLists.txt
+
+cat >$tmpdir/CMakeLists.txt << END
+cmake_minimum_required(VERSION 2.6)
+project(freetype-cmake-testbuild)
+
+find_package(Freetype REQUIRED CONFIG)
+
+add_executable(freetype-cmake-test main.c)
+target_link_libraries(freetype-cmake-test freetype)
+
+enable_testing()
+add_test(freetype-cmake-test freetype-cmake-test)
+END
+
+
+# create test project main.c
+
+cat >$tmpdir/main.c << END
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+
+FT_Library library;
+
+
+int main(int argc,
+ char*argv[])
+{
+ FT_Error error;
+ FT_Int major = 0;
+ FT_Int minor = 0;
+ FT_Int patch = 0;
+
+ error = FT_Init_FreeType(&library);
+ if (error)
+ return EXIT_FAILURE;
+
+ FT_Library_Version(library, &major, &minor, &patch);
+ if (major != FREETYPE_MAJOR
+ || minor != FREETYPE_MINOR
+ || patch != FREETYPE_PATCH)
+ return EXIT_FAILURE;
+
+ printf("FT_Library_Version: %d.%d.%d\n", major, minor, patch);
+
+ error = FT_Done_FreeType(library);
+ if (error)
+ return EXIT_FAILURE;
+
+ return EXIT_SUCCESS;
+}
+END
+
+
+# build and test
+
+mkdir -p $tmpdir/tb
+cd $tmpdir/tb
+
+LD_LIBRARY_PATH=$tmpdir/out/lib:$LD_LIBRARY_PATH
+DYLD_LIBRARY_PATH=$tmpdir/out/lib:$DYLD_LIBRARY_PATH
+export LD_LIBRARY_PATH
+export DYLD_LIBRARY_PATH
+
+(set -x; cmake $tmpdir \
+ -DCMAKE_BUILD_TYPE=Debug \
+ -DCMAKE_PREFIX_PATH=$tmpdir/out)
+(set -x; cmake --build . \
+ --config Debug)
+(set -x; ctest -V -C Debug)
+
+(set -x; cmake . \
+ -DCMAKE_BUILD_TYPE=Release)
+(set -x; cmake --build . \
+ --config Release \
+ --clean-first)
+(set -x; ctest -V -C Release)
+
+rm -rf $tmpdir
+
+# EOF
diff --git a/builds/compiler/ansi-cc.mk b/builds/compiler/ansi-cc.mk
index c9f6608..99fe8cb 100644
--- a/builds/compiler/ansi-cc.mk
+++ b/builds/compiler/ansi-cc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/bcc-dev.mk b/builds/compiler/bcc-dev.mk
index 8ab957e..8d67fa1 100644
--- a/builds/compiler/bcc-dev.mk
+++ b/builds/compiler/bcc-dev.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/bcc.mk b/builds/compiler/bcc.mk
index f383840..02d4833 100644
--- a/builds/compiler/bcc.mk
+++ b/builds/compiler/bcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/emx.mk b/builds/compiler/emx.mk
index 62fe35d..2926b11 100644
--- a/builds/compiler/emx.mk
+++ b/builds/compiler/emx.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2015 by
+# Copyright 2003-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/gcc-dev.mk b/builds/compiler/gcc-dev.mk
index fd789af..48d2848 100644
--- a/builds/compiler/gcc-dev.mk
+++ b/builds/compiler/gcc-dev.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/gcc.mk b/builds/compiler/gcc.mk
index 0970d1c..9c77239 100644
--- a/builds/compiler/gcc.mk
+++ b/builds/compiler/gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/intelc.mk b/builds/compiler/intelc.mk
index 19e5962..e9236d3 100644
--- a/builds/compiler/intelc.mk
+++ b/builds/compiler/intelc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/unix-lcc.mk b/builds/compiler/unix-lcc.mk
index ebe3306..09fffeb 100644
--- a/builds/compiler/unix-lcc.mk
+++ b/builds/compiler/unix-lcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/visualage.mk b/builds/compiler/visualage.mk
index db997fa..10299da 100644
--- a/builds/compiler/visualage.mk
+++ b/builds/compiler/visualage.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/visualc.mk b/builds/compiler/visualc.mk
index 900c8be..74f498b 100644
--- a/builds/compiler/visualc.mk
+++ b/builds/compiler/visualc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/watcom.mk b/builds/compiler/watcom.mk
index f83425e..e455922 100644
--- a/builds/compiler/watcom.mk
+++ b/builds/compiler/watcom.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/win-lcc.mk b/builds/compiler/win-lcc.mk
index 9e4f79d..1356c1c 100644
--- a/builds/compiler/win-lcc.mk
+++ b/builds/compiler/win-lcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/detect.mk b/builds/detect.mk
index 4b789d3..eb7f797 100644
--- a/builds/detect.mk
+++ b/builds/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -101,54 +101,28 @@
.PHONY: setup
endif
-# The following targets are equivalent, with the exception that they use
-# a slightly different syntax for the `echo' command.
+# Flash out and copy rules.
#
-# std_setup: defined for most (i.e. Unix-like) platforms
-# dos_setup: defined for Dos-ish platforms like Dos, Windows & OS/2
-#
-.PHONY: std_setup dos_setup
+.PHONY: std_setup
std_setup:
- @echo ""
- @echo "$(PROJECT_TITLE) build system -- automatic system detection"
- @echo ""
- @echo "The following settings are used:"
- @echo ""
- @echo " platform $(PLATFORM)"
- @echo " compiler $(CC)"
- @echo " configuration directory $(BUILD_DIR)"
- @echo " configuration rules $(CONFIG_RULES)"
- @echo ""
- @echo "If this does not correspond to your system or settings please remove the file"
- @echo "\`$(CONFIG_MK)' from this directory then read the INSTALL file for help."
- @echo ""
- @echo "Otherwise, simply type \`$(MAKE)' again to build the library,"
- @echo "or \`$(MAKE) refdoc' to build the API reference (this needs python >= 2.6)."
- @echo ""
- @$(COPY) $(CONFIG_RULES) $(CONFIG_MK)
-
-
-# Special case for Dos, Windows, OS/2, where echo "" doesn't work correctly!
-#
-dos_setup:
- @type builds$(SEP)newline
- @echo $(PROJECT_TITLE) build system -- automatic system detection
- @type builds$(SEP)newline
- @echo The following settings are used:
- @type builds$(SEP)newline
- @echo platformÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$(PLATFORM)
- @echo compilerÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$(CC)
- @echo configuration directoryÿÿÿÿÿÿ$(subst /,$(SEP),$(BUILD_DIR))
- @echo configuration rulesÿÿÿÿÿÿÿÿÿÿ$(subst /,$(SEP),$(CONFIG_RULES))
- @type builds$(SEP)newline
- @echo If this does not correspond to your system or settings please remove the file
- @echo '$(CONFIG_MK)' from this directory then read the INSTALL file for help.
- @type builds$(SEP)newline
- @echo Otherwise, simply type 'make' again to build the library.
- @echo or 'make refdoc' to build the API reference (this needs python >= 2.6).
- @type builds$(SEP)newline
- @$(COPY) $(subst /,$(SEP),$(CONFIG_RULES) $(CONFIG_MK)) > nul
+ $(info )
+ $(info $(PROJECT_TITLE) build system -- automatic system detection)
+ $(info )
+ $(info The following settings are used:)
+ $(info )
+ $(info $(empty) platform $(PLATFORM))
+ $(info $(empty) compiler $(CC))
+ $(info $(empty) configuration directory $(subst /,$(SEP),$(BUILD_DIR)))
+ $(info $(empty) configuration rules $(subst /,$(SEP),$(CONFIG_RULES)))
+ $(info )
+ $(info If this does not correspond to your system or settings please remove the file)
+ $(info `$(CONFIG_MK)' from this directory then read the INSTALL file for help.)
+ $(info )
+ $(info Otherwise, simply type `$(MAKE)' again to build the library,)
+ $(info or `$(MAKE) refdoc' to build the API reference (this needs python >= 2.6).)
+ $(info )
+ @$(COPY) $(subst /,$(SEP),$(CONFIG_RULES) $(CONFIG_MK))
# EOF
diff --git a/builds/dos/detect.mk b/builds/dos/detect.mk
index e49ba98..0201f7b 100644
--- a/builds/dos/detect.mk
+++ b/builds/dos/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -133,7 +133,7 @@
COPY := copy
endif # test NT
- setup: dos_setup
+ setup: std_setup
endif
endif # test PLATFORM dos
diff --git a/builds/dos/dos-def.mk b/builds/dos/dos-def.mk
index ac0be5e..cb1154d 100644
--- a/builds/dos/dos-def.mk
+++ b/builds/dos/dos-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/dos/dos-emx.mk b/builds/dos/dos-emx.mk
index c421674..dedcc3f 100644
--- a/builds/dos/dos-emx.mk
+++ b/builds/dos/dos-emx.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2015 by
+# Copyright 2003-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/dos/dos-gcc.mk b/builds/dos/dos-gcc.mk
index 991fb64..53099ab 100644
--- a/builds/dos/dos-gcc.mk
+++ b/builds/dos/dos-gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/dos/dos-wat.mk b/builds/dos/dos-wat.mk
index 0c34a0d..1bd00e7 100644
--- a/builds/dos/dos-wat.mk
+++ b/builds/dos/dos-wat.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2015 by
+# Copyright 2003-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/exports.mk b/builds/exports.mk
index 687ced7..59fe31a 100644
--- a/builds/exports.mk
+++ b/builds/exports.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2005-2015 by
+# Copyright 2005-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -40,7 +40,11 @@
endif
# The list of public headers we're going to parse.
- PUBLIC_HEADERS := $(wildcard $(PUBLIC_DIR)/*.h)
+ PUBLIC_HEADERS := $(filter-out $(PUBLIC_DIR)/ftmac.h, \
+ $(wildcard $(PUBLIC_DIR)/*.h))
+ ifneq ($(ftmac_c),)
+ PUBLIC_HEADERS += $(PUBLIC_DIR)/ftmac.h
+ endif
# The `apinames' source and executable. We use $E_BUILD as the host
# executable suffix, which *includes* the final dot.
diff --git a/builds/freetype.mk b/builds/freetype.mk
index 5ea13f0..6f68a0f 100644
--- a/builds/freetype.mk
+++ b/builds/freetype.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -97,7 +97,7 @@
# Other derived directories.
#
-PUBLIC_DIR := $(TOP_DIR)/include
+PUBLIC_DIR := $(TOP_DIR)/include/freetype
INTERNAL_DIR := $(PUBLIC_DIR)/internal
SERVICES_DIR := $(INTERNAL_DIR)/services
CONFIG_DIR := $(PUBLIC_DIR)/config
@@ -153,6 +153,9 @@
ifneq ($(wildcard $(OBJ_DIR)/ftoption.h),)
FTOPTION_H := $(OBJ_DIR)/ftoption.h
FTOPTION_FLAG := $DFT_CONFIG_OPTIONS_H="<ftoption.h>"
+else ifneq ($(wildcard $(BUILD_DIR)/ftoption.h),)
+ FTOPTION_H := $(BUILD_DIR)/ftoption.h
+ FTOPTION_FLAG := $DFT_CONFIG_OPTIONS_H="<ftoption.h>"
endif
# `CPPFLAGS' might be specified by the user in the environment.
@@ -245,6 +248,22 @@
$(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
+# ftver component
+#
+# The VERSIONINFO resource `ftver.rc' contains version and copyright
+# to be compiled by windres and tagged into DLL usually.
+#
+ifneq ($(RC),)
+ FTVER_SRC := $(BASE_DIR)/ftver.rc
+ FTVER_OBJ := $(OBJ_DIR)/ftver.$O
+
+ OBJECTS_LIST += $(FTVER_OBJ)
+
+ $(FTVER_OBJ): $(FTVER_SRC)
+ $(RC) -o $@ $<
+endif
+
+
# All FreeType library objects.
#
OBJ_M := $(BASE_OBJ_M) $(BASE_EXT_OBJ) $(DRV_OBJS_M)
@@ -326,10 +345,9 @@
.PHONY: clean distclean
-# The `config.mk' file must define `clean_freetype' and
-# `distclean_freetype'. Implementations may use to relay these to either
-# the `std' or `dos' versions from above, or simply provide their own
-# implementation.
+# The `config.mk' file must define `clean_project' and `distclean_project'.
+# Implementations may use to relay these to either the `std' or `dos'
+# versions from above, or simply provide their own implementation.
#
clean: clean_project
distclean: distclean_project remove_config_mk remove_ftmodule_h
diff --git a/builds/link_dos.mk b/builds/link_dos.mk
index 694845b..3b0e8da 100644
--- a/builds/link_dos.mk
+++ b/builds/link_dos.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/link_std.mk b/builds/link_std.mk
index 886b2e6..8ba5e64 100644
--- a/builds/link_std.mk
+++ b/builds/link_std.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/mac/FreeType.m68k_cfm.make.txt b/builds/mac/FreeType.m68k_cfm.make.txt
index c0a55f5..b74565f 100644
--- a/builds/mac/FreeType.m68k_cfm.make.txt
+++ b/builds/mac/FreeType.m68k_cfm.make.txt
@@ -38,7 +38,6 @@
:src:base:ftbdf.c \xB6
:src:base:ftbitmap.c \xB6
:src:base:ftdebug.c \xB6
- :src:base:ftfntfmt.c \xB6
:src:base:ftfstype.c \xB6
:src:base:ftglyph.c \xB6
:src:base:ftgxval.c \xB6
@@ -83,7 +82,6 @@
"{ObjDir}ftbdf.c.o" \xB6
"{ObjDir}ftbitmap.c.o" \xB6
"{ObjDir}ftdebug.c.o" \xB6
- "{ObjDir}ftfntfmt.c.o" \xB6
"{ObjDir}ftfstype.c.o" \xB6
"{ObjDir}ftglyph.c.o" \xB6
"{ObjDir}ftgxval.c.o" \xB6
@@ -161,7 +159,6 @@
"{ObjDir}ftbdf.c.o" \xC4 :src:base:ftbdf.c
"{ObjDir}ftbitmap.c.o" \xC4 :src:base:ftbitmap.c
"{ObjDir}ftdebug.c.o" \xC4 :src:base:ftdebug.c
-"{ObjDir}ftfntfmt.c.o" \xC4 :src:base:ftfntfmt.c
"{ObjDir}ftfstype.c.o" \xC4 :src:base:ftfstype.c
"{ObjDir}ftglyph.c.o" \xC4 :src:base:ftglyph.c
"{ObjDir}ftgxval.c.o" \xC4 :src:base:ftgxval.c
diff --git a/builds/mac/FreeType.m68k_far.make.txt b/builds/mac/FreeType.m68k_far.make.txt
index e9b7f6f..d880ddb 100644
--- a/builds/mac/FreeType.m68k_far.make.txt
+++ b/builds/mac/FreeType.m68k_far.make.txt
@@ -37,7 +37,6 @@
:src:base:ftbdf.c \xB6
:src:base:ftbitmap.c \xB6
:src:base:ftdebug.c \xB6
- :src:base:ftfntfmt.c \xB6
:src:base:ftfstype.c \xB6
:src:base:ftglyph.c \xB6
:src:base:ftgxval.c \xB6
@@ -82,7 +81,6 @@
"{ObjDir}ftbdf.c.o" \xB6
"{ObjDir}ftbitmap.c.o" \xB6
"{ObjDir}ftdebug.c.o" \xB6
- "{ObjDir}ftfntfmt.c.o" \xB6
"{ObjDir}ftfstype.c.o" \xB6
"{ObjDir}ftglyph.c.o" \xB6
"{ObjDir}ftgxval.c.o" \xB6
@@ -160,7 +158,6 @@
"{ObjDir}ftbdf.c.o" \xC4 :src:base:ftbdf.c
"{ObjDir}ftbitmap.c.o" \xC4 :src:base:ftbitmap.c
"{ObjDir}ftdebug.c.o" \xC4 :src:base:ftdebug.c
-"{ObjDir}ftfntfmt.c.o" \xC4 :src:base:ftfntfmt.c
"{ObjDir}ftfstype.c.o" \xC4 :src:base:ftfstype.c
"{ObjDir}ftglyph.c.o" \xC4 :src:base:ftglyph.c
"{ObjDir}ftgxval.c.o" \xC4 :src:base:ftgxval.c
diff --git a/builds/mac/FreeType.ppc_carbon.make.txt b/builds/mac/FreeType.ppc_carbon.make.txt
index 9eb1dac..1fa8c30 100644
--- a/builds/mac/FreeType.ppc_carbon.make.txt
+++ b/builds/mac/FreeType.ppc_carbon.make.txt
@@ -38,7 +38,6 @@
:src:base:ftbdf.c \xB6
:src:base:ftbitmap.c \xB6
:src:base:ftdebug.c \xB6
- :src:base:ftfntfmt.c \xB6
:src:base:ftfstype.c \xB6
:src:base:ftglyph.c \xB6
:src:base:ftgxval.c \xB6
@@ -83,7 +82,6 @@
"{ObjDir}ftbdf.c.x" \xB6
"{ObjDir}ftbitmap.c.x" \xB6
"{ObjDir}ftdebug.c.x" \xB6
- "{ObjDir}ftfntfmt.c.x" \xB6
"{ObjDir}ftfstype.c.x" \xB6
"{ObjDir}ftglyph.c.x" \xB6
"{ObjDir}ftgxval.c.x" \xB6
@@ -164,7 +162,6 @@
"{ObjDir}ftbdf.c.x" \xC4 :src:base:ftbdf.c
"{ObjDir}ftbitmap.c.x" \xC4 :src:base:ftbitmap.c
"{ObjDir}ftdebug.c.x" \xC4 :src:base:ftdebug.c
-"{ObjDir}ftfntfmt.c.x" \xC4 :src:base:ftfntfmt.c
"{ObjDir}ftfstype.c.x" \xC4 :src:base:ftfstype.c
"{ObjDir}ftglyph.c.x" \xC4 :src:base:ftglyph.c
"{ObjDir}ftgxval.c.x" \xC4 :src:base:ftgxval.c
diff --git a/builds/mac/FreeType.ppc_classic.make.txt b/builds/mac/FreeType.ppc_classic.make.txt
index 0627eea..2550190 100644
--- a/builds/mac/FreeType.ppc_classic.make.txt
+++ b/builds/mac/FreeType.ppc_classic.make.txt
@@ -38,7 +38,6 @@
:src:base:ftbdf.c \xB6
:src:base:ftbitmap.c \xB6
:src:base:ftdebug.c \xB6
- :src:base:ftfntfmt.c \xB6
:src:base:ftfstype.c \xB6
:src:base:ftglyph.c \xB6
:src:base:ftgxval.c \xB6
@@ -83,7 +82,6 @@
"{ObjDir}ftbdf.c.x" \xB6
"{ObjDir}ftbitmap.c.x" \xB6
"{ObjDir}ftdebug.c.x" \xB6
- "{ObjDir}ftfntfmt.c.x" \xB6
"{ObjDir}ftfstype.c.x" \xB6
"{ObjDir}ftglyph.c.x" \xB6
"{ObjDir}ftgxval.c.x" \xB6
@@ -164,7 +162,6 @@
"{ObjDir}ftbdf.c.x" \xC4 :src:base:ftbdf.c
"{ObjDir}ftbitmap.c.x" \xC4 :src:base:ftbitmap.c
"{ObjDir}ftdebug.c.x" \xC4 :src:base:ftdebug.c
-"{ObjDir}ftfntfmt.c.x" \xC4 :src:base:ftfntfmt.c
"{ObjDir}ftfstype.c.x" \xC4 :src:base:ftfstype.c
"{ObjDir}ftglyph.c.x" \xC4 :src:base:ftglyph.c
"{ObjDir}ftgxval.c.x" \xC4 :src:base:ftgxval.c
diff --git a/builds/mac/ftmac.c b/builds/mac/ftmac.c
index 7e2f292..c45546c 100644
--- a/builds/mac/ftmac.c
+++ b/builds/mac/ftmac.c
@@ -5,7 +5,7 @@
/* Mac FOND support. Written by just@letterror.com. */
/* Heavily Fixed by mpsuzuki, George Williams and Sean McBride */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -940,7 +940,7 @@
{
err = lookup_lwfn_by_fond( pathname, lwfn_file_name,
buff, sizeof ( buff ) );
- if ( FT_Err_Ok == err )
+ if ( !err )
have_lwfn = 1;
}
@@ -1217,7 +1217,7 @@
}
CloseResFile( res_ref );
- if ( FT_Err_Ok == error && NULL != aface )
+ if ( !error && aface )
(*aface)->num_faces = num_faces_in_res;
return error;
}
@@ -1279,7 +1279,7 @@
error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
path_lwfn, sizeof ( path_lwfn ) );
- if ( FT_Err_Ok == error )
+ if ( !error )
have_lwfn = 1;
}
@@ -1315,7 +1315,7 @@
error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
path_lwfn, sizeof ( path_lwfn ) );
- if ( FT_Err_Ok == error )
+ if ( !error )
have_lwfn = 1;
}
@@ -1332,7 +1332,7 @@
error = FT_ERR( Unknown_File_Format );
found_no_lwfn_file:
- if ( have_sfnt && FT_Err_Ok != error )
+ if ( have_sfnt && error )
error = FT_New_Face_From_SFNT( library,
sfnt_id,
face_index,
@@ -1363,7 +1363,7 @@
/* if it works, fine. */
error = FT_New_Face_From_Suitcase( library, pathname, face_index, aface );
- if ( error == 0 )
+ if ( !error )
return error;
/* let it fall through to normal loader (.ttf, .otf, etc.); */
@@ -1403,7 +1403,7 @@
/* try resourcefork based font: LWFN, FFIL */
error = FT_New_Face_From_Resource( library, (UInt8 *)pathname,
face_index, aface );
- if ( error != 0 || *aface != NULL )
+ if ( error || *aface )
return error;
/* let it fall through to normal loader (.ttf, .otf, etc.) */
@@ -1423,7 +1423,7 @@
/* accepts an FSRef instead of a path. */
/* */
/* This function is deprecated because Carbon data types (FSRef) */
- /* are not cross-platform, and thus not suitable for the freetype API. */
+ /* are not cross-platform, and thus not suitable for the FreeType API. */
FT_EXPORT_DEF( FT_Error )
FT_New_Face_From_FSRef( FT_Library library,
const FSRef* ref,
@@ -1458,7 +1458,7 @@
error = FT_ERR( Cannot_Open_Resource );
error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
- if ( error != 0 || *aface != NULL )
+ if ( error || *aface )
return error;
/* fallback to datafork font */
@@ -1481,7 +1481,7 @@
/* accepts an FSSpec instead of a path. */
/* */
/* This function is deprecated because Carbon data types (FSSpec) */
- /* are not cross-platform, and thus not suitable for the freetype API. */
+ /* are not cross-platform, and thus not suitable for the FreeType API. */
FT_EXPORT_DEF( FT_Error )
FT_New_Face_From_FSSpec( FT_Library library,
const FSSpec* spec,
@@ -1515,7 +1515,7 @@
error = FT_ERR( Cannot_Open_Resource );
error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
- if ( error != 0 || *aface != NULL )
+ if ( error || *aface )
return error;
/* fallback to datafork font */
diff --git a/builds/modules.mk b/builds/modules.mk
index 0b8b0c1..9a7a4a0 100644
--- a/builds/modules.mk
+++ b/builds/modules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -41,7 +41,7 @@
define FTMODULE_H_INIT
$(REMOVE_MODULE)
-@-echo Generating modules list in $(FTMODULE_H)...
+$(info Generating modules list in $(FTMODULE_H)...)
$(OPEN_MODULE)/* This is a generated file. */$(CLOSE_MODULE)
endef
@@ -56,7 +56,7 @@
define FTMODULE_H_DONE
$(OPEN_MODULE)/* EOF */$(CLOSE_MODULE)
-@echo done.
+$(info done.)
endef
diff --git a/builds/newline b/builds/newline
deleted file mode 100644
index 8b13789..0000000
--- a/builds/newline
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/builds/os2/detect.mk b/builds/os2/detect.mk
index fde9327..aaf7848 100644
--- a/builds/os2/detect.mk
+++ b/builds/os2/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -65,7 +65,7 @@
.PHONY: devel
endif
- setup: dos_setup
+ setup: std_setup
endif # test PLATFORM os2
diff --git a/builds/os2/os2-def.mk b/builds/os2/os2-def.mk
index 691036f..7ad1ffb 100644
--- a/builds/os2/os2-def.mk
+++ b/builds/os2/os2-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/os2/os2-dev.mk b/builds/os2/os2-dev.mk
index eacf58f..505a754 100644
--- a/builds/os2/os2-dev.mk
+++ b/builds/os2/os2-dev.mk
@@ -5,7 +5,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/os2/os2-gcc.mk b/builds/os2/os2-gcc.mk
index 8390a36..65026b1 100644
--- a/builds/os2/os2-gcc.mk
+++ b/builds/os2/os2-gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/symbian/bld.inf b/builds/symbian/bld.inf
index d3637f2..9c6d8dc 100644
--- a/builds/symbian/bld.inf
+++ b/builds/symbian/bld.inf
@@ -2,7 +2,7 @@
// FreeType 2 project for the symbian platform
//
-// Copyright 2008-2015 by
+// Copyright 2008-2018 by
// David Turner, Robert Wilhelm, and Werner Lemberg.
//
// This file is part of the FreeType project, and may only be used, modified,
@@ -18,49 +18,55 @@
freetype.mmp
PRJ_EXPORTS
-../../include/ft2build.h
-../../include/config/ftconfig.h config/ftconfig.h
-../../include/config/ftheader.h config/ftheader.h
-../../include/config/ftmodule.h config/ftmodule.h
-../../include/config/ftoption.h config/ftoption.h
-../../include/config/ftstdlib.h config/ftstdlib.h
-../../include/freetype.h freetype.h
-../../include/ftbbox.h ftbbox.h
-../../include/ftbdf.h ftbdf.h
-../../include/ftbitmap.h ftbitmap.h
-../../include/ftcache.h ftcache.h
-../../include/ftcid.h ftcid.h
-../../include/fterrdef.h fterrdef.h
-../../include/fterrors.h fterrors.h
-../../include/ftfntfmt.h ftfntfmt.h
-../../include/ftgasp.h ftgasp.h
-../../include/ftglyph.h ftglyph.h
-../../include/ftgxval.h ftgxval.h
-../../include/ftgzip.h ftgzip.h
-../../include/ftbzip2.h ftbzip2.h
-../../include/ftimage.h ftimage.h
-../../include/ftincrem.h ftincrem.h
-../../include/ftlcdfil.h ftlcdfil.h
-../../include/ftlist.h ftlist.h
-../../include/ftlzw.h ftlzw.h
-../../include/ftmac.h ftmac.h
-../../include/ftmm.h ftmm.h
-../../include/ftmodapi.h ftmodapi.h
-../../include/ftmoderr.h ftmoderr.h
-../../include/ftotval.h ftotval.h
-../../include/ftoutln.h ftoutln.h
-../../include/ftpfr.h ftpfr.h
-../../include/ftrender.h ftrender.h
-../../include/ftsizes.h ftsizes.h
-../../include/ftsnames.h ftsnames.h
-../../include/ftstroke.h ftstroke.h
-../../include/ftsynth.h ftsynth.h
-../../include/ftsystem.h ftsystem.h
-../../include/fttrigon.h fttrigon.h
-../../include/fttypes.h fttypes.h
-../../include/ftwinfnt.h ftwinfnt.h
-../../include/t1tables.h t1tables.h
-../../include/ttnameid.h ttnameid.h
-../../include/tttables.h tttables.h
-../../include/tttags.h tttags.h
-../../include/ttunpat.h ttunpat.h
+../../include/freetype/ft2build.h
+../../include/freetype/config/ftconfig.h config/ftconfig.h
+../../include/freetype/config/ftheader.h config/ftheader.h
+../../include/freetype/config/ftmodule.h config/ftmodule.h
+../../include/freetype/config/ftoption.h config/ftoption.h
+../../include/freetype/config/ftstdlib.h config/ftstdlib.h
+../../include/freetype/freetype.h freetype.h
+../../include/freetype/ftadvanc.h ftadvanc.h
+../../include/freetype/ftautoh.h ftautoh.h
+../../include/freetype/ftbbox.h ftbbox.h
+../../include/freetype/ftbdf.h ftbdf.h
+../../include/freetype/ftbitmap.h ftbitmap.h
+../../include/freetype/ftbzip2.h ftbzip2.h
+../../include/freetype/ftcache.h ftcache.h
+../../include/freetype/ftcffdrv.h ftcffdrv.h
+../../include/freetype/ftcid.h ftcid.h
+../../include/freetype/fterrdef.h fterrdef.h
+../../include/freetype/fterrors.h fterrors.h
+../../include/freetype/ftfntfmt.h ftfntfmt.h
+../../include/freetype/ftgasp.h ftgasp.h
+../../include/freetype/ftglyph.h ftglyph.h
+../../include/freetype/ftgxval.h ftgxval.h
+../../include/freetype/ftgzip.h ftgzip.h
+../../include/freetype/ftimage.h ftimage.h
+../../include/freetype/ftincrem.h ftincrem.h
+../../include/freetype/ftlcdfil.h ftlcdfil.h
+../../include/freetype/ftlist.h ftlist.h
+../../include/freetype/ftlzw.h ftlzw.h
+../../include/freetype/ftmac.h ftmac.h
+../../include/freetype/ftmm.h ftmm.h
+../../include/freetype/ftmodapi.h ftmodapi.h
+../../include/freetype/ftmoderr.h ftmoderr.h
+../../include/freetype/ftotval.h ftotval.h
+../../include/freetype/ftoutln.h ftoutln.h
+../../include/freetype/ftparams.h ftparams.h
+../../include/freetype/ftpcfdrv.h ftpcfdrv.h
+../../include/freetype/ftpfr.h ftpfr.h
+../../include/freetype/ftrender.h ftrender.h
+../../include/freetype/ftsizes.h ftsizes.h
+../../include/freetype/ftsnames.h ftsnames.h
+../../include/freetype/ftstroke.h ftstroke.h
+../../include/freetype/ftsynth.h ftsynth.h
+../../include/freetype/ftsystem.h ftsystem.h
+../../include/freetype/ftt1drv.h ftt1drv.h
+../../include/freetype/fttrigon.h fttrigon.h
+../../include/freetype/ftttdrv.h ftttdrv.h
+../../include/freetype/fttypes.h fttypes.h
+../../include/freetype/ftwinfnt.h ftwinfnt.h
+../../include/freetype/t1tables.h t1tables.h
+../../include/freetype/ttnameid.h ttnameid.h
+../../include/freetype/tttables.h tttables.h
+../../include/freetype/tttags.h tttags.h
diff --git a/builds/symbian/freetype.mmp b/builds/symbian/freetype.mmp
index b7691f0..4e4a041 100644
--- a/builds/symbian/freetype.mmp
+++ b/builds/symbian/freetype.mmp
@@ -2,7 +2,7 @@
// FreeType 2 makefile for the symbian platform
//
-// Copyright 2008-2015 by
+// Copyright 2008-2018 by
// David Turner, Robert Wilhelm, and Werner Lemberg.
//
// This file is part of the FreeType project, and may only be used, modified,
@@ -28,13 +28,11 @@
source ftbdf.c
source ftbitmap.c
source ftcid.c
-source ftfntfmt.c
source ftfstype.c
source ftgasp.c
source ftglyph.c
source ftgxval.c
source ftinit.c
-source ftlcdfil.c
source ftmm.c
source ftotval.c
source ftpatent.c
@@ -49,6 +47,10 @@
source bdf.c
+sourcepath ..\..\src\bzip2
+
+source ftbzip2.c
+
sourcepath ..\..\src\cache
source ftcache.c
@@ -65,10 +67,6 @@
source ftgzip.c
-sourcepath ..\..\src\bzip2
-
-source ftbzip2.c
-
sourcepath ..\..\src\lzw
source ftlzw.c
@@ -126,12 +124,12 @@
systeminclude \epoc32\include\stdapis
userinclude ..\..\src\autofit
userinclude ..\..\src\bdf
+userinclude ..\..\src\bzip2
userinclude ..\..\src\cache
userinclude ..\..\src\cff
userinclude ..\..\src\cid
userinclude ..\..\src\gxvalid
userinclude ..\..\src\gzip
-userinclude ..\..\src\bzip2
userinclude ..\..\src\lzw
userinclude ..\..\src\otvalid
userinclude ..\..\src\pcf
diff --git a/builds/toplevel.mk b/builds/toplevel.mk
index 9fe364d..7ce0ed8 100644
--- a/builds/toplevel.mk
+++ b/builds/toplevel.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -172,7 +172,8 @@
# get FreeType version string, using a
# poor man's `sed' emulation with make's built-in string functions
#
-work := $(strip $(shell $(CAT) $(TOP_DIR)/include/freetype.h))
+work := $(strip $(shell $(CAT) \
+ $(subst /,$(SEP),$(TOP_DIR)/include/freetype/freetype.h)))
work := $(subst |,x,$(work))
work := $(subst $(space),|,$(work))
work := $(subst \#define|FREETYPE_MAJOR|,$(space),$(work))
diff --git a/builds/unix/.gitignore b/builds/unix/.gitignore
index e4e0a12..f89b226 100644
--- a/builds/unix/.gitignore
+++ b/builds/unix/.gitignore
@@ -10,6 +10,7 @@
freetype2.pc
freetype-config
ftconfig.h
+ftoption.h
install-sh
libtool
ltmain.sh
diff --git a/builds/unix/configure.raw b/builds/unix/configure.raw
index b828bf0..baab79d 100644
--- a/builds/unix/configure.raw
+++ b/builds/unix/configure.raw
@@ -2,7 +2,7 @@
#
# Process this file with autoconf to produce a configure script.
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -15,9 +15,9 @@
AC_CONFIG_SRCDIR([ftconfig.in])
-# Don't forget to update docs/VERSION.DLL!
+# Don't forget to update `docs/VERSIONS.TXT'!
-version_info='18:0:12'
+version_info='22:1:16'
AC_SUBST([version_info])
ft_version=`echo $version_info | tr : .`
AC_SUBST([ft_version])
@@ -37,6 +37,7 @@
PKG_PROG_PKG_CONFIG([0.24])
LT_INIT(win32-dll)
+LT_PROG_RC
# checks for native programs to generate building tool
@@ -70,24 +71,29 @@
AC_SUBST(EXEEXT_BUILD)
-# auxiliary programs
-
-AC_CHECK_PROG([RMDIR], [rmdir], [rmdir])
-
-
-# Since this file will be finally moved to another directory we make
-# the path of the install script absolute. This small code snippet has
-# been taken from automake's `ylwrap' script.
+# Since these files will be eventually called from another directory (namely
+# from the top level) we make the path of the scripts absolute.
+#
+# This small code snippet has been taken from automake's `ylwrap' script.
AC_PROG_INSTALL
case "$INSTALL" in
-/*)
+[[\\/]]* | ?:[[\\/]]*)
;;
-*/*)
+*[[\\/]]*)
INSTALL="`pwd`/$INSTALL"
;;
esac
+AC_PROG_MKDIR_P
+case "$MKDIR_P" in
+[[\\/]]* | ?:[[\\/]]*)
+ ;;
+*[[\\/]]*)
+ MKDIR_P="`pwd`/$MKDIR_P"
+ ;;
+esac
+
# checks for header files
@@ -100,21 +106,20 @@
AC_C_CONST
AC_CHECK_SIZEOF([int])
AC_CHECK_SIZEOF([long])
+AC_TYPE_LONG_LONG_INT
# check whether cpp computation of size of int and long in ftconfig.in works
AC_MSG_CHECKING([whether cpp computation of bit length in ftconfig.in works])
orig_CPPFLAGS="${CPPFLAGS}"
-CPPFLAGS="-I${srcdir} -I. ${CPPFLAGS}"
+CPPFLAGS="-I${srcdir} -I. -I${srcdir}/../../include/freetype/config ${CPPFLAGS}"
ac_clean_files=
-for f in ft2build.h ftoption.h ftstdlib.h; do
- if test ! -f $f; then
- ac_clean_files="$ac_clean_files $f"
- touch $f
- fi
-done
+if test ! -f ft2build.h; then
+ ac_clean_files=ft2build.h
+ touch ft2build.h
+fi
cat > conftest.c <<\_ACEOF
#include <limits.h>
@@ -172,9 +177,20 @@
CPPFLAGS="${orig_CPPFLAGS}"
+AC_ARG_ENABLE([freetype-config],
+ AS_HELP_STRING([--enable-freetype-config], [install freetype-config]),
+ [case "${enableval}" in
+ yes) enable_freetype_config="TRUE" ;;
+ no) enable_freetype_config="FALSE" ;;
+ *) AC_MSG_ERROR([unknown value '${enableval}' passed with --enable-freetype-config]) ;;
+ esac], [enable_freetype_config="FALSE"])
+
+AC_SUBST(INSTALL_FT2_CONFIG, [$enable_freetype_config])
# checks for library functions
+AC_SYS_LARGEFILE
+
# Here we check whether we can use our mmap file component.
AC_ARG_ENABLE([mmap],
@@ -230,6 +246,9 @@
*-*-mingw*)
XX_ANSIFLAGS="-pedantic"
;;
+ *-*-aix*)
+ XX_ANSIFLAGS="-pedantic"
+ ;;
*)
GCC_VERSION=`$CC -dumpversion`
GCC_MAJOR=`echo "$GCC_VERSION" | sed 's/\([[^.]][[^.]]*\).*/\1/'`
@@ -264,7 +283,7 @@
}
])],
- [AC_MSG_RESULT([ok, add it to XX_ANSIFLAGS])
+ [AC_MSG_RESULT([ok, adding to XX_ANSIFLAGS])
XX_ANSIFLAGS="${XX_ANSIFLAGS} ${a}"
],
[AC_MSG_RESULT([no])])
@@ -289,15 +308,27 @@
AC_SUBST([XX_ANSIFLAGS])
+# It is recommended that shared libraries hide symbols except those with
+# explicit __attribute__((visibility("default"))).
+#
+AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
+orig_CFLAGS="${CFLAGS}"
+CFLAGS="${CFLAGS} -fvisibility=hidden"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
+ AC_MSG_RESULT(yes),
+ CFLAGS="${orig_CFLAGS}"
+ AC_MSG_RESULT(no))
+
+
# All library tests below try `pkg-config' first. If that fails, a function
# from the library is tested in the traditional autoconf way (zlib, bzip2),
# or a config script is called (libpng).
#
# The `xxx_reqpriv' variables are for the `Requires.private' field in
-# `freetype2.pc'. The `xxx_libpriv' variables are for the `Libs.private'
+# `freetype2.pc'. The `xxx_libspriv' variables are for the `Libs.private'
# field in `freetype2.pc' if pkg-config doesn't find a proper .pc file.
#
-# The `xxx_libstaticconf' variables are for the `freetype-config' script.
+# The `xxx_libsstaticconf' variables are for the `freetype-config' script.
#
# Note that a call to PKG_CHECK_MODULES(XXX, ...) sets and creates the
# output variables `XXX_CFLAGS' and `XXX_LIBS'. In case one or both are set
@@ -326,15 +357,15 @@
if test $have_zlib_pkg = yes; then
# we have zlib.pc
zlib_reqpriv="$zlib_pkg"
- zlib_libpriv=
- zlib_libstaticconf=`$PKG_CONFIG --static --libs "$zlib_pkg"`
+ zlib_libspriv=
+ zlib_libsstaticconf=`$PKG_CONFIG --static --libs "$zlib_pkg"`
else
zlib_reqpriv=
if test "$have_zlib" != no; then
# ZLIB_CFLAGS and ZLIB_LIBS are set by the user
- zlib_libpriv="$ZLIB_LIBS"
- zlib_libstaticconf="$ZLIB_LIBS"
+ zlib_libspriv="$ZLIB_LIBS"
+ zlib_libsstaticconf="$ZLIB_LIBS"
have_zlib="yes (ZLIB_CFLAGS and ZLIB_LIBS)"
else
# fall back to standard autoconf test
@@ -342,9 +373,9 @@
[gzsetparams],
[AC_CHECK_HEADER([zlib.h],
[have_zlib="yes (autoconf test)"
- zlib_libpriv="-lz"
- zlib_libstaticconf="$zlib_libpriv"
- ZLIB_LIBS="$zlib_libpriv"])])
+ zlib_libspriv="-lz"
+ zlib_libsstaticconf="$zlib_libspriv"
+ ZLIB_LIBS="$zlib_libspriv"])])
fi
fi
fi
@@ -375,15 +406,15 @@
if test $have_bzip2_pkg = yes; then
# we have bzip2.pc
bzip2_reqpriv="$bzip2_pkg"
- bzip2_libpriv=
- bzip2_libstaticconf=`$PKG_CONFIG --static --libs "$bzip2_pkg"`
+ bzip2_libspriv=
+ bzip2_libsstaticconf=`$PKG_CONFIG --static --libs "$bzip2_pkg"`
else
bzip2_reqpriv=
if test "$have_bzip2" != no; then
# BZIP2_CFLAGS and BZIP2_LIBS are set by the user
- bzip2_libpriv="$BZIP2_LIBS"
- bzip2_libstaticconf="$BZIP2_LIBS"
+ bzip2_libspriv="$BZIP2_LIBS"
+ bzip2_libsstaticconf="$BZIP2_LIBS"
have_bzip2="yes (BZIP2_CFLAGS and BZIP2_LIBS)"
else
# fall back to standard autoconf test
@@ -391,9 +422,9 @@
[BZ2_bzDecompress],
[AC_CHECK_HEADER([bzlib.h],
[have_bzip2="yes (autoconf test)"
- bzip2_libpriv="-lbz2"
- bzip2_libstaticconf="$bzip2_libpriv"
- BZIP2_LIBS="$bzip2_libpriv"])])
+ bzip2_libspriv="-lbz2"
+ bzip2_libsstaticconf="$bzip2_libspriv"
+ BZIP2_LIBS="$bzip2_libspriv"])])
fi
fi
fi
@@ -424,15 +455,15 @@
if test $have_libpng_pkg = yes; then
# we have libpng.pc
libpng_reqpriv="$libpng_pkg"
- libpng_libpriv=
- libpng_libstaticconf=`$PKG_CONFIG --static --libs "$libpng_pkg"`
+ libpng_libspriv=
+ libpng_libsstaticconf=`$PKG_CONFIG --static --libs "$libpng_pkg"`
else
libpng_reqpriv=
if test "$have_libpng" != no; then
# LIBPNG_CFLAGS and LIBPNG_LIBS are set by the user
- libpng_libpriv="$LIBPNG_LIBS"
- libpng_libstaticconf="$LIBPNG_LIBS"
+ libpng_libspriv="$LIBPNG_LIBS"
+ libpng_libsstaticconf="$LIBPNG_LIBS"
have_libpng="yes (LIBPNG_CFLAGS and LIBPNG_LIBS)"
else
# fall back to config script.
@@ -440,8 +471,8 @@
if which libpng-config > /dev/null 2>&1; then
LIBPNG_CFLAGS=`libpng-config --cflags`
LIBPNG_LIBS=`libpng-config --ldflags`
- libpng_libpriv=`libpng-config --static --ldflags`
- libpng_libstaticconf="$libpng_libpriv"
+ libpng_libspriv=`libpng-config --static --ldflags`
+ libpng_libsstaticconf="$libpng_libspriv"
have_libpng="yes (libpng-config)"
AC_MSG_RESULT([yes])
else
@@ -465,7 +496,7 @@
have_harfbuzz=no
if test x"$with_harfbuzz" = xyes -o x"$with_harfbuzz" = xauto; then
- harfbuzz_pkg="harfbuzz >= 0.9.19"
+ harfbuzz_pkg="harfbuzz >= 1.3.0"
have_harfbuzz_pkg=no
if test x"$HARFBUZZ_CFLAGS" = x -a x"$HARFBUZZ_LIBS" = x; then
@@ -477,15 +508,15 @@
if test $have_harfbuzz_pkg = yes; then
# we have harfbuzz.pc
harfbuzz_reqpriv="$harfbuzz_pkg"
- harfbuzz_libpriv=
- harfbuzz_libstaticconf=`$PKG_CONFIG --static --libs "$harfbuzz_pkg"`
+ harfbuzz_libspriv=
+ harfbuzz_libsstaticconf=`$PKG_CONFIG --static --libs "$harfbuzz_pkg"`
else
harfbuzz_reqpriv=
if test "$have_harfbuzz" != no; then
# HARFBUZZ_CFLAGS and HARFBUZZ_LIBS are set by the user
- harfbuzz_libpriv="$HARFBUZZ_LIBS"
- harfbuzz_libstaticconf="$HARFBUZZ_LIBS"
+ harfbuzz_libspriv="$HARFBUZZ_LIBS"
+ harfbuzz_libsstaticconf="$HARFBUZZ_LIBS"
have_harfbuzz="yes (HARFBUZZ_CFLAGS and HARFBUZZ_LIBS)"
else
# since HarfBuzz is quite a new library we don't fall back to a
@@ -500,6 +531,21 @@
fi
+# check for librt
+#
+# We need `clock_gettime' for the `ftbench' demo program.
+#
+# The code is modeled after gnulib's file `clock_time.m4', ignoring
+# very old Solaris systems.
+
+LIB_CLOCK_GETTIME=
+AC_SEARCH_LIBS([clock_gettime],
+ [rt],
+ [test "$ac_cv_search_clock_gettime" = "none required" \
+ || LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
+AC_SUBST([LIB_CLOCK_GETTIME])
+
+
# Some options handling SDKs/archs in CFLAGS should be copied
# to LDFLAGS. Apple TechNote 2137 recommends to include these
# options in CFLAGS but not in LDFLAGS.
@@ -926,10 +972,10 @@
-e 's/,*$//' \
-e 's/,/, /g'`
-LIBS_PRIVATE="$zlib_libpriv \
- $bzip2_libpriv \
- $libpng_libpriv \
- $harfbuzz_libpriv \
+LIBS_PRIVATE="$zlib_libspriv \
+ $bzip2_libspriv \
+ $libpng_libspriv \
+ $harfbuzz_libspriv \
$ft2_extra_libs"
# beautify
LIBS_PRIVATE=`echo "$LIBS_PRIVATE" \
@@ -937,11 +983,11 @@
-e 's/ *$//' \
-e 's/ */ /g'`
-LIBSSTATIC_CONFIG="-lfreetype \
- $zlib_libstaticconf \
- $bzip2_libstaticconf \
- $libpng_libstaticconf \
- $harfbuzz_libstaticconf \
+LIBSSTATIC_CONFIG="-lfreetype \
+ $zlib_libsstaticconf \
+ $bzip2_libsstaticconf \
+ $libpng_libsstaticconf \
+ $harfbuzz_libsstaticconf \
$ft2_extra_libs"
# remove -L/usr/lib and -L/usr/lib64 since `freetype-config' adds them later
# on if necessary; also beautify
@@ -966,27 +1012,63 @@
# changing LDFLAGS value should only be done after
# lt_cv_prog_compiler_static_works test
-if test "$have_zlib" != no; then
- CFLAGS="$CFLAGS $ZLIB_CFLAGS -DFT_CONFIG_OPTION_SYSTEM_ZLIB"
- LDFLAGS="$LDFLAGS $ZLIB_LIBS"
-fi
+ftoption_set()
+{
+ regexp="-e \\\"s|.*#.*def.*$1.*|#define $1|\\\""
+ FTOPTION_H_SED="$FTOPTION_H_SED $regexp"
+}
+ftoption_unset()
+{
+ regexp="-e \\\"s|.*#.*def.*$1.*|/* #undef $1 */|\\\""
+ FTOPTION_H_SED="$FTOPTION_H_SED $regexp"
+}
+
+if test "$have_zlib" != no; then
+ CFLAGS="$CFLAGS $ZLIB_CFLAGS"
+ LDFLAGS="$LDFLAGS $ZLIB_LIBS"
+ ftoption_set FT_CONFIG_OPTION_SYSTEM_ZLIB
+else
+ ftoption_unset FT_CONFIG_OPTION_SYSTEM_ZLIB
+fi
if test "$have_bzip2" != no; then
- CFLAGS="$CFLAGS $BZIP2_CFLAGS -DFT_CONFIG_OPTION_USE_BZIP2"
+ CFLAGS="$CFLAGS $BZIP2_CFLAGS"
LDFLAGS="$LDFLAGS $BZIP2_LIBS"
+ ftoption_set FT_CONFIG_OPTION_USE_BZIP2
+else
+ ftoption_unset FT_CONFIG_OPTION_USE_BZIP2
fi
if test "$have_libpng" != no; then
- CFLAGS="$CFLAGS $LIBPNG_CFLAGS -DFT_CONFIG_OPTION_USE_PNG"
+ CFLAGS="$CFLAGS $LIBPNG_CFLAGS"
LDFLAGS="$LDFLAGS $LIBPNG_LIBS"
+ ftoption_set FT_CONFIG_OPTION_USE_PNG
+else
+ ftoption_unset FT_CONFIG_OPTION_USE_PNG
fi
if test "$have_harfbuzz" != no; then
- CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS -DFT_CONFIG_OPTION_USE_HARFBUZZ"
+ CFLAGS="$CFLAGS $HARFBUZZ_CFLAGS"
LDFLAGS="$LDFLAGS $HARFBUZZ_LIBS"
+ ftoption_set FT_CONFIG_OPTION_USE_HARFBUZZ
+else
+ ftoption_unset FT_CONFIG_OPTION_USE_HARFBUZZ
fi
AC_SUBST([CFLAGS])
AC_SUBST([LDFLAGS])
+# We don't want to use a template file for `ftoption.h', since compilation
+# should work without calling a configure script also. For this reason, we
+# copy the `include/freetype/config/ftoption.h' file to the `unix/builds'
+# directory (using a dummy `AC_CONFIG_FILES' call) and apply the just
+# constructed $FTOPTION_H_SED regexp (using the post-action of
+# `AC_CONFIG_FILES'); this is also the version that gets installed later on.
+#
+AC_CONFIG_FILES([ftoption.h:${srcdir}/../../include/freetype/config/ftoption.h],
+ [mv ftoption.h ftoption.tmp
+ eval "sed $FTOPTION_H_SED < ftoption.tmp > ftoption.h"
+ rm ftoption.tmp],
+ [FTOPTION_H_SED="$FTOPTION_H_SED"])
+
# configuration file -- stay in 8.3 limit
#
# since #undef doesn't survive in configuration header files we replace
diff --git a/builds/unix/detect.mk b/builds/unix/detect.mk
index ef007bf..54daa07 100644
--- a/builds/unix/detect.mk
+++ b/builds/unix/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -76,17 +76,14 @@
have_Makefile := $(wildcard $(OBJ_DIR)/Makefile)
- CONFIG_SHELL ?= /bin/sh
setup: std_setup
ifdef must_configure
ifneq ($(have_Makefile),)
# we are building FT2 not in the src tree
- CONFIG_SHELL="$(CONFIG_SHELL)" \
- $(CONFIG_SHELL) $(TOP_DIR)/builds/unix/configure $(value CFG)
+ $(TOP_DIR)/builds/unix/configure $(value CFG)
else
cd builds/unix; \
- CONFIG_SHELL="$(CONFIG_SHELL)" \
- $(CONFIG_SHELL) ./configure $(value CFG)
+ ./configure $(value CFG)
endif
endif
diff --git a/builds/unix/freetype-config.in b/builds/unix/freetype-config.in
index 269356c..2d5b90d 100644
--- a/builds/unix/freetype-config.in
+++ b/builds/unix/freetype-config.in
@@ -1,6 +1,6 @@
#! /bin/sh
#
-# Copyright 2000-2015 by
+# Copyright 2000-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -12,12 +12,55 @@
LC_ALL=C
export LC_ALL
-prefix="%prefix%"
-exec_prefix="%exec_prefix%"
-exec_prefix_set="no"
-includedir="%includedir%"
-libdir="%libdir%"
-enable_shared="%build_libtool_libs%"
+
+# if `pkg-config' is available, use values from `freetype2.pc'
+%PKG_CONFIG% --atleast-pkgconfig-version 0.24 >/dev/null 2>&1
+if test $? -eq 0 ; then
+ # note that option `--variable' is not affected by the
+ # PKG_CONFIG_SYSROOT_DIR environment variable
+ if test "x$SYSROOT" != "x" ; then
+ PKG_CONFIG_SYSROOT_DIR="$SYSROOT"
+ export PKG_CONFIG_SYSROOT_DIR
+ fi
+
+ prefix=`%PKG_CONFIG% --variable prefix freetype2`
+ exec_prefix=`%PKG_CONFIG% --variable exec_prefix freetype2`
+
+ includedir=`%PKG_CONFIG% --variable includedir freetype2`
+ libdir=`%PKG_CONFIG% --variable libdir freetype2`
+
+ version=`%PKG_CONFIG% --modversion freetype2`
+
+ cflags=`%PKG_CONFIG% --cflags freetype2`
+ dynamic_libs=`%PKG_CONFIG% --libs freetype2`
+ static_libs=`%PKG_CONFIG% --static --libs freetype2`
+else
+ prefix="%prefix%"
+ exec_prefix="%exec_prefix%"
+
+ includedir="%includedir%"
+ libdir="%libdir%"
+
+ version=%ft_version%
+
+ cflags="-I${SYSROOT}$includedir/freetype2"
+ dynamic_libs="-lfreetype"
+ static_libs="%LIBSSTATIC_CONFIG%"
+ if test "${SYSROOT}$libdir" != "/usr/lib" &&
+ test "${SYSROOT}$libdir" != "/usr/lib64" ; then
+ libs_L="-L${SYSROOT}$libdir"
+ fi
+fi
+
+orig_prefix=$prefix
+orig_exec_prefix=$exec_prefix
+
+orig_includedir=$includedir
+orig_libdir=$libdir
+
+include_suffix=`echo $includedir | sed "s|$prefix||"`
+lib_suffix=`echo $libdir | sed "s|$exec_prefix||"`
+
usage()
{
@@ -40,14 +83,17 @@
library
--static make command line options display flags
for static linking
+ --help display this help and exit
EOF
exit $1
}
+
if test $# -eq 0 ; then
usage 1 1>&2
fi
+
while test $# -gt 0 ; do
case "$1" in
-*=*)
@@ -75,8 +121,8 @@
echo_exec_prefix=yes
;;
--version)
- echo %ft_version%
- exit 0
+ echo_version=yes
+ break
;;
--ftversion)
echo_ft_version=yes
@@ -93,6 +139,9 @@
--static)
show_static=yes
;;
+ --help)
+ usage 0
+ ;;
*)
usage 1 1>&2
;;
@@ -100,12 +149,27 @@
shift
done
+
if test "$local_prefix" = "yes" ; then
if test "$exec_prefix_set" != "yes" ; then
exec_prefix=$prefix
fi
fi
+if test "$local_prefix" = "yes" ; then
+ includedir=${prefix}${include_suffix}
+ if test "$exec_prefix_set" = "yes" ; then
+ libdir=${exec_prefix}${lib_suffix}
+ else
+ libdir=${prefix}${lib_suffix}
+ fi
+fi
+
+
+if test "$echo_version" = "yes" ; then
+ echo $version
+fi
+
if test "$echo_prefix" = "yes" ; then
echo ${SYSROOT}$prefix
fi
@@ -114,50 +178,34 @@
echo ${SYSROOT}$exec_prefix
fi
-if test "$exec_prefix_set" = "yes" ; then
- libdir=$exec_prefix/lib
-else
- if test "$local_prefix" = "yes" ; then
- includedir=$prefix/include
- libdir=$prefix/lib
- fi
-fi
-
if test "$echo_ft_version" = "yes" ; then
- major=`grep define ${SYSROOT}$includedir/freetype2/freetype.h \
+ major=`grep define ${SYSROOT}$includedir/freetype2/freetype/freetype.h \
| grep FREETYPE_MAJOR \
| sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
- minor=`grep define ${SYSROOT}$includedir/freetype2/freetype.h \
+ minor=`grep define ${SYSROOT}$includedir/freetype2/freetype/freetype.h \
| grep FREETYPE_MINOR \
| sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
- patch=`grep define ${SYSROOT}$includedir/freetype2/freetype.h \
+ patch=`grep define ${SYSROOT}$includedir/freetype2/freetype/freetype.h \
| grep FREETYPE_PATCH \
| sed 's/.*[ ]\([0-9][0-9]*\).*/\1/'`
echo $major.$minor.$patch
fi
if test "$echo_cflags" = "yes" ; then
- cflags="-I${SYSROOT}$includedir/freetype2"
- echo $cflags
+ echo $cflags | sed "s|$orig_includedir/freetype2|$includedir/freetype2|"
fi
if test "$echo_libs" = "yes" ; then
- libs="-lfreetype"
- staticlibs="%LIBSSTATIC_CONFIG%"
if test "$show_static" = "yes" ; then
- libs="$staticlibs"
- fi
- if test "${SYSROOT}$libdir" != "/usr/lib" &&
- test "${SYSROOT}$libdir" != "/usr/lib64"; then
- echo -L${SYSROOT}$libdir $libs
+ libs="$libs_L $static_libs"
else
- echo $libs
+ libs="$libs_L $dynamic_libs"
fi
+ echo $libs | sed "s|$orig_libdir|$libdir|"
fi
if test "$echo_libtool" = "yes" ; then
- convlib="libfreetype.la"
- echo ${SYSROOT}$libdir/$convlib
+ echo ${SYSROOT}$libdir/libfreetype.la
fi
# EOF
diff --git a/builds/unix/freetype2.in b/builds/unix/freetype2.in
index a488d96..2d759ec 100644
--- a/builds/unix/freetype2.in
+++ b/builds/unix/freetype2.in
@@ -1,14 +1,14 @@
prefix=%prefix%
exec_prefix=%exec_prefix%
libdir=%libdir%
-includedir=%includedir%/freetype2
+includedir=%includedir%
Name: FreeType 2
-URL: http://freetype.org
+URL: https://freetype.org
Description: A free, high-quality, and portable font engine.
Version: %ft_version%
Requires:
Requires.private: %REQUIRES_PRIVATE%
Libs: -L${libdir} -lfreetype
Libs.private: %LIBS_PRIVATE%
-Cflags: -I${includedir}
+Cflags: -I${includedir}/freetype2
diff --git a/builds/unix/freetype2.m4 b/builds/unix/freetype2.m4
index 3dc8807..af2e659 100644
--- a/builds/unix/freetype2.m4
+++ b/builds/unix/freetype2.m4
@@ -1,7 +1,7 @@
# Configure paths for FreeType2
# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/ft-munmap.m4 b/builds/unix/ft-munmap.m4
index 72b0864..00eda49 100644
--- a/builds/unix/ft-munmap.m4
+++ b/builds/unix/ft-munmap.m4
@@ -1,6 +1,6 @@
## FreeType specific autoconf tests
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/ftconfig.in b/builds/unix/ftconfig.in
index f6d459f..b9c21da 100644
--- a/builds/unix/ftconfig.in
+++ b/builds/unix/ftconfig.in
@@ -4,7 +4,7 @@
/* */
/* UNIX-specific configuration file (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -34,8 +34,8 @@
/*************************************************************************/
-#ifndef __FTCONFIG_H__
-#define __FTCONFIG_H__
+#ifndef FTCONFIG_H_
+#define FTCONFIG_H_
#include <ft2build.h>
#include FT_CONFIG_OPTIONS_H
@@ -86,7 +86,7 @@
#else /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
/* Following cpp computation of the bit length of int and long */
- /* is copied from default include/config/ftconfig.h. */
+ /* is copied from default include/freetype/config/ftconfig.h. */
/* If any improvement is required for this file, it should be */
/* applied to the original header file for the builders that */
/* do not use configure script. */
@@ -287,8 +287,8 @@
#endif
- /* determine whether we have a 64-bit int type for platforms without */
- /* Autoconf */
+ /* determine whether we have a 64-bit int type */
+ /* (mostly for environments without `autoconf') */
#if FT_SIZEOF_LONG == 8
/* FT_LONG64 must be defined if a 64-bit type is available */
@@ -296,6 +296,16 @@
#define FT_INT64 long
#define FT_UINT64 unsigned long
+ /* we handle the LLP64 scheme separately for GCC and clang, */
+ /* suppressing the `long long' warning */
+#elif ( FT_SIZEOF_LONG == 4 ) && \
+ defined( HAVE_LONG_LONG_INT ) && \
+ defined( __GNUC__ )
+#pragma GCC diagnostic ignored "-Wlong-long"
+#define FT_LONG64
+#define FT_INT64 long long int
+#define FT_UINT64 unsigned long long int
+
/*************************************************************************/
/* */
/* A 64-bit data type may create compilation problems if you compile */
@@ -305,7 +315,13 @@
/* */
#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
-#if defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
+
+#define FT_LONG64
+#define FT_INT64 long long int
+#define FT_UINT64 unsigned long long int
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
/* this compiler provides the __int64 type */
#define FT_LONG64
@@ -339,7 +355,7 @@
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
-#endif /* _MSC_VER */
+#endif /* __STDC_VERSION__ >= 199901L */
#endif /* FT_SIZEOF_LONG == 8 */
@@ -349,6 +365,15 @@
#endif
+#ifdef _WIN64
+ /* only 64bit Windows uses the LLP64 data model, i.e., */
+ /* 32bit integers, 64bit pointers */
+#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x)
+#else
+#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x)
+#endif
+
+
/*************************************************************************/
/* */
/* miscellaneous */
@@ -362,15 +387,24 @@
/* typeof condition taken from gnulib's `intprops.h' header file */
-#if ( __GNUC__ >= 2 || \
- defined( __IBM__TYPEOF__ ) || \
- ( __SUNPRO_C >= 0x5110 && !__STDC__ ) )
-#define TYPEOF( type ) (__typeof__ (type))
+#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
+ ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
+ defined( __IBM__TYPEOF__ ) ) || \
+ ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
+#define FT_TYPEOF( type ) ( __typeof__ ( type ) )
#else
-#define TYPEOF( type ) /* empty */
+#define FT_TYPEOF( type ) /* empty */
#endif
+ /* Use FT_LOCAL and FT_LOCAL_DEF to declare and define, respectively, */
+ /* a function that gets used only within the scope of a module. */
+ /* Normally, both the header and source code files for such a */
+ /* function are within a single module directory. */
+ /* */
+ /* Intra-module arrays should be tagged with FT_LOCAL_ARRAY and */
+ /* FT_LOCAL_ARRAY_DEF. */
+ /* */
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define FT_LOCAL( x ) static x
@@ -392,6 +426,12 @@
#define FT_LOCAL_ARRAY_DEF( x ) const x
+ /* Use FT_BASE and FT_BASE_DEF to declare and define, respectively, */
+ /* functions that are used in more than a single module. In the */
+ /* current setup this implies that the declaration is in a header */
+ /* file in the `include/freetype/internal' directory, and the */
+ /* function body is in a file in `src/base'. */
+ /* */
#ifndef FT_BASE
#ifdef __cplusplus
@@ -414,14 +454,63 @@
#endif /* !FT_BASE_DEF */
+ /* When compiling FreeType as a DLL or DSO with hidden visibility */
+ /* some systems/compilers need a special attribute in front OR after */
+ /* the return type of function declarations. */
+ /* */
+ /* Two macros are used within the FreeType source code to define */
+ /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
+ /* */
+ /* FT_EXPORT( return_type ) */
+ /* */
+ /* is used in a function declaration, as in */
+ /* */
+ /* FT_EXPORT( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ); */
+ /* */
+ /* */
+ /* FT_EXPORT_DEF( return_type ) */
+ /* */
+ /* is used in a function definition, as in */
+ /* */
+ /* FT_EXPORT_DEF( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ) */
+ /* { */
+ /* ... some code ... */
+ /* return FT_Err_Ok; */
+ /* } */
+ /* */
+ /* You can provide your own implementation of FT_EXPORT and */
+ /* FT_EXPORT_DEF here if you want. */
+ /* */
+ /* To export a variable, use FT_EXPORT_VAR. */
+ /* */
#ifndef FT_EXPORT
-#ifdef __cplusplus
+#ifdef FT2_BUILD_LIBRARY
+
+#if defined( _WIN32 ) && ( defined( _DLL ) || defined( DLL_EXPORT ) )
+#define FT_EXPORT( x ) __declspec( dllexport ) x
+#elif defined( __GNUC__ ) && __GNUC__ >= 4
+#define FT_EXPORT( x ) __attribute__(( visibility( "default" ) )) x
+#elif defined( __cplusplus )
#define FT_EXPORT( x ) extern "C" x
#else
#define FT_EXPORT( x ) extern x
#endif
+#else
+
+#if defined( FT2_DLLIMPORT )
+#define FT_EXPORT( x ) __declspec( dllimport ) x
+#elif defined( __cplusplus )
+#define FT_EXPORT( x ) extern "C" x
+#else
+#define FT_EXPORT( x ) extern x
+#endif
+
+#endif
+
#endif /* !FT_EXPORT */
@@ -457,7 +546,13 @@
/* functions which are accessed by (global) function pointers. */
/* */
/* */
- /* FT_CALLBACK_DEF is used to _define_ a callback function. */
+ /* FT_CALLBACK_DEF is used to _define_ a callback function, */
+ /* located in the same source code file as the structure that uses */
+ /* it. */
+ /* */
+ /* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare */
+ /* and define a callback function, respectively, in a similar way */
+ /* as FT_BASE and FT_BASE_DEF work. */
/* */
/* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
/* contains pointers to callback functions. */
@@ -477,6 +572,16 @@
#endif
#endif /* FT_CALLBACK_DEF */
+#ifndef FT_BASE_CALLBACK
+#ifdef __cplusplus
+#define FT_BASE_CALLBACK( x ) extern "C" x
+#define FT_BASE_CALLBACK_DEF( x ) extern "C" x
+#else
+#define FT_BASE_CALLBACK( x ) extern x
+#define FT_BASE_CALLBACK_DEF( x ) x
+#endif
+#endif /* FT_BASE_CALLBACK */
+
#ifndef FT_CALLBACK_TABLE
#ifdef __cplusplus
#define FT_CALLBACK_TABLE extern "C"
@@ -491,7 +596,7 @@
FT_END_HEADER
-#endif /* __FTCONFIG_H__ */
+#endif /* FTCONFIG_H_ */
/* END */
diff --git a/builds/unix/ftsystem.c b/builds/unix/ftsystem.c
index d7513d9..8fdbeb0 100644
--- a/builds/unix/ftsystem.c
+++ b/builds/unix/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* Unix-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/builds/unix/install.mk b/builds/unix/install.mk
index 35cff20..c08c3b7 100644
--- a/builds/unix/install.mk
+++ b/builds/unix/install.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -24,50 +24,58 @@
# Unix installation and deinstallation targets.
#
-# Note that we remove any data in the `freetype' subdirectory found in
-# `$(includedir)/freetype2', which was the previous location of the header
-# files up to version 2.5.0.
+# Note that we remove any data found in `$(includedir)/freetype2' before
+# installing new files to avoid interferences with files installed by
+# previous FreeType versions (which use slightly different locations).
+#
+# We also remove `$(includedir)/ft2build.h' for the same reason.
+#
+# Note that some header files get handled twice for simplicity; a special,
+# configured version overwrites the generic one.
#
install: $(PROJECT_LIBRARY)
- $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
- $(DESTDIR)$(libdir)/pkgconfig \
- $(DESTDIR)$(includedir)/freetype2/config \
- $(DESTDIR)$(bindir) \
- $(DESTDIR)$(datadir)/aclocal \
+ -$(DELDIR) $(DESTDIR)$(includedir)/freetype2
+ -$(DELETE) $(DESTDIR)$(includedir)/ft2build.h
+ $(MKINSTALLDIRS) $(DESTDIR)$(libdir) \
+ $(DESTDIR)$(libdir)/pkgconfig \
+ $(DESTDIR)$(includedir)/freetype2/freetype/config \
+ $(DESTDIR)$(datadir)/aclocal
+ifeq ($(INSTALL_FT2_CONFIG),TRUE)
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir) \
$(DESTDIR)$(mandir)/man1
+endif
$(LIBTOOL) --mode=install $(INSTALL) \
$(PROJECT_LIBRARY) $(DESTDIR)$(libdir)
- -for P in $(PUBLIC_H) ; do \
- $(INSTALL_DATA) \
- $$P $(DESTDIR)$(includedir)/freetype2 ; \
+ -for P in $(PUBLIC_H) ; do \
+ $(INSTALL_DATA) \
+ $$P $(DESTDIR)$(includedir)/freetype2/freetype ; \
done
- -for P in $(CONFIG_H) ; do \
- $(INSTALL_DATA) \
- $$P $(DESTDIR)$(includedir)/freetype2/config ; \
+ -for P in $(CONFIG_H) ; do \
+ $(INSTALL_DATA) \
+ $$P $(DESTDIR)$(includedir)/freetype2/freetype/config ; \
done
- -$(DELETE) $(DESTDIR)$(includedir)/freetype2/freetype/config/*
- -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/freetype/config
- -$(DELETE) $(DESTDIR)$(includedir)/freetype2/freetype/*
- -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/freetype
- $(INSTALL_DATA) $(OBJ_BUILD)/ftconfig.h \
- $(DESTDIR)$(includedir)/freetype2/config/ftconfig.h
- $(INSTALL_DATA) $(OBJ_DIR)/ftmodule.h \
- $(DESTDIR)$(includedir)/freetype2/config/ftmodule.h
- $(INSTALL_SCRIPT) -m 755 $(OBJ_BUILD)/freetype-config \
- $(DESTDIR)$(bindir)/freetype-config
- $(INSTALL_SCRIPT) -m 644 $(BUILD_DIR)/freetype2.m4 \
+ $(INSTALL_DATA) $(TOP_DIR)/include/ft2build.h \
+ $(DESTDIR)$(includedir)/freetype2/ft2build.h
+ $(INSTALL_DATA) $(OBJ_BUILD)/ftconfig.h \
+ $(DESTDIR)$(includedir)/freetype2/freetype/config/ftconfig.h
+ $(INSTALL_DATA) $(OBJ_DIR)/ftmodule.h \
+ $(DESTDIR)$(includedir)/freetype2/freetype/config/ftmodule.h
+ $(INSTALL_DATA) $(OBJ_BUILD)/ftoption.h \
+ $(DESTDIR)$(includedir)/freetype2/freetype/config/ftoption.h
+ $(INSTALL_SCRIPT) -m 644 $(BUILD_DIR)/freetype2.m4 \
$(DESTDIR)$(datadir)/aclocal/freetype2.m4
- $(INSTALL_SCRIPT) -m 644 $(OBJ_BUILD)/freetype2.pc \
+ $(INSTALL_SCRIPT) -m 644 $(OBJ_BUILD)/freetype2.pc \
$(DESTDIR)$(libdir)/pkgconfig/freetype2.pc
- $(INSTALL_DATA) $(TOP_DIR)/docs/freetype-config.1 \
+ifeq ($(INSTALL_FT2_CONFIG),TRUE)
+ $(INSTALL_SCRIPT) -m 755 $(OBJ_BUILD)/freetype-config \
+ $(DESTDIR)$(bindir)/freetype-config
+ $(INSTALL_DATA) $(TOP_DIR)/docs/freetype-config.1 \
$(DESTDIR)$(mandir)/man1/freetype-config.1
+endif
uninstall:
-$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(LIBRARY).$A
- -$(DELETE) $(DESTDIR)$(includedir)/freetype2/config/*
- -$(DELDIR) $(DESTDIR)$(includedir)/freetype2/config
- -$(DELETE) $(DESTDIR)$(includedir)/freetype2/*
-$(DELDIR) $(DESTDIR)$(includedir)/freetype2
-$(DELETE) $(DESTDIR)$(bindir)/freetype-config
-$(DELETE) $(DESTDIR)$(datadir)/aclocal/freetype2.m4
@@ -76,7 +84,7 @@
check:
- @echo There is no validation suite for this package.
+ $(info There is no validation suite for this package.)
.PHONY: clean_project_unix distclean_project_unix
@@ -84,14 +92,11 @@
# Unix cleaning and distclean rules.
#
clean_project_unix:
- -$(DELETE) $(BASE_OBJECTS) $(OBJ_M) $(OBJ_S)
- -$(DELETE) $(patsubst %.$O,%.$(SO),$(BASE_OBJECTS) $(OBJ_M) $(OBJ_S)) \
- $(CLEAN)
+ -$(LIBTOOL) --mode=clean $(RM) $(OBJECTS_LIST)
+ -$(DELETE) $(CLEAN)
distclean_project_unix: clean_project_unix
- -$(DELETE) $(PROJECT_LIBRARY)
- -$(DELETE) $(OBJ_DIR)/.libs/*
- -$(DELDIR) $(OBJ_DIR)/.libs
+ -$(LIBTOOL) --mode=clean $(RM) $(PROJECT_LIBRARY)
-$(DELETE) *.orig *~ core *.core $(DISTCLEAN)
# EOF
diff --git a/builds/unix/mkinstalldirs b/builds/unix/mkinstalldirs
deleted file mode 100755
index ef7e16f..0000000
--- a/builds/unix/mkinstalldirs
+++ /dev/null
@@ -1,161 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-
-scriptversion=2006-05-11.19
-
-# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain.
-#
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-nl='
-'
-IFS=" "" $nl"
-errstatus=0
-dirmode=
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
-
-Create each directory DIR (with mode MODE, if specified), including all
-leading file name components.
-
-Report bugs to <bug-automake@gnu.org>."
-
-# process command line arguments
-while test $# -gt 0 ; do
- case $1 in
- -h | --help | --h*) # -h for help
- echo "$usage"
- exit $?
- ;;
- -m) # -m PERM arg
- shift
- test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
- dirmode=$1
- shift
- ;;
- --version)
- echo "$0 $scriptversion"
- exit $?
- ;;
- --) # stop option processing
- shift
- break
- ;;
- -*) # unknown option
- echo "$usage" 1>&2
- exit 1
- ;;
- *) # first non-opt arg
- break
- ;;
- esac
-done
-
-for file
-do
- if test -d "$file"; then
- shift
- else
- break
- fi
-done
-
-case $# in
- 0) exit 0 ;;
-esac
-
-# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
-# mkdir -p a/c at the same time, both will detect that a is missing,
-# one will create a, then the other will try to create a and die with
-# a "File exists" error. This is a problem when calling mkinstalldirs
-# from a parallel make. We use --version in the probe to restrict
-# ourselves to GNU mkdir, which is thread-safe.
-case $dirmode in
- '')
- if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
- echo "mkdir -p -- $*"
- exec mkdir -p -- "$@"
- else
- # On NextStep and OpenStep, the `mkdir' command does not
- # recognize any option. It will interpret all options as
- # directories to create, and then abort because `.' already
- # exists.
- test -d ./-p && rmdir ./-p
- test -d ./--version && rmdir ./--version
- fi
- ;;
- *)
- if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
- test ! -d ./--version; then
- echo "mkdir -m $dirmode -p -- $*"
- exec mkdir -m "$dirmode" -p -- "$@"
- else
- # Clean up after NextStep and OpenStep mkdir.
- for d in ./-m ./-p ./--version "./$dirmode";
- do
- test -d $d && rmdir $d
- done
- fi
- ;;
-esac
-
-for file
-do
- case $file in
- /*) pathcomp=/ ;;
- *) pathcomp= ;;
- esac
- oIFS=$IFS
- IFS=/
- set fnord $file
- shift
- IFS=$oIFS
-
- for d
- do
- test "x$d" = x && continue
-
- pathcomp=$pathcomp$d
- case $pathcomp in
- -*) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp"
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- else
- if test ! -z "$dirmode"; then
- echo "chmod $dirmode $pathcomp"
- lasterr=
- chmod "$dirmode" "$pathcomp" || lasterr=$?
-
- if test ! -z "$lasterr"; then
- errstatus=$lasterr
- fi
- fi
- fi
- fi
-
- pathcomp=$pathcomp/
- done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/builds/unix/pkg.m4 b/builds/unix/pkg.m4
index f26f84c..260e1fb 100644
--- a/builds/unix/pkg.m4
+++ b/builds/unix/pkg.m4
@@ -53,7 +53,7 @@
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
#
# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-# only at the first occurence in configure.ac, so if the first place
+# only at the first occurrence in configure.ac, so if the first place
# it's called might be skipped (such as if it is within an "if", you
# have to call PKG_CHECK_EXISTS manually
# --------------------------------------------------------------
diff --git a/builds/unix/unix-cc.in b/builds/unix/unix-cc.in
index d53b25f..5675866 100644
--- a/builds/unix/unix-cc.in
+++ b/builds/unix/unix-cc.in
@@ -2,7 +2,7 @@
# FreeType 2 template for Unix-specific compiler definitions
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -87,19 +87,26 @@
# C compiler to use -- we use libtool!
#
-#
CCraw := $(CC)
CC := $(LIBTOOL) --mode=compile $(CCraw)
+# Resource compiler to use on Cygwin/MinGW, usually windres.
+#
+RCraw := @RC@
+ifneq ($(RCraw),)
+ RC := $(LIBTOOL) --tag=RC --mode=compile $(RCraw)
+endif
+
# Linker flags.
#
-LDFLAGS := @LDFLAGS@
+LDFLAGS := @LDFLAGS@
+LIB_CLOCK_GETTIME := @LIB_CLOCK_GETTIME@ # for ftbench
# export symbols
#
CCraw_build := @CC_BUILD@ # native CC of building system
-E_BUILD := @EXEEXT_BUILD@ # extension for exexutable on building system
+E_BUILD := @EXEEXT_BUILD@ # extension for executable on building system
EXPORTS_LIST := $(OBJ_DIR)/ftexport.sym
CCexe := $(CCraw_build) # used to compile `apinames' only
@@ -109,6 +116,6 @@
LINK_LIBRARY = $(LIBTOOL) --mode=link $(CCraw) -o $@ $(OBJECTS_LIST) \
-rpath $(libdir) -version-info $(version_info) \
$(LDFLAGS) -no-undefined \
- # -export-symbols $(EXPORTS_LIST)
+ -export-symbols $(EXPORTS_LIST)
# EOF
diff --git a/builds/unix/unix-def.in b/builds/unix/unix-def.in
index ed9fd1e..6957053 100644
--- a/builds/unix/unix-def.in
+++ b/builds/unix/unix-def.in
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -17,7 +17,7 @@
TOP_DIR := $(shell cd $(TOP_DIR); pwd)
DELETE := rm -f
-DELDIR := @RMDIR@
+DELDIR := rm -rf
CAT := cat
SEP := /
@@ -32,7 +32,7 @@
INSTALL_DATA := @INSTALL_DATA@
INSTALL_PROGRAM := @INSTALL_PROGRAM@
INSTALL_SCRIPT := @INSTALL_SCRIPT@
-MKINSTALLDIRS := $(BUILD_DIR)/mkinstalldirs
+MKINSTALLDIRS := @MKDIR_P@
CLEAN += $(OBJ_BUILD)/freetype-config \
$(OBJ_BUILD)/freetype2.pc
@@ -43,6 +43,7 @@
$(OBJ_BUILD)/unix-def.mk \
$(OBJ_BUILD)/unix-cc.mk \
$(OBJ_BUILD)/ftconfig.h \
+ $(OBJ_BUILD)/ftoption.h \
$(LIBTOOL) \
$(OBJ_BUILD)/Makefile
@@ -62,6 +63,7 @@
# Variables needed for `freetype-config' and `freetype.pc'.
#
+PKG_CONFIG := @PKG_CONFIG@
REQUIRES_PRIVATE := @REQUIRES_PRIVATE@
LIBS_PRIVATE := @LIBS_PRIVATE@
LIBSSTATIC_CONFIG := @LIBSSTATIC_CONFIG@
@@ -102,6 +104,7 @@
$(OBJ_BUILD)/freetype-config: $(TOP_DIR)/builds/unix/freetype-config.in
rm -f $@ $@.tmp
sed -e 's|%LIBSSTATIC_CONFIG%|$(LIBSSTATIC_CONFIG)|' \
+ -e 's|%PKG_CONFIG%|$(PKG_CONFIG)|' \
-e 's|%build_libtool_libs%|$(build_libtool_libs)|' \
-e 's|%exec_prefix%|$(exec_prefix)|' \
-e 's|%ft_version%|$(ft_version)|' \
@@ -111,7 +114,7 @@
$< \
> $@.tmp
chmod +x $@.tmp
- chmod a-w $@.tmp
+ chmod go-w $@.tmp
mv $@.tmp $@
# To support directory names with spaces (as might easily happen on Windows
@@ -142,7 +145,10 @@
chmod a-w $@.tmp
mv $@.tmp $@
-all: $(OBJ_BUILD)/freetype-config \
+# defines whether we should install `freetype-config' or not
+INSTALL_FT2_CONFIG = @INSTALL_FT2_CONFIG@
+
+all install: $(OBJ_BUILD)/freetype-config \
$(OBJ_BUILD)/freetype2.pc
# EOF
diff --git a/builds/unix/unix-dev.mk b/builds/unix/unix-dev.mk
index 62de344..5a516ad 100644
--- a/builds/unix/unix-dev.mk
+++ b/builds/unix/unix-dev.mk
@@ -6,7 +6,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/unix-lcc.mk b/builds/unix/unix-lcc.mk
index 328cc80..73a02d4 100644
--- a/builds/unix/unix-lcc.mk
+++ b/builds/unix/unix-lcc.mk
@@ -6,7 +6,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/unix.mk b/builds/unix/unix.mk
index 542aa7f..acd54d3 100644
--- a/builds/unix/unix.mk
+++ b/builds/unix/unix.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/unixddef.mk b/builds/unix/unixddef.mk
index f333640..a8da63a 100644
--- a/builds/unix/unixddef.mk
+++ b/builds/unix/unixddef.mk
@@ -4,7 +4,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/vms/ftconfig.h b/builds/vms/ftconfig.h
index eff898f..021e2c6 100644
--- a/builds/vms/ftconfig.h
+++ b/builds/vms/ftconfig.h
@@ -4,7 +4,7 @@
/* */
/* VMS-specific configuration file (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -33,8 +33,9 @@
/* */
/*************************************************************************/
-#ifndef __FTCONFIG_H__
-#define __FTCONFIG_H__
+
+#ifndef FTCONFIG_H_
+#define FTCONFIG_H_
#include <ft2build.h>
#include FT_CONFIG_OPTIONS_H
@@ -116,6 +117,14 @@
#endif
+ /* Fix compiler warning with sgi compiler */
+#if defined( __sgi ) && !defined( __GNUC__ )
+#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
+#pragma set woff 3505
+#endif
+#endif
+
+
/*************************************************************************/
/* */
/* <Section> */
@@ -201,12 +210,12 @@
#endif
-#if FT_SIZEOF_INT == (32 / FT_CHAR_BIT)
+#if FT_SIZEOF_INT == 4
typedef signed int FT_Int32;
typedef unsigned int FT_UInt32;
-#elif FT_SIZEOF_LONG == (32 / FT_CHAR_BIT)
+#elif FT_SIZEOF_LONG == 4
typedef signed long FT_Int32;
typedef unsigned long FT_UInt32;
@@ -217,12 +226,12 @@
/* look up an integer type that is at least 32 bits */
-#if FT_SIZEOF_INT >= (32 / FT_CHAR_BIT)
+#if FT_SIZEOF_INT >= 4
typedef int FT_Fast;
typedef unsigned int FT_UFast;
-#elif FT_SIZEOF_LONG >= (32 / FT_CHAR_BIT)
+#elif FT_SIZEOF_LONG >= 4
typedef long FT_Fast;
typedef unsigned long FT_UFast;
@@ -230,15 +239,25 @@
#endif
- /* determine whether we have a 64-bit int type for platforms without */
- /* Autoconf */
-#if FT_SIZEOF_LONG == (64 / FT_CHAR_BIT)
+ /* determine whether we have a 64-bit int type */
+ /* (mostly for environments without `autoconf') */
+#if FT_SIZEOF_LONG == 8
/* FT_LONG64 must be defined if a 64-bit type is available */
#define FT_LONG64
#define FT_INT64 long
#define FT_UINT64 unsigned long
+ /* we handle the LLP64 scheme separately for GCC and clang, */
+ /* suppressing the `long long' warning */
+#elif ( FT_SIZEOF_LONG == 4 ) && \
+ defined( HAVE_LONG_LONG_INT ) && \
+ defined( __GNUC__ )
+#pragma GCC diagnostic ignored "-Wlong-long"
+#define FT_LONG64
+#define FT_INT64 long long int
+#define FT_UINT64 unsigned long long int
+
/*************************************************************************/
/* */
/* A 64-bit data type may create compilation problems if you compile */
@@ -248,7 +267,13 @@
/* */
#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
-#if defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
+
+#define FT_LONG64
+#define FT_INT64 long long int
+#define FT_UINT64 unsigned long long int
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
/* this compiler provides the __int64 type */
#define FT_LONG64
@@ -282,9 +307,9 @@
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
-#endif /* _MSC_VER */
+#endif /* __STDC_VERSION__ >= 199901L */
-#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
+#endif /* FT_SIZEOF_LONG == 8 */
#ifdef FT_LONG64
typedef FT_INT64 FT_Int64;
@@ -292,6 +317,15 @@
#endif
+#ifdef _WIN64
+ /* only 64bit Windows uses the LLP64 data model, i.e., */
+ /* 32bit integers, 64bit pointers */
+#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x)
+#else
+#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x)
+#endif
+
+
/*************************************************************************/
/* */
/* miscellaneous */
@@ -305,15 +339,24 @@
/* typeof condition taken from gnulib's `intprops.h' header file */
-#if ( __GNUC__ >= 2 || \
- defined( __IBM__TYPEOF__ ) || \
- ( __SUNPRO_C >= 0x5110 && !__STDC__ ) )
-#define TYPEOF( type ) (__typeof__ (type))
+#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
+ ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
+ defined( __IBM__TYPEOF__ ) ) || \
+ ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
+#define FT_TYPEOF( type ) ( __typeof__ ( type ) )
#else
-#define TYPEOF( type ) /* empty */
+#define FT_TYPEOF( type ) /* empty */
#endif
+ /* Use FT_LOCAL and FT_LOCAL_DEF to declare and define, respectively, */
+ /* a function that gets used only within the scope of a module. */
+ /* Normally, both the header and source code files for such a */
+ /* function are within a single module directory. */
+ /* */
+ /* Intra-module arrays should be tagged with FT_LOCAL_ARRAY and */
+ /* FT_LOCAL_ARRAY_DEF. */
+ /* */
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define FT_LOCAL( x ) static x
@@ -335,6 +378,12 @@
#define FT_LOCAL_ARRAY_DEF( x ) const x
+ /* Use FT_BASE and FT_BASE_DEF to declare and define, respectively, */
+ /* functions that are used in more than a single module. In the */
+ /* current setup this implies that the declaration is in a header */
+ /* file in the `include/freetype/internal' directory, and the */
+ /* function body is in a file in `src/base'. */
+ /* */
#ifndef FT_BASE
#ifdef __cplusplus
@@ -357,14 +406,63 @@
#endif /* !FT_BASE_DEF */
+ /* When compiling FreeType as a DLL or DSO with hidden visibility */
+ /* some systems/compilers need a special attribute in front OR after */
+ /* the return type of function declarations. */
+ /* */
+ /* Two macros are used within the FreeType source code to define */
+ /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
+ /* */
+ /* FT_EXPORT( return_type ) */
+ /* */
+ /* is used in a function declaration, as in */
+ /* */
+ /* FT_EXPORT( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ); */
+ /* */
+ /* */
+ /* FT_EXPORT_DEF( return_type ) */
+ /* */
+ /* is used in a function definition, as in */
+ /* */
+ /* FT_EXPORT_DEF( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ) */
+ /* { */
+ /* ... some code ... */
+ /* return FT_Err_Ok; */
+ /* } */
+ /* */
+ /* You can provide your own implementation of FT_EXPORT and */
+ /* FT_EXPORT_DEF here if you want. */
+ /* */
+ /* To export a variable, use FT_EXPORT_VAR. */
+ /* */
#ifndef FT_EXPORT
-#ifdef __cplusplus
+#ifdef FT2_BUILD_LIBRARY
+
+#if defined( _WIN32 ) && ( defined( _DLL ) || defined( DLL_EXPORT ) )
+#define FT_EXPORT( x ) __declspec( dllexport ) x
+#elif defined( __GNUC__ ) && __GNUC__ >= 4
+#define FT_EXPORT( x ) __attribute__(( visibility( "default" ) )) x
+#elif defined( __cplusplus )
#define FT_EXPORT( x ) extern "C" x
#else
#define FT_EXPORT( x ) extern x
#endif
+#else
+
+#if defined( FT2_DLLIMPORT )
+#define FT_EXPORT( x ) __declspec( dllimport ) x
+#elif defined( __cplusplus )
+#define FT_EXPORT( x ) extern "C" x
+#else
+#define FT_EXPORT( x ) extern x
+#endif
+
+#endif
+
#endif /* !FT_EXPORT */
@@ -400,7 +498,13 @@
/* functions which are accessed by (global) function pointers. */
/* */
/* */
- /* FT_CALLBACK_DEF is used to _define_ a callback function. */
+ /* FT_CALLBACK_DEF is used to _define_ a callback function, */
+ /* located in the same source code file as the structure that uses */
+ /* it. */
+ /* */
+ /* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare */
+ /* and define a callback function, respectively, in a similar way */
+ /* as FT_BASE and FT_BASE_DEF work. */
/* */
/* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
/* contains pointers to callback functions. */
@@ -420,6 +524,16 @@
#endif
#endif /* FT_CALLBACK_DEF */
+#ifndef FT_BASE_CALLBACK
+#ifdef __cplusplus
+#define FT_BASE_CALLBACK( x ) extern "C" x
+#define FT_BASE_CALLBACK_DEF( x ) extern "C" x
+#else
+#define FT_BASE_CALLBACK( x ) extern x
+#define FT_BASE_CALLBACK_DEF( x ) x
+#endif
+#endif /* FT_BASE_CALLBACK */
+
#ifndef FT_CALLBACK_TABLE
#ifdef __cplusplus
#define FT_CALLBACK_TABLE extern "C"
@@ -434,7 +548,7 @@
FT_END_HEADER
-#endif /* __FTCONFIG_H__ */
+#endif /* FTCONFIG_H_ */
/* END */
diff --git a/builds/vms/ftsystem.c b/builds/vms/ftsystem.c
index 74d3392..7d79f9a 100644
--- a/builds/vms/ftsystem.c
+++ b/builds/vms/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* VMS-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/builds/wince/ftdebug.c b/builds/wince/ftdebug.c
index 74c73b5..83c5f44 100644
--- a/builds/wince/ftdebug.c
+++ b/builds/wince/ftdebug.c
@@ -4,7 +4,7 @@
/* */
/* Debugging and logging component for WinCE (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -79,7 +79,7 @@
va_start( ap, fmt );
- vprintf( fmt, ap );
+ vfprintf( stderr, fmt, ap );
/* send the string to the debugger as well */
vsprintf( buf, fmt, ap );
OutputDebugStringEx( buf );
@@ -148,8 +148,8 @@
/* for the memory and stream components which are set to 6 and 5, */
/* respectively. */
/* */
- /* See the file <internal/fttrace.h> for details of the available toggle */
- /* names. */
+ /* See the file `include/freetype/internal/fttrace.h' for details of the */
+ /* available toggle names. */
/* */
/* The level must be between 0 and 6; 0 means quiet (except for serious */
/* runtime errors), and 6 means _very_ verbose. */
diff --git a/builds/wince/vc2005-ce/freetype.sln b/builds/wince/vc2005-ce/freetype.sln
index 76e52d8..ff45463 100644
--- a/builds/wince/vc2005-ce/freetype.sln
+++ b/builds/wince/vc2005-ce/freetype.sln
@@ -1,4 +1,3 @@
-
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
diff --git a/builds/wince/vc2005-ce/freetype.vcproj b/builds/wince/vc2005-ce/freetype.vcproj
index a1993b4..1ca45a8 100644
--- a/builds/wince/vc2005-ce/freetype.vcproj
+++ b/builds/wince/vc2005-ce/freetype.vcproj
@@ -21,7 +21,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -41,7 +41,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -61,7 +61,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -81,7 +81,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -101,7 +101,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -121,7 +121,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -141,7 +141,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -161,7 +161,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -181,7 +181,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -201,7 +201,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -221,7 +221,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -241,7 +241,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -261,7 +261,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -281,7 +281,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -301,7 +301,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -321,7 +321,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -341,7 +341,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -361,7 +361,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -381,7 +381,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -401,7 +401,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -421,7 +421,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -441,7 +441,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -461,7 +461,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -481,7 +481,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -501,7 +501,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -521,7 +521,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -541,7 +541,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -561,7 +561,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -581,7 +581,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -601,7 +601,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -621,7 +621,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -641,7 +641,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -661,7 +661,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -681,7 +681,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -701,7 +701,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -721,7 +721,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -741,7 +741,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -758,7 +758,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -773,585 +773,18 @@
<File RelativePath="..\..\..\src\autofit\autofit.c">
</File>
<File RelativePath="..\..\..\src\bdf\bdf.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\cff\cff.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftbase.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftbitmap.c">
</File>
<File RelativePath="..\..\..\src\cache\ftcache.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\ftdebug.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
+ <FileConfiguration>
+ <Tool Name="VCCLCompilerTool" DisableLanguageExtensions="false" />
</FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftfstype.c">
@@ -1359,774 +792,18 @@
<File RelativePath="..\..\..\src\base\ftgasp.c">
</File>
<File RelativePath="..\..\..\src\base\ftglyph.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\gzip\ftgzip.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftinit.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\lzw\ftlzw.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftstroke.c">
</File>
<File RelativePath="..\..\..\src\base\ftsystem.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\smooth\smooth.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<Filter Name="FT_MODULES">
<File RelativePath="..\..\..\src\base\ftbbox.c">
@@ -2135,139 +812,9 @@
</File>
<File RelativePath="..\..\..\src\base\ftcid.c">
</File>
- <File RelativePath="..\..\..\src\base\ftfntfmt.c">
- </File>
<File RelativePath="..\..\..\src\base\ftgxval.c">
</File>
- <File RelativePath="..\..\..\src\base\ftlcdfil.c">
- </File>
<File RelativePath="..\..\..\src\base\ftmm.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftotval.c">
</File>
@@ -2282,1558 +829,46 @@
<File RelativePath="..\..\..\src\base\ftwinfnt.c">
</File>
<File RelativePath="..\..\..\src\pcf\pcf.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\pfr\pfr.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\psaux\psaux.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\pshinter\pshinter.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\psnames\psmodule.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\raster\raster.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\sfnt\sfnt.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\truetype\truetype.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\type1\type1.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\cid\type1cid.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\type42\type42.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\winfonts\winfnt.c">
- <FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Smartphone 2003 (ARMV4)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
</Filter>
</Filter>
<Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl">
<File RelativePath="..\..\..\include\ft2build.h">
</File>
- <File RelativePath="..\..\..\include\config\ftconfig.h">
+ <File RelativePath="..\..\..\include\freetype\config\ftconfig.h">
</File>
- <File RelativePath="..\..\..\include\config\ftheader.h">
+ <File RelativePath="..\..\..\include\freetype\config\ftheader.h">
</File>
- <File RelativePath="..\..\..\include\config\ftmodule.h">
+ <File RelativePath="..\..\..\include\freetype\config\ftmodule.h">
</File>
- <File RelativePath="..\..\..\include\config\ftoption.h">
+ <File RelativePath="..\..\..\include\freetype\config\ftoption.h">
</File>
- <File RelativePath="..\..\..\include\config\ftstdlib.h">
+ <File RelativePath="..\..\..\include\freetype\config\ftstdlib.h">
</File>
</Filter>
</Files>
<Globals>
</Globals>
-</VisualStudioProject>
\ No newline at end of file
+</VisualStudioProject>
diff --git a/builds/wince/vc2005-ce/index.html b/builds/wince/vc2005-ce/index.html
index a8e92d7..02a1caf 100644
--- a/builds/wince/vc2005-ce/index.html
+++ b/builds/wince/vc2005-ce/index.html
@@ -21,22 +21,22 @@
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
-It compiles the following libraries from the FreeType 2.6 sources:</p>
+It compiles the following libraries from the FreeType 2.9.1 sources:</p>
<ul>
<pre>
- freetype26.lib - release build; single threaded
- freetype26_D.lib - debug build; single threaded
- freetype26MT.lib - release build; multi-threaded
- freetype26MT_D.lib - debug build; multi-threaded</pre>
+ freetype291.lib - release build; single threaded
+ freetype291_D.lib - debug build; single threaded
+ freetype291MT.lib - release build; multi-threaded
+ freetype291MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
archives are already stored this way, so no further action is required. If
you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <it>TAR
-file smart CR/LF Conversion</it> option. Alternatively, you may consider
+href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+file smart CR/LF Conversion</em> option. Alternatively, you may consider
using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
around, which specifically deal with this particular problem.
diff --git a/builds/wince/vc2008-ce/freetype.sln b/builds/wince/vc2008-ce/freetype.sln
index d8efd96..2391432 100644
--- a/builds/wince/vc2008-ce/freetype.sln
+++ b/builds/wince/vc2008-ce/freetype.sln
@@ -1,4 +1,3 @@
-
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
diff --git a/builds/wince/vc2008-ce/freetype.vcproj b/builds/wince/vc2008-ce/freetype.vcproj
index 4faf5b4..7a5445e 100644
--- a/builds/wince/vc2008-ce/freetype.vcproj
+++ b/builds/wince/vc2008-ce/freetype.vcproj
@@ -88,7 +88,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -177,7 +177,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -266,7 +266,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -355,7 +355,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -444,7 +444,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -533,7 +533,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -621,7 +621,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -709,7 +709,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -797,7 +797,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -885,7 +885,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -973,7 +973,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1061,7 +1061,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1149,7 +1149,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1236,7 +1236,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1323,7 +1323,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1410,7 +1410,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1497,7 +1497,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1584,7 +1584,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1668,7 +1668,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1753,7 +1753,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1838,7 +1838,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1923,7 +1923,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2008,7 +2008,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2093,7 +2093,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2178,7 +2178,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2263,7 +2263,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2348,7 +2348,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2433,7 +2433,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2518,7 +2518,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2603,7 +2603,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2689,7 +2689,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2775,7 +2775,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2861,7 +2861,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2947,7 +2947,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3033,7 +3033,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3119,7 +3119,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3205,7 +3205,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3279,7 +3279,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3313,1115 +3313,14 @@
<File
RelativePath="..\..\..\src\bdf\bdf.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\cff\cff.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftbase.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftbitmap.c"
@@ -4430,854 +3329,13 @@
<File
RelativePath="..\..\..\src\cache\ftcache.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\ftdebug.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
+ <FileConfiguration>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
DisableLanguageExtensions="false"
/>
</FileConfiguration>
@@ -5293,1710 +3351,18 @@
<File
RelativePath="..\..\..\src\base\ftglyph.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\gzip\ftgzip.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftinit.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\lzw\ftlzw.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftstroke.c"
@@ -7005,856 +3371,10 @@
<File
RelativePath="..\..\..\src\base\ftsystem.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\smooth\smooth.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<Filter
Name="FT_MODULES"
@@ -7872,443 +3392,12 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftfntfmt.c"
- >
- </File>
- <File
RelativePath="..\..\..\src\base\ftgxval.c"
>
</File>
<File
- RelativePath="..\..\..\src\base\ftlcdfil.c"
- >
- </File>
- <File
RelativePath="..\..\..\src\base\ftmm.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftotval.c"
@@ -8337,5126 +3426,50 @@
<File
RelativePath="..\..\..\src\pcf\pcf.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\pfr\pfr.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\psaux\psaux.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\pshinter\pshinter.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\psnames\psmodule.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\raster\raster.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\sfnt\sfnt.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\truetype\truetype.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\type1\type1.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\cid\type1cid.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\type42\type42.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\winfonts\winfnt.c"
>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
</Filter>
</Filter>
@@ -13469,23 +3482,23 @@
>
</File>
<File
- RelativePath="..\..\..\include\config\ftconfig.h"
+ RelativePath="..\..\..\include\freetype\config\ftconfig.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftheader.h"
+ RelativePath="..\..\..\include\freetype\config\ftheader.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftmodule.h"
+ RelativePath="..\..\..\include\freetype\config\ftmodule.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftoption.h"
+ RelativePath="..\..\..\include\freetype\config\ftoption.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftstdlib.h"
+ RelativePath="..\..\..\include\freetype\config\ftstdlib.h"
>
</File>
</Filter>
diff --git a/builds/wince/vc2008-ce/index.html b/builds/wince/vc2008-ce/index.html
index ebf1376..f7a3583 100644
--- a/builds/wince/vc2008-ce/index.html
+++ b/builds/wince/vc2008-ce/index.html
@@ -21,22 +21,22 @@
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
-It compiles the following libraries from the FreeType 2.6 sources:</p>
+It compiles the following libraries from the FreeType 2.9.1 sources:</p>
<ul>
<pre>
- freetype26.lib - release build; single threaded
- freetype26_D.lib - debug build; single threaded
- freetype26MT.lib - release build; multi-threaded
- freetype26MT_D.lib - debug build; multi-threaded</pre>
+ freetype291.lib - release build; single threaded
+ freetype291_D.lib - debug build; single threaded
+ freetype291MT.lib - release build; multi-threaded
+ freetype291MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
archives are already stored this way, so no further action is required. If
you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <it>TAR
-file smart CR/LF Conversion</it> option. Alternatively, you may consider
+href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+file smart CR/LF Conversion</em> option. Alternatively, you may consider
using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
around, which specifically deal with this particular problem.
diff --git a/builds/windows/detect.mk b/builds/windows/detect.mk
index 26297f2..dd5669c 100644
--- a/builds/windows/detect.mk
+++ b/builds/windows/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -77,7 +77,7 @@
# So we need to hack.
#
# Kudos to Eli Zaretskii (DJGPP guru) that helped debug it.
- # Details are available in threads of the freetype mailing list
+ # Details are available in threads of the FreeType mailing list
# (2004-11-11), and then in the devel mailing list (2004-11-20 to -23).
#
ifeq ($(OS),Windows_NT)
@@ -95,22 +95,22 @@
ifneq ($(findstring list,$(MAKECMDGOALS)),) # test for the "list" target
dump_target_list:
- @echo ÿ
- @echo $(PROJECT_TITLE) build system -- supported compilers
- @echo ÿ
- @echo Several command-line compilers are supported on Win32:
- @echo ÿ
- @echo ÿÿmake setupÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿgcc (with Mingw)
- @echo ÿÿmake setup visualcÿÿÿÿÿÿÿÿÿÿÿÿÿMicrosoft Visual C++
- @echo ÿÿmake setup bcc32ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBorland C/C++
- @echo ÿÿmake setup lccÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWin32-LCC
- @echo ÿÿmake setup intelcÿÿÿÿÿÿÿÿÿÿÿÿÿÿIntel C/C++
- @echo ÿ
+ $(info )
+ $(info $(PROJECT_TITLE) build system -- supported compilers)
+ $(info )
+ $(info Several command-line compilers are supported on Win32:)
+ $(info )
+ $(info $(empty) make setup gcc (with Mingw))
+ $(info $(empty) make setup visualc Microsoft Visual C++)
+ $(info $(empty) make setup bcc32 Borland C/C++)
+ $(info $(empty) make setup lcc Win32-LCC)
+ $(info $(empty) make setup intelc Intel C/C++)
+ $(info )
setup: dump_target_list
.PHONY: dump_target_list list
else
- setup: dos_setup
+ setup: std_setup
endif
# additionally, we provide hooks for various other compilers
diff --git a/builds/windows/ftdebug.c b/builds/windows/ftdebug.c
index 2adcc52..ec70a0e 100644
--- a/builds/windows/ftdebug.c
+++ b/builds/windows/ftdebug.c
@@ -4,7 +4,7 @@
/* */
/* Debugging and logging component for Win32 (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -65,7 +65,7 @@
va_start( ap, fmt );
- vprintf( fmt, ap );
+ vfprintf( stderr, fmt, ap );
/* send the string to the debugger as well */
vsprintf( buf, fmt, ap );
OutputDebugStringA( buf );
@@ -137,8 +137,8 @@
/* for the memory and stream components which are set to 6 and 5, */
/* respectively. */
/* */
- /* See the file <internal/fttrace.h> for details of the available toggle */
- /* names. */
+ /* See the file `include/freetype/internal/fttrace.h' for details of the */
+ /* available toggle names. */
/* */
/* The level must be between 0 and 6; 0 means quiet (except for serious */
/* runtime errors), and 6 means _very_ verbose. */
diff --git a/builds/windows/vc2005/freetype.vcproj b/builds/windows/vc2005/freetype.vcproj
index eb52ab5..b1e2ae6 100644
--- a/builds/windows/vc2005/freetype.vcproj
+++ b/builds/windows/vc2005/freetype.vcproj
@@ -16,7 +16,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -33,7 +33,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -50,7 +50,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -67,7 +67,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -84,7 +84,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -101,7 +101,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -116,105 +116,18 @@
<File RelativePath="..\..\..\src\autofit\autofit.c">
</File>
<File RelativePath="..\..\..\src\bdf\bdf.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\cff\cff.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftbase.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftbitmap.c">
</File>
<File RelativePath="..\..\..\src\cache\ftcache.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\ftdebug.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" DisableLanguageExtensions="false" />
+ <FileConfiguration>
+ <Tool Name="VCCLCompilerTool" DisableLanguageExtensions="false" />
</FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftfstype.c">
@@ -222,151 +135,27 @@
<File RelativePath="..\..\..\src\base\ftgasp.c">
</File>
<File RelativePath="..\..\..\src\base\ftglyph.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\gzip\ftgzip.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftinit.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\lzw\ftlzw.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftstroke.c">
</File>
<File RelativePath="..\..\..\src\base\ftsystem.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\smooth\smooth.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<Filter Name="FT_MODULES">
+ <File RelativePath="..\..\..\src\base\ftbdf.c">
+ </File>
<File RelativePath="..\..\..\src\base\ftbbox.c">
</File>
- <File RelativePath="..\..\..\src\base\ftfntfmt.c">
+ <File RelativePath="..\..\..\src\base\ftcid.c">
</File>
<File RelativePath="..\..\..\src\base\ftmm.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\base\ftpfr.c">
</File>
@@ -376,8 +165,6 @@
</File>
<File RelativePath="..\..\..\src\base\ftwinfnt.c">
</File>
- <File RelativePath="..\..\..\src\base\ftlcdfil.c">
- </File>
<File RelativePath="..\..\..\src\base\ftgxval.c">
</File>
<File RelativePath="..\..\..\src\base\ftotval.c">
@@ -385,262 +172,46 @@
<File RelativePath="..\..\..\src\base\ftpatent.c">
</File>
<File RelativePath="..\..\..\src\pcf\pcf.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\pfr\pfr.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\psaux\psaux.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\pshinter\pshinter.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\psnames\psmodule.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\raster\raster.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\sfnt\sfnt.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\truetype\truetype.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\type1\type1.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\cid\type1cid.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\type42\type42.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
<File RelativePath="..\..\..\src\winfonts\winfnt.c">
- <FileConfiguration Name="Release|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Release Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
- </FileConfiguration>
- <FileConfiguration Name="Debug|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Singlethreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
- <FileConfiguration Name="Debug Multithreaded|Win32">
- <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" PreprocessorDefinitions="" BasicRuntimeChecks="3" />
- </FileConfiguration>
</File>
</Filter>
</Filter>
<Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl">
<File RelativePath="..\..\..\include\ft2build.h">
</File>
- <File RelativePath="..\..\..\include\config\ftconfig.h">
+ <File RelativePath="..\..\..\include\freetype\config\ftconfig.h">
</File>
- <File RelativePath="..\..\..\include\config\ftheader.h">
+ <File RelativePath="..\..\..\include\freetype\config\ftheader.h">
</File>
- <File RelativePath="..\..\..\include\config\ftmodule.h">
+ <File RelativePath="..\..\..\include\freetype\config\ftmodule.h">
</File>
- <File RelativePath="..\..\..\include\config\ftoption.h">
+ <File RelativePath="..\..\..\include\freetype\config\ftoption.h">
</File>
- <File RelativePath="..\..\..\include\config\ftstdlib.h">
+ <File RelativePath="..\..\..\include\freetype\config\ftstdlib.h">
</File>
</Filter>
</Files>
<Globals>
</Globals>
-</VisualStudioProject>
\ No newline at end of file
+</VisualStudioProject>
diff --git a/builds/windows/vc2005/index.html b/builds/windows/vc2005/index.html
index 7d47e39..c5e182e 100644
--- a/builds/windows/vc2005/index.html
+++ b/builds/windows/vc2005/index.html
@@ -11,22 +11,22 @@
<p>This directory contains project files for Visual C++, named
<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.6 sources:</p>
+compiles the following libraries from the FreeType 2.9.1 sources:</p>
<ul>
<pre>
- freetype26.lib - release build; single threaded
- freetype26_D.lib - debug build; single threaded
- freetype26MT.lib - release build; multi-threaded
- freetype26MT_D.lib - debug build; multi-threaded</pre>
+ freetype291.lib - release build; single threaded
+ freetype291_D.lib - debug build; single threaded
+ freetype291MT.lib - release build; multi-threaded
+ freetype291MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
archives are already stored this way, so no further action is required. If
you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <it>TAR
-file smart CR/LF Conversion</it> option. Alternatively, you may consider
+href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+file smart CR/LF Conversion</em> option. Alternatively, you may consider
using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
around, which specifically deal with this particular problem.
diff --git a/builds/windows/vc2008/freetype.vcproj b/builds/windows/vc2008/freetype.vcproj
index 738fe7c..f526cd2 100644
--- a/builds/windows/vc2008/freetype.vcproj
+++ b/builds/windows/vc2008/freetype.vcproj
@@ -70,7 +70,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype26.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -145,7 +145,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype26MT.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -220,7 +220,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype26ST.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -292,7 +292,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype26_D.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -365,7 +365,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -439,7 +439,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -473,203 +473,14 @@
<File
RelativePath="..\..\..\src\bdf\bdf.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\cff\cff.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftbase.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftbitmap.c"
@@ -678,139 +489,13 @@
<File
RelativePath="..\..\..\src\cache\ftcache.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\ftdebug.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
+ <FileConfiguration>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
DisableLanguageExtensions="false"
/>
</FileConfiguration>
@@ -826,270 +511,18 @@
<File
RelativePath="..\..\..\src\base\ftglyph.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\gzip\ftgzip.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftinit.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\lzw\ftlzw.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftstroke.c"
@@ -1098,136 +531,10 @@
<File
RelativePath="..\..\..\src\base\ftsystem.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\smooth\smooth.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<Filter
Name="FT_MODULES"
@@ -1237,75 +544,16 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftfntfmt.c"
+ RelativePath="..\..\..\src\base\ftbdf.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftcid.c"
>
</File>
<File
RelativePath="..\..\..\src\base\ftmm.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftpfr.c"
@@ -1324,10 +572,6 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftlcdfil.c"
- >
- </File>
- <File
RelativePath="..\..\..\src\base\ftgxval.c"
>
</File>
@@ -1342,806 +586,50 @@
<File
RelativePath="..\..\..\src\pcf\pcf.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\pfr\pfr.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\psaux\psaux.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\pshinter\pshinter.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\psnames\psmodule.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\raster\raster.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\sfnt\sfnt.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\truetype\truetype.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\type1\type1.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\cid\type1cid.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\type42\type42.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\winfonts\winfnt.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
</Filter>
</Filter>
@@ -2154,23 +642,23 @@
>
</File>
<File
- RelativePath="..\..\..\include\config\ftconfig.h"
+ RelativePath="..\..\..\include\freetype\config\ftconfig.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftheader.h"
+ RelativePath="..\..\..\include\freetype\config\ftheader.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftmodule.h"
+ RelativePath="..\..\..\include\freetype\config\ftmodule.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftoption.h"
+ RelativePath="..\..\..\include\freetype\config\ftoption.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftstdlib.h"
+ RelativePath="..\..\..\include\freetype\config\ftstdlib.h"
>
</File>
</Filter>
diff --git a/builds/windows/vc2008/index.html b/builds/windows/vc2008/index.html
index 533337f..25c6f9b 100644
--- a/builds/windows/vc2008/index.html
+++ b/builds/windows/vc2008/index.html
@@ -11,22 +11,22 @@
<p>This directory contains project files for Visual C++, named
<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.6 sources:</p>
+compiles the following libraries from the FreeType 2.9.1 sources:</p>
<ul>
<pre>
- freetype26.lib - release build; single threaded
- freetype26_D.lib - debug build; single threaded
- freetype26MT.lib - release build; multi-threaded
- freetype26MT_D.lib - debug build; multi-threaded</pre>
+ freetype291.lib - release build; single threaded
+ freetype291_D.lib - debug build; single threaded
+ freetype291MT.lib - release build; multi-threaded
+ freetype291MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
archives are already stored this way, so no further action is required. If
you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <it>TAR
-file smart CR/LF Conversion</it> option. Alternatively, you may consider
+href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+file smart CR/LF Conversion</em> option. Alternatively, you may consider
using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
around, which specifically deal with this particular problem.
diff --git a/builds/windows/vc2010/freetype.sln b/builds/windows/vc2010/freetype.sln
index 3bd176a..8698207 100644
--- a/builds/windows/vc2010/freetype.sln
+++ b/builds/windows/vc2010/freetype.sln
@@ -1,4 +1,3 @@
-
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio Express 2012 for Windows Desktop
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcxproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
@@ -7,42 +6,30 @@
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
- Debug Multithreaded|Win32 = Debug Multithreaded|Win32
- Debug Multithreaded|x64 = Debug Multithreaded|x64
- Debug Singlethreaded|Win32 = Debug Singlethreaded|Win32
- Debug Singlethreaded|x64 = Debug Singlethreaded|x64
+ Debug Static|Win32 = Debug Static|Win32
+ Debug Static|x64 = Debug Static|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
- Release Multithreaded|Win32 = Release Multithreaded|Win32
- Release Multithreaded|x64 = Release Multithreaded|x64
- Release Singlethreaded|Win32 = Release Singlethreaded|Win32
- Release Singlethreaded|x64 = Release Singlethreaded|x64
+ Release Static|Win32 = Release Static|Win32
+ Release Static|x64 = Release Static|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.ActiveCfg = Debug|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.Build.0 = Debug|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.ActiveCfg = Debug|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.Build.0 = Debug|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|x64.ActiveCfg = Debug Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|x64.Build.0 = Debug Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|x64.ActiveCfg = Debug Singlethreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|x64.Build.0 = Debug Singlethreaded|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Static|Win32.ActiveCfg = Debug Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Static|Win32.Build.0 = Debug Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Static|x64.ActiveCfg = Debug Static|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Static|x64.Build.0 = Debug Static|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg = Release|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 = Release|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.ActiveCfg = Release|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.Build.0 = Release|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|x64.ActiveCfg = Release Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|x64.Build.0 = Release Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|x64.ActiveCfg = Release Singlethreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|x64.Build.0 = Release Singlethreaded|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Static|Win32.ActiveCfg = Release Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Static|Win32.Build.0 = Release Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Static|x64.ActiveCfg = Release Static|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Static|x64.Build.0 = Release Static|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/builds/windows/vc2010/freetype.vcxproj b/builds/windows/vc2010/freetype.vcxproj
index 3fa8cd2..521e847 100644
--- a/builds/windows/vc2010/freetype.vcxproj
+++ b/builds/windows/vc2010/freetype.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
@@ -9,20 +9,12 @@
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
- <ProjectConfiguration Include="Debug Multithreaded|Win32">
- <Configuration>Debug Multithreaded</Configuration>
+ <ProjectConfiguration Include="Debug Static|Win32">
+ <Configuration>Debug Static</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
- <ProjectConfiguration Include="Debug Multithreaded|x64">
- <Configuration>Debug Multithreaded</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug Singlethreaded|Win32">
- <Configuration>Debug Singlethreaded</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Debug Singlethreaded|x64">
- <Configuration>Debug Singlethreaded</Configuration>
+ <ProjectConfiguration Include="Debug Static|x64">
+ <Configuration>Debug Static</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
@@ -33,183 +25,103 @@
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
- <ProjectConfiguration Include="Release Multithreaded|Win32">
- <Configuration>Release Multithreaded</Configuration>
+ <ProjectConfiguration Include="Release Static|Win32">
+ <Configuration>Release Static</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
- <ProjectConfiguration Include="Release Multithreaded|x64">
- <Configuration>Release Multithreaded</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release Singlethreaded|Win32">
- <Configuration>Release Singlethreaded</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release Singlethreaded|x64">
- <Configuration>Release Singlethreaded</Configuration>
+ <ProjectConfiguration Include="Release Static|x64">
+ <Configuration>Release Static</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
+ <!--
+ Switch the PlatformToolset based on the Visual Studio Version
+-->
+<PropertyGroup>
+ <!-- Assume Visual Studio 2010 / 4.0 as the default -->
+ <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">4.0</VisualStudioVersion>
+</PropertyGroup>
+<!-- Visual Studio 2010 (4.0) -->
+<PropertyGroup Condition="'$(VisualStudioVersion)' == '4.0'">
+ <PlatformToolset>v100</PlatformToolset>
+</PropertyGroup>
+<!-- Visual Studio 2013 (12.0) -->
+<PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'">
+ <PlatformToolset>v120</PlatformToolset>
+</PropertyGroup>
+<!-- Visual Studio 2015 (14.0) -->
+<PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'">
+ <PlatformToolset>v140</PlatformToolset>
+</PropertyGroup>
+<!-- Visual Studio 2017 (15.0) -->
+<PropertyGroup Condition="'$(VisualStudioVersion)' == '15.0'">
+ <PlatformToolset>v141</PlatformToolset>
+</PropertyGroup>
+<!--
+ End of: Switch the PlatformToolset based on the Visual Studio Version
+-->
<PropertyGroup Label="Globals">
- <ProjectGuid>{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}</ProjectGuid>
+ <ProjectGuid>{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}</ProjectGuid>
+ <RootNamespace>FreeType</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'" Label="Configuration">
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'" Label="Configuration">
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'" Label="Configuration">
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'" Label="Configuration">
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v100</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">.\..\..\..\objs\vc2010\$(Platform)\$(Configuration)\</IntDir>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'" />
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'" />
- <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'" />
- <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'" />
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">freetype26d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">freetype26d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">freetype26MTd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">freetype26MTd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">freetype26STd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">freetype26STd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">freetype26</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">freetype26</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">freetype26MT</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">freetype26MT</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">freetype26ST</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">freetype26ST</TargetName>
+ <OutDir>..\..\..\objs\$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>..\..\..\objs\$(Platform)\$(Configuration)\</IntDir>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules />
+ <CodeAnalysisRuleAssemblies />
+ <TargetName>freetype</TargetName>
</PropertyGroup>
<Import Project="$(SolutionDir)\freetype.user.props" Condition="exists('$(SolutionDir)\freetype.user.props')" Label="UserProperties" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
@@ -223,7 +135,7 @@
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
</ClCompile>
<ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>_DEBUG;_DLL;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
@@ -237,7 +149,7 @@
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
@@ -251,7 +163,7 @@
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
</ClCompile>
<ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>_DEBUG;_DLL;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
@@ -261,13 +173,11 @@
<AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
</Lib>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessToFile>false</PreprocessToFile>
- <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
@@ -291,69 +201,11 @@
<AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
</Lib>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessToFile>false</PreprocessToFile>
- <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
- <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <TargetMachine>MachineX64</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
- <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <SuppressStartupBanner>true</SuppressStartupBanner>
- <TargetMachine>MachineX86</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
@@ -379,10 +231,10 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
- <Optimization>Full</Optimization>
+ <Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
@@ -406,7 +258,7 @@
<OmitFramePointers>true</OmitFramePointers>
</ClCompile>
<ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>NDEBUG;_DLL;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
@@ -419,10 +271,10 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
- <Optimization>Full</Optimization>
+ <Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
@@ -446,7 +298,7 @@
<OmitFramePointers>true</OmitFramePointers>
</ClCompile>
<ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>NDEBUG;_DLL;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Lib>
@@ -457,12 +309,12 @@
<AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
</Lib>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|Win32'">
<ClCompile>
- <Optimization>Full</Optimization>
+ <Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
@@ -498,12 +350,12 @@
<AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
</Lib>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|x64'">
<ClCompile>
- <Optimization>Full</Optimization>
+ <Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
@@ -539,1180 +391,54 @@
<AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
</Lib>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">
- <ClCompile>
- <Optimization>Full</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib />
- <Lib>
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
- <TargetMachine>MachineX86</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">
- <ClCompile>
- <Optimization>Full</Optimization>
- <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <DisableLanguageExtensions>true</DisableLanguageExtensions>
- <WarningLevel>Level4</WarningLevel>
- <CompileAs>Default</CompileAs>
- <DisableSpecificWarnings>4001</DisableSpecificWarnings>
- <MultiProcessorCompilation>true</MultiProcessorCompilation>
- <WholeProgramOptimization>false</WholeProgramOptimization>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <FloatingPointExceptions>false</FloatingPointExceptions>
- <CreateHotpatchableImage>false</CreateHotpatchableImage>
- <CompileAsManaged>false</CompileAsManaged>
- <ProgramDataBaseFileName>
- </ProgramDataBaseFileName>
- <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
- <DebugInformationFormat>
- </DebugInformationFormat>
- <IntrinsicFunctions>true</IntrinsicFunctions>
- <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
- <OmitFramePointers>true</OmitFramePointers>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib />
- <Lib>
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
- <TargetMachine>MachineX64</TargetMachine>
- <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>
- </Lib>
- </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\src\autofit\autofit.c" />
- <ClCompile Include="..\..\..\src\bdf\bdf.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\cff\cff.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftbase.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftbase.c" />
+ <ClCompile Include="..\..\..\src\base\ftbbox.c" />
+ <ClCompile Include="..\..\..\src\base\ftbdf.c" />
<ClCompile Include="..\..\..\src\base\ftbitmap.c" />
- <ClCompile Include="..\..\..\src\cache\ftcache.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\ftdebug.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">false</DisableLanguageExtensions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">false</DisableLanguageExtensions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">false</DisableLanguageExtensions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">false</DisableLanguageExtensions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
- <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>
- </ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftcid.c" />
<ClCompile Include="..\..\..\src\base\ftfstype.c" />
<ClCompile Include="..\..\..\src\base\ftgasp.c" />
- <ClCompile Include="..\..\..\src\base\ftglyph.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\gzip\ftgzip.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftinit.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\lzw\ftlzw.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftstroke.c" />
- <ClCompile Include="..\..\..\src\base\ftsystem.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\smooth\smooth.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftbbox.c" />
- <ClCompile Include="..\..\..\src\base\ftfntfmt.c" />
- <ClCompile Include="..\..\..\src\base\ftmm.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftpfr.c" />
- <ClCompile Include="..\..\..\src\base\ftsynth.c" />
- <ClCompile Include="..\..\..\src\base\fttype1.c" />
- <ClCompile Include="..\..\..\src\base\ftwinfnt.c" />
- <ClCompile Include="..\..\..\src\base\ftlcdfil.c" />
+ <ClCompile Include="..\..\..\src\base\ftglyph.c" />
<ClCompile Include="..\..\..\src\base\ftgxval.c" />
+ <ClCompile Include="..\..\..\src\base\ftinit.c" />
+ <ClCompile Include="..\..\..\src\base\ftmm.c" />
<ClCompile Include="..\..\..\src\base\ftotval.c" />
<ClCompile Include="..\..\..\src\base\ftpatent.c" />
- <ClCompile Include="..\..\..\src\pcf\pcf.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ClCompile Include="..\..\..\src\base\ftpfr.c" />
+ <ClCompile Include="..\..\..\src\base\ftstroke.c" />
+ <ClCompile Include="..\..\..\src\base\ftsynth.c" />
+ <ClCompile Include="..\..\..\src\base\ftsystem.c" />
+ <ClCompile Include="..\..\..\src\base\fttype1.c" />
+ <ClCompile Include="..\..\..\src\base\ftwinfnt.c" />
+ <ClCompile Include="..\..\..\src\bdf\bdf.c" />
+ <ClCompile Include="..\..\..\src\cache\ftcache.c" />
+ <ClCompile Include="..\..\..\src\cff\cff.c" />
+ <ClCompile Include="..\..\..\src\cid\type1cid.c" />
+ <ClCompile Include="..\..\..\src\gzip\ftgzip.c" />
+ <ClCompile Include="..\..\..\src\lzw\ftlzw.c" />
+ <ClCompile Include="..\..\..\src\pcf\pcf.c" />
+ <ClCompile Include="..\..\..\src\pfr\pfr.c" />
+ <ClCompile Include="..\..\..\src\psaux\psaux.c" />
+ <ClCompile Include="..\..\..\src\pshinter\pshinter.c" />
+ <ClCompile Include="..\..\..\src\psnames\psmodule.c" />
+ <ClCompile Include="..\..\..\src\raster\raster.c" />
+ <ClCompile Include="..\..\..\src\sfnt\sfnt.c" />
+ <ClCompile Include="..\..\..\src\smooth\smooth.c" />
+ <ClCompile Include="..\..\..\src\truetype\truetype.c" />
+ <ClCompile Include="..\..\..\src\type1\type1.c" />
+ <ClCompile Include="..\..\..\src\type42\type42.c" />
+ <ClCompile Include="..\..\..\src\winfonts\winfnt.c" />
+ <ClCompile Include="..\ftdebug.c">
+ <DisableLanguageExtensions>false</DisableLanguageExtensions>
</ClCompile>
- <ClCompile Include="..\..\..\src\pfr\pfr.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\psaux\psaux.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\pshinter\pshinter.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\psnames\psmodule.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\raster\raster.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\sfnt\sfnt.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\truetype\truetype.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\type1\type1.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\cid\type1cid.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\type42\type42.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- <ClCompile Include="..\..\..\src\winfonts\winfnt.c">
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
- <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
- <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
- </ClCompile>
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\include\ft2build.h" />
- <ClInclude Include="..\..\..\include\config\ftconfig.h" />
- <ClInclude Include="..\..\..\include\config\ftheader.h" />
- <ClInclude Include="..\..\..\include\config\ftmodule.h" />
- <ClInclude Include="..\..\..\include\config\ftoption.h" />
- <ClInclude Include="..\..\..\include\config\ftstdlib.h" />
+ <ResourceCompile Include="..\..\..\src\base\ftver.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
\ No newline at end of file
+ <Target Name="AfterBuild">
+ <Copy SourceFiles="$(TargetPath)" DestinationFolder="..\..\..\objs" />
+ </Target>
+</Project>
diff --git a/builds/windows/vc2010/freetype.vcxproj.filters b/builds/windows/vc2010/freetype.vcxproj.filters
index f762b0b..8ba3673 100644
--- a/builds/windows/vc2010/freetype.vcxproj.filters
+++ b/builds/windows/vc2010/freetype.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
@@ -17,63 +17,111 @@
<ClCompile Include="..\..\..\src\autofit\autofit.c">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="..\..\..\src\bdf\bdf.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\cff\cff.c">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="..\..\..\src\base\ftbase.c">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="..\..\..\src\base\ftbitmap.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\cache\ftcache.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\ftdebug.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftfstype.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftgasp.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftglyph.c">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\gzip\ftgzip.c">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="..\..\..\src\base\ftinit.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftsystem.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\bdf\bdf.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cache\ftcache.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cff\cff.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\cid\type1cid.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\gzip\ftgzip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\..\..\src\lzw\ftlzw.c">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="..\..\..\src\base\ftstroke.c">
+ <ClCompile Include="..\..\..\src\pfr\pfr.c">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="..\..\..\src\base\ftsystem.c">
+ <ClCompile Include="..\..\..\src\pcf\pcf.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\psaux\psaux.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\pshinter\pshinter.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\psnames\psmodule.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\raster\raster.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\sfnt\sfnt.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\smooth\smooth.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\src\truetype\truetype.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\type1\type1.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\type42\type42.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\winfonts\winfnt.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\ftdebug.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\..\..\src\base\ftbbox.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
- <ClCompile Include="..\..\..\src\base\ftfntfmt.c">
+ <ClCompile Include="..\..\..\src\base\ftbdf.c">
+ <Filter>Source Files\FT_MODULES</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftbitmap.c">
+ <Filter>Source Files\FT_MODULES</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftcid.c">
+ <Filter>Source Files\FT_MODULES</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftfstype.c">
+ <Filter>Source Files\FT_MODULES</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftgasp.c">
+ <Filter>Source Files\FT_MODULES</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftglyph.c">
+ <Filter>Source Files\FT_MODULES</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftgxval.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
<ClCompile Include="..\..\..\src\base\ftmm.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftotval.c">
+ <Filter>Source Files\FT_MODULES</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftpatent.c">
+ <Filter>Source Files\FT_MODULES</Filter>
+ </ClCompile>
<ClCompile Include="..\..\..\src\base\ftpfr.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftstroke.c">
+ <Filter>Source Files\FT_MODULES</Filter>
+ </ClCompile>
<ClCompile Include="..\..\..\src\base\ftsynth.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
@@ -83,72 +131,24 @@
<ClCompile Include="..\..\..\src\base\ftwinfnt.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
- <ClCompile Include="..\..\..\src\base\ftlcdfil.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftgxval.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftotval.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\base\ftpatent.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\pcf\pcf.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\pfr\pfr.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\psaux\psaux.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\pshinter\pshinter.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\psnames\psmodule.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\raster\raster.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\sfnt\sfnt.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\truetype\truetype.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\type1\type1.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\cid\type1cid.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\type42\type42.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
- <ClCompile Include="..\..\..\src\winfonts\winfnt.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\include\ft2build.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\..\include\config\ftconfig.h">
+ <ClInclude Include="..\..\..\include\freetype\config\ftconfig.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\..\include\config\ftheader.h">
+ <ClInclude Include="..\..\..\include\freetype\config\ftheader.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\..\include\config\ftmodule.h">
+ <ClInclude Include="..\..\..\include\freetype\config\ftmodule.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\..\include\config\ftoption.h">
+ <ClInclude Include="..\..\..\include\freetype\config\ftoption.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="..\..\..\include\config\ftstdlib.h">
+ <ClInclude Include="..\..\..\include\freetype\config\ftstdlib.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
diff --git a/builds/windows/vc2010/index.html b/builds/windows/vc2010/index.html
index 37e642d..c3e6040 100644
--- a/builds/windows/vc2010/index.html
+++ b/builds/windows/vc2010/index.html
@@ -1,45 +1,29 @@
<html>
<header>
<title>
- FreeType 2 Project Files for VS.NET 2010 or newer
+ FreeType 2 Project Files for Visual C++ 2010 or newer
</title>
<body>
<h1>
- FreeType 2 Project Files for VS.NET 2010 or newer
+ FreeType 2 Project Files for Visual C++ 2010 or newer
</h1>
-<p>This directory contains a project file for Visual C++ (VS.NET 2010
-or newer), named <tt>freetype.vcxproj</tt>, and Visual Studio, called
-<tt>freetype.sln</tt>. It compiles the following libraries from the
-FreeType 2.6 sources:</p>
+<p>This directory contains solution and project files for
+Visual C++ 2010 or newer, named <tt>freetype.sln</tt>,
+and <tt>freetype.vcxproj</tt>. It compiles the following libraries
+from the FreeType 2.9.1 sources:</p>
<ul>
- <pre>
-freetype26.lib - release build
-freetype26d.lib - debug build
-freetype26ST.lib - release build; single threaded
-freetype26STd.lib - debug build; single threaded
-freetype26MT.lib - release build; multi-threaded
-freetype26MTd.lib - debug build; multi-threaded</pre>
+ <li>freetype.dll using 'Release' or 'Debug' configurations</li>
+ <li>freetype.lib using 'Release Static' or 'Debug Static' configurations</li>
</ul>
-<p>Both Win32 and x64 builds are supported.</p>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
-archives are already stored this way, so no further action is required. If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option. Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs\vc2010</tt>
-directory.</p>
+<p>Both Win32 and x64 builds are supported. Build directories and target
+files are placed in the top-level <tt>objs</tt> directory.</p>
<p>Customization of the FreeType library is done by editing the
-<tt>ftoptions.h</tt> header file in the top-level <tt>devel</tt> path.
+<tt>ftoption.h</tt> header file in the top-level <tt>devel</tt> path.
Alternatively, you may copy the file to another directory and change the
include directory in <tt>freetype.users.props</tt>.</p>
@@ -48,5 +32,9 @@
simplifies automated (command-line) builds using <a
href="http://msdn.microsoft.com/library/dd393574%28v=vs.100%29.aspx">msbuild</a>.</p>
+<p>To link your executable with FreeType DLL, you may want to define
+FT2_DLLIMPORT so that the imported functions are appropriately
+attributed with <tt>dllimport<tt>.</p>
+
</body>
</html>
diff --git a/builds/windows/visualc/freetype.dsp b/builds/windows/visualc/freetype.dsp
index 6f03105..dac3d25 100644
--- a/builds/windows/visualc/freetype.dsp
+++ b/builds/windows/visualc/freetype.dsp
@@ -54,7 +54,7 @@
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
@@ -78,7 +78,7 @@
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
@@ -102,8 +102,8 @@
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype26_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26MT_D.lib"
+# ADD BASE LIB32 /nologo /out:"lib\freetype291_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
@@ -126,8 +126,8 @@
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype26.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26MT.lib"
+# ADD BASE LIB32 /nologo /out:"lib\freetype291.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
@@ -151,8 +151,8 @@
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype26.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype26ST.lib"
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"
+# ADD LIB32 /out:"..\..\..\objs\freetype291ST.lib"
# SUBTRACT LIB32 /nologo
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
@@ -177,8 +177,8 @@
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype26_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26ST_D.lib"
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype291_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291ST_D.lib"
!ENDIF
@@ -200,17 +200,14 @@
# Begin Source File
SOURCE=..\..\..\src\bdf\bdf.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\cff\cff.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\base\ftbase.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -226,7 +223,11 @@
# End Source File
# Begin Source File
-SOURCE=..\..\..\src\base\ftfntfmt.c
+SOURCE=..\..\..\src\base\ftcid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\src\base\ftpatent.c
# End Source File
# Begin Source File
@@ -239,18 +240,15 @@
# Begin Source File
SOURCE=..\..\..\src\cache\ftcache.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\ftdebug.c
# ADD CPP /Ze
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\base\ftglyph.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -263,7 +261,6 @@
# Begin Source File
SOURCE=..\..\..\src\base\ftinit.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -272,7 +269,6 @@
# Begin Source File
SOURCE=..\..\..\src\base\ftmm.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -293,7 +289,6 @@
# Begin Source File
SOURCE=..\..\..\src\base\ftsystem.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -306,7 +301,6 @@
# Begin Source File
SOURCE=..\..\..\src\pcf\pcf.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -315,57 +309,46 @@
# Begin Source File
SOURCE=..\..\..\src\psaux\psaux.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\pshinter\pshinter.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\psnames\psmodule.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\raster\raster.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\sfnt\sfnt.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\smooth\smooth.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\truetype\truetype.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\type1\type1.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\cid\type1cid.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\type42\type42.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\winfonts\winfnt.c
-# SUBTRACT CPP /Fr
# End Source File
# End Group
# Begin Group "Header Files"
@@ -377,23 +360,23 @@
# End Source File
# Begin Source File
-SOURCE=..\..\..\include\config\ftconfig.h
+SOURCE=..\..\..\include\freetype\config\ftconfig.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\include\config\ftheader.h
+SOURCE=..\..\..\include\freetype\config\ftheader.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\include\config\ftmodule.h
+SOURCE=..\..\..\include\freetype\config\ftmodule.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\include\config\ftoption.h
+SOURCE=..\..\..\include\freetype\config\ftoption.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\include\config\ftstdlib.h
+SOURCE=..\..\..\include\freetype\config\ftstdlib.h
# End Source File
# End Group
# End Target
diff --git a/builds/windows/visualc/freetype.vcproj b/builds/windows/visualc/freetype.vcproj
index f434964..dd0c418 100644
--- a/builds/windows/visualc/freetype.vcproj
+++ b/builds/windows/visualc/freetype.vcproj
@@ -69,7 +69,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26.lib"
+ OutputFile="..\..\..\objs\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -144,7 +144,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT.lib"
+ OutputFile="..\..\..\objs\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -219,7 +219,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST.lib"
+ OutputFile="..\..\..\objs\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -291,7 +291,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26_D.lib"
+ OutputFile="..\..\..\objs\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -364,7 +364,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -438,7 +438,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -472,203 +472,14 @@
<File
RelativePath="..\..\..\src\bdf\bdf.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\cff\cff.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftbase.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftbitmap.c"
@@ -685,139 +496,13 @@
<File
RelativePath="..\..\..\src\cache\ftcache.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\ftdebug.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
+ <FileConfiguration>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
DisableLanguageExtensions="false"
/>
</FileConfiguration>
@@ -825,270 +510,18 @@
<File
RelativePath="..\..\..\src\base\ftglyph.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\gzip\ftgzip.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftinit.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\lzw\ftlzw.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftstroke.c"
@@ -1097,136 +530,10 @@
<File
RelativePath="..\..\..\src\base\ftsystem.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\smooth\smooth.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<Filter
Name="FT_MODULES"
@@ -1236,75 +543,16 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftfntfmt.c"
+ RelativePath="..\..\..\src\base\ftbdf.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftcid.c"
>
</File>
<File
RelativePath="..\..\..\src\base\ftmm.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftpfr.c"
@@ -1323,10 +571,6 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftlcdfil.c"
- >
- </File>
- <File
RelativePath="..\..\..\src\base\ftgxval.c"
>
</File>
@@ -1341,806 +585,50 @@
<File
RelativePath="..\..\..\src\pcf\pcf.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\pfr\pfr.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\psaux\psaux.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\pshinter\pshinter.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\psnames\psmodule.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\raster\raster.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\sfnt\sfnt.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\truetype\truetype.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\type1\type1.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\cid\type1cid.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\type42\type42.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\winfonts\winfnt.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
</File>
</Filter>
</Filter>
@@ -2153,23 +641,23 @@
>
</File>
<File
- RelativePath="..\..\..\include\config\ftconfig.h"
+ RelativePath="..\..\..\include\freetype\config\ftconfig.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftheader.h"
+ RelativePath="..\..\..\include\freetype\config\ftheader.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftmodule.h"
+ RelativePath="..\..\..\include\freetype\config\ftmodule.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftoption.h"
+ RelativePath="..\..\..\include\freetype\config\ftoption.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftstdlib.h"
+ RelativePath="..\..\..\include\freetype\config\ftstdlib.h"
>
</File>
</Filter>
diff --git a/builds/windows/visualc/index.html b/builds/windows/visualc/index.html
index 2beb8a9..c0611d2 100644
--- a/builds/windows/visualc/index.html
+++ b/builds/windows/visualc/index.html
@@ -11,22 +11,22 @@
<p>This directory contains project files for Visual C++, named
<tt>freetype.dsp</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.6 sources:</p>
+compiles the following libraries from the FreeType 2.9.1 sources:</p>
<ul>
<pre>
- freetype26.lib - release build; single threaded
- freetype26_D.lib - debug build; single threaded
- freetype26MT.lib - release build; multi-threaded
- freetype26MT_D.lib - debug build; multi-threaded</pre>
+ freetype291.lib - release build; single threaded
+ freetype291_D.lib - debug build; single threaded
+ freetype291MT.lib - release build; multi-threaded
+ freetype291MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
archives are already stored this way, so no further action is required. If
you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <it>TAR
-file smart CR/LF Conversion</it> option. Alternatively, you may consider
+href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+file smart CR/LF Conversion</em> option. Alternatively, you may consider
using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
around, which specifically deal with this particular problem.
diff --git a/builds/windows/visualce/freetype.dsp b/builds/windows/visualce/freetype.dsp
index 6f03105..5fe2b5a 100644
--- a/builds/windows/visualce/freetype.dsp
+++ b/builds/windows/visualce/freetype.dsp
@@ -54,7 +54,7 @@
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
@@ -78,7 +78,7 @@
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
@@ -102,8 +102,8 @@
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype26_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26MT_D.lib"
+# ADD BASE LIB32 /nologo /out:"lib\freetype291_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
@@ -126,8 +126,8 @@
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype26.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26MT.lib"
+# ADD BASE LIB32 /nologo /out:"lib\freetype291.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
@@ -151,8 +151,8 @@
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype26.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype26ST.lib"
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"
+# ADD LIB32 /out:"..\..\..\objs\freetype291ST.lib"
# SUBTRACT LIB32 /nologo
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
@@ -177,8 +177,8 @@
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype26_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26ST_D.lib"
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype291_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291ST_D.lib"
!ENDIF
@@ -200,17 +200,14 @@
# Begin Source File
SOURCE=..\..\..\src\bdf\bdf.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\cff\cff.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\base\ftbase.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -226,7 +223,7 @@
# End Source File
# Begin Source File
-SOURCE=..\..\..\src\base\ftfntfmt.c
+SOURCE=..\..\..\src\base\ftcid.c
# End Source File
# Begin Source File
@@ -239,18 +236,15 @@
# Begin Source File
SOURCE=..\..\..\src\cache\ftcache.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\ftdebug.c
# ADD CPP /Ze
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\base\ftglyph.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -263,7 +257,6 @@
# Begin Source File
SOURCE=..\..\..\src\base\ftinit.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -272,7 +265,6 @@
# Begin Source File
SOURCE=..\..\..\src\base\ftmm.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -280,6 +272,10 @@
# End Source File
# Begin Source File
+SOURCE=..\..\..\src\base\ftpatent.c
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\src\base\ftpfr.c
# End Source File
# Begin Source File
@@ -293,7 +289,6 @@
# Begin Source File
SOURCE=..\..\..\src\base\ftsystem.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -306,7 +301,6 @@
# Begin Source File
SOURCE=..\..\..\src\pcf\pcf.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
@@ -315,57 +309,46 @@
# Begin Source File
SOURCE=..\..\..\src\psaux\psaux.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\pshinter\pshinter.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\psnames\psmodule.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\raster\raster.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\sfnt\sfnt.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\smooth\smooth.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\truetype\truetype.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\type1\type1.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\cid\type1cid.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\type42\type42.c
-# SUBTRACT CPP /Fr
# End Source File
# Begin Source File
SOURCE=..\..\..\src\winfonts\winfnt.c
-# SUBTRACT CPP /Fr
# End Source File
# End Group
# Begin Group "Header Files"
@@ -377,23 +360,23 @@
# End Source File
# Begin Source File
-SOURCE=..\..\..\include\config\ftconfig.h
+SOURCE=..\..\..\include\freetype\config\ftconfig.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\include\config\ftheader.h
+SOURCE=..\..\..\include\freetype\config\ftheader.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\include\config\ftmodule.h
+SOURCE=..\..\..\include\freetype\config\ftmodule.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\include\config\ftoption.h
+SOURCE=..\..\..\include\freetype\config\ftoption.h
# End Source File
# Begin Source File
-SOURCE=..\..\..\include\config\ftstdlib.h
+SOURCE=..\..\..\include\freetype\config\ftstdlib.h
# End Source File
# End Group
# End Target
diff --git a/builds/windows/visualce/freetype.vcproj b/builds/windows/visualce/freetype.vcproj
index 69a9e97..b797311 100644
--- a/builds/windows/visualce/freetype.vcproj
+++ b/builds/windows/visualce/freetype.vcproj
@@ -87,7 +87,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26.lib"
+ OutputFile="..\..\..\objs\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -162,7 +162,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT.lib"
+ OutputFile="..\..\..\objs\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -237,7 +237,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST.lib"
+ OutputFile="..\..\..\objs\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -309,7 +309,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26_D.lib"
+ OutputFile="..\..\..\objs\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -382,7 +382,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -456,7 +456,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -534,7 +534,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26.lib"
+ OutputFile="..\..\..\objs\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -619,7 +619,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT.lib"
+ OutputFile="..\..\..\objs\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -704,7 +704,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST.lib"
+ OutputFile="..\..\..\objs\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -785,7 +785,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26_D.lib"
+ OutputFile="..\..\..\objs\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -867,7 +867,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -950,7 +950,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1036,7 +1036,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26.lib"
+ OutputFile="..\..\..\objs\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1121,7 +1121,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT.lib"
+ OutputFile="..\..\..\objs\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1206,7 +1206,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST.lib"
+ OutputFile="..\..\..\objs\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1287,7 +1287,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26_D.lib"
+ OutputFile="..\..\..\objs\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1369,7 +1369,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1452,7 +1452,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1538,7 +1538,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26.lib"
+ OutputFile="..\..\..\objs\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1623,7 +1623,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT.lib"
+ OutputFile="..\..\..\objs\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1708,7 +1708,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST.lib"
+ OutputFile="..\..\..\objs\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1789,7 +1789,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26_D.lib"
+ OutputFile="..\..\..\objs\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1871,7 +1871,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1954,7 +1954,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2040,7 +2040,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26.lib"
+ OutputFile="..\..\..\objs\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2125,7 +2125,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT.lib"
+ OutputFile="..\..\..\objs\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2210,7 +2210,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST.lib"
+ OutputFile="..\..\..\objs\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -2291,7 +2291,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26_D.lib"
+ OutputFile="..\..\..\objs\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2373,7 +2373,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2456,7 +2456,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2542,7 +2542,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26.lib"
+ OutputFile="..\..\..\objs\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2627,7 +2627,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT.lib"
+ OutputFile="..\..\..\objs\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2712,7 +2712,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST.lib"
+ OutputFile="..\..\..\objs\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -2793,7 +2793,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26_D.lib"
+ OutputFile="..\..\..\objs\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2875,7 +2875,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2958,7 +2958,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3044,7 +3044,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26.lib"
+ OutputFile="..\..\..\objs\freetype291.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3129,7 +3129,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT.lib"
+ OutputFile="..\..\..\objs\freetype291MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3214,7 +3214,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST.lib"
+ OutputFile="..\..\..\objs\freetype291ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -3295,7 +3295,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26_D.lib"
+ OutputFile="..\..\..\objs\freetype291_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3377,7 +3377,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26ST_D.lib"
+ OutputFile="..\..\..\objs\freetype291ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3460,7 +3460,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype26MT_D.lib"
+ OutputFile="..\..\..\objs\freetype291MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3502,1283 +3502,14 @@
<File
RelativePath="..\..\..\src\bdf\bdf.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\cff\cff.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftbase.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftbitmap.c"
@@ -4791,895 +3522,13 @@
<File
RelativePath="..\..\..\src\cache\ftcache.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\ftdebug.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
+ <FileConfiguration>
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- DisableLanguageExtensions="false"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
DisableLanguageExtensions="false"
/>
</FileConfiguration>
@@ -5691,1710 +3540,18 @@
<File
RelativePath="..\..\..\src\base\ftglyph.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\gzip\ftgzip.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftinit.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\lzw\ftlzw.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftstroke.c"
@@ -7403,856 +3560,10 @@
<File
RelativePath="..\..\..\src\base\ftsystem.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\smooth\smooth.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<Filter
Name="FT_MODULES"
@@ -8262,435 +3573,16 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftfntfmt.c"
+ RelativePath="..\..\..\src\base\ftbdf.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\src\base\ftcid.c"
>
</File>
<File
RelativePath="..\..\..\src\base\ftmm.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\base\ftpfr.c"
@@ -8709,10 +3601,6 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftlcdfil.c"
- >
- </File>
- <File
RelativePath="..\..\..\src\base\ftgxval.c"
>
</File>
@@ -8727,5126 +3615,50 @@
<File
RelativePath="..\..\..\src\pcf\pcf.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\pfr\pfr.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\psaux\psaux.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\pshinter\pshinter.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\psnames\psmodule.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\raster\raster.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\sfnt\sfnt.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\truetype\truetype.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\type1\type1.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\cid\type1cid.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\type42\type42.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
<File
RelativePath="..\..\..\src\winfonts\winfnt.c"
>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Pocket PC 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Smartphone 2003 (ARMV4)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Professional SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Singlethreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug Multithreaded|Windows Mobile 6 Standard SDK (ARMV4I)"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
</File>
</Filter>
</Filter>
@@ -13859,23 +3671,23 @@
>
</File>
<File
- RelativePath="..\..\..\include\config\ftconfig.h"
+ RelativePath="..\..\..\include\freetype\config\ftconfig.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftheader.h"
+ RelativePath="..\..\..\include\freetype\config\ftheader.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftmodule.h"
+ RelativePath="..\..\..\include\freetype\config\ftmodule.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftoption.h"
+ RelativePath="..\..\..\include\freetype\config\ftoption.h"
>
</File>
<File
- RelativePath="..\..\..\include\config\ftstdlib.h"
+ RelativePath="..\..\..\include\freetype\config\ftstdlib.h"
>
</File>
</Filter>
diff --git a/builds/windows/visualce/index.html b/builds/windows/visualce/index.html
index 90334f5..d5a3ca3 100644
--- a/builds/windows/visualce/index.html
+++ b/builds/windows/visualce/index.html
@@ -21,22 +21,22 @@
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
-It compiles the following libraries from the FreeType 2.6 sources:</p>
+It compiles the following libraries from the FreeType 2.9.1 sources:</p>
<ul>
<pre>
- freetype26.lib - release build; single threaded
- freetype26_D.lib - debug build; single threaded
- freetype26MT.lib - release build; multi-threaded
- freetype26MT_D.lib - debug build; multi-threaded</pre>
+ freetype291.lib - release build; single threaded
+ freetype291_D.lib - debug build; single threaded
+ freetype291MT.lib - release build; multi-threaded
+ freetype291MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
archives are already stored this way, so no further action is required. If
you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
tool to convert the line endings. For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <it>TAR
-file smart CR/LF Conversion</it> option. Alternatively, you may consider
+href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+file smart CR/LF Conversion</em> option. Alternatively, you may consider
using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
around, which specifically deal with this particular problem.
diff --git a/builds/windows/w32-bcc.mk b/builds/windows/w32-bcc.mk
index d483df5..01aab1c 100644
--- a/builds/windows/w32-bcc.mk
+++ b/builds/windows/w32-bcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-bccd.mk b/builds/windows/w32-bccd.mk
index bd72ca1..2c14d6c 100644
--- a/builds/windows/w32-bccd.mk
+++ b/builds/windows/w32-bccd.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-dev.mk b/builds/windows/w32-dev.mk
index 11d1afd..279d5f9 100644
--- a/builds/windows/w32-dev.mk
+++ b/builds/windows/w32-dev.mk
@@ -5,7 +5,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-gcc.mk b/builds/windows/w32-gcc.mk
index 1092fb7..9e3476b 100644
--- a/builds/windows/w32-gcc.mk
+++ b/builds/windows/w32-gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-icc.mk b/builds/windows/w32-icc.mk
index b2dcbe5..e695c12 100644
--- a/builds/windows/w32-icc.mk
+++ b/builds/windows/w32-icc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-intl.mk b/builds/windows/w32-intl.mk
index de9912f..1e36662 100644
--- a/builds/windows/w32-intl.mk
+++ b/builds/windows/w32-intl.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-lcc.mk b/builds/windows/w32-lcc.mk
index 75979f3..5729d36 100644
--- a/builds/windows/w32-lcc.mk
+++ b/builds/windows/w32-lcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-mingw32.mk b/builds/windows/w32-mingw32.mk
index 1300a44..b3a210d 100644
--- a/builds/windows/w32-mingw32.mk
+++ b/builds/windows/w32-mingw32.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-vcc.mk b/builds/windows/w32-vcc.mk
index fcf1aa0..342c8aa 100644
--- a/builds/windows/w32-vcc.mk
+++ b/builds/windows/w32-vcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-wat.mk b/builds/windows/w32-wat.mk
index cc5eaf0..37ecc88 100644
--- a/builds/windows/w32-wat.mk
+++ b/builds/windows/w32-wat.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/win32-def.mk b/builds/windows/win32-def.mk
index 516c5cd..f83d444 100644
--- a/builds/windows/win32-def.mk
+++ b/builds/windows/win32-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/configure b/configure
index fd52581..f9d2186 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -15,7 +15,7 @@
rm -f config.mk builds/unix/unix-def.mk builds/unix/unix-cc.mk
-# respect GNUMAKE environment variable for backwards compatibility
+# respect GNUMAKE environment variable for backward compatibility
if test "x$GNUMAKE" = x; then
if test "x$MAKE" = x; then
if test "x`make -v 2>/dev/null | egrep 'GNU|makepp'`" = x; then
@@ -29,7 +29,7 @@
fi
if test "x`$MAKE -v 2>/dev/null | egrep 'GNU|makepp'`" = x; then
- echo "GNU make (>= 3.80) or makepp (>= 1.19) is required to build FreeType2." >&2
+ echo "GNU make (>= 3.81) or makepp (>= 2.0) is required to build FreeType2." >&2
echo "Please try" >&2
echo >&2
echo " MAKE=<GNU make command name> $0" >&2
diff --git a/devel/ft2build.h b/devel/ft2build.h
index 8e9653d..1d17141 100644
--- a/devel/ft2build.h
+++ b/devel/ft2build.h
@@ -4,7 +4,7 @@
/* */
/* FreeType 2 build and setup macros (development version). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -27,14 +27,14 @@
*
*/
-#ifndef __FT2BUILD_H__
-#define __FT2BUILD_H__
+#ifndef FT2BUILD_H_
+#define FT2BUILD_H_
#define FT_CONFIG_OPTIONS_H <ftoption.h>
-#include <config/ftheader.h>
+#include <freetype/config/ftheader.h>
-#endif /* __FT2BUILD_H__ */
+#endif /* FT2BUILD_H_ */
/* END */
diff --git a/devel/ftoption.h b/devel/ftoption.h
index ed63aa0..1b4619e 100644
--- a/devel/ftoption.h
+++ b/devel/ftoption.h
@@ -4,7 +4,7 @@
/* */
/* User-selectable configuration macros (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTOPTION_H__
-#define __FTOPTION_H__
+#ifndef FTOPTION_H_
+#define FTOPTION_H_
#include <ft2build.h>
@@ -38,9 +38,9 @@
/* library from a single source directory. */
/* */
/* - You can put a copy of this file in your build directory, more */
- /* precisely in `$BUILD/config/ftoption.h', where `$BUILD' is the */
- /* name of a directory that is included _before_ the FreeType include */
- /* path during compilation. */
+ /* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */
+ /* is the name of a directory that is included _before_ the FreeType */
+ /* include path during compilation. */
/* */
/* The default FreeType Makefiles and Jamfiles use the build */
/* directory `builds/<system>' by default, but you can easily change */
@@ -51,7 +51,7 @@
/* locate this file during the build. For example, */
/* */
/* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */
- /* #include <config/ftheader.h> */
+ /* #include <freetype/config/ftheader.h> */
/* */
/* will use `$BUILD/myftoptions.h' instead of this file for macro */
/* definitions. */
@@ -59,7 +59,7 @@
/* Note also that you can similarly pre-define the macro */
/* FT_CONFIG_MODULES_H used to locate the file listing of the modules */
/* that are statically linked to the library at compile time. By */
- /* default, this file is <config/ftmodule.h>. */
+ /* default, this file is <freetype/config/ftmodule.h>. */
/* */
/* We highly recommend using the third method whenever possible. */
/* */
@@ -77,22 +77,49 @@
/*************************************************************************/
/* */
- /* Uncomment the line below if you want to activate sub-pixel rendering */
- /* (a.k.a. LCD rendering, or ClearType) in this build of the library. */
+ /* If you enable this configuration option, FreeType recognizes an */
+ /* environment variable called `FREETYPE_PROPERTIES', which can be used */
+ /* to control the various font drivers and modules. The controllable */
+ /* properties are listed in the section `Controlling FreeType Modules' */
+ /* in the reference's table of contents; currently there are properties */
+ /* for the auto-hinter (file `ftautoh.h'), CFF (file `ftcffdrv.h'), */
+ /* TrueType (file `ftttdrv.h'), and PCF (file `ftpcfdrv.h'). */
+ /* */
+ /* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
+ /* multiple lines for better readability). */
+ /* */
+ /* <optional whitespace> */
+ /* <module-name1> ':' */
+ /* <property-name1> '=' <property-value1> */
+ /* <whitespace> */
+ /* <module-name2> ':' */
+ /* <property-name2> '=' <property-value2> */
+ /* ... */
+ /* */
+ /* Example: */
+ /* */
+ /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
+ /* cff:no-stem-darkening=1 \ */
+ /* autofitter:warping=1 */
+ /* */
+#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+
+
+ /*************************************************************************/
+ /* */
+ /* Uncomment the line below if you want to activate LCD rendering */
+ /* technology similar to ClearType in this build of the library. This */
+ /* technology triples the resolution in the direction color subpixels. */
+ /* To mitigate color fringes inherent to this technology, you also need */
+ /* to explicitly set up LCD filtering. */
/* */
/* Note that this feature is covered by several Microsoft patents */
/* and should not be activated in any default build of the library. */
+ /* When this macro is not defined, FreeType offers alternative LCD */
+ /* rendering technology that produces excellent output without LCD */
+ /* filtering. */
/* */
- /* This macro has no impact on the FreeType API, only on its */
- /* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */
- /* FT_Render_Glyph still generates a bitmap that is 3 times wider than */
- /* the original size in case this macro isn't defined; however, each */
- /* triplet of subpixels has R=G=B. */
- /* */
- /* This is done to allow FreeType clients to run unmodified, forcing */
- /* them to display normal gray-level anti-aliased glyphs. */
- /* */
-#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
/*************************************************************************/
@@ -205,6 +232,17 @@
/*************************************************************************/
/* */
+ /* Define to disable the use of file stream functions and types, FILE, */
+ /* fopen() etc. Enables the use of smaller system libraries on embedded */
+ /* systems that have multiple system libraries, some with or without */
+ /* file stream support, in the cases where file stream support is not */
+ /* necessary such as memory loading of font files. */
+ /* */
+/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
+
+
+ /*************************************************************************/
+ /* */
/* PNG bitmap support. */
/* */
/* FreeType now handles loading color bitmap glyphs in the PNG format. */
@@ -232,59 +270,6 @@
/*************************************************************************/
/* */
- /* Define to disable the use of file stream functions and types, FILE, */
- /* fopen() etc. Enables the use of smaller system libraries on embedded */
- /* systems that have multiple system libraries, some with or without */
- /* file stream support, in the cases where file stream support is not */
- /* necessary such as memory loading of font files. */
- /* */
-/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
-
-
- /*************************************************************************/
- /* */
- /* DLL export compilation */
- /* */
- /* When compiling FreeType as a DLL, some systems/compilers need a */
- /* special keyword in front OR after the return type of function */
- /* declarations. */
- /* */
- /* Two macros are used within the FreeType source code to define */
- /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
- /* */
- /* FT_EXPORT( return_type ) */
- /* */
- /* is used in a function declaration, as in */
- /* */
- /* FT_EXPORT( FT_Error ) */
- /* FT_Init_FreeType( FT_Library* alibrary ); */
- /* */
- /* */
- /* FT_EXPORT_DEF( return_type ) */
- /* */
- /* is used in a function definition, as in */
- /* */
- /* FT_EXPORT_DEF( FT_Error ) */
- /* FT_Init_FreeType( FT_Library* alibrary ) */
- /* { */
- /* ... some code ... */
- /* return FT_Err_Ok; */
- /* } */
- /* */
- /* You can provide your own implementation of FT_EXPORT and */
- /* FT_EXPORT_DEF here if you want. If you leave them undefined, they */
- /* will be later automatically defined as `extern return_type' to */
- /* allow normal compilation. */
- /* */
- /* Do not #undef these macros here since the build system might define */
- /* them for certain configurations only. */
- /* */
-/* #define FT_EXPORT(x) extern x */
-/* #define FT_EXPORT_DEF(x) x */
-
-
- /*************************************************************************/
- /* */
/* Glyph Postscript Names handling */
/* */
/* By default, FreeType 2 is compiled with the `psnames' module. This */
@@ -297,7 +282,7 @@
/* */
/* - The TrueType driver will provide its own set of glyph names, */
/* if you build it to support postscript names in the TrueType */
- /* `post' table. */
+ /* `post' table, but will not synthesize a missing Unicode charmap. */
/* */
/* - The Type 1 driver will not be able to synthesize a Unicode */
/* charmap out of the glyphs found in the fonts. */
@@ -492,7 +477,21 @@
/* code will be used. */
/* */
/* Setting this macro is needed for systems that prohibit address */
- /* fixups, such as BREW. */
+ /* fixups, such as BREW. [Note that standard compilers like gcc or */
+ /* clang handle PIC generation automatically; you don't have to set */
+ /* FT_CONFIG_OPTION_PIC, which is only necessary for very special */
+ /* compilers.] */
+ /* */
+ /* Note that FT_CONFIG_OPTION_PIC support is not available for all */
+ /* modules (see `modules.cfg' for a complete list). For building with */
+ /* FT_CONFIG_OPTION_PIC support, do the following. */
+ /* */
+ /* 0. Clone the repository. */
+ /* 1. Define FT_CONFIG_OPTION_PIC. */
+ /* 2. Remove all subdirectories in `src' that don't have */
+ /* FT_CONFIG_OPTION_PIC support. */
+ /* 3. Comment out the corresponding modules in `modules.cfg'. */
+ /* 4. Compile. */
/* */
/* #define FT_CONFIG_OPTION_PIC */
@@ -586,73 +585,53 @@
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */
- /* EXPERIMENTAL subpixel hinting support into the TrueType driver. This */
- /* replaces the native TrueType hinting mechanism when anything but */
- /* FT_RENDER_MODE_MONO is requested. */
+ /* subpixel hinting support into the TrueType driver. This modifies the */
+ /* TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is */
+ /* requested. */
/* */
- /* Enabling this causes the TrueType driver to ignore instructions under */
- /* certain conditions. This is done in accordance with the guide here, */
- /* with some minor differences: */
+ /* In particular, it modifies the bytecode interpreter to interpret (or */
+ /* not) instructions in a certain way so that all TrueType fonts look */
+ /* like they do in a Windows ClearType (DirectWrite) environment. See */
+ /* [1] for a technical overview on what this means. See `ttinterp.h' */
+ /* for more details on the LEAN option. */
/* */
- /* http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
+ /* There are three options. */
/* */
- /* By undefining this, you only compile the code necessary to hint */
- /* TrueType glyphs with native TT hinting. */
+ /* 1. This option is associated with the `Infinality' moniker. */
+ /* Contributed by an individual nicknamed Infinality with the goal of */
+ /* making TrueType fonts render better than on Windows. A high */
+ /* amount of configurability and flexibility, down to rules for */
+ /* single glyphs in fonts, but also very slow. Its experimental and */
+ /* slow nature and the original developer losing interest meant that */
+ /* this option was never enabled in default builds. */
/* */
- /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */
- /* defined. */
+ /* 2. The new default mode for the TrueType driver. The Infinality code */
+ /* base was stripped to the bare minimum and all configurability */
+ /* removed in the name of speed and simplicity. The configurability */
+ /* was mainly aimed at legacy fonts like Arial, Times New Roman, or */
+ /* Courier. Legacy fonts are fonts that modify vertical stems to */
+ /* achieve clean black-and-white bitmaps. The new mode focuses on */
+ /* applying a minimal set of rules to all fonts indiscriminately so */
+ /* that modern and web fonts render well while legacy fonts render */
+ /* okay. */
/* */
-#define TT_CONFIG_OPTION_SUBPIXEL_HINTING
-
-
- /*************************************************************************/
+ /* 3. Compile both. */
/* */
- /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
- /* of the TrueType bytecode interpreter is used that doesn't implement */
- /* any of the patented opcodes and algorithms. The patents related to */
- /* TrueType hinting have expired worldwide since May 2010; this option */
- /* is now deprecated. */
+ /* By undefining these, you get rendering behavior like on Windows */
+ /* without ClearType, i.e., Windows XP without ClearType enabled and */
+ /* Win9x (interpreter version v35). Or not, depending on how much */
+ /* hinting blood and testing tears the font designer put into a given */
+ /* font. If you define one or both subpixel hinting options, you can */
+ /* switch between between v35 and the ones you define. */
/* */
- /* Note that the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* */
- /* if you define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; in other words, */
- /* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
- /* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */
+ /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */
+ /* defined. */
/* */
- /* This macro is only useful for a small number of font files (mostly */
- /* for Asian scripts) that require bytecode interpretation to properly */
- /* load glyphs. For all other fonts, this produces unpleasant results, */
- /* thus the unpatented interpreter is never used to load glyphs from */
- /* TrueType fonts unless one of the following two options is used. */
+ /* [1] https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
/* */
- /* - The unpatented interpreter is explicitly activated by the user */
- /* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */
- /* when opening the FT_Face. */
- /* */
- /* - FreeType detects that the FT_Face corresponds to one of the */
- /* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */
- /* contains a hard-coded list of font names and other matching */
- /* parameters (see function `tt_face_init' in file */
- /* `src/truetype/ttobjs.c'). */
- /* */
- /* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */
- /* */
- /* { */
- /* FT_Parameter parameter; */
- /* FT_Open_Args open_args; */
- /* */
- /* */
- /* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */
- /* */
- /* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */
- /* open_args.pathname = my_font_pathname; */
- /* open_args.num_params = 1; */
- /* open_args.params = ¶meter; */
- /* */
- /* error = FT_Open_Face( library, &open_args, index, &face ); */
- /* ... */
- /* } */
- /* */
-/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */
+/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */
+/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 */
+#define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 )
/*************************************************************************/
@@ -668,7 +647,7 @@
/* composite flags array which can be used to disambiguate, but old */
/* fonts will not have them. */
/* */
- /* http://www.microsoft.com/typography/otspec/glyf.htm */
+ /* https://www.microsoft.com/typography/otspec/glyf.htm */
/* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */
/* */
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
@@ -693,6 +672,24 @@
/*************************************************************************/
+ /* */
+ /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */
+ /* number of bytecode instructions executed for a single run of the */
+ /* bytecode interpreter, needed to prevent infinite loops. You don't */
+ /* want to change this except for very special situations (e.g., making */
+ /* a library fuzzer spend less time to handle broken fonts). */
+ /* */
+ /* It is not expected that this value is ever modified by a configuring */
+ /* script; instead, it gets surrounded with #ifndef ... #endif so that */
+ /* the value can be set as a preprocessor option on the compiler's */
+ /* command line. */
+ /* */
+#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
+#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L
+#endif
+
+
+ /*************************************************************************/
/*************************************************************************/
/**** ****/
/**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
@@ -748,6 +745,16 @@
/*************************************************************************/
+ /* */
+ /* T1_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe Type 1 */
+ /* engine gets compiled into FreeType. If defined, it is possible to */
+ /* switch between the two engines using the `hinting-engine' property of */
+ /* the type1 driver module. */
+ /* */
+#define T1_CONFIG_OPTION_OLD_ENGINE
+
+
+ /*************************************************************************/
/*************************************************************************/
/**** ****/
/**** C F F D R I V E R C O N F I G U R A T I O N ****/
@@ -793,6 +800,33 @@
/*************************************************************************/
/*************************************************************************/
/**** ****/
+ /**** P C F D R I V E R C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* There are many PCF fonts just called `Fixed' which look completely */
+ /* different, and which have nothing to do with each other. When */
+ /* selecting `Fixed' in KDE or Gnome one gets results that appear rather */
+ /* random, the style changes often if one changes the size and one */
+ /* cannot select some fonts at all. This option makes the PCF module */
+ /* prepend the foundry name (plus a space) to the family name. */
+ /* */
+ /* We also check whether we have `wide' characters; all put together, we */
+ /* get family names like `Sony Fixed' or `Misc Fixed Wide'. */
+ /* */
+ /* If this option is activated, it can be controlled with the */
+ /* `no-long-family-names' property of the pcf driver module. */
+ /* */
+#define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
/**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
/**** ****/
/*************************************************************************/
@@ -838,14 +872,21 @@
/*
- * This macro is defined if either unpatented or native TrueType
- * hinting is requested by the definitions above.
+ * This macro is defined if native TrueType hinting is requested by the
+ * definitions above.
*/
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
#define TT_USE_BYTECODE_INTERPRETER
-#undef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define TT_USE_BYTECODE_INTERPRETER
+
+#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 1
+#define TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+#endif
+
+#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 2
+#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+#endif
+#endif
#endif
@@ -880,7 +921,7 @@
FT_END_HEADER
-#endif /* __FTOPTION_H__ */
+#endif /* FTOPTION_H_ */
/* END */
diff --git a/docs/CHANGES b/docs/CHANGES
index bc177cf..a6d088a 100644
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -1,3 +1,761 @@
+CHANGES BETWEEN 2.9 and 2.9.1
+
+ I. IMPORTANT BUG FIXES
+
+ - Type 1 fonts containing flex features were not rendered
+ correctly (bug introduced in version 2.9).
+
+ - CVE-2018-6942: Older FreeType versions can crash with certain
+ malformed variation fonts.
+
+ http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6942
+
+
+ II. MISCELLANEOUS
+
+ - Bug fix: Multiple calls to `FT_Get_MM_Var' returned garbage.
+
+ - The base extensions `ftlcdfil' and `ftfntfmt' are now part of
+ the base module (and thus no longer configurable in file
+ `modules.cfg').
+
+ - Emboldening of bitmaps didn't work correctly sometimes, showing
+ various artifacts (bug introduced in version 2.8.1).
+
+ - Use of the `freetype-config' script to get compilation and
+ linking options is deprecated since it doesn't support
+ cross-compiling, among other deficiencies. Instead, you should
+ use the `pkg-config' interface.
+
+ The `configure' script no longer installs `freetype-config' by
+ default. For backwards compatibility, a new configure option
+ `--enable-freetype-config' is provided that reverts this
+ decision.
+
+ - The auto-hinter script ranges have been updated for Unicode 11.
+ No support for new scripts have been added, however, with the
+ exception of Georgian Mtavruli.
+
+ - Support for cmake has been improved.
+
+ - The next release will remove support for Position Independent
+ Code as needed by systems that prohibit automatic address
+ fixups, such as BREW. [Compilation with modern compilers that
+ use flags like `-fPIC' or `-fPIE' is not affected.]
+
+
+======================================================================
+
+CHANGES BETWEEN 2.8.1 and 2.9
+
+ I. IMPORTANT BUG FIXES
+
+ - Advance width values of variation fonts were often wrong.
+
+ - More fixes for variation font support; you should update to this
+ version if you want to support them.
+
+
+ II. IMPORTANT CHANGES
+
+ - As a GSoC project, Ewald Hew extended the new (Adobe) CFF engine
+ to handle Type 1 fonts also, thus greatly improving the
+ rendering of this format. This is the new default. The old
+ engine is still available if the configuration macro
+ `T1_CONFIG_OPTION_OLD_ENGINE' gets defined; using the
+ `hinting-engine' property of the `type1' driver module you can
+ then switch between the two engines.
+
+ - A new function, `FT_Set_Named_Instance', can be used to set or
+ change the current named instance.
+
+ - Starting with this FreeType version, resetting variation
+ coordinates will return to the currently selected named
+ instance. Previously, FreeType returned to the base font (i.e.,
+ no instance set).
+
+
+ III. MISCELLANEOUS
+
+ - The `face_flags' field of the `FT_Face' structure has a new bit,
+ `FT_FACE_FLAG_VARIATION', which is set if a variation font has
+ been altered with `FT_Set_MM_Design_Coordinates',
+ `FT_Set_Var_Design_Coordinates', or
+ `FT_Set_Var_Blend_Coordinates'.
+
+ - If the current face is a named instance, the new macro
+ `FT_IS_NAMED_INSTANCE' returns true.
+
+ - `FT_IS_VARIATION' is a new macro that returns true whenever a
+ face object has been altered by `FT_Set_MM_Design_Coordinates',
+ `FT_Set_Var_Design_Coordinates', or
+ `FT_Set_Var_Blend_Coordinates'.
+
+ - Changing the design coordinates of a variation font with
+ `FT_Set_Var_Design_Coordinates' or
+ `FT_Set_Var_Blend_Coordinates' does not influence the named
+ instance index value (only `FT_Set_Named_Instance' does that).
+
+ - Special PostScript names for named instances are only returned
+ if the named instance is set with `FT_Set_Named_Instance' (and
+ the font has corresponding entries in its `fvar' table). If
+ `FT_IS_VARIATION' returns true, the algorithmically derived
+ PostScript name is provided, not looking up special entries for
+ named instances.
+
+ - A new function `FT_Done_MM_Var' is provided to free the memory
+ returned in a call to `FT_Get_MM_Var'.
+
+ - On platforms using the `configure' script, the installed
+ `ftoption.h' file now correctly reflects configuration options
+ like `--with-harfbuzz'.
+
+ - Better support to build FreeType as a DLL on Windows using
+ Visual C.
+
+ - All data specific to driver modules is now collected in a single
+ file, `FT_DRIVER_H'. Consequently, the macros
+ `FT_AUTOHINTER_H', `FT_CFF_DRIVER_H', `FT_TRUETYPE_DRIVER_H',
+ and `FT_PCF_DRIVER_H' still work but are deprecated.
+
+ - Some fuzzer fixes to better reject malformed fonts.
+
+ - The `ftbench' demo program has a new test for opening a new face
+ and loading some glyphs.
+
+ - The `ftbench' demo program has a new option `-j' to specify the
+ last glyph index to be used in the tests.
+
+ - The `ftgrid' demo program has a new option `-n' to suppress
+ display of named instances of variation fonts.
+
+ - The `ttdebug' demo program can now show a stack trace (key `K')
+ and switch between hexadecimal and decimal display of integers
+ (key `I').
+
+
+======================================================================
+
+CHANGES BETWEEN 2.8 and 2.8.1
+
+ I. IMPORTANT BUG FIXES
+
+ - B/W hinting of TrueType fonts didn't work properly if
+ interpreter version 38 or 40 was selected.
+
+ - Some severe problems within the handling of TrueType Variation
+ Fonts were found and fixed.
+
+ - Function `FT_Set_Var_Design_Coordinates' didn't correctly handle
+ the case with less input coordinates than axes.
+
+
+ II. IMPORTANT CHANGES
+
+ - By default, FreeType now offers high quality LCD-optimized
+ output without resorting to ClearType techniques of resolution
+ tripling and filtering. In this method, called Harmony, each
+ color channel is generated separately after shifting the glyph
+ outline, capitalizing on the fact that the color grids on LCD
+ panels are shifted by a third of a pixel. This output is
+ indistinguishable from ClearType with a light 3-tap filter.
+
+
+ III. MISCELLANEOUS
+
+ - Using the new function `FT_Get_Var_Axis_Flags', an application
+ can access the `flags' field of a variation axis (introduced in
+ OpenType version 1.8.2)
+
+ - More sanity checks.
+
+ - The internal representation of buffers for LCD rendering has
+ changed (to be more precise, the amount of padding gets computed
+ differently). Applications that use the FreeType API are not
+ affected.
+
+ - To reset all design axis values of a variation font to its
+ default values you can now say
+
+ error = FT_Set_Var_Design_Coordinates( face, 0, NULL );
+
+ This also works with functions `FT_Set_MM_Design_Coordinates'
+ and `FT_Set_MM_Blend_Coordinates'.
+
+ - FreeType now synthesizes a missing Unicode cmap for (older)
+ TrueType fonts also if glyph names are available.
+
+ - FreeType has improved handling of BDF fonts without the
+ `POINT_SIZE', `RESOLUTION_X', or `RESOLUTION_Y' properties; the
+ library now uses the values of the `SIZE' keyword if they are
+ missing. Previously, `SIZE' was completely ignored, and
+ FreeType used heuristic values instead.
+
+ - Multiple calls to `FT_Bitmap_Convert' do work now as advertised.
+ Previously, they failed with an assertion error if there was an
+ empty bitmap between non-empty ones.
+
+ - The warping option has moved from `light' to `normal' hinting
+ where it replaces the original hinting algorithm. The `light'
+ mode is now always void of any hinting in x-direction.
+
+ - 16bit compiler support is now officially ended. We didn't
+ provide any maintenance since many years, and given that there
+ were no error or problem reports either it seems that it is no
+ longer needed.
+
+ - The `ftgrid' demo program can now toggle the display of grid
+ lines with the `G' key.
+
+ - The `ftgrid' demo program can toggle a different set of colors
+ (suitable to color-blind people) with the `C' key.
+
+ - The `ftgrid' demo program now supports the `-e' command line
+ option to select a cmap.
+
+ - The `ftdump' demo program has a new command line option `-t' to
+ output the SFNT table list.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.7.1 and 2.8
+
+ I. IMPORTANT CHANGES
+
+ - Support for OpenType Variation Fonts is now complete. The last
+ missing part was handling the `VVAR' and `MVAR' tables, which is
+ available with this release.
+
+ - A new function `FT_Face_Properties' allows the control of some
+ module and library properties per font. Currently, the
+ following properties can be handled: stem darkening, LCD filter
+ weights, and the random seed for the `random' CFF operator.
+
+ - The PCF change to show more `colourful' family names (introduced
+ in version 2.7.1) was too radical; it can now be configured with
+ PCF_CONFIG_OPTION_LONG_FAMILY_NAMES at compile time. If
+ activated, it can be switched off at run time with the new pcf
+ property `no-long-family-names'. If the `FREETYPE_PROPERTIES'
+ environment variable is available, you can say
+
+ FREETYPE_PROPERTIES=pcf:no-long-family-names=1
+
+ - Support for the following scripts has been added to the
+ auto-hinter.
+
+ Adlam, Avestan, Bamum, Buhid, Carian, Chakma, Coptic, Cypriot,
+ Deseret, Glagolitic, Gothic, Kayah, Lisu, N'Ko, Ol Chiki, Old
+ Turkic, Osage, Osmanya, Saurashtra, Shavian, Sundanese, Tai
+ Viet, Tifinagh, Unified Canadian Syllabics, Vai
+
+
+ II. IMPORTANT BUG FIXES
+
+ - `Light' auto-hinting mode no longer uses TrueType metrics for
+ TrueType fonts. This bug was introduced in version 2.4.6,
+ causing horizontal scaling also. Almost all GNU/Linux
+ distributions (with Fedora as a notable exception) disabled the
+ corresponding patch for good reasons; chances are thus high that
+ you won't notice a difference.
+
+ If optical backward compatibility for legacy applications is
+ necessary, you might enable the AF_CONFIG_OPTION_TT_SIZE_METRICS
+ configuration option. However, it is strongly recommended to
+ avoid that, adjusting font sizes instead.
+
+ - Global size metrics values in the `FT_Size_Metrics' structure
+ can be different for TrueType fonts. Reason is that in older
+ FreeType versions the metrics were rounded differently to
+ integer pixels compared to all other font formats, yielding an
+ inconsistent behaviour if you used non-native hinting. Starting
+ with this version, global size metrics for TrueType fonts are
+ handled the same as other font formats: `ascender' gets rounded
+ up, `descender' gets rounded down, `height' gets normally
+ rounded, and `max_advance' gets normally rounded, too.
+
+ If you need more precise values of (global) ascender, descender,
+ height, or `max_advance', please take the corresponding values
+ from the `FT_Face' structure and scale them manually.
+
+ - If a TrueType font gets loaded with FT_LOAD_NO_HINTING, FreeType
+ now scales the font linearly again (bug introduced in version
+ 2.4.6).
+
+ - CVE-2017-8105, CVE-2017-8287: Older FreeType versions have
+ out-of-bounds writes caused by heap-based buffer overflows
+ related to Type 1 fonts.
+
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8105
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8287
+
+
+ III. MISCELLANEOUS
+
+ - A new function `FT_Set_Default_Properties' has been added to
+ parse the `FREETYPE_PROPERTIES' environment variable
+ (previously, it was internal only). `FT_Init_FreeType' always
+ call this function, but `FT_New_Library' does not (similar to
+ `FT_Add_Default_Modules').
+
+ - To be in sync with OpenType version 1.7 and newer, macros
+
+ FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY,
+ FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY,
+ TT_NAME_ID_PREFERRED_FAMILY
+ TT_NAME_ID_PREFERRED_SUBFAMILY
+
+ are renamed to
+
+ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY,
+ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY,
+ TT_NAME_ID_TYPOGRAPHIC_FAMILY
+ TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
+
+ The old macro names are deprecated (but still available).
+
+ - Support for SFNT `name' tables has been improved.
+
+ . Format 1 `name' tables are now supported. Use new function
+ `FT_Get_Sfnt_LangTag' to access associated language tags.
+
+ . Language, encoding, and name IDs have been updated to OpenType
+ version 1.8.1.
+
+ - The new CFF engine now handles the `random' operator. All CFF
+ opcodes are now supported.
+
+ - The CFF module has a new property `random-seed' to control the
+ pseudo-random number generation for the `random' operator.
+
+ - The `freetype-config' script is now a wrapper of `pkg-config' if
+ this program is available in the path.
+
+ - FT_LOAD_TARGET_LCD is now a variant of FT_LOAD_TARGET_LIGHT;
+ this should provide better rendering results.
+
+ - A mode to display light auto-hinting with subpixel positioning
+ has been added to `ftdiff'.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.7 and 2.7.1
+
+ I. IMPORTANT CHANGES
+
+ - Support for the new CFF2 font format as introduced with OpenType
+ 1.8 has been contributed by Dave Arnolds from Adobe.
+
+ - Preliminary support for variation fonts as specified in OpenType
+ 1.8 (in addition to the already existing support for Adobe's MM
+ and Apple's GX formats). Dave Arnolds contributed handling of
+ advance width change variation; more will come in the next
+ version.
+
+
+ II. IMPORTANT BUG FIXES
+
+ - Handling of raw CID fonts was partially broken (bug introduced
+ in 2.6.4).
+
+ - CVE-2016-10328: Older FreeType versions had an out-of-bounds
+ write caused by a heap-based buffer overflow related to the CFF
+ fonts.
+
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10328
+
+
+ III. MISCELLANEOUS
+
+ - Some limits for TrueType bytecode execution have been tightened
+ to speed up FreeType's handling of malformed fonts, in
+ particular to quickly abort endless loops.
+
+ - The number of twilight points can no longer be set to an
+ arbitrarily large value.
+
+ - The total number of jump opcode instructions (like JMPR) with
+ negative arguments is dynamically restricted; the same holds
+ for the total number of iterations in LOOPCALL opcodes.
+
+ The dynamic limits are based on the number of points in a glyph
+ and the number of CVT entries. Please report if you encounter a
+ font where the selected values are not adequate.
+
+ - PCF family names are made more `colourful'; they now include the
+ foundry and information whether they contain wide characters.
+ For example, you no longer get `Fixed' but rather `Sony Fixed'
+ or `Misc Fixed Wide'.
+
+ - A new function `FT_Get_Var_Blend_Coordinates' (with its alias
+ name `FT_Get_MM_Blend_Coordinates') to retrieve the normalized
+ blend coordinates of the currently selected variation instance
+ has been added to the Multiple Masters interface.
+
+ - A new function `FT_Get_Var_Design_Coordinates' to retrieve the
+ design coordinates of the currently selected variation instance
+ has been added to the Multiple Masters interface.
+
+ - A new load flag `FT_LOAD_BITMAP_METRICS_ONLY' to retrieve bitmap
+ information without loading the (embedded) bitmap itself.
+
+ - Retrieving advance widths from bitmap strikes (using
+ `FT_Get_Advance' and `FT_Get_Advances') have been sped up.
+
+ - The usual round of fuzzer fixes to better reject malformed
+ fonts.
+
+ - The `ftmulti' demo program can now switch engines with key `H'.
+
+ - The `ftstring' demo program can now show some built-in,
+ non-latin sample strings (to be selected with the TAB key).
+
+ - The `ftview' demo program can now switch between a font's
+ charmaps using the TAB key.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.6.5 and 2.7
+
+ I. IMPORTANT CHANGES
+
+ - As announced earlier, the 2.7.x series now uses the new subpixel
+ hinting mode as the default, emulating a modern version of
+ ClearType.
+
+ This change inevitably leads to different rendering results, and
+ you might change the `TT_CONFIG_OPTION_SUBPIXEL_HINTING'
+ configuration option to adapt it to your taste (or use the new
+ `FREETYPE_PROPERTIES' environment variable). See the
+ corresponding entry below for version 2.6.4, which gives more
+ information.
+
+ - A new option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES' has been
+ introduced. If set (which is the default), an environment
+ variable `FREETYPE_PROPERTIES' can be used to control driver
+ properties. Example:
+
+ FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
+ cff:no-stem-darkening=1 \
+ autofitter:warping=1
+
+ This allows to select, say, the subpixel hinting mode at runtime
+ for a given application. See file `ftoption.h' for more.
+
+
+ II. IMPORTANT BUG FIXES
+
+ - After loading a named instance of a GX variation font, the
+ `face_index' value in the returned `FT_Face' structure now
+ correctly holds the named instance index in the upper 16bits as
+ documented.
+
+
+ III. MISCELLANEOUS
+
+ - A new macro `FT_IS_NAMED_INSTANCE' to test whether a given face
+ is a named instance.
+
+ - More fixes to GX font handling.
+
+ - Apple's `GETVARIATION' bytecode operator (needed for GX
+ variation font support) has been implemented.
+
+ - Another round of fuzzer fixes, mainly to reject invalid fonts
+ faster.
+
+ - Handling of raw CID fonts was broken (bug introduced in version
+ 2.6.4).
+
+ - The smooth rasterizer has been streamlined to make it faster by
+ approx. 20%.
+
+ - The `ftgrid' demo program now understands command line option
+ `-d' to give start-up design coordinates.
+
+ - The `ftdump' demo program has a new command line option `-p' to
+ dump TrueType bytecode instructions.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.6.4 and 2.6.5
+
+ I. IMPORTANT BUG FIXES
+
+ - Compilation works again on Mac OS X (bug introduced in version
+ 2.6.4).
+
+
+ II. IMPORTANT CHANGES
+
+ - The new subpixel hinting mode is now disabled by default; it
+ will be enabled by default in the forthcoming 2.7.x series.
+ Main reason for reverting this feature is the principle of least
+ surprise: a sudden change in appearance of all fonts (even if
+ the rendering improves for almost all recent fonts) should not
+ be expected in a new micro version of a series.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.6.3 and 2.6.4
+
+ I. IMPORTANT CHANGES
+
+ - A new subpixel hinting mode has been contributed by Nikolaus
+ Waxweiler, which is now the default rendering mode for TrueType
+ fonts. It implements (almost everything of) version 40 of the
+ bytecode engine.
+
+ The existing code base in FreeType (the `Infinality code') was
+ stripped to the bare minimum and all configurability removed in
+ the name of speed and simplicity. The configurability was
+ mainly aimed at legacy fonts like Arial, Times New Roman, or
+ Courier. [Legacy fonts are fonts that modify vertical stems to
+ achieve clean black-and-white bitmaps.] The new mode focuses on
+ applying a minimal set of rules to all fonts indiscriminately so
+ that modern and web fonts render well while legacy fonts render
+ okay.
+
+ Activation of the subpixel hinting support can be controlled
+ with the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' configuration
+ option at compile time: If set to value 1, you get the old
+ Infinality mode (which was never the default due to its
+ slowness). Value 2 activates the new subpixel hinting mode, and
+ value 3 activates both. The default is value 2.
+
+ At run time, you can select the subpixel hinting mode with the
+ `interpreter-version' property (provided you have compiled in
+ the corresponding hinting mode); see `ftttdrv.h' for more.
+
+ - Support for the following scripts has been added to the
+ auto-hinter.
+
+ Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi,
+ Malayalam, Sinhala, Tamil
+
+
+ II. MISCELLANEOUS
+
+ - Type 42 fonts as created by LilyPond are now supported.
+
+ - Minor rendering improvements in the auto-hinter.
+
+ - For experimental reasons, the old CFF engine now supports all
+ CFF operators except `random', including the deprecated Multiple
+ Masters instructions. This allows the display of fonts like
+ `ITCGaramondMM-It.otf' (without font variations, though).
+
+ - Another round of fixes to improve handling of invalid fonts.
+
+ - The `ftgrid' demo program now displays the rendered pixels also;
+ this can be switched off with the `b' key. Selection of various
+ LCD filtering modes can be done with the `L' key.
+
+ - The demo programs have been extended to allow selection of all
+ available TrueType bytecode engines.
+
+ - A very early beta version of a new, Qt based demo program called
+ `ftinspect' is part of the source code bundle; it will
+ eventually supersede the other demo programs. Currently, you
+ have to compile it manually with `qmake; make'; note that many
+ features are still missing.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.6.2 and 2.6.3
+
+ I. IMPORTANT CHANGES
+
+ - Khmer, Myanmar, Bengali, and Kannada script support has been
+ added to the auto-hinter.
+
+
+ II. MISCELLANEOUS
+
+ - Better support of Indic scripts like Devanagari by using a
+ top-to-bottom hinting flow.
+
+ - All FreeType macros starting with two underscores have been
+ renamed to avoid a violation of both the C and C++ standards.
+ Example: Header macros of the form `__FOO_H__' are now called
+ `FOO_H_'. In most cases, this should be completely transparent
+ to the user. The exception to this is `__FTERRORS_H__', which
+ must be sometimes undefined by the user to get FreeType error
+ strings: Both this form and the new `FTERRORS_H_' macro are
+ accepted for backward compatibility.
+
+ - Minor improvements mainly to the Type 1 driver.
+
+ - The new CFF engine now supports all Type 2 operators except
+ `random'.
+
+ - The macro `_STANDALONE_', used for compiling the B/W and smooth
+ rasterizers as stand-alone modules, has been renamed to
+ `STANDALONE_', since macro names starting with an underscore and
+ followed by an uppercase letter are reserved in both C and C++.
+
+ - Function `FT_Library_SetLcdFilterWeights' now also activates
+ custom LCD filter weights (instead of just adjusting them).
+
+ - Support for `unpatented hinting' has been completely removed:
+ Consequently, the two functions `FT_Face_CheckTrueTypePatents'
+ and `FT_Face_SetUnpatentedHinting' now return always false,
+ doing nothing.
+
+ - The `ftgamma' demo program has been modernized; the gamma grid
+ display has been moved from `ftview' to this program.
+
+ - In `ftview', it is now possible to cycle through the available
+ LCD filtering modes.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.6.1 and 2.6.2
+
+ I. IMPORTANT CHANGES
+
+ - The auto-hinter now supports stem darkening, to be controlled by
+ the new `no-stem-darkening' and `darkening-parameters'
+ properties. This is an experimental feature contributed by
+ Nikolaus Waxweiler, and the interface might change in a future
+ release.
+
+ - By default, stem darkening is now switched off (for both the CFF
+ engine and the auto-hinter). The main reason is that you need
+ linear alpha blending and gamma correction to get correct
+ rendering results, and the latter is not yet available in most
+ freely available rendering stacks like X11. Applying stem
+ darkening without proper gamma correction leads to far too dark
+ rendering results.
+
+ - The meaning of `FT_RENDER_MODE_LIGHT' has been slightly
+ modified. It now essentially means `no hinting along the
+ horizontal axis'; in particular, no change of glyph advance
+ widths. Consequently, the auto-hinter is used for all scalable
+ font formats except for CFF. It is planned that other
+ font-specific rendering engines (TrueType, Type 1) will follow.
+
+
+ II. MISCELLANEOUS
+
+ - The default LCD filter has been changed to be normalized and
+ color-balanced.
+
+ - For better compatibility with FontConfig, function
+ `FT_Library_SetLcdFilter' accepts a new enumeration value
+ `FT_LCD_FILTER_LEGACY1' (which has the same meaning as
+ `FT_LCD_FILTER_LEGACY').
+
+ - A large number of bugs have been detected by using the libFuzzer
+ framework, which should further improve handling of invalid
+ fonts. Thanks again to Kostya Serebryany and Bungeman!
+
+ - `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES', a new configuration
+ option, controls the maximum number of executed opcodes within a
+ bytecode program. You don't want to change this except for very
+ special situations (e.g., making a library fuzzer spend less
+ time to handle broken fonts).
+
+ - The smooth renderer has been made faster.
+
+ - The `ftstring' demo program now supports subpixel rendering; use
+ key `l' to cycle through the LCD modes.
+
+ - The `ftstring' demo program now supports colour rendering; use
+ the `space' key to cycle through various colour combinations.
+
+ - The graphical demo programs now use a default gamma value of 1.8
+ (instead of 1.2).
+
+
+======================================================================
+
+CHANGES BETWEEN 2.6 and 2.6.1
+
+ I. IMPORTANT BUG FIXES
+
+ - It turned out that for CFFs only the advance widths should be
+ taken from the `htmx' table, not the side bearings. This bug,
+ introduced in version 2.6.0, makes it necessary to upgrade if
+ you are using CFFs; otherwise, you get cropped glyphs with GUI
+ interfaces like GTK or Qt.
+
+ - Accessing Type 42 fonts returned incorrect results if the glyph
+ order of the embedded TrueType font differs from the glyph order
+ of the Type 42 charstrings table.
+
+
+ II. IMPORTANT CHANGES
+
+ - The header file layout has been changed (again), moving all
+ header files except `ft2build.h' into a subdirectory tree.
+
+ Doing so reduces the possibility of header file name clashes
+ (e.g., FTGL's `FTGlyph.h' with FreeType's `ftglyph.h') on case
+ insensitive file systems like Mac OS X or Windows.
+
+ Applications that use (a) the `freetype-config' script or
+ FreeType's `freetype2.pc' file for pkg-config 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.
+
+ - Simple access to named instances in GX variation fonts is now
+ available (in addition to the previous method via FreeType's MM
+ interface). In the `FT_Face' structure, bits 16-30 of the
+ `face_index' field hold the current named instance index for the
+ given face index, and bits 16-30 of `style_flags' contain the
+ number of instances for the given face index. `FT_Open_Face'
+ and friends also understand the extended bits of the face index
+ parameter.
+
+ You need to enable TT_CONFIG_OPTION_GX_VAR_SUPPORT for this new
+ feature. Otherwise, bits 16-30 of the two fields are zero (or
+ are ignored).
+
+ - Lao script support has been added to the auto-hinter.
+
+
+ III. MISCELLANEOUS
+
+ - The auto-hinter's Arabic script support has been enhanced.
+
+ - Superscript-like and subscript-like glyphs as used by various
+ phonetic alphabets like the IPA are now better supported by the
+ auto-hinter.
+
+ - The TrueType bytecode interpreter now runs slightly faster.
+
+ - Improved support for builds with cmake.
+
+ - The function `FT_CeilFix' now always rounds towards plus
+ infinity.
+
+ - The function `FT_FloorFix' now always rounds towards minus
+ infinity.
+
+ - A new load flag `FT_LOAD_COMPUTE_METRICS' has been added; it
+ makes FreeType ignore pre-computed metrics, as needed by font
+ validating or font editing programs. Right now, only the
+ TrueType module supports it to ignore data from the `hdmx'
+ table.
+
+ - Another round of bug fixes to better handle broken fonts, found
+ by Kostya Serebryany <kcc@google.com>.
+
+
+======================================================================
CHANGES BETWEEN 2.5.5 and 2.6
@@ -70,17 +828,17 @@
compiler warnings.
- Function `FT_Bitmap_New' has been renamed to `FT_Bitmap_Init',
- since this name better reflects its function. For backwards
+ since this name better reflects its function. For backward
compatibility, the old function name is still available.
- Function `FT_Get_X11_Font_Format' has been renamed to
`FT_Get_Font_Format', since this name better reflects its
- function. For backwards compatibility, the old function name is
+ function. For backward compatibility, the old function name is
still available.
Additionally, the header file macro for this function has been
renamed to `FT_FONT_FORMATS_H' (the old name `FT_XFREE86_H' is
- retained for backwards compatibility).
+ retained for backward compatibility).
- Various improvements to the `ftgrid' demo program.
@@ -120,7 +878,7 @@
I. IMPORTANT BUG FIXES
- A variant of vulnerability CVE-2014-2240 was identified
- (cf. http://savannah.nongnu.org/bugs/?43661) and fixed in the
+ (cf. https://savannah.nongnu.org/bugs/?43661) and fixed in the
new CFF driver. All users should upgrade.
- The new auto-hinter code using HarfBuzz crashed for some invalid
@@ -191,7 +949,7 @@
I. IMPORTANT BUG FIXES
- A vulnerability (CVE-2014-2240) was identified and fixed in the
- new CFF driver (cf. http://savannah.nongnu.org/bugs/?41697).
+ new CFF driver (cf. https://savannah.nongnu.org/bugs/?41697).
All users should upgrade.
- More bug fixes related to correct positioning of composite
@@ -224,7 +982,7 @@
and install FreeType again.
With FreeType's `configure' script the procedure boils down to
- configure, build, and install Freetype, then configure, compile,
+ configure, build, and install FreeType, then configure, compile,
and install HarfBuzz, then configure, compile, and install
FreeType again (after executing `make distclean').
@@ -514,7 +1272,7 @@
II. MISCELLANEOUS
- The (top-level) `configure' script now respects the MAKE
- environment variable to specify a `make' binary. For backwards
+ environment variable to specify a `make' binary. For backward
compatibility, GNUMAKE still overrides MAKE, though.
- The `ftview' and `ftdiff' demo programs have been redesigned,
@@ -563,7 +1321,7 @@
- Subpixel hinting support has been contributed by Infinality,
based on Greg Hitchcock's whitepaper at
- http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
+ https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
Originally, it was a separate patch available from
@@ -1433,7 +2191,7 @@
of the library, mainly due to patent issues. For more
information see:
- http://lists.gnu.org/archive/html/freetype/2006-09/msg00064.html
+ https://lists.gnu.org/archive/html/freetype/2006-09/msg00064.html
A new configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING
has been introduced in `ftoption.h'; manually define it in this
@@ -1536,7 +2294,7 @@
We provide patches for most of those rogue clients. See the
following page for more information:
- http://www.freetype.org/freetype2/patches/rogue-patches.html
+ https://www.freetype.org/freetype2/patches/rogue-patches.html
Note that, as a convenience to our Unix desktop users, version
2.2 is *binary* compatible with FreeType 2.1.7, which means that
@@ -1648,7 +2406,7 @@
- Rudimentary support for Adobe's new `SING Glyphlet' format. See
- http://www.adobe.com/products/indesign/sing_gaiji.html
+ https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5148.SING_Tutorial.pdf
for more information.
@@ -1733,7 +2491,7 @@
probably using a different pitch, and to further manipulate it.
- A new API `FT_Outline_Embolden' (in FT_OUTLINE_H) gives finer
- control how outlines are embolded.
+ control how outlines are emboldened.
- `FT_GlyphSlot_Embolden' (in FT_SYNTHESIS_H) now handles bitmaps
also (code contributed by Chia I Wu). Note that this function
@@ -1852,7 +2610,7 @@
correctly treated as a CID, similar to FreeType's CID driver
module. Note that CID CMap support is still missing.
- - The FT_FACE_FLAGS_GLYPH_NAMES flag is now set correctly for all
+ - The FT_FACE_FLAG_GLYPH_NAMES flag is now set correctly for all
font formats.
- Some subsetted Type 1 fonts weren't parsed correctly. This bug
@@ -2143,7 +2901,7 @@
- FT_ENCODING_MS_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} are now
deprecated in favour of
- FT_ENCODING_{SJIS,GB2312,GIB5,WANSONG,JOHAB} -- those encodings
+ FT_ENCODING_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} -- those encodings
are not specific to Microsoft.
@@ -2325,7 +3083,7 @@
quality since many nasty defaults have been suppressed. Please
visit the web page:
- http://www.freetype.org/hinting/smooth-hinting.html
+ https://www.freetype.org/hinting/smooth-hinting.html
for additional details on this topic.
@@ -2345,12 +3103,12 @@
FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays.
FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or
- BGR sub-pixel displays (like LCD
+ BGR subpixel displays (like LCD
screens). THIS IS STILL
EXPERIMENTAL!
FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for
- vertical sub-pixel displays (like
+ vertical subpixel displays (like
rotated LCD screens). THIS IS STILL
EXPERIMENTAL!
@@ -2584,7 +3342,7 @@
- The FreeType 2 redesign has begun. More information can be
found at this URL:
- http://www.freetype.org/freetype2/redesign.html
+ https://www.freetype.org/freetype2/redesign.html
The following internal changes have been performed within the
sources of this release:
@@ -3175,13 +3933,7 @@
For more information, see section I of the following document:
- http://www.freetype.org/
- freetype2/docs/tutorial/step1.html
-
- or
-
- http://freetype.sourceforge.net/
- freetype2/docs/tutorial/step1.html
+ https://www.freetype.org/freetype2/docs/tutorial/step1.html
- Many, many comments have been added to the public source file in
order to automatically generate the API Reference through the
@@ -3190,7 +3942,7 @@
The latter has been updated to support the grouping of sections
in chapters and better index sort. See:
- http://www.freetype.org/freetype2/docs/reference/ft2-toc.html
+ https://www.freetype.org/freetype2/docs/reference/ft2-toc.html
III. CHANGES TO THE BUILD PROCESS
@@ -3564,7 +4316,7 @@
automatically when needed.
- Reformatted all modules source code in order to get rid of the
- basic data types redifinitions (i.e. `TT_Int' instead of `FT_Int',
+ basic data types redefinitions (i.e. `TT_Int' instead of `FT_Int',
`T1_Fixed' instead of `FT_Fixed'). Hence the format-specific
prefixes like `TT_', `T1_', `T2_' and `CID_' are only used for
relevant structures.
@@ -4265,7 +5017,7 @@
------------------------------------------------------------------------
-Copyright 2000-2015 by
+Copyright 2000-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/docs/CUSTOMIZE b/docs/CUSTOMIZE
index 831edf6..916be32 100644
--- a/docs/CUSTOMIZE
+++ b/docs/CUSTOMIZE
@@ -8,7 +8,7 @@
I. Configuration macros
- The file found in `include/config/ftoption.h' contains a list of
+ The file `include/freetype/config/ftoption.h' contains a list of
commented configuration macros that can be toggled by developers to
indicate which features should be active while building the library.
@@ -35,9 +35,9 @@
can keep the source files `clean'.
If you don't use GNU make you have to manually edit the file
- `include/config/ftmodule.h' (which is *not* used with if compiled
- with GNU make) to add or remove the drivers and components you want
- to compile into the library. See `INSTALL.ANY' for more
+ `include/freetype/config/ftmodule.h' (which is *not* used with if
+ compiled with GNU make) to add or remove the drivers and components
+ you want to compile into the library. See `INSTALL.ANY' for more
information.
@@ -95,8 +95,9 @@
#include FT_CONFIG_OPTIONS_H
#include FT_CONFIG_MODULES_H
- are compiled. Their default values being <config/ftoption.h> and
- <config/ftmodule.h>, you can do something like:
+ are compiled. Their default values being
+ <freetype/config/ftoption.h> and <freetype/config/ftmodule.h>, you
+ can do something like:
custom/
config/
@@ -116,15 +117,15 @@
name the configuration headers. To do so, you need a custom
`ft2build.h' whose content can be as simple as:
- #ifndef __FT2_BUILD_MY_PLATFORM_H__
- #define __FT2_BUILD_MY_PLATFORM_H__
+ #ifndef FT2_BUILD_MY_PLATFORM_H_
+ #define FT2_BUILD_MY_PLATFORM_H_
#define FT_CONFIG_OPTIONS_H <custom/my-ftoption.h>
#define FT_CONFIG_MODULES_H <custom/my-ftmodule.h>
- #include <config/ftheader.h>
+ #include <freetype/config/ftheader.h>
- #endif /* __FT2_BUILD_MY_PLATFORM_H__ */
+ #endif /* FT2_BUILD_MY_PLATFORM_H_ */
Place those files in a separate directory, e.g.,
@@ -138,7 +139,7 @@
----------------------------------------------------------------------
-Copyright 2003-2015 by
+Copyright 2003-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/docs/DEBUG b/docs/DEBUG
index ab2c769..751eaf0 100644
--- a/docs/DEBUG
+++ b/docs/DEBUG
@@ -6,7 +6,7 @@
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:
+located in the file `ftoption.h'. The macros are:
FT_DEBUG_LEVEL_ERROR
@@ -191,7 +191,7 @@
------------------------------------------------------------------------
-Copyright 2002-2015 by
+Copyright 2002-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/docs/FTL.TXT b/docs/FTL.TXT
index bbaba33..c406d15 100644
--- a/docs/FTL.TXT
+++ b/docs/FTL.TXT
@@ -48,7 +48,7 @@
encourage you to use the following text:
"""
- Portions of this software are copyright © <year> The FreeType
+ Portions of this software are copyright © <year> The FreeType
Project (www.freetype.org). All rights reserved.
"""
@@ -163,7 +163,7 @@
Our home page can be found at
- http://www.freetype.org
+ https://www.freetype.org
--- end of FTL.TXT ---
diff --git a/docs/INSTALL b/docs/INSTALL
index 193c530..71d4a05 100644
--- a/docs/INSTALL
+++ b/docs/INSTALL
@@ -14,7 +14,9 @@
compilation, since other make tools won't work (this includes BSD
Make).
- GNU Make VERSION 3.80 OR NEWER IS NEEDED!
+ GNU Make VERSION 3.81 OR NEWER IS NEEDED!
+
+ [For `cmake' see below.]
2. On VMS with the `mms' build tool
@@ -70,12 +72,12 @@
http://makepp.sourceforge.net
- for more information; you need version 1.19 or newer, and you must
+ for more information; you need version 2.0 or newer, and you must
pass option `--norc-substitution'.
----------------------------------------------------------------------
-Copyright 2000-2015 by
+Copyright 2000-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/docs/INSTALL.ANY b/docs/INSTALL.ANY
index e7d6ddd..fddac9a 100644
--- a/docs/INSTALL.ANY
+++ b/docs/INSTALL.ANY
@@ -16,8 +16,8 @@
which are not correctly supported by this compiler while being ISO
C compliant!
- * You need to add the directories `freetype2/include' to your
- include path when compiling the library.
+ * You need to add the directory `include' to your include path when
+ compiling the library.
* FreeType 2 is made of several components; each of them is located
in a subdirectory of `freetype2/src'. For example,
@@ -39,11 +39,9 @@
src/base/ftbdf.c -- optional, see <ftbdf.h>
src/base/ftbitmap.c -- optional, see <ftbitmap.h>
src/base/ftcid.c -- optional, see <ftcid.h>
- src/base/ftfntfmt.c -- optional, see <ftfntfmt.h>
src/base/ftfstype.c -- optional
src/base/ftgasp.c -- optional, see <ftgasp.h>
src/base/ftgxval.c -- optional, see <ftgxval.h>
- src/base/ftlcdfil.c -- optional, see <ftlcdfil.h>
src/base/ftmm.c -- optional, see <ftmm.h>
src/base/ftotval.c -- optional, see <ftotval.h>
src/base/ftpatent.c -- optional
@@ -103,7 +101,7 @@
`type1cid.c' needs `psaux.c', `pshinter.c', and `psnames.c'
`type42.c' needs `truetype.c'
- Please consult the central `include/config/ftoption.h'
+ Please consult the central `include/freetype/config/ftoption.h'
configuration file for details on additional libraries necessary
for some optional features.
@@ -132,10 +130,10 @@
2. Compile sources
- cc -c -Ifreetype2/include -DFT2_BUILD_LIBRARY ftsystem.c
- cc -c -Ifreetype2/include -DFT2_BUILD_LIBRARY ftinit.c
- cc -c -Ifreetype2/include -DFT2_BUILD_LIBRARY ftdebug.c
- cc -c -Ifreetype2/include -DFT2_BUILD_LIBRARY ftbase.c
+ cc -c -Iinclude -DFT2_BUILD_LIBRARY ftsystem.c
+ cc -c -Iinclude -DFT2_BUILD_LIBRARY ftinit.c
+ cc -c -Iinclude -DFT2_BUILD_LIBRARY ftdebug.c
+ cc -c -Iinclude -DFT2_BUILD_LIBRARY ftbase.c
etc.
You don't need to define the FT_FLAT_COMPILATION macro (as this
@@ -143,7 +141,7 @@
----------------------------------------------------------------------
-Copyright 2003-2015 by
+Copyright 2003-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/docs/INSTALL.CROSS b/docs/INSTALL.CROSS
index a83638d..239e1a9 100644
--- a/docs/INSTALL.CROSS
+++ b/docs/INSTALL.CROSS
@@ -9,7 +9,7 @@
-----------------
For self-building the FreeType library on a Unix system, GNU Make
- 3.80 or newer is required. `INSTALL.UNIX' contains hints how to
+ 3.81 or newer is required. `INSTALL.UNIX' contains hints how to
check the installed `make'.
The GNU C compiler to cross-build the target system is required.
@@ -163,7 +163,7 @@
----------------------------------------------------------------------
-Copyright 2006-2015 by
+Copyright 2006-2018 by
suzuki toshiya, David Turner, Robert Wilhelm, and Werner Lemberg.
diff --git a/docs/INSTALL.GNU b/docs/INSTALL.GNU
index 1a7c097..e314ecf 100644
--- a/docs/INSTALL.GNU
+++ b/docs/INSTALL.GNU
@@ -25,7 +25,7 @@
http://makepp.sourceforge.net
- for more information; you need version 1.19 or newer, and you must
+ for more information; you need version 2.0 or newer, and you must
pass option `--norc-substitution'.
Make sure that you are invoking GNU Make from the command line, by
@@ -35,7 +35,7 @@
to display its version number.
- VERSION 3.80 OR NEWER IS NEEDED!
+ VERSION 3.81 OR NEWER IS NEEDED!
2. Invoke `make'
@@ -148,7 +148,7 @@
----------------------------------------------------------------------
-Copyright 2003-2015 by
+Copyright 2003-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/docs/INSTALL.MAC b/docs/INSTALL.MAC
index 42bb0d8..2587e24 100644
--- a/docs/INSTALL.MAC
+++ b/docs/INSTALL.MAC
@@ -1,32 +1,32 @@
-Please follow the instructions in INSTALL.UNIX to install FreeType on
+Please follow the instructions in INSTALL.UNIX to install FreeType on
Mac OS X.
-Currently FreeType2 functions based on some deprecated Carbon APIs
-return FT_Err_Unimplemented_Feature always, even if FreeType2 is
-configured and built on the system that deprecated Carbon APIs are
-available. To enable deprecated FreeType2 functions as far as possible,
-replace src/base/ftmac.c by builds/mac/ftmac.c.
+Currently FreeType2 functions based on some deprecated Carbon APIs
+return `FT_Err_Unimplemented_Feature' always, even if FreeType2 is
+configured and built on the system that deprecated Carbon APIs are
+available. To enable deprecated FreeType2 functions as far as
+possible, replace `src/base/ftmac.c' by `builds/mac/ftmac.c'.
-Starting with Mac OS X 10.5, gcc defaults the deployment target
-to 10.5. In previous versions of Mac OS X, this defaulted to 10.1.
-If you want your built binaries to run only on 10.5, this change
-does not concern you. If you want them to also run on older versions
-of Mac OS X, then you must either set the MACOSX_DEPLOYMENT_TARGET
-environment variable or pass -mmacosx-version-min to gcc. You should
-specify the oldest version of Mac OS you want the code to run on.
-For example, if you use Bourne shell:
+Starting with Mac OS X 10.5, gcc defaults the deployment target to
+10.5. In previous versions of Mac OS X, this defaulted to 10.1. If
+you want your built binaries to run only on 10.5, this change does not
+concern you. If you want them to also run on older versions of Mac
+OS X, then you must either set the MACOSX_DEPLOYMENT_TARGET
+environment variable or pass `-mmacosx-version-min' to gcc. You
+should specify the oldest version of Mac OS you want the code to run
+on. For example, if you use Bourne shell:
- export MACOSX_DEPLOYMENT_TARGET=10.2
+ export MACOSX_DEPLOYMENT_TARGET=10.2
or, if you use C shell:
- setenv MACOSX_DEPLOYMENT_TARGET 10.2
+ setenv MACOSX_DEPLOYMENT_TARGET 10.2
-Alternatively, you could pass "-mmacosx-version-min=10.2" to gcc.
+Alternatively, you could pass `-mmacosx-version-min=10.2' to gcc.
-Here the number 10.2 is the lowest version that the built binaries
-can run on. In the cases in above, the built binaries will run on
-Mac OS X 10.2 and later, but _not_ earlier. If you want to run on
-earlier, you have to set lower version, e.g. 10.0.
+Here the number 10.2 is the lowest version that the built binaries can
+run on. In the above cases, the built binaries will run on Mac OS X
+10.2 and later, but _not_ earlier. If you want to run on earlier, you
+have to set lower version, e.g., 10.0.
For classic Mac OS (Mac OS 7, 8, 9) please refer to builds/mac/README.
diff --git a/docs/INSTALL.UNIX b/docs/INSTALL.UNIX
index 0dab2c6..f92d828 100644
--- a/docs/INSTALL.UNIX
+++ b/docs/INSTALL.UNIX
@@ -19,7 +19,7 @@
GNU Make <version number>
Copyright (C) <year> Free Software Foundation Inc.
- Note that version 3.80 or higher is *required* or the build will
+ Note that version 3.81 or higher is *required* or the build will
fail.
It is also fine to have GNU Make under another name (e.g. 'gmake')
@@ -28,6 +28,9 @@
As a special exception, 'makepp' can also be used to build
FreeType 2. See the file docs/MAKEPP for details.
+ For builds with `cmake' please check file `CMakeLists.txt'; this
+ is a contributed file not directly supported by the FreeType team.
+
2. Regenerate the configure script if needed
--------------------------------------------
@@ -102,7 +105,7 @@
----------------------------------------------------------------------
-Copyright 2003-2015 by
+Copyright 2003-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/docs/INSTALL.VMS b/docs/INSTALL.VMS
index 48a323e..c1d30e0 100644
--- a/docs/INSTALL.VMS
+++ b/docs/INSTALL.VMS
@@ -1,7 +1,7 @@
-How to build the freetype2 library on VMS
+How to build the FreeType 2 library on VMS
-----------------------------------------
-It is actually very straightforward to install the Freetype2 library.
+It is actually very straightforward to install the FreeType 2 library.
Just execute vms_make.com from the toplevel directory to build the
library. This procedure currently accepts the following options:
@@ -15,10 +15,10 @@
Options to pass to the C compiler e.g. ccopt=/float=ieee
In case you did download the demos, place them in a separate directory
-sharing the same toplevel as the directory of Freetype2 and follow the
-same instructions as above for the demos from there. The build
-process relies on this to figure the location of the Freetype2 include
-files.
+sharing the same top level as the directory of FreeType 2 and follow
+the same instructions as above for the demos from there. The build
+process relies on this to figure out the location of the FreeType 2
+include files.
To rebuild the sources it is necessary to have MMS/MMK installed on
@@ -49,7 +49,7 @@
------------------------------------------------------------------------
-Copyright 2000-2015 by
+Copyright 2000-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/docs/LICENSE.TXT b/docs/LICENSE.TXT
index 99dc342..af5a1c5 100644
--- a/docs/LICENSE.TXT
+++ b/docs/LICENSE.TXT
@@ -23,9 +23,11 @@
GPL. Note that the FTL is incompatible with GPLv2 due to its
advertisement clause.
-The contributed BDF and PCF drivers come with a license similar to that
+The contributed BDF and PCF drivers come with a license similar to that
of the X Window System. It is compatible to the above two licenses (see
-file src/bdf/README and src/pcf/README).
+file src/bdf/README and src/pcf/README). The same holds for the files
+`fthash.c' and `fthash.h'; their code was part of the BDF driver in
+earlier FreeType versions.
The gzip module uses the zlib license (see src/gzip/zlib.h) which too is
compatible to the above two licenses.
diff --git a/docs/MAKEPP b/docs/MAKEPP
index 58eaf55..a4d44b7 100644
--- a/docs/MAKEPP
+++ b/docs/MAKEPP
@@ -1,5 +1,5 @@
As a special exception, FreeType can also be built with the 'makepp'
build tool, available from http://makepp.sourceforge.net.
-Note, however. that you will need at least version 1.19 and pass the
+Note, however, that you will need at least version 2.0 and pass the
option --norc-substitution to have it work correctly.
diff --git a/docs/TODO b/docs/TODO
index 43eeae3..1a443a2 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -27,7 +27,7 @@
------------------------------------------------------------------------
-Copyright 2001-2015 by
+Copyright 2001-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/docs/VERSION.DLL b/docs/VERSIONS.TXT
similarity index 86%
rename from docs/VERSION.DLL
rename to docs/VERSIONS.TXT
index f219c9a..3774157 100644
--- a/docs/VERSION.DLL
+++ b/docs/VERSIONS.TXT
@@ -45,13 +45,24 @@
2. History
----------
-The following table gives, for all releases since 2.3.0, the
+The following table gives, for all releases since 2.4.0, the
corresponding libtool number, as well as the shared object number found
on _most_ systems, but not all of them:
release libtool so
-------------------------------
+ 2.9.1 22.1.16 6.16.1
+ 2.9.0 22.0.16 6.16.0
+ 2.8.1 21.0.15 6.15.0
+ 2.8.0 20.0.14 6.14.0
+ 2.7.1 19.0.13 6.13.0
+ 2.7.0 18.6.12 6.12.6
+ 2.6.5 18.5.12 6.12.5
+ 2.6.4 18.4.12 6.12.4
+ 2.6.3 18.3.12 6.12.3
+ 2.6.2 18.2.12 6.12.2
+ 2.6.1 18.1.12 6.12.1
2.6.0 18.0.12 6.12.0
2.5.5 17.4.11 6.11.4
2.5.4 17.3.11 6.11.3
@@ -72,19 +83,6 @@
2.4.2 12.0.6 6.6.0
2.4.1 11.1.5 6.5.1
2.4.0 11.0.5 6.5.0
- 2.3.12 10.0.4 6.4.0
- 2.3.11 9.22.3 6.3.22
- 2.3.10 9.21.3 6.3.21
- 2.3.9 9.20.3 6.3.20
- 2.3.8 9.19.3 6.3.19
- 2.3.7 9.18.3 6.3.18
- 2.3.6 9.17.3 6.3.17
- 2.3.5 9.16.3 6.3.16
- 2.3.4 9.15.3 6.3.15
- 2.3.3 9.14.3 6.3.14
- 2.3.2 9.13.3 6.3.13
- 2.3.1 9.12.3 6.3.12
- 2.3.0 9.11.3 6.3.11
3. Autoconf Code Fragment
@@ -104,7 +102,7 @@
#include <ft2build.h>
#include FT_FREETYPE_H
#if (FREETYPE_MAJOR*1000 + FREETYPE_MINOR)*1000 + FREETYPE_PATCH < 2000009
-#error Freetype version too low.
+#error FreeType version too low.
#endif
],
[AC_MSG_RESULT(yes)
@@ -116,7 +114,7 @@
------------------------------------------------------------------------
-Copyright 2002-2015 by
+Copyright 2002-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
@@ -126,4 +124,4 @@
accept it fully.
---- end of VERSION.DLL ---
+--- end of VERSIONS.TXT ---
diff --git a/docs/formats.txt b/docs/formats.txt
index 2439198..75aba92 100644
--- a/docs/formats.txt
+++ b/docs/formats.txt
@@ -1,149 +1,175 @@
-This file contains a list of various font formats. It gives the
+This file contains a list of various font formats. It gives the
reference document and whether it is supported in FreeType 2.
+Table fields
+------------
- file type:
- The only special case is `MAC'; on older Mac OS versions, a `file'
- is stored as a data and a resource fork, this is, within two
- separate data chunks. In all other cases, the font data is stored
- in a single file.
+ wrapper format
+ The format used to represent the font data. In the table below it
+ is used only if the font format differs. Possible values are
- wrapper format:
- The format used to represent the font data. In the table below it
- is used only if the font format differs. Possible values are `SFNT'
- (binary), `PS' (a text header, followed by binary or text data),
- `LZW' (compressed with either `gzip' or `compress'), and
- `BZ2' (compressed with `bzip2`).
+ SFNT binary
+ PFB binary
+ PS a text header, followed by binary or text data
+ LZW compressed with either `gzip' or `compress'
+ BZ2 compressed with `bzip2'.
- font format:
- How the font is to be accessed, possibly after converting the file
- type and wrapper format into a generic form. Bitmap formats are
- `BDF', `PCF', and one form of `WINFNT'; all others are vector
- formats.
+ font format
+ How the font is to be accessed, possibly after converting the file
+ type and wrapper format into a generic form. Bitmap formats are
+ `BDF', `PCF', and one form of `WINFNT'; all others are vector
+ formats. `PS' indicates third-order, `TT' second-order Bézier
+ curves.
- font type:
- Sub-formats of the font format. `SBIT' and `MACSBIT' are bitmap
- formats, `MM' and `VAR' support optical axes.
+ font type
+ Sub-formats of the font format. `SBIT' and `MACSBIT' are bitmap
+ formats, `MM' and `VAR' support optical axes. `CFF2' supports
+ optical axes also.
- glyph access:
- If not specified, the glyph access is `standard' to the font format.
- Values are `CID' for CID-keyed fonts, `SYNTHETIC' for fonts which
- are modified versions of other fonts by means of a transformation
- matrix, `COLLECTION' for collecting multiple fonts (sharing most of
- the data) into a single file, and `TYPE_0' for PS fonts which are to
- be accessed in a tree-like structure.
+ glyph access
+ If not specified, the glyph access is `standard' to the font
+ format. Values are `CID' for CID-keyed fonts, `SYNTHETIC' for
+ fonts that are modified versions of other fonts by means of a
+ transformation matrix, and `TYPE_0' for PS fonts which are to be
+ accessed in a tree-like structure.
- FreeType driver:
- The module in the FreeType library which handles the specific font
- format. A missing entry means that FreeType doesn't support the
+ FreeType driver
+ The module in the FreeType library which handles the specific font
+ format. A missing entry means that FreeType doesn't support the
font format (yet).
-Please send additions and/or corrections to wl@gnu.org or to the
-FreeType developer's list at freetype-devel@nongnu.org (for subscribers
-only). If you can provide a font example for a format which isn't
-supported yet please send a mail too.
+Notes
+-----
+
+ The SFNT container format also provides `collections' (usually
+ having the file extension `.ttc' or `.otc'). A collection contains
+ multiple font faces that share some tables to avoid redundancy, thus
+ reducing the file size. In FreeType, elements of a collection can
+ be accessed with a proper face index.
+
+ Both the GX and the OpenType 1.8 variation fonts provide `named
+ instances'. FreeType maps them to face indices (they can also be
+ accessed with the standard MM interface).
+
+ Other font formats (not using the SFNT wrapper) also provide
+ multiple faces within one file; they are marked with an asterisk
+ (`*') in the table below.
+
+ FreeType can be configured to support Mac files (on older Mac OS
+ versions, a `file' is stored as a data and a resource fork, this is,
+ within two separate data chunks). If a file can't be opened as a
+ font, FreeType then checks whether it is a resource fork, trying to
+ extract the contained font data from either a `POST' or `sfnt'
+ resource.
-file wrapper font font glyph FreeType reference
-type format format type access driver documents
-----------------------------------------------------------------------------
-
---- --- BDF --- --- bdf 5005.BDF_Spec.pdf, X11
+Please send additions and/or corrections to wl@gnu.org or to the
+FreeType developer's list at freetype-devel@nongnu.org (for
+subscribers only). If you can provide a font example for a format
+which isn't supported yet please send a mail too.
---- SFNT PS TYPE_1 --- type1 Type 1 GX Font Format
- (for the Mac) [3]
-MAC SFNT PS TYPE_1 --- type1 Type 1 GX Font Format
- (for the Mac) [3]
---- SFNT PS TYPE_1 CID cid 5180.sfnt.pdf (for the Mac)
- [3]
-MAC SFNT PS TYPE_1 CID cid 5180.sfnt.pdf (for the Mac)
- [3]
---- SFNT PS CFF --- cff OT spec, 5176.CFF.pdf
- (`OTTO' format)
-MAC SFNT PS CFF --- cff OT spec, 5176.CFF.pdf
- (`OTTO' format)
---- SFNT PS CFF CID cff OT spec, 5176.CFF.pdf
-MAC SFNT PS CFF CID cff OT spec, 5176.CFF.pdf
---- SFNT PS CFF SYNTHETIC --- OT spec, 5176.CFF.pdf
-MAC SFNT PS CFF SYNTHETIC --- OT spec, 5176.CFF.pdf
---- SFNT TT SBIT --- sfnt XFree86 (bitmaps only;
- with `head' table)
---- SFNT TT MACSBIT --- sfnt OT spec (for the Mac;
- bitmaps only; `bhed' table)
-MAC SFNT TT MACSBIT --- sfnt OT spec (for the Mac;
- bitmaps only; `bhed' table)
---- SFNT TT --- --- truetype OT spec (`normal' TT font)
-MAC SFNT TT --- --- truetype OT spec (`normal' TT font)
-MAC SFNT TT VAR --- truetype GX spec (`?var' tables)
---- SFNT TT --- COLLECTION truetype OT spec (this can't be CFF)
-MAC SFNT TT --- COLLECTION truetype OT spec (this can't be CFF)
+ wrapper font font glyph FreeType reference
+ format format type access driver documents
+ -----------------------------------------------------------------------------
+
+ --- BDF --- --- bdf 5005.BDF_Spec.pdf, X11
---- --- PS TYPE_1 --- type1 T1_SPEC.pdf
- (`normal' Type 1 font)
-MAC --- PS TYPE_1 --- type1 T1_SPEC.pdf
- (`normal' Type 1 font)
---- --- PS TYPE_1 CID cid PLRM.pdf (CID Font Type 0;
- Type 9 font)
---- --- PS MM --- type1 5015.Type1_Supp.pdf
- (Multiple Masters)
---- --- PS CFF --- cff 5176.CFF.pdf (`pure' CFF)
---- --- PS CFF CID cff 5176.CFF.pdf (`pure' CFF)
---- --- PS CFF SYNTHETIC --- 5176.CFF.pdf (`pure' CFF)
---- PS PS CFF --- --- PLRM.pdf (Type 2) [1]
---- PS PS CFF CID --- PLRM.pdf (Type 2) [1]
---- PS PS CFF SYNTHETIC --- PLRM.pdf (Type 2) [1]
---- --- PS --- TYPE_0 --- PLRM.pdf
---- --- PS TYPE_3 --- --- PLRM.pdf (never supported)
---- --- PS TYPE_3 CID --- PLRM.pdf (CID Font Type 1;
- Type 10 font; never supported)
---- PS PS TYPE_14 --- --- PLRM.pdf (Chameleon font;
- Type 14 font; never supported?)
---- --- PS TYPE_32 CID --- PLRM.pdf (CID Font Type 4;
- Type 32 font; never supported?)
---- PS TT --- --- type42 5012.Type42_Spec.pdf
- (Type 42 font)
---- PS TT --- CID --- PLRM.pdf (CID Font Type 2;
- Type 11 font)
+ SFNT PS TYPE_1 --- type1 Type 1 GX Font Format
+ (for the Mac) [3]
+ SFNT PS TYPE_1 CID cid 5180.sfnt.pdf (for the Mac)
+ [3]
+ SFNT PS CFF --- cff OT spec, 5176.CFF.pdf
+ (`OTTO' format)
+ SFNT PS CFF CID cff OT spec, 5176.CFF.pdf
+ SFNT PS CFF SYNTHETIC --- OT spec, 5176.CFF.pdf
+ SFNT PS CFF2 --- cff OT spec 1.8
+
+ SFNT TT SBIT --- sfnt XFree86 (bitmaps only;
+ with `head' table)
+ SFNT TT MACSBIT --- sfnt OT spec (for the Mac;
+ bitmaps only; `bhed' table)
+ SFNT TT --- --- truetype OT spec (`normal' TT font)
+ SFNT TT VAR --- truetype GX spec (`?var' tables)
+ SFNT TT VAR --- truetype OT spec 1.8
+ (`?var' + `?VAR' tables)
---- ? ? CEF ? cff ?
+ --- PS TYPE_1 --- type1 T1_SPEC.pdf
+ (PFA, Type 1 font resource)
+ PFB PS TYPE_1 --- type1 T1_SPEC.pdf,
+ 5040.Download_Fonts.pdf
+ (`normal' Type 1 font)
+ --- PS TYPE_1 CID cid PLRM.pdf (CID Font Type 0;
+ Type 9 font)
+ --- PS MM --- type1 5015.Type1_Supp.pdf
+ (Multiple Masters)
+ --- PS CFF --- cff 5176.CFF.pdf (`pure' CFF)
+ --- PS* CFF CID cff 5176.CFF.pdf (`pure' CFF)
+ --- PS CFF SYNTHETIC --- 5176.CFF.pdf (`pure' CFF)
+ --- PS CFF/MM --- cff old 5167.CFF.pdf (`pure' CFF)
+ [3]
+ --- PS* CFF/MM CID cff old 5167.CFF.pdf (`pure' CFF)
+ [3]
+ --- PS CFF/MM SYNTHETIC --- old 5167.CFF.pdf (`pure' CFF)
+ [3]
+ PS PS CFF --- --- PLRM.pdf (Type 2) [1]
+ PS PS* CFF CID --- PLRM.pdf (Type 2) [1]
+ PS PS CFF SYNTHETIC --- PLRM.pdf (Type 2) [1]
+ PS PS CFF/MM --- --- PLRM.pdf (Type 2) [1]
+ PS PS* CFF/MM CID --- PLRM.pdf (Type 2) [1]
+ PS PS CFF/MM SYNTHETIC --- PLRM.pdf (Type 2) [1]
+ --- PS --- TYPE_0 --- PLRM.pdf
+ --- PS TYPE_3 --- --- PLRM.pdf (never supported)
+ --- PS TYPE_3 CID --- PLRM.pdf (CID Font Type 1;
+ Type 10 font; never supported)
+ PS PS TYPE_14 --- --- PLRM.pdf (Chameleon font;
+ Type 14 font; never supported?)
+ --- PS TYPE_32 CID --- PLRM.pdf (CID Font Type 4;
+ Type 32 font; never supported?)
+ PS TT --- --- type42 5012.Type42_Spec.pdf
+ (Type 42 font)
+ PS TT --- CID --- PLRM.pdf (CID Font Type 2;
+ Type 11 font)
---- --- PCF --- --- pcf X11 [4]
---- LZW PCF --- --- pcf X11 [4]
---- BZ2 PCF --- --- pcf X11 [4]
+ ? ? CEF ? cff ?
---- --- PFR PFR0 --- pfr [2]
---- --- PFR PFR1 --- --- (undocumented, proprietary;
- probably never supported)
+ --- PCF --- --- pcf X11 [4]
+ LZW PCF --- --- pcf X11 [4]
+ BZ2 PCF --- --- pcf X11 [4]
---- --- WINFNT --- --- winfonts Windows developer's notes [5]
---- --- WINFNT VECTOR --- --- Windows developer's notes [5]
+ --- PFR* PFR0 --- pfr [2]
+ --- PFR PFR1 --- --- (undocumented, proprietary;
+ probably never supported)
-[1] Support should be rather simple since this is identical to `CFF' but
- in a PS wrapper.
+ --- WINFNT* --- --- winfonts Windows developer's notes [5]
+ --- WINFNT VECTOR --- --- Windows developer's notes [5]
-[2] Official PFR specification:
- http://www.bitstream.com/categories/developer/truedoc/pfrspec.html
- http://www.bitstream.com/categories/developer/truedoc/pfrspec1.2.pdf
+[1] Support should be rather simple since this is identical to `CFF'
+ but in a PS wrapper.
- The syntax of the auxiliary data is not defined there, but is
- partially defined in MHP 1.0.3 (also called ETSI TS 101812 V1.3.1)
+[2] The official PFR specification is no longer available, but
+ archive.org has archived it:
+
+ https://web.archive.org/web/20091014062300/http://www.bitstream.com/font_rendering/products/truedoc/pfrspec.html
+ https://web.archive.org/web/20081115152605/http://www.bitstream.com/font_rendering/pdfs/pfrspec1.3.pdf
+
+ The syntax of the auxiliary data is not defined there, but is
+ partially defined in MHP 1.0.3 (also called ETSI TS 101812 V1.3.1)
section 7.4.
http://www.etsi.org/
http://webapp.etsi.org/workprogram/Report_WorkItem.asp?WKI_ID=18799
- (free registration required).
-
-[3] Support is rudimentary currently; some tables are not loaded yet.
+[3] Support is rudimentary currently; some tables or data are not
+ loaded yet.
[4] See
@@ -151,21 +177,21 @@
Elias Israel, Erik Fortune, Digital Press, 1992
ISBN 1-55558-096-3
- for a specification given in Appendix D on pgs. 436-450. However,
- this information might be out of date; unfortunately, there is no
- PCF specification available online, and this book is out of print.
- George Williams deduced the font format from the X11 sources and
+ for a specification given in Appendix D on pgs. 436-450. However,
+ this information might be out of date; unfortunately, there is no
+ PCF specification available online, and this book is out of print.
+ George Williams deduced the font format from the X11 sources and
documented it for his FontForge font editor:
- http://fontforge.sourceforge.net/pcf-format.html
+ https://fontforge.github.io/pcf-format.html
[5] This is from MS Windows 3; see Microsoft's Knowledge Base article at
- http://support.microsoft.com/kb/65123
+ https://support.microsoft.com/kb/65123
------------------------------------------------------------------------
-Copyright 2004-2015 by
+Copyright 2004-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
@@ -176,3 +202,7 @@
--- end of formats.txt ---
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/docs/freetype-config.1 b/docs/freetype-config.1
index cdab34b..164b8ff 100644
--- a/docs/freetype-config.1
+++ b/docs/freetype-config.1
@@ -1,4 +1,4 @@
-.TH FREETYPE-CONFIG 1 "June 2015" "FreeType 2.6"
+.TH FREETYPE-CONFIG 1 "May 2018" "FreeType 2.9.1"
.
.
.SH NAME
@@ -23,6 +23,14 @@
installation (directory path) prefix or the FreeType version number.
.
.PP
+If
+.BR pkg-config (1)
+is found in the path,
+.B freetype-config
+acts as a wrapper for
+.BR pkg-config .
+.
+.PP
This program is part of the FreeType package.
.
.
@@ -50,7 +58,8 @@
.
.TP
.B \-\-ftversion
-Return the FreeType version number.
+Return the FreeType version number, directly derived from file
+`freetype.h'.
.
.TP
.B \-\-version
@@ -72,32 +81,61 @@
.B \-\-static
Make command line options display flags for static linking.
.
+.TP
+.B \-\-help
+Show help and exit.
+.
.
.SS Path override options
.
These affect any selected output option, except the libtool version
-returned by `--version'.
+returned by
+.BR \-\-version .
.
.TP
.BI \-\-prefix= PREFIX
-Override `--prefix' value with
+Override
+.B \-\-prefix
+value with
.IR PREFIX .
.
+This also sets
+.BI \-\-exec-prefix= PREFIX
+if option
+.B \-\-exec-prefix
+is not explicitly given.
+.
.TP
.BI \-\-exec-prefix= EPREFIX
-Override `--exec-prefix' value with
+Override
+.B \-\-exec-prefix
+value with
.IR EPREFIX .
.
.
.SH BUGS
In case the libraries FreeType links to are located in non-standard
-directories, the output from option
+directories, and
+.BR pkg-config (1)
+is not available, the output from option
.B \-\-libs
might be incomplete.
+.
It is thus recommended to use the
.BR pkg-config (1)
interface instead, which is able to correctly resolve all dependencies.
.
+.PP
+Setting
+.B \-\-exec-prefix
+(either explicitly or implicitly) might return incorrect results if
+combined with option
+.BR \-\-static .
+.
+The same problem can occur if you set the
+.B SYSROOT
+environment variable.
+.
.
.SH AUTHOR
.
diff --git a/docs/raster.txt b/docs/raster.txt
index dc55d64..8ef466e 100644
--- a/docs/raster.txt
+++ b/docs/raster.txt
@@ -618,7 +618,7 @@
------------------------------------------------------------------------
-Copyright 2003-2015 by
+Copyright 2003-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/docs/release b/docs/release
index bd92b23..44b4cb1 100644
--- a/docs/release
+++ b/docs/release
@@ -1,7 +1,7 @@
How to prepare a new release
----------------------------
-. include/freetype.h: Update FREETYPE_MAJOR, FREETYPE_MINOR,
+. include/freetype/freetype.h: Update FREETYPE_MAJOR, FREETYPE_MINOR,
and FREETYPE_PATCH.
. Update version numbers in all files where necessary (for example, do
@@ -13,7 +13,7 @@
. README: Update.
-. docs/VERSION.DLL: Document changed `version_info'.
+. docs/VERSIONS.TXT: Document changed `version_info'.
. ChangeLog: Announce new release (both in the freetype2 and
freetype2-demos modules).
@@ -189,7 +189,7 @@
----------------------------------------------------------------------
-Copyright 2003-2015 by
+Copyright 2003-2018 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype-fuchsia-config/ftoption.h b/include/freetype-fuchsia-config/ftoption.h
index 2499196..312eafb 100644
--- a/include/freetype-fuchsia-config/ftoption.h
+++ b/include/freetype-fuchsia-config/ftoption.h
@@ -693,6 +693,24 @@
/*************************************************************************/
+ /* */
+ /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */
+ /* number of bytecode instructions executed for a single run of the */
+ /* bytecode interpreter, needed to prevent infinite loops. You don't */
+ /* want to change this except for very special situations (e.g., making */
+ /* a library fuzzer spend less time to handle broken fonts). */
+ /* */
+ /* It is not expected that this value is ever modified by a configuring */
+ /* script; instead, it gets surrounded with #ifndef ... #endif so that */
+ /* the value can be set as a preprocessor option on the compiler's */
+ /* command line. */
+ /* */
+#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
+#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L
+#endif
+
+
+ /*************************************************************************/
/*************************************************************************/
/**** ****/
/**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
diff --git a/include/config/ftconfig.h b/include/freetype/config/ftconfig.h
similarity index 73%
rename from include/config/ftconfig.h
rename to include/freetype/config/ftconfig.h
index 086db76..eedebf4 100644
--- a/include/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -4,7 +4,7 @@
/* */
/* ANSI-specific configuration file (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -35,8 +35,8 @@
/* */
/*************************************************************************/
-#ifndef __FTCONFIG_H__
-#define __FTCONFIG_H__
+#ifndef FTCONFIG_H_
+#define FTCONFIG_H_
#include <ft2build.h>
#include FT_CONFIG_OPTIONS_H
@@ -73,11 +73,11 @@
/* The size of an `int' type. */
#if FT_UINT_MAX == 0xFFFFUL
-#define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
+#define FT_SIZEOF_INT ( 16 / FT_CHAR_BIT )
#elif FT_UINT_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
+#define FT_SIZEOF_INT ( 32 / FT_CHAR_BIT )
#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_INT (64 / FT_CHAR_BIT)
+#define FT_SIZEOF_INT ( 64 / FT_CHAR_BIT )
#else
#error "Unsupported size of `int' type!"
#endif
@@ -85,11 +85,11 @@
/* The size of a `long' type. A five-byte `long' (as used e.g. on the */
/* DM642) is recognized but avoided. */
#if FT_ULONG_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
+#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT )
#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
-#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
+#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT )
#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT)
+#define FT_SIZEOF_LONG ( 64 / FT_CHAR_BIT )
#else
#error "Unsupported size of `long' type!"
#endif
@@ -143,6 +143,14 @@
#endif
+ /* Fix compiler warning with sgi compiler */
+#if defined( __sgi ) && !defined( __GNUC__ )
+#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
+#pragma set woff 3505
+#endif
+#endif
+
+
/*************************************************************************/
/* */
/* <Section> */
@@ -228,12 +236,12 @@
#endif
-#if FT_SIZEOF_INT == (32 / FT_CHAR_BIT)
+#if FT_SIZEOF_INT == ( 32 / FT_CHAR_BIT )
typedef signed int FT_Int32;
typedef unsigned int FT_UInt32;
-#elif FT_SIZEOF_LONG == (32 / FT_CHAR_BIT)
+#elif FT_SIZEOF_LONG == ( 32 / FT_CHAR_BIT )
typedef signed long FT_Int32;
typedef unsigned long FT_UInt32;
@@ -244,12 +252,12 @@
/* look up an integer type that is at least 32 bits */
-#if FT_SIZEOF_INT >= (32 / FT_CHAR_BIT)
+#if FT_SIZEOF_INT >= ( 32 / FT_CHAR_BIT )
typedef int FT_Fast;
typedef unsigned int FT_UFast;
-#elif FT_SIZEOF_LONG >= (32 / FT_CHAR_BIT)
+#elif FT_SIZEOF_LONG >= ( 32 / FT_CHAR_BIT )
typedef long FT_Fast;
typedef unsigned long FT_UFast;
@@ -259,7 +267,7 @@
/* determine whether we have a 64-bit int type for platforms without */
/* Autoconf */
-#if FT_SIZEOF_LONG == (64 / FT_CHAR_BIT)
+#if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT )
/* FT_LONG64 must be defined if a 64-bit type is available */
#define FT_LONG64
@@ -275,7 +283,13 @@
/* */
#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
-#if defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
+
+#define FT_LONG64
+#define FT_INT64 long long int
+#define FT_UINT64 unsigned long long int
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
/* this compiler provides the __int64 type */
#define FT_LONG64
@@ -309,7 +323,7 @@
#define FT_INT64 long long int
#define FT_UINT64 unsigned long long int
-#endif /* _MSC_VER */
+#endif /* __STDC_VERSION__ >= 199901L */
#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
@@ -319,6 +333,15 @@
#endif
+#ifdef _WIN64
+ /* only 64bit Windows uses the LLP64 data model, i.e., */
+ /* 32bit integers, 64bit pointers */
+#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x)
+#else
+#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x)
+#endif
+
+
/*************************************************************************/
/* */
/* miscellaneous */
@@ -332,15 +355,24 @@
/* typeof condition taken from gnulib's `intprops.h' header file */
-#if ( __GNUC__ >= 2 || \
- defined( __IBM__TYPEOF__ ) || \
- ( __SUNPRO_C >= 0x5110 && !__STDC__ ) )
-#define TYPEOF( type ) (__typeof__ (type))
+#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 ) || \
+ ( defined( __IBMC__ ) && __IBMC__ >= 1210 && \
+ defined( __IBM__TYPEOF__ ) ) || \
+ ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
+#define FT_TYPEOF( type ) ( __typeof__ ( type ) )
#else
-#define TYPEOF( type ) /* empty */
+#define FT_TYPEOF( type ) /* empty */
#endif
+ /* Use FT_LOCAL and FT_LOCAL_DEF to declare and define, respectively, */
+ /* a function that gets used only within the scope of a module. */
+ /* Normally, both the header and source code files for such a */
+ /* function are within a single module directory. */
+ /* */
+ /* Intra-module arrays should be tagged with FT_LOCAL_ARRAY and */
+ /* FT_LOCAL_ARRAY_DEF. */
+ /* */
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define FT_LOCAL( x ) static x
@@ -362,6 +394,12 @@
#define FT_LOCAL_ARRAY_DEF( x ) const x
+ /* Use FT_BASE and FT_BASE_DEF to declare and define, respectively, */
+ /* functions that are used in more than a single module. In the */
+ /* current setup this implies that the declaration is in a header */
+ /* file in the `include/freetype/internal' directory, and the */
+ /* function body is in a file in `src/base'. */
+ /* */
#ifndef FT_BASE
#ifdef __cplusplus
@@ -384,14 +422,63 @@
#endif /* !FT_BASE_DEF */
+ /* When compiling FreeType as a DLL or DSO with hidden visibility */
+ /* some systems/compilers need a special attribute in front OR after */
+ /* the return type of function declarations. */
+ /* */
+ /* Two macros are used within the FreeType source code to define */
+ /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
+ /* */
+ /* FT_EXPORT( return_type ) */
+ /* */
+ /* is used in a function declaration, as in */
+ /* */
+ /* FT_EXPORT( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ); */
+ /* */
+ /* */
+ /* FT_EXPORT_DEF( return_type ) */
+ /* */
+ /* is used in a function definition, as in */
+ /* */
+ /* FT_EXPORT_DEF( FT_Error ) */
+ /* FT_Init_FreeType( FT_Library* alibrary ) */
+ /* { */
+ /* ... some code ... */
+ /* return FT_Err_Ok; */
+ /* } */
+ /* */
+ /* You can provide your own implementation of FT_EXPORT and */
+ /* FT_EXPORT_DEF here if you want. */
+ /* */
+ /* To export a variable, use FT_EXPORT_VAR. */
+ /* */
#ifndef FT_EXPORT
-#ifdef __cplusplus
+#ifdef FT2_BUILD_LIBRARY
+
+#if defined( _WIN32 ) && ( defined( _DLL ) || defined( DLL_EXPORT ) )
+#define FT_EXPORT( x ) __declspec( dllexport ) x
+#elif defined( __GNUC__ ) && __GNUC__ >= 4
+#define FT_EXPORT( x ) __attribute__(( visibility( "default" ) )) x
+#elif defined( __cplusplus )
#define FT_EXPORT( x ) extern "C" x
#else
#define FT_EXPORT( x ) extern x
#endif
+#else
+
+#if defined( FT2_DLLIMPORT )
+#define FT_EXPORT( x ) __declspec( dllimport ) x
+#elif defined( __cplusplus )
+#define FT_EXPORT( x ) extern "C" x
+#else
+#define FT_EXPORT( x ) extern x
+#endif
+
+#endif
+
#endif /* !FT_EXPORT */
@@ -416,6 +503,7 @@
#endif /* !FT_EXPORT_VAR */
+
/* The following macros are needed to compile the library with a */
/* C++ compiler and with 16bit compilers. */
/* */
@@ -427,7 +515,13 @@
/* functions which are accessed by (global) function pointers. */
/* */
/* */
- /* FT_CALLBACK_DEF is used to _define_ a callback function. */
+ /* FT_CALLBACK_DEF is used to _define_ a callback function, */
+ /* located in the same source code file as the structure that uses */
+ /* it. */
+ /* */
+ /* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare */
+ /* and define a callback function, respectively, in a similar way */
+ /* as FT_BASE and FT_BASE_DEF work. */
/* */
/* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
/* contains pointers to callback functions. */
@@ -447,6 +541,16 @@
#endif
#endif /* FT_CALLBACK_DEF */
+#ifndef FT_BASE_CALLBACK
+#ifdef __cplusplus
+#define FT_BASE_CALLBACK( x ) extern "C" x
+#define FT_BASE_CALLBACK_DEF( x ) extern "C" x
+#else
+#define FT_BASE_CALLBACK( x ) extern x
+#define FT_BASE_CALLBACK_DEF( x ) x
+#endif
+#endif /* FT_BASE_CALLBACK */
+
#ifndef FT_CALLBACK_TABLE
#ifdef __cplusplus
#define FT_CALLBACK_TABLE extern "C"
@@ -461,7 +565,7 @@
FT_END_HEADER
-#endif /* __FTCONFIG_H__ */
+#endif /* FTCONFIG_H_ */
/* END */
diff --git a/include/config/ftheader.h b/include/freetype/config/ftheader.h
similarity index 83%
rename from include/config/ftheader.h
rename to include/freetype/config/ftheader.h
index 4906bc1..702f77c 100644
--- a/include/config/ftheader.h
+++ b/include/freetype/config/ftheader.h
@@ -4,7 +4,7 @@
/* */
/* Build macros of the FreeType 2 library. */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -15,8 +15,8 @@
/* */
/***************************************************************************/
-#ifndef __FT_HEADER_H__
-#define __FT_HEADER_H__
+#ifndef FTHEADER_H_
+#define FTHEADER_H_
/*@***********************************************************************/
@@ -107,7 +107,7 @@
*
*/
#ifndef FT_CONFIG_CONFIG_H
-#define FT_CONFIG_CONFIG_H <config/ftconfig.h>
+#define FT_CONFIG_CONFIG_H <freetype/config/ftconfig.h>
#endif
@@ -122,7 +122,7 @@
*
*/
#ifndef FT_CONFIG_STANDARD_LIBRARY_H
-#define FT_CONFIG_STANDARD_LIBRARY_H <config/ftstdlib.h>
+#define FT_CONFIG_STANDARD_LIBRARY_H <freetype/config/ftstdlib.h>
#endif
@@ -137,7 +137,7 @@
*
*/
#ifndef FT_CONFIG_OPTIONS_H
-#define FT_CONFIG_OPTIONS_H <config/ftoption.h>
+#define FT_CONFIG_OPTIONS_H <freetype/config/ftoption.h>
#endif
@@ -153,7 +153,7 @@
*
*/
#ifndef FT_CONFIG_MODULES_H
-#define FT_CONFIG_MODULES_H <config/ftmodule.h>
+#define FT_CONFIG_MODULES_H <freetype/config/ftmodule.h>
#endif
/* */
@@ -170,7 +170,7 @@
* base FreeType~2 API.
*
*/
-#define FT_FREETYPE_H <freetype.h>
+#define FT_FREETYPE_H <freetype/freetype.h>
/*************************************************************************
@@ -185,7 +185,7 @@
* It is included by @FT_FREETYPE_H.
*
*/
-#define FT_ERRORS_H <fterrors.h>
+#define FT_ERRORS_H <freetype/fterrors.h>
/*************************************************************************
@@ -198,7 +198,7 @@
* list of FreeType~2 module error offsets (and messages).
*
*/
-#define FT_MODULE_ERRORS_H <ftmoderr.h>
+#define FT_MODULE_ERRORS_H <freetype/ftmoderr.h>
/*************************************************************************
@@ -214,7 +214,7 @@
* It is included by @FT_FREETYPE_H.
*
*/
-#define FT_SYSTEM_H <ftsystem.h>
+#define FT_SYSTEM_H <freetype/ftsystem.h>
/*************************************************************************
@@ -230,7 +230,7 @@
* It is included by @FT_FREETYPE_H.
*
*/
-#define FT_IMAGE_H <ftimage.h>
+#define FT_IMAGE_H <freetype/ftimage.h>
/*************************************************************************
@@ -245,7 +245,7 @@
* It is included by @FT_FREETYPE_H.
*
*/
-#define FT_TYPES_H <fttypes.h>
+#define FT_TYPES_H <freetype/fttypes.h>
/*************************************************************************
@@ -260,7 +260,7 @@
* (Most applications will never need to include this file.)
*
*/
-#define FT_LIST_H <ftlist.h>
+#define FT_LIST_H <freetype/ftlist.h>
/*************************************************************************
@@ -273,7 +273,7 @@
* scalable outline management API of FreeType~2.
*
*/
-#define FT_OUTLINE_H <ftoutln.h>
+#define FT_OUTLINE_H <freetype/ftoutln.h>
/*************************************************************************
@@ -286,7 +286,7 @@
* API which manages multiple @FT_Size objects per face.
*
*/
-#define FT_SIZES_H <ftsizes.h>
+#define FT_SIZES_H <freetype/ftsizes.h>
/*************************************************************************
@@ -299,7 +299,7 @@
* module management API of FreeType~2.
*
*/
-#define FT_MODULE_H <ftmodapi.h>
+#define FT_MODULE_H <freetype/ftmodapi.h>
/*************************************************************************
@@ -312,7 +312,20 @@
* renderer module management API of FreeType~2.
*
*/
-#define FT_RENDER_H <ftrender.h>
+#define FT_RENDER_H <freetype/ftrender.h>
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_DRIVER_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing
+ * structures and macros related to the driver modules.
+ *
+ */
+#define FT_DRIVER_H <freetype/ftdriver.h>
/*************************************************************************
@@ -324,8 +337,10 @@
* A macro used in #include statements to name the file containing
* structures and macros related to the auto-hinting module.
*
+ * Deprecated since version 2.9; use @FT_DRIVER_H instead.
+ *
*/
-#define FT_AUTOHINTER_H <ftautoh.h>
+#define FT_AUTOHINTER_H FT_DRIVER_H
/*************************************************************************
@@ -337,8 +352,10 @@
* A macro used in #include statements to name the file containing
* structures and macros related to the CFF driver module.
*
+ * Deprecated since version 2.9; use @FT_DRIVER_H instead.
+ *
*/
-#define FT_CFF_DRIVER_H <ftcffdrv.h>
+#define FT_CFF_DRIVER_H FT_DRIVER_H
/*************************************************************************
@@ -350,8 +367,25 @@
* A macro used in #include statements to name the file containing
* structures and macros related to the TrueType driver module.
*
+ * Deprecated since version 2.9; use @FT_DRIVER_H instead.
+ *
*/
-#define FT_TRUETYPE_DRIVER_H <ftttdrv.h>
+#define FT_TRUETYPE_DRIVER_H FT_DRIVER_H
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_PCF_DRIVER_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing
+ * structures and macros related to the PCF driver module.
+ *
+ * Deprecated since version 2.9; use @FT_DRIVER_H instead.
+ *
+ */
+#define FT_PCF_DRIVER_H FT_DRIVER_H
/*************************************************************************
@@ -364,7 +398,7 @@
* types and API specific to the Type~1 format.
*
*/
-#define FT_TYPE1_TABLES_H <t1tables.h>
+#define FT_TYPE1_TABLES_H <freetype/t1tables.h>
/*************************************************************************
@@ -379,7 +413,7 @@
* definitions, taken from the TrueType and OpenType specifications.
*
*/
-#define FT_TRUETYPE_IDS_H <ttnameid.h>
+#define FT_TRUETYPE_IDS_H <freetype/ttnameid.h>
/*************************************************************************
@@ -392,7 +426,7 @@
* types and API specific to the TrueType (as well as OpenType) format.
*
*/
-#define FT_TRUETYPE_TABLES_H <tttables.h>
+#define FT_TRUETYPE_TABLES_H <freetype/tttables.h>
/*************************************************************************
@@ -406,7 +440,7 @@
* SFNT-based font formats (i.e., TrueType and OpenType).
*
*/
-#define FT_TRUETYPE_TAGS_H <tttags.h>
+#define FT_TRUETYPE_TAGS_H <freetype/tttags.h>
/*************************************************************************
@@ -420,7 +454,7 @@
* face.
*
*/
-#define FT_BDF_H <ftbdf.h>
+#define FT_BDF_H <freetype/ftbdf.h>
/*************************************************************************
@@ -434,7 +468,7 @@
* face.
*
*/
-#define FT_CID_H <ftcid.h>
+#define FT_CID_H <freetype/ftcid.h>
/*************************************************************************
@@ -447,7 +481,7 @@
* definitions of an API which supports gzip-compressed files.
*
*/
-#define FT_GZIP_H <ftgzip.h>
+#define FT_GZIP_H <freetype/ftgzip.h>
/*************************************************************************
@@ -460,7 +494,7 @@
* definitions of an API which supports LZW-compressed files.
*
*/
-#define FT_LZW_H <ftlzw.h>
+#define FT_LZW_H <freetype/ftlzw.h>
/*************************************************************************
@@ -473,7 +507,7 @@
* definitions of an API which supports bzip2-compressed files.
*
*/
-#define FT_BZIP2_H <ftbzip2.h>
+#define FT_BZIP2_H <freetype/ftbzip2.h>
/*************************************************************************
@@ -486,7 +520,7 @@
* definitions of an API which supports Windows FNT files.
*
*/
-#define FT_WINFONTS_H <ftwinfnt.h>
+#define FT_WINFONTS_H <freetype/ftwinfnt.h>
/*************************************************************************
@@ -499,7 +533,7 @@
* API of the optional glyph management component.
*
*/
-#define FT_GLYPH_H <ftglyph.h>
+#define FT_GLYPH_H <freetype/ftglyph.h>
/*************************************************************************
@@ -512,7 +546,7 @@
* API of the optional bitmap conversion component.
*
*/
-#define FT_BITMAP_H <ftbitmap.h>
+#define FT_BITMAP_H <freetype/ftbitmap.h>
/*************************************************************************
@@ -525,7 +559,7 @@
* API of the optional exact bounding box computation routines.
*
*/
-#define FT_BBOX_H <ftbbox.h>
+#define FT_BBOX_H <freetype/ftbbox.h>
/*************************************************************************
@@ -538,64 +572,7 @@
* API of the optional FreeType~2 cache sub-system.
*
*/
-#define FT_CACHE_H <ftcache.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CACHE_IMAGE_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * `glyph image' API of the FreeType~2 cache sub-system.
- *
- * It is used to define a cache for @FT_Glyph elements. You can also
- * use the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need to
- * store small glyph bitmaps, as it will use less memory.
- *
- * This macro is deprecated. Simply include @FT_CACHE_H to have all
- * glyph image-related cache declarations.
- *
- */
-#define FT_CACHE_IMAGE_H FT_CACHE_H
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CACHE_SMALL_BITMAPS_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * `small bitmaps' API of the FreeType~2 cache sub-system.
- *
- * It is used to define a cache for small glyph bitmaps in a relatively
- * memory-efficient way. You can also use the API defined in
- * @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images,
- * including scalable outlines.
- *
- * This macro is deprecated. Simply include @FT_CACHE_H to have all
- * small bitmaps-related cache declarations.
- *
- */
-#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_CACHE_CHARMAP_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * `charmap' API of the FreeType~2 cache sub-system.
- *
- * This macro is deprecated. Simply include @FT_CACHE_H to have all
- * charmap-based cache declarations.
- *
- */
-#define FT_CACHE_CHARMAP_H FT_CACHE_H
+#define FT_CACHE_H <freetype/ftcache.h>
/*************************************************************************
@@ -612,7 +589,7 @@
* compiled on the Mac (note that the base API still works though).
*
*/
-#define FT_MAC_H <ftmac.h>
+#define FT_MAC_H <freetype/ftmac.h>
/*************************************************************************
@@ -625,7 +602,7 @@
* optional multiple-masters management API of FreeType~2.
*
*/
-#define FT_MULTIPLE_MASTERS_H <ftmm.h>
+#define FT_MULTIPLE_MASTERS_H <freetype/ftmm.h>
/*************************************************************************
@@ -639,7 +616,7 @@
* SFNT-based font formats (i.e., TrueType and OpenType).
*
*/
-#define FT_SFNT_NAMES_H <ftsnames.h>
+#define FT_SFNT_NAMES_H <freetype/ftsnames.h>
/*************************************************************************
@@ -653,7 +630,7 @@
* GPOS, GSUB, JSTF).
*
*/
-#define FT_OPENTYPE_VALIDATE_H <ftotval.h>
+#define FT_OPENTYPE_VALIDATE_H <freetype/ftotval.h>
/*************************************************************************
@@ -667,7 +644,7 @@
* mort, morx, bsln, just, kern, opbd, trak, prop).
*
*/
-#define FT_GX_VALIDATE_H <ftgxval.h>
+#define FT_GX_VALIDATE_H <freetype/ftgxval.h>
/*************************************************************************
@@ -680,7 +657,7 @@
* FreeType~2 API which accesses PFR-specific data.
*
*/
-#define FT_PFR_H <ftpfr.h>
+#define FT_PFR_H <freetype/ftpfr.h>
/*************************************************************************
@@ -692,7 +669,7 @@
* A macro used in #include statements to name the file containing the
* FreeType~2 API which provides functions to stroke outline paths.
*/
-#define FT_STROKER_H <ftstroke.h>
+#define FT_STROKER_H <freetype/ftstroke.h>
/*************************************************************************
@@ -704,7 +681,7 @@
* A macro used in #include statements to name the file containing the
* FreeType~2 API which performs artificial obliquing and emboldening.
*/
-#define FT_SYNTHESIS_H <ftsynth.h>
+#define FT_SYNTHESIS_H <freetype/ftsynth.h>
/*************************************************************************
@@ -716,7 +693,7 @@
* A macro used in #include statements to name the file containing the
* FreeType~2 API which provides functions specific to font formats.
*/
-#define FT_FONT_FORMATS_H <ftfntfmt.h>
+#define FT_FONT_FORMATS_H <freetype/ftfntfmt.h>
/* deprecated */
#define FT_XFREE86_H FT_FONT_FORMATS_H
@@ -732,7 +709,7 @@
* FreeType~2 API which performs trigonometric computations (e.g.,
* cosines and arc tangents).
*/
-#define FT_TRIGONOMETRY_H <fttrigon.h>
+#define FT_TRIGONOMETRY_H <freetype/fttrigon.h>
/*************************************************************************
@@ -744,19 +721,7 @@
* A macro used in #include statements to name the file containing the
* FreeType~2 API which performs color filtering for subpixel rendering.
*/
-#define FT_LCD_FILTER_H <ftlcdfil.h>
-
-
- /*************************************************************************
- *
- * @macro:
- * FT_UNPATENTED_HINTING_H
- *
- * @description:
- * A macro used in #include statements to name the file containing the
- * FreeType~2 API which performs color filtering for subpixel rendering.
- */
-#define FT_UNPATENTED_HINTING_H <ttunpat.h>
+#define FT_LCD_FILTER_H <freetype/ftlcdfil.h>
/*************************************************************************
@@ -766,9 +731,9 @@
*
* @description:
* A macro used in #include statements to name the file containing the
- * FreeType~2 API which performs color filtering for subpixel rendering.
+ * FreeType~2 API which performs incremental glyph loading.
*/
-#define FT_INCREMENTAL_H <ftincrem.h>
+#define FT_INCREMENTAL_H <freetype/ftincrem.h>
/*************************************************************************
@@ -780,7 +745,7 @@
* A macro used in #include statements to name the file containing the
* FreeType~2 API which returns entries from the TrueType GASP table.
*/
-#define FT_GASP_H <ftgasp.h>
+#define FT_GASP_H <freetype/ftgasp.h>
/*************************************************************************
@@ -792,30 +757,35 @@
* A macro used in #include statements to name the file containing the
* FreeType~2 API which returns individual and ranged glyph advances.
*/
-#define FT_ADVANCES_H <ftadvanc.h>
+#define FT_ADVANCES_H <freetype/ftadvanc.h>
/* */
-#define FT_ERROR_DEFINITIONS_H <fterrdef.h>
+ /* These header files don't need to be included by the user. */
+#define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h>
+#define FT_PARAMETER_TAGS_H <freetype/ftparams.h>
+ /* Deprecated macros. */
+#define FT_UNPATENTED_HINTING_H <freetype/ftparams.h>
+#define FT_TRUETYPE_UNPATENTED_H <freetype/ftparams.h>
+
+ /* FT_CACHE_H is the only header file needed for the cache subsystem. */
+#define FT_CACHE_IMAGE_H FT_CACHE_H
+#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H
+#define FT_CACHE_CHARMAP_H FT_CACHE_H
/* The internals of the cache sub-system are no longer exposed. We */
/* default to FT_CACHE_H at the moment just in case, but we know of */
/* no rogue client that uses them. */
/* */
-#define FT_CACHE_MANAGER_H <ftcache.h>
-#define FT_CACHE_INTERNAL_MRU_H <ftcache.h>
-#define FT_CACHE_INTERNAL_MANAGER_H <ftcache.h>
-#define FT_CACHE_INTERNAL_CACHE_H <ftcache.h>
-#define FT_CACHE_INTERNAL_GLYPH_H <ftcache.h>
-#define FT_CACHE_INTERNAL_IMAGE_H <ftcache.h>
-#define FT_CACHE_INTERNAL_SBITS_H <ftcache.h>
-
-
-#define FT_INCREMENTAL_H <ftincrem.h>
-
-#define FT_TRUETYPE_UNPATENTED_H <ttunpat.h>
+#define FT_CACHE_MANAGER_H FT_CACHE_H
+#define FT_CACHE_INTERNAL_MRU_H FT_CACHE_H
+#define FT_CACHE_INTERNAL_MANAGER_H FT_CACHE_H
+#define FT_CACHE_INTERNAL_CACHE_H FT_CACHE_H
+#define FT_CACHE_INTERNAL_GLYPH_H FT_CACHE_H
+#define FT_CACHE_INTERNAL_IMAGE_H FT_CACHE_H
+#define FT_CACHE_INTERNAL_SBITS_H FT_CACHE_H
/*
@@ -823,12 +793,12 @@
* only when building the library.
*/
#ifdef FT2_BUILD_LIBRARY
-#define FT_INTERNAL_INTERNAL_H <internal/internal.h>
+#define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
#include FT_INTERNAL_INTERNAL_H
#endif /* FT2_BUILD_LIBRARY */
-#endif /* __FT2_BUILD_H__ */
+#endif /* FTHEADER_H_ */
/* END */
diff --git a/include/config/ftmodule.h b/include/freetype/config/ftmodule.h
similarity index 100%
rename from include/config/ftmodule.h
rename to include/freetype/config/ftmodule.h
diff --git a/include/config/ftoption.h b/include/freetype/config/ftoption.h
similarity index 79%
rename from include/config/ftoption.h
rename to include/freetype/config/ftoption.h
index 1536c72..4bcab2a 100644
--- a/include/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -4,7 +4,7 @@
/* */
/* User-selectable configuration macros (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTOPTION_H__
-#define __FTOPTION_H__
+#ifndef FTOPTION_H_
+#define FTOPTION_H_
#include <ft2build.h>
@@ -38,9 +38,9 @@
/* library from a single source directory. */
/* */
/* - You can put a copy of this file in your build directory, more */
- /* precisely in `$BUILD/config/ftoption.h', where `$BUILD' is the */
- /* name of a directory that is included _before_ the FreeType include */
- /* path during compilation. */
+ /* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */
+ /* is the name of a directory that is included _before_ the FreeType */
+ /* include path during compilation. */
/* */
/* The default FreeType Makefiles and Jamfiles use the build */
/* directory `builds/<system>' by default, but you can easily change */
@@ -51,7 +51,7 @@
/* locate this file during the build. For example, */
/* */
/* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */
- /* #include <config/ftheader.h> */
+ /* #include <freetype/config/ftheader.h> */
/* */
/* will use `$BUILD/myftoptions.h' instead of this file for macro */
/* definitions. */
@@ -59,7 +59,7 @@
/* Note also that you can similarly pre-define the macro */
/* FT_CONFIG_MODULES_H used to locate the file listing of the modules */
/* that are statically linked to the library at compile time. By */
- /* default, this file is <config/ftmodule.h>. */
+ /* default, this file is <freetype/config/ftmodule.h>. */
/* */
/* We highly recommend using the third method whenever possible. */
/* */
@@ -75,22 +75,52 @@
/*************************************************************************/
+ /*#***********************************************************************/
+ /* */
+ /* If you enable this configuration option, FreeType recognizes an */
+ /* environment variable called `FREETYPE_PROPERTIES', which can be used */
+ /* to control the various font drivers and modules. The controllable */
+ /* properties are listed in the section @properties. */
+ /* */
+ /* You have to undefine this configuration option on platforms that lack */
+ /* the concept of environment variables (and thus don't have the */
+ /* `getenv' function), for example Windows CE. */
+ /* */
+ /* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
+ /* multiple lines for better readability). */
+ /* */
+ /* { */
+ /* <optional whitespace> */
+ /* <module-name1> ':' */
+ /* <property-name1> '=' <property-value1> */
+ /* <whitespace> */
+ /* <module-name2> ':' */
+ /* <property-name2> '=' <property-value2> */
+ /* ... */
+ /* } */
+ /* */
+ /* Example: */
+ /* */
+ /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
+ /* cff:no-stem-darkening=1 \ */
+ /* autofitter:warping=1 */
+ /* */
+#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+
+
/*************************************************************************/
/* */
- /* Uncomment the line below if you want to activate sub-pixel rendering */
- /* (a.k.a. LCD rendering, or ClearType) in this build of the library. */
+ /* Uncomment the line below if you want to activate LCD rendering */
+ /* technology similar to ClearType in this build of the library. This */
+ /* technology triples the resolution in the direction color subpixels. */
+ /* To mitigate color fringes inherent to this technology, you also need */
+ /* to explicitly set up LCD filtering. */
/* */
/* Note that this feature is covered by several Microsoft patents */
/* and should not be activated in any default build of the library. */
- /* */
- /* This macro has no impact on the FreeType API, only on its */
- /* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */
- /* FT_Render_Glyph still generates a bitmap that is 3 times wider than */
- /* the original size in case this macro isn't defined; however, each */
- /* triplet of subpixels has R=G=B. */
- /* */
- /* This is done to allow FreeType clients to run unmodified, forcing */
- /* them to display normal gray-level anti-aliased glyphs. */
+ /* When this macro is not defined, FreeType offers alternative LCD */
+ /* rendering technology that produces excellent output without LCD */
+ /* filtering. */
/* */
/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
@@ -184,6 +214,10 @@
/* Do not #undef this macro here since the build system might define */
/* it for certain configurations only. */
/* */
+ /* If you use a build system like cmake or the `configure' script, */
+ /* options set by those programs have precendence, overwriting the */
+ /* value here with the configured one. */
+ /* */
/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
@@ -200,6 +234,10 @@
/* */
/* Define this macro if you want to enable this `feature'. */
/* */
+ /* If you use a build system like cmake or the `configure' script, */
+ /* options set by those programs have precendence, overwriting the */
+ /* value here with the configured one. */
+ /* */
/* #define FT_CONFIG_OPTION_USE_BZIP2 */
@@ -225,6 +263,10 @@
/* */
/* Define this macro if you want to enable this `feature'. */
/* */
+ /* If you use a build system like cmake or the `configure' script, */
+ /* options set by those programs have precendence, overwriting the */
+ /* value here with the configured one. */
+ /* */
/* #define FT_CONFIG_OPTION_USE_PNG */
@@ -238,53 +280,15 @@
/* */
/* Define this macro if you want to enable this `feature'. */
/* */
+ /* If you use a build system like cmake or the `configure' script, */
+ /* options set by those programs have precendence, overwriting the */
+ /* value here with the configured one. */
+ /* */
/* #define FT_CONFIG_OPTION_USE_HARFBUZZ */
/*************************************************************************/
/* */
- /* DLL export compilation */
- /* */
- /* When compiling FreeType as a DLL, some systems/compilers need a */
- /* special keyword in front OR after the return type of function */
- /* declarations. */
- /* */
- /* Two macros are used within the FreeType source code to define */
- /* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
- /* */
- /* FT_EXPORT( return_type ) */
- /* */
- /* is used in a function declaration, as in */
- /* */
- /* FT_EXPORT( FT_Error ) */
- /* FT_Init_FreeType( FT_Library* alibrary ); */
- /* */
- /* */
- /* FT_EXPORT_DEF( return_type ) */
- /* */
- /* is used in a function definition, as in */
- /* */
- /* FT_EXPORT_DEF( FT_Error ) */
- /* FT_Init_FreeType( FT_Library* alibrary ) */
- /* { */
- /* ... some code ... */
- /* return FT_Err_Ok; */
- /* } */
- /* */
- /* You can provide your own implementation of FT_EXPORT and */
- /* FT_EXPORT_DEF here if you want. If you leave them undefined, they */
- /* will be later automatically defined as `extern return_type' to */
- /* allow normal compilation. */
- /* */
- /* Do not #undef these macros here since the build system might define */
- /* them for certain configurations only. */
- /* */
-/* #define FT_EXPORT(x) extern x */
-/* #define FT_EXPORT_DEF(x) x */
-
-
- /*************************************************************************/
- /* */
/* Glyph Postscript Names handling */
/* */
/* By default, FreeType 2 is compiled with the `psnames' module. This */
@@ -297,7 +301,7 @@
/* */
/* - The TrueType driver will provide its own set of glyph names, */
/* if you build it to support postscript names in the TrueType */
- /* `post' table. */
+ /* `post' table, but will not synthesize a missing Unicode charmap. */
/* */
/* - The Type 1 driver will not be able to synthesize a Unicode */
/* charmap out of the glyphs found in the fonts. */
@@ -492,7 +496,21 @@
/* code will be used. */
/* */
/* Setting this macro is needed for systems that prohibit address */
- /* fixups, such as BREW. */
+ /* fixups, such as BREW. [Note that standard compilers like gcc or */
+ /* clang handle PIC generation automatically; you don't have to set */
+ /* FT_CONFIG_OPTION_PIC, which is only necessary for very special */
+ /* compilers.] */
+ /* */
+ /* Note that FT_CONFIG_OPTION_PIC support is not available for all */
+ /* modules (see `modules.cfg' for a complete list). For building with */
+ /* FT_CONFIG_OPTION_PIC support, do the following. */
+ /* */
+ /* 0. Clone the repository. */
+ /* 1. Define FT_CONFIG_OPTION_PIC. */
+ /* 2. Remove all subdirectories in `src' that don't have */
+ /* FT_CONFIG_OPTION_PIC support. */
+ /* 3. Comment out the corresponding modules in `modules.cfg'. */
+ /* 4. Compile. */
/* */
/* #define FT_CONFIG_OPTION_PIC */
@@ -586,73 +604,62 @@
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile */
- /* EXPERIMENTAL subpixel hinting support into the TrueType driver. This */
- /* replaces the native TrueType hinting mechanism when anything but */
- /* FT_RENDER_MODE_MONO is requested. */
+ /* subpixel hinting support into the TrueType driver. This modifies the */
+ /* TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is */
+ /* requested. */
/* */
- /* Enabling this causes the TrueType driver to ignore instructions under */
- /* certain conditions. This is done in accordance with the guide here, */
- /* with some minor differences: */
+ /* In particular, it modifies the bytecode interpreter to interpret (or */
+ /* not) instructions in a certain way so that all TrueType fonts look */
+ /* like they do in a Windows ClearType (DirectWrite) environment. See */
+ /* [1] for a technical overview on what this means. See `ttinterp.h' */
+ /* for more details on the LEAN option. */
/* */
- /* http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
+ /* There are three possible values. */
/* */
- /* By undefining this, you only compile the code necessary to hint */
- /* TrueType glyphs with native TT hinting. */
+ /* Value 1: */
+ /* This value is associated with the `Infinality' moniker, */
+ /* contributed by an individual nicknamed Infinality with the goal of */
+ /* making TrueType fonts render better than on Windows. A high */
+ /* amount of configurability and flexibility, down to rules for */
+ /* single glyphs in fonts, but also very slow. Its experimental and */
+ /* slow nature and the original developer losing interest meant that */
+ /* this option was never enabled in default builds. */
/* */
- /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */
- /* defined. */
+ /* The corresponding interpreter version is v38. */
/* */
-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING */
-
-
- /*************************************************************************/
+ /* Value 2: */
+ /* The new default mode for the TrueType driver. The Infinality code */
+ /* base was stripped to the bare minimum and all configurability */
+ /* removed in the name of speed and simplicity. The configurability */
+ /* was mainly aimed at legacy fonts like Arial, Times New Roman, or */
+ /* Courier. Legacy fonts are fonts that modify vertical stems to */
+ /* achieve clean black-and-white bitmaps. The new mode focuses on */
+ /* applying a minimal set of rules to all fonts indiscriminately so */
+ /* that modern and web fonts render well while legacy fonts render */
+ /* okay. */
/* */
- /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
- /* of the TrueType bytecode interpreter is used that doesn't implement */
- /* any of the patented opcodes and algorithms. The patents related to */
- /* TrueType hinting have expired worldwide since May 2010; this option */
- /* is now deprecated. */
+ /* The corresponding interpreter version is v40. */
/* */
- /* Note that the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* */
- /* if you define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; in other words, */
- /* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
- /* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */
+ /* Value 3: */
+ /* Compile both, making both v38 and v40 available (the latter is the */
+ /* default). */
/* */
- /* This macro is only useful for a small number of font files (mostly */
- /* for Asian scripts) that require bytecode interpretation to properly */
- /* load glyphs. For all other fonts, this produces unpleasant results, */
- /* thus the unpatented interpreter is never used to load glyphs from */
- /* TrueType fonts unless one of the following two options is used. */
+ /* By undefining these, you get rendering behavior like on Windows */
+ /* without ClearType, i.e., Windows XP without ClearType enabled and */
+ /* Win9x (interpreter version v35). Or not, depending on how much */
+ /* hinting blood and testing tears the font designer put into a given */
+ /* font. If you define one or both subpixel hinting options, you can */
+ /* switch between between v35 and the ones you define (using */
+ /* `FT_Property_Set'). */
/* */
- /* - The unpatented interpreter is explicitly activated by the user */
- /* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */
- /* when opening the FT_Face. */
+ /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */
+ /* defined. */
/* */
- /* - FreeType detects that the FT_Face corresponds to one of the */
- /* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */
- /* contains a hard-coded list of font names and other matching */
- /* parameters (see function `tt_face_init' in file */
- /* `src/truetype/ttobjs.c'). */
+ /* [1] https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
/* */
- /* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */
- /* */
- /* { */
- /* FT_Parameter parameter; */
- /* FT_Open_Args open_args; */
- /* */
- /* */
- /* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */
- /* */
- /* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */
- /* open_args.pathname = my_font_pathname; */
- /* open_args.num_params = 1; */
- /* open_args.params = ¶meter; */
- /* */
- /* error = FT_Open_Face( library, &open_args, index, &face ); */
- /* ... */
- /* } */
- /* */
-/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */
+/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */
+#define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2
+/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */
/*************************************************************************/
@@ -668,7 +675,7 @@
/* composite flags array which can be used to disambiguate, but old */
/* fonts will not have them. */
/* */
- /* http://www.microsoft.com/typography/otspec/glyf.htm */
+ /* https://www.microsoft.com/typography/otspec/glyf.htm */
/* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */
/* */
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
@@ -693,6 +700,24 @@
/*************************************************************************/
+ /* */
+ /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum */
+ /* number of bytecode instructions executed for a single run of the */
+ /* bytecode interpreter, needed to prevent infinite loops. You don't */
+ /* want to change this except for very special situations (e.g., making */
+ /* a library fuzzer spend less time to handle broken fonts). */
+ /* */
+ /* It is not expected that this value is ever modified by a configuring */
+ /* script; instead, it gets surrounded with #ifndef ... #endif so that */
+ /* the value can be set as a preprocessor option on the compiler's */
+ /* command line. */
+ /* */
+#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
+#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L
+#endif
+
+
+ /*************************************************************************/
/*************************************************************************/
/**** ****/
/**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
@@ -748,6 +773,16 @@
/*************************************************************************/
+ /* */
+ /* T1_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe Type 1 */
+ /* engine gets compiled into FreeType. If defined, it is possible to */
+ /* switch between the two engines using the `hinting-engine' property of */
+ /* the type1 driver module. */
+ /* */
+/* #define T1_CONFIG_OPTION_OLD_ENGINE */
+
+
+ /*************************************************************************/
/*************************************************************************/
/**** ****/
/**** C F F D R I V E R C O N F I G U R A T I O N ****/
@@ -762,8 +797,8 @@
/* possible to set up the default values of the four control points that */
/* define the stem darkening behaviour of the (new) CFF engine. For */
/* more details please read the documentation of the */
- /* `darkening-parameters' property of the cff driver module (file */
- /* `ftcffdrv.h'), which allows the control at run-time. */
+ /* `darkening-parameters' property (file `ftdriver.h'), which allows the */
+ /* control at run-time. */
/* */
/* Do *not* undefine these macros! */
/* */
@@ -793,6 +828,33 @@
/*************************************************************************/
/*************************************************************************/
/**** ****/
+ /**** P C F D R I V E R C O N F I G U R A T I O N ****/
+ /**** ****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* There are many PCF fonts just called `Fixed' which look completely */
+ /* different, and which have nothing to do with each other. When */
+ /* selecting `Fixed' in KDE or Gnome one gets results that appear rather */
+ /* random, the style changes often if one changes the size and one */
+ /* cannot select some fonts at all. This option makes the PCF module */
+ /* prepend the foundry name (plus a space) to the family name. */
+ /* */
+ /* We also check whether we have `wide' characters; all put together, we */
+ /* get family names like `Sony Fixed' or `Misc Fixed Wide'. */
+ /* */
+ /* If this option is activated, it can be controlled with the */
+ /* `no-long-family-names' property of the pcf driver module. */
+ /* */
+/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /**** ****/
/**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
/**** ****/
/*************************************************************************/
@@ -808,7 +870,9 @@
/*************************************************************************/
/* */
- /* Compile autofit module with Indic script support. */
+ /* Compile autofit module with fallback Indic script support, covering */
+ /* some scripts that the `latin' submodule of the autofit module doesn't */
+ /* (yet) handle. */
/* */
#define AF_CONFIG_OPTION_INDIC
@@ -822,11 +886,31 @@
/* */
/* This experimental option is active only if the rendering mode is */
/* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */
- /* `warping' property of the auto-hinter (see file `ftautoh.h' for more */
+ /* `warping' property of the auto-hinter (see file `ftdriver.h' for more */
/* information; by default it is switched off). */
/* */
#define AF_CONFIG_OPTION_USE_WARPER
+ /*************************************************************************/
+ /* */
+ /* Use TrueType-like size metrics for `light' auto-hinting. */
+ /* */
+ /* It is strongly recommended to avoid this option, which exists only to */
+ /* help some legacy applications retain its appearance and behaviour */
+ /* with respect to auto-hinted TrueType fonts. */
+ /* */
+ /* The very reason this option exists at all are GNU/Linux distributions */
+ /* like Fedora that did not un-patch the following change (which was */
+ /* present in FreeType between versions 2.4.6 and 2.7.1, inclusive). */
+ /* */
+ /* 2011-07-16 Steven Chu <steven.f.chu@gmail.com> */
+ /* */
+ /* [truetype] Fix metrics on size request for scalable fonts. */
+ /* */
+ /* This problematic commit is now reverted (more or less). */
+ /* */
+/* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */
+
/* */
@@ -838,14 +922,21 @@
/*
- * This macro is defined if either unpatented or native TrueType
- * hinting is requested by the definitions above.
+ * This macro is defined if native TrueType hinting is requested by the
+ * definitions above.
*/
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
#define TT_USE_BYTECODE_INTERPRETER
-#undef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define TT_USE_BYTECODE_INTERPRETER
+
+#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 1
+#define TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+#endif
+
+#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 2
+#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+#endif
+#endif
#endif
@@ -880,7 +971,7 @@
FT_END_HEADER
-#endif /* __FTOPTION_H__ */
+#endif /* FTOPTION_H_ */
/* END */
diff --git a/include/config/ftstdlib.h b/include/freetype/config/ftstdlib.h
similarity index 95%
rename from include/config/ftstdlib.h
rename to include/freetype/config/ftstdlib.h
index 8ef43c0..42f9a06 100644
--- a/include/config/ftstdlib.h
+++ b/include/freetype/config/ftstdlib.h
@@ -5,7 +5,7 @@
/* ANSI-specific library and header configuration file (specification */
/* only). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,14 +23,13 @@
/* FreeType normally requires. It also defines macros to rename the */
/* standard functions within the FreeType source code. */
/* */
- /* Load a file which defines __FTSTDLIB_H__ before this one to override */
- /* it. */
+ /* Load a file which defines FTSTDLIB_H_ before this one to override it. */
/* */
/*************************************************************************/
-#ifndef __FTSTDLIB_H__
-#define __FTSTDLIB_H__
+#ifndef FTSTDLIB_H_
+#define FTSTDLIB_H_
#include <stddef.h>
@@ -64,6 +63,8 @@
#define FT_INT_MAX INT_MAX
#define FT_INT_MIN INT_MIN
#define FT_UINT_MAX UINT_MAX
+#define FT_LONG_MIN LONG_MIN
+#define FT_LONG_MAX LONG_MAX
#define FT_ULONG_MAX ULONG_MAX
@@ -141,7 +142,8 @@
/**********************************************************************/
-#define ft_atol atol
+#define ft_strtol strtol
+#define ft_getenv getenv
/**********************************************************************/
@@ -167,7 +169,7 @@
#include <stdarg.h>
-#endif /* __FTSTDLIB_H__ */
+#endif /* FTSTDLIB_H_ */
/* END */
diff --git a/include/freetype.h b/include/freetype/freetype.h
similarity index 76%
rename from include/freetype.h
rename to include/freetype/freetype.h
index bca93e5..9664404 100644
--- a/include/freetype.h
+++ b/include/freetype/freetype.h
@@ -4,7 +4,7 @@
/* */
/* FreeType high-level API and common types (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FREETYPE_H__
-#define __FREETYPE_H__
+#ifndef FREETYPE_H_
+#define FREETYPE_H_
#ifndef FT_FREETYPE_H
@@ -138,24 +138,26 @@
/* FT_FACE_FLAG_TRICKY */
/* FT_FACE_FLAG_KERNING */
/* FT_FACE_FLAG_MULTIPLE_MASTERS */
+ /* FT_FACE_FLAG_VARIATION */
/* FT_FACE_FLAG_GLYPH_NAMES */
/* FT_FACE_FLAG_EXTERNAL_STREAM */
/* FT_FACE_FLAG_HINTER */
- /* FT_FACE_FLAG_TRICKY */
/* */
/* FT_HAS_HORIZONTAL */
/* FT_HAS_VERTICAL */
/* FT_HAS_KERNING */
/* FT_HAS_FIXED_SIZES */
/* FT_HAS_GLYPH_NAMES */
- /* FT_HAS_MULTIPLE_MASTERS */
/* FT_HAS_COLOR */
+ /* FT_HAS_MULTIPLE_MASTERS */
/* */
/* FT_IS_SFNT */
/* FT_IS_SCALABLE */
/* FT_IS_FIXED_WIDTH */
/* FT_IS_CID_KEYED */
/* FT_IS_TRICKY */
+ /* FT_IS_NAMED_INSTANCE */
+ /* FT_IS_VARIATION */
/* */
/* FT_STYLE_FLAG_BOLD */
/* FT_STYLE_FLAG_ITALIC */
@@ -176,6 +178,7 @@
/* FT_Done_Face */
/* FT_Reference_Face */
/* FT_New_Memory_Face */
+ /* FT_Face_Properties */
/* FT_Open_Face */
/* FT_Open_Args */
/* FT_Parameter */
@@ -266,8 +269,8 @@
/* FT_Glyph_Metrics */
/* */
/* <Description> */
- /* A structure used to model the metrics of a single glyph. The */
- /* values are expressed in 26.6 fractional pixel format; if the flag */
+ /* A structure to model the metrics of a single glyph. The values */
+ /* are expressed in 26.6 fractional pixel format; if the flag */
/* @FT_LOAD_NO_SCALE has been used while loading the glyph, values */
/* are expressed in font units instead. */
/* */
@@ -306,6 +309,11 @@
/* `horiAdvance' or `vertAdvance'; you have to manually adjust these */
/* values to account for the added width and height. */
/* */
+ /* FreeType doesn't use the `VORG' table data for CFF fonts because */
+ /* it doesn't have an interface to quickly retrieve the glyph height. */
+ /* The y~coordinate of the vertical origin can be simply computed as */
+ /* `vertBearingY + height' after loading a glyph. */
+ /* */
typedef struct FT_Glyph_Metrics_
{
FT_Pos width;
@@ -350,10 +358,10 @@
/* */
/* <Note> */
/* Windows FNT: */
- /* The nominal size given in a FNT font is not reliable. Thus when */
- /* the driver finds it incorrect, it sets `size' to some calculated */
- /* values and sets `x_ppem' and `y_ppem' to the pixel width and */
- /* height given in the font, respectively. */
+ /* The nominal size given in a FNT font is not reliable. If the */
+ /* driver finds it incorrect, it sets `size' to some calculated */
+ /* values, and `x_ppem' and `y_ppem' to the pixel width and height */
+ /* given in the font, respectively. */
/* */
/* TrueType embedded bitmaps: */
/* `size', `width', and `height' values are not contained in the */
@@ -422,9 +430,9 @@
/* FT_Module */
/* */
/* <Description> */
- /* A handle to a given FreeType module object. Each module can be a */
+ /* A handle to a given FreeType module object. A module can be a */
/* font driver, a renderer, or anything else that provides services */
- /* to the formers. */
+ /* to the former. */
/* */
typedef struct FT_ModuleRec_* FT_Module;
@@ -435,8 +443,8 @@
/* FT_Driver */
/* */
/* <Description> */
- /* A handle to a given FreeType font driver object. Each font driver */
- /* is a special module capable of creating faces from font files. */
+ /* A handle to a given FreeType font driver object. A font driver */
+ /* is a module capable of creating faces from font files. */
/* */
typedef struct FT_DriverRec_* FT_Driver;
@@ -447,10 +455,10 @@
/* FT_Renderer */
/* */
/* <Description> */
- /* A handle to a given FreeType renderer. A renderer is a special */
- /* module in charge of converting a glyph image to a bitmap, when */
- /* necessary. Each renderer supports a given glyph image format, and */
- /* one or more target surface depths. */
+ /* A handle to a given FreeType renderer. A renderer is a module in */
+ /* charge of converting a glyph's outline image to a bitmap. It */
+ /* supports a single glyph image format, and one or more target */
+ /* surface depths. */
/* */
typedef struct FT_RendererRec_* FT_Renderer;
@@ -468,15 +476,15 @@
/* FT_Face */
/* */
/* <Description> */
- /* A handle to a given typographic face object. A face object models */
- /* a given typeface, in a given style. */
+ /* A handle to a typographic face object. A face object models a */
+ /* given typeface, in a given style. */
/* */
/* <Note> */
- /* Each face object also owns a single @FT_GlyphSlot object, as well */
+ /* A face object also owns a single @FT_GlyphSlot object, as well */
/* as one or more @FT_Size objects. */
/* */
/* Use @FT_New_Face or @FT_Open_Face to create a new face object from */
- /* a given filepathname or a custom input stream. */
+ /* a given filepath or a custom input stream. */
/* */
/* Use @FT_Done_Face to destroy it (along with its slot and sizes). */
/* */
@@ -501,11 +509,11 @@
/* FT_Size */
/* */
/* <Description> */
- /* A handle to an object used to model a face scaled to a given */
+ /* A handle to an object that models a face scaled to a given */
/* character size. */
/* */
/* <Note> */
- /* Each @FT_Face has an _active_ @FT_Size object that is used by */
+ /* An @FT_Face has one _active_ @FT_Size object that is used by */
/* functions like @FT_Load_Glyph to determine the scaling */
/* transformation that in turn is used to load and hint glyphs and */
/* metrics. */
@@ -532,9 +540,8 @@
/* FT_GlyphSlot */
/* */
/* <Description> */
- /* A handle to a given `glyph slot'. A slot is a container where it */
- /* is possible to load any of the glyphs contained in its parent */
- /* face. */
+ /* A handle to a given `glyph slot'. A slot is a container that can */
+ /* hold any of the glyphs contained in its parent face. */
/* */
/* In other words, each time you call @FT_Load_Glyph or */
/* @FT_Load_Char, the slot's content is erased by the new glyph data, */
@@ -553,13 +560,14 @@
/* FT_CharMap */
/* */
/* <Description> */
- /* A handle to a given character map. A charmap is used to translate */
- /* character codes in a given encoding into glyph indexes for its */
- /* parent's face. Some font formats may provide several charmaps per */
- /* font. */
+ /* A handle to a character map (usually abbreviated to `charmap'). A */
+ /* charmap is used to translate character codes in a given encoding */
+ /* into glyph indexes for its parent's face. Some font formats may */
+ /* provide several charmaps per font. */
/* */
/* Each face object owns zero or more charmaps, but only one of them */
- /* can be `active' and used by @FT_Get_Char_Index or @FT_Load_Char. */
+ /* can be `active', providing the data used by @FT_Get_Char_Index or */
+ /* @FT_Load_Char. */
/* */
/* The list of available charmaps in a face is available through the */
/* `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec. */
@@ -570,7 +578,8 @@
/* <Note> */
/* When a new face is created (either through @FT_New_Face or */
/* @FT_Open_Face), the library looks for a Unicode charmap within */
- /* the list and automatically activates it. */
+ /* the list and automatically activates it. If there is no Unicode */
+ /* charmap, FreeType doesn't set an `active' charmap. */
/* */
/* <Also> */
/* See @FT_CharMapRec for the publicly accessible fields of a given */
@@ -616,8 +625,8 @@
/* FT_Encoding */
/* */
/* <Description> */
- /* An enumeration used to specify character sets supported by */
- /* charmaps. Used in the @FT_Select_Charmap API function. */
+ /* An enumeration to specify character sets supported by charmaps. */
+ /* Used in the @FT_Select_Charmap API function. */
/* */
/* <Note> */
/* Despite the name, this enumeration lists specific character */
@@ -631,19 +640,18 @@
/* The encoding value~0 is reserved. */
/* */
/* FT_ENCODING_UNICODE :: */
- /* Corresponds to the Unicode character set. This value covers */
- /* all versions of the Unicode repertoire, including ASCII and */
- /* Latin-1. Most fonts include a Unicode charmap, but not all */
- /* of them. */
+ /* The Unicode character set. This value covers all versions of */
+ /* the Unicode repertoire, including ASCII and Latin-1. Most fonts */
+ /* include a Unicode charmap, but not all of them. */
/* */
/* For example, if you want to access Unicode value U+1F028 (and */
/* the font contains it), use value 0x1F028 as the input value for */
/* @FT_Get_Char_Index. */
/* */
/* FT_ENCODING_MS_SYMBOL :: */
- /* Corresponds to the Microsoft Symbol encoding, used to encode */
- /* mathematical symbols and wingdings. For more information, see */
- /* `http://www.microsoft.com/typography/otspec/recom.htm', */
+ /* Microsoft Symbol encoding, used to encode mathematical symbols */
+ /* and wingdings. For more information, see */
+ /* `https://www.microsoft.com/typography/otspec/recom.htm', */
/* `http://www.kostis.net/charsets/symbol.htm', and */
/* `http://www.kostis.net/charsets/wingding.htm'. */
/* */
@@ -651,60 +659,60 @@
/* Area) in the range U+F020-U+F0FF. */
/* */
/* FT_ENCODING_SJIS :: */
- /* Corresponds to Japanese SJIS encoding. More info at */
- /* at `http://en.wikipedia.org/wiki/Shift_JIS'. */
- /* See note on multi-byte encodings below. */
+ /* Shift JIS encoding for Japanese. More info at */
+ /* `https://en.wikipedia.org/wiki/Shift_JIS'. See note on */
+ /* multi-byte encodings below. */
/* */
- /* FT_ENCODING_GB2312 :: */
- /* Corresponds to an encoding system for Simplified Chinese as used */
- /* used in mainland China. */
+ /* FT_ENCODING_PRC :: */
+ /* Corresponds to encoding systems mainly for Simplified Chinese as */
+ /* used in People's Republic of China (PRC). The encoding layout */
+ /* is based on GB~2312 and its supersets GBK and GB~18030. */
/* */
/* FT_ENCODING_BIG5 :: */
/* Corresponds to an encoding system for Traditional Chinese as */
/* used in Taiwan and Hong Kong. */
/* */
/* FT_ENCODING_WANSUNG :: */
- /* Corresponds to the Korean encoding system known as Wansung. */
+ /* Corresponds to the Korean encoding system known as Extended */
+ /* Wansung (MS Windows code page 949). */
/* For more information see */
- /* `https://msdn.microsoft.com/en-US/goglobal/cc305154'. */
+ /* `https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt'. */
/* */
/* FT_ENCODING_JOHAB :: */
/* The Korean standard character set (KS~C 5601-1992), which */
/* corresponds to MS Windows code page 1361. This character set */
- /* includes all possible Hangeul character combinations. */
+ /* includes all possible Hangul character combinations. */
/* */
/* FT_ENCODING_ADOBE_LATIN_1 :: */
/* Corresponds to a Latin-1 encoding as defined in a Type~1 */
/* PostScript font. It is limited to 256 character codes. */
/* */
/* FT_ENCODING_ADOBE_STANDARD :: */
- /* Corresponds to the Adobe Standard encoding, as found in Type~1, */
- /* CFF, and OpenType/CFF fonts. It is limited to 256 character */
- /* codes. */
+ /* Adobe Standard encoding, as found in Type~1, CFF, and */
+ /* OpenType/CFF fonts. It is limited to 256 character codes. */
/* */
/* FT_ENCODING_ADOBE_EXPERT :: */
- /* Corresponds to the Adobe Expert encoding, as found in Type~1, */
- /* CFF, and OpenType/CFF fonts. It is limited to 256 character */
- /* codes. */
+ /* Adobe Expert encoding, as found in Type~1, CFF, and OpenType/CFF */
+ /* fonts. It is limited to 256 character codes. */
/* */
/* FT_ENCODING_ADOBE_CUSTOM :: */
/* Corresponds to a custom encoding, as found in Type~1, CFF, and */
/* OpenType/CFF fonts. It is limited to 256 character codes. */
/* */
/* FT_ENCODING_APPLE_ROMAN :: */
- /* Corresponds to the 8-bit Apple roman encoding. Many TrueType */
- /* and OpenType fonts contain a charmap for this encoding, since */
- /* older versions of Mac OS are able to use it. */
+ /* Apple roman encoding. Many TrueType and OpenType fonts contain */
+ /* a charmap for this 8-bit encoding, since older versions of Mac */
+ /* OS are able to use it. */
/* */
/* FT_ENCODING_OLD_LATIN_2 :: */
- /* This value is deprecated and was never used nor reported by */
+ /* This value is deprecated and was neither used nor reported by */
/* FreeType. Don't use or test for it. */
/* */
/* FT_ENCODING_MS_SJIS :: */
/* Same as FT_ENCODING_SJIS. Deprecated. */
/* */
/* FT_ENCODING_MS_GB2312 :: */
- /* Same as FT_ENCODING_GB2312. Deprecated. */
+ /* Same as FT_ENCODING_PRC. Deprecated. */
/* */
/* FT_ENCODING_MS_BIG5 :: */
/* Same as FT_ENCODING_BIG5. Deprecated. */
@@ -716,11 +724,12 @@
/* Same as FT_ENCODING_JOHAB. Deprecated. */
/* */
/* <Note> */
- /* By default, FreeType automatically synthesizes a Unicode charmap */
- /* for PostScript fonts, using their glyph names dictionaries. */
- /* However, it also reports the encodings defined explicitly in the */
- /* font file, for the cases when they are needed, with the Adobe */
- /* values as well. */
+ /* By default, FreeType enables a Unicode charmap and tags it with */
+ /* FT_ENCODING_UNICODE when it is either provided or can be generated */
+ /* from PostScript glyph name dictionaries in the font file. */
+ /* All other encodings are considered legacy and tagged only if */
+ /* explicitly defined in the font file. Otherwise, FT_ENCODING_NONE */
+ /* is used. */
/* */
/* FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap */
/* is neither Unicode nor ISO-8859-1 (otherwise it is set to */
@@ -737,21 +746,21 @@
/* Russian). */
/* */
/* FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH */
- /* and `encoding_id' is not @TT_MAC_ID_ROMAN (otherwise it is set to */
+ /* and `encoding_id' is not `TT_MAC_ID_ROMAN' (otherwise it is set to */
/* FT_ENCODING_APPLE_ROMAN). */
/* */
/* If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function */
/* @FT_Get_CMap_Language_ID to query the Mac language ID that may */
/* be needed to be able to distinguish Apple encoding variants. See */
/* */
- /* http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt */
+ /* https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt */
/* */
/* to get an idea how to do that. Basically, if the language ID */
/* is~0, don't use it, otherwise subtract 1 from the language ID. */
/* Then examine `encoding_id'. If, for example, `encoding_id' is */
- /* @TT_MAC_ID_ROMAN and the language ID (minus~1) is */
+ /* `TT_MAC_ID_ROMAN' and the language ID (minus~1) is */
/* `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman. */
- /* @TT_MAC_ID_ARABIC with `TT_MAC_LANGID_FARSI' means the Farsi */
+ /* `TT_MAC_ID_ARABIC' with `TT_MAC_LANGID_FARSI' means the Farsi */
/* variant the Arabic encoding. */
/* */
typedef enum FT_Encoding_
@@ -762,14 +771,15 @@
FT_ENC_TAG( FT_ENCODING_UNICODE, 'u', 'n', 'i', 'c' ),
FT_ENC_TAG( FT_ENCODING_SJIS, 's', 'j', 'i', 's' ),
- FT_ENC_TAG( FT_ENCODING_GB2312, 'g', 'b', ' ', ' ' ),
+ FT_ENC_TAG( FT_ENCODING_PRC, 'g', 'b', ' ', ' ' ),
FT_ENC_TAG( FT_ENCODING_BIG5, 'b', 'i', 'g', '5' ),
FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ),
FT_ENC_TAG( FT_ENCODING_JOHAB, 'j', 'o', 'h', 'a' ),
- /* for backwards compatibility */
+ /* for backward compatibility */
+ FT_ENCODING_GB2312 = FT_ENCODING_PRC,
FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS,
- FT_ENCODING_MS_GB2312 = FT_ENCODING_GB2312,
+ FT_ENCODING_MS_GB2312 = FT_ENCODING_PRC,
FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5,
FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG,
FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB,
@@ -794,7 +804,7 @@
#define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1
#define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2
#define ft_encoding_sjis FT_ENCODING_SJIS
-#define ft_encoding_gb2312 FT_ENCODING_GB2312
+#define ft_encoding_gb2312 FT_ENCODING_PRC
#define ft_encoding_big5 FT_ENCODING_BIG5
#define ft_encoding_wansung FT_ENCODING_WANSUNG
#define ft_encoding_johab FT_ENCODING_JOHAB
@@ -821,11 +831,11 @@
/* */
/* platform_id :: An ID number describing the platform for the */
/* following encoding ID. This comes directly from */
- /* the TrueType specification and should be emulated */
- /* for other formats. */
+ /* the TrueType specification and gets emulated for */
+ /* other formats. */
/* */
/* encoding_id :: A platform specific encoding number. This also */
- /* comes from the TrueType specification and should be */
+ /* comes from the TrueType specification and gets */
/* emulated similarly. */
/* */
typedef struct FT_CharMapRec_
@@ -853,8 +863,8 @@
/* FT_Face_Internal */
/* */
/* <Description> */
- /* An opaque handle to an `FT_Face_InternalRec' structure, used to */
- /* model private data of a given @FT_Face object. */
+ /* An opaque handle to an `FT_Face_InternalRec' structure that models */
+ /* the private data of a given @FT_Face object. */
/* */
/* This structure might change between releases of FreeType~2 and is */
/* not generally available to client applications. */
@@ -874,27 +884,58 @@
/* <Fields> */
/* num_faces :: The number of faces in the font file. Some */
/* font formats can have multiple faces in */
- /* a font file. */
+ /* a single font file. */
/* */
- /* face_index :: The index of the face in the font file. It */
- /* is set to~0 if there is only one face in */
+ /* face_index :: This field holds two different values. */
+ /* Bits 0-15 are the index of the face in the */
+ /* font file (starting with value~0). They */
+ /* are set to~0 if there is only one face in */
/* the font file. */
/* */
+ /* [Since 2.6.1] Bits 16-30 are relevant to GX */
+ /* and OpenType variation fonts only, holding */
+ /* the named instance index for the current */
+ /* face index (starting with value~1; value~0 */
+ /* indicates font access without a named */
+ /* instance). For non-variation fonts, bits */
+ /* 16-30 are ignored. If we have the third */
+ /* named instance of face~4, say, `face_index' */
+ /* is set to 0x00030004. */
+ /* */
+ /* Bit 31 is always zero (this is, */
+ /* `face_index' is always a positive value). */
+ /* */
+ /* [Since 2.9] Changing the design coordinates */
+ /* with @FT_Set_Var_Design_Coordinates or */
+ /* @FT_Set_Var_Blend_Coordinates does not */
+ /* influence the named instance index value */
+ /* (only @FT_Set_Named_Instance does that). */
+ /* */
/* face_flags :: A set of bit flags that give important */
/* information about the face; see */
/* @FT_FACE_FLAG_XXX for the details. */
/* */
- /* style_flags :: A set of bit flags indicating the style of */
- /* the face; see @FT_STYLE_FLAG_XXX for the */
- /* details. */
+ /* style_flags :: The lower 16~bits contain a set of bit */
+ /* flags indicating the style of the face; see */
+ /* @FT_STYLE_FLAG_XXX for the details. */
+ /* */
+ /* [Since 2.6.1] Bits 16-30 hold the number */
+ /* of named instances available for the */
+ /* current face if we have a GX or OpenType */
+ /* variation (sub)font. Bit 31 is always zero */
+ /* (this is, `style_flags' is always a */
+ /* positive value). Note that a variation */
+ /* font has always at least one named */
+ /* instance, namely the default instance. */
/* */
/* num_glyphs :: The number of glyphs in the face. If the */
/* face is scalable and has sbits (see */
/* `num_fixed_sizes'), it is set to the number */
/* of outline glyphs. */
/* */
- /* For CID-keyed fonts, this value gives the */
- /* highest CID used in the font. */
+ /* For CID-keyed fonts (not in an SFNT */
+ /* wrapper) this value gives the highest CID */
+ /* used in the font. */
/* */
/* family_name :: The face's family name. This is an ASCII */
/* string, usually in English, that describes */
@@ -933,6 +974,10 @@
/* strikes in the face. It is set to NULL if */
/* there is no bitmap strike. */
/* */
+ /* Note that FreeType tries to sanitize the */
+ /* strike data since they are sometimes sloppy */
+ /* or incorrect, but this can easily fail. */
+ /* */
/* num_charmaps :: The number of charmaps in the face. */
/* */
/* charmaps :: An array of the charmaps of the face. */
@@ -968,8 +1013,8 @@
/* expressed in font units. For font formats */
/* not having this information, it is set to */
/* `bbox.yMin'. Note that this field is */
- /* usually negative. Only relevant for */
- /* scalable formats. */
+ /* negative for values below the baseline. */
+ /* Only relevant for scalable formats. */
/* */
/* height :: This value is the vertical distance */
/* between two consecutive baselines, */
@@ -1012,6 +1057,15 @@
/* Fields may be changed after a call to @FT_Attach_File or */
/* @FT_Attach_Stream. */
/* */
+ /* For an OpenType variation font, the values of the following fields */
+ /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
+ /* friends) if the font contains an `MVAR' table: `ascender', */
+ /* `descender', `height', `underline_position', and */
+ /* `underline_thickness'. */
+ /* */
+ /* Especially for TrueType fonts see also the documentation for */
+ /* @FT_Size_Metrics. */
+ /* */
typedef struct FT_FaceRec_
{
FT_Long num_faces;
@@ -1083,49 +1137,51 @@
/* */
/* <Values> */
/* FT_FACE_FLAG_SCALABLE :: */
- /* Indicates that the face contains outline glyphs. This doesn't */
- /* prevent bitmap strikes, i.e., a face can have both this and */
- /* and @FT_FACE_FLAG_FIXED_SIZES set. */
+ /* The face contains outline glyphs. Note that a face can contain */
+ /* bitmap strikes also, i.e., a face can have both this flag and */
+ /* @FT_FACE_FLAG_FIXED_SIZES set. */
/* */
/* FT_FACE_FLAG_FIXED_SIZES :: */
- /* Indicates that the face contains bitmap strikes. See also the */
+ /* The face contains bitmap strikes. See also the */
/* `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec. */
/* */
/* FT_FACE_FLAG_FIXED_WIDTH :: */
- /* Indicates that the face contains fixed-width characters (like */
- /* Courier, Lucido, MonoType, etc.). */
+ /* The face contains fixed-width characters (like Courier, Lucida, */
+ /* MonoType, etc.). */
/* */
/* FT_FACE_FLAG_SFNT :: */
- /* Indicates that the face uses the `sfnt' storage scheme. For */
- /* now, this means TrueType and OpenType. */
+ /* The face uses the SFNT storage scheme. For now, this means */
+ /* TrueType and OpenType. */
/* */
/* FT_FACE_FLAG_HORIZONTAL :: */
- /* Indicates that the face contains horizontal glyph metrics. This */
- /* should be set for all common formats. */
+ /* The face contains horizontal glyph metrics. This should be set */
+ /* for all common formats. */
/* */
/* FT_FACE_FLAG_VERTICAL :: */
- /* Indicates that the face contains vertical glyph metrics. This */
- /* is only available in some formats, not all of them. */
+ /* The face contains vertical glyph metrics. This is only */
+ /* available in some formats, not all of them. */
/* */
/* FT_FACE_FLAG_KERNING :: */
- /* Indicates that the face contains kerning information. If set, */
- /* the kerning distance can be retrieved through the function */
- /* @FT_Get_Kerning. Otherwise the function always return the */
- /* vector (0,0). Note that FreeType doesn't handle kerning data */
- /* from the `GPOS' table (as present in some OpenType fonts). */
+ /* The face contains kerning information. If set, the kerning */
+ /* distance can be retrieved using the function @FT_Get_Kerning. */
+ /* Otherwise the function always return the vector (0,0). Note */
+ /* that FreeType doesn't handle kerning data from the SFNT `GPOS' */
+ /* table (as present in many OpenType fonts). */
/* */
/* FT_FACE_FLAG_FAST_GLYPHS :: */
/* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. */
/* */
/* FT_FACE_FLAG_MULTIPLE_MASTERS :: */
- /* Indicates that the font contains multiple masters and is capable */
- /* of interpolating between them. See the multiple-masters */
- /* specific API for details. */
+ /* The face contains multiple masters and is capable of */
+ /* interpolating between them. Supported formats are Adobe MM, */
+ /* TrueType GX, and OpenType variation fonts. */
+ /* */
+ /* See section @multiple_masters for API details. */
/* */
/* FT_FACE_FLAG_GLYPH_NAMES :: */
- /* Indicates that the font contains glyph names that can be */
- /* retrieved through @FT_Get_Glyph_Name. Note that some TrueType */
- /* fonts contain broken glyph name tables. Use the function */
+ /* The face contains glyph names, which can be retrieved using */
+ /* @FT_Get_Glyph_Name. Note that some TrueType fonts contain */
+ /* broken glyph name tables. Use the function */
/* @FT_Has_PS_Glyph_Names when needed. */
/* */
/* FT_FACE_FLAG_EXTERNAL_STREAM :: */
@@ -1134,31 +1190,31 @@
/* when @FT_Done_Face is called. Don't read or test this flag. */
/* */
/* FT_FACE_FLAG_HINTER :: */
- /* Set if the font driver has a hinting machine of its own. For */
- /* example, with TrueType fonts, it makes sense to use data from */
- /* the SFNT `gasp' table only if the native TrueType hinting engine */
- /* (with the bytecode interpreter) is available and active. */
+ /* The font driver has a hinting machine of its own. For example, */
+ /* with TrueType fonts, it makes sense to use data from the SFNT */
+ /* `gasp' table only if the native TrueType hinting engine (with */
+ /* the bytecode interpreter) is available and active. */
/* */
/* FT_FACE_FLAG_CID_KEYED :: */
- /* Set if the font is CID-keyed. In that case, the font is not */
- /* accessed by glyph indices but by CID values. For subsetted */
- /* CID-keyed fonts this has the consequence that not all index */
- /* values are a valid argument to FT_Load_Glyph. Only the CID */
- /* values for which corresponding glyphs in the subsetted font */
- /* exist make FT_Load_Glyph return successfully; in all other cases */
- /* you get an `FT_Err_Invalid_Argument' error. */
+ /* The face is CID-keyed. In that case, the face is not accessed */
+ /* by glyph indices but by CID values. For subsetted CID-keyed */
+ /* fonts this has the consequence that not all index values are a */
+ /* valid argument to @FT_Load_Glyph. Only the CID values for which */
+ /* corresponding glyphs in the subsetted font exist make */
+ /* `FT_Load_Glyph' return successfully; in all other cases you get */
+ /* an `FT_Err_Invalid_Argument' error. */
/* */
- /* Note that CID-keyed fonts that are in an SFNT wrapper don't */
- /* have this flag set since the glyphs are accessed in the normal */
- /* way (using contiguous indices); the `CID-ness' isn't visible to */
- /* the application. */
+ /* Note that CID-keyed fonts that are in an SFNT wrapper (this is, */
+ /* all OpenType/CFF fonts) don't have this flag set since the */
+ /* glyphs are accessed in the normal way (using contiguous */
+ /* indices); the `CID-ness' isn't visible to the application. */
/* */
/* FT_FACE_FLAG_TRICKY :: */
- /* Set if the font is `tricky', this is, it always needs the */
- /* font format's native hinting engine to get a reasonable result. */
- /* A typical example is the Chinese font `mingli.ttf' that uses */
- /* TrueType bytecode instructions to move and scale all of its */
- /* subglyphs. */
+ /* The face is `tricky', this is, it always needs the font format's */
+ /* native hinting engine to get a reasonable result. A typical */
+ /* example is the old Chinese font `mingli.ttf' (but not */
+ /* `mingliu.ttc') that uses TrueType bytecode instructions to move */
+ /* and scale all of its subglyphs. */
/* */
/* It is not possible to auto-hint such fonts using */
/* @FT_LOAD_FORCE_AUTOHINT; it will also ignore */
@@ -1170,8 +1226,15 @@
/* tricky fonts; they are hard-coded in file `ttobjs.c'. */
/* */
/* FT_FACE_FLAG_COLOR :: */
- /* Set if the font has color glyph tables. To access color glyphs */
- /* use @FT_LOAD_COLOR. */
+ /* [Since 2.5.1] The face has color glyph tables. To access color */
+ /* glyphs use @FT_LOAD_COLOR. */
+ /* */
+ /* FT_FACE_FLAG_VARIATION :: */
+ /* [Since 2.9] Set if the current face (or named instance) has been */
+ /* altered with @FT_Set_MM_Design_Coordinates, */
+ /* @FT_Set_Var_Design_Coordinates, or */
+ /* @FT_Set_Var_Blend_Coordinates. This flag is unset by a call to */
+ /* @FT_Set_Named_Instance. */
/* */
#define FT_FACE_FLAG_SCALABLE ( 1L << 0 )
#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 )
@@ -1188,6 +1251,7 @@
#define FT_FACE_FLAG_CID_KEYED ( 1L << 12 )
#define FT_FACE_FLAG_TRICKY ( 1L << 13 )
#define FT_FACE_FLAG_COLOR ( 1L << 14 )
+#define FT_FACE_FLAG_VARIATION ( 1L << 15 )
/*************************************************************************
@@ -1204,7 +1268,7 @@
*
*/
#define FT_HAS_HORIZONTAL( face ) \
- ( face->face_flags & FT_FACE_FLAG_HORIZONTAL )
+ ( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL )
/*************************************************************************
@@ -1218,7 +1282,7 @@
*
*/
#define FT_HAS_VERTICAL( face ) \
- ( face->face_flags & FT_FACE_FLAG_VERTICAL )
+ ( (face)->face_flags & FT_FACE_FLAG_VERTICAL )
/*************************************************************************
@@ -1232,7 +1296,7 @@
*
*/
#define FT_HAS_KERNING( face ) \
- ( face->face_flags & FT_FACE_FLAG_KERNING )
+ ( (face)->face_flags & FT_FACE_FLAG_KERNING )
/*************************************************************************
@@ -1243,11 +1307,11 @@
* @description:
* A macro that returns true whenever a face object contains a scalable
* font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF,
- * and PFR font formats.
+ * and PFR font formats).
*
*/
#define FT_IS_SCALABLE( face ) \
- ( face->face_flags & FT_FACE_FLAG_SCALABLE )
+ ( (face)->face_flags & FT_FACE_FLAG_SCALABLE )
/*************************************************************************
@@ -1266,7 +1330,7 @@
*
*/
#define FT_IS_SFNT( face ) \
- ( face->face_flags & FT_FACE_FLAG_SFNT )
+ ( (face)->face_flags & FT_FACE_FLAG_SFNT )
/*************************************************************************
@@ -1281,7 +1345,7 @@
*
*/
#define FT_IS_FIXED_WIDTH( face ) \
- ( face->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
+ ( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
/*************************************************************************
@@ -1296,7 +1360,7 @@
*
*/
#define FT_HAS_FIXED_SIZES( face ) \
- ( face->face_flags & FT_FACE_FLAG_FIXED_SIZES )
+ ( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES )
/*************************************************************************
@@ -1322,7 +1386,7 @@
*
*/
#define FT_HAS_GLYPH_NAMES( face ) \
- ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
+ ( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
/*************************************************************************
@@ -1337,7 +1401,47 @@
*
*/
#define FT_HAS_MULTIPLE_MASTERS( face ) \
- ( face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
+ ( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_IS_NAMED_INSTANCE( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object is a named instance
+ * of a GX or OpenType variation font.
+ *
+ * [Since 2.9] Changing the design coordinates with
+ * @FT_Set_Var_Design_Coordinates or @FT_Set_Var_Blend_Coordinates does
+ * not influence the return value of this macro (only
+ * @FT_Set_Named_Instance does that).
+ *
+ * @since:
+ * 2.7
+ *
+ */
+#define FT_IS_NAMED_INSTANCE( face ) \
+ ( (face)->face_index & 0x7FFF0000L )
+
+
+ /*************************************************************************
+ *
+ * @macro:
+ * FT_IS_VARIATION( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object has been altered
+ * by @FT_Set_MM_Design_Coordinates, @FT_Set_Var_Design_Coordinates, or
+ * @FT_Set_Var_Blend_Coordinates.
+ *
+ * @since:
+ * 2.9
+ *
+ */
+#define FT_IS_VARIATION( face ) \
+ ( (face)->face_flags & FT_FACE_FLAG_VARIATION )
/*************************************************************************
@@ -1355,7 +1459,7 @@
*
*/
#define FT_IS_CID_KEYED( face ) \
- ( face->face_flags & FT_FACE_FLAG_CID_KEYED )
+ ( (face)->face_flags & FT_FACE_FLAG_CID_KEYED )
/*************************************************************************
@@ -1369,7 +1473,7 @@
*
*/
#define FT_IS_TRICKY( face ) \
- ( face->face_flags & FT_FACE_FLAG_TRICKY )
+ ( (face)->face_flags & FT_FACE_FLAG_TRICKY )
/*************************************************************************
@@ -1381,9 +1485,12 @@
* A macro that returns true whenever a face object contains
* tables for color glyphs.
*
+ * @since:
+ * 2.5.1
+ *
*/
#define FT_HAS_COLOR( face ) \
- ( face->face_flags & FT_FACE_FLAG_COLOR )
+ ( (face)->face_flags & FT_FACE_FLAG_COLOR )
/*************************************************************************/
@@ -1392,15 +1499,15 @@
/* FT_STYLE_FLAG_XXX */
/* */
/* <Description> */
- /* A list of bit-flags used to indicate the style of a given face. */
- /* These are used in the `style_flags' field of @FT_FaceRec. */
+ /* A list of bit flags to indicate the style of a given face. These */
+ /* are used in the `style_flags' field of @FT_FaceRec. */
/* */
/* <Values> */
/* FT_STYLE_FLAG_ITALIC :: */
- /* Indicates that a given face style is italic or oblique. */
+ /* The face style is italic or oblique. */
/* */
/* FT_STYLE_FLAG_BOLD :: */
- /* Indicates that a given face is bold. */
+ /* The face is bold. */
/* */
/* <Note> */
/* The style information as provided by FreeType is very basic. More */
@@ -1441,43 +1548,93 @@
/* hence the term `ppem' (pixels per EM). It is also */
/* referred to as `nominal height'. */
/* */
- /* x_scale :: A 16.16 fractional scaling value used to convert */
+ /* x_scale :: A 16.16 fractional scaling value to convert */
/* horizontal metrics from font units to 26.6 */
/* fractional pixels. Only relevant for scalable */
/* font formats. */
/* */
- /* y_scale :: A 16.16 fractional scaling value used to convert */
+ /* y_scale :: A 16.16 fractional scaling value to convert */
/* vertical metrics from font units to 26.6 */
/* fractional pixels. Only relevant for scalable */
/* font formats. */
/* */
- /* ascender :: The ascender in 26.6 fractional pixels. See */
- /* @FT_FaceRec for the details. */
+ /* ascender :: The ascender in 26.6 fractional pixels, rounded up */
+ /* to an integer value. See @FT_FaceRec for the */
+ /* details. */
/* */
- /* descender :: The descender in 26.6 fractional pixels. See */
- /* @FT_FaceRec for the details. */
+ /* descender :: The descender in 26.6 fractional pixels, rounded */
+ /* down to an integer value. See @FT_FaceRec for the */
+ /* details. */
/* */
- /* height :: The height in 26.6 fractional pixels. See */
- /* @FT_FaceRec for the details. */
+ /* height :: The height in 26.6 fractional pixels, rounded to */
+ /* an integer value. See @FT_FaceRec for the */
+ /* details. */
/* */
/* max_advance :: The maximum advance width in 26.6 fractional */
- /* pixels. See @FT_FaceRec for the details. */
+ /* pixels, rounded to an integer value. See */
+ /* @FT_FaceRec for the details. */
/* */
/* <Note> */
/* The scaling values, if relevant, are determined first during a */
/* size changing operation. The remaining fields are then set by the */
/* driver. For scalable formats, they are usually set to scaled */
- /* values of the corresponding fields in @FT_FaceRec. */
+ /* values of the corresponding fields in @FT_FaceRec. Some values */
+ /* like ascender or descender are rounded for historical reasons; */
+ /* more precise values (for outline fonts) can be derived by scaling */
+ /* the corresponding @FT_FaceRec values manually, with code similar */
+ /* to the following. */
/* */
- /* Note that due to glyph hinting, these values might not be exact */
- /* for certain fonts. Thus they must be treated as unreliable */
- /* with an error margin of at least one pixel! */
+ /* { */
+ /* scaled_ascender = FT_MulFix( face->ascender, */
+ /* size_metrics->y_scale ); */
+ /* } */
+ /* */
+ /* Note that due to glyph hinting and the selected rendering mode */
+ /* these values are usually not exact; consequently, they must be */
+ /* treated as unreliable with an error margin of at least one pixel! */
/* */
/* Indeed, the only way to get the exact metrics is to render _all_ */
/* glyphs. As this would be a definite performance hit, it is up to */
/* client applications to perform such computations. */
/* */
- /* The FT_Size_Metrics structure is valid for bitmap fonts also. */
+ /* The `FT_Size_Metrics' structure is valid for bitmap fonts also. */
+ /* */
+ /* */
+ /* *TrueType* *fonts* *with* *native* *bytecode* *hinting* */
+ /* */
+ /* All applications that handle TrueType fonts with native hinting */
+ /* must be aware that TTFs expect different rounding of vertical font */
+ /* dimensions. The application has to cater for this, especially if */
+ /* it wants to rely on a TTF's vertical data (for example, to */
+ /* properly align box characters vertically). */
+ /* */
+ /* Only the application knows _in_ _advance_ that it is going to use */
+ /* native hinting for TTFs! FreeType, on the other hand, selects the */
+ /* hinting mode not at the time of creating an @FT_Size object but */
+ /* much later, namely while calling @FT_Load_Glyph. */
+ /* */
+ /* Here is some pseudo code that illustrates a possible solution. */
+ /* */
+ /* { */
+ /* font_format = FT_Get_Font_Format( face ); */
+ /* */
+ /* if ( !strcmp( font_format, "TrueType" ) && */
+ /* do_native_bytecode_hinting ) */
+ /* { */
+ /* ascender = ROUND( FT_MulFix( face->ascender, */
+ /* size_metrics->y_scale ) ); */
+ /* descender = ROUND( FT_MulFix( face->descender, */
+ /* size_metrics->y_scale ) ); */
+ /* } */
+ /* else */
+ /* { */
+ /* ascender = size_metrics->ascender; */
+ /* descender = size_metrics->descender; */
+ /* } */
+ /* */
+ /* height = size_metrics->height; */
+ /* max_advance = size_metrics->max_advance; */
+ /* } */
/* */
typedef struct FT_Size_Metrics_
{
@@ -1617,32 +1774,27 @@
/* contained in the glyph slot. Typically */
/* @FT_GLYPH_FORMAT_BITMAP, */
/* @FT_GLYPH_FORMAT_OUTLINE, or */
- /* @FT_GLYPH_FORMAT_COMPOSITE, but others are */
- /* possible. */
+ /* @FT_GLYPH_FORMAT_COMPOSITE, but other values */
+ /* are possible. */
/* */
- /* bitmap :: This field is used as a bitmap descriptor */
- /* when the slot format is */
- /* @FT_GLYPH_FORMAT_BITMAP. Note that the */
- /* address and content of the bitmap buffer can */
- /* change between calls of @FT_Load_Glyph and a */
- /* few other functions. */
+ /* bitmap :: This field is used as a bitmap descriptor. */
+ /* Note that the address and content of the */
+ /* bitmap buffer can change between calls of */
+ /* @FT_Load_Glyph and a few other functions. */
/* */
/* bitmap_left :: The bitmap's left bearing expressed in */
- /* integer pixels. Only valid if the format is */
- /* @FT_GLYPH_FORMAT_BITMAP, this is, if the */
- /* glyph slot contains a bitmap. */
+ /* integer pixels. */
/* */
/* bitmap_top :: The bitmap's top bearing expressed in integer */
- /* pixels. Remember that this is the distance */
- /* from the baseline to the top-most glyph */
- /* scanline, upwards y~coordinates being */
- /* *positive*. */
+ /* pixels. This is the distance from the */
+ /* baseline to the top-most glyph scanline, */
+ /* upwards y~coordinates being *positive*. */
/* */
/* outline :: The outline descriptor for the current glyph */
/* image if its format is */
/* @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is */
/* loaded, `outline' can be transformed, */
- /* distorted, embolded, etc. However, it must */
+ /* distorted, emboldened, etc. However, it must */
/* not be freed. */
/* */
/* num_subglyphs :: The number of subglyphs in a composite glyph. */
@@ -1658,15 +1810,13 @@
/* control_data :: Certain font drivers can also return the */
/* control data for a given glyph image (e.g. */
/* TrueType bytecode, Type~1 charstrings, etc.). */
- /* This field is a pointer to such data. */
+ /* This field is a pointer to such data; it is */
+ /* currently internal to FreeType. */
/* */
/* control_len :: This is the length in bytes of the control */
- /* data. */
+ /* data. Currently internal to FreeType. */
/* */
- /* other :: Really wicked formats can use this pointer to */
- /* present their own glyph image to client */
- /* applications. Note that the application */
- /* needs to know about the image format. */
+ /* other :: Reserved. */
/* */
/* lsb_delta :: The difference between hinted and unhinted */
/* left side bearing while auto-hinting is */
@@ -1680,10 +1830,12 @@
/* If @FT_Load_Glyph is called with default flags (see */
/* @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in */
/* its native format (e.g., an outline glyph for TrueType and Type~1 */
- /* formats). */
+ /* formats). [Since 2.9] The prospective bitmap metrics are */
+ /* calculated according to @FT_LOAD_TARGET_XXX and other flags even */
+ /* for the outline glyph, even if @FT_LOAD_RENDER is not set. */
/* */
/* This image can later be converted into a bitmap by calling */
- /* @FT_Render_Glyph. This function finds the current renderer for */
+ /* @FT_Render_Glyph. This function searches the current renderer for */
/* the native image's format, then invokes it. */
/* */
/* The renderer is in charge of transforming the native image through */
@@ -1695,34 +1847,65 @@
/* position (e.g., coordinates (0,0) on the baseline). Of course, */
/* `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP. */
/* */
- /* <Note> */
/* Here is a small pseudo code fragment that shows how to use */
- /* `lsb_delta' and `rsb_delta': */
+ /* `lsb_delta' and `rsb_delta' to do fractional positioning of */
+ /* glyphs: */
/* */
/* { */
- /* FT_Pos origin_x = 0; */
- /* FT_Pos prev_rsb_delta = 0; */
+ /* FT_GlyphSlot slot = face->glyph; */
+ /* FT_Pos origin_x = 0; */
/* */
/* */
/* for all glyphs do */
- /* <compute kern between current and previous glyph and add it to */
- /* `origin_x'> */
- /* */
/* <load glyph with `FT_Load_Glyph'> */
/* */
- /* if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 ) */
- /* origin_x -= 64; */
- /* else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 ) */
- /* origin_x += 64; */
- /* */
- /* prev_rsb_delta = face->glyph->rsb_delta; */
+ /* FT_Outline_Translate( slot->outline, origin_x & 63, 0 ); */
/* */
/* <save glyph image, or render glyph, or ...> */
/* */
- /* origin_x += face->glyph->advance.x; */
+ /* <compute kern between current and next glyph */
+ /* and add it to `origin_x'> */
+ /* */
+ /* origin_x += slot->advance.x; */
+ /* origin_x += slot->rsb_delta - slot->lsb_delta; */
/* endfor */
/* } */
/* */
+ /* Here is another small pseudo code fragment that shows how to use */
+ /* `lsb_delta' and `rsb_delta' to improve integer positioning of */
+ /* glyphs: */
+ /* */
+ /* { */
+ /* FT_GlyphSlot slot = face->glyph; */
+ /* FT_Pos origin_x = 0; */
+ /* FT_Pos prev_rsb_delta = 0; */
+ /* */
+ /* */
+ /* for all glyphs do */
+ /* <compute kern between current and previous glyph */
+ /* and add it to `origin_x'> */
+ /* */
+ /* <load glyph with `FT_Load_Glyph'> */
+ /* */
+ /* if ( prev_rsb_delta - slot->lsb_delta > 32 ) */
+ /* origin_x -= 64; */
+ /* else if ( prev_rsb_delta - slot->lsb_delta < -31 ) */
+ /* origin_x += 64; */
+ /* */
+ /* prev_rsb_delta = slot->rsb_delta; */
+ /* */
+ /* <save glyph image, or render glyph, or ...> */
+ /* */
+ /* origin_x += slot->advance.x; */
+ /* endfor */
+ /* } */
+ /* */
+ /* If you use strong auto-hinting, you *must* apply these delta */
+ /* values! Otherwise you will experience far too large inter-glyph */
+ /* spacing at small rendering sizes in most cases. Note that it */
+ /* doesn't harm to use the above code for other hinting modes also, */
+ /* since the delta values are zero then. */
+ /* */
typedef struct FT_GlyphSlotRec_
{
FT_Library library;
@@ -1787,7 +1970,8 @@
/* <Note> */
/* In case you want to provide your own memory allocating routines, */
/* use @FT_New_Library instead, followed by a call to */
- /* @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module). */
+ /* @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module) */
+ /* and @FT_Set_Default_Properties. */
/* */
/* See the documentation of @FT_Library and @FT_Face for */
/* multi-threading issues. */
@@ -1795,6 +1979,11 @@
/* If you need reference-counting (cf. @FT_Reference_Library), use */
/* @FT_New_Library and @FT_Done_Library. */
/* */
+ /* If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is */
+ /* set, this function reads the `FREETYPE_PROPERTIES' environment */
+ /* variable to control driver properties. See section @properties */
+ /* for more. */
+ /* */
FT_EXPORT( FT_Error )
FT_Init_FreeType( FT_Library *alibrary );
@@ -1824,7 +2013,7 @@
/* FT_OPEN_XXX */
/* */
/* <Description> */
- /* A list of bit-field constants used within the `flags' field of the */
+ /* A list of bit field constants used within the `flags' field of the */
/* @FT_Open_Args structure. */
/* */
/* <Values> */
@@ -1865,8 +2054,8 @@
/* FT_Parameter */
/* */
/* <Description> */
- /* A simple structure used to pass more or less generic parameters to */
- /* @FT_Open_Face. */
+ /* A simple structure to pass more or less generic parameters to */
+ /* @FT_Open_Face and @FT_Face_Properties. */
/* */
/* <Fields> */
/* tag :: A four-byte identification tag. */
@@ -1874,8 +2063,8 @@
/* data :: A pointer to the parameter data. */
/* */
/* <Note> */
- /* The ID and function of parameters are driver-specific. See the */
- /* various FT_PARAM_TAG_XXX flags for more information. */
+ /* The ID and function of parameters are driver-specific. See */
+ /* section @parameter_tags for more information. */
/* */
typedef struct FT_Parameter_
{
@@ -1891,9 +2080,9 @@
/* FT_Open_Args */
/* */
/* <Description> */
- /* A structure used to indicate how to open a new font file or */
- /* stream. A pointer to such a structure can be used as a parameter */
- /* for the functions @FT_Open_Face and @FT_Attach_Stream. */
+ /* A structure to indicate how to open a new font file or stream. A */
+ /* pointer to such a structure can be used as a parameter for the */
+ /* functions @FT_Open_Face and @FT_Attach_Stream. */
/* */
/* <Fields> */
/* flags :: A set of bit flags indicating how to use the */
@@ -1908,9 +2097,10 @@
/* stream :: A handle to a source stream object. */
/* */
/* driver :: This field is exclusively used by @FT_Open_Face; */
- /* it simply specifies the font driver to use to open */
- /* the face. If set to~0, FreeType tries to load the */
- /* face with each one of the drivers in its list. */
+ /* it simply specifies the font driver to use for */
+ /* opening the face. If set to NULL, FreeType tries */
+ /* to load the face with each one of the drivers in */
+ /* its list. */
/* */
/* num_params :: The number of extra parameters. */
/* */
@@ -1923,7 +2113,7 @@
/* */
/* If the @FT_OPEN_MEMORY bit is set, assume that this is a */
/* memory file of `memory_size' bytes, located at `memory_address'. */
- /* The data are are not copied, and the client is responsible for */
+ /* The data are not copied, and the client is responsible for */
/* releasing and destroying them _after_ the corresponding call to */
/* @FT_Done_Face. */
/* */
@@ -1940,7 +2130,7 @@
/* `num_params' and `params' is used. They are ignored otherwise. */
/* */
/* Ideally, both the `pathname' and `params' fields should be tagged */
- /* as `const'; this is missing for API backwards compatibility. In */
+ /* as `const'; this is missing for API backward compatibility. In */
/* other words, applications should treat them as read-only. */
/* */
typedef struct FT_Open_Args_
@@ -1963,7 +2153,7 @@
/* FT_New_Face */
/* */
/* <Description> */
- /* This function calls @FT_Open_Face to open a font by its pathname. */
+ /* Call @FT_Open_Face to open a font by its pathname. */
/* */
/* <InOut> */
/* library :: A handle to the library resource. */
@@ -1971,13 +2161,12 @@
/* <Input> */
/* pathname :: A path to the font file. */
/* */
- /* face_index :: The index of the face within the font. The first */
- /* face has index~0. */
+ /* face_index :: See @FT_Open_Face for a detailed description of this */
+ /* parameter. */
/* */
/* <Output> */
/* aface :: A handle to a new face object. If `face_index' is */
/* greater than or equal to zero, it must be non-NULL. */
- /* See @FT_Open_Face for more details. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
@@ -1999,8 +2188,8 @@
/* FT_New_Memory_Face */
/* */
/* <Description> */
- /* This function calls @FT_Open_Face to open a font that has been */
- /* loaded into memory. */
+ /* Call @FT_Open_Face to open a font that has been loaded into */
+ /* memory. */
/* */
/* <InOut> */
/* library :: A handle to the library resource. */
@@ -2010,13 +2199,12 @@
/* */
/* file_size :: The size of the memory chunk used by the font data. */
/* */
- /* face_index :: The index of the face within the font. The first */
- /* face has index~0. */
+ /* face_index :: See @FT_Open_Face for a detailed description of this */
+ /* parameter. */
/* */
/* <Output> */
/* aface :: A handle to a new face object. If `face_index' is */
/* greater than or equal to zero, it must be non-NULL. */
- /* See @FT_Open_Face for more details. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
@@ -2048,13 +2236,44 @@
/* args :: A pointer to an `FT_Open_Args' structure that must */
/* be filled by the caller. */
/* */
- /* face_index :: The index of the face within the font. The first */
- /* face has index~0. */
+ /* face_index :: This field holds two different values. Bits 0-15 */
+ /* are the index of the face in the font file (starting */
+ /* with value~0). Set it to~0 if there is only one */
+ /* face in the font file. */
+ /* */
+ /* [Since 2.6.1] Bits 16-30 are relevant to GX and */
+ /* OpenType variation fonts only, specifying the named */
+ /* instance index for the current face index (starting */
+ /* with value~1; value~0 makes FreeType ignore named */
+ /* instances). For non-variation fonts, bits 16-30 are */
+ /* ignored. Assuming that you want to access the third */
+ /* named instance in face~4, `face_index' should be set */
+ /* to 0x00030004. If you want to access face~4 without */
+ /* variation handling, simply set `face_index' to */
+ /* value~4. */
+ /* */
+ /* `FT_Open_Face' and its siblings can be used to */
+ /* quickly check whether the font format of a given */
+ /* font resource is supported by FreeType. In general, */
+ /* if the `face_index' argument is negative, the */
+ /* function's return value is~0 if the font format is */
+ /* recognized, or non-zero otherwise. The function */
+ /* allocates a more or less empty face handle in */
+ /* `*aface' (if `aface' isn't NULL); the only two */
+ /* useful fields in this special case are */
+ /* `face->num_faces' and `face->style_flags'. For any */
+ /* negative value of `face_index', `face->num_faces' */
+ /* gives the number of faces within the font file. For */
+ /* the negative value `-(N+1)' (with `N' a non-negative */
+ /* 16-bit value), bits 16-30 in `face->style_flags' */
+ /* give the number of named instances in face `N' if we */
+ /* have a variation font (or zero otherwise). After */
+ /* examination, the returned @FT_Face structure should */
+ /* be deallocated with a call to @FT_Done_Face. */
/* */
/* <Output> */
/* aface :: A handle to a new face object. If `face_index' is */
/* greater than or equal to zero, it must be non-NULL. */
- /* See note below. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
@@ -2064,16 +2283,6 @@
/* slot for the face object that can be accessed directly through */
/* `face->glyph'. */
/* */
- /* FT_Open_Face can be used to quickly check whether the font */
- /* format of a given font resource is supported by FreeType. If the */
- /* `face_index' field is negative, the function's return value is~0 */
- /* if the font format is recognized, or non-zero otherwise; */
- /* the function returns a more or less empty face handle in `*aface' */
- /* (if `aface' isn't NULL). The only useful field in this special */
- /* case is `face->num_faces' that gives the number of faces within */
- /* the font file. After examination, the returned @FT_Face structure */
- /* should be deallocated with a call to @FT_Done_Face. */
- /* */
/* Each new face object created with this function also owns a */
/* default @FT_Size object, accessible as `face->size'. */
/* */
@@ -2084,6 +2293,74 @@
/* See the discussion of reference counters in the description of */
/* @FT_Reference_Face. */
/* */
+ /* To loop over all faces, use code similar to the following snippet */
+ /* (omitting the error handling). */
+ /* */
+ /* { */
+ /* ... */
+ /* FT_Face face; */
+ /* FT_Long i, num_faces; */
+ /* */
+ /* */
+ /* error = FT_Open_Face( library, args, -1, &face ); */
+ /* if ( error ) { ... } */
+ /* */
+ /* num_faces = face->num_faces; */
+ /* FT_Done_Face( face ); */
+ /* */
+ /* for ( i = 0; i < num_faces; i++ ) */
+ /* { */
+ /* ... */
+ /* error = FT_Open_Face( library, args, i, &face ); */
+ /* ... */
+ /* FT_Done_Face( face ); */
+ /* ... */
+ /* } */
+ /* } */
+ /* */
+ /* To loop over all valid values for `face_index', use something */
+ /* similar to the following snippet, again without error handling. */
+ /* The code accesses all faces immediately (thus only a single call */
+ /* of `FT_Open_Face' within the do-loop), with and without named */
+ /* instances. */
+ /* */
+ /* { */
+ /* ... */
+ /* FT_Face face; */
+ /* */
+ /* FT_Long num_faces = 0; */
+ /* FT_Long num_instances = 0; */
+ /* */
+ /* FT_Long face_idx = 0; */
+ /* FT_Long instance_idx = 0; */
+ /* */
+ /* */
+ /* do */
+ /* { */
+ /* FT_Long id = ( instance_idx << 16 ) + face_idx; */
+ /* */
+ /* */
+ /* error = FT_Open_Face( library, args, id, &face ); */
+ /* if ( error ) { ... } */
+ /* */
+ /* num_faces = face->num_faces; */
+ /* num_instances = face->style_flags >> 16; */
+ /* */
+ /* ... */
+ /* */
+ /* FT_Done_Face( face ); */
+ /* */
+ /* if ( instance_idx < num_instances ) */
+ /* instance_idx++; */
+ /* else */
+ /* { */
+ /* face_idx++; */
+ /* instance_idx = 0; */
+ /* } */
+ /* */
+ /* } while ( face_idx < num_faces ) */
+ /* } */
+ /* */
FT_EXPORT( FT_Error )
FT_Open_Face( FT_Library library,
const FT_Open_Args* args,
@@ -2097,7 +2374,7 @@
/* FT_Attach_File */
/* */
/* <Description> */
- /* This function calls @FT_Attach_Stream to attach a file. */
+ /* Call @FT_Attach_Stream to attach a file. */
/* */
/* <InOut> */
/* face :: The target face object. */
@@ -2141,7 +2418,7 @@
/* */
/* Client applications are expected to know what they are doing */
/* when invoking this function. Most drivers simply do not implement */
- /* file attachments. */
+ /* file or stream attachments. */
/* */
FT_EXPORT( FT_Error )
FT_Attach_Stream( FT_Face face,
@@ -2204,7 +2481,10 @@
/* FT_Select_Size */
/* */
/* <Description> */
- /* Select a bitmap strike. */
+ /* Select a bitmap strike. To be more precise, this function sets */
+ /* the scaling factors of the active @FT_Size object in a face so */
+ /* that bitmaps from this particular strike are taken by */
+ /* @FT_Load_Glyph and friends. */
/* */
/* <InOut> */
/* face :: A handle to a target face object. */
@@ -2216,6 +2496,20 @@
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
+ /* <Note> */
+ /* For bitmaps embedded in outline fonts it is common that only a */
+ /* subset of the available glyphs at a given ppem value is available. */
+ /* FreeType silently uses outlines if there is no bitmap for a given */
+ /* glyph index. */
+ /* */
+ /* For GX and OpenType variation fonts, a bitmap strike makes sense */
+ /* only if the default instance is active (this is, no glyph */
+ /* variation takes place); otherwise, FreeType simply ignores bitmap */
+ /* strikes. The same is true for all named instances that are */
+ /* different from the default instance. */
+ /* */
+ /* Don't use this function if you are using the FreeType cache API. */
+ /* */
FT_EXPORT( FT_Error )
FT_Select_Size( FT_Face face,
FT_Int strike_index );
@@ -2227,17 +2521,26 @@
/* FT_Size_Request_Type */
/* */
/* <Description> */
- /* An enumeration type that lists the supported size request types. */
+ /* An enumeration type that lists the supported size request types, */
+ /* i.e., what input size (in font units) maps to the requested output */
+ /* size (in pixels, as computed from the arguments of */
+ /* @FT_Size_Request). */
/* */
/* <Values> */
/* FT_SIZE_REQUEST_TYPE_NOMINAL :: */
/* The nominal size. The `units_per_EM' field of @FT_FaceRec is */
/* used to determine both scaling values. */
/* */
+ /* This is the standard scaling found in most applications. In */
+ /* particular, use this size request type for TrueType fonts if */
+ /* they provide optical scaling or something similar. Note, */
+ /* however, that `units_per_EM' is a rather abstract value which */
+ /* bears no relation to the actual size of the glyphs in a font. */
+ /* */
/* FT_SIZE_REQUEST_TYPE_REAL_DIM :: */
- /* The real dimension. The sum of the the `ascender' and (minus */
- /* of) the `descender' fields of @FT_FaceRec are used to determine */
- /* both scaling values. */
+ /* The real dimension. The sum of the `ascender' and (minus of) */
+ /* the `descender' fields of @FT_FaceRec is used to determine both */
+ /* scaling values. */
/* */
/* FT_SIZE_REQUEST_TYPE_BBOX :: */
/* The font bounding box. The width and height of the `bbox' field */
@@ -2282,27 +2585,36 @@
/* FT_Size_RequestRec */
/* */
/* <Description> */
- /* A structure used to model a size request. */
+ /* A structure to model a size request. */
/* */
/* <Fields> */
/* type :: See @FT_Size_Request_Type. */
/* */
- /* width :: The desired width. */
+ /* width :: The desired width, given as a 26.6 fractional */
+ /* point value (with 72pt = 1in). */
/* */
- /* height :: The desired height. */
+ /* height :: The desired height, given as a 26.6 fractional */
+ /* point value (with 72pt = 1in). */
/* */
- /* horiResolution :: The horizontal resolution. If set to zero, */
- /* `width' is treated as a 26.6 fractional pixel */
- /* value. */
+ /* horiResolution :: The horizontal resolution (dpi, i.e., pixels per */
+ /* inch). If set to zero, `width' is treated as a */
+ /* 26.6 fractional *pixel* value, which gets */
+ /* internally rounded to an integer. */
/* */
- /* vertResolution :: The vertical resolution. If set to zero, */
- /* `height' is treated as a 26.6 fractional pixel */
- /* value. */
+ /* vertResolution :: The vertical resolution (dpi, i.e., pixels per */
+ /* inch). If set to zero, `height' is treated as a */
+ /* 26.6 fractional *pixel* value, which gets */
+ /* internally rounded to an integer. */
/* */
/* <Note> */
- /* If `width' is zero, then the horizontal scaling value is set equal */
+ /* If `width' is zero, the horizontal scaling value is set equal */
/* to the vertical scaling value, and vice versa. */
/* */
+ /* If `type' is FT_SIZE_REQUEST_TYPE_SCALES, `width' and `height' are */
+ /* interpreted directly as 16.16 fractional scaling values, without */
+ /* any further modification, and both `horiResolution' and */
+ /* `vertResolution' are ignored. */
+ /* */
typedef struct FT_Size_RequestRec_
{
FT_Size_Request_Type type;
@@ -2352,7 +2664,11 @@
/* size is dependent entirely on how the size is defined in the */
/* source face. The font designer chooses the final size of each */
/* glyph relative to this size. For more information refer to */
- /* `http://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html' */
+ /* `https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'. */
+ /* */
+ /* Contrary to @FT_Set_Char_Size, this function doesn't have special */
+ /* code to normalize zero-valued widths, heights, or resolutions */
+ /* (which lead to errors in most cases). */
/* */
/* Don't use this function if you are using the FreeType cache API. */
/* */
@@ -2367,8 +2683,7 @@
/* FT_Set_Char_Size */
/* */
/* <Description> */
- /* This function calls @FT_Request_Size to request the nominal size */
- /* (in points). */
+ /* Call @FT_Request_Size to request the nominal size (in points). */
/* */
/* <InOut> */
/* face :: A handle to a target face object. */
@@ -2386,6 +2701,10 @@
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
+ /* While this function allows fractional points as input values, the */
+ /* resulting ppem value for the given resolution is always rounded to */
+ /* the nearest integer. */
+ /* */
/* If either the character width or height is zero, it is set equal */
/* to the other value. */
/* */
@@ -2411,8 +2730,7 @@
/* FT_Set_Pixel_Sizes */
/* */
/* <Description> */
- /* This function calls @FT_Request_Size to request the nominal size */
- /* (in pixels). */
+ /* Call @FT_Request_Size to request the nominal size (in pixels). */
/* */
/* <InOut> */
/* face :: A handle to the target face object. */
@@ -2426,8 +2744,8 @@
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
- /* You should not rely on the resulting glyphs matching, or being */
- /* constrained, to this pixel size. Refer to @FT_Request_Size to */
+ /* You should not rely on the resulting glyphs matching or being */
+ /* constrained to this pixel size. Refer to @FT_Request_Size to */
/* understand how requested sizes relate to actual sizes. */
/* */
/* Don't use this function if you are using the FreeType cache API. */
@@ -2444,8 +2762,7 @@
/* FT_Load_Glyph */
/* */
/* <Description> */
- /* A function used to load a single glyph into the glyph slot of a */
- /* face object. */
+ /* Load a glyph into the glyph slot of a face object. */
/* */
/* <InOut> */
/* face :: A handle to the target face object where the glyph */
@@ -2474,6 +2791,10 @@
/* don't have a corresponding glyph in the font). See the discussion */
/* of the @FT_FACE_FLAG_CID_KEYED flag for more details. */
/* */
+ /* If you receive `FT_Err_Glyph_Too_Big', try getting the glyph */
+ /* outline at EM size, then scale it manually and fill it as a */
+ /* graphics operation. */
+ /* */
FT_EXPORT( FT_Error )
FT_Load_Glyph( FT_Face face,
FT_UInt glyph_index,
@@ -2486,8 +2807,8 @@
/* FT_Load_Char */
/* */
/* <Description> */
- /* A function used to load a single glyph into the glyph slot of a */
- /* face object, according to its character code. */
+ /* Load a glyph into the glyph slot of a face object, accessed by its */
+ /* character code. */
/* */
/* <InOut> */
/* face :: A handle to a target face object where the glyph */
@@ -2509,6 +2830,14 @@
/* <Note> */
/* This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph. */
/* */
+ /* Many fonts contain glyphs that can't be loaded by this function */
+ /* since its glyph indices are not listed in any of the font's */
+ /* charmaps. */
+ /* */
+ /* If no active cmap is set up (i.e., `face->charmap' is zero), the */
+ /* call to @FT_Get_Char_Index is omitted, and the function behaves */
+ /* identically to @FT_Load_Glyph. */
+ /* */
FT_EXPORT( FT_Error )
FT_Load_Char( FT_Face face,
FT_ULong char_code,
@@ -2521,8 +2850,8 @@
* FT_LOAD_XXX
*
* @description:
- * A list of bit-field constants used with @FT_Load_Glyph to indicate
- * what kind of operations to perform during glyph loading.
+ * A list of bit field constants for @FT_Load_Glyph to indicate what
+ * kind of operations to perform during glyph loading.
*
* @values:
* FT_LOAD_DEFAULT ::
@@ -2534,13 +2863,13 @@
* The bitmap data can be accessed from the glyph slot (see note
* below).
*
- * 2. If no embedded bitmap is searched or found, FreeType looks for a
- * scalable outline. If one is found, it is loaded from the font
- * file, scaled to device pixels, then `hinted' to the pixel grid
- * in order to optimize it. The outline data can be accessed from
- * the glyph slot (see note below).
+ * 2. If no embedded bitmap is searched for or found, FreeType looks
+ * for a scalable outline. If one is found, it is loaded from
+ * the font file, scaled to device pixels, then `hinted' to the
+ * pixel grid in order to optimize it. The outline data can be
+ * accessed from the glyph slot (see note below).
*
- * Note that by default, the glyph loader doesn't render outlines into
+ * Note that by default the glyph loader doesn't render outlines into
* bitmaps. The following flags are used to modify this default
* behaviour to more specific and useful cases.
*
@@ -2587,13 +2916,13 @@
* various font formats.
*
* FT_LOAD_FORCE_AUTOHINT ::
- * Indicates that the auto-hinter is preferred over the font's native
- * hinter. See also the note below.
+ * Prefer the auto-hinter over the font's native hinter. See also
+ * the note below.
*
* FT_LOAD_PEDANTIC ::
- * Indicates that the font driver should perform pedantic verifications
- * during glyph loading. This is mostly used to detect broken glyphs
- * in fonts. By default, FreeType tries to handle broken fonts also.
+ * Make the font driver perform pedantic verifications during glyph
+ * loading. This is mostly used to detect broken glyphs in fonts.
+ * By default, FreeType tries to handle broken fonts also.
*
* In particular, errors from the TrueType bytecode engine are not
* passed to the application if this flag is not set; this might
@@ -2601,17 +2930,16 @@
* bytecode is buggy.
*
* FT_LOAD_NO_RECURSE ::
- * Indicate that the font driver should not load composite glyphs
- * recursively. Instead, it should set the `num_subglyph' and
- * `subglyphs' values of the glyph slot accordingly, and set
- * `glyph->format' to @FT_GLYPH_FORMAT_COMPOSITE. The description of
- * subglyphs can then be accessed with @FT_Get_SubGlyph_Info.
+ * Don't load composite glyphs recursively. Instead, the font
+ * driver should set the `num_subglyph' and `subglyphs' values of
+ * the glyph slot accordingly, and set `glyph->format' to
+ * @FT_GLYPH_FORMAT_COMPOSITE. The description of subglyphs can
+ * then be accessed with @FT_Get_SubGlyph_Info.
*
* This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM.
*
* FT_LOAD_IGNORE_TRANSFORM ::
- * Indicates that the transform matrix set by @FT_Set_Transform should
- * be ignored.
+ * Ignore the transform matrix set by @FT_Set_Transform.
*
* FT_LOAD_MONOCHROME ::
* This flag is used with @FT_LOAD_RENDER to indicate that you want to
@@ -2623,21 +2951,37 @@
* monochrome-optimized hinting algorithm is used.
*
* FT_LOAD_LINEAR_DESIGN ::
- * Indicates that the `linearHoriAdvance' and `linearVertAdvance'
- * fields of @FT_GlyphSlotRec should be kept in font units. See
- * @FT_GlyphSlotRec for details.
+ * Keep `linearHoriAdvance' and `linearVertAdvance' fields of
+ * @FT_GlyphSlotRec in font units. See @FT_GlyphSlotRec for
+ * details.
*
* FT_LOAD_NO_AUTOHINT ::
- * Disable auto-hinter. See also the note below.
+ * Disable the auto-hinter. See also the note below.
*
* FT_LOAD_COLOR ::
- * This flag is used to request loading of color embedded-bitmap
- * images. The resulting color bitmaps, if available, will have the
- * @FT_PIXEL_MODE_BGRA format. When the flag is not used and color
- * bitmaps are found, they will be converted to 256-level gray
- * bitmaps transparently. Those bitmaps will be in the
+ * [Since 2.5] Load embedded color bitmap images. The resulting color
+ * bitmaps, if available, will have the @FT_PIXEL_MODE_BGRA format.
+ * If the flag is not set and color bitmaps are found, they are
+ * converted to 256-level gray bitmaps transparently, using the
* @FT_PIXEL_MODE_GRAY format.
*
+ * FT_LOAD_COMPUTE_METRICS ::
+ * [Since 2.6.1] Compute glyph metrics from the glyph data, without
+ * the use of bundled metrics tables (for example, the `hdmx' table in
+ * TrueType fonts). This flag is mainly used by font validating or
+ * font editing applications, which need to ignore, verify, or edit
+ * those tables.
+ *
+ * Currently, this flag is only implemented for TrueType fonts.
+ *
+ * FT_LOAD_BITMAP_METRICS_ONLY ::
+ * [Since 2.7.1] Request loading of the metrics and bitmap image
+ * information of a (possibly embedded) bitmap glyph without
+ * allocating or copying the bitmap image data itself. No effect if
+ * the target glyph is not a bitmap image.
+ *
+ * This flag unsets @FT_LOAD_RENDER.
+ *
* FT_LOAD_CROP_BITMAP ::
* Ignored. Deprecated.
*
@@ -2681,12 +3025,14 @@
#define FT_LOAD_MONOCHROME ( 1L << 12 )
#define FT_LOAD_LINEAR_DESIGN ( 1L << 13 )
#define FT_LOAD_NO_AUTOHINT ( 1L << 15 )
- /* Bits 16..19 are used by `FT_LOAD_TARGET_' */
+ /* Bits 16-19 are used by `FT_LOAD_TARGET_' */
#define FT_LOAD_COLOR ( 1L << 20 )
+#define FT_LOAD_COMPUTE_METRICS ( 1L << 21 )
+#define FT_LOAD_BITMAP_METRICS_ONLY ( 1L << 22 )
/* */
- /* used internally only by certain font drivers! */
+ /* used internally only by certain font drivers */
#define FT_LOAD_ADVANCE_ONLY ( 1L << 8 )
#define FT_LOAD_SBITS_ONLY ( 1L << 14 )
@@ -2697,29 +3043,40 @@
* FT_LOAD_TARGET_XXX
*
* @description:
- * A list of values that are used to select a specific hinting algorithm
- * to use by the hinter. You should OR one of these values to your
- * `load_flags' when calling @FT_Load_Glyph.
+ * A list of values to select a specific hinting algorithm for the
+ * hinter. You should OR one of these values to your `load_flags'
+ * when calling @FT_Load_Glyph.
*
- * Note that font's native hinters may ignore the hinting algorithm you
- * have specified (e.g., the TrueType bytecode interpreter). You can set
- * @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used.
- *
- * Also note that @FT_LOAD_TARGET_LIGHT is an exception, in that it
- * always implies @FT_LOAD_FORCE_AUTOHINT.
+ * Note that a font's native hinters may ignore the hinting algorithm
+ * you have specified (e.g., the TrueType bytecode interpreter). You
+ * can set @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is
+ * used.
*
* @values:
* FT_LOAD_TARGET_NORMAL ::
- * This corresponds to the default hinting algorithm, optimized for
- * standard gray-level rendering. For monochrome output, use
- * @FT_LOAD_TARGET_MONO instead.
+ * The default hinting algorithm, optimized for standard gray-level
+ * rendering. For monochrome output, use @FT_LOAD_TARGET_MONO
+ * instead.
*
* FT_LOAD_TARGET_LIGHT ::
- * A lighter hinting algorithm for non-monochrome modes. Many
- * generated glyphs are more fuzzy but better resemble its original
- * shape. A bit like rendering on Mac OS~X.
+ * A lighter hinting algorithm for gray-level modes. Many generated
+ * glyphs are fuzzier but better resemble their original shape. This
+ * is achieved by snapping glyphs to the pixel grid only vertically
+ * (Y-axis), as is done by FreeType's new CFF engine or Microsoft's
+ * ClearType font renderer. This preserves inter-glyph spacing in
+ * horizontal text. The snapping is done either by the native font
+ * driver, if the driver itself and the font support it, or by the
+ * auto-hinter.
*
- * As a special exception, this target implies @FT_LOAD_FORCE_AUTOHINT.
+ * Advance widths are rounded to integer values; however, using the
+ * `lsb_delta' and `rsb_delta' fields of @FT_GlyphSlotRec, it is
+ * possible to get fractional advance widths for subpixel positioning
+ * (which is recommended to use).
+ *
+ * If configuration option AF_CONFIG_OPTION_TT_SIZE_METRICS is active,
+ * TrueType-like metrics are used to make this mode behave similarly
+ * as in unpatched FreeType versions between 2.4.6 and 2.7.1
+ * (inclusive).
*
* FT_LOAD_TARGET_MONO ::
* Strong hinting algorithm that should only be used for monochrome
@@ -2727,7 +3084,7 @@
* in non-monochrome modes.
*
* FT_LOAD_TARGET_LCD ::
- * A variant of @FT_LOAD_TARGET_NORMAL optimized for horizontally
+ * A variant of @FT_LOAD_TARGET_LIGHT optimized for horizontally
* decimated LCD displays.
*
* FT_LOAD_TARGET_LCD_V ::
@@ -2740,7 +3097,7 @@
*
* If @FT_LOAD_RENDER is also set, the glyph is rendered in the
* corresponding mode (i.e., the mode that matches the used algorithm
- * best). An exeption is FT_LOAD_TARGET_MONO since it implies
+ * best). An exception is FT_LOAD_TARGET_MONO since it implies
* @FT_LOAD_MONOCHROME.
*
* You can use a hinting algorithm that doesn't correspond to the same
@@ -2755,6 +3112,13 @@
* FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD );
* }
*
+ * In general, you should stick with one rendering mode. For example,
+ * switching between @FT_LOAD_TARGET_NORMAL and @FT_LOAD_TARGET_MONO
+ * enforces a lot of recomputation for TrueType fonts, which is slow.
+ * Another reason is caching: Selecting a different mode usually causes
+ * changes in both the outlines and the rasterized bitmaps; it is thus
+ * necessary to empty the cache after a mode switch to avoid false hits.
+ *
*/
#define FT_LOAD_TARGET_( x ) ( (FT_Int32)( (x) & 15 ) << 16 )
@@ -2784,18 +3148,17 @@
/* FT_Set_Transform */
/* */
/* <Description> */
- /* A function used to set the transformation that is applied to glyph */
- /* images when they are loaded into a glyph slot through */
- /* @FT_Load_Glyph. */
+ /* Set the transformation that is applied to glyph images when they */
+ /* are loaded into a glyph slot through @FT_Load_Glyph. */
/* */
/* <InOut> */
/* face :: A handle to the source face object. */
/* */
/* <Input> */
- /* matrix :: A pointer to the transformation's 2x2 matrix. Use~0 for */
- /* the identity matrix. */
- /* delta :: A pointer to the translation vector. Use~0 for the null */
- /* vector. */
+ /* matrix :: A pointer to the transformation's 2x2 matrix. Use NULL */
+ /* for the identity matrix. */
+ /* delta :: A pointer to the translation vector. Use NULL for the */
+ /* null vector. */
/* */
/* <Note> */
/* The transformation is only applied to scalable image formats after */
@@ -2818,20 +3181,22 @@
/* FT_Render_Mode */
/* */
/* <Description> */
- /* An enumeration type that lists the render modes supported by */
- /* FreeType~2. Each mode corresponds to a specific type of scanline */
- /* conversion performed on the outline. */
+ /* Render modes supported by FreeType~2. Each mode corresponds to a */
+ /* specific type of scanline conversion performed on the outline. */
/* */
/* For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode' */
/* field in the @FT_GlyphSlotRec structure gives the format of the */
/* returned bitmap. */
/* */
- /* All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity. */
+ /* All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity, */
+ /* indicating pixel coverage. Use linear alpha blending and gamma */
+ /* correction to correctly render non-monochrome glyph bitmaps onto a */
+ /* surface; see @FT_Render_Glyph. */
/* */
/* <Values> */
/* FT_RENDER_MODE_NORMAL :: */
- /* This is the default render mode; it corresponds to 8-bit */
- /* anti-aliased bitmaps. */
+ /* Default render mode; it corresponds to 8-bit anti-aliased */
+ /* bitmaps. */
/* */
/* FT_RENDER_MODE_LIGHT :: */
/* This is equivalent to @FT_RENDER_MODE_NORMAL. It is only */
@@ -2844,23 +3209,25 @@
/* opacity). */
/* */
/* FT_RENDER_MODE_LCD :: */
- /* This mode corresponds to horizontal RGB and BGR sub-pixel */
+ /* This mode corresponds to horizontal RGB and BGR subpixel */
/* displays like LCD screens. It produces 8-bit bitmaps that are */
/* 3~times the width of the original glyph outline in pixels, and */
/* which use the @FT_PIXEL_MODE_LCD mode. */
/* */
/* FT_RENDER_MODE_LCD_V :: */
- /* This mode corresponds to vertical RGB and BGR sub-pixel displays */
+ /* This mode corresponds to vertical RGB and BGR subpixel displays */
/* (like PDA screens, rotated LCD displays, etc.). It produces */
/* 8-bit bitmaps that are 3~times the height of the original */
/* glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode. */
/* */
/* <Note> */
- /* The LCD-optimized glyph bitmaps produced by FT_Render_Glyph can be */
- /* filtered to reduce color-fringes by using @FT_Library_SetLcdFilter */
- /* (not active in the default builds). It is up to the caller to */
- /* either call @FT_Library_SetLcdFilter (if available) or do the */
- /* filtering itself. */
+ /* Should you define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your */
+ /* `ftoption.h', which enables patented ClearType-style rendering, */
+ /* the LCD-optimized glyph bitmaps should be filtered to reduce color */
+ /* fringes inherent to this technology. You can either set up LCD */
+ /* filtering with @FT_Library_SetLcdFilter or @FT_Face_Properties, */
+ /* or do the filtering yourself. The default FreeType LCD rendering */
+ /* technology does not require filtering. */
/* */
/* The selected render mode only affects vector glyphs of a font. */
/* Embedded bitmaps often have a different pixel mode like */
@@ -2901,16 +3268,93 @@
/* convert. */
/* */
/* <Input> */
- /* render_mode :: This is the render mode used to render the glyph */
- /* image into a bitmap. See @FT_Render_Mode for a */
- /* list of possible values. */
+ /* render_mode :: The render mode used to render the glyph image into */
+ /* a bitmap. See @FT_Render_Mode for a list of */
+ /* possible values. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
/* <Note> */
/* To get meaningful results, font scaling values must be set with */
- /* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */
+ /* functions like @FT_Set_Char_Size before calling `FT_Render_Glyph'. */
+ /* */
+ /* When FreeType outputs a bitmap of a glyph, it really outputs an */
+ /* alpha coverage map. If a pixel is completely covered by a */
+ /* filled-in outline, the bitmap contains 0xFF at that pixel, meaning */
+ /* that 0xFF/0xFF fraction of that pixel is covered, meaning the */
+ /* pixel is 100% black (or 0% bright). If a pixel is only 50% */
+ /* covered (value 0x80), the pixel is made 50% black (50% bright or a */
+ /* middle shade of grey). 0% covered means 0% black (100% bright or */
+ /* white). */
+ /* */
+ /* On high-DPI screens like on smartphones and tablets, the pixels */
+ /* are so small that their chance of being completely covered and */
+ /* therefore completely black are fairly good. On the low-DPI */
+ /* screens, however, the situation is different. The pixels are too */
+ /* large for most of the details of a glyph and shades of gray are */
+ /* the norm rather than the exception. */
+ /* */
+ /* This is relevant because all our screens have a second problem: */
+ /* they are not linear. 1~+~1 is not~2. Twice the value does not */
+ /* result in twice the brightness. When a pixel is only 50% covered, */
+ /* the coverage map says 50% black, and this translates to a pixel */
+ /* value of 128 when you use 8~bits per channel (0-255). However, */
+ /* this does not translate to 50% brightness for that pixel on our */
+ /* sRGB and gamma~2.2 screens. Due to their non-linearity, they */
+ /* dwell longer in the darks and only a pixel value of about 186 */
+ /* results in 50% brightness -- 128 ends up too dark on both bright */
+ /* and dark backgrounds. The net result is that dark text looks */
+ /* burnt-out, pixely and blotchy on bright background, bright text */
+ /* too frail on dark backgrounds, and colored text on colored */
+ /* background (for example, red on green) seems to have dark halos or */
+ /* `dirt' around it. The situation is especially ugly for diagonal */
+ /* stems like in `w' glyph shapes where the quality of FreeType's */
+ /* anti-aliasing depends on the correct display of grays. On */
+ /* high-DPI screens where smaller, fully black pixels reign supreme, */
+ /* this doesn't matter, but on our low-DPI screens with all the gray */
+ /* shades, it does. 0% and 100% brightness are the same things in */
+ /* linear and non-linear space, just all the shades in-between */
+ /* aren't. */
+ /* */
+ /* The blending function for placing text over a background is */
+ /* */
+ /* { */
+ /* dst = alpha * src + (1 - alpha) * dst , */
+ /* } */
+ /* */
+ /* which is known as the OVER operator. */
+ /* */
+ /* To correctly composite an antialiased pixel of a glyph onto a */
+ /* surface, */
+ /* */
+ /* 1. take the foreground and background colors (e.g., in sRGB space) */
+ /* and apply gamma to get them in a linear space, */
+ /* */
+ /* 2. use OVER to blend the two linear colors using the glyph pixel */
+ /* as the alpha value (remember, the glyph bitmap is an alpha */
+ /* coverage bitmap), and */
+ /* */
+ /* 3. apply inverse gamma to the blended pixel and write it back to */
+ /* the image. */
+ /* */
+ /* Internal testing at Adobe found that a target inverse gamma of~1.8 */
+ /* for step~3 gives good results across a wide range of displays with */
+ /* an sRGB gamma curve or a similar one. */
+ /* */
+ /* This process can cost performance. There is an approximation that */
+ /* does not need to know about the background color; see */
+ /* https://bel.fi/alankila/lcd/ and */
+ /* https://bel.fi/alankila/lcd/alpcor.html for details. */
+ /* */
+ /* *ATTENTION*: Linear blending is even more important when dealing */
+ /* with subpixel-rendered glyphs to prevent color-fringing! A */
+ /* subpixel-rendered glyph must first be filtered with a filter that */
+ /* gives equal weight to the three color primaries and does not */
+ /* exceed a sum of 0x100, see section @lcd_filtering. Then the */
+ /* only difference to gray linear blending is that subpixel-rendered */
+ /* linear blending is done 3~times per pixel: red foreground subpixel */
+ /* to red background subpixel and so on for green and blue. */
/* */
FT_EXPORT( FT_Error )
FT_Render_Glyph( FT_GlyphSlot slot,
@@ -2923,22 +3367,31 @@
/* FT_Kerning_Mode */
/* */
/* <Description> */
- /* An enumeration used to specify which kerning values to return in */
+ /* An enumeration to specify the format of kerning values returned by */
/* @FT_Get_Kerning. */
/* */
/* <Values> */
- /* FT_KERNING_DEFAULT :: Return scaled and grid-fitted kerning */
- /* distances (value is~0). */
+ /* FT_KERNING_DEFAULT :: Return grid-fitted kerning distances in */
+ /* 26.6 fractional pixels. */
/* */
- /* FT_KERNING_UNFITTED :: Return scaled but un-grid-fitted kerning */
- /* distances. */
+ /* FT_KERNING_UNFITTED :: Return un-grid-fitted kerning distances in */
+ /* 26.6 fractional pixels. */
/* */
/* FT_KERNING_UNSCALED :: Return the kerning vector in original font */
/* units. */
/* */
+ /* <Note> */
+ /* FT_KERNING_DEFAULT returns full pixel values; it also makes */
+ /* FreeType heuristically scale down kerning distances at small ppem */
+ /* values so that they don't become too big. */
+ /* */
+ /* Both FT_KERNING_DEFAULT and FT_KERNING_UNFITTED use the current */
+ /* horizontal scaling factor (as set e.g. with @FT_Set_Char_Size) to */
+ /* convert font units to pixels. */
+ /* */
typedef enum FT_Kerning_Mode_
{
- FT_KERNING_DEFAULT = 0,
+ FT_KERNING_DEFAULT = 0,
FT_KERNING_UNFITTED,
FT_KERNING_UNSCALED
@@ -2958,7 +3411,7 @@
/* FT_Get_Kerning */
/* */
/* <Description> */
- /* Return the kerning vector between two glyphs of a same face. */
+ /* Return the kerning vector between two glyphs of the same face. */
/* */
/* <Input> */
/* face :: A handle to a source face object. */
@@ -2972,9 +3425,10 @@
/* kerning vector. */
/* */
/* <Output> */
- /* akerning :: The kerning vector. This is either in font units */
- /* or in pixels (26.6 format) for scalable formats, */
- /* and in pixels for fixed-sizes formats. */
+ /* akerning :: The kerning vector. This is either in font units, */
+ /* fractional pixels (26.6 format), or pixels for */
+ /* scalable formats, and in pixels for fixed-sizes */
+ /* formats. */
/* */
/* <Return> */
/* FreeType error code. 0~means success. */
@@ -2985,6 +3439,10 @@
/* kernings, are out of the scope of this API function -- they can be */
/* implemented through format-specific interfaces. */
/* */
+ /* Kerning for OpenType fonts implemented in a `GPOS' table is not */
+ /* supported; use @FT_HAS_KERNING to find out whether a font has data */
+ /* that can be extracted with `FT_Get_Kerning'. */
+ /* */
FT_EXPORT( FT_Error )
FT_Get_Kerning( FT_Face face,
FT_UInt left_glyph,
@@ -3024,7 +3482,7 @@
/* @FT_Attach_Stream). */
/* */
/* Only very few AFM files come with track kerning data; please refer */
- /* to the Adobe's AFM specification for more details. */
+ /* to Adobe's AFM specification for more details. */
/* */
FT_EXPORT( FT_Error )
FT_Get_Track_Kerning( FT_Face face,
@@ -3070,7 +3528,7 @@
/* `.notdef'). */
/* */
/* This function always returns an error if the config macro */
- /* `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is not defined in `ftoptions.h'. */
+ /* `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is not defined in `ftoption.h'. */
/* */
FT_EXPORT( FT_Error )
FT_Get_Glyph_Name( FT_Face face,
@@ -3086,7 +3544,7 @@
/* */
/* <Description> */
/* Retrieve the ASCII PostScript name of a given face, if available. */
- /* This only works with PostScript and TrueType fonts. */
+ /* This only works with PostScript, TrueType, and OpenType fonts. */
/* */
/* <Input> */
/* face :: A handle to the source face object. */
@@ -3098,6 +3556,20 @@
/* The returned pointer is owned by the face and is destroyed with */
/* it. */
/* */
+ /* For variation fonts, this string changes if you select a different */
+ /* instance, and you have to call `FT_Get_PostScript_Name' again to */
+ /* retrieve it. FreeType follows Adobe TechNote #5902, `Generating */
+ /* PostScript Names for Fonts Using OpenType Font Variations'. */
+ /* */
+ /* https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html */
+ /* */
+ /* [Since 2.9] Special PostScript names for named instances are only */
+ /* returned if the named instance is set with @FT_Set_Named_Instance */
+ /* (and the font has corresponding entries in its `fvar' table). If */
+ /* @FT_IS_VARIATION returns true, the algorithmically derived */
+ /* PostScript name is provided, not looking up special entries for */
+ /* named instances. */
+ /* */
FT_EXPORT( const char* )
FT_Get_Postscript_Name( FT_Face face );
@@ -3157,7 +3629,8 @@
/* the face (i.e., if it is not listed in the `face->charmaps' */
/* table). */
/* */
- /* It also fails if a type~14 charmap is selected. */
+ /* It also fails if an OpenType type~14 charmap is selected (which */
+ /* doesn't map character codes to glyph indices at all). */
/* */
FT_EXPORT( FT_Error )
FT_Set_Charmap( FT_Face face,
@@ -3192,7 +3665,7 @@
/* */
/* <Description> */
/* Return the glyph index of a given character code. This function */
- /* uses a charmap object to do the mapping. */
+ /* uses the currently selected charmap to do the mapping. */
/* */
/* <Input> */
/* face :: A handle to the source face object. */
@@ -3226,9 +3699,8 @@
/* FT_Get_First_Char */
/* */
/* <Description> */
- /* This function is used to return the first character code in the */
- /* current charmap of a given face. It also returns the */
- /* corresponding glyph index. */
+ /* Return the first character code in the current charmap of a given */
+ /* face, together with its corresponding glyph index. */
/* */
/* <Input> */
/* face :: A handle to the source face object. */
@@ -3241,7 +3713,7 @@
/* The charmap's first character code. */
/* */
/* <Note> */
- /* You should use this function with @FT_Get_Next_Char to be able to */
+ /* You should use this function together with @FT_Get_Next_Char to */
/* parse all character codes available in a given charmap. The code */
/* should look like this: */
/* */
@@ -3259,6 +3731,13 @@
/* } */
/* } */
/* */
+ /* Be aware that character codes can have values up to 0xFFFFFFFF; */
+ /* this might happen for non-Unicode or malformed cmaps. However, */
+ /* even with regular Unicode encoding, so-called `last resort fonts' */
+ /* (using SFNT cmap format 13, see function @FT_Get_CMap_Format) */
+ /* normally have entries for all Unicode characters up to 0x1FFFFF, */
+ /* which can cause *a lot* of iterations. */
+ /* */
/* Note that `*agindex' is set to~0 if the charmap is empty. The */
/* result itself can be~0 in two cases: if the charmap is empty or */
/* if the value~0 is the first valid character code. */
@@ -3274,12 +3753,13 @@
/* FT_Get_Next_Char */
/* */
/* <Description> */
- /* This function is used to return the next character code in the */
- /* current charmap of a given face following the value `char_code', */
- /* as well as the corresponding glyph index. */
+ /* Return the next character code in the current charmap of a given */
+ /* face following the value `char_code', as well as the corresponding */
+ /* glyph index. */
/* */
/* <Input> */
/* face :: A handle to the source face object. */
+ /* */
/* char_code :: The starting character code. */
/* */
/* <Output> */
@@ -3292,7 +3772,7 @@
/* <Note> */
/* You should use this function with @FT_Get_First_Char to walk */
/* over all character codes available in a given charmap. See the */
- /* note for this function for a simple code example. */
+ /* note for that function for a simple code example. */
/* */
/* Note that `*agindex' is set to~0 when there are no more codes in */
/* the charmap. */
@@ -3303,14 +3783,112 @@
FT_UInt *agindex );
+ /*************************************************************************
+ *
+ * @function:
+ * FT_Face_Properties
+ *
+ * @description:
+ * Set or override certain (library or module-wide) properties on a
+ * face-by-face basis. Useful for finer-grained control and avoiding
+ * locks on shared structures (threads can modify their own faces as
+ * they see fit).
+ *
+ * Contrary to @FT_Property_Set, this function uses @FT_Parameter so
+ * that you can pass multiple properties to the target face in one call.
+ * Note that only a subset of the available properties can be
+ * controlled.
+ *
+ * * @FT_PARAM_TAG_STEM_DARKENING (stem darkening, corresponding to the
+ * property `no-stem-darkening' provided by the `autofit', `cff',
+ * `type1', and `t1cid' modules; see @no-stem-darkening).
+ *
+ * * @FT_PARAM_TAG_LCD_FILTER_WEIGHTS (LCD filter weights, corresponding
+ * to function @FT_Library_SetLcdFilterWeights).
+ *
+ * * @FT_PARAM_TAG_RANDOM_SEED (seed value for the CFF, Type~1, and CID
+ * `random' operator, corresponding to the `random-seed' property
+ * provided by the `cff', `type1', and `t1cid' modules; see
+ * @random-seed).
+ *
+ * Pass NULL as `data' in @FT_Parameter for a given tag to reset the
+ * option and use the library or module default again.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face object.
+ *
+ * num_properties ::
+ * The number of properties that follow.
+ *
+ * properties ::
+ * A handle to an @FT_Parameter array with `num_properties' elements.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Here an example that sets three properties. You must define
+ * FT_CONFIG_OPTION_SUBPIXEL_RENDERING to make the LCD filter examples
+ * work.
+ *
+ * {
+ * FT_Parameter property1;
+ * FT_Bool darken_stems = 1;
+ *
+ * FT_Parameter property2;
+ * FT_LcdFiveTapFilter custom_weight =
+ * { 0x11, 0x44, 0x56, 0x44, 0x11 };
+ *
+ * FT_Parameter property3;
+ * FT_Int32 random_seed = 314159265;
+ *
+ * FT_Parameter properties[3] = { property1,
+ * property2,
+ * property3 };
+ *
+ *
+ * property1.tag = FT_PARAM_TAG_STEM_DARKENING;
+ * property1.data = &darken_stems;
+ *
+ * property2.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS;
+ * property2.data = custom_weight;
+ *
+ * property3.tag = FT_PARAM_TAG_RANDOM_SEED;
+ * property3.data = &random_seed;
+ *
+ * FT_Face_Properties( face, 3, properties );
+ * }
+ *
+ * The next example resets a single property to its default value.
+ *
+ * {
+ * FT_Parameter property;
+ *
+ *
+ * property.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS;
+ * property.data = NULL;
+ *
+ * FT_Face_Properties( face, 1, &property );
+ * }
+ *
+ * @since:
+ * 2.8
+ *
+ */
+ FT_EXPORT( FT_Error )
+ FT_Face_Properties( FT_Face face,
+ FT_UInt num_properties,
+ FT_Parameter* properties );
+
+
/*************************************************************************/
/* */
/* <Function> */
/* FT_Get_Name_Index */
/* */
/* <Description> */
- /* Return the glyph index of a given glyph name. This function uses */
- /* driver specific objects to do the translation. */
+ /* Return the glyph index of a given glyph name. */
/* */
/* <Input> */
/* face :: A handle to the source face object. */
@@ -3331,8 +3909,10 @@
* FT_SUBGLYPH_FLAG_XXX
*
* @description:
- * A list of constants used to describe subglyphs. Please refer to the
- * TrueType specification for the meaning of the various flags.
+ * A list of constants describing subglyphs. Please refer to the
+ * `glyf' table description in the OpenType specification for the
+ * meaning of the various flags (which get synthesized for
+ * non-OpenType subglyphs).
*
* @values:
* FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS ::
@@ -3393,7 +3973,7 @@
* @note:
* The values of `*p_arg1', `*p_arg2', and `*p_transform' must be
* interpreted depending on the flags returned in `*p_flags'. See the
- * TrueType specification for details.
+ * OpenType specification for details.
*
*/
FT_EXPORT( FT_Error )
@@ -3419,7 +3999,7 @@
/* and subsetting restrictions associated with a font. */
/* */
/* See */
- /* http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf */
+ /* https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf */
/* for more details. */
/* */
/* <Values> */
@@ -3433,30 +4013,31 @@
/* the font software copyright owner. */
/* */
/* FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING :: */
- /* If this bit is set, the font may be embedded and temporarily */
- /* loaded on the remote system. Documents containing Preview & */
- /* Print fonts must be opened `read-only'; no edits can be applied */
- /* to the document. */
+ /* The font may be embedded and temporarily loaded on the remote */
+ /* system. Documents containing Preview & Print fonts must be */
+ /* opened `read-only'; no edits can be applied to the document. */
/* */
/* FT_FSTYPE_EDITABLE_EMBEDDING :: */
- /* If this bit is set, the font may be embedded but must only be */
- /* installed temporarily on other systems. In contrast to Preview */
- /* & Print fonts, documents containing editable fonts may be opened */
- /* for reading, editing is permitted, and changes may be saved. */
+ /* The font may be embedded but must only be installed temporarily */
+ /* on other systems. In contrast to Preview & Print fonts, */
+ /* documents containing editable fonts may be opened for reading, */
+ /* editing is permitted, and changes may be saved. */
/* */
/* FT_FSTYPE_NO_SUBSETTING :: */
- /* If this bit is set, the font may not be subsetted prior to */
- /* embedding. */
+ /* The font may not be subsetted prior to embedding. */
/* */
/* FT_FSTYPE_BITMAP_EMBEDDING_ONLY :: */
- /* If this bit is set, only bitmaps contained in the font may be */
- /* embedded; no outline data may be embedded. If there are no */
- /* bitmaps available in the font, then the font is unembeddable. */
+ /* Only bitmaps contained in the font may be embedded; no outline */
+ /* data may be embedded. If there are no bitmaps available in the */
+ /* font, then the font is unembeddable. */
/* */
/* <Note> */
- /* While the fsType flags can indicate that a font may be embedded, a */
- /* license with the font vendor may be separately required to use the */
- /* font in this way. */
+ /* The flags are ORed together, thus more than a single value can be */
+ /* returned. */
+ /* */
+ /* While the `fsType' flags can indicate that a font may be embedded, */
+ /* a license with the font vendor may be separately required to use */
+ /* the font in this way. */
/* */
#define FT_FSTYPE_INSTALLABLE_EMBEDDING 0x0000
#define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING 0x0002
@@ -3472,13 +4053,13 @@
/* FT_Get_FSType_Flags */
/* */
/* <Description> */
- /* Return the fsType flags for a font. */
+ /* Return the `fsType' flags for a font. */
/* */
/* <Input> */
/* face :: A handle to the source face object. */
/* */
/* <Return> */
- /* The fsType flags, @FT_FSTYPE_XXX. */
+ /* The `fsType' flags, see @FT_FSTYPE_XXX. */
/* */
/* <Note> */
/* Use this function rather than directly reading the `fs_type' field */
@@ -3498,39 +4079,51 @@
/* glyph_variants */
/* */
/* <Title> */
- /* Glyph Variants */
+ /* Unicode Variation Sequences */
/* */
/* <Abstract> */
- /* The FreeType~2 interface to Unicode Ideographic Variation */
- /* Sequences (IVS), using the SFNT cmap format~14. */
+ /* The FreeType~2 interface to Unicode Variation Sequences (UVS), */
+ /* using the SFNT cmap format~14. */
/* */
/* <Description> */
- /* Many CJK characters have variant forms. They are a sort of grey */
- /* area somewhere between being totally irrelevant and semantically */
- /* distinct; for this reason, the Unicode consortium decided to */
- /* introduce Ideographic Variation Sequences (IVS), consisting of a */
- /* Unicode base character and one of 240 variant selectors */
- /* (U+E0100-U+E01EF), instead of further extending the already huge */
- /* code range for CJK characters. */
+ /* Many characters, especially for CJK scripts, have variant forms. */
+ /* They are a sort of grey area somewhere between being totally */
+ /* irrelevant and semantically distinct; for this reason, the Unicode */
+ /* consortium decided to introduce Variation Sequences (VS), */
+ /* consisting of a Unicode base character and a variation selector */
+ /* instead of further extending the already huge number of */
+ /* characters. */
/* */
- /* An IVS is registered and unique; for further details please refer */
- /* to Unicode Technical Standard #37, the Ideographic Variation */
- /* Database: */
+ /* Unicode maintains two different sets, namely `Standardized */
+ /* Variation Sequences' and registered `Ideographic Variation */
+ /* Sequences' (IVS), collected in the `Ideographic Variation */
+ /* Database' (IVD). */
/* */
- /* http://www.unicode.org/reports/tr37/ */
+ /* https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt */
+ /* https://unicode.org/reports/tr37/ */
+ /* https://unicode.org/ivd/ */
/* */
- /* To date (November 2014), the character with the most variants is */
- /* U+9089, having 32 such IVS. */
+ /* To date (January 2017), the character with the most ideographic */
+ /* variations is U+9089, having 32 such IVS. */
/* */
- /* Adobe and MS decided to support IVS with a new cmap subtable */
- /* (format~14). It is an odd subtable because it is not a mapping of */
- /* input code points to glyphs, but contains lists of all variants */
- /* supported by the font. */
+ /* Three Mongolian Variation Selectors have the values U+180B-U+180D; */
+ /* 256 generic Variation Selectors are encoded in the ranges */
+ /* U+FE00-U+FE0F and U+E0100-U+E01EF. IVS currently use Variation */
+ /* Selectors from the range U+E0100-U+E01EF only. */
/* */
- /* A variant may be either `default' or `non-default'. A default */
- /* variant is the one you will get for that code point if you look it */
- /* up in the standard Unicode cmap. A non-default variant is a */
- /* different glyph. */
+ /* A VS consists of the base character value followed by a single */
+ /* Variation Selector. For example, to get the first variation of */
+ /* U+9089, you have to write the character sequence `U+9089 U+E0100'. */
+ /* */
+ /* Adobe and MS decided to support both standardized and ideographic */
+ /* VS with a new cmap subtable (format~14). It is an odd subtable */
+ /* because it is not a mapping of input code points to glyphs, but */
+ /* contains lists of all variations supported by the font. */
+ /* */
+ /* A variation may be either `default' or `non-default' for a given */
+ /* font. A default variation is the one you will get for that code */
+ /* point if you look it up in the standard Unicode cmap. A */
+ /* non-default variation is a different glyph. */
/* */
/*************************************************************************/
@@ -3586,8 +4179,8 @@
/* FT_Face_GetCharVariantIsDefault */
/* */
/* <Description> */
- /* Check whether this variant of this Unicode character is the one to */
- /* be found in the `cmap'. */
+ /* Check whether this variation of this Unicode character is the one */
+ /* to be found in the `cmap'. */
/* */
/* <Input> */
/* face :: */
@@ -3601,7 +4194,7 @@
/* */
/* <Return> */
/* 1~if found in the standard (Unicode) cmap, 0~if found in the */
- /* variation selector cmap, or -1 if it is not a variant. */
+ /* variation selector cmap, or -1 if it is not a variation. */
/* */
/* <Note> */
/* This function is only meaningful if the font has a variation */
@@ -3622,7 +4215,7 @@
/* FT_Face_GetVariantSelectors */
/* */
/* <Description> */
- /* Return a zero-terminated list of Unicode variant selectors found */
+ /* Return a zero-terminated list of Unicode variation selectors found */
/* in the font. */
/* */
/* <Input> */
@@ -3631,7 +4224,7 @@
/* */
/* <Return> */
/* A pointer to an array of selector code points, or NULL if there is */
- /* no valid variant selector cmap subtable. */
+ /* no valid variation selector cmap subtable. */
/* */
/* <Note> */
/* The last item in the array is~0; the array is owned by the */
@@ -3651,7 +4244,7 @@
/* FT_Face_GetVariantsOfChar */
/* */
/* <Description> */
- /* Return a zero-terminated list of Unicode variant selectors found */
+ /* Return a zero-terminated list of Unicode variation selectors found */
/* for the specified character code. */
/* */
/* <Input> */
@@ -3662,7 +4255,7 @@
/* The character codepoint in Unicode. */
/* */
/* <Return> */
- /* A pointer to an array of variant selector code points that are */
+ /* A pointer to an array of variation selector code points that are */
/* active for the given character, or NULL if the corresponding list */
/* is empty. */
/* */
@@ -3686,19 +4279,19 @@
/* */
/* <Description> */
/* Return a zero-terminated list of Unicode character codes found for */
- /* the specified variant selector. */
+ /* the specified variation selector. */
/* */
/* <Input> */
/* face :: */
/* A handle to the source face object. */
/* */
/* variantSelector :: */
- /* The variant selector code point in Unicode. */
+ /* The variation selector code point in Unicode. */
/* */
/* <Return> */
/* A list of all the code points that are specified by this selector */
/* (both default and non-default codes are returned) or NULL if there */
- /* is no valid cmap or the variant selector is invalid. */
+ /* is no valid cmap or the variation selector is invalid. */
/* */
/* <Note> */
/* The last item in the array is~0; the array is owned by the */
@@ -3748,16 +4341,17 @@
/* FT_MulDiv */
/* */
/* <Description> */
- /* A very simple function used to perform the computation `(a*b)/c' */
- /* with maximum accuracy (it uses a 64-bit intermediate integer */
- /* whenever necessary). */
+ /* Compute `(a*b)/c' with maximum accuracy, using a 64-bit */
+ /* intermediate integer whenever necessary. */
/* */
/* This function isn't necessarily as fast as some processor specific */
/* operations, but is at least completely portable. */
/* */
/* <Input> */
/* a :: The first multiplier. */
+ /* */
/* b :: The second multiplier. */
+ /* */
/* c :: The divisor. */
/* */
/* <Return> */
@@ -3777,12 +4371,12 @@
/* FT_MulFix */
/* */
/* <Description> */
- /* A very simple function used to perform the computation */
- /* `(a*b)/0x10000' with maximum accuracy. Most of the time this is */
- /* used to multiply a given value by a 16.16 fixed-point factor. */
+ /* Compute `(a*b)/0x10000' with maximum accuracy. Its main use is to */
+ /* multiply a given value by a 16.16 fixed-point factor. */
/* */
/* <Input> */
/* a :: The first multiplier. */
+ /* */
/* b :: The second multiplier. Use a 16.16 factor here whenever */
/* possible (see note below). */
/* */
@@ -3811,12 +4405,12 @@
/* FT_DivFix */
/* */
/* <Description> */
- /* A very simple function used to perform the computation */
- /* `(a*0x10000)/b' with maximum accuracy. Most of the time, this is */
- /* used to divide a given value by a 16.16 fixed-point factor. */
+ /* Compute `(a*0x10000)/b' with maximum accuracy. Its main use is to */
+ /* divide a given value by a 16.16 fixed-point factor. */
/* */
/* <Input> */
/* a :: The numerator. */
+ /* */
/* b :: The denominator. Use a 16.16 factor here. */
/* */
/* <Return> */
@@ -3833,13 +4427,17 @@
/* FT_RoundFix */
/* */
/* <Description> */
- /* A very simple function used to round a 16.16 fixed number. */
+ /* Round a 16.16 fixed number. */
/* */
/* <Input> */
/* a :: The number to be rounded. */
/* */
/* <Return> */
- /* The result of `(a + 0x8000) & -0x10000'. */
+ /* `a' rounded to the nearest 16.16 fixed integer, halfway cases away */
+ /* from zero. */
+ /* */
+ /* <Note> */
+ /* The function uses wrap-around arithmetic. */
/* */
FT_EXPORT( FT_Fixed )
FT_RoundFix( FT_Fixed a );
@@ -3851,14 +4449,16 @@
/* FT_CeilFix */
/* */
/* <Description> */
- /* A very simple function used to compute the ceiling function of a */
- /* 16.16 fixed number. */
+ /* Compute the smallest following integer of a 16.16 fixed number. */
/* */
/* <Input> */
/* a :: The number for which the ceiling function is to be computed. */
/* */
/* <Return> */
- /* The result of `(a + 0x10000 - 1) & -0x10000'. */
+ /* `a' rounded towards plus infinity. */
+ /* */
+ /* <Note> */
+ /* The function uses wrap-around arithmetic. */
/* */
FT_EXPORT( FT_Fixed )
FT_CeilFix( FT_Fixed a );
@@ -3870,14 +4470,13 @@
/* FT_FloorFix */
/* */
/* <Description> */
- /* A very simple function used to compute the floor function of a */
- /* 16.16 fixed number. */
+ /* Compute the largest previous integer of a 16.16 fixed number. */
/* */
/* <Input> */
/* a :: The number for which the floor function is to be computed. */
/* */
/* <Return> */
- /* The result of `a & -0x10000'. */
+ /* `a' rounded towards minus infinity. */
/* */
FT_EXPORT( FT_Fixed )
FT_FloorFix( FT_Fixed a );
@@ -3957,8 +4556,8 @@
*
*/
#define FREETYPE_MAJOR 2
-#define FREETYPE_MINOR 6
-#define FREETYPE_PATCH 0
+#define FREETYPE_MINOR 9
+#define FREETYPE_PATCH 1
/*************************************************************************/
@@ -4003,20 +4602,13 @@
/* FT_Face_CheckTrueTypePatents */
/* */
/* <Description> */
- /* Parse all bytecode instructions of a TrueType font file to check */
- /* whether any of the patented opcodes are used. This is only useful */
- /* if you want to be able to use the unpatented hinter with */
- /* fonts that do *not* use these opcodes. */
- /* */
- /* Note that this function parses *all* glyph instructions in the */
- /* font file, which may be slow. */
+ /* Deprecated, does nothing. */
/* */
/* <Input> */
/* face :: A face handle. */
/* */
/* <Return> */
- /* 1~if this is a TrueType font that uses one of the patented */
- /* opcodes, 0~otherwise. */
+ /* Always returns false. */
/* */
/* <Note> */
/* Since May 2010, TrueType hinting is no longer patented. */
@@ -4034,9 +4626,7 @@
/* FT_Face_SetUnpatentedHinting */
/* */
/* <Description> */
- /* Enable or disable the unpatented hinter for a given face. */
- /* Only enable it if you have determined that the face doesn't */
- /* use any patented opcodes (see @FT_Face_CheckTrueTypePatents). */
+ /* Deprecated, does nothing. */
/* */
/* <Input> */
/* face :: A face handle. */
@@ -4044,9 +4634,7 @@
/* value :: New boolean setting. */
/* */
/* <Return> */
- /* The old setting value. This will always be false if this is not */
- /* an SFNT font, or if the unpatented hinter is not compiled in this */
- /* instance of the library. */
+ /* Always returns false. */
/* */
/* <Note> */
/* Since May 2010, TrueType hinting is no longer patented. */
@@ -4063,7 +4651,7 @@
FT_END_HEADER
-#endif /* __FREETYPE_H__ */
+#endif /* FREETYPE_H_ */
/* END */
diff --git a/include/ftadvanc.h b/include/freetype/ftadvanc.h
similarity index 98%
rename from include/ftadvanc.h
rename to include/freetype/ftadvanc.h
index b4d2aed..f78e8b1 100644
--- a/include/ftadvanc.h
+++ b/include/freetype/ftadvanc.h
@@ -4,7 +4,7 @@
/* */
/* Quick computation of advance widths (specification only). */
/* */
-/* Copyright 2008-2015 by */
+/* Copyright 2008-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTADVANC_H__
-#define __FTADVANC_H__
+#ifndef FTADVANC_H_
+#define FTADVANC_H_
#include <ft2build.h>
@@ -181,7 +181,7 @@
FT_END_HEADER
-#endif /* __FTADVANC_H__ */
+#endif /* FTADVANC_H_ */
/* END */
diff --git a/include/ftbbox.h b/include/freetype/ftbbox.h
similarity index 95%
rename from include/ftbbox.h
rename to include/freetype/ftbbox.h
index 9d9d040..f9eb70b 100644
--- a/include/ftbbox.h
+++ b/include/freetype/ftbbox.h
@@ -4,7 +4,7 @@
/* */
/* FreeType exact bbox computation (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -27,8 +27,8 @@
/*************************************************************************/
-#ifndef __FTBBOX_H__
-#define __FTBBOX_H__
+#ifndef FTBBOX_H_
+#define FTBBOX_H_
#include <ft2build.h>
@@ -61,7 +61,7 @@
/* Compute the exact bounding box of an outline. This is slower */
/* than computing the control box. However, it uses an advanced */
/* algorithm that returns _very_ quickly when the two boxes */
- /* coincide. Otherwise, the outline Bézier arcs are traversed to */
+ /* coincide. Otherwise, the outline Bezier arcs are traversed to */
/* extract their extrema. */
/* */
/* <Input> */
@@ -90,7 +90,7 @@
FT_END_HEADER
-#endif /* __FTBBOX_H__ */
+#endif /* FTBBOX_H_ */
/* END */
diff --git a/include/ftbdf.h b/include/freetype/ftbdf.h
similarity index 97%
rename from include/ftbdf.h
rename to include/freetype/ftbdf.h
index 0bdabf4..1b6dea6 100644
--- a/include/ftbdf.h
+++ b/include/freetype/ftbdf.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing BDF-specific strings (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTBDF_H__
-#define __FTBDF_H__
+#ifndef FTBDF_H_
+#define FTBDF_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -204,7 +204,7 @@
FT_END_HEADER
-#endif /* __FTBDF_H__ */
+#endif /* FTBDF_H_ */
/* END */
diff --git a/include/ftbitmap.h b/include/freetype/ftbitmap.h
similarity index 98%
rename from include/ftbitmap.h
rename to include/freetype/ftbitmap.h
index 46cc47b..a43187c 100644
--- a/include/ftbitmap.h
+++ b/include/freetype/ftbitmap.h
@@ -4,7 +4,7 @@
/* */
/* FreeType utility functions for bitmaps (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTBITMAP_H__
-#define __FTBITMAP_H__
+#ifndef FTBITMAP_H_
+#define FTBITMAP_H_
#include <ft2build.h>
@@ -97,7 +97,7 @@
FT_EXPORT( FT_Error )
FT_Bitmap_Copy( FT_Library library,
const FT_Bitmap *source,
- FT_Bitmap *target);
+ FT_Bitmap *target );
/*************************************************************************/
@@ -234,7 +234,7 @@
FT_END_HEADER
-#endif /* __FTBITMAP_H__ */
+#endif /* FTBITMAP_H_ */
/* END */
diff --git a/include/ftbzip2.h b/include/freetype/ftbzip2.h
similarity index 96%
rename from include/ftbzip2.h
rename to include/freetype/ftbzip2.h
index c25f946..6edfa03 100644
--- a/include/ftbzip2.h
+++ b/include/freetype/ftbzip2.h
@@ -4,7 +4,7 @@
/* */
/* Bzip2-compressed stream support. */
/* */
-/* Copyright 2010-2015 by */
+/* Copyright 2010-2018 by */
/* Joel Klinghed. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTBZIP2_H__
-#define __FTBZIP2_H__
+#ifndef FTBZIP2_H_
+#define FTBZIP2_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -96,7 +96,7 @@
FT_END_HEADER
-#endif /* __FTBZIP2_H__ */
+#endif /* FTBZIP2_H_ */
/* END */
diff --git a/include/ftcache.h b/include/freetype/ftcache.h
similarity index 97%
rename from include/ftcache.h
rename to include/freetype/ftcache.h
index 68525bb..52d5f00 100644
--- a/include/ftcache.h
+++ b/include/freetype/ftcache.h
@@ -4,7 +4,7 @@
/* */
/* FreeType Cache subsystem (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTCACHE_H__
-#define __FTCACHE_H__
+#ifndef FTCACHE_H_
+#define FTCACHE_H_
#include <ft2build.h>
@@ -540,13 +540,6 @@
FTC_FaceID face_id );
- /*************************************************************************/
- /* */
- /* <Section> */
- /* cache_subsystem */
- /* */
- /*************************************************************************/
-
/*************************************************************************
*
* @type:
@@ -624,14 +617,6 @@
/*************************************************************************/
- /* */
- /* <Section> */
- /* cache_subsystem */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/***** *****/
@@ -749,7 +734,7 @@
/* aglyph :: The corresponding @FT_Glyph object. 0~in case of */
/* failure. */
/* */
- /* anode :: Used to return the address of of the corresponding cache */
+ /* anode :: Used to return the address of the corresponding cache */
/* node after incrementing its reference count (see note */
/* below). */
/* */
@@ -802,7 +787,7 @@
/* aglyph :: The corresponding @FT_Glyph object. 0~in case of */
/* failure. */
/* */
- /* anode :: Used to return the address of of the corresponding */
+ /* anode :: Used to return the address of the corresponding */
/* cache node after incrementing its reference count */
/* (see note below). */
/* */
@@ -957,7 +942,7 @@
/* <Output> */
/* sbit :: A handle to a small bitmap descriptor. */
/* */
- /* anode :: Used to return the address of of the corresponding cache */
+ /* anode :: Used to return the address of the corresponding cache */
/* node after incrementing its reference count (see note */
/* below). */
/* */
@@ -1012,7 +997,7 @@
/* <Output> */
/* sbit :: A handle to a small bitmap descriptor. */
/* */
- /* anode :: Used to return the address of of the corresponding */
+ /* anode :: Used to return the address of the corresponding */
/* cache node after incrementing its reference count */
/* (see note below). */
/* */
@@ -1051,7 +1036,7 @@
FT_END_HEADER
-#endif /* __FTCACHE_H__ */
+#endif /* FTCACHE_H_ */
/* END */
diff --git a/include/ftchapters.h b/include/freetype/ftchapters.h
similarity index 86%
rename from include/ftchapters.h
rename to include/freetype/ftchapters.h
index d333761..51257bb 100644
--- a/include/ftchapters.h
+++ b/include/freetype/ftchapters.h
@@ -76,7 +76,11 @@
/* <Sections> */
/* auto_hinter */
/* cff_driver */
+/* t1_cid_driver */
/* tt_driver */
+/* pcf_driver */
+/* properties */
+/* parameter_tags */
/* */
/***************************************************************************/
@@ -119,3 +123,17 @@
/* lcd_filtering */
/* */
/***************************************************************************/
+
+/***************************************************************************/
+/* */
+/* <Chapter> */
+/* error_codes */
+/* */
+/* <Title> */
+/* Error Codes */
+/* */
+/* <Sections> */
+/* error_enumerations */
+/* error_code_values */
+/* */
+/***************************************************************************/
diff --git a/include/ftcid.h b/include/freetype/ftcid.h
similarity index 94%
rename from include/ftcid.h
rename to include/freetype/ftcid.h
index 05741c8..5e9100a 100644
--- a/include/ftcid.h
+++ b/include/freetype/ftcid.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing CID font information (specification). */
/* */
-/* Copyright 2007-2015 by */
+/* Copyright 2007-2018 by */
/* Dereg Clegg and Michael Toftdal. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTCID_H__
-#define __FTCID_H__
+#ifndef FTCID_H_
+#define FTCID_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -87,7 +87,7 @@
FT_Get_CID_Registry_Ordering_Supplement( FT_Face face,
const char* *registry,
const char* *ordering,
- FT_Int *supplement);
+ FT_Int *supplement );
/**********************************************************************
@@ -97,8 +97,8 @@
*
* @description:
* Retrieve the type of the input face, CID keyed or not. In
- * constrast to the @FT_IS_CID_KEYED macro this function returns
- * successfully also for CID-keyed fonts in an SNFT wrapper.
+ * contrast to the @FT_IS_CID_KEYED macro this function returns
+ * successfully also for CID-keyed fonts in an SFNT wrapper.
*
* @input:
* face ::
@@ -162,7 +162,7 @@
FT_END_HEADER
-#endif /* __FTCID_H__ */
+#endif /* FTCID_H_ */
/* END */
diff --git a/include/freetype/ftdriver.h b/include/freetype/ftdriver.h
new file mode 100644
index 0000000..e90475b
--- /dev/null
+++ b/include/freetype/ftdriver.h
@@ -0,0 +1,1225 @@
+/***************************************************************************/
+/* */
+/* ftdriver.h */
+/* */
+/* FreeType API for controlling driver modules (specification only). */
+/* */
+/* Copyright 2017-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef FTDRIVER_H_
+#define FTDRIVER_H_
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_PARAMETER_TAGS_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * auto_hinter
+ *
+ * @title:
+ * The auto-hinter
+ *
+ * @abstract:
+ * Controlling the auto-hinting module.
+ *
+ * @description:
+ * While FreeType's auto-hinter doesn't expose API functions by itself,
+ * it is possible to control its behaviour with @FT_Property_Set and
+ * @FT_Property_Get. The following lists the available properties
+ * together with the necessary macros and structures.
+ *
+ * Note that the auto-hinter's module name is `autofitter' for
+ * historical reasons.
+ *
+ * Available properties are @increase-x-height, @no-stem-darkening
+ * (experimental), @darkening-parameters (experimental), @warping
+ * (experimental), @glyph-to-script-map (experimental), @fallback-script
+ * (experimental), and @default-script (experimental), as documented in
+ * the @properties section.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * cff_driver
+ *
+ * @title:
+ * The CFF driver
+ *
+ * @abstract:
+ * Controlling the CFF driver module.
+ *
+ * @description:
+ * While FreeType's CFF driver doesn't expose API functions by itself,
+ * it is possible to control its behaviour with @FT_Property_Set and
+ * @FT_Property_Get.
+ *
+ * The CFF driver's module name is `cff'.
+ *
+ * Available properties are @hinting-engine, @no-stem-darkening,
+ * @darkening-parameters, and @random-seed, as documented in the
+ * @properties section.
+ *
+ *
+ * *Hinting* *and* *antialiasing* *principles* *of* *the* *new* *engine*
+ *
+ * The rasterizer is positioning horizontal features (e.g., ascender
+ * height & x-height, or crossbars) on the pixel grid and minimizing the
+ * amount of antialiasing applied to them, while placing vertical
+ * features (vertical stems) on the pixel grid without hinting, thus
+ * representing the stem position and weight accurately. Sometimes the
+ * vertical stems may be only partially black. In this context,
+ * `antialiasing' means that stems are not positioned exactly on pixel
+ * borders, causing a fuzzy appearance.
+ *
+ * There are two principles behind this approach.
+ *
+ * 1) No hinting in the horizontal direction: Unlike `superhinted'
+ * TrueType, which changes glyph widths to accommodate regular
+ * inter-glyph spacing, Adobe's approach is `faithful to the design' in
+ * representing both the glyph width and the inter-glyph spacing
+ * designed for the font. This makes the screen display as close as it
+ * can be to the result one would get with infinite resolution, while
+ * preserving what is considered the key characteristics of each glyph.
+ * Note that the distances between unhinted and grid-fitted positions at
+ * small sizes are comparable to kerning values and thus would be
+ * noticeable (and distracting) while reading if hinting were applied.
+ *
+ * One of the reasons to not hint horizontally is antialiasing for LCD
+ * screens: The pixel geometry of modern displays supplies three
+ * vertical subpixels as the eye moves horizontally across each visible
+ * pixel. On devices where we can be certain this characteristic is
+ * present a rasterizer can take advantage of the subpixels to add
+ * increments of weight. In Western writing systems this turns out to
+ * be the more critical direction anyway; the weights and spacing of
+ * vertical stems (see above) are central to Armenian, Cyrillic, Greek,
+ * and Latin type designs. Even when the rasterizer uses greyscale
+ * antialiasing instead of color (a necessary compromise when one
+ * doesn't know the screen characteristics), the unhinted vertical
+ * features preserve the design's weight and spacing much better than
+ * aliased type would.
+ *
+ * 2) Alignment in the vertical direction: Weights and spacing along the
+ * y~axis are less critical; what is much more important is the visual
+ * alignment of related features (like cap-height and x-height). The
+ * sense of alignment for these is enhanced by the sharpness of grid-fit
+ * edges, while the cruder vertical resolution (full pixels instead of
+ * 1/3 pixels) is less of a problem.
+ *
+ * On the technical side, horizontal alignment zones for ascender,
+ * x-height, and other important height values (traditionally called
+ * `blue zones') as defined in the font are positioned independently,
+ * each being rounded to the nearest pixel edge, taking care of
+ * overshoot suppression at small sizes, stem darkening, and scaling.
+ *
+ * Hstems (this is, hint values defined in the font to help align
+ * horizontal features) that fall within a blue zone are said to be
+ * `captured' and are aligned to that zone. Uncaptured stems are moved
+ * in one of four ways, top edge up or down, bottom edge up or down.
+ * Unless there are conflicting hstems, the smallest movement is taken
+ * to minimize distortion.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * pcf_driver
+ *
+ * @title:
+ * The PCF driver
+ *
+ * @abstract:
+ * Controlling the PCF driver module.
+ *
+ * @description:
+ * While FreeType's PCF driver doesn't expose API functions by itself,
+ * it is possible to control its behaviour with @FT_Property_Set and
+ * @FT_Property_Get. Right now, there is a single property
+ * @no-long-family-names available if FreeType is compiled with
+ * PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.
+ *
+ * The PCF driver's module name is `pcf'.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * t1_cid_driver
+ *
+ * @title:
+ * The Type 1 and CID drivers
+ *
+ * @abstract:
+ * Controlling the Type~1 and CID driver modules.
+ *
+ * @description:
+ * It is possible to control the behaviour of FreeType's Type~1 and
+ * Type~1 CID drivers with @FT_Property_Set and @FT_Property_Get.
+ *
+ * Behind the scenes, both drivers use the Adobe CFF engine for hinting;
+ * however, the used properties must be specified separately.
+ *
+ * The Type~1 driver's module name is `type1'; the CID driver's module
+ * name is `t1cid'.
+ *
+ * Available properties are @hinting-engine, @no-stem-darkening,
+ * @darkening-parameters, and @random-seed, as documented in the
+ * @properties section.
+ *
+ * Please see the @cff_driver section for more details on the new
+ * hinting engine.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * tt_driver
+ *
+ * @title:
+ * The TrueType driver
+ *
+ * @abstract:
+ * Controlling the TrueType driver module.
+ *
+ * @description:
+ * While FreeType's TrueType driver doesn't expose API functions by
+ * itself, it is possible to control its behaviour with @FT_Property_Set
+ * and @FT_Property_Get. The following lists the available properties
+ * together with the necessary macros and structures.
+ *
+ * The TrueType driver's module name is `truetype'.
+ *
+ * A single property @interpreter-version is available, as documented in
+ * the @properties section.
+ *
+ * We start with a list of definitions, kindly provided by Greg
+ * Hitchcock.
+ *
+ * _Bi-Level_ _Rendering_
+ *
+ * Monochromatic rendering, exclusively used in the early days of
+ * TrueType by both Apple and Microsoft. Microsoft's GDI interface
+ * supported hinting of the right-side bearing point, such that the
+ * advance width could be non-linear. Most often this was done to
+ * achieve some level of glyph symmetry. To enable reasonable
+ * performance (e.g., not having to run hinting on all glyphs just to
+ * get the widths) there was a bit in the head table indicating if the
+ * side bearing was hinted, and additional tables, `hdmx' and `LTSH', to
+ * cache hinting widths across multiple sizes and device aspect ratios.
+ *
+ * _Font_ _Smoothing_
+ *
+ * Microsoft's GDI implementation of anti-aliasing. Not traditional
+ * anti-aliasing as the outlines were hinted before the sampling. The
+ * widths matched the bi-level rendering.
+ *
+ * _ClearType_ _Rendering_
+ *
+ * Technique that uses physical subpixels to improve rendering on LCD
+ * (and other) displays. Because of the higher resolution, many methods
+ * of improving symmetry in glyphs through hinting the right-side
+ * bearing were no longer necessary. This lead to what GDI calls
+ * `natural widths' ClearType, see
+ * http://www.beatstamm.com/typography/RTRCh4.htm#Sec21. Since hinting
+ * has extra resolution, most non-linearity went away, but it is still
+ * possible for hints to change the advance widths in this mode.
+ *
+ * _ClearType_ _Compatible_ _Widths_
+ *
+ * One of the earliest challenges with ClearType was allowing the
+ * implementation in GDI to be selected without requiring all UI and
+ * documents to reflow. To address this, a compatible method of
+ * rendering ClearType was added where the font hints are executed once
+ * to determine the width in bi-level rendering, and then re-run in
+ * ClearType, with the difference in widths being absorbed in the font
+ * hints for ClearType (mostly in the white space of hints); see
+ * http://www.beatstamm.com/typography/RTRCh4.htm#Sec20. Somewhat by
+ * definition, compatible width ClearType allows for non-linear widths,
+ * but only when the bi-level version has non-linear widths.
+ *
+ * _ClearType_ _Subpixel_ _Positioning_
+ *
+ * One of the nice benefits of ClearType is the ability to more crisply
+ * display fractional widths; unfortunately, the GDI model of integer
+ * bitmaps did not support this. However, the WPF and Direct Write
+ * frameworks do support fractional widths. DWrite calls this `natural
+ * mode', not to be confused with GDI's `natural widths'. Subpixel
+ * positioning, in the current implementation of Direct Write,
+ * unfortunately does not support hinted advance widths, see
+ * http://www.beatstamm.com/typography/RTRCh4.htm#Sec22. Note that the
+ * TrueType interpreter fully allows the advance width to be adjusted in
+ * this mode, just the DWrite client will ignore those changes.
+ *
+ * _ClearType_ _Backward_ _Compatibility_
+ *
+ * This is a set of exceptions made in the TrueType interpreter to
+ * minimize hinting techniques that were problematic with the extra
+ * resolution of ClearType; see
+ * http://www.beatstamm.com/typography/RTRCh4.htm#Sec1 and
+ * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx.
+ * This technique is not to be confused with ClearType compatible
+ * widths. ClearType backward compatibility has no direct impact on
+ * changing advance widths, but there might be an indirect impact on
+ * disabling some deltas. This could be worked around in backward
+ * compatibility mode.
+ *
+ * _Native_ _ClearType_ _Mode_
+ *
+ * (Not to be confused with `natural widths'.) This mode removes all
+ * the exceptions in the TrueType interpreter when running with
+ * ClearType. Any issues on widths would still apply, though.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * properties
+ *
+ * @title:
+ * Driver properties
+ *
+ * @abstract:
+ * Controlling driver modules.
+ *
+ * @description:
+ * Driver modules can be controlled by setting and unsetting properties,
+ * using the functions @FT_Property_Set and @FT_Property_Get. This
+ * section documents the available properties, together with auxiliary
+ * macros and structures.
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_HINTING_XXX
+ *
+ * @description:
+ * A list of constants used for the @hinting-engine property to
+ * select the hinting engine for CFF, Type~1, and CID fonts.
+ *
+ * @values:
+ * FT_HINTING_FREETYPE ::
+ * Use the old FreeType hinting engine.
+ *
+ * FT_HINTING_ADOBE ::
+ * Use the hinting engine contributed by Adobe.
+ *
+ * @since:
+ * 2.9
+ *
+ */
+#define FT_HINTING_FREETYPE 0
+#define FT_HINTING_ADOBE 1
+
+ /* these constants (introduced in 2.4.12) are deprecated */
+#define FT_CFF_HINTING_FREETYPE FT_HINTING_FREETYPE
+#define FT_CFF_HINTING_ADOBE FT_HINTING_ADOBE
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * hinting-engine
+ *
+ * @description:
+ * Thanks to Adobe, which contributed a new hinting (and parsing)
+ * engine, an application can select between `freetype' and `adobe' if
+ * compiled with CFF_CONFIG_OPTION_OLD_ENGINE. If this configuration
+ * macro isn't defined, `hinting-engine' does nothing.
+ *
+ * The same holds for the Type~1 and CID modules if compiled with
+ * T1_CONFIG_OPTION_OLD_ENGINE.
+ *
+ * For the `cff' module, the default engine is `freetype' if
+ * CFF_CONFIG_OPTION_OLD_ENGINE is defined, and `adobe' otherwise.
+ *
+ * For both the `type1' and `t1cid' modules, the default engine is
+ * `freetype' if T1_CONFIG_OPTION_OLD_ENGINE is defined, and `adobe'
+ * otherwise.
+ *
+ * The following example code demonstrates how to select Adobe's hinting
+ * engine for the `cff' module (omitting the error handling).
+ *
+ * {
+ * FT_Library library;
+ * FT_UInt hinting_engine = FT_CFF_HINTING_ADOBE;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "cff",
+ * "hinting-engine", &hinting_engine );
+ * }
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * This property can be set via the `FREETYPE_PROPERTIES' environment
+ * variable (using values `adobe' or `freetype').
+ *
+ * @since:
+ * 2.4.12 (for `cff' module)
+ *
+ * 2.9 (for `type1' and `t1cid' modules)
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * no-stem-darkening
+ *
+ * @description:
+ * All glyphs that pass through the auto-hinter will be emboldened
+ * unless this property is set to TRUE. The same is true for the CFF,
+ * Type~1, and CID font modules if the `Adobe' engine is selected (which
+ * is the default).
+ *
+ * Stem darkening emboldens glyphs at smaller sizes to make them more
+ * readable on common low-DPI screens when using linear alpha blending
+ * and gamma correction, see @FT_Render_Glyph. When not using linear
+ * alpha blending and gamma correction, glyphs will appear heavy and
+ * fuzzy!
+ *
+ * Gamma correction essentially lightens fonts since shades of grey are
+ * shifted to higher pixel values (=~higher brightness) to match the
+ * original intention to the reality of our screens. The side-effect is
+ * that glyphs `thin out'. Mac OS~X and Adobe's proprietary font
+ * rendering library implement a counter-measure: stem darkening at
+ * smaller sizes where shades of gray dominate. By emboldening a glyph
+ * slightly in relation to its pixel size, individual pixels get higher
+ * coverage of filled-in outlines and are therefore `blacker'. This
+ * counteracts the `thinning out' of glyphs, making text remain readable
+ * at smaller sizes.
+ *
+ * By default, the Adobe engines for CFF, Type~1, and CID fonts darken
+ * stems at smaller sizes, regardless of hinting, to enhance contrast.
+ * Setting this property, stem darkening gets switched off.
+ *
+ * For the auto-hinter, stem-darkening is experimental currently and
+ * thus switched off by default (this is, `no-stem-darkening' is set to
+ * TRUE by default). Total consistency with the CFF driver is not
+ * achieved right now because the emboldening method differs and glyphs
+ * must be scaled down on the Y-axis to keep outline points inside their
+ * precomputed blue zones. The smaller the size (especially 9ppem and
+ * down), the higher the loss of emboldening versus the CFF driver.
+ *
+ * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is
+ * set.
+ *
+ * {
+ * FT_Library library;
+ * FT_Bool no_stem_darkening = TRUE;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "cff",
+ * "no-stem-darkening", &no_stem_darkening );
+ * }
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * This property can be set via the `FREETYPE_PROPERTIES' environment
+ * variable (using values 1 and 0 for `on' and `off', respectively).
+ * It can also be set per face using @FT_Face_Properties with
+ * @FT_PARAM_TAG_STEM_DARKENING.
+ *
+ * @since:
+ * 2.4.12 (for `cff' module)
+ *
+ * 2.6.2 (for `autofitter' module)
+ *
+ * 2.9 (for `type1' and `t1cid' modules)
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * darkening-parameters
+ *
+ * @description:
+ * By default, the Adobe hinting engine, as used by the CFF, Type~1, and
+ * CID font drivers, darkens stems as follows (if the
+ * `no-stem-darkening' property isn't set):
+ *
+ * {
+ * stem width <= 0.5px: darkening amount = 0.4px
+ * stem width = 1px: darkening amount = 0.275px
+ * stem width = 1.667px: darkening amount = 0.275px
+ * stem width >= 2.333px: darkening amount = 0px
+ * }
+ *
+ * and piecewise linear in-between. At configuration time, these four
+ * control points can be set with the macro
+ * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS'; the CFF, Type~1, and CID
+ * drivers share these values. At runtime, the control points can be
+ * changed using the `darkening-parameters' property, as the following
+ * example demonstrates for the Type~1 driver.
+ *
+ * {
+ * FT_Library library;
+ * FT_Int darken_params[8] = { 500, 300, // x1, y1
+ * 1000, 200, // x2, y2
+ * 1500, 100, // x3, y3
+ * 2000, 0 }; // x4, y4
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "type1",
+ * "darkening-parameters", darken_params );
+ * }
+ *
+ * The x~values give the stem width, and the y~values the darkening
+ * amount. The unit is 1000th of pixels. All coordinate values must be
+ * positive; the x~values must be monotonically increasing; the
+ * y~values must be monotonically decreasing and smaller than or
+ * equal to 500 (corresponding to half a pixel); the slope of each
+ * linear piece must be shallower than -1 (e.g., -.4).
+ *
+ * The auto-hinter provides this property, too, as an experimental
+ * feature. See @no-stem-darkening for more.
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * This property can be set via the `FREETYPE_PROPERTIES' environment
+ * variable, using eight comma-separated integers without spaces. Here
+ * the above example, using `\' to break the line for readability.
+ *
+ * {
+ * FREETYPE_PROPERTIES=\
+ * type1:darkening-parameters=500,300,1000,200,1500,100,2000,0
+ * }
+ *
+ * @since:
+ * 2.5.1 (for `cff' module)
+ *
+ * 2.6.2 (for `autofitter' module)
+ *
+ * 2.9 (for `type1' and `t1cid' modules)
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * random-seed
+ *
+ * @description:
+ * By default, the seed value for the CFF `random' operator and the
+ * similar `0 28 callothersubr pop' command for the Type~1 and CID
+ * drivers is set to a random value. However, mainly for debugging
+ * purposes, it is often necessary to use a known value as a seed so
+ * that the pseudo-random number sequences generated by `random' are
+ * repeatable.
+ *
+ * The `random-seed' property does that. Its argument is a signed 32bit
+ * integer; if the value is zero or negative, the seed given by the
+ * `intitialRandomSeed' private DICT operator in a CFF file gets used
+ * (or a default value if there is no such operator). If the value is
+ * positive, use it instead of `initialRandomSeed', which is
+ * consequently ignored.
+ *
+ * @note:
+ * This property can be set via the `FREETYPE_PROPERTIES' environment
+ * variable. It can also be set per face using @FT_Face_Properties with
+ * @FT_PARAM_TAG_RANDOM_SEED.
+ *
+ * @since:
+ * 2.8 (for `cff' module)
+ *
+ * 2.9 (for `type1' and `t1cid' modules)
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * no-long-family-names
+ *
+ * @description:
+ * If PCF_CONFIG_OPTION_LONG_FAMILY_NAMES is active while compiling
+ * FreeType, the PCF driver constructs long family names.
+ *
+ * There are many PCF fonts just called `Fixed' which look completely
+ * different, and which have nothing to do with each other. When
+ * selecting `Fixed' in KDE or Gnome one gets results that appear rather
+ * random, the style changes often if one changes the size and one
+ * cannot select some fonts at all. The improve this situation, the PCF
+ * module prepends the foundry name (plus a space) to the family name.
+ * It also checks whether there are `wide' characters; all put together,
+ * family names like `Sony Fixed' or `Misc Fixed Wide' are constructed.
+ *
+ * If `no-long-family-names' is set, this feature gets switched off.
+ *
+ * {
+ * FT_Library library;
+ * FT_Bool no_long_family_names = TRUE;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "pcf",
+ * "no-long-family-names",
+ * &no_long_family_names );
+ * }
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * This property can be set via the `FREETYPE_PROPERTIES' environment
+ * variable (using values 1 and 0 for `on' and `off', respectively).
+ *
+ * @since:
+ * 2.8
+ */
+
+
+ /**************************************************************************
+ *
+ * @enum:
+ * TT_INTERPRETER_VERSION_XXX
+ *
+ * @description:
+ * A list of constants used for the @interpreter-version property to
+ * select the hinting engine for Truetype fonts.
+ *
+ * The numeric value in the constant names represents the version
+ * number as returned by the `GETINFO' bytecode instruction.
+ *
+ * @values:
+ * TT_INTERPRETER_VERSION_35 ::
+ * Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in
+ * Windows~98; only grayscale and B/W rasterizing is supported.
+ *
+ * TT_INTERPRETER_VERSION_38 ::
+ * Version~38 corresponds to MS rasterizer v.1.9; it is roughly
+ * equivalent to the hinting provided by DirectWrite ClearType (as can
+ * be found, for example, in the Internet Explorer~9 running on
+ * Windows~7). It is used in FreeType to select the `Infinality'
+ * subpixel hinting code. The code may be removed in a future
+ * version.
+ *
+ * TT_INTERPRETER_VERSION_40 ::
+ * Version~40 corresponds to MS rasterizer v.2.1; it is roughly
+ * equivalent to the hinting provided by DirectWrite ClearType (as can
+ * be found, for example, in Microsoft's Edge Browser on Windows~10).
+ * It is used in FreeType to select the `minimal' subpixel hinting
+ * code, a stripped-down and higher performance version of the
+ * `Infinality' code.
+ *
+ * @note:
+ * This property controls the behaviour of the bytecode interpreter
+ * and thus how outlines get hinted. It does *not* control how glyph
+ * get rasterized! In particular, it does not control subpixel color
+ * filtering.
+ *
+ * If FreeType has not been compiled with the configuration option
+ * TT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 or~40 causes
+ * an `FT_Err_Unimplemented_Feature' error.
+ *
+ * Depending on the graphics framework, Microsoft uses different
+ * bytecode and rendering engines. As a consequence, the version
+ * numbers returned by a call to the `GETINFO' bytecode instruction are
+ * more convoluted than desired.
+ *
+ * Here are two tables that try to shed some light on the possible
+ * values for the MS rasterizer engine, together with the additional
+ * features introduced by it.
+ *
+ * {
+ * GETINFO framework version feature
+ * -------------------------------------------------------------------
+ * 3 GDI (Win 3.1), v1.0 16-bit, first version
+ * TrueImage
+ * 33 GDI (Win NT 3.1), v1.5 32-bit
+ * HP Laserjet
+ * 34 GDI (Win 95) v1.6 font smoothing,
+ * new SCANTYPE opcode
+ * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET
+ * bits in composite glyphs
+ * 36 MGDI (Win CE 2) v1.6+ classic ClearType
+ * 37 GDI (XP and later), v1.8 ClearType
+ * GDI+ old (before Vista)
+ * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType,
+ * WPF Y-direction ClearType,
+ * additional error checking
+ * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags
+ * in GETINFO opcode,
+ * bug fixes
+ * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
+ * DWrite (Win 8) in GETINFO opcode,
+ * Gray ClearType
+ * }
+ *
+ * The `version' field gives a rough orientation only, since some
+ * applications provided certain features much earlier (as an example,
+ * Microsoft Reader used subpixel and Y-direction ClearType already in
+ * Windows 2000). Similarly, updates to a given framework might include
+ * improved hinting support.
+ *
+ * {
+ * version sampling rendering comment
+ * x y x y
+ * --------------------------------------------------------------
+ * v1.0 normal normal B/W B/W bi-level
+ * v1.6 high high gray gray grayscale
+ * v1.8 high normal color-filter B/W (GDI) ClearType
+ * v1.9 high high color-filter gray Color ClearType
+ * v2.1 high normal gray B/W Gray ClearType
+ * v2.1 high high gray gray Gray ClearType
+ * }
+ *
+ * Color and Gray ClearType are the two available variants of
+ * `Y-direction ClearType', meaning grayscale rasterization along the
+ * Y-direction; the name used in the TrueType specification for this
+ * feature is `symmetric smoothing'. `Classic ClearType' is the
+ * original algorithm used before introducing a modified version in
+ * Win~XP. Another name for v1.6's grayscale rendering is `font
+ * smoothing', and `Color ClearType' is sometimes also called `DWrite
+ * ClearType'. To differentiate between today's Color ClearType and the
+ * earlier ClearType variant with B/W rendering along the vertical axis,
+ * the latter is sometimes called `GDI ClearType'.
+ *
+ * `Normal' and `high' sampling describe the (virtual) resolution to
+ * access the rasterized outline after the hinting process. `Normal'
+ * means 1 sample per grid line (i.e., B/W). In the current Microsoft
+ * implementation, `high' means an extra virtual resolution of 16x16 (or
+ * 16x1) grid lines per pixel for bytecode instructions like `MIRP'.
+ * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid
+ * lines for color filtering if Color ClearType is activated.
+ *
+ * Note that `Gray ClearType' is essentially the same as v1.6's
+ * grayscale rendering. However, the GETINFO instruction handles it
+ * differently: v1.6 returns bit~12 (hinting for grayscale), while v2.1
+ * returns bits~13 (hinting for ClearType), 18 (symmetrical smoothing),
+ * and~19 (Gray ClearType). Also, this mode respects bits 2 and~3 for
+ * the version~1 gasp table exclusively (like Color ClearType), while
+ * v1.6 only respects the values of version~0 (bits 0 and~1).
+ *
+ * Keep in mind that the features of the above interpreter versions
+ * might not map exactly to FreeType features or behavior because it is
+ * a fundamentally different library with different internals.
+ *
+ */
+#define TT_INTERPRETER_VERSION_35 35
+#define TT_INTERPRETER_VERSION_38 38
+#define TT_INTERPRETER_VERSION_40 40
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * interpreter-version
+ *
+ * @description:
+ * Currently, three versions are available, two representing the
+ * bytecode interpreter with subpixel hinting support (old `Infinality'
+ * code and new stripped-down and higher performance `minimal' code) and
+ * one without, respectively. The default is subpixel support if
+ * TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel support
+ * otherwise (since it isn't available then).
+ *
+ * If subpixel hinting is on, many TrueType bytecode instructions behave
+ * differently compared to B/W or grayscale rendering (except if `native
+ * ClearType' is selected by the font). Microsoft's main idea is to
+ * render at a much increased horizontal resolution, then sampling down
+ * the created output to subpixel precision. However, many older fonts
+ * are not suited to this and must be specially taken care of by
+ * applying (hardcoded) tweaks in Microsoft's interpreter.
+ *
+ * Details on subpixel hinting and some of the necessary tweaks can be
+ * found in Greg Hitchcock's whitepaper at
+ * `https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
+ * Note that FreeType currently doesn't really `subpixel hint' (6x1, 6x2,
+ * or 6x5 supersampling) like discussed in the paper. Depending on the
+ * chosen interpreter, it simply ignores instructions on vertical stems
+ * to arrive at very similar results.
+ *
+ * The following example code demonstrates how to deactivate subpixel
+ * hinting (omitting the error handling).
+ *
+ * {
+ * FT_Library library;
+ * FT_Face face;
+ * FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "truetype",
+ * "interpreter-version",
+ * &interpreter_version );
+ * }
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * This property can be set via the `FREETYPE_PROPERTIES' environment
+ * variable (using values `35', `38', or `40').
+ *
+ * @since:
+ * 2.5
+ */
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * glyph-to-script-map
+ *
+ * @description:
+ * *Experimental* *only*
+ *
+ * The auto-hinter provides various script modules to hint glyphs.
+ * Examples of supported scripts are Latin or CJK. Before a glyph is
+ * auto-hinted, the Unicode character map of the font gets examined, and
+ * the script is then determined based on Unicode character ranges, see
+ * below.
+ *
+ * OpenType fonts, however, often provide much more glyphs than
+ * character codes (small caps, superscripts, ligatures, swashes, etc.),
+ * to be controlled by so-called `features'. Handling OpenType features
+ * can be quite complicated and thus needs a separate library on top of
+ * FreeType.
+ *
+ * The mapping between glyph indices and scripts (in the auto-hinter
+ * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an
+ * array with `num_glyphs' elements, as found in the font's @FT_Face
+ * structure. The `glyph-to-script-map' property returns a pointer to
+ * this array, which can be modified as needed. Note that the
+ * modification should happen before the first glyph gets processed by
+ * the auto-hinter so that the global analysis of the font shapes
+ * actually uses the modified mapping.
+ *
+ * The following example code demonstrates how to access it (omitting
+ * the error handling).
+ *
+ * {
+ * FT_Library library;
+ * FT_Face face;
+ * FT_Prop_GlyphToScriptMap prop;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ * FT_New_Face( library, "foo.ttf", 0, &face );
+ *
+ * prop.face = face;
+ *
+ * FT_Property_Get( library, "autofitter",
+ * "glyph-to-script-map", &prop );
+ *
+ * // adjust `prop.map' as needed right here
+ *
+ * FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
+ * }
+ *
+ * @since:
+ * 2.4.11
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @enum:
+ * FT_AUTOHINTER_SCRIPT_XXX
+ *
+ * @description:
+ * *Experimental* *only*
+ *
+ * A list of constants used for the @glyph-to-script-map property to
+ * specify the script submodule the auto-hinter should use for hinting a
+ * particular glyph.
+ *
+ * @values:
+ * FT_AUTOHINTER_SCRIPT_NONE ::
+ * Don't auto-hint this glyph.
+ *
+ * FT_AUTOHINTER_SCRIPT_LATIN ::
+ * Apply the latin auto-hinter. For the auto-hinter, `latin' is a
+ * very broad term, including Cyrillic and Greek also since characters
+ * from those scripts share the same design constraints.
+ *
+ * By default, characters from the following Unicode ranges are
+ * assigned to this submodule.
+ *
+ * {
+ * U+0020 - U+007F // Basic Latin (no control characters)
+ * U+00A0 - U+00FF // Latin-1 Supplement (no control characters)
+ * U+0100 - U+017F // Latin Extended-A
+ * U+0180 - U+024F // Latin Extended-B
+ * U+0250 - U+02AF // IPA Extensions
+ * U+02B0 - U+02FF // Spacing Modifier Letters
+ * U+0300 - U+036F // Combining Diacritical Marks
+ * U+0370 - U+03FF // Greek and Coptic
+ * U+0400 - U+04FF // Cyrillic
+ * U+0500 - U+052F // Cyrillic Supplement
+ * U+1D00 - U+1D7F // Phonetic Extensions
+ * U+1D80 - U+1DBF // Phonetic Extensions Supplement
+ * U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement
+ * U+1E00 - U+1EFF // Latin Extended Additional
+ * U+1F00 - U+1FFF // Greek Extended
+ * U+2000 - U+206F // General Punctuation
+ * U+2070 - U+209F // Superscripts and Subscripts
+ * U+20A0 - U+20CF // Currency Symbols
+ * U+2150 - U+218F // Number Forms
+ * U+2460 - U+24FF // Enclosed Alphanumerics
+ * U+2C60 - U+2C7F // Latin Extended-C
+ * U+2DE0 - U+2DFF // Cyrillic Extended-A
+ * U+2E00 - U+2E7F // Supplemental Punctuation
+ * U+A640 - U+A69F // Cyrillic Extended-B
+ * U+A720 - U+A7FF // Latin Extended-D
+ * U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures)
+ * U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
+ * U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
+ * }
+ *
+ * FT_AUTOHINTER_SCRIPT_CJK ::
+ * Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
+ * Vietnamese, and some other scripts.
+ *
+ * By default, characters from the following Unicode ranges are
+ * assigned to this submodule.
+ *
+ * {
+ * U+1100 - U+11FF // Hangul Jamo
+ * U+2E80 - U+2EFF // CJK Radicals Supplement
+ * U+2F00 - U+2FDF // Kangxi Radicals
+ * U+2FF0 - U+2FFF // Ideographic Description Characters
+ * U+3000 - U+303F // CJK Symbols and Punctuation
+ * U+3040 - U+309F // Hiragana
+ * U+30A0 - U+30FF // Katakana
+ * U+3100 - U+312F // Bopomofo
+ * U+3130 - U+318F // Hangul Compatibility Jamo
+ * U+3190 - U+319F // Kanbun
+ * U+31A0 - U+31BF // Bopomofo Extended
+ * U+31C0 - U+31EF // CJK Strokes
+ * U+31F0 - U+31FF // Katakana Phonetic Extensions
+ * U+3200 - U+32FF // Enclosed CJK Letters and Months
+ * U+3300 - U+33FF // CJK Compatibility
+ * U+3400 - U+4DBF // CJK Unified Ideographs Extension A
+ * U+4DC0 - U+4DFF // Yijing Hexagram Symbols
+ * U+4E00 - U+9FFF // CJK Unified Ideographs
+ * U+A960 - U+A97F // Hangul Jamo Extended-A
+ * U+AC00 - U+D7AF // Hangul Syllables
+ * U+D7B0 - U+D7FF // Hangul Jamo Extended-B
+ * U+F900 - U+FAFF // CJK Compatibility Ideographs
+ * U+FE10 - U+FE1F // Vertical forms
+ * U+FE30 - U+FE4F // CJK Compatibility Forms
+ * U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms
+ * U+1B000 - U+1B0FF // Kana Supplement
+ * U+1D300 - U+1D35F // Tai Xuan Hing Symbols
+ * U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
+ * U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
+ * U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
+ * U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
+ * U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
+ * }
+ *
+ * FT_AUTOHINTER_SCRIPT_INDIC ::
+ * Apply the indic auto-hinter, covering all major scripts from the
+ * Indian sub-continent and some other related scripts like Thai, Lao,
+ * or Tibetan.
+ *
+ * By default, characters from the following Unicode ranges are
+ * assigned to this submodule.
+ *
+ * {
+ * U+0900 - U+0DFF // Indic Range
+ * U+0F00 - U+0FFF // Tibetan
+ * U+1900 - U+194F // Limbu
+ * U+1B80 - U+1BBF // Sundanese
+ * U+A800 - U+A82F // Syloti Nagri
+ * U+ABC0 - U+ABFF // Meetei Mayek
+ * U+11800 - U+118DF // Sharada
+ * }
+ *
+ * Note that currently Indic support is rudimentary only, missing blue
+ * zone support.
+ *
+ * @since:
+ * 2.4.11
+ *
+ */
+#define FT_AUTOHINTER_SCRIPT_NONE 0
+#define FT_AUTOHINTER_SCRIPT_LATIN 1
+#define FT_AUTOHINTER_SCRIPT_CJK 2
+#define FT_AUTOHINTER_SCRIPT_INDIC 3
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Prop_GlyphToScriptMap
+ *
+ * @description:
+ * *Experimental* *only*
+ *
+ * The data exchange structure for the @glyph-to-script-map property.
+ *
+ * @since:
+ * 2.4.11
+ *
+ */
+ typedef struct FT_Prop_GlyphToScriptMap_
+ {
+ FT_Face face;
+ FT_UShort* map;
+
+ } FT_Prop_GlyphToScriptMap;
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * fallback-script
+ *
+ * @description:
+ * *Experimental* *only*
+ *
+ * If no auto-hinter script module can be assigned to a glyph, a
+ * fallback script gets assigned to it (see also the
+ * @glyph-to-script-map property). By default, this is
+ * @FT_AUTOHINTER_SCRIPT_CJK. Using the `fallback-script' property,
+ * this fallback value can be changed.
+ *
+ * {
+ * FT_Library library;
+ * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "autofitter",
+ * "fallback-script", &fallback_script );
+ * }
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * It's important to use the right timing for changing this value: The
+ * creation of the glyph-to-script map that eventually uses the
+ * fallback script value gets triggered either by setting or reading a
+ * face-specific property like @glyph-to-script-map, or by auto-hinting
+ * any glyph from that face. In particular, if you have already created
+ * an @FT_Face structure but not loaded any glyph (using the
+ * auto-hinter), a change of the fallback script will affect this face.
+ *
+ * @since:
+ * 2.4.11
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * default-script
+ *
+ * @description:
+ * *Experimental* *only*
+ *
+ * If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make
+ * the HarfBuzz library access OpenType features for getting better
+ * glyph coverages, this property sets the (auto-fitter) script to be
+ * used for the default (OpenType) script data of a font's GSUB table.
+ * Features for the default script are intended for all scripts not
+ * explicitly handled in GSUB; an example is a `dlig' feature,
+ * containing the combination of the characters `T', `E', and `L' to
+ * form a `TEL' ligature.
+ *
+ * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the
+ * `default-script' property, this default value can be changed.
+ *
+ * {
+ * FT_Library library;
+ * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "autofitter",
+ * "default-script", &default_script );
+ * }
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * It's important to use the right timing for changing this value: The
+ * creation of the glyph-to-script map that eventually uses the
+ * default script value gets triggered either by setting or reading a
+ * face-specific property like @glyph-to-script-map, or by auto-hinting
+ * any glyph from that face. In particular, if you have already created
+ * an @FT_Face structure but not loaded any glyph (using the
+ * auto-hinter), a change of the default script will affect this face.
+ *
+ * @since:
+ * 2.5.3
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * increase-x-height
+ *
+ * @description:
+ * For ppem values in the range 6~<= ppem <= `increase-x-height', round
+ * up the font's x~height much more often than normally. If the value
+ * is set to~0, which is the default, this feature is switched off. Use
+ * this property to improve the legibility of small font sizes if
+ * necessary.
+ *
+ * {
+ * FT_Library library;
+ * FT_Face face;
+ * FT_Prop_IncreaseXHeight prop;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ * FT_New_Face( library, "foo.ttf", 0, &face );
+ * FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
+ *
+ * prop.face = face;
+ * prop.limit = 14;
+ *
+ * FT_Property_Set( library, "autofitter",
+ * "increase-x-height", &prop );
+ * }
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * Set this value right after calling @FT_Set_Char_Size, but before
+ * loading any glyph (using the auto-hinter).
+ *
+ * @since:
+ * 2.4.11
+ *
+ */
+
+
+ /**************************************************************************
+ *
+ * @struct:
+ * FT_Prop_IncreaseXHeight
+ *
+ * @description:
+ * The data exchange structure for the @increase-x-height property.
+ *
+ */
+ typedef struct FT_Prop_IncreaseXHeight_
+ {
+ FT_Face face;
+ FT_UInt limit;
+
+ } FT_Prop_IncreaseXHeight;
+
+
+ /**************************************************************************
+ *
+ * @property:
+ * warping
+ *
+ * @description:
+ * *Experimental* *only*
+ *
+ * If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to
+ * activate the warp hinting code in the auto-hinter, this property
+ * switches warping on and off.
+ *
+ * Warping only works in `normal' auto-hinting mode replacing it.
+ * The idea of the code is to slightly scale and shift a glyph along
+ * the non-hinted dimension (which is usually the horizontal axis) so
+ * that as much of its segments are aligned (more or less) to the grid.
+ * To find out a glyph's optimal scaling and shifting value, various
+ * parameter combinations are tried and scored.
+ *
+ * By default, warping is off. The example below shows how to switch on
+ * warping (omitting the error handling).
+ *
+ * {
+ * FT_Library library;
+ * FT_Bool warping = 1;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "autofitter",
+ * "warping", &warping );
+ * }
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * This property can be set via the `FREETYPE_PROPERTIES' environment
+ * variable (using values 1 and 0 for `on' and `off', respectively).
+ *
+ * The warping code can also change advance widths. Have a look at the
+ * `lsb_delta' and `rsb_delta' fields in the @FT_GlyphSlotRec structure
+ * for details on improving inter-glyph distances while rendering.
+ *
+ * Since warping is a global property of the auto-hinter it is best to
+ * change its value before rendering any face. Otherwise, you should
+ * reload all faces that get auto-hinted in `normal' hinting mode.
+ *
+ * @since:
+ * 2.6
+ *
+ */
+
+
+ /* */
+
+
+FT_END_HEADER
+
+
+#endif /* FTDRIVER_H_ */
+
+
+/* END */
diff --git a/include/fterrdef.h b/include/freetype/fterrdef.h
similarity index 80%
rename from include/fterrdef.h
rename to include/freetype/fterrdef.h
index 1bf0751..8ffd346 100644
--- a/include/fterrdef.h
+++ b/include/freetype/fterrdef.h
@@ -4,7 +4,7 @@
/* */
/* FreeType error codes (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,18 +16,43 @@
/***************************************************************************/
- /*******************************************************************/
- /*******************************************************************/
- /***** *****/
- /***** LIST OF ERROR CODES/MESSAGES *****/
- /***** *****/
- /*******************************************************************/
- /*******************************************************************/
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* error_code_values */
+ /* */
+ /* <Title> */
+ /* Error Code Values */
+ /* */
+ /* <Abstract> */
+ /* All possible error codes returned by FreeType functions. */
+ /* */
+ /* <Description> */
+ /* The list below is taken verbatim from the file `fterrdef.h' */
+ /* (loaded automatically by including `FT_FREETYPE_H'). The first */
+ /* argument of the `FT_ERROR_DEF_' macro is the error label; by */
+ /* default, the prefix `FT_Err_' gets added so that you get error */
+ /* names like `FT_Err_Cannot_Open_Resource'. The second argument is */
+ /* the error code, and the last argument an error string, which is not */
+ /* used by FreeType. */
+ /* */
+ /* Within your application you should *only* use error names and */
+ /* *never* its numeric values! The latter might (and actually do) */
+ /* change in forthcoming FreeType versions. */
+ /* */
+ /* Macro `FT_NOERRORDEF_' defines `FT_Err_Ok', which is always zero. */
+ /* See the `Error Enumerations' subsection how to automatically */
+ /* generate a list of error strings. */
+ /* */
+ /*************************************************************************/
- /* You need to define both FT_ERRORDEF_ and FT_NOERRORDEF_ before */
- /* including this file. */
-
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_Err_XXX */
+ /* */
+ /*************************************************************************/
/* generic errors */
@@ -206,6 +231,10 @@
"invalid PostScript (post) table format" )
FT_ERRORDEF_( Invalid_Post_Table, 0x9B,
"invalid PostScript (post) table" )
+ FT_ERRORDEF_( DEF_In_Glyf_Bytecode, 0x9C,
+ "found FDEF or IDEF opcode in glyf bytecode" )
+ FT_ERRORDEF_( Missing_Bitmap, 0x9D,
+ "missing bitmap in strike" )
/* CFF, CID, and Type 1 errors */
@@ -218,7 +247,7 @@
FT_ERRORDEF_( No_Unicode_Glyph_Name, 0xA3,
"no Unicode glyph name found" )
FT_ERRORDEF_( Glyph_Too_Big, 0xA4,
- "glyph to big for hinting" )
+ "glyph too big for hinting" )
/* BDF errors */
@@ -245,5 +274,7 @@
FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xBA,
"Font glyphs corrupted or missing fields" )
+ /* */
+
/* END */
diff --git a/include/freetype/fterrors.h b/include/freetype/fterrors.h
new file mode 100644
index 0000000..f6ee5c2
--- /dev/null
+++ b/include/freetype/fterrors.h
@@ -0,0 +1,226 @@
+/***************************************************************************/
+/* */
+/* fterrors.h */
+/* */
+/* FreeType error code handling (specification). */
+/* */
+/* Copyright 1996-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* error_enumerations */
+ /* */
+ /* <Title> */
+ /* Error Enumerations */
+ /* */
+ /* <Abstract> */
+ /* How to handle errors and error strings. */
+ /* */
+ /* <Description> */
+ /* The header file `fterrors.h' (which is automatically included by */
+ /* `freetype.h' defines the handling of FreeType's enumeration */
+ /* constants. It can also be used to generate error message strings */
+ /* with a small macro trick explained below. */
+ /* */
+ /* *Error* *Formats* */
+ /* */
+ /* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */
+ /* defined in `ftoption.h' in order to make the higher byte indicate */
+ /* the module where the error has happened (this is not compatible */
+ /* with standard builds of FreeType~2, however). See the file */
+ /* `ftmoderr.h' for more details. */
+ /* */
+ /* *Error* *Message* *Strings* */
+ /* */
+ /* Error definitions are set up with special macros that allow client */
+ /* applications to build a table of error message strings. The */
+ /* strings are not included in a normal build of FreeType~2 to save */
+ /* space (most client applications do not use them). */
+ /* */
+ /* To do so, you have to define the following macros before including */
+ /* this file. */
+ /* */
+ /* { */
+ /* FT_ERROR_START_LIST */
+ /* } */
+ /* */
+ /* This macro is called before anything else to define the start of */
+ /* the error list. It is followed by several FT_ERROR_DEF calls. */
+ /* */
+ /* { */
+ /* FT_ERROR_DEF( e, v, s ) */
+ /* } */
+ /* */
+ /* This macro is called to define one single error. `e' is the error */
+ /* code identifier (e.g., `Invalid_Argument'), `v' is the error's */
+ /* numerical value, and `s' is the corresponding error string. */
+ /* */
+ /* { */
+ /* FT_ERROR_END_LIST */
+ /* } */
+ /* */
+ /* This macro ends the list. */
+ /* */
+ /* Additionally, you have to undefine `FTERRORS_H_' before #including */
+ /* this file. */
+ /* */
+ /* Here is a simple example. */
+ /* */
+ /* { */
+ /* #undef FTERRORS_H_ */
+ /* #define FT_ERRORDEF( e, v, s ) { e, s }, */
+ /* #define FT_ERROR_START_LIST { */
+ /* #define FT_ERROR_END_LIST { 0, NULL } }; */
+ /* */
+ /* const struct */
+ /* { */
+ /* int err_code; */
+ /* const char* err_msg; */
+ /* } ft_errors[] = */
+ /* */
+ /* #include FT_ERRORS_H */
+ /* } */
+ /* */
+ /* Note that `FT_Err_Ok' is _not_ defined with `FT_ERRORDEF' but with */
+ /* `FT_NOERRORDEF'; it is always zero. */
+ /* */
+ /*************************************************************************/
+
+ /* */
+
+ /* In previous FreeType versions we used `__FTERRORS_H__'. However, */
+ /* using two successive underscores in a non-system symbol name */
+ /* violates the C (and C++) standard, so it was changed to the */
+ /* current form. In spite of this, we have to make */
+ /* */
+ /* #undefine __FTERRORS_H__ */
+ /* */
+ /* work for backward compatibility. */
+ /* */
+#if !( defined( FTERRORS_H_ ) && defined ( __FTERRORS_H__ ) )
+#define FTERRORS_H_
+#define __FTERRORS_H__
+
+
+ /* include module base error codes */
+#include FT_MODULE_ERRORS_H
+
+
+ /*******************************************************************/
+ /*******************************************************************/
+ /***** *****/
+ /***** SETUP MACROS *****/
+ /***** *****/
+ /*******************************************************************/
+ /*******************************************************************/
+
+
+#undef FT_NEED_EXTERN_C
+
+
+ /* FT_ERR_PREFIX is used as a prefix for error identifiers. */
+ /* By default, we use `FT_Err_'. */
+ /* */
+#ifndef FT_ERR_PREFIX
+#define FT_ERR_PREFIX FT_Err_
+#endif
+
+
+ /* FT_ERR_BASE is used as the base for module-specific errors. */
+ /* */
+#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
+
+#ifndef FT_ERR_BASE
+#define FT_ERR_BASE FT_Mod_Err_Base
+#endif
+
+#else
+
+#undef FT_ERR_BASE
+#define FT_ERR_BASE 0
+
+#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */
+
+
+ /* If FT_ERRORDEF is not defined, we need to define a simple */
+ /* enumeration type. */
+ /* */
+#ifndef FT_ERRORDEF
+
+#define FT_ERRORDEF( e, v, s ) e = v,
+#define FT_ERROR_START_LIST enum {
+#define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) };
+
+#ifdef __cplusplus
+#define FT_NEED_EXTERN_C
+ extern "C" {
+#endif
+
+#endif /* !FT_ERRORDEF */
+
+
+ /* this macro is used to define an error */
+#define FT_ERRORDEF_( e, v, s ) \
+ FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s )
+
+ /* this is only used for <module>_Err_Ok, which must be 0! */
+#define FT_NOERRORDEF_( e, v, s ) \
+ FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s )
+
+
+#ifdef FT_ERROR_START_LIST
+ FT_ERROR_START_LIST
+#endif
+
+
+ /* now include the error codes */
+#include FT_ERROR_DEFINITIONS_H
+
+
+#ifdef FT_ERROR_END_LIST
+ FT_ERROR_END_LIST
+#endif
+
+
+ /*******************************************************************/
+ /*******************************************************************/
+ /***** *****/
+ /***** SIMPLE CLEANUP *****/
+ /***** *****/
+ /*******************************************************************/
+ /*******************************************************************/
+
+#ifdef FT_NEED_EXTERN_C
+ }
+#endif
+
+#undef FT_ERROR_START_LIST
+#undef FT_ERROR_END_LIST
+
+#undef FT_ERRORDEF
+#undef FT_ERRORDEF_
+#undef FT_NOERRORDEF_
+
+#undef FT_NEED_EXTERN_C
+#undef FT_ERR_BASE
+
+ /* FT_ERR_PREFIX is needed internally */
+#ifndef FT2_BUILD_LIBRARY
+#undef FT_ERR_PREFIX
+#endif
+
+#endif /* !(FTERRORS_H_ && __FTERRORS_H__) */
+
+
+/* END */
diff --git a/include/ftfntfmt.h b/include/freetype/ftfntfmt.h
similarity index 96%
rename from include/ftfntfmt.h
rename to include/freetype/ftfntfmt.h
index 1f8ff28..cc86efa 100644
--- a/include/ftfntfmt.h
+++ b/include/freetype/ftfntfmt.h
@@ -4,7 +4,7 @@
/* */
/* Support functions for font formats. */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTFNTFMT_H__
-#define __FTFNTFMT_H__
+#ifndef FTFNTFMT_H_
+#define FTFNTFMT_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -89,4 +89,7 @@
FT_END_HEADER
-#endif /* __FTFNTFMT_H__ */
+#endif /* FTFNTFMT_H_ */
+
+
+/* END */
diff --git a/include/ftgasp.h b/include/freetype/ftgasp.h
similarity index 86%
rename from include/ftgasp.h
rename to include/freetype/ftgasp.h
index 9a9b632..fc1248f 100644
--- a/include/ftgasp.h
+++ b/include/freetype/ftgasp.h
@@ -4,7 +4,7 @@
/* */
/* Access of TrueType's `gasp' table (specification). */
/* */
-/* Copyright 2007-2015 by */
+/* Copyright 2007-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef _FT_GASP_H_
-#define _FT_GASP_H_
+#ifndef FTGASP_H_
+#define FTGASP_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -29,6 +29,9 @@
#endif
+FT_BEGIN_HEADER
+
+
/***************************************************************************
*
* @section:
@@ -92,8 +95,8 @@
#define FT_GASP_NO_TABLE -1
#define FT_GASP_DO_GRIDFIT 0x01
#define FT_GASP_DO_GRAY 0x02
+#define FT_GASP_SYMMETRIC_GRIDFIT 0x04
#define FT_GASP_SYMMETRIC_SMOOTHING 0x08
-#define FT_GASP_SYMMETRIC_GRIDFIT 0x10
/*************************************************************************
@@ -102,17 +105,25 @@
* FT_Get_Gasp
*
* @description:
- * Read the `gasp' table from a TrueType or OpenType font file and
- * return the entry corresponding to a given character pixel size.
+ * For a TrueType or OpenType font file, return the rasterizer behaviour
+ * flags from the font's `gasp' table corresponding to a given
+ * character pixel size.
*
* @input:
* face :: The source face handle.
+ *
* ppem :: The vertical character pixel size.
*
* @return:
* Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no
* `gasp' table in the face.
*
+ * @note:
+ * If you want to use the MM functionality of OpenType variation fonts
+ * (i.e., using @FT_Set_Var_Design_Coordinates and friends), call this
+ * function *after* setting an instance since the return values can
+ * change.
+ *
* @since:
* 2.3.0
*/
@@ -123,7 +134,9 @@
/* */
-#endif /* _FT_GASP_H_ */
+FT_END_HEADER
+
+#endif /* FTGASP_H_ */
/* END */
diff --git a/include/ftglyph.h b/include/freetype/ftglyph.h
similarity index 97%
rename from include/ftglyph.h
rename to include/freetype/ftglyph.h
index 803ad39..5f3fc00 100644
--- a/include/ftglyph.h
+++ b/include/freetype/ftglyph.h
@@ -4,7 +4,7 @@
/* */
/* FreeType convenience functions to handle glyphs (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -29,8 +29,8 @@
/*************************************************************************/
-#ifndef __FTGLYPH_H__
-#define __FTGLYPH_H__
+#ifndef FTGLYPH_H_
+#define FTGLYPH_H_
#include <ft2build.h>
@@ -231,6 +231,12 @@
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
+ /* <Note> */
+ /* Because `*aglyph->advance.x' and '*aglyph->advance.y' are 16.16 */
+ /* fixed-point numbers, `slot->advance.x' and `slot->advance.y' */
+ /* (which are in 26.6 fixed-point format) must be in the range */
+ /* ]-32768;32768[. */
+ /* */
FT_EXPORT( FT_Error )
FT_Get_Glyph( FT_GlyphSlot slot,
FT_Glyph *aglyph );
@@ -341,10 +347,10 @@
/* */
/* <Description> */
/* Return a glyph's `control box'. The control box encloses all the */
- /* outline's points, including Bézier control points. Though it */
+ /* outline's points, including Bezier control points. Though it */
/* coincides with the exact bounding box for most glyphs, it can be */
/* slightly larger in some situations (like when rotating an outline */
- /* that contains Bézier outside arcs). */
+ /* that contains Bezier outside arcs). */
/* */
/* Computing the control box is very fast, while getting the bounding */
/* box can take much more time as it needs to walk over all segments */
@@ -453,7 +459,7 @@
/* */
/* */
/* // load glyph */
- /* error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT ); */
+ /* error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT ); */
/* */
/* // extract glyph image */
/* error = FT_Get_Glyph( face->glyph, &glyph ); */
@@ -566,6 +572,9 @@
/* <Note> */
/* The result is undefined if either `a' or `b' is zero. */
/* */
+ /* Since the function uses wrap-around arithmetic, results become */
+ /* meaningless if the arguments are very large. */
+ /* */
FT_EXPORT( void )
FT_Matrix_Multiply( const FT_Matrix* a,
FT_Matrix* b );
@@ -594,7 +603,7 @@
FT_END_HEADER
-#endif /* __FTGLYPH_H__ */
+#endif /* FTGLYPH_H_ */
/* END */
diff --git a/include/ftgxval.h b/include/freetype/ftgxval.h
similarity index 97%
rename from include/ftgxval.h
rename to include/freetype/ftgxval.h
index 0e9ac1d..8382d59 100644
--- a/include/ftgxval.h
+++ b/include/freetype/ftgxval.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* Masatake YAMATO, Redhat K.K, */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -25,8 +25,8 @@
/***************************************************************************/
-#ifndef __FTGXVAL_H__
-#define __FTGXVAL_H__
+#ifndef FTGXVAL_H_
+#define FTGXVAL_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -101,15 +101,15 @@
* The number of tables checked in this module. Use it as a parameter
* for the `table-length' argument of function @FT_TrueTypeGX_Validate.
*/
-#define FT_VALIDATE_GX_LENGTH (FT_VALIDATE_GX_LAST_INDEX + 1)
+#define FT_VALIDATE_GX_LENGTH ( FT_VALIDATE_GX_LAST_INDEX + 1 )
/* */
/* Up to 0x1000 is used by otvalid.
Ox2xxx is reserved for feature OT extension. */
-#define FT_VALIDATE_GX_START 0x4000
-#define FT_VALIDATE_GX_BITFIELD( tag ) \
- ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
+#define FT_VALIDATE_GX_START 0x4000
+#define FT_VALIDATE_GX_BITFIELD( tag ) \
+ ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
/**********************************************************************
@@ -351,7 +351,7 @@
FT_END_HEADER
-#endif /* __FTGXVAL_H__ */
+#endif /* FTGXVAL_H_ */
/* END */
diff --git a/include/ftgzip.h b/include/freetype/ftgzip.h
similarity index 91%
rename from include/ftgzip.h
rename to include/freetype/ftgzip.h
index b3a532d..db033da 100644
--- a/include/ftgzip.h
+++ b/include/freetype/ftgzip.h
@@ -4,7 +4,7 @@
/* */
/* Gzip-compressed stream support. */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTGZIP_H__
-#define __FTGZIP_H__
+#ifndef FTGZIP_H_
+#define FTGZIP_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -117,11 +117,11 @@
*
* @inout:
* output_len ::
- * Before calling the function, this is the the total size of the
- * output buffer, which must be large enough to hold the entire
- * uncompressed data (so the size of the uncompressed data must be
- * known in advance). After calling the function, `output_len' is the
- * size of the used data in `output'.
+ * Before calling the function, this is the total size of the output
+ * buffer, which must be large enough to hold the entire uncompressed
+ * data (so the size of the uncompressed data must be known in
+ * advance). After calling the function, `output_len' is the size of
+ * the used data in `output'.
*
* @return:
* FreeType error code. 0~means success.
@@ -129,6 +129,9 @@
* @note:
* This function may return `FT_Err_Unimplemented_Feature' if your build
* of FreeType was not compiled with zlib support.
+ *
+ * @since:
+ * 2.5.1
*/
FT_EXPORT( FT_Error )
FT_Gzip_Uncompress( FT_Memory memory,
@@ -142,7 +145,7 @@
FT_END_HEADER
-#endif /* __FTGZIP_H__ */
+#endif /* FTGZIP_H_ */
/* END */
diff --git a/include/ftimage.h b/include/freetype/ftimage.h
similarity index 95%
rename from include/ftimage.h
rename to include/freetype/ftimage.h
index 82f284c..79ede19 100644
--- a/include/ftimage.h
+++ b/include/freetype/ftimage.h
@@ -5,7 +5,7 @@
/* FreeType glyph image formats and default raster interface */
/* (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -24,12 +24,12 @@
/*************************************************************************/
-#ifndef __FTIMAGE_H__
-#define __FTIMAGE_H__
+#ifndef FTIMAGE_H_
+#define FTIMAGE_H_
- /* _STANDALONE_ is from ftgrays.c */
-#ifndef _STANDALONE_
+ /* STANDALONE_ is from ftgrays.c */
+#ifndef STANDALONE_
#include <ft2build.h>
#endif
@@ -169,13 +169,13 @@
/* @FT_RENDER_MODE_LCD_V. */
/* */
/* FT_PIXEL_MODE_BGRA :: */
- /* An image with four 8-bit channels per pixel, representing a */
- /* color image (such as emoticons) with alpha channel. For each */
- /* pixel, the format is BGRA, which means, the blue channel comes */
- /* first in memory. The color channels are pre-multiplied and in */
- /* the sRGB colorspace. For example, full red at half-translucent */
- /* opacity will be represented as `00,00,80,80', not `00,00,FF,80'. */
- /* See also @FT_LOAD_COLOR. */
+ /* [Since 2.5] An image with four 8-bit channels per pixel, */
+ /* representing a color image (such as emoticons) with alpha */
+ /* channel. For each pixel, the format is BGRA, which means, the */
+ /* blue channel comes first in memory. The color channels are */
+ /* pre-multiplied and in the sRGB colorspace. For example, full */
+ /* red at half-translucent opacity will be represented as */
+ /* `00,00,80,80', not `00,00,FF,80'. See also @FT_LOAD_COLOR. */
/* */
typedef enum FT_Pixel_Mode_
{
@@ -301,11 +301,11 @@
/* each outline point's type. */
/* */
/* If bit~0 is unset, the point is `off' the curve, */
- /* i.e., a Bézier control point, while it is `on' if */
+ /* i.e., a Bezier control point, while it is `on' if */
/* set. */
/* */
/* Bit~1 is meaningful for `off' points only. If set, */
- /* it indicates a third-order Bézier arc control point; */
+ /* it indicates a third-order Bezier arc control point; */
/* and a second-order control point if unset. */
/* */
/* If bit~2 is set, bits 5-7 contain the drop-out mode */
@@ -532,7 +532,7 @@
/* A function pointer type used to describe the signature of a `conic */
/* to' function during outline walking or decomposition. */
/* */
- /* A `conic to' is emitted to indicate a second-order Bézier arc in */
+ /* A `conic to' is emitted to indicate a second-order Bezier arc in */
/* the outline. */
/* */
/* <Input> */
@@ -564,12 +564,12 @@
/* A function pointer type used to describe the signature of a `cubic */
/* to' function during outline walking or decomposition. */
/* */
- /* A `cubic to' is emitted to indicate a third-order Bézier arc. */
+ /* A `cubic to' is emitted to indicate a third-order Bezier arc. */
/* */
/* <Input> */
- /* control1 :: A pointer to the first Bézier control point. */
+ /* control1 :: A pointer to the first Bezier control point. */
/* */
- /* control2 :: A pointer to the second Bézier control point. */
+ /* control2 :: A pointer to the second Bezier control point. */
/* */
/* to :: A pointer to the target end point. */
/* */
@@ -595,16 +595,16 @@
/* */
/* <Description> */
/* A structure to hold various function pointers used during outline */
- /* decomposition in order to emit segments, conic, and cubic Béziers. */
+ /* decomposition in order to emit segments, conic, and cubic Beziers. */
/* */
/* <Fields> */
/* move_to :: The `move to' emitter. */
/* */
/* line_to :: The segment emitter. */
/* */
- /* conic_to :: The second-order Bézier arc emitter. */
+ /* conic_to :: The second-order Bezier arc emitter. */
/* */
- /* cubic_to :: The third-order Bézier arc emitter. */
+ /* cubic_to :: The third-order Bezier arc emitter. */
/* */
/* shift :: The shift that is applied to coordinates before they */
/* are sent to the emitter. */
@@ -619,7 +619,7 @@
/* */
/* { */
/* x' = (x << shift) - delta */
- /* y' = (x << shift) - delta */
+ /* y' = (y << shift) - delta */
/* } */
/* */
/* Set the values of `shift' and `delta' to~0 to get the original */
@@ -701,7 +701,7 @@
/* */
/* FT_GLYPH_FORMAT_OUTLINE :: */
/* The glyph image is a vectorial outline made of line segments */
- /* and Bézier arcs; it can be described as an @FT_Outline; you */
+ /* and Bezier arcs; it can be described as an @FT_Outline; you */
/* generally want to access the `outline' field of the */
/* @FT_GlyphSlotRec structure to read it. */
/* */
@@ -747,7 +747,7 @@
/*************************************************************************/
/* */
/* A raster is a scan converter, in charge of rendering an outline into */
- /* a a bitmap. This section contains the public API for rasters. */
+ /* a bitmap. This section contains the public API for rasters. */
/* */
/* Note that in FreeType 2, all rasters are now encapsulated within */
/* specific modules called `renderers'. See `ftrender.h' for more */
@@ -860,16 +860,6 @@
/* This can be used to write anti-aliased outlines directly to a */
/* given background bitmap, and even perform translucency. */
/* */
- /* Note that the `count' field cannot be greater than a fixed value */
- /* defined by the `FT_MAX_GRAY_SPANS' configuration macro in */
- /* `ftoption.h'. By default, this value is set to~32, which means */
- /* that if there are more than 32~spans on a given scanline, the */
- /* callback is called several times with the same `y' parameter in */
- /* order to draw all callbacks. */
- /* */
- /* Otherwise, the callback is only called once per scan-line, and */
- /* only for those scanlines that do have `gray' pixels on them. */
- /* */
typedef void
(*FT_SpanFunc)( int y,
int count,
@@ -1074,24 +1064,24 @@
/* */
/* <Description> */
/* FreeType used to provide an area of memory called the `render */
- /* pool' available to all registered rasters. This was not thread */
- /* safe however and now FreeType never allocates this pool. NULL */
- /* is always passed in as pool_base. */
+ /* pool' available to all registered rasterizers. This was not */
+ /* thread safe, however, and now FreeType never allocates this pool. */
/* */
- /* This function is called each time the render pool changes, or just */
- /* after a new raster object is created. */
+ /* This function is called after a new raster object is created. */
/* */
/* <Input> */
/* raster :: A handle to the new raster object. */
/* */
- /* pool_base :: The address in memory of the render pool. */
+ /* pool_base :: Previously, the address in memory of the render pool. */
+ /* Set this to NULL. */
/* */
- /* pool_size :: The size in bytes of the render pool. */
+ /* pool_size :: Previously, the size in bytes of the render pool. */
+ /* Set this to 0. */
/* */
/* <Note> */
- /* Rasters should ignore the render pool and rely on dynamic or stack */
- /* allocation if they want to (a handle to the memory allocator is */
- /* passed to the raster constructor). */
+ /* Rasterizers should rely on dynamic or stack allocation if they */
+ /* want to (a handle to the memory allocator is passed to the */
+ /* rasterizer constructor). */
/* */
typedef void
(*FT_Raster_ResetFunc)( FT_Raster raster,
@@ -1190,6 +1180,7 @@
typedef struct FT_Raster_Funcs_
{
FT_Glyph_Format glyph_format;
+
FT_Raster_NewFunc raster_new;
FT_Raster_ResetFunc raster_reset;
FT_Raster_SetModeFunc raster_set_mode;
@@ -1203,7 +1194,7 @@
FT_END_HEADER
-#endif /* __FTIMAGE_H__ */
+#endif /* FTIMAGE_H_ */
/* END */
diff --git a/include/ftincrem.h b/include/freetype/ftincrem.h
similarity index 95%
rename from include/ftincrem.h
rename to include/freetype/ftincrem.h
index 840af25..44619f9 100644
--- a/include/ftincrem.h
+++ b/include/freetype/ftincrem.h
@@ -4,7 +4,7 @@
/* */
/* FreeType incremental loading (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,11 +16,12 @@
/***************************************************************************/
-#ifndef __FTINCREM_H__
-#define __FTINCREM_H__
+#ifndef FTINCREM_H_
+#define FTINCREM_H_
#include <ft2build.h>
#include FT_FREETYPE_H
+#include FT_PARAMETER_TAGS_H
#ifdef FREETYPE_H
#error "freetype.h of FreeType 1 has been loaded!"
@@ -331,24 +332,12 @@
typedef FT_Incremental_InterfaceRec* FT_Incremental_Interface;
- /***************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_INCREMENTAL
- *
- * @description:
- * A constant used as the tag of @FT_Parameter structures to indicate
- * an incremental loading object to be used by FreeType.
- *
- */
-#define FT_PARAM_TAG_INCREMENTAL FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
-
/* */
FT_END_HEADER
-#endif /* __FTINCREM_H__ */
+#endif /* FTINCREM_H_ */
/* END */
diff --git a/include/freetype/ftlcdfil.h b/include/freetype/ftlcdfil.h
new file mode 100644
index 0000000..2a27196
--- /dev/null
+++ b/include/freetype/ftlcdfil.h
@@ -0,0 +1,309 @@
+/***************************************************************************/
+/* */
+/* ftlcdfil.h */
+/* */
+/* FreeType API for color filtering of subpixel bitmap glyphs */
+/* (specification). */
+/* */
+/* Copyright 2006-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef FTLCDFIL_H_
+#define FTLCDFIL_H_
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_PARAMETER_TAGS_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+ /***************************************************************************
+ *
+ * @section:
+ * lcd_filtering
+ *
+ * @title:
+ * LCD Filtering
+ *
+ * @abstract:
+ * Reduce color fringes of subpixel-rendered bitmaps.
+ *
+ * @description:
+ * Should you #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your
+ * `ftoption.h', which enables patented ClearType-style rendering,
+ * the LCD-optimized glyph bitmaps should be filtered to reduce color
+ * fringes inherent to this technology. The default FreeType LCD
+ * rendering uses different technology, and API described below,
+ * although available, does nothing.
+ *
+ * ClearType-style LCD rendering exploits the color-striped structure of
+ * LCD pixels, increasing the available resolution in the direction of
+ * the stripe (usually horizontal RGB) by a factor of~3. Since these
+ * subpixels are color pixels, using them unfiltered creates severe
+ * color fringes. Use the @FT_Library_SetLcdFilter API to specify a
+ * low-pass filter, which is then applied to subpixel-rendered bitmaps
+ * generated through @FT_Render_Glyph. The filter sacrifices some of
+ * the higher resolution to reduce color fringes, making the glyph image
+ * slightly blurrier. Positional improvements will remain.
+ *
+ * A filter should have two properties:
+ *
+ * 1) It should be normalized, meaning the sum of the 5~components
+ * should be 256 (0x100). It is possible to go above or under this
+ * target sum, however: going under means tossing out contrast, going
+ * over means invoking clamping and thereby non-linearities that
+ * increase contrast somewhat at the expense of greater distortion
+ * and color-fringing. Contrast is better enhanced through stem
+ * darkening.
+ *
+ * 2) It should be color-balanced, meaning a filter `{~a, b, c, b, a~}'
+ * where a~+ b~=~c. It distributes the computed coverage for one
+ * subpixel to all subpixels equally, sacrificing some won resolution
+ * but drastically reducing color-fringing. Positioning improvements
+ * remain! Note that color-fringing can only really be minimized
+ * when using a color-balanced filter and alpha-blending the glyph
+ * onto a surface in linear space; see @FT_Render_Glyph.
+ *
+ * Regarding the form, a filter can be a `boxy' filter or a `beveled'
+ * filter. Boxy filters are sharper but are less forgiving of non-ideal
+ * gamma curves of a screen (viewing angles!), beveled filters are
+ * fuzzier but more tolerant.
+ *
+ * Examples:
+ *
+ * - [0x10 0x40 0x70 0x40 0x10] is beveled and neither balanced nor
+ * normalized.
+ *
+ * - [0x1A 0x33 0x4D 0x33 0x1A] is beveled and balanced but not
+ * normalized.
+ *
+ * - [0x19 0x33 0x66 0x4c 0x19] is beveled and normalized but not
+ * balanced.
+ *
+ * - [0x00 0x4c 0x66 0x4c 0x00] is boxily beveled and normalized but not
+ * balanced.
+ *
+ * - [0x00 0x55 0x56 0x55 0x00] is boxy, normalized, and almost
+ * balanced.
+ *
+ * - [0x08 0x4D 0x56 0x4D 0x08] is beveled, normalized and, almost
+ * balanced.
+ *
+ * The filter affects glyph bitmaps rendered through @FT_Render_Glyph,
+ * @FT_Load_Glyph, and @FT_Load_Char. It does _not_ affect the output
+ * of @FT_Outline_Render and @FT_Outline_Get_Bitmap.
+ *
+ * If this feature is activated, the dimensions of LCD glyph bitmaps are
+ * either wider or taller than the dimensions of the corresponding
+ * outline with regard to the pixel grid. For example, for
+ * @FT_RENDER_MODE_LCD, the filter adds 3~subpixels to the left, and
+ * 3~subpixels to the right. The bitmap offset values are adjusted
+ * accordingly, so clients shouldn't need to modify their layout and
+ * glyph positioning code when enabling the filter.
+ *
+ * It is important to understand that linear alpha blending and gamma
+ * correction is critical for correctly rendering glyphs onto surfaces
+ * without artifacts and even more critical when subpixel rendering is
+ * involved.
+ *
+ * Each of the 3~alpha values (subpixels) is independently used to blend
+ * one color channel. That is, red alpha blends the red channel of the
+ * text color with the red channel of the background pixel. The
+ * distribution of density values by the color-balanced filter assumes
+ * alpha blending is done in linear space; only then color artifacts
+ * cancel out.
+ */
+
+
+ /****************************************************************************
+ *
+ * @enum:
+ * FT_LcdFilter
+ *
+ * @description:
+ * A list of values to identify various types of LCD filters.
+ *
+ * @values:
+ * FT_LCD_FILTER_NONE ::
+ * Do not perform filtering. When used with subpixel rendering, this
+ * results in sometimes severe color fringes.
+ *
+ * FT_LCD_FILTER_DEFAULT ::
+ * The default filter reduces color fringes considerably, at the cost
+ * of a slight blurriness in the output.
+ *
+ * It is a beveled, normalized, and color-balanced five-tap filter
+ * that is more forgiving to screens with non-ideal gamma curves and
+ * viewing angles. Note that while color-fringing is reduced, it can
+ * only be minimized by using linear alpha blending and gamma
+ * correction to render glyphs onto surfaces. The default filter
+ * weights are [0x08 0x4D 0x56 0x4D 0x08].
+ *
+ * FT_LCD_FILTER_LIGHT ::
+ * The light filter is a variant that is sharper at the cost of
+ * slightly more color fringes than the default one.
+ *
+ * It is a boxy, normalized, and color-balanced three-tap filter that
+ * is less forgiving to screens with non-ideal gamma curves and
+ * viewing angles. This filter works best when the rendering system
+ * uses linear alpha blending and gamma correction to render glyphs
+ * onto surfaces. The light filter weights are
+ * [0x00 0x55 0x56 0x55 0x00].
+ *
+ * FT_LCD_FILTER_LEGACY ::
+ * This filter corresponds to the original libXft color filter. It
+ * provides high contrast output but can exhibit really bad color
+ * fringes if glyphs are not extremely well hinted to the pixel grid.
+ * In other words, it only works well if the TrueType bytecode
+ * interpreter is enabled *and* high-quality hinted fonts are used.
+ *
+ * This filter is only provided for comparison purposes, and might be
+ * disabled or stay unsupported in the future.
+ *
+ * FT_LCD_FILTER_LEGACY1 ::
+ * For historical reasons, the FontConfig library returns a different
+ * enumeration value for legacy LCD filtering. To make code work that
+ * (incorrectly) forwards FontConfig's enumeration value to
+ * @FT_Library_SetLcdFilter without proper mapping, it is thus easiest
+ * to have another enumeration value, which is completely equal to
+ * `FT_LCD_FILTER_LEGACY'.
+ *
+ * @since:
+ * 2.3.0 (`FT_LCD_FILTER_LEGACY1' since 2.6.2)
+ */
+ typedef enum FT_LcdFilter_
+ {
+ FT_LCD_FILTER_NONE = 0,
+ FT_LCD_FILTER_DEFAULT = 1,
+ FT_LCD_FILTER_LIGHT = 2,
+ FT_LCD_FILTER_LEGACY1 = 3,
+ FT_LCD_FILTER_LEGACY = 16,
+
+ FT_LCD_FILTER_MAX /* do not remove */
+
+ } FT_LcdFilter;
+
+
+ /**************************************************************************
+ *
+ * @func:
+ * FT_Library_SetLcdFilter
+ *
+ * @description:
+ * This function is used to apply color filtering to LCD decimated
+ * bitmaps, like the ones used when calling @FT_Render_Glyph with
+ * @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V.
+ *
+ * @input:
+ * library ::
+ * A handle to the target library instance.
+ *
+ * filter ::
+ * The filter type.
+ *
+ * You can use @FT_LCD_FILTER_NONE here to disable this feature, or
+ * @FT_LCD_FILTER_DEFAULT to use a default filter that should work
+ * well on most LCD screens.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * This feature is always disabled by default. Clients must make an
+ * explicit call to this function with a `filter' value other than
+ * @FT_LCD_FILTER_NONE in order to enable it.
+ *
+ * Due to *PATENTS* covering subpixel rendering, this function doesn't
+ * do anything except returning `FT_Err_Unimplemented_Feature' if the
+ * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
+ * defined in your build of the library, which should correspond to all
+ * default builds of FreeType.
+ *
+ * @since:
+ * 2.3.0
+ */
+ FT_EXPORT( FT_Error )
+ FT_Library_SetLcdFilter( FT_Library library,
+ FT_LcdFilter filter );
+
+
+ /**************************************************************************
+ *
+ * @func:
+ * FT_Library_SetLcdFilterWeights
+ *
+ * @description:
+ * This function can be used to enable LCD filter with custom weights,
+ * instead of using presets in @FT_Library_SetLcdFilter.
+ *
+ * @input:
+ * library ::
+ * A handle to the target library instance.
+ *
+ * weights ::
+ * A pointer to an array; the function copies the first five bytes and
+ * uses them to specify the filter weights.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * Due to *PATENTS* covering subpixel rendering, this function doesn't
+ * do anything except returning `FT_Err_Unimplemented_Feature' if the
+ * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
+ * defined in your build of the library, which should correspond to all
+ * default builds of FreeType.
+ *
+ * LCD filter weights can also be set per face using @FT_Face_Properties
+ * with @FT_PARAM_TAG_LCD_FILTER_WEIGHTS.
+ *
+ * @since:
+ * 2.4.0
+ */
+ FT_EXPORT( FT_Error )
+ FT_Library_SetLcdFilterWeights( FT_Library library,
+ unsigned char *weights );
+
+
+ /*
+ * @type:
+ * FT_LcdFiveTapFilter
+ *
+ * @description:
+ * A typedef for passing the five LCD filter weights to
+ * @FT_Face_Properties within an @FT_Parameter structure.
+ *
+ * @since:
+ * 2.8
+ *
+ */
+#define FT_LCD_FILTER_FIVE_TAPS 5
+
+ typedef FT_Byte FT_LcdFiveTapFilter[FT_LCD_FILTER_FIVE_TAPS];
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* FTLCDFIL_H_ */
+
+
+/* END */
diff --git a/include/ftlist.h b/include/freetype/ftlist.h
similarity index 98%
rename from include/ftlist.h
rename to include/freetype/ftlist.h
index 12b48c7..117473b 100644
--- a/include/ftlist.h
+++ b/include/freetype/ftlist.h
@@ -4,7 +4,7 @@
/* */
/* Generic list support for FreeType (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -24,8 +24,8 @@
/*************************************************************************/
-#ifndef __FTLIST_H__
-#define __FTLIST_H__
+#ifndef FTLIST_H_
+#define FTLIST_H_
#include <ft2build.h>
@@ -270,7 +270,7 @@
FT_END_HEADER
-#endif /* __FTLIST_H__ */
+#endif /* FTLIST_H_ */
/* END */
diff --git a/include/ftlzw.h b/include/freetype/ftlzw.h
similarity index 96%
rename from include/ftlzw.h
rename to include/freetype/ftlzw.h
index d3ec28e..1615912 100644
--- a/include/ftlzw.h
+++ b/include/freetype/ftlzw.h
@@ -4,7 +4,7 @@
/* */
/* LZW-compressed stream support. */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTLZW_H__
-#define __FTLZW_H__
+#ifndef FTLZW_H_
+#define FTLZW_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -93,7 +93,7 @@
FT_END_HEADER
-#endif /* __FTLZW_H__ */
+#endif /* FTLZW_H_ */
/* END */
diff --git a/include/ftmac.h b/include/freetype/ftmac.h
similarity index 97%
rename from include/ftmac.h
rename to include/freetype/ftmac.h
index 14c55cf..c1e497c 100644
--- a/include/ftmac.h
+++ b/include/freetype/ftmac.h
@@ -4,7 +4,7 @@
/* */
/* Additional Mac-specific API. */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -25,8 +25,8 @@
/***************************************************************************/
-#ifndef __FTMAC_H__
-#define __FTMAC_H__
+#ifndef FTMAC_H_
+#define FTMAC_H_
#include <ft2build.h>
@@ -35,11 +35,12 @@
FT_BEGIN_HEADER
-/* gcc-3.4.1 and later can warn about functions tagged as deprecated */
+ /* gcc-3.1 and later can warn about functions tagged as deprecated */
#ifndef FT_DEPRECATED_ATTRIBUTE
-#if defined(__GNUC__) && \
- ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
-#define FT_DEPRECATED_ATTRIBUTE __attribute__((deprecated))
+#if defined( __GNUC__ ) && \
+ ( ( __GNUC__ >= 4 ) || \
+ ( ( __GNUC__ == 3 ) && ( __GNUC_MINOR__ >= 1 ) ) )
+#define FT_DEPRECATED_ATTRIBUTE __attribute__(( deprecated ))
#else
#define FT_DEPRECATED_ATTRIBUTE
#endif
@@ -268,7 +269,7 @@
FT_END_HEADER
-#endif /* __FTMAC_H__ */
+#endif /* FTMAC_H_ */
/* END */
diff --git a/include/freetype/ftmm.h b/include/freetype/ftmm.h
new file mode 100644
index 0000000..9948102
--- /dev/null
+++ b/include/freetype/ftmm.h
@@ -0,0 +1,638 @@
+/***************************************************************************/
+/* */
+/* ftmm.h */
+/* */
+/* FreeType Multiple Master font interface (specification). */
+/* */
+/* Copyright 1996-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef FTMM_H_
+#define FTMM_H_
+
+
+#include <ft2build.h>
+#include FT_TYPE1_TABLES_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* multiple_masters */
+ /* */
+ /* <Title> */
+ /* Multiple Masters */
+ /* */
+ /* <Abstract> */
+ /* How to manage Multiple Masters fonts. */
+ /* */
+ /* <Description> */
+ /* The following types and functions are used to manage Multiple */
+ /* Master fonts, i.e., the selection of specific design instances by */
+ /* setting design axis coordinates. */
+ /* */
+ /* Besides Adobe MM fonts, the interface supports Apple's TrueType GX */
+ /* and OpenType variation fonts. Some of the routines only work with */
+ /* Adobe MM fonts, others will work with all three types. They are */
+ /* similar enough that a consistent interface makes sense. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_MM_Axis */
+ /* */
+ /* <Description> */
+ /* A structure to model a given axis in design space for Multiple */
+ /* Masters fonts. */
+ /* */
+ /* This structure can't be used for TrueType GX or OpenType variation */
+ /* fonts. */
+ /* */
+ /* <Fields> */
+ /* name :: The axis's name. */
+ /* */
+ /* minimum :: The axis's minimum design coordinate. */
+ /* */
+ /* maximum :: The axis's maximum design coordinate. */
+ /* */
+ typedef struct FT_MM_Axis_
+ {
+ FT_String* name;
+ FT_Long minimum;
+ FT_Long maximum;
+
+ } FT_MM_Axis;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Multi_Master */
+ /* */
+ /* <Description> */
+ /* A structure to model the axes and space of a Multiple Masters */
+ /* font. */
+ /* */
+ /* This structure can't be used for TrueType GX or OpenType variation */
+ /* fonts. */
+ /* */
+ /* <Fields> */
+ /* num_axis :: Number of axes. Cannot exceed~4. */
+ /* */
+ /* num_designs :: Number of designs; should be normally 2^num_axis */
+ /* even though the Type~1 specification strangely */
+ /* allows for intermediate designs to be present. */
+ /* This number cannot exceed~16. */
+ /* */
+ /* axis :: A table of axis descriptors. */
+ /* */
+ typedef struct FT_Multi_Master_
+ {
+ FT_UInt num_axis;
+ FT_UInt num_designs;
+ FT_MM_Axis axis[T1_MAX_MM_AXIS];
+
+ } FT_Multi_Master;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Var_Axis */
+ /* */
+ /* <Description> */
+ /* A structure to model a given axis in design space for Multiple */
+ /* Masters, TrueType GX, and OpenType variation fonts. */
+ /* */
+ /* <Fields> */
+ /* name :: The axis's name. */
+ /* Not always meaningful for TrueType GX or OpenType */
+ /* variation fonts. */
+ /* */
+ /* minimum :: The axis's minimum design coordinate. */
+ /* */
+ /* def :: The axis's default design coordinate. */
+ /* FreeType computes meaningful default values for Adobe */
+ /* MM fonts. */
+ /* */
+ /* maximum :: The axis's maximum design coordinate. */
+ /* */
+ /* tag :: The axis's tag (the equivalent to `name' for TrueType */
+ /* GX and OpenType variation fonts). FreeType provides */
+ /* default values for Adobe MM fonts if possible. */
+ /* */
+ /* strid :: The axis name entry in the font's `name' table. This */
+ /* is another (and often better) version of the `name' */
+ /* field for TrueType GX or OpenType variation fonts. Not */
+ /* meaningful for Adobe MM fonts. */
+ /* */
+ /* <Note> */
+ /* The fields `minimum', `def', and `maximum' are 16.16 fractional */
+ /* values for TrueType GX and OpenType variation fonts. For Adobe MM */
+ /* fonts, the values are integers. */
+ /* */
+ typedef struct FT_Var_Axis_
+ {
+ FT_String* name;
+
+ FT_Fixed minimum;
+ FT_Fixed def;
+ FT_Fixed maximum;
+
+ FT_ULong tag;
+ FT_UInt strid;
+
+ } FT_Var_Axis;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_Var_Named_Style */
+ /* */
+ /* <Description> */
+ /* A structure to model a named instance in a TrueType GX or OpenType */
+ /* variation font. */
+ /* */
+ /* This structure can't be used for Adobe MM fonts. */
+ /* */
+ /* <Fields> */
+ /* coords :: The design coordinates for this instance. */
+ /* This is an array with one entry for each axis. */
+ /* */
+ /* strid :: The entry in `name' table identifying this instance. */
+ /* */
+ /* psid :: The entry in `name' table identifying a PostScript name */
+ /* for this instance. Value 0xFFFF indicates a missing */
+ /* entry. */
+ /* */
+ typedef struct FT_Var_Named_Style_
+ {
+ FT_Fixed* coords;
+ FT_UInt strid;
+ FT_UInt psid; /* since 2.7.1 */
+
+ } FT_Var_Named_Style;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_MM_Var */
+ /* */
+ /* <Description> */
+ /* A structure to model the axes and space of an Adobe MM, TrueType */
+ /* GX, or OpenType variation font. */
+ /* */
+ /* Some fields are specific to one format and not to the others. */
+ /* */
+ /* <Fields> */
+ /* num_axis :: The number of axes. The maximum value is~4 for */
+ /* Adobe MM fonts; no limit in TrueType GX or */
+ /* OpenType variation fonts. */
+ /* */
+ /* num_designs :: The number of designs; should be normally */
+ /* 2^num_axis for Adobe MM fonts. Not meaningful */
+ /* for TrueType GX or OpenType variation fonts */
+ /* (where every glyph could have a different */
+ /* number of designs). */
+ /* */
+ /* num_namedstyles :: The number of named styles; a `named style' is */
+ /* a tuple of design coordinates that has a string */
+ /* ID (in the `name' table) associated with it. */
+ /* The font can tell the user that, for example, */
+ /* [Weight=1.5,Width=1.1] is `Bold'. Another name */
+ /* for `named style' is `named instance'. */
+ /* */
+ /* For Adobe Multiple Masters fonts, this value is */
+ /* always zero because the format does not support */
+ /* named styles. */
+ /* */
+ /* axis :: An axis descriptor table. */
+ /* TrueType GX and OpenType variation fonts */
+ /* contain slightly more data than Adobe MM fonts. */
+ /* Memory management of this pointer is done */
+ /* internally by FreeType. */
+ /* */
+ /* namedstyle :: A named style (instance) table. */
+ /* Only meaningful for TrueType GX and OpenType */
+ /* variation fonts. Memory management of this */
+ /* pointer is done internally by FreeType. */
+ /* */
+ typedef struct FT_MM_Var_
+ {
+ FT_UInt num_axis;
+ FT_UInt num_designs;
+ FT_UInt num_namedstyles;
+ FT_Var_Axis* axis;
+ FT_Var_Named_Style* namedstyle;
+
+ } FT_MM_Var;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Multi_Master */
+ /* */
+ /* <Description> */
+ /* Retrieve a variation descriptor of a given Adobe MM font. */
+ /* */
+ /* This function can't be used with TrueType GX or OpenType variation */
+ /* fonts. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Output> */
+ /* amaster :: The Multiple Masters descriptor. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Multi_Master( FT_Face face,
+ FT_Multi_Master *amaster );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_MM_Var */
+ /* */
+ /* <Description> */
+ /* Retrieve a variation descriptor for a given font. */
+ /* */
+ /* This function works with all supported variation formats. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Output> */
+ /* amaster :: The variation descriptor. */
+ /* Allocates a data structure, which the user must */
+ /* deallocate with a call to @FT_Done_MM_Var after use. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_MM_Var( FT_Face face,
+ FT_MM_Var* *amaster );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Done_MM_Var */
+ /* */
+ /* <Description> */
+ /* Free the memory allocated by @FT_Get_MM_Var. */
+ /* */
+ /* <Input> */
+ /* library :: A handle of the face's parent library object that was */
+ /* used in the call to @FT_Get_MM_Var to create `amaster'. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Done_MM_Var( FT_Library library,
+ FT_MM_Var *amaster );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_MM_Design_Coordinates */
+ /* */
+ /* <Description> */
+ /* For Adobe MM fonts, choose an interpolated font design through */
+ /* design coordinates. */
+ /* */
+ /* This function can't be used with TrueType GX or OpenType variation */
+ /* fonts. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Input> */
+ /* num_coords :: The number of available design coordinates. If it */
+ /* is larger than the number of axes, ignore the excess */
+ /* values. If it is smaller than the number of axes, */
+ /* use default values for the remaining axes. */
+ /* */
+ /* coords :: An array of design coordinates. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ /* <Note> */
+ /* [Since 2.8.1] To reset all axes to the default values, call the */
+ /* function with `num_coords' set to zero and `coords' set to NULL. */
+ /* */
+ /* [Since 2.9] If `num_coords' is larger than zero, this function */
+ /* sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags' */
+ /* field (i.e., @FT_IS_VARIATION will return true). If `num_coords' */
+ /* is zero, this bit flag gets unset. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_MM_Design_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Long* coords );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Var_Design_Coordinates */
+ /* */
+ /* <Description> */
+ /* Choose an interpolated font design through design coordinates. */
+ /* */
+ /* This function works with all supported variation formats. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Input> */
+ /* num_coords :: The number of available design coordinates. If it */
+ /* is larger than the number of axes, ignore the excess */
+ /* values. If it is smaller than the number of axes, */
+ /* use default values for the remaining axes. */
+ /* */
+ /* coords :: An array of design coordinates. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ /* <Note> */
+ /* [Since 2.8.1] To reset all axes to the default values, call the */
+ /* function with `num_coords' set to zero and `coords' set to NULL. */
+ /* [Since 2.9] `Default values' means the currently selected named */
+ /* instance (or the base font if no named instance is selected). */
+ /* */
+ /* [Since 2.9] If `num_coords' is larger than zero, this function */
+ /* sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags' */
+ /* field (i.e., @FT_IS_VARIATION will return true). If `num_coords' */
+ /* is zero, this bit flag gets unset. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_Var_Design_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Var_Design_Coordinates */
+ /* */
+ /* <Description> */
+ /* Get the design coordinates of the currently selected interpolated */
+ /* font. */
+ /* */
+ /* This function works with all supported variation formats. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* num_coords :: The number of design coordinates to retrieve. If it */
+ /* is larger than the number of axes, set the excess */
+ /* values to~0. */
+ /* */
+ /* <Output> */
+ /* coords :: The design coordinates array. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ /* <Since> */
+ /* 2.7.1 */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Var_Design_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_MM_Blend_Coordinates */
+ /* */
+ /* <Description> */
+ /* Choose an interpolated font design through normalized blend */
+ /* coordinates. */
+ /* */
+ /* This function works with all supported variation formats. */
+ /* */
+ /* <InOut> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Input> */
+ /* num_coords :: The number of available design coordinates. If it */
+ /* is larger than the number of axes, ignore the excess */
+ /* values. If it is smaller than the number of axes, */
+ /* use default values for the remaining axes. */
+ /* */
+ /* coords :: The design coordinates array (each element must be */
+ /* between 0 and 1.0 for Adobe MM fonts, and between */
+ /* -1.0 and 1.0 for TrueType GX and OpenType variation */
+ /* fonts). */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ /* <Note> */
+ /* [Since 2.8.1] To reset all axes to the default values, call the */
+ /* function with `num_coords' set to zero and `coords' set to NULL. */
+ /* [Since 2.9] `Default values' means the currently selected named */
+ /* instance (or the base font if no named instance is selected). */
+ /* */
+ /* [Since 2.9] If `num_coords' is larger than zero, this function */
+ /* sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags' */
+ /* field (i.e., @FT_IS_VARIATION will return true). If `num_coords' */
+ /* is zero, this bit flag gets unset. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_MM_Blend_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_MM_Blend_Coordinates */
+ /* */
+ /* <Description> */
+ /* Get the normalized blend coordinates of the currently selected */
+ /* interpolated font. */
+ /* */
+ /* This function works with all supported variation formats. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* num_coords :: The number of normalized blend coordinates to */
+ /* retrieve. If it is larger than the number of axes, */
+ /* set the excess values to~0.5 for Adobe MM fonts, and */
+ /* to~0 for TrueType GX and OpenType variation fonts. */
+ /* */
+ /* <Output> */
+ /* coords :: The normalized blend coordinates array. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ /* <Since> */
+ /* 2.7.1 */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_MM_Blend_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Var_Blend_Coordinates */
+ /* */
+ /* <Description> */
+ /* This is another name of @FT_Set_MM_Blend_Coordinates. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_Var_Blend_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Var_Blend_Coordinates */
+ /* */
+ /* <Description> */
+ /* This is another name of @FT_Get_MM_Blend_Coordinates. */
+ /* */
+ /* <Since> */
+ /* 2.7.1 */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Var_Blend_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Enum> */
+ /* FT_VAR_AXIS_FLAG_XXX */
+ /* */
+ /* <Description> */
+ /* A list of bit flags used in the return value of */
+ /* @FT_Get_Var_Axis_Flags. */
+ /* */
+ /* <Values> */
+ /* FT_VAR_AXIS_FLAG_HIDDEN :: */
+ /* The variation axis should not be exposed to user interfaces. */
+ /* */
+ /* <Since> */
+ /* 2.8.1 */
+ /* */
+#define FT_VAR_AXIS_FLAG_HIDDEN 1
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Var_Axis_Flags */
+ /* */
+ /* <Description> */
+ /* Get the `flags' field of an OpenType Variation Axis Record. */
+ /* */
+ /* Not meaningful for Adobe MM fonts (`*flags' is always zero). */
+ /* */
+ /* <Input> */
+ /* master :: The variation descriptor. */
+ /* */
+ /* axis_index :: The index of the requested variation axis. */
+ /* */
+ /* <Output> */
+ /* flags :: The `flags' field. See @FT_VAR_AXIS_FLAG_XXX for */
+ /* possible values. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ /* <Since> */
+ /* 2.8.1 */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Var_Axis_Flags( FT_MM_Var* master,
+ FT_UInt axis_index,
+ FT_UInt* flags );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Set_Named_Instance */
+ /* */
+ /* <Description> */
+ /* Set or change the current named instance. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* instance_index :: The index of the requested instance, starting */
+ /* with value 1. If set to value 0, FreeType */
+ /* switches to font access without a named */
+ /* instance. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ /* <Note> */
+ /* The function uses the value of `instance_index' to set bits 16-30 */
+ /* of the face's `face_index' field. It also resets any variation */
+ /* applied to the font, and the @FT_FACE_FLAG_VARIATION bit of the */
+ /* face's `face_flags' field gets reset to zero (i.e., */
+ /* @FT_IS_VARIATION will return false). */
+ /* */
+ /* For Adobe MM fonts (which don't have named instances) this */
+ /* function simply resets the current face to the default instance. */
+ /* */
+ /* <Since> */
+ /* 2.9 */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Set_Named_Instance( FT_Face face,
+ FT_UInt instance_index );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* FTMM_H_ */
+
+
+/* END */
diff --git a/include/ftmodapi.h b/include/freetype/ftmodapi.h
similarity index 87%
rename from include/ftmodapi.h
rename to include/freetype/ftmodapi.h
index 2ef3f46..a6eb876 100644
--- a/include/ftmodapi.h
+++ b/include/freetype/ftmodapi.h
@@ -4,7 +4,7 @@
/* */
/* FreeType modules public interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTMODAPI_H__
-#define __FTMODAPI_H__
+#ifndef FTMODAPI_H_
+#define FTMODAPI_H_
#include <ft2build.h>
@@ -63,7 +63,7 @@
/* psaux */
/* pshinter */
/* psnames */
- /* raster1, raster5 */
+ /* raster1 */
/* sfnt */
/* smooth, smooth-lcd, smooth-lcdv */
/* truetype */
@@ -89,6 +89,7 @@
/* */
/* FT_Property_Set */
/* FT_Property_Get */
+ /* FT_Set_Default_Properties */
/* */
/* FT_New_Library */
/* FT_Done_Library */
@@ -111,12 +112,14 @@
#define FT_MODULE_HINTER 4 /* this module is a glyph hinter */
#define FT_MODULE_STYLER 8 /* this module is a styler */
-#define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */
+#define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */
/* scalable fonts */
-#define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */
+#define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */
/* support vector outlines */
-#define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */
+#define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */
/* own hinter */
+#define FT_MODULE_DRIVER_HINTS_LIGHTLY 0x800 /* the driver's hinter */
+ /* produces LIGHT hints */
/* deprecated values */
@@ -125,9 +128,10 @@
#define ft_module_hinter FT_MODULE_HINTER
#define ft_module_styler FT_MODULE_STYLER
-#define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE
-#define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES
-#define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER
+#define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE
+#define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES
+#define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER
+#define ft_module_driver_hints_lightly FT_MODULE_DRIVER_HINTS_LIGHTLY
typedef FT_Pointer FT_Module_Interface;
@@ -319,16 +323,15 @@
* The module name.
*
* property_name ::
- * The property name. Properties are described in the `Synopsis'
- * subsection of the module's documentation.
+ * The property name. Properties are described in section
+ * @properties.
*
* Note that only a few modules have properties.
*
* value ::
* A generic pointer to a variable or structure that gives the new
* value of the property. The exact definition of `value' is
- * dependent on the property; see the `Synopsis' subsection of the
- * module's documentation.
+ * dependent on the property; see section @properties.
*
* @return:
* FreeType error code. 0~means success.
@@ -386,15 +389,14 @@
* The module name.
*
* property_name ::
- * The property name. Properties are described in the `Synopsis'
- * subsection of the module's documentation.
+ * The property name. Properties are described in section
+ * @properties.
*
* @inout:
* value ::
* A generic pointer to a variable or structure that gives the
* value of the property. The exact definition of `value' is
- * dependent on the property; see the `Synopsis' subsection of the
- * module's documentation.
+ * dependent on the property; see section @properties.
*
* @return:
* FreeType error code. 0~means success.
@@ -437,6 +439,50 @@
/*************************************************************************/
/* */
/* <Function> */
+ /* FT_Set_Default_Properties */
+ /* */
+ /* <Description> */
+ /* If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is */
+ /* set, this function reads the `FREETYPE_PROPERTIES' environment */
+ /* variable to control driver properties. See section @properties */
+ /* for more. */
+ /* */
+ /* If the compilation option is not set, this function does nothing. */
+ /* */
+ /* `FREETYPE_PROPERTIES' has the following syntax form (broken here */
+ /* into multiple lines for better readability). */
+ /* */
+ /* { */
+ /* <optional whitespace> */
+ /* <module-name1> ':' */
+ /* <property-name1> '=' <property-value1> */
+ /* <whitespace> */
+ /* <module-name2> ':' */
+ /* <property-name2> '=' <property-value2> */
+ /* ... */
+ /* } */
+ /* */
+ /* Example: */
+ /* */
+ /* { */
+ /* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ */
+ /* cff:no-stem-darkening=1 \ */
+ /* autofitter:warping=1 */
+ /* } */
+ /* */
+ /* <InOut> */
+ /* library :: A handle to a new library object. */
+ /* */
+ /* <Since> */
+ /* 2.8 */
+ /* */
+ FT_EXPORT( void )
+ FT_Set_Default_Properties( FT_Library library );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
/* FT_Reference_Library */
/* */
/* <Description> */
@@ -474,8 +520,9 @@
/* valid for the life of the @FT_Library object. */
/* */
/* Normally, you would call this function (followed by a call to */
- /* @FT_Add_Default_Modules or a series of calls to @FT_Add_Module) */
- /* instead of @FT_Init_FreeType to initialize the FreeType library. */
+ /* @FT_Add_Default_Modules or a series of calls to @FT_Add_Module, */
+ /* and a call to @FT_Set_Default_Properties) instead of */
+ /* @FT_Init_FreeType to initialize the FreeType library. */
/* */
/* Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a */
/* library instance. */
@@ -610,12 +657,7 @@
* The library doesn't implement any kind of bytecode interpreter.
*
* FT_TRUETYPE_ENGINE_TYPE_UNPATENTED ::
- * The library implements a bytecode interpreter that doesn't
- * support the patented operations of the TrueType virtual machine.
- *
- * Its main use is to load certain Asian fonts that position and
- * scale glyph components with bytecode instructions. It produces
- * bad output for most other fonts.
+ * Deprecated and removed.
*
* FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
* The library implements a bytecode interpreter that covers
@@ -663,7 +705,7 @@
FT_END_HEADER
-#endif /* __FTMODAPI_H__ */
+#endif /* FTMODAPI_H_ */
/* END */
diff --git a/include/ftmoderr.h b/include/freetype/ftmoderr.h
similarity index 97%
rename from include/ftmoderr.h
rename to include/freetype/ftmoderr.h
index 9d7f981..e0fc131 100644
--- a/include/ftmoderr.h
+++ b/include/freetype/ftmoderr.h
@@ -4,7 +4,7 @@
/* */
/* FreeType module error offsets (specification). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -74,7 +74,7 @@
/* with something like */
/* */
/* { */
- /* #undef __FTMODERR_H__ */
+ /* #undef FTMODERR_H_ */
/* #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, */
/* #define FT_MODERR_START_LIST { */
/* #define FT_MODERR_END_LIST { 0, 0 } }; */
@@ -91,8 +91,8 @@
/*************************************************************************/
-#ifndef __FTMODERR_H__
-#define __FTMODERR_H__
+#ifndef FTMODERR_H_
+#define FTMODERR_H_
/*******************************************************************/
@@ -188,7 +188,7 @@
#undef FT_NEED_EXTERN_C
-#endif /* __FTMODERR_H__ */
+#endif /* FTMODERR_H_ */
/* END */
diff --git a/include/ftotval.h b/include/freetype/ftotval.h
similarity index 94%
rename from include/ftotval.h
rename to include/freetype/ftotval.h
index e744b71..26731c2 100644
--- a/include/ftotval.h
+++ b/include/freetype/ftotval.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for validating OpenType tables (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -27,8 +27,8 @@
/***************************************************************************/
-#ifndef __FTOTVAL_H__
-#define __FTOTVAL_H__
+#ifndef FTOTVAL_H_
+#define FTOTVAL_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -106,12 +106,12 @@
#define FT_VALIDATE_JSTF 0x1000
#define FT_VALIDATE_MATH 0x2000
-#define FT_VALIDATE_OT FT_VALIDATE_BASE | \
- FT_VALIDATE_GDEF | \
- FT_VALIDATE_GPOS | \
- FT_VALIDATE_GSUB | \
- FT_VALIDATE_JSTF | \
- FT_VALIDATE_MATH
+#define FT_VALIDATE_OT ( FT_VALIDATE_BASE | \
+ FT_VALIDATE_GDEF | \
+ FT_VALIDATE_GPOS | \
+ FT_VALIDATE_GSUB | \
+ FT_VALIDATE_JSTF | \
+ FT_VALIDATE_MATH )
/**********************************************************************
*
@@ -198,7 +198,7 @@
FT_END_HEADER
-#endif /* __FTOTVAL_H__ */
+#endif /* FTOTVAL_H_ */
/* END */
diff --git a/include/ftoutln.h b/include/freetype/ftoutln.h
similarity index 96%
rename from include/ftoutln.h
rename to include/freetype/ftoutln.h
index 106cfde..89389a4 100644
--- a/include/ftoutln.h
+++ b/include/freetype/ftoutln.h
@@ -5,7 +5,7 @@
/* Support for the FT_Outline type used to store glyph shapes of */
/* most scalable font formats (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __FTOUTLN_H__
-#define __FTOUTLN_H__
+#ifndef FTOUTLN_H_
+#define FTOUTLN_H_
#include <ft2build.h>
@@ -89,7 +89,7 @@
/* */
/* <Description> */
/* Walk over an outline's structure to decompose it into individual */
- /* segments and Bézier arcs. This function also emits `move to' */
+ /* segments and Bezier arcs. This function also emits `move to' */
/* operations to indicate the start of new contours in the outline. */
/* */
/* <Input> */
@@ -115,6 +115,10 @@
/* outline for stroking purposes (otherwise it would result in a */
/* visible dot when round caps are used). */
/* */
+ /* Similarly, the function returns success for an empty outline also */
+ /* (doing nothing, this is, not calling any emitter); if necessary, */
+ /* you should filter this out, too. */
+ /* */
FT_EXPORT( FT_Error )
FT_Outline_Decompose( FT_Outline* outline,
const FT_Outline_Funcs* func_interface,
@@ -186,9 +190,6 @@
/* If the outline's `owner' field is not set, only the outline */
/* descriptor will be released. */
/* */
- /* The reason why this function takes an `library' parameter is */
- /* simply to use ft_mem_free(). */
- /* */
FT_EXPORT( FT_Error )
FT_Outline_Done( FT_Library library,
FT_Outline* outline );
@@ -213,6 +214,10 @@
/* <Return> */
/* FreeType error code. 0~means success. */
/* */
+ /* <Note> */
+ /* An empty outline, or an outline with a single point only is also */
+ /* valid. */
+ /* */
FT_EXPORT( FT_Error )
FT_Outline_Check( FT_Outline* outline );
@@ -224,10 +229,10 @@
/* */
/* <Description> */
/* Return an outline's `control box'. The control box encloses all */
- /* the outline's points, including Bézier control points. Though it */
+ /* the outline's points, including Bezier control points. Though it */
/* coincides with the exact bounding box for most glyphs, it can be */
/* slightly larger in some situations (like when rotating an outline */
- /* that contains Bézier outside arcs). */
+ /* that contains Bezier outside arcs). */
/* */
/* Computing the control box is very fast, while getting the bounding */
/* box can take much more time as it needs to walk over all segments */
@@ -354,8 +359,8 @@
/* */
/* { */
/* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); */
- /* if ( face->slot->format == FT_GLYPH_FORMAT_OUTLINE ) */
- /* FT_Outline_Embolden( &face->slot->outline, strength ); */
+ /* if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ) */
+ /* FT_Outline_Embolden( &face->glyph->outline, strength ); */
/* } */
/* */
/* To get meaningful results, font scaling values must be set with */
@@ -377,6 +382,9 @@
/* @FT_Outline_Embolden, which uses the same strength in both */
/* directions. */
/* */
+ /* <Since> */
+ /* 2.4.10 */
+ /* */
FT_EXPORT( FT_Error )
FT_Outline_EmboldenXY( FT_Outline* outline,
FT_Pos xstrength,
@@ -563,7 +571,7 @@
FT_END_HEADER
-#endif /* __FTOUTLN_H__ */
+#endif /* FTOUTLN_H_ */
/* END */
diff --git a/include/freetype/ftparams.h b/include/freetype/ftparams.h
new file mode 100644
index 0000000..5a9006c
--- /dev/null
+++ b/include/freetype/ftparams.h
@@ -0,0 +1,205 @@
+/***************************************************************************/
+/* */
+/* ftparams.h */
+/* */
+/* FreeType API for possible FT_Parameter tags (specification only). */
+/* */
+/* Copyright 2017-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef FTPARAMS_H_
+#define FTPARAMS_H_
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /**************************************************************************
+ *
+ * @section:
+ * parameter_tags
+ *
+ * @title:
+ * Parameter Tags
+ *
+ * @abstract:
+ * Macros for driver property and font loading parameter tags.
+ *
+ * @description:
+ * This section contains macros for the @FT_Parameter structure that are
+ * used with various functions to activate some special functionality or
+ * different behaviour of various components of FreeType.
+ *
+ */
+
+
+ /***************************************************************************
+ *
+ * @constant:
+ * FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
+ *
+ * @description:
+ * A tag for @FT_Parameter to make @FT_Open_Face ignore typographic
+ * family names in the `name' table (introduced in OpenType version
+ * 1.4). Use this for backward compatibility with legacy systems that
+ * have a four-faces-per-family restriction.
+ *
+ * @since:
+ * 2.8
+ *
+ */
+#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY \
+ FT_MAKE_TAG( 'i', 'g', 'p', 'f' )
+
+
+ /* this constant is deprecated */
+#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY \
+ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
+
+
+ /***************************************************************************
+ *
+ * @constant:
+ * FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
+ *
+ * @description:
+ * A tag for @FT_Parameter to make @FT_Open_Face ignore typographic
+ * subfamily names in the `name' table (introduced in OpenType version
+ * 1.4). Use this for backward compatibility with legacy systems that
+ * have a four-faces-per-family restriction.
+ *
+ * @since:
+ * 2.8
+ *
+ */
+#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY \
+ FT_MAKE_TAG( 'i', 'g', 'p', 's' )
+
+
+ /* this constant is deprecated */
+#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY \
+ FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
+
+
+ /***************************************************************************
+ *
+ * @constant:
+ * FT_PARAM_TAG_INCREMENTAL
+ *
+ * @description:
+ * An @FT_Parameter tag to be used with @FT_Open_Face to indicate
+ * incremental glyph loading.
+ *
+ */
+#define FT_PARAM_TAG_INCREMENTAL \
+ FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
+
+
+ /**************************************************************************
+ *
+ * @constant:
+ * FT_PARAM_TAG_LCD_FILTER_WEIGHTS
+ *
+ * @description:
+ * An @FT_Parameter tag to be used with @FT_Face_Properties. The
+ * corresponding argument specifies the five LCD filter weights for a
+ * given face (if using @FT_LOAD_TARGET_LCD, for example), overriding
+ * the global default values or the values set up with
+ * @FT_Library_SetLcdFilterWeights.
+ *
+ * @since:
+ * 2.8
+ *
+ */
+#define FT_PARAM_TAG_LCD_FILTER_WEIGHTS \
+ FT_MAKE_TAG( 'l', 'c', 'd', 'f' )
+
+
+ /**************************************************************************
+ *
+ * @constant:
+ * FT_PARAM_TAG_RANDOM_SEED
+ *
+ * @description:
+ * An @FT_Parameter tag to be used with @FT_Face_Properties. The
+ * corresponding 32bit signed integer argument overrides the font
+ * driver's random seed value with a face-specific one; see
+ * @random-seed.
+ *
+ * @since:
+ * 2.8
+ *
+ */
+#define FT_PARAM_TAG_RANDOM_SEED \
+ FT_MAKE_TAG( 's', 'e', 'e', 'd' )
+
+
+ /**************************************************************************
+ *
+ * @constant:
+ * FT_PARAM_TAG_STEM_DARKENING
+ *
+ * @description:
+ * An @FT_Parameter tag to be used with @FT_Face_Properties. The
+ * corresponding Boolean argument specifies whether to apply stem
+ * darkening, overriding the global default values or the values set up
+ * with @FT_Property_Set (see @no-stem-darkening).
+ *
+ * This is a passive setting that only takes effect if the font driver
+ * or autohinter honors it, which the CFF, Type~1, and CID drivers
+ * always do, but the autohinter only in `light' hinting mode (as of
+ * version 2.9).
+ *
+ * @since:
+ * 2.8
+ *
+ */
+#define FT_PARAM_TAG_STEM_DARKENING \
+ FT_MAKE_TAG( 'd', 'a', 'r', 'k' )
+
+
+ /***************************************************************************
+ *
+ * @constant:
+ * FT_PARAM_TAG_UNPATENTED_HINTING
+ *
+ * @description:
+ * Deprecated, no effect.
+ *
+ * Previously: A constant used as the tag of an @FT_Parameter structure to
+ * indicate that unpatented methods only should be used by the TrueType
+ * bytecode interpreter for a typeface opened by @FT_Open_Face.
+ *
+ */
+#define FT_PARAM_TAG_UNPATENTED_HINTING \
+ FT_MAKE_TAG( 'u', 'n', 'p', 'a' )
+
+
+ /* */
+
+
+FT_END_HEADER
+
+
+#endif /* FTPARAMS_H_ */
+
+
+/* END */
diff --git a/include/ftpfr.h b/include/freetype/ftpfr.h
similarity index 95%
rename from include/ftpfr.h
rename to include/freetype/ftpfr.h
index a1c02a2..a69cc48 100644
--- a/include/ftpfr.h
+++ b/include/freetype/ftpfr.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing PFR-specific data (specification only). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTPFR_H__
-#define __FTPFR_H__
+#ifndef FTPFR_H_
+#define FTPFR_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -71,7 +71,7 @@
*
* ametrics_x_scale ::
* A 16.16 fixed-point number used to scale distance expressed
- * in metrics units to device sub-pixels. This is equivalent to
+ * in metrics units to device subpixels. This is equivalent to
* `face->size->x_scale', but for metrics only. Optional (parameter
* can be NULL).
*
@@ -123,7 +123,7 @@
* mode, which always returns distances converted to outline units.
*
* You can use the value of the `x_scale' and `y_scale' parameters
- * returned by @FT_Get_PFR_Metrics to scale these to device sub-pixels.
+ * returned by @FT_Get_PFR_Metrics to scale these to device subpixels.
*/
FT_EXPORT( FT_Error )
FT_Get_PFR_Kerning( FT_Face face,
@@ -154,7 +154,7 @@
*
* @note:
* You can use the `x_scale' or `y_scale' results of @FT_Get_PFR_Metrics
- * to convert the advance to device sub-pixels (i.e., 1/64th of pixels).
+ * to convert the advance to device subpixels (i.e., 1/64th of pixels).
*/
FT_EXPORT( FT_Error )
FT_Get_PFR_Advance( FT_Face face,
@@ -166,7 +166,7 @@
FT_END_HEADER
-#endif /* __FTPFR_H__ */
+#endif /* FTPFR_H_ */
/* END */
diff --git a/include/ftrender.h b/include/freetype/ftrender.h
similarity index 97%
rename from include/ftrender.h
rename to include/freetype/ftrender.h
index ec8da70..fa8ad22 100644
--- a/include/ftrender.h
+++ b/include/freetype/ftrender.h
@@ -4,7 +4,7 @@
/* */
/* FreeType renderer modules public interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTRENDER_H__
-#define __FTRENDER_H__
+#ifndef FTRENDER_H_
+#define FTRENDER_H_
#include <ft2build.h>
@@ -75,6 +75,7 @@
{
FT_Long glyph_size;
FT_Glyph_Format glyph_format;
+
FT_Glyph_InitFunc glyph_init;
FT_Glyph_DoneFunc glyph_done;
FT_Glyph_CopyFunc glyph_copy;
@@ -87,7 +88,7 @@
typedef FT_Error
(*FT_Renderer_RenderFunc)( FT_Renderer renderer,
FT_GlyphSlot slot,
- FT_UInt mode,
+ FT_Render_Mode mode,
const FT_Vector* origin );
typedef FT_Error
@@ -226,7 +227,7 @@
FT_END_HEADER
-#endif /* __FTRENDER_H__ */
+#endif /* FTRENDER_H_ */
/* END */
diff --git a/include/ftsizes.h b/include/freetype/ftsizes.h
similarity index 98%
rename from include/ftsizes.h
rename to include/freetype/ftsizes.h
index bef8424..72cb08b 100644
--- a/include/ftsizes.h
+++ b/include/freetype/ftsizes.h
@@ -4,7 +4,7 @@
/* */
/* FreeType size objects management (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -25,8 +25,8 @@
/*************************************************************************/
-#ifndef __FTSIZES_H__
-#define __FTSIZES_H__
+#ifndef FTSIZES_H_
+#define FTSIZES_H_
#include <ft2build.h>
@@ -153,7 +153,7 @@
FT_END_HEADER
-#endif /* __FTSIZES_H__ */
+#endif /* FTSIZES_H_ */
/* END */
diff --git a/include/freetype/ftsnames.h b/include/freetype/ftsnames.h
new file mode 100644
index 0000000..8eb8d70
--- /dev/null
+++ b/include/freetype/ftsnames.h
@@ -0,0 +1,253 @@
+/***************************************************************************/
+/* */
+/* ftsnames.h */
+/* */
+/* Simple interface to access SFNT `name' tables (which are used */
+/* to hold font names, copyright info, notices, etc.) (specification). */
+/* */
+/* This is _not_ used to retrieve glyph names! */
+/* */
+/* Copyright 1996-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef FTSNAMES_H_
+#define FTSNAMES_H_
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_PARAMETER_TAGS_H
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /*************************************************************************/
+ /* */
+ /* <Section> */
+ /* sfnt_names */
+ /* */
+ /* <Title> */
+ /* SFNT Names */
+ /* */
+ /* <Abstract> */
+ /* Access the names embedded in TrueType and OpenType files. */
+ /* */
+ /* <Description> */
+ /* The TrueType and OpenType specifications allow the inclusion of */
+ /* a special names table (`name') in font files. This table contains */
+ /* textual (and internationalized) information regarding the font, */
+ /* like family name, copyright, version, etc. */
+ /* */
+ /* The definitions below are used to access them if available. */
+ /* */
+ /* Note that this has nothing to do with glyph names! */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_SfntName */
+ /* */
+ /* <Description> */
+ /* A structure used to model an SFNT `name' table entry. */
+ /* */
+ /* <Fields> */
+ /* platform_id :: The platform ID for `string'. */
+ /* See @TT_PLATFORM_XXX for possible values. */
+ /* */
+ /* encoding_id :: The encoding ID for `string'. */
+ /* See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, */
+ /* @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX */
+ /* for possible values. */
+ /* */
+ /* language_id :: The language ID for `string'. */
+ /* See @TT_MAC_LANGID_XXX and @TT_MS_LANGID_XXX for */
+ /* possible values. */
+ /* */
+ /* Registered OpenType values for `language_id' are */
+ /* always smaller than 0x8000; values equal or larger */
+ /* than 0x8000 usually indicate a language tag string */
+ /* (introduced in OpenType version 1.6). Use function */
+ /* @FT_Get_Sfnt_LangTag with `language_id' as its */
+ /* argument to retrieve the associated language tag. */
+ /* */
+ /* name_id :: An identifier for `string'. */
+ /* See @TT_NAME_ID_XXX for possible values. */
+ /* */
+ /* string :: The `name' string. Note that its format differs */
+ /* depending on the (platform,encoding) pair, being */
+ /* either a string of bytes (without a terminating */
+ /* NULL byte) or containing UTF-16BE entities. */
+ /* */
+ /* string_len :: The length of `string' in bytes. */
+ /* */
+ /* <Note> */
+ /* Please refer to the TrueType or OpenType specification for more */
+ /* details. */
+ /* */
+ typedef struct FT_SfntName_
+ {
+ FT_UShort platform_id;
+ FT_UShort encoding_id;
+ FT_UShort language_id;
+ FT_UShort name_id;
+
+ FT_Byte* string; /* this string is *not* null-terminated! */
+ FT_UInt string_len; /* in bytes */
+
+ } FT_SfntName;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Sfnt_Name_Count */
+ /* */
+ /* <Description> */
+ /* Retrieve the number of name strings in the SFNT `name' table. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* <Return> */
+ /* The number of strings in the `name' table. */
+ /* */
+ FT_EXPORT( FT_UInt )
+ FT_Get_Sfnt_Name_Count( FT_Face face );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Sfnt_Name */
+ /* */
+ /* <Description> */
+ /* Retrieve a string of the SFNT `name' table for a given index. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* idx :: The index of the `name' string. */
+ /* */
+ /* <Output> */
+ /* aname :: The indexed @FT_SfntName structure. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ /* <Note> */
+ /* The `string' array returned in the `aname' structure is not */
+ /* null-terminated. Note that you don't have to deallocate `string' */
+ /* by yourself; FreeType takes care of it if you call @FT_Done_Face. */
+ /* */
+ /* Use @FT_Get_Sfnt_Name_Count to get the total number of available */
+ /* `name' table entries, then do a loop until you get the right */
+ /* platform, encoding, and name ID. */
+ /* */
+ /* `name' table format~1 entries can use language tags also, see */
+ /* @FT_Get_Sfnt_LangTag. */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Sfnt_Name( FT_Face face,
+ FT_UInt idx,
+ FT_SfntName *aname );
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* FT_SfntLangTag */
+ /* */
+ /* <Description> */
+ /* A structure to model a language tag entry from an SFNT `name' */
+ /* table. */
+ /* */
+ /* <Fields> */
+ /* string :: The language tag string, encoded in UTF-16BE */
+ /* (without trailing NULL bytes). */
+ /* */
+ /* string_len :: The length of `string' in *bytes*. */
+ /* */
+ /* <Note> */
+ /* Please refer to the TrueType or OpenType specification for more */
+ /* details. */
+ /* */
+ /* <Since> */
+ /* 2.8 */
+ /* */
+ typedef struct FT_SfntLangTag_
+ {
+ FT_Byte* string; /* this string is *not* null-terminated! */
+ FT_UInt string_len; /* in bytes */
+
+ } FT_SfntLangTag;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Get_Sfnt_LangTag */
+ /* */
+ /* <Description> */
+ /* Retrieve the language tag associated with a language ID of an SFNT */
+ /* `name' table entry. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* langID :: The language ID, as returned by @FT_Get_Sfnt_Name. */
+ /* This is always a value larger than 0x8000. */
+ /* */
+ /* <Output> */
+ /* alangTag :: The language tag associated with the `name' table */
+ /* entry's language ID. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ /* <Note> */
+ /* The `string' array returned in the `alangTag' structure is not */
+ /* null-terminated. Note that you don't have to deallocate `string' */
+ /* by yourself; FreeType takes care of it if you call @FT_Done_Face. */
+ /* */
+ /* Only `name' table format~1 supports language tags. For format~0 */
+ /* tables, this function always returns FT_Err_Invalid_Table. For */
+ /* invalid format~1 language ID values, FT_Err_Invalid_Argument is */
+ /* returned. */
+ /* */
+ /* <Since> */
+ /* 2.8 */
+ /* */
+ FT_EXPORT( FT_Error )
+ FT_Get_Sfnt_LangTag( FT_Face face,
+ FT_UInt langID,
+ FT_SfntLangTag *alangTag );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* FTSNAMES_H_ */
+
+
+/* END */
diff --git a/include/ftstroke.h b/include/freetype/ftstroke.h
similarity index 97%
rename from include/ftstroke.h
rename to include/freetype/ftstroke.h
index 7ebb1e7..44b6fbe 100644
--- a/include/ftstroke.h
+++ b/include/freetype/ftstroke.h
@@ -4,7 +4,7 @@
/* */
/* FreeType path stroker (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FT_STROKE_H__
-#define __FT_STROKE_H__
+#ifndef FTSTROKE_H_
+#define FTSTROKE_H_
#include <ft2build.h>
#include FT_OUTLINE_H
@@ -136,7 +136,7 @@
* FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line
* join as used in XPS. FT_STROKER_LINEJOIN_MITER is an alias
* for FT_STROKER_LINEJOIN_MITER_VARIABLE, retained for
- * backwards compatibility.
+ * backward compatibility.
*/
typedef enum FT_Stroker_LineJoin_
{
@@ -466,7 +466,7 @@
* FT_Stroker_ConicTo
*
* @description:
- * `Draw' a single quadratic Bézier in the stroker's current sub-path,
+ * `Draw' a single quadratic Bezier in the stroker's current sub-path,
* from the last position.
*
* @input:
@@ -474,7 +474,7 @@
* The target stroker handle.
*
* control ::
- * A pointer to a Bézier control point.
+ * A pointer to a Bezier control point.
*
* to ::
* A pointer to the destination point.
@@ -498,7 +498,7 @@
* FT_Stroker_CubicTo
*
* @description:
- * `Draw' a single cubic Bézier in the stroker's current sub-path,
+ * `Draw' a single cubic Bezier in the stroker's current sub-path,
* from the last position.
*
* @input:
@@ -506,10 +506,10 @@
* The target stroker handle.
*
* control1 ::
- * A pointer to the first Bézier control point.
+ * A pointer to the first Bezier control point.
*
* control2 ::
- * A pointer to second Bézier control point.
+ * A pointer to second Bezier control point.
*
* to ::
* A pointer to the destination point.
@@ -774,7 +774,7 @@
FT_END_HEADER
-#endif /* __FT_STROKE_H__ */
+#endif /* FTSTROKE_H_ */
/* END */
diff --git a/include/ftsynth.h b/include/freetype/ftsynth.h
similarity index 96%
rename from include/ftsynth.h
rename to include/freetype/ftsynth.h
index fbcbad8..ff9fb43 100644
--- a/include/ftsynth.h
+++ b/include/freetype/ftsynth.h
@@ -5,7 +5,7 @@
/* FreeType synthesizing code for emboldening and slanting */
/* (specification). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -41,8 +41,8 @@
/* adapted to the particular needs. */
-#ifndef __FTSYNTH_H__
-#define __FTSYNTH_H__
+#ifndef FTSYNTH_H_
+#define FTSYNTH_H_
#include <ft2build.h>
@@ -78,7 +78,7 @@
FT_END_HEADER
-#endif /* __FTSYNTH_H__ */
+#endif /* FTSYNTH_H_ */
/* END */
diff --git a/include/ftsystem.h b/include/freetype/ftsystem.h
similarity index 98%
rename from include/ftsystem.h
rename to include/freetype/ftsystem.h
index 2bc9999..f6b1629 100644
--- a/include/ftsystem.h
+++ b/include/freetype/ftsystem.h
@@ -4,7 +4,7 @@
/* */
/* FreeType low-level system interface definition (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTSYSTEM_H__
-#define __FTSYSTEM_H__
+#ifndef FTSYSTEM_H_
+#define FTSYSTEM_H_
#include <ft2build.h>
@@ -290,7 +290,7 @@
* The stream size in bytes.
*
* In case of compressed streams where the size is unknown before
- * actually doing the decompression, the value is set to 0x7FFFFFFF.
+ * actually doing the decompression, the value is set to 0x7FFFFFFF.
* (Note that this size value can occur for normal streams also; it is
* thus just a hint.)
*
@@ -349,7 +349,7 @@
FT_END_HEADER
-#endif /* __FTSYSTEM_H__ */
+#endif /* FTSYSTEM_H_ */
/* END */
diff --git a/include/fttrigon.h b/include/freetype/fttrigon.h
similarity index 96%
rename from include/fttrigon.h
rename to include/freetype/fttrigon.h
index 3d821ba..2e3f3f1 100644
--- a/include/fttrigon.h
+++ b/include/freetype/fttrigon.h
@@ -4,7 +4,7 @@
/* */
/* FreeType trigonometric functions (specification). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTTRIGON_H__
-#define __FTTRIGON_H__
+#ifndef FTTRIGON_H_
+#define FTTRIGON_H_
#include FT_FREETYPE_H
@@ -225,8 +225,8 @@
*
* @description:
* Return the unit vector corresponding to a given angle. After the
- * call, the value of `vec.x' will be `sin(angle)', and the value of
- * `vec.y' will be `cos(angle)'.
+ * call, the value of `vec.x' will be `cos(angle)', and the value of
+ * `vec.y' will be `sin(angle)'.
*
* This function is useful to retrieve both the sinus and cosinus of a
* given angle quickly.
@@ -344,7 +344,7 @@
FT_END_HEADER
-#endif /* __FTTRIGON_H__ */
+#endif /* FTTRIGON_H_ */
/* END */
diff --git a/include/fttypes.h b/include/freetype/fttypes.h
similarity index 99%
rename from include/fttypes.h
rename to include/freetype/fttypes.h
index 706a1be..f638c2e 100644
--- a/include/fttypes.h
+++ b/include/freetype/fttypes.h
@@ -4,7 +4,7 @@
/* */
/* FreeType simple types definitions (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTTYPES_H__
-#define __FTTYPES_H__
+#ifndef FTTYPES_H_
+#define FTTYPES_H_
#include <ft2build.h>
@@ -425,7 +425,7 @@
/* The address of the FreeType object that is under finalization. */
/* Its client data is accessed through its `generic' field. */
/* */
- typedef void (*FT_Generic_Finalizer)(void* object);
+ typedef void (*FT_Generic_Finalizer)( void* object );
/*************************************************************************/
@@ -596,7 +596,7 @@
FT_END_HEADER
-#endif /* __FTTYPES_H__ */
+#endif /* FTTYPES_H_ */
/* END */
diff --git a/include/ftwinfnt.h b/include/freetype/ftwinfnt.h
similarity index 97%
rename from include/ftwinfnt.h
rename to include/freetype/ftwinfnt.h
index caedaa1..461c65b 100644
--- a/include/ftwinfnt.h
+++ b/include/freetype/ftwinfnt.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing Windows fnt-specific data. */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTWINFNT_H__
-#define __FTWINFNT_H__
+#ifndef FTWINFNT_H_
+#define FTWINFNT_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -78,7 +78,7 @@
* Mac Roman encoding.
*
* FT_WinFNT_ID_OEM ::
- * From Michael Pöttgen <michael@poettgen.de>:
+ * From Michael Poettgen <michael@poettgen.de>:
*
* The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM
* is used for the charset of vector fonts, like `modern.fon',
@@ -264,7 +264,7 @@
FT_END_HEADER
-#endif /* __FTWINFNT_H__ */
+#endif /* FTWINFNT_H_ */
/* END */
diff --git a/include/internal/autohint.h b/include/freetype/internal/autohint.h
similarity index 98%
rename from include/internal/autohint.h
rename to include/freetype/internal/autohint.h
index 8d5a977..f4d308f 100644
--- a/include/internal/autohint.h
+++ b/include/freetype/internal/autohint.h
@@ -4,7 +4,7 @@
/* */
/* High-level `autohint' module-specific interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -24,8 +24,8 @@
/*************************************************************************/
-#ifndef __AUTOHINT_H__
-#define __AUTOHINT_H__
+#ifndef AUTOHINT_H_
+#define AUTOHINT_H_
/*************************************************************************/
@@ -238,7 +238,7 @@
FT_END_HEADER
-#endif /* __AUTOHINT_H__ */
+#endif /* AUTOHINT_H_ */
/* END */
diff --git a/include/freetype/internal/cffotypes.h b/include/freetype/internal/cffotypes.h
new file mode 100644
index 0000000..57e7591
--- /dev/null
+++ b/include/freetype/internal/cffotypes.h
@@ -0,0 +1,108 @@
+/***************************************************************************/
+/* */
+/* cffotypes.h */
+/* */
+/* Basic OpenType/CFF object type definitions (specification). */
+/* */
+/* Copyright 2017-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef CFFOTYPES_H_
+#define CFFOTYPES_H_
+
+#include <ft2build.h>
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_CFF_TYPES_H
+#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
+#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+
+
+FT_BEGIN_HEADER
+
+
+ typedef TT_Face CFF_Face;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* CFF_Size */
+ /* */
+ /* <Description> */
+ /* A handle to an OpenType size object. */
+ /* */
+ typedef struct CFF_SizeRec_
+ {
+ FT_SizeRec root;
+ FT_ULong strike_index; /* 0xFFFFFFFF to indicate invalid */
+
+ } CFF_SizeRec, *CFF_Size;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* CFF_GlyphSlot */
+ /* */
+ /* <Description> */
+ /* A handle to an OpenType glyph slot object. */
+ /* */
+ typedef struct CFF_GlyphSlotRec_
+ {
+ FT_GlyphSlotRec root;
+
+ FT_Bool hint;
+ FT_Bool scaled;
+
+ FT_Fixed x_scale;
+ FT_Fixed y_scale;
+
+ } CFF_GlyphSlotRec, *CFF_GlyphSlot;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* CFF_Internal */
+ /* */
+ /* <Description> */
+ /* The interface to the `internal' field of `FT_Size'. */
+ /* */
+ typedef struct CFF_InternalRec_
+ {
+ PSH_Globals topfont;
+ PSH_Globals subfonts[CFF_MAX_CID_FONTS];
+
+ } CFF_InternalRec, *CFF_Internal;
+
+
+ /*************************************************************************/
+ /* */
+ /* Subglyph transformation record. */
+ /* */
+ typedef struct CFF_Transform_
+ {
+ FT_Fixed xx, xy; /* transformation matrix coefficients */
+ FT_Fixed yx, yy;
+ FT_F26Dot6 ox, oy; /* offsets */
+
+ } CFF_Transform;
+
+
+FT_END_HEADER
+
+
+#endif /* CFFOTYPES_H_ */
+
+
+/* END */
diff --git a/src/cff/cfftypes.h b/include/freetype/internal/cfftypes.h
similarity index 62%
rename from src/cff/cfftypes.h
rename to include/freetype/internal/cfftypes.h
index de8a5ee..7c07e1a 100644
--- a/src/cff/cfftypes.h
+++ b/include/freetype/internal/cfftypes.h
@@ -5,7 +5,7 @@
/* Basic OpenType/CFF type definitions and interface (specification */
/* only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __CFFTYPES_H__
-#define __CFFTYPES_H__
+#ifndef CFFTYPES_H_
+#define CFFTYPES_H_
#include <ft2build.h>
@@ -27,6 +27,7 @@
#include FT_INTERNAL_SERVICE_H
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+#include FT_INTERNAL_TYPE1_TYPES_H
FT_BEGIN_HEADER
@@ -64,6 +65,7 @@
{
FT_Stream stream;
FT_ULong start;
+ FT_UInt hdr_size;
FT_UInt count;
FT_Byte off_size;
FT_ULong data_offset;
@@ -102,6 +104,79 @@
} CFF_CharsetRec, *CFF_Charset;
+ /* cf. similar fields in file `ttgxvar.h' from the `truetype' module */
+
+ typedef struct CFF_VarData_
+ {
+#if 0
+ FT_UInt itemCount; /* not used; always zero */
+ FT_UInt shortDeltaCount; /* not used; always zero */
+#endif
+
+ FT_UInt regionIdxCount; /* number of region indexes */
+ FT_UInt* regionIndices; /* array of `regionIdxCount' indices; */
+ /* these index `varRegionList' */
+ } CFF_VarData;
+
+
+ /* contribution of one axis to a region */
+ typedef struct CFF_AxisCoords_
+ {
+ FT_Fixed startCoord;
+ FT_Fixed peakCoord; /* zero peak means no effect (factor = 1) */
+ FT_Fixed endCoord;
+
+ } CFF_AxisCoords;
+
+
+ typedef struct CFF_VarRegion_
+ {
+ CFF_AxisCoords* axisList; /* array of axisCount records */
+
+ } CFF_VarRegion;
+
+
+ typedef struct CFF_VStoreRec_
+ {
+ FT_UInt dataCount;
+ CFF_VarData* varData; /* array of dataCount records */
+ /* vsindex indexes this array */
+ FT_UShort axisCount;
+ FT_UInt regionCount; /* total number of regions defined */
+ CFF_VarRegion* varRegionList;
+
+ } CFF_VStoreRec, *CFF_VStore;
+
+
+ /* forward reference */
+ typedef struct CFF_FontRec_* CFF_Font;
+
+
+ /* This object manages one cached blend vector. */
+ /* */
+ /* There is a BlendRec for Private DICT parsing in each subfont */
+ /* and a BlendRec for charstrings in CF2_Font instance data. */
+ /* A cached BV may be used across DICTs or Charstrings if inputs */
+ /* have not changed. */
+ /* */
+ /* `usedBV' is reset at the start of each parse or charstring. */
+ /* vsindex cannot be changed after a BV is used. */
+ /* */
+ /* Note: NDV is long (32/64 bit), while BV is 16.16 (FT_Int32). */
+ typedef struct CFF_BlendRec_
+ {
+ FT_Bool builtBV; /* blendV has been built */
+ FT_Bool usedBV; /* blendV has been used */
+ CFF_Font font; /* top level font struct */
+ FT_UInt lastVsindex; /* last vsindex used */
+ FT_UInt lenNDV; /* normDV length (aka numAxes) */
+ FT_Fixed* lastNDV; /* last NDV used */
+ FT_UInt lenBV; /* BlendV length (aka numMasters) */
+ FT_Int32* BV; /* current blendV (per DICT/glyph) */
+
+ } CFF_BlendRec, *CFF_Blend;
+
+
typedef struct CFF_FontRecDictRec_
{
FT_UInt version;
@@ -145,9 +220,23 @@
FT_ULong cid_fd_select_offset;
FT_UInt cid_font_name;
+ /* the next fields come from the data of the deprecated */
+ /* `MultipleMaster' operator; they are needed to parse the (also */
+ /* deprecated) `blend' operator in Type 2 charstrings */
+ FT_UShort num_designs;
+ FT_UShort num_axes;
+
+ /* fields for CFF2 */
+ FT_ULong vstore_offset;
+ FT_UInt maxstack;
+
} CFF_FontRecDictRec, *CFF_FontRecDict;
+ /* forward reference */
+ typedef struct CFF_SubFontRec_* CFF_SubFont;
+
+
typedef struct CFF_PrivateRec_
{
FT_Byte num_blue_values;
@@ -180,6 +269,10 @@
FT_Pos default_width;
FT_Pos nominal_width;
+ /* fields for CFF2 */
+ FT_UInt vsindex;
+ CFF_SubFont subfont;
+
} CFF_PrivateRec, *CFF_Private;
@@ -207,10 +300,31 @@
CFF_FontRecDictRec font_dict;
CFF_PrivateRec private_dict;
- CFF_IndexRec local_subrs_index;
- FT_Byte** local_subrs; /* array of pointers into Local Subrs INDEX data */
+ /* fields for CFF2 */
+ CFF_BlendRec blend; /* current blend vector */
+ FT_UInt lenNDV; /* current length NDV or zero */
+ FT_Fixed* NDV; /* ptr to current NDV or NULL */
- } CFF_SubFontRec, *CFF_SubFont;
+ /* `blend_stack' is a writable buffer to hold blend results. */
+ /* This buffer is to the side of the normal cff parser stack; */
+ /* `cff_parse_blend' and `cff_blend_doBlend' push blend results here. */
+ /* The normal stack then points to these values instead of the DICT */
+ /* because all other operators in Private DICT clear the stack. */
+ /* `blend_stack' could be cleared at each operator other than blend. */
+ /* Blended values are stored as 5-byte fixed point values. */
+
+ FT_Byte* blend_stack; /* base of stack allocation */
+ FT_Byte* blend_top; /* first empty slot */
+ FT_UInt blend_used; /* number of bytes in use */
+ FT_UInt blend_alloc; /* number of bytes allocated */
+
+ CFF_IndexRec local_subrs_index;
+ FT_Byte** local_subrs; /* array of pointers */
+ /* into Local Subrs INDEX data */
+
+ FT_UInt32 random;
+
+ } CFF_SubFontRec;
#define CFF_MAX_CID_FONTS 256
@@ -218,16 +332,20 @@
typedef struct CFF_FontRec_
{
+ FT_Library library;
FT_Stream stream;
- FT_Memory memory;
+ FT_Memory memory; /* TODO: take this from stream->memory? */
+ FT_ULong base_offset; /* offset to start of CFF */
FT_UInt num_faces;
FT_UInt num_glyphs;
FT_Byte version_major;
FT_Byte version_minor;
FT_Byte header_size;
- FT_Byte absolute_offsize;
+ FT_UInt top_dict_length; /* cff2 only */
+
+ FT_Bool cff2;
CFF_IndexRec name_index;
CFF_IndexRec top_dict_index;
@@ -250,6 +368,7 @@
FT_UInt num_strings;
FT_Byte** strings;
FT_Byte* string_pool;
+ FT_ULong string_pool_size;
CFF_SubFontRec top_font;
FT_UInt num_subfonts;
@@ -263,6 +382,9 @@
/* interface to Postscript Names service */
FT_Service_PsCMaps psnames;
+ /* interface to CFFLoad service */
+ const void* cffload;
+
/* since version 2.3.0 */
PS_FontInfoRec* font_info; /* font info dictionary */
@@ -273,12 +395,18 @@
/* since version 2.4.12 */
FT_Generic cf2_instance;
- } CFF_FontRec, *CFF_Font;
+ /* since version 2.7.1 */
+ CFF_VStoreRec vstore; /* parsed vstore structure */
+
+ /* since version 2.9 */
+ PS_FontExtraRec* font_extra;
+
+ } CFF_FontRec;
FT_END_HEADER
-#endif /* __CFFTYPES_H__ */
+#endif /* CFFTYPES_H_ */
/* END */
diff --git a/include/internal/ftcalc.h b/include/freetype/internal/ftcalc.h
similarity index 86%
rename from include/internal/ftcalc.h
rename to include/freetype/internal/ftcalc.h
index 75752c3..818a812 100644
--- a/include/internal/ftcalc.h
+++ b/include/freetype/internal/ftcalc.h
@@ -4,7 +4,7 @@
/* */
/* Arithmetic computations (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTCALC_H__
-#define __FTCALC_H__
+#ifndef FTCALC_H_
+#define FTCALC_H_
#include <ft2build.h>
@@ -47,7 +47,7 @@
FT_MulFix_arm( FT_Int32 a,
FT_Int32 b )
{
- register FT_Int32 t, t2;
+ FT_Int32 t, t2;
__asm
@@ -80,7 +80,7 @@
FT_MulFix_arm( FT_Int32 a,
FT_Int32 b )
{
- register FT_Int32 t, t2;
+ FT_Int32 t, t2;
__asm__ __volatile__ (
@@ -116,7 +116,7 @@
FT_MulFix_i386( FT_Int32 a,
FT_Int32 b )
{
- register FT_Int32 result;
+ FT_Int32 result;
__asm__ __volatile__ (
@@ -152,7 +152,7 @@
FT_MulFix_i386( FT_Int32 a,
FT_Int32 b )
{
- register FT_Int32 result;
+ FT_Int32 result;
__asm
{
@@ -300,6 +300,18 @@
/*
+ * This function normalizes a vector and returns its original length.
+ * The normalized vector is a 16.16 fixed-point unit vector with length
+ * close to 0x10000. The accuracy of the returned length is limited to
+ * 16 bits also. The function utilizes quick inverse square root
+ * approximation without divisions and square roots relying on Newton's
+ * iterations instead.
+ */
+ FT_BASE( FT_UInt32 )
+ FT_Vector_NormLen( FT_Vector* vector );
+
+
+ /*
* Return -1, 0, or +1, depending on the orientation of a given corner.
* We use the Cartesian coordinate system, with positive vertical values
* going upwards. The function returns +1 if the corner turns to the
@@ -387,20 +399,46 @@
#endif /* 0 */
-#define INT_TO_F26DOT6( x ) ( (FT_Long)(x) << 6 )
-#define INT_TO_F2DOT14( x ) ( (FT_Long)(x) << 14 )
-#define INT_TO_FIXED( x ) ( (FT_Long)(x) << 16 )
-#define F2DOT14_TO_FIXED( x ) ( (FT_Long)(x) << 2 )
-#define FLOAT_TO_FIXED( x ) ( (FT_Long)( x * 65536.0 ) )
+#define INT_TO_F26DOT6( x ) ( (FT_Long)(x) * 64 ) /* << 6 */
+#define INT_TO_F2DOT14( x ) ( (FT_Long)(x) * 16384 ) /* << 14 */
+#define INT_TO_FIXED( x ) ( (FT_Long)(x) * 65536 ) /* << 16 */
+#define F2DOT14_TO_FIXED( x ) ( (FT_Long)(x) * 4 ) /* << 2 */
#define FIXED_TO_INT( x ) ( FT_RoundFix( x ) >> 16 )
#define ROUND_F26DOT6( x ) ( x >= 0 ? ( ( (x) + 32 ) & -64 ) \
: ( -( ( 32 - (x) ) & -64 ) ) )
+ /*
+ * The following macros have two purposes.
+ *
+ * . Tag places where overflow is expected and harmless.
+ *
+ * . Avoid run-time sanitizer errors.
+ *
+ * Use with care!
+ */
+#define ADD_LONG( a, b ) \
+ (FT_Long)( (FT_ULong)(a) + (FT_ULong)(b) )
+#define SUB_LONG( a, b ) \
+ (FT_Long)( (FT_ULong)(a) - (FT_ULong)(b) )
+#define MUL_LONG( a, b ) \
+ (FT_Long)( (FT_ULong)(a) * (FT_ULong)(b) )
+#define NEG_LONG( a ) \
+ (FT_Long)( (FT_ULong)0 - (FT_ULong)(a) )
+
+#define ADD_INT32( a, b ) \
+ (FT_Int32)( (FT_UInt32)(a) + (FT_UInt32)(b) )
+#define SUB_INT32( a, b ) \
+ (FT_Int32)( (FT_UInt32)(a) - (FT_UInt32)(b) )
+#define MUL_INT32( a, b ) \
+ (FT_Int32)( (FT_UInt32)(a) * (FT_UInt32)(b) )
+#define NEG_INT32( a ) \
+ (FT_Int32)( (FT_UInt32)0 - (FT_UInt32)(a) )
+
FT_END_HEADER
-#endif /* __FTCALC_H__ */
+#endif /* FTCALC_H_ */
/* END */
diff --git a/include/internal/ftdebug.h b/include/freetype/internal/ftdebug.h
similarity index 98%
rename from include/internal/ftdebug.h
rename to include/freetype/internal/ftdebug.h
index 216c730..292a4ee 100644
--- a/include/internal/ftdebug.h
+++ b/include/freetype/internal/ftdebug.h
@@ -4,7 +4,7 @@
/* */
/* Debugging and logging component (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -21,8 +21,8 @@
/***************************************************************************/
-#ifndef __FTDEBUG_H__
-#define __FTDEBUG_H__
+#ifndef FTDEBUG_H_
+#define FTDEBUG_H_
#include <ft2build.h>
@@ -249,7 +249,7 @@
FT_END_HEADER
-#endif /* __FTDEBUG_H__ */
+#endif /* FTDEBUG_H_ */
/* END */
diff --git a/include/internal/ftdriver.h b/include/freetype/internal/ftdrv.h
similarity index 96%
rename from include/internal/ftdriver.h
rename to include/freetype/internal/ftdrv.h
index 16856d3..58dd35a 100644
--- a/include/internal/ftdriver.h
+++ b/include/freetype/internal/ftdrv.h
@@ -1,10 +1,10 @@
/***************************************************************************/
/* */
-/* ftdriver.h */
+/* ftdrv.h */
/* */
-/* FreeType font driver interface (specification). */
+/* FreeType internal font driver interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTDRIVER_H__
-#define __FTDRIVER_H__
+#ifndef FTDRV_H_
+#define FTDRV_H_
#include <ft2build.h>
@@ -67,15 +67,6 @@
FT_Int32 load_flags );
- typedef FT_UInt
- (*FT_CharMap_CharIndexFunc)( FT_CharMap charmap,
- FT_Long charcode );
-
- typedef FT_Long
- (*FT_CharMap_CharNextFunc)( FT_CharMap charmap,
- FT_Long charcode );
-
-
typedef FT_Error
(*FT_Face_GetKerningFunc)( FT_Face face,
FT_UInt left_glyph,
@@ -213,7 +204,7 @@
/* And when it is no longer needed a `destroy' function needs to be */
/* called to release that allocation. */
/* */
- /* `fcinit.c' (ft_create_default_module_classes) already contains a */
+ /* `ftinit.c' (ft_create_default_module_classes) already contains a */
/* mechanism to call these functions for the default modules */
/* described in `ftmodule.h'. */
/* */
@@ -403,7 +394,7 @@
FT_END_HEADER
-#endif /* __FTDRIVER_H__ */
+#endif /* FTDRV_H_ */
/* END */
diff --git a/include/internal/ftgloadr.h b/include/freetype/internal/ftgloadr.h
similarity index 85%
rename from include/internal/ftgloadr.h
rename to include/freetype/internal/ftgloadr.h
index 970dd70..a002fdb 100644
--- a/include/internal/ftgloadr.h
+++ b/include/freetype/internal/ftgloadr.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph loader (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTGLOADR_H__
-#define __FTGLOADR_H__
+#ifndef FTGLOADR_H_
+#define FTGLOADR_H_
#include <ft2build.h>
@@ -36,24 +36,6 @@
/* The glyph loader is an internal object used to load several glyphs */
/* together (for example, in the case of composites). */
/* */
- /* <Note> */
- /* The glyph loader implementation is not part of the high-level API, */
- /* hence the forward structure declaration. */
- /* */
- typedef struct FT_GlyphLoaderRec_* FT_GlyphLoader ;
-
-
-#if 0 /* moved to freetype.h in version 2.2 */
-#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1
-#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2
-#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4
-#define FT_SUBGLYPH_FLAG_SCALE 8
-#define FT_SUBGLYPH_FLAG_XY_SCALE 0x40
-#define FT_SUBGLYPH_FLAG_2X2 0x80
-#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200
-#endif
-
-
typedef struct FT_SubGlyphRec_
{
FT_Int index;
@@ -89,7 +71,7 @@
void* other; /* for possible future extension? */
- } FT_GlyphLoaderRec;
+ } FT_GlyphLoaderRec, *FT_GlyphLoader;
/* create new empty glyph loader */
@@ -166,7 +148,7 @@
FT_END_HEADER
-#endif /* __FTGLOADR_H__ */
+#endif /* FTGLOADR_H_ */
/* END */
diff --git a/include/freetype/internal/fthash.h b/include/freetype/internal/fthash.h
new file mode 100644
index 0000000..f22f9d5
--- /dev/null
+++ b/include/freetype/internal/fthash.h
@@ -0,0 +1,136 @@
+/***************************************************************************/
+/* */
+/* fthash.h */
+/* */
+/* Hashing functions (specification). */
+/* */
+/***************************************************************************/
+
+/*
+ * Copyright 2000 Computing Research Labs, New Mexico State University
+ * Copyright 2001-2015
+ * Francesco Zappa Nardelli
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
+ * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+ /*************************************************************************/
+ /* */
+ /* This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50 */
+ /* */
+ /* taken from Mark Leisher's xmbdfed package */
+ /* */
+ /*************************************************************************/
+
+
+#ifndef FTHASH_H_
+#define FTHASH_H_
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+
+FT_BEGIN_HEADER
+
+
+ typedef union FT_Hashkey_
+ {
+ FT_Int num;
+ const char* str;
+
+ } FT_Hashkey;
+
+
+ typedef struct FT_HashnodeRec_
+ {
+ FT_Hashkey key;
+ size_t data;
+
+ } FT_HashnodeRec;
+
+ typedef struct FT_HashnodeRec_ *FT_Hashnode;
+
+
+ typedef FT_ULong
+ (*FT_Hash_LookupFunc)( FT_Hashkey* key );
+
+ typedef FT_Bool
+ (*FT_Hash_CompareFunc)( FT_Hashkey* a,
+ FT_Hashkey* b );
+
+
+ typedef struct FT_HashRec_
+ {
+ FT_UInt limit;
+ FT_UInt size;
+ FT_UInt used;
+
+ FT_Hash_LookupFunc lookup;
+ FT_Hash_CompareFunc compare;
+
+ FT_Hashnode* table;
+
+ } FT_HashRec;
+
+ typedef struct FT_HashRec_ *FT_Hash;
+
+
+ FT_Error
+ ft_hash_str_init( FT_Hash hash,
+ FT_Memory memory );
+
+ FT_Error
+ ft_hash_num_init( FT_Hash hash,
+ FT_Memory memory );
+
+ void
+ ft_hash_str_free( FT_Hash hash,
+ FT_Memory memory );
+
+#define ft_hash_num_free ft_hash_str_free
+
+ FT_Error
+ ft_hash_str_insert( const char* key,
+ size_t data,
+ FT_Hash hash,
+ FT_Memory memory );
+
+ FT_Error
+ ft_hash_num_insert( FT_Int num,
+ size_t data,
+ FT_Hash hash,
+ FT_Memory memory );
+
+ size_t*
+ ft_hash_str_lookup( const char* key,
+ FT_Hash hash );
+
+ size_t*
+ ft_hash_num_lookup( FT_Int num,
+ FT_Hash hash );
+
+
+FT_END_HEADER
+
+
+#endif /* FTHASH_H_ */
+
+
+/* END */
diff --git a/include/internal/ftmemory.h b/include/freetype/internal/ftmemory.h
similarity index 96%
rename from include/internal/ftmemory.h
rename to include/freetype/internal/ftmemory.h
index c0c553b..054eaec 100644
--- a/include/internal/ftmemory.h
+++ b/include/freetype/internal/ftmemory.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType memory management macros (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTMEMORY_H__
-#define __FTMEMORY_H__
+#ifndef FTMEMORY_H_
+#define FTMEMORY_H_
#include <ft2build.h>
@@ -65,13 +65,15 @@
#ifdef __cplusplus
- extern "C++"
+extern "C++"
+{
template <typename T> inline T*
cplusplus_typeof( T*,
void *v )
{
return static_cast <T*> ( v );
}
+}
#define FT_ASSIGNP( p, val ) (p) = cplusplus_typeof( (p), (val) )
@@ -106,10 +108,12 @@
/*
* The allocation functions return a pointer, and the error code
- * is written to through the `p_error' parameter. See below for
- * for documentation.
+ * is written to through the `p_error' parameter.
*/
+ /* The `q' variants of the functions below (`q' for `quick') don't fill */
+ /* the allocated or reallocated memory with zero bytes. */
+
FT_BASE( FT_Pointer )
ft_mem_alloc( FT_Memory memory,
FT_Long size,
@@ -141,6 +145,9 @@
const void* P );
+ /* The `Q' variants of the macros below (`Q' for `quick') don't fill */
+ /* the allocated or reallocated memory with zero bytes. */
+
#define FT_MEM_ALLOC( ptr, size ) \
FT_ASSIGNP_INNER( ptr, ft_mem_alloc( memory, \
(FT_Long)(size), \
@@ -203,7 +210,7 @@
NULL, \
&error ) )
-#define FT_MEM_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz) \
+#define FT_MEM_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
(FT_Long)(itmsz), \
(FT_Long)(oldcnt), \
@@ -380,7 +387,7 @@
FT_END_HEADER
-#endif /* __FTMEMORY_H__ */
+#endif /* FTMEMORY_H_ */
/* END */
diff --git a/include/internal/ftobjs.h b/include/freetype/internal/ftobjs.h
similarity index 91%
rename from include/internal/ftobjs.h
rename to include/freetype/internal/ftobjs.h
index 37317a4..1c3c6ad 100644
--- a/include/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType private base classes (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,8 +23,8 @@
/*************************************************************************/
-#ifndef __FTOBJS_H__
-#define __FTOBJS_H__
+#ifndef FTOBJS_H_
+#define FTOBJS_H_
#include <ft2build.h>
#include FT_RENDER_H
@@ -36,6 +36,7 @@
#include FT_INTERNAL_AUTOHINT_H
#include FT_INTERNAL_SERVICE_H
#include FT_INTERNAL_PIC_H
+#include FT_INTERNAL_CALC_H
#ifdef FT_CONFIG_OPTION_INCREMENTAL
#include FT_INCREMENTAL_H
@@ -83,15 +84,31 @@
x > y ? x + ( 3 * y >> 3 ) \
: y + ( 3 * x >> 3 ) )
- /* we use the TYPEOF macro to suppress signedness compilation warnings */
-#define FT_PAD_FLOOR( x, n ) ( (x) & ~TYPEOF( x )( (n)-1 ) )
-#define FT_PAD_ROUND( x, n ) FT_PAD_FLOOR( (x) + ((n)/2), n )
-#define FT_PAD_CEIL( x, n ) FT_PAD_FLOOR( (x) + ((n)-1), n )
+ /* we use FT_TYPEOF to suppress signedness compilation warnings */
+#define FT_PAD_FLOOR( x, n ) ( (x) & ~FT_TYPEOF( x )( (n) - 1 ) )
+#define FT_PAD_ROUND( x, n ) FT_PAD_FLOOR( (x) + (n) / 2, n )
+#define FT_PAD_CEIL( x, n ) FT_PAD_FLOOR( (x) + (n) - 1, n )
-#define FT_PIX_FLOOR( x ) ( (x) & ~TYPEOF( x )63 )
+#define FT_PIX_FLOOR( x ) ( (x) & ~FT_TYPEOF( x )63 )
#define FT_PIX_ROUND( x ) FT_PIX_FLOOR( (x) + 32 )
#define FT_PIX_CEIL( x ) FT_PIX_FLOOR( (x) + 63 )
+ /* specialized versions (for signed values) */
+ /* that don't produce run-time errors due to integer overflow */
+#define FT_PAD_ROUND_LONG( x, n ) FT_PAD_FLOOR( ADD_LONG( (x), (n) / 2 ), \
+ n )
+#define FT_PAD_CEIL_LONG( x, n ) FT_PAD_FLOOR( ADD_LONG( (x), (n) - 1 ), \
+ n )
+#define FT_PIX_ROUND_LONG( x ) FT_PIX_FLOOR( ADD_LONG( (x), 32 ) )
+#define FT_PIX_CEIL_LONG( x ) FT_PIX_FLOOR( ADD_LONG( (x), 63 ) )
+
+#define FT_PAD_ROUND_INT32( x, n ) FT_PAD_FLOOR( ADD_INT32( (x), (n) / 2 ), \
+ n )
+#define FT_PAD_CEIL_INT32( x, n ) FT_PAD_FLOOR( ADD_INT32( (x), (n) - 1 ), \
+ n )
+#define FT_PIX_ROUND_INT32( x ) FT_PIX_FLOOR( ADD_INT32( (x), 32 ) )
+#define FT_PIX_CEIL_INT32( x ) FT_PIX_FLOOR( ADD_INT32( (x), 63 ) )
+
/*
* character classification functions -- since these are used to parse
@@ -138,8 +155,8 @@
} FT_CMapRec;
- /* typecase any pointer to a charmap handle */
-#define FT_CMAP( x ) ((FT_CMap)( x ))
+ /* typecast any pointer to a charmap handle */
+#define FT_CMAP( x ) ( (FT_CMap)( x ) )
/* obvious macros */
#define FT_CMAP_PLATFORM_ID( x ) FT_CMAP( x )->charmap.platform_id
@@ -193,6 +210,7 @@
typedef struct FT_CMap_ClassRec_
{
FT_ULong size;
+
FT_CMap_InitFunc init;
FT_CMap_DoneFunc done;
FT_CMap_CharIndexFunc char_index;
@@ -294,6 +312,27 @@
FT_CMap_Done( FT_CMap cmap );
+ /* adds LCD padding to Min and Max boundaries */
+ FT_BASE( void )
+ ft_lcd_padding( FT_Pos* Min,
+ FT_Pos* Max,
+ FT_GlyphSlot slot );
+
+#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+
+ typedef void (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap* bitmap,
+ FT_Render_Mode render_mode,
+ FT_Byte* weights );
+
+
+ /* This is the default LCD filter, an in-place, 5-tap FIR filter. */
+ FT_BASE( void )
+ ft_lcd_filter_fir( FT_Bitmap* bitmap,
+ FT_Render_Mode mode,
+ FT_LcdFiveTapFilter weights );
+
+#endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
+
/*************************************************************************/
/* */
/* <Struct> */
@@ -341,11 +380,20 @@
/* this data when first opened. This field exists only if */
/* @FT_CONFIG_OPTION_INCREMENTAL is defined. */
/* */
- /* ignore_unpatented_hinter :: */
- /* This boolean flag instructs the glyph loader to ignore the */
- /* native font hinter, if one is found. This is exclusively used */
- /* in the case when the unpatented hinter is compiled within the */
- /* library. */
+ /* no_stem_darkening :: */
+ /* Overrides the module-level default, see @stem-darkening[cff], */
+ /* for example. FALSE and TRUE toggle stem darkening on and off, */
+ /* respectively, value~-1 means to use the module/driver default. */
+ /* */
+ /* random_seed :: */
+ /* If positive, override the seed value for the CFF `random' */
+ /* operator. Value~0 means to use the font's value. Value~-1 */
+ /* means to use the CFF driver's default. */
+ /* */
+ /* lcd_weights :: */
+ /* lcd_filter_func :: */
+ /* If subpixel rendering is activated, the LCD filtering weights */
+ /* and callback function. */
/* */
/* refcount :: */
/* A counter initialized to~1 at the time an @FT_Face structure is */
@@ -355,9 +403,9 @@
/* */
typedef struct FT_Face_InternalRec_
{
- FT_Matrix transform_matrix;
- FT_Vector transform_delta;
- FT_Int transform_flags;
+ FT_Matrix transform_matrix;
+ FT_Vector transform_delta;
+ FT_Int transform_flags;
FT_ServiceCacheRec services;
@@ -365,8 +413,15 @@
FT_Incremental_InterfaceRec* incremental_interface;
#endif
- FT_Bool ignore_unpatented_hinter;
- FT_Int refcount;
+ FT_Char no_stem_darkening;
+ FT_Int32 random_seed;
+
+#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+ FT_LcdFiveTapFilter lcd_weights; /* filter weights, if any */
+ FT_Bitmap_LcdFilterFunc lcd_filter_func; /* filtering callback */
+#endif
+
+ FT_Int refcount;
} FT_Face_InternalRec;
@@ -419,8 +474,6 @@
} FT_GlyphSlot_InternalRec;
-#if 0
-
/*************************************************************************/
/* */
/* <Struct> */
@@ -428,18 +481,26 @@
/* */
/* <Description> */
/* This structure contains the internal fields of each FT_Size */
- /* object. Currently, it's empty. */
+ /* object. */
+ /* */
+ /* <Fields> */
+ /* module_data :: Data specific to a driver module. */
+ /* */
+ /* autohint_mode :: The used auto-hinting mode. */
+ /* */
+ /* autohint_metrics :: Metrics used by the auto-hinter. */
/* */
/*************************************************************************/
typedef struct FT_Size_InternalRec_
{
- /* empty */
+ void* module_data;
+
+ FT_Render_Mode autohint_mode;
+ FT_Size_Metrics autohint_metrics;
} FT_Size_InternalRec;
-#endif
-
/*************************************************************************/
/*************************************************************************/
@@ -479,7 +540,8 @@
/* typecast an object to an FT_Module */
-#define FT_MODULE( x ) ((FT_Module)( x ))
+#define FT_MODULE( x ) ( (FT_Module)(x) )
+
#define FT_MODULE_CLASS( x ) FT_MODULE( x )->clazz
#define FT_MODULE_LIBRARY( x ) FT_MODULE( x )->library
#define FT_MODULE_MEMORY( x ) FT_MODULE( x )->memory
@@ -506,6 +568,9 @@
#define FT_DRIVER_HAS_HINTER( x ) ( FT_MODULE_CLASS( x )->module_flags & \
FT_MODULE_DRIVER_HAS_HINTER )
+#define FT_DRIVER_HINTS_LIGHTLY( x ) ( FT_MODULE_CLASS( x )->module_flags & \
+ FT_MODULE_DRIVER_HINTS_LIGHTLY )
+
/*************************************************************************/
/* */
@@ -534,7 +599,16 @@
FT_BASE( FT_Pointer )
ft_module_get_service( FT_Module module,
- const char* service_id );
+ const char* service_id,
+ FT_Bool global );
+
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ FT_BASE( FT_Error )
+ ft_property_string_set( FT_Library library,
+ const FT_String* module_name,
+ const FT_String* property_name,
+ FT_String* value );
+#endif
/* */
@@ -553,9 +627,9 @@
/* a few macros used to perform easy typecasts with minimal brain damage */
-#define FT_FACE( x ) ((FT_Face)(x))
-#define FT_SIZE( x ) ((FT_Size)(x))
-#define FT_SLOT( x ) ((FT_GlyphSlot)(x))
+#define FT_FACE( x ) ( (FT_Face)(x) )
+#define FT_SIZE( x ) ( (FT_Size)(x) )
+#define FT_SLOT( x ) ( (FT_GlyphSlot)(x) )
#define FT_FACE_DRIVER( x ) FT_FACE( x )->driver
#define FT_FACE_LIBRARY( x ) FT_FACE_DRIVER( x )->root.library
@@ -656,6 +730,12 @@
ft_glyphslot_free_bitmap( FT_GlyphSlot slot );
+ /* Preset bitmap metrics of an outline glyphslot prior to rendering. */
+ FT_BASE( void )
+ ft_glyphslot_preset_bitmap( FT_GlyphSlot slot,
+ FT_Render_Mode mode,
+ const FT_Vector* origin );
+
/* Allocate a new bitmap buffer in a glyph slot. */
FT_BASE( FT_Error )
ft_glyphslot_alloc_bitmap( FT_GlyphSlot slot,
@@ -682,10 +762,10 @@
/*************************************************************************/
-#define FT_RENDERER( x ) ((FT_Renderer)( x ))
-#define FT_GLYPH( x ) ((FT_Glyph)( x ))
-#define FT_BITMAP_GLYPH( x ) ((FT_BitmapGlyph)( x ))
-#define FT_OUTLINE_GLYPH( x ) ((FT_OutlineGlyph)( x ))
+#define FT_RENDERER( x ) ( (FT_Renderer)(x) )
+#define FT_GLYPH( x ) ( (FT_Glyph)(x) )
+#define FT_BITMAP_GLYPH( x ) ( (FT_BitmapGlyph)(x) )
+#define FT_OUTLINE_GLYPH( x ) ( (FT_OutlineGlyph)(x) )
typedef struct FT_RendererRec_
@@ -716,7 +796,7 @@
/* typecast a module into a driver easily */
-#define FT_DRIVER( x ) ((FT_Driver)(x))
+#define FT_DRIVER( x ) ( (FT_Driver)(x) )
/* typecast a module as a driver, and get its driver class */
#define FT_DRIVER_CLASS( x ) FT_DRIVER( x )->clazz
@@ -769,19 +849,7 @@
/* This hook is used by the TrueType debugger. It must be set to an */
/* alternate truetype bytecode interpreter function. */
-#define FT_DEBUG_HOOK_TRUETYPE 0
-
-
- /* Set this debug hook to a non-null pointer to force unpatented hinting */
- /* for all faces when both TT_USE_BYTECODE_INTERPRETER and */
- /* TT_CONFIG_OPTION_UNPATENTED_HINTING are defined. This is only used */
- /* during debugging. */
-#define FT_DEBUG_HOOK_UNPATENTED_HINTING 1
-
-
- typedef void (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap* bitmap,
- FT_Render_Mode render_mode,
- FT_Library library );
+#define FT_DEBUG_HOOK_TRUETYPE 0
/*************************************************************************/
@@ -822,20 +890,12 @@
/* handle to the current renderer for the */
/* FT_GLYPH_FORMAT_OUTLINE format. */
/* */
- /* auto_hinter :: XXX */
+ /* auto_hinter :: The auto-hinter module interface. */
/* */
- /* raster_pool :: The raster object's render pool. This can */
- /* ideally be changed dynamically at run-time. */
- /* */
- /* raster_pool_size :: The size of the render pool in bytes. */
- /* */
- /* debug_hooks :: XXX */
- /* */
- /* lcd_filter :: If subpixel rendering is activated, the */
- /* selected LCD filter mode. */
- /* */
- /* lcd_extra :: If subpixel rendering is activated, the number */
- /* of extra pixels needed for the LCD filter. */
+ /* debug_hooks :: An array of four function pointers that allow */
+ /* debuggers to hook into a font format's */
+ /* interpreter. Currently, only the TrueType */
+ /* bytecode debugger uses this. */
/* */
/* lcd_weights :: If subpixel rendering is activated, the LCD */
/* filter weights, if any. */
@@ -844,7 +904,7 @@
/* filtering callback function. */
/* */
/* pic_container :: Contains global structs and tables, instead */
- /* of defining them globallly. */
+ /* of defining them globally. */
/* */
/* refcount :: A counter initialized to~1 at the time an */
/* @FT_Library structure is created. */
@@ -868,16 +928,10 @@
FT_Renderer cur_renderer; /* current outline renderer */
FT_Module auto_hinter;
- FT_Byte* raster_pool; /* scan-line conversion */
- /* render pool */
- FT_ULong raster_pool_size; /* size of render pool in bytes */
-
FT_DebugHook_Func debug_hooks[4];
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- FT_LcdFilter lcd_filter;
- FT_Int lcd_extra; /* number of extra pixels */
- FT_Byte lcd_weights[7]; /* filter weights, if any */
+ FT_LcdFiveTapFilter lcd_weights; /* filter weights, if any */
FT_Bitmap_LcdFilterFunc lcd_filter_func; /* filtering callback */
#endif
@@ -982,8 +1036,8 @@
/* */
/* <Description> */
/* Used to initialize an instance of FT_Outline_Funcs struct. */
- /* When FT_CONFIG_OPTION_PIC is defined an init funtion will need to */
- /* be called with a pre-allocated structure to be filled. */
+ /* When FT_CONFIG_OPTION_PIC is defined an init function will need */
+ /* to be called with a pre-allocated structure to be filled. */
/* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
/* allocated in the global scope (or the scope where the macro */
/* is used). */
@@ -1041,8 +1095,8 @@
/* */
/* <Description> */
/* Used to initialize an instance of FT_Raster_Funcs struct. */
- /* When FT_CONFIG_OPTION_PIC is defined an init funtion will need to */
- /* be called with a pre-allocated structure to be filled. */
+ /* When FT_CONFIG_OPTION_PIC is defined an init function will need */
+ /* to be called with a pre-allocated structure to be filled. */
/* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
/* allocated in the global scope (or the scope where the macro */
/* is used). */
@@ -1101,8 +1155,8 @@
/* */
/* <Description> */
/* Used to initialize an instance of FT_Glyph_Class struct. */
- /* When FT_CONFIG_OPTION_PIC is defined an init funtion will need to */
- /* be called with a pre-allocated stcture to be filled. */
+ /* When FT_CONFIG_OPTION_PIC is defined an init function will need */
+ /* to be called with a pre-allocated structure to be filled. */
/* When FT_CONFIG_OPTION_PIC is not defined the struct will be */
/* allocated in the global scope (or the scope where the macro */
/* is used). */
@@ -1175,11 +1229,11 @@
/* <Description> */
/* Used to initialize an instance of FT_Renderer_Class struct. */
/* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' funtion will need */
- /* to be called with a pointer where the allocated structure is */
+ /* When FT_CONFIG_OPTION_PIC is defined a `create' function will */
+ /* need to be called with a pointer where the allocated structure is */
/* returned. And when it is no longer needed a `destroy' function */
/* needs to be called to release that allocation. */
- /* `fcinit.c' (ft_create_default_module_classes) already contains */
+ /* `ftinit.c' (ft_create_default_module_classes) already contains */
/* a mechanism to call these functions for the default modules */
/* described in `ftmodule.h'. */
/* */
@@ -1379,11 +1433,11 @@
/* <Description> */
/* Used to initialize an instance of an FT_Module_Class struct. */
/* */
- /* When FT_CONFIG_OPTION_PIC is defined a `create' funtion needs to */
- /* be called with a pointer where the allocated structure is */
+ /* When FT_CONFIG_OPTION_PIC is defined a `create' function needs */
+ /* to be called with a pointer where the allocated structure is */
/* returned. And when it is no longer needed a `destroy' function */
/* needs to be called to release that allocation. */
- /* `fcinit.c' (ft_create_default_module_classes) already contains */
+ /* `ftinit.c' (ft_create_default_module_classes) already contains */
/* a mechanism to call these functions for the default modules */
/* described in `ftmodule.h'. */
/* */
@@ -1565,7 +1619,7 @@
FT_END_HEADER
-#endif /* __FTOBJS_H__ */
+#endif /* FTOBJS_H_ */
/* END */
diff --git a/include/internal/ftpic.h b/include/freetype/internal/ftpic.h
similarity index 94%
rename from include/internal/ftpic.h
rename to include/freetype/internal/ftpic.h
index 7f9154f..5214f05 100644
--- a/include/internal/ftpic.h
+++ b/include/freetype/internal/ftpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services (declaration). */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,8 +23,8 @@
/*************************************************************************/
-#ifndef __FTPIC_H__
-#define __FTPIC_H__
+#ifndef FTPIC_H_
+#define FTPIC_H_
FT_BEGIN_HEADER
@@ -65,7 +65,7 @@
FT_END_HEADER
-#endif /* __FTPIC_H__ */
+#endif /* FTPIC_H_ */
/* END */
diff --git a/src/autofit/hbshim.h b/include/freetype/internal/ftpsprop.h
similarity index 60%
rename from src/autofit/hbshim.h
rename to include/freetype/internal/ftpsprop.h
index 5636ca6..abbb628 100644
--- a/src/autofit/hbshim.h
+++ b/include/freetype/internal/ftpsprop.h
@@ -1,10 +1,10 @@
/***************************************************************************/
/* */
-/* hbshim.h */
+/* ftpsprop.h */
/* */
-/* HarfBuzz interface for accessing OpenType features (specification). */
+/* Get and set properties of PostScript drivers (specification). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2017-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,41 +16,33 @@
/***************************************************************************/
-#ifndef __HBSHIM_H__
-#define __HBSHIM_H__
+#ifndef FTPSPROP_H_
+#define FTPSPROP_H_
#include <ft2build.h>
#include FT_FREETYPE_H
-#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
-
-#include <hb.h>
-#include <hb-ot.h>
-#include <hb-ft.h>
-
-#endif
-
-
FT_BEGIN_HEADER
- FT_Error
- af_get_coverage( AF_FaceGlobals globals,
- AF_StyleClass style_class,
- FT_Byte* gstyles );
- FT_Error
- af_get_char_index( AF_StyleMetrics metrics,
- FT_ULong charcode,
- FT_ULong *codepoint,
- FT_Long *y_offset );
+ FT_BASE_CALLBACK( FT_Error )
+ ps_property_set( FT_Module module, /* PS_Driver */
+ const char* property_name,
+ const void* value,
+ FT_Bool value_is_string );
- /* */
+ FT_BASE_CALLBACK( FT_Error )
+ ps_property_get( FT_Module module, /* PS_Driver */
+ const char* property_name,
+ void* value );
+
FT_END_HEADER
-#endif /* __HBSHIM_H__ */
+
+#endif /* FTPSPROP_H_ */
/* END */
diff --git a/include/internal/ftrfork.h b/include/freetype/internal/ftrfork.h
similarity index 98%
rename from include/internal/ftrfork.h
rename to include/freetype/internal/ftrfork.h
index da61ca7..1aca48a 100644
--- a/include/internal/ftrfork.h
+++ b/include/freetype/internal/ftrfork.h
@@ -4,7 +4,7 @@
/* */
/* Embedded resource forks accessor (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* Masatake YAMATO and Redhat K.K. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -21,8 +21,8 @@
/***************************************************************************/
-#ifndef __FTRFORK_H__
-#define __FTRFORK_H__
+#ifndef FTRFORK_H_
+#define FTRFORK_H_
#include <ft2build.h>
@@ -43,11 +43,12 @@
typedef struct FT_RFork_Ref_
{
- FT_UShort res_id;
- FT_Long offset;
+ FT_Short res_id;
+ FT_Long offset;
} FT_RFork_Ref;
+
#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
typedef FT_Error
(*ft_raccess_guess_func)( FT_Library library,
@@ -227,7 +228,7 @@
/* sort_by_res_id :: */
/* A Boolean to sort the fragmented resource by their ids. */
/* The fragmented resources for `POST' resource should be sorted */
- /* to restore Type1 font properly. For `snft' resources, sorting */
+ /* to restore Type1 font properly. For `sfnt' resources, sorting */
/* may induce a different order of the faces in comparison to that */
/* by QuickDraw API. */
/* */
@@ -260,7 +261,7 @@
FT_END_HEADER
-#endif /* __FTRFORK_H__ */
+#endif /* FTRFORK_H_ */
/* END */
diff --git a/include/internal/ftserv.h b/include/freetype/internal/ftserv.h
similarity index 67%
rename from include/internal/ftserv.h
rename to include/freetype/internal/ftserv.h
index 8f837e4..e01c167 100644
--- a/include/internal/ftserv.h
+++ b/include/freetype/internal/ftserv.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType services (specification only). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -28,8 +28,8 @@
/*************************************************************************/
-#ifndef __FTSERV_H__
-#define __FTSERV_H__
+#ifndef FTSERV_H_
+#define FTSERV_H_
FT_BEGIN_HEADER
@@ -109,27 +109,27 @@
*/
#ifdef __cplusplus
-#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
- FT_BEGIN_STMNT \
- FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
- FT_Pointer _tmp_; \
- FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \
- \
- \
- _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \
- *_pptr_ = _tmp_; \
+#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
+ FT_BEGIN_STMNT \
+ FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
+ FT_Pointer _tmp_; \
+ FT_Pointer* _pptr_ = (FT_Pointer*)&(ptr); \
+ \
+ \
+ _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id, 1 ); \
+ *_pptr_ = _tmp_; \
FT_END_STMNT
#else /* !C++ */
-#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
- FT_BEGIN_STMNT \
- FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
- FT_Pointer _tmp_; \
- \
- \
- _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \
- ptr = _tmp_; \
+#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
+ FT_BEGIN_STMNT \
+ FT_Module module = FT_MODULE( FT_FACE( face )->driver ); \
+ FT_Pointer _tmp_; \
+ \
+ \
+ _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id, 1 ); \
+ ptr = _tmp_; \
FT_END_STMNT
#endif /* !C++ */
@@ -167,6 +167,7 @@
/* FT_DEFINE_SERVICEDESCREC5 */
/* FT_DEFINE_SERVICEDESCREC6 */
/* FT_DEFINE_SERVICEDESCREC7 */
+ /* FT_DEFINE_SERVICEDESCREC8 */
/* */
/* <Description> */
/* Used to initialize an array of FT_ServiceDescRec structures. */
@@ -283,6 +284,78 @@
{ NULL, NULL } \
};
+#define FT_DEFINE_SERVICEDESCREC8( class_, \
+ serv_id_1, serv_data_1, \
+ serv_id_2, serv_data_2, \
+ serv_id_3, serv_data_3, \
+ serv_id_4, serv_data_4, \
+ serv_id_5, serv_data_5, \
+ serv_id_6, serv_data_6, \
+ serv_id_7, serv_data_7, \
+ serv_id_8, serv_data_8 ) \
+ static const FT_ServiceDescRec class_[] = \
+ { \
+ { serv_id_1, serv_data_1 }, \
+ { serv_id_2, serv_data_2 }, \
+ { serv_id_3, serv_data_3 }, \
+ { serv_id_4, serv_data_4 }, \
+ { serv_id_5, serv_data_5 }, \
+ { serv_id_6, serv_data_6 }, \
+ { serv_id_7, serv_data_7 }, \
+ { serv_id_8, serv_data_8 }, \
+ { NULL, NULL } \
+ };
+
+#define FT_DEFINE_SERVICEDESCREC9( class_, \
+ serv_id_1, serv_data_1, \
+ serv_id_2, serv_data_2, \
+ serv_id_3, serv_data_3, \
+ serv_id_4, serv_data_4, \
+ serv_id_5, serv_data_5, \
+ serv_id_6, serv_data_6, \
+ serv_id_7, serv_data_7, \
+ serv_id_8, serv_data_8, \
+ serv_id_9, serv_data_9 ) \
+ static const FT_ServiceDescRec class_[] = \
+ { \
+ { serv_id_1, serv_data_1 }, \
+ { serv_id_2, serv_data_2 }, \
+ { serv_id_3, serv_data_3 }, \
+ { serv_id_4, serv_data_4 }, \
+ { serv_id_5, serv_data_5 }, \
+ { serv_id_6, serv_data_6 }, \
+ { serv_id_7, serv_data_7 }, \
+ { serv_id_8, serv_data_8 }, \
+ { serv_id_9, serv_data_9 }, \
+ { NULL, NULL } \
+ };
+
+#define FT_DEFINE_SERVICEDESCREC10( class_, \
+ serv_id_1, serv_data_1, \
+ serv_id_2, serv_data_2, \
+ serv_id_3, serv_data_3, \
+ serv_id_4, serv_data_4, \
+ serv_id_5, serv_data_5, \
+ serv_id_6, serv_data_6, \
+ serv_id_7, serv_data_7, \
+ serv_id_8, serv_data_8, \
+ serv_id_9, serv_data_9, \
+ serv_id_10, serv_data_10 ) \
+ static const FT_ServiceDescRec class_[] = \
+ { \
+ { serv_id_1, serv_data_1 }, \
+ { serv_id_2, serv_data_2 }, \
+ { serv_id_3, serv_data_3 }, \
+ { serv_id_4, serv_data_4 }, \
+ { serv_id_5, serv_data_5 }, \
+ { serv_id_6, serv_data_6 }, \
+ { serv_id_7, serv_data_7 }, \
+ { serv_id_8, serv_data_8 }, \
+ { serv_id_9, serv_data_9 }, \
+ { serv_id_10, serv_data_10 }, \
+ { NULL, NULL } \
+ };
+
#else /* FT_CONFIG_OPTION_PIC */
#define FT_DEFINE_SERVICEDESCREC1( class_, \
@@ -510,7 +583,7 @@
\
FT_Error \
FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class) \
+ FT_ServiceDescRec** output_class ) \
{ \
FT_ServiceDescRec* clazz = NULL; \
FT_Error error; \
@@ -561,7 +634,7 @@
\
FT_Error \
FT_Create_Class_ ## class_( FT_Library library, \
- FT_ServiceDescRec** output_class) \
+ FT_ServiceDescRec** output_class ) \
{ \
FT_ServiceDescRec* clazz = NULL; \
FT_Error error; \
@@ -593,6 +666,183 @@
return FT_Err_Ok; \
}
+#define FT_DEFINE_SERVICEDESCREC8( class_, \
+ serv_id_1, serv_data_1, \
+ serv_id_2, serv_data_2, \
+ serv_id_3, serv_data_3, \
+ serv_id_4, serv_data_4, \
+ serv_id_5, serv_data_5, \
+ serv_id_6, serv_data_6, \
+ serv_id_7, serv_data_7, \
+ serv_id_8, serv_data_8 ) \
+ void \
+ FT_Destroy_Class_ ## class_( FT_Library library, \
+ FT_ServiceDescRec* clazz ) \
+ { \
+ FT_Memory memory = library->memory; \
+ \
+ \
+ if ( clazz ) \
+ FT_FREE( clazz ); \
+ } \
+ \
+ FT_Error \
+ FT_Create_Class_ ## class_( FT_Library library, \
+ FT_ServiceDescRec** output_class ) \
+ { \
+ FT_ServiceDescRec* clazz = NULL; \
+ FT_Error error; \
+ FT_Memory memory = library->memory; \
+ \
+ \
+ if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 9 ) ) \
+ return error; \
+ \
+ clazz[0].serv_id = serv_id_1; \
+ clazz[0].serv_data = serv_data_1; \
+ clazz[1].serv_id = serv_id_2; \
+ clazz[1].serv_data = serv_data_2; \
+ clazz[2].serv_id = serv_id_3; \
+ clazz[2].serv_data = serv_data_3; \
+ clazz[3].serv_id = serv_id_4; \
+ clazz[3].serv_data = serv_data_4; \
+ clazz[4].serv_id = serv_id_5; \
+ clazz[4].serv_data = serv_data_5; \
+ clazz[5].serv_id = serv_id_6; \
+ clazz[5].serv_data = serv_data_6; \
+ clazz[6].serv_id = serv_id_7; \
+ clazz[6].serv_data = serv_data_7; \
+ clazz[7].serv_id = serv_id_8; \
+ clazz[7].serv_data = serv_data_8; \
+ clazz[8].serv_id = NULL; \
+ clazz[8].serv_data = NULL; \
+ \
+ *output_class = clazz; \
+ \
+ return FT_Err_Ok; \
+ }
+
+#define FT_DEFINE_SERVICEDESCREC9( class_, \
+ serv_id_1, serv_data_1, \
+ serv_id_2, serv_data_2, \
+ serv_id_3, serv_data_3, \
+ serv_id_4, serv_data_4, \
+ serv_id_5, serv_data_5, \
+ serv_id_6, serv_data_6, \
+ serv_id_7, serv_data_7, \
+ serv_id_8, serv_data_8, \
+ serv_id_9, serv_data_9 ) \
+ void \
+ FT_Destroy_Class_ ## class_( FT_Library library, \
+ FT_ServiceDescRec* clazz ) \
+ { \
+ FT_Memory memory = library->memory; \
+ \
+ \
+ if ( clazz ) \
+ FT_FREE( clazz ); \
+ } \
+ \
+ FT_Error \
+ FT_Create_Class_ ## class_( FT_Library library, \
+ FT_ServiceDescRec** output_class ) \
+ { \
+ FT_ServiceDescRec* clazz = NULL; \
+ FT_Error error; \
+ FT_Memory memory = library->memory; \
+ \
+ \
+ if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 10 ) ) \
+ return error; \
+ \
+ clazz[0].serv_id = serv_id_1; \
+ clazz[0].serv_data = serv_data_1; \
+ clazz[1].serv_id = serv_id_2; \
+ clazz[1].serv_data = serv_data_2; \
+ clazz[2].serv_id = serv_id_3; \
+ clazz[2].serv_data = serv_data_3; \
+ clazz[3].serv_id = serv_id_4; \
+ clazz[3].serv_data = serv_data_4; \
+ clazz[4].serv_id = serv_id_5; \
+ clazz[4].serv_data = serv_data_5; \
+ clazz[5].serv_id = serv_id_6; \
+ clazz[5].serv_data = serv_data_6; \
+ clazz[6].serv_id = serv_id_7; \
+ clazz[6].serv_data = serv_data_7; \
+ clazz[7].serv_id = serv_id_8; \
+ clazz[7].serv_data = serv_data_8; \
+ clazz[8].serv_id = serv_id_9; \
+ clazz[8].serv_data = serv_data_9; \
+ clazz[9].serv_id = NULL; \
+ clazz[9].serv_data = NULL; \
+ \
+ *output_class = clazz; \
+ \
+ return FT_Err_Ok; \
+ }
+
+#define FT_DEFINE_SERVICEDESCREC10( class_, \
+ serv_id_1, serv_data_1, \
+ serv_id_2, serv_data_2, \
+ serv_id_3, serv_data_3, \
+ serv_id_4, serv_data_4, \
+ serv_id_5, serv_data_5, \
+ serv_id_6, serv_data_6, \
+ serv_id_7, serv_data_7, \
+ serv_id_8, serv_data_8, \
+ serv_id_9, serv_data_9, \
+ serv_id_10, serv_data_10 ) \
+ void \
+ FT_Destroy_Class_ ## class_( FT_Library library, \
+ FT_ServiceDescRec* clazz ) \
+ { \
+ FT_Memory memory = library->memory; \
+ \
+ \
+ if ( clazz ) \
+ FT_FREE( clazz ); \
+ } \
+ \
+ FT_Error \
+ FT_Create_Class_ ## class_( FT_Library library, \
+ FT_ServiceDescRec** output_class ) \
+ { \
+ FT_ServiceDescRec* clazz = NULL; \
+ FT_Error error; \
+ FT_Memory memory = library->memory; \
+ \
+ \
+ if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 11 ) ) \
+ return error; \
+ \
+ clazz[ 0].serv_id = serv_id_1; \
+ clazz[ 0].serv_data = serv_data_1; \
+ clazz[ 1].serv_id = serv_id_2; \
+ clazz[ 1].serv_data = serv_data_2; \
+ clazz[ 2].serv_id = serv_id_3; \
+ clazz[ 2].serv_data = serv_data_3; \
+ clazz[ 3].serv_id = serv_id_4; \
+ clazz[ 3].serv_data = serv_data_4; \
+ clazz[ 4].serv_id = serv_id_5; \
+ clazz[ 4].serv_data = serv_data_5; \
+ clazz[ 5].serv_id = serv_id_6; \
+ clazz[ 5].serv_data = serv_data_6; \
+ clazz[ 6].serv_id = serv_id_7; \
+ clazz[ 6].serv_data = serv_data_7; \
+ clazz[ 7].serv_id = serv_id_8; \
+ clazz[ 7].serv_data = serv_data_8; \
+ clazz[ 8].serv_id = serv_id_9; \
+ clazz[ 8].serv_data = serv_data_9; \
+ clazz[ 9].serv_id = serv_id_10; \
+ clazz[ 9].serv_data = serv_data_10; \
+ clazz[10].serv_id = NULL; \
+ clazz[10].serv_data = NULL; \
+ \
+ *output_class = clazz; \
+ \
+ return FT_Err_Ok; \
+ }
+
#endif /* FT_CONFIG_OPTION_PIC */
@@ -635,6 +885,7 @@
{
FT_Pointer service_POSTSCRIPT_FONT_NAME;
FT_Pointer service_MULTI_MASTERS;
+ FT_Pointer service_METRICS_VARIATIONS;
FT_Pointer service_GLYPH_DICT;
FT_Pointer service_PFR_METRICS;
FT_Pointer service_WINFNT;
@@ -655,7 +906,7 @@
* FT_FACE_LOOKUP_SERVICE
*
* @description:
- * This macro is used to lookup a service from a face's driver module
+ * This macro is used to look up a service from a face's driver module
* using its cache.
*
* @input:
@@ -734,30 +985,32 @@
* The header files containing the services.
*/
-#define FT_SERVICE_BDF_H <internal/services/svbdf.h>
-#define FT_SERVICE_CID_H <internal/services/svcid.h>
-#define FT_SERVICE_GLYPH_DICT_H <internal/services/svgldict.h>
-#define FT_SERVICE_GX_VALIDATE_H <internal/services/svgxval.h>
-#define FT_SERVICE_KERNING_H <internal/services/svkern.h>
-#define FT_SERVICE_MULTIPLE_MASTERS_H <internal/services/svmm.h>
-#define FT_SERVICE_OPENTYPE_VALIDATE_H <internal/services/svotval.h>
-#define FT_SERVICE_PFR_H <internal/services/svpfr.h>
-#define FT_SERVICE_POSTSCRIPT_CMAPS_H <internal/services/svpscmap.h>
-#define FT_SERVICE_POSTSCRIPT_INFO_H <internal/services/svpsinfo.h>
-#define FT_SERVICE_POSTSCRIPT_NAME_H <internal/services/svpostnm.h>
-#define FT_SERVICE_PROPERTIES_H <internal/services/svprop.h>
-#define FT_SERVICE_SFNT_H <internal/services/svsfnt.h>
-#define FT_SERVICE_TRUETYPE_ENGINE_H <internal/services/svtteng.h>
-#define FT_SERVICE_TT_CMAP_H <internal/services/svttcmap.h>
-#define FT_SERVICE_WINFNT_H <internal/services/svwinfnt.h>
-#define FT_SERVICE_FONT_FORMAT_H <internal/services/svfntfmt.h>
-#define FT_SERVICE_TRUETYPE_GLYF_H <internal/services/svttglyf.h>
+#define FT_SERVICE_BDF_H <freetype/internal/services/svbdf.h>
+#define FT_SERVICE_CFF_TABLE_LOAD_H <freetype/internal/services/svcfftl.h>
+#define FT_SERVICE_CID_H <freetype/internal/services/svcid.h>
+#define FT_SERVICE_FONT_FORMAT_H <freetype/internal/services/svfntfmt.h>
+#define FT_SERVICE_GLYPH_DICT_H <freetype/internal/services/svgldict.h>
+#define FT_SERVICE_GX_VALIDATE_H <freetype/internal/services/svgxval.h>
+#define FT_SERVICE_KERNING_H <freetype/internal/services/svkern.h>
+#define FT_SERVICE_METRICS_VARIATIONS_H <freetype/internal/services/svmetric.h>
+#define FT_SERVICE_MULTIPLE_MASTERS_H <freetype/internal/services/svmm.h>
+#define FT_SERVICE_OPENTYPE_VALIDATE_H <freetype/internal/services/svotval.h>
+#define FT_SERVICE_PFR_H <freetype/internal/services/svpfr.h>
+#define FT_SERVICE_POSTSCRIPT_CMAPS_H <freetype/internal/services/svpscmap.h>
+#define FT_SERVICE_POSTSCRIPT_INFO_H <freetype/internal/services/svpsinfo.h>
+#define FT_SERVICE_POSTSCRIPT_NAME_H <freetype/internal/services/svpostnm.h>
+#define FT_SERVICE_PROPERTIES_H <freetype/internal/services/svprop.h>
+#define FT_SERVICE_SFNT_H <freetype/internal/services/svsfnt.h>
+#define FT_SERVICE_TRUETYPE_ENGINE_H <freetype/internal/services/svtteng.h>
+#define FT_SERVICE_TRUETYPE_GLYF_H <freetype/internal/services/svttglyf.h>
+#define FT_SERVICE_TT_CMAP_H <freetype/internal/services/svttcmap.h>
+#define FT_SERVICE_WINFNT_H <freetype/internal/services/svwinfnt.h>
/* */
FT_END_HEADER
-#endif /* __FTSERV_H__ */
+#endif /* FTSERV_H_ */
/* END */
diff --git a/include/internal/ftstream.h b/include/freetype/internal/ftstream.h
similarity index 98%
rename from include/internal/ftstream.h
rename to include/freetype/internal/ftstream.h
index 384e5df..f90002f 100644
--- a/include/internal/ftstream.h
+++ b/include/freetype/internal/ftstream.h
@@ -4,7 +4,7 @@
/* */
/* Stream handling (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTSTREAM_H__
-#define __FTSTREAM_H__
+#ifndef FTSTREAM_H_
+#define FTSTREAM_H_
#include <ft2build.h>
@@ -165,8 +165,8 @@
#define FT_BYTE_U32( p, i, s ) ( FT_UINT32( FT_BYTE_( p, i ) ) << (s) )
-#define FT_PEEK_SHORT( p ) FT_INT16( FT_BYTE_U16( p, 0, 8) | \
- FT_BYTE_U16( p, 1, 0) )
+#define FT_PEEK_SHORT( p ) FT_INT16( FT_BYTE_U16( p, 0, 8 ) | \
+ FT_BYTE_U16( p, 1, 0 ) )
#define FT_PEEK_USHORT( p ) FT_UINT16( FT_BYTE_U16( p, 0, 8 ) | \
FT_BYTE_U16( p, 1, 0 ) )
@@ -502,7 +502,7 @@
#define FT_STREAM_READ_AT( position, buffer, count ) \
FT_SET_ERROR( FT_Stream_ReadAt( stream, \
(FT_ULong)(position), \
- (FT_Byte*)buffer, \
+ (FT_Byte*)(buffer), \
(FT_ULong)(count) ) )
#define FT_STREAM_READ_FIELDS( fields, object ) \
@@ -530,7 +530,7 @@
FT_END_HEADER
-#endif /* __FTSTREAM_H__ */
+#endif /* FTSTREAM_H_ */
/* END */
diff --git a/include/internal/fttrace.h b/include/freetype/internal/fttrace.h
similarity index 96%
rename from include/internal/fttrace.h
rename to include/freetype/internal/fttrace.h
index 9d28d21..8092e41 100644
--- a/include/internal/fttrace.h
+++ b/include/freetype/internal/fttrace.h
@@ -4,7 +4,7 @@
/* */
/* Tracing handling (specification only). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -39,6 +39,7 @@
FT_TRACE_DEF( raccess ) /* resource fork accessor (ftrfork.c) */
FT_TRACE_DEF( synth ) /* bold/slant synthesizer (ftsynth.c) */
FT_TRACE_DEF( bitmap ) /* bitmap checksum (ftobjs.c) */
+FT_TRACE_DEF( psprops ) /* PS driver properties (ftpsprop.c) */
/* Cache sub-system */
FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */
@@ -66,20 +67,19 @@
FT_TRACE_DEF( t1afm )
FT_TRACE_DEF( t1driver )
FT_TRACE_DEF( t1gload )
-FT_TRACE_DEF( t1hint )
FT_TRACE_DEF( t1load )
FT_TRACE_DEF( t1objs )
FT_TRACE_DEF( t1parse )
/* PostScript helper module `psaux' */
FT_TRACE_DEF( t1decode )
+FT_TRACE_DEF( cffdecode )
FT_TRACE_DEF( psobjs )
FT_TRACE_DEF( psconv )
/* PostScript hinting module `pshinter' */
FT_TRACE_DEF( pshrec )
-FT_TRACE_DEF( pshalgo1 )
-FT_TRACE_DEF( pshalgo2 )
+FT_TRACE_DEF( pshalgo )
/* Type 2 driver components */
FT_TRACE_DEF( cffdriver )
@@ -96,7 +96,6 @@
FT_TRACE_DEF( t42 )
/* CID driver components */
-FT_TRACE_DEF( cidafm )
FT_TRACE_DEF( ciddriver )
FT_TRACE_DEF( cidgload )
FT_TRACE_DEF( cidload )
@@ -148,7 +147,7 @@
FT_TRACE_DEF( aflatin )
FT_TRACE_DEF( aflatin2 )
FT_TRACE_DEF( afwarp )
-FT_TRACE_DEF( afharfbuzz )
+FT_TRACE_DEF( afshaper )
FT_TRACE_DEF( afglobal )
/* END */
diff --git a/include/internal/ftvalid.h b/include/freetype/internal/ftvalid.h
similarity index 97%
rename from include/internal/ftvalid.h
rename to include/freetype/internal/ftvalid.h
index 9cda6ee..cad47a5 100644
--- a/include/internal/ftvalid.h
+++ b/include/freetype/internal/ftvalid.h
@@ -4,7 +4,7 @@
/* */
/* FreeType validation support (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTVALID_H__
-#define __FTVALID_H__
+#ifndef FTVALID_H_
+#define FTVALID_H_
#include <ft2build.h>
#include FT_CONFIG_STANDARD_LIBRARY_H /* for ft_setjmp and ft_longjmp */
@@ -153,7 +153,7 @@
FT_END_HEADER
-#endif /* __FTVALID_H__ */
+#endif /* FTVALID_H_ */
/* END */
diff --git a/include/freetype/internal/internal.h b/include/freetype/internal/internal.h
new file mode 100644
index 0000000..8f546e4
--- /dev/null
+++ b/include/freetype/internal/internal.h
@@ -0,0 +1,67 @@
+/***************************************************************************/
+/* */
+/* internal.h */
+/* */
+/* Internal header files (specification only). */
+/* */
+/* Copyright 1996-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* This file is automatically included by `ft2build.h'. */
+ /* Do not include it manually! */
+ /* */
+ /*************************************************************************/
+
+
+#define FT_INTERNAL_OBJECTS_H <freetype/internal/ftobjs.h>
+#define FT_INTERNAL_PIC_H <freetype/internal/ftpic.h>
+#define FT_INTERNAL_STREAM_H <freetype/internal/ftstream.h>
+#define FT_INTERNAL_MEMORY_H <freetype/internal/ftmemory.h>
+#define FT_INTERNAL_DEBUG_H <freetype/internal/ftdebug.h>
+#define FT_INTERNAL_CALC_H <freetype/internal/ftcalc.h>
+#define FT_INTERNAL_HASH_H <freetype/internal/fthash.h>
+#define FT_INTERNAL_DRIVER_H <freetype/internal/ftdrv.h>
+#define FT_INTERNAL_TRACE_H <freetype/internal/fttrace.h>
+#define FT_INTERNAL_GLYPH_LOADER_H <freetype/internal/ftgloadr.h>
+#define FT_INTERNAL_SFNT_H <freetype/internal/sfnt.h>
+#define FT_INTERNAL_SERVICE_H <freetype/internal/ftserv.h>
+#define FT_INTERNAL_RFORK_H <freetype/internal/ftrfork.h>
+#define FT_INTERNAL_VALIDATE_H <freetype/internal/ftvalid.h>
+
+#define FT_INTERNAL_TRUETYPE_TYPES_H <freetype/internal/tttypes.h>
+#define FT_INTERNAL_TYPE1_TYPES_H <freetype/internal/t1types.h>
+
+#define FT_INTERNAL_POSTSCRIPT_AUX_H <freetype/internal/psaux.h>
+#define FT_INTERNAL_POSTSCRIPT_HINTS_H <freetype/internal/pshints.h>
+#define FT_INTERNAL_POSTSCRIPT_PROPS_H <freetype/internal/ftpsprop.h>
+
+#define FT_INTERNAL_AUTOHINT_H <freetype/internal/autohint.h>
+
+#define FT_INTERNAL_CFF_TYPES_H <freetype/internal/cfftypes.h>
+#define FT_INTERNAL_CFF_OBJECTS_TYPES_H <freetype/internal/cffotypes.h>
+
+
+#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
+
+ /* We disable the warning `conditional expression is constant' here */
+ /* in order to compile cleanly with the maximum level of warnings. */
+ /* In particular, the warning complains about stuff like `while(0)' */
+ /* which is very useful in macro definitions. There is no benefit */
+ /* in having it enabled. */
+#pragma warning( disable : 4127 )
+
+#endif /* _MSC_VER */
+
+
+/* END */
diff --git a/include/internal/psaux.h b/include/freetype/internal/psaux.h
similarity index 64%
rename from include/internal/psaux.h
rename to include/freetype/internal/psaux.h
index 1c5f784..f77380d 100644
--- a/include/internal/psaux.h
+++ b/include/freetype/internal/psaux.h
@@ -5,7 +5,7 @@
/* Auxiliary functions and data structures related to PostScript fonts */
/* (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,19 +17,40 @@
/***************************************************************************/
-#ifndef __PSAUX_H__
-#define __PSAUX_H__
+#ifndef PSAUX_H_
+#define PSAUX_H_
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
#include FT_INTERNAL_TYPE1_TYPES_H
+#include FT_INTERNAL_HASH_H
+#include FT_INTERNAL_TRUETYPE_TYPES_H
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
+#include FT_INTERNAL_CFF_TYPES_H
+#include FT_INTERNAL_CFF_OBJECTS_TYPES_H
+
FT_BEGIN_HEADER
+ /***********************************************************************/
+ /* */
+ /* PostScript modules driver class. */
+ /* */
+ typedef struct PS_DriverRec_
+ {
+ FT_DriverRec root;
+
+ FT_UInt hinting_engine;
+ FT_Bool no_stem_darkening;
+ FT_Int darken_params[8];
+ FT_Int32 random_seed;
+
+ } PS_DriverRec, *PS_Driver;
+
+
/*************************************************************************/
/*************************************************************************/
/***** *****/
@@ -441,6 +462,202 @@
/*************************************************************************/
/*************************************************************************/
/***** *****/
+ /***** PS BUILDER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ typedef struct PS_Builder_ PS_Builder;
+ typedef const struct PS_Builder_FuncsRec_* PS_Builder_Funcs;
+
+ typedef struct PS_Builder_FuncsRec_
+ {
+ void
+ (*init)( PS_Builder* ps_builder,
+ void* builder,
+ FT_Bool is_t1 );
+
+ void
+ (*done)( PS_Builder* builder );
+
+ } PS_Builder_FuncsRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Structure> */
+ /* PS_Builder */
+ /* */
+ /* <Description> */
+ /* A structure used during glyph loading to store its outline. */
+ /* */
+ /* <Fields> */
+ /* memory :: The current memory object. */
+ /* */
+ /* face :: The current face object. */
+ /* */
+ /* glyph :: The current glyph slot. */
+ /* */
+ /* loader :: XXX */
+ /* */
+ /* base :: The base glyph outline. */
+ /* */
+ /* current :: The current glyph outline. */
+ /* */
+ /* pos_x :: The horizontal translation (if composite glyph). */
+ /* */
+ /* pos_y :: The vertical translation (if composite glyph). */
+ /* */
+ /* left_bearing :: The left side bearing point. */
+ /* */
+ /* advance :: The horizontal advance vector. */
+ /* */
+ /* bbox :: Unused. */
+ /* */
+ /* path_begun :: A flag which indicates that a new path has begun. */
+ /* */
+ /* load_points :: If this flag is not set, no points are loaded. */
+ /* */
+ /* no_recurse :: Set but not used. */
+ /* */
+ /* metrics_only :: A boolean indicating that we only want to compute */
+ /* the metrics of a given glyph, not load all of its */
+ /* points. */
+ /* */
+ /* is_t1 :: Set if current font type is Type 1. */
+ /* */
+ /* funcs :: An array of function pointers for the builder. */
+ /* */
+ struct PS_Builder_
+ {
+ FT_Memory memory;
+ FT_Face face;
+ CFF_GlyphSlot glyph;
+ FT_GlyphLoader loader;
+ FT_Outline* base;
+ FT_Outline* current;
+
+ FT_Pos* pos_x;
+ FT_Pos* pos_y;
+
+ FT_Vector* left_bearing;
+ FT_Vector* advance;
+
+ FT_BBox* bbox; /* bounding box */
+ FT_Bool path_begun;
+ FT_Bool load_points;
+ FT_Bool no_recurse;
+
+ FT_Bool metrics_only;
+ FT_Bool is_t1;
+
+ PS_Builder_FuncsRec funcs;
+
+ };
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** PS DECODER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+#define PS_MAX_OPERANDS 48
+#define PS_MAX_SUBRS_CALLS 16 /* maximum subroutine nesting; */
+ /* only 10 are allowed but there exist */
+ /* fonts like `HiraKakuProN-W3.ttf' */
+ /* (Hiragino Kaku Gothic ProN W3; */
+ /* 8.2d6e1; 2014-12-19) that exceed */
+ /* this limit */
+
+ /* execution context charstring zone */
+
+ typedef struct PS_Decoder_Zone_
+ {
+ FT_Byte* base;
+ FT_Byte* limit;
+ FT_Byte* cursor;
+
+ } PS_Decoder_Zone;
+
+
+ typedef FT_Error
+ (*CFF_Decoder_Get_Glyph_Callback)( TT_Face face,
+ FT_UInt glyph_index,
+ FT_Byte** pointer,
+ FT_ULong* length );
+
+ typedef void
+ (*CFF_Decoder_Free_Glyph_Callback)( TT_Face face,
+ FT_Byte** pointer,
+ FT_ULong length );
+
+
+ typedef struct PS_Decoder_
+ {
+ PS_Builder builder;
+
+ FT_Fixed stack[PS_MAX_OPERANDS + 1];
+ FT_Fixed* top;
+
+ PS_Decoder_Zone zones[PS_MAX_SUBRS_CALLS + 1];
+ PS_Decoder_Zone* zone;
+
+ FT_Int flex_state;
+ FT_Int num_flex_vectors;
+ FT_Vector flex_vectors[7];
+
+ CFF_Font cff;
+ CFF_SubFont current_subfont; /* for current glyph_index */
+ FT_Generic* cf2_instance;
+
+ FT_Pos* glyph_width;
+ FT_Bool width_only;
+ FT_Int num_hints;
+
+ FT_UInt num_locals;
+ FT_UInt num_globals;
+
+ FT_Int locals_bias;
+ FT_Int globals_bias;
+
+ FT_Byte** locals;
+ FT_Byte** globals;
+
+ FT_Byte** glyph_names; /* for pure CFF fonts only */
+ FT_UInt num_glyphs; /* number of glyphs in font */
+
+ FT_Render_Mode hint_mode;
+
+ FT_Bool seac;
+
+ CFF_Decoder_Get_Glyph_Callback get_glyph_callback;
+ CFF_Decoder_Free_Glyph_Callback free_glyph_callback;
+
+ /* Type 1 stuff */
+ FT_Service_PsCMaps psnames; /* for seac */
+
+ FT_Int lenIV; /* internal for sub routine calls */
+ FT_UInt* locals_len; /* array of subrs length (optional) */
+ FT_Hash locals_hash; /* used if `num_subrs' was massaged */
+
+ FT_Matrix font_matrix;
+ FT_Vector font_offset;
+
+ PS_Blend blend; /* for multiple master support */
+
+ FT_Long* buildchar;
+ FT_UInt len_buildchar;
+
+ } PS_Decoder;
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
/***** T1 BUILDER *****/
/***** *****/
/*************************************************************************/
@@ -652,10 +869,23 @@
void
(*done)( T1_Decoder decoder );
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
FT_Error
- (*parse_charstrings)( T1_Decoder decoder,
- FT_Byte* base,
- FT_UInt len );
+ (*parse_charstrings_old)( T1_Decoder decoder,
+ FT_Byte* base,
+ FT_UInt len );
+#else
+ FT_Error
+ (*parse_metrics)( T1_Decoder decoder,
+ FT_Byte* base,
+ FT_UInt len );
+#endif
+
+ FT_Error
+ (*parse_charstrings)( PS_Decoder* decoder,
+ FT_Byte* charstring_base,
+ FT_ULong charstring_len );
+
} T1_Decoder_FuncsRec;
@@ -678,6 +908,7 @@
FT_Int num_subrs;
FT_Byte** subrs;
FT_UInt* subrs_len; /* array of subrs length (optional) */
+ FT_Hash subrs_hash; /* used if `num_subrs' was massaged */
FT_Matrix font_matrix;
FT_Vector font_offset;
@@ -698,12 +929,261 @@
FT_Bool seac;
+ FT_Generic cf2_instance;
+
} T1_DecoderRec;
/*************************************************************************/
/*************************************************************************/
/***** *****/
+ /***** CFF BUILDER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ typedef struct CFF_Builder_ CFF_Builder;
+
+
+ typedef FT_Error
+ (*CFF_Builder_Check_Points_Func)( CFF_Builder* builder,
+ FT_Int count );
+
+ typedef void
+ (*CFF_Builder_Add_Point_Func)( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y,
+ FT_Byte flag );
+ typedef FT_Error
+ (*CFF_Builder_Add_Point1_Func)( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y );
+ typedef FT_Error
+ (*CFF_Builder_Start_Point_Func)( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y );
+ typedef void
+ (*CFF_Builder_Close_Contour_Func)( CFF_Builder* builder );
+
+ typedef FT_Error
+ (*CFF_Builder_Add_Contour_Func)( CFF_Builder* builder );
+
+ typedef const struct CFF_Builder_FuncsRec_* CFF_Builder_Funcs;
+
+ typedef struct CFF_Builder_FuncsRec_
+ {
+ void
+ (*init)( CFF_Builder* builder,
+ TT_Face face,
+ CFF_Size size,
+ CFF_GlyphSlot glyph,
+ FT_Bool hinting );
+
+ void
+ (*done)( CFF_Builder* builder );
+
+ CFF_Builder_Check_Points_Func check_points;
+ CFF_Builder_Add_Point_Func add_point;
+ CFF_Builder_Add_Point1_Func add_point1;
+ CFF_Builder_Add_Contour_Func add_contour;
+ CFF_Builder_Start_Point_Func start_point;
+ CFF_Builder_Close_Contour_Func close_contour;
+
+ } CFF_Builder_FuncsRec;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Structure> */
+ /* CFF_Builder */
+ /* */
+ /* <Description> */
+ /* A structure used during glyph loading to store its outline. */
+ /* */
+ /* <Fields> */
+ /* memory :: The current memory object. */
+ /* */
+ /* face :: The current face object. */
+ /* */
+ /* glyph :: The current glyph slot. */
+ /* */
+ /* loader :: The current glyph loader. */
+ /* */
+ /* base :: The base glyph outline. */
+ /* */
+ /* current :: The current glyph outline. */
+ /* */
+ /* pos_x :: The horizontal translation (if composite glyph). */
+ /* */
+ /* pos_y :: The vertical translation (if composite glyph). */
+ /* */
+ /* left_bearing :: The left side bearing point. */
+ /* */
+ /* advance :: The horizontal advance vector. */
+ /* */
+ /* bbox :: Unused. */
+ /* */
+ /* path_begun :: A flag which indicates that a new path has begun. */
+ /* */
+ /* load_points :: If this flag is not set, no points are loaded. */
+ /* */
+ /* no_recurse :: Set but not used. */
+ /* */
+ /* metrics_only :: A boolean indicating that we only want to compute */
+ /* the metrics of a given glyph, not load all of its */
+ /* points. */
+ /* */
+ /* hints_funcs :: Auxiliary pointer for hinting. */
+ /* */
+ /* hints_globals :: Auxiliary pointer for hinting. */
+ /* */
+ /* funcs :: A table of method pointers for this object. */
+ /* */
+ struct CFF_Builder_
+ {
+ FT_Memory memory;
+ TT_Face face;
+ CFF_GlyphSlot glyph;
+ FT_GlyphLoader loader;
+ FT_Outline* base;
+ FT_Outline* current;
+
+ FT_Pos pos_x;
+ FT_Pos pos_y;
+
+ FT_Vector left_bearing;
+ FT_Vector advance;
+
+ FT_BBox bbox; /* bounding box */
+
+ FT_Bool path_begun;
+ FT_Bool load_points;
+ FT_Bool no_recurse;
+
+ FT_Bool metrics_only;
+
+ void* hints_funcs; /* hinter-specific */
+ void* hints_globals; /* hinter-specific */
+
+ CFF_Builder_FuncsRec funcs;
+ };
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CFF DECODER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+#define CFF_MAX_OPERANDS 48
+#define CFF_MAX_SUBRS_CALLS 16 /* maximum subroutine nesting; */
+ /* only 10 are allowed but there exist */
+ /* fonts like `HiraKakuProN-W3.ttf' */
+ /* (Hiragino Kaku Gothic ProN W3; */
+ /* 8.2d6e1; 2014-12-19) that exceed */
+ /* this limit */
+#define CFF_MAX_TRANS_ELEMENTS 32
+
+ /* execution context charstring zone */
+
+ typedef struct CFF_Decoder_Zone_
+ {
+ FT_Byte* base;
+ FT_Byte* limit;
+ FT_Byte* cursor;
+
+ } CFF_Decoder_Zone;
+
+
+ typedef struct CFF_Decoder_
+ {
+ CFF_Builder builder;
+ CFF_Font cff;
+
+ FT_Fixed stack[CFF_MAX_OPERANDS + 1];
+ FT_Fixed* top;
+
+ CFF_Decoder_Zone zones[CFF_MAX_SUBRS_CALLS + 1];
+ CFF_Decoder_Zone* zone;
+
+ FT_Int flex_state;
+ FT_Int num_flex_vectors;
+ FT_Vector flex_vectors[7];
+
+ FT_Pos glyph_width;
+ FT_Pos nominal_width;
+
+ FT_Bool read_width;
+ FT_Bool width_only;
+ FT_Int num_hints;
+ FT_Fixed buildchar[CFF_MAX_TRANS_ELEMENTS];
+
+ FT_UInt num_locals;
+ FT_UInt num_globals;
+
+ FT_Int locals_bias;
+ FT_Int globals_bias;
+
+ FT_Byte** locals;
+ FT_Byte** globals;
+
+ FT_Byte** glyph_names; /* for pure CFF fonts only */
+ FT_UInt num_glyphs; /* number of glyphs in font */
+
+ FT_Render_Mode hint_mode;
+
+ FT_Bool seac;
+
+ CFF_SubFont current_subfont; /* for current glyph_index */
+
+ CFF_Decoder_Get_Glyph_Callback get_glyph_callback;
+ CFF_Decoder_Free_Glyph_Callback free_glyph_callback;
+
+ } CFF_Decoder;
+
+
+ typedef const struct CFF_Decoder_FuncsRec_* CFF_Decoder_Funcs;
+
+ typedef struct CFF_Decoder_FuncsRec_
+ {
+ void
+ (*init)( CFF_Decoder* decoder,
+ TT_Face face,
+ CFF_Size size,
+ CFF_GlyphSlot slot,
+ FT_Bool hinting,
+ FT_Render_Mode hint_mode,
+ CFF_Decoder_Get_Glyph_Callback get_callback,
+ CFF_Decoder_Free_Glyph_Callback free_callback );
+
+ FT_Error
+ (*prepare)( CFF_Decoder* decoder,
+ CFF_Size size,
+ FT_UInt glyph_index );
+
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ FT_Error
+ (*parse_charstrings_old)( CFF_Decoder* decoder,
+ FT_Byte* charstring_base,
+ FT_ULong charstring_len,
+ FT_Bool in_dict );
+#endif
+
+ FT_Error
+ (*parse_charstrings)( PS_Decoder* decoder,
+ FT_Byte* charstring_base,
+ FT_ULong charstring_len );
+
+ } CFF_Decoder_FuncsRec;
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
/***** AFM PARSER *****/
/***** *****/
/*************************************************************************/
@@ -808,14 +1288,29 @@
FT_Offset length,
FT_UShort seed );
+ FT_UInt32
+ (*cff_random)( FT_UInt32 r );
+
+ void
+ (*ps_decoder_init)( PS_Decoder* ps_decoder,
+ void* decoder,
+ FT_Bool is_t1 );
+
+ void
+ (*t1_make_subfont)( FT_Face face,
+ PS_Private priv,
+ CFF_SubFont subfont );
+
T1_CMap_Classes t1_cmap_classes;
/* fields after this comment line were added after version 2.1.10 */
const AFM_Parser_FuncsRec* afm_parser_funcs;
+ const CFF_Decoder_FuncsRec* cff_decoder_funcs;
+
} PSAux_ServiceRec, *PSAux_Service;
- /* backwards-compatible type definition */
+ /* backward compatible type definition */
typedef PSAux_ServiceRec PSAux_Interface;
@@ -871,7 +1366,7 @@
FT_END_HEADER
-#endif /* __PSAUX_H__ */
+#endif /* PSAUX_H_ */
/* END */
diff --git a/include/internal/pshints.h b/include/freetype/internal/pshints.h
similarity index 99%
rename from include/internal/pshints.h
rename to include/freetype/internal/pshints.h
index 12aaaba..d29314e 100644
--- a/include/internal/pshints.h
+++ b/include/freetype/internal/pshints.h
@@ -6,7 +6,7 @@
/* recorders (specification only). These are used to support native */
/* T1/T2 hints in the `type1', `cid', and `cff' font drivers. */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,8 +18,8 @@
/***************************************************************************/
-#ifndef __PSHINTS_H__
-#define __PSHINTS_H__
+#ifndef PSHINTS_H_
+#define PSHINTS_H_
#include <ft2build.h>
@@ -716,7 +716,7 @@
FT_END_HEADER
-#endif /* __PSHINTS_H__ */
+#endif /* PSHINTS_H_ */
/* END */
diff --git a/include/internal/services/svbdf.h b/include/freetype/internal/services/svbdf.h
similarity index 95%
rename from include/internal/services/svbdf.h
rename to include/freetype/internal/services/svbdf.h
index 865b536..4a9ec20 100644
--- a/include/internal/services/svbdf.h
+++ b/include/freetype/internal/services/svbdf.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType BDF services (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVBDF_H__
-#define __SVBDF_H__
+#ifndef SVBDF_H_
+#define SVBDF_H_
#include FT_BDF_H
#include FT_INTERNAL_SERVICE_H
@@ -76,7 +76,7 @@
FT_END_HEADER
-#endif /* __SVBDF_H__ */
+#endif /* SVBDF_H_ */
/* END */
diff --git a/include/freetype/internal/services/svcfftl.h b/include/freetype/internal/services/svcfftl.h
new file mode 100644
index 0000000..db623e6
--- /dev/null
+++ b/include/freetype/internal/services/svcfftl.h
@@ -0,0 +1,112 @@
+/***************************************************************************/
+/* */
+/* svcfftl.h */
+/* */
+/* The FreeType CFF tables loader service (specification). */
+/* */
+/* Copyright 2017-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef SVCFFTL_H_
+#define SVCFFTL_H_
+
+#include FT_INTERNAL_SERVICE_H
+#include FT_INTERNAL_CFF_TYPES_H
+
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_CFF_LOAD "cff-load"
+
+
+ typedef FT_UShort
+ (*FT_Get_Standard_Encoding_Func)( FT_UInt charcode );
+
+ typedef FT_Error
+ (*FT_Load_Private_Dict_Func)( CFF_Font font,
+ CFF_SubFont subfont,
+ FT_UInt lenNDV,
+ FT_Fixed* NDV );
+
+ typedef FT_Byte
+ (*FT_FD_Select_Get_Func)( CFF_FDSelect fdselect,
+ FT_UInt glyph_index );
+
+ typedef FT_Bool
+ (*FT_Blend_Check_Vector_Func)( CFF_Blend blend,
+ FT_UInt vsindex,
+ FT_UInt lenNDV,
+ FT_Fixed* NDV );
+
+ typedef FT_Error
+ (*FT_Blend_Build_Vector_Func)( CFF_Blend blend,
+ FT_UInt vsindex,
+ FT_UInt lenNDV,
+ FT_Fixed* NDV );
+
+
+ FT_DEFINE_SERVICE( CFFLoad )
+ {
+ FT_Get_Standard_Encoding_Func get_standard_encoding;
+ FT_Load_Private_Dict_Func load_private_dict;
+ FT_FD_Select_Get_Func fd_select_get;
+ FT_Blend_Check_Vector_Func blend_check_vector;
+ FT_Blend_Build_Vector_Func blend_build_vector;
+ };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_CFFLOADREC( class_, \
+ get_standard_encoding_, \
+ load_private_dict_, \
+ fd_select_get_, \
+ blend_check_vector_, \
+ blend_build_vector_ ) \
+ static const FT_Service_CFFLoadRec class_ = \
+ { \
+ get_standard_encoding_, \
+ load_private_dict_, \
+ fd_select_get_, \
+ blend_check_vector_, \
+ blend_build_vector_ \
+ };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_CFFLOADREC( class_, \
+ get_standard_encoding_, \
+ load_private_dict_, \
+ fd_select_get_, \
+ blend_check_vector_, \
+ blend_build_vector_ ) \
+ void \
+ FT_Init_Class_ ## class_( FT_Service_CFFLoadRec* clazz ) \
+ { \
+ clazz->get_standard_encoding = get_standard_encoding_; \
+ clazz->load_private_dict = load_private_dict_; \
+ clazz->fd_select_get = fd_select_get_; \
+ clazz->blend_check_vector = blend_check_vector_; \
+ clazz->blend_build_vector = blend_build_vector_; \
+ }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+
+FT_END_HEADER
+
+
+#endif
+
+
+/* END */
diff --git a/include/internal/services/svcid.h b/include/freetype/internal/services/svcid.h
similarity index 96%
rename from include/internal/services/svcid.h
rename to include/freetype/internal/services/svcid.h
index 4a535a6..cb59ac6 100644
--- a/include/internal/services/svcid.h
+++ b/include/freetype/internal/services/svcid.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType CID font services (specification). */
/* */
-/* Copyright 2007-2015 by */
+/* Copyright 2007-2018 by */
/* Derek Clegg and Michael Toftdal. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVCID_H__
-#define __SVCID_H__
+#ifndef SVCID_H_
+#define SVCID_H_
#include FT_INTERNAL_SERVICE_H
@@ -84,7 +84,7 @@
FT_END_HEADER
-#endif /* __SVCID_H__ */
+#endif /* SVCID_H_ */
/* END */
diff --git a/include/internal/services/svfntfmt.h b/include/freetype/internal/services/svfntfmt.h
similarity index 92%
rename from include/internal/services/svfntfmt.h
rename to include/freetype/internal/services/svfntfmt.h
index f8b3617..3b732be 100644
--- a/include/internal/services/svfntfmt.h
+++ b/include/freetype/internal/services/svfntfmt.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType font format service (specification only). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVFNTFMT_H__
-#define __SVFNTFMT_H__
+#ifndef SVFNTFMT_H_
+#define SVFNTFMT_H_
#include FT_INTERNAL_SERVICE_H
@@ -49,7 +49,7 @@
FT_END_HEADER
-#endif /* __SVFNTFMT_H__ */
+#endif /* SVFNTFMT_H_ */
/* END */
diff --git a/include/internal/services/svgldict.h b/include/freetype/internal/services/svgldict.h
similarity index 91%
rename from include/internal/services/svgldict.h
rename to include/freetype/internal/services/svgldict.h
index f78bca5..f1a68e3 100644
--- a/include/internal/services/svgldict.h
+++ b/include/freetype/internal/services/svgldict.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph dictionary services (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVGLDICT_H__
-#define __SVGLDICT_H__
+#ifndef SVGLDICT_H_
+#define SVGLDICT_H_
#include FT_INTERNAL_SERVICE_H
@@ -56,7 +56,7 @@
#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \
get_name_, \
- name_index_) \
+ name_index_ ) \
static const FT_Service_GlyphDictRec class_ = \
{ \
get_name_, name_index_ \
@@ -66,7 +66,7 @@
#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \
get_name_, \
- name_index_) \
+ name_index_ ) \
void \
FT_Init_Class_ ## class_( FT_Library library, \
FT_Service_GlyphDictRec* clazz ) \
@@ -85,4 +85,7 @@
FT_END_HEADER
-#endif /* __SVGLDICT_H__ */
+#endif /* SVGLDICT_H_ */
+
+
+/* END */
diff --git a/include/internal/services/svgxval.h b/include/freetype/internal/services/svgxval.h
similarity index 94%
rename from include/internal/services/svgxval.h
rename to include/freetype/internal/services/svgxval.h
index 59cc3b7..ed79ebe 100644
--- a/include/internal/services/svgxval.h
+++ b/include/freetype/internal/services/svgxval.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -25,8 +25,8 @@
/***************************************************************************/
-#ifndef __SVGXVAL_H__
-#define __SVGXVAL_H__
+#ifndef SVGXVAL_H_
+#define SVGXVAL_H_
#include FT_GX_VALIDATE_H
#include FT_INTERNAL_VALIDATE_H
@@ -66,7 +66,7 @@
FT_END_HEADER
-#endif /* __SVGXVAL_H__ */
+#endif /* SVGXVAL_H_ */
/* END */
diff --git a/include/internal/services/svkern.h b/include/freetype/internal/services/svkern.h
similarity index 92%
rename from include/internal/services/svkern.h
rename to include/freetype/internal/services/svkern.h
index bc26f15..c7e8f6e 100644
--- a/include/internal/services/svkern.h
+++ b/include/freetype/internal/services/svkern.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType Kerning service (specification). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVKERN_H__
-#define __SVKERN_H__
+#ifndef SVKERN_H_
+#define SVKERN_H_
#include FT_INTERNAL_SERVICE_H
#include FT_TRUETYPE_TABLES_H
@@ -45,7 +45,7 @@
FT_END_HEADER
-#endif /* __SVKERN_H__ */
+#endif /* SVKERN_H_ */
/* END */
diff --git a/include/freetype/internal/services/svmetric.h b/include/freetype/internal/services/svmetric.h
new file mode 100644
index 0000000..abaacdd
--- /dev/null
+++ b/include/freetype/internal/services/svmetric.h
@@ -0,0 +1,153 @@
+/***************************************************************************/
+/* */
+/* svmetric.h */
+/* */
+/* The FreeType services for metrics variations (specification). */
+/* */
+/* Copyright 2016-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef SVMETRIC_H_
+#define SVMETRIC_H_
+
+#include FT_INTERNAL_SERVICE_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*
+ * A service to manage the `HVAR, `MVAR', and `VVAR' OpenType tables.
+ *
+ */
+
+#define FT_SERVICE_ID_METRICS_VARIATIONS "metrics-variations"
+
+
+ /* HVAR */
+
+ typedef FT_Error
+ (*FT_HAdvance_Adjust_Func)( FT_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue );
+
+ typedef FT_Error
+ (*FT_LSB_Adjust_Func)( FT_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue );
+
+ typedef FT_Error
+ (*FT_RSB_Adjust_Func)( FT_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue );
+
+ /* VVAR */
+
+ typedef FT_Error
+ (*FT_VAdvance_Adjust_Func)( FT_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue );
+
+ typedef FT_Error
+ (*FT_TSB_Adjust_Func)( FT_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue );
+
+ typedef FT_Error
+ (*FT_BSB_Adjust_Func)( FT_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue );
+
+ typedef FT_Error
+ (*FT_VOrg_Adjust_Func)( FT_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue );
+
+ /* MVAR */
+
+ typedef void
+ (*FT_Metrics_Adjust_Func)( FT_Face face );
+
+
+ FT_DEFINE_SERVICE( MetricsVariations )
+ {
+ FT_HAdvance_Adjust_Func hadvance_adjust;
+ FT_LSB_Adjust_Func lsb_adjust;
+ FT_RSB_Adjust_Func rsb_adjust;
+
+ FT_VAdvance_Adjust_Func vadvance_adjust;
+ FT_TSB_Adjust_Func tsb_adjust;
+ FT_BSB_Adjust_Func bsb_adjust;
+ FT_VOrg_Adjust_Func vorg_adjust;
+
+ FT_Metrics_Adjust_Func metrics_adjust;
+ };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_METRICSVARIATIONSREC( class_, \
+ hadvance_adjust_, \
+ lsb_adjust_, \
+ rsb_adjust_, \
+ vadvance_adjust_, \
+ tsb_adjust_, \
+ bsb_adjust_, \
+ vorg_adjust_, \
+ metrics_adjust_ ) \
+ static const FT_Service_MetricsVariationsRec class_ = \
+ { \
+ hadvance_adjust_, \
+ lsb_adjust_, \
+ rsb_adjust_, \
+ vadvance_adjust_, \
+ tsb_adjust_, \
+ bsb_adjust_, \
+ vorg_adjust_, \
+ metrics_adjust_ \
+ };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_METRICSVARIATIONSREC( class_, \
+ hadvance_adjust_, \
+ lsb_adjust_, \
+ rsb_adjust_, \
+ vadvance_adjust_, \
+ tsb_adjust_, \
+ bsb_adjust_, \
+ vorg_adjust_, \
+ metrics_adjust_ ) \
+ void \
+ FT_Init_Class_ ## class_( FT_Service_MetricsVariationsRec* clazz ) \
+ { \
+ clazz->hadvance_adjust = hadvance_adjust_; \
+ clazz->lsb_adjust = lsb_adjust_; \
+ clazz->rsb_adjust = rsb_adjust_; \
+ clazz->vadvance_adjust = vadvance_adjust_; \
+ clazz->tsb_adjust = tsb_adjust_; \
+ clazz->bsb_adjust = bsb_adjust_; \
+ clazz->vorg_adjust = vorg_adjust_; \
+ clazz->metrics_adjust = metrics_adjust_; \
+ }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* SVMETRIC_H_ */
+
+
+/* END */
diff --git a/include/freetype/internal/services/svmm.h b/include/freetype/internal/services/svmm.h
new file mode 100644
index 0000000..bcbb38e
--- /dev/null
+++ b/include/freetype/internal/services/svmm.h
@@ -0,0 +1,172 @@
+/***************************************************************************/
+/* */
+/* svmm.h */
+/* */
+/* The FreeType Multiple Masters and GX var services (specification). */
+/* */
+/* Copyright 2003-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef SVMM_H_
+#define SVMM_H_
+
+#include FT_INTERNAL_SERVICE_H
+
+
+FT_BEGIN_HEADER
+
+
+ /*
+ * A service used to manage multiple-masters data in a given face.
+ *
+ * See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H).
+ *
+ */
+
+#define FT_SERVICE_ID_MULTI_MASTERS "multi-masters"
+
+
+ typedef FT_Error
+ (*FT_Get_MM_Func)( FT_Face face,
+ FT_Multi_Master* master );
+
+ typedef FT_Error
+ (*FT_Get_MM_Var_Func)( FT_Face face,
+ FT_MM_Var* *master );
+
+ typedef FT_Error
+ (*FT_Set_MM_Design_Func)( FT_Face face,
+ FT_UInt num_coords,
+ FT_Long* coords );
+
+ /* use return value -1 to indicate that the new coordinates */
+ /* are equal to the current ones; no changes are thus needed */
+ typedef FT_Error
+ (*FT_Set_Var_Design_Func)( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+ /* use return value -1 to indicate that the new coordinates */
+ /* are equal to the current ones; no changes are thus needed */
+ typedef FT_Error
+ (*FT_Set_MM_Blend_Func)( FT_Face face,
+ FT_UInt num_coords,
+ FT_Long* coords );
+
+ typedef FT_Error
+ (*FT_Get_Var_Design_Func)( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+ typedef FT_Error
+ (*FT_Set_Instance_Func)( FT_Face face,
+ FT_UInt instance_index );
+
+ typedef FT_Error
+ (*FT_Get_MM_Blend_Func)( FT_Face face,
+ FT_UInt num_coords,
+ FT_Long* coords );
+
+ typedef FT_Error
+ (*FT_Get_Var_Blend_Func)( FT_Face face,
+ FT_UInt *num_coords,
+ FT_Fixed* *coords,
+ FT_Fixed* *normalizedcoords,
+ FT_MM_Var* *mm_var );
+
+ typedef void
+ (*FT_Done_Blend_Func)( FT_Face );
+
+
+ FT_DEFINE_SERVICE( MultiMasters )
+ {
+ FT_Get_MM_Func get_mm;
+ FT_Set_MM_Design_Func set_mm_design;
+ FT_Set_MM_Blend_Func set_mm_blend;
+ FT_Get_MM_Blend_Func get_mm_blend;
+ FT_Get_MM_Var_Func get_mm_var;
+ FT_Set_Var_Design_Func set_var_design;
+ FT_Get_Var_Design_Func get_var_design;
+ FT_Set_Instance_Func set_instance;
+
+ /* for internal use; only needed for code sharing between modules */
+ FT_Get_Var_Blend_Func get_var_blend;
+ FT_Done_Blend_Func done_blend;
+ };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
+ get_mm_, \
+ set_mm_design_, \
+ set_mm_blend_, \
+ get_mm_blend_, \
+ get_mm_var_, \
+ set_var_design_, \
+ get_var_design_, \
+ set_instance_, \
+ get_var_blend_, \
+ done_blend_ ) \
+ static const FT_Service_MultiMastersRec class_ = \
+ { \
+ get_mm_, \
+ set_mm_design_, \
+ set_mm_blend_, \
+ get_mm_blend_, \
+ get_mm_var_, \
+ set_var_design_, \
+ get_var_design_, \
+ set_instance_, \
+ get_var_blend_, \
+ done_blend_ \
+ };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
+ get_mm_, \
+ set_mm_design_, \
+ set_mm_blend_, \
+ get_mm_blend_, \
+ get_mm_var_, \
+ set_var_design_, \
+ get_var_design_, \
+ set_instance_, \
+ get_var_blend_, \
+ done_blend_ ) \
+ void \
+ FT_Init_Class_ ## class_( FT_Service_MultiMastersRec* clazz ) \
+ { \
+ clazz->get_mm = get_mm_; \
+ clazz->set_mm_design = set_mm_design_; \
+ clazz->set_mm_blend = set_mm_blend_; \
+ clazz->get_mm_blend = get_mm_blend_; \
+ clazz->get_mm_var = get_mm_var_; \
+ clazz->set_var_design = set_var_design_; \
+ clazz->get_var_design = get_var_design_; \
+ clazz->set_instance = set_instance_; \
+ clazz->get_var_blend = get_var_blend_; \
+ clazz->done_blend = done_blend_; \
+ }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* SVMM_H_ */
+
+
+/* END */
diff --git a/include/internal/services/svotval.h b/include/freetype/internal/services/svotval.h
similarity index 92%
rename from include/internal/services/svotval.h
rename to include/freetype/internal/services/svotval.h
index a82a642..3129429 100644
--- a/include/internal/services/svotval.h
+++ b/include/freetype/internal/services/svotval.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType OpenType validation service (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVOTVAL_H__
-#define __SVOTVAL_H__
+#ifndef SVOTVAL_H_
+#define SVOTVAL_H_
#include FT_OPENTYPE_VALIDATE_H
#include FT_INTERNAL_VALIDATE_H
@@ -49,7 +49,7 @@
FT_END_HEADER
-#endif /* __SVOTVAL_H__ */
+#endif /* SVOTVAL_H_ */
/* END */
diff --git a/include/internal/services/svpfr.h b/include/freetype/internal/services/svpfr.h
similarity index 94%
rename from include/internal/services/svpfr.h
rename to include/freetype/internal/services/svpfr.h
index d4eb169..e65d57e 100644
--- a/include/internal/services/svpfr.h
+++ b/include/freetype/internal/services/svpfr.h
@@ -4,7 +4,7 @@
/* */
/* Internal PFR service functions (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVPFR_H__
-#define __SVPFR_H__
+#ifndef SVPFR_H_
+#define SVPFR_H_
#include FT_PFR_H
#include FT_INTERNAL_SERVICE_H
@@ -60,7 +60,7 @@
FT_END_HEADER
-#endif /* __SVPFR_H__ */
+#endif /* SVPFR_H_ */
/* END */
diff --git a/include/internal/services/svpostnm.h b/include/freetype/internal/services/svpostnm.h
similarity index 95%
rename from include/internal/services/svpostnm.h
rename to include/freetype/internal/services/svpostnm.h
index a89f79e..4a49d8b 100644
--- a/include/internal/services/svpostnm.h
+++ b/include/freetype/internal/services/svpostnm.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType PostScript name services (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVPOSTNM_H__
-#define __SVPOSTNM_H__
+#ifndef SVPOSTNM_H_
+#define SVPOSTNM_H_
#include FT_INTERNAL_SERVICE_H
@@ -75,7 +75,7 @@
FT_END_HEADER
-#endif /* __SVPOSTNM_H__ */
+#endif /* SVPOSTNM_H_ */
/* END */
diff --git a/include/internal/services/svprop.h b/include/freetype/internal/services/svprop.h
similarity index 92%
rename from include/internal/services/svprop.h
rename to include/freetype/internal/services/svprop.h
index c9f07ce..adc0bcf 100644
--- a/include/internal/services/svprop.h
+++ b/include/freetype/internal/services/svprop.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType property service (specification). */
/* */
-/* Copyright 2012-2015 by */
+/* Copyright 2012-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVPROP_H__
-#define __SVPROP_H__
+#ifndef SVPROP_H_
+#define SVPROP_H_
FT_BEGIN_HEADER
@@ -29,7 +29,8 @@
typedef FT_Error
(*FT_Properties_SetFunc)( FT_Module module,
const char* property_name,
- const void* value );
+ const void* value,
+ FT_Bool value_is_string );
typedef FT_Error
(*FT_Properties_GetFunc)( FT_Module module,
@@ -75,7 +76,7 @@
FT_END_HEADER
-#endif /* __SVPROP_H__ */
+#endif /* SVPROP_H_ */
/* END */
diff --git a/include/internal/services/svpscmap.h b/include/freetype/internal/services/svpscmap.h
similarity index 97%
rename from include/internal/services/svpscmap.h
rename to include/freetype/internal/services/svpscmap.h
index 66da6e1..5589575 100644
--- a/include/internal/services/svpscmap.h
+++ b/include/freetype/internal/services/svpscmap.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType PostScript charmap service (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVPSCMAP_H__
-#define __SVPSCMAP_H__
+#ifndef SVPSCMAP_H_
+#define SVPSCMAP_H_
#include FT_INTERNAL_OBJECTS_H
@@ -171,7 +171,7 @@
FT_END_HEADER
-#endif /* __SVPSCMAP_H__ */
+#endif /* SVPSCMAP_H_ */
/* END */
diff --git a/include/internal/services/svpsinfo.h b/include/freetype/internal/services/svpsinfo.h
similarity index 96%
rename from include/internal/services/svpsinfo.h
rename to include/freetype/internal/services/svpsinfo.h
index 752a266..408f406 100644
--- a/include/internal/services/svpsinfo.h
+++ b/include/freetype/internal/services/svpsinfo.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType PostScript info service (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVPSINFO_H__
-#define __SVPSINFO_H__
+#ifndef SVPSINFO_H_
+#define SVPSINFO_H_
#include FT_INTERNAL_SERVICE_H
#include FT_INTERNAL_TYPE1_TYPES_H
@@ -105,7 +105,7 @@
FT_END_HEADER
-#endif /* __SVPSINFO_H__ */
+#endif /* SVPSINFO_H_ */
/* END */
diff --git a/include/internal/services/svsfnt.h b/include/freetype/internal/services/svsfnt.h
similarity index 95%
rename from include/internal/services/svsfnt.h
rename to include/freetype/internal/services/svsfnt.h
index 252ae1c..e8b37bc 100644
--- a/include/internal/services/svsfnt.h
+++ b/include/freetype/internal/services/svsfnt.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType SFNT table loading service (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVSFNT_H__
-#define __SVSFNT_H__
+#ifndef SVSFNT_H_
+#define SVSFNT_H_
#include FT_INTERNAL_SERVICE_H
#include FT_TRUETYPE_TABLES_H
@@ -97,7 +97,7 @@
FT_END_HEADER
-#endif /* __SVSFNT_H__ */
+#endif /* SVSFNT_H_ */
/* END */
diff --git a/include/internal/services/svttcmap.h b/include/freetype/internal/services/svttcmap.h
similarity index 92%
rename from include/internal/services/svttcmap.h
rename to include/freetype/internal/services/svttcmap.h
index 4351a9a..cd0e6fd 100644
--- a/include/internal/services/svttcmap.h
+++ b/include/freetype/internal/services/svttcmap.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType TrueType/sfnt cmap extra information service. */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* Masatake YAMATO, Redhat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -19,8 +19,8 @@
/* Development of this service is support of
Information-technology Promotion Agency, Japan. */
-#ifndef __SVTTCMAP_H__
-#define __SVTTCMAP_H__
+#ifndef SVTTCMAP_H_
+#define SVTTCMAP_H_
#include FT_INTERNAL_SERVICE_H
#include FT_TRUETYPE_TABLES_H
@@ -48,11 +48,12 @@
/* `ttnameid.h'. */
/* */
/* format :: */
- /* The cmap format. OpenType 1.5 defines the formats 0 (byte */
+ /* The cmap format. OpenType 1.6 defines the formats 0 (byte */
/* encoding table), 2~(high-byte mapping through table), 4~(segment */
/* mapping to delta values), 6~(trimmed table mapping), 8~(mixed */
/* 16-bit and 32-bit coverage), 10~(trimmed array), 12~(segmented */
- /* coverage), and 14 (Unicode Variation Sequences). */
+ /* coverage), 13~(last resort font), and 14 (Unicode Variation */
+ /* Sequences). */
/* */
typedef struct TT_CMapInfo_
{
@@ -99,7 +100,7 @@
FT_END_HEADER
-#endif /* __SVTTCMAP_H__ */
+#endif /* SVTTCMAP_H_ */
/* END */
diff --git a/include/internal/services/svtteng.h b/include/freetype/internal/services/svtteng.h
similarity index 91%
rename from include/internal/services/svtteng.h
rename to include/freetype/internal/services/svtteng.h
index 272ee8c..92e3c54 100644
--- a/include/internal/services/svtteng.h
+++ b/include/freetype/internal/services/svtteng.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType TrueType engine query service (specification). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVTTENG_H__
-#define __SVTTENG_H__
+#ifndef SVTTENG_H_
+#define SVTTENG_H_
#include FT_INTERNAL_SERVICE_H
#include FT_MODULE_H
@@ -47,7 +47,7 @@
FT_END_HEADER
-#endif /* __SVTTENG_H__ */
+#endif /* SVTTENG_H_ */
/* END */
diff --git a/include/internal/services/svttglyf.h b/include/freetype/internal/services/svttglyf.h
similarity index 94%
rename from include/internal/services/svttglyf.h
rename to include/freetype/internal/services/svttglyf.h
index f5cb76a..16fac1c 100644
--- a/include/internal/services/svttglyf.h
+++ b/include/freetype/internal/services/svttglyf.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType TrueType glyph service. */
/* */
-/* Copyright 2007-2015 by */
+/* Copyright 2007-2018 by */
/* David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -15,8 +15,8 @@
/* */
/***************************************************************************/
-#ifndef __SVTTGLYF_H__
-#define __SVTTGLYF_H__
+#ifndef SVTTGLYF_H_
+#define SVTTGLYF_H_
#include FT_INTERNAL_SERVICE_H
#include FT_TRUETYPE_TABLES_H
@@ -63,7 +63,7 @@
FT_END_HEADER
-#endif /* __SVTTGLYF_H__ */
+#endif /* SVTTGLYF_H_ */
/* END */
diff --git a/include/internal/services/svwinfnt.h b/include/freetype/internal/services/svwinfnt.h
similarity index 91%
rename from include/internal/services/svwinfnt.h
rename to include/freetype/internal/services/svwinfnt.h
index 0036929..80d481c 100644
--- a/include/internal/services/svwinfnt.h
+++ b/include/freetype/internal/services/svwinfnt.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType Windows FNT/FONT service (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVWINFNT_H__
-#define __SVWINFNT_H__
+#ifndef SVWINFNT_H_
+#define SVWINFNT_H_
#include FT_INTERNAL_SERVICE_H
#include FT_WINFONTS_H
@@ -44,7 +44,7 @@
FT_END_HEADER
-#endif /* __SVWINFNT_H__ */
+#endif /* SVWINFNT_H_ */
/* END */
diff --git a/include/internal/sfnt.h b/include/freetype/internal/sfnt.h
similarity index 88%
rename from include/internal/sfnt.h
rename to include/freetype/internal/sfnt.h
index 97ce390..fb1e327 100644
--- a/include/internal/sfnt.h
+++ b/include/freetype/internal/sfnt.h
@@ -4,7 +4,7 @@
/* */
/* High-level `sfnt' driver interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SFNT_H__
-#define __SFNT_H__
+#ifndef SFNT_H_
+#define SFNT_H_
#include <ft2build.h>
@@ -44,7 +44,9 @@
/* face :: A handle to the target face object. */
/* */
/* face_index :: The index of the TrueType font, if we are opening a */
- /* collection. */
+ /* collection, in bits 0-15. The numbered instance */
+ /* index~+~1 of a GX (sub)font, if applicable, in bits */
+ /* 16-30. */
/* */
/* num_params :: The number of additional parameters. */
/* */
@@ -87,7 +89,9 @@
/* face :: A handle to the target face object. */
/* */
/* face_index :: The index of the TrueType font, if we are opening a */
- /* collection. */
+ /* collection, in bits 0-15. The numbered instance */
+ /* index~+~1 of a GX (sub)font, if applicable, in bits */
+ /* 16-30. */
/* */
/* num_params :: The number of additional parameters. */
/* */
@@ -427,6 +431,64 @@
/*************************************************************************/
/* */
/* <FuncType> */
+ /* TT_Get_Name_Func */
+ /* */
+ /* <Description> */
+ /* From the `name' table, return a given ENGLISH name record in */
+ /* ASCII. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face object. */
+ /* */
+ /* nameid :: The name id of the name record to return. */
+ /* */
+ /* <InOut> */
+ /* name :: The address of an allocated string pointer. NULL if */
+ /* no name is present. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ typedef FT_Error
+ (*TT_Get_Name_Func)( TT_Face face,
+ FT_UShort nameid,
+ FT_String** name );
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
+ /* TT_Get_Name_ID_Func */
+ /* */
+ /* <Description> */
+ /* Search whether an ENGLISH version for a given name ID is in the */
+ /* `name' table. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face object. */
+ /* */
+ /* nameid :: The name id of the name record to return. */
+ /* */
+ /* <Out> */
+ /* win :: If non-negative, an index into the `name' table with */
+ /* the corresponding (3,1) or (3,0) Windows entry. */
+ /* */
+ /* apple :: If non-negative, an index into the `name' table with */
+ /* the corresponding (1,0) Apple entry. */
+ /* */
+ /* <Return> */
+ /* 1 if there is either a win or apple entry (or both), 0 otheriwse. */
+ /* */
+ typedef FT_Bool
+ (*TT_Get_Name_ID_Func)( TT_Face face,
+ FT_UShort nameid,
+ FT_Int *win,
+ FT_Int *apple );
+
+
+ /*************************************************************************/
+ /* */
+ /* <FuncType> */
/* TT_Load_Table_Func */
/* */
/* <Description> */
@@ -556,6 +618,9 @@
TT_Get_Metrics_Func get_metrics;
+ TT_Get_Name_Func get_name;
+ TT_Get_Name_ID_Func get_name_id;
+
} SFNT_Interface;
@@ -594,7 +659,9 @@
free_eblc_, \
set_sbit_strike_, \
load_strike_metrics_, \
- get_metrics_ ) \
+ get_metrics_, \
+ get_name_, \
+ get_name_id_ ) \
static const SFNT_Interface class_ = \
{ \
goto_table_, \
@@ -626,6 +693,8 @@
set_sbit_strike_, \
load_strike_metrics_, \
get_metrics_, \
+ get_name_, \
+ get_name_id_ \
};
#else /* FT_CONFIG_OPTION_PIC */
@@ -663,7 +732,9 @@
free_eblc_, \
set_sbit_strike_, \
load_strike_metrics_, \
- get_metrics_ ) \
+ get_metrics_, \
+ get_name_, \
+ get_name_id_ ) \
void \
FT_Init_Class_ ## class_( FT_Library library, \
SFNT_Interface* clazz ) \
@@ -699,13 +770,15 @@
clazz->set_sbit_strike = set_sbit_strike_; \
clazz->load_strike_metrics = load_strike_metrics_; \
clazz->get_metrics = get_metrics_; \
+ clazz->get_name = get_name_; \
+ clazz->get_name_id = get_name_id_; \
}
#endif /* FT_CONFIG_OPTION_PIC */
FT_END_HEADER
-#endif /* __SFNT_H__ */
+#endif /* SFNT_H_ */
/* END */
diff --git a/include/internal/t1types.h b/include/freetype/internal/t1types.h
similarity index 97%
rename from include/internal/t1types.h
rename to include/freetype/internal/t1types.h
index 029acc4..2118e33 100644
--- a/include/internal/t1types.h
+++ b/include/freetype/internal/t1types.h
@@ -5,7 +5,7 @@
/* Basic Type1/Type2 type definitions and interface (specification */
/* only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,14 +17,15 @@
/***************************************************************************/
-#ifndef __T1TYPES_H__
-#define __T1TYPES_H__
+#ifndef T1TYPES_H_
+#define T1TYPES_H_
#include <ft2build.h>
#include FT_TYPE1_TABLES_H
#include FT_INTERNAL_POSTSCRIPT_HINTS_H
#include FT_INTERNAL_SERVICE_H
+#include FT_INTERNAL_HASH_H
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
@@ -107,6 +108,7 @@
FT_Int num_subrs;
FT_Byte** subrs;
FT_UInt* subrs_len;
+ FT_Hash subrs_hash;
FT_Int num_glyphs;
FT_String** glyph_names; /* array of glyph names */
@@ -249,7 +251,7 @@
FT_END_HEADER
-#endif /* __T1TYPES_H__ */
+#endif /* T1TYPES_H_ */
/* END */
diff --git a/include/internal/tttypes.h b/include/freetype/internal/tttypes.h
similarity index 86%
rename from include/internal/tttypes.h
rename to include/freetype/internal/tttypes.h
index 31dd0aa..10dd336 100644
--- a/include/internal/tttypes.h
+++ b/include/freetype/internal/tttypes.h
@@ -5,7 +5,7 @@
/* Basic SFNT/TrueType type definitions and interface (specification */
/* only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __TTTYPES_H__
-#define __TTTYPES_H__
+#ifndef TTTYPES_H_
+#define TTTYPES_H_
#include <ft2build.h>
@@ -148,7 +148,7 @@
/* <Fields> */
/* See */
/* */
- /* http://www.w3.org/TR/WOFF/#WOFFHeader */
+ /* https://www.w3.org/TR/WOFF/#WOFFHeader */
/* */
typedef struct WOFF_HeaderRec_
{
@@ -185,7 +185,7 @@
/* */
/* CompLength :: Compressed table length (in bytes). */
/* */
- /* OrigLength :: Unompressed table length (in bytes). */
+ /* OrigLength :: Uncompressed table length (in bytes). */
/* */
/* CheckSum :: The table checksum. This value can be ignored. */
/* */
@@ -243,7 +243,7 @@
/*************************************************************************/
/* */
/* <Struct> */
- /* TT_NameEntryRec */
+ /* TT_NameRec */
/* */
/* <Description> */
/* A structure modeling TrueType name records. Name records are used */
@@ -267,7 +267,7 @@
/* string :: A pointer to the string's bytes. Note that these */
/* are usually UTF-16 encoded characters. */
/* */
- typedef struct TT_NameEntryRec_
+ typedef struct TT_NameRec_
{
FT_UShort platformID;
FT_UShort encodingID;
@@ -279,9 +279,39 @@
/* this last field is not defined in the spec */
/* but used by the FreeType engine */
- FT_Byte* string;
+ FT_Byte* string;
- } TT_NameEntryRec, *TT_NameEntry;
+ } TT_NameRec, *TT_Name;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* TT_LangTagRec */
+ /* */
+ /* <Description> */
+ /* A structure modeling language tag records in SFNT `name' tables, */
+ /* introduced in OpenType version 1.6. */
+ /* */
+ /* <Fields> */
+ /* stringLength :: The length of the string in bytes. */
+ /* */
+ /* stringOffset :: The offset to the string in the `name' table. */
+ /* */
+ /* string :: A pointer to the string's bytes. Note that these */
+ /* are UTF-16BE encoded characters. */
+ /* */
+ typedef struct TT_LangTagRec_
+ {
+ FT_UShort stringLength;
+ FT_ULong stringOffset;
+
+ /* this last field is not defined in the spec */
+ /* but used by the FreeType engine */
+
+ FT_Byte* string;
+
+ } TT_LangTagRec, *TT_LangTag;
/*************************************************************************/
@@ -293,24 +323,30 @@
/* A structure modeling the TrueType name table. */
/* */
/* <Fields> */
- /* format :: The format of the name table. */
+ /* format :: The format of the name table. */
/* */
- /* numNameRecords :: The number of names in table. */
+ /* numNameRecords :: The number of names in table. */
/* */
- /* storageOffset :: The offset of the name table in the `name' */
- /* TrueType table. */
+ /* storageOffset :: The offset of the name table in the `name' */
+ /* TrueType table. */
/* */
- /* names :: An array of name records. */
+ /* names :: An array of name records. */
/* */
- /* stream :: the file's input stream. */
+ /* numLangTagRecords :: The number of language tags in table. */
+ /* */
+ /* langTags :: An array of language tag records. */
+ /* */
+ /* stream :: The file's input stream. */
/* */
typedef struct TT_NameTableRec_
{
- FT_UShort format;
- FT_UInt numNameRecords;
- FT_UInt storageOffset;
- TT_NameEntryRec* names;
- FT_Stream stream;
+ FT_UShort format;
+ FT_UInt numNameRecords;
+ FT_UInt storageOffset;
+ TT_NameRec* names;
+ FT_UInt numLangTagRecords;
+ TT_LangTagRec* langTags;
+ FT_Stream stream;
} TT_NameTableRec, *TT_NameTable;
@@ -1060,6 +1096,34 @@
} TT_SbitTableType;
+ /* OpenType 1.8 brings new tables for variation font support; */
+ /* to make the old MM and GX fonts still work we need to check */
+ /* the presence (and validity) of the functionality provided */
+ /* by those tables. The following flag macros are for the */
+ /* field `variation_support'. */
+ /* */
+ /* Note that `fvar' gets checked immediately at font loading, */
+ /* while the other features are only loaded if MM support is */
+ /* actually requested. */
+
+ /* FVAR */
+#define TT_FACE_FLAG_VAR_FVAR ( 1 << 0 )
+
+ /* HVAR */
+#define TT_FACE_FLAG_VAR_HADVANCE ( 1 << 1 )
+#define TT_FACE_FLAG_VAR_LSB ( 1 << 2 )
+#define TT_FACE_FLAG_VAR_RSB ( 1 << 3 )
+
+ /* VVAR */
+#define TT_FACE_FLAG_VAR_VADVANCE ( 1 << 4 )
+#define TT_FACE_FLAG_VAR_TSB ( 1 << 5 )
+#define TT_FACE_FLAG_VAR_BSB ( 1 << 6 )
+#define TT_FACE_FLAG_VAR_VORG ( 1 << 7 )
+
+ /* MVAR */
+#define TT_FACE_FLAG_VAR_MVAR ( 1 << 8 )
+
+
/*************************************************************************/
/* */
/* TrueType Face Type */
@@ -1161,6 +1225,11 @@
/* */
/* psnames :: A pointer to the PostScript names service. */
/* */
+ /* mm :: A pointer to the Multiple Masters service. */
+ /* */
+ /* var :: A pointer to the Metrics Variations */
+ /* service. */
+ /* */
/* hdmx :: The face's horizontal device metrics */
/* (`hdmx' table). This table is optional in */
/* TrueType/OpenType fonts. */
@@ -1182,18 +1251,6 @@
/* file `ttconfig.h' for comments on the */
/* TT_CONFIG_OPTION_POSTSCRIPT_NAMES option. */
/* */
- /* num_locations :: The number of glyph locations in this */
- /* TrueType file. This should be */
- /* identical to the number of glyphs. */
- /* Ignored for Type 2 fonts. */
- /* */
- /* glyph_locations :: An array of longs. These are offsets to */
- /* glyph data within the `glyf' table. */
- /* Ignored for Type 2 font faces. */
- /* */
- /* glyf_len :: The length of the `glyf' table. Needed */
- /* for malformed `loca' tables. */
- /* */
/* font_program_size :: Size in bytecodes of the face's font */
/* program. 0 if none defined. Ignored for */
/* Type 2 fonts. */
@@ -1219,22 +1276,21 @@
/* units. Comes from the `cvt ' table. */
/* Ignored for Type 2 fonts. */
/* */
- /* num_kern_pairs :: The number of kerning pairs present in the */
- /* font file. The engine only loads the */
- /* first horizontal format 0 kern table it */
- /* finds in the font file. Ignored for */
- /* Type 2 fonts. */
- /* */
- /* kern_table_index :: The index of the kerning table in the font */
- /* kerning directory. Ignored for Type 2 */
- /* fonts. */
- /* */
/* interpreter :: A pointer to the TrueType bytecode */
/* interpreters field is also used to hook */
/* the debugger in `ttdebug'. */
/* */
- /* unpatented_hinting :: If true, use only unpatented methods in */
- /* the bytecode interpreter. */
+ /* extra :: Reserved for third-party font drivers. */
+ /* */
+ /* postscript_name :: The PS name of the font. Used by the */
+ /* postscript name service. */
+ /* */
+ /* glyf_len :: The length of the `glyf' table. Needed */
+ /* for malformed `loca' tables. */
+ /* */
+ /* glyf_offset :: The file offset of the `glyf' table. */
+ /* */
+ /* is_cff2 :: Set if the font format is CFF2. */
/* */
/* doblend :: A boolean which is set if the font should */
/* be blended (this is for GX var). */
@@ -1243,10 +1299,94 @@
/* variation tables (rather like Multiple */
/* Master data). */
/* */
- /* extra :: Reserved for third-party font drivers. */
+ /* variation_support :: Flags that indicate which OpenType */
+ /* functionality related to font variation */
+ /* support is present, valid, and usable. */
+ /* For example, TT_FACE_FLAG_VAR_FVAR is only */
+ /* set if we have at least one design axis. */
/* */
- /* postscript_name :: The PS name of the font. Used by the */
- /* postscript name service. */
+ /* var_postscript_prefix :: */
+ /* The PostScript name prefix needed for */
+ /* constructing a variation font instance's */
+ /* PS name . */
+ /* */
+ /* var_postscript_prefix_len :: */
+ /* The length of the `var_postscript_prefix' */
+ /* string. */
+ /* */
+ /* horz_metrics_size :: The size of the `hmtx' table. */
+ /* */
+ /* vert_metrics_size :: The size of the `vmtx' table. */
+ /* */
+ /* num_locations :: The number of glyph locations in this */
+ /* TrueType file. This should be */
+ /* identical to the number of glyphs. */
+ /* Ignored for Type 2 fonts. */
+ /* */
+ /* glyph_locations :: An array of longs. These are offsets to */
+ /* glyph data within the `glyf' table. */
+ /* Ignored for Type 2 font faces. */
+ /* */
+ /* hdmx_table :: A pointer to the `hdmx' table. */
+ /* */
+ /* hdmx_table_size :: The size of the `hdmx' table. */
+ /* */
+ /* hdmx_record_count :: The number of hdmx records. */
+ /* */
+ /* hdmx_record_size :: The size of a single hdmx record. */
+ /* */
+ /* hdmx_record_sizes :: An array holding the ppem sizes available */
+ /* in the `hdmx' table. */
+ /* */
+ /* sbit_table :: A pointer to the font's embedded bitmap */
+ /* location table. */
+ /* */
+ /* sbit_table_size :: The size of `sbit_table'. */
+ /* */
+ /* sbit_table_type :: The sbit table type (CBLC, sbix, etc.). */
+ /* */
+ /* sbit_num_strikes :: The number of sbit strikes exposed by */
+ /* FreeType's API, omitting invalid strikes. */
+ /* */
+ /* sbit_strike_map :: A mapping between the strike indices */
+ /* exposed by the API and the indices used in */
+ /* the font's sbit table. */
+ /* */
+ /* kern_table :: A pointer to the `kern' table. */
+ /* */
+ /* kern_table_size :: The size of the `kern' table. */
+ /* */
+ /* num_kern_tables :: The number of supported kern subtables */
+ /* (up to 32; FreeType recognizes only */
+ /* horizontal ones with format 0). */
+ /* */
+ /* kern_avail_bits :: The availability status of kern subtables; */
+ /* if bit n is set, table n is available. */
+ /* */
+ /* kern_order_bits :: The sortedness status of kern subtables; */
+ /* if bit n is set, table n is sorted. */
+ /* */
+ /* bdf :: Data related to an SFNT font's `bdf' */
+ /* table; see `tttypes.h'. */
+ /* */
+ /* horz_metrics_offset :: The file offset of the `hmtx' table. */
+ /* */
+ /* vert_metrics_offset :: The file offset of the `vmtx' table. */
+ /* */
+ /* sph_found_func_flags :: Flags identifying special bytecode */
+ /* functions (used by the v38 implementation */
+ /* of the bytecode interpreter). */
+ /* */
+ /* sph_compatibility_mode :: */
+ /* This flag is set if we are in ClearType */
+ /* backward compatibility mode (used by the */
+ /* v38 implementation of the bytecode */
+ /* interpreter). */
+ /* */
+ /* ebdt_start :: The file offset of the sbit data table */
+ /* (CBDT, bdat, etc.). */
+ /* */
+ /* ebdt_size :: The size of the sbit data table. */
/* */
typedef struct TT_FaceRec_
{
@@ -1291,6 +1431,19 @@
/* handle glyph names <-> unicode & Mac values */
void* psnames;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /* a typeless pointer to the FT_Service_MultiMasters table used to */
+ /* handle variation fonts */
+ void* mm;
+
+ /* a typeless pointer to the FT_Service_MetricsVariationsRec table */
+ /* used to handle the HVAR, VVAR, and MVAR OpenType tables */
+ void* var;
+#endif
+
+ /* a typeless pointer to the PostScript Aux service */
+ void* psaux;
+
/***********************************************************************/
/* */
@@ -1314,7 +1467,7 @@
/***********************************************************************/
/* */
- /* TrueType-specific fields (ignored by the OTF-Type2 driver) */
+ /* TrueType-specific fields (ignored by the CFF driver) */
/* */
/***********************************************************************/
@@ -1334,10 +1487,6 @@
/* used to hook the debugger for the `ttdebug' utility. */
TT_Interpreter interpreter;
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- /* Use unpatented hinting only. */
- FT_Bool unpatented_hinting;
-#endif
/***********************************************************************/
/* */
@@ -1351,18 +1500,24 @@
const char* postscript_name;
FT_ULong glyf_len;
+ FT_ULong glyf_offset; /* since 2.7.1 */
+
+ FT_Bool is_cff2; /* since 2.7.1 */
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
FT_Bool doblend;
GX_Blend blend;
+
+ FT_UInt32 variation_support; /* since 2.7.1 */
+
+ const char* var_postscript_prefix; /* since 2.7.2 */
+ FT_UInt var_postscript_prefix_len; /* since 2.7.2 */
+
#endif
/* since version 2.2 */
- FT_Byte* horz_metrics;
FT_ULong horz_metrics_size;
-
- FT_Byte* vert_metrics;
FT_ULong vert_metrics_size;
FT_ULong num_locations; /* in broken TTF, gid > 0xFFFF */
@@ -1378,6 +1533,7 @@
FT_ULong sbit_table_size;
TT_SbitTableType sbit_table_type;
FT_UInt sbit_num_strikes;
+ FT_UInt* sbit_strike_map;
FT_Byte* kern_table;
FT_ULong kern_table_size;
@@ -1393,12 +1549,18 @@
FT_ULong horz_metrics_offset;
FT_ULong vert_metrics_offset;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/* since 2.4.12 */
FT_ULong sph_found_func_flags; /* special functions found */
/* for this face */
FT_Bool sph_compatibility_mode;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+
+#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
+ /* since 2.7 */
+ FT_ULong ebdt_start; /* either `CBDT', `EBDT', or `bdat' */
+ FT_ULong ebdt_size;
+#endif
} TT_FaceRec;
@@ -1457,11 +1619,23 @@
/* handle to execution context */
typedef struct TT_ExecContextRec_* TT_ExecContext;
+
+ /*************************************************************************/
+ /* */
+ /* <Type> */
+ /* TT_Size */
+ /* */
+ /* <Description> */
+ /* A handle to a TrueType size object. */
+ /* */
+ typedef struct TT_SizeRec_* TT_Size;
+
+
/* glyph loader structure */
typedef struct TT_LoaderRec_
{
- FT_Face face;
- FT_Size size;
+ TT_Face face;
+ TT_Size size;
FT_GlyphSlot glyph;
FT_GlyphLoader gloader;
@@ -1480,8 +1654,6 @@
FT_Vector pp1;
FT_Vector pp2;
- FT_ULong glyf_offset;
-
/* the zone where we load our glyphs */
TT_GlyphZoneRec base;
TT_GlyphZoneRec zone;
@@ -1503,12 +1675,15 @@
FT_Byte* cursor;
FT_Byte* limit;
+ /* since version 2.6.2 */
+ FT_ListRec composites;
+
} TT_LoaderRec;
FT_END_HEADER
-#endif /* __TTTYPES_H__ */
+#endif /* TTTYPES_H_ */
/* END */
diff --git a/include/t1tables.h b/include/freetype/t1tables.h
similarity index 97%
rename from include/t1tables.h
rename to include/freetype/t1tables.h
index a6ea415..3503c26 100644
--- a/include/t1tables.h
+++ b/include/freetype/t1tables.h
@@ -5,7 +5,7 @@
/* Basic Type 1/Type 2 tables definitions and interface (specification */
/* only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __T1TABLES_H__
-#define __T1TABLES_H__
+#ifndef T1TABLES_H_
+#define T1TABLES_H_
#include <ft2build.h>
@@ -291,7 +291,7 @@
} PS_DesignMapRec, *PS_DesignMap;
- /* backwards-compatible definition */
+ /* backward compatible definition */
typedef PS_DesignMapRec T1_DesignMap;
@@ -326,7 +326,7 @@
} PS_BlendRec, *PS_Blend;
- /* backwards-compatible definition */
+ /* backward compatible definition */
typedef PS_BlendRec T1_Blend;
@@ -554,6 +554,9 @@
/* T1_ENCODING_TYPE_ISOLATIN1 :: */
/* T1_ENCODING_TYPE_EXPERT :: */
/* */
+ /* <Since> */
+ /* 2.4.8 */
+ /* */
typedef enum T1_EncodingType_
{
T1_ENCODING_TYPE_NONE = 0,
@@ -622,6 +625,9 @@
/* PS_DICT_FS_TYPE :: */
/* PS_DICT_ITALIC_ANGLE :: */
/* */
+ /* <Since> */
+ /* 2.4.8 */
+ /* */
typedef enum PS_Dict_Keys_
{
/* conventionally in the font dictionary */
@@ -743,6 +749,9 @@
* If the font's format is not PostScript-based, this function returns
* the `FT_Err_Invalid_Argument' error code.
*
+ * @since:
+ * 2.4.8
+ *
*/
FT_EXPORT( FT_Long )
FT_Get_PS_Font_Value( FT_Face face,
@@ -755,7 +764,7 @@
FT_END_HEADER
-#endif /* __T1TABLES_H__ */
+#endif /* T1TABLES_H_ */
/* END */
diff --git a/include/ttnameid.h b/include/freetype/ttnameid.h
similarity index 79%
rename from include/ttnameid.h
rename to include/freetype/ttnameid.h
index c9585f2..8605183 100644
--- a/include/ttnameid.h
+++ b/include/freetype/ttnameid.h
@@ -4,7 +4,7 @@
/* */
/* TrueType name ID definitions (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTNAMEID_H__
-#define __TTNAMEID_H__
+#ifndef TTNAMEID_H_
+#define TTNAMEID_H_
#include <ft2build.h>
@@ -36,7 +36,7 @@
/*************************************************************************/
/* */
/* Possible values for the `platform' identifier code in the name */
- /* records of the TTF `name' table. */
+ /* records of an SFNT `name' table. */
/* */
/*************************************************************************/
@@ -119,14 +119,19 @@
* TT_APPLE_ID_VARIANT_SELECTOR ::
* From Adobe, not Apple. Not a normal cmap. Specifies variations
* on a real cmap.
+ *
+ * TT_APPLE_ID_FULL_UNICODE ::
+ * Used for fallback fonts that provide complete Unicode coverage with
+ * a type~13 cmap.
*/
-#define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */
-#define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */
-#define TT_APPLE_ID_ISO_10646 2 /* deprecated */
-#define TT_APPLE_ID_UNICODE_2_0 3 /* or later */
+#define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */
+#define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */
+#define TT_APPLE_ID_ISO_10646 2 /* deprecated */
+#define TT_APPLE_ID_UNICODE_2_0 3 /* or later */
#define TT_APPLE_ID_UNICODE_32 4 /* 2.0 or later, full repertoire */
-#define TT_APPLE_ID_VARIANT_SELECTOR 5 /* variation selector data */
+#define TT_APPLE_ID_VARIANT_SELECTOR 5 /* variation selector data */
+#define TT_APPLE_ID_FULL_UNICODE 6 /* used with type 13 cmaps */
/***********************************************************************
@@ -137,42 +142,6 @@
* @description:
* A list of valid values for the `encoding_id' for
* @TT_PLATFORM_MACINTOSH charmaps and name entries.
- *
- * @values:
- * TT_MAC_ID_ROMAN ::
- * TT_MAC_ID_JAPANESE ::
- * TT_MAC_ID_TRADITIONAL_CHINESE ::
- * TT_MAC_ID_KOREAN ::
- * TT_MAC_ID_ARABIC ::
- * TT_MAC_ID_HEBREW ::
- * TT_MAC_ID_GREEK ::
- * TT_MAC_ID_RUSSIAN ::
- * TT_MAC_ID_RSYMBOL ::
- * TT_MAC_ID_DEVANAGARI ::
- * TT_MAC_ID_GURMUKHI ::
- * TT_MAC_ID_GUJARATI ::
- * TT_MAC_ID_ORIYA ::
- * TT_MAC_ID_BENGALI ::
- * TT_MAC_ID_TAMIL ::
- * TT_MAC_ID_TELUGU ::
- * TT_MAC_ID_KANNADA ::
- * TT_MAC_ID_MALAYALAM ::
- * TT_MAC_ID_SINHALESE ::
- * TT_MAC_ID_BURMESE ::
- * TT_MAC_ID_KHMER ::
- * TT_MAC_ID_THAI ::
- * TT_MAC_ID_LAOTIAN ::
- * TT_MAC_ID_GEORGIAN ::
- * TT_MAC_ID_ARMENIAN ::
- * TT_MAC_ID_MALDIVIAN ::
- * TT_MAC_ID_SIMPLIFIED_CHINESE ::
- * TT_MAC_ID_TIBETAN ::
- * TT_MAC_ID_MONGOLIAN ::
- * TT_MAC_ID_GEEZ ::
- * TT_MAC_ID_SLAVIC ::
- * TT_MAC_ID_VIETNAMESE ::
- * TT_MAC_ID_SINDHI ::
- * TT_MAC_ID_UNINTERP ::
*/
#define TT_MAC_ID_ROMAN 0
@@ -247,44 +216,47 @@
*
* @values:
* TT_MS_ID_SYMBOL_CS ::
- * Corresponds to Microsoft symbol encoding. See
- * @FT_ENCODING_MS_SYMBOL.
+ * Microsoft symbol encoding. See @FT_ENCODING_MS_SYMBOL.
*
* TT_MS_ID_UNICODE_CS ::
- * Corresponds to a Microsoft WGL4 charmap, matching Unicode. See
+ * Microsoft WGL4 charmap, matching Unicode. See
* @FT_ENCODING_UNICODE.
*
* TT_MS_ID_SJIS ::
- * Corresponds to SJIS Japanese encoding. See @FT_ENCODING_SJIS.
+ * Shift JIS Japanese encoding. See @FT_ENCODING_SJIS.
*
- * TT_MS_ID_GB2312 ::
- * Corresponds to Simplified Chinese as used in Mainland China. See
- * @FT_ENCODING_GB2312.
+ * TT_MS_ID_PRC ::
+ * Chinese encodings as used in the People's Republic of China (PRC).
+ * This means the encodings GB~2312 and its supersets GBK and
+ * GB~18030. See @FT_ENCODING_PRC.
*
* TT_MS_ID_BIG_5 ::
- * Corresponds to Traditional Chinese as used in Taiwan and Hong Kong.
- * See @FT_ENCODING_BIG5.
+ * Traditional Chinese as used in Taiwan and Hong Kong. See
+ * @FT_ENCODING_BIG5.
*
* TT_MS_ID_WANSUNG ::
- * Corresponds to Korean Wansung encoding. See @FT_ENCODING_WANSUNG.
+ * Korean Extended Wansung encoding. See @FT_ENCODING_WANSUNG.
*
* TT_MS_ID_JOHAB ::
- * Corresponds to Johab encoding. See @FT_ENCODING_JOHAB.
+ * Korean Johab encoding. See @FT_ENCODING_JOHAB.
*
* TT_MS_ID_UCS_4 ::
- * Corresponds to UCS-4 or UTF-32 charmaps. This has been added to
- * the OpenType specification version 1.4 (mid-2001.)
+ * UCS-4 or UTF-32 charmaps. This has been added to the OpenType
+ * specification version 1.4 (mid-2001).
*/
#define TT_MS_ID_SYMBOL_CS 0
#define TT_MS_ID_UNICODE_CS 1
#define TT_MS_ID_SJIS 2
-#define TT_MS_ID_GB2312 3
+#define TT_MS_ID_PRC 3
#define TT_MS_ID_BIG_5 4
#define TT_MS_ID_WANSUNG 5
#define TT_MS_ID_JOHAB 6
#define TT_MS_ID_UCS_4 10
+ /* this value is deprecated */
+#define TT_MS_ID_GB2312 TT_MS_ID_PRC
+
/***********************************************************************
*
@@ -312,17 +284,22 @@
#define TT_ADOBE_ID_LATIN_1 3
- /*************************************************************************/
- /* */
- /* Possible values of the language identifier field in the name records */
- /* of the TTF `name' table if the `platform' identifier code is */
- /* TT_PLATFORM_MACINTOSH. These values are also used as return values */
- /* for function @FT_Get_CMap_Language_ID. */
- /* */
- /* The canonical source for the Apple assigned Language ID's is at */
- /* */
- /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html */
- /* */
+ /***********************************************************************
+ *
+ * @enum:
+ * TT_MAC_LANGID_XXX
+ *
+ * @description:
+ * Possible values of the language identifier field in the name records
+ * of the SFNT `name' table if the `platform' identifier code is
+ * @TT_PLATFORM_MACINTOSH. These values are also used as return values
+ * for function @FT_Get_CMap_Language_ID.
+ *
+ * The canonical source for Apple's IDs is
+ *
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html
+ */
+
#define TT_MAC_LANGID_ENGLISH 0
#define TT_MAC_LANGID_FRENCH 1
#define TT_MAC_LANGID_GERMAN 2
@@ -433,15 +410,6 @@
#define TT_MAC_LANGID_JAVANESE 138
#define TT_MAC_LANGID_SUNDANESE 139
-
-#if 0 /* these seem to be errors that have been dropped */
-
-#define TT_MAC_LANGID_SCOTTISH_GAELIC 140
-#define TT_MAC_LANGID_IRISH_GAELIC 141
-
-#endif
-
-
/* The following codes are new as of 2000-03-10 */
#define TT_MAC_LANGID_GALICIAN 140
#define TT_MAC_LANGID_AFRIKAANS 141
@@ -456,18 +424,30 @@
#define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150
- /*************************************************************************/
- /* */
- /* Possible values of the language identifier field in the name records */
- /* of the TTF `name' table if the `platform' identifier code is */
- /* TT_PLATFORM_MICROSOFT. */
- /* */
- /* The canonical source for the MS assigned LCIDs is */
- /* */
- /* http://www.microsoft.com/globaldev/reference/lcid-all.mspx */
- /* */
+ /***********************************************************************
+ *
+ * @enum:
+ * TT_MS_LANGID_XXX
+ *
+ * @description:
+ * Possible values of the language identifier field in the name records
+ * of the SFNT `name' table if the `platform' identifier code is
+ * @TT_PLATFORM_MICROSOFT. These values are also used as return values
+ * for function @FT_Get_CMap_Language_ID.
+ *
+ * The canonical source for Microsoft's IDs is
+ *
+ * https://www.microsoft.com/globaldev/reference/lcid-all.mspx ,
+ *
+ * however, we only provide macros for language identifiers present in
+ * the OpenType specification: Microsoft has abandoned the concept of
+ * LCIDs (language code identifiers), and format~1 of the `name' table
+ * provides a better mechanism for languages not covered here.
+ *
+ * More legacy values not listed in the reference can be found in the
+ * @FT_TRUETYPE_IDS_H header file.
+ */
-#define TT_MS_LANGID_ARABIC_GENERAL 0x0001
#define TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401
#define TT_MS_LANGID_ARABIC_IRAQ 0x0801
#define TT_MS_LANGID_ARABIC_EGYPT 0x0C01
@@ -485,39 +465,20 @@
#define TT_MS_LANGID_ARABIC_BAHRAIN 0x3C01
#define TT_MS_LANGID_ARABIC_QATAR 0x4001
#define TT_MS_LANGID_BULGARIAN_BULGARIA 0x0402
-#define TT_MS_LANGID_CATALAN_SPAIN 0x0403
-#define TT_MS_LANGID_CHINESE_GENERAL 0x0004
+#define TT_MS_LANGID_CATALAN_CATALAN 0x0403
#define TT_MS_LANGID_CHINESE_TAIWAN 0x0404
#define TT_MS_LANGID_CHINESE_PRC 0x0804
#define TT_MS_LANGID_CHINESE_HONG_KONG 0x0C04
#define TT_MS_LANGID_CHINESE_SINGAPORE 0x1004
-
-#if 1 /* this looks like the correct value */
-#define TT_MS_LANGID_CHINESE_MACAU 0x1404
-#else /* but beware, Microsoft may change its mind...
- the most recent Word reference has the following: */
-#define TT_MS_LANGID_CHINESE_MACAU TT_MS_LANGID_CHINESE_HONG_KONG
-#endif
-
-#if 0 /* used only with .NET `cultures'; commented out */
-#define TT_MS_LANGID_CHINESE_TRADITIONAL 0x7C04
-#endif
-
+#define TT_MS_LANGID_CHINESE_MACAO 0x1404
#define TT_MS_LANGID_CZECH_CZECH_REPUBLIC 0x0405
#define TT_MS_LANGID_DANISH_DENMARK 0x0406
#define TT_MS_LANGID_GERMAN_GERMANY 0x0407
#define TT_MS_LANGID_GERMAN_SWITZERLAND 0x0807
#define TT_MS_LANGID_GERMAN_AUSTRIA 0x0C07
#define TT_MS_LANGID_GERMAN_LUXEMBOURG 0x1007
-#define TT_MS_LANGID_GERMAN_LIECHTENSTEI 0x1407
+#define TT_MS_LANGID_GERMAN_LIECHTENSTEIN 0x1407
#define TT_MS_LANGID_GREEK_GREECE 0x0408
-
- /* don't ask what this one means... It is commented out currently. */
-#if 0
-#define TT_MS_LANGID_GREEK_GREECE2 0x2008
-#endif
-
-#define TT_MS_LANGID_ENGLISH_GENERAL 0x0009
#define TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409
#define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809
#define TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0C09
@@ -531,14 +492,12 @@
#define TT_MS_LANGID_ENGLISH_TRINIDAD 0x2C09
#define TT_MS_LANGID_ENGLISH_ZIMBABWE 0x3009
#define TT_MS_LANGID_ENGLISH_PHILIPPINES 0x3409
-#define TT_MS_LANGID_ENGLISH_INDONESIA 0x3809
-#define TT_MS_LANGID_ENGLISH_HONG_KONG 0x3C09
#define TT_MS_LANGID_ENGLISH_INDIA 0x4009
#define TT_MS_LANGID_ENGLISH_MALAYSIA 0x4409
#define TT_MS_LANGID_ENGLISH_SINGAPORE 0x4809
#define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT 0x040A
#define TT_MS_LANGID_SPANISH_MEXICO 0x080A
-#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT 0x0C0A
+#define TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT 0x0C0A
#define TT_MS_LANGID_SPANISH_GUATEMALA 0x100A
#define TT_MS_LANGID_SPANISH_COSTA_RICA 0x140A
#define TT_MS_LANGID_SPANISH_PANAMA 0x180A
@@ -557,9 +516,6 @@
#define TT_MS_LANGID_SPANISH_NICARAGUA 0x4C0A
#define TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500A
#define TT_MS_LANGID_SPANISH_UNITED_STATES 0x540A
- /* The following ID blatantly violate MS specs by using a */
- /* sublanguage > 0x1F. */
-#define TT_MS_LANGID_SPANISH_LATIN_AMERICA 0xE40AU
#define TT_MS_LANGID_FINNISH_FINLAND 0x040B
#define TT_MS_LANGID_FRENCH_FRANCE 0x040C
#define TT_MS_LANGID_FRENCH_BELGIUM 0x080C
@@ -567,27 +523,13 @@
#define TT_MS_LANGID_FRENCH_SWITZERLAND 0x100C
#define TT_MS_LANGID_FRENCH_LUXEMBOURG 0x140C
#define TT_MS_LANGID_FRENCH_MONACO 0x180C
-#define TT_MS_LANGID_FRENCH_WEST_INDIES 0x1C0C
-#define TT_MS_LANGID_FRENCH_REUNION 0x200C
-#define TT_MS_LANGID_FRENCH_CONGO 0x240C
- /* which was formerly: */
-#define TT_MS_LANGID_FRENCH_ZAIRE TT_MS_LANGID_FRENCH_CONGO
-#define TT_MS_LANGID_FRENCH_SENEGAL 0x280C
-#define TT_MS_LANGID_FRENCH_CAMEROON 0x2C0C
-#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE 0x300C
-#define TT_MS_LANGID_FRENCH_MALI 0x340C
-#define TT_MS_LANGID_FRENCH_MOROCCO 0x380C
-#define TT_MS_LANGID_FRENCH_HAITI 0x3C0C
- /* and another violation of the spec (see 0xE40AU) */
-#define TT_MS_LANGID_FRENCH_NORTH_AFRICA 0xE40CU
#define TT_MS_LANGID_HEBREW_ISRAEL 0x040D
#define TT_MS_LANGID_HUNGARIAN_HUNGARY 0x040E
#define TT_MS_LANGID_ICELANDIC_ICELAND 0x040F
#define TT_MS_LANGID_ITALIAN_ITALY 0x0410
#define TT_MS_LANGID_ITALIAN_SWITZERLAND 0x0810
#define TT_MS_LANGID_JAPANESE_JAPAN 0x0411
-#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA 0x0412
-#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812
+#define TT_MS_LANGID_KOREAN_KOREA 0x0412
#define TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413
#define TT_MS_LANGID_DUTCH_BELGIUM 0x0813
#define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414
@@ -595,26 +537,17 @@
#define TT_MS_LANGID_POLISH_POLAND 0x0415
#define TT_MS_LANGID_PORTUGUESE_BRAZIL 0x0416
#define TT_MS_LANGID_PORTUGUESE_PORTUGAL 0x0816
-#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND 0x0417
+#define TT_MS_LANGID_ROMANSH_SWITZERLAND 0x0417
#define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418
-#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818
#define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419
-#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819
#define TT_MS_LANGID_CROATIAN_CROATIA 0x041A
#define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081A
#define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0C1A
-
-#if 0 /* this used to be this value, but it looks like we were wrong */
-#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x101A
-#else /* current sources say */
#define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101A
#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141A
- /* and XPsp2 Platform SDK added (2004-07-26) */
- /* Names are shortened to be significant within 40 chars. */
#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181A
-#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x181A
-#endif
-
+#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x1C1A
+#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC 0x201A
#define TT_MS_LANGID_SLOVAK_SLOVAKIA 0x041B
#define TT_MS_LANGID_ALBANIAN_ALBANIA 0x041C
#define TT_MS_LANGID_SWEDISH_SWEDEN 0x041D
@@ -622,36 +555,30 @@
#define TT_MS_LANGID_THAI_THAILAND 0x041E
#define TT_MS_LANGID_TURKISH_TURKEY 0x041F
#define TT_MS_LANGID_URDU_PAKISTAN 0x0420
-#define TT_MS_LANGID_URDU_INDIA 0x0820
#define TT_MS_LANGID_INDONESIAN_INDONESIA 0x0421
#define TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422
#define TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423
-#define TT_MS_LANGID_SLOVENE_SLOVENIA 0x0424
+#define TT_MS_LANGID_SLOVENIAN_SLOVENIA 0x0424
#define TT_MS_LANGID_ESTONIAN_ESTONIA 0x0425
#define TT_MS_LANGID_LATVIAN_LATVIA 0x0426
#define TT_MS_LANGID_LITHUANIAN_LITHUANIA 0x0427
-#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA 0x0827
#define TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428
-#define TT_MS_LANGID_FARSI_IRAN 0x0429
#define TT_MS_LANGID_VIETNAMESE_VIET_NAM 0x042A
#define TT_MS_LANGID_ARMENIAN_ARMENIA 0x042B
#define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN 0x042C
#define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC 0x082C
-#define TT_MS_LANGID_BASQUE_SPAIN 0x042D
-#define TT_MS_LANGID_SORBIAN_GERMANY 0x042E
+#define TT_MS_LANGID_BASQUE_BASQUE 0x042D
+#define TT_MS_LANGID_UPPER_SORBIAN_GERMANY 0x042E
+#define TT_MS_LANGID_LOWER_SORBIAN_GERMANY 0x082E
#define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042F
-#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430
-#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431
-#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA 0x0432
-#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433
-#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA 0x0434
-#define TT_MS_LANGID_ZULU_SOUTH_AFRICA 0x0435
+#define TT_MS_LANGID_SETSWANA_SOUTH_AFRICA 0x0432
+#define TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA 0x0434
+#define TT_MS_LANGID_ISIZULU_SOUTH_AFRICA 0x0435
#define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA 0x0436
#define TT_MS_LANGID_GEORGIAN_GEORGIA 0x0437
#define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS 0x0438
#define TT_MS_LANGID_HINDI_INDIA 0x0439
#define TT_MS_LANGID_MALTESE_MALTA 0x043A
- /* Added by XPsp2 Platform SDK (2004-07-26) */
#define TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043B
#define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083B
#define TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3B
@@ -661,37 +588,21 @@
#define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3B
#define TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203B
#define TT_MS_LANGID_SAMI_INARI_FINLAND 0x243B
- /* ... and we also keep our old identifier... */
-#define TT_MS_LANGID_SAAMI_LAPONIA 0x043B
-
-#if 0 /* this seems to be a previous inversion */
-#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C
-#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C
-#else
-#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C
-#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C
-#endif
-
-#define TT_MS_LANGID_YIDDISH_GERMANY 0x043D
+#define TT_MS_LANGID_IRISH_IRELAND 0x083C
#define TT_MS_LANGID_MALAY_MALAYSIA 0x043E
#define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083E
-#define TT_MS_LANGID_KAZAK_KAZAKSTAN 0x043F
-#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN /* Cyrillic*/ 0x0440
- /* alias declared in Windows 2000 */
-#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \
- TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN
-
-#define TT_MS_LANGID_SWAHILI_KENYA 0x0441
+#define TT_MS_LANGID_KAZAKH_KAZAKHSTAN 0x043F
+#define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic*/ 0x0440
+#define TT_MS_LANGID_KISWAHILI_KENYA 0x0441
#define TT_MS_LANGID_TURKMEN_TURKMENISTAN 0x0442
#define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443
#define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843
-#define TT_MS_LANGID_TATAR_TATARSTAN 0x0444
+#define TT_MS_LANGID_TATAR_RUSSIA 0x0444
#define TT_MS_LANGID_BENGALI_INDIA 0x0445
#define TT_MS_LANGID_BENGALI_BANGLADESH 0x0845
#define TT_MS_LANGID_PUNJABI_INDIA 0x0446
-#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN 0x0846
#define TT_MS_LANGID_GUJARATI_INDIA 0x0447
-#define TT_MS_LANGID_ORIYA_INDIA 0x0448
+#define TT_MS_LANGID_ODIA_INDIA 0x0448
#define TT_MS_LANGID_TAMIL_INDIA 0x0449
#define TT_MS_LANGID_TELUGU_INDIA 0x044A
#define TT_MS_LANGID_KANNADA_INDIA 0x044B
@@ -700,142 +611,241 @@
#define TT_MS_LANGID_MARATHI_INDIA 0x044E
#define TT_MS_LANGID_SANSKRIT_INDIA 0x044F
#define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450
-#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN 0x0850
-#define TT_MS_LANGID_TIBETAN_CHINA 0x0451
- /* Don't use the next constant! It has */
- /* (1) the wrong spelling (Dzonghka) */
- /* (2) Microsoft doesn't officially define it -- */
- /* at least it is not in the List of Local */
- /* ID Values. */
- /* (3) Dzongkha is not the same language as */
- /* Tibetan, so merging it is wrong anyway. */
- /* */
- /* TT_MS_LANGID_TIBETAN_BHUTAN is correct, BTW. */
-#define TT_MS_LANGID_DZONGHKA_BHUTAN 0x0851
-
-#if 0
- /* the following used to be defined */
-#define TT_MS_LANGID_TIBETAN_BHUTAN 0x0451
- /* ... but it was changed; */
-#else
- /* So we will continue to #define it, but with the correct value */
-#define TT_MS_LANGID_TIBETAN_BHUTAN TT_MS_LANGID_DZONGHKA_BHUTAN
-#endif
-
-#define TT_MS_LANGID_WELSH_WALES 0x0452
+#define TT_MS_LANGID_MONGOLIAN_PRC 0x0850
+#define TT_MS_LANGID_TIBETAN_PRC 0x0451
+#define TT_MS_LANGID_WELSH_UNITED_KINGDOM 0x0452
#define TT_MS_LANGID_KHMER_CAMBODIA 0x0453
#define TT_MS_LANGID_LAO_LAOS 0x0454
-#define TT_MS_LANGID_BURMESE_MYANMAR 0x0455
-#define TT_MS_LANGID_GALICIAN_SPAIN 0x0456
+#define TT_MS_LANGID_GALICIAN_GALICIAN 0x0456
#define TT_MS_LANGID_KONKANI_INDIA 0x0457
-#define TT_MS_LANGID_MANIPURI_INDIA /* Bengali */ 0x0458
-#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */ 0x0459
-#define TT_MS_LANGID_SINDHI_PAKISTAN 0x0859
- /* Missing a LCID for Sindhi in Devanagari script */
#define TT_MS_LANGID_SYRIAC_SYRIA 0x045A
-#define TT_MS_LANGID_SINHALESE_SRI_LANKA 0x045B
-#define TT_MS_LANGID_CHEROKEE_UNITED_STATES 0x045C
+#define TT_MS_LANGID_SINHALA_SRI_LANKA 0x045B
#define TT_MS_LANGID_INUKTITUT_CANADA 0x045D
+#define TT_MS_LANGID_INUKTITUT_CANADA_LATIN 0x085D
#define TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045E
-#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */ 0x045F
-#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN 0x085F
- /* Missing a LCID for Tifinagh script */
-#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */ 0x0460
- /* Spelled this way by XPsp2 Platform SDK (2004-07-26) */
- /* script is yet unclear... might be Arabic, Nagari or Sharada */
-#define TT_MS_LANGID_KASHMIRI_SASIA 0x0860
- /* ... and aliased (by MS) for compatibility reasons. */
-#define TT_MS_LANGID_KASHMIRI_INDIA TT_MS_LANGID_KASHMIRI_SASIA
+#define TT_MS_LANGID_TAMAZIGHT_ALGERIA 0x085F
#define TT_MS_LANGID_NEPALI_NEPAL 0x0461
-#define TT_MS_LANGID_NEPALI_INDIA 0x0861
#define TT_MS_LANGID_FRISIAN_NETHERLANDS 0x0462
#define TT_MS_LANGID_PASHTO_AFGHANISTAN 0x0463
#define TT_MS_LANGID_FILIPINO_PHILIPPINES 0x0464
#define TT_MS_LANGID_DHIVEHI_MALDIVES 0x0465
- /* alias declared in Windows 2000 */
-#define TT_MS_LANGID_DIVEHI_MALDIVES TT_MS_LANGID_DHIVEHI_MALDIVES
-#define TT_MS_LANGID_EDO_NIGERIA 0x0466
-#define TT_MS_LANGID_FULFULDE_NIGERIA 0x0467
#define TT_MS_LANGID_HAUSA_NIGERIA 0x0468
-#define TT_MS_LANGID_IBIBIO_NIGERIA 0x0469
#define TT_MS_LANGID_YORUBA_NIGERIA 0x046A
#define TT_MS_LANGID_QUECHUA_BOLIVIA 0x046B
#define TT_MS_LANGID_QUECHUA_ECUADOR 0x086B
#define TT_MS_LANGID_QUECHUA_PERU 0x0C6B
-#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA 0x046C
- /* Also spelled by XPsp2 Platform SDK (2004-07-26) */
-#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \
- TT_MS_LANGID_SEPEDI_SOUTH_AFRICA
- /* language codes 0x046D, 0x046E and 0x046F are (still) unknown. */
+#define TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA 0x046C
+#define TT_MS_LANGID_BASHKIR_RUSSIA 0x046D
+#define TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG 0x046E
+#define TT_MS_LANGID_GREENLANDIC_GREENLAND 0x046F
#define TT_MS_LANGID_IGBO_NIGERIA 0x0470
+#define TT_MS_LANGID_YI_PRC 0x0478
+#define TT_MS_LANGID_MAPUDUNGUN_CHILE 0x047A
+#define TT_MS_LANGID_MOHAWK_MOHAWK 0x047C
+#define TT_MS_LANGID_BRETON_FRANCE 0x047E
+#define TT_MS_LANGID_UIGHUR_PRC 0x0480
+#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481
+#define TT_MS_LANGID_OCCITAN_FRANCE 0x0482
+#define TT_MS_LANGID_CORSICAN_FRANCE 0x0483
+#define TT_MS_LANGID_ALSATIAN_FRANCE 0x0484
+#define TT_MS_LANGID_YAKUT_RUSSIA 0x0485
+#define TT_MS_LANGID_KICHE_GUATEMALA 0x0486
+#define TT_MS_LANGID_KINYARWANDA_RWANDA 0x0487
+#define TT_MS_LANGID_WOLOF_SENEGAL 0x0488
+#define TT_MS_LANGID_DARI_AFGHANISTAN 0x048C
+
+ /* */
+
+
+ /* legacy macro definitions not present in OpenType 1.8.1 */
+#define TT_MS_LANGID_ARABIC_GENERAL 0x0001
+#define TT_MS_LANGID_CATALAN_SPAIN \
+ TT_MS_LANGID_CATALAN_CATALAN
+#define TT_MS_LANGID_CHINESE_GENERAL 0x0004
+#define TT_MS_LANGID_CHINESE_MACAU \
+ TT_MS_LANGID_CHINESE_MACAO
+#define TT_MS_LANGID_GERMAN_LIECHTENSTEI \
+ TT_MS_LANGID_GERMAN_LIECHTENSTEIN
+#define TT_MS_LANGID_ENGLISH_GENERAL 0x0009
+#define TT_MS_LANGID_ENGLISH_INDONESIA 0x3809
+#define TT_MS_LANGID_ENGLISH_HONG_KONG 0x3C09
+#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT \
+ TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT
+#define TT_MS_LANGID_SPANISH_LATIN_AMERICA 0xE40AU
+#define TT_MS_LANGID_FRENCH_WEST_INDIES 0x1C0C
+#define TT_MS_LANGID_FRENCH_REUNION 0x200C
+#define TT_MS_LANGID_FRENCH_CONGO 0x240C
+ /* which was formerly: */
+#define TT_MS_LANGID_FRENCH_ZAIRE \
+ TT_MS_LANGID_FRENCH_CONGO
+#define TT_MS_LANGID_FRENCH_SENEGAL 0x280C
+#define TT_MS_LANGID_FRENCH_CAMEROON 0x2C0C
+#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE 0x300C
+#define TT_MS_LANGID_FRENCH_MALI 0x340C
+#define TT_MS_LANGID_FRENCH_MOROCCO 0x380C
+#define TT_MS_LANGID_FRENCH_HAITI 0x3C0C
+#define TT_MS_LANGID_FRENCH_NORTH_AFRICA 0xE40CU
+#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA \
+ TT_MS_LANGID_KOREAN_KOREA
+#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812
+#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND \
+ TT_MS_LANGID_ROMANSH_SWITZERLAND
+#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818
+#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819
+#define TT_MS_LANGID_URDU_INDIA 0x0820
+#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA 0x0827
+#define TT_MS_LANGID_SLOVENE_SLOVENIA \
+ TT_MS_LANGID_SLOVENIAN_SLOVENIA
+#define TT_MS_LANGID_FARSI_IRAN 0x0429
+#define TT_MS_LANGID_BASQUE_SPAIN \
+ TT_MS_LANGID_BASQUE_BASQUE
+#define TT_MS_LANGID_SORBIAN_GERMANY \
+ TT_MS_LANGID_UPPER_SORBIAN_GERMANY
+#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430
+#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431
+#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA \
+ TT_MS_LANGID_SETSWANA_SOUTH_AFRICA
+#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433
+#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA \
+ TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA
+#define TT_MS_LANGID_ZULU_SOUTH_AFRICA \
+ TT_MS_LANGID_ISIZULU_SOUTH_AFRICA
+#define TT_MS_LANGID_SAAMI_LAPONIA 0x043B
+ /* the next two values are incorrectly inverted */
+#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C
+#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C
+#define TT_MS_LANGID_YIDDISH_GERMANY 0x043D
+#define TT_MS_LANGID_KAZAK_KAZAKSTAN \
+ TT_MS_LANGID_KAZAKH_KAZAKHSTAN
+#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \
+ TT_MS_LANGID_KYRGYZ_KYRGYZSTAN
+#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN \
+ TT_MS_LANGID_KYRGYZ_KYRGYZSTAN
+#define TT_MS_LANGID_SWAHILI_KENYA \
+ TT_MS_LANGID_KISWAHILI_KENYA
+#define TT_MS_LANGID_TATAR_TATARSTAN \
+ TT_MS_LANGID_TATAR_RUSSIA
+#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN 0x0846
+#define TT_MS_LANGID_ORIYA_INDIA \
+ TT_MS_LANGID_ODIA_INDIA
+#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN \
+ TT_MS_LANGID_MONGOLIAN_PRC
+#define TT_MS_LANGID_TIBETAN_CHINA \
+ TT_MS_LANGID_TIBETAN_PRC
+#define TT_MS_LANGID_DZONGHKA_BHUTAN 0x0851
+#define TT_MS_LANGID_TIBETAN_BHUTAN \
+ TT_MS_LANGID_DZONGHKA_BHUTAN
+#define TT_MS_LANGID_WELSH_WALES \
+ TT_MS_LANGID_WELSH_UNITED_KINGDOM
+#define TT_MS_LANGID_BURMESE_MYANMAR 0x0455
+#define TT_MS_LANGID_GALICIAN_SPAIN \
+ TT_MS_LANGID_GALICIAN_GALICIAN
+#define TT_MS_LANGID_MANIPURI_INDIA /* Bengali */ 0x0458
+#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */ 0x0459
+#define TT_MS_LANGID_SINDHI_PAKISTAN 0x0859
+#define TT_MS_LANGID_SINHALESE_SRI_LANKA \
+ TT_MS_LANGID_SINHALA_SRI_LANKA
+#define TT_MS_LANGID_CHEROKEE_UNITED_STATES 0x045C
+#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */ 0x045F
+#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN \
+ TT_MS_LANGID_TAMAZIGHT_ALGERIA
+#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */ 0x0460
+#define TT_MS_LANGID_KASHMIRI_SASIA 0x0860
+#define TT_MS_LANGID_KASHMIRI_INDIA \
+ TT_MS_LANGID_KASHMIRI_SASIA
+#define TT_MS_LANGID_NEPALI_INDIA 0x0861
+#define TT_MS_LANGID_DIVEHI_MALDIVES \
+ TT_MS_LANGID_DHIVEHI_MALDIVES
+#define TT_MS_LANGID_EDO_NIGERIA 0x0466
+#define TT_MS_LANGID_FULFULDE_NIGERIA 0x0467
+#define TT_MS_LANGID_IBIBIO_NIGERIA 0x0469
+#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA \
+ TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA
+#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \
+ TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA
#define TT_MS_LANGID_KANURI_NIGERIA 0x0471
#define TT_MS_LANGID_OROMO_ETHIOPIA 0x0472
#define TT_MS_LANGID_TIGRIGNA_ETHIOPIA 0x0473
#define TT_MS_LANGID_TIGRIGNA_ERYTHREA 0x0873
- /* also spelled in the `Passport SDK' list as: */
-#define TT_MS_LANGID_TIGRIGNA_ERYTREA TT_MS_LANGID_TIGRIGNA_ERYTHREA
+#define TT_MS_LANGID_TIGRIGNA_ERYTREA \
+ TT_MS_LANGID_TIGRIGNA_ERYTHREA
#define TT_MS_LANGID_GUARANI_PARAGUAY 0x0474
#define TT_MS_LANGID_HAWAIIAN_UNITED_STATES 0x0475
#define TT_MS_LANGID_LATIN 0x0476
#define TT_MS_LANGID_SOMALI_SOMALIA 0x0477
- /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */
- /* not written (but OTOH the peculiar writing system is worth */
- /* studying). */
-#define TT_MS_LANGID_YI_CHINA 0x0478
+#define TT_MS_LANGID_YI_CHINA \
+ TT_MS_LANGID_YI_PRC
#define TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES 0x0479
- /* language codes from 0x047A to 0x047F are (still) unknown. */
-#define TT_MS_LANGID_UIGHUR_CHINA 0x0480
-#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481
-
-#if 0 /* not deemed useful for fonts */
-#define TT_MS_LANGID_HUMAN_INTERFACE_DEVICE 0x04FF
-#endif
+#define TT_MS_LANGID_UIGHUR_CHINA \
+ TT_MS_LANGID_UIGHUR_PRC
- /*************************************************************************/
- /* */
- /* Possible values of the `name' identifier field in the name records of */
- /* the TTF `name' table. These values are platform independent. */
- /* */
-#define TT_NAME_ID_COPYRIGHT 0
-#define TT_NAME_ID_FONT_FAMILY 1
-#define TT_NAME_ID_FONT_SUBFAMILY 2
-#define TT_NAME_ID_UNIQUE_ID 3
-#define TT_NAME_ID_FULL_NAME 4
-#define TT_NAME_ID_VERSION_STRING 5
-#define TT_NAME_ID_PS_NAME 6
-#define TT_NAME_ID_TRADEMARK 7
+ /***********************************************************************
+ *
+ * @enum:
+ * TT_NAME_ID_XXX
+ *
+ * @description:
+ * Possible values of the `name' identifier field in the name records of
+ * an SFNT `name' table. These values are platform independent.
+ */
+
+#define TT_NAME_ID_COPYRIGHT 0
+#define TT_NAME_ID_FONT_FAMILY 1
+#define TT_NAME_ID_FONT_SUBFAMILY 2
+#define TT_NAME_ID_UNIQUE_ID 3
+#define TT_NAME_ID_FULL_NAME 4
+#define TT_NAME_ID_VERSION_STRING 5
+#define TT_NAME_ID_PS_NAME 6
+#define TT_NAME_ID_TRADEMARK 7
/* the following values are from the OpenType spec */
-#define TT_NAME_ID_MANUFACTURER 8
-#define TT_NAME_ID_DESIGNER 9
-#define TT_NAME_ID_DESCRIPTION 10
-#define TT_NAME_ID_VENDOR_URL 11
-#define TT_NAME_ID_DESIGNER_URL 12
-#define TT_NAME_ID_LICENSE 13
-#define TT_NAME_ID_LICENSE_URL 14
+#define TT_NAME_ID_MANUFACTURER 8
+#define TT_NAME_ID_DESIGNER 9
+#define TT_NAME_ID_DESCRIPTION 10
+#define TT_NAME_ID_VENDOR_URL 11
+#define TT_NAME_ID_DESIGNER_URL 12
+#define TT_NAME_ID_LICENSE 13
+#define TT_NAME_ID_LICENSE_URL 14
/* number 15 is reserved */
-#define TT_NAME_ID_PREFERRED_FAMILY 16
-#define TT_NAME_ID_PREFERRED_SUBFAMILY 17
-#define TT_NAME_ID_MAC_FULL_NAME 18
+#define TT_NAME_ID_TYPOGRAPHIC_FAMILY 16
+#define TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 17
+#define TT_NAME_ID_MAC_FULL_NAME 18
/* The following code is new as of 2000-01-21 */
-#define TT_NAME_ID_SAMPLE_TEXT 19
+#define TT_NAME_ID_SAMPLE_TEXT 19
/* This is new in OpenType 1.3 */
-#define TT_NAME_ID_CID_FINDFONT_NAME 20
+#define TT_NAME_ID_CID_FINDFONT_NAME 20
/* This is new in OpenType 1.5 */
-#define TT_NAME_ID_WWS_FAMILY 21
-#define TT_NAME_ID_WWS_SUBFAMILY 22
+#define TT_NAME_ID_WWS_FAMILY 21
+#define TT_NAME_ID_WWS_SUBFAMILY 22
+
+ /* This is new in OpenType 1.7 */
+#define TT_NAME_ID_LIGHT_BACKGROUND 23
+#define TT_NAME_ID_DARK_BACKGROUND 24
+
+ /* This is new in OpenType 1.8 */
+#define TT_NAME_ID_VARIATIONS_PREFIX 25
+
+ /* these two values are deprecated */
+#define TT_NAME_ID_PREFERRED_FAMILY TT_NAME_ID_TYPOGRAPHIC_FAMILY
+#define TT_NAME_ID_PREFERRED_SUBFAMILY TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
- /*************************************************************************/
- /* */
- /* Bit mask values for the Unicode Ranges from the TTF `OS2 ' table. */
- /* */
- /* Updated 08-Nov-2008. */
- /* */
+ /***********************************************************************
+ *
+ * @enum:
+ * TT_UCR_XXX
+ *
+ * @description:
+ * Possible bit mask values for the `ulUnicodeRangeX' fields in an SFNT
+ * `OS/2' table.
+ */
+
+ /* ulUnicodeRange1 */
+ /* --------------- */
/* Bit 0 Basic Latin */
#define TT_UCR_BASIC_LATIN (1L << 0) /* U+0020-U+007E */
@@ -857,7 +867,7 @@
/* U+A700-U+A71F */
/* Bit 6 Combining Diacritical Marks */
/* Combining Diacritical Marks Supplement */
-#define TT_UCR_COMBINING_DIACRITICS (1L << 6) /* U+0300-U+036F */
+#define TT_UCR_COMBINING_DIACRITICAL_MARKS (1L << 6) /* U+0300-U+036F */
/* U+1DC0-U+1DFF */
/* Bit 7 Greek and Coptic */
#define TT_UCR_GREEK (1L << 7) /* U+0370-U+03FF */
@@ -925,12 +935,17 @@
/* Supplemental Punctuation */
#define TT_UCR_GENERAL_PUNCTUATION (1L << 31) /* U+2000-U+206F */
/* U+2E00-U+2E7F */
+
+ /* ulUnicodeRange2 */
+ /* --------------- */
+
/* Bit 32 Superscripts And Subscripts */
#define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS (1L << 0) /* U+2070-U+209F */
/* Bit 33 Currency Symbols */
#define TT_UCR_CURRENCY_SYMBOLS (1L << 1) /* U+20A0-U+20CF */
/* Bit 34 Combining Diacritical Marks For Symbols */
-#define TT_UCR_COMBINING_DIACRITICS_SYMB (1L << 2) /* U+20D0-U+20FF */
+#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \
+ (1L << 2) /* U+20D0-U+20FF */
/* Bit 35 Letterlike Symbols */
#define TT_UCR_LETTERLIKE_SYMBOLS (1L << 3) /* U+2100-U+214F */
/* Bit 36 Number Forms */
@@ -996,13 +1011,13 @@
/* Bit 57 High Surrogates */
/* High Private Use Surrogates */
/* Low Surrogates */
- /* */
+
/* According to OpenType specs v.1.3+, */
/* setting bit 57 implies that there is */
/* at least one codepoint beyond the */
/* Basic Multilingual Plane that is */
/* supported by this font. So it really */
- /* means >= U+10000 */
+ /* means >= U+10000. */
#define TT_UCR_SURROGATES (1L << 25) /* U+D800-U+DB7F */
/* U+DB80-U+DBFF */
/* U+DC00-U+DFFF */
@@ -1034,7 +1049,11 @@
/* Bit 62 Alphabetic Presentation Forms */
#define TT_UCR_ALPHABETIC_PRESENTATION_FORMS (1L << 30) /* U+FB00-U+FB4F */
/* Bit 63 Arabic Presentation Forms-A */
-#define TT_UCR_ARABIC_PRESENTATIONS_A (1L << 31) /* U+FB50-U+FDFF */
+#define TT_UCR_ARABIC_PRESENTATION_FORMS_A (1L << 31) /* U+FB50-U+FDFF */
+
+ /* ulUnicodeRange3 */
+ /* --------------- */
+
/* Bit 64 Combining Half Marks */
#define TT_UCR_COMBINING_HALF_MARKS (1L << 0) /* U+FE20-U+FE2F */
/* Bit 65 Vertical forms */
@@ -1044,7 +1063,7 @@
/* Bit 66 Small Form Variants */
#define TT_UCR_SMALL_FORM_VARIANTS (1L << 2) /* U+FE50-U+FE6F */
/* Bit 67 Arabic Presentation Forms-B */
-#define TT_UCR_ARABIC_PRESENTATIONS_B (1L << 3) /* U+FE70-U+FEFE */
+#define TT_UCR_ARABIC_PRESENTATION_FORMS_B (1L << 3) /* U+FE70-U+FEFE */
/* Bit 68 Halfwidth and Fullwidth Forms */
#define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS (1L << 4) /* U+FF00-U+FFEF */
/* Bit 69 Specials */
@@ -1123,6 +1142,10 @@
#define TT_UCR_TAI_LE (1L << 30) /* U+1950-U+197F */
/* Bit 95 New Tai Lue */
#define TT_UCR_NEW_TAI_LUE (1L << 31) /* U+1980-U+19DF */
+
+ /* ulUnicodeRange4 */
+ /* --------------- */
+
/* Bit 96 Buginese */
#define TT_UCR_BUGINESE (1L << 0) /* U+1A00-U+1A1F */
/* Bit 97 Glagolitic */
@@ -1191,47 +1214,23 @@
/*U+1F000-U+1F02F*/
/* Bit 123-127 Reserved for process-internal usage */
+ /* */
- /*************************************************************************/
- /* */
- /* Some compilers have a very limited length of identifiers. */
- /* */
-#if defined( __TURBOC__ ) && __TURBOC__ < 0x0410 || defined( __PACIFIC__ )
-#define HAVE_LIMIT_ON_IDENTS
-#endif
+ /* for backward compatibility with older FreeType versions */
+#define TT_UCR_ARABIC_PRESENTATION_A \
+ TT_UCR_ARABIC_PRESENTATION_FORMS_A
+#define TT_UCR_ARABIC_PRESENTATION_B \
+ TT_UCR_ARABIC_PRESENTATION_FORMS_B
-
-#ifndef HAVE_LIMIT_ON_IDENTS
-
-
- /*************************************************************************/
- /* */
- /* Here some alias #defines in order to be clearer. */
- /* */
- /* These are not always #defined to stay within the 31~character limit, */
- /* which some compilers have. */
- /* */
- /* Credits go to Dave Hoo <dhoo@flash.net> for pointing out that modern */
- /* Borland compilers (read: from BC++ 3.1 on) can increase this limit. */
- /* If you get a warning with such a compiler, use the -i40 switch. */
- /* */
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_A \
- TT_UCR_ARABIC_PRESENTATIONS_A
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_B \
- TT_UCR_ARABIC_PRESENTATIONS_B
-
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS \
- TT_UCR_COMBINING_DIACRITICS
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \
- TT_UCR_COMBINING_DIACRITICS_SYMB
-
-
-#endif /* !HAVE_LIMIT_ON_IDENTS */
+#define TT_UCR_COMBINING_DIACRITICS \
+ TT_UCR_COMBINING_DIACRITICAL_MARKS
+#define TT_UCR_COMBINING_DIACRITICS_SYMB \
+ TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB
FT_END_HEADER
-#endif /* __TTNAMEID_H__ */
+#endif /* TTNAMEID_H_ */
/* END */
diff --git a/include/tttables.h b/include/freetype/tttables.h
similarity index 79%
rename from include/tttables.h
rename to include/freetype/tttables.h
index 1568f40..ce6a617 100644
--- a/include/tttables.h
+++ b/include/freetype/tttables.h
@@ -5,7 +5,7 @@
/* Basic SFNT/TrueType tables definitions and interface */
/* (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __TTTABLES_H__
-#define __TTTABLES_H__
+#ifndef TTTABLES_H_
+#define TTTABLES_H_
#include <ft2build.h>
@@ -45,8 +45,9 @@
/* TrueType specific table types and functions. */
/* */
/* <Description> */
- /* This section contains the definition of TrueType-specific tables */
- /* as well as some routines used to access and process them. */
+ /* This section contains definitions of some basic tables specific to */
+ /* TrueType and OpenType as well as some routines used to access and */
+ /* process them. */
/* */
/* <Order> */
/* TT_Header */
@@ -76,8 +77,8 @@
/* TT_Header */
/* */
/* <Description> */
- /* A structure used to model a TrueType font header table. All */
- /* fields follow the TrueType specification. */
+ /* A structure to model a TrueType font header table. All fields */
+ /* follow the OpenType specification. */
/* */
typedef struct TT_Header_
{
@@ -114,9 +115,9 @@
/* TT_HoriHeader */
/* */
/* <Description> */
- /* A structure used to model a TrueType horizontal header, the `hhea' */
+ /* A structure to model a TrueType horizontal header, the `hhea' */
/* table, as well as the corresponding horizontal metrics table, */
- /* i.e., the `hmtx' table. */
+ /* `hmtx'. */
/* */
/* <Fields> */
/* Version :: The table version. */
@@ -131,7 +132,7 @@
/* glyphs found in the font (maybe ASCII). */
/* */
/* You should use the `sTypoAscender' field */
- /* of the OS/2 table instead if you want */
+ /* of the `OS/2' table instead if you want */
/* the correct one. */
/* */
/* Descender :: The font's descender, i.e., the distance */
@@ -145,7 +146,7 @@
/* glyphs found in the font (maybe ASCII). */
/* */
/* You should use the `sTypoDescender' */
- /* field of the OS/2 table instead if you */
+ /* field of the `OS/2' table instead if you */
/* want the correct one. */
/* */
/* Line_Gap :: The font's line gap, i.e., the distance */
@@ -175,6 +176,8 @@
/* caret_Slope_Run :: The run coefficient of the cursor's */
/* slope. */
/* */
+ /* caret_Offset :: The cursor's offset for slanted fonts. */
+ /* */
/* Reserved :: 8~reserved bytes. */
/* */
/* metric_Data_Format :: Always~0. */
@@ -188,13 +191,10 @@
/* short_metrics :: A pointer into the `hmtx' table. */
/* */
/* <Note> */
- /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */
- /* be identical except for the names of their fields, */
- /* which are different. */
- /* */
- /* This ensures that a single function in the `ttload' */
- /* module is able to read both the horizontal and vertical */
- /* headers. */
+ /* For an OpenType variation font, the values of the following fields */
+ /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
+ /* friends) if the font contains an `MVAR' table: `caret_Slope_Rise', */
+ /* `caret_Slope_Run', and `caret_Offset'. */
/* */
typedef struct TT_HoriHeader_
{
@@ -217,9 +217,9 @@
FT_Short metric_Data_Format;
FT_UShort number_Of_HMetrics;
- /* The following fields are not defined by the TrueType specification */
+ /* The following fields are not defined by the OpenType specification */
/* but they are used to connect the metrics header to the relevant */
- /* `HMTX' table. */
+ /* `hmtx' table. */
void* long_metrics;
void* short_metrics;
@@ -234,8 +234,8 @@
/* */
/* <Description> */
/* A structure used to model a TrueType vertical header, the `vhea' */
- /* table, as well as the corresponding vertical metrics table, i.e., */
- /* the `vmtx' table. */
+ /* table, as well as the corresponding vertical metrics table, */
+ /* `vmtx'. */
/* */
/* <Fields> */
/* Version :: The table version. */
@@ -251,8 +251,8 @@
/* ASCII). */
/* */
/* You should use the `sTypoAscender' */
- /* field of the OS/2 table instead if you */
- /* want the correct one. */
+ /* field of the `OS/2' table instead if */
+ /* you want the correct one. */
/* */
/* Descender :: The font's descender, i.e., the */
/* distance from the baseline to the */
@@ -266,8 +266,8 @@
/* ASCII). */
/* */
/* You should use the `sTypoDescender' */
- /* field of the OS/2 table instead if you */
- /* want the correct one. */
+ /* field of the `OS/2' table instead if */
+ /* you want the correct one. */
/* */
/* Line_Gap :: The font's line gap, i.e., the distance */
/* to add to the ascender and descender to */
@@ -297,30 +297,26 @@
/* slope. */
/* */
/* caret_Offset :: The cursor's offset for slanted fonts. */
- /* This value is `reserved' in vmtx */
- /* version 1.0. */
/* */
/* Reserved :: 8~reserved bytes. */
/* */
/* metric_Data_Format :: Always~0. */
/* */
- /* number_Of_HMetrics :: Number of VMetrics entries in the */
+ /* number_Of_VMetrics :: Number of VMetrics entries in the */
/* `vmtx' table -- this value can be */
/* smaller than the total number of glyphs */
/* in the font. */
/* */
- /* long_metrics :: A pointer into the `vmtx' table. */
+ /* long_metrics :: A pointer into the `vmtx' table. */
/* */
- /* short_metrics :: A pointer into the `vmtx' table. */
+ /* short_metrics :: A pointer into the `vmtx' table. */
/* */
/* <Note> */
- /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */
- /* be identical except for the names of their fields, */
- /* which are different. */
- /* */
- /* This ensures that a single function in the `ttload' */
- /* module is able to read both the horizontal and vertical */
- /* headers. */
+ /* For an OpenType variation font, the values of the following fields */
+ /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
+ /* friends) if the font contains an `MVAR' table: `Ascender', */
+ /* `Descender', `Line_Gap', `caret_Slope_Rise', `caret_Slope_Run', */
+ /* and `caret_Offset'. */
/* */
typedef struct TT_VertHeader_
{
@@ -331,9 +327,9 @@
FT_UShort advance_Height_Max; /* advance height maximum */
- FT_Short min_Top_Side_Bearing; /* minimum left-sb or top-sb */
- FT_Short min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */
- FT_Short yMax_Extent; /* xmax or ymax extents */
+ FT_Short min_Top_Side_Bearing; /* minimum top-sb */
+ FT_Short min_Bottom_Side_Bearing; /* minimum bottom-sb */
+ FT_Short yMax_Extent; /* ymax extents */
FT_Short caret_Slope_Rise;
FT_Short caret_Slope_Run;
FT_Short caret_Offset;
@@ -343,9 +339,9 @@
FT_Short metric_Data_Format;
FT_UShort number_Of_VMetrics;
- /* The following fields are not defined by the TrueType specification */
- /* but they're used to connect the metrics header to the relevant */
- /* `HMTX' or `VMTX' table. */
+ /* The following fields are not defined by the OpenType specification */
+ /* but they are used to connect the metrics header to the relevant */
+ /* `vmtx' table. */
void* long_metrics;
void* short_metrics;
@@ -359,12 +355,28 @@
/* TT_OS2 */
/* */
/* <Description> */
- /* A structure used to model a TrueType OS/2 table. All fields */
- /* comply to the OpenType specification. */
+ /* A structure to model a TrueType `OS/2' table. All fields comply */
+ /* to the OpenType specification. */
/* */
- /* Note that we now support old Mac fonts that do not include an OS/2 */
- /* table. In this case, the `version' field is always set to 0xFFFF. */
+ /* Note that we now support old Mac fonts that do not include an */
+ /* `OS/2' table. In this case, the `version' field is always set to */
+ /* 0xFFFF. */
/* */
+ /* <Note> */
+ /* For an OpenType variation font, the values of the following fields */
+ /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
+ /* friends) if the font contains an `MVAR' table: `sCapHeight', */
+ /* `sTypoAscender', `sTypoDescender', `sTypoLineGap', `sxHeight', */
+ /* `usWinAscent', `usWinDescent', `yStrikeoutPosition', */
+ /* `yStrikeoutSize', `ySubscriptXOffset', `ySubScriptXSize', */
+ /* `ySubscriptYOffset', `ySubscriptYSize', `ySuperscriptXOffset', */
+ /* `ySuperscriptXSize', `ySuperscriptYOffset', and */
+ /* `ySuperscriptYSize'. */
+ /* */
+ /* Possible values for bits in the `ulUnicodeRangeX' fields are given */
+ /* by the @TT_UCR_XXX macros. */
+ /* */
+
typedef struct TT_OS2_
{
FT_UShort version; /* 0x0001 - more or 0xFFFF */
@@ -429,10 +441,16 @@
/* TT_Postscript */
/* */
/* <Description> */
- /* A structure used to model a TrueType PostScript table. All fields */
- /* comply to the TrueType specification. This structure does not */
- /* reference the PostScript glyph names, which can be nevertheless */
- /* accessed with the `ttpost' module. */
+ /* A structure to model a TrueType `post' table. All fields comply */
+ /* to the OpenType specification. This structure does not reference */
+ /* a font's PostScript glyph names; use @FT_Get_Glyph_Name to */
+ /* retrieve them. */
+ /* */
+ /* <Note> */
+ /* For an OpenType variation font, the values of the following fields */
+ /* can change after a call to @FT_Set_Var_Design_Coordinates (and */
+ /* friends) if the font contains an `MVAR' table: `underlinePosition' */
+ /* and `underlineThickness'. */
/* */
typedef struct TT_Postscript_
{
@@ -446,8 +464,8 @@
FT_ULong minMemType1;
FT_ULong maxMemType1;
- /* Glyph names follow in the file, but we don't */
- /* load them by default. See the ttpost.c file. */
+ /* Glyph names follow in the `post' table, but we don't */
+ /* load them by default. */
} TT_Postscript;
@@ -458,8 +476,8 @@
/* TT_PCLT */
/* */
/* <Description> */
- /* A structure used to model a TrueType PCLT table. All fields */
- /* comply to the TrueType specification. */
+ /* A structure to model a TrueType `PCLT' table. All fields comply */
+ /* to the OpenType specification. */
/* */
typedef struct TT_PCLT_
{
@@ -488,9 +506,9 @@
/* TT_MaxProfile */
/* */
/* <Description> */
- /* The maximum profile is a table containing many max values, which */
- /* can be used to pre-allocate arrays. This ensures that no memory */
- /* allocation occurs during a glyph load. */
+ /* The maximum profile (`maxp') table contains many max values, which */
+ /* can be used to pre-allocate arrays for speeding up glyph loading */
+ /* and hinting. */
/* */
/* <Fields> */
/* version :: The version number. */
@@ -500,21 +518,19 @@
/* */
/* maxPoints :: The maximum number of points in a */
/* non-composite TrueType glyph. See also */
- /* the structure element */
/* `maxCompositePoints'. */
/* */
/* maxContours :: The maximum number of contours in a */
/* non-composite TrueType glyph. See also */
- /* the structure element */
/* `maxCompositeContours'. */
/* */
/* maxCompositePoints :: The maximum number of points in a */
- /* composite TrueType glyph. See also the */
- /* structure element `maxPoints'. */
+ /* composite TrueType glyph. See also */
+ /* `maxPoints'. */
/* */
/* maxCompositeContours :: The maximum number of contours in a */
- /* composite TrueType glyph. See also the */
- /* structure element `maxContours'. */
+ /* composite TrueType glyph. See also */
+ /* `maxContours'. */
/* */
/* maxZones :: The maximum number of zones used for */
/* glyph hinting. */
@@ -575,8 +591,9 @@
/* FT_Sfnt_Tag */
/* */
/* <Description> */
- /* An enumeration used to specify the index of an SFNT table. */
- /* Used in the @FT_Get_Sfnt_Table API function. */
+ /* An enumeration to specify indices of SFNT tables loaded and parsed */
+ /* by FreeType during initialization of an SFNT font. Used in the */
+ /* @FT_Get_Sfnt_Table API function. */
/* */
/* <Values> */
/* FT_SFNT_HEAD :: To access the font's @TT_Header structure. */
@@ -587,7 +604,7 @@
/* */
/* FT_SFNT_HHEA :: To access the font's @TT_HoriHeader structure. */
/* */
- /* FT_SFNT_VHEA :: To access the font's @TT_VertHeader struture. */
+ /* FT_SFNT_VHEA :: To access the font's @TT_VertHeader structure. */
/* */
/* FT_SFNT_POST :: To access the font's @TT_Postscript structure. */
/* */
@@ -624,7 +641,7 @@
/* FT_Get_Sfnt_Table */
/* */
/* <Description> */
- /* Return a pointer to a given SFNT table within a face. */
+ /* Return a pointer to a given SFNT table stored within a face. */
/* */
/* <Input> */
/* face :: A handle to the source. */
@@ -632,7 +649,7 @@
/* tag :: The index of the SFNT table. */
/* */
/* <Return> */
- /* A type-less pointer to the table. This will be~0 in case of */
+ /* A type-less pointer to the table. This will be NULL in case of */
/* error, or if the corresponding table was not found *OR* loaded */
/* from the file. */
/* */
@@ -661,70 +678,70 @@
FT_Sfnt_Tag tag );
- /**************************************************************************
- *
- * @function:
- * FT_Load_Sfnt_Table
- *
- * @description:
- * Load any font table into client memory.
- *
- * @input:
- * face ::
- * A handle to the source face.
- *
- * tag ::
- * The four-byte tag of the table to load. Use the value~0 if you want
- * to access the whole font file. Otherwise, you can use one of the
- * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new
- * one with @FT_MAKE_TAG.
- *
- * offset ::
- * The starting offset in the table (or file if tag == 0).
- *
- * @output:
- * buffer ::
- * The target buffer address. The client must ensure that the memory
- * array is big enough to hold the data.
- *
- * @inout:
- * length ::
- * If the `length' parameter is NULL, then try to load the whole table.
- * Return an error code if it fails.
- *
- * Else, if `*length' is~0, exit immediately while returning the
- * table's (or file) full size in it.
- *
- * Else the number of bytes to read from the table or file, from the
- * starting offset.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * If you need to determine the table's length you should first call this
- * function with `*length' set to~0, as in the following example:
- *
- * {
- * FT_ULong length = 0;
- *
- *
- * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length );
- * if ( error ) { ... table does not exist ... }
- *
- * buffer = malloc( length );
- * if ( buffer == NULL ) { ... not enough memory ... }
- *
- * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length );
- * if ( error ) { ... could not load table ... }
- * }
- *
- * Note that structures like @TT_Header or @TT_OS2 can't be used with
- * this function; they are limited to @FT_Get_Sfnt_Table. Reason is that
- * those structures depend on the processor architecture, with varying
- * size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian).
- *
- */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Load_Sfnt_Table
+ *
+ * @description:
+ * Load any SFNT font table into client memory.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face.
+ *
+ * tag ::
+ * The four-byte tag of the table to load. Use value~0 if you want
+ * to access the whole font file. Otherwise, you can use one of the
+ * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new
+ * one with @FT_MAKE_TAG.
+ *
+ * offset ::
+ * The starting offset in the table (or file if tag~==~0).
+ *
+ * @output:
+ * buffer ::
+ * The target buffer address. The client must ensure that the memory
+ * array is big enough to hold the data.
+ *
+ * @inout:
+ * length ::
+ * If the `length' parameter is NULL, try to load the whole table.
+ * Return an error code if it fails.
+ *
+ * Else, if `*length' is~0, exit immediately while returning the
+ * table's (or file) full size in it.
+ *
+ * Else the number of bytes to read from the table or file, from the
+ * starting offset.
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * If you need to determine the table's length you should first call this
+ * function with `*length' set to~0, as in the following example:
+ *
+ * {
+ * FT_ULong length = 0;
+ *
+ *
+ * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length );
+ * if ( error ) { ... table does not exist ... }
+ *
+ * buffer = malloc( length );
+ * if ( buffer == NULL ) { ... not enough memory ... }
+ *
+ * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length );
+ * if ( error ) { ... could not load table ... }
+ * }
+ *
+ * Note that structures like @TT_Header or @TT_OS2 can't be used with
+ * this function; they are limited to @FT_Get_Sfnt_Table. Reason is that
+ * those structures depend on the processor architecture, with varying
+ * size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian).
+ *
+ */
FT_EXPORT( FT_Error )
FT_Load_Sfnt_Table( FT_Face face,
FT_ULong tag,
@@ -733,41 +750,41 @@
FT_ULong* length );
- /**************************************************************************
- *
- * @function:
- * FT_Sfnt_Table_Info
- *
- * @description:
- * Return information on an SFNT table.
- *
- * @input:
- * face ::
- * A handle to the source face.
- *
- * table_index ::
- * The index of an SFNT table. The function returns
- * FT_Err_Table_Missing for an invalid value.
- *
- * @inout:
- * tag ::
- * The name tag of the SFNT table. If the value is NULL, `table_index'
- * is ignored, and `length' returns the number of SFNT tables in the
- * font.
- *
- * @output:
- * length ::
- * The length of the SFNT table (or the number of SFNT tables, depending
- * on `tag').
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * While parsing fonts, FreeType handles SFNT tables with length zero as
- * missing.
- *
- */
+ /**************************************************************************
+ *
+ * @function:
+ * FT_Sfnt_Table_Info
+ *
+ * @description:
+ * Return information on an SFNT table.
+ *
+ * @input:
+ * face ::
+ * A handle to the source face.
+ *
+ * table_index ::
+ * The index of an SFNT table. The function returns
+ * FT_Err_Table_Missing for an invalid value.
+ *
+ * @inout:
+ * tag ::
+ * The name tag of the SFNT table. If the value is NULL, `table_index'
+ * is ignored, and `length' returns the number of SFNT tables in the
+ * font.
+ *
+ * @output:
+ * length ::
+ * The length of the SFNT table (or the number of SFNT tables, depending
+ * on `tag').
+ *
+ * @return:
+ * FreeType error code. 0~means success.
+ *
+ * @note:
+ * While parsing fonts, FreeType handles SFNT tables with length zero as
+ * missing.
+ *
+ */
FT_EXPORT( FT_Error )
FT_Sfnt_Table_Info( FT_Face face,
FT_UInt table_index,
@@ -781,16 +798,16 @@
/* FT_Get_CMap_Language_ID */
/* */
/* <Description> */
- /* Return TrueType/sfnt specific cmap language ID. Definitions of */
- /* language ID values are in `ttnameid.h'. */
+ /* Return cmap language ID as specified in the OpenType standard. */
+ /* Definitions of language ID values are in file @FT_TRUETYPE_IDS_H. */
/* */
/* <Input> */
/* charmap :: */
/* The target charmap. */
/* */
/* <Return> */
- /* The language ID of `charmap'. If `charmap' doesn't belong to a */
- /* TrueType/sfnt face, just return~0 as the default value. */
+ /* The language ID of `charmap'. If `charmap' doesn't belong to an */
+ /* SFNT face, just return~0 as the default value. */
/* */
/* For a format~14 cmap (to access Unicode IVS), the return value is */
/* 0xFFFFFFFF. */
@@ -805,15 +822,15 @@
/* FT_Get_CMap_Format */
/* */
/* <Description> */
- /* Return TrueType/sfnt specific cmap format. */
+ /* Return the format of an SFNT `cmap' table. */
/* */
/* <Input> */
/* charmap :: */
/* The target charmap. */
/* */
/* <Return> */
- /* The format of `charmap'. If `charmap' doesn't belong to a */
- /* TrueType/sfnt face, return -1. */
+ /* The format of `charmap'. If `charmap' doesn't belong to an SFNT */
+ /* face, return -1. */
/* */
FT_EXPORT( FT_Long )
FT_Get_CMap_Format( FT_CharMap charmap );
@@ -823,7 +840,7 @@
FT_END_HEADER
-#endif /* __TTTABLES_H__ */
+#endif /* TTTABLES_H_ */
/* END */
diff --git a/include/tttags.h b/include/freetype/tttags.h
similarity index 89%
rename from include/tttags.h
rename to include/freetype/tttags.h
index 3836c7b..e5cee68 100644
--- a/include/tttags.h
+++ b/include/freetype/tttags.h
@@ -4,7 +4,7 @@
/* */
/* Tags for TrueType and OpenType tables (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTAGS_H__
-#define __TTAGS_H__
+#ifndef TTAGS_H_
+#define TTAGS_H_
#include <ft2build.h>
@@ -43,6 +43,7 @@
#define TTAG_CBDT FT_MAKE_TAG( 'C', 'B', 'D', 'T' )
#define TTAG_CBLC FT_MAKE_TAG( 'C', 'B', 'L', 'C' )
#define TTAG_CFF FT_MAKE_TAG( 'C', 'F', 'F', ' ' )
+#define TTAG_CFF2 FT_MAKE_TAG( 'C', 'F', 'F', '2' )
#define TTAG_CID FT_MAKE_TAG( 'C', 'I', 'D', ' ' )
#define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' )
#define TTAG_cvar FT_MAKE_TAG( 'c', 'v', 'a', 'r' )
@@ -61,6 +62,7 @@
#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' )
#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
#define TTAG_gvar FT_MAKE_TAG( 'g', 'v', 'a', 'r' )
+#define TTAG_HVAR FT_MAKE_TAG( 'H', 'V', 'A', 'R' )
#define TTAG_hdmx FT_MAKE_TAG( 'h', 'd', 'm', 'x' )
#define TTAG_head FT_MAKE_TAG( 'h', 'e', 'a', 'd' )
#define TTAG_hhea FT_MAKE_TAG( 'h', 'h', 'e', 'a' )
@@ -79,6 +81,7 @@
#define TTAG_MMSD FT_MAKE_TAG( 'M', 'M', 'S', 'D' )
#define TTAG_mort FT_MAKE_TAG( 'm', 'o', 'r', 't' )
#define TTAG_morx FT_MAKE_TAG( 'm', 'o', 'r', 'x' )
+#define TTAG_MVAR FT_MAKE_TAG( 'M', 'V', 'A', 'R' )
#define TTAG_name FT_MAKE_TAG( 'n', 'a', 'm', 'e' )
#define TTAG_opbd FT_MAKE_TAG( 'o', 'p', 'b', 'd' )
#define TTAG_OS2 FT_MAKE_TAG( 'O', 'S', '/', '2' )
@@ -100,12 +103,19 @@
#define TTAG_VDMX FT_MAKE_TAG( 'V', 'D', 'M', 'X' )
#define TTAG_vhea FT_MAKE_TAG( 'v', 'h', 'e', 'a' )
#define TTAG_vmtx FT_MAKE_TAG( 'v', 'm', 't', 'x' )
+#define TTAG_VVAR FT_MAKE_TAG( 'V', 'V', 'A', 'R' )
#define TTAG_wOFF FT_MAKE_TAG( 'w', 'O', 'F', 'F' )
+/* used by "Keyboard.dfont" on legacy Mac OS X */
+#define TTAG_0xA5kbd FT_MAKE_TAG( 0xA5, 'k', 'b', 'd' )
+
+/* used by "LastResort.dfont" on legacy Mac OS X */
+#define TTAG_0xA5lst FT_MAKE_TAG( 0xA5, 'l', 's', 't' )
+
FT_END_HEADER
-#endif /* __TTAGS_H__ */
+#endif /* TTAGS_H_ */
/* END */
diff --git a/include/ft2build.h b/include/ft2build.h
index 09c19d4..e7ce99b 100644
--- a/include/ft2build.h
+++ b/include/ft2build.h
@@ -4,7 +4,7 @@
/* */
/* FreeType 2 build and setup macros. */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -31,12 +31,12 @@
/*************************************************************************/
-#ifndef __FT2BUILD_H__
-#define __FT2BUILD_H__
+#ifndef FT2BUILD_H_
+#define FT2BUILD_H_
-#include <config/ftheader.h>
+#include <freetype/config/ftheader.h>
-#endif /* __FT2BUILD_H__ */
+#endif /* FT2BUILD_H_ */
/* END */
diff --git a/include/ftautoh.h b/include/ftautoh.h
deleted file mode 100644
index cf7b76f..0000000
--- a/include/ftautoh.h
+++ /dev/null
@@ -1,450 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftautoh.h */
-/* */
-/* FreeType API for controlling the auto-hinter (specification only). */
-/* */
-/* Copyright 2012-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __FTAUTOH_H__
-#define __FTAUTOH_H__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /**************************************************************************
- *
- * @section:
- * auto_hinter
- *
- * @title:
- * The auto-hinter
- *
- * @abstract:
- * Controlling the auto-hinting module.
- *
- * @description:
- * While FreeType's auto-hinter doesn't expose API functions by itself,
- * it is possible to control its behaviour with @FT_Property_Set and
- * @FT_Property_Get. The following lists the available properties
- * together with the necessary macros and structures.
- *
- * Note that the auto-hinter's module name is `autofitter' for
- * historical reasons.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * glyph-to-script-map
- *
- * @description:
- * *Experimental* *only*
- *
- * The auto-hinter provides various script modules to hint glyphs.
- * Examples of supported scripts are Latin or CJK. Before a glyph is
- * auto-hinted, the Unicode character map of the font gets examined, and
- * the script is then determined based on Unicode character ranges, see
- * below.
- *
- * OpenType fonts, however, often provide much more glyphs than
- * character codes (small caps, superscripts, ligatures, swashes, etc.),
- * to be controlled by so-called `features'. Handling OpenType features
- * can be quite complicated and thus needs a separate library on top of
- * FreeType.
- *
- * The mapping between glyph indices and scripts (in the auto-hinter
- * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an
- * array with `num_glyphs' elements, as found in the font's @FT_Face
- * structure. The `glyph-to-script-map' property returns a pointer to
- * this array, which can be modified as needed. Note that the
- * modification should happen before the first glyph gets processed by
- * the auto-hinter so that the global analysis of the font shapes
- * actually uses the modified mapping.
- *
- * The following example code demonstrates how to access it (omitting
- * the error handling).
- *
- * {
- * FT_Library library;
- * FT_Face face;
- * FT_Prop_GlyphToScriptMap prop;
- *
- *
- * FT_Init_FreeType( &library );
- * FT_New_Face( library, "foo.ttf", 0, &face );
- *
- * prop.face = face;
- *
- * FT_Property_Get( library, "autofitter",
- * "glyph-to-script-map", &prop );
- *
- * // adjust `prop.map' as needed right here
- *
- * FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
- * }
- *
- */
-
-
- /**************************************************************************
- *
- * @enum:
- * FT_AUTOHINTER_SCRIPT_XXX
- *
- * @description:
- * *Experimental* *only*
- *
- * A list of constants used for the @glyph-to-script-map property to
- * specify the script submodule the auto-hinter should use for hinting a
- * particular glyph.
- *
- * @values:
- * FT_AUTOHINTER_SCRIPT_NONE ::
- * Don't auto-hint this glyph.
- *
- * FT_AUTOHINTER_SCRIPT_LATIN ::
- * Apply the latin auto-hinter. For the auto-hinter, `latin' is a
- * very broad term, including Cyrillic and Greek also since characters
- * from those scripts share the same design constraints.
- *
- * By default, characters from the following Unicode ranges are
- * assigned to this submodule.
- *
- * {
- * U+0020 - U+007F // Basic Latin (no control characters)
- * U+00A0 - U+00FF // Latin-1 Supplement (no control characters)
- * U+0100 - U+017F // Latin Extended-A
- * U+0180 - U+024F // Latin Extended-B
- * U+0250 - U+02AF // IPA Extensions
- * U+02B0 - U+02FF // Spacing Modifier Letters
- * U+0300 - U+036F // Combining Diacritical Marks
- * U+0370 - U+03FF // Greek and Coptic
- * U+0400 - U+04FF // Cyrillic
- * U+0500 - U+052F // Cyrillic Supplement
- * U+1D00 - U+1D7F // Phonetic Extensions
- * U+1D80 - U+1DBF // Phonetic Extensions Supplement
- * U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement
- * U+1E00 - U+1EFF // Latin Extended Additional
- * U+1F00 - U+1FFF // Greek Extended
- * U+2000 - U+206F // General Punctuation
- * U+2070 - U+209F // Superscripts and Subscripts
- * U+20A0 - U+20CF // Currency Symbols
- * U+2150 - U+218F // Number Forms
- * U+2460 - U+24FF // Enclosed Alphanumerics
- * U+2C60 - U+2C7F // Latin Extended-C
- * U+2DE0 - U+2DFF // Cyrillic Extended-A
- * U+2E00 - U+2E7F // Supplemental Punctuation
- * U+A640 - U+A69F // Cyrillic Extended-B
- * U+A720 - U+A7FF // Latin Extended-D
- * U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures)
- * U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
- * U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
- * }
- *
- * FT_AUTOHINTER_SCRIPT_CJK ::
- * Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
- * Vietnamese, and some other scripts.
- *
- * By default, characters from the following Unicode ranges are
- * assigned to this submodule.
- *
- * {
- * U+1100 - U+11FF // Hangul Jamo
- * U+2E80 - U+2EFF // CJK Radicals Supplement
- * U+2F00 - U+2FDF // Kangxi Radicals
- * U+2FF0 - U+2FFF // Ideographic Description Characters
- * U+3000 - U+303F // CJK Symbols and Punctuation
- * U+3040 - U+309F // Hiragana
- * U+30A0 - U+30FF // Katakana
- * U+3100 - U+312F // Bopomofo
- * U+3130 - U+318F // Hangul Compatibility Jamo
- * U+3190 - U+319F // Kanbun
- * U+31A0 - U+31BF // Bopomofo Extended
- * U+31C0 - U+31EF // CJK Strokes
- * U+31F0 - U+31FF // Katakana Phonetic Extensions
- * U+3200 - U+32FF // Enclosed CJK Letters and Months
- * U+3300 - U+33FF // CJK Compatibility
- * U+3400 - U+4DBF // CJK Unified Ideographs Extension A
- * U+4DC0 - U+4DFF // Yijing Hexagram Symbols
- * U+4E00 - U+9FFF // CJK Unified Ideographs
- * U+A960 - U+A97F // Hangul Jamo Extended-A
- * U+AC00 - U+D7AF // Hangul Syllables
- * U+D7B0 - U+D7FF // Hangul Jamo Extended-B
- * U+F900 - U+FAFF // CJK Compatibility Ideographs
- * U+FE10 - U+FE1F // Vertical forms
- * U+FE30 - U+FE4F // CJK Compatibility Forms
- * U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms
- * U+1B000 - U+1B0FF // Kana Supplement
- * U+1D300 - U+1D35F // Tai Xuan Hing Symbols
- * U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
- * U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
- * U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
- * U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
- * U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
- * }
- *
- * FT_AUTOHINTER_SCRIPT_INDIC ::
- * Apply the indic auto-hinter, covering all major scripts from the
- * Indian sub-continent and some other related scripts like Thai, Lao,
- * or Tibetan.
- *
- * By default, characters from the following Unicode ranges are
- * assigned to this submodule.
- *
- * {
- * U+0900 - U+0DFF // Indic Range
- * U+0F00 - U+0FFF // Tibetan
- * U+1900 - U+194F // Limbu
- * U+1B80 - U+1BBF // Sundanese
- * U+1C80 - U+1CDF // Meetei Mayak
- * U+A800 - U+A82F // Syloti Nagri
- * U+11800 - U+118DF // Sharada
- * }
- *
- * Note that currently Indic support is rudimentary only, missing blue
- * zone support.
- *
- */
-#define FT_AUTOHINTER_SCRIPT_NONE 0
-#define FT_AUTOHINTER_SCRIPT_LATIN 1
-#define FT_AUTOHINTER_SCRIPT_CJK 2
-#define FT_AUTOHINTER_SCRIPT_INDIC 3
-
-
- /**************************************************************************
- *
- * @struct:
- * FT_Prop_GlyphToScriptMap
- *
- * @description:
- * *Experimental* *only*
- *
- * The data exchange structure for the @glyph-to-script-map property.
- *
- */
- typedef struct FT_Prop_GlyphToScriptMap_
- {
- FT_Face face;
- FT_Byte* map;
-
- } FT_Prop_GlyphToScriptMap;
-
-
- /**************************************************************************
- *
- * @property:
- * fallback-script
- *
- * @description:
- * *Experimental* *only*
- *
- * If no auto-hinter script module can be assigned to a glyph, a
- * fallback script gets assigned to it (see also the
- * @glyph-to-script-map property). By default, this is
- * @FT_AUTOHINTER_SCRIPT_CJK. Using the `fallback-script' property,
- * this fallback value can be changed.
- *
- * {
- * FT_Library library;
- * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "autofitter",
- * "fallback-script", &fallback_script );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * It's important to use the right timing for changing this value: The
- * creation of the glyph-to-script map that eventually uses the
- * fallback script value gets triggered either by setting or reading a
- * face-specific property like @glyph-to-script-map, or by auto-hinting
- * any glyph from that face. In particular, if you have already created
- * an @FT_Face structure but not loaded any glyph (using the
- * auto-hinter), a change of the fallback script will affect this face.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * default-script
- *
- * @description:
- * *Experimental* *only*
- *
- * If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make
- * the HarfBuzz library access OpenType features for getting better
- * glyph coverages, this property sets the (auto-fitter) script to be
- * used for the default (OpenType) script data of a font's GSUB table.
- * Features for the default script are intended for all scripts not
- * explicitly handled in GSUB; an example is a `dlig' feature,
- * containing the combination of the characters `T', `E', and `L' to
- * form a `TEL' ligature.
- *
- * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the
- * `default-script' property, this default value can be changed.
- *
- * {
- * FT_Library library;
- * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "autofitter",
- * "default-script", &default_script );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * It's important to use the right timing for changing this value: The
- * creation of the glyph-to-script map that eventually uses the
- * default script value gets triggered either by setting or reading a
- * face-specific property like @glyph-to-script-map, or by auto-hinting
- * any glyph from that face. In particular, if you have already created
- * an @FT_Face structure but not loaded any glyph (using the
- * auto-hinter), a change of the default script will affect this face.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * increase-x-height
- *
- * @description:
- * For ppem values in the range 6~<= ppem <= `increase-x-height', round
- * up the font's x~height much more often than normally. If the value
- * is set to~0, which is the default, this feature is switched off. Use
- * this property to improve the legibility of small font sizes if
- * necessary.
- *
- * {
- * FT_Library library;
- * FT_Face face;
- * FT_Prop_IncreaseXHeight prop;
- *
- *
- * FT_Init_FreeType( &library );
- * FT_New_Face( library, "foo.ttf", 0, &face );
- * FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
- *
- * prop.face = face;
- * prop.limit = 14;
- *
- * FT_Property_Set( library, "autofitter",
- * "increase-x-height", &prop );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * Set this value right after calling @FT_Set_Char_Size, but before
- * loading any glyph (using the auto-hinter).
- *
- */
-
-
- /**************************************************************************
- *
- * @struct:
- * FT_Prop_IncreaseXHeight
- *
- * @description:
- * The data exchange structure for the @increase-x-height property.
- *
- */
- typedef struct FT_Prop_IncreaseXHeight_
- {
- FT_Face face;
- FT_UInt limit;
-
- } FT_Prop_IncreaseXHeight;
-
-
- /**************************************************************************
- *
- * @property:
- * warping
- *
- * @description:
- * *Experimental* *only*
- *
- * If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to
- * activate the warp hinting code in the auto-hinter, this property
- * switches warping on and off.
- *
- * Warping only works in `light' auto-hinting mode. The idea of the
- * code is to slightly scale and shift a glyph along the non-hinted
- * dimension (which is usually the horizontal axis) so that as much of
- * its segments are aligned (more or less) to the grid. To find out a
- * glyph's optimal scaling and shifting value, various parameter
- * combinations are tried and scored.
- *
- * By default, warping is off. The example below shows how to switch on
- * warping (omitting the error handling).
- *
- * {
- * FT_Library library;
- * FT_Bool warping = 1;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "autofitter",
- * "warping", &warping );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- * The warping code can also change advance widths. Have a look at the
- * `lsb_delta' and `rsb_delta' fields in the @FT_GlyphSlotRec structure
- * for details on improving inter-glyph distances while rendering.
- *
- * Since warping is a global property of the auto-hinter it is best to
- * change its value before rendering any face. Otherwise, you should
- * reload all faces that get auto-hinted in `light' hinting mode.
- *
- */
-
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __FTAUTOH_H__ */
-
-
-/* END */
diff --git a/include/ftcffdrv.h b/include/ftcffdrv.h
deleted file mode 100644
index 6c8e416..0000000
--- a/include/ftcffdrv.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftcffdrv.h */
-/* */
-/* FreeType API for controlling the CFF driver (specification only). */
-/* */
-/* Copyright 2013-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __FTCFFDRV_H__
-#define __FTCFFDRV_H__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /**************************************************************************
- *
- * @section:
- * cff_driver
- *
- * @title:
- * The CFF driver
- *
- * @abstract:
- * Controlling the CFF driver module.
- *
- * @description:
- * While FreeType's CFF driver doesn't expose API functions by itself,
- * it is possible to control its behaviour with @FT_Property_Set and
- * @FT_Property_Get. The list below gives the available properties
- * together with the necessary macros and structures.
- *
- * The CFF driver's module name is `cff'.
- *
- * *Hinting* *and* *antialiasing* *principles* *of* *the* *new* *engine*
- *
- * The rasterizer is positioning horizontal features (e.g., ascender
- * height & x-height, or crossbars) on the pixel grid and minimizing the
- * amount of antialiasing applied to them, while placing vertical
- * features (vertical stems) on the pixel grid without hinting, thus
- * representing the stem position and weight accurately. Sometimes the
- * vertical stems may be only partially black. In this context,
- * `antialiasing' means that stems are not positioned exactly on pixel
- * borders, causing a fuzzy appearance.
- *
- * There are two principles behind this approach.
- *
- * 1) No hinting in the horizontal direction: Unlike `superhinted'
- * TrueType, which changes glyph widths to accommodate regular
- * inter-glyph spacing, Adobe's approach is `faithful to the design' in
- * representing both the glyph width and the inter-glyph spacing
- * designed for the font. This makes the screen display as close as it
- * can be to the result one would get with infinite resolution, while
- * preserving what is considered the key characteristics of each glyph.
- * Note that the distances between unhinted and grid-fitted positions at
- * small sizes are comparable to kerning values and thus would be
- * noticeable (and distracting) while reading if hinting were applied.
- *
- * One of the reasons to not hint horizontally is antialiasing for LCD
- * screens: The pixel geometry of modern displays supplies three
- * vertical sub-pixels as the eye moves horizontally across each visible
- * pixel. On devices where we can be certain this characteristic is
- * present a rasterizer can take advantage of the sub-pixels to add
- * increments of weight. In Western writing systems this turns out to
- * be the more critical direction anyway; the weights and spacing of
- * vertical stems (see above) are central to Armenian, Cyrillic, Greek,
- * and Latin type designs. Even when the rasterizer uses greyscale
- * antialiasing instead of color (a necessary compromise when one
- * doesn't know the screen characteristics), the unhinted vertical
- * features preserve the design's weight and spacing much better than
- * aliased type would.
- *
- * 2) Aligment in the vertical direction: Weights and spacing along the
- * y~axis are less critical; what is much more important is the visual
- * alignment of related features (like cap-height and x-height). The
- * sense of alignment for these is enhanced by the sharpness of grid-fit
- * edges, while the cruder vertical resolution (full pixels instead of
- * 1/3 pixels) is less of a problem.
- *
- * On the technical side, horizontal alignment zones for ascender,
- * x-height, and other important height values (traditionally called
- * `blue zones') as defined in the font are positioned independently,
- * each being rounded to the nearest pixel edge, taking care of
- * overshoot suppression at small sizes, stem darkening, and scaling.
- *
- * Hstems (this is, hint values defined in the font to help align
- * horizontal features) that fall within a blue zone are said to be
- * `captured' and are aligned to that zone. Uncaptured stems are moved
- * in one of four ways, top edge up or down, bottom edge up or down.
- * Unless there are conflicting hstems, the smallest movement is taken
- * to minimize distortion.
- *
- * @order:
- * hinting-engine
- * no-stem-darkening
- * darkening-parameters
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * hinting-engine
- *
- * @description:
- * Thanks to Adobe, which contributed a new hinting (and parsing)
- * engine, an application can select between `freetype' and `adobe' if
- * compiled with CFF_CONFIG_OPTION_OLD_ENGINE. If this configuration
- * macro isn't defined, `hinting-engine' does nothing.
- *
- * The default engine is `freetype' if CFF_CONFIG_OPTION_OLD_ENGINE is
- * defined, and `adobe' otherwise.
- *
- * The following example code demonstrates how to select Adobe's hinting
- * engine (omitting the error handling).
- *
- * {
- * FT_Library library;
- * FT_UInt hinting_engine = FT_CFF_HINTING_ADOBE;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "cff",
- * "hinting-engine", &hinting_engine );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- */
-
-
- /**************************************************************************
- *
- * @enum:
- * FT_CFF_HINTING_XXX
- *
- * @description:
- * A list of constants used for the @hinting-engine property to select
- * the hinting engine for CFF fonts.
- *
- * @values:
- * FT_CFF_HINTING_FREETYPE ::
- * Use the old FreeType hinting engine.
- *
- * FT_CFF_HINTING_ADOBE ::
- * Use the hinting engine contributed by Adobe.
- *
- */
-#define FT_CFF_HINTING_FREETYPE 0
-#define FT_CFF_HINTING_ADOBE 1
-
-
- /**************************************************************************
- *
- * @property:
- * no-stem-darkening
- *
- * @description:
- * By default, the Adobe CFF engine darkens stems at smaller sizes,
- * regardless of hinting, to enhance contrast. This feature requires
- * a rendering system with proper gamma correction. Setting this
- * property, stem darkening gets switched off.
- *
- * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set.
- *
- * {
- * FT_Library library;
- * FT_Bool no_stem_darkening = TRUE;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "cff",
- * "no-stem-darkening", &no_stem_darkening );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * darkening-parameters
- *
- * @description:
- * By default, the Adobe CFF engine darkens stems as follows (if the
- * `no-stem-darkening' property isn't set):
- *
- * {
- * stem width <= 0.5px: darkening amount = 0.4px
- * stem width = 1px: darkening amount = 0.275px
- * stem width = 1.667px: darkening amount = 0.275px
- * stem width >= 2.333px: darkening amount = 0px
- * }
- *
- * and piecewise linear in-between. At configuration time, these four
- * control points can be set with the macro
- * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS'. At runtime, the control
- * points can be changed using the `darkening-parameters' property, as
- * the following example demonstrates.
- *
- * {
- * FT_Library library;
- * FT_Int darken_params[8] = { 500, 300, // x1, y1
- * 1000, 200, // x2, y2
- * 1500, 100, // x3, y3
- * 2000, 0 }; // x4, y4
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "cff",
- * "darkening-parameters", darken_params );
- * }
- *
- * The x~values give the stem width, and the y~values the darkening
- * amount. The unit is 1000th of pixels. All coordinate values must be
- * positive; the x~values must be monotonically increasing; the
- * y~values must be monotonically decreasing and smaller than or
- * equal to 500 (corresponding to half a pixel); the slope of each
- * linear piece must be shallower than -1 (e.g., -.4).
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- */
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __FTCFFDRV_H__ */
-
-
-/* END */
diff --git a/include/fterrors.h b/include/fterrors.h
deleted file mode 100644
index 376bee6..0000000
--- a/include/fterrors.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/***************************************************************************/
-/* */
-/* fterrors.h */
-/* */
-/* FreeType error code handling (specification). */
-/* */
-/* Copyright 1996-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This special header file is used to define the handling of FT2 */
- /* enumeration constants. It can also be used to generate error message */
- /* strings with a small macro trick explained below. */
- /* */
- /* I - Error Formats */
- /* ----------------- */
- /* */
- /* The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be */
- /* defined in ftoption.h in order to make the higher byte indicate */
- /* the module where the error has happened (this is not compatible */
- /* with standard builds of FreeType 2). See the file `ftmoderr.h' for */
- /* more details. */
- /* */
- /* */
- /* II - Error Message strings */
- /* -------------------------- */
- /* */
- /* The error definitions below are made through special macros that */
- /* allow client applications to build a table of error message strings */
- /* if they need it. The strings are not included in a normal build of */
- /* FreeType 2 to save space (most client applications do not use */
- /* them). */
- /* */
- /* To do so, you have to define the following macros before including */
- /* this file: */
- /* */
- /* FT_ERROR_START_LIST :: */
- /* This macro is called before anything else to define the start of */
- /* the error list. It is followed by several FT_ERROR_DEF calls */
- /* (see below). */
- /* */
- /* FT_ERROR_DEF( e, v, s ) :: */
- /* This macro is called to define one single error. */
- /* `e' is the error code identifier (e.g. FT_Err_Invalid_Argument). */
- /* `v' is the error numerical value. */
- /* `s' is the corresponding error string. */
- /* */
- /* FT_ERROR_END_LIST :: */
- /* This macro ends the list. */
- /* */
- /* Additionally, you have to undefine __FTERRORS_H__ before #including */
- /* this file. */
- /* */
- /* Here is a simple example: */
- /* */
- /* { */
- /* #undef __FTERRORS_H__ */
- /* #define FT_ERRORDEF( e, v, s ) { e, s }, */
- /* #define FT_ERROR_START_LIST { */
- /* #define FT_ERROR_END_LIST { 0, 0 } }; */
- /* */
- /* const struct */
- /* { */
- /* int err_code; */
- /* const char* err_msg; */
- /* } ft_errors[] = */
- /* */
- /* #include FT_ERRORS_H */
- /* } */
- /* */
- /*************************************************************************/
-
-
-#ifndef __FTERRORS_H__
-#define __FTERRORS_H__
-
-
- /* include module base error codes */
-#include FT_MODULE_ERRORS_H
-
-
- /*******************************************************************/
- /*******************************************************************/
- /***** *****/
- /***** SETUP MACROS *****/
- /***** *****/
- /*******************************************************************/
- /*******************************************************************/
-
-
-#undef FT_NEED_EXTERN_C
-
-
- /* FT_ERR_PREFIX is used as a prefix for error identifiers. */
- /* By default, we use `FT_Err_'. */
- /* */
-#ifndef FT_ERR_PREFIX
-#define FT_ERR_PREFIX FT_Err_
-#endif
-
-
- /* FT_ERR_BASE is used as the base for module-specific errors. */
- /* */
-#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
-
-#ifndef FT_ERR_BASE
-#define FT_ERR_BASE FT_Mod_Err_Base
-#endif
-
-#else
-
-#undef FT_ERR_BASE
-#define FT_ERR_BASE 0
-
-#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */
-
-
- /* If FT_ERRORDEF is not defined, we need to define a simple */
- /* enumeration type. */
- /* */
-#ifndef FT_ERRORDEF
-
-#define FT_ERRORDEF( e, v, s ) e = v,
-#define FT_ERROR_START_LIST enum {
-#define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) };
-
-#ifdef __cplusplus
-#define FT_NEED_EXTERN_C
- extern "C" {
-#endif
-
-#endif /* !FT_ERRORDEF */
-
-
- /* this macro is used to define an error */
-#define FT_ERRORDEF_( e, v, s ) \
- FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s )
-
- /* this is only used for <module>_Err_Ok, which must be 0! */
-#define FT_NOERRORDEF_( e, v, s ) \
- FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s )
-
-
-#ifdef FT_ERROR_START_LIST
- FT_ERROR_START_LIST
-#endif
-
-
- /* now include the error codes */
-#include FT_ERROR_DEFINITIONS_H
-
-
-#ifdef FT_ERROR_END_LIST
- FT_ERROR_END_LIST
-#endif
-
-
- /*******************************************************************/
- /*******************************************************************/
- /***** *****/
- /***** SIMPLE CLEANUP *****/
- /***** *****/
- /*******************************************************************/
- /*******************************************************************/
-
-#ifdef FT_NEED_EXTERN_C
- }
-#endif
-
-#undef FT_ERROR_START_LIST
-#undef FT_ERROR_END_LIST
-
-#undef FT_ERRORDEF
-#undef FT_ERRORDEF_
-#undef FT_NOERRORDEF_
-
-#undef FT_NEED_EXTERN_C
-#undef FT_ERR_BASE
-
- /* FT_ERR_PREFIX is needed internally */
-#ifndef FT2_BUILD_LIBRARY
-#undef FT_ERR_PREFIX
-#endif
-
-#endif /* __FTERRORS_H__ */
-
-
-/* END */
diff --git a/include/ftlcdfil.h b/include/ftlcdfil.h
deleted file mode 100644
index 4cd999a..0000000
--- a/include/ftlcdfil.h
+++ /dev/null
@@ -1,251 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftlcdfil.h */
-/* */
-/* FreeType API for color filtering of subpixel bitmap glyphs */
-/* (specification). */
-/* */
-/* Copyright 2006-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __FT_LCD_FILTER_H__
-#define __FT_LCD_FILTER_H__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
- /***************************************************************************
- *
- * @section:
- * lcd_filtering
- *
- * @title:
- * LCD Filtering
- *
- * @abstract:
- * Reduce color fringes of LCD-optimized bitmaps.
- *
- * @description:
- * The @FT_Library_SetLcdFilter API can be used to specify a low-pass
- * filter, which is then applied to LCD-optimized bitmaps generated
- * through @FT_Render_Glyph. This is useful to reduce color fringes
- * that would occur with unfiltered rendering.
- *
- * Note that no filter is active by default, and that this function is
- * *not* implemented in default builds of the library. You need to
- * #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your `ftoption.h' file
- * in order to activate it.
- *
- * FreeType generates alpha coverage maps, which are linear by nature.
- * For instance, the value 0x80 in bitmap representation means that
- * (within numerical precision) 0x80/0xFF fraction of that pixel is
- * covered by the glyph's outline. The blending function for placing
- * text over a background is
- *
- * {
- * dst = alpha * src + (1 - alpha) * dst ,
- * }
- *
- * which is known as OVER. However, when calculating the output of the
- * OVER operator, the source colors should first be transformed to a
- * linear color space, then alpha blended in that space, and transformed
- * back to the output color space.
- *
- * When linear light blending is used, the default FIR5 filtering
- * weights (as given by FT_LCD_FILTER_DEFAULT) are no longer optimal, as
- * they have been designed for black on white rendering while lacking
- * gamma correction. To preserve color neutrality, weights for a FIR5
- * filter should be chosen according to two free parameters `a' and `c',
- * and the FIR weights should be
- *
- * {
- * [a - c, a + c, 2 * a, a + c, a - c] .
- * }
- *
- * This formula generates equal weights for all the color primaries
- * across the filter kernel, which makes it colorless. One suggested
- * set of weights is
- *
- * {
- * [0x10, 0x50, 0x60, 0x50, 0x10] ,
- * }
- *
- * where `a' has value 0x30 and `b' value 0x20. The weights in filter
- * may have a sum larger than 0x100, which increases coloration slightly
- * but also improves contrast.
- */
-
-
- /****************************************************************************
- *
- * @enum:
- * FT_LcdFilter
- *
- * @description:
- * A list of values to identify various types of LCD filters.
- *
- * @values:
- * FT_LCD_FILTER_NONE ::
- * Do not perform filtering. When used with subpixel rendering, this
- * results in sometimes severe color fringes.
- *
- * FT_LCD_FILTER_DEFAULT ::
- * The default filter reduces color fringes considerably, at the cost
- * of a slight blurriness in the output.
- *
- * FT_LCD_FILTER_LIGHT ::
- * The light filter is a variant that produces less blurriness at the
- * cost of slightly more color fringes than the default one. It might
- * be better, depending on taste, your monitor, or your personal vision.
- *
- * FT_LCD_FILTER_LEGACY ::
- * This filter corresponds to the original libXft color filter. It
- * provides high contrast output but can exhibit really bad color
- * fringes if glyphs are not extremely well hinted to the pixel grid.
- * In other words, it only works well if the TrueType bytecode
- * interpreter is enabled *and* high-quality hinted fonts are used.
- *
- * This filter is only provided for comparison purposes, and might be
- * disabled or stay unsupported in the future.
- *
- * @since:
- * 2.3.0
- */
- typedef enum FT_LcdFilter_
- {
- FT_LCD_FILTER_NONE = 0,
- FT_LCD_FILTER_DEFAULT = 1,
- FT_LCD_FILTER_LIGHT = 2,
- FT_LCD_FILTER_LEGACY = 16,
-
- FT_LCD_FILTER_MAX /* do not remove */
-
- } FT_LcdFilter;
-
-
- /**************************************************************************
- *
- * @func:
- * FT_Library_SetLcdFilter
- *
- * @description:
- * This function is used to apply color filtering to LCD decimated
- * bitmaps, like the ones used when calling @FT_Render_Glyph with
- * @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V.
- *
- * @input:
- * library ::
- * A handle to the target library instance.
- *
- * filter ::
- * The filter type.
- *
- * You can use @FT_LCD_FILTER_NONE here to disable this feature, or
- * @FT_LCD_FILTER_DEFAULT to use a default filter that should work
- * well on most LCD screens.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * This feature is always disabled by default. Clients must make an
- * explicit call to this function with a `filter' value other than
- * @FT_LCD_FILTER_NONE in order to enable it.
- *
- * Due to *PATENTS* covering subpixel rendering, this function doesn't
- * do anything except returning `FT_Err_Unimplemented_Feature' if the
- * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
- * defined in your build of the library, which should correspond to all
- * default builds of FreeType.
- *
- * The filter affects glyph bitmaps rendered through @FT_Render_Glyph,
- * @FT_Outline_Get_Bitmap, @FT_Load_Glyph, and @FT_Load_Char.
- *
- * It does _not_ affect the output of @FT_Outline_Render and
- * @FT_Outline_Get_Bitmap.
- *
- * If this feature is activated, the dimensions of LCD glyph bitmaps are
- * either larger or taller than the dimensions of the corresponding
- * outline with regards to the pixel grid. For example, for
- * @FT_RENDER_MODE_LCD, the filter adds up to 3~pixels to the left, and
- * up to 3~pixels to the right.
- *
- * The bitmap offset values are adjusted correctly, so clients shouldn't
- * need to modify their layout and glyph positioning code when enabling
- * the filter.
- *
- * @since:
- * 2.3.0
- */
- FT_EXPORT( FT_Error )
- FT_Library_SetLcdFilter( FT_Library library,
- FT_LcdFilter filter );
-
-
- /**************************************************************************
- *
- * @func:
- * FT_Library_SetLcdFilterWeights
- *
- * @description:
- * Use this function to override the filter weights selected by
- * @FT_Library_SetLcdFilter. By default, FreeType uses the quintuple
- * (0x00, 0x55, 0x56, 0x55, 0x00) for FT_LCD_FILTER_LIGHT, and (0x10,
- * 0x40, 0x70, 0x40, 0x10) for FT_LCD_FILTER_DEFAULT and
- * FT_LCD_FILTER_LEGACY.
- *
- * @input:
- * library ::
- * A handle to the target library instance.
- *
- * weights ::
- * A pointer to an array; the function copies the first five bytes and
- * uses them to specify the filter weights.
- *
- * @return:
- * FreeType error code. 0~means success.
- *
- * @note:
- * Due to *PATENTS* covering subpixel rendering, this function doesn't
- * do anything except returning `FT_Err_Unimplemented_Feature' if the
- * configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
- * defined in your build of the library, which should correspond to all
- * default builds of FreeType.
- *
- * This function must be called after @FT_Library_SetLcdFilter to have
- * any effect.
- *
- * @since:
- * 2.4.0
- */
- FT_EXPORT( FT_Error )
- FT_Library_SetLcdFilterWeights( FT_Library library,
- unsigned char *weights );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __FT_LCD_FILTER_H__ */
-
-
-/* END */
diff --git a/include/ftmm.h b/include/ftmm.h
deleted file mode 100644
index 6ef4798..0000000
--- a/include/ftmm.h
+++ /dev/null
@@ -1,379 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftmm.h */
-/* */
-/* FreeType Multiple Master font interface (specification). */
-/* */
-/* Copyright 1996-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __FTMM_H__
-#define __FTMM_H__
-
-
-#include <ft2build.h>
-#include FT_TYPE1_TABLES_H
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* multiple_masters */
- /* */
- /* <Title> */
- /* Multiple Masters */
- /* */
- /* <Abstract> */
- /* How to manage Multiple Masters fonts. */
- /* */
- /* <Description> */
- /* The following types and functions are used to manage Multiple */
- /* Master fonts, i.e., the selection of specific design instances by */
- /* setting design axis coordinates. */
- /* */
- /* George Williams has extended this interface to make it work with */
- /* both Type~1 Multiple Masters fonts and GX distortable (var) */
- /* fonts. Some of these routines only work with MM fonts, others */
- /* will work with both types. They are similar enough that a */
- /* consistent interface makes sense. */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_MM_Axis */
- /* */
- /* <Description> */
- /* A simple structure used to model a given axis in design space for */
- /* Multiple Masters fonts. */
- /* */
- /* This structure can't be used for GX var fonts. */
- /* */
- /* <Fields> */
- /* name :: The axis's name. */
- /* */
- /* minimum :: The axis's minimum design coordinate. */
- /* */
- /* maximum :: The axis's maximum design coordinate. */
- /* */
- typedef struct FT_MM_Axis_
- {
- FT_String* name;
- FT_Long minimum;
- FT_Long maximum;
-
- } FT_MM_Axis;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Multi_Master */
- /* */
- /* <Description> */
- /* A structure used to model the axes and space of a Multiple Masters */
- /* font. */
- /* */
- /* This structure can't be used for GX var fonts. */
- /* */
- /* <Fields> */
- /* num_axis :: Number of axes. Cannot exceed~4. */
- /* */
- /* num_designs :: Number of designs; should be normally 2^num_axis */
- /* even though the Type~1 specification strangely */
- /* allows for intermediate designs to be present. */
- /* This number cannot exceed~16. */
- /* */
- /* axis :: A table of axis descriptors. */
- /* */
- typedef struct FT_Multi_Master_
- {
- FT_UInt num_axis;
- FT_UInt num_designs;
- FT_MM_Axis axis[T1_MAX_MM_AXIS];
-
- } FT_Multi_Master;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Var_Axis */
- /* */
- /* <Description> */
- /* A simple structure used to model a given axis in design space for */
- /* Multiple Masters and GX var fonts. */
- /* */
- /* <Fields> */
- /* name :: The axis's name. */
- /* Not always meaningful for GX. */
- /* */
- /* minimum :: The axis's minimum design coordinate. */
- /* */
- /* def :: The axis's default design coordinate. */
- /* FreeType computes meaningful default values for MM; it */
- /* is then an integer value, not in 16.16 format. */
- /* */
- /* maximum :: The axis's maximum design coordinate. */
- /* */
- /* tag :: The axis's tag (the GX equivalent to `name'). */
- /* FreeType provides default values for MM if possible. */
- /* */
- /* strid :: The entry in `name' table (another GX version of */
- /* `name'). */
- /* Not meaningful for MM. */
- /* */
- typedef struct FT_Var_Axis_
- {
- FT_String* name;
-
- FT_Fixed minimum;
- FT_Fixed def;
- FT_Fixed maximum;
-
- FT_ULong tag;
- FT_UInt strid;
-
- } FT_Var_Axis;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_Var_Named_Style */
- /* */
- /* <Description> */
- /* A simple structure used to model a named style in a GX var font. */
- /* */
- /* This structure can't be used for MM fonts. */
- /* */
- /* <Fields> */
- /* coords :: The design coordinates for this style. */
- /* This is an array with one entry for each axis. */
- /* */
- /* strid :: The entry in `name' table identifying this style. */
- /* */
- typedef struct FT_Var_Named_Style_
- {
- FT_Fixed* coords;
- FT_UInt strid;
-
- } FT_Var_Named_Style;
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_MM_Var */
- /* */
- /* <Description> */
- /* A structure used to model the axes and space of a Multiple Masters */
- /* or GX var distortable font. */
- /* */
- /* Some fields are specific to one format and not to the other. */
- /* */
- /* <Fields> */
- /* num_axis :: The number of axes. The maximum value is~4 for */
- /* MM; no limit in GX. */
- /* */
- /* num_designs :: The number of designs; should be normally */
- /* 2^num_axis for MM fonts. Not meaningful for GX */
- /* (where every glyph could have a different */
- /* number of designs). */
- /* */
- /* num_namedstyles :: The number of named styles; only meaningful for */
- /* GX that allows certain design coordinates to */
- /* have a string ID (in the `name' table) */
- /* associated with them. The font can tell the */
- /* user that, for example, Weight=1.5 is `Bold'. */
- /* */
- /* axis :: An axis descriptor table. */
- /* GX fonts contain slightly more data than MM. */
- /* */
- /* namedstyle :: A named style table. */
- /* Only meaningful with GX. */
- /* */
- typedef struct FT_MM_Var_
- {
- FT_UInt num_axis;
- FT_UInt num_designs;
- FT_UInt num_namedstyles;
- FT_Var_Axis* axis;
- FT_Var_Named_Style* namedstyle;
-
- } FT_MM_Var;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Multi_Master */
- /* */
- /* <Description> */
- /* Retrieve the Multiple Master descriptor of a given font. */
- /* */
- /* This function can't be used with GX fonts. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* <Output> */
- /* amaster :: The Multiple Masters descriptor. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Multi_Master( FT_Face face,
- FT_Multi_Master *amaster );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_MM_Var */
- /* */
- /* <Description> */
- /* Retrieve the Multiple Master/GX var descriptor of a given font. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* <Output> */
- /* amaster :: The Multiple Masters/GX var descriptor. */
- /* Allocates a data structure, which the user must free. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_MM_Var( FT_Face face,
- FT_MM_Var* *amaster );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_MM_Design_Coordinates */
- /* */
- /* <Description> */
- /* For Multiple Masters fonts, choose an interpolated font design */
- /* through design coordinates. */
- /* */
- /* This function can't be used with GX fonts. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available design coordinates. If it */
- /* is larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use default values for the remaining axes. */
- /* */
- /* coords :: An array of design coordinates. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_MM_Design_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Long* coords );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Var_Design_Coordinates */
- /* */
- /* <Description> */
- /* For Multiple Master or GX Var fonts, choose an interpolated font */
- /* design through design coordinates. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available design coordinates. If it */
- /* is larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use default values for the remaining axes. */
- /* */
- /* coords :: An array of design coordinates. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_Var_Design_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_MM_Blend_Coordinates */
- /* */
- /* <Description> */
- /* For Multiple Masters and GX var fonts, choose an interpolated font */
- /* design through normalized blend coordinates. */
- /* */
- /* <InOut> */
- /* face :: A handle to the source face. */
- /* */
- /* <Input> */
- /* num_coords :: The number of available design coordinates. If it */
- /* is larger than the number of axes, ignore the excess */
- /* values. If it is smaller than the number of axes, */
- /* use default values for the remaining axes. */
- /* */
- /* coords :: The design coordinates array (each element must be */
- /* between 0 and 1.0). */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_MM_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Set_Var_Blend_Coordinates */
- /* */
- /* <Description> */
- /* This is another name of @FT_Set_MM_Blend_Coordinates. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Set_Var_Blend_Coordinates( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __FTMM_H__ */
-
-
-/* END */
diff --git a/include/ftsnames.h b/include/ftsnames.h
deleted file mode 100644
index 0f7fbe1..0000000
--- a/include/ftsnames.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftsnames.h */
-/* */
-/* Simple interface to access SFNT name tables (which are used */
-/* to hold font names, copyright info, notices, etc.) (specification). */
-/* */
-/* This is _not_ used to retrieve glyph names! */
-/* */
-/* Copyright 1996-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __FT_SFNT_NAMES_H__
-#define __FT_SFNT_NAMES_H__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /*************************************************************************/
- /* */
- /* <Section> */
- /* sfnt_names */
- /* */
- /* <Title> */
- /* SFNT Names */
- /* */
- /* <Abstract> */
- /* Access the names embedded in TrueType and OpenType files. */
- /* */
- /* <Description> */
- /* The TrueType and OpenType specifications allow the inclusion of */
- /* a special `names table' in font files. This table contains */
- /* textual (and internationalized) information regarding the font, */
- /* like family name, copyright, version, etc. */
- /* */
- /* The definitions below are used to access them if available. */
- /* */
- /* Note that this has nothing to do with glyph names! */
- /* */
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Struct> */
- /* FT_SfntName */
- /* */
- /* <Description> */
- /* A structure used to model an SFNT `name' table entry. */
- /* */
- /* <Fields> */
- /* platform_id :: The platform ID for `string'. */
- /* */
- /* encoding_id :: The encoding ID for `string'. */
- /* */
- /* language_id :: The language ID for `string'. */
- /* */
- /* name_id :: An identifier for `string'. */
- /* */
- /* string :: The `name' string. Note that its format differs */
- /* depending on the (platform,encoding) pair. It can */
- /* be a Pascal String, a UTF-16 one, etc. */
- /* */
- /* Generally speaking, the string is not */
- /* zero-terminated. Please refer to the TrueType */
- /* specification for details. */
- /* */
- /* string_len :: The length of `string' in bytes. */
- /* */
- /* <Note> */
- /* Possible values for `platform_id', `encoding_id', `language_id', */
- /* and `name_id' are given in the file `ttnameid.h'. For details */
- /* please refer to the TrueType or OpenType specification. */
- /* */
- /* See also @TT_PLATFORM_XXX, @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, */
- /* @TT_ISO_ID_XXX, and @TT_MS_ID_XXX. */
- /* */
- typedef struct FT_SfntName_
- {
- FT_UShort platform_id;
- FT_UShort encoding_id;
- FT_UShort language_id;
- FT_UShort name_id;
-
- FT_Byte* string; /* this string is *not* null-terminated! */
- FT_UInt string_len; /* in bytes */
-
- } FT_SfntName;
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Sfnt_Name_Count */
- /* */
- /* <Description> */
- /* Retrieve the number of name strings in the SFNT `name' table. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* <Return> */
- /* The number of strings in the `name' table. */
- /* */
- FT_EXPORT( FT_UInt )
- FT_Get_Sfnt_Name_Count( FT_Face face );
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* FT_Get_Sfnt_Name */
- /* */
- /* <Description> */
- /* Retrieve a string of the SFNT `name' table for a given index. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face. */
- /* */
- /* idx :: The index of the `name' string. */
- /* */
- /* <Output> */
- /* aname :: The indexed @FT_SfntName structure. */
- /* */
- /* <Return> */
- /* FreeType error code. 0~means success. */
- /* */
- /* <Note> */
- /* The `string' array returned in the `aname' structure is not */
- /* null-terminated. The application should deallocate it if it is no */
- /* longer in use. */
- /* */
- /* Use @FT_Get_Sfnt_Name_Count to get the total number of available */
- /* `name' table entries, then do a loop until you get the right */
- /* platform, encoding, and name ID. */
- /* */
- FT_EXPORT( FT_Error )
- FT_Get_Sfnt_Name( FT_Face face,
- FT_UInt idx,
- FT_SfntName *aname );
-
-
- /***************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY
- *
- * @description:
- * A constant used as the tag of @FT_Parameter structures to make
- * FT_Open_Face() ignore preferred family subfamily names in `name'
- * table since OpenType version 1.4. For backwards compatibility with
- * legacy systems that have a 4-face-per-family restriction.
- *
- */
-#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY FT_MAKE_TAG( 'i', 'g', 'p', 'f' )
-
-
- /***************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY
- *
- * @description:
- * A constant used as the tag of @FT_Parameter structures to make
- * FT_Open_Face() ignore preferred subfamily names in `name' table since
- * OpenType version 1.4. For backwards compatibility with legacy
- * systems that have a 4-face-per-family restriction.
- *
- */
-#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY FT_MAKE_TAG( 'i', 'g', 'p', 's' )
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __FT_SFNT_NAMES_H__ */
-
-
-/* END */
diff --git a/include/ftttdrv.h b/include/ftttdrv.h
deleted file mode 100644
index f56040b..0000000
--- a/include/ftttdrv.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/***************************************************************************/
-/* */
-/* ftttdrv.h */
-/* */
-/* FreeType API for controlling the TrueType driver */
-/* (specification only). */
-/* */
-/* Copyright 2013-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __FTTTDRV_H__
-#define __FTTTDRV_H__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /**************************************************************************
- *
- * @section:
- * tt_driver
- *
- * @title:
- * The TrueType driver
- *
- * @abstract:
- * Controlling the TrueType driver module.
- *
- * @description:
- * While FreeType's TrueType driver doesn't expose API functions by
- * itself, it is possible to control its behaviour with @FT_Property_Set
- * and @FT_Property_Get. The following lists the available properties
- * together with the necessary macros and structures.
- *
- * The TrueType driver's module name is `truetype'.
- *
- */
-
-
- /**************************************************************************
- *
- * @property:
- * interpreter-version
- *
- * @description:
- * Currently, two versions are available, representing the bytecode
- * interpreter with and without subpixel hinting support,
- * respectively. The default is subpixel support if
- * TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel
- * support otherwise (since it isn't available then).
- *
- * If subpixel hinting is on, many TrueType bytecode instructions behave
- * differently compared to B/W or grayscale rendering (except if `native
- * ClearType' is selected by the font). The main idea is to render at a
- * much increased horizontal resolution, then sampling down the created
- * output to subpixel precision. However, many older fonts are not
- * suited to this and must be specially taken care of by applying
- * (hardcoded) font-specific tweaks.
- *
- * Details on subpixel hinting and some of the necessary tweaks can be
- * found in Greg Hitchcock's whitepaper at
- * `http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
- *
- * The following example code demonstrates how to activate subpixel
- * hinting (omitting the error handling).
- *
- * {
- * FT_Library library;
- * FT_Face face;
- * FT_UInt interpreter_version = TT_INTERPRETER_VERSION_38;
- *
- *
- * FT_Init_FreeType( &library );
- *
- * FT_Property_Set( library, "truetype",
- * "interpreter-version",
- * &interpreter_version );
- * }
- *
- * @note:
- * This property can be used with @FT_Property_Get also.
- *
- */
-
-
- /**************************************************************************
- *
- * @enum:
- * TT_INTERPRETER_VERSION_XXX
- *
- * @description:
- * A list of constants used for the @interpreter-version property to
- * select the hinting engine for Truetype fonts.
- *
- * The numeric value in the constant names represents the version
- * number as returned by the `GETINFO' bytecode instruction.
- *
- * @values:
- * TT_INTERPRETER_VERSION_35 ::
- * Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in
- * Windows~98; only grayscale and B/W rasterizing is supported.
- *
- * TT_INTERPRETER_VERSION_38 ::
- * Version~38 corresponds to MS rasterizer v.1.9; it is roughly
- * equivalent to the hinting provided by DirectWrite ClearType (as
- * can be found, for example, in the Internet Explorer~9 running on
- * Windows~7).
- *
- * @note:
- * This property controls the behaviour of the bytecode interpreter
- * and thus how outlines get hinted. It does *not* control how glyph
- * get rasterized! In particular, it does not control subpixel color
- * filtering.
- *
- * If FreeType has not been compiled with configuration option
- * FT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 causes an
- * `FT_Err_Unimplemented_Feature' error.
- *
- * Depending on the graphics framework, Microsoft uses different
- * bytecode and rendering engines. As a consequence, the version
- * numbers returned by a call to the `GETINFO' bytecode instruction are
- * more convoluted than desired.
- *
- * Here are two tables that try to shed some light on the possible
- * values for the MS rasterizer engine, together with the additional
- * features introduced by it.
- *
- * {
- * GETINFO framework version feature
- * -------------------------------------------------------------------
- * 3 GDI (Win 3.1), v1.0 16-bit, first version
- * TrueImage
- * 33 GDI (Win NT 3.1), v1.5 32-bit
- * HP Laserjet
- * 34 GDI (Win 95) v1.6 font smoothing,
- * new SCANTYPE opcode
- * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET
- * bits in composite glyphs
- * 36 MGDI (Win CE 2) v1.6+ classic ClearType
- * 37 GDI (XP and later), v1.8 ClearType
- * GDI+ old (before Vista)
- * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType,
- * WPF Y-direction ClearType,
- * additional error checking
- * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags
- * in GETINFO opcode,
- * bug fixes
- * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
- * DWrite (Win 8) in GETINFO opcode,
- * Gray ClearType
- * }
- *
- * The `version' field gives a rough orientation only, since some
- * applications provided certain features much earlier (as an example,
- * Microsoft Reader used subpixel and Y-direction ClearType already in
- * Windows 2000). Similarly, updates to a given framework might include
- * improved hinting support.
- *
- * {
- * version sampling rendering comment
- * x y x y
- * --------------------------------------------------------------
- * v1.0 normal normal B/W B/W bi-level
- * v1.6 high high gray gray grayscale
- * v1.8 high normal color-filter B/W (GDI) ClearType
- * v1.9 high high color-filter gray Color ClearType
- * v2.1 high normal gray B/W Gray ClearType
- * v2.1 high high gray gray Gray ClearType
- * }
- *
- * Color and Gray ClearType are the two available variants of
- * `Y-direction ClearType', meaning grayscale rasterization along the
- * Y-direction; the name used in the TrueType specification for this
- * feature is `symmetric smoothing'. `Classic ClearType' is the
- * original algorithm used before introducing a modified version in
- * Win~XP. Another name for v1.6's grayscale rendering is `font
- * smoothing', and `Color ClearType' is sometimes also called `DWrite
- * ClearType'. To differentiate between today's Color ClearType and the
- * earlier ClearType variant with B/W rendering along the vertical axis,
- * the latter is sometimes called `GDI ClearType'.
- *
- * `Normal' and `high' sampling describe the (virtual) resolution to
- * access the rasterized outline after the hinting process. `Normal'
- * means 1 sample per grid line (i.e., B/W). In the current Microsoft
- * implementation, `high' means an extra virtual resolution of 16x16 (or
- * 16x1) grid lines per pixel for bytecode instructions like `MIRP'.
- * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid
- * lines for color filtering if Color ClearType is activated.
- *
- * Note that `Gray ClearType' is essentially the same as v1.6's
- * grayscale rendering. However, the GETINFO instruction handles it
- * differently: v1.6 returns bit~12 (hinting for grayscale), while v2.1
- * returns bits~13 (hinting for ClearType), 18 (symmetrical smoothing),
- * and~19 (Gray ClearType). Also, this mode respects bits 2 and~3 for
- * the version~1 gasp table exclusively (like Color ClearType), while
- * v1.6 only respects the values of version~0 (bits 0 and~1).
- *
- * FreeType doesn't provide all capabilities of the most recent
- * ClearType incarnation, thus we identify our subpixel support as
- * version~38.
- *
- */
-#define TT_INTERPRETER_VERSION_35 35
-#define TT_INTERPRETER_VERSION_38 38
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __FTTTDRV_H__ */
-
-
-/* END */
diff --git a/include/internal/internal.h b/include/internal/internal.h
deleted file mode 100644
index 1c1fd0e..0000000
--- a/include/internal/internal.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************/
-/* */
-/* internal.h */
-/* */
-/* Internal header files (specification only). */
-/* */
-/* Copyright 1996-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* This file is automatically included by `ft2build.h'. */
- /* Do not include it manually! */
- /* */
- /*************************************************************************/
-
-
-#define FT_INTERNAL_OBJECTS_H <internal/ftobjs.h>
-#define FT_INTERNAL_PIC_H <internal/ftpic.h>
-#define FT_INTERNAL_STREAM_H <internal/ftstream.h>
-#define FT_INTERNAL_MEMORY_H <internal/ftmemory.h>
-#define FT_INTERNAL_DEBUG_H <internal/ftdebug.h>
-#define FT_INTERNAL_CALC_H <internal/ftcalc.h>
-#define FT_INTERNAL_DRIVER_H <internal/ftdriver.h>
-#define FT_INTERNAL_TRACE_H <internal/fttrace.h>
-#define FT_INTERNAL_GLYPH_LOADER_H <internal/ftgloadr.h>
-#define FT_INTERNAL_SFNT_H <internal/sfnt.h>
-#define FT_INTERNAL_SERVICE_H <internal/ftserv.h>
-#define FT_INTERNAL_RFORK_H <internal/ftrfork.h>
-#define FT_INTERNAL_VALIDATE_H <internal/ftvalid.h>
-
-#define FT_INTERNAL_TRUETYPE_TYPES_H <internal/tttypes.h>
-#define FT_INTERNAL_TYPE1_TYPES_H <internal/t1types.h>
-
-#define FT_INTERNAL_POSTSCRIPT_AUX_H <internal/psaux.h>
-#define FT_INTERNAL_POSTSCRIPT_HINTS_H <internal/pshints.h>
-#define FT_INTERNAL_POSTSCRIPT_GLOBALS_H <internal/psglobal.h>
-
-#define FT_INTERNAL_AUTOHINT_H <internal/autohint.h>
-
-
-#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
-
- /* We disable the warning `conditional expression is constant' here */
- /* in order to compile cleanly with the maximum level of warnings. */
- /* In particular, the warning complains about stuff like `while(0)' */
- /* which is very useful in macro definitions. There is no benefit */
- /* in having it enabled. */
-#pragma warning( disable : 4127 )
-
-#endif /* _MSC_VER */
-
-
-/* END */
diff --git a/include/internal/services/svmm.h b/include/internal/services/svmm.h
deleted file mode 100644
index f2cecfb..0000000
--- a/include/internal/services/svmm.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/***************************************************************************/
-/* */
-/* svmm.h */
-/* */
-/* The FreeType Multiple Masters and GX var services (specification). */
-/* */
-/* Copyright 2003-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __SVMM_H__
-#define __SVMM_H__
-
-#include FT_INTERNAL_SERVICE_H
-
-
-FT_BEGIN_HEADER
-
-
- /*
- * A service used to manage multiple-masters data in a given face.
- *
- * See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H).
- *
- */
-
-#define FT_SERVICE_ID_MULTI_MASTERS "multi-masters"
-
-
- typedef FT_Error
- (*FT_Get_MM_Func)( FT_Face face,
- FT_Multi_Master* master );
-
- typedef FT_Error
- (*FT_Get_MM_Var_Func)( FT_Face face,
- FT_MM_Var* *master );
-
- typedef FT_Error
- (*FT_Set_MM_Design_Func)( FT_Face face,
- FT_UInt num_coords,
- FT_Long* coords );
-
- typedef FT_Error
- (*FT_Set_Var_Design_Func)( FT_Face face,
- FT_UInt num_coords,
- FT_Fixed* coords );
-
- typedef FT_Error
- (*FT_Set_MM_Blend_Func)( FT_Face face,
- FT_UInt num_coords,
- FT_Long* coords );
-
-
- FT_DEFINE_SERVICE( MultiMasters )
- {
- FT_Get_MM_Func get_mm;
- FT_Set_MM_Design_Func set_mm_design;
- FT_Set_MM_Blend_Func set_mm_blend;
- FT_Get_MM_Var_Func get_mm_var;
- FT_Set_Var_Design_Func set_var_design;
- };
-
-
-#ifndef FT_CONFIG_OPTION_PIC
-
-#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
- get_mm_, \
- set_mm_design_, \
- set_mm_blend_, \
- get_mm_var_, \
- set_var_design_ ) \
- static const FT_Service_MultiMastersRec class_ = \
- { \
- get_mm_, set_mm_design_, set_mm_blend_, get_mm_var_, set_var_design_ \
- };
-
-#else /* FT_CONFIG_OPTION_PIC */
-
-#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \
- get_mm_, \
- set_mm_design_, \
- set_mm_blend_, \
- get_mm_var_, \
- set_var_design_ ) \
- void \
- FT_Init_Class_ ## class_( FT_Service_MultiMastersRec* clazz ) \
- { \
- clazz->get_mm = get_mm_; \
- clazz->set_mm_design = set_mm_design_; \
- clazz->set_mm_blend = set_mm_blend_; \
- clazz->get_mm_var = get_mm_var_; \
- clazz->set_var_design = set_var_design_; \
- }
-
-#endif /* FT_CONFIG_OPTION_PIC */
-
- /* */
-
-
-FT_END_HEADER
-
-#endif /* __SVMM_H__ */
-
-
-/* END */
diff --git a/include/ttunpat.h b/include/ttunpat.h
deleted file mode 100644
index 8ea5568..0000000
--- a/include/ttunpat.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/***************************************************************************/
-/* */
-/* ttunpat.h */
-/* */
-/* Definitions for the unpatented TrueType hinting system */
-/* */
-/* Copyright 2003-2015 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
-/* */
-/* Written by Graham Asher <graham.asher@btinternet.com> */
-/* */
-/* This file is part of the FreeType project, and may only be used, */
-/* modified, and distributed under the terms of the FreeType project */
-/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
-/* this file you indicate that you have read the license and */
-/* understand and accept it fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __TTUNPAT_H__
-#define __TTUNPAT_H__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
- /***************************************************************************
- *
- * @constant:
- * FT_PARAM_TAG_UNPATENTED_HINTING
- *
- * @description:
- * A constant used as the tag of an @FT_Parameter structure to indicate
- * that unpatented methods only should be used by the TrueType bytecode
- * interpreter for a typeface opened by @FT_Open_Face.
- *
- */
-#define FT_PARAM_TAG_UNPATENTED_HINTING FT_MAKE_TAG( 'u', 'n', 'p', 'a' )
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* __TTUNPAT_H__ */
-
-
-/* END */
diff --git a/modules.cfg b/modules.cfg
index 9ba66df..4bf3445 100644
--- a/modules.cfg
+++ b/modules.cfg
@@ -1,6 +1,6 @@
# modules.cfg
#
-# Copyright 2005-2015 by
+# Copyright 2005-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -19,7 +19,7 @@
# activate a module, remove the comment character.
#
# Note that many modules and components are further controlled with macros
-# in the file `include/config/ftoption.h'.
+# in the file `include/freetype/config/ftoption.h'.
####
@@ -37,34 +37,41 @@
# PostScript Type 1 font driver.
#
# This driver needs the `psaux', `pshinter', and `psnames' modules.
+# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += type1
# CFF/OpenType font driver.
#
-# This driver needs the `sfnt', `pshinter', and `psnames' modules.
+# This driver needs the `sfnt', `psaux', `pshinter', and `psnames' modules.
FONT_MODULES += cff
# Type 1 CID-keyed font driver.
#
# This driver needs the `psaux', `pshinter', and `psnames' modules.
+# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += cid
# PFR/TrueDoc font driver. See optional extension ftpfr.c below also.
+# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += pfr
# PostScript Type 42 font driver.
#
# This driver needs the `truetype' and `psaux' modules.
+# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += type42
# Windows FONT/FNT font driver. See optional extension ftwinfnt.c below
# also.
+# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += winfonts
-# PCF font driver.
+# PCF font driver. If debugging and tracing is enabled, needs `ftbitmap.c'.
+# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += pcf
# BDF font driver. See optional extension ftbdf.c below also.
+# No FT_CONFIG_OPTION_PIC support.
FONT_MODULES += bdf
# SFNT files support. If used without `truetype' or `cff', it supports
@@ -85,7 +92,7 @@
HINTING_MODULES += pshinter
# The TrueType hinting engine doesn't have a module of its own but is
-# controlled in file include/config/ftoption.h
+# controlled in file include/freetype/config/ftoption.h
# (TT_CONFIG_OPTION_BYTECODE_INTERPRETER and friends).
@@ -106,34 +113,42 @@
# FreeType's cache sub-system (quite stable but still in beta -- this means
# that its public API is subject to change if necessary). See
-# include/ftcache.h. Needs ftglyph.c.
+# include/freetype/ftcache.h. Needs `ftglyph.c'.
+# No FT_CONFIG_OPTION_PIC support.
AUX_MODULES += cache
-# TrueType GX/AAT table validation. Needs ftgxval.c below.
+# TrueType GX/AAT table validation. Needs `ftgxval.c' below.
+#
+# No FT_CONFIG_OPTION_PIC support.
# AUX_MODULES += gxvalid
# Support for streams compressed with gzip (files with suffix .gz).
#
-# See include/ftgzip.h for the API.
+# See include/freetype/ftgzip.h for the API.
+# No FT_CONFIG_OPTION_PIC support.
AUX_MODULES += gzip
# Support for streams compressed with LZW (files with suffix .Z).
#
-# See include/ftlzw.h for the API.
+# See include/freetype/ftlzw.h for the API.
+# No FT_CONFIG_OPTION_PIC support.
AUX_MODULES += lzw
# Support for streams compressed with bzip2 (files with suffix .bz2).
#
-# See include/ftbzip2.h for the API.
+# See include/freetype/ftbzip2.h for the API.
+# No FT_CONFIG_OPTION_PIC support.
AUX_MODULES += bzip2
-# OpenType table validation. Needs ftotval.c below.
+# OpenType table validation. Needs `ftotval.c' below.
#
+# No FT_CONFIG_OPTION_PIC support.
# AUX_MODULES += otvalid
# Auxiliary PostScript driver component to share common code.
#
# This module depends on `psnames'.
+# No FT_CONFIG_OPTION_PIC support.
AUX_MODULES += psaux
# Support for PostScript glyph names.
@@ -149,95 +164,86 @@
# Exact bounding box calculation.
#
-# See include/ftbbox.h for the API.
+# See include/freetype/ftbbox.h for the API.
BASE_EXTENSIONS += ftbbox.c
# Access BDF-specific strings. Needs BDF font driver.
#
-# See include/ftbdf.h for the API.
+# See include/freetype/ftbdf.h for the API.
BASE_EXTENSIONS += ftbdf.c
# Utility functions for converting 1bpp, 2bpp, 4bpp, and 8bpp bitmaps into
# 8bpp format, and for emboldening of bitmap glyphs.
#
-# See include/ftbitmap.h for the API.
+# See include/freetype/ftbitmap.h for the API.
BASE_EXTENSIONS += ftbitmap.c
# Access CID font information.
#
-# See include/ftcid.h for the API.
+# See include/freetype/ftcid.h for the API.
BASE_EXTENSIONS += ftcid.c
-# Support functions for font formats.
+# Access FSType information. Needs `fttype1.c'.
#
-# See include/ftfntfmt.h for the API.
-BASE_EXTENSIONS += ftfntfmt.c
-
-# Access FSType information. Needs fttype1.c.
-#
-# See include/freetype.h for the API.
+# See include/freetype/freetype.h for the API.
BASE_EXTENSIONS += ftfstype.c
# Support for GASP table queries.
#
-# See include/ftgasp.h for the API.
+# See include/freetype/ftgasp.h for the API.
BASE_EXTENSIONS += ftgasp.c
-# Convenience functions to handle glyphs. Needs ftbitmap.c.
+# Convenience functions to handle glyphs. Needs `ftbitmap.c'.
#
-# See include/ftglyph.h for the API.
+# See include/freetype/ftglyph.h for the API.
BASE_EXTENSIONS += ftglyph.c
# Interface for gxvalid module.
#
-# See include/ftgxval.h for the API.
+# See include/freetype/ftgxval.h for the API.
BASE_EXTENSIONS += ftgxval.c
-# Support for LCD color filtering of subpixel bitmaps.
-#
-# See include/ftlcdfil.h for the API.
-BASE_EXTENSIONS += ftlcdfil.c
-
# Multiple Master font interface.
#
-# See include/ftmm.h for the API.
+# See include/freetype/ftmm.h for the API.
BASE_EXTENSIONS += ftmm.c
# Interface for otvalid module.
#
-# See include/ftotval.h for the API.
+# See include/freetype/ftotval.h for the API.
BASE_EXTENSIONS += ftotval.c
# Support for FT_Face_CheckTrueTypePatents.
#
-# See include/freetype.h for the API.
+# See include/freetype/freetype.h for the API.
BASE_EXTENSIONS += ftpatent.c
# Interface for accessing PFR-specific data. Needs PFR font driver.
#
-# See include/ftpfr.h for the API.
+# See include/freetype/ftpfr.h for the API.
BASE_EXTENSIONS += ftpfr.c
-# Path stroker. Needs ftglyph.c.
+# Path stroker. Needs `ftglyph.c'.
#
-# See include/ftstroke.h for the API.
+# See include/freetype/ftstroke.h for the API.
BASE_EXTENSIONS += ftstroke.c
-# Support for synthetic embolding and slanting of fonts. Needs ftbitmap.c.
+# Support for synthetic emboldening and slanting of fonts. Needs
+# `ftbitmap.c'.
#
-# See include/ftsynth.h for the API.
+# See include/freetype/ftsynth.h for the API.
BASE_EXTENSIONS += ftsynth.c
# Interface to access data specific to PostScript Type 1 and Type 2 (CFF)
# fonts.
#
-# See include/t1tables.h for the API.
+# See include/freetype/t1tables.h for the API.
BASE_EXTENSIONS += fttype1.c
# Interface for accessing data specific to Windows FNT files. Needs winfnt
# driver.
#
-# See include/ftwinfnt.h for the API.
+# See include/freetype/ftwinfnt.h for the API.
BASE_EXTENSIONS += ftwinfnt.c
####
diff --git a/objs/.gitignore b/objs/.gitignore
index 21b67f6..f847620 100644
--- a/objs/.gitignore
+++ b/objs/.gitignore
@@ -1,15 +1,3 @@
-apinames
-freetype.def
-freetype.lib
-ftexport.sym
-ftmodule.h
-ftoption.h
-libfreetype.la
-.libs
-*.lo
-*.o
-*.a
-debug*/
-release*/
-win32/
-win64/
+*
+!README
+!.gitignore
diff --git a/src/Jamfile b/src/Jamfile
index 7a9ee96..562480c 100644
--- a/src/Jamfile
+++ b/src/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -11,12 +11,6 @@
SubDir FT2_TOP $(FT2_SRC_DIR) ;
-# The file <internal/internal.h> is used to define macros that are
-# later used in #include statements. It needs to be parsed in order to
-# record these definitions.
-#
-HDRMACRO [ FT2_SubDir $(FT2_INCLUDE_DIR) internal internal.h ] ;
-
for xx in $(FT2_COMPONENTS)
{
SubInclude FT2_TOP $(FT2_SRC_DIR) $(xx) ;
diff --git a/src/autofit/Jamfile b/src/autofit/Jamfile
index 6600a34..01b866e 100644
--- a/src/autofit/Jamfile
+++ b/src/autofit/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/autofit Jamfile
#
-# Copyright 2003-2015 by
+# Copyright 2003-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -17,11 +17,25 @@
# define FT2_AUTOFIT2 to enable experimental latin hinter replacement
if $(FT2_AUTOFIT2)
{
- DEFINES += FT_OPTION_AUTOFIT2 ;
+ CCFLAGS += FT_OPTION_AUTOFIT2 ;
}
if $(FT2_MULTI)
{
- _sources = afangles afglobal afhints aflatin afcjk afindic afloader afmodule afdummy afwarp afpic ;
+ _sources = afangles
+ afblue
+ afcjk
+ afdummy
+ afglobal
+ afhints
+ afindic
+ aflatin
+ afloader
+ afmodule
+ afpic
+ afranges
+ afshaper
+ afwarp
+ ;
if $(FT2_AUTOFIT2)
{
diff --git a/src/autofit/afangles.c b/src/autofit/afangles.c
index 1b1eb31..c65a3ae 100644
--- a/src/autofit/afangles.c
+++ b/src/autofit/afangles.c
@@ -5,7 +5,7 @@
/* Routines used to compute vector angles with limited accuracy */
/* and very high speed. It also contains sorting routines (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/autofit/afblue.c b/src/autofit/afblue.c
index e2b2451..e4078fd 100644
--- a/src/autofit/afblue.c
+++ b/src/autofit/afblue.c
@@ -7,7 +7,7 @@
/* */
/* Auto-fitter data for blue strings (body). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -26,107 +26,411 @@
af_blue_strings[] =
{
/* */
- '\xD8', '\xA7', '\xD8', '\xA5', '\xD9', '\x84', '\xD9', '\x83', '\xD8', '\xB7', '\xD8', '\xB8', /* ا إ ل ك ط ظ */
+ '\xF0', '\x9E', '\xA4', '\x8C', ' ', '\xF0', '\x9E', '\xA4', '\x85', ' ', '\xF0', '\x9E', '\xA4', '\x88', ' ', '\xF0', '\x9E', '\xA4', '\x8F', ' ', '\xF0', '\x9E', '\xA4', '\x94', ' ', '\xF0', '\x9E', '\xA4', '\x9A', /* 𞤌 𞤅 𞤈 𞤏 𞤔 𞤚 */
'\0',
- '\xD8', '\xAA', '\xD8', '\xAB', '\xD8', '\xB7', '\xD8', '\xB8', '\xD9', '\x83', /* ت ث ط ظ ك */
+ '\xF0', '\x9E', '\xA4', '\x82', ' ', '\xF0', '\x9E', '\xA4', '\x96', /* 𞤂 𞤖 */
'\0',
- '\xD0', '\x91', '\xD0', '\x92', '\xD0', '\x95', '\xD0', '\x9F', '\xD0', '\x97', '\xD0', '\x9E', '\xD0', '\xA1', '\xD0', '\xAD', /* БВЕПЗОСЭ */
+ '\xF0', '\x9E', '\xA4', '\xAC', ' ', '\xF0', '\x9E', '\xA4', '\xAE', ' ', '\xF0', '\x9E', '\xA4', '\xBB', ' ', '\xF0', '\x9E', '\xA4', '\xBC', ' ', '\xF0', '\x9E', '\xA4', '\xBE', /* 𞤬 𞤮 𞤻 𞤼 𞤾 */
'\0',
- '\xD0', '\x91', '\xD0', '\x92', '\xD0', '\x95', '\xD0', '\xA8', '\xD0', '\x97', '\xD0', '\x9E', '\xD0', '\xA1', '\xD0', '\xAD', /* БВЕШЗОСЭ */
+ '\xF0', '\x9E', '\xA4', '\xA4', ' ', '\xF0', '\x9E', '\xA4', '\xA8', ' ', '\xF0', '\x9E', '\xA4', '\xA9', ' ', '\xF0', '\x9E', '\xA4', '\xAD', ' ', '\xF0', '\x9E', '\xA4', '\xB4', ' ', '\xF0', '\x9E', '\xA4', '\xB8', ' ', '\xF0', '\x9E', '\xA4', '\xBA', ' ', '\xF0', '\x9E', '\xA5', '\x80', /* 𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀 */
'\0',
- '\xD1', '\x85', '\xD0', '\xBF', '\xD0', '\xBD', '\xD1', '\x88', '\xD0', '\xB5', '\xD0', '\xB7', '\xD0', '\xBE', '\xD1', '\x81', /* хпншезос */
+ '\xD8', '\xA7', ' ', '\xD8', '\xA5', ' ', '\xD9', '\x84', ' ', '\xD9', '\x83', ' ', '\xD8', '\xB7', ' ', '\xD8', '\xB8', /* ا إ ل ك ط ظ */
'\0',
- '\xD1', '\x80', '\xD1', '\x83', '\xD1', '\x84', /* руф */
+ '\xD8', '\xAA', ' ', '\xD8', '\xAB', ' ', '\xD8', '\xB7', ' ', '\xD8', '\xB8', ' ', '\xD9', '\x83', /* ت ث ط ظ ك */
'\0',
- '\xE0', '\xA4', '\x95', '\xE0', '\xA4', '\xAE', '\xE0', '\xA4', '\x85', '\xE0', '\xA4', '\x86', '\xE0', '\xA4', '\xA5', '\xE0', '\xA4', '\xA7', '\xE0', '\xA4', '\xAD', '\xE0', '\xA4', '\xB6', /* क म अ आ थ ध भ श */
+ '\xD9', '\x80', /* ـ */
'\0',
- '\xE0', '\xA4', '\x88', '\xE0', '\xA4', '\x90', '\xE0', '\xA4', '\x93', '\xE0', '\xA4', '\x94', '\xE0', '\xA4', '\xBF', '\xE0', '\xA5', '\x80', '\xE0', '\xA5', '\x8B', '\xE0', '\xA5', '\x8C', /* ई ऐ ओ औ ि ी ो ौ */
+ '\xD4', '\xB1', ' ', '\xD5', '\x84', ' ', '\xD5', '\x92', ' ', '\xD5', '\x8D', ' ', '\xD4', '\xB2', ' ', '\xD4', '\xB3', ' ', '\xD4', '\xB4', ' ', '\xD5', '\x95', /* Ա Մ Ւ Ս Բ Գ Դ Օ */
'\0',
- '\xE0', '\xA4', '\x95', '\xE0', '\xA4', '\xAE', '\xE0', '\xA4', '\x85', '\xE0', '\xA4', '\x86', '\xE0', '\xA4', '\xA5', '\xE0', '\xA4', '\xA7', '\xE0', '\xA4', '\xAD', '\xE0', '\xA4', '\xB6', /* क म अ आ थ ध भ श */
+ '\xD5', '\x92', ' ', '\xD5', '\x88', ' ', '\xD4', '\xB4', ' ', '\xD5', '\x83', ' ', '\xD5', '\x87', ' ', '\xD5', '\x8D', ' ', '\xD5', '\x8F', ' ', '\xD5', '\x95', /* Ւ Ո Դ Ճ Շ Ս Տ Օ */
'\0',
- '\xE0', '\xA5', '\x81', '\xE0', '\xA5', '\x83', /* ु ृ */
+ '\xD5', '\xA5', ' ', '\xD5', '\xA7', ' ', '\xD5', '\xAB', ' ', '\xD5', '\xB4', ' ', '\xD5', '\xBE', ' ', '\xD6', '\x86', ' ', '\xD5', '\xB3', /* ե է ի մ վ ֆ ճ */
'\0',
- '\xCE', '\x93', '\xCE', '\x92', '\xCE', '\x95', '\xCE', '\x96', '\xCE', '\x98', '\xCE', '\x9F', '\xCE', '\xA9', /* ΓΒΕΖΘΟΩ */
+ '\xD5', '\xA1', ' ', '\xD5', '\xB5', ' ', '\xD6', '\x82', ' ', '\xD5', '\xBD', ' ', '\xD5', '\xA3', ' ', '\xD5', '\xB7', ' ', '\xD6', '\x80', ' ', '\xD6', '\x85', /* ա յ ւ ս գ շ ր օ */
'\0',
- '\xCE', '\x92', '\xCE', '\x94', '\xCE', '\x96', '\xCE', '\x9E', '\xCE', '\x98', '\xCE', '\x9F', /* ΒΔΖΞΘΟ */
+ '\xD5', '\xB0', ' ', '\xD5', '\xB8', ' ', '\xD5', '\xB3', ' ', '\xD5', '\xA1', ' ', '\xD5', '\xA5', ' ', '\xD5', '\xAE', ' ', '\xD5', '\xBD', ' ', '\xD6', '\x85', /* հ ո ճ ա ե ծ ս օ */
'\0',
- '\xCE', '\xB2', '\xCE', '\xB8', '\xCE', '\xB4', '\xCE', '\xB6', '\xCE', '\xBB', '\xCE', '\xBE', /* βθδζλξ */
+ '\xD5', '\xA2', ' ', '\xD5', '\xA8', ' ', '\xD5', '\xAB', ' ', '\xD5', '\xAC', ' ', '\xD5', '\xB2', ' ', '\xD5', '\xBA', ' ', '\xD6', '\x83', ' ', '\xD6', '\x81', /* բ ը ի լ ղ պ փ ց */
'\0',
- '\xCE', '\xB1', '\xCE', '\xB5', '\xCE', '\xB9', '\xCE', '\xBF', '\xCF', '\x80', '\xCF', '\x83', '\xCF', '\x84', '\xCF', '\x89', /* αειοπστω */
+ '\xF0', '\x90', '\xAC', '\x80', ' ', '\xF0', '\x90', '\xAC', '\x81', ' ', '\xF0', '\x90', '\xAC', '\x90', ' ', '\xF0', '\x90', '\xAC', '\x9B', /* 𐬀 𐬁 𐬐 𐬛 */
'\0',
- '\xCE', '\xB2', '\xCE', '\xB3', '\xCE', '\xB7', '\xCE', '\xBC', '\xCF', '\x81', '\xCF', '\x86', '\xCF', '\x87', '\xCF', '\x88', /* βγημρφχψ */
+ '\xF0', '\x90', '\xAC', '\x80', ' ', '\xF0', '\x90', '\xAC', '\x81', /* 𐬀 𐬁 */
'\0',
- '\xD7', '\x91', '\xD7', '\x93', '\xD7', '\x94', '\xD7', '\x97', '\xD7', '\x9A', '\xD7', '\x9B', '\xD7', '\x9D', '\xD7', '\xA1', /* בדהחךכםס */
+ '\xEA', '\x9A', '\xA7', ' ', '\xEA', '\x9A', '\xA8', ' ', '\xEA', '\x9B', '\x9B', ' ', '\xEA', '\x9B', '\x89', ' ', '\xEA', '\x9B', '\x81', ' ', '\xEA', '\x9B', '\x88', ' ', '\xEA', '\x9B', '\xAB', ' ', '\xEA', '\x9B', '\xAF', /* ꚧ ꚨ ꛛ ꛉ ꛁ ꛈ ꛫ ꛯ */
'\0',
- '\xD7', '\x91', '\xD7', '\x98', '\xD7', '\x9B', '\xD7', '\x9D', '\xD7', '\xA1', '\xD7', '\xA6', /* בטכםסצ */
+ '\xEA', '\x9A', '\xAD', ' ', '\xEA', '\x9A', '\xB3', ' ', '\xEA', '\x9A', '\xB6', ' ', '\xEA', '\x9B', '\xAC', ' ', '\xEA', '\x9A', '\xA2', ' ', '\xEA', '\x9A', '\xBD', ' ', '\xEA', '\x9B', '\xAF', ' ', '\xEA', '\x9B', '\xB2', /* ꚭ ꚳ ꚶ ꛬ ꚢ ꚽ ꛯ ꛲ */
'\0',
- '\xD7', '\xA7', '\xD7', '\x9A', '\xD7', '\x9F', '\xD7', '\xA3', '\xD7', '\xA5', /* קךןףץ */
+ '\xE0', '\xA6', '\x85', ' ', '\xE0', '\xA6', '\xA1', ' ', '\xE0', '\xA6', '\xA4', ' ', '\xE0', '\xA6', '\xA8', ' ', '\xE0', '\xA6', '\xAC', ' ', '\xE0', '\xA6', '\xAD', ' ', '\xE0', '\xA6', '\xB2', ' ', '\xE0', '\xA6', '\x95', /* অ ড ত ন ব ভ ল ক */
'\0',
- 'T', 'H', 'E', 'Z', 'O', 'C', 'Q', 'S', /* THEZOCQS */
+ '\xE0', '\xA6', '\x87', ' ', '\xE0', '\xA6', '\x9F', ' ', '\xE0', '\xA6', '\xA0', ' ', '\xE0', '\xA6', '\xBF', ' ', '\xE0', '\xA7', '\x80', ' ', '\xE0', '\xA7', '\x88', ' ', '\xE0', '\xA7', '\x97', /* ই ট ঠ ি ী ৈ ৗ */
'\0',
- 'H', 'E', 'Z', 'L', 'O', 'C', 'U', 'S', /* HEZLOCUS */
+ '\xE0', '\xA6', '\x93', ' ', '\xE0', '\xA6', '\x8F', ' ', '\xE0', '\xA6', '\xA1', ' ', '\xE0', '\xA6', '\xA4', ' ', '\xE0', '\xA6', '\xA8', ' ', '\xE0', '\xA6', '\xAC', ' ', '\xE0', '\xA6', '\xB2', ' ', '\xE0', '\xA6', '\x95', /* ও এ ড ত ন ব ল ক */
'\0',
- 'f', 'i', 'j', 'k', 'd', 'b', 'h', /* fijkdbh */
+ '\xE1', '\x9D', '\x90', ' ', '\xE1', '\x9D', '\x88', /* ᝐ ᝈ */
'\0',
- 'x', 'z', 'r', 'o', 'e', 's', 'c', /* xzroesc */
+ '\xE1', '\x9D', '\x85', ' ', '\xE1', '\x9D', '\x8A', ' ', '\xE1', '\x9D', '\x8E', /* ᝅ ᝊ ᝎ */
'\0',
- 'p', 'q', 'g', 'j', 'y', /* pqgjy */
+ '\xE1', '\x9D', '\x82', ' ', '\xE1', '\x9D', '\x83', ' ', '\xE1', '\x9D', '\x89', ' ', '\xE1', '\x9D', '\x8C', /* ᝂ ᝃ ᝉ ᝌ */
'\0',
- '\xE0', '\xB0', '\x87', '\xE0', '\xB0', '\x8C', '\xE0', '\xB0', '\x99', '\xE0', '\xB0', '\x9E', '\xE0', '\xB0', '\xA3', '\xE0', '\xB0', '\xB1', '\xE0', '\xB1', '\xAF', /* ఇ ఌ ఙ ఞ ణ ఱ ౯ */
+ '\xE1', '\x9D', '\x80', ' ', '\xE1', '\x9D', '\x83', ' ', '\xE1', '\x9D', '\x86', ' ', '\xE1', '\x9D', '\x89', ' ', '\xE1', '\x9D', '\x8B', ' ', '\xE1', '\x9D', '\x8F', ' ', '\xE1', '\x9D', '\x91', /* ᝀ ᝃ ᝆ ᝉ ᝋ ᝏ ᝑ */
'\0',
- '\xE0', '\xB0', '\x85', '\xE0', '\xB0', '\x95', '\xE0', '\xB0', '\x9A', '\xE0', '\xB0', '\xB0', '\xE0', '\xB0', '\xBD', '\xE0', '\xB1', '\xA8', '\xE0', '\xB1', '\xAC', /* అ క చ ర ఽ ౨ ౬ */
+ '\xE1', '\x97', '\x9C', ' ', '\xE1', '\x96', '\xB4', ' ', '\xE1', '\x90', '\x81', ' ', '\xE1', '\x92', '\xA3', ' ', '\xE1', '\x91', '\xAB', ' ', '\xE1', '\x91', '\x8E', ' ', '\xE1', '\x94', '\x91', ' ', '\xE1', '\x97', '\xB0', /* ᗜ ᖴ ᐁ ᒣ ᑫ ᑎ ᔑ ᗰ */
'\0',
- '\xE0', '\xB8', '\x9A', '\xE0', '\xB9', '\x80', '\xE0', '\xB9', '\x81', '\xE0', '\xB8', '\xAD', '\xE0', '\xB8', '\x81', '\xE0', '\xB8', '\xB2', /* บ เ แ อ ก า */
+ '\xE1', '\x97', '\xB6', ' ', '\xE1', '\x96', '\xB5', ' ', '\xE1', '\x92', '\xA7', ' ', '\xE1', '\x90', '\x83', ' ', '\xE1', '\x91', '\x8C', ' ', '\xE1', '\x92', '\x8D', ' ', '\xE1', '\x94', '\x91', ' ', '\xE1', '\x97', '\xA2', /* ᗶ ᖵ ᒧ ᐃ ᑌ ᒍ ᔑ ᗢ */
'\0',
- '\xE0', '\xB8', '\x9A', '\xE0', '\xB8', '\x9B', '\xE0', '\xB8', '\xA9', '\xE0', '\xB8', '\xAF', '\xE0', '\xB8', '\xAD', '\xE0', '\xB8', '\xA2', '\xE0', '\xB8', '\xAE', /* บ ป ษ ฯ อ ย ฮ */
+ '\xE1', '\x93', '\x93', ' ', '\xE1', '\x93', '\x95', ' ', '\xE1', '\x93', '\x80', ' ', '\xE1', '\x93', '\x82', ' ', '\xE1', '\x93', '\x84', ' ', '\xE1', '\x95', '\x84', ' ', '\xE1', '\x95', '\x86', ' ', '\xE1', '\x98', '\xA3', /* ᓓ ᓕ ᓀ ᓂ ᓄ ᕄ ᕆ ᘣ */
'\0',
- '\xE0', '\xB8', '\x9B', '\xE0', '\xB8', '\x9D', '\xE0', '\xB8', '\x9F', /* ป ฝ ฟ */
+ '\xE1', '\x95', '\x83', ' ', '\xE1', '\x93', '\x82', ' ', '\xE1', '\x93', '\x80', ' ', '\xE1', '\x95', '\x82', ' ', '\xE1', '\x93', '\x97', ' ', '\xE1', '\x93', '\x9A', ' ', '\xE1', '\x95', '\x86', ' ', '\xE1', '\x98', '\xA3', /* ᕃ ᓂ ᓀ ᕂ ᓗ ᓚ ᕆ ᘣ */
'\0',
- '\xE0', '\xB9', '\x82', '\xE0', '\xB9', '\x83', '\xE0', '\xB9', '\x84', /* โ ใ ไ */
+ '\xE1', '\x90', '\xAA', ' ', '\xE1', '\x99', '\x86', ' ', '\xE1', '\xA3', '\x98', ' ', '\xE1', '\x90', '\xA2', ' ', '\xE1', '\x92', '\xBE', ' ', '\xE1', '\xA3', '\x97', ' ', '\xE1', '\x94', '\x86', /* ᐪ ᙆ ᣘ ᐢ ᒾ ᣗ ᔆ */
'\0',
- '\xE0', '\xB8', '\x8E', '\xE0', '\xB8', '\x8F', '\xE0', '\xB8', '\xA4', '\xE0', '\xB8', '\xA6', /* ฎ ฏ ฤ ฦ */
+ '\xE1', '\x99', '\x86', ' ', '\xE1', '\x97', '\xAE', ' ', '\xE1', '\x92', '\xBB', ' ', '\xE1', '\x90', '\x9E', ' ', '\xE1', '\x94', '\x86', ' ', '\xE1', '\x92', '\xA1', ' ', '\xE1', '\x92', '\xA2', ' ', '\xE1', '\x93', '\x91', /* ᙆ ᗮ ᒻ ᐞ ᔆ ᒡ ᒢ ᓑ */
'\0',
- '\xE0', '\xB8', '\x8D', '\xE0', '\xB8', '\x90', /* ญ ฐ */
+ '\xF0', '\x90', '\x8A', '\xA7', ' ', '\xF0', '\x90', '\x8A', '\xAB', ' ', '\xF0', '\x90', '\x8A', '\xAC', ' ', '\xF0', '\x90', '\x8A', '\xAD', ' ', '\xF0', '\x90', '\x8A', '\xB1', ' ', '\xF0', '\x90', '\x8A', '\xBA', ' ', '\xF0', '\x90', '\x8A', '\xBC', ' ', '\xF0', '\x90', '\x8A', '\xBF', /* 𐊧 𐊫 𐊬 𐊭 𐊱 𐊺 𐊼 𐊿 */
'\0',
- '\xE0', '\xB9', '\x90', '\xE0', '\xB9', '\x91', '\xE0', '\xB9', '\x93', /* ๐ ๑ ๓ */
+ '\xF0', '\x90', '\x8A', '\xA3', ' ', '\xF0', '\x90', '\x8A', '\xA7', ' ', '\xF0', '\x90', '\x8A', '\xB7', ' ', '\xF0', '\x90', '\x8B', '\x80', ' ', '\xF0', '\x90', '\x8A', '\xAB', ' ', '\xF0', '\x90', '\x8A', '\xB8', ' ', '\xF0', '\x90', '\x8B', '\x89', /* 𐊣 𐊧 𐊷 𐋀 𐊫 𐊸 𐋉 */
+ '\0',
+ '\xF0', '\x91', '\x84', '\x83', ' ', '\xF0', '\x91', '\x84', '\x85', ' ', '\xF0', '\x91', '\x84', '\x89', ' ', '\xF0', '\x91', '\x84', '\x99', ' ', '\xF0', '\x91', '\x84', '\x97', /* 𑄃 𑄅 𑄉 𑄙 𑄗 */
+ '\0',
+ '\xF0', '\x91', '\x84', '\x85', ' ', '\xF0', '\x91', '\x84', '\x9B', ' ', '\xF0', '\x91', '\x84', '\x9D', ' ', '\xF0', '\x91', '\x84', '\x97', ' ', '\xF0', '\x91', '\x84', '\x93', /* 𑄅 𑄛 𑄝 𑄗 𑄓 */
+ '\0',
+ '\xF0', '\x91', '\x84', '\x96', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\x98', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\x99', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\xA4', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', ' ', '\xF0', '\x91', '\x84', '\xA5', '\xF0', '\x91', '\x84', '\xB3', '\xF0', '\x91', '\x84', '\xA2', /* 𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢 */
+ '\0',
+ '\xE1', '\x8F', '\x86', ' ', '\xE1', '\x8E', '\xBB', ' ', '\xE1', '\x8E', '\xAC', ' ', '\xE1', '\x8F', '\x83', ' ', '\xE1', '\x8E', '\xA4', ' ', '\xE1', '\x8F', '\xA3', ' ', '\xE1', '\x8E', '\xA6', ' ', '\xE1', '\x8F', '\x95', /* Ꮖ Ꮋ Ꭼ Ꮓ Ꭴ Ꮳ Ꭶ Ꮥ */
+ '\0',
+ '\xEA', '\xAE', '\x92', ' ', '\xEA', '\xAE', '\xA4', ' ', '\xEA', '\xAE', '\xB6', ' ', '\xEA', '\xAD', '\xB4', ' ', '\xEA', '\xAD', '\xBE', ' ', '\xEA', '\xAE', '\x97', ' ', '\xEA', '\xAE', '\x9D', ' ', '\xEA', '\xAE', '\xBF', /* ꮒ ꮤ ꮶ ꭴ ꭾ ꮗ ꮝ ꮿ */
+ '\0',
+ '\xEA', '\xAE', '\x96', ' ', '\xEA', '\xAD', '\xBC', ' ', '\xEA', '\xAE', '\x93', ' ', '\xEA', '\xAE', '\xA0', ' ', '\xEA', '\xAE', '\xB3', ' ', '\xEA', '\xAD', '\xB6', ' ', '\xEA', '\xAE', '\xA5', ' ', '\xEA', '\xAE', '\xBB', /* ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ */
+ '\0',
+ '\xE1', '\x8F', '\xB8', ' ', '\xEA', '\xAE', '\x90', ' ', '\xEA', '\xAD', '\xB9', ' ', '\xEA', '\xAD', '\xBB', /* ᏸ ꮐ ꭹ ꭻ */
+ '\0',
+ '\xE2', '\xB2', '\x8C', ' ', '\xE2', '\xB2', '\x8E', ' ', '\xE2', '\xB2', '\xA0', ' ', '\xE2', '\xB3', '\x9E', ' ', '\xE2', '\xB2', '\x9E', ' ', '\xE2', '\xB2', '\x90', ' ', '\xE2', '\xB2', '\xA4', ' ', '\xE2', '\xB3', '\x8A', /* Ⲍ Ⲏ Ⲡ Ⳟ Ⲟ Ⲑ Ⲥ Ⳋ */
+ '\0',
+ '\xE2', '\xB3', '\x90', ' ', '\xE2', '\xB3', '\x98', ' ', '\xE2', '\xB3', '\x9E', ' ', '\xE2', '\xB2', '\x8E', ' ', '\xE2', '\xB2', '\x9E', ' ', '\xE2', '\xB2', '\x90', ' ', '\xE2', '\xB3', '\x9C', ' ', '\xE2', '\xB2', '\xB0', /* Ⳑ Ⳙ Ⳟ Ⲏ Ⲟ Ⲑ Ⳝ Ⲱ */
+ '\0',
+ '\xE2', '\xB2', '\x8D', ' ', '\xE2', '\xB2', '\x8F', ' ', '\xE2', '\xB2', '\xA1', ' ', '\xE2', '\xB3', '\x9F', ' ', '\xE2', '\xB2', '\x9F', ' ', '\xE2', '\xB2', '\x91', ' ', '\xE2', '\xB2', '\xA5', ' ', '\xE2', '\xB3', '\x8B', /* ⲍ ⲏ ⲡ ⳟ ⲟ ⲑ ⲥ ⳋ */
+ '\0',
+ '\xE2', '\xB3', '\x91', ' ', '\xE2', '\xB3', '\x99', ' ', '\xE2', '\xB3', '\x9F', ' ', '\xE2', '\xB2', '\x8F', ' ', '\xE2', '\xB2', '\x9F', ' ', '\xE2', '\xB2', '\x91', ' ', '\xE2', '\xB3', '\x9D', ' ', '\xE2', '\xB3', '\x92', /* ⳑ ⳙ ⳟ ⲏ ⲟ ⲑ ⳝ Ⳓ */
+ '\0',
+ '\xF0', '\x90', '\xA0', '\x8D', ' ', '\xF0', '\x90', '\xA0', '\x99', ' ', '\xF0', '\x90', '\xA0', '\xB3', ' ', '\xF0', '\x90', '\xA0', '\xB1', ' ', '\xF0', '\x90', '\xA0', '\x85', ' ', '\xF0', '\x90', '\xA0', '\x93', ' ', '\xF0', '\x90', '\xA0', '\xA3', ' ', '\xF0', '\x90', '\xA0', '\xA6', /* 𐠍 𐠙 𐠳 𐠱 𐠅 𐠓 𐠣 𐠦 */
+ '\0',
+ '\xF0', '\x90', '\xA0', '\x83', ' ', '\xF0', '\x90', '\xA0', '\x8A', ' ', '\xF0', '\x90', '\xA0', '\x9B', ' ', '\xF0', '\x90', '\xA0', '\xA3', ' ', '\xF0', '\x90', '\xA0', '\xB3', ' ', '\xF0', '\x90', '\xA0', '\xB5', ' ', '\xF0', '\x90', '\xA0', '\x90', /* 𐠃 𐠊 𐠛 𐠣 𐠳 𐠵 𐠐 */
+ '\0',
+ '\xF0', '\x90', '\xA0', '\x88', ' ', '\xF0', '\x90', '\xA0', '\x8F', ' ', '\xF0', '\x90', '\xA0', '\x96', /* 𐠈 𐠏 𐠖 */
+ '\0',
+ '\xD0', '\x91', ' ', '\xD0', '\x92', ' ', '\xD0', '\x95', ' ', '\xD0', '\x9F', ' ', '\xD0', '\x97', ' ', '\xD0', '\x9E', ' ', '\xD0', '\xA1', ' ', '\xD0', '\xAD', /* Б В Е П З О С Э */
+ '\0',
+ '\xD0', '\x91', ' ', '\xD0', '\x92', ' ', '\xD0', '\x95', ' ', '\xD0', '\xA8', ' ', '\xD0', '\x97', ' ', '\xD0', '\x9E', ' ', '\xD0', '\xA1', ' ', '\xD0', '\xAD', /* Б В Е Ш З О С Э */
+ '\0',
+ '\xD1', '\x85', ' ', '\xD0', '\xBF', ' ', '\xD0', '\xBD', ' ', '\xD1', '\x88', ' ', '\xD0', '\xB5', ' ', '\xD0', '\xB7', ' ', '\xD0', '\xBE', ' ', '\xD1', '\x81', /* х п н ш е з о с */
+ '\0',
+ '\xD1', '\x80', ' ', '\xD1', '\x83', ' ', '\xD1', '\x84', /* р у ф */
+ '\0',
+ '\xF0', '\x90', '\x90', '\x82', ' ', '\xF0', '\x90', '\x90', '\x84', ' ', '\xF0', '\x90', '\x90', '\x8B', ' ', '\xF0', '\x90', '\x90', '\x97', ' ', '\xF0', '\x90', '\x90', '\x91', /* 𐐂 𐐄 𐐋 𐐗 𐐑 */
+ '\0',
+ '\xF0', '\x90', '\x90', '\x80', ' ', '\xF0', '\x90', '\x90', '\x82', ' ', '\xF0', '\x90', '\x90', '\x84', ' ', '\xF0', '\x90', '\x90', '\x97', ' ', '\xF0', '\x90', '\x90', '\x9B', /* 𐐀 𐐂 𐐄 𐐗 𐐛 */
+ '\0',
+ '\xF0', '\x90', '\x90', '\xAA', ' ', '\xF0', '\x90', '\x90', '\xAC', ' ', '\xF0', '\x90', '\x90', '\xB3', ' ', '\xF0', '\x90', '\x90', '\xBF', ' ', '\xF0', '\x90', '\x90', '\xB9', /* 𐐪 𐐬 𐐳 𐐿 𐐹 */
+ '\0',
+ '\xF0', '\x90', '\x90', '\xA8', ' ', '\xF0', '\x90', '\x90', '\xAA', ' ', '\xF0', '\x90', '\x90', '\xAC', ' ', '\xF0', '\x90', '\x90', '\xBF', ' ', '\xF0', '\x90', '\x91', '\x83', /* 𐐨 𐐪 𐐬 𐐿 𐑃 */
+ '\0',
+ '\xE0', '\xA4', '\x95', ' ', '\xE0', '\xA4', '\xAE', ' ', '\xE0', '\xA4', '\x85', ' ', '\xE0', '\xA4', '\x86', ' ', '\xE0', '\xA4', '\xA5', ' ', '\xE0', '\xA4', '\xA7', ' ', '\xE0', '\xA4', '\xAD', ' ', '\xE0', '\xA4', '\xB6', /* क म अ आ थ ध भ श */
+ '\0',
+ '\xE0', '\xA4', '\x88', ' ', '\xE0', '\xA4', '\x90', ' ', '\xE0', '\xA4', '\x93', ' ', '\xE0', '\xA4', '\x94', ' ', '\xE0', '\xA4', '\xBF', ' ', '\xE0', '\xA5', '\x80', ' ', '\xE0', '\xA5', '\x8B', ' ', '\xE0', '\xA5', '\x8C', /* ई ऐ ओ औ ि ी ो ौ */
+ '\0',
+ '\xE0', '\xA4', '\x95', ' ', '\xE0', '\xA4', '\xAE', ' ', '\xE0', '\xA4', '\x85', ' ', '\xE0', '\xA4', '\x86', ' ', '\xE0', '\xA4', '\xA5', ' ', '\xE0', '\xA4', '\xA7', ' ', '\xE0', '\xA4', '\xAD', ' ', '\xE0', '\xA4', '\xB6', /* क म अ आ थ ध भ श */
+ '\0',
+ '\xE0', '\xA5', '\x81', ' ', '\xE0', '\xA5', '\x83', /* ु ृ */
+ '\0',
+ '\xE1', '\x88', '\x80', ' ', '\xE1', '\x88', '\x83', ' ', '\xE1', '\x8B', '\x98', ' ', '\xE1', '\x8D', '\x90', ' ', '\xE1', '\x88', '\x9B', ' ', '\xE1', '\x89', '\xA0', ' ', '\xE1', '\x8B', '\x8B', ' ', '\xE1', '\x8B', '\x90', /* ሀ ሃ ዘ ፐ ማ በ ዋ ዐ */
+ '\0',
+ '\xE1', '\x88', '\x88', ' ', '\xE1', '\x88', '\x90', ' ', '\xE1', '\x89', '\xA0', ' ', '\xE1', '\x8B', '\x98', ' ', '\xE1', '\x88', '\x80', ' ', '\xE1', '\x88', '\xAA', ' ', '\xE1', '\x8B', '\x90', ' ', '\xE1', '\x8C', '\xA8', /* ለ ሐ በ ዘ ሀ ሪ ዐ ጨ */
+ '\0',
+ '\xE1', '\x83', '\x92', ' ', '\xE1', '\x83', '\x93', ' ', '\xE1', '\x83', '\x94', ' ', '\xE1', '\x83', '\x95', ' ', '\xE1', '\x83', '\x97', ' ', '\xE1', '\x83', '\x98', ' ', '\xE1', '\x83', '\x9D', ' ', '\xE1', '\x83', '\xA6', /* გ დ ე ვ თ ი ო ღ */
+ '\0',
+ '\xE1', '\x83', '\x90', ' ', '\xE1', '\x83', '\x96', ' ', '\xE1', '\x83', '\x9B', ' ', '\xE1', '\x83', '\xA1', ' ', '\xE1', '\x83', '\xA8', ' ', '\xE1', '\x83', '\xAB', ' ', '\xE1', '\x83', '\xAE', ' ', '\xE1', '\x83', '\x9E', /* ა ზ მ ს შ ძ ხ პ */
+ '\0',
+ '\xE1', '\x83', '\xA1', ' ', '\xE1', '\x83', '\xAE', ' ', '\xE1', '\x83', '\xA5', ' ', '\xE1', '\x83', '\x96', ' ', '\xE1', '\x83', '\x9B', ' ', '\xE1', '\x83', '\xA8', ' ', '\xE1', '\x83', '\xA9', ' ', '\xE1', '\x83', '\xAC', /* ს ხ ქ ზ მ შ ჩ წ */
+ '\0',
+ '\xE1', '\x83', '\x94', ' ', '\xE1', '\x83', '\x95', ' ', '\xE1', '\x83', '\x9F', ' ', '\xE1', '\x83', '\xA2', ' ', '\xE1', '\x83', '\xA3', ' ', '\xE1', '\x83', '\xA4', ' ', '\xE1', '\x83', '\xA5', ' ', '\xE1', '\x83', '\xA7', /* ე ვ ჟ ტ უ ფ ქ ყ */
+ '\0',
+ '\xE1', '\x82', '\xB1', ' ', '\xE1', '\x82', '\xA7', ' ', '\xE1', '\x82', '\xB9', ' ', '\xE1', '\x82', '\xBC', ' ', '\xE1', '\x82', '\xA4', ' ', '\xE1', '\x82', '\xA5', ' ', '\xE1', '\x82', '\xB3', ' ', '\xE1', '\x82', '\xBA', /* Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ */
+ '\0',
+ '\xE1', '\x82', '\xA4', ' ', '\xE1', '\x82', '\xA5', ' ', '\xE1', '\x82', '\xA7', ' ', '\xE1', '\x82', '\xA8', ' ', '\xE1', '\x82', '\xA6', ' ', '\xE1', '\x82', '\xB1', ' ', '\xE1', '\x82', '\xAA', ' ', '\xE1', '\x82', '\xAB', /* Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ */
+ '\0',
+ '\xE2', '\xB4', '\x81', ' ', '\xE2', '\xB4', '\x97', ' ', '\xE2', '\xB4', '\x82', ' ', '\xE2', '\xB4', '\x84', ' ', '\xE2', '\xB4', '\x85', ' ', '\xE2', '\xB4', '\x87', ' ', '\xE2', '\xB4', '\x94', ' ', '\xE2', '\xB4', '\x96', /* ⴁ ⴗ ⴂ ⴄ ⴅ ⴇ ⴔ ⴖ */
+ '\0',
+ '\xE2', '\xB4', '\x88', ' ', '\xE2', '\xB4', '\x8C', ' ', '\xE2', '\xB4', '\x96', ' ', '\xE2', '\xB4', '\x8E', ' ', '\xE2', '\xB4', '\x83', ' ', '\xE2', '\xB4', '\x86', ' ', '\xE2', '\xB4', '\x8B', ' ', '\xE2', '\xB4', '\xA2', /* ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ */
+ '\0',
+ '\xE2', '\xB4', '\x90', ' ', '\xE2', '\xB4', '\x91', ' ', '\xE2', '\xB4', '\x93', ' ', '\xE2', '\xB4', '\x95', ' ', '\xE2', '\xB4', '\x99', ' ', '\xE2', '\xB4', '\x9B', ' ', '\xE2', '\xB4', '\xA1', ' ', '\xE2', '\xB4', '\xA3', /* ⴐ ⴑ ⴓ ⴕ ⴙ ⴛ ⴡ ⴣ */
+ '\0',
+ '\xE2', '\xB4', '\x84', ' ', '\xE2', '\xB4', '\x85', ' ', '\xE2', '\xB4', '\x94', ' ', '\xE2', '\xB4', '\x95', ' ', '\xE2', '\xB4', '\x81', ' ', '\xE2', '\xB4', '\x82', ' ', '\xE2', '\xB4', '\x98', ' ', '\xE2', '\xB4', '\x9D', /* ⴄ ⴅ ⴔ ⴕ ⴁ ⴂ ⴘ ⴝ */
+ '\0',
+ '\xE1', '\xB2', '\x9C', ' ', '\xE1', '\xB2', '\x9F', ' ', '\xE1', '\xB2', '\xB3', ' ', '\xE1', '\xB2', '\xB8', ' ', '\xE1', '\xB2', '\x92', ' ', '\xE1', '\xB2', '\x94', ' ', '\xE1', '\xB2', '\x9D', ' ', '\xE1', '\xB2', '\xB4', /* Ნ Ჟ Ჳ Ჸ Გ Ე Ო Ჴ */
+ '\0',
+ '\xE1', '\xB2', '\x98', ' ', '\xE1', '\xB2', '\xB2', ' ', '\xE1', '\xB2', '\x9D', ' ', '\xE1', '\xB2', '\xA9', ' ', '\xE1', '\xB2', '\x9B', ' ', '\xE1', '\xB2', '\xA8', ' ', '\xE1', '\xB2', '\xAF', ' ', '\xE1', '\xB2', '\xBD', /* Ი Ჲ Ო Ჩ Მ Შ Ჯ Ჽ */
+ '\0',
+ '\xE2', '\xB0', '\x85', ' ', '\xE2', '\xB0', '\x94', ' ', '\xE2', '\xB0', '\xAA', ' ', '\xE2', '\xB0', '\x84', ' ', '\xE2', '\xB0', '\x82', ' ', '\xE2', '\xB0', '\x8A', ' ', '\xE2', '\xB0', '\xAB', ' ', '\xE2', '\xB0', '\x8B', /* Ⰵ Ⱄ Ⱚ Ⰴ Ⰲ Ⰺ Ⱛ Ⰻ */
+ '\0',
+ '\xE2', '\xB0', '\x85', ' ', '\xE2', '\xB0', '\x84', ' ', '\xE2', '\xB0', '\x82', ' ', '\xE2', '\xB0', '\xAA', ' ', '\xE2', '\xB0', '\x9E', ' ', '\xE2', '\xB0', '\xA1', ' ', '\xE2', '\xB0', '\x8A', ' ', '\xE2', '\xB0', '\x94', /* Ⰵ Ⰴ Ⰲ Ⱚ Ⱎ Ⱑ Ⰺ Ⱄ */
+ '\0',
+ '\xE2', '\xB0', '\xB5', ' ', '\xE2', '\xB1', '\x84', ' ', '\xE2', '\xB1', '\x9A', ' ', '\xE2', '\xB0', '\xB4', ' ', '\xE2', '\xB0', '\xB2', ' ', '\xE2', '\xB0', '\xBA', ' ', '\xE2', '\xB1', '\x9B', ' ', '\xE2', '\xB0', '\xBB', /* ⰵ ⱄ ⱚ ⰴ ⰲ ⰺ ⱛ ⰻ */
+ '\0',
+ '\xE2', '\xB0', '\xB5', ' ', '\xE2', '\xB0', '\xB4', ' ', '\xE2', '\xB0', '\xB2', ' ', '\xE2', '\xB1', '\x9A', ' ', '\xE2', '\xB1', '\x8E', ' ', '\xE2', '\xB1', '\x91', ' ', '\xE2', '\xB0', '\xBA', ' ', '\xE2', '\xB1', '\x84', /* ⰵ ⰴ ⰲ ⱚ ⱎ ⱑ ⰺ ⱄ */
+ '\0',
+ '\xF0', '\x90', '\x8C', '\xB2', ' ', '\xF0', '\x90', '\x8C', '\xB6', ' ', '\xF0', '\x90', '\x8D', '\x80', ' ', '\xF0', '\x90', '\x8D', '\x84', ' ', '\xF0', '\x90', '\x8C', '\xB4', ' ', '\xF0', '\x90', '\x8D', '\x83', ' ', '\xF0', '\x90', '\x8D', '\x88', ' ', '\xF0', '\x90', '\x8C', '\xBE', /* 𐌲 𐌶 𐍀 𐍄 𐌴 𐍃 𐍈 𐌾 */
+ '\0',
+ '\xF0', '\x90', '\x8C', '\xB6', ' ', '\xF0', '\x90', '\x8C', '\xB4', ' ', '\xF0', '\x90', '\x8D', '\x83', ' ', '\xF0', '\x90', '\x8D', '\x88', /* 𐌶 𐌴 𐍃 𐍈 */
+ '\0',
+ '\xCE', '\x93', ' ', '\xCE', '\x92', ' ', '\xCE', '\x95', ' ', '\xCE', '\x96', ' ', '\xCE', '\x98', ' ', '\xCE', '\x9F', ' ', '\xCE', '\xA9', /* Γ Β Ε Ζ Θ Ο Ω */
+ '\0',
+ '\xCE', '\x92', ' ', '\xCE', '\x94', ' ', '\xCE', '\x96', ' ', '\xCE', '\x9E', ' ', '\xCE', '\x98', ' ', '\xCE', '\x9F', /* Β Δ Ζ Ξ Θ Ο */
+ '\0',
+ '\xCE', '\xB2', ' ', '\xCE', '\xB8', ' ', '\xCE', '\xB4', ' ', '\xCE', '\xB6', ' ', '\xCE', '\xBB', ' ', '\xCE', '\xBE', /* β θ δ ζ λ ξ */
+ '\0',
+ '\xCE', '\xB1', ' ', '\xCE', '\xB5', ' ', '\xCE', '\xB9', ' ', '\xCE', '\xBF', ' ', '\xCF', '\x80', ' ', '\xCF', '\x83', ' ', '\xCF', '\x84', ' ', '\xCF', '\x89', /* α ε ι ο π σ τ ω */
+ '\0',
+ '\xCE', '\xB2', ' ', '\xCE', '\xB3', ' ', '\xCE', '\xB7', ' ', '\xCE', '\xBC', ' ', '\xCF', '\x81', ' ', '\xCF', '\x86', ' ', '\xCF', '\x87', ' ', '\xCF', '\x88', /* β γ η μ ρ φ χ ψ */
+ '\0',
+ '\xE0', '\xAA', '\xA4', ' ', '\xE0', '\xAA', '\xA8', ' ', '\xE0', '\xAA', '\x8B', ' ', '\xE0', '\xAA', '\x8C', ' ', '\xE0', '\xAA', '\x9B', ' ', '\xE0', '\xAA', '\x9F', ' ', '\xE0', '\xAA', '\xB0', ' ', '\xE0', '\xAB', '\xA6', /* ત ન ઋ ઌ છ ટ ર ૦ */
+ '\0',
+ '\xE0', '\xAA', '\x96', ' ', '\xE0', '\xAA', '\x97', ' ', '\xE0', '\xAA', '\x98', ' ', '\xE0', '\xAA', '\x9E', ' ', '\xE0', '\xAA', '\x87', ' ', '\xE0', '\xAA', '\x88', ' ', '\xE0', '\xAA', '\xA0', ' ', '\xE0', '\xAA', '\x9C', /* ખ ગ ઘ ઞ ઇ ઈ ઠ જ */
+ '\0',
+ '\xE0', '\xAA', '\x88', ' ', '\xE0', '\xAA', '\x8A', ' ', '\xE0', '\xAA', '\xBF', ' ', '\xE0', '\xAB', '\x80', ' ', '\xE0', '\xAA', '\xB2', '\xE0', '\xAB', '\x80', ' ', '\xE0', '\xAA', '\xB6', '\xE0', '\xAB', '\x8D', '\xE0', '\xAA', '\x9A', '\xE0', '\xAA', '\xBF', ' ', '\xE0', '\xAA', '\x9C', '\xE0', '\xAA', '\xBF', ' ', '\xE0', '\xAA', '\xB8', '\xE0', '\xAB', '\x80', /* ઈ ઊ િ ી લી શ્ચિ જિ સી */
+ '\0',
+ '\xE0', '\xAB', '\x81', ' ', '\xE0', '\xAB', '\x83', ' ', '\xE0', '\xAB', '\x84', ' ', '\xE0', '\xAA', '\x96', '\xE0', '\xAB', '\x81', ' ', '\xE0', '\xAA', '\x9B', '\xE0', '\xAB', '\x83', ' ', '\xE0', '\xAA', '\x9B', '\xE0', '\xAB', '\x84', /* ુ ૃ ૄ ખુ છૃ છૄ */
+ '\0',
+ '\xE0', '\xAB', '\xA6', ' ', '\xE0', '\xAB', '\xA7', ' ', '\xE0', '\xAB', '\xA8', ' ', '\xE0', '\xAB', '\xA9', ' ', '\xE0', '\xAB', '\xAD', /* ૦ ૧ ૨ ૩ ૭ */
+ '\0',
+ '\xE0', '\xA8', '\x95', ' ', '\xE0', '\xA8', '\x97', ' ', '\xE0', '\xA8', '\x99', ' ', '\xE0', '\xA8', '\x9A', ' ', '\xE0', '\xA8', '\x9C', ' ', '\xE0', '\xA8', '\xA4', ' ', '\xE0', '\xA8', '\xA7', ' ', '\xE0', '\xA8', '\xB8', /* ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ */
+ '\0',
+ '\xE0', '\xA8', '\x95', ' ', '\xE0', '\xA8', '\x97', ' ', '\xE0', '\xA8', '\x99', ' ', '\xE0', '\xA8', '\x9A', ' ', '\xE0', '\xA8', '\x9C', ' ', '\xE0', '\xA8', '\xA4', ' ', '\xE0', '\xA8', '\xA7', ' ', '\xE0', '\xA8', '\xB8', /* ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ */
+ '\0',
+ '\xE0', '\xA8', '\x87', ' ', '\xE0', '\xA8', '\x88', ' ', '\xE0', '\xA8', '\x89', ' ', '\xE0', '\xA8', '\x8F', ' ', '\xE0', '\xA8', '\x93', ' ', '\xE0', '\xA9', '\xB3', ' ', '\xE0', '\xA8', '\xBF', ' ', '\xE0', '\xA9', '\x80', /* ਇ ਈ ਉ ਏ ਓ ੳ ਿ ੀ */
+ '\0',
+ '\xE0', '\xA8', '\x85', ' ', '\xE0', '\xA8', '\x8F', ' ', '\xE0', '\xA8', '\x93', ' ', '\xE0', '\xA8', '\x97', ' ', '\xE0', '\xA8', '\x9C', ' ', '\xE0', '\xA8', '\xA0', ' ', '\xE0', '\xA8', '\xB0', ' ', '\xE0', '\xA8', '\xB8', /* ਅ ਏ ਓ ਗ ਜ ਠ ਰ ਸ */
+ '\0',
+ '\xE0', '\xA9', '\xA6', ' ', '\xE0', '\xA9', '\xA7', ' ', '\xE0', '\xA9', '\xA8', ' ', '\xE0', '\xA9', '\xA9', ' ', '\xE0', '\xA9', '\xAD', /* ੦ ੧ ੨ ੩ ੭ */
+ '\0',
+ '\xD7', '\x91', ' ', '\xD7', '\x93', ' ', '\xD7', '\x94', ' ', '\xD7', '\x97', ' ', '\xD7', '\x9A', ' ', '\xD7', '\x9B', ' ', '\xD7', '\x9D', ' ', '\xD7', '\xA1', /* ב ד ה ח ך כ ם ס */
+ '\0',
+ '\xD7', '\x91', ' ', '\xD7', '\x98', ' ', '\xD7', '\x9B', ' ', '\xD7', '\x9D', ' ', '\xD7', '\xA1', ' ', '\xD7', '\xA6', /* ב ט כ ם ס צ */
+ '\0',
+ '\xD7', '\xA7', ' ', '\xD7', '\x9A', ' ', '\xD7', '\x9F', ' ', '\xD7', '\xA3', ' ', '\xD7', '\xA5', /* ק ך ן ף ץ */
+ '\0',
+ '\xE0', '\xB2', '\x87', ' ', '\xE0', '\xB2', '\x8A', ' ', '\xE0', '\xB2', '\x90', ' ', '\xE0', '\xB2', '\xA3', ' ', '\xE0', '\xB2', '\xB8', '\xE0', '\xB2', '\xBE', ' ', '\xE0', '\xB2', '\xA8', '\xE0', '\xB2', '\xBE', ' ', '\xE0', '\xB2', '\xA6', '\xE0', '\xB2', '\xBE', ' ', '\xE0', '\xB2', '\xB0', '\xE0', '\xB2', '\xBE', /* ಇ ಊ ಐ ಣ ಸಾ ನಾ ದಾ ರಾ */
+ '\0',
+ '\xE0', '\xB2', '\x85', ' ', '\xE0', '\xB2', '\x89', ' ', '\xE0', '\xB2', '\x8E', ' ', '\xE0', '\xB2', '\xB2', ' ', '\xE0', '\xB3', '\xA6', ' ', '\xE0', '\xB3', '\xA8', ' ', '\xE0', '\xB3', '\xAC', ' ', '\xE0', '\xB3', '\xAD', /* ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭ */
+ '\0',
+ '\xEA', '\xA4', '\x85', ' ', '\xEA', '\xA4', '\x8F', ' ', '\xEA', '\xA4', '\x81', ' ', '\xEA', '\xA4', '\x8B', ' ', '\xEA', '\xA4', '\x80', ' ', '\xEA', '\xA4', '\x8D', /* ꤅ ꤏ ꤁ ꤋ ꤀ ꤍ */
+ '\0',
+ '\xEA', '\xA4', '\x88', ' ', '\xEA', '\xA4', '\x98', ' ', '\xEA', '\xA4', '\x80', ' ', '\xEA', '\xA4', '\x8D', ' ', '\xEA', '\xA4', '\xA2', /* ꤈ ꤘ ꤀ ꤍ ꤢ */
+ '\0',
+ '\xEA', '\xA4', '\x96', ' ', '\xEA', '\xA4', '\xA1', /* ꤖ ꤡ */
+ '\0',
+ '\xEA', '\xA4', '\x91', ' ', '\xEA', '\xA4', '\x9C', ' ', '\xEA', '\xA4', '\x9E', /* ꤑ ꤜ ꤞ */
+ '\0',
+ '\xEA', '\xA4', '\x91', '\xEA', '\xA4', '\xAC', ' ', '\xEA', '\xA4', '\x9C', '\xEA', '\xA4', '\xAD', ' ', '\xEA', '\xA4', '\x94', '\xEA', '\xA4', '\xAC', /* ꤑ꤬ ꤜ꤭ ꤔ꤬ */
+ '\0',
+ '\xE1', '\x9E', '\x81', ' ', '\xE1', '\x9E', '\x91', ' ', '\xE1', '\x9E', '\x93', ' ', '\xE1', '\x9E', '\xA7', ' ', '\xE1', '\x9E', '\xA9', ' ', '\xE1', '\x9E', '\xB6', /* ខ ទ ន ឧ ឩ ា */
+ '\0',
+ '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x80', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x81', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x82', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x90', /* ក្ក ក្ខ ក្គ ក្ថ */
+ '\0',
+ '\xE1', '\x9E', '\x81', ' ', '\xE1', '\x9E', '\x83', ' ', '\xE1', '\x9E', '\x85', ' ', '\xE1', '\x9E', '\x8B', ' ', '\xE1', '\x9E', '\x94', ' ', '\xE1', '\x9E', '\x98', ' ', '\xE1', '\x9E', '\x99', ' ', '\xE1', '\x9E', '\xB2', /* ខ ឃ ច ឋ ប ម យ ឲ */
+ '\0',
+ '\xE1', '\x9E', '\x8F', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x9A', ' ', '\xE1', '\x9E', '\x9A', '\xE1', '\x9F', '\x80', ' ', '\xE1', '\x9E', '\xB2', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x99', ' ', '\xE1', '\x9E', '\xA2', '\xE1', '\x9E', '\xBF', /* ត្រ រៀ ឲ្យ អឿ */
+ '\0',
+ '\xE1', '\x9E', '\x93', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x8F', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x9A', '\xE1', '\x9F', '\x83', ' ', '\xE1', '\x9E', '\x84', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x81', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x99', ' ', '\xE1', '\x9E', '\x80', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x94', '\xE1', '\x9F', '\x80', ' ', '\xE1', '\x9E', '\x85', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x9A', '\xE1', '\x9F', '\x80', ' ', '\xE1', '\x9E', '\x93', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x8F', '\xE1', '\x9E', '\xBF', ' ', '\xE1', '\x9E', '\x9B', '\xE1', '\x9F', '\x92', '\xE1', '\x9E', '\x94', '\xE1', '\x9E', '\xBF', /* ន្ត្រៃ ង្ខ្យ ក្បៀ ច្រៀ ន្តឿ ល្បឿ */
+ '\0',
+ '\xE1', '\xA7', '\xA0', ' ', '\xE1', '\xA7', '\xA1', /* ᧠ ᧡ */
+ '\0',
+ '\xE1', '\xA7', '\xB6', ' ', '\xE1', '\xA7', '\xB9', /* ᧶ ᧹ */
+ '\0',
+ '\xE0', '\xBA', '\xB2', ' ', '\xE0', '\xBA', '\x94', ' ', '\xE0', '\xBA', '\xAD', ' ', '\xE0', '\xBA', '\xA1', ' ', '\xE0', '\xBA', '\xA5', ' ', '\xE0', '\xBA', '\xA7', ' ', '\xE0', '\xBA', '\xA3', ' ', '\xE0', '\xBA', '\x87', /* າ ດ ອ ມ ລ ວ ຣ ງ */
+ '\0',
+ '\xE0', '\xBA', '\xB2', ' ', '\xE0', '\xBA', '\xAD', ' ', '\xE0', '\xBA', '\x9A', ' ', '\xE0', '\xBA', '\x8D', ' ', '\xE0', '\xBA', '\xA3', ' ', '\xE0', '\xBA', '\xAE', ' ', '\xE0', '\xBA', '\xA7', ' ', '\xE0', '\xBA', '\xA2', /* າ ອ ບ ຍ ຣ ຮ ວ ຢ */
+ '\0',
+ '\xE0', '\xBA', '\x9B', ' ', '\xE0', '\xBA', '\xA2', ' ', '\xE0', '\xBA', '\x9F', ' ', '\xE0', '\xBA', '\x9D', /* ປ ຢ ຟ ຝ */
+ '\0',
+ '\xE0', '\xBB', '\x82', ' ', '\xE0', '\xBB', '\x84', ' ', '\xE0', '\xBB', '\x83', /* ໂ ໄ ໃ */
+ '\0',
+ '\xE0', '\xBA', '\x87', ' ', '\xE0', '\xBA', '\x8A', ' ', '\xE0', '\xBA', '\x96', ' ', '\xE0', '\xBA', '\xBD', ' ', '\xE0', '\xBB', '\x86', ' ', '\xE0', '\xBA', '\xAF', /* ງ ຊ ຖ ຽ ໆ ຯ */
+ '\0',
+ 'T', ' ', 'H', ' ', 'E', ' ', 'Z', ' ', 'O', ' ', 'C', ' ', 'Q', ' ', 'S', /* T H E Z O C Q S */
+ '\0',
+ 'H', ' ', 'E', ' ', 'Z', ' ', 'L', ' ', 'O', ' ', 'C', ' ', 'U', ' ', 'S', /* H E Z L O C U S */
+ '\0',
+ 'f', ' ', 'i', ' ', 'j', ' ', 'k', ' ', 'd', ' ', 'b', ' ', 'h', /* f i j k d b h */
+ '\0',
+ 'u', ' ', 'v', ' ', 'x', ' ', 'z', ' ', 'o', ' ', 'e', ' ', 's', ' ', 'c', /* u v x z o e s c */
+ '\0',
+ 'n', ' ', 'r', ' ', 'x', ' ', 'z', ' ', 'o', ' ', 'e', ' ', 's', ' ', 'c', /* n r x z o e s c */
+ '\0',
+ 'p', ' ', 'q', ' ', 'g', ' ', 'j', ' ', 'y', /* p q g j y */
+ '\0',
+ '\xE2', '\x82', '\x80', ' ', '\xE2', '\x82', '\x83', ' ', '\xE2', '\x82', '\x85', ' ', '\xE2', '\x82', '\x87', ' ', '\xE2', '\x82', '\x88', /* ₀ ₃ ₅ ₇ ₈ */
+ '\0',
+ '\xE2', '\x82', '\x80', ' ', '\xE2', '\x82', '\x81', ' ', '\xE2', '\x82', '\x82', ' ', '\xE2', '\x82', '\x83', ' ', '\xE2', '\x82', '\x88', /* ₀ ₁ ₂ ₃ ₈ */
+ '\0',
+ '\xE1', '\xB5', '\xA2', ' ', '\xE2', '\xB1', '\xBC', ' ', '\xE2', '\x82', '\x95', ' ', '\xE2', '\x82', '\x96', ' ', '\xE2', '\x82', '\x97', /* ᵢ ⱼ ₕ ₖ ₗ */
+ '\0',
+ '\xE2', '\x82', '\x90', ' ', '\xE2', '\x82', '\x91', ' ', '\xE2', '\x82', '\x92', ' ', '\xE2', '\x82', '\x93', ' ', '\xE2', '\x82', '\x99', ' ', '\xE2', '\x82', '\x9B', ' ', '\xE1', '\xB5', '\xA5', ' ', '\xE1', '\xB5', '\xA4', ' ', '\xE1', '\xB5', '\xA3', /* ₐ ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ */
+ '\0',
+ '\xE1', '\xB5', '\xA6', ' ', '\xE1', '\xB5', '\xA7', ' ', '\xE1', '\xB5', '\xA8', ' ', '\xE1', '\xB5', '\xA9', ' ', '\xE2', '\x82', '\x9A', /* ᵦ ᵧ ᵨ ᵩ ₚ */
+ '\0',
+ '\xE2', '\x81', '\xB0', ' ', '\xC2', '\xB3', ' ', '\xE2', '\x81', '\xB5', ' ', '\xE2', '\x81', '\xB7', ' ', '\xE1', '\xB5', '\x80', ' ', '\xE1', '\xB4', '\xB4', ' ', '\xE1', '\xB4', '\xB1', ' ', '\xE1', '\xB4', '\xBC', /* ⁰ ³ ⁵ ⁷ ᵀ ᴴ ᴱ ᴼ */
+ '\0',
+ '\xE2', '\x81', '\xB0', ' ', '\xC2', '\xB9', ' ', '\xC2', '\xB2', ' ', '\xC2', '\xB3', ' ', '\xE1', '\xB4', '\xB1', ' ', '\xE1', '\xB4', '\xB8', ' ', '\xE1', '\xB4', '\xBC', ' ', '\xE1', '\xB5', '\x81', /* ⁰ ¹ ² ³ ᴱ ᴸ ᴼ ᵁ */
+ '\0',
+ '\xE1', '\xB5', '\x87', ' ', '\xE1', '\xB5', '\x88', ' ', '\xE1', '\xB5', '\x8F', ' ', '\xCA', '\xB0', ' ', '\xCA', '\xB2', ' ', '\xE1', '\xB6', '\xA0', ' ', '\xE2', '\x81', '\xB1', /* ᵇ ᵈ ᵏ ʰ ʲ ᶠ ⁱ */
+ '\0',
+ '\xE1', '\xB5', '\x89', ' ', '\xE1', '\xB5', '\x92', ' ', '\xCA', '\xB3', ' ', '\xCB', '\xA2', ' ', '\xCB', '\xA3', ' ', '\xE1', '\xB6', '\x9C', ' ', '\xE1', '\xB6', '\xBB', /* ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ */
+ '\0',
+ '\xE1', '\xB5', '\x96', ' ', '\xCA', '\xB8', ' ', '\xE1', '\xB5', '\x8D', /* ᵖ ʸ ᵍ */
+ '\0',
+ '\xEA', '\x93', '\xA1', ' ', '\xEA', '\x93', '\xA7', ' ', '\xEA', '\x93', '\xB1', ' ', '\xEA', '\x93', '\xB6', ' ', '\xEA', '\x93', '\xA9', ' ', '\xEA', '\x93', '\x9A', ' ', '\xEA', '\x93', '\xB5', ' ', '\xEA', '\x93', '\xB3', /* ꓡ ꓧ ꓱ ꓶ ꓩ ꓚ ꓵ ꓳ */
+ '\0',
+ '\xEA', '\x93', '\x95', ' ', '\xEA', '\x93', '\x9C', ' ', '\xEA', '\x93', '\x9E', ' ', '\xEA', '\x93', '\xA1', ' ', '\xEA', '\x93', '\x9B', ' ', '\xEA', '\x93', '\xA2', ' ', '\xEA', '\x93', '\xB3', ' ', '\xEA', '\x93', '\xB4', /* ꓕ ꓜ ꓞ ꓡ ꓛ ꓢ ꓳ ꓴ */
+ '\0',
+ '\xE0', '\xB4', '\x92', ' ', '\xE0', '\xB4', '\x9F', ' ', '\xE0', '\xB4', '\xA0', ' ', '\xE0', '\xB4', '\xB1', ' ', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xAA', ' ', '\xE0', '\xB4', '\x9A', '\xE0', '\xB5', '\x8D', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xAA', '\xE0', '\xB5', '\x8D', '\xE0', '\xB4', '\xAA', /* ഒ ട ഠ റ ച പ ച്ച പ്പ */
+ '\0',
+ '\xE0', '\xB4', '\x9F', ' ', '\xE0', '\xB4', '\xA0', ' ', '\xE0', '\xB4', '\xA7', ' ', '\xE0', '\xB4', '\xB6', ' ', '\xE0', '\xB4', '\x98', ' ', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xA5', ' ', '\xE0', '\xB4', '\xB2', /* ട ഠ ധ ശ ഘ ച ഥ ല */
+ '\0',
+ '\xE1', '\x80', '\x81', ' ', '\xE1', '\x80', '\x82', ' ', '\xE1', '\x80', '\x84', ' ', '\xE1', '\x80', '\x92', ' ', '\xE1', '\x80', '\x9D', ' ', '\xE1', '\x81', '\xA5', ' ', '\xE1', '\x81', '\x8A', ' ', '\xE1', '\x81', '\x8B', /* ခ ဂ င ဒ ဝ ၥ ၊ ။ */
+ '\0',
+ '\xE1', '\x80', '\x84', ' ', '\xE1', '\x80', '\x8E', ' ', '\xE1', '\x80', '\x92', ' ', '\xE1', '\x80', '\x95', ' ', '\xE1', '\x80', '\x97', ' ', '\xE1', '\x80', '\x9D', ' ', '\xE1', '\x81', '\x8A', ' ', '\xE1', '\x81', '\x8B', /* င ဎ ဒ ပ ဗ ဝ ၊ ။ */
+ '\0',
+ '\xE1', '\x80', '\xA9', ' ', '\xE1', '\x80', '\xBC', ' ', '\xE1', '\x81', '\x8D', ' ', '\xE1', '\x81', '\x8F', ' ', '\xE1', '\x81', '\x86', ' ', '\xE1', '\x80', '\xAB', ' ', '\xE1', '\x80', '\xAD', /* ဩ ြ ၍ ၏ ၆ ါ ိ */
+ '\0',
+ '\xE1', '\x80', '\x89', ' ', '\xE1', '\x80', '\x8A', ' ', '\xE1', '\x80', '\xA5', ' ', '\xE1', '\x80', '\xA9', ' ', '\xE1', '\x80', '\xA8', ' ', '\xE1', '\x81', '\x82', ' ', '\xE1', '\x81', '\x85', ' ', '\xE1', '\x81', '\x89', /* ဉ ည ဥ ဩ ဨ ၂ ၅ ၉ */
+ '\0',
+ '\xDF', '\x90', ' ', '\xDF', '\x89', ' ', '\xDF', '\x92', ' ', '\xDF', '\x9F', ' ', '\xDF', '\x96', ' ', '\xDF', '\x9C', ' ', '\xDF', '\xA0', ' ', '\xDF', '\xA5', /* ߐ ߉ ߒ ߟ ߖ ߜ ߠ ߥ */
+ '\0',
+ '\xDF', '\x80', ' ', '\xDF', '\x98', ' ', '\xDF', '\xA1', ' ', '\xDF', '\xA0', ' ', '\xDF', '\xA5', /* ߀ ߘ ߡ ߠ ߥ */
+ '\0',
+ '\xDF', '\x8F', ' ', '\xDF', '\x9B', ' ', '\xDF', '\x8B', /* ߏ ߛ ߋ */
+ '\0',
+ '\xDF', '\x8E', ' ', '\xDF', '\x8F', ' ', '\xDF', '\x9B', ' ', '\xDF', '\x8B', /* ߎ ߏ ߛ ߋ */
+ '\0',
+ '\xE1', '\xB1', '\x9B', ' ', '\xE1', '\xB1', '\x9C', ' ', '\xE1', '\xB1', '\x9D', ' ', '\xE1', '\xB1', '\xA1', ' ', '\xE1', '\xB1', '\xA2', ' ', '\xE1', '\xB1', '\xA5', /* ᱛ ᱜ ᱝ ᱡ ᱢ ᱥ */
+ '\0',
+ '\xF0', '\x90', '\xB0', '\x97', ' ', '\xF0', '\x90', '\xB0', '\x98', ' ', '\xF0', '\x90', '\xB0', '\xA7', /* 𐰗 𐰘 𐰧 */
+ '\0',
+ '\xF0', '\x90', '\xB0', '\x89', ' ', '\xF0', '\x90', '\xB0', '\x97', ' ', '\xF0', '\x90', '\xB0', '\xA6', ' ', '\xF0', '\x90', '\xB0', '\xA7', /* 𐰉 𐰗 𐰦 𐰧 */
+ '\0',
+ '\xF0', '\x90', '\x92', '\xBE', ' ', '\xF0', '\x90', '\x93', '\x8D', ' ', '\xF0', '\x90', '\x93', '\x92', ' ', '\xF0', '\x90', '\x93', '\x93', ' ', '\xF0', '\x90', '\x92', '\xBB', ' ', '\xF0', '\x90', '\x93', '\x82', ' ', '\xF0', '\x90', '\x92', '\xB5', ' ', '\xF0', '\x90', '\x93', '\x86', /* 𐒾 𐓍 𐓒 𐓓 𐒻 𐓂 𐒵 𐓆 */
+ '\0',
+ '\xF0', '\x90', '\x92', '\xB0', ' ', '\xF0', '\x90', '\x93', '\x8D', ' ', '\xF0', '\x90', '\x93', '\x82', ' ', '\xF0', '\x90', '\x92', '\xBF', ' ', '\xF0', '\x90', '\x93', '\x8E', ' ', '\xF0', '\x90', '\x92', '\xB9', /* 𐒰 𐓍 𐓂 𐒿 𐓎 𐒹 */
+ '\0',
+ '\xF0', '\x90', '\x92', '\xBC', ' ', '\xF0', '\x90', '\x92', '\xBD', ' ', '\xF0', '\x90', '\x92', '\xBE', /* 𐒼 𐒽 𐒾 */
+ '\0',
+ '\xF0', '\x90', '\x93', '\xB5', ' ', '\xF0', '\x90', '\x93', '\xB6', ' ', '\xF0', '\x90', '\x93', '\xBA', ' ', '\xF0', '\x90', '\x93', '\xBB', ' ', '\xF0', '\x90', '\x93', '\x9D', ' ', '\xF0', '\x90', '\x93', '\xA3', ' ', '\xF0', '\x90', '\x93', '\xAA', ' ', '\xF0', '\x90', '\x93', '\xAE', /* 𐓵 𐓶 𐓺 𐓻 𐓝 𐓣 𐓪 𐓮 */
+ '\0',
+ '\xF0', '\x90', '\x93', '\x98', ' ', '\xF0', '\x90', '\x93', '\x9A', ' ', '\xF0', '\x90', '\x93', '\xA3', ' ', '\xF0', '\x90', '\x93', '\xB5', ' ', '\xF0', '\x90', '\x93', '\xA1', ' ', '\xF0', '\x90', '\x93', '\xA7', ' ', '\xF0', '\x90', '\x93', '\xAA', ' ', '\xF0', '\x90', '\x93', '\xB6', /* 𐓘 𐓚 𐓣 𐓵 𐓡 𐓧 𐓪 𐓶 */
+ '\0',
+ '\xF0', '\x90', '\x93', '\xA4', ' ', '\xF0', '\x90', '\x93', '\xA6', ' ', '\xF0', '\x90', '\x93', '\xB8', ' ', '\xF0', '\x90', '\x93', '\xB9', ' ', '\xF0', '\x90', '\x93', '\x9B', /* 𐓤 𐓦 𐓸 𐓹 𐓛 */
+ '\0',
+ '\xF0', '\x90', '\x93', '\xA4', ' ', '\xF0', '\x90', '\x93', '\xA5', ' ', '\xF0', '\x90', '\x93', '\xA6', /* 𐓤 𐓥 𐓦 */
+ '\0',
+ '\xF0', '\x90', '\x92', '\x86', ' ', '\xF0', '\x90', '\x92', '\x89', ' ', '\xF0', '\x90', '\x92', '\x90', ' ', '\xF0', '\x90', '\x92', '\x92', ' ', '\xF0', '\x90', '\x92', '\x98', ' ', '\xF0', '\x90', '\x92', '\x9B', ' ', '\xF0', '\x90', '\x92', '\xA0', ' ', '\xF0', '\x90', '\x92', '\xA3', /* 𐒆 𐒉 𐒐 𐒒 𐒘 𐒛 𐒠 𐒣 */
+ '\0',
+ '\xF0', '\x90', '\x92', '\x80', ' ', '\xF0', '\x90', '\x92', '\x82', ' ', '\xF0', '\x90', '\x92', '\x86', ' ', '\xF0', '\x90', '\x92', '\x88', ' ', '\xF0', '\x90', '\x92', '\x8A', ' ', '\xF0', '\x90', '\x92', '\x92', ' ', '\xF0', '\x90', '\x92', '\xA0', ' ', '\xF0', '\x90', '\x92', '\xA9', /* 𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩 */
+ '\0',
+ '\xEA', '\xA2', '\x9C', ' ', '\xEA', '\xA2', '\x9E', ' ', '\xEA', '\xA2', '\xB3', ' ', '\xEA', '\xA2', '\x82', ' ', '\xEA', '\xA2', '\x96', ' ', '\xEA', '\xA2', '\x92', ' ', '\xEA', '\xA2', '\x9D', ' ', '\xEA', '\xA2', '\x9B', /* ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ */
+ '\0',
+ '\xEA', '\xA2', '\x82', ' ', '\xEA', '\xA2', '\xA8', ' ', '\xEA', '\xA2', '\xBA', ' ', '\xEA', '\xA2', '\xA4', ' ', '\xEA', '\xA2', '\x8E', /* ꢂ ꢨ ꢺ ꢤ ꢎ */
+ '\0',
+ '\xF0', '\x90', '\x91', '\x95', ' ', '\xF0', '\x90', '\x91', '\x99', /* 𐑕 𐑙 */
+ '\0',
+ '\xF0', '\x90', '\x91', '\x94', ' ', '\xF0', '\x90', '\x91', '\x96', ' ', '\xF0', '\x90', '\x91', '\x97', ' ', '\xF0', '\x90', '\x91', '\xB9', ' ', '\xF0', '\x90', '\x91', '\xBB', /* 𐑔 𐑖 𐑗 𐑹 𐑻 */
+ '\0',
+ '\xF0', '\x90', '\x91', '\x9F', ' ', '\xF0', '\x90', '\x91', '\xA3', /* 𐑟 𐑣 */
+ '\0',
+ '\xF0', '\x90', '\x91', '\xB1', ' ', '\xF0', '\x90', '\x91', '\xB2', ' ', '\xF0', '\x90', '\x91', '\xB3', ' ', '\xF0', '\x90', '\x91', '\xB4', ' ', '\xF0', '\x90', '\x91', '\xB8', ' ', '\xF0', '\x90', '\x91', '\xBA', ' ', '\xF0', '\x90', '\x91', '\xBC', /* 𐑱 𐑲 𐑳 𐑴 𐑸 𐑺 𐑼 */
+ '\0',
+ '\xF0', '\x90', '\x91', '\xB4', ' ', '\xF0', '\x90', '\x91', '\xBB', ' ', '\xF0', '\x90', '\x91', '\xB9', /* 𐑴 𐑻 𐑹 */
+ '\0',
+ '\xE0', '\xB6', '\x89', ' ', '\xE0', '\xB6', '\x9A', ' ', '\xE0', '\xB6', '\x9D', ' ', '\xE0', '\xB6', '\xB3', ' ', '\xE0', '\xB6', '\xB4', ' ', '\xE0', '\xB6', '\xBA', ' ', '\xE0', '\xB6', '\xBD', ' ', '\xE0', '\xB7', '\x86', /* ඉ ක ඝ ඳ ප ය ල ෆ */
+ '\0',
+ '\xE0', '\xB6', '\x91', ' ', '\xE0', '\xB6', '\x94', ' ', '\xE0', '\xB6', '\x9D', ' ', '\xE0', '\xB6', '\xA2', ' ', '\xE0', '\xB6', '\xA7', ' ', '\xE0', '\xB6', '\xAE', ' ', '\xE0', '\xB6', '\xB0', ' ', '\xE0', '\xB6', '\xBB', /* එ ඔ ඝ ජ ට ථ ධ ර */
+ '\0',
+ '\xE0', '\xB6', '\xAF', ' ', '\xE0', '\xB6', '\xB3', ' ', '\xE0', '\xB6', '\x8B', ' ', '\xE0', '\xB6', '\xBD', ' ', '\xE0', '\xB6', '\xAD', '\xE0', '\xB7', '\x96', ' ', '\xE0', '\xB6', '\xAD', '\xE0', '\xB7', '\x94', ' ', '\xE0', '\xB6', '\xB6', '\xE0', '\xB7', '\x94', ' ', '\xE0', '\xB6', '\xAF', '\xE0', '\xB7', '\x94', /* ද ඳ උ ල තූ තු බු දු */
+ '\0',
+ '\xE1', '\xAE', '\x8B', ' ', '\xE1', '\xAE', '\x9E', ' ', '\xE1', '\xAE', '\xAE', ' ', '\xE1', '\xAE', '\xBD', ' ', '\xE1', '\xAE', '\xB0', ' ', '\xE1', '\xAE', '\x88', /* ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ */
+ '\0',
+ '\xE1', '\xAE', '\x84', ' ', '\xE1', '\xAE', '\x94', ' ', '\xE1', '\xAE', '\x95', ' ', '\xE1', '\xAE', '\x97', ' ', '\xE1', '\xAE', '\xB0', ' ', '\xE1', '\xAE', '\x86', ' ', '\xE1', '\xAE', '\x88', ' ', '\xE1', '\xAE', '\x89', /* ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ */
+ '\0',
+ '\xE1', '\xAE', '\xBC', ' ', '\xE1', '\xB3', '\x84', /* ᮼ ᳄ */
+ '\0',
+ '\xEA', '\xAA', '\x86', ' ', '\xEA', '\xAA', '\x94', ' ', '\xEA', '\xAA', '\x92', ' ', '\xEA', '\xAA', '\x96', ' ', '\xEA', '\xAA', '\xAB', /* ꪆ ꪔ ꪒ ꪖ ꪫ */
+ '\0',
+ '\xEA', '\xAA', '\x89', ' ', '\xEA', '\xAA', '\xAB', ' ', '\xEA', '\xAA', '\xAE', /* ꪉ ꪫ ꪮ */
+ '\0',
+ '\xE0', '\xAE', '\x89', ' ', '\xE0', '\xAE', '\x92', ' ', '\xE0', '\xAE', '\x93', ' ', '\xE0', '\xAE', '\xB1', ' ', '\xE0', '\xAE', '\x88', ' ', '\xE0', '\xAE', '\x95', ' ', '\xE0', '\xAE', '\x99', ' ', '\xE0', '\xAE', '\x9A', /* உ ஒ ஓ ற ஈ க ங ச */
+ '\0',
+ '\xE0', '\xAE', '\x95', ' ', '\xE0', '\xAE', '\x9A', ' ', '\xE0', '\xAE', '\xB2', ' ', '\xE0', '\xAE', '\xB6', ' ', '\xE0', '\xAE', '\x89', ' ', '\xE0', '\xAE', '\x99', ' ', '\xE0', '\xAE', '\x9F', ' ', '\xE0', '\xAE', '\xAA', /* க ச ல ஶ உ ங ட ப */
+ '\0',
+ '\xE0', '\xB0', '\x87', ' ', '\xE0', '\xB0', '\x8C', ' ', '\xE0', '\xB0', '\x99', ' ', '\xE0', '\xB0', '\x9E', ' ', '\xE0', '\xB0', '\xA3', ' ', '\xE0', '\xB0', '\xB1', ' ', '\xE0', '\xB1', '\xAF', /* ఇ ఌ ఙ ఞ ణ ఱ ౯ */
+ '\0',
+ '\xE0', '\xB0', '\x85', ' ', '\xE0', '\xB0', '\x95', ' ', '\xE0', '\xB0', '\x9A', ' ', '\xE0', '\xB0', '\xB0', ' ', '\xE0', '\xB0', '\xBD', ' ', '\xE0', '\xB1', '\xA8', ' ', '\xE0', '\xB1', '\xAC', /* అ క చ ర ఽ ౨ ౬ */
+ '\0',
+ '\xE0', '\xB8', '\x9A', ' ', '\xE0', '\xB9', '\x80', ' ', '\xE0', '\xB9', '\x81', ' ', '\xE0', '\xB8', '\xAD', ' ', '\xE0', '\xB8', '\x81', ' ', '\xE0', '\xB8', '\xB2', /* บ เ แ อ ก า */
+ '\0',
+ '\xE0', '\xB8', '\x9A', ' ', '\xE0', '\xB8', '\x9B', ' ', '\xE0', '\xB8', '\xA9', ' ', '\xE0', '\xB8', '\xAF', ' ', '\xE0', '\xB8', '\xAD', ' ', '\xE0', '\xB8', '\xA2', ' ', '\xE0', '\xB8', '\xAE', /* บ ป ษ ฯ อ ย ฮ */
+ '\0',
+ '\xE0', '\xB8', '\x9B', ' ', '\xE0', '\xB8', '\x9D', ' ', '\xE0', '\xB8', '\x9F', /* ป ฝ ฟ */
+ '\0',
+ '\xE0', '\xB9', '\x82', ' ', '\xE0', '\xB9', '\x83', ' ', '\xE0', '\xB9', '\x84', /* โ ใ ไ */
+ '\0',
+ '\xE0', '\xB8', '\x8E', ' ', '\xE0', '\xB8', '\x8F', ' ', '\xE0', '\xB8', '\xA4', ' ', '\xE0', '\xB8', '\xA6', /* ฎ ฏ ฤ ฦ */
+ '\0',
+ '\xE0', '\xB8', '\x8D', ' ', '\xE0', '\xB8', '\x90', /* ญ ฐ */
+ '\0',
+ '\xE0', '\xB9', '\x90', ' ', '\xE0', '\xB9', '\x91', ' ', '\xE0', '\xB9', '\x93', /* ๐ ๑ ๓ */
+ '\0',
+ '\xE2', '\xB5', '\x94', ' ', '\xE2', '\xB5', '\x99', ' ', '\xE2', '\xB5', '\x9B', ' ', '\xE2', '\xB5', '\x9E', ' ', '\xE2', '\xB4', '\xB5', ' ', '\xE2', '\xB4', '\xBC', ' ', '\xE2', '\xB4', '\xB9', ' ', '\xE2', '\xB5', '\x8E', /* ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ */
+ '\0',
+ '\xEA', '\x97', '\x8D', ' ', '\xEA', '\x98', '\x96', ' ', '\xEA', '\x98', '\x99', ' ', '\xEA', '\x98', '\x9C', ' ', '\xEA', '\x96', '\x9C', ' ', '\xEA', '\x96', '\x9D', ' ', '\xEA', '\x94', '\x85', ' ', '\xEA', '\x95', '\xA2', /* ꗍ ꘖ ꘙ ꘜ ꖜ ꖝ ꔅ ꕢ */
+ '\0',
+ '\xEA', '\x97', '\x8D', ' ', '\xEA', '\x98', '\x96', ' ', '\xEA', '\x98', '\x99', ' ', '\xEA', '\x97', '\x9E', ' ', '\xEA', '\x94', '\x85', ' ', '\xEA', '\x95', '\xA2', ' ', '\xEA', '\x96', '\x9C', ' ', '\xEA', '\x94', '\x86', /* ꗍ ꘖ ꘙ ꗞ ꔅ ꕢ ꖜ ꔆ */
#ifdef AF_CONFIG_OPTION_CJK
'\0',
- '\xE4', '\xBB', '\x96', '\xE4', '\xBB', '\xAC', '\xE4', '\xBD', '\xA0', '\xE4', '\xBE', '\x86', '\xE5', '\x80', '\x91', '\xE5', '\x88', '\xB0', '\xE5', '\x92', '\x8C', '\xE5', '\x9C', '\xB0', /* 他们你來們到和地 */
- '\xE5', '\xAF', '\xB9', '\xE5', '\xB0', '\x8D', '\xE5', '\xB0', '\xB1', '\xE5', '\xB8', '\xAD', '\xE6', '\x88', '\x91', '\xE6', '\x97', '\xB6', '\xE6', '\x99', '\x82', '\xE6', '\x9C', '\x83', /* 对對就席我时時會 */
- '\xE6', '\x9D', '\xA5', '\xE7', '\x82', '\xBA', '\xE8', '\x83', '\xBD', '\xE8', '\x88', '\xB0', '\xE8', '\xAA', '\xAA', '\xE8', '\xAF', '\xB4', '\xE8', '\xBF', '\x99', '\xE9', '\x80', '\x99', /* 来為能舰說说这這 */
- '\xE9', '\xBD', '\x8A', '|', /* 齊 | */
- '\xE5', '\x86', '\x9B', '\xE5', '\x90', '\x8C', '\xE5', '\xB7', '\xB2', '\xE6', '\x84', '\xBF', '\xE6', '\x97', '\xA2', '\xE6', '\x98', '\x9F', '\xE6', '\x98', '\xAF', '\xE6', '\x99', '\xAF', /* 军同已愿既星是景 */
- '\xE6', '\xB0', '\x91', '\xE7', '\x85', '\xA7', '\xE7', '\x8E', '\xB0', '\xE7', '\x8F', '\xBE', '\xE7', '\x90', '\x86', '\xE7', '\x94', '\xA8', '\xE7', '\xBD', '\xAE', '\xE8', '\xA6', '\x81', /* 民照现現理用置要 */
- '\xE8', '\xBB', '\x8D', '\xE9', '\x82', '\xA3', '\xE9', '\x85', '\x8D', '\xE9', '\x87', '\x8C', '\xE9', '\x96', '\x8B', '\xE9', '\x9B', '\xB7', '\xE9', '\x9C', '\xB2', '\xE9', '\x9D', '\xA2', /* 軍那配里開雷露面 */
- '\xE9', '\xA1', '\xBE', /* 顾 */
+ '\xE4', '\xBB', '\x96', ' ', '\xE4', '\xBB', '\xAC', ' ', '\xE4', '\xBD', '\xA0', ' ', '\xE4', '\xBE', '\x86', ' ', '\xE5', '\x80', '\x91', ' ', '\xE5', '\x88', '\xB0', ' ', '\xE5', '\x92', '\x8C', ' ', '\xE5', '\x9C', '\xB0', /* 他 们 你 來 們 到 和 地 */
+ ' ', '\xE5', '\xAF', '\xB9', ' ', '\xE5', '\xB0', '\x8D', ' ', '\xE5', '\xB0', '\xB1', ' ', '\xE5', '\xB8', '\xAD', ' ', '\xE6', '\x88', '\x91', ' ', '\xE6', '\x97', '\xB6', ' ', '\xE6', '\x99', '\x82', ' ', '\xE6', '\x9C', '\x83', /* 对 對 就 席 我 时 時 會 */
+ ' ', '\xE6', '\x9D', '\xA5', ' ', '\xE7', '\x82', '\xBA', ' ', '\xE8', '\x83', '\xBD', ' ', '\xE8', '\x88', '\xB0', ' ', '\xE8', '\xAA', '\xAA', ' ', '\xE8', '\xAF', '\xB4', ' ', '\xE8', '\xBF', '\x99', ' ', '\xE9', '\x80', '\x99', /* 来 為 能 舰 說 说 这 這 */
+ ' ', '\xE9', '\xBD', '\x8A', ' ', '|', /* 齊 | */
+ ' ', '\xE5', '\x86', '\x9B', ' ', '\xE5', '\x90', '\x8C', ' ', '\xE5', '\xB7', '\xB2', ' ', '\xE6', '\x84', '\xBF', ' ', '\xE6', '\x97', '\xA2', ' ', '\xE6', '\x98', '\x9F', ' ', '\xE6', '\x98', '\xAF', ' ', '\xE6', '\x99', '\xAF', /* 军 同 已 愿 既 星 是 景 */
+ ' ', '\xE6', '\xB0', '\x91', ' ', '\xE7', '\x85', '\xA7', ' ', '\xE7', '\x8E', '\xB0', ' ', '\xE7', '\x8F', '\xBE', ' ', '\xE7', '\x90', '\x86', ' ', '\xE7', '\x94', '\xA8', ' ', '\xE7', '\xBD', '\xAE', ' ', '\xE8', '\xA6', '\x81', /* 民 照 现 現 理 用 置 要 */
+ ' ', '\xE8', '\xBB', '\x8D', ' ', '\xE9', '\x82', '\xA3', ' ', '\xE9', '\x85', '\x8D', ' ', '\xE9', '\x87', '\x8C', ' ', '\xE9', '\x96', '\x8B', ' ', '\xE9', '\x9B', '\xB7', ' ', '\xE9', '\x9C', '\xB2', ' ', '\xE9', '\x9D', '\xA2', /* 軍 那 配 里 開 雷 露 面 */
+ ' ', '\xE9', '\xA1', '\xBE', /* 顾 */
'\0',
- '\xE4', '\xB8', '\xAA', '\xE4', '\xB8', '\xBA', '\xE4', '\xBA', '\xBA', '\xE4', '\xBB', '\x96', '\xE4', '\xBB', '\xA5', '\xE4', '\xBB', '\xAC', '\xE4', '\xBD', '\xA0', '\xE4', '\xBE', '\x86', /* 个为人他以们你來 */
- '\xE5', '\x80', '\x8B', '\xE5', '\x80', '\x91', '\xE5', '\x88', '\xB0', '\xE5', '\x92', '\x8C', '\xE5', '\xA4', '\xA7', '\xE5', '\xAF', '\xB9', '\xE5', '\xB0', '\x8D', '\xE5', '\xB0', '\xB1', /* 個們到和大对對就 */
- '\xE6', '\x88', '\x91', '\xE6', '\x97', '\xB6', '\xE6', '\x99', '\x82', '\xE6', '\x9C', '\x89', '\xE6', '\x9D', '\xA5', '\xE7', '\x82', '\xBA', '\xE8', '\xA6', '\x81', '\xE8', '\xAA', '\xAA', /* 我时時有来為要說 */
- '\xE8', '\xAF', '\xB4', '|', /* 说 | */
- '\xE4', '\xB8', '\xBB', '\xE4', '\xBA', '\x9B', '\xE5', '\x9B', '\xA0', '\xE5', '\xAE', '\x83', '\xE6', '\x83', '\xB3', '\xE6', '\x84', '\x8F', '\xE7', '\x90', '\x86', '\xE7', '\x94', '\x9F', /* 主些因它想意理生 */
- '\xE7', '\x95', '\xB6', '\xE7', '\x9C', '\x8B', '\xE7', '\x9D', '\x80', '\xE7', '\xBD', '\xAE', '\xE8', '\x80', '\x85', '\xE8', '\x87', '\xAA', '\xE8', '\x91', '\x97', '\xE8', '\xA3', '\xA1', /* 當看着置者自著裡 */
- '\xE8', '\xBF', '\x87', '\xE8', '\xBF', '\x98', '\xE8', '\xBF', '\x9B', '\xE9', '\x80', '\xB2', '\xE9', '\x81', '\x8E', '\xE9', '\x81', '\x93', '\xE9', '\x82', '\x84', '\xE9', '\x87', '\x8C', /* 过还进進過道還里 */
- '\xE9', '\x9D', '\xA2', /* 面 */
+ '\xE4', '\xB8', '\xAA', ' ', '\xE4', '\xB8', '\xBA', ' ', '\xE4', '\xBA', '\xBA', ' ', '\xE4', '\xBB', '\x96', ' ', '\xE4', '\xBB', '\xA5', ' ', '\xE4', '\xBB', '\xAC', ' ', '\xE4', '\xBD', '\xA0', ' ', '\xE4', '\xBE', '\x86', /* 个 为 人 他 以 们 你 來 */
+ ' ', '\xE5', '\x80', '\x8B', ' ', '\xE5', '\x80', '\x91', ' ', '\xE5', '\x88', '\xB0', ' ', '\xE5', '\x92', '\x8C', ' ', '\xE5', '\xA4', '\xA7', ' ', '\xE5', '\xAF', '\xB9', ' ', '\xE5', '\xB0', '\x8D', ' ', '\xE5', '\xB0', '\xB1', /* 個 們 到 和 大 对 對 就 */
+ ' ', '\xE6', '\x88', '\x91', ' ', '\xE6', '\x97', '\xB6', ' ', '\xE6', '\x99', '\x82', ' ', '\xE6', '\x9C', '\x89', ' ', '\xE6', '\x9D', '\xA5', ' ', '\xE7', '\x82', '\xBA', ' ', '\xE8', '\xA6', '\x81', ' ', '\xE8', '\xAA', '\xAA', /* 我 时 時 有 来 為 要 說 */
+ ' ', '\xE8', '\xAF', '\xB4', ' ', '|', /* 说 | */
+ ' ', '\xE4', '\xB8', '\xBB', ' ', '\xE4', '\xBA', '\x9B', ' ', '\xE5', '\x9B', '\xA0', ' ', '\xE5', '\xAE', '\x83', ' ', '\xE6', '\x83', '\xB3', ' ', '\xE6', '\x84', '\x8F', ' ', '\xE7', '\x90', '\x86', ' ', '\xE7', '\x94', '\x9F', /* 主 些 因 它 想 意 理 生 */
+ ' ', '\xE7', '\x95', '\xB6', ' ', '\xE7', '\x9C', '\x8B', ' ', '\xE7', '\x9D', '\x80', ' ', '\xE7', '\xBD', '\xAE', ' ', '\xE8', '\x80', '\x85', ' ', '\xE8', '\x87', '\xAA', ' ', '\xE8', '\x91', '\x97', ' ', '\xE8', '\xA3', '\xA1', /* 當 看 着 置 者 自 著 裡 */
+ ' ', '\xE8', '\xBF', '\x87', ' ', '\xE8', '\xBF', '\x98', ' ', '\xE8', '\xBF', '\x9B', ' ', '\xE9', '\x80', '\xB2', ' ', '\xE9', '\x81', '\x8E', ' ', '\xE9', '\x81', '\x93', ' ', '\xE9', '\x82', '\x84', ' ', '\xE9', '\x87', '\x8C', /* 过 还 进 進 過 道 還 里 */
+ ' ', '\xE9', '\x9D', '\xA2', /* 面 */
#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
'\0',
- '\xE4', '\xBA', '\x9B', '\xE4', '\xBB', '\xAC', '\xE4', '\xBD', '\xA0', '\xE4', '\xBE', '\x86', '\xE5', '\x80', '\x91', '\xE5', '\x88', '\xB0', '\xE5', '\x92', '\x8C', '\xE5', '\x9C', '\xB0', /* 些们你來們到和地 */
- '\xE5', '\xA5', '\xB9', '\xE5', '\xB0', '\x86', '\xE5', '\xB0', '\x87', '\xE5', '\xB0', '\xB1', '\xE5', '\xB9', '\xB4', '\xE5', '\xBE', '\x97', '\xE6', '\x83', '\x85', '\xE6', '\x9C', '\x80', /* 她将將就年得情最 */
- '\xE6', '\xA0', '\xB7', '\xE6', '\xA8', '\xA3', '\xE7', '\x90', '\x86', '\xE8', '\x83', '\xBD', '\xE8', '\xAA', '\xAA', '\xE8', '\xAF', '\xB4', '\xE8', '\xBF', '\x99', '\xE9', '\x80', '\x99', /* 样樣理能說说这這 */
- '\xE9', '\x80', '\x9A', '|', /* 通 | */
- '\xE5', '\x8D', '\xB3', '\xE5', '\x90', '\x97', '\xE5', '\x90', '\xA7', '\xE5', '\x90', '\xAC', '\xE5', '\x91', '\xA2', '\xE5', '\x93', '\x81', '\xE5', '\x93', '\x8D', '\xE5', '\x97', '\x8E', /* 即吗吧听呢品响嗎 */
- '\xE5', '\xB8', '\x88', '\xE5', '\xB8', '\xAB', '\xE6', '\x94', '\xB6', '\xE6', '\x96', '\xAD', '\xE6', '\x96', '\xB7', '\xE6', '\x98', '\x8E', '\xE7', '\x9C', '\xBC', '\xE9', '\x96', '\x93', /* 师師收断斷明眼間 */
- '\xE9', '\x97', '\xB4', '\xE9', '\x99', '\x85', '\xE9', '\x99', '\x88', '\xE9', '\x99', '\x90', '\xE9', '\x99', '\xA4', '\xE9', '\x99', '\xB3', '\xE9', '\x9A', '\x8F', '\xE9', '\x9A', '\x9B', /* 间际陈限除陳随際 */
- '\xE9', '\x9A', '\xA8', /* 隨 */
+ ' ', '\xE4', '\xBA', '\x9B', ' ', '\xE4', '\xBB', '\xAC', ' ', '\xE4', '\xBD', '\xA0', ' ', '\xE4', '\xBE', '\x86', ' ', '\xE5', '\x80', '\x91', ' ', '\xE5', '\x88', '\xB0', ' ', '\xE5', '\x92', '\x8C', ' ', '\xE5', '\x9C', '\xB0', /* 些 们 你 來 們 到 和 地 */
+ ' ', '\xE5', '\xA5', '\xB9', ' ', '\xE5', '\xB0', '\x86', ' ', '\xE5', '\xB0', '\x87', ' ', '\xE5', '\xB0', '\xB1', ' ', '\xE5', '\xB9', '\xB4', ' ', '\xE5', '\xBE', '\x97', ' ', '\xE6', '\x83', '\x85', ' ', '\xE6', '\x9C', '\x80', /* 她 将 將 就 年 得 情 最 */
+ ' ', '\xE6', '\xA0', '\xB7', ' ', '\xE6', '\xA8', '\xA3', ' ', '\xE7', '\x90', '\x86', ' ', '\xE8', '\x83', '\xBD', ' ', '\xE8', '\xAA', '\xAA', ' ', '\xE8', '\xAF', '\xB4', ' ', '\xE8', '\xBF', '\x99', ' ', '\xE9', '\x80', '\x99', /* 样 樣 理 能 說 说 这 這 */
+ ' ', '\xE9', '\x80', '\x9A', ' ', '|', /* 通 | */
+ ' ', '\xE5', '\x8D', '\xB3', ' ', '\xE5', '\x90', '\x97', ' ', '\xE5', '\x90', '\xA7', ' ', '\xE5', '\x90', '\xAC', ' ', '\xE5', '\x91', '\xA2', ' ', '\xE5', '\x93', '\x81', ' ', '\xE5', '\x93', '\x8D', ' ', '\xE5', '\x97', '\x8E', /* 即 吗 吧 听 呢 品 响 嗎 */
+ ' ', '\xE5', '\xB8', '\x88', ' ', '\xE5', '\xB8', '\xAB', ' ', '\xE6', '\x94', '\xB6', ' ', '\xE6', '\x96', '\xAD', ' ', '\xE6', '\x96', '\xB7', ' ', '\xE6', '\x98', '\x8E', ' ', '\xE7', '\x9C', '\xBC', ' ', '\xE9', '\x96', '\x93', /* 师 師 收 断 斷 明 眼 間 */
+ ' ', '\xE9', '\x97', '\xB4', ' ', '\xE9', '\x99', '\x85', ' ', '\xE9', '\x99', '\x88', ' ', '\xE9', '\x99', '\x90', ' ', '\xE9', '\x99', '\xA4', ' ', '\xE9', '\x99', '\xB3', ' ', '\xE9', '\x9A', '\x8F', ' ', '\xE9', '\x9A', '\x9B', /* 间 际 陈 限 除 陳 随 際 */
+ ' ', '\xE9', '\x9A', '\xA8', /* 隨 */
'\0',
- '\xE4', '\xBA', '\x8B', '\xE5', '\x89', '\x8D', '\xE5', '\xAD', '\xB8', '\xE5', '\xB0', '\x86', '\xE5', '\xB0', '\x87', '\xE6', '\x83', '\x85', '\xE6', '\x83', '\xB3', '\xE6', '\x88', '\x96', /* 事前學将將情想或 */
- '\xE6', '\x94', '\xBF', '\xE6', '\x96', '\xAF', '\xE6', '\x96', '\xB0', '\xE6', '\xA0', '\xB7', '\xE6', '\xA8', '\xA3', '\xE6', '\xB0', '\x91', '\xE6', '\xB2', '\x92', '\xE6', '\xB2', '\xA1', /* 政斯新样樣民沒没 */
- '\xE7', '\x84', '\xB6', '\xE7', '\x89', '\xB9', '\xE7', '\x8E', '\xB0', '\xE7', '\x8F', '\xBE', '\xE7', '\x90', '\x83', '\xE7', '\xAC', '\xAC', '\xE7', '\xB6', '\x93', '\xE8', '\xB0', '\x81', /* 然特现現球第經谁 */
- '\xE8', '\xB5', '\xB7', '|', /* 起 | */
- '\xE4', '\xBE', '\x8B', '\xE5', '\x88', '\xA5', '\xE5', '\x88', '\xAB', '\xE5', '\x88', '\xB6', '\xE5', '\x8A', '\xA8', '\xE5', '\x8B', '\x95', '\xE5', '\x90', '\x97', '\xE5', '\x97', '\x8E', /* 例別别制动動吗嗎 */
- '\xE5', '\xA2', '\x9E', '\xE6', '\x8C', '\x87', '\xE6', '\x98', '\x8E', '\xE6', '\x9C', '\x9D', '\xE6', '\x9C', '\x9F', '\xE6', '\x9E', '\x84', '\xE7', '\x89', '\xA9', '\xE7', '\xA1', '\xAE', /* 增指明朝期构物确 */
- '\xE7', '\xA7', '\x8D', '\xE8', '\xAA', '\xBF', '\xE8', '\xB0', '\x83', '\xE8', '\xB2', '\xBB', '\xE8', '\xB4', '\xB9', '\xE9', '\x82', '\xA3', '\xE9', '\x83', '\xBD', '\xE9', '\x96', '\x93', /* 种調调費费那都間 */
- '\xE9', '\x97', '\xB4', /* 间 */
+ '\xE4', '\xBA', '\x8B', ' ', '\xE5', '\x89', '\x8D', ' ', '\xE5', '\xAD', '\xB8', ' ', '\xE5', '\xB0', '\x86', ' ', '\xE5', '\xB0', '\x87', ' ', '\xE6', '\x83', '\x85', ' ', '\xE6', '\x83', '\xB3', ' ', '\xE6', '\x88', '\x96', /* 事 前 學 将 將 情 想 或 */
+ ' ', '\xE6', '\x94', '\xBF', ' ', '\xE6', '\x96', '\xAF', ' ', '\xE6', '\x96', '\xB0', ' ', '\xE6', '\xA0', '\xB7', ' ', '\xE6', '\xA8', '\xA3', ' ', '\xE6', '\xB0', '\x91', ' ', '\xE6', '\xB2', '\x92', ' ', '\xE6', '\xB2', '\xA1', /* 政 斯 新 样 樣 民 沒 没 */
+ ' ', '\xE7', '\x84', '\xB6', ' ', '\xE7', '\x89', '\xB9', ' ', '\xE7', '\x8E', '\xB0', ' ', '\xE7', '\x8F', '\xBE', ' ', '\xE7', '\x90', '\x83', ' ', '\xE7', '\xAC', '\xAC', ' ', '\xE7', '\xB6', '\x93', ' ', '\xE8', '\xB0', '\x81', /* 然 特 现 現 球 第 經 谁 */
+ ' ', '\xE8', '\xB5', '\xB7', ' ', '|', /* 起 | */
+ ' ', '\xE4', '\xBE', '\x8B', ' ', '\xE5', '\x88', '\xA5', ' ', '\xE5', '\x88', '\xAB', ' ', '\xE5', '\x88', '\xB6', ' ', '\xE5', '\x8A', '\xA8', ' ', '\xE5', '\x8B', '\x95', ' ', '\xE5', '\x90', '\x97', ' ', '\xE5', '\x97', '\x8E', /* 例 別 别 制 动 動 吗 嗎 */
+ ' ', '\xE5', '\xA2', '\x9E', ' ', '\xE6', '\x8C', '\x87', ' ', '\xE6', '\x98', '\x8E', ' ', '\xE6', '\x9C', '\x9D', ' ', '\xE6', '\x9C', '\x9F', ' ', '\xE6', '\x9E', '\x84', ' ', '\xE7', '\x89', '\xA9', ' ', '\xE7', '\xA1', '\xAE', /* 增 指 明 朝 期 构 物 确 */
+ ' ', '\xE7', '\xA7', '\x8D', ' ', '\xE8', '\xAA', '\xBF', ' ', '\xE8', '\xB0', '\x83', ' ', '\xE8', '\xB2', '\xBB', ' ', '\xE8', '\xB4', '\xB9', ' ', '\xE9', '\x82', '\xA3', ' ', '\xE9', '\x83', '\xBD', ' ', '\xE9', '\x96', '\x93', /* 种 調 调 費 费 那 都 間 */
+ ' ', '\xE9', '\x97', '\xB4', /* 间 */
#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
#endif /* AF_CONFIG_OPTION_CJK */
'\0',
@@ -139,9 +443,77 @@
af_blue_stringsets[] =
{
/* */
- { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_ARABIC_JOIN, 0 },
+ { AF_BLUE_STRING_ADLAM_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0 },
+ { AF_BLUE_STRING_ADLAM_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_ARABIC_BOTTOM, 0 },
+ { AF_BLUE_STRING_ARABIC_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM, 0 },
+ { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_ARMENIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_AVESTAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_AVESTAN_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_BAMUM_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_BAMUM_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_BENGALI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_NEUTRAL |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_BENGALI_BASE, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_BUHID_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_BUHID_LARGE, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_BUHID_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_BUHID_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_CHAKMA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_CHAKMA_BOTTOM, 0 },
+ { AF_BLUE_STRING_CHAKMA_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_CARIAN_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_CHEROKEE_CAPITAL, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_CHEROKEE_CAPITAL, 0 },
+ { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_CHEROKEE_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_CHEROKEE_SMALL, 0 },
+ { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_COPTIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0 },
+ { AF_BLUE_STRING_COPTIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_CYPRIOT_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0 },
+ { AF_BLUE_STRING_CYPRIOT_SMALL, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_CYPRIOT_SMALL, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 },
{ AF_BLUE_STRING_CYRILLIC_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
@@ -157,6 +529,40 @@
{ AF_BLUE_STRING_DEVANAGARI_BASE, 0 },
{ AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_DESERET_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0 },
+ { AF_BLUE_STRING_DESERET_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_DESERET_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_ETHIOPIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM, 0 },
+ { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0 },
+ { AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0 },
+ { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM, 0 },
+ { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0 },
+ { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_GOTHIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_GOTHIC_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_GREEK_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0 },
{ AF_BLUE_STRING_GREEK_SMALL_BETA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
@@ -165,22 +571,145 @@
{ AF_BLUE_STRING_GREEK_SMALL, 0 },
{ AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_GUJARATI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_GUJARATI_BOTTOM, 0 },
+ { AF_BLUE_STRING_GUJARATI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_GUJARATI_DESCENDER, 0 },
+ { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_GURMUKHI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_GURMUKHI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_GURMUKHI_BASE, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_NEUTRAL |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_GURMUKHI_BOTTOM, 0 },
+ { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_HEBREW_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_LONG },
{ AF_BLUE_STRING_HEBREW_BOTTOM, 0 },
{ AF_BLUE_STRING_HEBREW_DESCENDER, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_KAYAH_LI_BOTTOM, 0 },
+ { AF_BLUE_STRING_KAYAH_LI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_KAYAH_LI_DESCENDER, 0 },
+ { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_KHMER_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP, AF_BLUE_PROPERTY_LATIN_SUB_TOP },
+ { AF_BLUE_STRING_KHMER_BOTTOM, 0 },
+ { AF_BLUE_STRING_KHMER_DESCENDER, 0 },
+ { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_KANNADA_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_LAO_BOTTOM, 0 },
+ { AF_BLUE_STRING_LAO_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_LAO_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_LATIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 },
{ AF_BLUE_STRING_LATIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
- { AF_BLUE_STRING_LATIN_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
+ { AF_BLUE_STRING_LATIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
- { AF_BLUE_STRING_LATIN_SMALL, 0 },
+ { AF_BLUE_STRING_LATIN_SMALL_BOTTOM, 0 },
{ AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 },
+ { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_LATIN_SUBS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_LATIN_SUBS_SMALL, 0 },
+ { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 },
+ { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_LATIN_SUPS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_LATIN_SUPS_SMALL, 0 },
+ { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_LISU_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_LISU_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_MALAYALAM_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_MYANMAR_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_MYANMAR_BOTTOM, 0 },
+ { AF_BLUE_STRING_MYANMAR_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_MYANMAR_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_NKO_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_NKO_BOTTOM, 0 },
+ { AF_BLUE_STRING_NKO_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_NKO_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_OL_CHIKI, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_OLD_TURKIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_OSAGE_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM, 0 },
+ { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0 },
+ { AF_BLUE_STRING_OSAGE_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_OSMANYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_OSMANYA_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_SHAVIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_SHAVIAN_BOTTOM, 0 },
+ { AF_BLUE_STRING_SHAVIAN_DESCENDER, 0 },
+ { AF_BLUE_STRING_SHAVIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_SINHALA_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_SINHALA_BOTTOM, 0 },
+ { AF_BLUE_STRING_SINHALA_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_SUNDANESE_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_SUNDANESE_BOTTOM, 0 },
+ { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_TAMIL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_TAMIL_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_TAI_VIET_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_TELUGU_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_TIFINAGH, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
{ AF_BLUE_STRING_THAI_BOTTOM, 0 },
@@ -190,6 +719,9 @@
{ AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 },
{ AF_BLUE_STRING_THAI_DIGIT_TOP, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_VAI_BOTTOM, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
#ifdef AF_CONFIG_OPTION_CJK
{ AF_BLUE_STRING_CJK_TOP, AF_BLUE_PROPERTY_CJK_TOP },
{ AF_BLUE_STRING_CJK_BOTTOM, 0 },
diff --git a/src/autofit/afblue.cin b/src/autofit/afblue.cin
index b303a4b..4913e2e 100644
--- a/src/autofit/afblue.cin
+++ b/src/autofit/afblue.cin
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter data for blue strings (body). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/autofit/afblue.dat b/src/autofit/afblue.dat
index fd5684e..bc2f0d2 100644
--- a/src/autofit/afblue.dat
+++ b/src/autofit/afblue.dat
@@ -2,7 +2,7 @@
//
// Auto-fitter data for blue strings.
//
-// Copyright 2013-2015 by
+// Copyright 2013-2018 by
// David Turner, Robert Wilhelm, and Werner Lemberg.
//
// This file is part of the FreeType project, and may only be used,
@@ -20,9 +20,8 @@
// labels separated by whitespace and followed by a colon (everything in a
// single line); the first label gives the name of the enumeration template,
// the second the name of the array template, and the third the name of the
-// `maximum' template, holding the size of the largest array element. The
-// script then fills the corresponding templates (indicated by `@'
-// characters around the name).
+// `maximum' template. The script then fills the corresponding templates
+// (indicated by `@' characters around the name).
//
// A section contains one or more data records. Each data record consists
// of two or more lines. The first line holds the enumeration name, and the
@@ -30,15 +29,20 @@
//
// There are two possible representations for array data.
//
-// - A string of characters in UTF-8 encoding enclosed in double quotes,
-// using C syntax. There can be only one string per line, thus the
-// starting and ending double quote must be the first and last character
-// in the line, respectively, ignoring whitespace before and after the
-// string. Space characters within the string are ignored too. If there
-// are multiple strings (in multiple lines), they are concatenated to a
-// single string. In the output, a string gets represented as a series of
-// singles bytes, followed by a zero byte. The enumeration values simply
-// hold byte offsets to the start of the corresponding strings.
+// - A string of characters or character clusters (for example, representing
+// Aksharas, Devanagari syllables) in UTF-8 encoding enclosed in double
+// quotes, using C syntax, where the elements are separated by spaces.
+// There can be only one string per line, thus the starting and ending
+// double quote must be the first and last character in the line,
+// respectively, ignoring whitespace before and after the string. If
+// there are multiple strings (in multiple lines), they are concatenated
+// to a single string. In the output, a string gets represented as a
+// series of singles bytes, followed by a zero byte. The enumeration
+// values simply hold byte offsets to the start of the corresponding
+// strings.
+//
+// For strings, the `maximum' template holds the maximum number of
+// non-space characters in all strings.
//
// - Data blocks enclosed in balanced braces, which get copied verbatim and
// which can span multiple lines. The opening brace of a block must be
@@ -47,6 +51,9 @@
// character after each block and counts the number of blocks to set the
// enumeration values.
//
+// For data blocks, the `maximum' template holds the maximum number of
+// array elements.
+//
// A section can contain either strings only or data blocks only.
//
// A comment line starts with `//'; it gets removed. A preprocessor
@@ -58,8 +65,8 @@
// values; this essentially means that the maximum values can easily be too
// large. Given that the purpose of those values is to create local
// fixed-size arrays at compile time for further processing of the blue zone
-// data, this isn't a problem. Note the the final zero byte of a string is
-// not counted. Note also that the count holds the number of UTF-8 encoded
+// data, this isn't a problem. Note the final zero byte of a string is not
+// counted. Note also that the count holds the number of UTF-8 encoded
// characters, not bytes.
@@ -67,22 +74,134 @@
AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
+ AF_BLUE_STRING_ADLAM_CAPITAL_TOP
+ "𞤌 𞤅 𞤈 𞤏 𞤔 𞤚"
+ AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM
+ "𞤂 𞤖"
+ AF_BLUE_STRING_ADLAM_SMALL_TOP
+ "𞤬 𞤮 𞤻 𞤼 𞤾"
+ AF_BLUE_STRING_ADLAM_SMALL_BOTTOM
+ "𞤤 𞤨 𞤩 𞤭 𞤴 𞤸 𞤺 𞥀"
+
AF_BLUE_STRING_ARABIC_TOP
"ا إ ل ك ط ظ"
- AF_BLUE_STRING_ARABIC_JOIN
+ AF_BLUE_STRING_ARABIC_BOTTOM
"ت ث ط ظ ك"
+ // We don't necessarily have access to medial forms via Unicode in case
+ // Arabic presentational forms are missing. The only character that is
+ // guaranteed to have the same vertical position with joining (this is,
+ // non-isolated) forms is U+0640, ARABIC TATWEEL, which must join both
+ // round and flat curves.
+ AF_BLUE_STRING_ARABIC_JOIN
+ "ـ"
+
+ AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP
+ "Ա Մ Ւ Ս Բ Գ Դ Օ"
+ AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM
+ "Ւ Ո Դ Ճ Շ Ս Տ Օ"
+ AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER
+ "ե է ի մ վ ֆ ճ"
+ AF_BLUE_STRING_ARMENIAN_SMALL_TOP
+ "ա յ ւ ս գ շ ր օ"
+ AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM
+ "հ ո ճ ա ե ծ ս օ"
+ AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER
+ "բ ը ի լ ղ պ փ ց"
+
+ AF_BLUE_STRING_AVESTAN_TOP
+ "𐬀 𐬁 𐬐 𐬛"
+ AF_BLUE_STRING_AVESTAN_BOTTOM
+ "𐬀 𐬁"
+
+ AF_BLUE_STRING_BAMUM_TOP
+ "ꚧ ꚨ ꛛ ꛉ ꛁ ꛈ ꛫ ꛯ"
+ AF_BLUE_STRING_BAMUM_BOTTOM
+ "ꚭ ꚳ ꚶ ꛬ ꚢ ꚽ ꛯ ꛲"
+
+ AF_BLUE_STRING_BENGALI_BASE
+ "অ ড ত ন ব ভ ল ক"
+ AF_BLUE_STRING_BENGALI_TOP
+ "ই ট ঠ ি ী ৈ ৗ"
+ AF_BLUE_STRING_BENGALI_HEAD
+ "ও এ ড ত ন ব ল ক"
+
+ AF_BLUE_STRING_BUHID_TOP
+ "ᝐ ᝈ"
+ AF_BLUE_STRING_BUHID_LARGE
+ "ᝅ ᝊ ᝎ"
+ AF_BLUE_STRING_BUHID_SMALL
+ "ᝂ ᝃ ᝉ ᝌ"
+ AF_BLUE_STRING_BUHID_BOTTOM
+ "ᝀ ᝃ ᝆ ᝉ ᝋ ᝏ ᝑ"
+
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP
+ "ᗜ ᖴ ᐁ ᒣ ᑫ ᑎ ᔑ ᗰ"
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM
+ "ᗶ ᖵ ᒧ ᐃ ᑌ ᒍ ᔑ ᗢ"
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP
+ "ᓓ ᓕ ᓀ ᓂ ᓄ ᕄ ᕆ ᘣ"
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM
+ "ᕃ ᓂ ᓀ ᕂ ᓗ ᓚ ᕆ ᘣ"
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP
+ "ᐪ ᙆ ᣘ ᐢ ᒾ ᣗ ᔆ"
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM
+ "ᙆ ᗮ ᒻ ᐞ ᔆ ᒡ ᒢ ᓑ"
+
+ AF_BLUE_STRING_CARIAN_TOP
+ "𐊧 𐊫 𐊬 𐊭 𐊱 𐊺 𐊼 𐊿"
+ AF_BLUE_STRING_CARIAN_BOTTOM
+ "𐊣 𐊧 𐊷 𐋀 𐊫 𐊸 𐋉"
+
+ AF_BLUE_STRING_CHAKMA_TOP
+ "𑄃 𑄅 𑄉 𑄙 𑄗"
+ AF_BLUE_STRING_CHAKMA_BOTTOM
+ "𑄅 𑄛 𑄝 𑄗 𑄓"
+ AF_BLUE_STRING_CHAKMA_DESCENDER
+ "𑄖𑄳𑄢 𑄘𑄳𑄢 𑄙𑄳𑄢 𑄤𑄳𑄢 𑄥𑄳𑄢"
+
+ AF_BLUE_STRING_CHEROKEE_CAPITAL
+ "Ꮖ Ꮋ Ꭼ Ꮓ Ꭴ Ꮳ Ꭶ Ꮥ"
+ AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER
+ "ꮒ ꮤ ꮶ ꭴ ꭾ ꮗ ꮝ ꮿ"
+ AF_BLUE_STRING_CHEROKEE_SMALL
+ "ꮖ ꭼ ꮓ ꮠ ꮳ ꭶ ꮥ ꮻ"
+ AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER
+ "ᏸ ꮐ ꭹ ꭻ"
+
+ AF_BLUE_STRING_COPTIC_CAPITAL_TOP
+ "Ⲍ Ⲏ Ⲡ Ⳟ Ⲟ Ⲑ Ⲥ Ⳋ"
+ AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM
+ "Ⳑ Ⳙ Ⳟ Ⲏ Ⲟ Ⲑ Ⳝ Ⲱ"
+ AF_BLUE_STRING_COPTIC_SMALL_TOP
+ "ⲍ ⲏ ⲡ ⳟ ⲟ ⲑ ⲥ ⳋ"
+ AF_BLUE_STRING_COPTIC_SMALL_BOTTOM
+ "ⳑ ⳙ ⳟ ⲏ ⲟ ⲑ ⳝ Ⳓ"
+
+ AF_BLUE_STRING_CYPRIOT_TOP
+ "𐠍 𐠙 𐠳 𐠱 𐠅 𐠓 𐠣 𐠦"
+ AF_BLUE_STRING_CYPRIOT_BOTTOM
+ "𐠃 𐠊 𐠛 𐠣 𐠳 𐠵 𐠐"
+ AF_BLUE_STRING_CYPRIOT_SMALL
+ "𐠈 𐠏 𐠖"
AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP
- "БВЕПЗОСЭ"
+ "Б В Е П З О С Э"
AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM
- "БВЕШЗОСЭ"
+ "Б В Е Ш З О С Э"
AF_BLUE_STRING_CYRILLIC_SMALL
- "хпншезос"
+ "х п н ш е з о с"
AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER
- "руф"
+ "р у ф"
- // we separate the letters with spaces to avoid ligatures;
- // this is just for convenience to simplify reading
+ AF_BLUE_STRING_DESERET_CAPITAL_TOP
+ "𐐂 𐐄 𐐋 𐐗 𐐑"
+ AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM
+ "𐐀 𐐂 𐐄 𐐗 𐐛"
+ AF_BLUE_STRING_DESERET_SMALL_TOP
+ "𐐪 𐐬 𐐳 𐐿 𐐹"
+ AF_BLUE_STRING_DESERET_SMALL_BOTTOM
+ "𐐨 𐐪 𐐬 𐐿 𐑃"
+
AF_BLUE_STRING_DEVANAGARI_BASE
"क म अ आ थ ध भ श"
AF_BLUE_STRING_DEVANAGARI_TOP
@@ -95,37 +214,270 @@
AF_BLUE_STRING_DEVANAGARI_BOTTOM
"ु ृ"
+ AF_BLUE_STRING_ETHIOPIC_TOP
+ "ሀ ሃ ዘ ፐ ማ በ ዋ ዐ"
+ AF_BLUE_STRING_ETHIOPIC_BOTTOM
+ "ለ ሐ በ ዘ ሀ ሪ ዐ ጨ"
+
+ AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP
+ "გ დ ე ვ თ ი ო ღ"
+ AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM
+ "ა ზ მ ს შ ძ ხ პ"
+ AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER
+ "ს ხ ქ ზ მ შ ჩ წ"
+ AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER
+ "ე ვ ჟ ტ უ ფ ქ ყ"
+
+ AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP
+ "Ⴑ Ⴇ Ⴙ Ⴜ Ⴄ Ⴅ Ⴓ Ⴚ"
+ AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM
+ "Ⴄ Ⴅ Ⴇ Ⴈ Ⴆ Ⴑ Ⴊ Ⴋ"
+
+ AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP
+ "ⴁ ⴗ ⴂ ⴄ ⴅ ⴇ ⴔ ⴖ"
+ AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM
+ "ⴈ ⴌ ⴖ ⴎ ⴃ ⴆ ⴋ ⴢ"
+ AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER
+ "ⴐ ⴑ ⴓ ⴕ ⴙ ⴛ ⴡ ⴣ"
+ AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER
+ "ⴄ ⴅ ⴔ ⴕ ⴁ ⴂ ⴘ ⴝ"
+
+ AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP
+ "Ნ Ჟ Ჳ Ჸ Გ Ე Ო Ჴ"
+ AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM
+ "Ი Ჲ Ო Ჩ Მ Შ Ჯ Ჽ"
+
+ AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP
+ "Ⰵ Ⱄ Ⱚ Ⰴ Ⰲ Ⰺ Ⱛ Ⰻ"
+ AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM
+ "Ⰵ Ⰴ Ⰲ Ⱚ Ⱎ Ⱑ Ⰺ Ⱄ"
+ AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP
+ "ⰵ ⱄ ⱚ ⰴ ⰲ ⰺ ⱛ ⰻ"
+ AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM
+ "ⰵ ⰴ ⰲ ⱚ ⱎ ⱑ ⰺ ⱄ"
+
+ AF_BLUE_STRING_GOTHIC_TOP
+ "𐌲 𐌶 𐍀 𐍄 𐌴 𐍃 𐍈 𐌾"
+ AF_BLUE_STRING_GOTHIC_BOTTOM
+ "𐌶 𐌴 𐍃 𐍈"
+
AF_BLUE_STRING_GREEK_CAPITAL_TOP
- "ΓΒΕΖΘΟΩ"
+ "Γ Β Ε Ζ Θ Ο Ω"
AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM
- "ΒΔΖΞΘΟ"
+ "Β Δ Ζ Ξ Θ Ο"
AF_BLUE_STRING_GREEK_SMALL_BETA_TOP
- "βθδζλξ"
+ "β θ δ ζ λ ξ"
AF_BLUE_STRING_GREEK_SMALL
- "αειοπστω"
+ "α ε ι ο π σ τ ω"
AF_BLUE_STRING_GREEK_SMALL_DESCENDER
- "βγημρφχψ"
+ "β γ η μ ρ φ χ ψ"
+
+ AF_BLUE_STRING_GUJARATI_TOP
+ "ત ન ઋ ઌ છ ટ ર ૦"
+ AF_BLUE_STRING_GUJARATI_BOTTOM
+ "ખ ગ ઘ ઞ ઇ ઈ ઠ જ"
+ AF_BLUE_STRING_GUJARATI_ASCENDER
+ "ઈ ઊ િ ી લી શ્ચિ જિ સી"
+ AF_BLUE_STRING_GUJARATI_DESCENDER
+ "ુ ૃ ૄ ખુ છૃ છૄ"
+ AF_BLUE_STRING_GUJARATI_DIGIT_TOP
+ "૦ ૧ ૨ ૩ ૭"
+
+ AF_BLUE_STRING_GURMUKHI_BASE
+ "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
+ AF_BLUE_STRING_GURMUKHI_HEAD
+ "ਕ ਗ ਙ ਚ ਜ ਤ ਧ ਸ"
+ AF_BLUE_STRING_GURMUKHI_TOP
+ "ਇ ਈ ਉ ਏ ਓ ੳ ਿ ੀ"
+ AF_BLUE_STRING_GURMUKHI_BOTTOM
+ "ਅ ਏ ਓ ਗ ਜ ਠ ਰ ਸ"
+ AF_BLUE_STRING_GURMUKHI_DIGIT_TOP
+ "੦ ੧ ੨ ੩ ੭"
AF_BLUE_STRING_HEBREW_TOP
- "בדהחךכםס"
+ "ב ד ה ח ך כ ם ס"
AF_BLUE_STRING_HEBREW_BOTTOM
- "בטכםסצ"
+ "ב ט כ ם ס צ"
AF_BLUE_STRING_HEBREW_DESCENDER
- "קךןףץ"
+ "ק ך ן ף ץ"
+
+ AF_BLUE_STRING_KANNADA_TOP
+ "ಇ ಊ ಐ ಣ ಸಾ ನಾ ದಾ ರಾ"
+ AF_BLUE_STRING_KANNADA_BOTTOM
+ "ಅ ಉ ಎ ಲ ೦ ೨ ೬ ೭"
+
+ AF_BLUE_STRING_KAYAH_LI_TOP
+ "꤅ ꤏ ꤁ ꤋ ꤀ ꤍ"
+ AF_BLUE_STRING_KAYAH_LI_BOTTOM
+ "꤈ ꤘ ꤀ ꤍ ꤢ"
+ AF_BLUE_STRING_KAYAH_LI_ASCENDER
+ "ꤖ ꤡ"
+ AF_BLUE_STRING_KAYAH_LI_DESCENDER
+ "ꤑ ꤜ ꤞ"
+ AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER
+ "ꤑ꤬ ꤜ꤭ ꤔ꤬"
+
+ AF_BLUE_STRING_KHMER_TOP
+ "ខ ទ ន ឧ ឩ ា"
+ AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP
+ "ក្ក ក្ខ ក្គ ក្ថ"
+ AF_BLUE_STRING_KHMER_BOTTOM
+ "ខ ឃ ច ឋ ប ម យ ឲ"
+ AF_BLUE_STRING_KHMER_DESCENDER
+ "ត្រ រៀ ឲ្យ អឿ"
+ AF_BLUE_STRING_KHMER_LARGE_DESCENDER
+ "ន្ត្រៃ ង្ខ្យ ក្បៀ ច្រៀ ន្តឿ ល្បឿ"
+
+ AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP
+ "᧠ ᧡"
+ AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM
+ "᧶ ᧹"
+
+ AF_BLUE_STRING_LAO_TOP
+ "າ ດ ອ ມ ລ ວ ຣ ງ"
+ AF_BLUE_STRING_LAO_BOTTOM
+ "າ ອ ບ ຍ ຣ ຮ ວ ຢ"
+ AF_BLUE_STRING_LAO_ASCENDER
+ "ປ ຢ ຟ ຝ"
+ AF_BLUE_STRING_LAO_LARGE_ASCENDER
+ "ໂ ໄ ໃ"
+ AF_BLUE_STRING_LAO_DESCENDER
+ "ງ ຊ ຖ ຽ ໆ ຯ"
AF_BLUE_STRING_LATIN_CAPITAL_TOP
- "THEZOCQS"
+ "T H E Z O C Q S"
AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM
- "HEZLOCUS"
+ "H E Z L O C U S"
AF_BLUE_STRING_LATIN_SMALL_F_TOP
- "fijkdbh"
- AF_BLUE_STRING_LATIN_SMALL
- "xzroesc"
+ "f i j k d b h"
+ AF_BLUE_STRING_LATIN_SMALL_TOP
+ "u v x z o e s c"
+ AF_BLUE_STRING_LATIN_SMALL_BOTTOM
+ "n r x z o e s c"
AF_BLUE_STRING_LATIN_SMALL_DESCENDER
- "pqgjy"
+ "p q g j y"
- // we separate the letters with spaces to avoid ligatures;
- // this is just for convenience to simplify reading
+ // we assume that both the subscript and superscript ranges
+ // don't contain oldstyle digits (actually, most fonts probably
+ // have digits only in those ranges)
+ AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP
+ "₀ ₃ ₅ ₇ ₈"
+ AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM
+ "₀ ₁ ₂ ₃ ₈"
+ AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP
+ "ᵢ ⱼ ₕ ₖ ₗ"
+ AF_BLUE_STRING_LATIN_SUBS_SMALL
+ "ₐ ₑ ₒ ₓ ₙ ₛ ᵥ ᵤ ᵣ"
+ AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER
+ "ᵦ ᵧ ᵨ ᵩ ₚ"
+
+ AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP
+ "⁰ ³ ⁵ ⁷ ᵀ ᴴ ᴱ ᴼ"
+ AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM
+ "⁰ ¹ ² ³ ᴱ ᴸ ᴼ ᵁ"
+ AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP
+ "ᵇ ᵈ ᵏ ʰ ʲ ᶠ ⁱ"
+ AF_BLUE_STRING_LATIN_SUPS_SMALL
+ "ᵉ ᵒ ʳ ˢ ˣ ᶜ ᶻ"
+ AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER
+ "ᵖ ʸ ᵍ"
+
+ AF_BLUE_STRING_LISU_TOP
+ "ꓡ ꓧ ꓱ ꓶ ꓩ ꓚ ꓵ ꓳ"
+ AF_BLUE_STRING_LISU_BOTTOM
+ "ꓕ ꓜ ꓞ ꓡ ꓛ ꓢ ꓳ ꓴ"
+
+ AF_BLUE_STRING_MALAYALAM_TOP
+ "ഒ ട ഠ റ ച പ ച്ച പ്പ"
+ AF_BLUE_STRING_MALAYALAM_BOTTOM
+ "ട ഠ ധ ശ ഘ ച ഥ ല"
+
+ AF_BLUE_STRING_MYANMAR_TOP
+ "ခ ဂ င ဒ ဝ ၥ ၊ ။"
+ AF_BLUE_STRING_MYANMAR_BOTTOM
+ "င ဎ ဒ ပ ဗ ဝ ၊ ။"
+ AF_BLUE_STRING_MYANMAR_ASCENDER
+ "ဩ ြ ၍ ၏ ၆ ါ ိ"
+ AF_BLUE_STRING_MYANMAR_DESCENDER
+ "ဉ ည ဥ ဩ ဨ ၂ ၅ ၉"
+
+ AF_BLUE_STRING_NKO_TOP
+ "ߐ ߉ ߒ ߟ ߖ ߜ ߠ ߥ"
+ AF_BLUE_STRING_NKO_BOTTOM
+ "߀ ߘ ߡ ߠ ߥ"
+ AF_BLUE_STRING_NKO_SMALL_TOP
+ "ߏ ߛ ߋ"
+ AF_BLUE_STRING_NKO_SMALL_BOTTOM
+ "ߎ ߏ ߛ ߋ"
+
+ AF_BLUE_STRING_OL_CHIKI
+ "ᱛ ᱜ ᱝ ᱡ ᱢ ᱥ"
+
+ AF_BLUE_STRING_OLD_TURKIC_TOP
+ "𐰗 𐰘 𐰧"
+ AF_BLUE_STRING_OLD_TURKIC_BOTTOM
+ "𐰉 𐰗 𐰦 𐰧"
+
+ AF_BLUE_STRING_OSAGE_CAPITAL_TOP
+ "𐒾 𐓍 𐓒 𐓓 𐒻 𐓂 𐒵 𐓆"
+ AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM
+ "𐒰 𐓍 𐓂 𐒿 𐓎 𐒹"
+ AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER
+ "𐒼 𐒽 𐒾"
+ AF_BLUE_STRING_OSAGE_SMALL_TOP
+ "𐓵 𐓶 𐓺 𐓻 𐓝 𐓣 𐓪 𐓮"
+ AF_BLUE_STRING_OSAGE_SMALL_BOTTOM
+ "𐓘 𐓚 𐓣 𐓵 𐓡 𐓧 𐓪 𐓶"
+ AF_BLUE_STRING_OSAGE_SMALL_ASCENDER
+ "𐓤 𐓦 𐓸 𐓹 𐓛"
+ AF_BLUE_STRING_OSAGE_SMALL_DESCENDER
+ "𐓤 𐓥 𐓦"
+
+ AF_BLUE_STRING_OSMANYA_TOP
+ "𐒆 𐒉 𐒐 𐒒 𐒘 𐒛 𐒠 𐒣"
+ AF_BLUE_STRING_OSMANYA_BOTTOM
+ "𐒀 𐒂 𐒆 𐒈 𐒊 𐒒 𐒠 𐒩"
+
+ AF_BLUE_STRING_SAURASHTRA_TOP
+ "ꢜ ꢞ ꢳ ꢂ ꢖ ꢒ ꢝ ꢛ"
+ AF_BLUE_STRING_SAURASHTRA_BOTTOM
+ "ꢂ ꢨ ꢺ ꢤ ꢎ"
+
+ AF_BLUE_STRING_SHAVIAN_TOP
+ "𐑕 𐑙"
+ AF_BLUE_STRING_SHAVIAN_BOTTOM
+ "𐑔 𐑖 𐑗 𐑹 𐑻"
+ AF_BLUE_STRING_SHAVIAN_DESCENDER
+ "𐑟 𐑣"
+ AF_BLUE_STRING_SHAVIAN_SMALL_TOP
+ "𐑱 𐑲 𐑳 𐑴 𐑸 𐑺 𐑼"
+ AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM
+ "𐑴 𐑻 𐑹"
+
+ AF_BLUE_STRING_SINHALA_TOP
+ "ඉ ක ඝ ඳ ප ය ල ෆ"
+ AF_BLUE_STRING_SINHALA_BOTTOM
+ "එ ඔ ඝ ජ ට ථ ධ ර"
+ AF_BLUE_STRING_SINHALA_DESCENDER
+ "ද ඳ උ ල තූ තු බු දු"
+
+ AF_BLUE_STRING_SUNDANESE_TOP
+ "ᮋ ᮞ ᮮ ᮽ ᮰ ᮈ"
+ AF_BLUE_STRING_SUNDANESE_BOTTOM
+ "ᮄ ᮔ ᮕ ᮗ ᮰ ᮆ ᮈ ᮉ"
+ AF_BLUE_STRING_SUNDANESE_DESCENDER
+ "ᮼ ᳄"
+
+ AF_BLUE_STRING_TAI_VIET_TOP
+ "ꪆ ꪔ ꪒ ꪖ ꪫ"
+ AF_BLUE_STRING_TAI_VIET_BOTTOM
+ "ꪉ ꪫ ꪮ"
+
+ AF_BLUE_STRING_TAMIL_TOP
+ "உ ஒ ஓ ற ஈ க ங ச"
+ AF_BLUE_STRING_TAMIL_BOTTOM
+ "க ச ல ஶ உ ங ட ப"
+
AF_BLUE_STRING_TELUGU_TOP
"ఇ ఌ ఙ ఞ ణ ఱ ౯"
AF_BLUE_STRING_TELUGU_BOTTOM
@@ -146,48 +498,56 @@
AF_BLUE_STRING_THAI_DIGIT_TOP
"๐ ๑ ๓"
+ AF_BLUE_STRING_TIFINAGH
+ "ⵔ ⵙ ⵛ ⵞ ⴵ ⴼ ⴹ ⵎ"
+
+ AF_BLUE_STRING_VAI_TOP
+ "ꗍ ꘖ ꘙ ꘜ ꖜ ꖝ ꔅ ꕢ"
+ AF_BLUE_STRING_VAI_BOTTOM
+ "ꗍ ꘖ ꘙ ꗞ ꔅ ꕢ ꖜ ꔆ"
+
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRING_CJK_TOP
- "他们你來們到和地"
- "对對就席我时時會"
- "来為能舰說说这這"
- "齊 |"
- "军同已愿既星是景"
- "民照现現理用置要"
- "軍那配里開雷露面"
- "顾"
+ "他 们 你 來 們 到 和 地"
+ " 对 對 就 席 我 时 時 會"
+ " 来 為 能 舰 說 说 这 這"
+ " 齊 |"
+ " 军 同 已 愿 既 星 是 景"
+ " 民 照 现 現 理 用 置 要"
+ " 軍 那 配 里 開 雷 露 面"
+ " 顾"
AF_BLUE_STRING_CJK_BOTTOM
- "个为人他以们你來"
- "個們到和大对對就"
- "我时時有来為要說"
- "说 |"
- "主些因它想意理生"
- "當看着置者自著裡"
- "过还进進過道還里"
- "面"
+ "个 为 人 他 以 们 你 來"
+ " 個 們 到 和 大 对 對 就"
+ " 我 时 時 有 来 為 要 說"
+ " 说 |"
+ " 主 些 因 它 想 意 理 生"
+ " 當 看 着 置 者 自 著 裡"
+ " 过 还 进 進 過 道 還 里"
+ " 面"
#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
AF_BLUE_STRING_CJK_LEFT
- "些们你來們到和地"
- "她将將就年得情最"
- "样樣理能說说这這"
- "通 |"
- "即吗吧听呢品响嗎"
- "师師收断斷明眼間"
- "间际陈限除陳随際"
- "隨"
+ " 些 们 你 來 們 到 和 地"
+ " 她 将 將 就 年 得 情 最"
+ " 样 樣 理 能 說 说 这 這"
+ " 通 |"
+ " 即 吗 吧 听 呢 品 响 嗎"
+ " 师 師 收 断 斷 明 眼 間"
+ " 间 际 陈 限 除 陳 随 際"
+ " 隨"
AF_BLUE_STRING_CJK_RIGHT
- "事前學将將情想或"
- "政斯新样樣民沒没"
- "然特现現球第經谁"
- "起 |"
- "例別别制动動吗嗎"
- "增指明朝期构物确"
- "种調调費费那都間"
- "间"
+ "事 前 學 将 將 情 想 或"
+ " 政 斯 新 样 樣 民 沒 没"
+ " 然 特 现 現 球 第 經 谁"
+ " 起 |"
+ " 例 別 别 制 动 動 吗 嗎"
+ " 增 指 明 朝 期 构 物 确"
+ " 种 調 调 費 费 那 都 間"
+ " 间"
#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
@@ -219,6 +579,14 @@
// respectively. Only horizontal blue zones (i.e., adjusting vertical
// coordinate values) are supported.
//
+// Some scripts like Khmer need character composition to get all necessary
+// blue zones, since Unicode only provides an abstract data model that
+// doesn't represent all possible glyph shapes. For such character
+// clusters, the HarfBuzz library is used to convert them into the
+// corresponding glyphs. The largest glyph element (where `largest' can be
+// either `largest ascender' or `largest descender') then defines the
+// corresponding flat or round extremum.
+//
// For the latin auto-hinter, the overshoot should be larger than the
// reference for top zones, and vice versa for bottom zones.
//
@@ -229,6 +597,21 @@
//
// If not set, take the minimum values.
//
+// Mutually exclusive with `LATIN_SUB_TOP'.
+//
+// LATIN_SUB_TOP
+// For all glyphs of a character cluster, compute the maximum flat
+// and round coordinate values of each component, then take the
+// smallest of the maximum values. The idea is to get the top of
+// subscript glyphs, as used in Khmer, for example. Note that
+// this mechanism doesn't work for ordinary ligatures.
+//
+// This flags indicates a secondary blue zone: It gets removed if
+// there is a non-LATIN_SUB_TOP blue zone at the same coordinate
+// value (after scaling).
+//
+// Mutually exclusive with `LATIN_TOP'.
+//
// LATIN_NEUTRAL
// Ignore round extrema and define the blue zone with flat values only.
// Both top and bottom of contours can match. This is useful for
@@ -264,11 +647,11 @@
//
// Characters in a blue string are *not* automatically classified. Instead,
// first come the characters used for the overshoot value, then the
-// character `|', then the characters used for the reference value. The
-// blue zone is then set up by the mean values of all reference values and
-// all overshoot values, respectively. Both horizontal and vertical blue
-// zones (i.e., adjusting vertical and horizontal coordinate values,
-// respectively) are supported.
+// character `|', then the characters used for the reference value
+// (everything separated by space characters). The blue zone is then set up
+// by the mean values of all reference values and all overshoot values,
+// respectively. Both horizontal and vertical blue zones (i.e., adjusting
+// vertical and horizontal coordinate values, respectively) are supported.
//
// For the cjk auto-hinter, the overshoot should be smaller than the
// reference for top zones, and vice versa for bottom zones.
@@ -288,11 +671,103 @@
AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
+ AF_BLUE_STRINGSET_ADLM
+ { AF_BLUE_STRING_ADLAM_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM, 0 }
+ { AF_BLUE_STRING_ADLAM_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_ADLAM_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_ARAB
- { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_ARABIC_JOIN, 0 }
+ { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_ARABIC_BOTTOM, 0 }
+ { AF_BLUE_STRING_ARABIC_JOIN, AF_BLUE_PROPERTY_LATIN_NEUTRAL }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_ARMN
+ { AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM, 0 }
+ { AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_ARMENIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_AVST
+ { AF_BLUE_STRING_AVESTAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_AVESTAN_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_BAMU
+ { AF_BLUE_STRING_BAMUM_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_BAMUM_BOTTOM, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_BENG
+ { AF_BLUE_STRING_BENGALI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_BENGALI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_BENGALI_BASE, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_NEUTRAL |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_BENGALI_BASE, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_BUHD
+ { AF_BLUE_STRING_BUHID_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_BUHID_LARGE, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_BUHID_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_BUHID_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_CAKM
+ { AF_BLUE_STRING_CHAKMA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_CHAKMA_BOTTOM, 0 }
+ { AF_BLUE_STRING_CHAKMA_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_CANS
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM, 0 }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_CARI
+ { AF_BLUE_STRING_CARIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_CARIAN_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_CHER
+ { AF_BLUE_STRING_CHEROKEE_CAPITAL, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_CHEROKEE_CAPITAL, 0 }
+ { AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_CHEROKEE_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_CHEROKEE_SMALL, 0 }
+ { AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_COPT
+ { AF_BLUE_STRING_COPTIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM, 0 }
+ { AF_BLUE_STRING_COPTIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_COPTIC_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_CPRT
+ { AF_BLUE_STRING_CYPRIOT_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_CYPRIOT_BOTTOM, 0 }
+ { AF_BLUE_STRING_CYPRIOT_SMALL, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_CYPRIOT_SMALL, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_CYRL
{ AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
{ AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 }
@@ -312,6 +787,52 @@
{ AF_BLUE_STRING_DEVANAGARI_BOTTOM, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_DSRT
+ { AF_BLUE_STRING_DESERET_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM, 0 }
+ { AF_BLUE_STRING_DESERET_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_DESERET_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_ETHI
+ { AF_BLUE_STRING_ETHIOPIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_ETHIOPIC_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_GEOR
+ { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM, 0 }
+ { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER, 0 }
+ { AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_GEOK
+ { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM, 0 }
+ { AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM, 0 }
+ { AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_GLAG
+ { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM, 0 }
+ { AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_GOTH
+ { AF_BLUE_STRING_GOTHIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_GOTHIC_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_GREK
{ AF_BLUE_STRING_GREEK_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
{ AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0 }
@@ -322,6 +843,25 @@
{ AF_BLUE_STRING_GREEK_SMALL_DESCENDER, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_GUJR
+ { AF_BLUE_STRING_GUJARATI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_GUJARATI_BOTTOM, 0 }
+ { AF_BLUE_STRING_GUJARATI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_GUJARATI_DESCENDER, 0 }
+ { AF_BLUE_STRING_GUJARATI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_GURU
+ { AF_BLUE_STRING_GURMUKHI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_GURMUKHI_HEAD, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_GURMUKHI_BASE, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_NEUTRAL |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_GURMUKHI_BOTTOM, 0 }
+ { AF_BLUE_STRING_GURMUKHI_DIGIT_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_HEBR
{ AF_BLUE_STRING_HEBREW_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_LONG }
@@ -329,21 +869,175 @@
{ AF_BLUE_STRING_HEBREW_DESCENDER, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_KALI
+ { AF_BLUE_STRING_KAYAH_LI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_KAYAH_LI_BOTTOM, 0 }
+ { AF_BLUE_STRING_KAYAH_LI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_KAYAH_LI_DESCENDER, 0 }
+ { AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_KHMR
+ { AF_BLUE_STRING_KHMER_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP, AF_BLUE_PROPERTY_LATIN_SUB_TOP }
+ { AF_BLUE_STRING_KHMER_BOTTOM, 0 }
+ { AF_BLUE_STRING_KHMER_DESCENDER, 0 }
+ { AF_BLUE_STRING_KHMER_LARGE_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_KHMS
+ { AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_KNDA
+ { AF_BLUE_STRING_KANNADA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_KANNADA_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_LAO
+ { AF_BLUE_STRING_LAO_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_LAO_BOTTOM, 0 }
+ { AF_BLUE_STRING_LAO_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_LAO_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_LAO_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_LATN
{ AF_BLUE_STRING_LATIN_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
{ AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM, 0 }
{ AF_BLUE_STRING_LATIN_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
- { AF_BLUE_STRING_LATIN_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
+ { AF_BLUE_STRING_LATIN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
- { AF_BLUE_STRING_LATIN_SMALL, 0 }
+ { AF_BLUE_STRING_LATIN_SMALL_BOTTOM, 0 }
{ AF_BLUE_STRING_LATIN_SMALL_DESCENDER, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_LATB
+ { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM, 0 }
+ { AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_LATIN_SUBS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_LATIN_SUBS_SMALL, 0 }
+ { AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_LATP
+ { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM, 0 }
+ { AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_LATIN_SUPS_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_LATIN_SUPS_SMALL, 0 }
+ { AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_LISU
+ { AF_BLUE_STRING_LISU_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_LISU_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_MLYM
+ { AF_BLUE_STRING_MALAYALAM_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_MYMR
+ { AF_BLUE_STRING_MYANMAR_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_MYANMAR_BOTTOM, 0 }
+ { AF_BLUE_STRING_MYANMAR_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_MYANMAR_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_NKOO
+ { AF_BLUE_STRING_NKO_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_NKO_BOTTOM, 0 }
+ { AF_BLUE_STRING_NKO_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_NKO_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_NONE
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_OLCK
+ { AF_BLUE_STRING_OL_CHIKI, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_OL_CHIKI, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_ORKH
+ { AF_BLUE_STRING_OLD_TURKIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_OLD_TURKIC_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_OSGE
+ { AF_BLUE_STRING_OSAGE_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM, 0 }
+ { AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER, 0 }
+ { AF_BLUE_STRING_OSAGE_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_OSAGE_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_OSAGE_SMALL_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_OSAGE_SMALL_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_OSMA
+ { AF_BLUE_STRING_OSMANYA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_OSMANYA_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_SAUR
+ { AF_BLUE_STRING_SAURASHTRA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_SAURASHTRA_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_SHAW
+ { AF_BLUE_STRING_SHAVIAN_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_SHAVIAN_BOTTOM, 0 }
+ { AF_BLUE_STRING_SHAVIAN_DESCENDER, 0 }
+ { AF_BLUE_STRING_SHAVIAN_SMALL_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_SINH
+ { AF_BLUE_STRING_SINHALA_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_SINHALA_BOTTOM, 0 }
+ { AF_BLUE_STRING_SINHALA_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_SUND
+ { AF_BLUE_STRING_SUNDANESE_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_SUNDANESE_BOTTOM, 0 }
+ { AF_BLUE_STRING_SUNDANESE_DESCENDER, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_TAML
+ { AF_BLUE_STRING_TAMIL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_TAMIL_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+ AF_BLUE_STRINGSET_TAVT
+ { AF_BLUE_STRING_TAI_VIET_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_TAI_VIET_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_TELU
{ AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
{ AF_BLUE_STRING_TELUGU_BOTTOM, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_TFNG
+ { AF_BLUE_STRING_TIFINAGH, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_TIFINAGH, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_THAI
{ AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
@@ -355,6 +1049,10 @@
{ AF_BLUE_STRING_THAI_DIGIT_TOP, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_VAII
+ { AF_BLUE_STRING_VAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_VAI_BOTTOM, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
#ifdef AF_CONFIG_OPTION_CJK
diff --git a/src/autofit/afblue.h b/src/autofit/afblue.h
index 94e33a9..de31e25 100644
--- a/src/autofit/afblue.h
+++ b/src/autofit/afblue.h
@@ -7,7 +7,7 @@
/* */
/* Auto-fitter data for blue strings (specification). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -19,8 +19,8 @@
/***************************************************************************/
-#ifndef __AFBLUE_H__
-#define __AFBLUE_H__
+#ifndef AFBLUE_H_
+#define AFBLUE_H_
FT_BEGIN_HEADER
@@ -28,32 +28,35 @@
/* an auxiliary macro to decode a UTF-8 character -- since we only use */
/* hard-coded, self-converted data, no error checking is performed */
-#define GET_UTF8_CHAR( ch, p ) \
- ch = (unsigned char)*p++; \
- if ( ch >= 0x80 ) \
- { \
- FT_UInt len; \
- \
- \
- if ( ch < 0xE0 ) \
- { \
- len = 1; \
- ch &= 0x1F; \
- } \
- else if ( ch < 0xF0 ) \
- { \
- len = 2; \
- ch &= 0x0F; \
- } \
- else \
- { \
- len = 3; \
- ch &= 0x07; \
- } \
- \
- for ( ; len > 0; len-- ) \
- ch = ( ch << 6 ) | ( *p++ & 0x3F ); \
- }
+#define GET_UTF8_CHAR( ch, p ) \
+ do \
+ { \
+ ch = (unsigned char)*p++; \
+ if ( ch >= 0x80 ) \
+ { \
+ FT_UInt len_; \
+ \
+ \
+ if ( ch < 0xE0 ) \
+ { \
+ len_ = 1; \
+ ch &= 0x1F; \
+ } \
+ else if ( ch < 0xF0 ) \
+ { \
+ len_ = 2; \
+ ch &= 0x0F; \
+ } \
+ else \
+ { \
+ len_ = 3; \
+ ch &= 0x07; \
+ } \
+ \
+ for ( ; len_ > 0; len_-- ) \
+ ch = ( ch << 6 ) | ( *p++ & 0x3F ); \
+ } \
+ } while ( 0 )
/*************************************************************************/
@@ -74,47 +77,199 @@
typedef enum AF_Blue_String_
{
- AF_BLUE_STRING_ARABIC_TOP = 0,
- AF_BLUE_STRING_ARABIC_JOIN = 13,
- AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 24,
- AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 41,
- AF_BLUE_STRING_CYRILLIC_SMALL = 58,
- AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 75,
- AF_BLUE_STRING_DEVANAGARI_BASE = 82,
- AF_BLUE_STRING_DEVANAGARI_TOP = 107,
- AF_BLUE_STRING_DEVANAGARI_HEAD = 132,
- AF_BLUE_STRING_DEVANAGARI_BOTTOM = 157,
- AF_BLUE_STRING_GREEK_CAPITAL_TOP = 164,
- AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 179,
- AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 192,
- AF_BLUE_STRING_GREEK_SMALL = 205,
- AF_BLUE_STRING_GREEK_SMALL_DESCENDER = 222,
- AF_BLUE_STRING_HEBREW_TOP = 239,
- AF_BLUE_STRING_HEBREW_BOTTOM = 256,
- AF_BLUE_STRING_HEBREW_DESCENDER = 269,
- AF_BLUE_STRING_LATIN_CAPITAL_TOP = 280,
- AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 289,
- AF_BLUE_STRING_LATIN_SMALL_F_TOP = 298,
- AF_BLUE_STRING_LATIN_SMALL = 306,
- AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 314,
- AF_BLUE_STRING_TELUGU_TOP = 320,
- AF_BLUE_STRING_TELUGU_BOTTOM = 342,
- AF_BLUE_STRING_THAI_TOP = 364,
- AF_BLUE_STRING_THAI_BOTTOM = 383,
- AF_BLUE_STRING_THAI_ASCENDER = 405,
- AF_BLUE_STRING_THAI_LARGE_ASCENDER = 415,
- AF_BLUE_STRING_THAI_DESCENDER = 425,
- AF_BLUE_STRING_THAI_LARGE_DESCENDER = 438,
- AF_BLUE_STRING_THAI_DIGIT_TOP = 445,
- af_blue_1_1 = 454,
+ AF_BLUE_STRING_ADLAM_CAPITAL_TOP = 0,
+ AF_BLUE_STRING_ADLAM_CAPITAL_BOTTOM = 30,
+ AF_BLUE_STRING_ADLAM_SMALL_TOP = 40,
+ AF_BLUE_STRING_ADLAM_SMALL_BOTTOM = 65,
+ AF_BLUE_STRING_ARABIC_TOP = 105,
+ AF_BLUE_STRING_ARABIC_BOTTOM = 123,
+ AF_BLUE_STRING_ARABIC_JOIN = 138,
+ AF_BLUE_STRING_ARMENIAN_CAPITAL_TOP = 141,
+ AF_BLUE_STRING_ARMENIAN_CAPITAL_BOTTOM = 165,
+ AF_BLUE_STRING_ARMENIAN_SMALL_ASCENDER = 189,
+ AF_BLUE_STRING_ARMENIAN_SMALL_TOP = 210,
+ AF_BLUE_STRING_ARMENIAN_SMALL_BOTTOM = 234,
+ AF_BLUE_STRING_ARMENIAN_SMALL_DESCENDER = 258,
+ AF_BLUE_STRING_AVESTAN_TOP = 282,
+ AF_BLUE_STRING_AVESTAN_BOTTOM = 302,
+ AF_BLUE_STRING_BAMUM_TOP = 312,
+ AF_BLUE_STRING_BAMUM_BOTTOM = 344,
+ AF_BLUE_STRING_BENGALI_BASE = 376,
+ AF_BLUE_STRING_BENGALI_TOP = 408,
+ AF_BLUE_STRING_BENGALI_HEAD = 436,
+ AF_BLUE_STRING_BUHID_TOP = 468,
+ AF_BLUE_STRING_BUHID_LARGE = 476,
+ AF_BLUE_STRING_BUHID_SMALL = 488,
+ AF_BLUE_STRING_BUHID_BOTTOM = 504,
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_TOP = 532,
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_BOTTOM = 564,
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_TOP = 596,
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_SMALL_BOTTOM = 628,
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_TOP = 660,
+ AF_BLUE_STRING_CANADIAN_SYLLABICS_SUPS_BOTTOM = 688,
+ AF_BLUE_STRING_CARIAN_TOP = 720,
+ AF_BLUE_STRING_CARIAN_BOTTOM = 760,
+ AF_BLUE_STRING_CHAKMA_TOP = 795,
+ AF_BLUE_STRING_CHAKMA_BOTTOM = 820,
+ AF_BLUE_STRING_CHAKMA_DESCENDER = 845,
+ AF_BLUE_STRING_CHEROKEE_CAPITAL = 910,
+ AF_BLUE_STRING_CHEROKEE_SMALL_ASCENDER = 942,
+ AF_BLUE_STRING_CHEROKEE_SMALL = 974,
+ AF_BLUE_STRING_CHEROKEE_SMALL_DESCENDER = 1006,
+ AF_BLUE_STRING_COPTIC_CAPITAL_TOP = 1022,
+ AF_BLUE_STRING_COPTIC_CAPITAL_BOTTOM = 1054,
+ AF_BLUE_STRING_COPTIC_SMALL_TOP = 1086,
+ AF_BLUE_STRING_COPTIC_SMALL_BOTTOM = 1118,
+ AF_BLUE_STRING_CYPRIOT_TOP = 1150,
+ AF_BLUE_STRING_CYPRIOT_BOTTOM = 1190,
+ AF_BLUE_STRING_CYPRIOT_SMALL = 1225,
+ AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 1240,
+ AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 1264,
+ AF_BLUE_STRING_CYRILLIC_SMALL = 1288,
+ AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 1312,
+ AF_BLUE_STRING_DESERET_CAPITAL_TOP = 1321,
+ AF_BLUE_STRING_DESERET_CAPITAL_BOTTOM = 1346,
+ AF_BLUE_STRING_DESERET_SMALL_TOP = 1371,
+ AF_BLUE_STRING_DESERET_SMALL_BOTTOM = 1396,
+ AF_BLUE_STRING_DEVANAGARI_BASE = 1421,
+ AF_BLUE_STRING_DEVANAGARI_TOP = 1453,
+ AF_BLUE_STRING_DEVANAGARI_HEAD = 1485,
+ AF_BLUE_STRING_DEVANAGARI_BOTTOM = 1517,
+ AF_BLUE_STRING_ETHIOPIC_TOP = 1525,
+ AF_BLUE_STRING_ETHIOPIC_BOTTOM = 1557,
+ AF_BLUE_STRING_GEORGIAN_MKHEDRULI_TOP = 1589,
+ AF_BLUE_STRING_GEORGIAN_MKHEDRULI_BOTTOM = 1621,
+ AF_BLUE_STRING_GEORGIAN_MKHEDRULI_ASCENDER = 1653,
+ AF_BLUE_STRING_GEORGIAN_MKHEDRULI_DESCENDER = 1685,
+ AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_TOP = 1717,
+ AF_BLUE_STRING_GEORGIAN_ASOMTAVRULI_BOTTOM = 1749,
+ AF_BLUE_STRING_GEORGIAN_NUSKHURI_TOP = 1781,
+ AF_BLUE_STRING_GEORGIAN_NUSKHURI_BOTTOM = 1813,
+ AF_BLUE_STRING_GEORGIAN_NUSKHURI_ASCENDER = 1845,
+ AF_BLUE_STRING_GEORGIAN_NUSKHURI_DESCENDER = 1877,
+ AF_BLUE_STRING_GEORGIAN_MTAVRULI_TOP = 1909,
+ AF_BLUE_STRING_GEORGIAN_MTAVRULI_BOTTOM = 1941,
+ AF_BLUE_STRING_GLAGOLITIC_CAPITAL_TOP = 1973,
+ AF_BLUE_STRING_GLAGOLITIC_CAPITAL_BOTTOM = 2005,
+ AF_BLUE_STRING_GLAGOLITIC_SMALL_TOP = 2037,
+ AF_BLUE_STRING_GLAGOLITIC_SMALL_BOTTOM = 2069,
+ AF_BLUE_STRING_GOTHIC_TOP = 2101,
+ AF_BLUE_STRING_GOTHIC_BOTTOM = 2141,
+ AF_BLUE_STRING_GREEK_CAPITAL_TOP = 2161,
+ AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 2182,
+ AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 2200,
+ AF_BLUE_STRING_GREEK_SMALL = 2218,
+ AF_BLUE_STRING_GREEK_SMALL_DESCENDER = 2242,
+ AF_BLUE_STRING_GUJARATI_TOP = 2266,
+ AF_BLUE_STRING_GUJARATI_BOTTOM = 2298,
+ AF_BLUE_STRING_GUJARATI_ASCENDER = 2330,
+ AF_BLUE_STRING_GUJARATI_DESCENDER = 2380,
+ AF_BLUE_STRING_GUJARATI_DIGIT_TOP = 2413,
+ AF_BLUE_STRING_GURMUKHI_BASE = 2433,
+ AF_BLUE_STRING_GURMUKHI_HEAD = 2465,
+ AF_BLUE_STRING_GURMUKHI_TOP = 2497,
+ AF_BLUE_STRING_GURMUKHI_BOTTOM = 2529,
+ AF_BLUE_STRING_GURMUKHI_DIGIT_TOP = 2561,
+ AF_BLUE_STRING_HEBREW_TOP = 2581,
+ AF_BLUE_STRING_HEBREW_BOTTOM = 2605,
+ AF_BLUE_STRING_HEBREW_DESCENDER = 2623,
+ AF_BLUE_STRING_KANNADA_TOP = 2638,
+ AF_BLUE_STRING_KANNADA_BOTTOM = 2682,
+ AF_BLUE_STRING_KAYAH_LI_TOP = 2714,
+ AF_BLUE_STRING_KAYAH_LI_BOTTOM = 2738,
+ AF_BLUE_STRING_KAYAH_LI_ASCENDER = 2758,
+ AF_BLUE_STRING_KAYAH_LI_DESCENDER = 2766,
+ AF_BLUE_STRING_KAYAH_LI_LARGE_DESCENDER = 2778,
+ AF_BLUE_STRING_KHMER_TOP = 2799,
+ AF_BLUE_STRING_KHMER_SUBSCRIPT_TOP = 2823,
+ AF_BLUE_STRING_KHMER_BOTTOM = 2863,
+ AF_BLUE_STRING_KHMER_DESCENDER = 2895,
+ AF_BLUE_STRING_KHMER_LARGE_DESCENDER = 2929,
+ AF_BLUE_STRING_KHMER_SYMBOLS_WAXING_TOP = 3016,
+ AF_BLUE_STRING_KHMER_SYMBOLS_WANING_BOTTOM = 3024,
+ AF_BLUE_STRING_LAO_TOP = 3032,
+ AF_BLUE_STRING_LAO_BOTTOM = 3064,
+ AF_BLUE_STRING_LAO_ASCENDER = 3096,
+ AF_BLUE_STRING_LAO_LARGE_ASCENDER = 3112,
+ AF_BLUE_STRING_LAO_DESCENDER = 3124,
+ AF_BLUE_STRING_LATIN_CAPITAL_TOP = 3148,
+ AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 3164,
+ AF_BLUE_STRING_LATIN_SMALL_F_TOP = 3180,
+ AF_BLUE_STRING_LATIN_SMALL_TOP = 3194,
+ AF_BLUE_STRING_LATIN_SMALL_BOTTOM = 3210,
+ AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 3226,
+ AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP = 3236,
+ AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM = 3256,
+ AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP = 3276,
+ AF_BLUE_STRING_LATIN_SUBS_SMALL = 3296,
+ AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER = 3332,
+ AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP = 3352,
+ AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM = 3383,
+ AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP = 3412,
+ AF_BLUE_STRING_LATIN_SUPS_SMALL = 3438,
+ AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER = 3463,
+ AF_BLUE_STRING_LISU_TOP = 3474,
+ AF_BLUE_STRING_LISU_BOTTOM = 3506,
+ AF_BLUE_STRING_MALAYALAM_TOP = 3538,
+ AF_BLUE_STRING_MALAYALAM_BOTTOM = 3582,
+ AF_BLUE_STRING_MYANMAR_TOP = 3614,
+ AF_BLUE_STRING_MYANMAR_BOTTOM = 3646,
+ AF_BLUE_STRING_MYANMAR_ASCENDER = 3678,
+ AF_BLUE_STRING_MYANMAR_DESCENDER = 3706,
+ AF_BLUE_STRING_NKO_TOP = 3738,
+ AF_BLUE_STRING_NKO_BOTTOM = 3762,
+ AF_BLUE_STRING_NKO_SMALL_TOP = 3777,
+ AF_BLUE_STRING_NKO_SMALL_BOTTOM = 3786,
+ AF_BLUE_STRING_OL_CHIKI = 3798,
+ AF_BLUE_STRING_OLD_TURKIC_TOP = 3822,
+ AF_BLUE_STRING_OLD_TURKIC_BOTTOM = 3837,
+ AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 3857,
+ AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 3897,
+ AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 3927,
+ AF_BLUE_STRING_OSAGE_SMALL_TOP = 3942,
+ AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 3982,
+ AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 4022,
+ AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 4047,
+ AF_BLUE_STRING_OSMANYA_TOP = 4062,
+ AF_BLUE_STRING_OSMANYA_BOTTOM = 4102,
+ AF_BLUE_STRING_SAURASHTRA_TOP = 4142,
+ AF_BLUE_STRING_SAURASHTRA_BOTTOM = 4174,
+ AF_BLUE_STRING_SHAVIAN_TOP = 4194,
+ AF_BLUE_STRING_SHAVIAN_BOTTOM = 4204,
+ AF_BLUE_STRING_SHAVIAN_DESCENDER = 4229,
+ AF_BLUE_STRING_SHAVIAN_SMALL_TOP = 4239,
+ AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4274,
+ AF_BLUE_STRING_SINHALA_TOP = 4289,
+ AF_BLUE_STRING_SINHALA_BOTTOM = 4321,
+ AF_BLUE_STRING_SINHALA_DESCENDER = 4353,
+ AF_BLUE_STRING_SUNDANESE_TOP = 4397,
+ AF_BLUE_STRING_SUNDANESE_BOTTOM = 4421,
+ AF_BLUE_STRING_SUNDANESE_DESCENDER = 4453,
+ AF_BLUE_STRING_TAI_VIET_TOP = 4461,
+ AF_BLUE_STRING_TAI_VIET_BOTTOM = 4481,
+ AF_BLUE_STRING_TAMIL_TOP = 4493,
+ AF_BLUE_STRING_TAMIL_BOTTOM = 4525,
+ AF_BLUE_STRING_TELUGU_TOP = 4557,
+ AF_BLUE_STRING_TELUGU_BOTTOM = 4585,
+ AF_BLUE_STRING_THAI_TOP = 4613,
+ AF_BLUE_STRING_THAI_BOTTOM = 4637,
+ AF_BLUE_STRING_THAI_ASCENDER = 4665,
+ AF_BLUE_STRING_THAI_LARGE_ASCENDER = 4677,
+ AF_BLUE_STRING_THAI_DESCENDER = 4689,
+ AF_BLUE_STRING_THAI_LARGE_DESCENDER = 4705,
+ AF_BLUE_STRING_THAI_DIGIT_TOP = 4713,
+ AF_BLUE_STRING_TIFINAGH = 4725,
+ AF_BLUE_STRING_VAI_TOP = 4757,
+ AF_BLUE_STRING_VAI_BOTTOM = 4789,
+ af_blue_1_1 = 4820,
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRING_CJK_TOP = af_blue_1_1 + 1,
- AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 153,
- af_blue_1_1_1 = af_blue_1_1 + 304,
+ AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 203,
+ af_blue_1_1_1 = af_blue_1_1 + 404,
#ifdef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
AF_BLUE_STRING_CJK_LEFT = af_blue_1_1_1 + 1,
- AF_BLUE_STRING_CJK_RIGHT = af_blue_1_1_1 + 153,
- af_blue_1_1_2 = af_blue_1_1_1 + 304,
+ AF_BLUE_STRING_CJK_RIGHT = af_blue_1_1_1 + 204,
+ af_blue_1_1_2 = af_blue_1_1_1 + 405,
#else
af_blue_1_1_2 = af_blue_1_1_1 + 0,
#endif /* AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT */
@@ -148,9 +303,10 @@
/* blue string can't be used in more than a single writing system, which */
/* is a safe bet. */
#define AF_BLUE_PROPERTY_LATIN_TOP ( 1U << 0 ) /* must have value 1 */
-#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1U << 1 )
-#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1U << 2 )
-#define AF_BLUE_PROPERTY_LATIN_LONG ( 1U << 3 )
+#define AF_BLUE_PROPERTY_LATIN_SUB_TOP ( 1U << 1 )
+#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1U << 2 )
+#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1U << 3 )
+#define AF_BLUE_PROPERTY_LATIN_LONG ( 1U << 4 )
#define AF_BLUE_PROPERTY_CJK_TOP ( 1U << 0 ) /* must have value 1 */
#define AF_BLUE_PROPERTY_CJK_HORIZ ( 1U << 1 ) /* must have value 2 */
@@ -164,15 +320,59 @@
typedef enum AF_Blue_Stringset_
{
- AF_BLUE_STRINGSET_ARAB = 0,
- AF_BLUE_STRINGSET_CYRL = 3,
- AF_BLUE_STRINGSET_DEVA = 9,
- AF_BLUE_STRINGSET_GREK = 15,
- AF_BLUE_STRINGSET_HEBR = 22,
- AF_BLUE_STRINGSET_LATN = 26,
- AF_BLUE_STRINGSET_TELU = 33,
- AF_BLUE_STRINGSET_THAI = 36,
- af_blue_2_1 = 44,
+ AF_BLUE_STRINGSET_ADLM = 0,
+ AF_BLUE_STRINGSET_ARAB = 5,
+ AF_BLUE_STRINGSET_ARMN = 9,
+ AF_BLUE_STRINGSET_AVST = 16,
+ AF_BLUE_STRINGSET_BAMU = 19,
+ AF_BLUE_STRINGSET_BENG = 22,
+ AF_BLUE_STRINGSET_BUHD = 27,
+ AF_BLUE_STRINGSET_CAKM = 32,
+ AF_BLUE_STRINGSET_CANS = 36,
+ AF_BLUE_STRINGSET_CARI = 43,
+ AF_BLUE_STRINGSET_CHER = 46,
+ AF_BLUE_STRINGSET_COPT = 53,
+ AF_BLUE_STRINGSET_CPRT = 58,
+ AF_BLUE_STRINGSET_CYRL = 63,
+ AF_BLUE_STRINGSET_DEVA = 69,
+ AF_BLUE_STRINGSET_DSRT = 75,
+ AF_BLUE_STRINGSET_ETHI = 80,
+ AF_BLUE_STRINGSET_GEOR = 83,
+ AF_BLUE_STRINGSET_GEOK = 90,
+ AF_BLUE_STRINGSET_GLAG = 97,
+ AF_BLUE_STRINGSET_GOTH = 102,
+ AF_BLUE_STRINGSET_GREK = 105,
+ AF_BLUE_STRINGSET_GUJR = 112,
+ AF_BLUE_STRINGSET_GURU = 118,
+ AF_BLUE_STRINGSET_HEBR = 124,
+ AF_BLUE_STRINGSET_KALI = 128,
+ AF_BLUE_STRINGSET_KHMR = 134,
+ AF_BLUE_STRINGSET_KHMS = 140,
+ AF_BLUE_STRINGSET_KNDA = 143,
+ AF_BLUE_STRINGSET_LAO = 146,
+ AF_BLUE_STRINGSET_LATN = 152,
+ AF_BLUE_STRINGSET_LATB = 159,
+ AF_BLUE_STRINGSET_LATP = 166,
+ AF_BLUE_STRINGSET_LISU = 173,
+ AF_BLUE_STRINGSET_MLYM = 176,
+ AF_BLUE_STRINGSET_MYMR = 179,
+ AF_BLUE_STRINGSET_NKOO = 184,
+ AF_BLUE_STRINGSET_NONE = 189,
+ AF_BLUE_STRINGSET_OLCK = 190,
+ AF_BLUE_STRINGSET_ORKH = 193,
+ AF_BLUE_STRINGSET_OSGE = 196,
+ AF_BLUE_STRINGSET_OSMA = 204,
+ AF_BLUE_STRINGSET_SAUR = 207,
+ AF_BLUE_STRINGSET_SHAW = 210,
+ AF_BLUE_STRINGSET_SINH = 216,
+ AF_BLUE_STRINGSET_SUND = 220,
+ AF_BLUE_STRINGSET_TAML = 224,
+ AF_BLUE_STRINGSET_TAVT = 227,
+ AF_BLUE_STRINGSET_TELU = 230,
+ AF_BLUE_STRINGSET_TFNG = 233,
+ AF_BLUE_STRINGSET_THAI = 236,
+ AF_BLUE_STRINGSET_VAII = 244,
+ af_blue_2_1 = 247,
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0,
af_blue_2_1_1 = af_blue_2_1 + 2,
@@ -208,7 +408,7 @@
FT_END_HEADER
-#endif /* __AFBLUE_H__ */
+#endif /* AFBLUE_H_ */
/* END */
diff --git a/src/autofit/afblue.hin b/src/autofit/afblue.hin
index ad43fe6..682147c 100644
--- a/src/autofit/afblue.hin
+++ b/src/autofit/afblue.hin
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter data for blue strings (specification). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __AFBLUE_H__
-#define __AFBLUE_H__
+#ifndef AFBLUE_H_
+#define AFBLUE_H_
FT_BEGIN_HEADER
@@ -25,32 +25,35 @@
/* an auxiliary macro to decode a UTF-8 character -- since we only use */
/* hard-coded, self-converted data, no error checking is performed */
-#define GET_UTF8_CHAR( ch, p ) \
- ch = (unsigned char)*p++; \
- if ( ch >= 0x80 ) \
- { \
- FT_UInt len; \
- \
- \
- if ( ch < 0xE0 ) \
- { \
- len = 1; \
- ch &= 0x1F; \
- } \
- else if ( ch < 0xF0 ) \
- { \
- len = 2; \
- ch &= 0x0F; \
- } \
- else \
- { \
- len = 3; \
- ch &= 0x07; \
- } \
- \
- for ( ; len > 0; len-- ) \
- ch = ( ch << 6 ) | ( *p++ & 0x3F ); \
- }
+#define GET_UTF8_CHAR( ch, p ) \
+ do \
+ { \
+ ch = (unsigned char)*p++; \
+ if ( ch >= 0x80 ) \
+ { \
+ FT_UInt len_; \
+ \
+ \
+ if ( ch < 0xE0 ) \
+ { \
+ len_ = 1; \
+ ch &= 0x1F; \
+ } \
+ else if ( ch < 0xF0 ) \
+ { \
+ len_ = 2; \
+ ch &= 0x0F; \
+ } \
+ else \
+ { \
+ len_ = 3; \
+ ch &= 0x07; \
+ } \
+ \
+ for ( ; len_ > 0; len_-- ) \
+ ch = ( ch << 6 ) | ( *p++ & 0x3F ); \
+ } \
+ } while ( 0 )
/*************************************************************************/
@@ -97,9 +100,10 @@
/* blue string can't be used in more than a single writing system, which */
/* is a safe bet. */
#define AF_BLUE_PROPERTY_LATIN_TOP ( 1U << 0 ) /* must have value 1 */
-#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1U << 1 )
-#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1U << 2 )
-#define AF_BLUE_PROPERTY_LATIN_LONG ( 1U << 3 )
+#define AF_BLUE_PROPERTY_LATIN_SUB_TOP ( 1U << 1 )
+#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1U << 2 )
+#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1U << 3 )
+#define AF_BLUE_PROPERTY_LATIN_LONG ( 1U << 4 )
#define AF_BLUE_PROPERTY_CJK_TOP ( 1U << 0 ) /* must have value 1 */
#define AF_BLUE_PROPERTY_CJK_HORIZ ( 1U << 1 ) /* must have value 2 */
@@ -136,7 +140,7 @@
FT_END_HEADER
-#endif /* __AFBLUE_H__ */
+#endif /* AFBLUE_H_ */
/* END */
diff --git a/src/autofit/afcjk.c b/src/autofit/afcjk.c
index 905408b..21b6bff 100644
--- a/src/autofit/afcjk.c
+++ b/src/autofit/afcjk.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines for CJK writing system (body). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,9 +16,9 @@
/***************************************************************************/
/*
- * The algorithm is based on akito's autohint patch, available here:
+ * The algorithm is based on akito's autohint patch, archived at
*
- * http://www.kde.gr.jp/~akito/patch/freetype2/
+ * https://web.archive.org/web/20051219160454/http://www.kde.gr.jp:80/~akito/patch/freetype2/2.1.7/
*
*/
@@ -29,13 +29,13 @@
#include "afglobal.h"
#include "afpic.h"
#include "aflatin.h"
+#include "afcjk.h"
#ifdef AF_CONFIG_OPTION_CJK
#undef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
-#include "afcjk.h"
#include "aferrors.h"
@@ -88,7 +88,6 @@
{
FT_Error error;
FT_ULong glyph_index;
- FT_Long y_offset;
int dim;
AF_CJKMetricsRec dummy[1];
AF_Scaler scaler = &dummy->root.scaler;
@@ -101,45 +100,61 @@
AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
[style_class->script];
- FT_UInt32 standard_char;
+ void* shaper_buf;
+ const char* p;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_ULong ch = 0;
+#endif
- standard_char = script_class->standard_char1;
- af_get_char_index( &metrics->root,
- standard_char,
- &glyph_index,
- &y_offset );
- if ( !glyph_index )
+ p = script_class->standard_charstring;
+ shaper_buf = af_shaper_buf_create( face );
+
+ /* We check a list of standard characters. The first match wins. */
+
+ glyph_index = 0;
+ while ( *p )
{
- if ( script_class->standard_char2 )
- {
- standard_char = script_class->standard_char2;
- af_get_char_index( &metrics->root,
- standard_char,
- &glyph_index,
- &y_offset );
- if ( !glyph_index )
- {
- if ( script_class->standard_char3 )
- {
- standard_char = script_class->standard_char3;
- af_get_char_index( &metrics->root,
- standard_char,
- &glyph_index,
- &y_offset );
- if ( !glyph_index )
- goto Exit;
- }
- else
- goto Exit;
- }
- }
- else
- goto Exit;
+ unsigned int num_idx;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ const char* p_old;
+#endif
+
+
+ while ( *p == ' ' )
+ p++;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ p_old = p;
+ GET_UTF8_CHAR( ch, p_old );
+#endif
+
+ /* reject input that maps to more than a single glyph */
+ p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
+ if ( num_idx > 1 )
+ continue;
+
+ /* otherwise exit loop if we have a result */
+ glyph_index = af_shaper_get_elem( &metrics->root,
+ shaper_buf,
+ 0,
+ NULL,
+ NULL );
+ if ( glyph_index )
+ break;
}
+ af_shaper_buf_destroy( face, shaper_buf );
+
+ if ( !glyph_index )
+ goto Exit;
+
+ if ( !glyph_index )
+ goto Exit;
+
FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
- standard_char, glyph_index ));
+ ch, glyph_index ));
error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
if ( error || face->glyph->outline.n_points <= 0 )
@@ -177,6 +192,12 @@
if ( error )
goto Exit;
+ /*
+ * We assume that the glyphs selected for the stem width
+ * computation are `featureless' enough so that the linking
+ * algorithm works fine without adjustments of its scoring
+ * function.
+ */
af_latin_hints_link_segments( hints,
0,
NULL,
@@ -275,6 +296,8 @@
AF_Blue_Stringset bss = sc->blue_stringset;
const AF_Blue_StringRec* bs = &af_blue_stringsets[bss];
+ void* shaper_buf;
+
/* we walk over the blue character strings as specified in the */
/* style's entry in the `af_blue_stringset' array, computing its */
@@ -284,6 +307,8 @@
"==========================\n"
"\n" ));
+ shaper_buf = af_shaper_buf_create( face );
+
for ( ; bs->string != AF_BLUE_STRING_MAX; bs++ )
{
const char* p = &af_blue_strings[bs->string];
@@ -322,26 +347,47 @@
while ( *p )
{
- FT_ULong ch;
FT_ULong glyph_index;
- FT_Long y_offset;
FT_Pos best_pos; /* same as points.y or points.x, resp. */
FT_Int best_point;
FT_Vector* points;
+ unsigned int num_idx;
- GET_UTF8_CHAR( ch, p );
+#ifdef FT_DEBUG_LEVEL_TRACE
+ const char* p_old;
+ FT_ULong ch;
+#endif
+
+
+ while ( *p == ' ' )
+ p++;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ p_old = p;
+ GET_UTF8_CHAR( ch, p_old );
+#endif
/* switch to characters that define flat values */
- if ( ch == '|' )
+ if ( *p == '|' )
{
fill = 0;
FT_TRACE5(( " [reference values]\n" ));
+ p++;
continue;
}
+ /* reject input that maps to more than a single glyph */
+ p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
+ if ( num_idx > 1 )
+ continue;
+
/* load the character in the face -- skip unknown or empty ones */
- af_get_char_index( &metrics->root, ch, &glyph_index, &y_offset );
+ glyph_index = af_shaper_get_elem( &metrics->root,
+ shaper_buf,
+ 0,
+ NULL,
+ NULL );
if ( glyph_index == 0 )
{
FT_TRACE5(( " U+%04lX unavailable\n", ch ));
@@ -350,9 +396,9 @@
error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
outline = face->glyph->outline;
- if ( error || outline.n_points <= 0 )
+ if ( error || outline.n_points <= 2 )
{
- FT_TRACE5(( " U+%04lX contains no outlines\n", ch ));
+ FT_TRACE5(( " U+%04lX contains no (usable) outlines\n", ch ));
continue;
}
@@ -431,7 +477,8 @@
fills[num_fills++] = best_pos;
else
flats[num_flats++] = best_pos;
- }
+
+ } /* end while loop */
if ( num_flats == 0 && num_fills == 0 )
{
@@ -498,7 +545,10 @@
FT_TRACE5(( " -> reference = %ld\n"
" overshoot = %ld\n",
*blue_ref, *blue_shoot ));
- }
+
+ } /* end for loop */
+
+ af_shaper_buf_destroy( face, shaper_buf );
FT_TRACE5(( "\n" ));
@@ -512,27 +562,36 @@
af_cjk_metrics_check_digits( AF_CJKMetrics metrics,
FT_Face face )
{
- FT_UInt i;
FT_Bool started = 0, same_width = 1;
- FT_Fixed advance, old_advance = 0;
+ FT_Fixed advance = 0, old_advance = 0;
+
+ void* shaper_buf;
+
+ /* in all supported charmaps, digits have character codes 0x30-0x39 */
+ const char digits[] = "0 1 2 3 4 5 6 7 8 9";
+ const char* p;
- /* digit `0' is 0x30 in all supported charmaps */
- for ( i = 0x30; i <= 0x39; i++ )
+ p = digits;
+ shaper_buf = af_shaper_buf_create( face );
+
+ while ( *p )
{
- FT_ULong glyph_index;
- FT_Long y_offset;
+ FT_ULong glyph_index;
+ unsigned int num_idx;
- af_get_char_index( &metrics->root, i, &glyph_index, &y_offset );
- if ( glyph_index == 0 )
+ /* reject input that maps to more than a single glyph */
+ p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
+ if ( num_idx > 1 )
continue;
- if ( FT_Get_Advance( face, glyph_index,
- FT_LOAD_NO_SCALE |
- FT_LOAD_NO_HINTING |
- FT_LOAD_IGNORE_TRANSFORM,
- &advance ) )
+ glyph_index = af_shaper_get_elem( &metrics->root,
+ shaper_buf,
+ 0,
+ &advance,
+ NULL );
+ if ( !glyph_index )
continue;
if ( started )
@@ -550,6 +609,8 @@
}
}
+ af_shaper_buf_destroy( face, shaper_buf );
+
metrics->root.digits_have_same_width = same_width;
}
@@ -688,6 +749,22 @@
}
+ /* Extract standard_width from writing system/script specific */
+ /* metrics class. */
+
+ FT_LOCAL_DEF( void )
+ af_cjk_get_standard_widths( AF_CJKMetrics metrics,
+ FT_Pos* stdHW,
+ FT_Pos* stdVW )
+ {
+ if ( stdHW )
+ *stdHW = metrics->axis[AF_DIMENSION_VERT].standard_width;
+
+ if ( stdVW )
+ *stdVW = metrics->axis[AF_DIMENSION_HORZ].standard_width;
+ }
+
+
/*************************************************************************/
/*************************************************************************/
/***** *****/
@@ -889,15 +966,12 @@
if ( seg2 )
{
- seg2->num_linked++;
if ( seg2->link != seg1 )
{
seg1->link = NULL;
if ( seg2->score < dist_threshold || seg1->score < seg2->score * 4 )
seg1->serif = seg2->link;
- else
- seg2->num_linked--;
}
}
}
@@ -1014,7 +1088,7 @@
/* insert a new edge in the list and */
/* sort according to the position */
error = af_axis_hints_new_edge( axis, seg->pos,
- (AF_Direction)seg->dir,
+ (AF_Direction)seg->dir, 0,
memory, &edge );
if ( error )
goto Exit;
@@ -1324,9 +1398,9 @@
other_flags |= AF_LATIN_HINTS_VERT_SNAP;
/*
- * We adjust stems to full pixels only if we don't use the `light' mode.
+ * We adjust stems to full pixels unless in `light' or `lcd' mode.
*/
- if ( mode != FT_RENDER_MODE_LIGHT )
+ if ( mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD )
other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
if ( mode == FT_RENDER_MODE_MONO )
@@ -1451,7 +1525,7 @@
}
if ( dist < 54 )
- dist += ( 54 - dist ) / 2 ;
+ dist += ( 54 - dist ) / 2;
else if ( dist < 3 * 64 )
{
FT_Pos delta;
@@ -2181,7 +2255,8 @@
/* Apply the complete hinting algorithm to a CJK glyph. */
FT_LOCAL_DEF( FT_Error )
- af_cjk_hints_apply( AF_GlyphHints hints,
+ af_cjk_hints_apply( FT_UInt glyph_index,
+ AF_GlyphHints hints,
FT_Outline* outline,
AF_CJKMetrics metrics )
{
@@ -2189,6 +2264,7 @@
int dim;
FT_UNUSED( metrics );
+ FT_UNUSED( glyph_index );
error = af_glyph_hints_reload( hints, outline );
@@ -2196,13 +2272,7 @@
goto Exit;
/* analyze glyph outline */
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
- AF_HINTS_DO_WARP( hints ) ) ||
- AF_HINTS_DO_HORIZONTAL( hints ) )
-#else
if ( AF_HINTS_DO_HORIZONTAL( hints ) )
-#endif
{
error = af_cjk_hints_detect_features( hints, AF_DIMENSION_HORZ );
if ( error )
@@ -2228,9 +2298,9 @@
{
#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
- AF_HINTS_DO_WARP( hints ) )
+ if ( dim == AF_DIMENSION_HORZ &&
+ metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL &&
+ AF_HINTS_DO_WARP( hints ) )
{
AF_WarperRec warper;
FT_Fixed scale;
@@ -2275,12 +2345,13 @@
sizeof ( AF_CJKMetricsRec ),
- (AF_WritingSystem_InitMetricsFunc) af_cjk_metrics_init,
- (AF_WritingSystem_ScaleMetricsFunc)af_cjk_metrics_scale,
- (AF_WritingSystem_DoneMetricsFunc) NULL,
+ (AF_WritingSystem_InitMetricsFunc) af_cjk_metrics_init, /* style_metrics_init */
+ (AF_WritingSystem_ScaleMetricsFunc)af_cjk_metrics_scale, /* style_metrics_scale */
+ (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
+ (AF_WritingSystem_GetStdWidthsFunc)af_cjk_get_standard_widths, /* style_metrics_getstdw */
- (AF_WritingSystem_InitHintsFunc) af_cjk_hints_init,
- (AF_WritingSystem_ApplyHintsFunc) af_cjk_hints_apply
+ (AF_WritingSystem_InitHintsFunc) af_cjk_hints_init, /* style_hints_init */
+ (AF_WritingSystem_ApplyHintsFunc) af_cjk_hints_apply /* style_hints_apply */
)
@@ -2294,12 +2365,13 @@
sizeof ( AF_CJKMetricsRec ),
- (AF_WritingSystem_InitMetricsFunc) NULL,
- (AF_WritingSystem_ScaleMetricsFunc)NULL,
- (AF_WritingSystem_DoneMetricsFunc) NULL,
+ (AF_WritingSystem_InitMetricsFunc) NULL, /* style_metrics_init */
+ (AF_WritingSystem_ScaleMetricsFunc)NULL, /* style_metrics_scale */
+ (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
+ (AF_WritingSystem_GetStdWidthsFunc)NULL, /* style_metrics_getstdw */
- (AF_WritingSystem_InitHintsFunc) NULL,
- (AF_WritingSystem_ApplyHintsFunc) NULL
+ (AF_WritingSystem_InitHintsFunc) NULL, /* style_hints_init */
+ (AF_WritingSystem_ApplyHintsFunc) NULL /* style_hints_apply */
)
diff --git a/src/autofit/afcjk.h b/src/autofit/afcjk.h
index bfd11f2..d229c0c 100644
--- a/src/autofit/afcjk.h
+++ b/src/autofit/afcjk.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines for CJK writing system (specification). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __AFCJK_H__
-#define __AFCJK_H__
+#ifndef AFCJK_H_
+#define AFCJK_H_
#include "afhints.h"
#include "aflatin.h"
@@ -115,7 +115,8 @@
AF_CJKMetrics metrics );
FT_LOCAL( FT_Error )
- af_cjk_hints_apply( AF_GlyphHints hints,
+ af_cjk_hints_apply( FT_UInt glyph_index,
+ AF_GlyphHints hints,
FT_Outline* outline,
AF_CJKMetrics metrics );
@@ -134,7 +135,7 @@
FT_END_HEADER
-#endif /* __AFCJK_H__ */
+#endif /* AFCJK_H_ */
/* END */
diff --git a/src/autofit/afcover.h b/src/autofit/afcover.h
index 520e8a4..6eeb8fc 100644
--- a/src/autofit/afcover.h
+++ b/src/autofit/afcover.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter coverages (specification only). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/autofit/afdummy.c b/src/autofit/afdummy.c
index 03ca25f..f30c517 100644
--- a/src/autofit/afdummy.c
+++ b/src/autofit/afdummy.c
@@ -5,7 +5,7 @@
/* Auto-fitter dummy routines to be used if no hinting should be */
/* performed (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -38,11 +38,14 @@
static FT_Error
- af_dummy_hints_apply( AF_GlyphHints hints,
+ af_dummy_hints_apply( FT_UInt glyph_index,
+ AF_GlyphHints hints,
FT_Outline* outline )
{
FT_Error error;
+ FT_UNUSED( glyph_index );
+
error = af_glyph_hints_reload( hints, outline );
if ( !error )
@@ -59,12 +62,13 @@
sizeof ( AF_StyleMetricsRec ),
- (AF_WritingSystem_InitMetricsFunc) NULL,
- (AF_WritingSystem_ScaleMetricsFunc)NULL,
- (AF_WritingSystem_DoneMetricsFunc) NULL,
+ (AF_WritingSystem_InitMetricsFunc) NULL, /* style_metrics_init */
+ (AF_WritingSystem_ScaleMetricsFunc)NULL, /* style_metrics_scale */
+ (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
+ (AF_WritingSystem_GetStdWidthsFunc)NULL, /* style_metrics_getstdw */
- (AF_WritingSystem_InitHintsFunc) af_dummy_hints_init,
- (AF_WritingSystem_ApplyHintsFunc) af_dummy_hints_apply
+ (AF_WritingSystem_InitHintsFunc) af_dummy_hints_init, /* style_hints_init */
+ (AF_WritingSystem_ApplyHintsFunc) af_dummy_hints_apply /* style_hints_apply */
)
diff --git a/src/autofit/afdummy.h b/src/autofit/afdummy.h
index b4fdc78..b382acd 100644
--- a/src/autofit/afdummy.h
+++ b/src/autofit/afdummy.h
@@ -5,7 +5,7 @@
/* Auto-fitter dummy routines to be used if no hinting should be */
/* performed (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __AFDUMMY_H__
-#define __AFDUMMY_H__
+#ifndef AFDUMMY_H_
+#define AFDUMMY_H_
#include "aftypes.h"
@@ -34,7 +34,7 @@
FT_END_HEADER
-#endif /* __AFDUMMY_H__ */
+#endif /* AFDUMMY_H_ */
/* END */
diff --git a/src/autofit/aferrors.h b/src/autofit/aferrors.h
index 7b416e4..e5de543 100644
--- a/src/autofit/aferrors.h
+++ b/src/autofit/aferrors.h
@@ -4,7 +4,7 @@
/* */
/* Autofitter error codes (specification only). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,12 +23,12 @@
/* */
/*************************************************************************/
-#ifndef __AFERRORS_H__
-#define __AFERRORS_H__
+#ifndef AFERRORS_H_
+#define AFERRORS_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX AF_Err_
@@ -36,6 +36,7 @@
#include FT_ERRORS_H
-#endif /* __AFERRORS_H__ */
+#endif /* AFERRORS_H_ */
+
/* END */
diff --git a/src/autofit/afglobal.c b/src/autofit/afglobal.c
index 64b9293..3d09c53 100644
--- a/src/autofit/afglobal.c
+++ b/src/autofit/afglobal.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter routines to compute global hinting values (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,7 +18,7 @@
#include "afglobal.h"
#include "afranges.h"
-#include "hbshim.h"
+#include "afshaper.h"
#include FT_INTERNAL_DEBUG_H
@@ -42,12 +42,14 @@
#undef SCRIPT
-#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \
+#define SCRIPT( s, S, d, h, H, ss ) \
AF_DEFINE_SCRIPT_CLASS( \
af_ ## s ## _script_class, \
AF_SCRIPT_ ## S, \
af_ ## s ## _uniranges, \
- sc1, sc2, sc3 )
+ af_ ## s ## _nonbase_uniranges, \
+ AF_ ## H, \
+ ss )
#include "afscript.h"
@@ -82,7 +84,7 @@
#undef SCRIPT
-#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \
+#define SCRIPT( s, S, d, h, H, ss ) \
&af_ ## s ## _script_class,
FT_LOCAL_ARRAY_DEF( AF_ScriptClass )
@@ -135,16 +137,15 @@
FT_Error error;
FT_Face face = globals->face;
FT_CharMap old_charmap = face->charmap;
- FT_Byte* gstyles = globals->glyph_styles;
+ FT_UShort* gstyles = globals->glyph_styles;
FT_UInt ss;
FT_UInt i;
FT_UInt dflt = ~0U; /* a non-valid value */
/* the value AF_STYLE_UNASSIGNED means `uncovered glyph' */
- FT_MEM_SET( globals->glyph_styles,
- AF_STYLE_UNASSIGNED,
- globals->glyph_count );
+ for ( i = 0; i < (FT_UInt)globals->glyph_count; i++ )
+ gstyles[i] = AF_STYLE_UNASSIGNED;
error = FT_Select_Charmap( face, FT_ENCODING_UNICODE );
if ( error )
@@ -167,7 +168,7 @@
AF_Script_UniRange range;
- if ( script_class->script_uni_ranges == NULL )
+ if ( !script_class->script_uni_ranges )
continue;
/*
@@ -190,10 +191,10 @@
gindex = FT_Get_Char_Index( face, charcode );
- if ( gindex != 0 &&
- gindex < (FT_ULong)globals->glyph_count &&
- gstyles[gindex] == AF_STYLE_UNASSIGNED )
- gstyles[gindex] = (FT_Byte)ss;
+ if ( gindex != 0 &&
+ gindex < (FT_ULong)globals->glyph_count &&
+ ( gstyles[gindex] & AF_STYLE_MASK ) == AF_STYLE_UNASSIGNED )
+ gstyles[gindex] = (FT_UShort)ss;
for (;;)
{
@@ -202,32 +203,61 @@
if ( gindex == 0 || charcode > range->last )
break;
- if ( gindex < (FT_ULong)globals->glyph_count &&
- gstyles[gindex] == AF_STYLE_UNASSIGNED )
- gstyles[gindex] = (FT_Byte)ss;
+ if ( gindex < (FT_ULong)globals->glyph_count &&
+ ( gstyles[gindex] & AF_STYLE_MASK ) == AF_STYLE_UNASSIGNED )
+ gstyles[gindex] = (FT_UShort)ss;
+ }
+ }
+
+ /* do the same for the script's non-base characters */
+ for ( range = script_class->script_uni_nonbase_ranges;
+ range->first != 0;
+ range++ )
+ {
+ FT_ULong charcode = range->first;
+ FT_UInt gindex;
+
+
+ gindex = FT_Get_Char_Index( face, charcode );
+
+ if ( gindex != 0 &&
+ gindex < (FT_ULong)globals->glyph_count &&
+ ( gstyles[gindex] & AF_STYLE_MASK ) == (FT_UShort)ss )
+ gstyles[gindex] |= AF_NONBASE;
+
+ for (;;)
+ {
+ charcode = FT_Get_Next_Char( face, charcode, &gindex );
+
+ if ( gindex == 0 || charcode > range->last )
+ break;
+
+ if ( gindex < (FT_ULong)globals->glyph_count &&
+ ( gstyles[gindex] & AF_STYLE_MASK ) == (FT_UShort)ss )
+ gstyles[gindex] |= AF_NONBASE;
}
}
}
else
{
/* get glyphs not directly addressable by cmap */
- af_get_coverage( globals, style_class, gstyles );
+ af_shaper_get_coverage( globals, style_class, gstyles, 0 );
}
}
- /* handle the default OpenType features of the default script ... */
- af_get_coverage( globals, AF_STYLE_CLASSES_GET[dflt], gstyles );
-
- /* ... and the remaining default OpenType features */
+ /* handle the remaining default OpenType features ... */
for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
{
AF_StyleClass style_class = AF_STYLE_CLASSES_GET[ss];
- if ( ss != dflt && style_class->coverage == AF_COVERAGE_DEFAULT )
- af_get_coverage( globals, style_class, gstyles );
+ if ( style_class->coverage == AF_COVERAGE_DEFAULT )
+ af_shaper_get_coverage( globals, style_class, gstyles, 0 );
}
+ /* ... and finally the default OpenType features of the default script */
+ af_shaper_get_coverage( globals, AF_STYLE_CLASSES_GET[dflt], gstyles, 1 );
+
/* mark ASCII digits */
for ( i = 0x30; i <= 0x39; i++ )
{
@@ -250,9 +280,9 @@
for ( nn = 0; nn < globals->glyph_count; nn++ )
{
- if ( ( gstyles[nn] & ~AF_DIGIT ) == AF_STYLE_UNASSIGNED )
+ if ( ( gstyles[nn] & AF_STYLE_MASK ) == AF_STYLE_UNASSIGNED )
{
- gstyles[nn] &= ~AF_STYLE_UNASSIGNED;
+ gstyles[nn] &= ~AF_STYLE_MASK;
gstyles[nn] |= globals->module->fallback_style;
}
}
@@ -276,7 +306,7 @@
for ( idx = 0; idx < globals->glyph_count; idx++ )
{
- if ( ( gstyles[idx] & ~AF_DIGIT ) == style_class->style )
+ if ( ( gstyles[idx] & AF_STYLE_MASK ) == style_class->style )
{
if ( !( count % 10 ) )
FT_TRACE4(( " " ));
@@ -314,18 +344,28 @@
memory = face->memory;
+ /* we allocate an AF_FaceGlobals structure together */
+ /* with the glyph_styles array */
if ( FT_ALLOC( globals,
sizeof ( *globals ) +
- (FT_ULong)face->num_glyphs * sizeof ( FT_Byte ) ) )
+ (FT_ULong)face->num_glyphs * sizeof ( FT_UShort ) ) )
goto Exit;
- globals->face = face;
- globals->glyph_count = face->num_glyphs;
- globals->glyph_styles = (FT_Byte*)( globals + 1 );
- globals->module = module;
+ globals->face = face;
+ globals->glyph_count = face->num_glyphs;
+ /* right after the globals structure come the glyph styles */
+ globals->glyph_styles = (FT_UShort*)( globals + 1 );
+ globals->module = module;
+ globals->stem_darkening_for_ppem = 0;
+ globals->darken_x = 0;
+ globals->darken_y = 0;
+ globals->standard_vertical_width = 0;
+ globals->standard_horizontal_width = 0;
+ globals->scale_down_factor = 0;
#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
globals->hb_font = hb_ft_font_create( face, NULL );
+ globals->hb_buf = hb_buffer_create();
#endif
error = af_face_globals_compute_style_coverage( globals );
@@ -371,13 +411,11 @@
#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
hb_font_destroy( globals->hb_font );
- globals->hb_font = NULL;
+ hb_buffer_destroy( globals->hb_buf );
#endif
- globals->glyph_count = 0;
- globals->glyph_styles = NULL; /* no need to free this one! */
- globals->face = NULL;
-
+ /* no need to free `globals->glyph_styles'; */
+ /* it is part of the `globals' array */
FT_FREE( globals );
}
}
@@ -415,7 +453,7 @@
[style_class->writing_system];
metrics = globals->metrics[style];
- if ( metrics == NULL )
+ if ( !metrics )
{
/* create the global metrics object if necessary */
FT_Memory memory = globals->face->memory;
diff --git a/src/autofit/afglobal.h b/src/autofit/afglobal.h
index 9bbb687..489ed46 100644
--- a/src/autofit/afglobal.h
+++ b/src/autofit/afglobal.h
@@ -5,7 +5,7 @@
/* Auto-fitter routines to compute global hinting values */
/* (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,13 +17,13 @@
/***************************************************************************/
-#ifndef __AFGLOBAL_H__
-#define __AFGLOBAL_H__
+#ifndef AFGLOBAL_H_
+#define AFGLOBAL_H_
#include "aftypes.h"
#include "afmodule.h"
-#include "hbshim.h"
+#include "afshaper.h"
FT_BEGIN_HEADER
@@ -34,7 +34,7 @@
#undef SCRIPT
-#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \
+#define SCRIPT( s, S, d, h, H, ss ) \
AF_DECLARE_SCRIPT_CLASS( af_ ## s ## _script_class )
#include "afscript.h"
@@ -72,10 +72,16 @@
#endif
/* default script for OpenType; ignored if HarfBuzz isn't used */
#define AF_SCRIPT_DEFAULT AF_SCRIPT_LATN
- /* a bit mask indicating an uncovered glyph */
-#define AF_STYLE_UNASSIGNED 0x7F
- /* if this flag is set, we have an ASCII digit */
-#define AF_DIGIT 0x80
+
+ /* a bit mask for AF_DIGIT and AF_NONBASE */
+#define AF_STYLE_MASK 0x3FFF
+ /* an uncovered glyph */
+#define AF_STYLE_UNASSIGNED AF_STYLE_MASK
+
+ /* if this flag is set, we have an ASCII digit */
+#define AF_DIGIT 0x8000U
+ /* if this flag is set, we have a non-base character */
+#define AF_NONBASE 0x4000U
/* `increase-x-height' property */
#define AF_PROP_INCREASE_X_HEIGHT_MIN 6
@@ -100,10 +106,11 @@
{
FT_Face face;
FT_Long glyph_count; /* same as face->num_glyphs */
- FT_Byte* glyph_styles;
+ FT_UShort* glyph_styles;
#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
hb_font_t* hb_font;
+ hb_buffer_t* hb_buf; /* for feature comparison */
#endif
/* per-face auto-hinter properties */
@@ -111,6 +118,22 @@
AF_StyleMetrics metrics[AF_STYLE_MAX];
+ /* Compute darkening amount once per size. Use this to check whether */
+ /* darken_{x,y} needs to be recomputed. */
+ FT_UShort stem_darkening_for_ppem;
+ /* Copy from e.g. AF_LatinMetrics.axis[AF_DIMENSION_HORZ] */
+ /* to compute the darkening amount. */
+ FT_Pos standard_vertical_width;
+ /* Copy from e.g. AF_LatinMetrics.axis[AF_DIMENSION_VERT] */
+ /* to compute the darkening amount. */
+ FT_Pos standard_horizontal_width;
+ /* The actual amount to darken a glyph along the X axis. */
+ FT_Pos darken_x;
+ /* The actual amount to darken a glyph along the Y axis. */
+ FT_Pos darken_y;
+ /* Amount to scale down by to keep emboldened points */
+ /* on the Y-axis in pre-computed blue zones. */
+ FT_Fixed scale_down_factor;
AF_Module module; /* to access global properties */
} AF_FaceGlobalsRec;
@@ -144,7 +167,7 @@
FT_END_HEADER
-#endif /* __AFGLOBAL_H__ */
+#endif /* AFGLOBAL_H_ */
/* END */
diff --git a/src/autofit/afhints.c b/src/autofit/afhints.c
index 37482eb..0666dbc 100644
--- a/src/autofit/afhints.c
+++ b/src/autofit/afhints.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -45,7 +45,7 @@
if ( axis->num_segments < AF_SEGMENTS_EMBEDDED )
{
- if ( axis->segments == NULL )
+ if ( !axis->segments )
{
axis->segments = axis->embedded.segments;
axis->max_segments = AF_SEGMENTS_EMBEDDED;
@@ -99,6 +99,7 @@
af_axis_hints_new_edge( AF_AxisHints axis,
FT_Int fpos,
AF_Direction dir,
+ FT_Bool top_to_bottom_hinting,
FT_Memory memory,
AF_Edge *anedge )
{
@@ -109,7 +110,7 @@
if ( axis->num_edges < AF_EDGES_EMBEDDED )
{
- if ( axis->edges == NULL )
+ if ( !axis->edges )
{
axis->edges = axis->embedded.edges;
axis->max_edges = AF_EDGES_EMBEDDED;
@@ -153,7 +154,8 @@
while ( edge > edges )
{
- if ( edge[-1].fpos < fpos )
+ if ( top_to_bottom_hinting ? ( edge[-1].fpos > fpos )
+ : ( edge[-1].fpos < fpos ) )
break;
/* we want the edge with same position and minor direction */
@@ -219,6 +221,82 @@
#define AF_INDEX_NUM( ptr, base ) (int)( (ptr) ? ( (ptr) - (base) ) : -1 )
+ static char*
+ af_print_idx( char* p,
+ int idx )
+ {
+ if ( idx == -1 )
+ {
+ p[0] = '-';
+ p[1] = '-';
+ p[2] = '\0';
+ }
+ else
+ ft_sprintf( p, "%d", idx );
+
+ return p;
+ }
+
+
+ static int
+ af_get_segment_index( AF_GlyphHints hints,
+ int point_idx,
+ int dimension )
+ {
+ AF_AxisHints axis = &hints->axis[dimension];
+ AF_Point point = hints->points + point_idx;
+ AF_Segment segments = axis->segments;
+ AF_Segment limit = segments + axis->num_segments;
+ AF_Segment segment;
+
+
+ for ( segment = segments; segment < limit; segment++ )
+ {
+ if ( segment->first <= segment->last )
+ {
+ if ( point >= segment->first && point <= segment->last )
+ break;
+ }
+ else
+ {
+ AF_Point p = segment->first;
+
+
+ for (;;)
+ {
+ if ( point == p )
+ goto Exit;
+
+ if ( p == segment->last )
+ break;
+
+ p = p->next;
+ }
+ }
+ }
+
+ Exit:
+ if ( segment == limit )
+ return -1;
+
+ return (int)( segment - segments );
+ }
+
+
+ static int
+ af_get_edge_index( AF_GlyphHints hints,
+ int segment_idx,
+ int dimension )
+ {
+ AF_AxisHints axis = &hints->axis[dimension];
+ AF_Edge edges = axis->edges;
+ AF_Segment segment = axis->segments + segment_idx;
+
+
+ return segment_idx == -1 ? -1 : AF_INDEX_NUM( segment->edge, edges );
+ }
+
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -226,30 +304,63 @@
af_glyph_hints_dump_points( AF_GlyphHints hints,
FT_Bool to_stdout )
{
- AF_Point points = hints->points;
- AF_Point limit = points + hints->num_points;
- AF_Point point;
+ AF_Point points = hints->points;
+ AF_Point limit = points + hints->num_points;
+ AF_Point* contour = hints->contours;
+ AF_Point* climit = contour + hints->num_contours;
+ AF_Point point;
AF_DUMP(( "Table of points:\n" ));
if ( hints->num_points )
- AF_DUMP(( " [ index | xorg | yorg | xscale | yscale"
- " | xfit | yfit | flags ]\n" ));
+ {
+ AF_DUMP(( " index hedge hseg vedge vseg flags "
+ /* " XXXXX XXXXX XXXXX XXXXX XXXXX XXXXXX" */
+ " xorg yorg xscale yscale xfit yfit" ));
+ /* " XXXXX XXXXX XXXX.XX XXXX.XX XXXX.XX XXXX.XX" */
+ }
else
AF_DUMP(( " (none)\n" ));
for ( point = points; point < limit; point++ )
- AF_DUMP(( " [ %5d | %5d | %5d | %6.2f | %6.2f"
- " | %5.2f | %5.2f | %c ]\n",
- AF_INDEX_NUM( point, points ),
+ {
+ int point_idx = AF_INDEX_NUM( point, points );
+ int segment_idx_0 = af_get_segment_index( hints, point_idx, 0 );
+ int segment_idx_1 = af_get_segment_index( hints, point_idx, 1 );
+
+ char buf1[16], buf2[16], buf3[16], buf4[16];
+
+
+ /* insert extra newline at the beginning of a contour */
+ if ( contour < climit && *contour == point )
+ {
+ AF_DUMP(( "\n" ));
+ contour++;
+ }
+
+ AF_DUMP(( " %5d %5s %5s %5s %5s %s"
+ " %5d %5d %7.2f %7.2f %7.2f %7.2f\n",
+ point_idx,
+ af_print_idx( buf1,
+ af_get_edge_index( hints, segment_idx_1, 1 ) ),
+ af_print_idx( buf2, segment_idx_1 ),
+ af_print_idx( buf3,
+ af_get_edge_index( hints, segment_idx_0, 0 ) ),
+ af_print_idx( buf4, segment_idx_0 ),
+ ( point->flags & AF_FLAG_NEAR )
+ ? " near "
+ : ( point->flags & AF_FLAG_WEAK_INTERPOLATION )
+ ? " weak "
+ : "strong",
+
point->fx,
point->fy,
point->ox / 64.0,
point->oy / 64.0,
point->x / 64.0,
- point->y / 64.0,
- ( point->flags & AF_FLAG_WEAK_INTERPOLATION ) ? 'w' : ' '));
+ point->y / 64.0 ));
+ }
AF_DUMP(( "\n" ));
}
#ifdef __cplusplus
@@ -306,31 +417,39 @@
AF_Segment limit = segments + axis->num_segments;
AF_Segment seg;
+ char buf1[16], buf2[16], buf3[16];
+
AF_DUMP(( "Table of %s segments:\n",
dimension == AF_DIMENSION_HORZ ? "vertical"
: "horizontal" ));
if ( axis->num_segments )
- AF_DUMP(( " [ index | pos | dir | from"
- " | to | link | serif | edge"
- " | height | extra | flags ]\n" ));
+ {
+ AF_DUMP(( " index pos delta dir from to "
+ /* " XXXXX XXXXX XXXXX XXXXX XXXX XXXX" */
+ " link serif edge"
+ /* " XXXX XXXXX XXXX" */
+ " height extra flags\n" ));
+ /* " XXXXXX XXXXX XXXXXXXXXXX" */
+ }
else
AF_DUMP(( " (none)\n" ));
for ( seg = segments; seg < limit; seg++ )
- AF_DUMP(( " [ %5d | %5.2g | %5s | %4d"
- " | %4d | %4d | %5d | %4d"
- " | %6d | %5d | %11s ]\n",
+ AF_DUMP(( " %5d %5d %5d %5s %4d %4d"
+ " %4s %5s %4s"
+ " %6d %5d %11s\n",
AF_INDEX_NUM( seg, segments ),
- dimension == AF_DIMENSION_HORZ
- ? (int)seg->first->ox / 64.0
- : (int)seg->first->oy / 64.0,
+ seg->pos,
+ seg->delta,
af_dir_str( (AF_Direction)seg->dir ),
AF_INDEX_NUM( seg->first, points ),
AF_INDEX_NUM( seg->last, points ),
- AF_INDEX_NUM( seg->link, segments ),
- AF_INDEX_NUM( seg->serif, segments ),
- AF_INDEX_NUM( seg->edge, edges ),
+
+ af_print_idx( buf1, AF_INDEX_NUM( seg->link, segments ) ),
+ af_print_idx( buf2, AF_INDEX_NUM( seg->serif, segments ) ),
+ af_print_idx( buf3, AF_INDEX_NUM( seg->edge, edges ) ),
+
seg->height,
seg->height - ( seg->max_coord - seg->min_coord ),
af_edge_flags_to_string( seg->flags ) ));
@@ -397,15 +516,15 @@
return FT_THROW( Invalid_Argument );
seg = &axis->segments[idx];
- *offset = ( dim == AF_DIMENSION_HORZ ) ? seg->first->ox
- : seg->first->oy;
+ *offset = ( dim == AF_DIMENSION_HORZ ) ? seg->first->fx
+ : seg->first->fy;
if ( seg->edge )
*is_blue = (FT_Bool)( seg->edge->blue_edge != 0 );
else
*is_blue = FALSE;
if ( *is_blue )
- *blue_offset = seg->edge->blue_edge->cur;
+ *blue_offset = seg->edge->blue_edge->org;
else
*blue_offset = 0;
@@ -435,28 +554,43 @@
AF_Edge limit = edges + axis->num_edges;
AF_Edge edge;
+ char buf1[16], buf2[16];
+
/*
* note: AF_DIMENSION_HORZ corresponds to _vertical_ edges
* since they have a constant X coordinate.
*/
- AF_DUMP(( "Table of %s edges:\n",
- dimension == AF_DIMENSION_HORZ ? "vertical"
- : "horizontal" ));
+ if ( dimension == AF_DIMENSION_HORZ )
+ AF_DUMP(( "Table of %s edges (1px=%.2fu, 10u=%.2fpx):\n",
+ "vertical",
+ 65536.0 * 64.0 / hints->x_scale,
+ 10.0 * hints->x_scale / 65536.0 / 64.0 ));
+ else
+ AF_DUMP(( "Table of %s edges (1px=%.2fu, 10u=%.2fpx):\n",
+ "horizontal",
+ 65536.0 * 64.0 / hints->y_scale,
+ 10.0 * hints->y_scale / 65536.0 / 64.0 ));
+
if ( axis->num_edges )
- AF_DUMP(( " [ index | pos | dir | link"
- " | serif | blue | opos | pos | flags ]\n" ));
+ {
+ AF_DUMP(( " index pos dir link serif"
+ /* " XXXXX XXXX.XX XXXXX XXXX XXXXX" */
+ " blue opos pos flags\n" ));
+ /* " X XXXX.XX XXXX.XX XXXXXXXXXXX" */
+ }
else
AF_DUMP(( " (none)\n" ));
for ( edge = edges; edge < limit; edge++ )
- AF_DUMP(( " [ %5d | %5.2g | %5s | %4d"
- " | %5d | %c | %5.2f | %5.2f | %11s ]\n",
+ AF_DUMP(( " %5d %7.2f %5s %4s %5s"
+ " %c %7.2f %7.2f %11s\n",
AF_INDEX_NUM( edge, edges ),
(int)edge->opos / 64.0,
af_dir_str( (AF_Direction)edge->dir ),
- AF_INDEX_NUM( edge->link, edges ),
- AF_INDEX_NUM( edge->serif, edges ),
+ af_print_idx( buf1, AF_INDEX_NUM( edge->link, edges ) ),
+ af_print_idx( buf2, AF_INDEX_NUM( edge->serif, edges ) ),
+
edge->blue_edge ? 'y' : 'n',
edge->opos / 64.0,
edge->pos / 64.0,
@@ -622,7 +756,7 @@
if ( new_max <= AF_CONTOURS_EMBEDDED )
{
- if ( hints->contours == NULL )
+ if ( !hints->contours )
{
hints->contours = hints->embedded.contours;
hints->max_contours = AF_CONTOURS_EMBEDDED;
@@ -651,7 +785,7 @@
if ( new_max <= AF_POINTS_EMBEDDED )
{
- if ( hints->points == NULL )
+ if ( !hints->points )
{
hints->points = hints->embedded.points;
hints->max_points = AF_POINTS_EMBEDDED;
@@ -702,18 +836,26 @@
AF_Point point;
AF_Point point_limit = points + hints->num_points;
+ /* value 20 in `near_limit' is heuristic */
+ FT_UInt units_per_em = hints->metrics->scaler.face->units_per_EM;
+ FT_Int near_limit = 20 * units_per_em / 2048;
+
/* compute coordinates & Bezier flags, next and prev */
{
FT_Vector* vec = outline->points;
char* tag = outline->tags;
- AF_Point end = points + outline->contours[0];
+ FT_Short endpoint = outline->contours[0];
+ AF_Point end = points + endpoint;
AF_Point prev = end;
FT_Int contour_index = 0;
for ( point = points; point < point_limit; point++, vec++, tag++ )
{
+ FT_Pos out_x, out_y;
+
+
point->in_dir = (FT_Char)AF_DIR_NONE;
point->out_dir = (FT_Char)AF_DIR_NONE;
@@ -722,6 +864,9 @@
point->ox = point->x = FT_MulFix( vec->x, x_scale ) + x_delta;
point->oy = point->y = FT_MulFix( vec->y, y_scale ) + y_delta;
+ end->fx = (FT_Short)outline->points[endpoint].x;
+ end->fy = (FT_Short)outline->points[endpoint].y;
+
switch ( FT_CURVE_TAG( *tag ) )
{
case FT_CURVE_TAG_CONIC:
@@ -734,6 +879,12 @@
point->flags = AF_FLAG_NONE;
}
+ out_x = point->fx - prev->fx;
+ out_y = point->fy - prev->fy;
+
+ if ( FT_ABS( out_x ) + FT_ABS( out_y ) < near_limit )
+ prev->flags |= AF_FLAG_NEAR;
+
point->prev = prev;
prev->next = point;
prev = point;
@@ -742,8 +893,9 @@
{
if ( ++contour_index < outline->n_contours )
{
- end = points + outline->contours[contour_index];
- prev = end;
+ endpoint = outline->contours[contour_index];
+ end = points + endpoint;
+ prev = end;
}
}
}
@@ -769,17 +921,15 @@
* Compute directions of `in' and `out' vectors.
*
* Note that distances between points that are very near to each
- * other are accumulated. In other words, the auto-hinter
+ * other are accumulated. In other words, the auto-hinter either
* prepends the small vectors between near points to the first
- * non-near vector. All intermediate points are tagged as
- * weak; the directions are adjusted also to be equal to the
- * accumulated one.
+ * non-near vector, or the sum of small vector lengths exceeds a
+ * threshold, thus `grouping' the small vectors. All intermediate
+ * points are tagged as weak; the directions are adjusted also to
+ * be equal to the accumulated one.
*/
- /* value 20 in `near_limit' is heuristic */
- FT_UInt units_per_em = hints->metrics->scaler.face->units_per_EM;
- FT_Int near_limit = 20 * units_per_em / 2048;
- FT_Int near_limit2 = 2 * near_limit - 1;
+ FT_Int near_limit2 = 2 * near_limit - 1;
AF_Point* contour;
AF_Point* contour_limit = hints->contours + hints->num_contours;
@@ -826,7 +976,7 @@
/* now loop over all points of the contour to get */
/* `in' and `out' vector directions */
- curr = first;
+ curr = first;
/*
* We abuse the `u' and `v' fields to store index deltas to the
@@ -849,7 +999,7 @@
point = next;
- next = point->next;
+ next = point->next;
out_x += next->fx - point->fx;
out_y += next->fy - point->fy;
@@ -1045,7 +1195,7 @@
AF_Point point, first, last;
- if ( edge == NULL )
+ if ( !edge )
continue;
first = seg->first;
@@ -1071,7 +1221,7 @@
AF_Point point, first, last;
- if ( edge == NULL )
+ if ( !edge )
continue;
first = seg->first;
diff --git a/src/autofit/afhints.h b/src/autofit/afhints.h
index a64c7a4..3326ebc 100644
--- a/src/autofit/afhints.h
+++ b/src/autofit/afhints.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __AFHINTS_H__
-#define __AFHINTS_H__
+#ifndef AFHINTS_H_
+#define AFHINTS_H_
#include "aftypes.h"
@@ -62,7 +62,7 @@
*
* by David Turner and Werner Lemberg
*
- * http://www.tug.org/TUGboat/Articles/tb24-3/lemberg.pdf
+ * https://www.tug.org/TUGboat/Articles/tb24-3/lemberg.pdf
*
* with appropriate updates.
*
@@ -221,6 +221,9 @@
/* candidates for weak interpolation have this flag set */
#define AF_FLAG_WEAK_INTERPOLATION ( 1U << 4 )
+ /* the distance to the next point is very small */
+#define AF_FLAG_NEAR ( 1U << 5 )
+
/* edge hint flags */
#define AF_EDGE_NORMAL 0
@@ -257,6 +260,7 @@
FT_Byte flags; /* edge/segment flags for this segment */
FT_Char dir; /* segment direction */
FT_Short pos; /* position of segment */
+ FT_Short delta; /* deviation from segment position */
FT_Short min_coord; /* minimum coordinate of segment */
FT_Short max_coord; /* maximum coordinate of segment */
FT_Short height; /* the hinted segment height */
@@ -266,7 +270,6 @@
AF_Segment link; /* (stem) link segment */
AF_Segment serif; /* primary segment for serifs */
- FT_Pos num_linked; /* number of linked segments */
FT_Pos score; /* used during stem matching */
FT_Pos len; /* used during stem matching */
@@ -289,7 +292,6 @@
AF_Width blue_edge; /* non-NULL if this is a blue edge */
AF_Edge link; /* link edge */
AF_Edge serif; /* primary edge for serifs */
- FT_Short num_linked; /* number of linked edges */
FT_Int score; /* used during stem matching */
AF_Segment first; /* first segment in edge */
@@ -419,6 +421,7 @@
af_axis_hints_new_edge( AF_AxisHints axis,
FT_Int fpos,
AF_Direction dir,
+ FT_Bool top_to_bottom_hinting,
FT_Memory memory,
AF_Edge *edge );
@@ -472,7 +475,7 @@
FT_END_HEADER
-#endif /* __AFHINTS_H__ */
+#endif /* AFHINTS_H_ */
/* END */
diff --git a/src/autofit/afindic.c b/src/autofit/afindic.c
index 7412cd1..dfbea5f 100644
--- a/src/autofit/afindic.c
+++ b/src/autofit/afindic.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines for Indic writing system (body). */
/* */
-/* Copyright 2007-2015 by */
+/* Copyright 2007-2018 by */
/* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,13 +18,13 @@
#include "aftypes.h"
#include "aflatin.h"
+#include "afcjk.h"
#ifdef AF_CONFIG_OPTION_INDIC
#include "afindic.h"
#include "aferrors.h"
-#include "afcjk.h"
#ifdef AF_CONFIG_OPTION_USE_WARPER
@@ -79,12 +79,29 @@
static FT_Error
- af_indic_hints_apply( AF_GlyphHints hints,
+ af_indic_hints_apply( FT_UInt glyph_index,
+ AF_GlyphHints hints,
FT_Outline* outline,
AF_CJKMetrics metrics )
{
/* use CJK routines */
- return af_cjk_hints_apply( hints, outline, metrics );
+ return af_cjk_hints_apply( glyph_index, hints, outline, metrics );
+ }
+
+
+ /* Extract standard_width from writing system/script specific */
+ /* metrics class. */
+
+ static void
+ af_indic_get_standard_widths( AF_CJKMetrics metrics,
+ FT_Pos* stdHW,
+ FT_Pos* stdVW )
+ {
+ if ( stdHW )
+ *stdHW = metrics->axis[AF_DIMENSION_VERT].standard_width;
+
+ if ( stdVW )
+ *stdVW = metrics->axis[AF_DIMENSION_HORZ].standard_width;
}
@@ -104,12 +121,13 @@
sizeof ( AF_CJKMetricsRec ),
- (AF_WritingSystem_InitMetricsFunc) af_indic_metrics_init,
- (AF_WritingSystem_ScaleMetricsFunc)af_indic_metrics_scale,
- (AF_WritingSystem_DoneMetricsFunc) NULL,
+ (AF_WritingSystem_InitMetricsFunc) af_indic_metrics_init, /* style_metrics_init */
+ (AF_WritingSystem_ScaleMetricsFunc)af_indic_metrics_scale, /* style_metrics_scale */
+ (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
+ (AF_WritingSystem_GetStdWidthsFunc)af_indic_get_standard_widths, /* style_metrics_getstdw */
- (AF_WritingSystem_InitHintsFunc) af_indic_hints_init,
- (AF_WritingSystem_ApplyHintsFunc) af_indic_hints_apply
+ (AF_WritingSystem_InitHintsFunc) af_indic_hints_init, /* style_hints_init */
+ (AF_WritingSystem_ApplyHintsFunc) af_indic_hints_apply /* style_hints_apply */
)
@@ -123,12 +141,13 @@
sizeof ( AF_CJKMetricsRec ),
- (AF_WritingSystem_InitMetricsFunc) NULL,
- (AF_WritingSystem_ScaleMetricsFunc)NULL,
- (AF_WritingSystem_DoneMetricsFunc) NULL,
+ (AF_WritingSystem_InitMetricsFunc) NULL, /* style_metrics_init */
+ (AF_WritingSystem_ScaleMetricsFunc)NULL, /* style_metrics_scale */
+ (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
+ (AF_WritingSystem_GetStdWidthsFunc)NULL, /* style_metrics_getstdw */
- (AF_WritingSystem_InitHintsFunc) NULL,
- (AF_WritingSystem_ApplyHintsFunc) NULL
+ (AF_WritingSystem_InitHintsFunc) NULL, /* style_hints_init */
+ (AF_WritingSystem_ApplyHintsFunc) NULL /* style_hints_apply */
)
diff --git a/src/autofit/afindic.h b/src/autofit/afindic.h
index 4c36908..5688738 100644
--- a/src/autofit/afindic.h
+++ b/src/autofit/afindic.h
@@ -5,7 +5,7 @@
/* Auto-fitter hinting routines for Indic writing system */
/* (specification). */
/* */
-/* Copyright 2007-2015 by */
+/* Copyright 2007-2018 by */
/* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __AFINDIC_H__
-#define __AFINDIC_H__
+#ifndef AFINDIC_H_
+#define AFINDIC_H_
#include "afhints.h"
@@ -35,7 +35,7 @@
FT_END_HEADER
-#endif /* __AFINDIC_H__ */
+#endif /* AFINDIC_H_ */
/* END */
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
index 893e986..9f1b540 100644
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines for latin writing system (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -41,6 +41,10 @@
#define FT_COMPONENT trace_aflatin
+ /* needed for computation of round vs. flat segments */
+#define FLAT_THRESHOLD( x ) ( x / 14 )
+
+
/*************************************************************************/
/*************************************************************************/
/***** *****/
@@ -75,7 +79,6 @@
{
FT_Error error;
FT_ULong glyph_index;
- FT_Long y_offset;
int dim;
AF_LatinMetricsRec dummy[1];
AF_Scaler scaler = &dummy->root.scaler;
@@ -88,52 +91,63 @@
AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
[style_class->script];
- FT_UInt32 standard_char;
+ void* shaper_buf;
+ const char* p;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_ULong ch = 0;
+#endif
+
+ p = script_class->standard_charstring;
+ shaper_buf = af_shaper_buf_create( face );
/*
- * We check more than a single standard character to catch features
- * like `c2sc' (small caps from caps) that don't contain lowercase
- * letters by definition, or other features that mainly operate on
- * numerals.
+ * We check a list of standard characters to catch features like
+ * `c2sc' (small caps from caps) that don't contain lowercase letters
+ * by definition, or other features that mainly operate on numerals.
+ * The first match wins.
*/
- standard_char = script_class->standard_char1;
- af_get_char_index( &metrics->root,
- standard_char,
- &glyph_index,
- &y_offset );
- if ( !glyph_index )
+ glyph_index = 0;
+ while ( *p )
{
- if ( script_class->standard_char2 )
- {
- standard_char = script_class->standard_char2;
- af_get_char_index( &metrics->root,
- standard_char,
- &glyph_index,
- &y_offset );
- if ( !glyph_index )
- {
- if ( script_class->standard_char3 )
- {
- standard_char = script_class->standard_char3;
- af_get_char_index( &metrics->root,
- standard_char,
- &glyph_index,
- &y_offset );
- if ( !glyph_index )
- goto Exit;
- }
- else
- goto Exit;
- }
- }
- else
- goto Exit;
+ unsigned int num_idx;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ const char* p_old;
+#endif
+
+
+ while ( *p == ' ' )
+ p++;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ p_old = p;
+ GET_UTF8_CHAR( ch, p_old );
+#endif
+
+ /* reject input that maps to more than a single glyph */
+ p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
+ if ( num_idx > 1 )
+ continue;
+
+ /* otherwise exit loop if we have a result */
+ glyph_index = af_shaper_get_elem( &metrics->root,
+ shaper_buf,
+ 0,
+ NULL,
+ NULL );
+ if ( glyph_index )
+ break;
}
+ af_shaper_buf_destroy( face, shaper_buf );
+
+ if ( !glyph_index )
+ goto Exit;
+
FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
- standard_char, glyph_index ));
+ ch, glyph_index ));
error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
if ( error || face->glyph->outline.n_points <= 0 )
@@ -251,6 +265,45 @@
}
+ static void
+ af_latin_sort_blue( FT_UInt count,
+ AF_LatinBlue* table )
+ {
+ FT_UInt i, j;
+ AF_LatinBlue swap;
+
+
+ /* we sort from bottom to top */
+ for ( i = 1; i < count; i++ )
+ {
+ for ( j = i; j > 0; j-- )
+ {
+ FT_Pos a, b;
+
+
+ if ( table[j - 1]->flags & ( AF_LATIN_BLUE_TOP |
+ AF_LATIN_BLUE_SUB_TOP ) )
+ a = table[j - 1]->ref.org;
+ else
+ a = table[j - 1]->shoot.org;
+
+ if ( table[j]->flags & ( AF_LATIN_BLUE_TOP |
+ AF_LATIN_BLUE_SUB_TOP ) )
+ b = table[j]->ref.org;
+ else
+ b = table[j]->shoot.org;
+
+ if ( b >= a )
+ break;
+
+ swap = table[j];
+ table[j] = table[j - 1];
+ table[j - 1] = swap;
+ }
+ }
+ }
+
+
/* Find all blue zones. Flat segments give the reference points, */
/* round segments the overshoot positions. */
@@ -274,6 +327,10 @@
AF_Blue_Stringset bss = sc->blue_stringset;
const AF_Blue_StringRec* bs = &af_blue_stringsets[bss];
+ FT_Pos flat_threshold = FLAT_THRESHOLD( metrics->units_per_em );
+
+ void* shaper_buf;
+
/* we walk over the blue character strings as specified in the */
/* style's entry in the `af_blue_stringset' array */
@@ -282,11 +339,15 @@
"============================\n"
"\n" ));
+ shaper_buf = af_shaper_buf_create( face );
+
for ( ; bs->string != AF_BLUE_STRING_MAX; bs++ )
{
const char* p = &af_blue_strings[bs->string];
FT_Pos* blue_ref;
FT_Pos* blue_shoot;
+ FT_Pos ascender;
+ FT_Pos descender;
#ifdef FT_DEBUG_LEVEL_TRACE
@@ -305,6 +366,11 @@
FT_TRACE5(( "top" ));
have_flag = 1;
}
+ else if ( AF_LATIN_IS_SUB_TOP_BLUE( bs ) )
+ {
+ FT_TRACE5(( "sub top" ));
+ have_flag = 1;
+ }
if ( AF_LATIN_IS_NEUTRAL_BLUE( bs ) )
{
@@ -338,394 +404,482 @@
num_flats = 0;
num_rounds = 0;
+ ascender = 0;
+ descender = 0;
while ( *p )
{
- FT_ULong ch;
FT_ULong glyph_index;
FT_Long y_offset;
- FT_Pos best_y; /* same as points.y */
FT_Int best_point, best_contour_first, best_contour_last;
FT_Vector* points;
- FT_Bool round = 0;
+
+ FT_Pos best_y_extremum; /* same as points.y */
+ FT_Bool best_round = 0;
+
+ unsigned int i, num_idx;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ const char* p_old;
+ FT_ULong ch;
+#endif
- GET_UTF8_CHAR( ch, p );
+ while ( *p == ' ' )
+ p++;
- /* load the character in the face -- skip unknown or empty ones */
- af_get_char_index( &metrics->root, ch, &glyph_index, &y_offset );
- if ( glyph_index == 0 )
+#ifdef FT_DEBUG_LEVEL_TRACE
+ p_old = p;
+ GET_UTF8_CHAR( ch, p_old );
+#endif
+
+ p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
+
+ if ( !num_idx )
{
FT_TRACE5(( " U+%04lX unavailable\n", ch ));
continue;
}
- error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
- outline = face->glyph->outline;
- /* reject glyphs that don't produce any rendering */
- if ( error || outline.n_points <= 2 )
+ if ( AF_LATIN_IS_TOP_BLUE( bs ) )
+ best_y_extremum = FT_INT_MIN;
+ else
+ best_y_extremum = FT_INT_MAX;
+
+ /* iterate over all glyph elements of the character cluster */
+ /* and get the data of the `biggest' one */
+ for ( i = 0; i < num_idx; i++ )
{
- FT_TRACE5(( " U+%04lX contains no (usable) outlines\n", ch ));
- continue;
- }
-
- /* now compute min or max point indices and coordinates */
- points = outline.points;
- best_point = -1;
- best_y = 0; /* make compiler happy */
- best_contour_first = 0; /* ditto */
- best_contour_last = 0; /* ditto */
-
- {
- FT_Int nn;
- FT_Int first = 0;
- FT_Int last = -1;
+ FT_Pos best_y;
+ FT_Bool round = 0;
- for ( nn = 0; nn < outline.n_contours; first = last + 1, nn++ )
+ /* load the character in the face -- skip unknown or empty ones */
+ glyph_index = af_shaper_get_elem( &metrics->root,
+ shaper_buf,
+ i,
+ NULL,
+ &y_offset );
+ if ( glyph_index == 0 )
{
- FT_Int old_best_point = best_point;
- FT_Int pp;
-
-
- last = outline.contours[nn];
-
- /* Avoid single-point contours since they are never rasterized. */
- /* In some fonts, they correspond to mark attachment points */
- /* that are way outside of the glyph's real outline. */
- if ( last <= first )
- continue;
-
- if ( AF_LATIN_IS_TOP_BLUE( bs ) )
- {
- for ( pp = first; pp <= last; pp++ )
- if ( best_point < 0 || points[pp].y > best_y )
- {
- best_point = pp;
- best_y = points[pp].y;
- }
- }
- else
- {
- for ( pp = first; pp <= last; pp++ )
- if ( best_point < 0 || points[pp].y < best_y )
- {
- best_point = pp;
- best_y = points[pp].y;
- }
- }
-
- if ( best_point != old_best_point )
- {
- best_contour_first = first;
- best_contour_last = last;
- }
- }
- }
-
- /* now check whether the point belongs to a straight or round */
- /* segment; we first need to find in which contour the extremum */
- /* lies, then inspect its previous and next points */
- if ( best_point >= 0 )
- {
- FT_Pos best_x = points[best_point].x;
- FT_Int prev, next;
- FT_Int best_segment_first, best_segment_last;
- FT_Int best_on_point_first, best_on_point_last;
- FT_Pos dist;
-
-
- best_segment_first = best_point;
- best_segment_last = best_point;
-
- if ( FT_CURVE_TAG( outline.tags[best_point] ) == FT_CURVE_TAG_ON )
- {
- best_on_point_first = best_point;
- best_on_point_last = best_point;
- }
- else
- {
- best_on_point_first = -1;
- best_on_point_last = -1;
+ FT_TRACE5(( " U+%04lX unavailable\n", ch ));
+ continue;
}
- /* look for the previous and next points on the contour */
- /* that are not on the same Y coordinate, then threshold */
- /* the `closeness'... */
- prev = best_point;
- next = prev;
-
- do
+ error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
+ outline = face->glyph->outline;
+ /* reject glyphs that don't produce any rendering */
+ if ( error || outline.n_points <= 2 )
{
- if ( prev > best_contour_first )
- prev--;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( num_idx == 1 )
+ FT_TRACE5(( " U+%04lX contains no (usable) outlines\n", ch ));
else
- prev = best_contour_last;
+ FT_TRACE5(( " component %d of cluster starting with U+%04lX"
+ " contains no (usable) outlines\n", i, ch ));
+#endif
+ continue;
+ }
- dist = FT_ABS( points[prev].y - best_y );
- /* accept a small distance or a small angle (both values are */
- /* heuristic; value 20 corresponds to approx. 2.9 degrees) */
- if ( dist > 5 )
- if ( FT_ABS( points[prev].x - best_x ) <= 20 * dist )
- break;
+ /* now compute min or max point indices and coordinates */
+ points = outline.points;
+ best_point = -1;
+ best_y = 0; /* make compiler happy */
+ best_contour_first = 0; /* ditto */
+ best_contour_last = 0; /* ditto */
- best_segment_first = prev;
-
- if ( FT_CURVE_TAG( outline.tags[prev] ) == FT_CURVE_TAG_ON )
- {
- best_on_point_first = prev;
- if ( best_on_point_last < 0 )
- best_on_point_last = prev;
- }
-
- } while ( prev != best_point );
-
- do
{
- if ( next < best_contour_last )
- next++;
- else
- next = best_contour_first;
+ FT_Int nn;
+ FT_Int first = 0;
+ FT_Int last = -1;
- dist = FT_ABS( points[next].y - best_y );
- if ( dist > 5 )
- if ( FT_ABS( points[next].x - best_x ) <= 20 * dist )
- break;
- best_segment_last = next;
-
- if ( FT_CURVE_TAG( outline.tags[next] ) == FT_CURVE_TAG_ON )
+ for ( nn = 0; nn < outline.n_contours; first = last + 1, nn++ )
{
- best_on_point_last = next;
- if ( best_on_point_first < 0 )
- best_on_point_first = next;
- }
-
- } while ( next != best_point );
-
- if ( AF_LATIN_IS_LONG_BLUE( bs ) )
- {
- /* If this flag is set, we have an additional constraint to */
- /* get the blue zone distance: Find a segment of the topmost */
- /* (or bottommost) contour that is longer than a heuristic */
- /* threshold. This ensures that small bumps in the outline */
- /* are ignored (for example, the `vertical serifs' found in */
- /* many Hebrew glyph designs). */
-
- /* If this segment is long enough, we are done. Otherwise, */
- /* search the segment next to the extremum that is long */
- /* enough, has the same direction, and a not too large */
- /* vertical distance from the extremum. Note that the */
- /* algorithm doesn't check whether the found segment is */
- /* actually the one (vertically) nearest to the extremum. */
-
- /* heuristic threshold value */
- FT_Pos length_threshold = metrics->units_per_em / 25;
+ FT_Int old_best_point = best_point;
+ FT_Int pp;
- dist = FT_ABS( points[best_segment_last].x -
- points[best_segment_first].x );
+ last = outline.contours[nn];
- if ( dist < length_threshold &&
- best_segment_last - best_segment_first + 2 <=
- best_contour_last - best_contour_first )
- {
- /* heuristic threshold value */
- FT_Pos height_threshold = metrics->units_per_em / 4;
-
- FT_Int first;
- FT_Int last;
- FT_Bool hit;
-
- /* we intentionally declare these two variables */
- /* outside of the loop since various compilers emit */
- /* incorrect warning messages otherwise, talking about */
- /* `possibly uninitialized variables' */
- FT_Int p_first = 0; /* make compiler happy */
- FT_Int p_last = 0;
-
- FT_Bool left2right;
-
-
- /* compute direction */
- prev = best_point;
-
- do
- {
- if ( prev > best_contour_first )
- prev--;
- else
- prev = best_contour_last;
-
- if ( points[prev].x != best_x )
- break;
-
- } while ( prev != best_point );
-
- /* skip glyph for the degenerate case */
- if ( prev == best_point )
+ /* Avoid single-point contours since they are never */
+ /* rasterized. In some fonts, they correspond to mark */
+ /* attachment points that are way outside of the glyph's */
+ /* real outline. */
+ if ( last <= first )
continue;
- left2right = FT_BOOL( points[prev].x < points[best_point].x );
-
- first = best_segment_last;
- last = first;
- hit = 0;
-
- do
+ if ( AF_LATIN_IS_TOP_BLUE( bs ) ||
+ AF_LATIN_IS_SUB_TOP_BLUE( bs ) )
{
- FT_Bool l2r;
- FT_Pos d;
-
-
- if ( !hit )
+ for ( pp = first; pp <= last; pp++ )
{
- /* no hit; adjust first point */
- first = last;
-
- /* also adjust first and last on point */
- if ( FT_CURVE_TAG( outline.tags[first] ) ==
- FT_CURVE_TAG_ON )
+ if ( best_point < 0 || points[pp].y > best_y )
{
- p_first = first;
- p_last = first;
+ best_point = pp;
+ best_y = points[pp].y;
+ ascender = FT_MAX( ascender, best_y + y_offset );
}
else
+ descender = FT_MIN( descender, points[pp].y + y_offset );
+ }
+ }
+ else
+ {
+ for ( pp = first; pp <= last; pp++ )
+ {
+ if ( best_point < 0 || points[pp].y < best_y )
{
- p_first = -1;
- p_last = -1;
+ best_point = pp;
+ best_y = points[pp].y;
+ descender = FT_MIN( descender, best_y + y_offset );
+ }
+ else
+ ascender = FT_MAX( ascender, points[pp].y + y_offset );
+ }
+ }
+
+ if ( best_point != old_best_point )
+ {
+ best_contour_first = first;
+ best_contour_last = last;
+ }
+ }
+ }
+
+ /* now check whether the point belongs to a straight or round */
+ /* segment; we first need to find in which contour the extremum */
+ /* lies, then inspect its previous and next points */
+ if ( best_point >= 0 )
+ {
+ FT_Pos best_x = points[best_point].x;
+ FT_Int prev, next;
+ FT_Int best_segment_first, best_segment_last;
+ FT_Int best_on_point_first, best_on_point_last;
+ FT_Pos dist;
+
+
+ best_segment_first = best_point;
+ best_segment_last = best_point;
+
+ if ( FT_CURVE_TAG( outline.tags[best_point] ) == FT_CURVE_TAG_ON )
+ {
+ best_on_point_first = best_point;
+ best_on_point_last = best_point;
+ }
+ else
+ {
+ best_on_point_first = -1;
+ best_on_point_last = -1;
+ }
+
+ /* look for the previous and next points on the contour */
+ /* that are not on the same Y coordinate, then threshold */
+ /* the `closeness'... */
+ prev = best_point;
+ next = prev;
+
+ do
+ {
+ if ( prev > best_contour_first )
+ prev--;
+ else
+ prev = best_contour_last;
+
+ dist = FT_ABS( points[prev].y - best_y );
+ /* accept a small distance or a small angle (both values are */
+ /* heuristic; value 20 corresponds to approx. 2.9 degrees) */
+ if ( dist > 5 )
+ if ( FT_ABS( points[prev].x - best_x ) <= 20 * dist )
+ break;
+
+ best_segment_first = prev;
+
+ if ( FT_CURVE_TAG( outline.tags[prev] ) == FT_CURVE_TAG_ON )
+ {
+ best_on_point_first = prev;
+ if ( best_on_point_last < 0 )
+ best_on_point_last = prev;
+ }
+
+ } while ( prev != best_point );
+
+ do
+ {
+ if ( next < best_contour_last )
+ next++;
+ else
+ next = best_contour_first;
+
+ dist = FT_ABS( points[next].y - best_y );
+ if ( dist > 5 )
+ if ( FT_ABS( points[next].x - best_x ) <= 20 * dist )
+ break;
+
+ best_segment_last = next;
+
+ if ( FT_CURVE_TAG( outline.tags[next] ) == FT_CURVE_TAG_ON )
+ {
+ best_on_point_last = next;
+ if ( best_on_point_first < 0 )
+ best_on_point_first = next;
+ }
+
+ } while ( next != best_point );
+
+ if ( AF_LATIN_IS_LONG_BLUE( bs ) )
+ {
+ /* If this flag is set, we have an additional constraint to */
+ /* get the blue zone distance: Find a segment of the topmost */
+ /* (or bottommost) contour that is longer than a heuristic */
+ /* threshold. This ensures that small bumps in the outline */
+ /* are ignored (for example, the `vertical serifs' found in */
+ /* many Hebrew glyph designs). */
+
+ /* If this segment is long enough, we are done. Otherwise, */
+ /* search the segment next to the extremum that is long */
+ /* enough, has the same direction, and a not too large */
+ /* vertical distance from the extremum. Note that the */
+ /* algorithm doesn't check whether the found segment is */
+ /* actually the one (vertically) nearest to the extremum. */
+
+ /* heuristic threshold value */
+ FT_Pos length_threshold = metrics->units_per_em / 25;
+
+
+ dist = FT_ABS( points[best_segment_last].x -
+ points[best_segment_first].x );
+
+ if ( dist < length_threshold &&
+ best_segment_last - best_segment_first + 2 <=
+ best_contour_last - best_contour_first )
+ {
+ /* heuristic threshold value */
+ FT_Pos height_threshold = metrics->units_per_em / 4;
+
+ FT_Int first;
+ FT_Int last;
+ FT_Bool hit;
+
+ /* we intentionally declare these two variables */
+ /* outside of the loop since various compilers emit */
+ /* incorrect warning messages otherwise, talking about */
+ /* `possibly uninitialized variables' */
+ FT_Int p_first = 0; /* make compiler happy */
+ FT_Int p_last = 0;
+
+ FT_Bool left2right;
+
+
+ /* compute direction */
+ prev = best_point;
+
+ do
+ {
+ if ( prev > best_contour_first )
+ prev--;
+ else
+ prev = best_contour_last;
+
+ if ( points[prev].x != best_x )
+ break;
+
+ } while ( prev != best_point );
+
+ /* skip glyph for the degenerate case */
+ if ( prev == best_point )
+ continue;
+
+ left2right = FT_BOOL( points[prev].x < points[best_point].x );
+
+ first = best_segment_last;
+ last = first;
+ hit = 0;
+
+ do
+ {
+ FT_Bool l2r;
+ FT_Pos d;
+
+
+ if ( !hit )
+ {
+ /* no hit; adjust first point */
+ first = last;
+
+ /* also adjust first and last on point */
+ if ( FT_CURVE_TAG( outline.tags[first] ) ==
+ FT_CURVE_TAG_ON )
+ {
+ p_first = first;
+ p_last = first;
+ }
+ else
+ {
+ p_first = -1;
+ p_last = -1;
+ }
+
+ hit = 1;
}
- hit = 1;
- }
+ if ( last < best_contour_last )
+ last++;
+ else
+ last = best_contour_first;
- if ( last < best_contour_last )
- last++;
- else
- last = best_contour_first;
-
- if ( FT_ABS( best_y - points[first].y ) > height_threshold )
- {
- /* vertical distance too large */
- hit = 0;
- continue;
- }
-
- /* same test as above */
- dist = FT_ABS( points[last].y - points[first].y );
- if ( dist > 5 )
- if ( FT_ABS( points[last].x - points[first].x ) <=
- 20 * dist )
+ if ( FT_ABS( best_y - points[first].y ) > height_threshold )
{
+ /* vertical distance too large */
hit = 0;
continue;
}
- if ( FT_CURVE_TAG( outline.tags[last] ) == FT_CURVE_TAG_ON )
- {
- p_last = last;
- if ( p_first < 0 )
- p_first = last;
- }
-
- l2r = FT_BOOL( points[first].x < points[last].x );
- d = FT_ABS( points[last].x - points[first].x );
-
- if ( l2r == left2right &&
- d >= length_threshold )
- {
- /* all constraints are met; update segment after finding */
- /* its end */
- do
- {
- if ( last < best_contour_last )
- last++;
- else
- last = best_contour_first;
-
- d = FT_ABS( points[last].y - points[first].y );
- if ( d > 5 )
- if ( FT_ABS( points[next].x - points[first].x ) <=
- 20 * dist )
- {
- if ( last > best_contour_first )
- last--;
- else
- last = best_contour_last;
- break;
- }
-
- p_last = last;
-
- if ( FT_CURVE_TAG( outline.tags[last] ) ==
- FT_CURVE_TAG_ON )
+ /* same test as above */
+ dist = FT_ABS( points[last].y - points[first].y );
+ if ( dist > 5 )
+ if ( FT_ABS( points[last].x - points[first].x ) <=
+ 20 * dist )
{
- p_last = last;
- if ( p_first < 0 )
- p_first = last;
+ hit = 0;
+ continue;
}
- } while ( last != best_segment_first );
+ if ( FT_CURVE_TAG( outline.tags[last] ) == FT_CURVE_TAG_ON )
+ {
+ p_last = last;
+ if ( p_first < 0 )
+ p_first = last;
+ }
- best_y = points[first].y;
+ l2r = FT_BOOL( points[first].x < points[last].x );
+ d = FT_ABS( points[last].x - points[first].x );
- best_segment_first = first;
- best_segment_last = last;
+ if ( l2r == left2right &&
+ d >= length_threshold )
+ {
+ /* all constraints are met; update segment after */
+ /* finding its end */
+ do
+ {
+ if ( last < best_contour_last )
+ last++;
+ else
+ last = best_contour_first;
- best_on_point_first = p_first;
- best_on_point_last = p_last;
+ d = FT_ABS( points[last].y - points[first].y );
+ if ( d > 5 )
+ if ( FT_ABS( points[next].x - points[first].x ) <=
+ 20 * dist )
+ {
+ if ( last > best_contour_first )
+ last--;
+ else
+ last = best_contour_last;
+ break;
+ }
- break;
- }
+ p_last = last;
- } while ( last != best_segment_first );
+ if ( FT_CURVE_TAG( outline.tags[last] ) ==
+ FT_CURVE_TAG_ON )
+ {
+ p_last = last;
+ if ( p_first < 0 )
+ p_first = last;
+ }
+
+ } while ( last != best_segment_first );
+
+ best_y = points[first].y;
+
+ best_segment_first = first;
+ best_segment_last = last;
+
+ best_on_point_first = p_first;
+ best_on_point_last = p_last;
+
+ break;
+ }
+
+ } while ( last != best_segment_first );
+ }
+ }
+
+ /* for computing blue zones, we add the y offset as returned */
+ /* by the currently used OpenType feature -- for example, */
+ /* superscript glyphs might be identical to subscript glyphs */
+ /* with a vertical shift */
+ best_y += y_offset;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( num_idx == 1 )
+ FT_TRACE5(( " U+%04lX: best_y = %5ld", ch, best_y ));
+ else
+ FT_TRACE5(( " component %d of cluster starting with U+%04lX:"
+ " best_y = %5ld", i, ch, best_y ));
+#endif
+
+ /* now set the `round' flag depending on the segment's kind: */
+ /* */
+ /* - if the horizontal distance between the first and last */
+ /* `on' point is larger than a heuristic threshold */
+ /* we have a flat segment */
+ /* - if either the first or the last point of the segment is */
+ /* an `off' point, the segment is round, otherwise it is */
+ /* flat */
+ if ( best_on_point_first >= 0 &&
+ best_on_point_last >= 0 &&
+ ( FT_ABS( points[best_on_point_last].x -
+ points[best_on_point_first].x ) ) >
+ flat_threshold )
+ round = 0;
+ else
+ round = FT_BOOL(
+ FT_CURVE_TAG( outline.tags[best_segment_first] ) !=
+ FT_CURVE_TAG_ON ||
+ FT_CURVE_TAG( outline.tags[best_segment_last] ) !=
+ FT_CURVE_TAG_ON );
+
+ if ( round && AF_LATIN_IS_NEUTRAL_BLUE( bs ) )
+ {
+ /* only use flat segments for a neutral blue zone */
+ FT_TRACE5(( " (round, skipped)\n" ));
+ continue;
+ }
+
+ FT_TRACE5(( " (%s)\n", round ? "round" : "flat" ));
+ }
+
+ if ( AF_LATIN_IS_TOP_BLUE( bs ) )
+ {
+ if ( best_y > best_y_extremum )
+ {
+ best_y_extremum = best_y;
+ best_round = round;
+ }
+ }
+ else
+ {
+ if ( best_y < best_y_extremum )
+ {
+ best_y_extremum = best_y;
+ best_round = round;
}
}
- /* for computing blue zones, we add the y offset as returned */
- /* by the currently used OpenType feature -- for example, */
- /* superscript glyphs might be identical to subscript glyphs */
- /* with a vertical shift */
- best_y += y_offset;
+ } /* end for loop */
- FT_TRACE5(( " U+%04lX: best_y = %5ld", ch, best_y ));
-
- /* now set the `round' flag depending on the segment's kind: */
- /* */
- /* - if the horizontal distance between the first and last */
- /* `on' point is larger than upem/8 (value 8 is heuristic) */
- /* we have a flat segment */
- /* - if either the first or the last point of the segment is */
- /* an `off' point, the segment is round, otherwise it is */
- /* flat */
- if ( best_on_point_first >= 0 &&
- best_on_point_last >= 0 &&
- (FT_UInt)( FT_ABS( points[best_on_point_last].x -
- points[best_on_point_first].x ) ) >
- metrics->units_per_em / 8 )
- round = 0;
+ if ( !( best_y_extremum == FT_INT_MIN ||
+ best_y_extremum == FT_INT_MAX ) )
+ {
+ if ( best_round )
+ rounds[num_rounds++] = best_y_extremum;
else
- round = FT_BOOL(
- FT_CURVE_TAG( outline.tags[best_segment_first] ) !=
- FT_CURVE_TAG_ON ||
- FT_CURVE_TAG( outline.tags[best_segment_last] ) !=
- FT_CURVE_TAG_ON );
-
- if ( round && AF_LATIN_IS_NEUTRAL_BLUE( bs ) )
- {
- /* only use flat segments for a neutral blue zone */
- FT_TRACE5(( " (round, skipped)\n" ));
- continue;
- }
-
- FT_TRACE5(( " (%s)\n", round ? "round" : "flat" ));
+ flats[num_flats++] = best_y_extremum;
}
- if ( round )
- rounds[num_rounds++] = best_y;
- else
- flats[num_flats++] = best_y;
- }
+ } /* end while loop */
if ( num_flats == 0 && num_rounds == 0 )
{
@@ -775,7 +929,8 @@
FT_Bool over_ref = FT_BOOL( shoot > ref );
- if ( AF_LATIN_IS_TOP_BLUE( bs ) ^ over_ref )
+ if ( ( AF_LATIN_IS_TOP_BLUE( bs ) ||
+ AF_LATIN_IS_SUB_TOP_BLUE( bs) ) ^ over_ref )
{
*blue_ref =
*blue_shoot = ( shoot + ref ) / 2;
@@ -785,9 +940,14 @@
}
}
+ blue->ascender = ascender;
+ blue->descender = descender;
+
blue->flags = 0;
if ( AF_LATIN_IS_TOP_BLUE( bs ) )
blue->flags |= AF_LATIN_BLUE_TOP;
+ if ( AF_LATIN_IS_SUB_TOP_BLUE( bs ) )
+ blue->flags |= AF_LATIN_BLUE_SUB_TOP;
if ( AF_LATIN_IS_NEUTRAL_BLUE( bs ) )
blue->flags |= AF_LATIN_BLUE_NEUTRAL;
@@ -802,6 +962,63 @@
FT_TRACE5(( " -> reference = %ld\n"
" overshoot = %ld\n",
*blue_ref, *blue_shoot ));
+
+ } /* end for loop */
+
+ af_shaper_buf_destroy( face, shaper_buf );
+
+ /* we finally check whether blue zones are ordered; */
+ /* `ref' and `shoot' values of two blue zones must not overlap */
+ if ( axis->blue_count )
+ {
+ FT_UInt i;
+ AF_LatinBlue blue_sorted[AF_BLUE_STRINGSET_MAX_LEN + 2];
+
+
+ for ( i = 0; i < axis->blue_count; i++ )
+ blue_sorted[i] = &axis->blues[i];
+
+ /* sort bottoms of blue zones... */
+ af_latin_sort_blue( axis->blue_count, blue_sorted );
+
+ /* ...and adjust top values if necessary */
+ for ( i = 0; i < axis->blue_count - 1; i++ )
+ {
+ FT_Pos* a;
+ FT_Pos* b;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_Bool a_is_top = 0;
+#endif
+
+
+ if ( blue_sorted[i]->flags & ( AF_LATIN_BLUE_TOP |
+ AF_LATIN_BLUE_SUB_TOP ) )
+ {
+ a = &blue_sorted[i]->shoot.org;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ a_is_top = 1;
+#endif
+ }
+ else
+ a = &blue_sorted[i]->ref.org;
+
+ if ( blue_sorted[i + 1]->flags & ( AF_LATIN_BLUE_TOP |
+ AF_LATIN_BLUE_SUB_TOP ) )
+ b = &blue_sorted[i + 1]->shoot.org;
+ else
+ b = &blue_sorted[i + 1]->ref.org;
+
+ if ( *a > *b )
+ {
+ *a = *b;
+ FT_TRACE5(( "blue zone overlap:"
+ " adjusting %s %d to %ld\n",
+ a_is_top ? "overshoot" : "reference",
+ blue_sorted[i] - axis->blues,
+ *a ));
+ }
+ }
}
FT_TRACE5(( "\n" ));
@@ -816,27 +1033,36 @@
af_latin_metrics_check_digits( AF_LatinMetrics metrics,
FT_Face face )
{
- FT_UInt i;
FT_Bool started = 0, same_width = 1;
- FT_Fixed advance, old_advance = 0;
+ FT_Fixed advance = 0, old_advance = 0;
+
+ void* shaper_buf;
+
+ /* in all supported charmaps, digits have character codes 0x30-0x39 */
+ const char digits[] = "0 1 2 3 4 5 6 7 8 9";
+ const char* p;
- /* digit `0' is 0x30 in all supported charmaps */
- for ( i = 0x30; i <= 0x39; i++ )
+ p = digits;
+ shaper_buf = af_shaper_buf_create( face );
+
+ while ( *p )
{
- FT_ULong glyph_index;
- FT_Long y_offset;
+ FT_ULong glyph_index;
+ unsigned int num_idx;
- af_get_char_index( &metrics->root, i, &glyph_index, &y_offset );
- if ( glyph_index == 0 )
+ /* reject input that maps to more than a single glyph */
+ p = af_shaper_get_cluster( p, &metrics->root, shaper_buf, &num_idx );
+ if ( num_idx > 1 )
continue;
- if ( FT_Get_Advance( face, glyph_index,
- FT_LOAD_NO_SCALE |
- FT_LOAD_NO_HINTING |
- FT_LOAD_IGNORE_TRANSFORM,
- &advance ) )
+ glyph_index = af_shaper_get_elem( &metrics->root,
+ shaper_buf,
+ 0,
+ &advance,
+ NULL );
+ if ( !glyph_index )
continue;
if ( started )
@@ -854,6 +1080,8 @@
}
}
+ af_shaper_buf_destroy( face, shaper_buf );
+
metrics->root.digits_have_same_width = same_width;
}
@@ -941,7 +1169,7 @@
FT_UInt ppem;
- scaled = FT_MulFix( blue->shoot.org, scaler->y_scale );
+ scaled = FT_MulFix( blue->shoot.org, scale );
ppem = metrics->root.scaler.face->size->metrics.x_ppem;
limit = metrics->root.globals->increase_x_height;
threshold = 40;
@@ -967,18 +1195,52 @@
#endif
if ( dim == AF_DIMENSION_VERT )
{
- scale = FT_MulDiv( scale, fitted, scaled );
+ FT_Pos max_height;
+ FT_Pos dist;
+ FT_Fixed new_scale;
- FT_TRACE5((
- "af_latin_metrics_scale_dim:"
- " x height alignment (style `%s'):\n"
- " "
- " vertical scaling changed from %.4f to %.4f (by %d%%)\n"
- "\n",
- af_style_names[metrics->root.style_class->style],
- axis->org_scale / 65536.0,
- scale / 65536.0,
- ( fitted - scaled ) * 100 / scaled ));
+
+ new_scale = FT_MulDiv( scale, fitted, scaled );
+
+ /* the scaling should not change the result by more than two pixels */
+ max_height = metrics->units_per_em;
+
+ for ( nn = 0; nn < Axis->blue_count; nn++ )
+ {
+ max_height = FT_MAX( max_height, Axis->blues[nn].ascender );
+ max_height = FT_MAX( max_height, -Axis->blues[nn].descender );
+ }
+
+ dist = FT_ABS( FT_MulFix( max_height, new_scale - scale ) );
+ dist &= ~127;
+
+ if ( dist == 0 )
+ {
+ FT_TRACE5((
+ "af_latin_metrics_scale_dim:"
+ " x height alignment (style `%s'):\n"
+ " "
+ " vertical scaling changed from %.5f to %.5f (by %d%%)\n"
+ "\n",
+ af_style_names[metrics->root.style_class->style],
+ scale / 65536.0,
+ new_scale / 65536.0,
+ ( fitted - scaled ) * 100 / scaled ));
+
+ scale = new_scale;
+ }
+#ifdef FT_DEBUG_LEVEL_TRACE
+ else
+ {
+ FT_TRACE5((
+ "af_latin_metrics_scale_dim:"
+ " x height alignment (style `%s'):\n"
+ " "
+ " excessive vertical scaling abandoned\n"
+ "\n",
+ af_style_names[metrics->root.style_class->style] ));
+ }
+#endif
}
}
}
@@ -1032,8 +1294,11 @@
if ( dim == AF_DIMENSION_VERT )
{
- FT_TRACE5(( "blue zones (style `%s')\n",
- af_style_names[metrics->root.style_class->style] ));
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( axis->blue_count )
+ FT_TRACE5(( "blue zones (style `%s')\n",
+ af_style_names[metrics->root.style_class->style] ));
+#endif
/* scale the blue zones */
for ( nn = 0; nn < axis->blue_count; nn++ )
@@ -1106,21 +1371,63 @@
#endif
blue->flags |= AF_LATIN_BLUE_ACTIVE;
-
- FT_TRACE5(( " reference %d: %d scaled to %.2f%s\n"
- " overshoot %d: %d scaled to %.2f%s\n",
- nn,
- blue->ref.org,
- blue->ref.fit / 64.0,
- blue->flags & AF_LATIN_BLUE_ACTIVE ? ""
- : " (inactive)",
- nn,
- blue->shoot.org,
- blue->shoot.fit / 64.0,
- blue->flags & AF_LATIN_BLUE_ACTIVE ? ""
- : " (inactive)" ));
}
}
+
+ /* use sub-top blue zone only if it doesn't overlap with */
+ /* another (non-sup-top) blue zone; otherwise, the */
+ /* effect would be similar to a neutral blue zone, which */
+ /* is not desired here */
+ for ( nn = 0; nn < axis->blue_count; nn++ )
+ {
+ AF_LatinBlue blue = &axis->blues[nn];
+ FT_UInt i;
+
+
+ if ( !( blue->flags & AF_LATIN_BLUE_SUB_TOP ) )
+ continue;
+ if ( !( blue->flags & AF_LATIN_BLUE_ACTIVE ) )
+ continue;
+
+ for ( i = 0; i < axis->blue_count; i++ )
+ {
+ AF_LatinBlue b = &axis->blues[i];
+
+
+ if ( b->flags & AF_LATIN_BLUE_SUB_TOP )
+ continue;
+ if ( !( b->flags & AF_LATIN_BLUE_ACTIVE ) )
+ continue;
+
+ if ( b->ref.fit <= blue->shoot.fit &&
+ b->shoot.fit >= blue->ref.fit )
+ {
+ blue->flags &= ~AF_LATIN_BLUE_ACTIVE;
+ break;
+ }
+ }
+ }
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ for ( nn = 0; nn < axis->blue_count; nn++ )
+ {
+ AF_LatinBlue blue = &axis->blues[nn];
+
+
+ FT_TRACE5(( " reference %d: %d scaled to %.2f%s\n"
+ " overshoot %d: %d scaled to %.2f%s\n",
+ nn,
+ blue->ref.org,
+ blue->ref.fit / 64.0,
+ blue->flags & AF_LATIN_BLUE_ACTIVE ? ""
+ : " (inactive)",
+ nn,
+ blue->shoot.org,
+ blue->shoot.fit / 64.0,
+ blue->flags & AF_LATIN_BLUE_ACTIVE ? ""
+ : " (inactive)" ));
+ }
+#endif
}
}
@@ -1140,6 +1447,22 @@
}
+ /* Extract standard_width from writing system/script specific */
+ /* metrics class. */
+
+ FT_LOCAL_DEF( void )
+ af_latin_get_standard_widths( AF_LatinMetrics metrics,
+ FT_Pos* stdHW,
+ FT_Pos* stdVW )
+ {
+ if ( stdHW )
+ *stdHW = metrics->axis[AF_DIMENSION_VERT].standard_width;
+
+ if ( stdVW )
+ *stdVW = metrics->axis[AF_DIMENSION_HORZ].standard_width;
+ }
+
+
/*************************************************************************/
/*************************************************************************/
/***** *****/
@@ -1155,14 +1478,17 @@
af_latin_hints_compute_segments( AF_GlyphHints hints,
AF_Dimension dim )
{
- AF_AxisHints axis = &hints->axis[dim];
- FT_Memory memory = hints->memory;
- FT_Error error = FT_Err_Ok;
- AF_Segment segment = NULL;
- AF_SegmentRec seg0;
- AF_Point* contour = hints->contours;
- AF_Point* contour_limit = contour + hints->num_contours;
- AF_Direction major_dir, segment_dir;
+ AF_LatinMetrics metrics = (AF_LatinMetrics)hints->metrics;
+ AF_AxisHints axis = &hints->axis[dim];
+ FT_Memory memory = hints->memory;
+ FT_Error error = FT_Err_Ok;
+ AF_Segment segment = NULL;
+ AF_SegmentRec seg0;
+ AF_Point* contour = hints->contours;
+ AF_Point* contour_limit = contour + hints->num_contours;
+ AF_Direction major_dir, segment_dir;
+
+ FT_Pos flat_threshold = FLAT_THRESHOLD( metrics->units_per_em );
FT_ZERO( &seg0 );
@@ -1203,16 +1529,35 @@
/* do each contour separately */
for ( ; contour < contour_limit; contour++ )
{
- AF_Point point = contour[0];
- AF_Point last = point->prev;
- int on_edge = 0;
- FT_Pos min_pos = 32000; /* minimum segment pos != min_coord */
- FT_Pos max_pos = -32000; /* maximum segment pos != max_coord */
- FT_Bool passed;
+ AF_Point point = contour[0];
+ AF_Point last = point->prev;
+ int on_edge = 0;
+ /* we call values measured along a segment (point->v) */
+ /* `coordinates', and values orthogonal to it (point->u) */
+ /* `positions' */
+ FT_Pos min_pos = 32000;
+ FT_Pos max_pos = -32000;
+ FT_Pos min_coord = 32000;
+ FT_Pos max_coord = -32000;
+ FT_UShort min_flags = AF_FLAG_NONE;
+ FT_UShort max_flags = AF_FLAG_NONE;
+ FT_Pos min_on_coord = 32000;
+ FT_Pos max_on_coord = -32000;
- if ( point == last ) /* skip singletons -- just in case */
- continue;
+ FT_Bool passed;
+
+ AF_Segment prev_segment = NULL;
+
+ FT_Pos prev_min_pos = min_pos;
+ FT_Pos prev_max_pos = max_pos;
+ FT_Pos prev_min_coord = min_coord;
+ FT_Pos prev_max_coord = max_coord;
+ FT_UShort prev_min_flags = min_flags;
+ FT_UShort prev_max_flags = max_flags;
+ FT_Pos prev_min_on_coord = min_on_coord;
+ FT_Pos prev_max_on_coord = max_on_coord;
+
if ( FT_ABS( last->out_dir ) == major_dir &&
FT_ABS( point->out_dir ) == major_dir )
@@ -1243,40 +1588,187 @@
if ( on_edge )
{
+ /* get minimum and maximum position */
u = point->u;
if ( u < min_pos )
min_pos = u;
if ( u > max_pos )
max_pos = u;
+ /* get minimum and maximum coordinate together with flags */
+ v = point->v;
+ if ( v < min_coord )
+ {
+ min_coord = v;
+ min_flags = point->flags;
+ }
+ if ( v > max_coord )
+ {
+ max_coord = v;
+ max_flags = point->flags;
+ }
+
+ /* get minimum and maximum coordinate of `on' points */
+ if ( !( point->flags & AF_FLAG_CONTROL ) )
+ {
+ v = point->v;
+ if ( v < min_on_coord )
+ min_on_coord = v;
+ if ( v > max_on_coord )
+ max_on_coord = v;
+ }
+
if ( point->out_dir != segment_dir || point == last )
{
- /* we are just leaving an edge; record a new segment! */
- segment->last = point;
- segment->pos = (FT_Short)( ( min_pos + max_pos ) >> 1 );
+ /* check whether the new segment's start point is identical to */
+ /* the previous segment's end point; for example, this might */
+ /* happen for spikes */
- /* a segment is round if either its first or last point */
- /* is a control point */
- if ( ( segment->first->flags | point->flags ) &
- AF_FLAG_CONTROL )
- segment->flags |= AF_EDGE_ROUND;
+ if ( !prev_segment || segment->first != prev_segment->last )
+ {
+ /* points are different: we are just leaving an edge, thus */
+ /* record a new segment */
- /* compute segment size */
- min_pos = max_pos = point->v;
+ segment->last = point;
+ segment->pos = (FT_Short)( ( min_pos + max_pos ) >> 1 );
+ segment->delta = (FT_Short)( ( max_pos - min_pos ) >> 1 );
- v = segment->first->v;
- if ( v < min_pos )
- min_pos = v;
- if ( v > max_pos )
- max_pos = v;
+ /* a segment is round if either its first or last point */
+ /* is a control point, and the length of the on points */
+ /* inbetween doesn't exceed a heuristic limit */
+ if ( ( min_flags | max_flags ) & AF_FLAG_CONTROL &&
+ ( max_on_coord - min_on_coord ) < flat_threshold )
+ segment->flags |= AF_EDGE_ROUND;
- segment->min_coord = (FT_Short)min_pos;
- segment->max_coord = (FT_Short)max_pos;
- segment->height = (FT_Short)( segment->max_coord -
- segment->min_coord );
+ segment->min_coord = (FT_Short)min_coord;
+ segment->max_coord = (FT_Short)max_coord;
+ segment->height = segment->max_coord - segment->min_coord;
+
+ prev_segment = segment;
+ prev_min_pos = min_pos;
+ prev_max_pos = max_pos;
+ prev_min_coord = min_coord;
+ prev_max_coord = max_coord;
+ prev_min_flags = min_flags;
+ prev_max_flags = max_flags;
+ prev_min_on_coord = min_on_coord;
+ prev_max_on_coord = max_on_coord;
+ }
+ else
+ {
+ /* points are the same: we don't create a new segment but */
+ /* merge the current segment with the previous one */
+
+ if ( prev_segment->last->in_dir == point->in_dir )
+ {
+ /* we have identical directions (this can happen for */
+ /* degenerate outlines that move zig-zag along the main */
+ /* axis without changing the coordinate value of the other */
+ /* axis, and where the segments have just been merged): */
+ /* unify segments */
+
+ /* update constraints */
+
+ if ( prev_min_pos < min_pos )
+ min_pos = prev_min_pos;
+ if ( prev_max_pos > max_pos )
+ max_pos = prev_max_pos;
+
+ if ( prev_min_coord < min_coord )
+ {
+ min_coord = prev_min_coord;
+ min_flags = prev_min_flags;
+ }
+ if ( prev_max_coord > max_coord )
+ {
+ max_coord = prev_max_coord;
+ max_flags = prev_max_flags;
+ }
+
+ if ( prev_min_on_coord < min_on_coord )
+ min_on_coord = prev_min_on_coord;
+ if ( prev_max_on_coord > max_on_coord )
+ max_on_coord = prev_max_on_coord;
+
+ prev_segment->last = point;
+ prev_segment->pos = (FT_Short)( ( min_pos +
+ max_pos ) >> 1 );
+ prev_segment->delta = (FT_Short)( ( max_pos -
+ min_pos ) >> 1 );
+
+ if ( ( min_flags | max_flags ) & AF_FLAG_CONTROL &&
+ ( max_on_coord - min_on_coord ) < flat_threshold )
+ prev_segment->flags |= AF_EDGE_ROUND;
+ else
+ prev_segment->flags &= ~AF_EDGE_ROUND;
+
+ prev_segment->min_coord = (FT_Short)min_coord;
+ prev_segment->max_coord = (FT_Short)max_coord;
+ prev_segment->height = prev_segment->max_coord -
+ prev_segment->min_coord;
+ }
+ else
+ {
+ /* we have different directions; use the properties of the */
+ /* longer segment and discard the other one */
+
+ if ( FT_ABS( prev_max_coord - prev_min_coord ) >
+ FT_ABS( max_coord - min_coord ) )
+ {
+ /* discard current segment */
+
+ if ( min_pos < prev_min_pos )
+ prev_min_pos = min_pos;
+ if ( max_pos > prev_max_pos )
+ prev_max_pos = max_pos;
+
+ prev_segment->last = point;
+ prev_segment->pos = (FT_Short)( ( prev_min_pos +
+ prev_max_pos ) >> 1 );
+ prev_segment->delta = (FT_Short)( ( prev_max_pos -
+ prev_min_pos ) >> 1 );
+ }
+ else
+ {
+ /* discard previous segment */
+
+ if ( prev_min_pos < min_pos )
+ min_pos = prev_min_pos;
+ if ( prev_max_pos > max_pos )
+ max_pos = prev_max_pos;
+
+ segment->last = point;
+ segment->pos = (FT_Short)( ( min_pos + max_pos ) >> 1 );
+ segment->delta = (FT_Short)( ( max_pos - min_pos ) >> 1 );
+
+ if ( ( min_flags | max_flags ) & AF_FLAG_CONTROL &&
+ ( max_on_coord - min_on_coord ) < flat_threshold )
+ segment->flags |= AF_EDGE_ROUND;
+
+ segment->min_coord = (FT_Short)min_coord;
+ segment->max_coord = (FT_Short)max_coord;
+ segment->height = segment->max_coord -
+ segment->min_coord;
+
+ *prev_segment = *segment;
+
+ prev_min_pos = min_pos;
+ prev_max_pos = max_pos;
+ prev_min_coord = min_coord;
+ prev_max_coord = max_coord;
+ prev_min_flags = min_flags;
+ prev_max_flags = max_flags;
+ prev_min_on_coord = min_on_coord;
+ prev_max_on_coord = max_on_coord;
+ }
+ }
+
+ axis->num_segments--;
+ }
on_edge = 0;
segment = NULL;
+
/* fall through */
}
}
@@ -1289,7 +1781,12 @@
passed = 1;
}
- if ( !on_edge && FT_ABS( point->out_dir ) == major_dir )
+ /* if we are not on an edge, check whether the major direction */
+ /* coincides with the current point's `out' direction, or */
+ /* whether we have a single-point contour */
+ if ( !on_edge &&
+ ( FT_ABS( point->out_dir ) == major_dir ||
+ point == point->prev ) )
{
/* this is the start of a new segment! */
segment_dir = (AF_Direction)point->out_dir;
@@ -1301,12 +1798,46 @@
/* clear all segment fields */
segment[0] = seg0;
- segment->dir = (FT_Char)segment_dir;
- min_pos = max_pos = point->u;
- segment->first = point;
- segment->last = point;
+ segment->dir = (FT_Char)segment_dir;
+ segment->first = point;
+ segment->last = point;
+
+ /* `af_axis_hints_new_segment' reallocates memory, */
+ /* thus we have to refresh the `prev_segment' pointer */
+ if ( prev_segment )
+ prev_segment = segment - 1;
+
+ min_pos = max_pos = point->u;
+ min_coord = max_coord = point->v;
+ min_flags = max_flags = point->flags;
+
+ if ( point->flags & AF_FLAG_CONTROL )
+ {
+ min_on_coord = 32000;
+ max_on_coord = -32000;
+ }
+ else
+ min_on_coord = max_on_coord = point->v;
on_edge = 1;
+
+ if ( point == point->prev )
+ {
+ /* we have a one-point segment: this is a one-point */
+ /* contour with `in' and `out' direction set to */
+ /* AF_DIR_NONE */
+ segment->pos = (FT_Short)min_pos;
+
+ if (point->flags & AF_FLAG_CONTROL)
+ segment->flags |= AF_EDGE_ROUND;
+
+ segment->min_coord = (FT_Short)point->v;
+ segment->max_coord = (FT_Short)point->v;
+ segment->height = 0;
+
+ on_edge = 0;
+ segment = NULL;
+ }
}
point = point->next;
@@ -1518,6 +2049,16 @@
FT_Memory memory = hints->memory;
AF_LatinAxis laxis = &((AF_LatinMetrics)hints->metrics)->axis[dim];
+#ifdef FT_CONFIG_OPTION_PIC
+ AF_FaceGlobals globals = hints->metrics->globals;
+#endif
+
+ AF_StyleClass style_class = hints->metrics->style_class;
+ AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
+ [style_class->script];
+
+ FT_Bool top_to_bottom_hinting = 0;
+
AF_Segment segments = axis->segments;
AF_Segment segment_limit = segments + axis->num_segments;
AF_Segment seg;
@@ -1528,6 +2069,7 @@
FT_Fixed scale;
FT_Pos edge_distance_threshold;
FT_Pos segment_length_threshold;
+ FT_Pos segment_width_threshold;
axis->num_edges = 0;
@@ -1540,15 +2082,24 @@
: AF_DIR_RIGHT;
#endif
+ if ( dim == AF_DIMENSION_VERT )
+ top_to_bottom_hinting = script_class->top_to_bottom_hinting;
+
/*
* We ignore all segments that are less than 1 pixel in length
* to avoid many problems with serif fonts. We compute the
* corresponding threshold in font units.
*/
if ( dim == AF_DIMENSION_HORZ )
- segment_length_threshold = FT_DivFix( 64, hints->y_scale );
+ segment_length_threshold = FT_DivFix( 64, hints->y_scale );
else
- segment_length_threshold = 0;
+ segment_length_threshold = 0;
+
+ /*
+ * Similarly, we ignore segments that have a width delta
+ * larger than 0.5px (i.e., a width larger than 1px).
+ */
+ segment_width_threshold = FT_DivFix( 32, scale );
/*********************************************************************/
/* */
@@ -1581,7 +2132,11 @@
FT_Int ee;
- if ( seg->height < segment_length_threshold )
+ /* ignore too short segments, too wide ones, and, in this loop, */
+ /* one-point segments without a direction */
+ if ( seg->height < segment_length_threshold ||
+ seg->delta > segment_width_threshold ||
+ seg->dir == AF_DIR_NONE )
continue;
/* A special case for serif edges: If they are smaller than */
@@ -1617,6 +2172,7 @@
/* sort according to the position */
error = af_axis_hints_new_edge( axis, seg->pos,
(AF_Direction)seg->dir,
+ top_to_bottom_hinting,
memory, &edge );
if ( error )
goto Exit;
@@ -1642,6 +2198,44 @@
}
}
+ /* we loop again over all segments to catch one-point segments */
+ /* without a direction: if possible, link them to existing edges */
+ for ( seg = segments; seg < segment_limit; seg++ )
+ {
+ AF_Edge found = NULL;
+ FT_Int ee;
+
+
+ if ( seg->dir != AF_DIR_NONE )
+ continue;
+
+ /* look for an edge corresponding to the segment */
+ for ( ee = 0; ee < axis->num_edges; ee++ )
+ {
+ AF_Edge edge = axis->edges + ee;
+ FT_Pos dist;
+
+
+ dist = seg->pos - edge->fpos;
+ if ( dist < 0 )
+ dist = -dist;
+
+ if ( dist < edge_distance_threshold )
+ {
+ found = edge;
+ break;
+ }
+ }
+
+ /* one-point segments without a match are ignored */
+ if ( found )
+ {
+ seg->edge_next = found->first;
+ found->last->edge_next = seg;
+ found->last = seg;
+ }
+ }
+
/******************************************************************/
/* */
@@ -1719,7 +2313,7 @@
seg->serif->edge &&
seg->serif->edge != edge );
- if ( ( seg->link && seg->link->edge != NULL ) || is_serif )
+ if ( ( seg->link && seg->link->edge ) || is_serif )
{
AF_Edge edge2;
AF_Segment seg2;
@@ -1872,7 +2466,8 @@
/* the major direction) -- this assumes the TrueType convention */
/* for the orientation of contours */
is_top_blue =
- (FT_Byte)( ( blue->flags & AF_LATIN_BLUE_TOP ) != 0 );
+ (FT_Byte)( ( blue->flags & ( AF_LATIN_BLUE_TOP |
+ AF_LATIN_BLUE_SUB_TOP ) ) != 0 );
is_neutral_blue =
(FT_Byte)( ( blue->flags & AF_LATIN_BLUE_NEUTRAL ) != 0);
is_major_dir =
@@ -1985,23 +2580,23 @@
other_flags |= AF_LATIN_HINTS_VERT_SNAP;
/*
- * We adjust stems to full pixels only if we don't use the `light' mode.
+ * We adjust stems to full pixels unless in `light' or `lcd' mode.
*/
- if ( mode != FT_RENDER_MODE_LIGHT )
+ if ( mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD )
other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
if ( mode == FT_RENDER_MODE_MONO )
other_flags |= AF_LATIN_HINTS_MONO;
/*
- * In `light' hinting mode we disable horizontal hinting completely.
+ * In `light' or `lcd' mode we disable horizontal hinting completely.
* We also do it if the face is italic.
*
* However, if warping is enabled (which only works in `light' hinting
* mode), advance widths get adjusted, too.
*/
- if ( mode == FT_RENDER_MODE_LIGHT ||
- ( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
+ if ( mode == FT_RENDER_MODE_LIGHT || mode == FT_RENDER_MODE_LCD ||
+ ( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
#ifdef AF_CONFIG_OPTION_USE_WARPER
@@ -2081,6 +2676,7 @@
af_latin_compute_stem_width( AF_GlyphHints hints,
AF_Dimension dim,
FT_Pos width,
+ FT_Pos base_delta,
FT_UInt base_flags,
FT_UInt stem_flags )
{
@@ -2158,7 +2754,39 @@
dist += delta;
}
else
- dist = ( dist + 32 ) & ~63;
+ {
+ /* A stem's end position depends on two values: the start */
+ /* position and the stem length. The former gets usually */
+ /* rounded to the grid, while the latter gets rounded also if it */
+ /* exceeds a certain length (see below in this function). This */
+ /* `double rounding' can lead to a great difference to the */
+ /* original, unhinted position; this normally doesn't matter for */
+ /* large PPEM values, but for small sizes it can easily make */
+ /* outlines collide. For this reason, we adjust the stem length */
+ /* by a small amount depending on the PPEM value in case the */
+ /* former and latter rounding both point into the same */
+ /* direction. */
+
+ FT_Pos bdelta = 0;
+
+
+ if ( ( ( width > 0 ) && ( base_delta > 0 ) ) ||
+ ( ( width < 0 ) && ( base_delta < 0 ) ) )
+ {
+ FT_UInt ppem = metrics->root.scaler.face->size->metrics.x_ppem;
+
+
+ if ( ppem < 10 )
+ bdelta = base_delta;
+ else if ( ppem < 30 )
+ bdelta = ( base_delta * (FT_Pos)( 30 - ppem ) ) / 20;
+
+ if ( bdelta < 0 )
+ bdelta = -bdelta;
+ }
+
+ dist = ( dist - bdelta + 32 ) & ~63;
+ }
}
}
else
@@ -2247,11 +2875,17 @@
AF_Edge base_edge,
AF_Edge stem_edge )
{
- FT_Pos dist = stem_edge->opos - base_edge->opos;
+ FT_Pos dist, base_delta;
+ FT_Pos fitted_width;
- FT_Pos fitted_width = af_latin_compute_stem_width( hints, dim, dist,
- base_edge->flags,
- stem_edge->flags );
+
+ dist = stem_edge->opos - base_edge->opos;
+ base_delta = base_edge->pos - base_edge->opos;
+
+ fitted_width = af_latin_compute_stem_width( hints, dim,
+ dist, base_delta,
+ base_edge->flags,
+ stem_edge->flags );
stem_edge->pos = base_edge->pos + fitted_width;
@@ -2302,8 +2936,18 @@
AF_Edge anchor = NULL;
FT_Int has_serifs = 0;
+#ifdef FT_CONFIG_OPTION_PIC
+ AF_FaceGlobals globals = hints->metrics->globals;
+#endif
+
+ AF_StyleClass style_class = hints->metrics->style_class;
+ AF_ScriptClass script_class = AF_SCRIPT_CLASSES_GET
+ [style_class->script];
+
+ FT_Bool top_to_bottom_hinting = 0;
+
#ifdef FT_DEBUG_LEVEL_TRACE
- FT_UInt num_actions = 0;
+ FT_UInt num_actions = 0;
#endif
@@ -2311,6 +2955,9 @@
dim == AF_DIMENSION_VERT ? "horizontal" : "vertical",
af_style_names[hints->metrics->style_class->style] ));
+ if ( dim == AF_DIMENSION_VERT )
+ top_to_bottom_hinting = script_class->top_to_bottom_hinting;
+
/* we begin by aligning all stems relative to the blue zone */
/* if needed -- that's only for horizontal edges */
@@ -2446,7 +3093,8 @@
org_len = edge2->opos - edge->opos;
- cur_len = af_latin_compute_stem_width( hints, dim, org_len,
+ cur_len = af_latin_compute_stem_width( hints, dim,
+ org_len, 0,
edge->flags,
edge2->flags );
@@ -2515,7 +3163,8 @@
org_len = edge2->opos - edge->opos;
org_center = org_pos + ( org_len >> 1 );
- cur_len = af_latin_compute_stem_width( hints, dim, org_len,
+ cur_len = af_latin_compute_stem_width( hints, dim,
+ org_len, 0,
edge->flags,
edge2->flags );
@@ -2575,7 +3224,8 @@
org_len = edge2->opos - edge->opos;
org_center = org_pos + ( org_len >> 1 );
- cur_len = af_latin_compute_stem_width( hints, dim, org_len,
+ cur_len = af_latin_compute_stem_width( hints, dim,
+ org_len, 0,
edge->flags,
edge2->flags );
@@ -2606,16 +3256,25 @@
edge->flags |= AF_EDGE_DONE;
edge2->flags |= AF_EDGE_DONE;
- if ( edge > edges && edge->pos < edge[-1].pos )
+ if ( edge > edges &&
+ ( top_to_bottom_hinting ? ( edge->pos > edge[-1].pos )
+ : ( edge->pos < edge[-1].pos ) ) )
{
+ /* don't move if stem would (almost) disappear otherwise; */
+ /* the ad-hoc value 16 corresponds to 1/4px */
+ if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 )
+ {
#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
- edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
+ FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
+ edge - edges,
+ edge->pos / 64.0,
+ edge[-1].pos / 64.0 ));
- num_actions++;
+ num_actions++;
#endif
- edge->pos = edge[-1].pos;
+ edge->pos = edge[-1].pos;
+ }
}
}
}
@@ -2767,29 +3426,46 @@
#endif
edge->flags |= AF_EDGE_DONE;
- if ( edge > edges && edge->pos < edge[-1].pos )
+ if ( edge > edges &&
+ ( top_to_bottom_hinting ? ( edge->pos > edge[-1].pos )
+ : ( edge->pos < edge[-1].pos ) ) )
{
+ /* don't move if stem would (almost) disappear otherwise; */
+ /* the ad-hoc value 16 corresponds to 1/4px */
+ if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 )
+ {
#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
- edge - edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
+ FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
+ edge - edges,
+ edge->pos / 64.0,
+ edge[-1].pos / 64.0 ));
- num_actions++;
+ num_actions++;
#endif
- edge->pos = edge[-1].pos;
+ edge->pos = edge[-1].pos;
+ }
}
- if ( edge + 1 < edge_limit &&
- edge[1].flags & AF_EDGE_DONE &&
- edge->pos > edge[1].pos )
+ if ( edge + 1 < edge_limit &&
+ edge[1].flags & AF_EDGE_DONE &&
+ ( top_to_bottom_hinting ? ( edge->pos < edge[1].pos )
+ : ( edge->pos > edge[1].pos ) ) )
{
+ /* don't move if stem would (almost) disappear otherwise; */
+ /* the ad-hoc value 16 corresponds to 1/4px */
+ if ( edge->link && FT_ABS( edge->link->pos - edge[-1].pos ) > 16 )
+ {
#ifdef FT_DEBUG_LEVEL_TRACE
- FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
- edge - edges, edge->pos / 64.0, edge[1].pos / 64.0 ));
+ FT_TRACE5(( " BOUND: edge %d (pos=%.2f) moved to %.2f\n",
+ edge - edges,
+ edge->pos / 64.0,
+ edge[1].pos / 64.0 ));
- num_actions++;
+ num_actions++;
#endif
- edge->pos = edge[1].pos;
+ edge->pos = edge[1].pos;
+ }
}
}
}
@@ -2805,7 +3481,8 @@
/* Apply the complete hinting algorithm to a latin glyph. */
static FT_Error
- af_latin_hints_apply( AF_GlyphHints hints,
+ af_latin_hints_apply( FT_UInt glyph_index,
+ AF_GlyphHints hints,
FT_Outline* outline,
AF_LatinMetrics metrics )
{
@@ -2820,13 +3497,7 @@
goto Exit;
/* analyze glyph outline */
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
- AF_HINTS_DO_WARP( hints ) ) ||
- AF_HINTS_DO_HORIZONTAL( hints ) )
-#else
if ( AF_HINTS_DO_HORIZONTAL( hints ) )
-#endif
{
axis = &metrics->axis[AF_DIMENSION_HORZ];
error = af_latin_hints_detect_features( hints,
@@ -2847,16 +3518,18 @@
if ( error )
goto Exit;
- af_latin_hints_compute_blue_edges( hints, metrics );
+ /* apply blue zones to base characters only */
+ if ( !( metrics->root.globals->glyph_styles[glyph_index] & AF_NONBASE ) )
+ af_latin_hints_compute_blue_edges( hints, metrics );
}
/* grid-fit the outline */
for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
{
#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
- AF_HINTS_DO_WARP( hints ) )
+ if ( dim == AF_DIMENSION_HORZ &&
+ metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL &&
+ AF_HINTS_DO_WARP( hints ) )
{
AF_WarperRec warper;
FT_Fixed scale;
@@ -2904,12 +3577,13 @@
sizeof ( AF_LatinMetricsRec ),
- (AF_WritingSystem_InitMetricsFunc) af_latin_metrics_init,
- (AF_WritingSystem_ScaleMetricsFunc)af_latin_metrics_scale,
- (AF_WritingSystem_DoneMetricsFunc) NULL,
+ (AF_WritingSystem_InitMetricsFunc) af_latin_metrics_init, /* style_metrics_init */
+ (AF_WritingSystem_ScaleMetricsFunc)af_latin_metrics_scale, /* style_metrics_scale */
+ (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
+ (AF_WritingSystem_GetStdWidthsFunc)af_latin_get_standard_widths, /* style_metrics_getstdw */
- (AF_WritingSystem_InitHintsFunc) af_latin_hints_init,
- (AF_WritingSystem_ApplyHintsFunc) af_latin_hints_apply
+ (AF_WritingSystem_InitHintsFunc) af_latin_hints_init, /* style_hints_init */
+ (AF_WritingSystem_ApplyHintsFunc) af_latin_hints_apply /* style_hints_apply */
)
diff --git a/src/autofit/aflatin.h b/src/autofit/aflatin.h
index 6855492..432cccc 100644
--- a/src/autofit/aflatin.h
+++ b/src/autofit/aflatin.h
@@ -5,7 +5,7 @@
/* Auto-fitter hinting routines for latin writing system */
/* (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __AFLATIN_H__
-#define __AFLATIN_H__
+#ifndef AFLATIN_H_
+#define AFLATIN_H_
#include "afhints.h"
@@ -53,6 +53,8 @@
#define AF_LATIN_IS_TOP_BLUE( b ) \
( (b)->properties & AF_BLUE_PROPERTY_LATIN_TOP )
+#define AF_LATIN_IS_SUB_TOP_BLUE( b ) \
+ ( (b)->properties & AF_BLUE_PROPERTY_LATIN_SUB_TOP )
#define AF_LATIN_IS_NEUTRAL_BLUE( b ) \
( (b)->properties & AF_BLUE_PROPERTY_LATIN_NEUTRAL )
#define AF_LATIN_IS_X_HEIGHT_BLUE( b ) \
@@ -65,8 +67,10 @@
#define AF_LATIN_BLUE_ACTIVE ( 1U << 0 ) /* zone height is <= 3/4px */
#define AF_LATIN_BLUE_TOP ( 1U << 1 ) /* we have a top blue zone */
-#define AF_LATIN_BLUE_NEUTRAL ( 1U << 2 ) /* we have neutral blue zone */
-#define AF_LATIN_BLUE_ADJUSTMENT ( 1U << 3 ) /* used for scale adjustment */
+#define AF_LATIN_BLUE_SUB_TOP ( 1U << 2 ) /* we have a subscript top */
+ /* blue zone */
+#define AF_LATIN_BLUE_NEUTRAL ( 1U << 3 ) /* we have neutral blue zone */
+#define AF_LATIN_BLUE_ADJUSTMENT ( 1U << 4 ) /* used for scale adjustment */
/* optimization */
@@ -74,6 +78,8 @@
{
AF_WidthRec ref;
AF_WidthRec shoot;
+ FT_Pos ascender;
+ FT_Pos descender;
FT_UInt flags;
} AF_LatinBlueRec, *AF_LatinBlue;
@@ -182,7 +188,7 @@
FT_END_HEADER
-#endif /* __AFLATIN_H__ */
+#endif /* AFLATIN_H_ */
/* END */
diff --git a/src/autofit/aflatin2.c b/src/autofit/aflatin2.c
index ac9f933..5c71378 100644
--- a/src/autofit/aflatin2.c
+++ b/src/autofit/aflatin2.c
@@ -1,10 +1,15 @@
+/* ATTENTION: This file doesn't compile. It is only here as a reference */
+/* of an alternative latin hinting algorithm that was always */
+/* marked as experimental. */
+
+
/***************************************************************************/
/* */
/* aflatin2.c */
/* */
/* Auto-fitter hinting routines for latin writing system (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,6 +23,9 @@
#include FT_ADVANCES_H
+
+#ifdef FT_OPTION_AUTOFIT2
+
#include "afglobal.h"
#include "aflatin.h"
#include "aflatin2.h"
@@ -693,6 +701,22 @@
}
+ /* Extract standard_width from writing system/script specific */
+ /* metrics class. */
+
+ FT_LOCAL_DEF( void )
+ af_latin2_get_standard_widths( AF_LatinMetrics metrics,
+ FT_Pos* stdHW,
+ FT_Pos* stdVW )
+ {
+ if ( stdHW )
+ *stdHW = metrics->axis[AF_DIMENSION_VERT].standard_width;
+
+ if ( stdVW )
+ *stdVW = metrics->axis[AF_DIMENSION_HORZ].standard_width;
+ }
+
+
/*************************************************************************/
/*************************************************************************/
/***** *****/
@@ -1179,7 +1203,7 @@
/* insert a new edge in the list and */
/* sort according to the position */
- error = af_axis_hints_new_edge( axis, seg->pos, seg->dir,
+ error = af_axis_hints_new_edge( axis, seg->pos, seg->dir, 0,
memory, &edge );
if ( error )
goto Exit;
@@ -1282,7 +1306,7 @@
seg->serif->edge &&
seg->serif->edge != edge );
- if ( ( seg->link && seg->link->edge != NULL ) || is_serif )
+ if ( ( seg->link && seg->link->edge ) || is_serif )
{
AF_Edge edge2;
AF_Segment seg2;
@@ -1534,20 +1558,20 @@
other_flags |= AF_LATIN_HINTS_VERT_SNAP;
/*
- * We adjust stems to full pixels only if we don't use the `light' mode.
+ * We adjust stems to full pixels unless in `light' or `lcd' mode.
*/
- if ( mode != FT_RENDER_MODE_LIGHT )
+ if ( mode != FT_RENDER_MODE_LIGHT && mode != FT_RENDER_MODE_LCD )
other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
if ( mode == FT_RENDER_MODE_MONO )
other_flags |= AF_LATIN_HINTS_MONO;
/*
- * In `light' hinting mode we disable horizontal hinting completely.
+ * In `light' or `lcd' mode we disable horizontal hinting completely.
* We also do it if the face is italic.
*/
- if ( mode == FT_RENDER_MODE_LIGHT ||
- ( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
+ if ( mode == FT_RENDER_MODE_LIGHT || mode == FT_RENDER_MODE_LCD ||
+ ( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
#ifdef AF_CONFIG_OPTION_USE_WARPER
@@ -2300,26 +2324,23 @@
static FT_Error
- af_latin2_hints_apply( AF_GlyphHints hints,
+ af_latin2_hints_apply( FT_UInt glyph_index,
+ AF_GlyphHints hints,
FT_Outline* outline,
AF_LatinMetrics metrics )
{
FT_Error error;
int dim;
+ FT_UNUSED( glyph_index );
+
error = af_glyph_hints_reload( hints, outline );
if ( error )
goto Exit;
/* analyze glyph outline */
-#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
- AF_HINTS_DO_WARP( hints ) ) ||
- AF_HINTS_DO_HORIZONTAL( hints ) )
-#else
if ( AF_HINTS_DO_HORIZONTAL( hints ) )
-#endif
{
error = af_latin2_hints_detect_features( hints, AF_DIMENSION_HORZ );
if ( error )
@@ -2339,9 +2360,9 @@
for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
{
#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
- AF_HINTS_DO_WARP( hints ) )
+ if ( dim == AF_DIMENSION_HORZ &&
+ metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL &&
+ AF_HINTS_DO_WARP( hints ) )
{
AF_WarperRec warper;
FT_Fixed scale;
@@ -2386,13 +2407,21 @@
sizeof ( AF_LatinMetricsRec ),
- (AF_WritingSystem_InitMetricsFunc) af_latin2_metrics_init,
- (AF_WritingSystem_ScaleMetricsFunc)af_latin2_metrics_scale,
- (AF_WritingSystem_DoneMetricsFunc) NULL,
+ (AF_WritingSystem_InitMetricsFunc) af_latin2_metrics_init, /* style_metrics_init */
+ (AF_WritingSystem_ScaleMetricsFunc)af_latin2_metrics_scale, /* style_metrics_scale */
+ (AF_WritingSystem_DoneMetricsFunc) NULL, /* style_metrics_done */
+ (AF_WritingSystem_GetStdWidthsFunc)af_latin2_get_standard_widths, /* style_metrics_getstdw */
- (AF_WritingSystem_InitHintsFunc) af_latin2_hints_init,
- (AF_WritingSystem_ApplyHintsFunc) af_latin2_hints_apply
+ (AF_WritingSystem_InitHintsFunc) af_latin2_hints_init, /* style_hints_init */
+ (AF_WritingSystem_ApplyHintsFunc) af_latin2_hints_apply /* style_hints_apply */
)
+#else /* !FT_OPTION_AUTOFIT2 */
+
+ /* ANSI C doesn't like empty source files */
+ typedef int _af_latin2_dummy;
+
+#endif /* !FT_OPTION_AUTOFIT2 */
+
/* END */
diff --git a/src/autofit/aflatin2.h b/src/autofit/aflatin2.h
index 9326753..0129dc7 100644
--- a/src/autofit/aflatin2.h
+++ b/src/autofit/aflatin2.h
@@ -1,3 +1,8 @@
+/* ATTENTION: This file doesn't compile. It is only here as a reference */
+/* of an alternative latin hinting algorithm that was always */
+/* marked as experimental. */
+
+
/***************************************************************************/
/* */
/* aflatin2.h */
@@ -5,7 +10,7 @@
/* Auto-fitter hinting routines for latin writing system */
/* (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +22,8 @@
/***************************************************************************/
-#ifndef __AFLATIN2_H__
-#define __AFLATIN2_H__
+#ifndef AFLATIN2_H_
+#define AFLATIN2_H_
#include "afhints.h"
@@ -35,7 +40,7 @@
FT_END_HEADER
-#endif /* __AFLATIN_H__ */
+#endif /* AFLATIN_H_ */
/* END */
diff --git a/src/autofit/afloader.c b/src/autofit/afloader.c
index 7c2fa7c..a55550b 100644
--- a/src/autofit/afloader.c
+++ b/src/autofit/afloader.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter glyph loading routines (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,6 +23,8 @@
#include "afmodule.h"
#include "afpic.h"
+#include FT_INTERNAL_CALC_H
+
/* Initialize glyph loader. */
@@ -49,7 +51,7 @@
loader->face = face;
loader->globals = (AF_FaceGlobals)face->autohint.data;
- if ( loader->globals == NULL )
+ if ( !loader->globals )
{
error = af_face_globals_new( face, &loader->globals, module );
if ( !error )
@@ -76,41 +78,324 @@
}
- /* Do the main work of `af_loader_load_glyph'. Note that we never */
- /* have to deal with composite glyphs as those get loaded into */
- /* FT_GLYPH_FORMAT_OUTLINE by the recursed `FT_Load_Glyph' function. */
- /* In the rare cases where FT_LOAD_NO_RECURSE is set, it implies */
- /* FT_LOAD_NO_SCALE and as such the auto-hinter is never called. */
+#define af_intToFixed( i ) \
+ ( (FT_Fixed)( (FT_UInt32)(i) << 16 ) )
+#define af_fixedToInt( x ) \
+ ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) )
+#define af_floatToFixed( f ) \
+ ( (FT_Fixed)( (f) * 65536.0 + 0.5 ) )
+
static FT_Error
- af_loader_load_g( AF_Loader loader,
- AF_Scaler scaler,
- FT_UInt glyph_index,
- FT_Int32 load_flags )
+ af_loader_embolden_glyph_in_slot( AF_Loader loader,
+ FT_Face face,
+ AF_StyleMetrics style_metrics )
{
- FT_Error error;
- FT_Face face = loader->face;
- AF_StyleMetrics metrics = loader->metrics;
- AF_GlyphHints hints = loader->hints;
- FT_GlyphSlot slot = face->glyph;
- FT_Slot_Internal internal = slot->internal;
- FT_GlyphLoader gloader = internal->loader;
- FT_Int32 flags;
+ FT_Error error = FT_Err_Ok;
+
+ FT_GlyphSlot slot = face->glyph;
+ AF_FaceGlobals globals = loader->globals;
+ AF_WritingSystemClass writing_system_class;
+
+ FT_Size_Metrics* size_metrics = &face->size->internal->autohint_metrics;
+
+ FT_Pos stdVW = 0;
+ FT_Pos stdHW = 0;
+
+ FT_Bool size_changed = size_metrics->x_ppem !=
+ globals->stem_darkening_for_ppem;
+
+ FT_Fixed em_size = af_intToFixed( face->units_per_EM );
+ FT_Fixed em_ratio = FT_DivFix( af_intToFixed( 1000 ), em_size );
+
+ FT_Matrix scale_down_matrix = { 0x10000L, 0, 0, 0x10000L };
- flags = load_flags | FT_LOAD_LINEAR_DESIGN;
- error = FT_Load_Glyph( face, glyph_index, flags );
+ /* Skip stem darkening for broken fonts. */
+ if ( !face->units_per_EM )
+ {
+ error = FT_ERR( Corrupted_Font_Header );
+ goto Exit;
+ }
+
+ /*
+ * We depend on the writing system (script analyzers) to supply
+ * standard widths for the script of the glyph we are looking at. If
+ * it can't deliver, stem darkening is disabled.
+ */
+ writing_system_class =
+ AF_WRITING_SYSTEM_CLASSES_GET[style_metrics->style_class->writing_system];
+
+ if ( writing_system_class->style_metrics_getstdw )
+ writing_system_class->style_metrics_getstdw( style_metrics,
+ &stdHW,
+ &stdVW );
+ else
+ {
+ error = FT_ERR( Unimplemented_Feature );
+ goto Exit;
+ }
+
+ if ( size_changed ||
+ ( stdVW > 0 && stdVW != globals->standard_vertical_width ) )
+ {
+ FT_Fixed darken_by_font_units_x, darken_x;
+
+
+ darken_by_font_units_x =
+ af_intToFixed( af_loader_compute_darkening( loader,
+ face,
+ stdVW ) );
+ darken_x = FT_DivFix( FT_MulFix( darken_by_font_units_x,
+ size_metrics->x_scale ),
+ em_ratio );
+
+ globals->standard_vertical_width = stdVW;
+ globals->stem_darkening_for_ppem = size_metrics->x_ppem;
+ globals->darken_x = af_fixedToInt( darken_x );
+ }
+
+ if ( size_changed ||
+ ( stdHW > 0 && stdHW != globals->standard_horizontal_width ) )
+ {
+ FT_Fixed darken_by_font_units_y, darken_y;
+
+
+ darken_by_font_units_y =
+ af_intToFixed( af_loader_compute_darkening( loader,
+ face,
+ stdHW ) );
+ darken_y = FT_DivFix( FT_MulFix( darken_by_font_units_y,
+ size_metrics->y_scale ),
+ em_ratio );
+
+ globals->standard_horizontal_width = stdHW;
+ globals->stem_darkening_for_ppem = size_metrics->x_ppem;
+ globals->darken_y = af_fixedToInt( darken_y );
+
+ /*
+ * Scale outlines down on the Y-axis to keep them inside their blue
+ * zones. The stronger the emboldening, the stronger the downscaling
+ * (plus heuristical padding to prevent outlines still falling out
+ * their zones due to rounding).
+ *
+ * Reason: `FT_Outline_Embolden' works by shifting the rightmost
+ * points of stems farther to the right, and topmost points farther
+ * up. This positions points on the Y-axis outside their
+ * pre-computed blue zones and leads to distortion when applying the
+ * hints in the code further below. Code outside this emboldening
+ * block doesn't know we are presenting it with modified outlines the
+ * analyzer didn't see!
+ *
+ * An unfortunate side effect of downscaling is that the emboldening
+ * effect is slightly decreased. The loss becomes more pronounced
+ * versus the CFF driver at smaller sizes, e.g., at 9ppem and below.
+ */
+ globals->scale_down_factor =
+ FT_DivFix( em_size - ( darken_by_font_units_y + af_intToFixed( 8 ) ),
+ em_size );
+ }
+
+ FT_Outline_EmboldenXY( &slot->outline,
+ globals->darken_x,
+ globals->darken_y );
+
+ scale_down_matrix.yy = globals->scale_down_factor;
+ FT_Outline_Transform( &slot->outline, &scale_down_matrix );
+
+ Exit:
+ return error;
+ }
+
+
+ /* Load the glyph at index into the current slot of a face and hint it. */
+
+ FT_LOCAL_DEF( FT_Error )
+ af_loader_load_glyph( AF_Loader loader,
+ AF_Module module,
+ FT_Face face,
+ FT_UInt glyph_index,
+ FT_Int32 load_flags )
+ {
+ FT_Error error;
+
+ FT_Size size = face->size;
+ FT_Size_Internal size_internal = size->internal;
+ FT_GlyphSlot slot = face->glyph;
+ FT_Slot_Internal slot_internal = slot->internal;
+ FT_GlyphLoader gloader = slot_internal->loader;
+
+ AF_GlyphHints hints = loader->hints;
+ AF_ScalerRec scaler;
+ AF_StyleMetrics style_metrics;
+ FT_UInt style_options = AF_STYLE_NONE_DFLT;
+ AF_StyleClass style_class;
+ AF_WritingSystemClass writing_system_class;
+
+#ifdef FT_CONFIG_OPTION_PIC
+ AF_FaceGlobals globals = loader->globals;
+#endif
+
+
+ if ( !size )
+ return FT_THROW( Invalid_Size_Handle );
+
+ FT_ZERO( &scaler );
+
+ if ( !size_internal->autohint_metrics.x_scale ||
+ size_internal->autohint_mode != FT_LOAD_TARGET_MODE( load_flags ) )
+ {
+ /* switching between hinting modes usually means different scaling */
+ /* values; this later on enforces recomputation of everything */
+ /* related to the current size */
+
+ size_internal->autohint_mode = FT_LOAD_TARGET_MODE( load_flags );
+ size_internal->autohint_metrics = size->metrics;
+
+#ifdef AF_CONFIG_OPTION_TT_SIZE_METRICS
+ {
+ FT_Size_Metrics* size_metrics = &size_internal->autohint_metrics;
+
+
+ /* set metrics to integer values and adjust scaling accordingly; */
+ /* this is the same setup as with TrueType fonts, cf. function */
+ /* `tt_size_reset' in file `ttobjs.c' */
+ size_metrics->ascender = FT_PIX_ROUND(
+ FT_MulFix( face->ascender,
+ size_metrics->y_scale ) );
+ size_metrics->descender = FT_PIX_ROUND(
+ FT_MulFix( face->descender,
+ size_metrics->y_scale ) );
+ size_metrics->height = FT_PIX_ROUND(
+ FT_MulFix( face->height,
+ size_metrics->y_scale ) );
+
+ size_metrics->x_scale = FT_DivFix( size_metrics->x_ppem << 6,
+ face->units_per_EM );
+ size_metrics->y_scale = FT_DivFix( size_metrics->y_ppem << 6,
+ face->units_per_EM );
+ size_metrics->max_advance = FT_PIX_ROUND(
+ FT_MulFix( face->max_advance_width,
+ size_metrics->x_scale ) );
+ }
+#endif /* AF_CONFIG_OPTION_TT_SIZE_METRICS */
+ }
+
+ /*
+ * TODO: This code currently doesn't support fractional advance widths,
+ * i.e., placing hinted glyphs at anything other than integer
+ * x-positions. This is only relevant for the warper code, which
+ * scales and shifts glyphs to optimize blackness of stems (hinting on
+ * the x-axis by nature places things on pixel integers, hinting on the
+ * y-axis only, i.e., LIGHT mode, doesn't touch the x-axis). The delta
+ * values of the scaler would need to be adjusted.
+ */
+ scaler.face = face;
+ scaler.x_scale = size_internal->autohint_metrics.x_scale;
+ scaler.x_delta = 0;
+ scaler.y_scale = size_internal->autohint_metrics.y_scale;
+ scaler.y_delta = 0;
+
+ scaler.render_mode = FT_LOAD_TARGET_MODE( load_flags );
+ scaler.flags = 0;
+
+ /* note that the fallback style can't be changed anymore */
+ /* after the first call of `af_loader_load_glyph' */
+ error = af_loader_reset( loader, module, face );
if ( error )
goto Exit;
- loader->transformed = internal->glyph_transformed;
+#ifdef FT_OPTION_AUTOFIT2
+ /* XXX: undocumented hook to activate the latin2 writing system. */
+ if ( load_flags & ( 1UL << 20 ) )
+ style_options = AF_STYLE_LTN2_DFLT;
+#endif
+
+ /*
+ * Glyphs (really code points) are assigned to scripts. Script
+ * analysis is done lazily: For each glyph that passes through here,
+ * the corresponding script analyzer is called, but returns immediately
+ * if it has been run already.
+ */
+ error = af_face_globals_get_metrics( loader->globals, glyph_index,
+ style_options, &style_metrics );
+ if ( error )
+ goto Exit;
+
+ style_class = style_metrics->style_class;
+ writing_system_class =
+ AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system];
+
+ loader->metrics = style_metrics;
+
+ if ( writing_system_class->style_metrics_scale )
+ writing_system_class->style_metrics_scale( style_metrics, &scaler );
+ else
+ style_metrics->scaler = scaler;
+
+ if ( writing_system_class->style_hints_init )
+ {
+ error = writing_system_class->style_hints_init( hints,
+ style_metrics );
+ if ( error )
+ goto Exit;
+ }
+
+ /*
+ * Do the main work of `af_loader_load_glyph'. Note that we never have
+ * to deal with composite glyphs as those get loaded into
+ * FT_GLYPH_FORMAT_OUTLINE by the recursed `FT_Load_Glyph' function.
+ * In the rare cases where FT_LOAD_NO_RECURSE is set, it implies
+ * FT_LOAD_NO_SCALE and as such the auto-hinter is never called.
+ */
+ load_flags |= FT_LOAD_NO_SCALE |
+ FT_LOAD_IGNORE_TRANSFORM |
+ FT_LOAD_LINEAR_DESIGN;
+ load_flags &= ~FT_LOAD_RENDER;
+
+ error = FT_Load_Glyph( face, glyph_index, load_flags );
+ if ( error )
+ goto Exit;
+
+ /*
+ * Apply stem darkening (emboldening) here before hints are applied to
+ * the outline. Glyphs are scaled down proportionally to the
+ * emboldening so that curve points don't fall outside their
+ * precomputed blue zones.
+ *
+ * Any emboldening done by the font driver (e.g., the CFF driver)
+ * doesn't reach here because the autohinter loads the unprocessed
+ * glyphs in font units for analysis (functions `af_*_metrics_init_*')
+ * and then above to prepare it for the rasterizers by itself,
+ * independently of the font driver. So emboldening must be done here,
+ * within the autohinter.
+ *
+ * All glyphs to be autohinted pass through here one by one. The
+ * standard widths can therefore change from one glyph to the next,
+ * depending on what script a glyph is assigned to (each script has its
+ * own set of standard widths and other metrics). The darkening amount
+ * must therefore be recomputed for each size and
+ * `standard_{vertical,horizontal}_width' change.
+ *
+ * Ignore errors and carry on without emboldening.
+ *
+ */
+
+ /* stem darkening only works well in `light' mode */
+ if ( scaler.render_mode == FT_RENDER_MODE_LIGHT &&
+ ( !face->internal->no_stem_darkening ||
+ ( face->internal->no_stem_darkening < 0 &&
+ !module->no_stem_darkening ) ) )
+ af_loader_embolden_glyph_in_slot( loader, face, style_metrics );
+
+ loader->transformed = slot_internal->glyph_transformed;
if ( loader->transformed )
{
FT_Matrix inverse;
- loader->trans_matrix = internal->glyph_matrix;
- loader->trans_delta = internal->glyph_delta;
+ loader->trans_matrix = slot_internal->glyph_matrix;
+ loader->trans_delta = slot_internal->glyph_delta;
inverse = loader->trans_matrix;
if ( !FT_Matrix_Invert( &inverse ) )
@@ -126,8 +411,8 @@
loader->trans_delta.x,
loader->trans_delta.y );
- /* compute original horizontal phantom points (and ignore */
- /* vertical ones) */
+ /* compute original horizontal phantom points */
+ /* (and ignore vertical ones) */
loader->pp1.x = hints->x_delta;
loader->pp1.y = hints->y_delta;
loader->pp2.x = FT_MulFix( slot->metrics.horiAdvance,
@@ -138,29 +423,21 @@
if ( slot->outline.n_points == 0 )
goto Hint_Metrics;
- /* now load the slot image into the auto-outline and run the */
- /* automatic hinting process */
- {
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = loader->globals;
-#endif
- AF_StyleClass style_class = metrics->style_class;
- AF_WritingSystemClass writing_system_class =
- AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system];
-
-
- if ( writing_system_class->style_hints_apply )
- writing_system_class->style_hints_apply( hints,
- &gloader->base.outline,
- metrics );
- }
+ /* now load the slot image into the auto-outline */
+ /* and run the automatic hinting process */
+ if ( writing_system_class->style_hints_apply )
+ writing_system_class->style_hints_apply( glyph_index,
+ hints,
+ &gloader->base.outline,
+ style_metrics );
/* we now need to adjust the metrics according to the change in */
/* width/positioning that occurred during the hinting process */
- if ( scaler->render_mode != FT_RENDER_MODE_LIGHT )
+ if ( scaler.render_mode != FT_RENDER_MODE_LIGHT )
{
- FT_Pos old_rsb, old_lsb, new_lsb;
- FT_Pos pp1x_uh, pp2x_uh;
+ FT_Pos old_rsb, old_lsb, new_lsb;
+ FT_Pos pp1x_uh, pp2x_uh;
+
AF_AxisHints axis = &hints->axis[AF_DIMENSION_HORZ];
AF_Edge edge1 = axis->edges; /* leftmost edge */
AF_Edge edge2 = edge1 +
@@ -170,12 +447,12 @@
if ( axis->num_edges > 1 && AF_HINTS_DO_ADVANCE( hints ) )
{
old_rsb = loader->pp2.x - edge2->opos;
- old_lsb = edge1->opos;
+ /* loader->pp1.x is always zero at this point of time */
+ old_lsb = edge1->opos /* - loader->pp1.x */;
new_lsb = edge1->pos;
/* remember unhinted values to later account */
/* for rounding errors */
-
pp1x_uh = new_lsb - old_lsb;
pp2x_uh = edge2->pos + old_rsb;
@@ -206,21 +483,23 @@
FT_Pos pp2x = loader->pp2.x;
- loader->pp1.x = FT_PIX_ROUND( pp1x );
- loader->pp2.x = FT_PIX_ROUND( pp2x );
+ loader->pp1.x = FT_PIX_ROUND( pp1x + hints->xmin_delta );
+ loader->pp2.x = FT_PIX_ROUND( pp2x + hints->xmax_delta );
slot->lsb_delta = loader->pp1.x - pp1x;
slot->rsb_delta = loader->pp2.x - pp2x;
}
}
+ /* `light' mode uses integer advance widths */
+ /* but sets `lsb_delta' and `rsb_delta' */
else
{
FT_Pos pp1x = loader->pp1.x;
FT_Pos pp2x = loader->pp2.x;
- loader->pp1.x = FT_PIX_ROUND( pp1x + hints->xmin_delta );
- loader->pp2.x = FT_PIX_ROUND( pp2x + hints->xmax_delta );
+ loader->pp1.x = FT_PIX_ROUND( pp1x );
+ loader->pp2.x = FT_PIX_ROUND( pp2x );
slot->lsb_delta = loader->pp1.x - pp1x;
slot->rsb_delta = loader->pp2.x - pp2x;
@@ -241,8 +520,8 @@
vvector.x = slot->metrics.vertBearingX - slot->metrics.horiBearingX;
vvector.y = slot->metrics.vertBearingY - slot->metrics.horiBearingY;
- vvector.x = FT_MulFix( vvector.x, metrics->scaler.x_scale );
- vvector.y = FT_MulFix( vvector.y, metrics->scaler.y_scale );
+ vvector.x = FT_MulFix( vvector.x, style_metrics->scaler.x_scale );
+ vvector.y = FT_MulFix( vvector.y, style_metrics->scaler.y_scale );
/* transform the hinted outline if needed */
if ( loader->transformed )
@@ -250,12 +529,12 @@
FT_Outline_Transform( &gloader->base.outline, &loader->trans_matrix );
FT_Vector_Transform( &vvector, &loader->trans_matrix );
}
-#if 1
+
/* we must translate our final outline by -pp1.x and compute */
/* the new metrics */
if ( loader->pp1.x )
FT_Outline_Translate( &gloader->base.outline, -loader->pp1.x, 0 );
-#endif
+
FT_Outline_Get_CBox( &gloader->base.outline, &bbox );
bbox.xMin = FT_PIX_FLOOR( bbox.xMin );
@@ -274,20 +553,14 @@
/* for mono-width fonts (like Andale, Courier, etc.) we need */
/* to keep the original rounded advance width; ditto for */
/* digits if all have the same advance width */
-#if 0
- if ( !FT_IS_FIXED_WIDTH( slot->face ) )
- slot->metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
- else
- slot->metrics.horiAdvance = FT_MulFix( slot->metrics.horiAdvance,
- x_scale );
-#else
- if ( scaler->render_mode != FT_RENDER_MODE_LIGHT &&
+ if ( scaler.render_mode != FT_RENDER_MODE_LIGHT &&
( FT_IS_FIXED_WIDTH( slot->face ) ||
( af_face_globals_is_digit( loader->globals, glyph_index ) &&
- metrics->digits_have_same_width ) ) )
+ style_metrics->digits_have_same_width ) ) )
{
- slot->metrics.horiAdvance = FT_MulFix( slot->metrics.horiAdvance,
- metrics->scaler.x_scale );
+ slot->metrics.horiAdvance =
+ FT_MulFix( slot->metrics.horiAdvance,
+ style_metrics->scaler.x_scale );
/* Set delta values to 0. Otherwise code that uses them is */
/* going to ruin the fixed advance width. */
@@ -300,23 +573,13 @@
if ( slot->metrics.horiAdvance )
slot->metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
}
-#endif
slot->metrics.vertAdvance = FT_MulFix( slot->metrics.vertAdvance,
- metrics->scaler.y_scale );
+ style_metrics->scaler.y_scale );
slot->metrics.horiAdvance = FT_PIX_ROUND( slot->metrics.horiAdvance );
slot->metrics.vertAdvance = FT_PIX_ROUND( slot->metrics.vertAdvance );
-#if 0
- /* reassign all outline fields except flags to protect them */
- slot->outline.n_contours = internal->loader->base.outline.n_contours;
- slot->outline.n_points = internal->loader->base.outline.n_points;
- slot->outline.points = internal->loader->base.outline.points;
- slot->outline.tags = internal->loader->base.outline.tags;
- slot->outline.contours = internal->loader->base.outline.contours;
-#endif
-
slot->format = FT_GLYPH_FORMAT_OUTLINE;
}
@@ -325,82 +588,133 @@
}
- /* Load a glyph. */
-
- FT_LOCAL_DEF( FT_Error )
- af_loader_load_glyph( AF_Loader loader,
- AF_Module module,
- FT_Face face,
- FT_UInt gindex,
- FT_Int32 load_flags )
+ /*
+ * Compute amount of font units the face should be emboldened by, in
+ * analogy to the CFF driver's `cf2_computeDarkening' function. See there
+ * for details of the algorithm.
+ *
+ * XXX: Currently a crude adaption of the original algorithm. Do better?
+ */
+ FT_LOCAL_DEF( FT_Int32 )
+ af_loader_compute_darkening( AF_Loader loader,
+ FT_Face face,
+ FT_Pos standard_width )
{
- FT_Error error;
- FT_Size size = face->size;
- AF_ScalerRec scaler;
+ AF_Module module = loader->globals->module;
+
+ FT_UShort units_per_EM;
+ FT_Fixed ppem, em_ratio;
+ FT_Fixed stem_width, stem_width_per_1000, scaled_stem, darken_amount;
+ FT_Int log_base_2;
+ FT_Int x1, y1, x2, y2, x3, y3, x4, y4;
- if ( !size )
- return FT_THROW( Invalid_Size_Handle );
+ ppem = FT_MAX( af_intToFixed( 4 ),
+ af_intToFixed( face->size->metrics.x_ppem ) );
+ units_per_EM = face->units_per_EM;
- FT_ZERO( &scaler );
-
- scaler.face = face;
- scaler.x_scale = size->metrics.x_scale;
- scaler.x_delta = 0; /* XXX: TODO: add support for sub-pixel hinting */
- scaler.y_scale = size->metrics.y_scale;
- scaler.y_delta = 0; /* XXX: TODO: add support for sub-pixel hinting */
-
- scaler.render_mode = FT_LOAD_TARGET_MODE( load_flags );
- scaler.flags = 0; /* XXX: fix this */
-
- error = af_loader_reset( loader, module, face );
- if ( !error )
+ em_ratio = FT_DivFix( af_intToFixed( 1000 ),
+ af_intToFixed ( units_per_EM ) );
+ if ( em_ratio < af_floatToFixed( .01 ) )
{
- AF_StyleMetrics metrics;
- FT_UInt options = AF_STYLE_NONE_DFLT;
+ /* If something goes wrong, don't embolden. */
+ return 0;
+ }
+
+ x1 = module->darken_params[0];
+ y1 = module->darken_params[1];
+ x2 = module->darken_params[2];
+ y2 = module->darken_params[3];
+ x3 = module->darken_params[4];
+ y3 = module->darken_params[5];
+ x4 = module->darken_params[6];
+ y4 = module->darken_params[7];
+
+ if ( standard_width <= 0 )
+ {
+ stem_width = af_intToFixed( 75 ); /* taken from cf2font.c */
+ stem_width_per_1000 = stem_width;
+ }
+ else
+ {
+ stem_width = af_intToFixed( standard_width );
+ stem_width_per_1000 = FT_MulFix( stem_width, em_ratio );
+ }
+
+ log_base_2 = FT_MSB( (FT_UInt32)stem_width_per_1000 ) +
+ FT_MSB( (FT_UInt32)ppem );
+
+ if ( log_base_2 >= 46 )
+ {
+ /* possible overflow */
+ scaled_stem = af_intToFixed( x4 );
+ }
+ else
+ scaled_stem = FT_MulFix( stem_width_per_1000, ppem );
+
+ /* now apply the darkening parameters */
+ if ( scaled_stem < af_intToFixed( x1 ) )
+ darken_amount = FT_DivFix( af_intToFixed( y1 ), ppem );
+
+ else if ( scaled_stem < af_intToFixed( x2 ) )
+ {
+ FT_Int xdelta = x2 - x1;
+ FT_Int ydelta = y2 - y1;
+ FT_Int x = stem_width_per_1000 -
+ FT_DivFix( af_intToFixed( x1 ), ppem );
-#ifdef FT_OPTION_AUTOFIT2
- /* XXX: undocumented hook to activate the latin2 writing system */
- if ( load_flags & ( 1UL << 20 ) )
- options = AF_STYLE_LTN2_DFLT;
-#endif
+ if ( !xdelta )
+ goto Try_x3;
- error = af_face_globals_get_metrics( loader->globals, gindex,
- options, &metrics );
- if ( !error )
+ darken_amount = FT_MulDiv( x, ydelta, xdelta ) +
+ FT_DivFix( af_intToFixed( y1 ), ppem );
+ }
+
+ else if ( scaled_stem < af_intToFixed( x3 ) )
+ {
+ Try_x3:
{
-#ifdef FT_CONFIG_OPTION_PIC
- AF_FaceGlobals globals = loader->globals;
-#endif
- AF_StyleClass style_class = metrics->style_class;
- AF_WritingSystemClass writing_system_class =
- AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system];
+ FT_Int xdelta = x3 - x2;
+ FT_Int ydelta = y3 - y2;
+ FT_Int x = stem_width_per_1000 -
+ FT_DivFix( af_intToFixed( x2 ), ppem );
- loader->metrics = metrics;
+ if ( !xdelta )
+ goto Try_x4;
- if ( writing_system_class->style_metrics_scale )
- writing_system_class->style_metrics_scale( metrics, &scaler );
- else
- metrics->scaler = scaler;
-
- load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_IGNORE_TRANSFORM;
- load_flags &= ~FT_LOAD_RENDER;
-
- if ( writing_system_class->style_hints_init )
- {
- error = writing_system_class->style_hints_init( loader->hints,
- metrics );
- if ( error )
- goto Exit;
- }
-
- error = af_loader_load_g( loader, &scaler, gindex, load_flags );
+ darken_amount = FT_MulDiv( x, ydelta, xdelta ) +
+ FT_DivFix( af_intToFixed( y2 ), ppem );
}
}
- Exit:
- return error;
+
+ else if ( scaled_stem < af_intToFixed( x4 ) )
+ {
+ Try_x4:
+ {
+ FT_Int xdelta = x4 - x3;
+ FT_Int ydelta = y4 - y3;
+ FT_Int x = stem_width_per_1000 -
+ FT_DivFix( af_intToFixed( x3 ), ppem );
+
+
+ if ( !xdelta )
+ goto Use_y4;
+
+ darken_amount = FT_MulDiv( x, ydelta, xdelta ) +
+ FT_DivFix( af_intToFixed( y3 ), ppem );
+ }
+ }
+
+ else
+ {
+ Use_y4:
+ darken_amount = FT_DivFix( af_intToFixed( y4 ), ppem );
+ }
+
+ /* Convert darken_amount from per 1000 em to true character space. */
+ return af_fixedToInt( FT_DivFix( darken_amount, em_ratio ) );
}
diff --git a/src/autofit/afloader.h b/src/autofit/afloader.h
index 37cfd14..d4d72d1 100644
--- a/src/autofit/afloader.h
+++ b/src/autofit/afloader.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter glyph loading routines (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __AFLOADER_H__
-#define __AFLOADER_H__
+#ifndef AFLOADER_H_
+#define AFLOADER_H_
#include "afhints.h"
#include "afmodule.h"
@@ -75,12 +75,17 @@
FT_UInt gindex,
FT_Int32 load_flags );
+ FT_LOCAL_DEF( FT_Int32 )
+ af_loader_compute_darkening( AF_Loader loader,
+ FT_Face face,
+ FT_Pos standard_width );
+
/* */
FT_END_HEADER
-#endif /* __AFLOADER_H__ */
+#endif /* AFLOADER_H_ */
/* END */
diff --git a/src/autofit/afmodule.c b/src/autofit/afmodule.c
index 8ae425c..dcaa17a 100644
--- a/src/autofit/afmodule.c
+++ b/src/autofit/afmodule.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter module implementation (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -25,6 +25,10 @@
#ifdef FT_DEBUG_AUTOFIT
#ifndef FT_MAKE_OPTION_SINGLE_OBJECT
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
extern void
af_glyph_hints_dump_segments( AF_GlyphHints hints,
FT_Bool to_stdout );
@@ -34,6 +38,10 @@
extern void
af_glyph_hints_dump_edges( AF_GlyphHints hints,
FT_Bool to_stdout );
+#ifdef __cplusplus
+ }
+#endif
+
#endif
int _af_debug_disable_horz_hints;
@@ -48,7 +56,7 @@
#include FT_INTERNAL_OBJECTS_H
#include FT_INTERNAL_DEBUG_H
-#include FT_AUTOHINTER_H
+#include FT_DRIVER_H
#include FT_SERVICE_PROPERTIES_H
@@ -96,21 +104,45 @@
}
+#ifdef FT_CONFIG_OPTION_PIC
+
+#undef AF_SCRIPT_CLASSES_GET
+#define AF_SCRIPT_CLASSES_GET \
+ ( GET_PIC( ft_module->library )->af_script_classes )
+
+#undef AF_STYLE_CLASSES_GET
+#define AF_STYLE_CLASSES_GET \
+ ( GET_PIC( ft_module->library )->af_style_classes )
+
+#endif
+
+
static FT_Error
af_property_set( FT_Module ft_module,
const char* property_name,
- const void* value )
+ const void* value,
+ FT_Bool value_is_string )
{
FT_Error error = FT_Err_Ok;
AF_Module module = (AF_Module)ft_module;
+#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ FT_UNUSED( value_is_string );
+#endif
+
if ( !ft_strcmp( property_name, "fallback-script" ) )
{
- FT_UInt* fallback_script = (FT_UInt*)value;
+ FT_UInt* fallback_script;
+ FT_UInt ss;
- FT_UInt ss;
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ if ( value_is_string )
+ return FT_THROW( Invalid_Argument );
+#endif
+
+ fallback_script = (FT_UInt*)value;
/* We translate the fallback script to a fallback style that uses */
/* `fallback-script' as its script and `AF_COVERAGE_NONE' as its */
@@ -139,19 +171,33 @@
}
else if ( !ft_strcmp( property_name, "default-script" ) )
{
- FT_UInt* default_script = (FT_UInt*)value;
+ FT_UInt* default_script;
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ if ( value_is_string )
+ return FT_THROW( Invalid_Argument );
+#endif
+
+ default_script = (FT_UInt*)value;
+
module->default_script = *default_script;
return error;
}
else if ( !ft_strcmp( property_name, "increase-x-height" ) )
{
- FT_Prop_IncreaseXHeight* prop = (FT_Prop_IncreaseXHeight*)value;
+ FT_Prop_IncreaseXHeight* prop;
AF_FaceGlobals globals;
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ if ( value_is_string )
+ return FT_THROW( Invalid_Argument );
+#endif
+
+ prop = (FT_Prop_IncreaseXHeight*)value;
+
error = af_property_get_face_globals( prop->face, &globals, module );
if ( !error )
globals->increase_x_height = prop->limit;
@@ -161,14 +207,119 @@
#ifdef AF_CONFIG_OPTION_USE_WARPER
else if ( !ft_strcmp( property_name, "warping" ) )
{
- FT_Bool* warping = (FT_Bool*)value;
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ if ( value_is_string )
+ {
+ const char* s = (const char*)value;
+ long w = ft_strtol( s, NULL, 10 );
- module->warping = *warping;
+ if ( w == 0 )
+ module->warping = 0;
+ else if ( w == 1 )
+ module->warping = 1;
+ else
+ return FT_THROW( Invalid_Argument );
+ }
+ else
+#endif
+ {
+ FT_Bool* warping = (FT_Bool*)value;
+
+
+ module->warping = *warping;
+ }
return error;
}
#endif /* AF_CONFIG_OPTION_USE_WARPER */
+ else if ( !ft_strcmp( property_name, "darkening-parameters" ) )
+ {
+ FT_Int* darken_params;
+ FT_Int x1, y1, x2, y2, x3, y3, x4, y4;
+
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ FT_Int dp[8];
+
+
+ if ( value_is_string )
+ {
+ const char* s = (const char*)value;
+ char* ep;
+ int i;
+
+
+ /* eight comma-separated numbers */
+ for ( i = 0; i < 7; i++ )
+ {
+ dp[i] = (FT_Int)ft_strtol( s, &ep, 10 );
+ if ( *ep != ',' || s == ep )
+ return FT_THROW( Invalid_Argument );
+
+ s = ep + 1;
+ }
+
+ dp[7] = (FT_Int)ft_strtol( s, &ep, 10 );
+ if ( !( *ep == '\0' || *ep == ' ' ) || s == ep )
+ return FT_THROW( Invalid_Argument );
+
+ darken_params = dp;
+ }
+ else
+#endif
+ darken_params = (FT_Int*)value;
+
+ x1 = darken_params[0];
+ y1 = darken_params[1];
+ x2 = darken_params[2];
+ y2 = darken_params[3];
+ x3 = darken_params[4];
+ y3 = darken_params[5];
+ x4 = darken_params[6];
+ y4 = darken_params[7];
+
+ if ( x1 < 0 || x2 < 0 || x3 < 0 || x4 < 0 ||
+ y1 < 0 || y2 < 0 || y3 < 0 || y4 < 0 ||
+ x1 > x2 || x2 > x3 || x3 > x4 ||
+ y1 > 500 || y2 > 500 || y3 > 500 || y4 > 500 )
+ return FT_THROW( Invalid_Argument );
+
+ module->darken_params[0] = x1;
+ module->darken_params[1] = y1;
+ module->darken_params[2] = x2;
+ module->darken_params[3] = y2;
+ module->darken_params[4] = x3;
+ module->darken_params[5] = y3;
+ module->darken_params[6] = x4;
+ module->darken_params[7] = y4;
+
+ return error;
+ }
+ else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
+ {
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ if ( value_is_string )
+ {
+ const char* s = (const char*)value;
+ long nsd = ft_strtol( s, NULL, 10 );
+
+
+ if ( !nsd )
+ module->no_stem_darkening = FALSE;
+ else
+ module->no_stem_darkening = TRUE;
+ }
+ else
+#endif
+ {
+ FT_Bool* no_stem_darkening = (FT_Bool*)value;
+
+
+ module->no_stem_darkening = *no_stem_darkening;
+ }
+
+ return error;
+ }
FT_TRACE0(( "af_property_set: missing property `%s'\n",
property_name ));
@@ -245,6 +396,33 @@
return error;
}
#endif /* AF_CONFIG_OPTION_USE_WARPER */
+ else if ( !ft_strcmp( property_name, "darkening-parameters" ) )
+ {
+ FT_Int* darken_params = module->darken_params;
+ FT_Int* val = (FT_Int*)value;
+
+
+ val[0] = darken_params[0];
+ val[1] = darken_params[1];
+ val[2] = darken_params[2];
+ val[3] = darken_params[3];
+ val[4] = darken_params[4];
+ val[5] = darken_params[5];
+ val[6] = darken_params[6];
+ val[7] = darken_params[7];
+
+ return error;
+ }
+ else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
+ {
+ FT_Bool no_stem_darkening = module->no_stem_darkening;
+ FT_Bool* val = (FT_Bool*)value;
+
+
+ *val = no_stem_darkening;
+
+ return error;
+ }
FT_TRACE0(( "af_property_get: missing property `%s'\n",
property_name ));
@@ -254,12 +432,14 @@
FT_DEFINE_SERVICE_PROPERTIESREC(
af_service_properties,
- (FT_Properties_SetFunc)af_property_set,
- (FT_Properties_GetFunc)af_property_get )
+
+ (FT_Properties_SetFunc)af_property_set, /* set_property */
+ (FT_Properties_GetFunc)af_property_get ) /* get_property */
FT_DEFINE_SERVICEDESCREC1(
af_services,
+
FT_SERVICE_ID_PROPERTIES, &AF_SERVICE_PROPERTIES_GET )
@@ -291,11 +471,21 @@
AF_Module module = (AF_Module)ft_module;
- module->fallback_style = AF_STYLE_FALLBACK;
- module->default_script = AF_SCRIPT_DEFAULT;
+ module->fallback_style = AF_STYLE_FALLBACK;
+ module->default_script = AF_SCRIPT_DEFAULT;
#ifdef AF_CONFIG_OPTION_USE_WARPER
- module->warping = 0;
+ module->warping = 0;
#endif
+ module->no_stem_darkening = TRUE;
+
+ module->darken_params[0] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1;
+ module->darken_params[1] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1;
+ module->darken_params[2] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2;
+ module->darken_params[3] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2;
+ module->darken_params[4] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3;
+ module->darken_params[5] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3;
+ module->darken_params[6] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4;
+ module->darken_params[7] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4;
return FT_Err_Ok;
}
@@ -342,9 +532,16 @@
error = af_loader_load_glyph( loader, module, slot->face,
glyph_index, load_flags );
- af_glyph_hints_dump_points( hints, 0 );
- af_glyph_hints_dump_segments( hints, 0 );
- af_glyph_hints_dump_edges( hints, 0 );
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( ft_trace_levels[FT_COMPONENT] )
+ {
+#endif
+ af_glyph_hints_dump_points( hints, 0 );
+ af_glyph_hints_dump_segments( hints, 0 );
+ af_glyph_hints_dump_edges( hints, 0 );
+#ifdef FT_DEBUG_LEVEL_TRACE
+ }
+#endif
af_loader_done( loader );
@@ -375,6 +572,7 @@
FT_DEFINE_AUTOHINTER_INTERFACE(
af_autofitter_interface,
+
NULL, /* reset_face */
NULL, /* get_global_hints */
NULL, /* done_global_hints */
@@ -393,9 +591,10 @@
(const void*)&AF_INTERFACE_GET,
- (FT_Module_Constructor)af_autofitter_init,
- (FT_Module_Destructor) af_autofitter_done,
- (FT_Module_Requester) af_get_interface )
+ (FT_Module_Constructor)af_autofitter_init, /* module_init */
+ (FT_Module_Destructor) af_autofitter_done, /* module_done */
+ (FT_Module_Requester) af_get_interface /* get_interface */
+ )
/* END */
diff --git a/src/autofit/afmodule.h b/src/autofit/afmodule.h
index b9c2fd8..56f64ea 100644
--- a/src/autofit/afmodule.h
+++ b/src/autofit/afmodule.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter module implementation (specification). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __AFMODULE_H__
-#define __AFMODULE_H__
+#ifndef AFMODULE_H_
+#define AFMODULE_H_
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
@@ -41,6 +41,8 @@
#ifdef AF_CONFIG_OPTION_USE_WARPER
FT_Bool warping;
#endif
+ FT_Bool no_stem_darkening;
+ FT_Int darken_params[8];
} AF_ModuleRec, *AF_Module;
@@ -50,7 +52,7 @@
FT_END_HEADER
-#endif /* __AFMODULE_H__ */
+#endif /* AFMODULE_H_ */
/* END */
diff --git a/src/autofit/afpic.c b/src/autofit/afpic.c
index 5589e61..d48d016 100644
--- a/src/autofit/afpic.c
+++ b/src/autofit/afpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for autofit module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -122,7 +122,7 @@
#include "afwrtsys.h"
#undef SCRIPT
-#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \
+#define SCRIPT( s, S, d, h, H, sss ) \
FT_Init_Class_af_ ## s ## _script_class( \
&container->af_script_classes_rec[ss++] );
diff --git a/src/autofit/afpic.h b/src/autofit/afpic.h
index 25071e3..0c73456 100644
--- a/src/autofit/afpic.h
+++ b/src/autofit/afpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for autofit module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,12 +16,10 @@
/***************************************************************************/
-#ifndef __AFPIC_H__
-#define __AFPIC_H__
+#ifndef AFPIC_H_
+#define AFPIC_H_
-FT_BEGIN_HEADER
-
#include FT_INTERNAL_PIC_H
@@ -43,6 +41,8 @@
#include "aftypes.h"
+FT_BEGIN_HEADER
+
typedef struct AFModulePIC_
{
FT_ServiceDescRec* af_services;
@@ -69,7 +69,7 @@
#define GET_PIC( lib ) \
- ( (AFModulePIC*)((lib)->pic_container.autofit) )
+ ( (AFModulePIC*)( (lib)->pic_container.autofit ) )
#define AF_SERVICES_GET \
( GET_PIC( library )->af_services )
@@ -93,13 +93,13 @@
FT_Error
autofit_module_class_pic_init( FT_Library library );
+FT_END_HEADER
+
#endif /* FT_CONFIG_OPTION_PIC */
/* */
-FT_END_HEADER
-
-#endif /* __AFPIC_H__ */
+#endif /* AFPIC_H_ */
/* END */
diff --git a/src/autofit/afranges.c b/src/autofit/afranges.c
index c1e0afb..cf67faf 100644
--- a/src/autofit/afranges.c
+++ b/src/autofit/afranges.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter Unicode script ranges (body). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,175 +18,963 @@
#include "afranges.h"
+ /*
+ * The algorithm for assigning properties and styles to the `glyph_styles'
+ * array is as follows (cf. the implementation in
+ * `af_face_globals_compute_style_coverage').
+ *
+ * Walk over all scripts (as listed in `afscript.h').
+ *
+ * For a given script, walk over all styles (as listed in `afstyles.h').
+ * The order of styles is important and should be as follows.
+ *
+ * - First come styles based on OpenType features (small caps, for
+ * example). Since features rely on glyph indices, thus completely
+ * bypassing character codes, no properties are assigned.
+ *
+ * - Next comes the default style, using the character ranges as defined
+ * below. This also assigns properties.
+ *
+ * Note that there also exist fallback scripts, mainly covering
+ * superscript and subscript glyphs of a script that are not present as
+ * OpenType features. Fallback scripts are defined below, also
+ * assigning properties; they are applied after the corresponding
+ * script.
+ *
+ */
+
+
+ /* XXX Check base character ranges again: */
+ /* Right now, they are quickly derived by visual inspection. */
+ /* I can imagine that fine-tuning is necessary. */
+
+ /* for the auto-hinter, a `non-base character' is something that should */
+ /* not be affected by blue zones, regardless of whether this is a */
+ /* spacing or no-spacing glyph */
+
+ /* the `af_xxxx_nonbase_uniranges' ranges must be strict subsets */
+ /* of the corresponding `af_xxxx_uniranges' ranges */
+
+
+ const AF_Script_UniRangeRec af_adlm_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1E900, 0x1E95F ), /* Adlam */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_adlm_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1D944, 0x1E94A ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
const AF_Script_UniRangeRec af_arab_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0600UL, 0x06FFUL ), /* Arabic */
- AF_UNIRANGE_REC( 0x0750UL, 0x07FFUL ), /* Arabic Supplement */
- AF_UNIRANGE_REC( 0x08A0UL, 0x08FFUL ), /* Arabic Extended-A */
- AF_UNIRANGE_REC( 0xFB50UL, 0xFDFFUL ), /* Arabic Presentation Forms-A */
- AF_UNIRANGE_REC( 0xFE70UL, 0xFEFFUL ), /* Arabic Presentation Forms-B */
- AF_UNIRANGE_REC( 0x1EE00UL, 0x1EEFFUL ), /* Arabic Mathematical Alphabetic Symbols */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0600, 0x06FF ), /* Arabic */
+ AF_UNIRANGE_REC( 0x0750, 0x07FF ), /* Arabic Supplement */
+ AF_UNIRANGE_REC( 0x08A0, 0x08FF ), /* Arabic Extended-A */
+ AF_UNIRANGE_REC( 0xFB50, 0xFDFF ), /* Arabic Presentation Forms-A */
+ AF_UNIRANGE_REC( 0xFE70, 0xFEFF ), /* Arabic Presentation Forms-B */
+ AF_UNIRANGE_REC( 0x1EE00, 0x1EEFF ), /* Arabic Mathematical Alphabetic Symbols */
+ AF_UNIRANGE_REC( 0, 0 )
};
- const AF_Script_UniRangeRec af_cyrl_uniranges[] =
+ const AF_Script_UniRangeRec af_arab_nonbase_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0400UL, 0x04FFUL ), /* Cyrillic */
- AF_UNIRANGE_REC( 0x0500UL, 0x052FUL ), /* Cyrillic Supplement */
- AF_UNIRANGE_REC( 0x2DE0UL, 0x2DFFUL ), /* Cyrillic Extended-A */
- AF_UNIRANGE_REC( 0xA640UL, 0xA69FUL ), /* Cyrillic Extended-B */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0600, 0x0605 ),
+ AF_UNIRANGE_REC( 0x0610, 0x061A ),
+ AF_UNIRANGE_REC( 0x064B, 0x065F ),
+ AF_UNIRANGE_REC( 0x0670, 0x0670 ),
+ AF_UNIRANGE_REC( 0x06D6, 0x06DC ),
+ AF_UNIRANGE_REC( 0x06DF, 0x06E4 ),
+ AF_UNIRANGE_REC( 0x06E7, 0x06E8 ),
+ AF_UNIRANGE_REC( 0x06EA, 0x06ED ),
+ AF_UNIRANGE_REC( 0x08D4, 0x08E1 ),
+ AF_UNIRANGE_REC( 0x08D3, 0x08FF ),
+ AF_UNIRANGE_REC( 0xFBB2, 0xFBC1 ),
+ AF_UNIRANGE_REC( 0xFE70, 0xFE70 ),
+ AF_UNIRANGE_REC( 0xFE72, 0xFE72 ),
+ AF_UNIRANGE_REC( 0xFE74, 0xFE74 ),
+ AF_UNIRANGE_REC( 0xFE76, 0xFE76 ),
+ AF_UNIRANGE_REC( 0xFE78, 0xFE78 ),
+ AF_UNIRANGE_REC( 0xFE7A, 0xFE7A ),
+ AF_UNIRANGE_REC( 0xFE7C, 0xFE7C ),
+ AF_UNIRANGE_REC( 0xFE7E, 0xFE7E ),
+ AF_UNIRANGE_REC( 0, 0 )
};
- /* there are some characters in the Devanagari Unicode block that are */
- /* generic to Indic scripts; we omit them so that their presence doesn't */
- /* trigger Devanagari */
- const AF_Script_UniRangeRec af_deva_uniranges[] =
+ const AF_Script_UniRangeRec af_armn_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0900UL, 0x093BUL ), /* Devanagari */
- /* omitting U+093C nukta */
- AF_UNIRANGE_REC( 0x093DUL, 0x0950UL ),
- /* omitting U+0951 udatta, U+0952 anudatta */
- AF_UNIRANGE_REC( 0x0953UL, 0x0963UL ),
- /* omitting U+0964 danda, U+0965 double danda */
- AF_UNIRANGE_REC( 0x0966UL, 0x097FUL ),
- AF_UNIRANGE_REC( 0x20B9UL, 0x20B9UL ), /* (new) Rupee sign */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0530, 0x058F ), /* Armenian */
+ AF_UNIRANGE_REC( 0xFB13, 0xFB17 ), /* Alphab. Present. Forms (Armenian) */
+ AF_UNIRANGE_REC( 0, 0 )
};
- const AF_Script_UniRangeRec af_grek_uniranges[] =
+ const AF_Script_UniRangeRec af_armn_nonbase_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0370UL, 0x03FFUL ), /* Greek and Coptic */
- AF_UNIRANGE_REC( 0x1F00UL, 0x1FFFUL ), /* Greek Extended */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0559, 0x055F ),
+ AF_UNIRANGE_REC( 0, 0 )
};
- const AF_Script_UniRangeRec af_hebr_uniranges[] =
+
+ const AF_Script_UniRangeRec af_avst_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0590UL, 0x05FFUL ), /* Hebrew */
- AF_UNIRANGE_REC( 0xFB1DUL, 0xFB4FUL ), /* Alphab. Present. Forms (Hebrew) */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x10B00, 0x10B3F ), /* Avestan */
+ AF_UNIRANGE_REC( 0, 0 )
};
- const AF_Script_UniRangeRec af_latn_uniranges[] =
+ const AF_Script_UniRangeRec af_avst_nonbase_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0020UL, 0x007FUL ), /* Basic Latin (no control chars) */
- AF_UNIRANGE_REC( 0x00A0UL, 0x00FFUL ), /* Latin-1 Supplement (no control chars) */
- AF_UNIRANGE_REC( 0x0100UL, 0x017FUL ), /* Latin Extended-A */
- AF_UNIRANGE_REC( 0x0180UL, 0x024FUL ), /* Latin Extended-B */
- AF_UNIRANGE_REC( 0x0250UL, 0x02AFUL ), /* IPA Extensions */
- AF_UNIRANGE_REC( 0x02B0UL, 0x02FFUL ), /* Spacing Modifier Letters */
- AF_UNIRANGE_REC( 0x0300UL, 0x036FUL ), /* Combining Diacritical Marks */
- AF_UNIRANGE_REC( 0x1D00UL, 0x1D7FUL ), /* Phonetic Extensions */
- AF_UNIRANGE_REC( 0x1D80UL, 0x1DBFUL ), /* Phonetic Extensions Supplement */
- AF_UNIRANGE_REC( 0x1DC0UL, 0x1DFFUL ), /* Combining Diacritical Marks Supplement */
- AF_UNIRANGE_REC( 0x1E00UL, 0x1EFFUL ), /* Latin Extended Additional */
- AF_UNIRANGE_REC( 0x2000UL, 0x206FUL ), /* General Punctuation */
- AF_UNIRANGE_REC( 0x2070UL, 0x209FUL ), /* Superscripts and Subscripts */
- AF_UNIRANGE_REC( 0x20A0UL, 0x20B8UL ), /* Currency Symbols ... */
- AF_UNIRANGE_REC( 0x20BAUL, 0x20CFUL ), /* ... except new Rupee sign */
- AF_UNIRANGE_REC( 0x2150UL, 0x218FUL ), /* Number Forms */
- AF_UNIRANGE_REC( 0x2460UL, 0x24FFUL ), /* Enclosed Alphanumerics */
- AF_UNIRANGE_REC( 0x2C60UL, 0x2C7FUL ), /* Latin Extended-C */
- AF_UNIRANGE_REC( 0x2E00UL, 0x2E7FUL ), /* Supplemental Punctuation */
- AF_UNIRANGE_REC( 0xA720UL, 0xA7FFUL ), /* Latin Extended-D */
- AF_UNIRANGE_REC( 0xFB00UL, 0xFB06UL ), /* Alphab. Present. Forms (Latin Ligs) */
- AF_UNIRANGE_REC( 0x1D400UL, 0x1D7FFUL ), /* Mathematical Alphanumeric Symbols */
- AF_UNIRANGE_REC( 0x1F100UL, 0x1F1FFUL ), /* Enclosed Alphanumeric Supplement */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x10B39, 0x10B3F ),
+ AF_UNIRANGE_REC( 0, 0 )
};
- const AF_Script_UniRangeRec af_none_uniranges[] =
+
+ const AF_Script_UniRangeRec af_bamu_uniranges[] =
{
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0xA6A0, 0xA6FF ), /* Bamum */
+#if 0
+ /* The characters in the Bamum supplement are pictograms, */
+ /* not (directly) related to the syllabic Bamum script */
+ AF_UNIRANGE_REC( 0x16800, 0x16A3F ), /* Bamum Supplement */
+#endif
+ AF_UNIRANGE_REC( 0, 0 )
};
- const AF_Script_UniRangeRec af_telu_uniranges[] =
+ const AF_Script_UniRangeRec af_bamu_nonbase_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0C00UL, 0x0C7FUL ), /* Telugu */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0xA6F0, 0xA6F1 ),
+ AF_UNIRANGE_REC( 0, 0 )
};
- const AF_Script_UniRangeRec af_thai_uniranges[] =
- {
- AF_UNIRANGE_REC( 0x0E00UL, 0x0E7FUL ), /* Thai */
- AF_UNIRANGE_REC( 0UL, 0UL )
- };
-
-#ifdef AF_CONFIG_OPTION_INDIC
const AF_Script_UniRangeRec af_beng_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0980UL, 0x09FFUL ), /* Bengali */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0980, 0x09FF ), /* Bengali */
+ AF_UNIRANGE_REC( 0, 0 )
};
+ const AF_Script_UniRangeRec af_beng_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0981, 0x0981 ),
+ AF_UNIRANGE_REC( 0x09BC, 0x09BC ),
+ AF_UNIRANGE_REC( 0x09C1, 0x09C4 ),
+ AF_UNIRANGE_REC( 0x09CD, 0x09CD ),
+ AF_UNIRANGE_REC( 0x09E2, 0x09E3 ),
+ AF_UNIRANGE_REC( 0x09FE, 0x09FE ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_buhd_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1740, 0x175F ), /* Buhid */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_buhd_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1752, 0x1753 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_cakm_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x11100, 0x1114F ), /* Chakma */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_cakm_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x11100, 0x11102 ),
+ AF_UNIRANGE_REC( 0x11127, 0x11134 ),
+ AF_UNIRANGE_REC( 0x11146, 0x11146 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_cans_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1400, 0x167F ), /* Unified Canadian Aboriginal Syllabics */
+ AF_UNIRANGE_REC( 0x18B0, 0x18FF ), /* Unified Canadian Aboriginal Syllabics Extended */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_cans_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_cari_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x102A0, 0x102DF ), /* Carian */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_cari_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_cher_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x13A0, 0x13FF ), /* Cherokee */
+ AF_UNIRANGE_REC( 0xAB70, 0xABBF ), /* Cherokee Supplement */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_cher_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_copt_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x2C80, 0x2CFF ), /* Coptic */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_copt_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x2CEF, 0x2CF1 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_cprt_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x10800, 0x1083F ), /* Cypriot */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_cprt_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_cyrl_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0400, 0x04FF ), /* Cyrillic */
+ AF_UNIRANGE_REC( 0x0500, 0x052F ), /* Cyrillic Supplement */
+ AF_UNIRANGE_REC( 0x2DE0, 0x2DFF ), /* Cyrillic Extended-A */
+ AF_UNIRANGE_REC( 0xA640, 0xA69F ), /* Cyrillic Extended-B */
+ AF_UNIRANGE_REC( 0x1C80, 0x1C8F ), /* Cyrillic Extended-C */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_cyrl_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0483, 0x0489 ),
+ AF_UNIRANGE_REC( 0x2DE0, 0x2DFF ),
+ AF_UNIRANGE_REC( 0xA66F, 0xA67F ),
+ AF_UNIRANGE_REC( 0xA69E, 0xA69F ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ /* There are some characters in the Devanagari Unicode block that are */
+ /* generic to Indic scripts; we omit them so that their presence doesn't */
+ /* trigger Devanagari. */
+
+ const AF_Script_UniRangeRec af_deva_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0900, 0x093B ), /* Devanagari */
+ /* omitting U+093C nukta */
+ AF_UNIRANGE_REC( 0x093D, 0x0950 ), /* ... continued */
+ /* omitting U+0951 udatta, U+0952 anudatta */
+ AF_UNIRANGE_REC( 0x0953, 0x0963 ), /* ... continued */
+ /* omitting U+0964 danda, U+0965 double danda */
+ AF_UNIRANGE_REC( 0x0966, 0x097F ), /* ... continued */
+ AF_UNIRANGE_REC( 0x20B9, 0x20B9 ), /* (new) Rupee sign */
+ AF_UNIRANGE_REC( 0xA8E0, 0xA8FF ), /* Devanagari Extended */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_deva_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0900, 0x0902 ),
+ AF_UNIRANGE_REC( 0x093A, 0x093A ),
+ AF_UNIRANGE_REC( 0x0941, 0x0948 ),
+ AF_UNIRANGE_REC( 0x094D, 0x094D ),
+ AF_UNIRANGE_REC( 0x0953, 0x0957 ),
+ AF_UNIRANGE_REC( 0x0962, 0x0963 ),
+ AF_UNIRANGE_REC( 0xA8E0, 0xA8F1 ),
+ AF_UNIRANGE_REC( 0xA8FF, 0xA8FF ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_dsrt_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x10400, 0x1044F ), /* Deseret */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_dsrt_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_ethi_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1200, 0x137F ), /* Ethiopic */
+ AF_UNIRANGE_REC( 0x1380, 0x139F ), /* Ethiopic Supplement */
+ AF_UNIRANGE_REC( 0x2D80, 0x2DDF ), /* Ethiopic Extended */
+ AF_UNIRANGE_REC( 0xAB00, 0xAB2F ), /* Ethiopic Extended-A */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_ethi_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x135D, 0x135F ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_geor_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x10D0, 0x10FF ), /* Georgian (Mkhedruli) */
+ AF_UNIRANGE_REC( 0x1C90, 0x1CBF ), /* Georgian Extended (Mtavruli) */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_geor_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_geok_uniranges[] =
+ {
+ /* Khutsuri */
+ AF_UNIRANGE_REC( 0x10A0, 0x10CD ), /* Georgian (Asomtavruli) */
+ AF_UNIRANGE_REC( 0x2D00, 0x2D2D ), /* Georgian Supplement (Nuskhuri) */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_geok_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_glag_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x2C00, 0x2C5F ), /* Glagolitic */
+ AF_UNIRANGE_REC( 0x1E000, 0x1E02F ), /* Glagolitic Supplement */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_glag_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1E000, 0x1E02F ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_goth_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x10330, 0x1034F ), /* Gothic */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_goth_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_grek_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0370, 0x03FF ), /* Greek and Coptic */
+ AF_UNIRANGE_REC( 0x1F00, 0x1FFF ), /* Greek Extended */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_grek_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x037A, 0x037A ),
+ AF_UNIRANGE_REC( 0x0384, 0x0385 ),
+ AF_UNIRANGE_REC( 0x1FBD, 0x1FC1 ),
+ AF_UNIRANGE_REC( 0x1FCD, 0x1FCF ),
+ AF_UNIRANGE_REC( 0x1FDD, 0x1FDF ),
+ AF_UNIRANGE_REC( 0x1FED, 0x1FEF ),
+ AF_UNIRANGE_REC( 0x1FFD, 0x1FFE ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
const AF_Script_UniRangeRec af_gujr_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0A80UL, 0x0AFFUL ), /* Gujarati */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0A80, 0x0AFF ), /* Gujarati */
+ AF_UNIRANGE_REC( 0, 0 )
};
+ const AF_Script_UniRangeRec af_gujr_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0A81, 0x0A82 ),
+ AF_UNIRANGE_REC( 0x0ABC, 0x0ABC ),
+ AF_UNIRANGE_REC( 0x0AC1, 0x0AC8 ),
+ AF_UNIRANGE_REC( 0x0ACD, 0x0ACD ),
+ AF_UNIRANGE_REC( 0x0AE2, 0x0AE3 ),
+ AF_UNIRANGE_REC( 0x0AFA, 0x0AFF ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
const AF_Script_UniRangeRec af_guru_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0A00UL, 0x0A7FUL ), /* Gurmukhi */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0A00, 0x0A7F ), /* Gurmukhi */
+ AF_UNIRANGE_REC( 0, 0 )
};
+ const AF_Script_UniRangeRec af_guru_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0A01, 0x0A02 ),
+ AF_UNIRANGE_REC( 0x0A3C, 0x0A3C ),
+ AF_UNIRANGE_REC( 0x0A41, 0x0A51 ),
+ AF_UNIRANGE_REC( 0x0A70, 0x0A71 ),
+ AF_UNIRANGE_REC( 0x0A75, 0x0A75 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_hebr_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0590, 0x05FF ), /* Hebrew */
+ AF_UNIRANGE_REC( 0xFB1D, 0xFB4F ), /* Alphab. Present. Forms (Hebrew) */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_hebr_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0591, 0x05BF ),
+ AF_UNIRANGE_REC( 0x05C1, 0x05C2 ),
+ AF_UNIRANGE_REC( 0x05C4, 0x05C5 ),
+ AF_UNIRANGE_REC( 0x05C7, 0x05C7 ),
+ AF_UNIRANGE_REC( 0xFB1E, 0xFB1E ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_kali_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0xA900, 0xA92F ), /* Kayah Li */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_kali_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0xA926, 0xA92D ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
const AF_Script_UniRangeRec af_knda_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0C80UL, 0x0CFFUL ), /* Kannada */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0C80, 0x0CFF ), /* Kannada */
+ AF_UNIRANGE_REC( 0, 0 )
};
- const AF_Script_UniRangeRec af_limb_uniranges[] =
+ const AF_Script_UniRangeRec af_knda_nonbase_uniranges[] =
{
- AF_UNIRANGE_REC( 0x1900UL, 0x194FUL ), /* Limbu */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0C81, 0x0C81 ),
+ AF_UNIRANGE_REC( 0x0CBC, 0x0CBC ),
+ AF_UNIRANGE_REC( 0x0CBF, 0x0CBF ),
+ AF_UNIRANGE_REC( 0x0CC6, 0x0CC6 ),
+ AF_UNIRANGE_REC( 0x0CCC, 0x0CCD ),
+ AF_UNIRANGE_REC( 0x0CE2, 0x0CE3 ),
+ AF_UNIRANGE_REC( 0, 0 )
};
+
+ const AF_Script_UniRangeRec af_khmr_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1780, 0x17FF ), /* Khmer */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_khmr_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x17B7, 0x17BD ),
+ AF_UNIRANGE_REC( 0x17C6, 0x17C6 ),
+ AF_UNIRANGE_REC( 0x17C9, 0x17D3 ),
+ AF_UNIRANGE_REC( 0x17DD, 0x17DD ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_khms_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x19E0, 0x19FF ), /* Khmer Symbols */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_khms_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_lao_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0E80, 0x0EFF ), /* Lao */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_lao_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0EB1, 0x0EB1 ),
+ AF_UNIRANGE_REC( 0x0EB4, 0x0EBC ),
+ AF_UNIRANGE_REC( 0x0EC8, 0x0ECD ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_latn_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0020, 0x007F ), /* Basic Latin (no control chars) */
+ AF_UNIRANGE_REC( 0x00A0, 0x00A9 ), /* Latin-1 Supplement (no control chars) */
+ AF_UNIRANGE_REC( 0x00AB, 0x00B1 ), /* ... continued */
+ AF_UNIRANGE_REC( 0x00B4, 0x00B8 ), /* ... continued */
+ AF_UNIRANGE_REC( 0x00BB, 0x00FF ), /* ... continued */
+ AF_UNIRANGE_REC( 0x0100, 0x017F ), /* Latin Extended-A */
+ AF_UNIRANGE_REC( 0x0180, 0x024F ), /* Latin Extended-B */
+ AF_UNIRANGE_REC( 0x0250, 0x02AF ), /* IPA Extensions */
+ AF_UNIRANGE_REC( 0x02B9, 0x02DF ), /* Spacing Modifier Letters */
+ AF_UNIRANGE_REC( 0x02E5, 0x02FF ), /* ... continued */
+ AF_UNIRANGE_REC( 0x0300, 0x036F ), /* Combining Diacritical Marks */
+ AF_UNIRANGE_REC( 0x1AB0, 0x1ABE ), /* Combining Diacritical Marks Extended */
+ AF_UNIRANGE_REC( 0x1D00, 0x1D2B ), /* Phonetic Extensions */
+ AF_UNIRANGE_REC( 0x1D6B, 0x1D77 ), /* ... continued */
+ AF_UNIRANGE_REC( 0x1D79, 0x1D7F ), /* ... continued */
+ AF_UNIRANGE_REC( 0x1D80, 0x1D9A ), /* Phonetic Extensions Supplement */
+ AF_UNIRANGE_REC( 0x1DC0, 0x1DFF ), /* Combining Diacritical Marks Supplement */
+ AF_UNIRANGE_REC( 0x1E00, 0x1EFF ), /* Latin Extended Additional */
+ AF_UNIRANGE_REC( 0x2000, 0x206F ), /* General Punctuation */
+ AF_UNIRANGE_REC( 0x20A0, 0x20B8 ), /* Currency Symbols ... */
+ AF_UNIRANGE_REC( 0x20BA, 0x20CF ), /* ... except new Rupee sign */
+ AF_UNIRANGE_REC( 0x2150, 0x218F ), /* Number Forms */
+ AF_UNIRANGE_REC( 0x2C60, 0x2C7B ), /* Latin Extended-C */
+ AF_UNIRANGE_REC( 0x2C7E, 0x2C7F ), /* ... continued */
+ AF_UNIRANGE_REC( 0x2E00, 0x2E7F ), /* Supplemental Punctuation */
+ AF_UNIRANGE_REC( 0xA720, 0xA76F ), /* Latin Extended-D */
+ AF_UNIRANGE_REC( 0xA771, 0xA7F7 ), /* ... continued */
+ AF_UNIRANGE_REC( 0xA7FA, 0xA7FF ), /* ... continued */
+ AF_UNIRANGE_REC( 0xAB30, 0xAB5B ), /* Latin Extended-E */
+ AF_UNIRANGE_REC( 0xAB60, 0xAB6F ), /* ... continued */
+ AF_UNIRANGE_REC( 0xFB00, 0xFB06 ), /* Alphab. Present. Forms (Latin Ligs) */
+ AF_UNIRANGE_REC( 0x1D400, 0x1D7FF ), /* Mathematical Alphanumeric Symbols */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_latn_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x005E, 0x0060 ),
+ AF_UNIRANGE_REC( 0x007E, 0x007E ),
+ AF_UNIRANGE_REC( 0x00A8, 0x00A9 ),
+ AF_UNIRANGE_REC( 0x00AE, 0x00B0 ),
+ AF_UNIRANGE_REC( 0x00B4, 0x00B4 ),
+ AF_UNIRANGE_REC( 0x00B8, 0x00B8 ),
+ AF_UNIRANGE_REC( 0x00BC, 0x00BE ),
+ AF_UNIRANGE_REC( 0x02B9, 0x02DF ),
+ AF_UNIRANGE_REC( 0x02E5, 0x02FF ),
+ AF_UNIRANGE_REC( 0x0300, 0x036F ),
+ AF_UNIRANGE_REC( 0x1AB0, 0x1ABE ),
+ AF_UNIRANGE_REC( 0x1DC0, 0x1DFF ),
+ AF_UNIRANGE_REC( 0x2017, 0x2017 ),
+ AF_UNIRANGE_REC( 0x203E, 0x203E ),
+ AF_UNIRANGE_REC( 0xA788, 0xA788 ),
+ AF_UNIRANGE_REC( 0xA7F8, 0xA7FA ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_latb_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1D62, 0x1D6A ), /* some small subscript letters */
+ AF_UNIRANGE_REC( 0x2080, 0x209C ), /* subscript digits and letters */
+ AF_UNIRANGE_REC( 0x2C7C, 0x2C7C ), /* latin subscript small letter j */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_latb_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_latp_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x00AA, 0x00AA ), /* feminine ordinal indicator */
+ AF_UNIRANGE_REC( 0x00B2, 0x00B3 ), /* superscript two and three */
+ AF_UNIRANGE_REC( 0x00B9, 0x00BA ), /* superscript one, masc. ord. indic. */
+ AF_UNIRANGE_REC( 0x02B0, 0x02B8 ), /* some latin superscript mod. letters */
+ AF_UNIRANGE_REC( 0x02E0, 0x02E4 ), /* some IPA modifier letters */
+ AF_UNIRANGE_REC( 0x1D2C, 0x1D61 ), /* latin superscript modifier letters */
+ AF_UNIRANGE_REC( 0x1D78, 0x1D78 ), /* modifier letter cyrillic en */
+ AF_UNIRANGE_REC( 0x1D9B, 0x1DBF ), /* more modifier letters */
+ AF_UNIRANGE_REC( 0x2070, 0x207F ), /* superscript digits and letters */
+ AF_UNIRANGE_REC( 0x2C7D, 0x2C7D ), /* modifier letter capital v */
+ AF_UNIRANGE_REC( 0xA770, 0xA770 ), /* modifier letter us */
+ AF_UNIRANGE_REC( 0xA7F8, 0xA7F9 ), /* more modifier letters */
+ AF_UNIRANGE_REC( 0xAB5C, 0xAB5F ), /* more modifier letters */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_latp_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_lisu_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0xA4D0, 0xA4FF ), /* Lisu */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_lisu_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
const AF_Script_UniRangeRec af_mlym_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0D00UL, 0x0D7FUL ), /* Malayalam */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0D00, 0x0D7F ), /* Malayalam */
+ AF_UNIRANGE_REC( 0, 0 )
};
- const AF_Script_UniRangeRec af_orya_uniranges[] =
+ const AF_Script_UniRangeRec af_mlym_nonbase_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0B00UL, 0x0B7FUL ), /* Oriya */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0D00, 0x0D01 ),
+ AF_UNIRANGE_REC( 0x0D3B, 0x0D3C ),
+ AF_UNIRANGE_REC( 0x0D4D, 0x0D4E ),
+ AF_UNIRANGE_REC( 0x0D62, 0x0D63 ),
+ AF_UNIRANGE_REC( 0, 0 )
};
+
+ const AF_Script_UniRangeRec af_mymr_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1000, 0x109F ), /* Myanmar */
+ AF_UNIRANGE_REC( 0xA9E0, 0xA9FF ), /* Myanmar Extended-B */
+ AF_UNIRANGE_REC( 0xAA60, 0xAA7F ), /* Myanmar Extended-A */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_mymr_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x102D, 0x1030 ),
+ AF_UNIRANGE_REC( 0x1032, 0x1037 ),
+ AF_UNIRANGE_REC( 0x103A, 0x103A ),
+ AF_UNIRANGE_REC( 0x103D, 0x103E ),
+ AF_UNIRANGE_REC( 0x1058, 0x1059 ),
+ AF_UNIRANGE_REC( 0x105E, 0x1060 ),
+ AF_UNIRANGE_REC( 0x1071, 0x1074 ),
+ AF_UNIRANGE_REC( 0x1082, 0x1082 ),
+ AF_UNIRANGE_REC( 0x1085, 0x1086 ),
+ AF_UNIRANGE_REC( 0x108D, 0x108D ),
+ AF_UNIRANGE_REC( 0xA9E5, 0xA9E5 ),
+ AF_UNIRANGE_REC( 0xAA7C, 0xAA7C ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_nkoo_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x07C0, 0x07FF ), /* N'Ko */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_nkoo_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x07EB, 0x07F5 ),
+ AF_UNIRANGE_REC( 0x07FD, 0x07FD ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_none_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_none_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_olck_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1C50, 0x1C7F ), /* Ol Chiki */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_olck_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_orkh_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x10C00, 0x10C4F ), /* Old Turkic */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_orkh_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_osge_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x104B0, 0x104FF ), /* Osage */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_osge_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_osma_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x10480, 0x104AF ), /* Osmanya */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_osma_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_saur_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0xA880, 0xA8DF ), /* Saurashtra */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_saur_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0xA880, 0xA881 ),
+ AF_UNIRANGE_REC( 0xA8B4, 0xA8C5 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_shaw_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x10450, 0x1047F ), /* Shavian */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_shaw_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
const AF_Script_UniRangeRec af_sinh_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0D80UL, 0x0DFFUL ), /* Sinhala */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0D80, 0x0DFF ), /* Sinhala */
+ AF_UNIRANGE_REC( 0, 0 )
};
+ const AF_Script_UniRangeRec af_sinh_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0DCA, 0x0DCA ),
+ AF_UNIRANGE_REC( 0x0DD2, 0x0DD6 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
const AF_Script_UniRangeRec af_sund_uniranges[] =
{
- AF_UNIRANGE_REC( 0x1B80UL, 0x1BBFUL ), /* Sundanese */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x1B80, 0x1BBF ), /* Sundanese */
+ AF_UNIRANGE_REC( 0x1CC0, 0x1CCF ), /* Sundanese Supplement */
+ AF_UNIRANGE_REC( 0, 0 )
};
- const AF_Script_UniRangeRec af_sylo_uniranges[] =
+ const AF_Script_UniRangeRec af_sund_nonbase_uniranges[] =
{
- AF_UNIRANGE_REC( 0xA800UL, 0xA82FUL ), /* Syloti Nagri */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x1B80, 0x1B82 ),
+ AF_UNIRANGE_REC( 0x1BA1, 0x1BAD ),
+ AF_UNIRANGE_REC( 0, 0 )
};
+
const AF_Script_UniRangeRec af_taml_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0B80UL, 0x0BFFUL ), /* Tamil */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0B80, 0x0BFF ), /* Tamil */
+ AF_UNIRANGE_REC( 0, 0 )
};
+ const AF_Script_UniRangeRec af_taml_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0B82, 0x0B82 ),
+ AF_UNIRANGE_REC( 0x0BC0, 0x0BC2 ),
+ AF_UNIRANGE_REC( 0x0BCD, 0x0BCD ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_tavt_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0xAA80, 0xAADF ), /* Tai Viet */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_tavt_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0xAAB0, 0xAAB0 ),
+ AF_UNIRANGE_REC( 0xAAB2, 0xAAB4 ),
+ AF_UNIRANGE_REC( 0xAAB7, 0xAAB8 ),
+ AF_UNIRANGE_REC( 0xAABE, 0xAABF ),
+ AF_UNIRANGE_REC( 0xAAC1, 0xAAC1 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_telu_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0C00, 0x0C7F ), /* Telugu */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_telu_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0C00, 0x0C00 ),
+ AF_UNIRANGE_REC( 0x0C04, 0x0C04 ),
+ AF_UNIRANGE_REC( 0x0C3E, 0x0C40 ),
+ AF_UNIRANGE_REC( 0x0C46, 0x0C56 ),
+ AF_UNIRANGE_REC( 0x0C62, 0x0C63 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_thai_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0E00, 0x0E7F ), /* Thai */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_thai_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0E31, 0x0E31 ),
+ AF_UNIRANGE_REC( 0x0E34, 0x0E3A ),
+ AF_UNIRANGE_REC( 0x0E47, 0x0E4E ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_tfng_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x2D30, 0x2D7F ), /* Tifinagh */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_tfng_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_vaii_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0xA500, 0xA63F ), /* Vai */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_vaii_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+#ifdef AF_CONFIG_OPTION_INDIC
+
+ const AF_Script_UniRangeRec af_limb_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1900, 0x194F ), /* Limbu */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_limb_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x1920, 0x1922 ),
+ AF_UNIRANGE_REC( 0x1927, 0x1934 ),
+ AF_UNIRANGE_REC( 0x1937, 0x193B ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_orya_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0B00, 0x0B7F ), /* Oriya */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_orya_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0B01, 0x0B02 ),
+ AF_UNIRANGE_REC( 0x0B3C, 0x0B3C ),
+ AF_UNIRANGE_REC( 0x0B3F, 0x0B3F ),
+ AF_UNIRANGE_REC( 0x0B41, 0x0B44 ),
+ AF_UNIRANGE_REC( 0x0B4D, 0x0B56 ),
+ AF_UNIRANGE_REC( 0x0B62, 0x0B63 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
+ const AF_Script_UniRangeRec af_sylo_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0xA800, 0xA82F ), /* Syloti Nagri */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_sylo_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0xA802, 0xA802 ),
+ AF_UNIRANGE_REC( 0xA806, 0xA806 ),
+ AF_UNIRANGE_REC( 0xA80B, 0xA80B ),
+ AF_UNIRANGE_REC( 0xA825, 0xA826 ),
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+
const AF_Script_UniRangeRec af_tibt_uniranges[] =
{
- AF_UNIRANGE_REC( 0x0F00UL, 0x0FFFUL ), /* Tibetan */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x0F00, 0x0FFF ), /* Tibetan */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_tibt_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0F18, 0x0F19 ),
+ AF_UNIRANGE_REC( 0x0F35, 0x0F35 ),
+ AF_UNIRANGE_REC( 0x0F37, 0x0F37 ),
+ AF_UNIRANGE_REC( 0x0F39, 0x0F39 ),
+ AF_UNIRANGE_REC( 0x0F3E, 0x0F3F ),
+ AF_UNIRANGE_REC( 0x0F71, 0x0F7E ),
+ AF_UNIRANGE_REC( 0x0F80, 0x0F84 ),
+ AF_UNIRANGE_REC( 0x0F86, 0x0F87 ),
+ AF_UNIRANGE_REC( 0x0F8D, 0x0FBC ),
+ AF_UNIRANGE_REC( 0, 0 )
};
#endif /* !AF_CONFIG_OPTION_INDIC */
@@ -197,39 +985,47 @@
const AF_Script_UniRangeRec af_hani_uniranges[] =
{
- AF_UNIRANGE_REC( 0x1100UL, 0x11FFUL ), /* Hangul Jamo */
- AF_UNIRANGE_REC( 0x2E80UL, 0x2EFFUL ), /* CJK Radicals Supplement */
- AF_UNIRANGE_REC( 0x2F00UL, 0x2FDFUL ), /* Kangxi Radicals */
- AF_UNIRANGE_REC( 0x2FF0UL, 0x2FFFUL ), /* Ideographic Description Characters */
- AF_UNIRANGE_REC( 0x3000UL, 0x303FUL ), /* CJK Symbols and Punctuation */
- AF_UNIRANGE_REC( 0x3040UL, 0x309FUL ), /* Hiragana */
- AF_UNIRANGE_REC( 0x30A0UL, 0x30FFUL ), /* Katakana */
- AF_UNIRANGE_REC( 0x3100UL, 0x312FUL ), /* Bopomofo */
- AF_UNIRANGE_REC( 0x3130UL, 0x318FUL ), /* Hangul Compatibility Jamo */
- AF_UNIRANGE_REC( 0x3190UL, 0x319FUL ), /* Kanbun */
- AF_UNIRANGE_REC( 0x31A0UL, 0x31BFUL ), /* Bopomofo Extended */
- AF_UNIRANGE_REC( 0x31C0UL, 0x31EFUL ), /* CJK Strokes */
- AF_UNIRANGE_REC( 0x31F0UL, 0x31FFUL ), /* Katakana Phonetic Extensions */
- AF_UNIRANGE_REC( 0x3200UL, 0x32FFUL ), /* Enclosed CJK Letters and Months */
- AF_UNIRANGE_REC( 0x3300UL, 0x33FFUL ), /* CJK Compatibility */
- AF_UNIRANGE_REC( 0x3400UL, 0x4DBFUL ), /* CJK Unified Ideographs Extension A */
- AF_UNIRANGE_REC( 0x4DC0UL, 0x4DFFUL ), /* Yijing Hexagram Symbols */
- AF_UNIRANGE_REC( 0x4E00UL, 0x9FFFUL ), /* CJK Unified Ideographs */
- AF_UNIRANGE_REC( 0xA960UL, 0xA97FUL ), /* Hangul Jamo Extended-A */
- AF_UNIRANGE_REC( 0xAC00UL, 0xD7AFUL ), /* Hangul Syllables */
- AF_UNIRANGE_REC( 0xD7B0UL, 0xD7FFUL ), /* Hangul Jamo Extended-B */
- AF_UNIRANGE_REC( 0xF900UL, 0xFAFFUL ), /* CJK Compatibility Ideographs */
- AF_UNIRANGE_REC( 0xFE10UL, 0xFE1FUL ), /* Vertical forms */
- AF_UNIRANGE_REC( 0xFE30UL, 0xFE4FUL ), /* CJK Compatibility Forms */
- AF_UNIRANGE_REC( 0xFF00UL, 0xFFEFUL ), /* Halfwidth and Fullwidth Forms */
- AF_UNIRANGE_REC( 0x1B000UL, 0x1B0FFUL ), /* Kana Supplement */
- AF_UNIRANGE_REC( 0x1D300UL, 0x1D35FUL ), /* Tai Xuan Hing Symbols */
- AF_UNIRANGE_REC( 0x1F200UL, 0x1F2FFUL ), /* Enclosed Ideographic Supplement */
- AF_UNIRANGE_REC( 0x20000UL, 0x2A6DFUL ), /* CJK Unified Ideographs Extension B */
- AF_UNIRANGE_REC( 0x2A700UL, 0x2B73FUL ), /* CJK Unified Ideographs Extension C */
- AF_UNIRANGE_REC( 0x2B740UL, 0x2B81FUL ), /* CJK Unified Ideographs Extension D */
- AF_UNIRANGE_REC( 0x2F800UL, 0x2FA1FUL ), /* CJK Compatibility Ideographs Supplement */
- AF_UNIRANGE_REC( 0UL, 0UL )
+ AF_UNIRANGE_REC( 0x1100, 0x11FF ), /* Hangul Jamo */
+ AF_UNIRANGE_REC( 0x2E80, 0x2EFF ), /* CJK Radicals Supplement */
+ AF_UNIRANGE_REC( 0x2F00, 0x2FDF ), /* Kangxi Radicals */
+ AF_UNIRANGE_REC( 0x2FF0, 0x2FFF ), /* Ideographic Description Characters */
+ AF_UNIRANGE_REC( 0x3000, 0x303F ), /* CJK Symbols and Punctuation */
+ AF_UNIRANGE_REC( 0x3040, 0x309F ), /* Hiragana */
+ AF_UNIRANGE_REC( 0x30A0, 0x30FF ), /* Katakana */
+ AF_UNIRANGE_REC( 0x3100, 0x312F ), /* Bopomofo */
+ AF_UNIRANGE_REC( 0x3130, 0x318F ), /* Hangul Compatibility Jamo */
+ AF_UNIRANGE_REC( 0x3190, 0x319F ), /* Kanbun */
+ AF_UNIRANGE_REC( 0x31A0, 0x31BF ), /* Bopomofo Extended */
+ AF_UNIRANGE_REC( 0x31C0, 0x31EF ), /* CJK Strokes */
+ AF_UNIRANGE_REC( 0x31F0, 0x31FF ), /* Katakana Phonetic Extensions */
+ AF_UNIRANGE_REC( 0x3300, 0x33FF ), /* CJK Compatibility */
+ AF_UNIRANGE_REC( 0x3400, 0x4DBF ), /* CJK Unified Ideographs Extension A */
+ AF_UNIRANGE_REC( 0x4DC0, 0x4DFF ), /* Yijing Hexagram Symbols */
+ AF_UNIRANGE_REC( 0x4E00, 0x9FFF ), /* CJK Unified Ideographs */
+ AF_UNIRANGE_REC( 0xA960, 0xA97F ), /* Hangul Jamo Extended-A */
+ AF_UNIRANGE_REC( 0xAC00, 0xD7AF ), /* Hangul Syllables */
+ AF_UNIRANGE_REC( 0xD7B0, 0xD7FF ), /* Hangul Jamo Extended-B */
+ AF_UNIRANGE_REC( 0xF900, 0xFAFF ), /* CJK Compatibility Ideographs */
+ AF_UNIRANGE_REC( 0xFE10, 0xFE1F ), /* Vertical forms */
+ AF_UNIRANGE_REC( 0xFE30, 0xFE4F ), /* CJK Compatibility Forms */
+ AF_UNIRANGE_REC( 0xFF00, 0xFFEF ), /* Halfwidth and Fullwidth Forms */
+ AF_UNIRANGE_REC( 0x1B000, 0x1B0FF ), /* Kana Supplement */
+ AF_UNIRANGE_REC( 0x1B100, 0x1B12F ), /* Kana Extended-A */
+ AF_UNIRANGE_REC( 0x1D300, 0x1D35F ), /* Tai Xuan Hing Symbols */
+ AF_UNIRANGE_REC( 0x20000, 0x2A6DF ), /* CJK Unified Ideographs Extension B */
+ AF_UNIRANGE_REC( 0x2A700, 0x2B73F ), /* CJK Unified Ideographs Extension C */
+ AF_UNIRANGE_REC( 0x2B740, 0x2B81F ), /* CJK Unified Ideographs Extension D */
+ AF_UNIRANGE_REC( 0x2B820, 0x2CEAF ), /* CJK Unified Ideographs Extension E */
+ AF_UNIRANGE_REC( 0x2CEB0, 0x2EBEF ), /* CJK Unified Ideographs Extension F */
+ AF_UNIRANGE_REC( 0x2F800, 0x2FA1F ), /* CJK Compatibility Ideographs Supplement */
+ AF_UNIRANGE_REC( 0, 0 )
+ };
+
+ const AF_Script_UniRangeRec af_hani_nonbase_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x302A, 0x302F ),
+ AF_UNIRANGE_REC( 0x3190, 0x319F ),
+ AF_UNIRANGE_REC( 0, 0 )
};
#endif /* !AF_CONFIG_OPTION_CJK */
diff --git a/src/autofit/afranges.h b/src/autofit/afranges.h
index 7c78ab0..ba3b5e7 100644
--- a/src/autofit/afranges.h
+++ b/src/autofit/afranges.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter Unicode script ranges (specification). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __AFRANGES_H__
-#define __AFRANGES_H__
+#ifndef AFRANGES_H_
+#define AFRANGES_H_
#include "aftypes.h"
@@ -26,16 +26,22 @@
FT_BEGIN_HEADER
#undef SCRIPT
-#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \
+#define SCRIPT( s, S, d, h, H, ss ) \
extern const AF_Script_UniRangeRec af_ ## s ## _uniranges[];
#include "afscript.h"
+#undef SCRIPT
+#define SCRIPT( s, S, d, h, H, ss ) \
+ extern const AF_Script_UniRangeRec af_ ## s ## _nonbase_uniranges[];
+
+#include "afscript.h"
+
/* */
FT_END_HEADER
-#endif /* __AFRANGES_H__ */
+#endif /* AFRANGES_H_ */
/* END */
diff --git a/src/autofit/afscript.h b/src/autofit/afscript.h
index dfcc830..623a173 100644
--- a/src/autofit/afscript.h
+++ b/src/autofit/afscript.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter scripts (specification only). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -25,114 +25,354 @@
/* by a description string. Then comes the corresponding HarfBuzz */
/* script name tag, followed by a string of standard characters (to */
/* derive the standard width and height of stems). */
+ /* */
+ /* Note that fallback scripts only have a default style, thus we */
+ /* use `HB_SCRIPT_INVALID' as the HarfBuzz script name tag for */
+ /* them. */
+
+ SCRIPT( adlm, ADLM,
+ "Adlam",
+ HB_SCRIPT_ADLAM,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x9E\xA4\x8C \xF0\x9E\xA4\xAE" ) /* 𞤌 𞤮 */
SCRIPT( arab, ARAB,
"Arabic",
HB_SCRIPT_ARABIC,
- 0x644, 0x62D, 0x640 ) /* ل ح ـ */
+ HINTING_BOTTOM_TO_TOP,
+ "\xD9\x84 \xD8\xAD \xD9\x80" ) /* ل ح ـ */
+
+ SCRIPT( armn, ARMN,
+ "Armenian",
+ HB_SCRIPT_ARMENIAN,
+ HINTING_BOTTOM_TO_TOP,
+ "\xD5\xBD \xD5\x8D" ) /* ս Ս */
+
+ SCRIPT( avst, AVST,
+ "Avestan",
+ HB_SCRIPT_AVESTAN,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x90\xAC\x9A" ) /* 𐬚 */
+
+ SCRIPT( bamu, BAMU,
+ "Bamum",
+ HB_SCRIPT_BAMUM,
+ HINTING_BOTTOM_TO_TOP,
+ "\xEA\x9B\x81 \xEA\x9B\xAF" ) /* ꛁ ꛯ */
+
+ /* there are no simple forms for letters; we thus use two digit shapes */
+ SCRIPT( beng, BENG,
+ "Bengali",
+ HB_SCRIPT_BENGALI,
+ HINTING_TOP_TO_BOTTOM,
+ "\xE0\xA7\xA6 \xE0\xA7\xAA" ) /* ০ ৪ */
+
+ SCRIPT( buhd, BUHD,
+ "Buhid",
+ HB_SCRIPT_BUHID,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\x9D\x8B \xE1\x9D\x8F" ) /* ᝋ ᝏ */
+
+ SCRIPT( cakm, CAKM,
+ "Chakma",
+ HB_SCRIPT_CHAKMA,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x91\x84\xA4 \xF0\x91\x84\x89 \xF0\x91\x84\x9B" ) /* 𑄤 𑄉 𑄛 */
+
+ SCRIPT( cans, CANS,
+ "Canadian Syllabics",
+ HB_SCRIPT_CANADIAN_SYLLABICS,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\x91\x8C \xE1\x93\x9A" ) /* ᑌ ᓚ */
+
+ SCRIPT( cari, CARI,
+ "Carian",
+ HB_SCRIPT_CARIAN,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x90\x8A\xAB \xF0\x90\x8B\x89" ) /* 𐊫 𐋉 */
+
+ SCRIPT( cher, CHER,
+ "Cherokee",
+ HB_SCRIPT_CHEROKEE,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\x8E\xA4 \xE1\x8F\x85 \xEA\xAE\x95" ) /* Ꭴ Ꮕ ꮕ */
+
+ SCRIPT( copt, COPT,
+ "Coptic",
+ HB_SCRIPT_COPTIC,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE2\xB2\x9E \xE2\xB2\x9F" ) /* Ⲟ ⲟ */
+
+ SCRIPT( cprt, CPRT,
+ "Cypriot",
+ HB_SCRIPT_CYPRIOT,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x90\xA0\x85 \xF0\x90\xA0\xA3" ) /* 𐠅 𐠣 */
SCRIPT( cyrl, CYRL,
"Cyrillic",
HB_SCRIPT_CYRILLIC,
- 0x43E, 0x41E, 0x0 ) /* оО */
+ HINTING_BOTTOM_TO_TOP,
+ "\xD0\xBE \xD0\x9E" ) /* о О */
SCRIPT( deva, DEVA,
"Devanagari",
HB_SCRIPT_DEVANAGARI,
- 0x920, 0x935, 0x91F ) /* ठ व ट */
+ HINTING_TOP_TO_BOTTOM,
+ "\xE0\xA4\xA0 \xE0\xA4\xB5 \xE0\xA4\x9F" ) /* ठ व ट */
+
+ SCRIPT( dsrt, DSRT,
+ "Deseret",
+ HB_SCRIPT_DESERET,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x90\x90\x84 \xF0\x90\x90\xAC" ) /* 𐐄 𐐬 */
+
+ SCRIPT( ethi, ETHI,
+ "Ethiopic",
+ HB_SCRIPT_ETHIOPIC,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\x8B\x90" ) /* ዐ */
+
+ SCRIPT( geor, GEOR,
+ "Georgian (Mkhedruli)",
+ HB_SCRIPT_GEORGIAN,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\x83\x98 \xE1\x83\x94 \xE1\x83\x90 \xE1\xB2\xBF" ) /* ი ე ა Ი */
+
+ SCRIPT( geok, GEOK,
+ "Georgian (Khutsuri)",
+ HB_SCRIPT_INVALID,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\x82\xB6 \xE1\x82\xB1 \xE2\xB4\x99" ) /* Ⴖ Ⴑ ⴙ */
+
+ SCRIPT( glag, GLAG,
+ "Glagolitic",
+ HB_SCRIPT_GLAGOLITIC,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE2\xB0\x95 \xE2\xB1\x85" ) /* Ⱅ ⱅ */
+
+ SCRIPT( goth, GOTH,
+ "Gothic",
+ HB_SCRIPT_GOTHIC,
+ HINTING_TOP_TO_BOTTOM,
+ "\xF0\x90\x8C\xB4 \xF0\x90\x8C\xBE \xF0\x90\x8D\x83" ) /* 𐌴 𐌾 𐍃 */
SCRIPT( grek, GREK,
"Greek",
HB_SCRIPT_GREEK,
- 0x3BF, 0x39F, 0x0 ) /* οΟ */
+ HINTING_BOTTOM_TO_TOP,
+ "\xCE\xBF \xCE\x9F" ) /* ο Ο */
+
+ SCRIPT( gujr, GUJR,
+ "Gujarati",
+ HB_SCRIPT_GUJARATI,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE0\xAA\x9F \xE0\xAB\xA6" ) /* ટ ૦ */
+
+ SCRIPT( guru, GURU,
+ "Gurmukhi",
+ HB_SCRIPT_GURMUKHI,
+ HINTING_TOP_TO_BOTTOM,
+ "\xE0\xA8\xA0 \xE0\xA8\xB0 \xE0\xA9\xA6" ) /* ਠ ਰ ੦ */
SCRIPT( hebr, HEBR,
"Hebrew",
HB_SCRIPT_HEBREW,
- 0x5DD, 0x0, 0x0 ) /* ם */
+ HINTING_BOTTOM_TO_TOP,
+ "\xD7\x9D" ) /* ם */
+
+ SCRIPT( kali, KALI,
+ "Kayah Li",
+ HB_SCRIPT_KAYAH_LI,
+ HINTING_BOTTOM_TO_TOP,
+ "\xEA\xA4\x8D \xEA\xA4\x80" ) /* ꤍ ꤀ */
+
+ /* only digit zero has a simple shape in the Khmer script */
+ SCRIPT( khmr, KHMR,
+ "Khmer",
+ HB_SCRIPT_KHMER,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\x9F\xA0" ) /* ០ */
+
+ SCRIPT( khms, KHMS,
+ "Khmer Symbols",
+ HB_SCRIPT_INVALID,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\xA7\xA1 \xE1\xA7\xAA" ) /* ᧡ ᧪ */
+
+ SCRIPT( knda, KNDA,
+ "Kannada",
+ HB_SCRIPT_KANNADA,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE0\xB3\xA6 \xE0\xB2\xAC" ) /* ೦ ಬ */
+
+ /* only digit zero has a simple shape in the Lao script */
+ SCRIPT( lao, LAO,
+ "Lao",
+ HB_SCRIPT_LAO,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE0\xBB\x90" ) /* ໐ */
SCRIPT( latn, LATN,
"Latin",
HB_SCRIPT_LATIN,
- 'o', 'O', '0' )
+ HINTING_BOTTOM_TO_TOP,
+ "o O 0" )
+
+ SCRIPT( latb, LATB,
+ "Latin Subscript Fallback",
+ HB_SCRIPT_INVALID,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE2\x82\x92 \xE2\x82\x80" ) /* ₒ ₀ */
+
+ SCRIPT( latp, LATP,
+ "Latin Superscript Fallback",
+ HB_SCRIPT_INVALID,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\xB5\x92 \xE1\xB4\xBC \xE2\x81\xB0" ) /* ᵒ ᴼ ⁰ */
+
+ SCRIPT( lisu, LISU,
+ "Lisu",
+ HB_SCRIPT_LISU,
+ HINTING_BOTTOM_TO_TOP,
+ "\xEA\x93\xB3" ) /* ꓳ */
+
+ SCRIPT( mlym, MLYM,
+ "Malayalam",
+ HB_SCRIPT_MALAYALAM,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE0\xB4\xA0 \xE0\xB4\xB1" ) /* ഠ റ */
+
+ SCRIPT( mymr, MYMR,
+ "Myanmar",
+ HB_SCRIPT_MYANMAR,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\x80\x9D \xE1\x80\x84 \xE1\x80\x82" ) /* ဝ င ဂ */
+
+ SCRIPT( nkoo, NKOO,
+ "N'Ko",
+ HB_SCRIPT_NKO,
+ HINTING_BOTTOM_TO_TOP,
+ "\xDF\x8B \xDF\x80" ) /* ߋ ߀ */
SCRIPT( none, NONE,
"no script",
HB_SCRIPT_INVALID,
- 0x0, 0x0, 0x0 )
+ HINTING_BOTTOM_TO_TOP,
+ "" )
+
+ SCRIPT( olck, OLCK,
+ "Ol Chiki",
+ HB_SCRIPT_OL_CHIKI,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\xB1\x9B" ) /* ᱛ */
+
+ SCRIPT( orkh, ORKH,
+ "Old Turkic",
+ HB_SCRIPT_OLD_TURKIC,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x90\xB0\x97" ) /* 𐰗 */
+
+ SCRIPT( osge, OSGE,
+ "Osage",
+ HB_SCRIPT_OSAGE,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x90\x93\x82 \xF0\x90\x93\xAA" ) /* 𐓂 𐓪 */
+
+ SCRIPT( osma, OSMA,
+ "Osmanya",
+ HB_SCRIPT_OSMANYA,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x90\x92\x86 \xF0\x90\x92\xA0" ) /* 𐒆 𐒠 */
+
+ SCRIPT( saur, SAUR,
+ "Saurashtra",
+ HB_SCRIPT_SAURASHTRA,
+ HINTING_BOTTOM_TO_TOP,
+ "\xEA\xA2\x9D \xEA\xA3\x90" ) /* ꢝ ꣐ */
+
+ SCRIPT( shaw, SHAW,
+ "Shavian",
+ HB_SCRIPT_SHAVIAN,
+ HINTING_BOTTOM_TO_TOP,
+ "\xF0\x90\x91\xB4" ) /* 𐑴 */
+
+ SCRIPT( sinh, SINH,
+ "Sinhala",
+ HB_SCRIPT_SINHALA,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE0\xB6\xA7" ) /* ට */
+
+ /* only digit zero has a simple (round) shape in the Sundanese script */
+ SCRIPT( sund, SUND,
+ "Sundanese",
+ HB_SCRIPT_SUNDANESE,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE1\xAE\xB0" ) /* ᮰ */
+
+ /* only digit zero has a simple (round) shape in the Tamil script */
+ SCRIPT( taml, TAML,
+ "Tamil",
+ HB_SCRIPT_TAMIL,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE0\xAF\xA6" ) /* ௦ */
+
+ SCRIPT( tavt, TAVT,
+ "Tai Viet",
+ HB_SCRIPT_TAI_VIET,
+ HINTING_BOTTOM_TO_TOP,
+ "\xEA\xAA\x92 \xEA\xAA\xAB" ) /* ꪒ ꪫ */
/* there are no simple forms for letters; we thus use two digit shapes */
SCRIPT( telu, TELU,
"Telugu",
HB_SCRIPT_TELUGU,
- 0xC66, 0xC67, 0x0 ) /* ౦ ౧ */
+ HINTING_BOTTOM_TO_TOP,
+ "\xE0\xB1\xA6 \xE0\xB1\xA7" ) /* ౦ ౧ */
+
+ SCRIPT( tfng, TFNG,
+ "Tifinagh",
+ HB_SCRIPT_TIFINAGH,
+ HINTING_BOTTOM_TO_TOP,
+ "\xE2\xB5\x94" ) /* ⵔ */
SCRIPT( thai, THAI,
"Thai",
HB_SCRIPT_THAI,
- 0xE32, 0xE45, 0xE50 ) /* า ๅ ๐ */
+ HINTING_BOTTOM_TO_TOP,
+ "\xE0\xB8\xB2 \xE0\xB9\x85 \xE0\xB9\x90" ) /* า ๅ ๐ */
+
+ SCRIPT( vaii, VAII,
+ "Vai",
+ HB_SCRIPT_VAI,
+ HINTING_BOTTOM_TO_TOP,
+ "\xEA\x98\x93 \xEA\x96\x9C \xEA\x96\xB4" ) /* ꘓ ꖜ ꖴ */
#ifdef AF_CONFIG_OPTION_INDIC
- SCRIPT( beng, BENG,
- "Bengali",
- HB_SCRIPT_BENGALI,
- 'o', 0x0, 0x0 ) /* XXX */
-
- SCRIPT( gujr, GUJR,
- "Gujarati",
- HB_SCRIPT_GUJARATI,
- 'o', 0x0, 0x0 ) /* XXX */
-
- SCRIPT( guru, GURU,
- "Gurmukhi",
- HB_SCRIPT_GURMUKHI,
- 'o', 0x0, 0x0 ) /* XXX */
-
- SCRIPT( knda, KNDA,
- "Kannada",
- HB_SCRIPT_KANNADA,
- 'o', 0x0, 0x0 ) /* XXX */
-
SCRIPT( limb, LIMB,
"Limbu",
HB_SCRIPT_LIMBU,
- 'o', 0x0, 0x0 ) /* XXX */
-
- SCRIPT( mlym, MLYM,
- "Malayalam",
- HB_SCRIPT_MALAYALAM,
- 'o', 0x0, 0x0 ) /* XXX */
+ HINTING_BOTTOM_TO_TOP,
+ "o" ) /* XXX */
SCRIPT( orya, ORYA,
"Oriya",
HB_SCRIPT_ORIYA,
- 'o', 0x0, 0x0 ) /* XXX */
-
- SCRIPT( sinh, SINH,
- "Sinhala",
- HB_SCRIPT_SINHALA,
- 'o', 0x0, 0x0 ) /* XXX */
-
- SCRIPT( sund, SUND,
- "Sundanese",
- HB_SCRIPT_SUNDANESE,
- 'o', 0x0, 0x0 ) /* XXX */
+ HINTING_BOTTOM_TO_TOP,
+ "o" ) /* XXX */
SCRIPT( sylo, SYLO,
"Syloti Nagri",
HB_SCRIPT_SYLOTI_NAGRI,
- 'o', 0x0, 0x0 ) /* XXX */
-
- SCRIPT( taml, TAML,
- "Tamil",
- HB_SCRIPT_TAMIL,
- 'o', 0x0, 0x0 ) /* XXX */
+ HINTING_BOTTOM_TO_TOP,
+ "o" ) /* XXX */
SCRIPT( tibt, TIBT,
"Tibetan",
HB_SCRIPT_TIBETAN,
- 'o', 0x0, 0x0 ) /* XXX */
+ HINTING_BOTTOM_TO_TOP,
+ "o" ) /* XXX */
#endif /* AF_CONFIG_OPTION_INDIC */
@@ -141,7 +381,8 @@
SCRIPT( hani, HANI,
"CJKV ideographs",
HB_SCRIPT_HAN,
- 0x7530, 0x56D7, 0x0 ) /* 田囗 */
+ HINTING_BOTTOM_TO_TOP,
+ "\xE7\x94\xB0 \xE5\x9B\x97" ) /* 田 囗 */
#endif /* AF_CONFIG_OPTION_CJK */
diff --git a/src/autofit/hbshim.c b/src/autofit/afshaper.c
similarity index 67%
rename from src/autofit/hbshim.c
rename to src/autofit/afshaper.c
index c9c1db0..f308281 100644
--- a/src/autofit/hbshim.c
+++ b/src/autofit/afshaper.c
@@ -1,10 +1,10 @@
/***************************************************************************/
/* */
-/* hbshim.c */
+/* afshaper.c */
/* */
/* HarfBuzz interface for accessing OpenType features (body). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,9 +18,10 @@
#include <ft2build.h>
#include FT_FREETYPE_H
+#include FT_ADVANCES_H
#include "afglobal.h"
#include "aftypes.h"
-#include "hbshim.h"
+#include "afshaper.h"
#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
@@ -32,7 +33,7 @@
/* messages during execution. */
/* */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_afharfbuzz
+#define FT_COMPONENT trace_afshaper
/*
@@ -86,7 +87,7 @@
/* load HarfBuzz script tags */
#undef SCRIPT
-#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) h,
+#define SCRIPT( s, S, d, h, H, ss ) h,
static const hb_script_t scripts[] =
@@ -96,16 +97,17 @@
FT_Error
- af_get_coverage( AF_FaceGlobals globals,
- AF_StyleClass style_class,
- FT_Byte* gstyles )
+ af_shaper_get_coverage( AF_FaceGlobals globals,
+ AF_StyleClass style_class,
+ FT_UShort* gstyles,
+ FT_Bool default_script )
{
hb_face_t* face;
- hb_set_t* gsub_lookups; /* GSUB lookups for a given script */
- hb_set_t* gsub_glyphs; /* glyphs covered by GSUB lookups */
- hb_set_t* gpos_lookups; /* GPOS lookups for a given script */
- hb_set_t* gpos_glyphs; /* glyphs covered by GPOS lookups */
+ hb_set_t* gsub_lookups = NULL; /* GSUB lookups for a given script */
+ hb_set_t* gsub_glyphs = NULL; /* glyphs covered by GSUB lookups */
+ hb_set_t* gpos_lookups = NULL; /* GPOS lookups for a given script */
+ hb_set_t* gpos_glyphs = NULL; /* glyphs covered by GPOS lookups */
hb_script_t script;
const hb_tag_t* coverage_tags;
@@ -125,11 +127,6 @@
face = hb_font_get_face( globals->hb_font );
- gsub_lookups = hb_set_create();
- gsub_glyphs = hb_set_create();
- gpos_lookups = hb_set_create();
- gpos_glyphs = hb_set_create();
-
coverage_tags = coverages[style_class->coverage];
script = scripts[style_class->script];
@@ -143,8 +140,7 @@
/* `hb_ot_tags_from_script' usually returns HB_OT_TAG_DEFAULT_SCRIPT */
/* as the second tag. We change that to HB_TAG_NONE except for the */
/* default script. */
- if ( style_class->script == globals->module->default_script &&
- style_class->coverage == AF_COVERAGE_DEFAULT )
+ if ( default_script )
{
if ( script_tags[0] == HB_TAG_NONE )
script_tags[0] = HB_OT_TAG_DEFAULT_SCRIPT;
@@ -158,10 +154,16 @@
}
else
{
+ /* we use non-standard tags like `khms' for special purposes; */
+ /* HarfBuzz maps them to `DFLT', which we don't want to handle here */
+ if ( script_tags[0] == HB_OT_TAG_DEFAULT_SCRIPT )
+ goto Exit;
+
if ( script_tags[1] == HB_OT_TAG_DEFAULT_SCRIPT )
script_tags[1] = HB_TAG_NONE;
}
+ gsub_lookups = hb_set_create();
hb_ot_layout_collect_lookups( face,
HB_OT_TAG_GSUB,
script_tags,
@@ -172,13 +174,6 @@
if ( hb_set_is_empty( gsub_lookups ) )
goto Exit; /* nothing to do */
- hb_ot_layout_collect_lookups( face,
- HB_OT_TAG_GPOS,
- script_tags,
- NULL,
- coverage_tags,
- gpos_lookups );
-
FT_TRACE4(( "GSUB lookups (style `%s'):\n"
" ",
af_style_names[style_class->style] ));
@@ -187,6 +182,7 @@
count = 0;
#endif
+ gsub_glyphs = hb_set_create();
for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gsub_lookups, &idx ); )
{
#ifdef FT_DEBUG_LEVEL_TRACE
@@ -214,10 +210,19 @@
" ",
af_style_names[style_class->style] ));
+ gpos_lookups = hb_set_create();
+ hb_ot_layout_collect_lookups( face,
+ HB_OT_TAG_GPOS,
+ script_tags,
+ NULL,
+ coverage_tags,
+ gpos_lookups );
+
#ifdef FT_DEBUG_LEVEL_TRACE
count = 0;
#endif
+ gpos_glyphs = hb_set_create();
for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gpos_lookups, &idx ); )
{
#ifdef FT_DEBUG_LEVEL_TRACE
@@ -363,7 +368,7 @@
continue;
if ( gstyles[idx] == AF_STYLE_UNASSIGNED )
- gstyles[idx] = (FT_Byte)style_class->style;
+ gstyles[idx] = (FT_UShort)style_class->style;
#ifdef FT_DEBUG_LEVEL_TRACE
else
FT_TRACE4(( "*" ));
@@ -418,88 +423,150 @@
};
- FT_Error
- af_get_char_index( AF_StyleMetrics metrics,
- FT_ULong charcode,
- FT_ULong *codepoint,
- FT_Long *y_offset )
+ void*
+ af_shaper_buf_create( FT_Face face )
{
- AF_StyleClass style_class;
+ FT_UNUSED( face );
+ return (void*)hb_buffer_create();
+ }
+
+
+ void
+ af_shaper_buf_destroy( FT_Face face,
+ void* buf )
+ {
+ FT_UNUSED( face );
+
+ hb_buffer_destroy( (hb_buffer_t*)buf );
+ }
+
+
+ const char*
+ af_shaper_get_cluster( const char* p,
+ AF_StyleMetrics metrics,
+ void* buf_,
+ unsigned int* count )
+ {
+ AF_StyleClass style_class;
const hb_feature_t* feature;
+ FT_Int upem;
+ const char* q;
+ int len;
- FT_ULong in_idx, out_idx;
+ hb_buffer_t* buf = (hb_buffer_t*)buf_;
+ hb_font_t* font;
+ hb_codepoint_t dummy;
- if ( !metrics )
- return FT_THROW( Invalid_Argument );
-
- in_idx = FT_Get_Char_Index( metrics->globals->face, charcode );
-
+ upem = (FT_Int)metrics->globals->face->units_per_EM;
style_class = metrics->style_class;
+ feature = features[style_class->coverage];
- feature = features[style_class->coverage];
+ font = metrics->globals->hb_font;
+
+ /* we shape at a size of units per EM; this means font units */
+ hb_font_set_scale( font, upem, upem );
+
+ while ( *p == ' ' )
+ p++;
+
+ /* count bytes up to next space (or end of buffer) */
+ q = p;
+ while ( !( *q == ' ' || *q == '\0' ) )
+ GET_UTF8_CHAR( dummy, q );
+ len = (int)( q - p );
+
+ /* feed character(s) to the HarfBuzz buffer */
+ hb_buffer_clear_contents( buf );
+ hb_buffer_add_utf8( buf, p, len, 0, len );
+
+ /* we let HarfBuzz guess the script and writing direction */
+ hb_buffer_guess_segment_properties( buf );
+
+ /* shape buffer, which means conversion from character codes to */
+ /* glyph indices, possibly applying a feature */
+ hb_shape( font, buf, feature, feature ? 1 : 0 );
if ( feature )
{
- FT_Int upem = (FT_Int)metrics->globals->face->units_per_EM;
+ hb_buffer_t* hb_buf = metrics->globals->hb_buf;
- hb_font_t* font = metrics->globals->hb_font;
- hb_buffer_t* buf = hb_buffer_create();
+ unsigned int gcount;
+ hb_glyph_info_t* ginfo;
- uint32_t c = (uint32_t)charcode;
-
- hb_glyph_info_t* ginfo;
- hb_glyph_position_t* gpos;
- unsigned int gcount;
+ unsigned int hb_gcount;
+ hb_glyph_info_t* hb_ginfo;
- /* we shape at a size of units per EM; this means font units */
- hb_font_set_scale( font, upem, upem );
+ /* we have to check whether applying a feature does actually change */
+ /* glyph indices; otherwise the affected glyph or glyphs aren't */
+ /* available at all in the feature */
- /* XXX: is this sufficient for a single character of any script? */
- hb_buffer_set_direction( buf, HB_DIRECTION_LTR );
- hb_buffer_set_script( buf, scripts[style_class->script] );
+ hb_buffer_clear_contents( hb_buf );
+ hb_buffer_add_utf8( hb_buf, p, len, 0, len );
+ hb_buffer_guess_segment_properties( hb_buf );
+ hb_shape( font, hb_buf, NULL, 0 );
- /* we add one character to `buf' ... */
- hb_buffer_add_utf32( buf, &c, 1, 0, 1 );
+ ginfo = hb_buffer_get_glyph_infos( buf, &gcount );
+ hb_ginfo = hb_buffer_get_glyph_infos( hb_buf, &hb_gcount );
- /* ... and apply one feature */
- hb_shape( font, buf, feature, 1 );
-
- ginfo = hb_buffer_get_glyph_infos( buf, &gcount );
- gpos = hb_buffer_get_glyph_positions( buf, &gcount );
-
- out_idx = ginfo[0].codepoint;
-
- /* getting the same index indicates no substitution, */
- /* which means that the glyph isn't available in the feature */
- if ( in_idx == out_idx )
+ if ( gcount == hb_gcount )
{
- *codepoint = 0;
- *y_offset = 0;
- }
- else
- {
- *codepoint = out_idx;
- *y_offset = gpos[0].y_offset;
- }
+ unsigned int i;
- hb_buffer_destroy( buf );
+
+ for (i = 0; i < gcount; i++ )
+ if ( ginfo[i].codepoint != hb_ginfo[i].codepoint )
+ break;
+
+ if ( i == gcount )
+ {
+ /* both buffers have identical glyph indices */
+ hb_buffer_clear_contents( buf );
+ }
+ }
+ }
+
+ *count = hb_buffer_get_length( buf );
#ifdef FT_DEBUG_LEVEL_TRACE
- if ( gcount > 1 )
- FT_TRACE1(( "af_get_char_index:"
- " input character mapped to multiple glyphs\n" ));
+ if ( feature && *count > 1 )
+ FT_TRACE1(( "af_shaper_get_cluster:"
+ " input character mapped to multiple glyphs\n" ));
#endif
- }
- else
- {
- *codepoint = in_idx;
- *y_offset = 0;
- }
- return FT_Err_Ok;
+ return q;
+ }
+
+
+ FT_ULong
+ af_shaper_get_elem( AF_StyleMetrics metrics,
+ void* buf_,
+ unsigned int idx,
+ FT_Long* advance,
+ FT_Long* y_offset )
+ {
+ hb_buffer_t* buf = (hb_buffer_t*)buf_;
+ hb_glyph_info_t* ginfo;
+ hb_glyph_position_t* gpos;
+ unsigned int gcount;
+
+ FT_UNUSED( metrics );
+
+
+ ginfo = hb_buffer_get_glyph_infos( buf, &gcount );
+ gpos = hb_buffer_get_glyph_positions( buf, &gcount );
+
+ if ( idx >= gcount )
+ return 0;
+
+ if ( advance )
+ *advance = gpos[idx].x_advance;
+ if ( y_offset )
+ *y_offset = gpos[idx].y_offset;
+
+ return ginfo[idx].codepoint;
}
@@ -507,36 +574,106 @@
FT_Error
- af_get_coverage( AF_FaceGlobals globals,
- AF_StyleClass style_class,
- FT_Byte* gstyles )
+ af_shaper_get_coverage( AF_FaceGlobals globals,
+ AF_StyleClass style_class,
+ FT_UShort* gstyles,
+ FT_Bool default_script )
{
FT_UNUSED( globals );
FT_UNUSED( style_class );
FT_UNUSED( gstyles );
+ FT_UNUSED( default_script );
return FT_Err_Ok;
}
- FT_Error
- af_get_char_index( AF_StyleMetrics metrics,
- FT_ULong charcode,
- FT_ULong *codepoint,
- FT_Long *y_offset )
+ void*
+ af_shaper_buf_create( FT_Face face )
{
- FT_Face face;
+ FT_Error error;
+ FT_Memory memory = face->memory;
+ FT_ULong* buf;
- if ( !metrics )
- return FT_THROW( Invalid_Argument );
+ FT_MEM_ALLOC( buf, sizeof ( FT_ULong ) );
- face = metrics->globals->face;
+ return (void*)buf;
+ }
- *codepoint = FT_Get_Char_Index( face, charcode );
- *y_offset = 0;
- return FT_Err_Ok;
+ void
+ af_shaper_buf_destroy( FT_Face face,
+ void* buf )
+ {
+ FT_Memory memory = face->memory;
+
+
+ FT_FREE( buf );
+ }
+
+
+ const char*
+ af_shaper_get_cluster( const char* p,
+ AF_StyleMetrics metrics,
+ void* buf_,
+ unsigned int* count )
+ {
+ FT_Face face = metrics->globals->face;
+ FT_ULong ch, dummy = 0;
+ FT_ULong* buf = (FT_ULong*)buf_;
+
+
+ while ( *p == ' ' )
+ p++;
+
+ GET_UTF8_CHAR( ch, p );
+
+ /* since we don't have an engine to handle clusters, */
+ /* we scan the characters but return zero */
+ while ( !( *p == ' ' || *p == '\0' ) )
+ GET_UTF8_CHAR( dummy, p );
+
+ if ( dummy )
+ {
+ *buf = 0;
+ *count = 0;
+ }
+ else
+ {
+ *buf = FT_Get_Char_Index( face, ch );
+ *count = 1;
+ }
+
+ return p;
+ }
+
+
+ FT_ULong
+ af_shaper_get_elem( AF_StyleMetrics metrics,
+ void* buf_,
+ unsigned int idx,
+ FT_Long* advance,
+ FT_Long* y_offset )
+ {
+ FT_Face face = metrics->globals->face;
+ FT_ULong glyph_index = *(FT_ULong*)buf_;
+
+ FT_UNUSED( idx );
+
+
+ if ( advance )
+ FT_Get_Advance( face,
+ glyph_index,
+ FT_LOAD_NO_SCALE |
+ FT_LOAD_NO_HINTING |
+ FT_LOAD_IGNORE_TRANSFORM,
+ advance );
+
+ if ( y_offset )
+ *y_offset = 0;
+
+ return glyph_index;
}
diff --git a/src/autofit/afshaper.h b/src/autofit/afshaper.h
new file mode 100644
index 0000000..7efd9f6
--- /dev/null
+++ b/src/autofit/afshaper.h
@@ -0,0 +1,72 @@
+/***************************************************************************/
+/* */
+/* afshaper.h */
+/* */
+/* HarfBuzz interface for accessing OpenType features (specification). */
+/* */
+/* Copyright 2013-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef AFSHAPER_H_
+#define AFSHAPER_H_
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+
+#ifdef FT_CONFIG_OPTION_USE_HARFBUZZ
+
+#include <hb.h>
+#include <hb-ot.h>
+#include <hb-ft.h>
+
+#endif
+
+
+FT_BEGIN_HEADER
+
+ FT_Error
+ af_shaper_get_coverage( AF_FaceGlobals globals,
+ AF_StyleClass style_class,
+ FT_UShort* gstyles,
+ FT_Bool default_script );
+
+
+ void*
+ af_shaper_buf_create( FT_Face face );
+
+ void
+ af_shaper_buf_destroy( FT_Face face,
+ void* buf );
+
+ const char*
+ af_shaper_get_cluster( const char* p,
+ AF_StyleMetrics metrics,
+ void* buf_,
+ unsigned int* count );
+
+ FT_ULong
+ af_shaper_get_elem( AF_StyleMetrics metrics,
+ void* buf_,
+ unsigned int idx,
+ FT_Long* x_advance,
+ FT_Long* y_offset );
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* AFSHAPER_H_ */
+
+
+/* END */
diff --git a/src/autofit/afstyles.h b/src/autofit/afstyles.h
index bfd5bb9..e2688b3 100644
--- a/src/autofit/afstyles.h
+++ b/src/autofit/afstyles.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter styles (specification only). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -27,7 +27,9 @@
/* coverage. */
/* */
/* Note that styles using `AF_COVERAGE_DEFAULT' should always */
- /* come after styles with other coverages. */
+ /* come after styles with other coverages. Also note that */
+ /* fallback scripts only use `AF_COVERAGE_DEFAULT' for its */
+ /* style. */
/* */
/* Example: */
/* */
@@ -50,10 +52,10 @@
#undef META_STYLE_LATIN
#define META_STYLE_LATIN( s, S, ds ) \
STYLE_LATIN( s, S, c2cp, C2CP, ds, \
- "petite capticals from capitals", \
+ "petite capitals from capitals", \
PETITE_CAPITALS_FROM_CAPITALS ) \
STYLE_LATIN( s, S, c2sc, C2SC, ds, \
- "small capticals from capitals", \
+ "small capitals from capitals", \
SMALL_CAPITALS_FROM_CAPITALS ) \
STYLE_LATIN( s, S, ordn, ORDN, ds, \
"ordinals", \
@@ -81,6 +83,13 @@
DEFAULT )
+ STYLE( adlm_dflt, ADLM_DFLT,
+ "Adlam default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_ADLM,
+ AF_BLUE_STRINGSET_ADLM,
+ AF_COVERAGE_DEFAULT )
+
STYLE( arab_dflt, ARAB_DFLT,
"Arabic default style",
AF_WRITING_SYSTEM_LATIN,
@@ -88,23 +97,206 @@
AF_BLUE_STRINGSET_ARAB,
AF_COVERAGE_DEFAULT )
+ STYLE( armn_dflt, ARMN_DFLT,
+ "Armenian default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_ARMN,
+ AF_BLUE_STRINGSET_ARMN,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( avst_dflt, AVST_DFLT,
+ "Avestan default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_AVST,
+ AF_BLUE_STRINGSET_AVST,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( bamu_dflt, BAMU_DFLT,
+ "Bamum default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_BAMU,
+ AF_BLUE_STRINGSET_BAMU,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( beng_dflt, BENG_DFLT,
+ "Bengali default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_BENG,
+ AF_BLUE_STRINGSET_BENG,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( buhd_dflt, BUHD_DFLT,
+ "Buhid default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_BUHD,
+ AF_BLUE_STRINGSET_BUHD,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( cakm_dflt, CAKM_DFLT,
+ "Chakma default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_CAKM,
+ AF_BLUE_STRINGSET_CAKM,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( cans_dflt, CANS_DFLT,
+ "Canadian Syllabics default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_CANS,
+ AF_BLUE_STRINGSET_CANS,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( cari_dflt, CARI_DFLT,
+ "Carian default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_CARI,
+ AF_BLUE_STRINGSET_CARI,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( cher_dflt, CHER_DFLT,
+ "Cherokee default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_CHER,
+ AF_BLUE_STRINGSET_CHER,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( copt_dflt, COPT_DFLT,
+ "Coptic default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_COPT,
+ AF_BLUE_STRINGSET_COPT,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( cprt_dflt, CPRT_DFLT,
+ "Cypriot default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_CPRT,
+ AF_BLUE_STRINGSET_CPRT,
+ AF_COVERAGE_DEFAULT )
+
META_STYLE_LATIN( cyrl, CYRL, "Cyrillic" )
+ STYLE( deva_dflt, DEVA_DFLT,
+ "Devanagari default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_DEVA,
+ AF_BLUE_STRINGSET_DEVA,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( dsrt_dflt, DSRT_DFLT,
+ "Deseret default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_DSRT,
+ AF_BLUE_STRINGSET_DSRT,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( ethi_dflt, ETHI_DFLT,
+ "Ethiopic default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_ETHI,
+ AF_BLUE_STRINGSET_ETHI,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( geor_dflt, GEOR_DFLT,
+ "Georgian (Mkhedruli) default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_GEOR,
+ AF_BLUE_STRINGSET_GEOR,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( geok_dflt, GEOK_DFLT,
+ "Georgian (Khutsuri) default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_GEOK,
+ AF_BLUE_STRINGSET_GEOK,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( glag_dflt, GLAG_DFLT,
+ "Glagolitic default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_GLAG,
+ AF_BLUE_STRINGSET_GLAG,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( goth_dflt, GOTH_DFLT,
+ "Gothic default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_GOTH,
+ AF_BLUE_STRINGSET_GOTH,
+ AF_COVERAGE_DEFAULT )
+
META_STYLE_LATIN( grek, GREK, "Greek" )
+ STYLE( gujr_dflt, GUJR_DFLT,
+ "Gujarati default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_GUJR,
+ AF_BLUE_STRINGSET_GUJR,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( guru_dflt, GURU_DFLT,
+ "Gurmukhi default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_GURU,
+ AF_BLUE_STRINGSET_GURU,
+ AF_COVERAGE_DEFAULT )
+
STYLE( hebr_dflt, HEBR_DFLT,
"Hebrew default style",
AF_WRITING_SYSTEM_LATIN,
AF_SCRIPT_HEBR,
AF_BLUE_STRINGSET_HEBR,
AF_COVERAGE_DEFAULT )
+
+ STYLE( kali_dflt, KALI_DFLT,
+ "Kayah Li default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_KALI,
+ AF_BLUE_STRINGSET_KALI,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( khmr_dflt, KHMR_DFLT,
+ "Khmer default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_KHMR,
+ AF_BLUE_STRINGSET_KHMR,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( khms_dflt, KHMS_DFLT,
+ "Khmer Symbols default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_KHMS,
+ AF_BLUE_STRINGSET_KHMS,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( knda_dflt, KNDA_DFLT,
+ "Kannada default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_KNDA,
+ AF_BLUE_STRINGSET_KNDA,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( lao_dflt, LAO_DFLT,
+ "Lao default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_LAO,
+ AF_BLUE_STRINGSET_LAO,
+ AF_COVERAGE_DEFAULT )
+
META_STYLE_LATIN( latn, LATN, "Latin" )
- STYLE( deva_dflt, DEVA_DFLT,
- "Devanagari default style",
+ STYLE( latb_dflt, LATB_DFLT,
+ "Latin subscript fallback default style",
AF_WRITING_SYSTEM_LATIN,
- AF_SCRIPT_DEVA,
- AF_BLUE_STRINGSET_DEVA,
+ AF_SCRIPT_LATB,
+ AF_BLUE_STRINGSET_LATB,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( latp_dflt, LATP_DFLT,
+ "Latin superscript fallback default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_LATP,
+ AF_BLUE_STRINGSET_LATP,
AF_COVERAGE_DEFAULT )
#ifdef FT_OPTION_AUTOFIT2
@@ -116,11 +308,109 @@
AF_COVERAGE_DEFAULT )
#endif
+ STYLE( lisu_dflt, LISU_DFLT,
+ "Lisu default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_LISU,
+ AF_BLUE_STRINGSET_LISU,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( mlym_dflt, MLYM_DFLT,
+ "Malayalam default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_MLYM,
+ AF_BLUE_STRINGSET_MLYM,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( mymr_dflt, MYMR_DFLT,
+ "Myanmar default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_MYMR,
+ AF_BLUE_STRINGSET_MYMR,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( nkoo_dflt, NKOO_DFLT,
+ "N'Ko default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_NKOO,
+ AF_BLUE_STRINGSET_NKOO,
+ AF_COVERAGE_DEFAULT )
+
STYLE( none_dflt, NONE_DFLT,
"no style",
AF_WRITING_SYSTEM_DUMMY,
AF_SCRIPT_NONE,
- (AF_Blue_Stringset)0,
+ AF_BLUE_STRINGSET_NONE,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( olck_dflt, OLCK_DFLT,
+ "Ol Chiki default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_OLCK,
+ AF_BLUE_STRINGSET_OLCK,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( orkh_dflt, ORKH_DFLT,
+ "Old Turkic default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_ORKH,
+ AF_BLUE_STRINGSET_ORKH,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( osge_dflt, OSGE_DFLT,
+ "Osage default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_OSGE,
+ AF_BLUE_STRINGSET_OSGE,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( osma_dflt, OSMA_DFLT,
+ "Osmanya default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_OSMA,
+ AF_BLUE_STRINGSET_OSMA,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( saur_dflt, SAUR_DFLT,
+ "Saurashtra default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_SAUR,
+ AF_BLUE_STRINGSET_SAUR,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( shaw_dflt, SHAW_DFLT,
+ "Shavian default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_SHAW,
+ AF_BLUE_STRINGSET_SHAW,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( sinh_dflt, SINH_DFLT,
+ "Sinhala default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_SINH,
+ AF_BLUE_STRINGSET_SINH,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( sund_dflt, SUND_DFLT,
+ "Sundanese default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_SUND,
+ AF_BLUE_STRINGSET_SUND,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( taml_dflt, TAML_DFLT,
+ "Tamil default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_TAML,
+ AF_BLUE_STRINGSET_TAML,
+ AF_COVERAGE_DEFAULT )
+
+ STYLE( tavt_dflt, TAVT_DFLT,
+ "Tai Viet default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_TAVT,
+ AF_BLUE_STRINGSET_TAVT,
AF_COVERAGE_DEFAULT )
STYLE( telu_dflt, TELU_DFLT,
@@ -130,6 +420,13 @@
AF_BLUE_STRINGSET_TELU,
AF_COVERAGE_DEFAULT )
+ STYLE( tfng_dflt, TFNG_DFLT,
+ "Tifinagh default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_TFNG,
+ AF_BLUE_STRINGSET_TFNG,
+ AF_COVERAGE_DEFAULT )
+
STYLE( thai_dflt, THAI_DFLT,
"Thai default style",
AF_WRITING_SYSTEM_LATIN,
@@ -137,6 +434,13 @@
AF_BLUE_STRINGSET_THAI,
AF_COVERAGE_DEFAULT )
+ STYLE( vaii_dflt, VAII_DFLT,
+ "Vai default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_VAII,
+ AF_BLUE_STRINGSET_VAII,
+ AF_COVERAGE_DEFAULT )
+
#ifdef AF_CONFIG_OPTION_INDIC
/* no blue stringset support for the Indic writing system yet */
@@ -149,17 +453,9 @@
(AF_Blue_Stringset)0, \
AF_COVERAGE_DEFAULT )
- STYLE_DEFAULT_INDIC( beng, BENG, "Bengali" )
- STYLE_DEFAULT_INDIC( gujr, GUJR, "Gujarati" )
- STYLE_DEFAULT_INDIC( guru, GURU, "Gurmukhi" )
- STYLE_DEFAULT_INDIC( knda, KNDA, "Kannada" )
STYLE_DEFAULT_INDIC( limb, LIMB, "Limbu" )
- STYLE_DEFAULT_INDIC( mlym, MLYM, "Malayalam" )
STYLE_DEFAULT_INDIC( orya, ORYA, "Oriya" )
- STYLE_DEFAULT_INDIC( sinh, SINH, "Sinhala" )
- STYLE_DEFAULT_INDIC( sund, SUND, "Sundanese" )
STYLE_DEFAULT_INDIC( sylo, SYLO, "Syloti Nagri" )
- STYLE_DEFAULT_INDIC( taml, TAML, "Tamil" )
STYLE_DEFAULT_INDIC( tibt, TIBT, "Tibetan" )
#endif /* AF_CONFIG_OPTION_INDIC */
diff --git a/src/autofit/aftypes.h b/src/autofit/aftypes.h
index 78e3fd7..6bd8c89 100644
--- a/src/autofit/aftypes.h
+++ b/src/autofit/aftypes.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter types (specification only). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,15 +22,15 @@
* Its main feature is the ability to differentiate between different
* writing systems and scripts in order to apply specific rules.
*
- * The code has also been compartmentized into several entities that
+ * The code has also been compartmentalized into several entities that
* should make algorithmic experimentation easier than with the old
* code.
*
*************************************************************************/
-#ifndef __AFTYPES_H__
-#define __AFTYPES_H__
+#ifndef AFTYPES_H_
+#define AFTYPES_H_
#include <ft2build.h>
@@ -41,6 +41,10 @@
#include "afblue.h"
+#ifdef FT_DEBUG_AUTOFIT
+#include FT_CONFIG_STANDARD_LIBRARY_H
+#endif
+
FT_BEGIN_HEADER
@@ -54,8 +58,6 @@
#ifdef FT_DEBUG_AUTOFIT
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
extern int _af_debug_disable_horz_hints;
extern int _af_debug_disable_vert_hints;
extern int _af_debug_disable_blue_hints;
@@ -74,9 +76,9 @@
typedef struct AF_WidthRec_
{
- FT_Pos org; /* original position/width in font units */
- FT_Pos cur; /* current/scaled position/width in device sub-pixels */
- FT_Pos fit; /* current/fitted position/width in device sub-pixels */
+ FT_Pos org; /* original position/width in font units */
+ FT_Pos cur; /* current/scaled position/width in device subpixels */
+ FT_Pos fit; /* current/fitted position/width in device subpixels */
} AF_WidthRec, *AF_Width;
@@ -209,13 +211,19 @@
typedef void
(*AF_WritingSystem_DoneMetricsFunc)( AF_StyleMetrics metrics );
+ typedef void
+ (*AF_WritingSystem_GetStdWidthsFunc)( AF_StyleMetrics metrics,
+ FT_Pos* stdHW,
+ FT_Pos* stdVW );
+
typedef FT_Error
(*AF_WritingSystem_InitHintsFunc)( AF_GlyphHints hints,
AF_StyleMetrics metrics );
- typedef void
- (*AF_WritingSystem_ApplyHintsFunc)( AF_GlyphHints hints,
+ typedef FT_Error
+ (*AF_WritingSystem_ApplyHintsFunc)( FT_UInt glyph_index,
+ AF_GlyphHints hints,
FT_Outline* outline,
AF_StyleMetrics metrics );
@@ -247,7 +255,7 @@
* outline according to the results of the glyph analyzer.
*/
-#define __AFWRTSYS_H__ /* don't load header files */
+#define AFWRTSYS_H_ /* don't load header files */
#undef WRITING_SYSTEM
#define WRITING_SYSTEM( ws, WS ) \
AF_WRITING_SYSTEM_ ## WS,
@@ -262,7 +270,7 @@
} AF_WritingSystem;
-#undef __AFWRTSYS_H__
+#undef AFWRTSYS_H_
typedef struct AF_WritingSystemClassRec_
@@ -273,6 +281,7 @@
AF_WritingSystem_InitMetricsFunc style_metrics_init;
AF_WritingSystem_ScaleMetricsFunc style_metrics_scale;
AF_WritingSystem_DoneMetricsFunc style_metrics_done;
+ AF_WritingSystem_GetStdWidthsFunc style_metrics_getstdw;
AF_WritingSystem_InitHintsFunc style_hints_init;
AF_WritingSystem_ApplyHintsFunc style_hints_apply;
@@ -291,15 +300,16 @@
/*************************************************************************/
/*
- * Each script is associated with a set of Unicode ranges that gets used
- * to test whether the font face supports the script.
+ * Each script is associated with two sets of Unicode ranges to test
+ * whether the font face supports the script, and which non-base
+ * characters the script contains.
*
* We use four-letter script tags from the OpenType specification,
* extended by `NONE', which indicates `no script'.
*/
#undef SCRIPT
-#define SCRIPT( s, S, d, h, sc1, sc2, sc3 ) \
+#define SCRIPT( s, S, d, h, H, ss ) \
AF_SCRIPT_ ## S,
/* The list of known scripts. */
@@ -329,11 +339,13 @@
{
AF_Script script;
- AF_Script_UniRange script_uni_ranges; /* last must be { 0, 0 } */
+ /* last element in the ranges must be { 0, 0 } */
+ AF_Script_UniRange script_uni_ranges;
+ AF_Script_UniRange script_uni_nonbase_ranges;
- FT_UInt32 standard_char1; /* for default width and height */
- FT_UInt32 standard_char2; /* ditto */
- FT_UInt32 standard_char3; /* ditto */
+ FT_Bool top_to_bottom_hinting;
+
+ const char* standard_charstring; /* for default width and height */
} AF_ScriptClassRec;
@@ -469,6 +481,10 @@
} AF_StyleMetricsRec;
+#define AF_HINTING_BOTTOM_TO_TOP 0
+#define AF_HINTING_TOP_TO_BOTTOM 1
+
+
/* Declare and define vtables for classes */
#ifndef FT_CONFIG_OPTION_PIC
@@ -483,6 +499,7 @@
m_init, \
m_scale, \
m_done, \
+ m_stdw, \
h_init, \
h_apply ) \
FT_CALLBACK_TABLE_DEF \
@@ -495,6 +512,7 @@
m_init, \
m_scale, \
m_done, \
+ m_stdw, \
\
h_init, \
h_apply \
@@ -509,17 +527,17 @@
script_class, \
script, \
ranges, \
- std_char1, \
- std_char2, \
- std_char3 ) \
+ nonbase_ranges, \
+ top_to_bottom, \
+ std_charstring ) \
FT_CALLBACK_TABLE_DEF \
const AF_ScriptClassRec script_class = \
{ \
script, \
ranges, \
- std_char1, \
- std_char2, \
- std_char3 \
+ nonbase_ranges, \
+ top_to_bottom, \
+ std_charstring, \
};
@@ -557,21 +575,23 @@
m_init, \
m_scale, \
m_done, \
+ m_stdw, \
h_init, \
h_apply ) \
FT_LOCAL_DEF( void ) \
FT_Init_Class_ ## writing_system_class( AF_WritingSystemClassRec* ac ) \
{ \
- ac->writing_system = system; \
+ ac->writing_system = system; \
\
- ac->style_metrics_size = m_size; \
+ ac->style_metrics_size = m_size; \
\
- ac->style_metrics_init = m_init; \
- ac->style_metrics_scale = m_scale; \
- ac->style_metrics_done = m_done; \
+ ac->style_metrics_init = m_init; \
+ ac->style_metrics_scale = m_scale; \
+ ac->style_metrics_done = m_done; \
+ ac->style_metrics_getstdw = m_stdw; \
\
- ac->style_hints_init = h_init; \
- ac->style_hints_apply = h_apply; \
+ ac->style_hints_init = h_init; \
+ ac->style_hints_apply = h_apply; \
}
@@ -583,17 +603,17 @@
script_class, \
script_, \
ranges, \
- std_char1, \
- std_char2, \
- std_char3 ) \
+ nonbase_ranges, \
+ top_to_bottom, \
+ std_charstring ) \
FT_LOCAL_DEF( void ) \
FT_Init_Class_ ## script_class( AF_ScriptClassRec* ac ) \
{ \
- ac->script = script_; \
- ac->script_uni_ranges = ranges; \
- ac->standard_char1 = std_char1; \
- ac->standard_char2 = std_char2; \
- ac->standard_char3 = std_char3; \
+ ac->script = script_; \
+ ac->script_uni_ranges = ranges; \
+ ac->script_uni_nonbase_ranges = nonbase_ranges; \
+ ac->top_to_bottom_hinting = top_to_bottom; \
+ ac->standard_charstring = std_charstring; \
}
@@ -625,7 +645,7 @@
FT_END_HEADER
-#endif /* __AFTYPES_H__ */
+#endif /* AFTYPES_H_ */
/* END */
diff --git a/src/autofit/afwarp.c b/src/autofit/afwarp.c
index 59af4f0..2a75ea7 100644
--- a/src/autofit/afwarp.c
+++ b/src/autofit/afwarp.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter warping algorithm (body). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -98,7 +98,6 @@
if ( xx1min + w < warper->x2min )
xx1min = warper->x2min - w;
- xx1max = warper->x1max;
if ( xx1max + w > warper->x2max )
xx1max = warper->x2max - w;
@@ -193,7 +192,7 @@
warper->best_scale = org_scale;
warper->best_delta = org_delta;
- warper->best_score = INT_MIN;
+ warper->best_score = FT_INT_MIN;
warper->best_distort = 0;
axis = &hints->axis[dim];
diff --git a/src/autofit/afwarp.h b/src/autofit/afwarp.h
index 5a6208a..520b1be 100644
--- a/src/autofit/afwarp.h
+++ b/src/autofit/afwarp.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter warping algorithm (specification). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __AFWARP_H__
-#define __AFWARP_H__
+#ifndef AFWARP_H_
+#define AFWARP_H_
#include "afhints.h"
@@ -25,7 +25,7 @@
#define AF_WARPER_SCALE
-#define AF_WARPER_FLOOR( x ) ( (x) & ~TYPEOF( x )63 )
+#define AF_WARPER_FLOOR( x ) ( (x) & ~FT_TYPEOF( x )63 )
#define AF_WARPER_CEIL( x ) AF_WARPER_FLOOR( (x) + 63 )
@@ -58,7 +58,7 @@
FT_END_HEADER
-#endif /* __AFWARP_H__ */
+#endif /* AFWARP_H_ */
/* END */
diff --git a/src/autofit/afwrtsys.h b/src/autofit/afwrtsys.h
index 4aa89d2..4675f32 100644
--- a/src/autofit/afwrtsys.h
+++ b/src/autofit/afwrtsys.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter writing systems (specification only). */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __AFWRTSYS_H__
-#define __AFWRTSYS_H__
+#ifndef AFWRTSYS_H_
+#define AFWRTSYS_H_
/* Since preprocessor directives can't create other preprocessor */
/* directives, we have to include the header files manually. */
@@ -30,7 +30,7 @@
#include "aflatin2.h"
#endif
-#endif /* __AFWRTSYS_H__ */
+#endif /* AFWRTSYS_H_ */
/* The following part can be included multiple times. */
diff --git a/src/autofit/autofit.c b/src/autofit/autofit.c
index b6ed4a0..c160516 100644
--- a/src/autofit/autofit.c
+++ b/src/autofit/autofit.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter module (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,29 +18,22 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
#include <ft2build.h>
-#include "afpic.c"
+
#include "afangles.c"
#include "afblue.c"
+#include "afcjk.c"
+#include "afdummy.c"
#include "afglobal.c"
#include "afhints.c"
-
-#include "afranges.c"
-
-#include "afdummy.c"
-#include "aflatin.c"
-#ifdef FT_OPTION_AUTOFIT2
-#include "aflatin2.c"
-#endif
-#include "afcjk.c"
#include "afindic.c"
-
-#include "hbshim.c"
-
+#include "aflatin.c"
+#include "aflatin2.c"
#include "afloader.c"
#include "afmodule.c"
-
-#ifdef AF_CONFIG_OPTION_USE_WARPER
+#include "afpic.c"
+#include "afranges.c"
+#include "afshaper.c"
#include "afwarp.c"
-#endif
+
/* END */
diff --git a/src/autofit/module.mk b/src/autofit/module.mk
index 3321438..ff05f83 100644
--- a/src/autofit/module.mk
+++ b/src/autofit/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2015 by
+# Copyright 2003-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/autofit/rules.mk b/src/autofit/rules.mk
index 6ef959f..75171b4 100644
--- a/src/autofit/rules.mk
+++ b/src/autofit/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2015 by
+# Copyright 2003-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -40,8 +40,8 @@
$(AUTOF_DIR)/afmodule.c \
$(AUTOF_DIR)/afpic.c \
$(AUTOF_DIR)/afranges.c \
- $(AUTOF_DIR)/afwarp.c \
- $(AUTOF_DIR)/hbshim.c
+ $(AUTOF_DIR)/afshaper.c \
+ $(AUTOF_DIR)/afwarp.c
# AUTOF driver headers
#
diff --git a/src/base/Jamfile b/src/base/Jamfile
index ce8114d..4994c1b 100644
--- a/src/base/Jamfile
+++ b/src/base/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/base Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -17,10 +17,23 @@
if $(FT2_MULTI)
{
- _sources = ftadvanc ftcalc ftdbgmem ftgloadr
- ftobjs ftoutln ftrfork ftsnames
- ftstream fttrigon ftutil
- basepic ftpic
+ _sources = basepic
+ ftadvanc
+ ftcalc
+ ftdbgmem
+ ftfntfmt
+ ftgloadr
+ fthash
+ ftlcdfil
+ ftobjs
+ ftoutln
+ ftpic
+ ftpsprop
+ ftrfork
+ ftsnames
+ ftstream
+ fttrigon
+ ftutil
;
}
else
@@ -34,13 +47,29 @@
# Add the optional/replaceable files.
#
{
- local _sources = bbox bdf bitmap debug gasp
- glyph gxval init lcdfil mm
- otval pfr stroke synth system
- type1 winfnt xf86 patent
+ local _sources = ftapi
+ ftbbox
+ ftbdf
+ ftbitmap
+ ftcid
+ ftdebug
+ ftfstype
+ ftgasp
+ ftglyph
+ ftgxval
+ ftinit
+ ftmm
+ ftotval
+ ftpatent
+ ftpfr
+ ftstroke
+ ftsynth
+ ftsystem
+ fttype1
+ ftwinfnt
;
- Library $(FT2_LIB) : ft$(_sources).c ;
+ Library $(FT2_LIB) : $(_sources).c ;
}
# Add Macintosh-specific file to the library when necessary.
diff --git a/src/base/basepic.c b/src/base/basepic.c
index 9850ed9..bc80406 100644
--- a/src/base/basepic.c
+++ b/src/base/basepic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for base. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/basepic.h b/src/base/basepic.h
index 51ecf9e..492d1ed 100644
--- a/src/base/basepic.h
+++ b/src/base/basepic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for base. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,14 +16,13 @@
/***************************************************************************/
-#ifndef __BASEPIC_H__
-#define __BASEPIC_H__
+#ifndef BASEPIC_H_
+#define BASEPIC_H_
-FT_BEGIN_HEADER
-
#include FT_INTERNAL_PIC_H
+
#ifndef FT_CONFIG_OPTION_PIC
#define FT_OUTLINE_GLYPH_CLASS_GET &ft_outline_glyph_class
@@ -43,6 +42,8 @@
#endif
+FT_BEGIN_HEADER
+
typedef struct BasePIC_
{
FT_Module_Class** default_module_classes;
@@ -78,13 +79,13 @@
FT_Error
ft_base_pic_init( FT_Library library );
+FT_END_HEADER
+
#endif /* FT_CONFIG_OPTION_PIC */
/* */
-FT_END_HEADER
-
-#endif /* __BASEPIC_H__ */
+#endif /* BASEPIC_H_ */
/* END */
diff --git a/src/base/ftadvanc.c b/src/base/ftadvanc.c
index f12908f..230c84d 100644
--- a/src/base/ftadvanc.c
+++ b/src/base/ftadvanc.c
@@ -4,7 +4,7 @@
/* */
/* Quick computation of advance widths (body). */
/* */
-/* Copyright 2008-2015 by */
+/* Copyright 2008-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -36,7 +36,7 @@
if ( flags & FT_LOAD_NO_SCALE )
return FT_Err_Ok;
- if ( face->size == NULL )
+ if ( !face->size )
return FT_THROW( Invalid_Size_Handle );
if ( flags & FT_LOAD_VERTICAL_LAYOUT )
@@ -60,8 +60,11 @@
/* - unscaled load */
/* - unhinted load */
/* - light-hinted load */
+ /* - if a variations font, it must have an `HVAR' or `VVAR' */
+ /* table (thus the old MM or GX fonts don't qualify; this */
+ /* gets checked by the driver-specific functions) */
-#define LOAD_ADVANCE_FAST_CHECK( flags ) \
+#define LOAD_ADVANCE_FAST_CHECK( face, flags ) \
( flags & ( FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING ) || \
FT_LOAD_TARGET_MODE( flags ) == FT_RENDER_MODE_LIGHT )
@@ -87,7 +90,7 @@
return FT_THROW( Invalid_Glyph_Index );
func = face->driver->clazz->get_advances;
- if ( func && LOAD_ADVANCE_FAST_CHECK( flags ) )
+ if ( func && LOAD_ADVANCE_FAST_CHECK( face, flags ) )
{
FT_Error error;
@@ -113,9 +116,12 @@
FT_Int32 flags,
FT_Fixed *padvances )
{
+ FT_Error error = FT_Err_Ok;
+
FT_Face_GetAdvancesFunc func;
- FT_UInt num, end, nn;
- FT_Error error = FT_Err_Ok;
+
+ FT_UInt num, end, nn;
+ FT_Int factor;
if ( !face )
@@ -133,7 +139,7 @@
return FT_Err_Ok;
func = face->driver->clazz->get_advances;
- if ( func && LOAD_ADVANCE_FAST_CHECK( flags ) )
+ if ( func && LOAD_ADVANCE_FAST_CHECK( face, flags ) )
{
error = func( face, start, count, flags, padvances );
if ( !error )
@@ -149,16 +155,17 @@
return FT_THROW( Unimplemented_Feature );
flags |= (FT_UInt32)FT_LOAD_ADVANCE_ONLY;
+ factor = ( flags & FT_LOAD_NO_SCALE ) ? 1 : 1024;
for ( nn = 0; nn < count; nn++ )
{
error = FT_Load_Glyph( face, start + nn, flags );
if ( error )
break;
- /* scale from 26.6 to 16.16 */
+ /* scale from 26.6 to 16.16, unless NO_SCALE was requested */
padvances[nn] = ( flags & FT_LOAD_VERTICAL_LAYOUT )
- ? face->glyph->advance.y << 10
- : face->glyph->advance.x << 10;
+ ? face->glyph->advance.y * factor
+ : face->glyph->advance.x * factor;
}
return error;
diff --git a/src/base/ftapi.c b/src/base/ftapi.c
index f22a181..32d6e95 100644
--- a/src/base/ftapi.c
+++ b/src/base/ftapi.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType compatibility functions (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -38,7 +38,7 @@
/*************************************************************************/
/*************************************************************************/
- /* backwards compatibility API */
+ /* backward compatibility API */
FT_BASE_DEF( void )
FT_New_Memory_Stream( FT_Library library,
diff --git a/src/base/ftbase.c b/src/base/ftbase.c
index 253dfb7..f914b9b 100644
--- a/src/base/ftbase.c
+++ b/src/base/ftbase.c
@@ -4,7 +4,7 @@
/* */
/* Single object library component (body only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,25 +17,26 @@
#include <ft2build.h>
-
#define FT_MAKE_OPTION_SINGLE_OBJECT
-#include "ftpic.c"
#include "basepic.c"
#include "ftadvanc.c"
#include "ftcalc.c"
#include "ftdbgmem.c"
+#include "ftfntfmt.c"
#include "ftgloadr.c"
+#include "fthash.c"
+#include "ftlcdfil.c"
+#include "ftmac.c"
#include "ftobjs.c"
#include "ftoutln.c"
+#include "ftpic.c"
+#include "ftpsprop.c"
#include "ftrfork.c"
#include "ftsnames.c"
#include "ftstream.c"
#include "fttrigon.c"
#include "ftutil.c"
-#ifdef FT_MACINTOSH
-#include "ftmac.c"
-#endif
/* END */
diff --git a/src/base/ftbase.h b/src/base/ftbase.h
index cb57f96..7e8cfad 100644
--- a/src/base/ftbase.h
+++ b/src/base/ftbase.h
@@ -2,9 +2,9 @@
/* */
/* ftbase.h */
/* */
-/* The FreeType private functions used in base module (specification). */
+/* Private functions used in the `base' module (specification). */
/* */
-/* Copyright 2008-2015 by */
+/* Copyright 2008-2018 by */
/* David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTBASE_H__
-#define __FTBASE_H__
+#ifndef FTBASE_H_
+#define FTBASE_H_
#include <ft2build.h>
@@ -27,6 +27,13 @@
FT_BEGIN_HEADER
+#ifdef FT_CONFIG_OPTION_MAC_FONTS
+
+ /* MacOS resource fork cannot exceed 16MB at least for Carbon code; */
+ /* see https://support.microsoft.com/en-us/kb/130437 */
+#define FT_MAC_RFORK_MAX_LEN 0x00FFFFFFUL
+
+
/* Assume the stream is sfnt-wrapped PS Type1 or sfnt-wrapped CID-keyed */
/* font, and try to load a face specified by the face_index. */
FT_LOCAL( FT_Error )
@@ -60,10 +67,12 @@
ft_raccess_rule_by_darwin_vfs( FT_Library library, FT_UInt rule_index );
#endif
+#endif /* FT_CONFIG_OPTION_MAC_FONTS */
+
FT_END_HEADER
-#endif /* __FTBASE_H__ */
+#endif /* FTBASE_H_ */
/* END */
diff --git a/src/base/ftbbox.c b/src/base/ftbbox.c
index 10df98d..151e85c 100644
--- a/src/base/ftbbox.c
+++ b/src/base/ftbbox.c
@@ -4,7 +4,7 @@
/* */
/* FreeType bbox computation (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
@@ -423,12 +423,15 @@
}
- FT_DEFINE_OUTLINE_FUNCS(bbox_interface,
- (FT_Outline_MoveTo_Func) BBox_Move_To,
- (FT_Outline_LineTo_Func) BBox_Line_To,
- (FT_Outline_ConicTo_Func)BBox_Conic_To,
- (FT_Outline_CubicTo_Func)BBox_Cubic_To,
- 0, 0
+ FT_DEFINE_OUTLINE_FUNCS(
+ bbox_interface,
+
+ (FT_Outline_MoveTo_Func) BBox_Move_To, /* move_to */
+ (FT_Outline_LineTo_Func) BBox_Line_To, /* line_to */
+ (FT_Outline_ConicTo_Func)BBox_Conic_To, /* conic_to */
+ (FT_Outline_CubicTo_Func)BBox_Cubic_To, /* cubic_to */
+ 0, /* shift */
+ 0 /* delta */
)
@@ -457,6 +460,7 @@
{
abbox->xMin = abbox->xMax = 0;
abbox->yMin = abbox->yMax = 0;
+
return 0;
}
@@ -468,10 +472,10 @@
for ( n = 0; n < outline->n_points; n++ )
{
- FT_UPDATE_BBOX( vec, cbox);
+ FT_UPDATE_BBOX( vec, cbox );
if ( FT_CURVE_TAG( outline->tags[n] ) == FT_CURVE_TAG_ON )
- FT_UPDATE_BBOX( vec, bbox);
+ FT_UPDATE_BBOX( vec, bbox );
vec++;
}
@@ -487,8 +491,10 @@
TBBox_Rec user;
#ifdef FT_CONFIG_OPTION_PIC
- FT_Outline_Funcs bbox_interface;
- Init_Class_bbox_interface(&bbox_interface);
+ FT_Outline_Funcs bbox_interface;
+
+
+ Init_Class_bbox_interface( &bbox_interface );
#endif
user.bbox = bbox;
diff --git a/src/base/ftbdf.c b/src/base/ftbdf.c
index aa72ddc..c4ea502 100644
--- a/src/base/ftbdf.c
+++ b/src/base/ftbdf.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing BDF-specific strings (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/ftbitmap.c b/src/base/ftbitmap.c
index a54572a..a974666 100644
--- a/src/base/ftbitmap.c
+++ b/src/base/ftbitmap.c
@@ -4,7 +4,7 @@
/* */
/* FreeType utility functions for bitmaps (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -76,7 +76,7 @@
source_pitch_sign = source->pitch < 0 ? -1 : 1;
target_pitch_sign = target->pitch < 0 ? -1 : 1;
- if ( source->buffer == NULL )
+ if ( !source->buffer )
{
*target = *source;
if ( source_pitch_sign != target_pitch_sign )
@@ -153,38 +153,36 @@
FT_UInt ypixels )
{
FT_Error error;
- int pitch;
- int new_pitch;
+ unsigned int pitch;
+ unsigned int new_pitch;
FT_UInt bpp;
- FT_UInt i, width, height;
+ FT_UInt width, height;
unsigned char* buffer = NULL;
width = bitmap->width;
height = bitmap->rows;
- pitch = bitmap->pitch;
- if ( pitch < 0 )
- pitch = -pitch;
+ pitch = (unsigned int)FT_ABS( bitmap->pitch );
switch ( bitmap->pixel_mode )
{
case FT_PIXEL_MODE_MONO:
bpp = 1;
- new_pitch = (int)( ( width + xpixels + 7 ) >> 3 );
+ new_pitch = ( width + xpixels + 7 ) >> 3;
break;
case FT_PIXEL_MODE_GRAY2:
bpp = 2;
- new_pitch = (int)( ( width + xpixels + 3 ) >> 2 );
+ new_pitch = ( width + xpixels + 3 ) >> 2;
break;
case FT_PIXEL_MODE_GRAY4:
bpp = 4;
- new_pitch = (int)( ( width + xpixels + 1 ) >> 1 );
+ new_pitch = ( width + xpixels + 1 ) >> 1;
break;
case FT_PIXEL_MODE_GRAY:
case FT_PIXEL_MODE_LCD:
case FT_PIXEL_MODE_LCD_V:
bpp = 8;
- new_pitch = (int)( width + xpixels );
+ new_pitch = width + xpixels;
break;
default:
return FT_THROW( Invalid_Glyph_Format );
@@ -194,7 +192,7 @@
if ( ypixels == 0 && new_pitch <= pitch )
{
/* zero the padding */
- FT_UInt bit_width = (FT_UInt)pitch * 8;
+ FT_UInt bit_width = pitch * 8;
FT_UInt bit_last = ( width + xpixels ) * bpp;
@@ -226,7 +224,7 @@
}
/* otherwise allocate new buffer */
- if ( FT_QALLOC_MULT( buffer, new_pitch, bitmap->rows + ypixels ) )
+ if ( FT_QALLOC_MULT( buffer, bitmap->rows + ypixels, new_pitch ) )
return error;
/* new rows get added at the top of the bitmap, */
@@ -235,31 +233,60 @@
{
FT_UInt len = ( width * bpp + 7 ) >> 3;
+ unsigned char* in = bitmap->buffer;
+ unsigned char* out = buffer;
- for ( i = 0; i < bitmap->rows; i++ )
- FT_MEM_COPY( buffer + (FT_UInt)new_pitch * ( ypixels + i ),
- bitmap->buffer + (FT_UInt)pitch * i,
- len );
+ unsigned char* limit = bitmap->buffer + pitch * bitmap->rows;
+ unsigned int delta = new_pitch - len;
+
+
+ FT_MEM_ZERO( out, new_pitch * ypixels );
+ out += new_pitch * ypixels;
+
+ while ( in < limit )
+ {
+ FT_MEM_COPY( out, in, len );
+ in += pitch;
+ out += len;
+
+ /* we use FT_QALLOC_MULT, which doesn't zero out the buffer; */
+ /* consequently, we have to manually zero out the remaining bytes */
+ FT_MEM_ZERO( out, delta );
+ out += delta;
+ }
}
else
{
FT_UInt len = ( width * bpp + 7 ) >> 3;
+ unsigned char* in = bitmap->buffer;
+ unsigned char* out = buffer;
- for ( i = 0; i < bitmap->rows; i++ )
- FT_MEM_COPY( buffer + (FT_UInt)new_pitch * i,
- bitmap->buffer + (FT_UInt)pitch * i,
- len );
+ unsigned char* limit = bitmap->buffer + pitch * bitmap->rows;
+ unsigned int delta = new_pitch - len;
+
+
+ while ( in < limit )
+ {
+ FT_MEM_COPY( out, in, len );
+ in += pitch;
+ out += len;
+
+ FT_MEM_ZERO( out, delta );
+ out += delta;
+ }
+
+ FT_MEM_ZERO( out, new_pitch * ypixels );
}
FT_FREE( bitmap->buffer );
bitmap->buffer = buffer;
- if ( bitmap->pitch < 0 )
- new_pitch = -new_pitch;
-
/* set pitch only, width and height are left untouched */
- bitmap->pitch = new_pitch;
+ if ( bitmap->pitch < 0 )
+ bitmap->pitch = -(int)new_pitch;
+ else
+ bitmap->pitch = (int)new_pitch;
return FT_Err_Ok;
}
@@ -351,7 +378,7 @@
}
/* for each row */
- for ( y = 0; y < bitmap->rows ; y++ )
+ for ( y = 0; y < bitmap->rows; y++ )
{
/*
* Horizontally:
@@ -444,7 +471,7 @@
* A gamma of 2.2 is fair to assume. And then, we need to
* undo the premultiplication too.
*
- * http://accessibility.kde.org/hsl-adjusted.php
+ * https://accessibility.kde.org/hsl-adjusted.php
*
* We do the computation with integers only, applying a gamma of 2.0.
* We guarantee 32-bit arithmetic to avoid overflow but the resulting
@@ -534,8 +561,7 @@
(FT_ULong)target->rows > FT_ULONG_MAX / (FT_ULong)target_pitch )
return FT_THROW( Invalid_Argument );
- if ( target->rows * (FT_ULong)target_pitch > old_size &&
- FT_QREALLOC( target->buffer,
+ if ( FT_QREALLOC( target->buffer,
old_size, target->rows * (FT_UInt)target_pitch ) )
return error;
diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c
index dca0e1d..f4ff45f 100644
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -4,7 +4,7 @@
/* */
/* Arithmetic computations (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -68,14 +68,15 @@
#define FT_COMPONENT trace_calc
- /* transfer sign leaving a positive number */
-#define FT_MOVE_SIGN( x, s ) \
- FT_BEGIN_STMNT \
- if ( x < 0 ) \
- { \
- x = -x; \
- s = -s; \
- } \
+ /* transfer sign, leaving a positive number; */
+ /* we need an unsigned value to safely negate INT_MIN (or LONG_MIN) */
+#define FT_MOVE_SIGN( x, x_unsigned, s ) \
+ FT_BEGIN_STMNT \
+ if ( x < 0 ) \
+ { \
+ x_unsigned = 0U - (x_unsigned); \
+ s = -s; \
+ } \
FT_END_STMNT
/* The following three functions are available regardless of whether */
@@ -86,8 +87,7 @@
FT_EXPORT_DEF( FT_Fixed )
FT_RoundFix( FT_Fixed a )
{
- return a >= 0 ? ( a + 0x8000L ) & ~0xFFFFL
- : -((-a + 0x8000L ) & ~0xFFFFL );
+ return ( ADD_LONG( a, 0x8000L - ( a < 0 ) ) ) & ~0xFFFFL;
}
@@ -96,8 +96,7 @@
FT_EXPORT_DEF( FT_Fixed )
FT_CeilFix( FT_Fixed a )
{
- return a >= 0 ? ( a + 0xFFFFL ) & ~0xFFFFL
- : -((-a + 0xFFFFL ) & ~0xFFFFL );
+ return ( ADD_LONG( a, 0xFFFFL ) ) & ~0xFFFFL;
}
@@ -106,8 +105,7 @@
FT_EXPORT_DEF( FT_Fixed )
FT_FloorFix( FT_Fixed a )
{
- return a >= 0 ? a & ~0xFFFFL
- : -((-a) & ~0xFFFFL );
+ return a & ~0xFFFFL;
}
#ifndef FT_MSB
@@ -182,20 +180,20 @@
FT_Long d_;
- FT_MOVE_SIGN( a_, s );
- FT_MOVE_SIGN( b_, s );
- FT_MOVE_SIGN( c_, s );
-
a = (FT_UInt64)a_;
b = (FT_UInt64)b_;
c = (FT_UInt64)c_;
+ FT_MOVE_SIGN( a_, a, s );
+ FT_MOVE_SIGN( b_, b, s );
+ FT_MOVE_SIGN( c_, c, s );
+
d = c > 0 ? ( a * b + ( c >> 1 ) ) / c
: 0x7FFFFFFFUL;
d_ = (FT_Long)d;
- return s < 0 ? -d_ : d_;
+ return s < 0 ? NEG_LONG( d_ ) : d_;
}
@@ -211,20 +209,20 @@
FT_Long d_;
- FT_MOVE_SIGN( a_, s );
- FT_MOVE_SIGN( b_, s );
- FT_MOVE_SIGN( c_, s );
-
a = (FT_UInt64)a_;
b = (FT_UInt64)b_;
c = (FT_UInt64)c_;
+ FT_MOVE_SIGN( a_, a, s );
+ FT_MOVE_SIGN( b_, b, s );
+ FT_MOVE_SIGN( c_, c, s );
+
d = c > 0 ? a * b / c
: 0x7FFFFFFFUL;
d_ = (FT_Long)d;
- return s < 0 ? -d_ : d_;
+ return s < 0 ? NEG_LONG( d_ ) : d_;
}
@@ -236,26 +234,14 @@
{
#ifdef FT_MULFIX_ASSEMBLER
- return FT_MULFIX_ASSEMBLER( a_, b_ );
+ return FT_MULFIX_ASSEMBLER( (FT_Int32)a_, (FT_Int32)b_ );
#else
- FT_Int s = 1;
- FT_UInt64 a, b, c;
- FT_Long c_;
+ FT_Int64 ab = (FT_Int64)a_ * (FT_Int64)b_;
-
- FT_MOVE_SIGN( a_, s );
- FT_MOVE_SIGN( b_, s );
-
- a = (FT_UInt64)a_;
- b = (FT_UInt64)b_;
-
- c = ( a * b + 0x8000UL ) >> 16;
-
- c_ = (FT_Long)c;
-
- return s < 0 ? -c_ : c_;
+ /* this requires arithmetic right shift of signed numbers */
+ return (FT_Long)( ( ab + 0x8000L - ( ab < 0 ) ) >> 16 );
#endif /* FT_MULFIX_ASSEMBLER */
}
@@ -272,18 +258,18 @@
FT_Long q_;
- FT_MOVE_SIGN( a_, s );
- FT_MOVE_SIGN( b_, s );
-
a = (FT_UInt64)a_;
b = (FT_UInt64)b_;
+ FT_MOVE_SIGN( a_, a, s );
+ FT_MOVE_SIGN( b_, b, s );
+
q = b > 0 ? ( ( a << 16 ) + ( b >> 1 ) ) / b
: 0x7FFFFFFFUL;
q_ = (FT_Long)q;
- return s < 0 ? -q_ : q_;
+ return s < 0 ? NEG_LONG( q_ ) : q_;
}
@@ -437,17 +423,14 @@
/* XXX: this function does not allow 64-bit arguments */
- if ( a_ == 0 || b_ == c_ )
- return a_;
-
- FT_MOVE_SIGN( a_, s );
- FT_MOVE_SIGN( b_, s );
- FT_MOVE_SIGN( c_, s );
-
a = (FT_UInt32)a_;
b = (FT_UInt32)b_;
c = (FT_UInt32)c_;
+ FT_MOVE_SIGN( a_, a, s );
+ FT_MOVE_SIGN( b_, b, s );
+ FT_MOVE_SIGN( c_, c, s );
+
if ( c == 0 )
a = 0x7FFFFFFFUL;
@@ -467,13 +450,13 @@
FT_Add64( &temp, &temp2, &temp );
/* last attempt to ditch long division */
- a = temp.hi == 0 ? temp.lo / c
- : ft_div64by32( temp.hi, temp.lo, c );
+ a = ( temp.hi == 0 ) ? temp.lo / c
+ : ft_div64by32( temp.hi, temp.lo, c );
}
a_ = (FT_Long)a;
- return s < 0 ? -a_ : a_;
+ return s < 0 ? NEG_LONG( a_ ) : a_;
}
@@ -488,17 +471,14 @@
/* XXX: this function does not allow 64-bit arguments */
- if ( a_ == 0 || b_ == c_ )
- return a_;
-
- FT_MOVE_SIGN( a_, s );
- FT_MOVE_SIGN( b_, s );
- FT_MOVE_SIGN( c_, s );
-
a = (FT_UInt32)a_;
b = (FT_UInt32)b_;
c = (FT_UInt32)c_;
+ FT_MOVE_SIGN( a_, a, s );
+ FT_MOVE_SIGN( b_, b, s );
+ FT_MOVE_SIGN( c_, c, s );
+
if ( c == 0 )
a = 0x7FFFFFFFUL;
@@ -513,13 +493,13 @@
ft_multo64( a, b, &temp );
/* last attempt to ditch long division */
- a = temp.hi == 0 ? temp.lo / c
- : ft_div64by32( temp.hi, temp.lo, c );
+ a = ( temp.hi == 0 ) ? temp.lo / c
+ : ft_div64by32( temp.hi, temp.lo, c );
}
a_ = (FT_Long)a;
- return s < 0 ? -a_ : a_;
+ return s < 0 ? NEG_LONG( a_ ) : a_;
}
@@ -546,9 +526,6 @@
FT_UInt32 a, b;
- if ( a_ == 0 || b_ == 0x10000L )
- return a_;
-
/*
* This is a clever way of converting a signed number `a' into its
* absolute value (stored back into `a') and its sign. The sign is
@@ -599,15 +576,12 @@
/* XXX: this function does not allow 64-bit arguments */
- if ( a_ == 0 || b_ == 0x10000L )
- return a_;
-
- FT_MOVE_SIGN( a_, s );
- FT_MOVE_SIGN( b_, s );
-
a = (FT_UInt32)a_;
b = (FT_UInt32)b_;
+ FT_MOVE_SIGN( a_, a, s );
+ FT_MOVE_SIGN( b_, b, s );
+
if ( a + ( b >> 8 ) <= 8190UL )
a = ( a * b + 0x8000UL ) >> 16;
else
@@ -621,7 +595,7 @@
a_ = (FT_Long)a;
- return s < 0 ? -a_ : a_;
+ return s < 0 ? NEG_LONG( a_ ) : a_;
#endif /* 0 */
@@ -641,12 +615,12 @@
/* XXX: this function does not allow 64-bit arguments */
- FT_MOVE_SIGN( a_, s );
- FT_MOVE_SIGN( b_, s );
-
a = (FT_UInt32)a_;
b = (FT_UInt32)b_;
+ FT_MOVE_SIGN( a_, a, s );
+ FT_MOVE_SIGN( b_, b, s );
+
if ( b == 0 )
{
/* check for division by 0 */
@@ -674,7 +648,7 @@
q_ = (FT_Long)q;
- return s < 0 ? -q_ : q_;
+ return s < 0 ? NEG_LONG( q_ ) : q_;
}
@@ -693,13 +667,19 @@
if ( !a || !b )
return;
- xx = FT_MulFix( a->xx, b->xx ) + FT_MulFix( a->xy, b->yx );
- xy = FT_MulFix( a->xx, b->xy ) + FT_MulFix( a->xy, b->yy );
- yx = FT_MulFix( a->yx, b->xx ) + FT_MulFix( a->yy, b->yx );
- yy = FT_MulFix( a->yx, b->xy ) + FT_MulFix( a->yy, b->yy );
+ xx = ADD_LONG( FT_MulFix( a->xx, b->xx ),
+ FT_MulFix( a->xy, b->yx ) );
+ xy = ADD_LONG( FT_MulFix( a->xx, b->xy ),
+ FT_MulFix( a->xy, b->yy ) );
+ yx = ADD_LONG( FT_MulFix( a->yx, b->xx ),
+ FT_MulFix( a->yy, b->yx ) );
+ yy = ADD_LONG( FT_MulFix( a->yx, b->xy ),
+ FT_MulFix( a->yy, b->yy ) );
- b->xx = xx; b->xy = xy;
- b->yx = yx; b->yy = yy;
+ b->xx = xx;
+ b->xy = xy;
+ b->yx = yx;
+ b->yy = yy;
}
@@ -749,13 +729,19 @@
if ( !a || !b )
return;
- xx = FT_MulDiv( a->xx, b->xx, val ) + FT_MulDiv( a->xy, b->yx, val );
- xy = FT_MulDiv( a->xx, b->xy, val ) + FT_MulDiv( a->xy, b->yy, val );
- yx = FT_MulDiv( a->yx, b->xx, val ) + FT_MulDiv( a->yy, b->yx, val );
- yy = FT_MulDiv( a->yx, b->xy, val ) + FT_MulDiv( a->yy, b->yy, val );
+ xx = ADD_LONG( FT_MulDiv( a->xx, b->xx, val ),
+ FT_MulDiv( a->xy, b->yx, val ) );
+ xy = ADD_LONG( FT_MulDiv( a->xx, b->xy, val ),
+ FT_MulDiv( a->xy, b->yy, val ) );
+ yx = ADD_LONG( FT_MulDiv( a->yx, b->xx, val ),
+ FT_MulDiv( a->yy, b->yx, val ) );
+ yy = ADD_LONG( FT_MulDiv( a->yx, b->xy, val ),
+ FT_MulDiv( a->yy, b->yy, val ) );
- b->xx = xx; b->xy = xy;
- b->yx = yx; b->yy = yy;
+ b->xx = xx;
+ b->xy = xy;
+ b->yx = yx;
+ b->yy = yy;
}
@@ -774,17 +760,112 @@
if ( !vector || !matrix )
return;
- xz = FT_MulDiv( vector->x, matrix->xx, val ) +
- FT_MulDiv( vector->y, matrix->xy, val );
-
- yz = FT_MulDiv( vector->x, matrix->yx, val ) +
- FT_MulDiv( vector->y, matrix->yy, val );
+ xz = ADD_LONG( FT_MulDiv( vector->x, matrix->xx, val ),
+ FT_MulDiv( vector->y, matrix->xy, val ) );
+ yz = ADD_LONG( FT_MulDiv( vector->x, matrix->yx, val ),
+ FT_MulDiv( vector->y, matrix->yy, val ) );
vector->x = xz;
vector->y = yz;
}
+ /* documentation is in ftcalc.h */
+
+ FT_BASE_DEF( FT_UInt32 )
+ FT_Vector_NormLen( FT_Vector* vector )
+ {
+ FT_Int32 x_ = vector->x;
+ FT_Int32 y_ = vector->y;
+ FT_Int32 b, z;
+ FT_UInt32 x, y, u, v, l;
+ FT_Int sx = 1, sy = 1, shift;
+
+
+ x = (FT_UInt32)x_;
+ y = (FT_UInt32)y_;
+
+ FT_MOVE_SIGN( x_, x, sx );
+ FT_MOVE_SIGN( y_, y, sy );
+
+ /* trivial cases */
+ if ( x == 0 )
+ {
+ if ( y > 0 )
+ vector->y = sy * 0x10000;
+ return y;
+ }
+ else if ( y == 0 )
+ {
+ if ( x > 0 )
+ vector->x = sx * 0x10000;
+ return x;
+ }
+
+ /* Estimate length and prenormalize by shifting so that */
+ /* the new approximate length is between 2/3 and 4/3. */
+ /* The magic constant 0xAAAAAAAAUL (2/3 of 2^32) helps */
+ /* achieve this in 16.16 fixed-point representation. */
+ l = x > y ? x + ( y >> 1 )
+ : y + ( x >> 1 );
+
+ shift = 31 - FT_MSB( l );
+ shift -= 15 + ( l >= ( 0xAAAAAAAAUL >> shift ) );
+
+ if ( shift > 0 )
+ {
+ x <<= shift;
+ y <<= shift;
+
+ /* re-estimate length for tiny vectors */
+ l = x > y ? x + ( y >> 1 )
+ : y + ( x >> 1 );
+ }
+ else
+ {
+ x >>= -shift;
+ y >>= -shift;
+ l >>= -shift;
+ }
+
+ /* lower linear approximation for reciprocal length minus one */
+ b = 0x10000 - (FT_Int32)l;
+
+ x_ = (FT_Int32)x;
+ y_ = (FT_Int32)y;
+
+ /* Newton's iterations */
+ do
+ {
+ u = (FT_UInt32)( x_ + ( x_ * b >> 16 ) );
+ v = (FT_UInt32)( y_ + ( y_ * b >> 16 ) );
+
+ /* Normalized squared length in the parentheses approaches 2^32. */
+ /* On two's complement systems, converting to signed gives the */
+ /* difference with 2^32 even if the expression wraps around. */
+ z = -(FT_Int32)( u * u + v * v ) / 0x200;
+ z = z * ( ( 0x10000 + b ) >> 8 ) / 0x10000;
+
+ b += z;
+
+ } while ( z > 0 );
+
+ vector->x = sx < 0 ? -(FT_Pos)u : (FT_Pos)u;
+ vector->y = sy < 0 ? -(FT_Pos)v : (FT_Pos)v;
+
+ /* Conversion to signed helps to recover from likely wrap around */
+ /* in calculating the prenormalized length, because it gives the */
+ /* correct difference with 2^32 on two's complement systems. */
+ l = (FT_UInt32)( 0x10000 + (FT_Int32)( u * x + v * y ) / 0x10000 );
+ if ( shift > 0 )
+ l = ( l + ( 1 << ( shift - 1 ) ) ) >> shift;
+ else
+ l <<= -shift;
+
+ return l;
+ }
+
+
#if 0
/* documentation is in ftcalc.h */
@@ -832,52 +913,36 @@
FT_Pos out_x,
FT_Pos out_y )
{
- FT_Long result; /* avoid overflow on 16-bit system */
-
-
- /* deal with the trivial cases quickly */
- if ( in_y == 0 )
- {
- if ( in_x >= 0 )
- result = out_y;
- else
- result = -out_y;
- }
- else if ( in_x == 0 )
- {
- if ( in_y >= 0 )
- result = -out_x;
- else
- result = out_x;
- }
- else if ( out_y == 0 )
- {
- if ( out_x >= 0 )
- result = in_y;
- else
- result = -in_y;
- }
- else if ( out_x == 0 )
- {
- if ( out_y >= 0 )
- result = -in_x;
- else
- result = in_x;
- }
- else /* general case */
- {
#ifdef FT_LONG64
- FT_Int64 delta = (FT_Int64)in_x * out_y - (FT_Int64)in_y * out_x;
+ FT_Int64 delta = (FT_Int64)in_x * out_y - (FT_Int64)in_y * out_x;
- if ( delta == 0 )
- result = 0;
- else
- result = 1 - 2 * ( delta < 0 );
+ return ( delta > 0 ) - ( delta < 0 );
#else
+ FT_Int result;
+
+
+ /* we silently ignore overflow errors, since such large values */
+ /* lead to even more (harmless) rendering errors later on */
+ if ( ADD_LONG( FT_ABS( in_x ), FT_ABS( out_y ) ) <= 131071L &&
+ ADD_LONG( FT_ABS( in_y ), FT_ABS( out_x ) ) <= 131071L )
+ {
+ FT_Long z1 = MUL_LONG( in_x, out_y );
+ FT_Long z2 = MUL_LONG( in_y, out_x );
+
+
+ if ( z1 > z2 )
+ result = +1;
+ else if ( z1 < z2 )
+ result = -1;
+ else
+ result = 0;
+ }
+ else /* products might overflow 32 bits */
+ {
FT_Int64 z1, z2;
@@ -895,12 +960,12 @@
result = -1;
else
result = 0;
-
-#endif
}
/* XXX: only the sign of return value, +1/0/-1 must be used */
- return (FT_Int)result;
+ return result;
+
+#endif
}
diff --git a/src/base/ftcid.c b/src/base/ftcid.c
index 0734881..f518464 100644
--- a/src/base/ftcid.c
+++ b/src/base/ftcid.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing CID font information. */
/* */
-/* Copyright 2007-2015 by */
+/* Copyright 2007-2018 by */
/* Derek Clegg and Michael Toftdal. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/ftdbgmem.c b/src/base/ftdbgmem.c
index 6f20313..c33d8ac 100644
--- a/src/base/ftdbgmem.c
+++ b/src/base/ftdbgmem.c
@@ -4,7 +4,7 @@
/* */
/* Memory debugger (body). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -268,7 +268,7 @@
ft_mem_table_alloc(
table,
new_size * (FT_Long)sizeof ( FT_MemNode ) );
- if ( new_buckets == NULL )
+ if ( !new_buckets )
return;
FT_ARRAY_ZERO( new_buckets, new_size );
@@ -309,7 +309,7 @@
table = (FT_MemTable)memory->alloc( memory, sizeof ( *table ) );
- if ( table == NULL )
+ if ( !table )
goto Exit;
FT_ZERO( table );
@@ -367,7 +367,8 @@
{
printf(
"leaked memory block at address %p, size %8ld in (%s:%ld)\n",
- node->address, node->size,
+ (void*)node->address,
+ node->size,
FT_FILENAME( node->source->file_name ),
node->source->line_no );
@@ -462,10 +463,10 @@
(FT_UInt32)( 5 * _ft_debug_lineno );
pnode = &table->sources[hash % FT_MEM_SOURCE_BUCKETS];
- for ( ;; )
+ for (;;)
{
node = *pnode;
- if ( node == NULL )
+ if ( !node )
break;
if ( node->file_name == _ft_debug_file &&
@@ -476,7 +477,7 @@
}
node = (FT_MemSource)ft_mem_table_alloc( table, sizeof ( *node ) );
- if ( node == NULL )
+ if ( !node )
ft_mem_debug_panic(
"not enough memory to perform memory debugging\n" );
@@ -544,7 +545,7 @@
/* we need to create a new node in this table */
node = (FT_MemNode)ft_mem_table_alloc( table, sizeof ( *node ) );
- if ( node == NULL )
+ if ( !node )
ft_mem_debug_panic( "not enough memory to run memory tests" );
node->address = address;
@@ -716,7 +717,7 @@
FT_MemTable table = (FT_MemTable)memory->user;
- if ( block == NULL )
+ if ( !block )
ft_mem_debug_panic( "trying to free NULL in (%s:%ld)",
FT_FILENAME( _ft_debug_file ),
_ft_debug_lineno );
@@ -754,7 +755,7 @@
/* the following is valid according to ANSI C */
#if 0
- if ( block == NULL || cur_size == 0 )
+ if ( !block || !cur_size )
ft_mem_debug_panic( "trying to reallocate NULL in (%s:%ld)",
file_name, line_no );
#endif
@@ -798,7 +799,7 @@
return NULL;
new_block = (FT_Pointer)ft_mem_table_alloc( table, new_size );
- if ( new_block == NULL )
+ if ( !new_block )
return NULL;
ft_mem_table_set( table, (FT_Byte*)new_block, new_size, delta );
@@ -825,7 +826,7 @@
FT_Int result = 0;
- if ( getenv( "FT2_DEBUG_MEMORY" ) )
+ if ( ft_getenv( "FT2_DEBUG_MEMORY" ) )
{
table = ft_mem_table_new( memory );
if ( table )
@@ -838,10 +839,10 @@
memory->realloc = ft_mem_debug_realloc;
memory->free = ft_mem_debug_free;
- p = getenv( "FT2_ALLOC_TOTAL_MAX" );
- if ( p != NULL )
+ p = ft_getenv( "FT2_ALLOC_TOTAL_MAX" );
+ if ( p )
{
- FT_Long total_max = ft_atol( p );
+ FT_Long total_max = ft_strtol( p, NULL, 10 );
if ( total_max > 0 )
@@ -851,10 +852,10 @@
}
}
- p = getenv( "FT2_ALLOC_COUNT_MAX" );
- if ( p != NULL )
+ p = ft_getenv( "FT2_ALLOC_COUNT_MAX" );
+ if ( p )
{
- FT_Long total_count = ft_atol( p );
+ FT_Long total_count = ft_strtol( p, NULL, 10 );
if ( total_count > 0 )
@@ -864,10 +865,10 @@
}
}
- p = getenv( "FT2_KEEP_ALIVE" );
- if ( p != NULL )
+ p = ft_getenv( "FT2_KEEP_ALIVE" );
+ if ( p )
{
- FT_Long keep_alive = ft_atol( p );
+ FT_Long keep_alive = ft_strtol( p, NULL, 10 );
if ( keep_alive > 0 )
diff --git a/src/base/ftdebug.c b/src/base/ftdebug.c
index 2cdb7c2..fe26309 100644
--- a/src/base/ftdebug.c
+++ b/src/base/ftdebug.c
@@ -4,7 +4,7 @@
/* */
/* Debugging and logging component (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -152,8 +152,8 @@
/* the memory and stream components which are set to 7 and 5, */
/* respectively. */
/* */
- /* See the file <include/internal/fttrace.h> for details of the */
- /* available toggle names. */
+ /* See the file `include/freetype/internal/fttrace.h' for details of */
+ /* the available toggle names. */
/* */
/* The level must be between 0 and 7; 0 means quiet (except for serious */
/* runtime errors), and 7 means _very_ verbose. */
@@ -161,7 +161,7 @@
FT_BASE_DEF( void )
ft_debug_init( void )
{
- const char* ft2_debug = getenv( "FT2_DEBUG" );
+ const char* ft2_debug = ft_getenv( "FT2_DEBUG" );
if ( ft2_debug )
diff --git a/src/base/ftfntfmt.c b/src/base/ftfntfmt.c
index 98e7431..a2900ce 100644
--- a/src/base/ftfntfmt.c
+++ b/src/base/ftfntfmt.c
@@ -4,7 +4,7 @@
/* */
/* FreeType utility file for font formats (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/ftfstype.c b/src/base/ftfstype.c
index cd3458f..e6cdf6e 100644
--- a/src/base/ftfstype.c
+++ b/src/base/ftfstype.c
@@ -4,7 +4,7 @@
/* */
/* FreeType utility file to access FSType data (body). */
/* */
-/* Copyright 2008-2015 by */
+/* Copyright 2008-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/ftgasp.c b/src/base/ftgasp.c
index bbd257c..4f80bba 100644
--- a/src/base/ftgasp.c
+++ b/src/base/ftgasp.c
@@ -4,7 +4,7 @@
/* */
/* Access of TrueType's `gasp' table (body). */
/* */
-/* Copyright 2007-2015 by */
+/* Copyright 2007-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/ftgloadr.c b/src/base/ftgloadr.c
index 7e28638..4720249 100644
--- a/src/base/ftgloadr.c
+++ b/src/base/ftgloadr.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph loader (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/ftglyph.c b/src/base/ftglyph.c
index cb7fc37..6759aa2 100644
--- a/src/base/ftglyph.c
+++ b/src/base/ftglyph.c
@@ -4,7 +4,7 @@
/* */
/* FreeType convenience functions to handle glyphs (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -125,23 +125,25 @@
FT_BitmapGlyph glyph = (FT_BitmapGlyph)bitmap_glyph;
- cbox->xMin = glyph->left << 6;
- cbox->xMax = cbox->xMin + (FT_Pos)( glyph->bitmap.width << 6 );
- cbox->yMax = glyph->top << 6;
- cbox->yMin = cbox->yMax - (FT_Pos)( glyph->bitmap.rows << 6 );
+ cbox->xMin = glyph->left * 64;
+ cbox->xMax = cbox->xMin + (FT_Pos)( glyph->bitmap.width * 64 );
+ cbox->yMax = glyph->top * 64;
+ cbox->yMin = cbox->yMax - (FT_Pos)( glyph->bitmap.rows * 64 );
}
- FT_DEFINE_GLYPH(ft_bitmap_glyph_class,
+ FT_DEFINE_GLYPH(
+ ft_bitmap_glyph_class,
+
sizeof ( FT_BitmapGlyphRec ),
FT_GLYPH_FORMAT_BITMAP,
- ft_bitmap_glyph_init,
- ft_bitmap_glyph_done,
- ft_bitmap_glyph_copy,
- 0, /* FT_Glyph_TransformFunc */
- ft_bitmap_glyph_bbox,
- 0 /* FT_Glyph_PrepareFunc */
+ ft_bitmap_glyph_init, /* FT_Glyph_InitFunc glyph_init */
+ ft_bitmap_glyph_done, /* FT_Glyph_DoneFunc glyph_done */
+ ft_bitmap_glyph_copy, /* FT_Glyph_CopyFunc glyph_copy */
+ NULL, /* FT_Glyph_TransformFunc glyph_transform */
+ ft_bitmap_glyph_bbox, /* FT_Glyph_GetBBoxFunc glyph_bbox */
+ NULL /* FT_Glyph_PrepareFunc glyph_prepare */
)
@@ -260,16 +262,18 @@
}
- FT_DEFINE_GLYPH( ft_outline_glyph_class,
+ FT_DEFINE_GLYPH(
+ ft_outline_glyph_class,
+
sizeof ( FT_OutlineGlyphRec ),
FT_GLYPH_FORMAT_OUTLINE,
- ft_outline_glyph_init,
- ft_outline_glyph_done,
- ft_outline_glyph_copy,
- ft_outline_glyph_transform,
- ft_outline_glyph_bbox,
- ft_outline_glyph_prepare
+ ft_outline_glyph_init, /* FT_Glyph_InitFunc glyph_init */
+ ft_outline_glyph_done, /* FT_Glyph_DoneFunc glyph_done */
+ ft_outline_glyph_copy, /* FT_Glyph_CopyFunc glyph_copy */
+ ft_outline_glyph_transform, /* FT_Glyph_TransformFunc glyph_transform */
+ ft_outline_glyph_bbox, /* FT_Glyph_GetBBoxFunc glyph_bbox */
+ ft_outline_glyph_prepare /* FT_Glyph_PrepareFunc glyph_prepare */
)
@@ -403,13 +407,29 @@
if ( error )
goto Exit;
- /* copy advance while converting it to 16.16 format */
- glyph->advance.x = slot->advance.x << 10;
- glyph->advance.y = slot->advance.y << 10;
+ /* copy advance while converting 26.6 to 16.16 format */
+ if ( slot->advance.x >= 0x8000L * 64 ||
+ slot->advance.x <= -0x8000L * 64 )
+ {
+ FT_ERROR(( "FT_Get_Glyph: advance width too large\n" ));
+ error = FT_THROW( Invalid_Argument );
+ goto Exit2;
+ }
+ if ( slot->advance.y >= 0x8000L * 64 ||
+ slot->advance.y <= -0x8000L * 64 )
+ {
+ FT_ERROR(( "FT_Get_Glyph: advance height too large\n" ));
+ error = FT_THROW( Invalid_Argument );
+ goto Exit2;
+ }
+
+ glyph->advance.x = slot->advance.x * 1024;
+ glyph->advance.y = slot->advance.y * 1024;
/* now import the image from the glyph slot */
error = clazz->glyph_init( glyph, slot );
+ Exit2:
/* if an error occurred, destroy the glyph */
if ( error )
FT_Done_Glyph( glyph );
@@ -542,8 +562,8 @@
/* we render the glyph into a glyph bitmap using a `dummy' glyph slot */
/* then calling FT_Render_Glyph_Internal() */
- FT_MEM_ZERO( &dummy, sizeof ( dummy ) );
- FT_MEM_ZERO( &dummy_internal, sizeof ( dummy_internal ) );
+ FT_ZERO( &dummy );
+ FT_ZERO( &dummy_internal );
dummy.internal = &dummy_internal;
dummy.library = library;
dummy.format = clazz->glyph_format;
diff --git a/src/base/ftgxval.c b/src/base/ftgxval.c
index 58868f2..19e2d6a 100644
--- a/src/base/ftgxval.c
+++ b/src/base/ftgxval.c
@@ -2,9 +2,9 @@
/* */
/* ftgxval.c */
/* */
-/* FreeType API for validating TrueTyepGX/AAT tables (body). */
+/* FreeType API for validating TrueTypeGX/AAT tables (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* Masatake YAMATO, Redhat K.K, */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/base/fthash.c b/src/base/fthash.c
new file mode 100644
index 0000000..21bc8dd
--- /dev/null
+++ b/src/base/fthash.c
@@ -0,0 +1,339 @@
+/***************************************************************************/
+/* */
+/* fthash.c */
+/* */
+/* Hashing functions (body). */
+/* */
+/***************************************************************************/
+
+/*
+ * Copyright 2000 Computing Research Labs, New Mexico State University
+ * Copyright 2001-2015
+ * Francesco Zappa Nardelli
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
+ * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
+ * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+ /*************************************************************************/
+ /* */
+ /* This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50 */
+ /* */
+ /* taken from Mark Leisher's xmbdfed package */
+ /* */
+ /*************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_HASH_H
+#include FT_INTERNAL_MEMORY_H
+
+
+#define INITIAL_HT_SIZE 241
+
+
+ static FT_ULong
+ hash_str_lookup( FT_Hashkey* key )
+ {
+ const char* kp = key->str;
+ FT_ULong res = 0;
+
+
+ /* Mocklisp hash function. */
+ while ( *kp )
+ res = ( res << 5 ) - res + (FT_ULong)*kp++;
+
+ return res;
+ }
+
+
+ static FT_ULong
+ hash_num_lookup( FT_Hashkey* key )
+ {
+ FT_ULong num = (FT_ULong)key->num;
+ FT_ULong res;
+
+
+ /* Mocklisp hash function. */
+ res = num & 0xFF;
+ res = ( res << 5 ) - res + ( ( num >> 8 ) & 0xFF );
+ res = ( res << 5 ) - res + ( ( num >> 16 ) & 0xFF );
+ res = ( res << 5 ) - res + ( ( num >> 24 ) & 0xFF );
+
+ return res;
+ }
+
+
+ static FT_Bool
+ hash_str_compare( FT_Hashkey* a,
+ FT_Hashkey* b )
+ {
+ if ( a->str[0] == b->str[0] &&
+ ft_strcmp( a->str, b->str ) == 0 )
+ return 1;
+
+ return 0;
+ }
+
+
+ static FT_Bool
+ hash_num_compare( FT_Hashkey* a,
+ FT_Hashkey* b )
+ {
+ if ( a->num == b->num )
+ return 1;
+
+ return 0;
+ }
+
+
+ static FT_Hashnode*
+ hash_bucket( FT_Hashkey key,
+ FT_Hash hash )
+ {
+ FT_ULong res = 0;
+ FT_Hashnode* bp = hash->table;
+ FT_Hashnode* ndp;
+
+
+ res = (hash->lookup)( &key );
+
+ ndp = bp + ( res % hash->size );
+ while ( *ndp )
+ {
+ if ( (hash->compare)( &(*ndp)->key, &key ) )
+ break;
+
+ ndp--;
+ if ( ndp < bp )
+ ndp = bp + ( hash->size - 1 );
+ }
+
+ return ndp;
+ }
+
+
+ static FT_Error
+ hash_rehash( FT_Hash hash,
+ FT_Memory memory )
+ {
+ FT_Hashnode* obp = hash->table;
+ FT_Hashnode* bp;
+ FT_Hashnode* nbp;
+
+ FT_UInt i, sz = hash->size;
+ FT_Error error = FT_Err_Ok;
+
+
+ hash->size <<= 1;
+ hash->limit = hash->size / 3;
+
+ if ( FT_NEW_ARRAY( hash->table, hash->size ) )
+ goto Exit;
+
+ for ( i = 0, bp = obp; i < sz; i++, bp++ )
+ {
+ if ( *bp )
+ {
+ nbp = hash_bucket( (*bp)->key, hash );
+ *nbp = *bp;
+ }
+ }
+
+ FT_FREE( obp );
+
+ Exit:
+ return error;
+ }
+
+
+ static FT_Error
+ hash_init( FT_Hash hash,
+ FT_Bool is_num,
+ FT_Memory memory )
+ {
+ FT_UInt sz = INITIAL_HT_SIZE;
+ FT_Error error;
+
+
+ hash->size = sz;
+ hash->limit = sz / 3;
+ hash->used = 0;
+
+ if ( is_num )
+ {
+ hash->lookup = hash_num_lookup;
+ hash->compare = hash_num_compare;
+ }
+ else
+ {
+ hash->lookup = hash_str_lookup;
+ hash->compare = hash_str_compare;
+ }
+
+ FT_MEM_NEW_ARRAY( hash->table, sz );
+
+ return error;
+ }
+
+
+ FT_Error
+ ft_hash_str_init( FT_Hash hash,
+ FT_Memory memory )
+ {
+ return hash_init( hash, 0, memory );
+ }
+
+
+ FT_Error
+ ft_hash_num_init( FT_Hash hash,
+ FT_Memory memory )
+ {
+ return hash_init( hash, 1, memory );
+ }
+
+
+ void
+ ft_hash_str_free( FT_Hash hash,
+ FT_Memory memory )
+ {
+ if ( hash )
+ {
+ FT_UInt sz = hash->size;
+ FT_Hashnode* bp = hash->table;
+ FT_UInt i;
+
+
+ for ( i = 0; i < sz; i++, bp++ )
+ FT_FREE( *bp );
+
+ FT_FREE( hash->table );
+ }
+ }
+
+
+ /* `ft_hash_num_free' is the same as `ft_hash_str_free' */
+
+
+ static FT_Error
+ hash_insert( FT_Hashkey key,
+ size_t data,
+ FT_Hash hash,
+ FT_Memory memory )
+ {
+ FT_Hashnode nn;
+ FT_Hashnode* bp = hash_bucket( key, hash );
+ FT_Error error = FT_Err_Ok;
+
+
+ nn = *bp;
+ if ( !nn )
+ {
+ if ( FT_NEW( nn ) )
+ goto Exit;
+ *bp = nn;
+
+ nn->key = key;
+ nn->data = data;
+
+ if ( hash->used >= hash->limit )
+ {
+ error = hash_rehash( hash, memory );
+ if ( error )
+ goto Exit;
+ }
+
+ hash->used++;
+ }
+ else
+ nn->data = data;
+
+ Exit:
+ return error;
+ }
+
+
+ FT_Error
+ ft_hash_str_insert( const char* key,
+ size_t data,
+ FT_Hash hash,
+ FT_Memory memory )
+ {
+ FT_Hashkey hk;
+
+
+ hk.str = key;
+
+ return hash_insert( hk, data, hash, memory );
+ }
+
+
+ FT_Error
+ ft_hash_num_insert( FT_Int num,
+ size_t data,
+ FT_Hash hash,
+ FT_Memory memory )
+ {
+ FT_Hashkey hk;
+
+
+ hk.num = num;
+
+ return hash_insert( hk, data, hash, memory );
+ }
+
+
+ static size_t*
+ hash_lookup( FT_Hashkey key,
+ FT_Hash hash )
+ {
+ FT_Hashnode* np = hash_bucket( key, hash );
+
+
+ return (*np) ? &(*np)->data
+ : NULL;
+ }
+
+
+ size_t*
+ ft_hash_str_lookup( const char* key,
+ FT_Hash hash )
+ {
+ FT_Hashkey hk;
+
+
+ hk.str = key;
+
+ return hash_lookup( hk, hash );
+ }
+
+
+ size_t*
+ ft_hash_num_lookup( FT_Int num,
+ FT_Hash hash )
+ {
+ FT_Hashkey hk;
+
+
+ hk.num = num;
+
+ return hash_lookup( hk, hash );
+ }
+
+
+/* END */
diff --git a/src/base/ftinit.c b/src/base/ftinit.c
index cc95e6a..1fa4721 100644
--- a/src/base/ftinit.c
+++ b/src/base/ftinit.c
@@ -4,7 +4,7 @@
/* */
/* FreeType initialization layer (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,8 +23,8 @@
/* FT_Add_Default_Modules(): */
/* This function is used to add the set of default modules to a */
/* fresh new library object. The set is taken from the header file */
- /* `config/ftmodule.h'. See the document `FreeType 2.0 Build */
- /* System' for more information. */
+ /* `freetype/config/ftmodule.h'. See the document `FreeType 2.0 */
+ /* Build System' for more information. */
/* */
/* FT_Init_FreeType(): */
/* This function creates a system object for the current platform, */
@@ -226,6 +226,94 @@
}
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+
+#define MAX_LENGTH 128
+
+ /* documentation is in ftmodapi.h */
+
+ FT_EXPORT_DEF( void )
+ FT_Set_Default_Properties( FT_Library library )
+ {
+ const char* env;
+ const char* p;
+ const char* q;
+
+ char module_name[MAX_LENGTH + 1];
+ char property_name[MAX_LENGTH + 1];
+ char property_value[MAX_LENGTH + 1];
+
+ int i;
+
+
+ env = ft_getenv( "FREETYPE_PROPERTIES" );
+ if ( !env )
+ return;
+
+ for ( p = env; *p; p++ )
+ {
+ /* skip leading whitespace and separators */
+ if ( *p == ' ' || *p == '\t' )
+ continue;
+
+ /* read module name, followed by `:' */
+ q = p;
+ for ( i = 0; i < MAX_LENGTH; i++ )
+ {
+ if ( !*p || *p == ':' )
+ break;
+ module_name[i] = *p++;
+ }
+ module_name[i] = '\0';
+
+ if ( !*p || *p != ':' || p == q )
+ break;
+
+ /* read property name, followed by `=' */
+ q = ++p;
+ for ( i = 0; i < MAX_LENGTH; i++ )
+ {
+ if ( !*p || *p == '=' )
+ break;
+ property_name[i] = *p++;
+ }
+ property_name[i] = '\0';
+
+ if ( !*p || *p != '=' || p == q )
+ break;
+
+ /* read property value, followed by whitespace (if any) */
+ q = ++p;
+ for ( i = 0; i < MAX_LENGTH; i++ )
+ {
+ if ( !*p || *p == ' ' || *p == '\t' )
+ break;
+ property_value[i] = *p++;
+ }
+ property_value[i] = '\0';
+
+ if ( !( *p == '\0' || *p == ' ' || *p == '\t' ) || p == q )
+ break;
+
+ /* we completely ignore errors */
+ ft_property_string_set( library,
+ module_name,
+ property_name,
+ property_value );
+ }
+ }
+
+#else
+
+ FT_EXPORT_DEF( void )
+ FT_Set_Default_Properties( FT_Library library )
+ {
+ FT_UNUSED( library );
+ }
+
+#endif
+
+
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Error )
@@ -256,6 +344,8 @@
else
FT_Add_Default_Modules( *alibrary );
+ FT_Set_Default_Properties( *alibrary );
+
return error;
}
diff --git a/src/base/ftlcdfil.c b/src/base/ftlcdfil.c
index ff6f7e9..8d314df 100644
--- a/src/base/ftlcdfil.c
+++ b/src/base/ftlcdfil.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for color filtering of subpixel bitmap glyphs (body). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -29,142 +29,140 @@
/* define USE_LEGACY to implement the legacy filter */
#define USE_LEGACY
- /* FIR filter used by the default and light filters */
- static void
- _ft_lcd_filter_fir( FT_Bitmap* bitmap,
- FT_Render_Mode mode,
- FT_Library library )
- {
- FT_Byte* weights = library->lcd_weights;
- FT_UInt width = (FT_UInt)bitmap->width;
- FT_UInt height = (FT_UInt)bitmap->rows;
+#define FT_SHIFTCLAMP( x ) ( x >>= 8, (FT_Byte)( x > 255 ? 255 : x ) )
+ /* add padding according to filter weights */
+ FT_BASE_DEF (void)
+ ft_lcd_padding( FT_Pos* Min,
+ FT_Pos* Max,
+ FT_GlyphSlot slot )
+ {
+ FT_Byte* lcd_weights;
+ FT_Bitmap_LcdFilterFunc lcd_filter_func;
+
+
+ /* Per-face LCD filtering takes priority if set up. */
+ if ( slot->face && slot->face->internal->lcd_filter_func )
+ {
+ lcd_weights = slot->face->internal->lcd_weights;
+ lcd_filter_func = slot->face->internal->lcd_filter_func;
+ }
+ else
+ {
+ lcd_weights = slot->library->lcd_weights;
+ lcd_filter_func = slot->library->lcd_filter_func;
+ }
+
+ if ( lcd_filter_func == ft_lcd_filter_fir )
+ {
+ *Min -= lcd_weights[0] ? 43 :
+ lcd_weights[1] ? 22 : 0;
+ *Max += lcd_weights[4] ? 43 :
+ lcd_weights[3] ? 22 : 0;
+ }
+ }
+
+
+ /* FIR filter used by the default and light filters */
+ FT_BASE_DEF( void )
+ ft_lcd_filter_fir( FT_Bitmap* bitmap,
+ FT_Render_Mode mode,
+ FT_LcdFiveTapFilter weights )
+ {
+ FT_UInt width = (FT_UInt)bitmap->width;
+ FT_UInt height = (FT_UInt)bitmap->rows;
+ FT_Int pitch = bitmap->pitch;
+ FT_Byte* origin = bitmap->buffer;
+
+
+ /* take care of bitmap flow */
+ if ( pitch > 0 && height > 0 )
+ origin += pitch * (FT_Int)( height - 1 );
+
/* horizontal in-place FIR filter */
- if ( mode == FT_RENDER_MODE_LCD && width >= 4 )
+ if ( mode == FT_RENDER_MODE_LCD && width >= 2 )
{
- FT_Byte* line = bitmap->buffer;
+ FT_Byte* line = origin;
- /* take care of bitmap flow */
- if ( bitmap->pitch < 0 )
- line -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 );
+ /* `fir' must be at least 32 bit wide, since the sum of */
+ /* the values in `weights' can exceed 0xFF */
- /* `fir' and `pix' must be at least 32 bit wide, since the sum of */
- /* the values in `weights' can exceed 0xFF */
-
- for ( ; height > 0; height--, line += bitmap->pitch )
+ for ( ; height > 0; height--, line -= pitch )
{
- FT_UInt fir[4]; /* below, `pix' is used as the 5th element */
- FT_UInt val1, xx;
+ FT_UInt fir[5];
+ FT_UInt val, xx;
- val1 = line[0];
- fir[0] = weights[2] * val1;
- fir[1] = weights[3] * val1;
- fir[2] = weights[4] * val1;
- fir[3] = 0;
+ val = line[0];
+ fir[2] = weights[2] * val;
+ fir[3] = weights[3] * val;
+ fir[4] = weights[4] * val;
- val1 = line[1];
- fir[0] += weights[1] * val1;
- fir[1] += weights[2] * val1;
- fir[2] += weights[3] * val1;
- fir[3] += weights[4] * val1;
+ val = line[1];
+ fir[1] = fir[2] + weights[1] * val;
+ fir[2] = fir[3] + weights[2] * val;
+ fir[3] = fir[4] + weights[3] * val;
+ fir[4] = weights[4] * val;
for ( xx = 2; xx < width; xx++ )
{
- FT_UInt val, pix;
-
-
val = line[xx];
- pix = fir[0] + weights[0] * val;
- fir[0] = fir[1] + weights[1] * val;
- fir[1] = fir[2] + weights[2] * val;
- fir[2] = fir[3] + weights[3] * val;
- fir[3] = weights[4] * val;
+ fir[0] = fir[1] + weights[0] * val;
+ fir[1] = fir[2] + weights[1] * val;
+ fir[2] = fir[3] + weights[2] * val;
+ fir[3] = fir[4] + weights[3] * val;
+ fir[4] = weights[4] * val;
- pix >>= 8;
- pix |= (FT_UInt)-(FT_Int)( pix >> 8 );
- line[xx - 2] = (FT_Byte)pix;
+ line[xx - 2] = FT_SHIFTCLAMP( fir[0] );
}
- {
- FT_UInt pix;
-
-
- pix = fir[0] >> 8;
- pix |= (FT_UInt)-(FT_Int)( pix >> 8 );
- line[xx - 2] = (FT_Byte)pix;
-
- pix = fir[1] >> 8;
- pix |= (FT_UInt)-(FT_Int)( pix >> 8 );
- line[xx - 1] = (FT_Byte)pix;
- }
+ line[xx - 2] = FT_SHIFTCLAMP( fir[1] );
+ line[xx - 1] = FT_SHIFTCLAMP( fir[2] );
}
}
/* vertical in-place FIR filter */
- else if ( mode == FT_RENDER_MODE_LCD_V && height >= 4 )
+ else if ( mode == FT_RENDER_MODE_LCD_V && height >= 2 )
{
- FT_Byte* column = bitmap->buffer;
- FT_Int pitch = bitmap->pitch;
+ FT_Byte* column = origin;
- /* take care of bitmap flow */
- if ( bitmap->pitch < 0 )
- column -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 );
-
for ( ; width > 0; width--, column++ )
{
FT_Byte* col = column;
- FT_UInt fir[4]; /* below, `pix' is used as the 5th element */
- FT_UInt val1, yy;
+ FT_UInt fir[5];
+ FT_UInt val, yy;
- val1 = col[0];
- fir[0] = weights[2] * val1;
- fir[1] = weights[3] * val1;
- fir[2] = weights[4] * val1;
- fir[3] = 0;
- col += pitch;
+ val = col[0];
+ fir[2] = weights[2] * val;
+ fir[3] = weights[3] * val;
+ fir[4] = weights[4] * val;
+ col -= pitch;
- val1 = col[0];
- fir[0] += weights[1] * val1;
- fir[1] += weights[2] * val1;
- fir[2] += weights[3] * val1;
- fir[3] += weights[4] * val1;
- col += pitch;
+ val = col[0];
+ fir[1] = fir[2] + weights[1] * val;
+ fir[2] = fir[3] + weights[2] * val;
+ fir[3] = fir[4] + weights[3] * val;
+ fir[4] = weights[4] * val;
+ col -= pitch;
- for ( yy = 2; yy < height; yy++ )
+ for ( yy = 2; yy < height; yy++, col -= pitch )
{
- FT_UInt val, pix;
-
-
val = col[0];
- pix = fir[0] + weights[0] * val;
- fir[0] = fir[1] + weights[1] * val;
- fir[1] = fir[2] + weights[2] * val;
- fir[2] = fir[3] + weights[3] * val;
- fir[3] = weights[4] * val;
+ fir[0] = fir[1] + weights[0] * val;
+ fir[1] = fir[2] + weights[1] * val;
+ fir[2] = fir[3] + weights[2] * val;
+ fir[3] = fir[4] + weights[3] * val;
+ fir[4] = weights[4] * val;
- pix >>= 8;
- pix |= (FT_UInt)-(FT_Int)( pix >> 8 );
- col[-2 * pitch] = (FT_Byte)pix;
- col += pitch;
+ col[pitch * 2] = FT_SHIFTCLAMP( fir[0] );
}
- {
- FT_UInt pix;
-
-
- pix = fir[0] >> 8;
- pix |= (FT_UInt)-(FT_Int)( pix >> 8 );
- col[-2 * pitch] = (FT_Byte)pix;
-
- pix = fir[1] >> 8;
- pix |= (FT_UInt)-(FT_Int)( pix >> 8 );
- col[-pitch] = (FT_Byte)pix;
- }
+ col[pitch * 2] = FT_SHIFTCLAMP( fir[1] );
+ col[pitch] = FT_SHIFTCLAMP( fir[2] );
}
}
}
@@ -176,11 +174,12 @@
static void
_ft_lcd_filter_legacy( FT_Bitmap* bitmap,
FT_Render_Mode mode,
- FT_Library library )
+ FT_Byte* weights )
{
- FT_UInt width = (FT_UInt)bitmap->width;
- FT_UInt height = (FT_UInt)bitmap->rows;
- FT_Int pitch = bitmap->pitch;
+ FT_UInt width = (FT_UInt)bitmap->width;
+ FT_UInt height = (FT_UInt)bitmap->rows;
+ FT_Int pitch = bitmap->pitch;
+ FT_Byte* origin = bitmap->buffer;
static const unsigned int filters[3][3] =
{
@@ -189,36 +188,34 @@
{ 65538 * 1/13, 65538 * 1/6, 65538 * 9/13 }
};
- FT_UNUSED( library );
+ FT_UNUSED( weights );
+ /* take care of bitmap flow */
+ if ( pitch > 0 && height > 0 )
+ origin += pitch * (FT_Int)( height - 1 );
+
/* horizontal in-place intra-pixel filter */
if ( mode == FT_RENDER_MODE_LCD && width >= 3 )
{
- FT_Byte* line = bitmap->buffer;
+ FT_Byte* line = origin;
- /* take care of bitmap flow */
- if ( bitmap->pitch < 0 )
- line -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 );
-
- for ( ; height > 0; height--, line += pitch )
+ for ( ; height > 0; height--, line -= pitch )
{
FT_UInt xx;
for ( xx = 0; xx < width; xx += 3 )
{
- FT_UInt r = 0;
- FT_UInt g = 0;
- FT_UInt b = 0;
+ FT_UInt r, g, b;
FT_UInt p;
p = line[xx];
- r += filters[0][0] * p;
- g += filters[0][1] * p;
- b += filters[0][2] * p;
+ r = filters[0][0] * p;
+ g = filters[0][1] * p;
+ b = filters[0][2] * p;
p = line[xx + 1];
r += filters[1][0] * p;
@@ -238,31 +235,24 @@
}
else if ( mode == FT_RENDER_MODE_LCD_V && height >= 3 )
{
- FT_Byte* column = bitmap->buffer;
+ FT_Byte* column = origin;
- /* take care of bitmap flow */
- if ( bitmap->pitch < 0 )
- column -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 );
-
for ( ; width > 0; width--, column++ )
{
- FT_Byte* col = column;
- FT_Byte* col_end = col + (FT_Int)height * pitch;
+ FT_Byte* col = column - 2 * pitch;
- for ( ; col < col_end; col += 3 * pitch )
+ for ( ; height > 0; height -= 3, col -= 3 * pitch )
{
- FT_UInt r = 0;
- FT_UInt g = 0;
- FT_UInt b = 0;
+ FT_UInt r, g, b;
FT_UInt p;
p = col[0];
- r += filters[0][0] * p;
- g += filters[0][1] * p;
- b += filters[0][2] * p;
+ r = filters[0][0] * p;
+ g = filters[0][1] * p;
+ b = filters[0][2] * p;
p = col[pitch];
r += filters[1][0] * p;
@@ -276,7 +266,7 @@
col[0] = (FT_Byte)( r / 65536 );
col[pitch] = (FT_Byte)( g / 65536 );
- col[2 * pitch] = (FT_Byte)( b / 65536 );
+ col[pitch * 2] = (FT_Byte)( b / 65536 );
}
}
}
@@ -295,7 +285,8 @@
if ( !weights )
return FT_THROW( Invalid_Argument );
- ft_memcpy( library->lcd_weights, weights, 5 );
+ ft_memcpy( library->lcd_weights, weights, FT_LCD_FILTER_FIVE_TAPS );
+ library->lcd_filter_func = ft_lcd_filter_fir;
return FT_Err_Ok;
}
@@ -305,12 +296,10 @@
FT_Library_SetLcdFilter( FT_Library library,
FT_LcdFilter filter )
{
- static const FT_Byte light_filter[5] =
- { 0x00, 0x55, 0x56, 0x55, 0x00 };
- /* the values here sum up to a value larger than 256, */
- /* providing a cheap gamma correction */
- static const FT_Byte default_filter[5] =
- { 0x10, 0x40, 0x70, 0x40, 0x10 };
+ static const FT_LcdFiveTapFilter default_weights =
+ { 0x08, 0x4d, 0x56, 0x4d, 0x08 };
+ static const FT_LcdFiveTapFilter light_weights =
+ { 0x00, 0x55, 0x56, 0x55, 0x00 };
if ( !library )
@@ -320,42 +309,27 @@
{
case FT_LCD_FILTER_NONE:
library->lcd_filter_func = NULL;
- library->lcd_extra = 0;
break;
case FT_LCD_FILTER_DEFAULT:
-#if defined( FT_FORCE_LEGACY_LCD_FILTER )
-
- library->lcd_filter_func = _ft_lcd_filter_legacy;
- library->lcd_extra = 0;
-
-#elif defined( FT_FORCE_LIGHT_LCD_FILTER )
-
- ft_memcpy( library->lcd_weights, light_filter, 5 );
- library->lcd_filter_func = _ft_lcd_filter_fir;
- library->lcd_extra = 2;
-
-#else
-
- ft_memcpy( library->lcd_weights, default_filter, 5 );
- library->lcd_filter_func = _ft_lcd_filter_fir;
- library->lcd_extra = 2;
-
-#endif
-
+ ft_memcpy( library->lcd_weights,
+ default_weights,
+ FT_LCD_FILTER_FIVE_TAPS );
+ library->lcd_filter_func = ft_lcd_filter_fir;
break;
case FT_LCD_FILTER_LIGHT:
- ft_memcpy( library->lcd_weights, light_filter, 5 );
- library->lcd_filter_func = _ft_lcd_filter_fir;
- library->lcd_extra = 2;
+ ft_memcpy( library->lcd_weights,
+ light_weights,
+ FT_LCD_FILTER_FIVE_TAPS );
+ library->lcd_filter_func = ft_lcd_filter_fir;
break;
#ifdef USE_LEGACY
case FT_LCD_FILTER_LEGACY:
+ case FT_LCD_FILTER_LEGACY1:
library->lcd_filter_func = _ft_lcd_filter_legacy;
- library->lcd_extra = 0;
break;
#endif
@@ -364,13 +338,24 @@
return FT_THROW( Invalid_Argument );
}
- library->lcd_filter = filter;
-
return FT_Err_Ok;
}
#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
+ /* add padding according to accommodate outline shifts */
+ FT_BASE_DEF (void)
+ ft_lcd_padding( FT_Pos* Min,
+ FT_Pos* Max,
+ FT_GlyphSlot slot )
+ {
+ FT_UNUSED( slot );
+
+ *Min -= 21;
+ *Max += 21;
+ }
+
+
FT_EXPORT_DEF( FT_Error )
FT_Library_SetLcdFilterWeights( FT_Library library,
unsigned char *weights )
diff --git a/src/base/ftmac.c b/src/base/ftmac.c
index 446a23a..fd4c0cc 100644
--- a/src/base/ftmac.c
+++ b/src/base/ftmac.c
@@ -8,7 +8,7 @@
/* This file is for Mac OS X only; see builds/mac/ftoldmac.c for */
/* classic platforms built by MPW. */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -71,6 +71,9 @@
#include FT_INTERNAL_STREAM_H
#include "ftbase.h"
+
+#ifdef FT_MACINTOSH
+
/* This is for Mac OS X. Without redefinition, OS_INLINE */
/* expands to `static inline' which doesn't survive the */
/* -ansi compilation flag of GCC. */
@@ -118,8 +121,6 @@
#endif
-#ifdef FT_MACINTOSH
-
/* This function is deprecated because FSSpec is deprecated in Mac OS X */
FT_EXPORT_DEF( FT_Error )
FT_GetFile_From_Mac_Name( const char* fontName,
@@ -228,7 +229,7 @@
if ( !fontName || !face_index )
- return FT_THROW( Invalid_Argument) ;
+ return FT_THROW( Invalid_Argument);
err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
if ( err )
@@ -605,7 +606,7 @@
for (;;)
{
post_data = Get1Resource( TTAG_POST, res_id++ );
- if ( post_data == NULL )
+ if ( !post_data )
break; /* we are done */
code = (*post_data)[0];
@@ -618,11 +619,11 @@
total_size += 6; /* code + 4 bytes chunk length */
}
- total_size += GetHandleSize( post_data ) - 2;
+ total_size += (FT_ULong)GetHandleSize( post_data ) - 2;
last_code = code;
- /* detect integer overflows */
- if ( total_size < old_total_size )
+ /* detect resource fork overflow */
+ if ( FT_MAC_RFORK_MAX_LEN < total_size )
{
error = FT_THROW( Array_Too_Large );
goto Error;
@@ -644,7 +645,7 @@
for (;;)
{
post_data = Get1Resource( TTAG_POST, res_id++ );
- if ( post_data == NULL )
+ if ( !post_data )
break; /* we are done */
post_size = (FT_ULong)GetHandleSize( post_data ) - 2;
@@ -655,7 +656,7 @@
if ( last_code != -1 )
{
/* we are done adding a chunk, fill in the size field */
- if ( size_p != NULL )
+ if ( size_p )
{
*size_p++ = (FT_Byte)( pfb_chunk_size & 0xFF );
*size_p++ = (FT_Byte)( ( pfb_chunk_size >> 8 ) & 0xFF );
@@ -743,10 +744,15 @@
sfnt = GetResource( TTAG_sfnt, sfnt_id );
- if ( sfnt == NULL )
+ if ( !sfnt )
return FT_THROW( Invalid_Handle );
sfnt_size = (FT_ULong)GetHandleSize( sfnt );
+
+ /* detect resource fork overflow */
+ if ( FT_MAC_RFORK_MAX_LEN < sfnt_size )
+ return FT_THROW( Array_Too_Large );
+
if ( FT_ALLOC( sfnt_data, (FT_Long)sfnt_size ) )
{
ReleaseResource( sfnt );
@@ -816,7 +822,7 @@
return FT_THROW( Cannot_Open_Resource );
num_faces_in_res = 0;
- for ( res_index = 1; ; ++res_index )
+ for ( res_index = 1; ; res_index++ )
{
short num_faces_in_fond;
@@ -937,13 +943,14 @@
/* if it works, fine. */
error = FT_New_Face_From_Suitcase( library, pathname, face_index, aface );
- if ( error == 0 )
- return error;
+ if ( error )
+ {
+ /* let it fall through to normal loader (.ttf, .otf, etc.); */
+ /* we signal this by returning no error and no FT_Face */
+ *aface = NULL;
+ }
- /* let it fall through to normal loader (.ttf, .otf, etc.); */
- /* we signal this by returning no error and no FT_Face */
- *aface = NULL;
- return 0;
+ return FT_Err_Ok;
}
@@ -977,12 +984,13 @@
/* try resourcefork based font: LWFN, FFIL */
error = FT_New_Face_From_Resource( library, (UInt8 *)pathname,
face_index, aface );
- if ( error != 0 || *aface != NULL )
+ if ( error || *aface )
return error;
/* let it fall through to normal loader (.ttf, .otf, etc.) */
args.flags = FT_OPEN_PATHNAME;
args.pathname = (char*)pathname;
+
return FT_Open_Face( library, &args, face_index, aface );
}
@@ -997,7 +1005,7 @@
/* accepts an FSRef instead of a path. */
/* */
/* This function is deprecated because Carbon data types (FSRef) */
- /* are not cross-platform, and thus not suitable for the freetype API. */
+ /* are not cross-platform, and thus not suitable for the FreeType API. */
FT_EXPORT_DEF( FT_Error )
FT_New_Face_From_FSRef( FT_Library library,
const FSRef* ref,
@@ -1022,7 +1030,7 @@
error = FT_THROW( Cannot_Open_Resource );
error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
- if ( error != 0 || *aface != NULL )
+ if ( error || *aface )
return error;
/* fallback to datafork font */
@@ -1069,7 +1077,12 @@
#endif
}
-#endif /* FT_MACINTOSH */
+#else /* !FT_MACINTOSH */
+
+ /* ANSI C doesn't like empty source files */
+ typedef int _ft_mac_dummy;
+
+#endif /* !FT_MACINTOSH */
/* END */
diff --git a/src/base/ftmm.c b/src/base/ftmm.c
index 7c012aa..800441b 100644
--- a/src/base/ftmm.c
+++ b/src/base/ftmm.c
@@ -4,7 +4,7 @@
/* */
/* Multiple Master font support (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,6 +22,7 @@
#include FT_MULTIPLE_MASTERS_H
#include FT_INTERNAL_OBJECTS_H
#include FT_SERVICE_MULTIPLE_MASTERS_H
+#include FT_SERVICE_METRICS_VARIATIONS_H
/*************************************************************************/
@@ -62,6 +63,34 @@
}
+ static FT_Error
+ ft_face_get_mvar_service( FT_Face face,
+ FT_Service_MetricsVariations *aservice )
+ {
+ FT_Error error;
+
+
+ *aservice = NULL;
+
+ if ( !face )
+ return FT_THROW( Invalid_Face_Handle );
+
+ error = FT_ERR( Invalid_Argument );
+
+ if ( FT_HAS_MULTIPLE_MASTERS( face ) )
+ {
+ FT_FACE_LOOKUP_SERVICE( face,
+ *aservice,
+ METRICS_VARIATIONS );
+
+ if ( *aservice )
+ error = FT_Err_Ok;
+ }
+
+ return error;
+ }
+
+
/* documentation is in ftmm.h */
FT_EXPORT_DEF( FT_Error )
@@ -119,6 +148,25 @@
/* documentation is in ftmm.h */
FT_EXPORT_DEF( FT_Error )
+ FT_Done_MM_Var( FT_Library library,
+ FT_MM_Var* amaster )
+ {
+ FT_Memory memory;
+
+
+ if ( !library )
+ return FT_THROW( Invalid_Library_Handle );
+
+ memory = library->memory;
+ FT_FREE( amaster );
+
+ return FT_Err_Ok;
+ }
+
+
+ /* documentation is in ftmm.h */
+
+ FT_EXPORT_DEF( FT_Error )
FT_Set_MM_Design_Coordinates( FT_Face face,
FT_UInt num_coords,
FT_Long* coords )
@@ -129,7 +177,7 @@
/* check of `face' delayed to `ft_face_get_mm_service' */
- if ( !coords )
+ if ( num_coords && !coords )
return FT_THROW( Invalid_Argument );
error = ft_face_get_mm_service( face, &service );
@@ -140,6 +188,13 @@
error = service->set_mm_design( face, num_coords, coords );
}
+ /* enforce recomputation of auto-hinting data */
+ if ( !error && face->autohint.finalizer )
+ {
+ face->autohint.finalizer( face->autohint.data );
+ face->autohint.data = NULL;
+ }
+
return error;
}
@@ -151,6 +206,54 @@
FT_UInt num_coords,
FT_Fixed* coords )
{
+ FT_Error error;
+ FT_Service_MultiMasters service_mm = NULL;
+ FT_Service_MetricsVariations service_mvar = NULL;
+
+
+ /* check of `face' delayed to `ft_face_get_mm_service' */
+
+ if ( num_coords && !coords )
+ return FT_THROW( Invalid_Argument );
+
+ error = ft_face_get_mm_service( face, &service_mm );
+ if ( !error )
+ {
+ error = FT_ERR( Invalid_Argument );
+ if ( service_mm->set_var_design )
+ error = service_mm->set_var_design( face, num_coords, coords );
+
+ /* internal error code -1 means `no change'; we can exit immediately */
+ if ( error == -1 )
+ return FT_Err_Ok;
+ }
+
+ if ( !error )
+ {
+ (void)ft_face_get_mvar_service( face, &service_mvar );
+
+ if ( service_mvar && service_mvar->metrics_adjust )
+ service_mvar->metrics_adjust( face );
+ }
+
+ /* enforce recomputation of auto-hinting data */
+ if ( !error && face->autohint.finalizer )
+ {
+ face->autohint.finalizer( face->autohint.data );
+ face->autohint.data = NULL;
+ }
+
+ return error;
+ }
+
+
+ /* documentation is in ftmm.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Get_Var_Design_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
FT_Error error;
FT_Service_MultiMasters service;
@@ -164,8 +267,8 @@
if ( !error )
{
error = FT_ERR( Invalid_Argument );
- if ( service->set_var_design )
- error = service->set_var_design( face, num_coords, coords );
+ if ( service->get_var_design )
+ error = service->get_var_design( face, num_coords, coords );
}
return error;
@@ -179,21 +282,41 @@
FT_UInt num_coords,
FT_Fixed* coords )
{
- FT_Error error;
- FT_Service_MultiMasters service;
+ FT_Error error;
+ FT_Service_MultiMasters service_mm = NULL;
+ FT_Service_MetricsVariations service_mvar = NULL;
/* check of `face' delayed to `ft_face_get_mm_service' */
- if ( !coords )
+ if ( num_coords && !coords )
return FT_THROW( Invalid_Argument );
- error = ft_face_get_mm_service( face, &service );
+ error = ft_face_get_mm_service( face, &service_mm );
if ( !error )
{
error = FT_ERR( Invalid_Argument );
- if ( service->set_mm_blend )
- error = service->set_mm_blend( face, num_coords, coords );
+ if ( service_mm->set_mm_blend )
+ error = service_mm->set_mm_blend( face, num_coords, coords );
+
+ /* internal error code -1 means `no change'; we can exit immediately */
+ if ( error == -1 )
+ return FT_Err_Ok;
+ }
+
+ if ( !error )
+ {
+ (void)ft_face_get_mvar_service( face, &service_mvar );
+
+ if ( service_mvar && service_mvar->metrics_adjust )
+ service_mvar->metrics_adjust( face );
+ }
+
+ /* enforce recomputation of auto-hinting data */
+ if ( !error && face->autohint.finalizer )
+ {
+ face->autohint.finalizer( face->autohint.data );
+ face->autohint.data = NULL;
}
return error;
@@ -210,6 +333,54 @@
FT_UInt num_coords,
FT_Fixed* coords )
{
+ FT_Error error;
+ FT_Service_MultiMasters service_mm = NULL;
+ FT_Service_MetricsVariations service_mvar = NULL;
+
+
+ /* check of `face' delayed to `ft_face_get_mm_service' */
+
+ if ( num_coords && !coords )
+ return FT_THROW( Invalid_Argument );
+
+ error = ft_face_get_mm_service( face, &service_mm );
+ if ( !error )
+ {
+ error = FT_ERR( Invalid_Argument );
+ if ( service_mm->set_mm_blend )
+ error = service_mm->set_mm_blend( face, num_coords, coords );
+
+ /* internal error code -1 means `no change'; we can exit immediately */
+ if ( error == -1 )
+ return FT_Err_Ok;
+ }
+
+ if ( !error )
+ {
+ (void)ft_face_get_mvar_service( face, &service_mvar );
+
+ if ( service_mvar && service_mvar->metrics_adjust )
+ service_mvar->metrics_adjust( face );
+ }
+
+ /* enforce recomputation of auto-hinting data */
+ if ( !error && face->autohint.finalizer )
+ {
+ face->autohint.finalizer( face->autohint.data );
+ face->autohint.data = NULL;
+ }
+
+ return error;
+ }
+
+
+ /* documentation is in ftmm.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Get_MM_Blend_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
FT_Error error;
FT_Service_MultiMasters service;
@@ -223,8 +394,111 @@
if ( !error )
{
error = FT_ERR( Invalid_Argument );
- if ( service->set_mm_blend )
- error = service->set_mm_blend( face, num_coords, coords );
+ if ( service->get_mm_blend )
+ error = service->get_mm_blend( face, num_coords, coords );
+ }
+
+ return error;
+ }
+
+
+ /* documentation is in ftmm.h */
+
+ /* This is exactly the same as the previous function. It exists for */
+ /* orthogonality. */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Get_Var_Blend_Coordinates( FT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
+ FT_Error error;
+ FT_Service_MultiMasters service;
+
+
+ /* check of `face' delayed to `ft_face_get_mm_service' */
+
+ if ( !coords )
+ return FT_THROW( Invalid_Argument );
+
+ error = ft_face_get_mm_service( face, &service );
+ if ( !error )
+ {
+ error = FT_ERR( Invalid_Argument );
+ if ( service->get_mm_blend )
+ error = service->get_mm_blend( face, num_coords, coords );
+ }
+
+ return error;
+ }
+
+
+ /* documentation is in ftmm.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Get_Var_Axis_Flags( FT_MM_Var* master,
+ FT_UInt axis_index,
+ FT_UInt* flags )
+ {
+ FT_UShort* axis_flags;
+
+
+ if ( !master || !flags )
+ return FT_THROW( Invalid_Argument );
+
+ if ( axis_index >= master->num_axis )
+ return FT_THROW( Invalid_Argument );
+
+ /* the axis flags array immediately follows the data of `master' */
+ axis_flags = (FT_UShort*)&( master[1] );
+ *flags = axis_flags[axis_index];
+
+ return FT_Err_Ok;
+ }
+
+
+ /* documentation is in ftmm.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Set_Named_Instance( FT_Face face,
+ FT_UInt instance_index )
+ {
+ FT_Error error;
+
+ FT_Service_MultiMasters service_mm = NULL;
+ FT_Service_MetricsVariations service_mvar = NULL;
+
+
+ /* check of `face' delayed to `ft_face_get_mm_service' */
+
+ error = ft_face_get_mm_service( face, &service_mm );
+ if ( !error )
+ {
+ error = FT_ERR( Invalid_Argument );
+ if ( service_mm->set_instance )
+ error = service_mm->set_instance( face, instance_index );
+ }
+
+ if ( !error )
+ {
+ (void)ft_face_get_mvar_service( face, &service_mvar );
+
+ if ( service_mvar && service_mvar->metrics_adjust )
+ service_mvar->metrics_adjust( face );
+ }
+
+ /* enforce recomputation of auto-hinting data */
+ if ( !error && face->autohint.finalizer )
+ {
+ face->autohint.finalizer( face->autohint.data );
+ face->autohint.data = NULL;
+ }
+
+ if ( !error )
+ {
+ face->face_index = ( instance_index << 16 ) |
+ ( face->face_index & 0xFFFFL );
+ face->face_flags &= ~FT_FACE_FLAG_VARIATION;
}
return error;
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 9c3332c..8d07e35 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType private base classes (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -19,12 +19,16 @@
#include <ft2build.h>
#include FT_LIST_H
#include FT_OUTLINE_H
+#include FT_FONT_FORMATS_H
+
#include FT_INTERNAL_VALIDATE_H
#include FT_INTERNAL_OBJECTS_H
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_RFORK_H
#include FT_INTERNAL_STREAM_H
-#include FT_INTERNAL_SFNT_H /* for SFNT_Load_Table_Func */
+#include FT_INTERNAL_SFNT_H /* for SFNT_Load_Table_Func */
+#include FT_INTERNAL_POSTSCRIPT_AUX_H /* for PS_Driver */
+
#include FT_TRUETYPE_TABLES_H
#include FT_TRUETYPE_TAGS_H
#include FT_TRUETYPE_IDS_H
@@ -37,6 +41,8 @@
#include FT_SERVICE_KERNING_H
#include FT_SERVICE_TRUETYPE_ENGINE_H
+#include FT_DRIVER_H
+
#ifdef FT_CONFIG_OPTION_MAC_FONTS
#include "ftbase.h"
#endif
@@ -55,7 +61,18 @@
#pragma warning( disable : 4244 )
#endif /* _MSC_VER */
- /* it's easiest to include `md5.c' directly */
+ /* It's easiest to include `md5.c' directly. However, since OpenSSL */
+ /* also provides the same functions, there might be conflicts if */
+ /* both FreeType and OpenSSL are built as static libraries. For */
+ /* this reason, we put the MD5 stuff into the `FT_' namespace. */
+#define MD5_u32plus FT_MD5_u32plus
+#define MD5_CTX FT_MD5_CTX
+#define MD5_Init FT_MD5_Init
+#define MD5_Update FT_MD5_Update
+#define MD5_Final FT_MD5_Final
+
+#undef HAVE_OPENSSL
+
#include "md5.c"
#if defined( _MSC_VER )
@@ -68,6 +85,15 @@
#define GRID_FIT_METRICS
+ /* forward declaration */
+ static FT_Error
+ ft_open_face_internal( FT_Library library,
+ const FT_Open_Args* args,
+ FT_Long face_index,
+ FT_Face *aface,
+ FT_Bool test_mac_fonts );
+
+
FT_BASE_DEF( FT_Pointer )
ft_service_list_lookup( FT_ServiceDesc service_descriptors,
const char* service_id )
@@ -305,6 +331,138 @@
FT_BASE_DEF( void )
+ ft_glyphslot_preset_bitmap( FT_GlyphSlot slot,
+ FT_Render_Mode mode,
+ const FT_Vector* origin )
+ {
+ FT_Outline* outline = &slot->outline;
+ FT_Bitmap* bitmap = &slot->bitmap;
+
+ FT_Pixel_Mode pixel_mode;
+
+ FT_BBox cbox;
+ FT_Pos x_shift = 0;
+ FT_Pos y_shift = 0;
+ FT_Pos x_left, y_top;
+ FT_Pos width, height, pitch;
+
+
+ if ( slot->internal && ( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) )
+ return;
+
+ if ( origin )
+ {
+ x_shift = origin->x;
+ y_shift = origin->y;
+ }
+
+ /* compute the control box, and grid-fit it, */
+ /* taking into account the origin shift */
+ FT_Outline_Get_CBox( outline, &cbox );
+
+ cbox.xMin += x_shift;
+ cbox.yMin += y_shift;
+ cbox.xMax += x_shift;
+ cbox.yMax += y_shift;
+
+ switch ( mode )
+ {
+ case FT_RENDER_MODE_MONO:
+ pixel_mode = FT_PIXEL_MODE_MONO;
+#if 1
+ /* undocumented but confirmed: bbox values get rounded */
+ /* unless the rounded box can collapse for a narrow glyph */
+ if ( cbox.xMax - cbox.xMin < 64 )
+ {
+ cbox.xMin = FT_PIX_FLOOR( cbox.xMin );
+ cbox.xMax = FT_PIX_CEIL_LONG( cbox.xMax );
+ }
+ else
+ {
+ cbox.xMin = FT_PIX_ROUND_LONG( cbox.xMin );
+ cbox.xMax = FT_PIX_ROUND_LONG( cbox.xMax );
+ }
+
+ if ( cbox.yMax - cbox.yMin < 64 )
+ {
+ cbox.yMin = FT_PIX_FLOOR( cbox.yMin );
+ cbox.yMax = FT_PIX_CEIL_LONG( cbox.yMax );
+ }
+ else
+ {
+ cbox.yMin = FT_PIX_ROUND_LONG( cbox.yMin );
+ cbox.yMax = FT_PIX_ROUND_LONG( cbox.yMax );
+ }
+#else
+ cbox.xMin = FT_PIX_FLOOR( cbox.xMin );
+ cbox.yMin = FT_PIX_FLOOR( cbox.yMin );
+ cbox.xMax = FT_PIX_CEIL_LONG( cbox.xMax );
+ cbox.yMax = FT_PIX_CEIL_LONG( cbox.yMax );
+#endif
+ break;
+
+ case FT_RENDER_MODE_LCD:
+ pixel_mode = FT_PIXEL_MODE_LCD;
+ ft_lcd_padding( &cbox.xMin, &cbox.xMax, slot );
+ goto Round;
+
+ case FT_RENDER_MODE_LCD_V:
+ pixel_mode = FT_PIXEL_MODE_LCD_V;
+ ft_lcd_padding( &cbox.yMin, &cbox.yMax, slot );
+ goto Round;
+
+ case FT_RENDER_MODE_NORMAL:
+ case FT_RENDER_MODE_LIGHT:
+ default:
+ pixel_mode = FT_PIXEL_MODE_GRAY;
+ Round:
+ cbox.xMin = FT_PIX_FLOOR( cbox.xMin );
+ cbox.yMin = FT_PIX_FLOOR( cbox.yMin );
+ cbox.xMax = FT_PIX_CEIL_LONG( cbox.xMax );
+ cbox.yMax = FT_PIX_CEIL_LONG( cbox.yMax );
+ }
+
+ x_shift = SUB_LONG( x_shift, cbox.xMin );
+ y_shift = SUB_LONG( y_shift, cbox.yMin );
+
+ x_left = cbox.xMin >> 6;
+ y_top = cbox.yMax >> 6;
+
+ width = ( (FT_ULong)cbox.xMax - (FT_ULong)cbox.xMin ) >> 6;
+ height = ( (FT_ULong)cbox.yMax - (FT_ULong)cbox.yMin ) >> 6;
+
+ switch ( pixel_mode )
+ {
+ case FT_PIXEL_MODE_MONO:
+ pitch = ( ( width + 15 ) >> 4 ) << 1;
+ break;
+
+ case FT_PIXEL_MODE_LCD:
+ width *= 3;
+ pitch = FT_PAD_CEIL( width, 4 );
+ break;
+
+ case FT_PIXEL_MODE_LCD_V:
+ height *= 3;
+ /* fall through */
+
+ case FT_PIXEL_MODE_GRAY:
+ default:
+ pitch = width;
+ }
+
+ slot->bitmap_left = (FT_Int)x_left;
+ slot->bitmap_top = (FT_Int)y_top;
+
+ bitmap->pixel_mode = (unsigned char)pixel_mode;
+ bitmap->num_grays = 256;
+ bitmap->width = (unsigned int)width;
+ bitmap->rows = (unsigned int)height;
+ bitmap->pitch = pitch;
+ }
+
+
+ FT_BASE_DEF( void )
ft_glyphslot_set_bitmap( FT_GlyphSlot slot,
FT_Byte* buffer )
{
@@ -442,7 +600,8 @@
Exit:
- FT_TRACE4(( "FT_New_GlyphSlot: Return %d\n", error ));
+ FT_TRACE4(( "FT_New_GlyphSlot: Return 0x%x\n", error ));
+
return error;
}
@@ -555,34 +714,42 @@
if ( vertical )
{
metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX );
- metrics->horiBearingY = FT_PIX_CEIL ( metrics->horiBearingY );
+ metrics->horiBearingY = FT_PIX_CEIL_LONG( metrics->horiBearingY );
- right = FT_PIX_CEIL( metrics->vertBearingX + metrics->width );
- bottom = FT_PIX_CEIL( metrics->vertBearingY + metrics->height );
+ right = FT_PIX_CEIL_LONG( ADD_LONG( metrics->vertBearingX,
+ metrics->width ) );
+ bottom = FT_PIX_CEIL_LONG( ADD_LONG( metrics->vertBearingY,
+ metrics->height ) );
metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX );
metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY );
- metrics->width = right - metrics->vertBearingX;
- metrics->height = bottom - metrics->vertBearingY;
+ metrics->width = SUB_LONG( right,
+ metrics->vertBearingX );
+ metrics->height = SUB_LONG( bottom,
+ metrics->vertBearingY );
}
else
{
metrics->vertBearingX = FT_PIX_FLOOR( metrics->vertBearingX );
metrics->vertBearingY = FT_PIX_FLOOR( metrics->vertBearingY );
- right = FT_PIX_CEIL ( metrics->horiBearingX + metrics->width );
- bottom = FT_PIX_FLOOR( metrics->horiBearingY - metrics->height );
+ right = FT_PIX_CEIL_LONG( ADD_LONG( metrics->horiBearingX,
+ metrics->width ) );
+ bottom = FT_PIX_FLOOR( SUB_LONG( metrics->horiBearingY,
+ metrics->height ) );
metrics->horiBearingX = FT_PIX_FLOOR( metrics->horiBearingX );
- metrics->horiBearingY = FT_PIX_CEIL ( metrics->horiBearingY );
+ metrics->horiBearingY = FT_PIX_CEIL_LONG( metrics->horiBearingY );
- metrics->width = right - metrics->horiBearingX;
- metrics->height = metrics->horiBearingY - bottom;
+ metrics->width = SUB_LONG( right,
+ metrics->horiBearingX );
+ metrics->height = SUB_LONG( metrics->horiBearingY,
+ bottom );
}
- metrics->horiAdvance = FT_PIX_ROUND( metrics->horiAdvance );
- metrics->vertAdvance = FT_PIX_ROUND( metrics->vertAdvance );
+ metrics->horiAdvance = FT_PIX_ROUND_LONG( metrics->horiAdvance );
+ metrics->vertAdvance = FT_PIX_ROUND_LONG( metrics->vertAdvance );
}
#endif /* GRID_FIT_METRICS */
@@ -630,13 +797,20 @@
load_flags &= ~FT_LOAD_RENDER;
}
+ if ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY )
+ load_flags &= ~FT_LOAD_RENDER;
+
/*
* Determine whether we need to auto-hint or not.
* The general rules are:
*
- * - Do only auto-hinting if we have a hinter module, a scalable font
- * format dealing with outlines, and no transforms except simple
- * slants and/or rotations by integer multiples of 90 degrees.
+ * - Do only auto-hinting if we have
+ *
+ * - a hinter module,
+ * - a scalable font format dealing with outlines,
+ * - not a tricky font, and
+ * - no transforms except simple slants and/or rotations by
+ * integer multiples of 90 degrees.
*
* - Then, auto-hint if FT_LOAD_FORCE_AUTOHINT is set or if we don't
* have a native font hinter.
@@ -666,8 +840,15 @@
else
{
FT_Render_Mode mode = FT_LOAD_TARGET_MODE( load_flags );
+ FT_Bool is_light_type1;
+ /* only the new Adobe engine (for both CFF and Type 1) is `light'; */
+ /* we use `strstr' to catch both `Type 1' and `CID Type 1' */
+ is_light_type1 =
+ ft_strstr( FT_Get_Font_Format( face ), "Type 1" ) != NULL &&
+ ((PS_Driver)driver)->hinting_engine == FT_HINTING_ADOBE;
+
/* the check for `num_locations' assures that we actually */
/* test for instructions in a TTF and not in a CFF-based OTF */
/* */
@@ -675,8 +856,9 @@
/* check the size of the `fpgm' and `prep' tables, too -- */
/* the assumption is that there don't exist real TTFs where */
/* both `fpgm' and `prep' tables are missing */
- if ( mode == FT_RENDER_MODE_LIGHT ||
- face->internal->ignore_unpatented_hinter ||
+ if ( ( mode == FT_RENDER_MODE_LIGHT &&
+ ( !FT_DRIVER_HINTS_LIGHTLY( driver ) &&
+ !is_light_type1 ) ) ||
( FT_IS_SFNT( face ) &&
ttface->num_locations &&
ttface->max_profile.maxSizeOfInstructions == 0 &&
@@ -696,8 +878,8 @@
/* XXX: This is really a temporary hack that should disappear */
/* promptly with FreeType 2.1! */
/* */
- if ( FT_HAS_FIXED_SIZES( face ) &&
- ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
+ if ( FT_HAS_FIXED_SIZES( face ) &&
+ ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
{
error = driver->clazz->load_glyph( slot, face->size,
glyph_index,
@@ -765,7 +947,7 @@
/* compute the linear advance in 16.16 pixels */
if ( ( load_flags & FT_LOAD_LINEAR_DESIGN ) == 0 &&
- ( FT_IS_SCALABLE( face ) ) )
+ FT_IS_SCALABLE( face ) )
{
FT_Size_Metrics* metrics = &face->size->metrics;
@@ -813,28 +995,37 @@
}
}
- FT_TRACE5(( " x advance: %d\n" , slot->advance.x ));
- FT_TRACE5(( " y advance: %d\n" , slot->advance.y ));
-
- FT_TRACE5(( " linear x advance: %d\n" , slot->linearHoriAdvance ));
- FT_TRACE5(( " linear y advance: %d\n" , slot->linearVertAdvance ));
-
- /* do we need to render the image now? */
+ /* do we need to render the image or preset the bitmap now? */
if ( !error &&
+ ( load_flags & FT_LOAD_NO_SCALE ) == 0 &&
slot->format != FT_GLYPH_FORMAT_BITMAP &&
- slot->format != FT_GLYPH_FORMAT_COMPOSITE &&
- load_flags & FT_LOAD_RENDER )
+ slot->format != FT_GLYPH_FORMAT_COMPOSITE )
{
FT_Render_Mode mode = FT_LOAD_TARGET_MODE( load_flags );
- if ( mode == FT_RENDER_MODE_NORMAL &&
- (load_flags & FT_LOAD_MONOCHROME ) )
+ if ( mode == FT_RENDER_MODE_NORMAL &&
+ load_flags & FT_LOAD_MONOCHROME )
mode = FT_RENDER_MODE_MONO;
- error = FT_Render_Glyph( slot, mode );
+ if ( load_flags & FT_LOAD_RENDER )
+ error = FT_Render_Glyph( slot, mode );
+ else
+ ft_glyphslot_preset_bitmap( slot, mode, NULL );
}
+ FT_TRACE5(( "FT_Load_Glyph: index %d, flags %x\n",
+ glyph_index, load_flags ));
+ FT_TRACE5(( " x advance: %f\n", slot->advance.x / 64.0 ));
+ FT_TRACE5(( " y advance: %f\n", slot->advance.y / 64.0 ));
+ FT_TRACE5(( " linear x advance: %f\n",
+ slot->linearHoriAdvance / 65536.0 ));
+ FT_TRACE5(( " linear y advance: %f\n",
+ slot->linearVertAdvance / 65536.0 ));
+ FT_TRACE5(( " bitmap %dx%d, mode %d\n",
+ slot->bitmap.width, slot->bitmap.rows,
+ slot->bitmap.pixel_mode ));
+
Exit:
return error;
}
@@ -1091,7 +1282,7 @@
end = first + face->num_charmaps; /* points after the last one */
- for ( cur = first; cur < end; ++cur )
+ for ( cur = first; cur < end; cur++ )
{
if ( cur[0]->platform_id == TT_PLATFORM_APPLE_UNICODE &&
cur[0]->encoding_id == TT_APPLE_ID_VARIANT_SELECTOR &&
@@ -1162,6 +1353,8 @@
}
#endif
+ face->internal->random_seed = -1;
+
if ( clazz->init_face )
error = clazz->init_face( *astream,
face,
@@ -1226,7 +1419,7 @@
args.pathname = (char*)pathname;
args.stream = NULL;
- return FT_Open_Face( library, &args, face_index, aface );
+ return ft_open_face_internal( library, &args, face_index, aface, 1 );
}
#endif
@@ -1253,7 +1446,7 @@
args.memory_size = file_size;
args.stream = NULL;
- return FT_Open_Face( library, &args, face_index, aface );
+ return ft_open_face_internal( library, &args, face_index, aface, 1 );
}
@@ -1288,7 +1481,7 @@
/* Finalizer for a memory stream; gets called by FT_Done_Face(). */
/* It frees the memory it uses. */
- /* From ftmac.c. */
+ /* From `ftmac.c'. */
static void
memory_stream_close( FT_Stream stream )
{
@@ -1304,7 +1497,7 @@
/* Create a new memory stream from a buffer and a size. */
- /* From ftmac.c. */
+ /* From `ftmac.c'. */
static FT_Error
new_memory_stream( FT_Library library,
FT_Byte* base,
@@ -1324,7 +1517,7 @@
return FT_THROW( Invalid_Argument );
*astream = NULL;
- memory = library->memory;
+ memory = library->memory;
if ( FT_NEW( stream ) )
goto Exit;
@@ -1340,7 +1533,7 @@
/* Create a new FT_Face given a buffer and a driver name. */
- /* from ftmac.c */
+ /* From `ftmac.c'. */
FT_LOCAL_DEF( FT_Error )
open_face_from_buffer( FT_Library library,
FT_Byte* base,
@@ -1366,27 +1559,27 @@
return error;
}
- args.flags = FT_OPEN_STREAM;
+ args.flags = FT_OPEN_STREAM;
args.stream = stream;
if ( driver_name )
{
- args.flags = args.flags | FT_OPEN_DRIVER;
+ args.flags = args.flags | FT_OPEN_DRIVER;
args.driver = FT_Get_Module( library, driver_name );
}
#ifdef FT_MACINTOSH
- /* At this point, face_index has served its purpose; */
+ /* At this point, the face index has served its purpose; */
/* whoever calls this function has already used it to */
/* locate the correct font data. We should not propagate */
/* this index to FT_Open_Face() (unless it is negative). */
if ( face_index > 0 )
- face_index = 0;
+ face_index &= 0x7FFF0000L; /* retain GX data */
#endif
- error = FT_Open_Face( library, &args, face_index, aface );
+ error = ft_open_face_internal( library, &args, face_index, aface, 0 );
- if ( error == FT_Err_Ok )
+ if ( !error )
(*aface)->face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
else
#ifdef FT_MACINTOSH
@@ -1407,7 +1600,7 @@
/* Type 1 and CID-keyed font drivers should recognize sfnt-wrapped */
/* format too. Here, since we can't expect that the TrueType font */
- /* driver is loaded unconditially, we must parse the font by */
+ /* driver is loaded unconditionally, we must parse the font by */
/* ourselves. We are only interested in the name of the table and */
/* the offset. */
@@ -1472,6 +1665,7 @@
if ( face_index >= 0 && pstable_index == face_index )
return FT_Err_Ok;
}
+
return FT_THROW( Table_Missing );
}
@@ -1495,6 +1689,10 @@
FT_UNUSED( params );
+ /* ignore GX stuff */
+ if ( face_index > 0 )
+ face_index &= 0xFFFFL;
+
pos = FT_STREAM_POS();
error = ft_lookup_PS_in_sfnt_stream( stream,
@@ -1505,7 +1703,21 @@
if ( error )
goto Exit;
- if ( FT_Stream_Seek( stream, pos + offset ) )
+ if ( offset > stream->size )
+ {
+ FT_TRACE2(( "open_face_PS_from_sfnt_stream: invalid table offset\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+ else if ( length > stream->size - offset )
+ {
+ FT_TRACE2(( "open_face_PS_from_sfnt_stream: invalid table length\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ error = FT_Stream_Seek( stream, pos + offset );
+ if ( error )
goto Exit;
if ( FT_ALLOC( sfnt_ps, (FT_Long)length ) )
@@ -1513,7 +1725,10 @@
error = FT_Stream_Read( stream, (FT_Byte *)sfnt_ps, length );
if ( error )
+ {
+ FT_FREE( sfnt_ps );
goto Exit;
+ }
error = open_face_from_buffer( library,
sfnt_ps,
@@ -1556,6 +1771,7 @@
{
FT_Error error = FT_ERR( Cannot_Open_Resource );
FT_Memory memory = library->memory;
+
FT_Byte* pfb_data = NULL;
int i, type, flags;
FT_ULong len;
@@ -1571,23 +1787,28 @@
/* Find the length of all the POST resources, concatenated. Assume */
/* worst case (each resource in its own section). */
pfb_len = 0;
- for ( i = 0; i < resource_cnt; ++i )
+ for ( i = 0; i < resource_cnt; i++ )
{
error = FT_Stream_Seek( stream, (FT_ULong)offsets[i] );
if ( error )
goto Exit;
- if ( FT_READ_ULONG( temp ) )
+ if ( FT_READ_ULONG( temp ) ) /* actually LONG */
goto Exit;
/* FT2 allocator takes signed long buffer length,
* too large value causing overflow should be checked
*/
- FT_TRACE4(( " POST fragment #%d: length=0x%08x\n",
- i, temp));
- if ( 0x7FFFFFFFUL < temp || pfb_len + temp + 6 < pfb_len )
+ FT_TRACE4(( " POST fragment #%d: length=0x%08x"
+ " total pfb_len=0x%08x\n",
+ i, temp, pfb_len + temp + 6 ));
+
+ if ( FT_MAC_RFORK_MAX_LEN < temp ||
+ FT_MAC_RFORK_MAX_LEN - temp < pfb_len + 6 )
{
- FT_TRACE2(( " too long fragment length makes"
- " pfb_len confused: temp=0x%08x\n", temp ));
+ FT_TRACE2(( " MacOS resource length cannot exceed"
+ " 0x%08x\n",
+ FT_MAC_RFORK_MAX_LEN ));
+
error = FT_THROW( Invalid_Offset );
goto Exit;
}
@@ -1595,15 +1816,20 @@
pfb_len += temp + 6;
}
- FT_TRACE2(( " total buffer size to concatenate %d"
- " POST fragments: 0x%08x\n",
- resource_cnt, pfb_len + 2));
- if ( pfb_len + 2 < 6 ) {
+ FT_TRACE2(( " total buffer size to concatenate"
+ " %d POST fragments: 0x%08x\n",
+ resource_cnt, pfb_len + 2 ));
+
+ if ( pfb_len + 2 < 6 )
+ {
FT_TRACE2(( " too long fragment length makes"
- " pfb_len confused: pfb_len=0x%08x\n", pfb_len ));
+ " pfb_len confused: pfb_len=0x%08x\n",
+ pfb_len ));
+
error = FT_THROW( Array_Too_Large );
goto Exit;
}
+
if ( FT_ALLOC( pfb_data, (FT_Long)pfb_len + 2 ) )
goto Exit;
@@ -1616,9 +1842,10 @@
pfb_pos = 6;
pfb_lenpos = 2;
- len = 0;
+ len = 0;
type = 1;
- for ( i = 0; i < resource_cnt; ++i )
+
+ for ( i = 0; i < resource_cnt; i++ )
{
error = FT_Stream_Seek( stream, (FT_ULong)offsets[i] );
if ( error )
@@ -1637,18 +1864,24 @@
if ( FT_READ_USHORT( flags ) )
goto Exit2;
- FT_TRACE3(( "POST fragment[%d]: offsets=0x%08x, rlen=0x%08x, flags=0x%04x\n",
- i, offsets[i], rlen, flags ));
+
+ FT_TRACE3(( "POST fragment[%d]:"
+ " offsets=0x%08x, rlen=0x%08x, flags=0x%04x\n",
+ i, offsets[i], rlen, flags ));
error = FT_ERR( Array_Too_Large );
- /* postpone the check of rlen longer than buffer until FT_Stream_Read() */
+
+ /* postpone the check of `rlen longer than buffer' */
+ /* until `FT_Stream_Read' */
+
if ( ( flags >> 8 ) == 0 ) /* Comment, should not be loaded */
{
- FT_TRACE3(( " Skip POST fragment #%d because it is a comment\n", i ));
+ FT_TRACE3(( " Skip POST fragment #%d because it is a comment\n",
+ i ));
continue;
}
- /* the flags are part of the resource, so rlen >= 2. */
+ /* the flags are part of the resource, so rlen >= 2, */
/* but some fonts declare rlen = 0 for empty fragment */
if ( rlen > 2 )
rlen -= 2;
@@ -1660,9 +1893,12 @@
else
{
FT_TRACE3(( " Write POST fragment #%d header (4-byte) to buffer"
- " 0x%p + 0x%08x\n", i, pfb_data, pfb_lenpos ));
+ " %p + 0x%08x\n",
+ i, pfb_data, pfb_lenpos ));
+
if ( pfb_lenpos + 3 > pfb_len + 2 )
goto Exit2;
+
pfb_data[pfb_lenpos ] = (FT_Byte)( len );
pfb_data[pfb_lenpos + 1] = (FT_Byte)( len >> 8 );
pfb_data[pfb_lenpos + 2] = (FT_Byte)( len >> 16 );
@@ -1672,13 +1908,16 @@
break;
FT_TRACE3(( " Write POST fragment #%d header (6-byte) to buffer"
- " 0x%p + 0x%08x\n", i, pfb_data, pfb_pos ));
+ " %p + 0x%08x\n",
+ i, pfb_data, pfb_pos ));
+
if ( pfb_pos + 6 > pfb_len + 2 )
goto Exit2;
+
pfb_data[pfb_pos++] = 0x80;
type = flags >> 8;
- len = rlen;
+ len = rlen;
pfb_data[pfb_pos++] = (FT_Byte)type;
pfb_lenpos = pfb_pos;
@@ -1692,14 +1931,18 @@
goto Exit2;
FT_TRACE3(( " Load POST fragment #%d (%d byte) to buffer"
- " 0x%p + 0x%08x\n", i, rlen, pfb_data, pfb_pos ));
+ " %p + 0x%08x\n",
+ i, rlen, pfb_data, pfb_pos ));
+
error = FT_Stream_Read( stream, (FT_Byte *)pfb_data + pfb_pos, rlen );
if ( error )
goto Exit2;
+
pfb_pos += rlen;
}
error = FT_ERR( Array_Too_Large );
+
if ( pfb_pos + 2 > pfb_len + 2 )
goto Exit2;
pfb_data[pfb_pos++] = 0x80;
@@ -1720,11 +1963,12 @@
aface );
Exit2:
- if ( error == FT_ERR( Array_Too_Large ) )
+ if ( FT_ERR_EQ( error, Array_Too_Large ) )
FT_TRACE2(( " Abort due to too-short buffer to store"
" all POST fragments\n" ));
- else if ( error == FT_ERR( Invalid_Offset ) )
+ else if ( FT_ERR_EQ( error, Invalid_Offset ) )
FT_TRACE2(( " Abort due to invalid offset in a POST fragment\n" ));
+
if ( error )
error = FT_ERR( Cannot_Open_Resource );
FT_FREE( pfb_data );
@@ -1737,7 +1981,7 @@
/* The resource header says we've got resource_cnt `sfnt' */
/* (TrueType/OpenType) resources in this file. Look through */
/* them for the one indicated by face_index, load it into mem, */
- /* pass it on the the truetype driver and return it. */
+ /* pass it on to the truetype driver, and return it. */
/* */
static FT_Error
Mac_Read_sfnt_Resource( FT_Library library,
@@ -1756,8 +2000,8 @@
FT_Long face_index_in_resource = 0;
- if ( face_index == -1 )
- face_index = 0;
+ if ( face_index < 0 )
+ face_index = -face_index - 1;
if ( face_index >= resource_cnt )
return FT_THROW( Cannot_Open_Resource );
@@ -1768,8 +2012,10 @@
if ( FT_READ_LONG( rlen ) )
goto Exit;
- if ( rlen == -1 )
+ if ( rlen < 1 )
return FT_THROW( Cannot_Open_Resource );
+ if ( (FT_ULong)rlen > FT_MAC_RFORK_MAX_LEN )
+ return FT_THROW( Invalid_Offset );
error = open_face_PS_from_sfnt_stream( library,
stream,
@@ -1780,14 +2026,17 @@
goto Exit;
/* rewind sfnt stream before open_face_PS_from_sfnt_stream() */
- if ( FT_Stream_Seek( stream, flag_offset + 4 ) )
+ error = FT_Stream_Seek( stream, flag_offset + 4 );
+ if ( error )
goto Exit;
if ( FT_ALLOC( sfnt_data, rlen ) )
return error;
error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, (FT_ULong)rlen );
- if ( error )
+ if ( error ) {
+ FT_FREE( sfnt_data );
goto Exit;
+ }
is_cff = rlen > 4 && !ft_memcmp( sfnt_data, "OTTO", 4 );
error = open_face_from_buffer( library,
@@ -1816,19 +2065,19 @@
{
FT_Memory memory = library->memory;
FT_Error error;
- FT_Long map_offset, rdara_pos;
+ FT_Long map_offset, rdata_pos;
FT_Long *data_offsets;
FT_Long count;
error = FT_Raccess_Get_HeaderInfo( library, stream, resource_offset,
- &map_offset, &rdara_pos );
+ &map_offset, &rdata_pos );
if ( error )
return error;
/* POST resources must be sorted to concatenate properly */
error = FT_Raccess_Get_DataOffsets( library, stream,
- map_offset, rdara_pos,
+ map_offset, rdata_pos,
TTAG_POST, TRUE,
&data_offsets, &count );
if ( !error )
@@ -1845,7 +2094,7 @@
/* sfnt resources should not be sorted to preserve the face order by
QuickDraw API */
error = FT_Raccess_Get_DataOffsets( library, stream,
- map_offset, rdara_pos,
+ map_offset, rdata_pos,
TTAG_sfnt, FALSE,
&data_offsets, &count );
if ( !error )
@@ -1878,7 +2127,7 @@
FT_Long dlen, offset;
- if ( NULL == stream )
+ if ( !stream )
return FT_THROW( Invalid_Stream_Operation );
error = FT_Stream_Seek( stream, 0 );
@@ -1889,13 +2138,14 @@
if ( error )
goto Exit;
- if ( header[ 0] != 0 ||
- header[74] != 0 ||
- header[82] != 0 ||
- header[ 1] == 0 ||
- header[ 1] > 33 ||
- header[63] != 0 ||
- header[2 + header[1]] != 0 )
+ if ( header[ 0] != 0 ||
+ header[74] != 0 ||
+ header[82] != 0 ||
+ header[ 1] == 0 ||
+ header[ 1] > 33 ||
+ header[63] != 0 ||
+ header[2 + header[1]] != 0 ||
+ header[0x53] > 0x7F )
return FT_THROW( Unknown_File_Format );
dlen = ( header[0x53] << 24 ) |
@@ -1951,13 +2201,15 @@
{
FT_TRACE3(( "Skip rule %d: darwin vfs resource fork"
" is already checked and"
- " no font is found\n", i ));
+ " no font is found\n",
+ i ));
continue;
}
if ( errors[i] )
{
- FT_TRACE3(( "Error[%d] has occurred in rule %d\n", errors[i], i ));
+ FT_TRACE3(( "Error 0x%x has occurred in rule %d\n",
+ errors[i], i ));
continue;
}
@@ -2032,7 +2284,11 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_raccess
- FT_TRACE3(( "Try as dfont: %s ...", args->pathname ));
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE3(( "Try as dfont: " ));
+ if ( !( args->flags & FT_OPEN_MEMORY ) )
+ FT_TRACE3(( "%s ...", args->pathname ));
+#endif
error = IsMacResource( library, stream, 0, face_index, aface );
@@ -2063,6 +2319,17 @@
FT_Long face_index,
FT_Face *aface )
{
+ return ft_open_face_internal( library, args, face_index, aface, 1 );
+ }
+
+
+ static FT_Error
+ ft_open_face_internal( FT_Library library,
+ const FT_Open_Args* args,
+ FT_Long face_index,
+ FT_Face *aface,
+ FT_Bool test_mac_fonts )
+ {
FT_Error error;
FT_Driver driver = NULL;
FT_Memory memory = NULL;
@@ -2073,6 +2340,23 @@
FT_Module* cur;
FT_Module* limit;
+#ifndef FT_CONFIG_OPTION_MAC_FONTS
+ FT_UNUSED( test_mac_fonts );
+#endif
+
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE3(( "FT_Open_Face: " ));
+ if ( face_index < 0 )
+ FT_TRACE3(( "Requesting number of faces and named instances\n"));
+ else
+ {
+ FT_TRACE3(( "Requesting face %ld", face_index & 0xFFFFL ));
+ if ( face_index & 0x7FFF0000L )
+ FT_TRACE3(( ", named instance %ld", face_index >> 16 ));
+ FT_TRACE3(( "\n" ));
+ }
+#endif
/* test for valid `library' delayed to `FT_Stream_New' */
@@ -2150,11 +2434,13 @@
goto Success;
#ifdef FT_CONFIG_OPTION_MAC_FONTS
- if ( ft_strcmp( cur[0]->clazz->module_name, "truetype" ) == 0 &&
+ if ( test_mac_fonts &&
+ ft_strcmp( cur[0]->clazz->module_name, "truetype" ) == 0 &&
FT_ERR_EQ( error, Table_Missing ) )
{
/* TrueType but essential tables are missing */
- if ( FT_Stream_Seek( stream, 0 ) )
+ error = FT_Stream_Seek( stream, 0 );
+ if ( error )
break;
error = open_face_PS_from_sfnt_stream( library,
@@ -2186,16 +2472,20 @@
goto Fail2;
#if !defined( FT_MACINTOSH ) && defined( FT_CONFIG_OPTION_MAC_FONTS )
- error = load_mac_face( library, stream, face_index, aface, args );
- if ( !error )
+ if ( test_mac_fonts )
{
- /* We don't want to go to Success here. We've already done that. */
- /* On the other hand, if we succeeded we still need to close this */
- /* stream (we opened a different stream which extracted the */
- /* interesting information out of this stream here. That stream */
- /* will still be open and the face will point to it). */
- FT_Stream_Free( stream, external_stream );
- return error;
+ error = load_mac_face( library, stream, face_index, aface, args );
+ if ( !error )
+ {
+ /* We don't want to go to Success here. We've already done */
+ /* that. On the other hand, if we succeeded we still need to */
+ /* close this stream (we opened a different stream which */
+ /* extracted the interesting information out of this stream */
+ /* here. That stream will still be open and the face will */
+ /* point to it). */
+ FT_Stream_Free( stream, external_stream );
+ return error;
+ }
}
if ( FT_ERR_NEQ( error, Unknown_File_Format ) )
@@ -2268,11 +2558,24 @@
if ( bsize->height < 0 )
- bsize->height = (FT_Short)-bsize->height;
+ bsize->height = -bsize->height;
if ( bsize->x_ppem < 0 )
- bsize->x_ppem = (FT_Short)-bsize->x_ppem;
+ bsize->x_ppem = -bsize->x_ppem;
if ( bsize->y_ppem < 0 )
bsize->y_ppem = -bsize->y_ppem;
+
+ /* check whether negation actually has worked */
+ if ( bsize->height < 0 || bsize->x_ppem < 0 || bsize->y_ppem < 0 )
+ {
+ FT_TRACE0(( "FT_Open_Face:"
+ " Invalid bitmap dimensions for strike %d,"
+ " now disabled\n", i ));
+ bsize->width = 0;
+ bsize->height = 0;
+ bsize->size = 0;
+ bsize->x_ppem = 0;
+ bsize->y_ppem = 0;
+ }
}
}
@@ -2290,6 +2593,13 @@
internal->transform_delta.y = 0;
internal->refcount = 1;
+
+ internal->no_stem_darkening = -1;
+
+#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+ /* Per-face filtering can only be set up by FT_Face_Properties */
+ internal->lcd_filter_func = NULL;
+#endif
}
if ( aface )
@@ -2306,7 +2616,20 @@
destroy_face( memory, face, driver );
Exit:
- FT_TRACE4(( "FT_Open_Face: Return %d\n", error ));
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( !error && face_index < 0 )
+ {
+ FT_TRACE3(( "FT_Open_Face: The font has %ld face%s\n"
+ " and %ld named instance%s for face %ld\n",
+ face->num_faces,
+ face->num_faces == 1 ? "" : "s",
+ face->style_flags >> 16,
+ ( face->style_flags >> 16 ) == 1 ? "" : "s",
+ -face_index - 1 ));
+ }
+#endif
+
+ FT_TRACE4(( "FT_Open_Face: Return 0x%x\n", error ));
return error;
}
@@ -2447,6 +2770,8 @@
FT_Size size = NULL;
FT_ListNode node = NULL;
+ FT_Size_Internal internal = NULL;
+
if ( !face )
return FT_THROW( Invalid_Face_Handle );
@@ -2469,8 +2794,10 @@
size->face = face;
- /* for now, do not use any internal fields in size objects */
- size->internal = NULL;
+ if ( FT_NEW( internal ) )
+ goto Exit;
+
+ size->internal = internal;
if ( clazz->init_size )
error = clazz->init_size( size );
@@ -2572,6 +2899,9 @@
w = FT_PIX_ROUND( w );
h = FT_PIX_ROUND( h );
+ if ( !w || !h )
+ return FT_THROW( Invalid_Pixel_Size );
+
for ( i = 0; i < face->num_fixed_sizes; i++ )
{
FT_Bitmap_Size* bsize = face->available_sizes + i;
@@ -2591,6 +2921,8 @@
}
}
+ FT_TRACE3(( "FT_Match_Size: no matching bitmap strike\n" ));
+
return FT_THROW( Invalid_Pixel_Size );
}
@@ -2689,18 +3021,6 @@
metrics->height = bsize->height << 6;
metrics->max_advance = bsize->x_ppem;
}
-
- FT_TRACE5(( "FT_Select_Metrics:\n" ));
- FT_TRACE5(( " x scale: %d (%f)\n",
- metrics->x_scale, metrics->x_scale / 65536.0 ));
- FT_TRACE5(( " y scale: %d (%f)\n",
- metrics->y_scale, metrics->y_scale / 65536.0 ));
- FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
- FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
- FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
- FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
- FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
}
@@ -2809,18 +3129,6 @@
metrics->x_scale = 1L << 16;
metrics->y_scale = 1L << 16;
}
-
- FT_TRACE5(( "FT_Request_Metrics:\n" ));
- FT_TRACE5(( " x scale: %d (%f)\n",
- metrics->x_scale, metrics->x_scale / 65536.0 ));
- FT_TRACE5(( " y scale: %d (%f)\n",
- metrics->y_scale, metrics->y_scale / 65536.0 ));
- FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
- FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
- FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
- FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
- FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
}
@@ -2830,6 +3138,7 @@
FT_Select_Size( FT_Face face,
FT_Int strike_index )
{
+ FT_Error error = FT_Err_Ok;
FT_Driver_Class clazz;
@@ -2843,36 +3152,37 @@
if ( clazz->select_size )
{
- FT_Error error;
-
-
error = clazz->select_size( face->size, (FT_ULong)strike_index );
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_Size_Metrics* metrics = &face->size->metrics;
+ FT_TRACE5(( "FT_Select_Size (%s driver):\n",
+ face->driver->root.clazz->module_name ));
+ }
+ else
+ {
+ FT_Select_Metrics( face, (FT_ULong)strike_index );
-
- FT_TRACE5(( "FT_Select_Size (font driver's `select_size'):\n" ));
- FT_TRACE5(( " x scale: %d (%f)\n",
- metrics->x_scale, metrics->x_scale / 65536.0 ));
- FT_TRACE5(( " y scale: %d (%f)\n",
- metrics->y_scale, metrics->y_scale / 65536.0 ));
- FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
- FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
- FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
- FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
- FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
- }
-#endif
-
- return error;
+ FT_TRACE5(( "FT_Select_Size:\n" ));
}
- FT_Select_Metrics( face, (FT_ULong)strike_index );
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ FT_Size_Metrics* metrics = &face->size->metrics;
- return FT_Err_Ok;
+
+ FT_TRACE5(( " x scale: %d (%f)\n",
+ metrics->x_scale, metrics->x_scale / 65536.0 ));
+ FT_TRACE5(( " y scale: %d (%f)\n",
+ metrics->y_scale, metrics->y_scale / 65536.0 ));
+ FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
+ FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
+ FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
+ }
+#endif
+
+ return error;
}
@@ -2882,6 +3192,7 @@
FT_Request_Size( FT_Face face,
FT_Size_Request req )
{
+ FT_Error error = FT_Err_Ok;
FT_Driver_Class clazz;
FT_ULong strike_index;
@@ -2893,59 +3204,60 @@
req->type >= FT_SIZE_REQUEST_TYPE_MAX )
return FT_THROW( Invalid_Argument );
+ /* signal the auto-hinter to recompute its size metrics */
+ /* (if requested) */
+ face->size->internal->autohint_metrics.x_scale = 0;
+
clazz = face->driver->clazz;
if ( clazz->request_size )
{
- FT_Error error;
-
-
error = clazz->request_size( face->size, req );
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_Size_Metrics* metrics = &face->size->metrics;
-
-
- FT_TRACE5(( "FT_Request_Size (font driver's `request_size'):\n" ));
- FT_TRACE5(( " x scale: %d (%f)\n",
- metrics->x_scale, metrics->x_scale / 65536.0 ));
- FT_TRACE5(( " y scale: %d (%f)\n",
- metrics->y_scale, metrics->y_scale / 65536.0 ));
- FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
- FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
- FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
- FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
- FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
- FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
- }
-#endif
-
- return error;
+ FT_TRACE5(( "FT_Request_Size (%s driver):\n",
+ face->driver->root.clazz->module_name ));
}
-
- /*
- * The reason that a driver doesn't have `request_size' defined is
- * either that the scaling here suffices or that the supported formats
- * are bitmap-only and size matching is not implemented.
- *
- * In the latter case, a simple size matching is done.
- */
- if ( !FT_IS_SCALABLE( face ) && FT_HAS_FIXED_SIZES( face ) )
+ else if ( !FT_IS_SCALABLE( face ) && FT_HAS_FIXED_SIZES( face ) )
{
- FT_Error error;
-
-
+ /*
+ * The reason that a driver doesn't have `request_size' defined is
+ * either that the scaling here suffices or that the supported formats
+ * are bitmap-only and size matching is not implemented.
+ *
+ * In the latter case, a simple size matching is done.
+ */
error = FT_Match_Size( face, req, 0, &strike_index );
if ( error )
return error;
return FT_Select_Size( face, (FT_Int)strike_index );
}
+ else
+ {
+ FT_Request_Metrics( face, req );
- FT_Request_Metrics( face, req );
+ FT_TRACE5(( "FT_Request_Size:\n" ));
+ }
- return FT_Err_Ok;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ FT_Size_Metrics* metrics = &face->size->metrics;
+
+
+ FT_TRACE5(( " x scale: %d (%f)\n",
+ metrics->x_scale, metrics->x_scale / 65536.0 ));
+ FT_TRACE5(( " y scale: %d (%f)\n",
+ metrics->y_scale, metrics->y_scale / 65536.0 ));
+ FT_TRACE5(( " ascender: %f\n", metrics->ascender / 64.0 ));
+ FT_TRACE5(( " descender: %f\n", metrics->descender / 64.0 ));
+ FT_TRACE5(( " height: %f\n", metrics->height / 64.0 ));
+ FT_TRACE5(( " max advance: %f\n", metrics->max_advance / 64.0 ));
+ FT_TRACE5(( " x ppem: %d\n", metrics->x_ppem ));
+ FT_TRACE5(( " y ppem: %d\n", metrics->y_ppem ));
+ }
+#endif
+
+ return error;
}
@@ -3068,18 +3380,37 @@
if ( kern_mode != FT_KERNING_UNFITTED )
{
+ FT_Pos orig_x = akerning->x;
+ FT_Pos orig_y = akerning->y;
+
+
/* we scale down kerning values for small ppem values */
/* to avoid that rounding makes them too big. */
/* `25' has been determined heuristically. */
if ( face->size->metrics.x_ppem < 25 )
- akerning->x = FT_MulDiv( akerning->x,
+ akerning->x = FT_MulDiv( orig_x,
face->size->metrics.x_ppem, 25 );
if ( face->size->metrics.y_ppem < 25 )
- akerning->y = FT_MulDiv( akerning->y,
+ akerning->y = FT_MulDiv( orig_y,
face->size->metrics.y_ppem, 25 );
akerning->x = FT_PIX_ROUND( akerning->x );
akerning->y = FT_PIX_ROUND( akerning->y );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ FT_Pos orig_x_rounded = FT_PIX_ROUND( orig_x );
+ FT_Pos orig_y_rounded = FT_PIX_ROUND( orig_y );
+
+
+ if ( akerning->x != orig_x_rounded ||
+ akerning->y != orig_y_rounded )
+ FT_TRACE5(( "FT_Get_Kerning: horizontal kerning"
+ " (%d, %d) scaled down to (%d, %d) pixels\n",
+ orig_x_rounded / 64, orig_y_rounded / 64,
+ akerning->x / 64, akerning->y / 64 ));
+ }
+#endif
}
}
}
@@ -3291,7 +3622,7 @@
FT_CMap cmap = NULL;
- if ( clazz == NULL || charmap == NULL || charmap->face == NULL )
+ if ( !clazz || !charmap || !charmap->face )
return FT_THROW( Invalid_Argument );
face = charmap->face;
@@ -3350,8 +3681,12 @@
FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
FT_TRACE1(( " 0x%x is truncated\n", charcode ));
}
+
result = cmap->clazz->char_index( cmap, (FT_UInt32)charcode );
+ if ( result >= (FT_UInt)face->num_glyphs )
+ result = 0;
}
+
return result;
}
@@ -3370,7 +3705,7 @@
if ( face && face->charmap && face->num_glyphs )
{
gindex = FT_Get_Char_Index( face, 0 );
- if ( gindex == 0 || gindex >= (FT_UInt)face->num_glyphs )
+ if ( gindex == 0 )
result = FT_Get_Next_Char( face, 0, &gindex );
}
@@ -3416,6 +3751,85 @@
/* documentation is in freetype.h */
+ FT_EXPORT_DEF( FT_Error )
+ FT_Face_Properties( FT_Face face,
+ FT_UInt num_properties,
+ FT_Parameter* properties )
+ {
+ FT_Error error = FT_Err_Ok;
+
+
+ if ( num_properties > 0 && !properties )
+ {
+ error = FT_THROW( Invalid_Argument );
+ goto Exit;
+ }
+
+ for ( ; num_properties > 0; num_properties-- )
+ {
+ if ( properties->tag == FT_PARAM_TAG_STEM_DARKENING )
+ {
+ if ( properties->data )
+ {
+ if ( *( (FT_Bool*)properties->data ) == TRUE )
+ face->internal->no_stem_darkening = FALSE;
+ else
+ face->internal->no_stem_darkening = TRUE;
+ }
+ else
+ {
+ /* use module default */
+ face->internal->no_stem_darkening = -1;
+ }
+ }
+ else if ( properties->tag == FT_PARAM_TAG_LCD_FILTER_WEIGHTS )
+ {
+#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+ if ( properties->data )
+ {
+ ft_memcpy( face->internal->lcd_weights,
+ properties->data,
+ FT_LCD_FILTER_FIVE_TAPS );
+ face->internal->lcd_filter_func = ft_lcd_filter_fir;
+ }
+#else
+ error = FT_THROW( Unimplemented_Feature );
+ goto Exit;
+#endif
+ }
+ else if ( properties->tag == FT_PARAM_TAG_RANDOM_SEED )
+ {
+ if ( properties->data )
+ {
+ face->internal->random_seed = *( (FT_Int32*)properties->data );
+ if ( face->internal->random_seed < 0 )
+ face->internal->random_seed = 0;
+ }
+ else
+ {
+ /* use module default */
+ face->internal->random_seed = -1;
+ }
+ }
+ else
+ {
+ error = FT_THROW( Invalid_Argument );
+ goto Exit;
+ }
+
+ if ( error )
+ break;
+
+ properties++;
+ }
+
+ Exit:
+ return error;
+ }
+
+
+ /* documentation is in freetype.h */
+
FT_EXPORT_DEF( FT_UInt )
FT_Face_GetCharVariantIndex( FT_Face face,
FT_ULong charcode,
@@ -3432,19 +3846,21 @@
FT_CMap ucmap = FT_CMAP( face->charmap );
- if ( charmap != NULL )
+ if ( charmap )
{
FT_CMap vcmap = FT_CMAP( charmap );
if ( charcode > 0xFFFFFFFFUL )
{
- FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
+ FT_TRACE1(( "FT_Face_GetCharVariantIndex:"
+ " too large charcode" ));
FT_TRACE1(( " 0x%x is truncated\n", charcode ));
}
if ( variantSelector > 0xFFFFFFFFUL )
{
- FT_TRACE1(( "FT_Get_Char_Index: too large variantSelector" ));
+ FT_TRACE1(( "FT_Face_GetCharVariantIndex:"
+ " too large variantSelector" ));
FT_TRACE1(( " 0x%x is truncated\n", variantSelector ));
}
@@ -3473,19 +3889,21 @@
FT_CharMap charmap = find_variant_selector_charmap( face );
- if ( charmap != NULL )
+ if ( charmap )
{
FT_CMap vcmap = FT_CMAP( charmap );
if ( charcode > 0xFFFFFFFFUL )
{
- FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
+ FT_TRACE1(( "FT_Face_GetCharVariantIsDefault:"
+ " too large charcode" ));
FT_TRACE1(( " 0x%x is truncated\n", charcode ));
}
if ( variantSelector > 0xFFFFFFFFUL )
{
- FT_TRACE1(( "FT_Get_Char_Index: too large variantSelector" ));
+ FT_TRACE1(( "FT_Face_GetCharVariantIsDefault:"
+ " too large variantSelector" ));
FT_TRACE1(( " 0x%x is truncated\n", variantSelector ));
}
@@ -3512,7 +3930,7 @@
FT_CharMap charmap = find_variant_selector_charmap( face );
- if ( charmap != NULL )
+ if ( charmap )
{
FT_CMap vcmap = FT_CMAP( charmap );
FT_Memory memory = FT_FACE_MEMORY( face );
@@ -3540,7 +3958,7 @@
FT_CharMap charmap = find_variant_selector_charmap( face );
- if ( charmap != NULL )
+ if ( charmap )
{
FT_CMap vcmap = FT_CMAP( charmap );
FT_Memory memory = FT_FACE_MEMORY( face );
@@ -3548,7 +3966,7 @@
if ( charcode > 0xFFFFFFFFUL )
{
- FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
+ FT_TRACE1(( "FT_Face_GetVariantsOfChar: too large charcode" ));
FT_TRACE1(( " 0x%x is truncated\n", charcode ));
}
@@ -3574,7 +3992,7 @@
FT_CharMap charmap = find_variant_selector_charmap( face );
- if ( charmap != NULL )
+ if ( charmap )
{
FT_CMap vcmap = FT_CMAP( charmap );
FT_Memory memory = FT_FACE_MEMORY( face );
@@ -3702,7 +4120,7 @@
if ( face && FT_IS_SFNT( face ) )
{
FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
- if ( service != NULL )
+ if ( service )
table = service->get_table( face, tag );
}
@@ -3726,7 +4144,7 @@
return FT_THROW( Invalid_Face_Handle );
FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
- if ( service == NULL )
+ if ( !service )
return FT_THROW( Unimplemented_Feature );
return service->load_table( face, tag, offset, buffer, length );
@@ -3751,7 +4169,7 @@
return FT_THROW( Invalid_Face_Handle );
FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
- if ( service == NULL )
+ if ( !service )
return FT_THROW( Unimplemented_Feature );
return service->table_info( face, table_index, tag, &offset, length );
@@ -3773,7 +4191,7 @@
face = charmap->face;
FT_FACE_FIND_SERVICE( face, service, TT_CMAP );
- if ( service == NULL )
+ if ( !service )
return 0;
if ( service->get_cmap_info( charmap, &cmap_info ))
return 0;
@@ -3797,7 +4215,7 @@
face = charmap->face;
FT_FACE_FIND_SERVICE( face, service, TT_CMAP );
- if ( service == NULL )
+ if ( !service )
return -1;
if ( service->get_cmap_info( charmap, &cmap_info ))
return -1;
@@ -4116,8 +4534,17 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_bitmap
- /* we convert to a single bitmap format for computing the checksum */
- if ( !error )
+ /*
+ * Computing the MD5 checksum is expensive, unnecessarily distorting a
+ * possible profiling of FreeType if compiled with tracing support. For
+ * this reason, we execute the following code only if explicitly
+ * requested.
+ */
+
+ /* we use FT_TRACE3 in this block */
+ if ( !error &&
+ ft_trace_levels[trace_bitmap] >= 3 &&
+ slot->bitmap.buffer )
{
FT_Bitmap bitmap;
FT_Error err;
@@ -4125,24 +4552,35 @@
FT_Bitmap_Init( &bitmap );
- /* this also converts the bitmap flow to `down' (i.e., pitch > 0) */
+ /* we convert to a single bitmap format for computing the checksum */
+ /* this also converts the bitmap flow to `down' (i.e., pitch > 0) */
err = FT_Bitmap_Convert( library, &slot->bitmap, &bitmap, 1 );
if ( !err )
{
MD5_CTX ctx;
unsigned char md5[16];
- int i;
- unsigned int rows = bitmap.rows;
- unsigned int pitch = (unsigned int)bitmap.pitch;
+ unsigned long coverage = 0;
+ int i, j;
+ int rows = (int)bitmap.rows;
+ int pitch = bitmap.pitch;
+ FT_TRACE3(( "FT_Render_Glyph: bitmap %dx%d, mode %d\n",
+ rows, pitch, slot->bitmap.pixel_mode ));
+
+ for ( i = 0; i < rows; i++ )
+ for ( j = 0; j < pitch; j++ )
+ coverage += bitmap.buffer[i * pitch + j];
+
+ FT_TRACE3(( " Total coverage: %lu\n", coverage ));
+
MD5_Init( &ctx );
- MD5_Update( &ctx, bitmap.buffer, rows * pitch );
+ if ( bitmap.buffer )
+ MD5_Update( &ctx, bitmap.buffer,
+ (unsigned long)rows * (unsigned long)pitch );
MD5_Final( md5, &ctx );
- FT_TRACE3(( "MD5 checksum for %dx%d bitmap:\n"
- " ",
- rows, pitch ));
+ FT_TRACE3(( " MD5 checksum: " ));
for ( i = 0; i < 16; i++ )
FT_TRACE3(( "%02X", md5[i] ));
FT_TRACE3(( "\n" ));
@@ -4151,6 +4589,52 @@
FT_Bitmap_Done( library, &bitmap );
}
+ /*
+ * Dump bitmap in Netpbm format (PBM or PGM).
+ */
+
+ /* we use FT_TRACE7 in this block */
+ if ( !error &&
+ ft_trace_levels[trace_bitmap] >= 7 &&
+ slot->bitmap.rows < 128U &&
+ slot->bitmap.width < 128U &&
+ slot->bitmap.buffer )
+ {
+ int rows = (int)slot->bitmap.rows;
+ int width = (int)slot->bitmap.width;
+ int pitch = slot->bitmap.pitch;
+ int i, j, m;
+ unsigned char* topleft = slot->bitmap.buffer;
+
+ if ( pitch < 0 )
+ topleft -= pitch * ( rows - 1 );
+
+ FT_TRACE7(( "Netpbm image: start\n" ));
+ switch ( slot->bitmap.pixel_mode )
+ {
+ case FT_PIXEL_MODE_MONO:
+ FT_TRACE7(( "P1 %d %d\n", width, rows ));
+ for ( i = 0; i < rows; i++ )
+ {
+ for ( j = 0; j < width; )
+ for ( m = 128; m > 0 && j < width; m >>= 1, j++ )
+ FT_TRACE7(( " %d", ( topleft[i * pitch + j / 8] & m ) != 0 ));
+ FT_TRACE7(( "\n" ));
+ }
+ break;
+
+ default:
+ FT_TRACE7(( "P2 %d %d 255\n", width, rows ));
+ for ( i = 0; i < rows; i++ )
+ {
+ for ( j = 0; j < width; j += 1 )
+ FT_TRACE7(( " %3u", topleft[i * pitch + j] ));
+ FT_TRACE7(( "\n" ));
+ }
+ }
+ FT_TRACE7(( "Netpbm image: end\n" ));
+ }
+
#undef FT_COMPONENT
#define FT_COMPONENT trace_objs
@@ -4242,7 +4726,7 @@
{
FT_Error error;
FT_Memory memory;
- FT_Module module;
+ FT_Module module = NULL;
FT_UInt nn;
@@ -4255,7 +4739,7 @@
if ( !clazz )
return FT_THROW( Invalid_Argument );
- /* check freetype version */
+ /* check FreeType version */
if ( clazz->module_requires > FREETYPE_VER_FIXED )
return FT_THROW( Invalid_Version );
@@ -4394,7 +4878,8 @@
FT_BASE_DEF( FT_Pointer )
ft_module_get_service( FT_Module module,
- const char* service_id )
+ const char* service_id,
+ FT_Bool global )
{
FT_Pointer result = NULL;
@@ -4407,7 +4892,7 @@
if ( module->clazz->get_interface )
result = module->clazz->get_interface( module, service_id );
- if ( result == NULL )
+ if ( global && !result )
{
/* we didn't find it, look in all other modules then */
FT_Library library = module->library;
@@ -4424,7 +4909,7 @@
if ( cur[0]->clazz->get_interface )
{
result = cur[0]->clazz->get_interface( cur[0], service_id );
- if ( result != NULL )
+ if ( result )
break;
}
}
@@ -4483,7 +4968,8 @@
const FT_String* module_name,
const FT_String* property_name,
void* value,
- FT_Bool set )
+ FT_Bool set,
+ FT_Bool value_is_string )
{
FT_Module* cur;
FT_Module* limit;
@@ -4553,8 +5039,13 @@
return FT_THROW( Unimplemented_Feature );
}
- return set ? service->set_property( cur[0], property_name, value )
- : service->get_property( cur[0], property_name, value );
+ return set ? service->set_property( cur[0],
+ property_name,
+ value,
+ value_is_string )
+ : service->get_property( cur[0],
+ property_name,
+ value );
}
@@ -4570,7 +5061,8 @@
module_name,
property_name,
(void*)value,
- TRUE );
+ TRUE,
+ FALSE );
}
@@ -4586,10 +5078,33 @@
module_name,
property_name,
value,
+ FALSE,
FALSE );
}
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+
+ /* this variant is used for handling the FREETYPE_PROPERTIES */
+ /* environment variable */
+
+ FT_BASE_DEF( FT_Error )
+ ft_property_string_set( FT_Library library,
+ const FT_String* module_name,
+ const FT_String* property_name,
+ FT_String* value )
+ {
+ return ft_property_do( library,
+ module_name,
+ property_name,
+ (void*)value,
+ TRUE,
+ TRUE );
+ }
+
+#endif
+
+
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
@@ -4648,10 +5163,6 @@
goto Fail;
#endif
- /* we don't use raster_pool anymore. */
- library->raster_pool_size = 0;
- library->raster_pool = NULL;
-
library->version_major = FREETYPE_MAJOR;
library->version_minor = FREETYPE_MINOR;
library->version_patch = FREETYPE_PATCH;
@@ -4666,9 +5177,9 @@
#ifdef FT_CONFIG_OPTION_PIC
Fail:
ft_pic_container_destroy( library );
-#endif
FT_FREE( library );
return error;
+#endif
}
@@ -4845,7 +5356,8 @@
service = (FT_Service_TrueTypeEngine)
ft_module_get_service( module,
- FT_SERVICE_ID_TRUETYPE_ENGINE );
+ FT_SERVICE_ID_TRUETYPE_ENGINE,
+ 0 );
if ( service )
result = service->engine_type;
}
diff --git a/src/base/ftotval.c b/src/base/ftotval.c
index 786457b..a2944a7 100644
--- a/src/base/ftotval.c
+++ b/src/base/ftotval.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for validating OpenType tables (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/ftoutln.c b/src/base/ftoutln.c
index d821c49..cb91321 100644
--- a/src/base/ftoutln.c
+++ b/src/base/ftoutln.c
@@ -4,7 +4,7 @@
/* */
/* FreeType outline management (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -42,7 +42,7 @@
static
- const FT_Outline null_outline = { 0, 0, 0, 0, 0, 0 };
+ const FT_Outline null_outline = { 0, 0, NULL, NULL, NULL, 0 };
/* documentation is in ftoutln.h */
@@ -52,8 +52,9 @@
const FT_Outline_Funcs* func_interface,
void* user )
{
-#undef SCALED
-#define SCALED( x ) ( ( (x) << shift ) - delta )
+#undef SCALED
+#define SCALED( x ) ( ( (x) < 0 ? -( -(x) << shift ) \
+ : ( (x) << shift ) ) - delta )
FT_Vector v_last;
FT_Vector v_control;
@@ -285,12 +286,13 @@
FT_TRACE5(( "FT_Outline_Decompose: Done\n", n ));
return FT_Err_Ok;
- Exit:
- FT_TRACE5(( "FT_Outline_Decompose: Error %d\n", error ));
- return error;
-
Invalid_Outline:
- return FT_THROW( Invalid_Outline );
+ error = FT_THROW( Invalid_Outline );
+ /* fall through */
+
+ Exit:
+ FT_TRACE5(( "FT_Outline_Decompose: Error 0x%x\n", error ));
+ return error;
}
@@ -414,11 +416,14 @@
if ( source == target )
return FT_Err_Ok;
- FT_ARRAY_COPY( target->points, source->points, source->n_points );
+ if ( source->n_points )
+ {
+ FT_ARRAY_COPY( target->points, source->points, source->n_points );
+ FT_ARRAY_COPY( target->tags, source->tags, source->n_points );
+ }
- FT_ARRAY_COPY( target->tags, source->tags, source->n_points );
-
- FT_ARRAY_COPY( target->contours, source->contours, source->n_contours );
+ if ( source->n_contours )
+ FT_ARRAY_COPY( target->contours, source->contours, source->n_contours );
/* copy all flags, except the `FT_OUTLINE_OWNER' one */
is_owner = target->flags & FT_OUTLINE_OWNER;
@@ -536,8 +541,8 @@
for ( n = 0; n < outline->n_points; n++ )
{
- vec->x += xOffset;
- vec->y += yOffset;
+ vec->x = ADD_LONG( vec->x, xOffset );
+ vec->y = ADD_LONG( vec->y, yOffset );
vec++;
}
}
@@ -907,8 +912,7 @@
FT_Pos ystrength )
{
FT_Vector* points;
- FT_Vector v_prev, v_first, v_next, v_cur;
- FT_Int c, n, first;
+ FT_Int c, first, last;
FT_Int orientation;
@@ -934,87 +938,98 @@
first = 0;
for ( c = 0; c < outline->n_contours; c++ )
{
- FT_Vector in, out, shift;
- FT_Fixed l_in, l_out, l, q, d;
- int last = outline->contours[c];
+ FT_Vector in, out, anchor, shift;
+ FT_Fixed l_in, l_out, l_anchor = 0, l, q, d;
+ FT_Int i, j, k;
- v_first = points[first];
- v_prev = points[last];
- v_cur = v_first;
+ l_in = 0;
+ last = outline->contours[c];
- /* compute incoming normalized vector */
- in.x = v_cur.x - v_prev.x;
- in.y = v_cur.y - v_prev.y;
- l_in = FT_Vector_Length( &in );
- if ( l_in )
+ /* pacify compiler */
+ in.x = in.y = anchor.x = anchor.y = 0;
+
+ /* Counter j cycles though the points; counter i advances only */
+ /* when points are moved; anchor k marks the first moved point. */
+ for ( i = last, j = first, k = -1;
+ j != i && i != k;
+ j = j < last ? j + 1 : first )
{
- in.x = FT_DivFix( in.x, l_in );
- in.y = FT_DivFix( in.y, l_in );
- }
-
- for ( n = first; n <= last; n++ )
- {
- if ( n < last )
- v_next = points[n + 1];
- else
- v_next = v_first;
-
- /* compute outgoing normalized vector */
- out.x = v_next.x - v_cur.x;
- out.y = v_next.y - v_cur.y;
- l_out = FT_Vector_Length( &out );
- if ( l_out )
+ if ( j != k )
{
- out.x = FT_DivFix( out.x, l_out );
- out.y = FT_DivFix( out.y, l_out );
- }
+ out.x = points[j].x - points[i].x;
+ out.y = points[j].y - points[i].y;
+ l_out = (FT_Fixed)FT_Vector_NormLen( &out );
- d = FT_MulFix( in.x, out.x ) + FT_MulFix( in.y, out.y );
-
- /* shift only if turn is less than ~160 degrees */
- if ( d > -0xF000L )
- {
- d = d + 0x10000L;
-
- /* shift components are aligned along lateral bisector */
- /* and directed according to the outline orientation. */
- shift.x = in.y + out.y;
- shift.y = in.x + out.x;
-
- if ( orientation == FT_ORIENTATION_TRUETYPE )
- shift.x = -shift.x;
- else
- shift.y = -shift.y;
-
- /* restrict shift magnitude to better handle collapsing segments */
- q = FT_MulFix( out.x, in.y ) - FT_MulFix( out.y, in.x );
- if ( orientation == FT_ORIENTATION_TRUETYPE )
- q = -q;
-
- l = FT_MIN( l_in, l_out );
-
- /* non-strict inequalities avoid divide-by-zero when q == l == 0 */
- if ( FT_MulFix( xstrength, q ) <= FT_MulFix( l, d ) )
- shift.x = FT_MulDiv( shift.x, xstrength, d );
- else
- shift.x = FT_MulDiv( shift.x, l, q );
-
-
- if ( FT_MulFix( ystrength, q ) <= FT_MulFix( l, d ) )
- shift.y = FT_MulDiv( shift.y, ystrength, d );
- else
- shift.y = FT_MulDiv( shift.y, l, q );
+ if ( l_out == 0 )
+ continue;
}
else
- shift.x = shift.y = 0;
+ {
+ out = anchor;
+ l_out = l_anchor;
+ }
- outline->points[n].x = v_cur.x + xstrength + shift.x;
- outline->points[n].y = v_cur.y + ystrength + shift.y;
+ if ( l_in != 0 )
+ {
+ if ( k < 0 )
+ {
+ k = i;
+ anchor = in;
+ l_anchor = l_in;
+ }
- in = out;
- l_in = l_out;
- v_cur = v_next;
+ d = FT_MulFix( in.x, out.x ) + FT_MulFix( in.y, out.y );
+
+ /* shift only if turn is less than ~160 degrees */
+ if ( d > -0xF000L )
+ {
+ d = d + 0x10000L;
+
+ /* shift components along lateral bisector in proper orientation */
+ shift.x = in.y + out.y;
+ shift.y = in.x + out.x;
+
+ if ( orientation == FT_ORIENTATION_TRUETYPE )
+ shift.x = -shift.x;
+ else
+ shift.y = -shift.y;
+
+ /* restrict shift magnitude to better handle collapsing segments */
+ q = FT_MulFix( out.x, in.y ) - FT_MulFix( out.y, in.x );
+ if ( orientation == FT_ORIENTATION_TRUETYPE )
+ q = -q;
+
+ l = FT_MIN( l_in, l_out );
+
+ /* non-strict inequalities avoid divide-by-zero when q == l == 0 */
+ if ( FT_MulFix( xstrength, q ) <= FT_MulFix( l, d ) )
+ shift.x = FT_MulDiv( shift.x, xstrength, d );
+ else
+ shift.x = FT_MulDiv( shift.x, l, q );
+
+
+ if ( FT_MulFix( ystrength, q ) <= FT_MulFix( l, d ) )
+ shift.y = FT_MulDiv( shift.y, ystrength, d );
+ else
+ shift.y = FT_MulDiv( shift.y, l, q );
+ }
+ else
+ shift.x = shift.y = 0;
+
+ for ( ;
+ i != j;
+ i = i < last ? i + 1 : first )
+ {
+ points[i].x += xstrength + shift.x;
+ points[i].y += ystrength + shift.y;
+ }
+ }
+ else
+ i = j;
+
+ in = out;
+ l_in = l_out;
}
first = last + 1;
@@ -1066,13 +1081,17 @@
FT_Int last = outline->contours[c];
- v_prev = points[last];
+ v_prev.x = points[last].x >> xshift;
+ v_prev.y = points[last].y >> yshift;
for ( n = first; n <= last; n++ )
{
- v_cur = points[n];
- area += ( ( v_cur.y - v_prev.y ) >> yshift ) *
- ( ( v_cur.x + v_prev.x ) >> xshift );
+ v_cur.x = points[n].x >> xshift;
+ v_cur.y = points[n].y >> yshift;
+
+ area = ADD_LONG( area,
+ ( v_cur.y - v_prev.y ) * ( v_cur.x + v_prev.x ) );
+
v_prev = v_cur;
}
diff --git a/src/base/ftpatent.c b/src/base/ftpatent.c
index bf2b085..e23ee2e 100644
--- a/src/base/ftpatent.c
+++ b/src/base/ftpatent.c
@@ -3,9 +3,9 @@
/* ftpatent.c */
/* */
/* FreeType API for checking patented TrueType bytecode instructions */
-/* (body). */
+/* (body). Obsolete, retained for backward compatibility. */
/* */
-/* Copyright 2007-2015 by */
+/* Copyright 2007-2018 by */
/* David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -25,238 +25,14 @@
#include FT_SERVICE_TRUETYPE_GLYF_H
- static FT_Bool
- _tt_check_patents_in_range( FT_Stream stream,
- FT_ULong size )
- {
- FT_Bool result = FALSE;
- FT_Error error;
- FT_Bytes p, end;
-
-
- if ( FT_FRAME_ENTER( size ) )
- return 0;
-
- p = stream->cursor;
- end = p + size;
-
- while ( p < end )
- {
- switch (p[0])
- {
- case 0x06: /* SPvTL // */
- case 0x07: /* SPvTL + */
- case 0x08: /* SFvTL // */
- case 0x09: /* SFvTL + */
- case 0x0A: /* SPvFS */
- case 0x0B: /* SFvFS */
- result = TRUE;
- goto Exit;
-
- case 0x40:
- if ( p + 1 >= end )
- goto Exit;
-
- p += p[1] + 2;
- break;
-
- case 0x41:
- if ( p + 1 >= end )
- goto Exit;
-
- p += p[1] * 2 + 2;
- break;
-
- case 0x71: /* DELTAP2 */
- case 0x72: /* DELTAP3 */
- case 0x73: /* DELTAC0 */
- case 0x74: /* DELTAC1 */
- case 0x75: /* DELTAC2 */
- result = TRUE;
- goto Exit;
-
- case 0xB0:
- case 0xB1:
- case 0xB2:
- case 0xB3:
- case 0xB4:
- case 0xB5:
- case 0xB6:
- case 0xB7:
- p += ( p[0] - 0xB0 ) + 2;
- break;
-
- case 0xB8:
- case 0xB9:
- case 0xBA:
- case 0xBB:
- case 0xBC:
- case 0xBD:
- case 0xBE:
- case 0xBF:
- p += ( p[0] - 0xB8 ) * 2 + 3;
- break;
-
- default:
- p += 1;
- break;
- }
- }
-
- Exit:
- FT_UNUSED( error );
- FT_FRAME_EXIT();
- return result;
- }
-
-
- static FT_Bool
- _tt_check_patents_in_table( FT_Face face,
- FT_ULong tag )
- {
- FT_Stream stream = face->stream;
- FT_Error error = FT_Err_Ok;
- FT_Service_SFNT_Table service;
- FT_Bool result = FALSE;
-
-
- FT_FACE_FIND_SERVICE( face, service, SFNT_TABLE );
-
- if ( service )
- {
- FT_UInt i = 0;
- FT_ULong tag_i = 0, offset_i = 0, length_i = 0;
-
-
- for ( i = 0; !error && tag_i != tag ; i++ )
- error = service->table_info( face, i,
- &tag_i, &offset_i, &length_i );
-
- if ( error ||
- FT_STREAM_SEEK( offset_i ) )
- goto Exit;
-
- result = _tt_check_patents_in_range( stream, length_i );
- }
-
- Exit:
- return result;
- }
-
-
- static FT_Bool
- _tt_face_check_patents( FT_Face face )
- {
- FT_Stream stream = face->stream;
- FT_UInt gindex;
- FT_Error error;
- FT_Bool result;
-
- FT_Service_TTGlyf service;
-
-
- result = _tt_check_patents_in_table( face, TTAG_fpgm );
- if ( result )
- goto Exit;
-
- result = _tt_check_patents_in_table( face, TTAG_prep );
- if ( result )
- goto Exit;
-
- FT_FACE_FIND_SERVICE( face, service, TT_GLYF );
- if ( service == NULL )
- goto Exit;
-
- for ( gindex = 0; gindex < (FT_UInt)face->num_glyphs; gindex++ )
- {
- FT_ULong offset, num_ins, size;
- FT_Int num_contours;
-
-
- offset = service->get_location( face, gindex, &size );
- if ( size == 0 )
- continue;
-
- if ( FT_STREAM_SEEK( offset ) ||
- FT_READ_SHORT( num_contours ) )
- continue;
-
- if ( num_contours >= 0 ) /* simple glyph */
- {
- if ( FT_STREAM_SKIP( 8 + num_contours * 2 ) )
- continue;
- }
- else /* compound glyph */
- {
- FT_Bool has_instr = 0;
-
-
- if ( FT_STREAM_SKIP( 8 ) )
- continue;
-
- /* now read each component */
- for (;;)
- {
- FT_UInt flags, toskip;
-
-
- if( FT_READ_USHORT( flags ) )
- break;
-
- toskip = 2 + 1 + 1;
-
- if ( ( flags & ( 1 << 0 ) ) != 0 ) /* ARGS_ARE_WORDS */
- toskip += 2;
-
- if ( ( flags & ( 1 << 3 ) ) != 0 ) /* WE_HAVE_A_SCALE */
- toskip += 2;
- else if ( ( flags & ( 1 << 6 ) ) != 0 ) /* WE_HAVE_X_Y_SCALE */
- toskip += 4;
- else if ( ( flags & ( 1 << 7 ) ) != 0 ) /* WE_HAVE_A_2x2 */
- toskip += 8;
-
- if ( ( flags & ( 1 << 8 ) ) != 0 ) /* WE_HAVE_INSTRUCTIONS */
- has_instr = 1;
-
- if ( FT_STREAM_SKIP( toskip ) )
- goto NextGlyph;
-
- if ( ( flags & ( 1 << 5 ) ) == 0 ) /* MORE_COMPONENTS */
- break;
- }
-
- if ( !has_instr )
- goto NextGlyph;
- }
-
- if ( FT_READ_USHORT( num_ins ) )
- continue;
-
- result = _tt_check_patents_in_range( stream, num_ins );
- if ( result )
- goto Exit;
-
- NextGlyph:
- ;
- }
-
- Exit:
- return result;
- }
-
-
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Bool )
FT_Face_CheckTrueTypePatents( FT_Face face )
{
- FT_Bool result = FALSE;
+ FT_UNUSED( face );
-
- if ( face && FT_IS_SFNT( face ) )
- result = _tt_face_check_patents( face );
-
- return result;
+ return FALSE;
}
@@ -266,22 +42,10 @@
FT_Face_SetUnpatentedHinting( FT_Face face,
FT_Bool value )
{
- FT_Bool result = FALSE;
-
-
-#if defined( TT_CONFIG_OPTION_UNPATENTED_HINTING ) && \
- !defined( TT_CONFIG_OPTION_BYTECODE_INTERPRETER )
- if ( face && FT_IS_SFNT( face ) )
- {
- result = !face->internal->ignore_unpatented_hinter;
- face->internal->ignore_unpatented_hinter = !value;
- }
-#else
FT_UNUSED( face );
FT_UNUSED( value );
-#endif
- return result;
+ return FALSE;
}
/* END */
diff --git a/src/base/ftpfr.c b/src/base/ftpfr.c
index 39f089e..bfe1352 100644
--- a/src/base/ftpfr.c
+++ b/src/base/ftpfr.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing PFR-specific data (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/ftpic.c b/src/base/ftpic.c
index 6c4b1cd..1492e18 100644
--- a/src/base/ftpic.c
+++ b/src/base/ftpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services (body). */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/ftpsprop.c b/src/base/ftpsprop.c
new file mode 100644
index 0000000..459b5e6
--- /dev/null
+++ b/src/base/ftpsprop.c
@@ -0,0 +1,285 @@
+/***************************************************************************/
+/* */
+/* ftpsprop.c */
+/* */
+/* Get and set properties of PostScript drivers (body). */
+/* See `ftdriver.h' for available properties. */
+/* */
+/* Copyright 2017-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_DRIVER_H
+#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_POSTSCRIPT_PROPS_H
+
+
+ /*************************************************************************/
+ /* */
+ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
+ /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
+ /* messages during execution. */
+ /* */
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_psprops
+
+
+ FT_BASE_CALLBACK_DEF( FT_Error )
+ ps_property_set( FT_Module module, /* PS_Driver */
+ const char* property_name,
+ const void* value,
+ FT_Bool value_is_string )
+ {
+ FT_Error error = FT_Err_Ok;
+ PS_Driver driver = (PS_Driver)module;
+
+#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ FT_UNUSED( value_is_string );
+#endif
+
+
+ if ( !ft_strcmp( property_name, "darkening-parameters" ) )
+ {
+ FT_Int* darken_params;
+ FT_Int x1, y1, x2, y2, x3, y3, x4, y4;
+
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ FT_Int dp[8];
+
+
+ if ( value_is_string )
+ {
+ const char* s = (const char*)value;
+ char* ep;
+ int i;
+
+
+ /* eight comma-separated numbers */
+ for ( i = 0; i < 7; i++ )
+ {
+ dp[i] = (FT_Int)ft_strtol( s, &ep, 10 );
+ if ( *ep != ',' || s == ep )
+ return FT_THROW( Invalid_Argument );
+
+ s = ep + 1;
+ }
+
+ dp[7] = (FT_Int)ft_strtol( s, &ep, 10 );
+ if ( !( *ep == '\0' || *ep == ' ' ) || s == ep )
+ return FT_THROW( Invalid_Argument );
+
+ darken_params = dp;
+ }
+ else
+#endif
+ darken_params = (FT_Int*)value;
+
+ x1 = darken_params[0];
+ y1 = darken_params[1];
+ x2 = darken_params[2];
+ y2 = darken_params[3];
+ x3 = darken_params[4];
+ y3 = darken_params[5];
+ x4 = darken_params[6];
+ y4 = darken_params[7];
+
+ if ( x1 < 0 || x2 < 0 || x3 < 0 || x4 < 0 ||
+ y1 < 0 || y2 < 0 || y3 < 0 || y4 < 0 ||
+ x1 > x2 || x2 > x3 || x3 > x4 ||
+ y1 > 500 || y2 > 500 || y3 > 500 || y4 > 500 )
+ return FT_THROW( Invalid_Argument );
+
+ driver->darken_params[0] = x1;
+ driver->darken_params[1] = y1;
+ driver->darken_params[2] = x2;
+ driver->darken_params[3] = y2;
+ driver->darken_params[4] = x3;
+ driver->darken_params[5] = y3;
+ driver->darken_params[6] = x4;
+ driver->darken_params[7] = y4;
+
+ return error;
+ }
+
+ else if ( !ft_strcmp( property_name, "hinting-engine" ) )
+ {
+#if defined( CFF_CONFIG_OPTION_OLD_ENGINE ) || \
+ defined( T1_CONFIG_OPTION_OLD_ENGINE )
+ const char* module_name = module->clazz->module_name;
+#endif
+
+
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ if ( value_is_string )
+ {
+ const char* s = (const char*)value;
+
+
+ if ( !ft_strcmp( s, "adobe" ) )
+ driver->hinting_engine = FT_HINTING_ADOBE;
+
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ else if ( !ft_strcmp( module_name, "cff" ) &&
+ !ft_strcmp( s, "freetype" ) )
+ driver->hinting_engine = FT_HINTING_FREETYPE;
+#endif
+
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
+ else if ( ( !ft_strcmp( module_name, "type1" ) ||
+ !ft_strcmp( module_name, "t1cid" ) ) &&
+ !ft_strcmp( s, "freetype" ) )
+ driver->hinting_engine = FT_HINTING_FREETYPE;
+#endif
+
+ else
+ return FT_THROW( Invalid_Argument );
+ }
+ else
+#endif /* FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES */
+ {
+ FT_UInt* hinting_engine = (FT_UInt*)value;
+
+
+ if ( *hinting_engine == FT_HINTING_ADOBE
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ || ( *hinting_engine == FT_HINTING_FREETYPE &&
+ !ft_strcmp( module_name, "cff" ) )
+#endif
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
+ || ( *hinting_engine == FT_HINTING_FREETYPE &&
+ ( !ft_strcmp( module_name, "type1" ) ||
+ !ft_strcmp( module_name, "t1cid" ) ) )
+#endif
+ )
+ driver->hinting_engine = *hinting_engine;
+ else
+ error = FT_ERR( Unimplemented_Feature );
+
+ return error;
+ }
+ }
+
+ else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
+ {
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ if ( value_is_string )
+ {
+ const char* s = (const char*)value;
+ long nsd = ft_strtol( s, NULL, 10 );
+
+
+ if ( !nsd )
+ driver->no_stem_darkening = FALSE;
+ else
+ driver->no_stem_darkening = TRUE;
+ }
+ else
+#endif
+ {
+ FT_Bool* no_stem_darkening = (FT_Bool*)value;
+
+
+ driver->no_stem_darkening = *no_stem_darkening;
+ }
+
+ return error;
+ }
+
+ else if ( !ft_strcmp( property_name, "random-seed" ) )
+ {
+ FT_Int32 random_seed;
+
+
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ if ( value_is_string )
+ {
+ const char* s = (const char*)value;
+
+
+ random_seed = (FT_Int32)ft_strtol( s, NULL, 10 );
+ }
+ else
+#endif
+ random_seed = *(FT_Int32*)value;
+
+ if ( random_seed < 0 )
+ random_seed = 0;
+
+ driver->random_seed = random_seed;
+
+ return error;
+ }
+
+ FT_TRACE0(( "ps_property_set: missing property `%s'\n",
+ property_name ));
+ return FT_THROW( Missing_Property );
+ }
+
+
+ FT_BASE_CALLBACK_DEF( FT_Error )
+ ps_property_get( FT_Module module, /* PS_Driver */
+ const char* property_name,
+ void* value )
+ {
+ FT_Error error = FT_Err_Ok;
+ PS_Driver driver = (PS_Driver)module;
+
+
+ if ( !ft_strcmp( property_name, "darkening-parameters" ) )
+ {
+ FT_Int* darken_params = driver->darken_params;
+ FT_Int* val = (FT_Int*)value;
+
+
+ val[0] = darken_params[0];
+ val[1] = darken_params[1];
+ val[2] = darken_params[2];
+ val[3] = darken_params[3];
+ val[4] = darken_params[4];
+ val[5] = darken_params[5];
+ val[6] = darken_params[6];
+ val[7] = darken_params[7];
+
+ return error;
+ }
+
+ else if ( !ft_strcmp( property_name, "hinting-engine" ) )
+ {
+ FT_UInt hinting_engine = driver->hinting_engine;
+ FT_UInt* val = (FT_UInt*)value;
+
+
+ *val = hinting_engine;
+
+ return error;
+ }
+
+ else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
+ {
+ FT_Bool no_stem_darkening = driver->no_stem_darkening;
+ FT_Bool* val = (FT_Bool*)value;
+
+
+ *val = no_stem_darkening;
+
+ return error;
+ }
+
+ FT_TRACE0(( "ps_property_get: missing property `%s'\n",
+ property_name ));
+ return FT_THROW( Missing_Property );
+ }
+
+
+/* END */
diff --git a/src/base/ftrfork.c b/src/base/ftrfork.c
index 82d54f8..c3a2b91 100644
--- a/src/base/ftrfork.c
+++ b/src/base/ftrfork.c
@@ -4,7 +4,7 @@
/* */
/* Embedded resource forks accessor (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* Masatake YAMATO and Redhat K.K. */
/* */
/* FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are */
@@ -56,7 +56,7 @@
{
FT_Error error;
unsigned char head[16], head2[16];
- FT_Long map_pos, rdata_len;
+ FT_Long map_pos, map_len, rdata_len;
int allzeros, allmatch, i;
FT_Long type_list;
@@ -67,28 +67,64 @@
if ( error )
return error;
- error = FT_Stream_Read( stream, (FT_Byte *)head, 16 );
+ error = FT_Stream_Read( stream, (FT_Byte*)head, 16 );
if ( error )
return error;
- *rdata_pos = rfork_offset + ( ( head[0] << 24 ) |
- ( head[1] << 16 ) |
- ( head[2] << 8 ) |
- head[3] );
- map_pos = rfork_offset + ( ( head[4] << 24 ) |
- ( head[5] << 16 ) |
- ( head[6] << 8 ) |
- head[7] );
- rdata_len = ( head[ 8] << 24 ) |
- ( head[ 9] << 16 ) |
- ( head[10] << 8 ) |
- head[11];
-
- /* map_len = head[12] .. head[15] */
-
- if ( *rdata_pos + rdata_len != map_pos || map_pos == rfork_offset )
+ /* ensure positive values */
+ if ( head[0] >= 0x80 ||
+ head[4] >= 0x80 ||
+ head[8] >= 0x80 ||
+ head[12] >= 0x80 )
return FT_THROW( Unknown_File_Format );
+ *rdata_pos = ( head[ 0] << 24 ) |
+ ( head[ 1] << 16 ) |
+ ( head[ 2] << 8 ) |
+ head[ 3];
+ map_pos = ( head[ 4] << 24 ) |
+ ( head[ 5] << 16 ) |
+ ( head[ 6] << 8 ) |
+ head[ 7];
+ rdata_len = ( head[ 8] << 24 ) |
+ ( head[ 9] << 16 ) |
+ ( head[10] << 8 ) |
+ head[11];
+ map_len = ( head[12] << 24 ) |
+ ( head[13] << 16 ) |
+ ( head[14] << 8 ) |
+ head[15];
+
+ /* the map must not be empty */
+ if ( !map_pos )
+ return FT_THROW( Unknown_File_Format );
+
+ /* check whether rdata and map overlap */
+ if ( *rdata_pos < map_pos )
+ {
+ if ( *rdata_pos > map_pos - rdata_len )
+ return FT_THROW( Unknown_File_Format );
+ }
+ else
+ {
+ if ( map_pos > *rdata_pos - map_len )
+ return FT_THROW( Unknown_File_Format );
+ }
+
+ /* check whether end of rdata or map exceeds stream size */
+ if ( FT_LONG_MAX - rdata_len < *rdata_pos ||
+ FT_LONG_MAX - map_len < map_pos ||
+
+ FT_LONG_MAX - ( *rdata_pos + rdata_len ) < rfork_offset ||
+ FT_LONG_MAX - ( map_pos + map_len ) < rfork_offset ||
+
+ (FT_ULong)( rfork_offset + *rdata_pos + rdata_len ) > stream->size ||
+ (FT_ULong)( rfork_offset + map_pos + map_len ) > stream->size )
+ return FT_THROW( Unknown_File_Format );
+
+ *rdata_pos += rfork_offset;
+ map_pos += rfork_offset;
+
error = FT_Stream_Seek( stream, (FT_ULong)map_pos );
if ( error )
return error;
@@ -101,7 +137,7 @@
allzeros = 1;
allmatch = 1;
- for ( i = 0; i < 16; ++i )
+ for ( i = 0; i < 16; i++ )
{
if ( head2[i] != 0 )
allzeros = 0;
@@ -113,15 +149,14 @@
/* If we have reached this point then it is probably a mac resource */
/* file. Now, does it contain any interesting resources? */
- /* Skip handle to next resource map, the file resource number, and */
- /* attributes. */
+
(void)FT_STREAM_SKIP( 4 /* skip handle to next resource map */
+ 2 /* skip file resource number */
+ 2 ); /* skip attributes */
- if ( FT_READ_USHORT( type_list ) )
+ if ( FT_READ_SHORT( type_list ) )
return error;
- if ( type_list == -1 )
+ if ( type_list < 0 )
return FT_THROW( Unknown_File_Format );
error = FT_Stream_Seek( stream, (FT_ULong)( map_pos + type_list ) );
@@ -170,15 +205,34 @@
if ( error )
return error;
- if ( FT_READ_USHORT( cnt ) )
+ if ( FT_READ_SHORT( cnt ) )
return error;
cnt++;
- for ( i = 0; i < cnt; ++i )
+ /* `rpos' is a signed 16bit integer offset to resource records; the */
+ /* size of a resource record is 12 bytes. The map header is 28 bytes, */
+ /* and a type list needs 10 bytes or more. If we assume that the name */
+ /* list is empty and we have only a single entry in the type list, */
+ /* there can be at most */
+ /* */
+ /* (32768 - 28 - 10) / 12 = 2727 */
+ /* */
+ /* resources. */
+ /* */
+ /* A type list starts with a two-byte counter, followed by 10-byte */
+ /* type records. Assuming that there are no resources, the number of */
+ /* type records can be at most */
+ /* */
+ /* (32768 - 28 - 2) / 8 = 4079 */
+ /* */
+ if ( cnt > 4079 )
+ return FT_THROW( Invalid_Table );
+
+ for ( i = 0; i < cnt; i++ )
{
if ( FT_READ_LONG( tag_internal ) ||
- FT_READ_USHORT( subcnt ) ||
- FT_READ_USHORT( rpos ) )
+ FT_READ_SHORT( subcnt ) ||
+ FT_READ_SHORT( rpos ) )
return error;
FT_TRACE2(( "Resource tags: %c%c%c%c\n",
@@ -194,6 +248,11 @@
*count = subcnt + 1;
rpos += map_offset;
+ /* a zero count might be valid in the resource specification, */
+ /* however, it is completely useless to us */
+ if ( *count < 1 || *count > 2727 )
+ return FT_THROW( Invalid_Table );
+
error = FT_Stream_Seek( stream, (FT_ULong)rpos );
if ( error )
return error;
@@ -201,35 +260,50 @@
if ( FT_NEW_ARRAY( ref, *count ) )
return error;
- for ( j = 0; j < *count; ++j )
+ for ( j = 0; j < *count; j++ )
{
- if ( FT_READ_USHORT( ref[j].res_id ) )
+ if ( FT_READ_SHORT( ref[j].res_id ) )
goto Exit;
- if ( FT_STREAM_SKIP( 2 ) ) /* resource name */
+ if ( FT_STREAM_SKIP( 2 ) ) /* resource name offset */
goto Exit;
- if ( FT_READ_LONG( temp ) )
+ if ( FT_READ_LONG( temp ) ) /* attributes (8bit), offset (24bit) */
goto Exit;
- if ( FT_STREAM_SKIP( 4 ) ) /* mbz */
+ if ( FT_STREAM_SKIP( 4 ) ) /* mbz */
goto Exit;
+ /*
+ * According to Inside Macintosh: More Macintosh Toolbox,
+ * "Resource IDs" (1-46), there are some reserved IDs.
+ * However, FreeType2 is not a font synthesizer, no need
+ * to check the acceptable resource ID.
+ */
+ if ( temp < 0 )
+ {
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
ref[j].offset = temp & 0xFFFFFFL;
+
FT_TRACE3(( " [%d]:"
" resource_id=0x%04x, offset=0x%08x\n",
- j, ref[j].res_id, ref[j].offset ));
+ j, (FT_UShort)ref[j].res_id, ref[j].offset ));
}
- if (sort_by_res_id)
+ if ( sort_by_res_id )
{
- ft_qsort( ref, (size_t)*count, sizeof ( FT_RFork_Ref ),
- ( int(*)(const void*, const void*) )
- ft_raccess_sort_ref_by_id );
+ ft_qsort( ref,
+ (size_t)*count,
+ sizeof ( FT_RFork_Ref ),
+ ( int(*)(const void*,
+ const void*) )ft_raccess_sort_ref_by_id );
FT_TRACE3(( " -- sort resources by their ids --\n" ));
- for ( j = 0; j < *count; ++ j ) {
+
+ for ( j = 0; j < *count; j++ )
FT_TRACE3(( " [%d]:"
" resource_id=0x%04x, offset=0x%08x\n",
j, ref[j].res_id, ref[j].offset ));
- }
}
if ( FT_NEW_ARRAY( offsets_internal, *count ) )
@@ -239,7 +313,7 @@
* gap between reference IDs are acceptable?
* further investigation on Apple implementation is needed.
*/
- for ( j = 0; j < *count; ++j )
+ for ( j = 0; j < *count; j++ )
offsets_internal[j] = rdata_pos + ref[j].offset;
*offsets = offsets_internal;
@@ -392,7 +466,7 @@
errors[i] = FT_Err_Ok;
if ( errors[i] )
- continue ;
+ continue;
errors[i] = (FT_RACCESS_GUESS_TABLE_GET[i].func)( library,
stream, base_name,
@@ -404,7 +478,7 @@
}
-#ifndef FT_MACINTOSH
+#if defined( FT_CONFIG_OPTION_MAC_FONTS ) && !defined( FT_MACINTOSH )
static FT_RFork_Rule
raccess_get_rule_type_from_rule_index( FT_Library library,
FT_UInt rule_index )
diff --git a/src/base/ftsnames.c b/src/base/ftsnames.c
index 80304e5..90ea1e2 100644
--- a/src/base/ftsnames.c
+++ b/src/base/ftsnames.c
@@ -7,7 +7,7 @@
/* */
/* This is _not_ used to retrieve glyph names! */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,6 +20,8 @@
#include <ft2build.h>
+#include FT_INTERNAL_DEBUG_H
+
#include FT_SFNT_NAMES_H
#include FT_INTERNAL_TRUETYPE_TYPES_H
#include FT_INTERNAL_STREAM_H
@@ -54,11 +56,11 @@
if ( idx < (FT_UInt)ttface->num_names )
{
- TT_NameEntryRec* entry = ttface->name_table.names + idx;
+ TT_Name entry = ttface->name_table.names + idx;
/* load name on demand */
- if ( entry->stringLength > 0 && entry->string == NULL )
+ if ( entry->stringLength > 0 && !entry->string )
{
FT_Memory memory = face->memory;
FT_Stream stream = face->stream;
@@ -88,6 +90,58 @@
}
+ /* documentation is in ftsnames.h */
+
+ FT_EXPORT_DEF( FT_Error )
+ FT_Get_Sfnt_LangTag( FT_Face face,
+ FT_UInt langID,
+ FT_SfntLangTag *alangTag )
+ {
+ FT_Error error = FT_ERR( Invalid_Argument );
+
+
+ if ( alangTag && face && FT_IS_SFNT( face ) )
+ {
+ TT_Face ttface = (TT_Face)face;
+
+
+ if ( ttface->name_table.format != 1 )
+ return FT_THROW( Invalid_Table );
+
+ if ( langID > 0x8000U &&
+ langID - 0x8000U < ttface->name_table.numLangTagRecords )
+ {
+ TT_LangTag entry = ttface->name_table.langTags +
+ ( langID - 0x8000U );
+
+
+ /* load name on demand */
+ if ( entry->stringLength > 0 && !entry->string )
+ {
+ FT_Memory memory = face->memory;
+ FT_Stream stream = face->stream;
+
+
+ if ( FT_NEW_ARRAY ( entry->string, entry->stringLength ) ||
+ FT_STREAM_SEEK( entry->stringOffset ) ||
+ FT_STREAM_READ( entry->string, entry->stringLength ) )
+ {
+ FT_FREE( entry->string );
+ entry->stringLength = 0;
+ }
+ }
+
+ alangTag->string = (FT_Byte*)entry->string;
+ alangTag->string_len = entry->stringLength;
+
+ error = FT_Err_Ok;
+ }
+ }
+
+ return error;
+ }
+
+
#endif /* TT_CONFIG_OPTION_SFNT_NAMES */
diff --git a/src/base/ftstream.c b/src/base/ftstream.c
index b68f3f8..18df7dc 100644
--- a/src/base/ftstream.c
+++ b/src/base/ftstream.c
@@ -4,7 +4,7 @@
/* */
/* I/O stream support (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -778,7 +778,7 @@
case ft_frame_short_be:
case ft_frame_ushort_be: /* read a 2-byte big-endian short */
- value = FT_NEXT_USHORT( cursor) ;
+ value = FT_NEXT_USHORT( cursor );
sign_shift = 16;
break;
diff --git a/src/base/ftstroke.c b/src/base/ftstroke.c
index 842ee30..6ae1819 100644
--- a/src/base/ftstroke.c
+++ b/src/base/ftstroke.c
@@ -4,7 +4,7 @@
/* */
/* FreeType path stroker (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -24,6 +24,16 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_OBJECTS_H
+#include "basepic.h"
+
+
+ /* declare an extern to access `ft_outline_glyph_class' globally */
+ /* allocated in `ftglyph.c', and use the FT_OUTLINE_GLYPH_CLASS_GET */
+ /* macro to access it when FT_CONFIG_OPTION_PIC is defined */
+#ifndef FT_CONFIG_OPTION_PIC
+ FT_CALLBACK_TABLE const FT_Glyph_Class ft_outline_glyph_class;
+#endif
+
/* documentation is in ftstroke.h */
@@ -702,9 +712,10 @@
FT_Outline* outline )
{
/* copy point locations */
- FT_ARRAY_COPY( outline->points + outline->n_points,
- border->points,
- border->num_points );
+ if ( border->num_points )
+ FT_ARRAY_COPY( outline->points + outline->n_points,
+ border->points,
+ border->num_points );
/* copy tags */
{
@@ -2285,15 +2296,6 @@
}
- /* declare an extern to access `ft_outline_glyph_class' globally */
- /* allocated in `ftglyph.c', and use the FT_OUTLINE_GLYPH_CLASS_GET */
- /* macro to access it when FT_CONFIG_OPTION_PIC is defined */
-#ifndef FT_CONFIG_OPTION_PIC
- extern const FT_Glyph_Class ft_outline_glyph_class;
-#endif
-#include "basepic.h"
-
-
/* documentation is in ftstroke.h */
FT_EXPORT_DEF( FT_Error )
diff --git a/src/base/ftsynth.c b/src/base/ftsynth.c
index cd68533..c283467 100644
--- a/src/base/ftsynth.c
+++ b/src/base/ftsynth.c
@@ -4,7 +4,7 @@
/* */
/* FreeType synthesizing code for emboldening and slanting (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -123,14 +123,14 @@
/*
* XXX: overflow check for 16-bit system, for compatibility
- * with FT_GlyphSlot_Embolden() since freetype-2.1.10.
+ * with FT_GlyphSlot_Embolden() since FreeType 2.1.10.
* unfortunately, this function return no informations
* about the cause of error.
*/
if ( ( ystr >> 6 ) > FT_INT_MAX || ( ystr >> 6 ) < FT_INT_MIN )
{
FT_TRACE1(( "FT_GlyphSlot_Embolden:" ));
- FT_TRACE1(( "too strong embolding parameter ystr=%d\n", ystr ));
+ FT_TRACE1(( "too strong emboldening parameter ystr=%d\n", ystr ));
return;
}
error = FT_GlyphSlot_Own_Bitmap( slot );
diff --git a/src/base/ftsystem.c b/src/base/ftsystem.c
index 1938fd8..6adebdb 100644
--- a/src/base/ftsystem.c
+++ b/src/base/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* ANSI-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/fttrigon.c b/src/base/fttrigon.c
index 5b24304..d6dd098 100644
--- a/src/base/fttrigon.c
+++ b/src/base/fttrigon.c
@@ -4,7 +4,7 @@
/* */
/* FreeType trigonometric functions (body). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -71,7 +71,8 @@
/* 0x40000000 comes from regression analysis between true */
/* and CORDIC hypotenuse, so it minimizes the error */
- val = (FT_Fixed)( ( (FT_Int64)val * FT_TRIG_SCALE + 0x40000000UL ) >> 32 );
+ val = (FT_Fixed)(
+ ( (FT_UInt64)val * FT_TRIG_SCALE + 0x40000000UL ) >> 32 );
return s < 0 ? -val : val;
}
diff --git a/src/base/fttype1.c b/src/base/fttype1.c
index c549382..aa8f8cc 100644
--- a/src/base/fttype1.c
+++ b/src/base/fttype1.c
@@ -4,7 +4,7 @@
/* */
/* FreeType utility file for PS names support (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/ftutil.c b/src/base/ftutil.c
index f5b72db..4de5f2c 100644
--- a/src/base/ftutil.c
+++ b/src/base/ftutil.c
@@ -4,7 +4,7 @@
/* */
/* FreeType utility file for memory and list management (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -74,7 +74,7 @@
if ( size > 0 )
{
block = memory->alloc( memory, size );
- if ( block == NULL )
+ if ( !block )
error = FT_THROW( Out_Of_Memory );
}
else if ( size < 0 )
@@ -135,25 +135,27 @@
ft_mem_free( memory, block );
block = NULL;
}
- else if ( new_count > FT_INT_MAX/item_size )
+ else if ( new_count > FT_INT_MAX / item_size )
{
error = FT_THROW( Array_Too_Large );
}
else if ( cur_count == 0 )
{
- FT_ASSERT( block == NULL );
+ FT_ASSERT( !block );
- block = ft_mem_alloc( memory, new_count*item_size, &error );
+ block = memory->alloc( memory, new_count * item_size );
+ if ( block == NULL )
+ error = FT_THROW( Out_Of_Memory );
}
else
{
FT_Pointer block2;
- FT_Long cur_size = cur_count*item_size;
- FT_Long new_size = new_count*item_size;
+ FT_Long cur_size = cur_count * item_size;
+ FT_Long new_size = new_count * item_size;
block2 = memory->realloc( memory, cur_size, new_size, block );
- if ( block2 == NULL )
+ if ( !block2 )
error = FT_THROW( Out_Of_Memory );
else
block = block2;
diff --git a/src/base/ftver.rc b/src/base/ftver.rc
new file mode 100644
index 0000000..a2903d5
--- /dev/null
+++ b/src/base/ftver.rc
@@ -0,0 +1,61 @@
+/***************************************************************************/
+/* */
+/* ftver.rc */
+/* */
+/* FreeType VERSIONINFO resource for Windows DLLs. */
+/* */
+/* Copyright 2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include<windows.h>
+
+#define FT_VERSION 2,9,1,0
+#define FT_VERSION_STR "2.9.1"
+
+VS_VERSION_INFO VERSIONINFO
+FILEVERSION FT_VERSION
+PRODUCTVERSION FT_VERSION
+FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+#ifdef _DEBUG
+FILEFLAGS VS_FF_DEBUG
+#endif
+#ifdef _DLL
+FILETYPE VFT_DLL
+#define FT_FILENAME "freetype.dll"
+#else
+FILETYPE VFT_STATIC_LIB
+#define FT_FILENAME "freetype.lib"
+#endif
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904E4"
+ BEGIN
+ VALUE "CompanyName", "The FreeType Project"
+ VALUE "FileDescription", "Font Rendering Library"
+ VALUE "FileVersion", FT_VERSION_STR
+ VALUE "ProductName", "FreeType"
+ VALUE "ProductVersion", FT_VERSION_STR
+ VALUE "LegalCopyright", "\251 2018 The FreeType Project www.freetype.org. All rights reserved."
+ VALUE "InternalName", "freetype"
+ VALUE "OriginalFilename", FT_FILENAME
+ END
+ END
+
+ BLOCK "VarFileInfo"
+ BEGIN
+ /* The following line should only be modified for localized versions. */
+ /* It consists of any number of WORD,WORD pairs, with each pair */
+ /* describing a "language,codepage" combination supported by the file. */
+ VALUE "Translation", 0x409, 1252
+ END
+END
diff --git a/src/base/ftwinfnt.c b/src/base/ftwinfnt.c
index 76a19af..11bd28a 100644
--- a/src/base/ftwinfnt.c
+++ b/src/base/ftwinfnt.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing Windows FNT specific info (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/base/md5.c b/src/base/md5.c
index 52d96ac..b235e17 100644
--- a/src/base/md5.c
+++ b/src/base/md5.c
@@ -63,12 +63,19 @@
(a) += (b);
/*
- * SET reads 4 input bytes in little-endian byte order and stores them
- * in a properly aligned word in host byte order.
+ * SET reads 4 input bytes in little-endian byte order and stores them in a
+ * properly aligned word in host byte order.
*
- * The check for little-endian architectures that tolerate unaligned
- * memory accesses is just an optimization. Nothing will break if it
- * doesn't work.
+ * The check for little-endian architectures that tolerate unaligned memory
+ * accesses is just an optimization. Nothing will break if it fails to detect
+ * a suitable architecture.
+ *
+ * Unfortunately, this optimization may be a C strict aliasing rules violation
+ * if the caller's data buffer has effective type that cannot be aliased by
+ * MD5_u32plus. In practice, this problem may occur if these MD5 routines are
+ * inlined into a calling function, or with future and dangerously advanced
+ * link-time optimizations. For the time being, keeping these MD5 routines in
+ * their own translation unit avoids the problem.
*/
#if defined(__i386__) || defined(__x86_64__) || defined(__vax__)
#define SET(n) \
@@ -87,8 +94,8 @@
#endif
/*
- * This processes one or more 64-byte data blocks, but does NOT update
- * the bit counters. There are no alignment requirements.
+ * This processes one or more 64-byte data blocks, but does NOT update the bit
+ * counters. There are no alignment requirements.
*/
static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
{
@@ -242,6 +249,12 @@
memcpy(ctx->buffer, data, size);
}
+#define OUT(dst, src) \
+ (dst)[0] = (unsigned char)(src); \
+ (dst)[1] = (unsigned char)((src) >> 8); \
+ (dst)[2] = (unsigned char)((src) >> 16); \
+ (dst)[3] = (unsigned char)((src) >> 24);
+
void MD5_Final(unsigned char *result, MD5_CTX *ctx)
{
unsigned long used, available;
@@ -262,33 +275,15 @@
memset(&ctx->buffer[used], 0, available - 8);
ctx->lo <<= 3;
- ctx->buffer[56] = ctx->lo;
- ctx->buffer[57] = ctx->lo >> 8;
- ctx->buffer[58] = ctx->lo >> 16;
- ctx->buffer[59] = ctx->lo >> 24;
- ctx->buffer[60] = ctx->hi;
- ctx->buffer[61] = ctx->hi >> 8;
- ctx->buffer[62] = ctx->hi >> 16;
- ctx->buffer[63] = ctx->hi >> 24;
+ OUT(&ctx->buffer[56], ctx->lo)
+ OUT(&ctx->buffer[60], ctx->hi)
body(ctx, ctx->buffer, 64);
- result[0] = ctx->a;
- result[1] = ctx->a >> 8;
- result[2] = ctx->a >> 16;
- result[3] = ctx->a >> 24;
- result[4] = ctx->b;
- result[5] = ctx->b >> 8;
- result[6] = ctx->b >> 16;
- result[7] = ctx->b >> 24;
- result[8] = ctx->c;
- result[9] = ctx->c >> 8;
- result[10] = ctx->c >> 16;
- result[11] = ctx->c >> 24;
- result[12] = ctx->d;
- result[13] = ctx->d >> 8;
- result[14] = ctx->d >> 16;
- result[15] = ctx->d >> 24;
+ OUT(&result[0], ctx->a)
+ OUT(&result[4], ctx->b)
+ OUT(&result[8], ctx->c)
+ OUT(&result[12], ctx->d)
memset(ctx, 0, sizeof(*ctx));
}
diff --git a/src/base/rules.mk b/src/base/rules.mk
index 1852e08..e9805bd 100644
--- a/src/base/rules.mk
+++ b/src/base/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -40,10 +40,14 @@
$(BASE_DIR)/ftadvanc.c \
$(BASE_DIR)/ftcalc.c \
$(BASE_DIR)/ftdbgmem.c \
+ $(BASE_DIR)/ftfntfmt.c \
$(BASE_DIR)/ftgloadr.c \
+ $(BASE_DIR)/fthash.c \
+ $(BASE_DIR)/ftlcdfil.c \
$(BASE_DIR)/ftobjs.c \
$(BASE_DIR)/ftoutln.c \
$(BASE_DIR)/ftpic.c \
+ $(BASE_DIR)/ftpsprop.c \
$(BASE_DIR)/ftrfork.c \
$(BASE_DIR)/ftsnames.c \
$(BASE_DIR)/ftstream.c \
diff --git a/src/bdf/Jamfile b/src/bdf/Jamfile
index 006843c..d9e441c 100644
--- a/src/bdf/Jamfile
+++ b/src/bdf/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/bdf Jamfile
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,9 @@
if $(FT2_MULTI)
{
- _sources = bdfdrivr bdflib ;
+ _sources = bdfdrivr
+ bdflib
+ ;
}
else
{
diff --git a/src/bdf/README b/src/bdf/README
index b761aba..996ac2d 100644
--- a/src/bdf/README
+++ b/src/bdf/README
@@ -13,7 +13,7 @@
Adobe Specification V 2.2. The specification of the BDF font format is
available from Adobe's web site:
- http://partners.adobe.com/public/developer/en/font/5005.BDF_Spec.pdf
+ https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5005.BDF_Spec.pdf
Many good bitmap fonts in bdf format come with XFree86 (www.XFree86.org).
They do not define vertical metrics, because the X Consortium BDF
diff --git a/src/bdf/bdf.c b/src/bdf/bdf.c
index f95fb76..e54df66 100644
--- a/src/bdf/bdf.c
+++ b/src/bdf/bdf.c
@@ -24,9 +24,10 @@
THE SOFTWARE.
*/
-#define FT_MAKE_OPTION_SINGLE_OBJECT
+#define FT_MAKE_OPTION_SINGLE_OBJECT
#include <ft2build.h>
+
#include "bdflib.c"
#include "bdfdrivr.c"
diff --git a/src/bdf/bdf.h b/src/bdf/bdf.h
index bd5a2e4..9012727 100644
--- a/src/bdf/bdf.h
+++ b/src/bdf/bdf.h
@@ -22,8 +22,8 @@
*/
-#ifndef __BDF_H__
-#define __BDF_H__
+#ifndef BDF_H_
+#define BDF_H_
/*
@@ -33,6 +33,7 @@
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
#include FT_INTERNAL_STREAM_H
+#include FT_INTERNAL_HASH_H
FT_BEGIN_HEADER
@@ -40,12 +41,12 @@
/* Imported from bdfP.h */
-#define _bdf_glyph_modified( map, e ) \
- ( (map)[(e) >> 5] & ( 1 << ( (e) & 31 ) ) )
-#define _bdf_set_glyph_modified( map, e ) \
- ( (map)[(e) >> 5] |= ( 1 << ( (e) & 31 ) ) )
-#define _bdf_clear_glyph_modified( map, e ) \
- ( (map)[(e) >> 5] &= ~( 1 << ( (e) & 31 ) ) )
+#define _bdf_glyph_modified( map, e ) \
+ ( (map)[(e) >> 5] & ( 1UL << ( (e) & 31 ) ) )
+#define _bdf_set_glyph_modified( map, e ) \
+ ( (map)[(e) >> 5] |= ( 1UL << ( (e) & 31 ) ) )
+#define _bdf_clear_glyph_modified( map, e ) \
+ ( (map)[(e) >> 5] &= ~( 1UL << ( (e) & 31 ) ) )
/* end of bdfP.h */
@@ -157,24 +158,6 @@
} bdf_glyph_t;
- typedef struct _hashnode_
- {
- const char* key;
- size_t data;
-
- } _hashnode, *hashnode;
-
-
- typedef struct hashtable_
- {
- unsigned int limit;
- unsigned int size;
- unsigned int used;
- hashnode* table;
-
- } hashtable;
-
-
typedef struct bdf_glyphlist_t_
{
unsigned short pad; /* Pad to 4-byte boundary. */
@@ -238,7 +221,7 @@
bdf_property_t* user_props;
unsigned long nuser_props;
- hashtable proptbl;
+ FT_HashRec proptbl;
} bdf_font_t;
@@ -291,7 +274,7 @@
FT_END_HEADER
-#endif /* __BDF_H__ */
+#endif /* BDF_H_ */
/* END */
diff --git a/src/bdf/bdfdrivr.c b/src/bdf/bdfdrivr.c
index 4b3fb76..ca937f8 100644
--- a/src/bdf/bdfdrivr.c
+++ b/src/bdf/bdfdrivr.c
@@ -276,7 +276,7 @@
len = lengths[nn];
- if ( src == NULL )
+ if ( !src )
continue;
/* separate elements with a space */
@@ -373,13 +373,14 @@
/* we have a bdf font: let's construct the face object */
face->bdffont = font;
- /* BDF could not have multiple face in single font file.
+ /* BDF cannot have multiple faces in a single font file.
* XXX: non-zero face_index is already invalid argument, but
* Type1, Type42 driver has a convention to return
* an invalid argument error when the font could be
* opened by the specified driver.
*/
- if ( face_index > 0 ) {
+ if ( face_index > 0 && ( face_index & 0xFFFF ) > 0 )
+ {
FT_ERROR(( "BDF_Face_Init: invalid face index\n" ));
BDF_Face_Done( bdfface );
return FT_THROW( Invalid_Argument );
@@ -422,7 +423,7 @@
else
bdfface->family_name = NULL;
- if ( ( error = bdf_interpret_style( face ) ) != 0 )
+ if ( FT_SET_ERROR( bdf_interpret_style( face ) ) )
goto Exit;
/* the number of glyphs (with one slot for the undefined glyph */
@@ -436,46 +437,156 @@
{
FT_Bitmap_Size* bsize = bdfface->available_sizes;
FT_Short resolution_x = 0, resolution_y = 0;
+ long value;
- FT_MEM_ZERO( bsize, sizeof ( FT_Bitmap_Size ) );
+ FT_ZERO( bsize );
+
+ /* sanity checks */
+ if ( font->font_ascent > 0x7FFF || font->font_ascent < -0x7FFF )
+ {
+ font->font_ascent = font->font_ascent < 0 ? -0x7FFF : 0x7FFF;
+ FT_TRACE0(( "BDF_Face_Init: clamping font ascent to value %d\n",
+ font->font_ascent ));
+ }
+ if ( font->font_descent > 0x7FFF || font->font_descent < -0x7FFF )
+ {
+ font->font_descent = font->font_descent < 0 ? -0x7FFF : 0x7FFF;
+ FT_TRACE0(( "BDF_Face_Init: clamping font descent to value %d\n",
+ font->font_descent ));
+ }
bsize->height = (FT_Short)( font->font_ascent + font->font_descent );
prop = bdf_get_font_property( font, "AVERAGE_WIDTH" );
if ( prop )
- bsize->width = (FT_Short)( ( prop->value.l + 5 ) / 10 );
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( prop->value.l < 0 )
+ FT_TRACE0(( "BDF_Face_Init: negative average width\n" ));
+#endif
+ if ( prop->value.l > 0x7FFFL * 10 - 5 ||
+ prop->value.l < -( 0x7FFFL * 10 - 5 ) )
+ {
+ bsize->width = 0x7FFF;
+ FT_TRACE0(( "BDF_Face_Init: clamping average width to value %d\n",
+ bsize->width ));
+ }
+ else
+ bsize->width = FT_ABS( (FT_Short)( ( prop->value.l + 5 ) / 10 ) );
+ }
else
- bsize->width = (FT_Short)( bsize->height * 2/3 );
+ {
+ /* this is a heuristical value */
+ bsize->width = (FT_Short)FT_MulDiv( bsize->height, 2, 3 );
+ }
prop = bdf_get_font_property( font, "POINT_SIZE" );
if ( prop )
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( prop->value.l < 0 )
+ FT_TRACE0(( "BDF_Face_Init: negative point size\n" ));
+#endif
/* convert from 722.7 decipoints to 72 points per inch */
- bsize->size =
- (FT_Pos)( ( prop->value.l * 64 * 7200 + 36135L ) / 72270L );
+ if ( prop->value.l > 0x504C2L || /* 0x7FFF * 72270/7200 */
+ prop->value.l < -0x504C2L )
+ {
+ bsize->size = 0x7FFF;
+ FT_TRACE0(( "BDF_Face_Init: clamping point size to value %d\n",
+ bsize->size ));
+ }
+ else
+ bsize->size = FT_MulDiv( FT_ABS( prop->value.l ),
+ 64 * 7200,
+ 72270L );
+ }
+ else if ( font->point_size )
+ {
+ if ( font->point_size > 0x7FFF )
+ {
+ bsize->size = 0x7FFF;
+ FT_TRACE0(( "BDF_Face_Init: clamping point size to value %d\n",
+ bsize->size ));
+ }
+ else
+ bsize->size = (FT_Pos)font->point_size << 6;
+ }
else
- bsize->size = bsize->width << 6;
+ {
+ /* this is a heuristical value */
+ bsize->size = bsize->width * 64;
+ }
prop = bdf_get_font_property( font, "PIXEL_SIZE" );
if ( prop )
- bsize->y_ppem = (FT_Short)prop->value.l << 6;
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( prop->value.l < 0 )
+ FT_TRACE0(( "BDF_Face_Init: negative pixel size\n" ));
+#endif
+ if ( prop->value.l > 0x7FFF || prop->value.l < -0x7FFF )
+ {
+ bsize->y_ppem = 0x7FFF << 6;
+ FT_TRACE0(( "BDF_Face_Init: clamping pixel size to value %d\n",
+ bsize->y_ppem ));
+ }
+ else
+ bsize->y_ppem = FT_ABS( (FT_Short)prop->value.l ) << 6;
+ }
prop = bdf_get_font_property( font, "RESOLUTION_X" );
if ( prop )
- resolution_x = (FT_Short)prop->value.l;
+ value = prop->value.l;
+ else
+ value = (long)font->resolution_x;
+ if ( value )
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( value < 0 )
+ FT_TRACE0(( "BDF_Face_Init: negative X resolution\n" ));
+#endif
+ if ( value > 0x7FFF || value < -0x7FFF )
+ {
+ resolution_x = 0x7FFF;
+ FT_TRACE0(( "BDF_Face_Init: clamping X resolution to value %d\n",
+ resolution_x ));
+ }
+ else
+ resolution_x = FT_ABS( (FT_Short)value );
+ }
prop = bdf_get_font_property( font, "RESOLUTION_Y" );
if ( prop )
- resolution_y = (FT_Short)prop->value.l;
+ value = prop->value.l;
+ else
+ value = (long)font->resolution_y;
+ if ( value )
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( value < 0 )
+ FT_TRACE0(( "BDF_Face_Init: negative Y resolution\n" ));
+#endif
+ if ( value > 0x7FFF || value < -0x7FFF )
+ {
+ resolution_y = 0x7FFF;
+ FT_TRACE0(( "BDF_Face_Init: clamping Y resolution to value %d\n",
+ resolution_y ));
+ }
+ else
+ resolution_y = FT_ABS( (FT_Short)value );
+ }
if ( bsize->y_ppem == 0 )
{
bsize->y_ppem = bsize->size;
if ( resolution_y )
- bsize->y_ppem = bsize->y_ppem * resolution_y / 72;
+ bsize->y_ppem = FT_MulDiv( bsize->y_ppem, resolution_y, 72 );
}
if ( resolution_x && resolution_y )
- bsize->x_ppem = bsize->y_ppem * resolution_x / resolution_y;
+ bsize->x_ppem = FT_MulDiv( bsize->y_ppem,
+ resolution_x,
+ resolution_y );
else
bsize->x_ppem = bsize->y_ppem;
}
@@ -544,7 +655,11 @@
if ( !ft_strcmp( s, "10646" ) ||
( !ft_strcmp( s, "8859" ) &&
!ft_strcmp( face->charset_encoding, "1" ) ) )
- unicode_charmap = 1;
+ unicode_charmap = 1;
+ /* another name for ASCII */
+ else if ( !ft_strcmp( s, "646.1991" ) &&
+ !ft_strcmp( face->charset_encoding, "IRV" ) )
+ unicode_charmap = 1;
}
{
@@ -565,12 +680,6 @@
}
error = FT_CMap_New( &bdf_cmap_class, NULL, &charmap, NULL );
-
-#if 0
- /* Select default charmap */
- if ( bdfface->num_charmaps )
- bdfface->charmap = bdfface->charmaps[0];
-#endif
}
goto Exit;
@@ -615,9 +724,9 @@
FT_Select_Metrics( size->face, strike_index );
- size->metrics.ascender = bdffont->font_ascent << 6;
- size->metrics.descender = -bdffont->font_descent << 6;
- size->metrics.max_advance = bdffont->bbx.width << 6;
+ size->metrics.ascender = bdffont->font_ascent * 64;
+ size->metrics.descender = -bdffont->font_descent * 64;
+ size->metrics.max_advance = bdffont->bbx.width * 64;
return FT_Err_Ok;
}
@@ -704,7 +813,7 @@
bitmap->rows = glyph.bbx.height;
bitmap->width = glyph.bbx.width;
- if ( glyph.bpr > INT_MAX )
+ if ( glyph.bpr > FT_INT_MAX )
FT_TRACE1(( "BDF_Glyph_Load: too large pitch %d is truncated\n",
glyph.bpr ));
bitmap->pitch = (int)glyph.bpr; /* same as FT_Bitmap.pitch */
@@ -734,18 +843,18 @@
slot->bitmap_left = glyph.bbx.x_offset;
slot->bitmap_top = glyph.bbx.ascent;
- slot->metrics.horiAdvance = (FT_Pos)( glyph.dwidth << 6 );
- slot->metrics.horiBearingX = (FT_Pos)( glyph.bbx.x_offset << 6 );
- slot->metrics.horiBearingY = (FT_Pos)( glyph.bbx.ascent << 6 );
- slot->metrics.width = (FT_Pos)( bitmap->width << 6 );
- slot->metrics.height = (FT_Pos)( bitmap->rows << 6 );
+ slot->metrics.horiAdvance = (FT_Pos)( glyph.dwidth * 64 );
+ slot->metrics.horiBearingX = (FT_Pos)( glyph.bbx.x_offset * 64 );
+ slot->metrics.horiBearingY = (FT_Pos)( glyph.bbx.ascent * 64 );
+ slot->metrics.width = (FT_Pos)( bitmap->width * 64 );
+ slot->metrics.height = (FT_Pos)( bitmap->rows * 64 );
/*
* XXX DWIDTH1 and VVECTOR should be parsed and
* used here, provided such fonts do exist.
*/
ft_synthesize_vertical_metrics( &slot->metrics,
- bdf->bdffont->bbx.height << 6 );
+ bdf->bdffont->bbx.height * 64 );
Exit:
return error;
@@ -823,8 +932,8 @@
static const FT_Service_BDFRec bdf_service_bdf =
{
- (FT_BDF_GetCharsetIdFunc)bdf_get_charset_id,
- (FT_BDF_GetPropertyFunc) bdf_get_bdf_property
+ (FT_BDF_GetCharsetIdFunc)bdf_get_charset_id, /* get_charset_id */
+ (FT_BDF_GetPropertyFunc) bdf_get_bdf_property /* get_property */
};
@@ -865,32 +974,32 @@
0x10000L,
0x20000L,
- 0,
+ NULL, /* module-specific interface */
- 0, /* FT_Module_Constructor */
- 0, /* FT_Module_Destructor */
- bdf_driver_requester
+ NULL, /* FT_Module_Constructor module_init */
+ NULL, /* FT_Module_Destructor module_done */
+ bdf_driver_requester /* FT_Module_Requester get_interface */
},
sizeof ( BDF_FaceRec ),
sizeof ( FT_SizeRec ),
sizeof ( FT_GlyphSlotRec ),
- BDF_Face_Init,
- BDF_Face_Done,
- 0, /* FT_Size_InitFunc */
- 0, /* FT_Size_DoneFunc */
- 0, /* FT_Slot_InitFunc */
- 0, /* FT_Slot_DoneFunc */
+ BDF_Face_Init, /* FT_Face_InitFunc init_face */
+ BDF_Face_Done, /* FT_Face_DoneFunc done_face */
+ NULL, /* FT_Size_InitFunc init_size */
+ NULL, /* FT_Size_DoneFunc done_size */
+ NULL, /* FT_Slot_InitFunc init_slot */
+ NULL, /* FT_Slot_DoneFunc done_slot */
- BDF_Glyph_Load,
+ BDF_Glyph_Load, /* FT_Slot_LoadFunc load_glyph */
- 0, /* FT_Face_GetKerningFunc */
- 0, /* FT_Face_AttachFunc */
- 0, /* FT_Face_GetAdvancesFunc */
+ NULL, /* FT_Face_GetKerningFunc get_kerning */
+ NULL, /* FT_Face_AttachFunc attach_file */
+ NULL, /* FT_Face_GetAdvancesFunc get_advances */
- BDF_Size_Request,
- BDF_Size_Select
+ BDF_Size_Request, /* FT_Size_RequestFunc request_size */
+ BDF_Size_Select /* FT_Size_SelectFunc select_size */
};
diff --git a/src/bdf/bdfdrivr.h b/src/bdf/bdfdrivr.h
index 3c61d64..9455081 100644
--- a/src/bdf/bdfdrivr.h
+++ b/src/bdf/bdfdrivr.h
@@ -25,8 +25,8 @@
*/
-#ifndef __BDFDRIVR_H__
-#define __BDFDRIVR_H__
+#ifndef BDFDRIVR_H_
+#define BDFDRIVR_H_
#include <ft2build.h>
#include FT_INTERNAL_DRIVER_H
@@ -74,7 +74,7 @@
FT_END_HEADER
-#endif /* __BDFDRIVR_H__ */
+#endif /* BDFDRIVR_H_ */
/* END */
diff --git a/src/bdf/bdferror.h b/src/bdf/bdferror.h
index ea545ac..b462c7d 100644
--- a/src/bdf/bdferror.h
+++ b/src/bdf/bdferror.h
@@ -26,12 +26,12 @@
/* */
/*************************************************************************/
-#ifndef __BDFERROR_H__
-#define __BDFERROR_H__
+#ifndef BDFERROR_H_
+#define BDFERROR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX BDF_Err_
@@ -39,7 +39,7 @@
#include FT_ERRORS_H
-#endif /* __BDFERROR_H__ */
+#endif /* BDFERROR_H_ */
/* END */
diff --git a/src/bdf/bdflib.c b/src/bdf/bdflib.c
index 8655d0e..2f5c99d 100644
--- a/src/bdf/bdflib.c
+++ b/src/bdf/bdflib.c
@@ -201,6 +201,7 @@
#define ACMSG14 "Glyph %ld extra columns removed.\n"
#define ACMSG15 "Incorrect glyph count: %ld indicated but %ld found.\n"
#define ACMSG16 "Glyph %ld missing columns padded with zero bits.\n"
+#define ACMSG17 "Adjusting number of glyphs to %ld.\n"
/* Error messages. */
#define ERRMSG1 "[line %ld] Missing `%s' line.\n"
@@ -220,164 +221,6 @@
/*************************************************************************/
/* */
- /* Hash table utilities for the properties. */
- /* */
- /*************************************************************************/
-
- /* XXX: Replace this with FreeType's hash functions */
-
-
-#define INITIAL_HT_SIZE 241
-
- typedef void
- (*hash_free_func)( hashnode node );
-
- static hashnode*
- hash_bucket( const char* key,
- hashtable* ht )
- {
- const char* kp = key;
- unsigned long res = 0;
- hashnode* bp = ht->table, *ndp;
-
-
- /* Mocklisp hash function. */
- while ( *kp )
- res = ( res << 5 ) - res + (unsigned long)*kp++;
-
- ndp = bp + ( res % ht->size );
- while ( *ndp )
- {
- kp = (*ndp)->key;
- if ( kp[0] == key[0] && ft_strcmp( kp, key ) == 0 )
- break;
- ndp--;
- if ( ndp < bp )
- ndp = bp + ( ht->size - 1 );
- }
-
- return ndp;
- }
-
-
- static FT_Error
- hash_rehash( hashtable* ht,
- FT_Memory memory )
- {
- hashnode* obp = ht->table, *bp, *nbp;
- unsigned int i, sz = ht->size;
- FT_Error error = FT_Err_Ok;
-
-
- ht->size <<= 1;
- ht->limit = ht->size / 3;
-
- if ( FT_NEW_ARRAY( ht->table, ht->size ) )
- goto Exit;
-
- for ( i = 0, bp = obp; i < sz; i++, bp++ )
- {
- if ( *bp )
- {
- nbp = hash_bucket( (*bp)->key, ht );
- *nbp = *bp;
- }
- }
- FT_FREE( obp );
-
- Exit:
- return error;
- }
-
-
- static FT_Error
- hash_init( hashtable* ht,
- FT_Memory memory )
- {
- unsigned int sz = INITIAL_HT_SIZE;
- FT_Error error = FT_Err_Ok;
-
-
- ht->size = sz;
- ht->limit = sz / 3;
- ht->used = 0;
-
- if ( FT_NEW_ARRAY( ht->table, sz ) )
- goto Exit;
-
- Exit:
- return error;
- }
-
-
- static void
- hash_free( hashtable* ht,
- FT_Memory memory )
- {
- if ( ht != 0 )
- {
- unsigned int i, sz = ht->size;
- hashnode* bp = ht->table;
-
-
- for ( i = 0; i < sz; i++, bp++ )
- FT_FREE( *bp );
-
- FT_FREE( ht->table );
- }
- }
-
-
- static FT_Error
- hash_insert( char* key,
- size_t data,
- hashtable* ht,
- FT_Memory memory )
- {
- hashnode nn;
- hashnode* bp = hash_bucket( key, ht );
- FT_Error error = FT_Err_Ok;
-
-
- nn = *bp;
- if ( !nn )
- {
- if ( FT_NEW( nn ) )
- goto Exit;
- *bp = nn;
-
- nn->key = key;
- nn->data = data;
-
- if ( ht->used >= ht->limit )
- {
- error = hash_rehash( ht, memory );
- if ( error )
- goto Exit;
- }
- ht->used++;
- }
- else
- nn->data = data;
-
- Exit:
- return error;
- }
-
-
- static hashnode
- hash_lookup( const char* key,
- hashtable* ht )
- {
- hashnode *np = hash_bucket( key, ht );
-
-
- return *np;
- }
-
-
- /*************************************************************************/
- /* */
/* Utility types and functions. */
/* */
/*************************************************************************/
@@ -432,6 +275,7 @@
_bdf_list_t list;
FT_Memory memory;
+ unsigned long size; /* the stream size */
} _bdf_parse_t;
@@ -832,14 +676,6 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
- static const unsigned char odigits[32] =
- {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
-
static const unsigned char ddigits[32] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
@@ -857,81 +693,41 @@
};
- /* Routine to convert an ASCII string into an unsigned long integer. */
+ /* Routine to convert a decimal ASCII string to an unsigned long integer. */
static unsigned long
- _bdf_atoul( char* s,
- char** end,
- unsigned int base )
+ _bdf_atoul( char* s )
{
- unsigned long v;
- const unsigned char* dmap;
+ unsigned long v;
if ( s == 0 || *s == 0 )
return 0;
- /* Make sure the radix is something recognizable. Default to 10. */
- switch ( base )
+ for ( v = 0; sbitset( ddigits, *s ); s++ )
{
- case 8:
- dmap = odigits;
- break;
- case 16:
- dmap = hdigits;
- break;
- default:
- base = 10;
- dmap = ddigits;
- break;
+ if ( v < ( FT_ULONG_MAX - 9 ) / 10 )
+ v = v * 10 + a2i[(int)*s];
+ else
+ {
+ v = FT_ULONG_MAX;
+ break;
+ }
}
- /* Check for the special hex prefix. */
- if ( *s == '0' &&
- ( *( s + 1 ) == 'x' || *( s + 1 ) == 'X' ) )
- {
- base = 16;
- dmap = hdigits;
- s += 2;
- }
-
- for ( v = 0; sbitset( dmap, *s ); s++ )
- v = v * base + a2i[(int)*s];
-
- if ( end != 0 )
- *end = s;
-
return v;
}
- /* Routine to convert an ASCII string into a signed long integer. */
+ /* Routine to convert a decimal ASCII string to a signed long integer. */
static long
- _bdf_atol( char* s,
- char** end,
- int base )
+ _bdf_atol( char* s )
{
- long v, neg;
- const unsigned char* dmap;
+ long v, neg;
if ( s == 0 || *s == 0 )
return 0;
- /* Make sure the radix is something recognizable. Default to 10. */
- switch ( base )
- {
- case 8:
- dmap = odigits;
- break;
- case 16:
- dmap = hdigits;
- break;
- default:
- base = 10;
- dmap = ddigits;
- break;
- }
-
/* Check for a minus sign. */
neg = 0;
if ( *s == '-' )
@@ -940,100 +736,56 @@
neg = 1;
}
- /* Check for the special hex prefix. */
- if ( *s == '0' &&
- ( *( s + 1 ) == 'x' || *( s + 1 ) == 'X' ) )
+ for ( v = 0; sbitset( ddigits, *s ); s++ )
{
- base = 16;
- dmap = hdigits;
- s += 2;
+ if ( v < ( FT_LONG_MAX - 9 ) / 10 )
+ v = v * 10 + a2i[(int)*s];
+ else
+ {
+ v = FT_LONG_MAX;
+ break;
+ }
}
- for ( v = 0; sbitset( dmap, *s ); s++ )
- v = v * base + a2i[(int)*s];
-
- if ( end != 0 )
- *end = s;
-
return ( !neg ) ? v : -v;
}
- /* Routine to convert an ASCII string into an unsigned short integer. */
+ /* Routine to convert a decimal ASCII string to an unsigned short integer. */
static unsigned short
- _bdf_atous( char* s,
- char** end,
- unsigned int base )
+ _bdf_atous( char* s )
{
- unsigned short v;
- const unsigned char* dmap;
+ unsigned short v;
if ( s == 0 || *s == 0 )
return 0;
- /* Make sure the radix is something recognizable. Default to 10. */
- switch ( base )
+ for ( v = 0; sbitset( ddigits, *s ); s++ )
{
- case 8:
- dmap = odigits;
- break;
- case 16:
- dmap = hdigits;
- break;
- default:
- base = 10;
- dmap = ddigits;
- break;
+ if ( v < ( FT_USHORT_MAX - 9 ) / 10 )
+ v = (unsigned short)( v * 10 + a2i[(int)*s] );
+ else
+ {
+ v = FT_USHORT_MAX;
+ break;
+ }
}
- /* Check for the special hex prefix. */
- if ( *s == '0' &&
- ( *( s + 1 ) == 'x' || *( s + 1 ) == 'X' ) )
- {
- base = 16;
- dmap = hdigits;
- s += 2;
- }
-
- for ( v = 0; sbitset( dmap, *s ); s++ )
- v = (unsigned short)( v * base + a2i[(int)*s] );
-
- if ( end != 0 )
- *end = s;
-
return v;
}
- /* Routine to convert an ASCII string into a signed short integer. */
+ /* Routine to convert a decimal ASCII string to a signed short integer. */
static short
- _bdf_atos( char* s,
- char** end,
- int base )
+ _bdf_atos( char* s )
{
- short v, neg;
- const unsigned char* dmap;
+ short v, neg;
if ( s == 0 || *s == 0 )
return 0;
- /* Make sure the radix is something recognizable. Default to 10. */
- switch ( base )
- {
- case 8:
- dmap = odigits;
- break;
- case 16:
- dmap = hdigits;
- break;
- default:
- base = 10;
- dmap = ddigits;
- break;
- }
-
/* Check for a minus. */
neg = 0;
if ( *s == '-' )
@@ -1042,21 +794,17 @@
neg = 1;
}
- /* Check for the special hex prefix. */
- if ( *s == '0' &&
- ( *( s + 1 ) == 'x' || *( s + 1 ) == 'X' ) )
+ for ( v = 0; sbitset( ddigits, *s ); s++ )
{
- base = 16;
- dmap = hdigits;
- s += 2;
+ if ( v < ( SHRT_MAX - 9 ) / 10 )
+ v = (short)( v * 10 + a2i[(int)*s] );
+ else
+ {
+ v = SHRT_MAX;
+ break;
+ }
}
- for ( v = 0; sbitset( dmap, *s ); s++ )
- v = (short)( v * base + a2i[(int)*s] );
-
- if ( end != 0 )
- *end = s;
-
return (short)( ( !neg ) ? v : -v );
}
@@ -1096,7 +844,7 @@
/* First check whether the property has */
/* already been added or not. If it has, then */
/* simply ignore it. */
- if ( hash_lookup( name, &(font->proptbl) ) )
+ if ( ft_hash_str_lookup( name, &(font->proptbl) ) )
goto Exit;
if ( FT_RENEW_ARRAY( font->user_props,
@@ -1121,7 +869,7 @@
n = _num_bdf_properties + font->nuser_props;
- error = hash_insert( p->name, n, &(font->proptbl), memory );
+ error = ft_hash_str_insert( p->name, n, &(font->proptbl), memory );
if ( error )
goto Exit;
@@ -1132,25 +880,23 @@
}
- FT_LOCAL_DEF( bdf_property_t * )
+ FT_LOCAL_DEF( bdf_property_t* )
bdf_get_property( char* name,
bdf_font_t* font )
{
- hashnode hn;
- size_t propid;
+ size_t* propid;
if ( name == 0 || *name == 0 )
return 0;
- if ( ( hn = hash_lookup( name, &(font->proptbl) ) ) == 0 )
+ if ( ( propid = ft_hash_str_lookup( name, &(font->proptbl) ) ) == NULL )
return 0;
- propid = hn->data;
- if ( propid >= _num_bdf_properties )
- return font->user_props + ( propid - _num_bdf_properties );
+ if ( *propid >= _num_bdf_properties )
+ return font->user_props + ( *propid - _num_bdf_properties );
- return (bdf_property_t*)_bdf_properties + propid;
+ return (bdf_property_t*)_bdf_properties + *propid;
}
@@ -1163,30 +909,30 @@
/* Parse flags. */
-#define _BDF_START 0x0001U
-#define _BDF_FONT_NAME 0x0002U
-#define _BDF_SIZE 0x0004U
-#define _BDF_FONT_BBX 0x0008U
-#define _BDF_PROPS 0x0010U
-#define _BDF_GLYPHS 0x0020U
-#define _BDF_GLYPH 0x0040U
-#define _BDF_ENCODING 0x0080U
-#define _BDF_SWIDTH 0x0100U
-#define _BDF_DWIDTH 0x0200U
-#define _BDF_BBX 0x0400U
-#define _BDF_BITMAP 0x0800U
+#define BDF_START_ 0x0001U
+#define BDF_FONT_NAME_ 0x0002U
+#define BDF_SIZE_ 0x0004U
+#define BDF_FONT_BBX_ 0x0008U
+#define BDF_PROPS_ 0x0010U
+#define BDF_GLYPHS_ 0x0020U
+#define BDF_GLYPH_ 0x0040U
+#define BDF_ENCODING_ 0x0080U
+#define BDF_SWIDTH_ 0x0100U
+#define BDF_DWIDTH_ 0x0200U
+#define BDF_BBX_ 0x0400U
+#define BDF_BITMAP_ 0x0800U
-#define _BDF_SWIDTH_ADJ 0x1000U
+#define BDF_SWIDTH_ADJ_ 0x1000U
-#define _BDF_GLYPH_BITS ( _BDF_GLYPH | \
- _BDF_ENCODING | \
- _BDF_SWIDTH | \
- _BDF_DWIDTH | \
- _BDF_BBX | \
- _BDF_BITMAP )
+#define BDF_GLYPH_BITS_ ( BDF_GLYPH_ | \
+ BDF_ENCODING_ | \
+ BDF_SWIDTH_ | \
+ BDF_DWIDTH_ | \
+ BDF_BBX_ | \
+ BDF_BITMAP_ )
-#define _BDF_GLYPH_WIDTH_CHECK 0x40000000UL
-#define _BDF_GLYPH_HEIGHT_CHECK 0x80000000UL
+#define BDF_GLYPH_WIDTH_CHECK_ 0x40000000UL
+#define BDF_GLYPH_HEIGHT_CHECK_ 0x80000000UL
static FT_Error
@@ -1358,8 +1104,7 @@
char* value,
unsigned long lineno )
{
- size_t propid;
- hashnode hn;
+ size_t* propid;
bdf_property_t *prop, *fp;
FT_Memory memory = font->memory;
FT_Error error = FT_Err_Ok;
@@ -1368,11 +1113,12 @@
/* First, check whether the property already exists in the font. */
- if ( ( hn = hash_lookup( name, (hashtable *)font->internal ) ) != 0 )
+ if ( ( propid = ft_hash_str_lookup( name,
+ (FT_Hash)font->internal ) ) != NULL )
{
/* The property already exists in the font, so simply replace */
/* the value of the property with the current value. */
- fp = font->props + hn->data;
+ fp = font->props + *propid;
switch ( fp->format )
{
@@ -1388,11 +1134,11 @@
break;
case BDF_INTEGER:
- fp->value.l = _bdf_atol( value, 0, 10 );
+ fp->value.l = _bdf_atol( value );
break;
case BDF_CARDINAL:
- fp->value.ul = _bdf_atoul( value, 0, 10 );
+ fp->value.ul = _bdf_atoul( value );
break;
default:
@@ -1404,16 +1150,16 @@
/* See whether this property type exists yet or not. */
/* If not, create it. */
- hn = hash_lookup( name, &(font->proptbl) );
- if ( hn == 0 )
+ propid = ft_hash_str_lookup( name, &(font->proptbl) );
+ if ( !propid )
{
error = bdf_create_property( name, BDF_ATOM, font );
if ( error )
goto Exit;
- hn = hash_lookup( name, &(font->proptbl) );
+ propid = ft_hash_str_lookup( name, &(font->proptbl) );
}
- /* Allocate another property if this is overflow. */
+ /* Allocate another property if this is overflowing. */
if ( font->props_used == font->props_size )
{
if ( font->props_size == 0 )
@@ -1430,15 +1176,14 @@
}
fp = font->props + font->props_size;
- FT_MEM_ZERO( fp, sizeof ( bdf_property_t ) );
+ FT_ZERO( fp );
font->props_size++;
}
- propid = hn->data;
- if ( propid >= _num_bdf_properties )
- prop = font->user_props + ( propid - _num_bdf_properties );
+ if ( *propid >= _num_bdf_properties )
+ prop = font->user_props + ( *propid - _num_bdf_properties );
else
- prop = (bdf_property_t*)_bdf_properties + propid;
+ prop = (bdf_property_t*)_bdf_properties + *propid;
fp = font->props + font->props_used;
@@ -1458,11 +1203,11 @@
break;
case BDF_INTEGER:
- fp->value.l = _bdf_atol( value, 0, 10 );
+ fp->value.l = _bdf_atol( value );
break;
case BDF_CARDINAL:
- fp->value.ul = _bdf_atoul( value, 0, 10 );
+ fp->value.ul = _bdf_atoul( value );
break;
}
@@ -1471,10 +1216,10 @@
if ( _bdf_strncmp( name, "COMMENT", 7 ) != 0 )
{
/* Add the property to the font property table. */
- error = hash_insert( fp->name,
- font->props_used,
- (hashtable *)font->internal,
- memory );
+ error = ft_hash_str_insert( fp->name,
+ font->props_used,
+ (FT_Hash)font->internal,
+ memory );
if ( error )
goto Exit;
}
@@ -1565,7 +1310,7 @@
}
/* The very first thing expected is the number of glyphs. */
- if ( !( p->flags & _BDF_GLYPHS ) )
+ if ( !( p->flags & BDF_GLYPHS_ ) )
{
if ( _bdf_strncmp( line, "CHARS", 5 ) != 0 )
{
@@ -1577,7 +1322,14 @@
error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
if ( error )
goto Exit;
- p->cnt = font->glyphs_size = _bdf_atoul( p->list.field[1], 0, 10 );
+ p->cnt = font->glyphs_size = _bdf_atoul( p->list.field[1] );
+
+ /* We need at least 20 bytes per glyph. */
+ if ( p->cnt > p->size / 20 )
+ {
+ p->cnt = font->glyphs_size = p->size / 20;
+ FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG17, p->cnt ));
+ }
/* Make sure the number of glyphs is non-zero. */
if ( p->cnt == 0 )
@@ -1595,7 +1347,7 @@
if ( FT_NEW_ARRAY( font->glyphs, font->glyphs_size ) )
goto Exit;
- p->flags |= _BDF_GLYPHS;
+ p->flags |= BDF_GLYPHS_;
goto Exit;
}
@@ -1603,7 +1355,7 @@
/* Check for the ENDFONT field. */
if ( _bdf_strncmp( line, "ENDFONT", 7 ) == 0 )
{
- if ( p->flags & _BDF_GLYPH_BITS )
+ if ( p->flags & BDF_GLYPH_BITS_ )
{
/* Missing ENDCHAR field. */
FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENDCHAR" ));
@@ -1617,7 +1369,7 @@
sizeof ( bdf_glyph_t ),
by_encoding );
- p->flags &= ~_BDF_START;
+ p->flags &= ~BDF_START_;
goto Exit;
}
@@ -1626,14 +1378,14 @@
if ( _bdf_strncmp( line, "ENDCHAR", 7 ) == 0 )
{
p->glyph_enc = 0;
- p->flags &= ~_BDF_GLYPH_BITS;
+ p->flags &= ~BDF_GLYPH_BITS_;
goto Exit;
}
/* Check whether a glyph is being scanned but should be */
/* ignored because it is an unencoded glyph. */
- if ( ( p->flags & _BDF_GLYPH ) &&
+ if ( ( p->flags & BDF_GLYPH_ ) &&
p->glyph_enc == -1 &&
p->opts->keep_unencoded == 0 )
goto Exit;
@@ -1641,6 +1393,14 @@
/* Check for the STARTCHAR field. */
if ( _bdf_strncmp( line, "STARTCHAR", 9 ) == 0 )
{
+ if ( p->flags & BDF_GLYPH_BITS_ )
+ {
+ /* Missing ENDCHAR field. */
+ FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "ENDCHAR" ));
+ error = FT_THROW( Missing_Startchar_Field );
+ goto Exit;
+ }
+
/* Set the character name in the parse info first until the */
/* encoding can be checked for an unencoded character. */
FT_FREE( p->glyph_name );
@@ -1665,7 +1425,7 @@
FT_MEM_COPY( p->glyph_name, s, slen + 1 );
- p->flags |= _BDF_GLYPH;
+ p->flags |= BDF_GLYPH_;
FT_TRACE4(( DBGMSG1, lineno, s ));
@@ -1675,7 +1435,7 @@
/* Check for the ENCODING field. */
if ( _bdf_strncmp( line, "ENCODING", 8 ) == 0 )
{
- if ( !( p->flags & _BDF_GLYPH ) )
+ if ( !( p->flags & BDF_GLYPH_ ) )
{
/* Missing STARTCHAR field. */
FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "STARTCHAR" ));
@@ -1687,7 +1447,7 @@
if ( error )
goto Exit;
- p->glyph_enc = _bdf_atol( p->list.field[1], 0, 10 );
+ p->glyph_enc = _bdf_atol( p->list.field[1] );
/* Normalize negative encoding values. The specification only */
/* allows -1, but we can be more generous here. */
@@ -1696,7 +1456,7 @@
/* Check for alternative encoding format. */
if ( p->glyph_enc == -1 && p->list.used > 2 )
- p->glyph_enc = _bdf_atol( p->list.field[2], 0, 10 );
+ p->glyph_enc = _bdf_atol( p->list.field[2] );
if ( p->glyph_enc < -1 )
p->glyph_enc = -1;
@@ -1773,20 +1533,25 @@
glyph = font->unencoded + font->unencoded_used;
glyph->name = p->glyph_name;
glyph->encoding = (long)font->unencoded_used++;
+
+ /* Reset the initial glyph info. */
+ p->glyph_name = NULL;
}
else
+ {
/* Free up the glyph name if the unencoded shouldn't be */
/* kept. */
FT_FREE( p->glyph_name );
+ }
p->glyph_name = NULL;
}
/* Clear the flags that might be added when width and height are */
/* checked for consistency. */
- p->flags &= ~( _BDF_GLYPH_WIDTH_CHECK | _BDF_GLYPH_HEIGHT_CHECK );
+ p->flags &= ~( BDF_GLYPH_WIDTH_CHECK_ | BDF_GLYPH_HEIGHT_CHECK_ );
- p->flags |= _BDF_ENCODING;
+ p->flags |= BDF_ENCODING_;
goto Exit;
}
@@ -1798,16 +1563,16 @@
glyph = font->glyphs + ( font->glyphs_used - 1 );
/* Check whether a bitmap is being constructed. */
- if ( p->flags & _BDF_BITMAP )
+ if ( p->flags & BDF_BITMAP_ )
{
/* If there are more rows than are specified in the glyph metrics, */
/* ignore the remaining lines. */
if ( p->row >= (unsigned long)glyph->bbx.height )
{
- if ( !( p->flags & _BDF_GLYPH_HEIGHT_CHECK ) )
+ if ( !( p->flags & BDF_GLYPH_HEIGHT_CHECK_ ) )
{
FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG13, glyph->encoding ));
- p->flags |= _BDF_GLYPH_HEIGHT_CHECK;
+ p->flags |= BDF_GLYPH_HEIGHT_CHECK_;
font->modified = 1;
}
@@ -1832,10 +1597,10 @@
/* If any line has not enough columns, */
/* indicate they have been padded with zero bits. */
if ( i < nibbles &&
- !( p->flags & _BDF_GLYPH_WIDTH_CHECK ) )
+ !( p->flags & BDF_GLYPH_WIDTH_CHECK_ ) )
{
FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG16, glyph->encoding ));
- p->flags |= _BDF_GLYPH_WIDTH_CHECK;
+ p->flags |= BDF_GLYPH_WIDTH_CHECK_;
font->modified = 1;
}
@@ -1847,10 +1612,10 @@
/* If any line has extra columns, indicate they have been removed. */
if ( i == nibbles &&
sbitset( hdigits, line[nibbles] ) &&
- !( p->flags & _BDF_GLYPH_WIDTH_CHECK ) )
+ !( p->flags & BDF_GLYPH_WIDTH_CHECK_ ) )
{
FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG14, glyph->encoding ));
- p->flags |= _BDF_GLYPH_WIDTH_CHECK;
+ p->flags |= BDF_GLYPH_WIDTH_CHECK_;
font->modified = 1;
}
@@ -1861,15 +1626,15 @@
/* Expect the SWIDTH (scalable width) field next. */
if ( _bdf_strncmp( line, "SWIDTH", 6 ) == 0 )
{
- if ( !( p->flags & _BDF_ENCODING ) )
+ if ( !( p->flags & BDF_ENCODING_ ) )
goto Missing_Encoding;
error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
if ( error )
goto Exit;
- glyph->swidth = (unsigned short)_bdf_atoul( p->list.field[1], 0, 10 );
- p->flags |= _BDF_SWIDTH;
+ glyph->swidth = (unsigned short)_bdf_atoul( p->list.field[1] );
+ p->flags |= BDF_SWIDTH_;
goto Exit;
}
@@ -1877,16 +1642,16 @@
/* Expect the DWIDTH (scalable width) field next. */
if ( _bdf_strncmp( line, "DWIDTH", 6 ) == 0 )
{
- if ( !( p->flags & _BDF_ENCODING ) )
+ if ( !( p->flags & BDF_ENCODING_ ) )
goto Missing_Encoding;
error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
if ( error )
goto Exit;
- glyph->dwidth = (unsigned short)_bdf_atoul( p->list.field[1], 0, 10 );
+ glyph->dwidth = (unsigned short)_bdf_atoul( p->list.field[1] );
- if ( !( p->flags & _BDF_SWIDTH ) )
+ if ( !( p->flags & BDF_SWIDTH_ ) )
{
/* Missing SWIDTH field. Emit an auto correction message and set */
/* the scalable width from the device width. */
@@ -1898,24 +1663,24 @@
font->resolution_x ) );
}
- p->flags |= _BDF_DWIDTH;
+ p->flags |= BDF_DWIDTH_;
goto Exit;
}
/* Expect the BBX field next. */
if ( _bdf_strncmp( line, "BBX", 3 ) == 0 )
{
- if ( !( p->flags & _BDF_ENCODING ) )
+ if ( !( p->flags & BDF_ENCODING_ ) )
goto Missing_Encoding;
error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
if ( error )
goto Exit;
- glyph->bbx.width = _bdf_atous( p->list.field[1], 0, 10 );
- glyph->bbx.height = _bdf_atous( p->list.field[2], 0, 10 );
- glyph->bbx.x_offset = _bdf_atos( p->list.field[3], 0, 10 );
- glyph->bbx.y_offset = _bdf_atos( p->list.field[4], 0, 10 );
+ glyph->bbx.width = _bdf_atous( p->list.field[1] );
+ glyph->bbx.height = _bdf_atous( p->list.field[2] );
+ glyph->bbx.x_offset = _bdf_atos( p->list.field[3] );
+ glyph->bbx.y_offset = _bdf_atos( p->list.field[4] );
/* Generate the ascent and descent of the character. */
glyph->bbx.ascent = (short)( glyph->bbx.height + glyph->bbx.y_offset );
@@ -1932,7 +1697,7 @@
p->minlb = (short)FT_MIN( glyph->bbx.x_offset, p->minlb );
p->maxlb = (short)FT_MAX( glyph->bbx.x_offset, p->maxlb );
- if ( !( p->flags & _BDF_DWIDTH ) )
+ if ( !( p->flags & BDF_DWIDTH_ ) )
{
/* Missing DWIDTH field. Emit an auto correction message and set */
/* the device width to the glyph width. */
@@ -1961,12 +1726,12 @@
else
_bdf_set_glyph_modified( font->nmod, glyph->encoding );
- p->flags |= _BDF_SWIDTH_ADJ;
+ p->flags |= BDF_SWIDTH_ADJ_;
font->modified = 1;
}
}
- p->flags |= _BDF_BBX;
+ p->flags |= BDF_BBX_;
goto Exit;
}
@@ -1976,7 +1741,7 @@
unsigned long bitmap_size;
- if ( !( p->flags & _BDF_BBX ) )
+ if ( !( p->flags & BDF_BBX_ ) )
{
/* Missing BBX field. */
FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG1, lineno, "BBX" ));
@@ -2001,7 +1766,7 @@
goto Exit;
p->row = 0;
- p->flags |= _BDF_BITMAP;
+ p->flags |= BDF_BITMAP_;
goto Exit;
}
@@ -2016,7 +1781,7 @@
error = FT_THROW( Missing_Encoding_Field );
Exit:
- if ( error && ( p->flags & _BDF_GLYPH ) )
+ if ( error && ( p->flags & BDF_GLYPH_ ) )
FT_FREE( p->glyph_name );
return error;
@@ -2080,7 +1845,7 @@
p->font->modified = 1;
}
- p->flags &= ~_BDF_PROPS;
+ p->flags &= ~BDF_PROPS_;
*next = _bdf_parse_glyphs;
goto Exit;
@@ -2178,7 +1943,7 @@
goto Exit;
}
- if ( !( p->flags & _BDF_START ) )
+ if ( !( p->flags & BDF_START_ ) )
{
memory = p->memory;
@@ -2190,7 +1955,7 @@
goto Exit;
}
- p->flags = _BDF_START;
+ p->flags = BDF_START_;
font = p->font = 0;
if ( FT_NEW( font ) )
@@ -2205,22 +1970,22 @@
bdf_property_t* prop;
- error = hash_init( &(font->proptbl), memory );
+ error = ft_hash_str_init( &(font->proptbl), memory );
if ( error )
goto Exit;
for ( i = 0, prop = (bdf_property_t*)_bdf_properties;
i < _num_bdf_properties; i++, prop++ )
{
- error = hash_insert( prop->name, i,
- &(font->proptbl), memory );
+ error = ft_hash_str_insert( prop->name, i,
+ &(font->proptbl), memory );
if ( error )
goto Exit;
}
}
- if ( FT_ALLOC( p->font->internal, sizeof ( hashtable ) ) )
+ if ( FT_ALLOC( p->font->internal, sizeof ( FT_HashRec ) ) )
goto Exit;
- error = hash_init( (hashtable *)p->font->internal,memory );
+ error = ft_hash_str_init( (FT_Hash)p->font->internal, memory );
if ( error )
goto Exit;
p->font->spacing = p->opts->font_spacing;
@@ -2232,7 +1997,7 @@
/* Check for the start of the properties. */
if ( _bdf_strncmp( line, "STARTPROPERTIES", 15 ) == 0 )
{
- if ( !( p->flags & _BDF_FONT_BBX ) )
+ if ( !( p->flags & BDF_FONT_BBX_ ) )
{
/* Missing the FONTBOUNDINGBOX field. */
FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "FONTBOUNDINGBOX" ));
@@ -2243,8 +2008,18 @@
error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
if ( error )
goto Exit;
+
/* at this point, `p->font' can't be NULL */
- p->cnt = p->font->props_size = _bdf_atoul( p->list.field[1], 0, 10 );
+ p->cnt = p->font->props_size = _bdf_atoul( p->list.field[1] );
+ /* We need at least 4 bytes per property. */
+ if ( p->cnt > p->size / 4 )
+ {
+ p->font->props_size = 0;
+
+ FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG5, lineno, "STARTPROPERTIES" ));
+ error = FT_THROW( Invalid_Argument );
+ goto Exit;
+ }
if ( FT_NEW_ARRAY( p->font->props, p->cnt ) )
{
@@ -2252,7 +2027,7 @@
goto Exit;
}
- p->flags |= _BDF_PROPS;
+ p->flags |= BDF_PROPS_;
*next = _bdf_parse_properties;
goto Exit;
@@ -2261,7 +2036,7 @@
/* Check for the FONTBOUNDINGBOX field. */
if ( _bdf_strncmp( line, "FONTBOUNDINGBOX", 15 ) == 0 )
{
- if ( !( p->flags & _BDF_SIZE ) )
+ if ( !( p->flags & BDF_SIZE_ ) )
{
/* Missing the SIZE field. */
FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "SIZE" ));
@@ -2273,18 +2048,18 @@
if ( error )
goto Exit;
- p->font->bbx.width = _bdf_atous( p->list.field[1], 0, 10 );
- p->font->bbx.height = _bdf_atous( p->list.field[2], 0, 10 );
+ p->font->bbx.width = _bdf_atous( p->list.field[1] );
+ p->font->bbx.height = _bdf_atous( p->list.field[2] );
- p->font->bbx.x_offset = _bdf_atos( p->list.field[3], 0, 10 );
- p->font->bbx.y_offset = _bdf_atos( p->list.field[4], 0, 10 );
+ p->font->bbx.x_offset = _bdf_atos( p->list.field[3] );
+ p->font->bbx.y_offset = _bdf_atos( p->list.field[4] );
p->font->bbx.ascent = (short)( p->font->bbx.height +
p->font->bbx.y_offset );
p->font->bbx.descent = (short)( -p->font->bbx.y_offset );
- p->flags |= _BDF_FONT_BBX;
+ p->flags |= BDF_FONT_BBX_;
goto Exit;
}
@@ -2319,7 +2094,7 @@
if ( error )
goto Exit;
- p->flags |= _BDF_FONT_NAME;
+ p->flags |= BDF_FONT_NAME_;
goto Exit;
}
@@ -2327,7 +2102,7 @@
/* Check for the SIZE field. */
if ( _bdf_strncmp( line, "SIZE", 4 ) == 0 )
{
- if ( !( p->flags & _BDF_FONT_NAME ) )
+ if ( !( p->flags & BDF_FONT_NAME_ ) )
{
/* Missing the FONT field. */
FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "FONT" ));
@@ -2339,42 +2114,35 @@
if ( error )
goto Exit;
- p->font->point_size = _bdf_atoul( p->list.field[1], 0, 10 );
- p->font->resolution_x = _bdf_atoul( p->list.field[2], 0, 10 );
- p->font->resolution_y = _bdf_atoul( p->list.field[3], 0, 10 );
+ p->font->point_size = _bdf_atoul( p->list.field[1] );
+ p->font->resolution_x = _bdf_atoul( p->list.field[2] );
+ p->font->resolution_y = _bdf_atoul( p->list.field[3] );
/* Check for the bits per pixel field. */
if ( p->list.used == 5 )
{
- unsigned short bitcount, i, shift;
+ unsigned short bpp;
- p->font->bpp = (unsigned short)_bdf_atos( p->list.field[4], 0, 10 );
+ bpp = (unsigned short)_bdf_atos( p->list.field[4] );
- /* Only values 1, 2, 4, 8 are allowed. */
- shift = p->font->bpp;
- bitcount = 0;
- for ( i = 0; shift > 0; i++ )
- {
- if ( shift & 1 )
- bitcount = i;
- shift >>= 1;
- }
+ /* Only values 1, 2, 4, 8 are allowed for greymap fonts. */
+ if ( bpp > 4 )
+ p->font->bpp = 8;
+ else if ( bpp > 2 )
+ p->font->bpp = 4;
+ else if ( bpp > 1 )
+ p->font->bpp = 2;
+ else
+ p->font->bpp = 1;
- shift = (unsigned short)( ( bitcount > 3 ) ? 8
- : ( 1U << bitcount ) );
-
- if ( p->font->bpp > shift || p->font->bpp != shift )
- {
- /* select next higher value */
- p->font->bpp = (unsigned short)( shift << 1 );
+ if ( p->font->bpp != bpp )
FT_TRACE2(( "_bdf_parse_start: " ACMSG11, p->font->bpp ));
- }
}
else
p->font->bpp = 1;
- p->flags |= _BDF_SIZE;
+ p->flags |= BDF_SIZE_;
goto Exit;
}
@@ -2385,7 +2153,7 @@
char nbuf[128];
- if ( !( p->flags & _BDF_FONT_BBX ) )
+ if ( !( p->flags & BDF_FONT_BBX_ ) )
{
/* Missing the FONTBOUNDINGBOX field. */
FT_ERROR(( "_bdf_parse_start: " ERRMSG1, lineno, "FONTBOUNDINGBOX" ));
@@ -2454,6 +2222,7 @@
memory = NULL;
p->opts = (bdf_options_t*)( ( opts != 0 ) ? opts : &_bdf_opts );
p->minlb = 32767;
+ p->size = stream->size;
p->memory = extmemory; /* only during font creation */
_bdf_list_init( &p->list, extmemory );
@@ -2525,27 +2294,27 @@
p->font->bbx.height = (unsigned short)( p->maxas + p->maxds );
}
- if ( p->flags & _BDF_SWIDTH_ADJ )
+ if ( p->flags & BDF_SWIDTH_ADJ_ )
FT_TRACE2(( "bdf_load_font: " ACMSG8 ));
}
}
- if ( p->flags & _BDF_START )
+ if ( p->flags & BDF_START_ )
{
/* The ENDFONT field was never reached or did not exist. */
- if ( !( p->flags & _BDF_GLYPHS ) )
+ if ( !( p->flags & BDF_GLYPHS_ ) )
{
/* Error happened while parsing header. */
FT_ERROR(( "bdf_load_font: " ERRMSG2, lineno ));
error = FT_THROW( Corrupted_Font_Header );
- goto Exit;
+ goto Fail;
}
else
{
/* Error happened when parsing glyphs. */
FT_ERROR(( "bdf_load_font: " ERRMSG3, lineno ));
error = FT_THROW( Corrupted_Font_Glyphs );
- goto Exit;
+ goto Fail;
}
}
@@ -2564,7 +2333,7 @@
p->font->comments[p->font->comments_len] = 0;
}
}
- else if ( error == FT_Err_Ok )
+ else if ( !error )
error = FT_THROW( Invalid_File_Format );
*font = p->font;
@@ -2576,6 +2345,7 @@
memory = extmemory;
+ FT_FREE( p->glyph_name );
FT_FREE( p );
}
@@ -2611,7 +2381,7 @@
/* Free up the internal hash table of property names. */
if ( font->internal )
{
- hash_free( (hashtable *)font->internal, memory );
+ ft_hash_str_free( (FT_Hash)font->internal, memory );
FT_FREE( font->internal );
}
@@ -2656,7 +2426,7 @@
FT_FREE( font->overflow.glyphs );
/* bdf_cleanup */
- hash_free( &(font->proptbl), memory );
+ ft_hash_str_free( &(font->proptbl), memory );
/* Free up the user defined properties. */
for ( prop = font->user_props, i = 0;
@@ -2677,15 +2447,15 @@
bdf_get_font_property( bdf_font_t* font,
const char* name )
{
- hashnode hn;
+ size_t* propid;
if ( font == 0 || font->props_size == 0 || name == 0 || *name == 0 )
return 0;
- hn = hash_lookup( name, (hashtable *)font->internal );
+ propid = ft_hash_str_lookup( name, (FT_Hash)font->internal );
- return hn ? ( font->props + hn->data ) : 0;
+ return propid ? ( font->props + *propid ) : 0;
}
diff --git a/src/bzip2/Jamfile b/src/bzip2/Jamfile
index 53f850e..3548eab 100644
--- a/src/bzip2/Jamfile
+++ b/src/bzip2/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/bzip2 Jamfile
#
-# Copyright 2010-2015 by
+# Copyright 2010-2018 by
# Joel Klinghed
#
# based on `src/lzw/Jamfile'
diff --git a/src/bzip2/ftbzip2.c b/src/bzip2/ftbzip2.c
index 4dfc9c8..1601948 100644
--- a/src/bzip2/ftbzip2.c
+++ b/src/bzip2/ftbzip2.c
@@ -8,7 +8,7 @@
/* parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2010-2015 by */
+/* Copyright 2010-2018 by */
/* Joel Klinghed. */
/* */
/* based on `src/gzip/ftgzip.c' */
@@ -32,7 +32,7 @@
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX Bzip2_Err_
@@ -180,7 +180,7 @@
bzstream->next_in = (char*)zip->buffer;
if ( BZ2_bzDecompressInit( bzstream, 0, 0 ) != BZ_OK ||
- bzstream->next_in == NULL )
+ !bzstream->next_in )
error = FT_THROW( Invalid_File_Format );
Exit:
@@ -254,7 +254,10 @@
size = stream->read( stream, stream->pos, zip->input,
FT_BZIP2_BUFFER_SIZE );
if ( size == 0 )
+ {
+ zip->limit = zip->cursor;
return FT_THROW( Invalid_Stream_Operation );
+ }
}
else
{
@@ -263,7 +266,10 @@
size = FT_BZIP2_BUFFER_SIZE;
if ( size == 0 )
+ {
+ zip->limit = zip->cursor;
return FT_THROW( Invalid_Stream_Operation );
+ }
FT_MEM_COPY( zip->input, stream->base + stream->pos, size );
}
@@ -310,7 +316,8 @@
}
else if ( err != BZ_OK )
{
- error = FT_THROW( Invalid_Stream_Operation );
+ zip->limit = zip->cursor;
+ error = FT_THROW( Invalid_Stream_Operation );
break;
}
}
@@ -437,16 +444,16 @@
}
- static FT_ULong
- ft_bzip2_stream_io( FT_Stream stream,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
+ static unsigned long
+ ft_bzip2_stream_io( FT_Stream stream,
+ unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count )
{
FT_BZip2File zip = (FT_BZip2File)stream->descriptor.pointer;
- return ft_bzip2_file_io( zip, pos, buffer, count );
+ return ft_bzip2_file_io( zip, offset, buffer, count );
}
diff --git a/src/bzip2/rules.mk b/src/bzip2/rules.mk
index 7040588..95954d7 100644
--- a/src/bzip2/rules.mk
+++ b/src/bzip2/rules.mk
@@ -2,7 +2,7 @@
# FreeType 2 BZIP2 support configuration rules
#
-# Copyright 2010-2015 by
+# Copyright 2010-2018 by
# Joel Klinghed.
#
# based on `src/lzw/rules.mk'
diff --git a/src/cache/Jamfile b/src/cache/Jamfile
index 75d8997..53f4c7b 100644
--- a/src/cache/Jamfile
+++ b/src/cache/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/cache Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -11,25 +11,19 @@
SubDir FT2_TOP $(FT2_SRC_DIR) cache ;
-# The file <ftcache.h> contains some macro definitions that are
-# later used in #include statements related to the cache sub-system. It
-# needs to be parsed through a HDRMACRO rule for macro definitions.
-#
-HDRMACRO [ FT2_SubDir include ftcache.h ] ;
-
{
local _sources ;
if $(FT2_MULTI)
{
- _sources = ftcmru
- ftcmanag
+ _sources = ftcbasic
ftccache
ftcglyph
- ftcsbits
ftcimage
- ftcbasic
+ ftcmanag
ftccmap
+ ftcmru
+ ftcsbits
;
}
else
diff --git a/src/cache/ftcache.c b/src/cache/ftcache.c
index 8de527a..1b425af 100644
--- a/src/cache/ftcache.c
+++ b/src/cache/ftcache.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType Caching sub-system (body only). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,15 +17,16 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
-#include "ftcmru.c"
-#include "ftcmanag.c"
+
+#include "ftcbasic.c"
#include "ftccache.c"
#include "ftccmap.c"
#include "ftcglyph.c"
#include "ftcimage.c"
+#include "ftcmanag.c"
+#include "ftcmru.c"
#include "ftcsbits.c"
-#include "ftcbasic.c"
+
/* END */
diff --git a/src/cache/ftcbasic.c b/src/cache/ftcbasic.c
index ac3290c..994aa12 100644
--- a/src/cache/ftcbasic.c
+++ b/src/cache/ftcbasic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType basic cache interface (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -237,12 +237,14 @@
{
{
sizeof ( FTC_BasicFamilyRec ),
- ftc_basic_family_compare,
- ftc_basic_family_init,
- 0, /* FTC_MruNode_ResetFunc */
- 0 /* FTC_MruNode_DoneFunc */
+
+ ftc_basic_family_compare, /* FTC_MruNode_CompareFunc node_compare */
+ ftc_basic_family_init, /* FTC_MruNode_InitFunc node_init */
+ NULL, /* FTC_MruNode_ResetFunc node_reset */
+ NULL /* FTC_MruNode_DoneFunc node_done */
},
- ftc_basic_family_load_glyph
+
+ ftc_basic_family_load_glyph /* FTC_IFamily_LoadGlyphFunc family_load_glyph */
};
@@ -250,16 +252,17 @@
const FTC_GCacheClassRec ftc_basic_image_cache_class =
{
{
- ftc_inode_new,
- ftc_inode_weight,
- ftc_gnode_compare,
- ftc_basic_gnode_compare_faceid,
- ftc_inode_free,
+ ftc_inode_new, /* FTC_Node_NewFunc node_new */
+ ftc_inode_weight, /* FTC_Node_WeightFunc node_weight */
+ ftc_gnode_compare, /* FTC_Node_CompareFunc node_compare */
+ ftc_basic_gnode_compare_faceid, /* FTC_Node_CompareFunc node_remove_faceid */
+ ftc_inode_free, /* FTC_Node_FreeFunc node_free */
sizeof ( FTC_GCacheRec ),
- ftc_gcache_init,
- ftc_gcache_done
+ ftc_gcache_init, /* FTC_Cache_InitFunc cache_init */
+ ftc_gcache_done /* FTC_Cache_DoneFunc cache_done */
},
+
(FTC_MruListClass)&ftc_basic_image_family_class
};
@@ -301,10 +304,18 @@
if ( anode )
*anode = NULL;
- if ( (FT_ULong)( type->flags - FT_INT_MIN ) > FT_UINT_MAX )
+ /*
+ * Internal `FTC_BasicAttr->load_flags' is of type `FT_UInt',
+ * but public `FT_ImageType->flags' is of type `FT_Int32'.
+ *
+ * On 16bit systems, higher bits of type->flags cannot be handled.
+ */
+#if 0xFFFFFFFFUL > FT_UINT_MAX
+ if ( (type->flags & (FT_ULong)FT_UINT_MAX) )
FT_TRACE1(( "FTC_ImageCache_Lookup:"
" higher bits in load_flags 0x%x are dropped\n",
(FT_ULong)type->flags & ~((FT_ULong)FT_UINT_MAX) ));
+#endif
query.attrs.scaler.face_id = type->face_id;
query.attrs.scaler.width = type->width;
@@ -374,11 +385,18 @@
if ( anode )
*anode = NULL;
- /* `FT_Load_Glyph' and `FT_Load_Char' take FT_UInt flags */
+ /*
+ * Internal `FTC_BasicAttr->load_flags' is of type `FT_UInt',
+ * but public `FT_Face->face_flags' is of type `FT_Long'.
+ *
+ * On long > int systems, higher bits of load_flags cannot be handled.
+ */
+#if FT_ULONG_MAX > FT_UINT_MAX
if ( load_flags > FT_UINT_MAX )
FT_TRACE1(( "FTC_ImageCache_LookupScaler:"
" higher bits in load_flags 0x%x are dropped\n",
load_flags & ~((FT_ULong)FT_UINT_MAX) ));
+#endif
query.attrs.scaler = scaler[0];
query.attrs.load_flags = (FT_UInt)load_flags;
@@ -419,11 +437,12 @@
{
{
sizeof ( FTC_BasicFamilyRec ),
- ftc_basic_family_compare,
- ftc_basic_family_init,
- 0, /* FTC_MruNode_ResetFunc */
- 0 /* FTC_MruNode_DoneFunc */
+ ftc_basic_family_compare, /* FTC_MruNode_CompareFunc node_compare */
+ ftc_basic_family_init, /* FTC_MruNode_InitFunc node_init */
+ NULL, /* FTC_MruNode_ResetFunc node_reset */
+ NULL /* FTC_MruNode_DoneFunc node_done */
},
+
ftc_basic_family_get_count,
ftc_basic_family_load_bitmap
};
@@ -433,16 +452,17 @@
const FTC_GCacheClassRec ftc_basic_sbit_cache_class =
{
{
- ftc_snode_new,
- ftc_snode_weight,
- ftc_snode_compare,
- ftc_basic_gnode_compare_faceid,
- ftc_snode_free,
+ ftc_snode_new, /* FTC_Node_NewFunc node_new */
+ ftc_snode_weight, /* FTC_Node_WeightFunc node_weight */
+ ftc_snode_compare, /* FTC_Node_CompareFunc node_compare */
+ ftc_basic_gnode_compare_faceid, /* FTC_Node_CompareFunc node_remove_faceid */
+ ftc_snode_free, /* FTC_Node_FreeFunc node_free */
sizeof ( FTC_GCacheRec ),
- ftc_gcache_init,
- ftc_gcache_done
+ ftc_gcache_init, /* FTC_Cache_InitFunc cache_init */
+ ftc_gcache_done /* FTC_Cache_DoneFunc cache_done */
},
+
(FTC_MruListClass)&ftc_basic_sbit_family_class
};
@@ -482,10 +502,18 @@
*ansbit = NULL;
- if ( (FT_ULong)( type->flags - FT_INT_MIN ) > FT_UINT_MAX )
+ /*
+ * Internal `FTC_BasicAttr->load_flags' is of type `FT_UInt',
+ * but public `FT_ImageType->flags' is of type `FT_Int32'.
+ *
+ * On 16bit systems, higher bits of type->flags cannot be handled.
+ */
+#if 0xFFFFFFFFUL > FT_UINT_MAX
+ if ( (type->flags & (FT_ULong)FT_UINT_MAX) )
FT_TRACE1(( "FTC_ImageCache_Lookup:"
" higher bits in load_flags 0x%x are dropped\n",
(FT_ULong)type->flags & ~((FT_ULong)FT_UINT_MAX) ));
+#endif
query.attrs.scaler.face_id = type->face_id;
query.attrs.scaler.width = type->width;
@@ -557,11 +585,18 @@
*ansbit = NULL;
- /* `FT_Load_Glyph' and `FT_Load_Char' take FT_UInt flags */
+ /*
+ * Internal `FTC_BasicAttr->load_flags' is of type `FT_UInt',
+ * but public `FT_Face->face_flags' is of type `FT_Long'.
+ *
+ * On long > int systems, higher bits of load_flags cannot be handled.
+ */
+#if FT_ULONG_MAX > FT_UINT_MAX
if ( load_flags > FT_UINT_MAX )
FT_TRACE1(( "FTC_ImageCache_LookupScaler:"
" higher bits in load_flags 0x%x are dropped\n",
load_flags & ~((FT_ULong)FT_UINT_MAX) ));
+#endif
query.attrs.scaler = scaler[0];
query.attrs.load_flags = (FT_UInt)load_flags;
diff --git a/src/cache/ftccache.c b/src/cache/ftccache.c
index d8c5b99..12ec585 100644
--- a/src/cache/ftccache.c
+++ b/src/cache/ftccache.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType internal cache interface (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -85,7 +85,7 @@
/* get a top bucket for specified hash from cache,
- * body for FTC_NODE__TOP_FOR_HASH( cache, hash )
+ * body for FTC_NODE_TOP_FOR_HASH( cache, hash )
*/
FT_LOCAL_DEF( FTC_Node* )
ftc_get_top_node_for_hash( FTC_Cache cache,
@@ -147,7 +147,7 @@
for (;;)
{
node = *pnode;
- if ( node == NULL )
+ if ( !node )
break;
if ( node->hash & ( mask + 1 ) )
@@ -224,7 +224,7 @@
ftc_node_hash_unlink( FTC_Node node0,
FTC_Cache cache )
{
- FTC_Node *pnode = FTC_NODE__TOP_FOR_HASH( cache, node0->hash );
+ FTC_Node *pnode = FTC_NODE_TOP_FOR_HASH( cache, node0->hash );
for (;;)
@@ -232,7 +232,7 @@
FTC_Node node = *pnode;
- if ( node == NULL )
+ if ( !node )
{
FT_TRACE0(( "ftc_node_hash_unlink: unknown node\n" ));
return;
@@ -257,7 +257,7 @@
ftc_node_hash_link( FTC_Node node,
FTC_Cache cache )
{
- FTC_Node *pnode = FTC_NODE__TOP_FOR_HASH( cache, node->hash );
+ FTC_Node *pnode = FTC_NODE_TOP_FOR_HASH( cache, node->hash );
node->link = *pnode;
@@ -288,7 +288,7 @@
cache = manager->caches[node->cache_index];
#ifdef FT_DEBUG_ERROR
- if ( cache == NULL )
+ if ( !cache )
{
FT_TRACE0(( "ftc_node_destroy: invalid node handle\n" ));
return;
@@ -494,18 +494,18 @@
FTC_Node_CompareFunc compare = cache->clazz.node_compare;
- if ( cache == NULL || anode == NULL )
+ if ( !cache || !anode )
return FT_THROW( Invalid_Argument );
/* Go to the `top' node of the list sharing same masked hash */
- bucket = pnode = FTC_NODE__TOP_FOR_HASH( cache, hash );
+ bucket = pnode = FTC_NODE_TOP_FOR_HASH( cache, hash );
/* Lookup a node with exactly same hash and queried properties. */
/* NOTE: _nodcomp() may change the linked list to reduce memory. */
for (;;)
{
node = *pnode;
- if ( node == NULL )
+ if ( !node )
goto NewNode;
if ( node->hash == hash &&
@@ -518,12 +518,12 @@
if ( list_changed )
{
/* Update bucket by modified linked list */
- bucket = pnode = FTC_NODE__TOP_FOR_HASH( cache, hash );
+ bucket = pnode = FTC_NODE_TOP_FOR_HASH( cache, hash );
/* Update pnode by modified linked list */
while ( *pnode != node )
{
- if ( *pnode == NULL )
+ if ( !*pnode )
{
FT_ERROR(( "FTC_Cache_Lookup: oops!!! node missing\n" ));
goto NewNode;
@@ -576,13 +576,13 @@
FTC_Node* pnode = bucket;
- for ( ;; )
+ for (;;)
{
FTC_Node node = *pnode;
FT_Bool list_changed = FALSE;
- if ( node == NULL )
+ if ( !node )
break;
if ( cache->clazz.node_remove_faceid( node, face_id,
diff --git a/src/cache/ftccache.h b/src/cache/ftccache.h
index 4e17c7a..859c547 100644
--- a/src/cache/ftccache.h
+++ b/src/cache/ftccache.h
@@ -4,7 +4,7 @@
/* */
/* FreeType internal cache interface (specification). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,16 +16,16 @@
/***************************************************************************/
-#ifndef __FTCCACHE_H__
-#define __FTCCACHE_H__
+#ifndef FTCCACHE_H_
+#define FTCCACHE_H_
#include "ftcmru.h"
FT_BEGIN_HEADER
-#define _FTC_FACE_ID_HASH( i ) \
- ( ( (FT_Offset)(i) >> 3 ) ^ ( (FT_Offset)(i) << 7 ) )
+#define FTC_FACE_ID_HASH( i ) \
+ ( ( (FT_Offset)(i) >> 3 ) ^ ( (FT_Offset)(i) << 7 ) )
/* handle to cache object */
typedef struct FTC_CacheRec_* FTC_Cache;
@@ -69,11 +69,11 @@
#define FTC_NODE( x ) ( (FTC_Node)(x) )
#define FTC_NODE_P( x ) ( (FTC_Node*)(x) )
-#define FTC_NODE__NEXT( x ) FTC_NODE( (x)->mru.next )
-#define FTC_NODE__PREV( x ) FTC_NODE( (x)->mru.prev )
+#define FTC_NODE_NEXT( x ) FTC_NODE( (x)->mru.next )
+#define FTC_NODE_PREV( x ) FTC_NODE( (x)->mru.prev )
#ifdef FTC_INLINE
-#define FTC_NODE__TOP_FOR_HASH( cache, hash ) \
+#define FTC_NODE_TOP_FOR_HASH( cache, hash ) \
( ( cache )->buckets + \
( ( ( ( hash ) & ( cache )->mask ) < ( cache )->p ) \
? ( ( hash ) & ( ( cache )->mask * 2 + 1 ) ) \
@@ -82,7 +82,7 @@
FT_LOCAL( FTC_Node* )
ftc_get_top_node_for_hash( FTC_Cache cache,
FT_Offset hash );
-#define FTC_NODE__TOP_FOR_HASH( cache, hash ) \
+#define FTC_NODE_TOP_FOR_HASH( cache, hash ) \
ftc_get_top_node_for_hash( ( cache ), ( hash ) )
#endif
@@ -220,15 +220,15 @@
node = NULL; \
\
/* Go to the `top' node of the list sharing same masked hash */ \
- _bucket = _pnode = FTC_NODE__TOP_FOR_HASH( _cache, _hash ); \
+ _bucket = _pnode = FTC_NODE_TOP_FOR_HASH( _cache, _hash ); \
\
/* Look up a node with identical hash and queried properties. */ \
/* NOTE: _nodcomp() may change the linked list to reduce memory. */ \
for (;;) \
{ \
_node = *_pnode; \
- if ( _node == NULL ) \
- goto _NewNode; \
+ if ( !_node ) \
+ goto NewNode_; \
\
if ( _node->hash == _hash && \
_nodcomp( _node, query, _cache, &_list_changed ) ) \
@@ -240,15 +240,15 @@
if ( _list_changed ) \
{ \
/* Update _bucket by possibly modified linked list */ \
- _bucket = _pnode = FTC_NODE__TOP_FOR_HASH( _cache, _hash ); \
+ _bucket = _pnode = FTC_NODE_TOP_FOR_HASH( _cache, _hash ); \
\
/* Update _pnode by possibly modified linked list */ \
while ( *_pnode != _node ) \
{ \
- if ( *_pnode == NULL ) \
+ if ( !*_pnode ) \
{ \
FT_ERROR(( "FTC_CACHE_LOOKUP_CMP: oops!!! node missing\n" )); \
- goto _NewNode; \
+ goto NewNode_; \
} \
else \
_pnode = &((*_pnode)->link); \
@@ -273,12 +273,12 @@
FTC_MruNode_Up( (FTC_MruNode*)_nl, \
(FTC_MruNode)_node ); \
} \
- goto _Ok; \
+ goto Ok_; \
\
- _NewNode: \
+ NewNode_: \
error = FTC_Cache_NewNode( _cache, _hash, query, &_node ); \
\
- _Ok: \
+ Ok_: \
node = _node; \
FT_END_STMNT
@@ -325,7 +325,7 @@
break; \
\
_try_done = FTC_Manager_FlushN( _try_manager, _try_count ); \
- if ( _try_done > 0 && ( list_changed ) ) \
+ if ( _try_done > 0 && list_changed != NULL ) \
*(FT_Bool*)( list_changed ) = TRUE; \
\
if ( _try_done == 0 ) \
@@ -346,7 +346,7 @@
FT_END_HEADER
-#endif /* __FTCCACHE_H__ */
+#endif /* FTCCACHE_H_ */
/* END */
diff --git a/src/cache/ftccback.h b/src/cache/ftccback.h
index b3237d5..e51d8d6 100644
--- a/src/cache/ftccback.h
+++ b/src/cache/ftccback.h
@@ -4,7 +4,7 @@
/* */
/* Callback functions of the caching sub-system (specification only). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -15,8 +15,8 @@
/* */
/***************************************************************************/
-#ifndef __FTCCBACK_H__
-#define __FTCCBACK_H__
+#ifndef FTCCBACK_H_
+#define FTCCBACK_H_
#include <ft2build.h>
#include FT_CACHE_H
@@ -86,6 +86,7 @@
FTC_Manager manager );
-#endif /* __FTCCBACK_H__ */
+#endif /* FTCCBACK_H_ */
+
/* END */
diff --git a/src/cache/ftccmap.c b/src/cache/ftccmap.c
index b826222..d20b0f4 100644
--- a/src/cache/ftccmap.c
+++ b/src/cache/ftccmap.c
@@ -4,7 +4,7 @@
/* */
/* FreeType CharMap cache (body) */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -50,7 +50,7 @@
/* compute a query/node hash */
#define FTC_CMAP_HASH( faceid, index, charcode ) \
- ( _FTC_FACE_ID_HASH( faceid ) + 211 * (index) + \
+ ( FTC_FACE_ID_HASH( faceid ) + 211 * (index) + \
( (charcode) / FTC_CMAP_INDICES_MAX ) )
/* the charmap query */
@@ -201,15 +201,15 @@
static
const FTC_CacheClassRec ftc_cmap_cache_class =
{
- ftc_cmap_node_new,
- ftc_cmap_node_weight,
- ftc_cmap_node_compare,
- ftc_cmap_node_remove_faceid,
- ftc_cmap_node_free,
+ ftc_cmap_node_new, /* FTC_Node_NewFunc node_new */
+ ftc_cmap_node_weight, /* FTC_Node_WeightFunc node_weight */
+ ftc_cmap_node_compare, /* FTC_Node_CompareFunc node_compare */
+ ftc_cmap_node_remove_faceid, /* FTC_Node_CompareFunc node_remove_faceid */
+ ftc_cmap_node_free, /* FTC_Node_FreeFunc node_free */
sizeof ( FTC_CacheRec ),
- ftc_cache_init,
- ftc_cache_done,
+ ftc_cache_init, /* FTC_Cache_InitFunc cache_init */
+ ftc_cache_done, /* FTC_Cache_DoneFunc cache_done */
};
@@ -259,9 +259,6 @@
return 0;
}
- if ( !face_id )
- return 0;
-
query.face_id = face_id;
query.cmap_index = (FT_UInt)cmap_index;
query.char_code = char_code;
diff --git a/src/cache/ftcerror.h b/src/cache/ftcerror.h
index 15adec5..a26cd59 100644
--- a/src/cache/ftcerror.h
+++ b/src/cache/ftcerror.h
@@ -4,7 +4,7 @@
/* */
/* Caching sub-system error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,12 +23,12 @@
/* */
/*************************************************************************/
-#ifndef __FTCERROR_H__
-#define __FTCERROR_H__
+#ifndef FTCERROR_H_
+#define FTCERROR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX FTC_Err_
@@ -36,6 +36,7 @@
#include FT_ERRORS_H
-#endif /* __FTCERROR_H__ */
+#endif /* FTCERROR_H_ */
+
/* END */
diff --git a/src/cache/ftcglyph.c b/src/cache/ftcglyph.c
index 343b8a7..782cc0e 100644
--- a/src/cache/ftcglyph.c
+++ b/src/cache/ftcglyph.c
@@ -4,7 +4,7 @@
/* */
/* FreeType Glyph Image (FT_Glyph) cache (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -106,7 +106,7 @@
FTC_Family_Init( FTC_Family family,
FTC_Cache cache )
{
- FTC_GCacheClass clazz = FTC_CACHE__GCACHE_CLASS( cache );
+ FTC_GCacheClass clazz = FTC_CACHE_GCACHE_CLASS( cache );
family->clazz = clazz->family_class;
diff --git a/src/cache/ftcglyph.h b/src/cache/ftcglyph.h
index 6cadbe2..23c24d2 100644
--- a/src/cache/ftcglyph.h
+++ b/src/cache/ftcglyph.h
@@ -4,7 +4,7 @@
/* */
/* FreeType abstract glyph cache (specification). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -113,8 +113,8 @@
/*************************************************************************/
-#ifndef __FTCGLYPH_H__
-#define __FTCGLYPH_H__
+#ifndef FTCGLYPH_H_
+#define FTCGLYPH_H_
#include <ft2build.h>
@@ -245,10 +245,10 @@
#define FTC_GCACHE_CLASS( x ) ((FTC_GCacheClass)(x))
-#define FTC_CACHE__GCACHE_CLASS( x ) \
+#define FTC_CACHE_GCACHE_CLASS( x ) \
FTC_GCACHE_CLASS( FTC_CACHE(x)->org_class )
-#define FTC_CACHE__FAMILY_CLASS( x ) \
- ( (FTC_MruListClass)FTC_CACHE__GCACHE_CLASS( x )->family_class )
+#define FTC_CACHE_FAMILY_CLASS( x ) \
+ ( (FTC_MruListClass)FTC_CACHE_GCACHE_CLASS( x )->family_class )
/* convenience function; use it instead of FTC_Manager_Register_Cache */
@@ -323,7 +323,7 @@
FT_END_HEADER
-#endif /* __FTCGLYPH_H__ */
+#endif /* FTCGLYPH_H_ */
/* END */
diff --git a/src/cache/ftcimage.c b/src/cache/ftcimage.c
index f519a61..77a1001 100644
--- a/src/cache/ftcimage.c
+++ b/src/cache/ftcimage.c
@@ -4,7 +4,7 @@
/* */
/* FreeType Image cache (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -70,7 +70,7 @@
FTC_GNode gnode = FTC_GNODE( inode );
FTC_Family family = gquery->family;
FT_UInt gindex = gquery->gindex;
- FTC_IFamilyClass clazz = FTC_CACHE__IFAMILY_CLASS( cache );
+ FTC_IFamilyClass clazz = FTC_CACHE_IFAMILY_CLASS( cache );
/* initialize its inner fields */
diff --git a/src/cache/ftcimage.h b/src/cache/ftcimage.h
index b312eaa..24a2210 100644
--- a/src/cache/ftcimage.h
+++ b/src/cache/ftcimage.h
@@ -4,7 +4,7 @@
/* */
/* FreeType Generic Image cache (specification) */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -32,8 +32,8 @@
/*************************************************************************/
-#ifndef __FTCIMAGE_H__
-#define __FTCIMAGE_H__
+#ifndef FTCIMAGE_H_
+#define FTCIMAGE_H_
#include <ft2build.h>
@@ -72,8 +72,8 @@
#define FTC_IFAMILY_CLASS( x ) ((FTC_IFamilyClass)(x))
-#define FTC_CACHE__IFAMILY_CLASS( x ) \
- FTC_IFAMILY_CLASS( FTC_CACHE__GCACHE_CLASS(x)->family_class )
+#define FTC_CACHE_IFAMILY_CLASS( x ) \
+ FTC_IFAMILY_CLASS( FTC_CACHE_GCACHE_CLASS(x)->family_class )
/* can be used as a @FTC_Node_FreeFunc */
@@ -101,7 +101,7 @@
FT_END_HEADER
-#endif /* __FTCIMAGE_H__ */
+#endif /* FTCIMAGE_H_ */
/* END */
diff --git a/src/cache/ftcmanag.c b/src/cache/ftcmanag.c
index 658614c..2bcd9df 100644
--- a/src/cache/ftcmanag.c
+++ b/src/cache/ftcmanag.c
@@ -4,7 +4,7 @@
/* */
/* FreeType Cache Manager (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -156,10 +156,11 @@
const FTC_MruListClassRec ftc_size_list_class =
{
sizeof ( FTC_SizeNodeRec ),
- ftc_size_node_compare,
- ftc_size_node_init,
- ftc_size_node_reset,
- ftc_size_node_done
+
+ ftc_size_node_compare, /* FTC_MruNode_CompareFunc node_compare */
+ ftc_size_node_init, /* FTC_MruNode_InitFunc node_init */
+ ftc_size_node_reset, /* FTC_MruNode_ResetFunc node_reset */
+ ftc_size_node_done /* FTC_MruNode_DoneFunc node_done */
};
@@ -296,10 +297,10 @@
{
sizeof ( FTC_FaceNodeRec),
- ftc_face_node_compare,
- ftc_face_node_init,
- 0, /* FTC_MruNode_ResetFunc */
- ftc_face_node_done
+ ftc_face_node_compare, /* FTC_MruNode_CompareFunc node_compare */
+ ftc_face_node_init, /* FTC_MruNode_InitFunc node_init */
+ NULL, /* FTC_MruNode_ResetFunc node_reset */
+ ftc_face_node_done /* FTC_MruNode_DoneFunc node_done */
};
@@ -314,7 +315,7 @@
FTC_MruNode mrunode;
- if ( !aface || !face_id )
+ if ( !aface )
return FT_THROW( Invalid_Argument );
*aface = NULL;
@@ -494,7 +495,7 @@
else
weight += cache->clazz.node_weight( node, cache );
- node = FTC_NODE__NEXT( node );
+ node = FTC_NODE_NEXT( node );
} while ( node != first );
@@ -513,7 +514,7 @@
do
{
count++;
- node = FTC_NODE__NEXT( node );
+ node = FTC_NODE_NEXT( node );
} while ( node != first );
@@ -552,17 +553,17 @@
manager->num_nodes ));
#endif
- if ( manager->cur_weight < manager->max_weight || first == NULL )
+ if ( manager->cur_weight < manager->max_weight || !first )
return;
/* go to last node -- it's a circular list */
- node = FTC_NODE__PREV( first );
+ node = FTC_NODE_PREV( first );
do
{
FTC_Node prev;
- prev = ( node == first ) ? NULL : FTC_NODE__PREV( node );
+ prev = ( node == first ) ? NULL : FTC_NODE_PREV( node );
if ( node->ref_count <= 0 )
ftc_node_destroy( node, manager );
@@ -637,14 +638,14 @@
/* try to remove `count' nodes from the list */
- if ( first == NULL ) /* empty list! */
+ if ( !first ) /* empty list! */
return 0;
/* go to last node - it's a circular list */
- node = FTC_NODE__PREV(first);
+ node = FTC_NODE_PREV(first);
for ( result = 0; result < count; )
{
- FTC_Node prev = FTC_NODE__PREV( node );
+ FTC_Node prev = FTC_NODE_PREV( node );
/* don't touch locked nodes */
@@ -672,7 +673,7 @@
FT_UInt nn;
- if ( !manager || !face_id )
+ if ( !manager )
return;
/* this will remove all FTC_SizeNode that correspond to
diff --git a/src/cache/ftcmanag.h b/src/cache/ftcmanag.h
index c6787b7..b4b4755 100644
--- a/src/cache/ftcmanag.h
+++ b/src/cache/ftcmanag.h
@@ -4,7 +4,7 @@
/* */
/* FreeType Cache Manager (specification). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -59,8 +59,8 @@
/*************************************************************************/
-#ifndef __FTCMANAG_H__
-#define __FTCMANAG_H__
+#ifndef FTCMANAG_H_
+#define FTCMANAG_H_
#include <ft2build.h>
@@ -161,7 +161,7 @@
(a)->y_res == (b)->y_res ) ) )
#define FTC_SCALER_HASH( q ) \
- ( _FTC_FACE_ID_HASH( (q)->face_id ) + \
+ ( FTC_FACE_ID_HASH( (q)->face_id ) + \
(q)->width + (q)->height*7 + \
( (q)->pixel ? 0 : ( (q)->x_res*33 ^ (q)->y_res*61 ) ) )
@@ -169,7 +169,7 @@
FT_END_HEADER
-#endif /* __FTCMANAG_H__ */
+#endif /* FTCMANAG_H_ */
/* END */
diff --git a/src/cache/ftcmru.c b/src/cache/ftcmru.c
index 10ce4f3..1087be4 100644
--- a/src/cache/ftcmru.c
+++ b/src/cache/ftcmru.c
@@ -4,7 +4,7 @@
/* */
/* FreeType MRU support (body). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -76,7 +76,7 @@
FTC_MruNode first = *plist;
- FT_ASSERT( first != NULL );
+ FT_ASSERT( first );
if ( first != node )
{
@@ -126,7 +126,7 @@
FTC_MruNode prev, next;
- FT_ASSERT( first != NULL );
+ FT_ASSERT( first );
#ifdef FT_DEBUG_ERROR
{
@@ -238,7 +238,7 @@
FTC_MruNode *anode )
{
FT_Error error;
- FTC_MruNode node = NULL;
+ FTC_MruNode node = NULL;
FT_Memory memory = list->memory;
@@ -296,7 +296,7 @@
node = FTC_MruList_Find( list, key );
- if ( node == NULL )
+ if ( !node )
return FTC_MruList_New( list, key, anode );
*anode = node;
@@ -332,7 +332,7 @@
first = list->nodes;
- while ( first && ( selection == NULL || selection( first, key ) ) )
+ while ( first && ( !selection || selection( first, key ) ) )
{
FTC_MruList_Remove( list, first );
first = list->nodes;
diff --git a/src/cache/ftcmru.h b/src/cache/ftcmru.h
index c0c35f9..82396b9 100644
--- a/src/cache/ftcmru.h
+++ b/src/cache/ftcmru.h
@@ -4,7 +4,7 @@
/* */
/* Simple MRU list-cache (specification). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -40,8 +40,8 @@
/*************************************************************************/
-#ifndef __FTCMRU_H__
-#define __FTCMRU_H__
+#ifndef FTCMRU_H_
+#define FTCMRU_H_
#include <ft2build.h>
@@ -108,6 +108,7 @@
typedef struct FTC_MruListClassRec_
{
FT_Offset node_size;
+
FTC_MruNode_CompareFunc node_compare;
FTC_MruNode_InitFunc node_init;
FTC_MruNode_ResetFunc node_reset;
@@ -115,6 +116,7 @@
} FTC_MruListClassRec;
+
typedef struct FTC_MruListRec_
{
FT_UInt num_nodes;
@@ -181,15 +183,15 @@
FTC_MruNode_Up( _pfirst, _node ); \
\
node = _node; \
- goto _MruOk; \
+ goto MruOk_; \
} \
_node = _node->next; \
\
- } while ( _node != _first) ; \
+ } while ( _node != _first); \
} \
\
error = FTC_MruList_New( (list), (key), (FTC_MruNode*)(void*)&(node) ); \
- _MruOk: \
+ MruOk_: \
; \
FT_END_STMNT
@@ -240,7 +242,7 @@
FT_END_HEADER
-#endif /* __FTCMRU_H__ */
+#endif /* FTCMRU_H_ */
/* END */
diff --git a/src/cache/ftcsbits.c b/src/cache/ftcsbits.c
index 8141719..018f1ec 100644
--- a/src/cache/ftcsbits.c
+++ b/src/cache/ftcsbits.c
@@ -4,7 +4,7 @@
/* */
/* FreeType sbits manager (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -53,6 +53,8 @@
pitch = -pitch;
size = (FT_ULong)pitch * bitmap->rows;
+ if ( !size )
+ return FT_Err_Ok;
if ( !FT_ALLOC( sbit->buffer, size ) )
FT_MEM_COPY( sbit->buffer, bitmap->buffer, size );
@@ -215,7 +217,7 @@
FT_UInt gindex = gquery->gindex;
FTC_Family family = gquery->family;
- FTC_SFamilyClass clazz = FTC_CACHE__SFAMILY_CLASS( cache );
+ FTC_SFamilyClass clazz = FTC_CACHE_SFAMILY_CLASS( cache );
FT_UInt total;
FT_UInt node_count;
@@ -376,7 +378,7 @@
*
*/
- if ( sbit->buffer == NULL && sbit->width == 255 )
+ if ( !sbit->buffer && sbit->width == 255 )
{
FT_ULong size;
FT_Error error;
diff --git a/src/cache/ftcsbits.h b/src/cache/ftcsbits.h
index 5a2fa1a..206a1bb 100644
--- a/src/cache/ftcsbits.h
+++ b/src/cache/ftcsbits.h
@@ -4,7 +4,7 @@
/* */
/* A small-bitmap cache (specification). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTCSBITS_H__
-#define __FTCSBITS_H__
+#ifndef FTCSBITS_H_
+#define FTCSBITS_H_
#include <ft2build.h>
@@ -64,8 +64,8 @@
#define FTC_SFAMILY_CLASS( x ) ((FTC_SFamilyClass)(x))
-#define FTC_CACHE__SFAMILY_CLASS( x ) \
- FTC_SFAMILY_CLASS( FTC_CACHE__GCACHE_CLASS( x )->family_class )
+#define FTC_CACHE_SFAMILY_CLASS( x ) \
+ FTC_SFAMILY_CLASS( FTC_CACHE_GCACHE_CLASS( x )->family_class )
FT_LOCAL( void )
@@ -97,7 +97,7 @@
FT_END_HEADER
-#endif /* __FTCSBITS_H__ */
+#endif /* FTCSBITS_H_ */
/* END */
diff --git a/src/cache/rules.mk b/src/cache/rules.mk
index 6d5cf34..5589359 100644
--- a/src/cache/rules.mk
+++ b/src/cache/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2000-2015 by
+# Copyright 2000-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cff/Jamfile b/src/cff/Jamfile
index 8ffb79c..53c904f 100644
--- a/src/cff/Jamfile
+++ b/src/cff/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/cff Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,14 @@
if $(FT2_MULTI)
{
- _sources = cffdrivr cffgload cffload cffobjs cffparse cffcmap cffpic ;
+ _sources = cffcmap
+ cffdrivr
+ cffgload
+ cffload
+ cffobjs
+ cffparse
+ cffpic
+ ;
}
else
{
diff --git a/src/cff/cf2ft.h b/src/cff/cf2ft.h
deleted file mode 100644
index 3073df3..0000000
--- a/src/cff/cf2ft.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2ft.h */
-/* */
-/* FreeType Glue Component to Adobe's Interpreter (specification). */
-/* */
-/* Copyright 2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#ifndef __CF2FT_H__
-#define __CF2FT_H__
-
-
-#include "cf2types.h"
-
-
- /* TODO: disable asserts for now */
-#define CF2_NDEBUG
-
-
-#include FT_SYSTEM_H
-
-#include "cf2glue.h"
-#include "cffgload.h" /* for CFF_Decoder */
-
-
-FT_BEGIN_HEADER
-
-
- FT_LOCAL( FT_Error )
- cf2_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len );
-
- FT_LOCAL( CFF_SubFont )
- cf2_getSubfont( CFF_Decoder* decoder );
-
-
- FT_LOCAL( CF2_Fixed )
- cf2_getPpemY( CFF_Decoder* decoder );
- FT_LOCAL( CF2_Fixed )
- cf2_getStdVW( CFF_Decoder* decoder );
- FT_LOCAL( CF2_Fixed )
- cf2_getStdHW( CFF_Decoder* decoder );
-
- FT_LOCAL( void )
- cf2_getBlueMetrics( CFF_Decoder* decoder,
- CF2_Fixed* blueScale,
- CF2_Fixed* blueShift,
- CF2_Fixed* blueFuzz );
- FT_LOCAL( void )
- cf2_getBlueValues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
- FT_LOCAL( void )
- cf2_getOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
- FT_LOCAL( void )
- cf2_getFamilyBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
- FT_LOCAL( void )
- cf2_getFamilyOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data );
-
- FT_LOCAL( CF2_Int )
- cf2_getLanguageGroup( CFF_Decoder* decoder );
-
- FT_LOCAL( CF2_Int )
- cf2_initGlobalRegionBuffer( CFF_Decoder* decoder,
- CF2_UInt idx,
- CF2_Buffer buf );
- FT_LOCAL( FT_Error )
- cf2_getSeacComponent( CFF_Decoder* decoder,
- CF2_Int code,
- CF2_Buffer buf );
- FT_LOCAL( void )
- cf2_freeSeacComponent( CFF_Decoder* decoder,
- CF2_Buffer buf );
- FT_LOCAL( CF2_Int )
- cf2_initLocalRegionBuffer( CFF_Decoder* decoder,
- CF2_UInt idx,
- CF2_Buffer buf );
-
- FT_LOCAL( CF2_Fixed )
- cf2_getDefaultWidthX( CFF_Decoder* decoder );
- FT_LOCAL( CF2_Fixed )
- cf2_getNominalWidthX( CFF_Decoder* decoder );
-
-
- /*
- * FreeType client outline
- *
- * process output from the charstring interpreter
- */
- typedef struct CF2_OutlineRec_
- {
- CF2_OutlineCallbacksRec root; /* base class must be first */
- CFF_Decoder* decoder;
-
- } CF2_OutlineRec, *CF2_Outline;
-
-
- FT_LOCAL( void )
- cf2_outline_reset( CF2_Outline outline );
- FT_LOCAL( void )
- cf2_outline_close( CF2_Outline outline );
-
-
-FT_END_HEADER
-
-
-#endif /* __CF2FT_H__ */
-
-
-/* END */
diff --git a/src/cff/cf2intrp.c b/src/cff/cf2intrp.c
deleted file mode 100644
index 537e060..0000000
--- a/src/cff/cf2intrp.c
+++ /dev/null
@@ -1,1571 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2intrp.c */
-/* */
-/* Adobe's CFF Interpreter (body). */
-/* */
-/* Copyright 2007-2014 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2stack.h"
-#include "cf2hints.h"
-#include "cf2intrp.h"
-
-#include "cf2error.h"
-
-
- /*************************************************************************/
- /* */
- /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
- /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
- /* messages during execution. */
- /* */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_cf2interp
-
-
- /* some operators are not implemented yet */
-#define CF2_FIXME FT_TRACE4(( "cf2_interpT2CharString:" \
- " operator not implemented yet\n" ))
-
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmask_init( CF2_HintMask hintmask,
- FT_Error* error )
- {
- FT_ZERO( hintmask );
-
- hintmask->error = error;
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hintmask_isValid( const CF2_HintMask hintmask )
- {
- return hintmask->isValid;
- }
-
-
- FT_LOCAL_DEF( FT_Bool )
- cf2_hintmask_isNew( const CF2_HintMask hintmask )
- {
- return hintmask->isNew;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmask_setNew( CF2_HintMask hintmask,
- FT_Bool val )
- {
- hintmask->isNew = val;
- }
-
-
- /* clients call `getMaskPtr' in order to iterate */
- /* through hint mask */
-
- FT_LOCAL_DEF( FT_Byte* )
- cf2_hintmask_getMaskPtr( CF2_HintMask hintmask )
- {
- return hintmask->mask;
- }
-
-
- static size_t
- cf2_hintmask_setCounts( CF2_HintMask hintmask,
- size_t bitCount )
- {
- if ( bitCount > CF2_MAX_HINTS )
- {
- /* total of h and v stems must be <= 96 */
- CF2_SET_ERROR( hintmask->error, Invalid_Glyph_Format );
- return 0;
- }
-
- hintmask->bitCount = bitCount;
- hintmask->byteCount = ( hintmask->bitCount + 7 ) / 8;
-
- hintmask->isValid = TRUE;
- hintmask->isNew = TRUE;
-
- return bitCount;
- }
-
-
- /* consume the hintmask bytes from the charstring, advancing the src */
- /* pointer */
- static void
- cf2_hintmask_read( CF2_HintMask hintmask,
- CF2_Buffer charstring,
- size_t bitCount )
- {
- size_t i;
-
-#ifndef CF2_NDEBUG
- /* these are the bits in the final mask byte that should be zero */
- /* Note: this variable is only used in an assert expression below */
- /* and then only if CF2_NDEBUG is not defined */
- CF2_UInt mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1;
-#endif
-
-
- /* initialize counts and isValid */
- if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 )
- return;
-
- FT_ASSERT( hintmask->byteCount > 0 );
-
- FT_TRACE4(( " (maskbytes:" ));
-
- /* set mask and advance interpreter's charstring pointer */
- for ( i = 0; i < hintmask->byteCount; i++ )
- {
- hintmask->mask[i] = (FT_Byte)cf2_buf_readByte( charstring );
- FT_TRACE4(( " 0x%02X", hintmask->mask[i] ));
- }
-
- FT_TRACE4(( ")\n" ));
-
- /* assert any unused bits in last byte are zero unless there's a prior */
- /* error */
- /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */
-#ifndef CF2_NDEBUG
- FT_ASSERT( ( hintmask->mask[hintmask->byteCount - 1] & mask ) == 0 ||
- *hintmask->error );
-#endif
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_hintmask_setAll( CF2_HintMask hintmask,
- size_t bitCount )
- {
- size_t i;
- CF2_UInt mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1;
-
-
- /* initialize counts and isValid */
- if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 )
- return;
-
- FT_ASSERT( hintmask->byteCount > 0 );
- FT_ASSERT( hintmask->byteCount <
- sizeof ( hintmask->mask ) / sizeof ( hintmask->mask[0] ) );
-
- /* set mask to all ones */
- for ( i = 0; i < hintmask->byteCount; i++ )
- hintmask->mask[i] = 0xFF;
-
- /* clear unused bits */
- /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */
- hintmask->mask[hintmask->byteCount - 1] &= ~mask;
- }
-
-
- /* Type2 charstring opcodes */
- enum
- {
- cf2_cmdRESERVED_0, /* 0 */
- cf2_cmdHSTEM, /* 1 */
- cf2_cmdRESERVED_2, /* 2 */
- cf2_cmdVSTEM, /* 3 */
- cf2_cmdVMOVETO, /* 4 */
- cf2_cmdRLINETO, /* 5 */
- cf2_cmdHLINETO, /* 6 */
- cf2_cmdVLINETO, /* 7 */
- cf2_cmdRRCURVETO, /* 8 */
- cf2_cmdRESERVED_9, /* 9 */
- cf2_cmdCALLSUBR, /* 10 */
- cf2_cmdRETURN, /* 11 */
- cf2_cmdESC, /* 12 */
- cf2_cmdRESERVED_13, /* 13 */
- cf2_cmdENDCHAR, /* 14 */
- cf2_cmdRESERVED_15, /* 15 */
- cf2_cmdRESERVED_16, /* 16 */
- cf2_cmdRESERVED_17, /* 17 */
- cf2_cmdHSTEMHM, /* 18 */
- cf2_cmdHINTMASK, /* 19 */
- cf2_cmdCNTRMASK, /* 20 */
- cf2_cmdRMOVETO, /* 21 */
- cf2_cmdHMOVETO, /* 22 */
- cf2_cmdVSTEMHM, /* 23 */
- cf2_cmdRCURVELINE, /* 24 */
- cf2_cmdRLINECURVE, /* 25 */
- cf2_cmdVVCURVETO, /* 26 */
- cf2_cmdHHCURVETO, /* 27 */
- cf2_cmdEXTENDEDNMBR, /* 28 */
- cf2_cmdCALLGSUBR, /* 29 */
- cf2_cmdVHCURVETO, /* 30 */
- cf2_cmdHVCURVETO /* 31 */
- };
-
- enum
- {
- cf2_escDOTSECTION, /* 0 */
- cf2_escRESERVED_1, /* 1 */
- cf2_escRESERVED_2, /* 2 */
- cf2_escAND, /* 3 */
- cf2_escOR, /* 4 */
- cf2_escNOT, /* 5 */
- cf2_escRESERVED_6, /* 6 */
- cf2_escRESERVED_7, /* 7 */
- cf2_escRESERVED_8, /* 8 */
- cf2_escABS, /* 9 */
- cf2_escADD, /* 10 like otherADD */
- cf2_escSUB, /* 11 like otherSUB */
- cf2_escDIV, /* 12 */
- cf2_escRESERVED_13, /* 13 */
- cf2_escNEG, /* 14 */
- cf2_escEQ, /* 15 */
- cf2_escRESERVED_16, /* 16 */
- cf2_escRESERVED_17, /* 17 */
- cf2_escDROP, /* 18 */
- cf2_escRESERVED_19, /* 19 */
- cf2_escPUT, /* 20 like otherPUT */
- cf2_escGET, /* 21 like otherGET */
- cf2_escIFELSE, /* 22 like otherIFELSE */
- cf2_escRANDOM, /* 23 like otherRANDOM */
- cf2_escMUL, /* 24 like otherMUL */
- cf2_escRESERVED_25, /* 25 */
- cf2_escSQRT, /* 26 */
- cf2_escDUP, /* 27 like otherDUP */
- cf2_escEXCH, /* 28 like otherEXCH */
- cf2_escINDEX, /* 29 */
- cf2_escROLL, /* 30 */
- cf2_escRESERVED_31, /* 31 */
- cf2_escRESERVED_32, /* 32 */
- cf2_escRESERVED_33, /* 33 */
- cf2_escHFLEX, /* 34 */
- cf2_escFLEX, /* 35 */
- cf2_escHFLEX1, /* 36 */
- cf2_escFLEX1 /* 37 */
- };
-
-
- /* `stemHintArray' does not change once we start drawing the outline. */
- static void
- cf2_doStems( const CF2_Font font,
- CF2_Stack opStack,
- CF2_ArrStack stemHintArray,
- CF2_Fixed* width,
- FT_Bool* haveWidth,
- CF2_Fixed hintOffset )
- {
- CF2_UInt i;
- CF2_UInt count = cf2_stack_count( opStack );
- FT_Bool hasWidthArg = (FT_Bool)( count & 1 );
-
- /* variable accumulates delta values from operand stack */
- CF2_Fixed position = hintOffset;
-
- if ( hasWidthArg && ! *haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) +
- cf2_getNominalWidthX( font->decoder );
-
- if ( font->decoder->width_only )
- goto exit;
-
- for ( i = hasWidthArg ? 1 : 0; i < count; i += 2 )
- {
- /* construct a CF2_StemHint and push it onto the list */
- CF2_StemHintRec stemhint;
-
-
- stemhint.min =
- position += cf2_stack_getReal( opStack, i );
- stemhint.max =
- position += cf2_stack_getReal( opStack, i + 1 );
-
- stemhint.used = FALSE;
- stemhint.maxDS =
- stemhint.minDS = 0;
-
- cf2_arrstack_push( stemHintArray, &stemhint ); /* defer error check */
- }
-
- cf2_stack_clear( opStack );
-
- exit:
- /* cf2_doStems must define a width (may be default) */
- *haveWidth = TRUE;
- }
-
-
- static void
- cf2_doFlex( CF2_Stack opStack,
- CF2_Fixed* curX,
- CF2_Fixed* curY,
- CF2_GlyphPath glyphPath,
- const FT_Bool* readFromStack,
- FT_Bool doConditionalLastRead )
- {
- CF2_Fixed vals[14];
- CF2_UInt index;
- FT_Bool isHFlex;
- CF2_Int top, i, j;
-
-
- vals[0] = *curX;
- vals[1] = *curY;
- index = 0;
- isHFlex = readFromStack[9] == FALSE;
- top = isHFlex ? 9 : 10;
-
- for ( i = 0; i < top; i++ )
- {
- vals[i + 2] = vals[i];
- if ( readFromStack[i] )
- vals[i + 2] += cf2_stack_getReal( opStack, index++ );
- }
-
- if ( isHFlex )
- vals[9 + 2] = *curY;
-
- if ( doConditionalLastRead )
- {
- FT_Bool lastIsX = (FT_Bool)( cf2_fixedAbs( vals[10] - *curX ) >
- cf2_fixedAbs( vals[11] - *curY ) );
- CF2_Fixed lastVal = cf2_stack_getReal( opStack, index );
-
-
- if ( lastIsX )
- {
- vals[12] = vals[10] + lastVal;
- vals[13] = *curY;
- }
- else
- {
- vals[12] = *curX;
- vals[13] = vals[11] + lastVal;
- }
- }
- else
- {
- if ( readFromStack[10] )
- vals[12] = vals[10] + cf2_stack_getReal( opStack, index++ );
- else
- vals[12] = *curX;
-
- if ( readFromStack[11] )
- vals[13] = vals[11] + cf2_stack_getReal( opStack, index );
- else
- vals[13] = *curY;
- }
-
- for ( j = 0; j < 2; j++ )
- cf2_glyphpath_curveTo( glyphPath, vals[j * 6 + 2],
- vals[j * 6 + 3],
- vals[j * 6 + 4],
- vals[j * 6 + 5],
- vals[j * 6 + 6],
- vals[j * 6 + 7] );
-
- cf2_stack_clear( opStack );
-
- *curX = vals[12];
- *curY = vals[13];
- }
-
-
- /*
- * `error' is a shared error code used by many objects in this
- * routine. Before the code continues from an error, it must check and
- * record the error in `*error'. The idea is that this shared
- * error code will record the first error encountered. If testing
- * for an error anyway, the cost of `goto exit' is small, so we do it,
- * even if continuing would be safe. In this case, `lastError' is
- * set, so the testing and storing can be done in one place, at `exit'.
- *
- * Continuing after an error is intended for objects which do their own
- * testing of `*error', e.g., array stack functions. This allows us to
- * avoid an extra test after the call.
- *
- * Unimplemented opcodes are ignored.
- *
- */
- FT_LOCAL_DEF( void )
- cf2_interpT2CharString( CF2_Font font,
- CF2_Buffer buf,
- CF2_OutlineCallbacks callbacks,
- const FT_Vector* translation,
- FT_Bool doingSeac,
- CF2_Fixed curX,
- CF2_Fixed curY,
- CF2_Fixed* width )
- {
- /* lastError is used for errors that are immediately tested */
- FT_Error lastError = FT_Err_Ok;
-
- /* pointer to parsed font object */
- CFF_Decoder* decoder = font->decoder;
-
- FT_Error* error = &font->error;
- FT_Memory memory = font->memory;
-
- CF2_Fixed scaleY = font->innerTransform.d;
- CF2_Fixed nominalWidthX = cf2_getNominalWidthX( decoder );
-
- /* save this for hinting seac accents */
- CF2_Fixed hintOriginY = curY;
-
- CF2_Stack opStack = NULL;
- FT_Byte op1; /* first opcode byte */
-
- /* instruction limit; 20,000,000 matches Avalon */
- FT_UInt32 instructionLimit = 20000000UL;
-
- CF2_ArrStackRec subrStack;
-
- FT_Bool haveWidth;
- CF2_Buffer charstring = NULL;
-
- CF2_Int charstringIndex = -1; /* initialize to empty */
-
- /* TODO: placeholders for hint structures */
-
- /* objects used for hinting */
- CF2_ArrStackRec hStemHintArray;
- CF2_ArrStackRec vStemHintArray;
-
- CF2_HintMaskRec hintMask;
- CF2_GlyphPathRec glyphPath;
-
-
- /* initialize the remaining objects */
- cf2_arrstack_init( &subrStack,
- memory,
- error,
- sizeof ( CF2_BufferRec ) );
- cf2_arrstack_init( &hStemHintArray,
- memory,
- error,
- sizeof ( CF2_StemHintRec ) );
- cf2_arrstack_init( &vStemHintArray,
- memory,
- error,
- sizeof ( CF2_StemHintRec ) );
-
- /* initialize CF2_StemHint arrays */
- cf2_hintmask_init( &hintMask, error );
-
- /* initialize path map to manage drawing operations */
-
- /* Note: last 4 params are used to handle `MoveToPermissive', which */
- /* may need to call `hintMap.Build' */
- /* TODO: MoveToPermissive is gone; are these still needed? */
- cf2_glyphpath_init( &glyphPath,
- font,
- callbacks,
- scaleY,
- /* hShift, */
- &hStemHintArray,
- &vStemHintArray,
- &hintMask,
- hintOriginY,
- &font->blues,
- translation );
-
- /*
- * Initialize state for width parsing. From the CFF Spec:
- *
- * The first stack-clearing operator, which must be one of hstem,
- * hstemhm, vstem, vstemhm, cntrmask, hintmask, hmoveto, vmoveto,
- * rmoveto, or endchar, takes an additional argument - the width (as
- * described earlier), which may be expressed as zero or one numeric
- * argument.
- *
- * What we implement here uses the first validly specified width, but
- * does not detect errors for specifying more than one width.
- *
- * If one of the above operators occurs without explicitly specifying
- * a width, we assume the default width.
- *
- */
- haveWidth = FALSE;
- *width = cf2_getDefaultWidthX( decoder );
-
- /*
- * Note: at this point, all pointers to resources must be NULL
- * and all local objects must be initialized.
- * There must be no branches to exit: above this point.
- *
- */
-
- /* allocate an operand stack */
- opStack = cf2_stack_init( memory, error );
- if ( !opStack )
- {
- lastError = FT_THROW( Out_Of_Memory );
- goto exit;
- }
-
- /* initialize subroutine stack by placing top level charstring as */
- /* first element (max depth plus one for the charstring) */
- /* Note: Caller owns and must finalize the first charstring. */
- /* Our copy of it does not change that requirement. */
- cf2_arrstack_setCount( &subrStack, CF2_MAX_SUBR + 1 );
-
- charstring = (CF2_Buffer)cf2_arrstack_getBuffer( &subrStack );
- *charstring = *buf; /* structure copy */
-
- charstringIndex = 0; /* entry is valid now */
-
- /* catch errors so far */
- if ( *error )
- goto exit;
-
- /* main interpreter loop */
- while ( 1 )
- {
- if ( cf2_buf_isEnd( charstring ) )
- {
- /* If we've reached the end of the charstring, simulate a */
- /* cf2_cmdRETURN or cf2_cmdENDCHAR. */
- if ( charstringIndex )
- op1 = cf2_cmdRETURN; /* end of buffer for subroutine */
- else
- op1 = cf2_cmdENDCHAR; /* end of buffer for top level charstring */
- }
- else
- op1 = (FT_Byte)cf2_buf_readByte( charstring );
-
- /* check for errors once per loop */
- if ( *error )
- goto exit;
-
- instructionLimit--;
- if ( instructionLimit == 0 )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit;
- }
-
- switch( op1 )
- {
- case cf2_cmdRESERVED_0:
- case cf2_cmdRESERVED_2:
- case cf2_cmdRESERVED_9:
- case cf2_cmdRESERVED_13:
- case cf2_cmdRESERVED_15:
- case cf2_cmdRESERVED_16:
- case cf2_cmdRESERVED_17:
- /* we may get here if we have a prior error */
- FT_TRACE4(( " unknown op (%d)\n", op1 ));
- break;
-
- case cf2_cmdHSTEMHM:
- case cf2_cmdHSTEM:
- FT_TRACE4(( op1 == cf2_cmdHSTEMHM ? " hstemhm\n" : " hstem\n" ));
-
- /* never add hints after the mask is computed */
- if ( cf2_hintmask_isValid( &hintMask ) )
- {
- FT_TRACE4(( "cf2_interpT2CharString:"
- " invalid horizontal hint mask\n" ));
- break;
- }
-
- cf2_doStems( font,
- opStack,
- &hStemHintArray,
- width,
- &haveWidth,
- 0 );
-
- if ( font->decoder->width_only )
- goto exit;
-
- break;
-
- case cf2_cmdVSTEMHM:
- case cf2_cmdVSTEM:
- FT_TRACE4(( op1 == cf2_cmdVSTEMHM ? " vstemhm\n" : " vstem\n" ));
-
- /* never add hints after the mask is computed */
- if ( cf2_hintmask_isValid( &hintMask ) )
- {
- FT_TRACE4(( "cf2_interpT2CharString:"
- " invalid vertical hint mask\n" ));
- break;
- }
-
- cf2_doStems( font,
- opStack,
- &vStemHintArray,
- width,
- &haveWidth,
- 0 );
-
- if ( font->decoder->width_only )
- goto exit;
-
- break;
-
- case cf2_cmdVMOVETO:
- FT_TRACE4(( " vmoveto\n" ));
-
- if ( cf2_stack_count( opStack ) > 1 && !haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX;
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- curY += cf2_stack_popFixed( opStack );
-
- cf2_glyphpath_moveTo( &glyphPath, curX, curY );
-
- break;
-
- case cf2_cmdRLINETO:
- {
- CF2_UInt index;
- CF2_UInt count = cf2_stack_count( opStack );
-
-
- FT_TRACE4(( " rlineto\n" ));
-
- for ( index = 0; index < count; index += 2 )
- {
- curX += cf2_stack_getReal( opStack, index + 0 );
- curY += cf2_stack_getReal( opStack, index + 1 );
-
- cf2_glyphpath_lineTo( &glyphPath, curX, curY );
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdHLINETO:
- case cf2_cmdVLINETO:
- {
- CF2_UInt index;
- CF2_UInt count = cf2_stack_count( opStack );
-
- FT_Bool isX = op1 == cf2_cmdHLINETO;
-
-
- FT_TRACE4(( isX ? " hlineto\n" : " vlineto\n" ));
-
- for ( index = 0; index < count; index++ )
- {
- CF2_Fixed v = cf2_stack_getReal( opStack, index );
-
-
- if ( isX )
- curX += v;
- else
- curY += v;
-
- isX = !isX;
-
- cf2_glyphpath_lineTo( &glyphPath, curX, curY );
- }
-
- cf2_stack_clear( opStack );
- }
- continue;
-
- case cf2_cmdRCURVELINE:
- case cf2_cmdRRCURVETO:
- {
- CF2_UInt count = cf2_stack_count( opStack );
- CF2_UInt index = 0;
-
-
- FT_TRACE4(( op1 == cf2_cmdRCURVELINE ? " rcurveline\n"
- : " rrcurveto\n" ));
-
- while ( index + 6 <= count )
- {
- CF2_Fixed x1 = cf2_stack_getReal( opStack, index + 0 ) + curX;
- CF2_Fixed y1 = cf2_stack_getReal( opStack, index + 1 ) + curY;
- CF2_Fixed x2 = cf2_stack_getReal( opStack, index + 2 ) + x1;
- CF2_Fixed y2 = cf2_stack_getReal( opStack, index + 3 ) + y1;
- CF2_Fixed x3 = cf2_stack_getReal( opStack, index + 4 ) + x2;
- CF2_Fixed y3 = cf2_stack_getReal( opStack, index + 5 ) + y2;
-
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- index += 6;
- }
-
- if ( op1 == cf2_cmdRCURVELINE )
- {
- curX += cf2_stack_getReal( opStack, index + 0 );
- curY += cf2_stack_getReal( opStack, index + 1 );
-
- cf2_glyphpath_lineTo( &glyphPath, curX, curY );
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdCALLGSUBR:
- case cf2_cmdCALLSUBR:
- {
- CF2_UInt subrIndex;
-
-
- FT_TRACE4(( op1 == cf2_cmdCALLGSUBR ? " callgsubr"
- : " callsubr" ));
-
- if ( charstringIndex > CF2_MAX_SUBR )
- {
- /* max subr plus one for charstring */
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* overflow of stack */
- }
-
- /* push our current CFF charstring region on subrStack */
- charstring = (CF2_Buffer)
- cf2_arrstack_getPointer(
- &subrStack,
- (size_t)charstringIndex + 1 );
-
- /* set up the new CFF region and pointer */
- subrIndex = (CF2_UInt)cf2_stack_popInt( opStack );
-
- switch ( op1 )
- {
- case cf2_cmdCALLGSUBR:
- FT_TRACE4(( " (idx %d, entering level %d)\n",
- subrIndex + (CF2_UInt)decoder->globals_bias,
- charstringIndex + 1 ));
-
- if ( cf2_initGlobalRegionBuffer( decoder,
- subrIndex,
- charstring ) )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* subroutine lookup or stream error */
- }
- break;
-
- default:
- /* cf2_cmdCALLSUBR */
- FT_TRACE4(( " (idx %d, entering level %d)\n",
- subrIndex + (CF2_UInt)decoder->locals_bias,
- charstringIndex + 1 ));
-
- if ( cf2_initLocalRegionBuffer( decoder,
- subrIndex,
- charstring ) )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* subroutine lookup or stream error */
- }
- }
-
- charstringIndex += 1; /* entry is valid now */
- }
- continue; /* do not clear the stack */
-
- case cf2_cmdRETURN:
- FT_TRACE4(( " return (leaving level %d)\n", charstringIndex ));
-
- if ( charstringIndex < 1 )
- {
- /* Note: cannot return from top charstring */
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* underflow of stack */
- }
-
- /* restore position in previous charstring */
- charstring = (CF2_Buffer)
- cf2_arrstack_getPointer(
- &subrStack,
- (CF2_UInt)--charstringIndex );
- continue; /* do not clear the stack */
-
- case cf2_cmdESC:
- {
- FT_Byte op2 = (FT_Byte)cf2_buf_readByte( charstring );
-
-
- switch ( op2 )
- {
- case cf2_escDOTSECTION:
- /* something about `flip type of locking' -- ignore it */
- FT_TRACE4(( " dotsection\n" ));
-
- break;
-
- /* TODO: should these operators be supported? */
- case cf2_escAND: /* in spec */
- FT_TRACE4(( " and\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escOR: /* in spec */
- FT_TRACE4(( " or\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escNOT: /* in spec */
- FT_TRACE4(( " not\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escABS: /* in spec */
- FT_TRACE4(( " abs\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escADD: /* in spec */
- FT_TRACE4(( " add\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escSUB: /* in spec */
- FT_TRACE4(( " sub\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escDIV: /* in spec */
- FT_TRACE4(( " div\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escNEG: /* in spec */
- FT_TRACE4(( " neg\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escEQ: /* in spec */
- FT_TRACE4(( " eq\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escDROP: /* in spec */
- FT_TRACE4(( " drop\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escPUT: /* in spec */
- FT_TRACE4(( " put\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escGET: /* in spec */
- FT_TRACE4(( " get\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escIFELSE: /* in spec */
- FT_TRACE4(( " ifelse\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escRANDOM: /* in spec */
- FT_TRACE4(( " random\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escMUL: /* in spec */
- FT_TRACE4(( " mul\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escSQRT: /* in spec */
- FT_TRACE4(( " sqrt\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escDUP: /* in spec */
- FT_TRACE4(( " dup\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escEXCH: /* in spec */
- FT_TRACE4(( " exch\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escINDEX: /* in spec */
- FT_TRACE4(( " index\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escROLL: /* in spec */
- FT_TRACE4(( " roll\n" ));
-
- CF2_FIXME;
- break;
-
- case cf2_escHFLEX:
- {
- static const FT_Bool readFromStack[12] =
- {
- TRUE /* dx1 */, FALSE /* dy1 */,
- TRUE /* dx2 */, TRUE /* dy2 */,
- TRUE /* dx3 */, FALSE /* dy3 */,
- TRUE /* dx4 */, FALSE /* dy4 */,
- TRUE /* dx5 */, FALSE /* dy5 */,
- TRUE /* dx6 */, FALSE /* dy6 */
- };
-
-
- FT_TRACE4(( " hflex\n" ));
-
- cf2_doFlex( opStack,
- &curX,
- &curY,
- &glyphPath,
- readFromStack,
- FALSE /* doConditionalLastRead */ );
- }
- continue;
-
- case cf2_escFLEX:
- {
- static const FT_Bool readFromStack[12] =
- {
- TRUE /* dx1 */, TRUE /* dy1 */,
- TRUE /* dx2 */, TRUE /* dy2 */,
- TRUE /* dx3 */, TRUE /* dy3 */,
- TRUE /* dx4 */, TRUE /* dy4 */,
- TRUE /* dx5 */, TRUE /* dy5 */,
- TRUE /* dx6 */, TRUE /* dy6 */
- };
-
-
- FT_TRACE4(( " flex\n" ));
-
- cf2_doFlex( opStack,
- &curX,
- &curY,
- &glyphPath,
- readFromStack,
- FALSE /* doConditionalLastRead */ );
- }
- break; /* TODO: why is this not a continue? */
-
- case cf2_escHFLEX1:
- {
- static const FT_Bool readFromStack[12] =
- {
- TRUE /* dx1 */, TRUE /* dy1 */,
- TRUE /* dx2 */, TRUE /* dy2 */,
- TRUE /* dx3 */, FALSE /* dy3 */,
- TRUE /* dx4 */, FALSE /* dy4 */,
- TRUE /* dx5 */, TRUE /* dy5 */,
- TRUE /* dx6 */, FALSE /* dy6 */
- };
-
-
- FT_TRACE4(( " hflex1\n" ));
-
- cf2_doFlex( opStack,
- &curX,
- &curY,
- &glyphPath,
- readFromStack,
- FALSE /* doConditionalLastRead */ );
- }
- continue;
-
- case cf2_escFLEX1:
- {
- static const FT_Bool readFromStack[12] =
- {
- TRUE /* dx1 */, TRUE /* dy1 */,
- TRUE /* dx2 */, TRUE /* dy2 */,
- TRUE /* dx3 */, TRUE /* dy3 */,
- TRUE /* dx4 */, TRUE /* dy4 */,
- TRUE /* dx5 */, TRUE /* dy5 */,
- FALSE /* dx6 */, FALSE /* dy6 */
- };
-
-
- FT_TRACE4(( " flex1\n" ));
-
- cf2_doFlex( opStack,
- &curX,
- &curY,
- &glyphPath,
- readFromStack,
- TRUE /* doConditionalLastRead */ );
- }
- continue;
-
- case cf2_escRESERVED_1:
- case cf2_escRESERVED_2:
- case cf2_escRESERVED_6:
- case cf2_escRESERVED_7:
- case cf2_escRESERVED_8:
- case cf2_escRESERVED_13:
- case cf2_escRESERVED_16:
- case cf2_escRESERVED_17:
- case cf2_escRESERVED_19:
- case cf2_escRESERVED_25:
- case cf2_escRESERVED_31:
- case cf2_escRESERVED_32:
- case cf2_escRESERVED_33:
- default:
- FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
-
- }; /* end of switch statement checking `op2' */
-
- } /* case cf2_cmdESC */
- break;
-
- case cf2_cmdENDCHAR:
- FT_TRACE4(( " endchar\n" ));
-
- if ( cf2_stack_count( opStack ) == 1 ||
- cf2_stack_count( opStack ) == 5 )
- {
- if ( !haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX;
- }
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- /* close path if still open */
- cf2_glyphpath_closeOpenPath( &glyphPath );
-
- if ( cf2_stack_count( opStack ) > 1 )
- {
- /* must be either 4 or 5 -- */
- /* this is a (deprecated) implied `seac' operator */
-
- CF2_Int achar;
- CF2_Int bchar;
- CF2_BufferRec component;
- CF2_Fixed dummyWidth; /* ignore component width */
- FT_Error error2;
-
-
- if ( doingSeac )
- {
- lastError = FT_THROW( Invalid_Glyph_Format );
- goto exit; /* nested seac */
- }
-
- achar = cf2_stack_popInt( opStack );
- bchar = cf2_stack_popInt( opStack );
-
- curY = cf2_stack_popFixed( opStack );
- curX = cf2_stack_popFixed( opStack );
-
- error2 = cf2_getSeacComponent( decoder, achar, &component );
- if ( error2 )
- {
- lastError = error2; /* pass FreeType error through */
- goto exit;
- }
- cf2_interpT2CharString( font,
- &component,
- callbacks,
- translation,
- TRUE,
- curX,
- curY,
- &dummyWidth );
- cf2_freeSeacComponent( decoder, &component );
-
- error2 = cf2_getSeacComponent( decoder, bchar, &component );
- if ( error2 )
- {
- lastError = error2; /* pass FreeType error through */
- goto exit;
- }
- cf2_interpT2CharString( font,
- &component,
- callbacks,
- translation,
- TRUE,
- 0,
- 0,
- &dummyWidth );
- cf2_freeSeacComponent( decoder, &component );
- }
- goto exit;
-
- case cf2_cmdCNTRMASK:
- case cf2_cmdHINTMASK:
- /* the final \n in the tracing message gets added in */
- /* `cf2_hintmask_read' (which also traces the mask bytes) */
- FT_TRACE4(( op1 == cf2_cmdCNTRMASK ? " cntrmask" : " hintmask" ));
-
- /* never add hints after the mask is computed */
- if ( cf2_stack_count( opStack ) > 1 &&
- cf2_hintmask_isValid( &hintMask ) )
- {
- FT_TRACE4(( "cf2_interpT2CharString: invalid hint mask\n" ));
- break;
- }
-
- /* if there are arguments on the stack, there this is an */
- /* implied cf2_cmdVSTEMHM */
- cf2_doStems( font,
- opStack,
- &vStemHintArray,
- width,
- &haveWidth,
- 0 );
-
- if ( font->decoder->width_only )
- goto exit;
-
- if ( op1 == cf2_cmdHINTMASK )
- {
- /* consume the hint mask bytes which follow the operator */
- cf2_hintmask_read( &hintMask,
- charstring,
- cf2_arrstack_size( &hStemHintArray ) +
- cf2_arrstack_size( &vStemHintArray ) );
- }
- else
- {
- /*
- * Consume the counter mask bytes which follow the operator:
- * Build a temporary hint map, just to place and lock those
- * stems participating in the counter mask. These are most
- * likely the dominant hstems, and are grouped together in a
- * few counter groups, not necessarily in correspondence
- * with the hint groups. This reduces the chances of
- * conflicts between hstems that are initially placed in
- * separate hint groups and then brought together. The
- * positions are copied back to `hStemHintArray', so we can
- * discard `counterMask' and `counterHintMap'.
- *
- */
- CF2_HintMapRec counterHintMap;
- CF2_HintMaskRec counterMask;
-
-
- cf2_hintmap_init( &counterHintMap,
- font,
- &glyphPath.initialHintMap,
- &glyphPath.hintMoves,
- scaleY );
- cf2_hintmask_init( &counterMask, error );
-
- cf2_hintmask_read( &counterMask,
- charstring,
- cf2_arrstack_size( &hStemHintArray ) +
- cf2_arrstack_size( &vStemHintArray ) );
- cf2_hintmap_build( &counterHintMap,
- &hStemHintArray,
- &vStemHintArray,
- &counterMask,
- 0,
- FALSE );
- }
- break;
-
- case cf2_cmdRMOVETO:
- FT_TRACE4(( " rmoveto\n" ));
-
- if ( cf2_stack_count( opStack ) > 2 && !haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX;
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- curY += cf2_stack_popFixed( opStack );
- curX += cf2_stack_popFixed( opStack );
-
- cf2_glyphpath_moveTo( &glyphPath, curX, curY );
-
- break;
-
- case cf2_cmdHMOVETO:
- FT_TRACE4(( " hmoveto\n" ));
-
- if ( cf2_stack_count( opStack ) > 1 && !haveWidth )
- *width = cf2_stack_getReal( opStack, 0 ) + nominalWidthX;
-
- /* width is defined or default after this */
- haveWidth = TRUE;
-
- if ( font->decoder->width_only )
- goto exit;
-
- curX += cf2_stack_popFixed( opStack );
-
- cf2_glyphpath_moveTo( &glyphPath, curX, curY );
-
- break;
-
- case cf2_cmdRLINECURVE:
- {
- CF2_UInt count = cf2_stack_count( opStack );
- CF2_UInt index = 0;
-
-
- FT_TRACE4(( " rlinecurve\n" ));
-
- while ( index + 6 < count )
- {
- curX += cf2_stack_getReal( opStack, index + 0 );
- curY += cf2_stack_getReal( opStack, index + 1 );
-
- cf2_glyphpath_lineTo( &glyphPath, curX, curY );
- index += 2;
- }
-
- while ( index < count )
- {
- CF2_Fixed x1 = cf2_stack_getReal( opStack, index + 0 ) + curX;
- CF2_Fixed y1 = cf2_stack_getReal( opStack, index + 1 ) + curY;
- CF2_Fixed x2 = cf2_stack_getReal( opStack, index + 2 ) + x1;
- CF2_Fixed y2 = cf2_stack_getReal( opStack, index + 3 ) + y1;
- CF2_Fixed x3 = cf2_stack_getReal( opStack, index + 4 ) + x2;
- CF2_Fixed y3 = cf2_stack_getReal( opStack, index + 5 ) + y2;
-
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- index += 6;
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdVVCURVETO:
- {
- CF2_UInt count, count1 = cf2_stack_count( opStack );
- CF2_UInt index = 0;
-
-
- /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
- /* we enforce it by clearing the second bit */
- /* (and sorting the stack indexing to suit) */
- count = count1 & ~2;
- index += count1 - count;
-
- FT_TRACE4(( " vvcurveto\n" ));
-
- while ( index < count )
- {
- CF2_Fixed x1, y1, x2, y2, x3, y3;
-
-
- if ( ( count - index ) & 1 )
- {
- x1 = cf2_stack_getReal( opStack, index ) + curX;
-
- ++index;
- }
- else
- x1 = curX;
-
- y1 = cf2_stack_getReal( opStack, index + 0 ) + curY;
- x2 = cf2_stack_getReal( opStack, index + 1 ) + x1;
- y2 = cf2_stack_getReal( opStack, index + 2 ) + y1;
- x3 = x2;
- y3 = cf2_stack_getReal( opStack, index + 3 ) + y2;
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- index += 4;
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdHHCURVETO:
- {
- CF2_UInt count, count1 = cf2_stack_count( opStack );
- CF2_UInt index = 0;
-
-
- /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
- /* we enforce it by clearing the second bit */
- /* (and sorting the stack indexing to suit) */
- count = count1 & ~2;
- index += count1 - count;
-
- FT_TRACE4(( " hhcurveto\n" ));
-
- while ( index < count )
- {
- CF2_Fixed x1, y1, x2, y2, x3, y3;
-
-
- if ( ( count - index ) & 1 )
- {
- y1 = cf2_stack_getReal( opStack, index ) + curY;
-
- ++index;
- }
- else
- y1 = curY;
-
- x1 = cf2_stack_getReal( opStack, index + 0 ) + curX;
- x2 = cf2_stack_getReal( opStack, index + 1 ) + x1;
- y2 = cf2_stack_getReal( opStack, index + 2 ) + y1;
- x3 = cf2_stack_getReal( opStack, index + 3 ) + x2;
- y3 = y2;
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- index += 4;
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdVHCURVETO:
- case cf2_cmdHVCURVETO:
- {
- CF2_UInt count, count1 = cf2_stack_count( opStack );
- CF2_UInt index = 0;
-
- FT_Bool alternate = op1 == cf2_cmdHVCURVETO;
-
-
- /* if `cf2_stack_count' isn't of the form 8n, 8n+1, */
- /* 8n+4, or 8n+5, we enforce it by clearing the */
- /* second bit */
- /* (and sorting the stack indexing to suit) */
- count = count1 & ~2;
- index += count1 - count;
-
- FT_TRACE4(( alternate ? " hvcurveto\n" : " vhcurveto\n" ));
-
- while ( index < count )
- {
- CF2_Fixed x1, x2, x3, y1, y2, y3;
-
-
- if ( alternate )
- {
- x1 = cf2_stack_getReal( opStack, index + 0 ) + curX;
- y1 = curY;
- x2 = cf2_stack_getReal( opStack, index + 1 ) + x1;
- y2 = cf2_stack_getReal( opStack, index + 2 ) + y1;
- y3 = cf2_stack_getReal( opStack, index + 3 ) + y2;
-
- if ( count - index == 5 )
- {
- x3 = cf2_stack_getReal( opStack, index + 4 ) + x2;
-
- ++index;
- }
- else
- x3 = x2;
-
- alternate = FALSE;
- }
- else
- {
- x1 = curX;
- y1 = cf2_stack_getReal( opStack, index + 0 ) + curY;
- x2 = cf2_stack_getReal( opStack, index + 1 ) + x1;
- y2 = cf2_stack_getReal( opStack, index + 2 ) + y1;
- x3 = cf2_stack_getReal( opStack, index + 3 ) + x2;
-
- if ( count - index == 5 )
- {
- y3 = cf2_stack_getReal( opStack, index + 4 ) + y2;
-
- ++index;
- }
- else
- y3 = y2;
-
- alternate = TRUE;
- }
-
- cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
-
- curX = x3;
- curY = y3;
- index += 4;
- }
-
- cf2_stack_clear( opStack );
- }
- continue; /* no need to clear stack again */
-
- case cf2_cmdEXTENDEDNMBR:
- {
- CF2_Int v;
-
-
- v = (FT_Short)( ( cf2_buf_readByte( charstring ) << 8 ) |
- cf2_buf_readByte( charstring ) );
-
- FT_TRACE4(( " %d", v ));
-
- cf2_stack_pushInt( opStack, v );
- }
- continue;
-
- default:
- /* numbers */
- {
- if ( /* op1 >= 32 && */ op1 <= 246 )
- {
- CF2_Int v;
-
-
- v = op1 - 139;
-
- FT_TRACE4(( " %d", v ));
-
- /* -107 .. 107 */
- cf2_stack_pushInt( opStack, v );
- }
-
- else if ( /* op1 >= 247 && */ op1 <= 250 )
- {
- CF2_Int v;
-
-
- v = op1;
- v -= 247;
- v *= 256;
- v += cf2_buf_readByte( charstring );
- v += 108;
-
- FT_TRACE4(( " %d", v ));
-
- /* 108 .. 1131 */
- cf2_stack_pushInt( opStack, v );
- }
-
- else if ( /* op1 >= 251 && */ op1 <= 254 )
- {
- CF2_Int v;
-
-
- v = op1;
- v -= 251;
- v *= 256;
- v += cf2_buf_readByte( charstring );
- v = -v - 108;
-
- FT_TRACE4(( " %d", v ));
-
- /* -1131 .. -108 */
- cf2_stack_pushInt( opStack, v );
- }
-
- else /* op1 == 255 */
- {
- CF2_Fixed v;
-
-
- v = (CF2_Fixed)
- ( ( (FT_UInt32)cf2_buf_readByte( charstring ) << 24 ) |
- ( (FT_UInt32)cf2_buf_readByte( charstring ) << 16 ) |
- ( (FT_UInt32)cf2_buf_readByte( charstring ) << 8 ) |
- (FT_UInt32)cf2_buf_readByte( charstring ) );
-
- FT_TRACE4(( " %.2f", v / 65536.0 ));
-
- cf2_stack_pushFixed( opStack, v );
- }
- }
- continue; /* don't clear stack */
-
- } /* end of switch statement checking `op1' */
-
- cf2_stack_clear( opStack );
-
- } /* end of main interpreter loop */
-
- /* we get here if the charstring ends without cf2_cmdENDCHAR */
- FT_TRACE4(( "cf2_interpT2CharString:"
- " charstring ends without ENDCHAR\n" ));
-
- exit:
- /* check whether last error seen is also the first one */
- cf2_setError( error, lastError );
-
- /* free resources from objects we've used */
- cf2_glyphpath_finalize( &glyphPath );
- cf2_arrstack_finalize( &vStemHintArray );
- cf2_arrstack_finalize( &hStemHintArray );
- cf2_arrstack_finalize( &subrStack );
- cf2_stack_free( opStack );
-
- FT_TRACE4(( "\n" ));
-
- return;
- }
-
-
-/* END */
diff --git a/src/cff/cf2stack.c b/src/cff/cf2stack.c
deleted file mode 100644
index 8332b5d..0000000
--- a/src/cff/cf2stack.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/***************************************************************************/
-/* */
-/* cf2stack.c */
-/* */
-/* Adobe's code for emulating a CFF stack (body). */
-/* */
-/* Copyright 2007-2013 Adobe Systems Incorporated. */
-/* */
-/* This software, and all works of authorship, whether in source or */
-/* object code form as indicated by the copyright notice(s) included */
-/* herein (collectively, the "Work") is made available, and may only be */
-/* used, modified, and distributed under the FreeType Project License, */
-/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
-/* FreeType Project License, each contributor to the Work hereby grants */
-/* to any individual or legal entity exercising permissions granted by */
-/* the FreeType Project License and this section (hereafter, "You" or */
-/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
-/* royalty-free, irrevocable (except as stated in this section) patent */
-/* license to make, have made, use, offer to sell, sell, import, and */
-/* otherwise transfer the Work, where such license applies only to those */
-/* patent claims licensable by such contributor that are necessarily */
-/* infringed by their contribution(s) alone or by combination of their */
-/* contribution(s) with the Work to which such contribution(s) was */
-/* submitted. If You institute patent litigation against any entity */
-/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
-/* the Work or a contribution incorporated within the Work constitutes */
-/* direct or contributory patent infringement, then any patent licenses */
-/* granted to You under this License for that Work shall terminate as of */
-/* the date such litigation is filed. */
-/* */
-/* By using, modifying, or distributing the Work you indicate that you */
-/* have read and understood the terms and conditions of the */
-/* FreeType Project License as well as those provided in this section, */
-/* and you accept them fully. */
-/* */
-/***************************************************************************/
-
-
-#include "cf2ft.h"
-#include FT_INTERNAL_DEBUG_H
-
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2stack.h"
-
-#include "cf2error.h"
-
-
- /* Allocate and initialize an instance of CF2_Stack. */
- /* Note: This function returns NULL on error (does not set */
- /* `error'). */
- FT_LOCAL_DEF( CF2_Stack )
- cf2_stack_init( FT_Memory memory,
- FT_Error* e )
- {
- FT_Error error = FT_Err_Ok; /* for FT_QNEW */
-
- CF2_Stack stack = NULL;
-
-
- if ( !FT_QNEW( stack ) )
- {
- /* initialize the structure; FT_QNEW zeroes it */
- stack->memory = memory;
- stack->error = e;
- stack->top = &stack->buffer[0]; /* empty stack */
- }
-
- return stack;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_free( CF2_Stack stack )
- {
- if ( stack )
- {
- FT_Memory memory = stack->memory;
-
-
- /* free the main structure */
- FT_FREE( stack );
- }
- }
-
-
- FT_LOCAL_DEF( CF2_UInt )
- cf2_stack_count( CF2_Stack stack )
- {
- return (CF2_UInt)( stack->top - &stack->buffer[0] );
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_pushInt( CF2_Stack stack,
- CF2_Int val )
- {
- if ( stack->top == &stack->buffer[CF2_OPERAND_STACK_SIZE] )
- {
- CF2_SET_ERROR( stack->error, Stack_Overflow );
- return; /* stack overflow */
- }
-
- stack->top->u.i = val;
- stack->top->type = CF2_NumberInt;
- ++stack->top;
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_pushFixed( CF2_Stack stack,
- CF2_Fixed val )
- {
- if ( stack->top == &stack->buffer[CF2_OPERAND_STACK_SIZE] )
- {
- CF2_SET_ERROR( stack->error, Stack_Overflow );
- return; /* stack overflow */
- }
-
- stack->top->u.r = val;
- stack->top->type = CF2_NumberFixed;
- ++stack->top;
- }
-
-
- /* this function is only allowed to pop an integer type */
- FT_LOCAL_DEF( CF2_Int )
- cf2_stack_popInt( CF2_Stack stack )
- {
- if ( stack->top == &stack->buffer[0] )
- {
- CF2_SET_ERROR( stack->error, Stack_Underflow );
- return 0; /* underflow */
- }
- if ( stack->top[-1].type != CF2_NumberInt )
- {
- CF2_SET_ERROR( stack->error, Syntax_Error );
- return 0; /* type mismatch */
- }
-
- --stack->top;
-
- return stack->top->u.i;
- }
-
-
- /* Note: type mismatch is silently cast */
- /* TODO: check this */
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_stack_popFixed( CF2_Stack stack )
- {
- if ( stack->top == &stack->buffer[0] )
- {
- CF2_SET_ERROR( stack->error, Stack_Underflow );
- return cf2_intToFixed( 0 ); /* underflow */
- }
-
- --stack->top;
-
- switch ( stack->top->type )
- {
- case CF2_NumberInt:
- return cf2_intToFixed( stack->top->u.i );
- case CF2_NumberFrac:
- return cf2_fracToFixed( stack->top->u.f );
- default:
- return stack->top->u.r;
- }
- }
-
-
- /* Note: type mismatch is silently cast */
- /* TODO: check this */
- FT_LOCAL_DEF( CF2_Fixed )
- cf2_stack_getReal( CF2_Stack stack,
- CF2_UInt idx )
- {
- FT_ASSERT( cf2_stack_count( stack ) <= CF2_OPERAND_STACK_SIZE );
-
- if ( idx >= cf2_stack_count( stack ) )
- {
- CF2_SET_ERROR( stack->error, Stack_Overflow );
- return cf2_intToFixed( 0 ); /* bounds error */
- }
-
- switch ( stack->buffer[idx].type )
- {
- case CF2_NumberInt:
- return cf2_intToFixed( stack->buffer[idx].u.i );
- case CF2_NumberFrac:
- return cf2_fracToFixed( stack->buffer[idx].u.f );
- default:
- return stack->buffer[idx].u.r;
- }
- }
-
-
- FT_LOCAL_DEF( void )
- cf2_stack_clear( CF2_Stack stack )
- {
- stack->top = &stack->buffer[0];
- }
-
-
-/* END */
diff --git a/src/cff/cff.c b/src/cff/cff.c
index bb2cfb5..1a755d5 100644
--- a/src/cff/cff.c
+++ b/src/cff/cff.c
@@ -4,7 +4,7 @@
/* */
/* FreeType OpenType driver component (body only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,25 +17,14 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
-#include "cffpic.c"
+#include "cffcmap.c"
#include "cffdrivr.c"
+#include "cffgload.c"
#include "cffparse.c"
+#include "cffpic.c"
#include "cffload.c"
#include "cffobjs.c"
-#include "cffgload.c"
-#include "cffcmap.c"
-
-#include "cf2arrst.c"
-#include "cf2blues.c"
-#include "cf2error.c"
-#include "cf2font.c"
-#include "cf2ft.c"
-#include "cf2hints.c"
-#include "cf2intrp.c"
-#include "cf2read.c"
-#include "cf2stack.c"
/* END */
diff --git a/src/cff/cffcmap.c b/src/cff/cffcmap.c
index e7538e9..e45ae11 100644
--- a/src/cff/cffcmap.c
+++ b/src/cff/cffcmap.c
@@ -4,7 +4,7 @@
/* */
/* CFF character mapping table (cmap) support (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -104,15 +104,21 @@
}
- FT_DEFINE_CMAP_CLASS(cff_cmap_encoding_class_rec,
+ FT_DEFINE_CMAP_CLASS(
+ cff_cmap_encoding_class_rec,
+
sizeof ( CFF_CMapStdRec ),
- (FT_CMap_InitFunc) cff_cmap_encoding_init,
- (FT_CMap_DoneFunc) cff_cmap_encoding_done,
- (FT_CMap_CharIndexFunc)cff_cmap_encoding_char_index,
- (FT_CMap_CharNextFunc) cff_cmap_encoding_char_next,
+ (FT_CMap_InitFunc) cff_cmap_encoding_init, /* init */
+ (FT_CMap_DoneFunc) cff_cmap_encoding_done, /* done */
+ (FT_CMap_CharIndexFunc)cff_cmap_encoding_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) cff_cmap_encoding_char_next, /* char_next */
- NULL, NULL, NULL, NULL, NULL
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
)
@@ -202,15 +208,22 @@
}
- FT_DEFINE_CMAP_CLASS(cff_cmap_unicode_class_rec,
+ FT_DEFINE_CMAP_CLASS(
+ cff_cmap_unicode_class_rec,
+
sizeof ( PS_UnicodesRec ),
- (FT_CMap_InitFunc) cff_cmap_unicode_init,
- (FT_CMap_DoneFunc) cff_cmap_unicode_done,
- (FT_CMap_CharIndexFunc)cff_cmap_unicode_char_index,
- (FT_CMap_CharNextFunc) cff_cmap_unicode_char_next,
+ (FT_CMap_InitFunc) cff_cmap_unicode_init, /* init */
+ (FT_CMap_DoneFunc) cff_cmap_unicode_done, /* done */
+ (FT_CMap_CharIndexFunc)cff_cmap_unicode_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) cff_cmap_unicode_char_next, /* char_next */
- NULL, NULL, NULL, NULL, NULL
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
)
+
/* END */
diff --git a/src/cff/cffcmap.h b/src/cff/cffcmap.h
index 6eaed63..856a43d 100644
--- a/src/cff/cffcmap.h
+++ b/src/cff/cffcmap.h
@@ -4,7 +4,7 @@
/* */
/* CFF character mapping table (cmap) support (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,10 +16,10 @@
/***************************************************************************/
-#ifndef __CFFCMAP_H__
-#define __CFFCMAP_H__
+#ifndef CFFCMAP_H_
+#define CFFCMAP_H_
-#include "cffobjs.h"
+#include FT_INTERNAL_CFF_OBJECTS_TYPES_H
FT_BEGIN_HEADER
@@ -61,7 +61,7 @@
FT_END_HEADER
-#endif /* __CFFCMAP_H__ */
+#endif /* CFFCMAP_H_ */
/* END */
diff --git a/src/cff/cffdrivr.c b/src/cff/cffdrivr.c
index a718b7a..df89684 100644
--- a/src/cff/cffdrivr.c
+++ b/src/cff/cffdrivr.c
@@ -4,7 +4,7 @@
/* */
/* OpenType font driver implementation (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -21,16 +21,25 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_SFNT_H
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include FT_INTERNAL_POSTSCRIPT_PROPS_H
#include FT_SERVICE_CID_H
#include FT_SERVICE_POSTSCRIPT_INFO_H
#include FT_SERVICE_POSTSCRIPT_NAME_H
#include FT_SERVICE_TT_CMAP_H
+#include FT_SERVICE_CFF_TABLE_LOAD_H
#include "cffdrivr.h"
#include "cffgload.h"
#include "cffload.h"
#include "cffcmap.h"
#include "cffparse.h"
+#include "cffobjs.h"
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#include FT_SERVICE_MULTIPLE_MASTERS_H
+#include FT_SERVICE_METRICS_VARIATIONS_H
+#endif
#include "cfferrs.h"
#include "cffpic.h"
@@ -38,7 +47,7 @@
#include FT_SERVICE_FONT_FORMAT_H
#include FT_SERVICE_GLYPH_DICT_H
#include FT_SERVICE_PROPERTIES_H
-#include FT_CFF_DRIVER_H
+#include FT_DRIVER_H
/*************************************************************************/
@@ -207,6 +216,13 @@
if ( flags & FT_LOAD_VERTICAL_LAYOUT )
{
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /* no fast retrieval for blended MM fonts without VVAR table */
+ if ( ( FT_IS_NAMED_INSTANCE( face ) || FT_IS_VARIATION( face ) ) &&
+ !( ttface->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
+ return FT_THROW( Unimplemented_Feature );
+#endif
+
/* check whether we have data from the `vmtx' table at all; */
/* otherwise we extract the info from the CFF glyphstrings */
/* (instead of synthesizing a global value using the `OS/2' */
@@ -225,13 +241,22 @@
&dummy,
&ah );
- FT_TRACE5(( " idx %d: advance height %d font units\n",
- start + nn, ah ));
+ FT_TRACE5(( " idx %d: advance height %d font unit%s\n",
+ start + nn,
+ ah,
+ ah == 1 ? "" : "s" ));
advances[nn] = ah;
}
}
else
{
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /* no fast retrieval for blended MM fonts without HVAR table */
+ if ( ( FT_IS_NAMED_INSTANCE( face ) || FT_IS_VARIATION( face ) ) &&
+ !( ttface->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
+ return FT_THROW( Unimplemented_Feature );
+#endif
+
/* check whether we have data from the `hmtx' table at all */
if ( !ttface->horizontal.number_Of_HMetrics )
goto Missing_Table;
@@ -247,8 +272,10 @@
&dummy,
&aw );
- FT_TRACE5(( " idx %d: advance width %d font units\n",
- start + nn, aw ));
+ FT_TRACE5(( " idx %d: advance width %d font unit%s\n",
+ start + nn,
+ aw,
+ aw == 1 ? "" : "s" ));
advances[nn] = aw;
}
}
@@ -291,6 +318,35 @@
FT_Error error;
+ /* CFF2 table does not have glyph names; */
+ /* we need to use `post' table method */
+ if ( font->version_major == 2 )
+ {
+ FT_Library library = FT_FACE_LIBRARY( face );
+ FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
+ FT_Service_GlyphDict service =
+ (FT_Service_GlyphDict)ft_module_get_service(
+ sfnt_module,
+ FT_SERVICE_ID_GLYPH_DICT,
+ 0 );
+
+
+ if ( service && service->get_name )
+ return service->get_name( FT_FACE( face ),
+ glyph_index,
+ buffer,
+ buffer_max );
+ else
+ {
+ FT_ERROR(( "cff_get_glyph_name:"
+ " cannot get glyph name from a CFF2 font\n"
+ " "
+ " without the `PSNames' module\n" ));
+ error = FT_THROW( Missing_Module );
+ goto Exit;
+ }
+ }
+
if ( !font->psnames )
{
FT_ERROR(( "cff_get_glyph_name:"
@@ -332,6 +388,31 @@
cff = (CFF_FontRec *)face->extra.data;
charset = &cff->charset;
+ /* CFF2 table does not have glyph names; */
+ /* we need to use `post' table method */
+ if ( cff->version_major == 2 )
+ {
+ FT_Library library = FT_FACE_LIBRARY( face );
+ FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
+ FT_Service_GlyphDict service =
+ (FT_Service_GlyphDict)ft_module_get_service(
+ sfnt_module,
+ FT_SERVICE_ID_GLYPH_DICT,
+ 0 );
+
+
+ if ( service && service->name_index )
+ return service->name_index( FT_FACE( face ), glyph_name );
+ else
+ {
+ FT_ERROR(( "cff_get_name_index:"
+ " cannot get glyph index from a CFF2 font\n"
+ " "
+ " without the `PSNames' module\n" ));
+ return 0;
+ }
+ }
+
FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
if ( !psnames )
return 0;
@@ -358,8 +439,9 @@
FT_DEFINE_SERVICE_GLYPHDICTREC(
cff_service_glyph_dict,
- (FT_GlyphDict_GetNameFunc) cff_get_glyph_name,
- (FT_GlyphDict_NameIndexFunc)cff_get_name_index
+
+ (FT_GlyphDict_GetNameFunc) cff_get_glyph_name, /* get_name */
+ (FT_GlyphDict_NameIndexFunc)cff_get_name_index /* name_index */
)
@@ -383,11 +465,11 @@
FT_Error error = FT_Err_Ok;
- if ( cff && cff->font_info == NULL )
+ if ( cff && !cff->font_info )
{
- CFF_FontRecDict dict = &cff->top_font.font_dict;
+ CFF_FontRecDict dict = &cff->top_font.font_dict;
PS_FontInfoRec *font_info = NULL;
- FT_Memory memory = face->root.memory;
+ FT_Memory memory = face->root.memory;
if ( FT_ALLOC( font_info, sizeof ( *font_info ) ) )
@@ -419,13 +501,94 @@
}
+ static FT_Error
+ cff_ps_get_font_extra( CFF_Face face,
+ PS_FontExtraRec* afont_extra )
+ {
+ CFF_Font cff = (CFF_Font)face->extra.data;
+ FT_Error error = FT_Err_Ok;
+
+
+ if ( cff && cff->font_extra == NULL )
+ {
+ CFF_FontRecDict dict = &cff->top_font.font_dict;
+ PS_FontExtraRec* font_extra = NULL;
+ FT_Memory memory = face->root.memory;
+ FT_String* embedded_postscript;
+
+
+ if ( FT_ALLOC( font_extra, sizeof ( *font_extra ) ) )
+ goto Fail;
+
+ font_extra->fs_type = 0U;
+
+ embedded_postscript = cff_index_get_sid_string(
+ cff,
+ dict->embedded_postscript );
+ if ( embedded_postscript )
+ {
+ FT_String* start_fstype;
+ FT_String* start_def;
+
+
+ /* Identify the XYZ integer in `/FSType XYZ def' substring. */
+ if ( ( start_fstype = ft_strstr( embedded_postscript,
+ "/FSType" ) ) != NULL &&
+ ( start_def = ft_strstr( start_fstype +
+ sizeof ( "/FSType" ) - 1,
+ "def" ) ) != NULL )
+ {
+ FT_String* s;
+
+
+ for ( s = start_fstype + sizeof ( "/FSType" ) - 1;
+ s != start_def;
+ s++ )
+ {
+ if ( *s >= '0' && *s <= '9' )
+ {
+ if ( font_extra->fs_type >= ( FT_USHORT_MAX - 9 ) / 10 )
+ {
+ /* Overflow - ignore the FSType value. */
+ font_extra->fs_type = 0U;
+ break;
+ }
+
+ font_extra->fs_type *= 10;
+ font_extra->fs_type += (FT_UShort)( *s - '0' );
+ }
+ else if ( *s != ' ' && *s != '\n' && *s != '\r' )
+ {
+ /* Non-whitespace character between `/FSType' and next `def' */
+ /* - ignore the FSType value. */
+ font_extra->fs_type = 0U;
+ break;
+ }
+ }
+ }
+ }
+
+ cff->font_extra = font_extra;
+ }
+
+ if ( cff )
+ *afont_extra = *cff->font_extra;
+
+ Fail:
+ return error;
+ }
+
+
FT_DEFINE_SERVICE_PSINFOREC(
cff_service_ps_info,
- (PS_GetFontInfoFunc) cff_ps_get_font_info,
- (PS_GetFontExtraFunc) NULL,
- (PS_HasGlyphNamesFunc) cff_ps_has_glyph_names,
- (PS_GetFontPrivateFunc)NULL, /* unsupported with CFF fonts */
- (PS_GetFontValueFunc) NULL /* not implemented */
+
+ (PS_GetFontInfoFunc) cff_ps_get_font_info, /* ps_get_font_info */
+ (PS_GetFontExtraFunc) cff_ps_get_font_extra, /* ps_get_font_extra */
+ (PS_HasGlyphNamesFunc) cff_ps_has_glyph_names, /* ps_has_glyph_names */
+ /* unsupported with CFF fonts */
+ (PS_GetFontPrivateFunc)NULL, /* ps_get_font_private */
+ /* not implemented */
+ (PS_GetFontValueFunc) NULL /* ps_get_font_value */
)
@@ -444,14 +607,15 @@
/* following the OpenType specification 1.7, we return the name stored */
/* in the `name' table for a CFF wrapped into an SFNT container */
- if ( sfnt )
+ if ( FT_IS_SFNT( FT_FACE( face ) ) && sfnt )
{
FT_Library library = FT_FACE_LIBRARY( face );
FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
FT_Service_PsFontName service =
(FT_Service_PsFontName)ft_module_get_service(
sfnt_module,
- FT_SERVICE_ID_POSTSCRIPT_FONT_NAME );
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME,
+ 0 );
if ( service && service->get_ps_font_name )
@@ -464,7 +628,8 @@
FT_DEFINE_SERVICE_PSFONTNAMEREC(
cff_service_ps_name,
- (FT_PsName_GetFunc)cff_get_ps_name
+
+ (FT_PsName_GetFunc)cff_get_ps_name /* get_ps_font_name */
)
@@ -489,21 +654,21 @@
FT_Library library = FT_FACE_LIBRARY( face );
- cmap_info->language = 0;
- cmap_info->format = 0;
-
if ( cmap->clazz != &CFF_CMAP_ENCODING_CLASS_REC_GET &&
cmap->clazz != &CFF_CMAP_UNICODE_CLASS_REC_GET )
{
FT_Module sfnt = FT_Get_Module( library, "sfnt" );
FT_Service_TTCMaps service =
(FT_Service_TTCMaps)ft_module_get_service( sfnt,
- FT_SERVICE_ID_TT_CMAP );
+ FT_SERVICE_ID_TT_CMAP,
+ 0 );
if ( service && service->get_cmap_info )
error = service->get_cmap_info( charmap, cmap_info );
}
+ else
+ error = FT_THROW( Invalid_CharMap_Format );
return error;
}
@@ -511,7 +676,8 @@
FT_DEFINE_SERVICE_TTCMAPSREC(
cff_service_get_cmap_info,
- (TT_CMap_Info_GetFunc)cff_get_cmap_info
+
+ (TT_CMap_Info_GetFunc)cff_get_cmap_info /* get_cmap_info */
)
@@ -542,7 +708,7 @@
if ( registry )
{
- if ( cff->registry == NULL )
+ if ( !cff->registry )
cff->registry = cff_index_get_sid_string( cff,
dict->cid_registry );
*registry = cff->registry;
@@ -550,7 +716,7 @@
if ( ordering )
{
- if ( cff->ordering == NULL )
+ if ( !cff->ordering )
cff->ordering = cff_index_get_sid_string( cff,
dict->cid_ordering );
*ordering = cff->ordering;
@@ -641,9 +807,13 @@
FT_DEFINE_SERVICE_CIDREC(
cff_service_cid_info,
- (FT_CID_GetRegistryOrderingSupplementFunc)cff_get_ros,
- (FT_CID_GetIsInternallyCIDKeyedFunc) cff_get_is_cid,
- (FT_CID_GetCIDFromGlyphIndexFunc) cff_get_cid_from_glyph_index
+
+ (FT_CID_GetRegistryOrderingSupplementFunc)
+ cff_get_ros, /* get_ros */
+ (FT_CID_GetIsInternallyCIDKeyedFunc)
+ cff_get_is_cid, /* get_is_cid */
+ (FT_CID_GetCIDFromGlyphIndexFunc)
+ cff_get_cid_from_glyph_index /* get_cid_from_glyph_index */
)
@@ -651,133 +821,166 @@
* PROPERTY SERVICE
*
*/
- static FT_Error
- cff_property_set( FT_Module module, /* CFF_Driver */
- const char* property_name,
- const void* value )
- {
- FT_Error error = FT_Err_Ok;
- CFF_Driver driver = (CFF_Driver)module;
-
-
- if ( !ft_strcmp( property_name, "darkening-parameters" ) )
- {
- FT_Int* darken_params = (FT_Int*)value;
-
- FT_Int x1 = darken_params[0];
- FT_Int y1 = darken_params[1];
- FT_Int x2 = darken_params[2];
- FT_Int y2 = darken_params[3];
- FT_Int x3 = darken_params[4];
- FT_Int y3 = darken_params[5];
- FT_Int x4 = darken_params[6];
- FT_Int y4 = darken_params[7];
-
-
- if ( x1 < 0 || x2 < 0 || x3 < 0 || x4 < 0 ||
- y1 < 0 || y2 < 0 || y3 < 0 || y4 < 0 ||
- x1 > x2 || x2 > x3 || x3 > x4 ||
- y1 > 500 || y2 > 500 || y3 > 500 || y4 > 500 )
- return FT_THROW( Invalid_Argument );
-
- driver->darken_params[0] = x1;
- driver->darken_params[1] = y1;
- driver->darken_params[2] = x2;
- driver->darken_params[3] = y2;
- driver->darken_params[4] = x3;
- driver->darken_params[5] = y3;
- driver->darken_params[6] = x4;
- driver->darken_params[7] = y4;
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "hinting-engine" ) )
- {
- FT_UInt* hinting_engine = (FT_UInt*)value;
-
-
-#ifndef CFF_CONFIG_OPTION_OLD_ENGINE
- if ( *hinting_engine != FT_CFF_HINTING_ADOBE )
- error = FT_ERR( Unimplemented_Feature );
- else
-#endif
- driver->hinting_engine = *hinting_engine;
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
- {
- FT_Bool* no_stem_darkening = (FT_Bool*)value;
-
-
- driver->no_stem_darkening = *no_stem_darkening;
-
- return error;
- }
-
- FT_TRACE0(( "cff_property_set: missing property `%s'\n",
- property_name ));
- return FT_THROW( Missing_Property );
- }
-
-
- static FT_Error
- cff_property_get( FT_Module module, /* CFF_Driver */
- const char* property_name,
- const void* value )
- {
- FT_Error error = FT_Err_Ok;
- CFF_Driver driver = (CFF_Driver)module;
-
-
- if ( !ft_strcmp( property_name, "darkening-parameters" ) )
- {
- FT_Int* darken_params = driver->darken_params;
- FT_Int* val = (FT_Int*)value;
-
-
- val[0] = darken_params[0];
- val[1] = darken_params[1];
- val[2] = darken_params[2];
- val[3] = darken_params[3];
- val[4] = darken_params[4];
- val[5] = darken_params[5];
- val[6] = darken_params[6];
- val[7] = darken_params[7];
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "hinting-engine" ) )
- {
- FT_UInt hinting_engine = driver->hinting_engine;
- FT_UInt* val = (FT_UInt*)value;
-
-
- *val = hinting_engine;
-
- return error;
- }
- else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
- {
- FT_Bool no_stem_darkening = driver->no_stem_darkening;
- FT_Bool* val = (FT_Bool*)value;
-
-
- *val = no_stem_darkening;
-
- return error;
- }
-
- FT_TRACE0(( "cff_property_get: missing property `%s'\n",
- property_name ));
- return FT_THROW( Missing_Property );
- }
-
FT_DEFINE_SERVICE_PROPERTIESREC(
cff_service_properties,
- (FT_Properties_SetFunc)cff_property_set,
- (FT_Properties_GetFunc)cff_property_get )
+
+ (FT_Properties_SetFunc)ps_property_set, /* set_property */
+ (FT_Properties_GetFunc)ps_property_get ) /* get_property */
+
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
+ /*
+ * MULTIPLE MASTER SERVICE
+ *
+ */
+
+ static FT_Error
+ cff_set_mm_blend( CFF_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ return mm->set_mm_blend( FT_FACE( face ), num_coords, coords );
+ }
+
+
+ static FT_Error
+ cff_get_mm_blend( CFF_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ return mm->get_mm_blend( FT_FACE( face ), num_coords, coords );
+ }
+
+
+ static FT_Error
+ cff_get_mm_var( CFF_Face face,
+ FT_MM_Var* *master )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ return mm->get_mm_var( FT_FACE( face ), master );
+ }
+
+
+ static FT_Error
+ cff_set_var_design( CFF_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ return mm->set_var_design( FT_FACE( face ), num_coords, coords );
+ }
+
+
+ static FT_Error
+ cff_get_var_design( CFF_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ return mm->get_var_design( FT_FACE( face ), num_coords, coords );
+ }
+
+
+ static FT_Error
+ cff_set_instance( CFF_Face face,
+ FT_UInt instance_index )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ return mm->set_instance( FT_FACE( face ), instance_index );
+ }
+
+
+ FT_DEFINE_SERVICE_MULTIMASTERSREC(
+ cff_service_multi_masters,
+
+ (FT_Get_MM_Func) NULL, /* get_mm */
+ (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
+ (FT_Set_MM_Blend_Func) cff_set_mm_blend, /* set_mm_blend */
+ (FT_Get_MM_Blend_Func) cff_get_mm_blend, /* get_mm_blend */
+ (FT_Get_MM_Var_Func) cff_get_mm_var, /* get_mm_var */
+ (FT_Set_Var_Design_Func)cff_set_var_design, /* set_var_design */
+ (FT_Get_Var_Design_Func)cff_get_var_design, /* get_var_design */
+ (FT_Set_Instance_Func) cff_set_instance, /* set_instance */
+
+ (FT_Get_Var_Blend_Func) cff_get_var_blend, /* get_var_blend */
+ (FT_Done_Blend_Func) cff_done_blend /* done_blend */
+ )
+
+
+ /*
+ * METRICS VARIATIONS SERVICE
+ *
+ */
+
+ static FT_Error
+ cff_hadvance_adjust( CFF_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue )
+ {
+ FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
+
+
+ return var->hadvance_adjust( FT_FACE( face ), gindex, avalue );
+ }
+
+
+ static void
+ cff_metrics_adjust( CFF_Face face )
+ {
+ FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
+
+
+ var->metrics_adjust( FT_FACE( face ) );
+ }
+
+
+ FT_DEFINE_SERVICE_METRICSVARIATIONSREC(
+ cff_service_metrics_variations,
+
+ (FT_HAdvance_Adjust_Func)cff_hadvance_adjust, /* hadvance_adjust */
+ (FT_LSB_Adjust_Func) NULL, /* lsb_adjust */
+ (FT_RSB_Adjust_Func) NULL, /* rsb_adjust */
+
+ (FT_VAdvance_Adjust_Func)NULL, /* vadvance_adjust */
+ (FT_TSB_Adjust_Func) NULL, /* tsb_adjust */
+ (FT_BSB_Adjust_Func) NULL, /* bsb_adjust */
+ (FT_VOrg_Adjust_Func) NULL, /* vorg_adjust */
+
+ (FT_Metrics_Adjust_Func) cff_metrics_adjust /* metrics_adjust */
+ )
+#endif
+
+
+ /*
+ * CFFLOAD SERVICE
+ *
+ */
+
+ FT_DEFINE_SERVICE_CFFLOADREC(
+ cff_service_cff_load,
+
+ (FT_Get_Standard_Encoding_Func)cff_get_standard_encoding,
+ (FT_Load_Private_Dict_Func) cff_load_private_dict,
+ (FT_FD_Select_Get_Func) cff_fd_select_get,
+ (FT_Blend_Check_Vector_Func) cff_blend_check_vector,
+ (FT_Blend_Build_Vector_Func) cff_blend_build_vector
+ )
/*************************************************************************/
@@ -792,26 +995,60 @@
/*************************************************************************/
/*************************************************************************/
-#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
- FT_DEFINE_SERVICEDESCREC7(
+#if !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES && \
+ defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ FT_DEFINE_SERVICEDESCREC10(
cff_services,
+
+ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
+ FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
+ FT_SERVICE_ID_METRICS_VARIATIONS, &CFF_SERVICE_METRICS_VAR_GET,
+ FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
+ FT_SERVICE_ID_GLYPH_DICT, &CFF_SERVICE_GLYPH_DICT_GET,
+ FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
+ FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
+ FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
+ FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
+ )
+#elif !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES
+ FT_DEFINE_SERVICEDESCREC8(
+ cff_services,
+
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
FT_SERVICE_ID_GLYPH_DICT, &CFF_SERVICE_GLYPH_DICT_GET,
FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
- FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET
+ FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
+ FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
+ )
+#elif defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ FT_DEFINE_SERVICEDESCREC9(
+ cff_services,
+
+ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
+ FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
+ FT_SERVICE_ID_METRICS_VARIATIONS, &CFF_SERVICE_METRICS_VAR_GET,
+ FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
+ FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
+ FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
+ FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
+ FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
)
#else
- FT_DEFINE_SERVICEDESCREC6(
+ FT_DEFINE_SERVICEDESCREC7(
cff_services,
+
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
FT_SERVICE_ID_CID, &CFF_SERVICE_CID_INFO_GET,
- FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET
+ FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET,
+ FT_SERVICE_ID_CFF_LOAD, &CFF_SERVICE_CFF_LOAD_GET
)
#endif
@@ -835,7 +1072,7 @@
#endif
result = ft_service_list_lookup( CFF_SERVICES_GET, module_interface );
- if ( result != NULL )
+ if ( result )
return result;
/* `driver' is not yet evaluated in non-PIC mode */
@@ -865,42 +1102,41 @@
FT_DEFINE_DRIVER(
cff_driver_class,
- FT_MODULE_FONT_DRIVER |
- FT_MODULE_DRIVER_SCALABLE |
- FT_MODULE_DRIVER_HAS_HINTER,
+ FT_MODULE_FONT_DRIVER |
+ FT_MODULE_DRIVER_SCALABLE |
+ FT_MODULE_DRIVER_HAS_HINTER |
+ FT_MODULE_DRIVER_HINTS_LIGHTLY,
- sizeof ( CFF_DriverRec ),
+ sizeof ( PS_DriverRec ),
"cff",
0x10000L,
0x20000L,
- 0, /* module-specific interface */
+ NULL, /* module-specific interface */
- cff_driver_init,
- cff_driver_done,
- cff_get_interface,
+ cff_driver_init, /* FT_Module_Constructor module_init */
+ cff_driver_done, /* FT_Module_Destructor module_done */
+ cff_get_interface, /* FT_Module_Requester get_interface */
- /* now the specific driver fields */
sizeof ( TT_FaceRec ),
sizeof ( CFF_SizeRec ),
sizeof ( CFF_GlyphSlotRec ),
- cff_face_init,
- cff_face_done,
- cff_size_init,
- cff_size_done,
- cff_slot_init,
- cff_slot_done,
+ cff_face_init, /* FT_Face_InitFunc init_face */
+ cff_face_done, /* FT_Face_DoneFunc done_face */
+ cff_size_init, /* FT_Size_InitFunc init_size */
+ cff_size_done, /* FT_Size_DoneFunc done_size */
+ cff_slot_init, /* FT_Slot_InitFunc init_slot */
+ cff_slot_done, /* FT_Slot_DoneFunc done_slot */
- cff_glyph_load,
+ cff_glyph_load, /* FT_Slot_LoadFunc load_glyph */
- cff_get_kerning,
- 0, /* FT_Face_AttachFunc */
- cff_get_advances,
+ cff_get_kerning, /* FT_Face_GetKerningFunc get_kerning */
+ NULL, /* FT_Face_AttachFunc attach_file */
+ cff_get_advances, /* FT_Face_GetAdvancesFunc get_advances */
- cff_size_request,
-
- CFF_SIZE_SELECT
+ cff_size_request, /* FT_Size_RequestFunc request_size */
+ CFF_SIZE_SELECT /* FT_Size_SelectFunc select_size */
)
diff --git a/src/cff/cffdrivr.h b/src/cff/cffdrivr.h
index 9527f5e..ad7c3ad 100644
--- a/src/cff/cffdrivr.h
+++ b/src/cff/cffdrivr.h
@@ -4,7 +4,7 @@
/* */
/* High-level OpenType driver interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __CFFDRIVER_H__
-#define __CFFDRIVER_H__
+#ifndef CFFDRIVER_H_
+#define CFFDRIVER_H_
#include <ft2build.h>
@@ -32,7 +32,7 @@
FT_END_HEADER
-#endif /* __CFFDRIVER_H__ */
+#endif /* CFFDRIVER_H_ */
/* END */
diff --git a/src/cff/cfferrs.h b/src/cff/cfferrs.h
index 543bdb0..b2e1bfa 100644
--- a/src/cff/cfferrs.h
+++ b/src/cff/cfferrs.h
@@ -4,7 +4,7 @@
/* */
/* CFF error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,12 +22,12 @@
/* */
/*************************************************************************/
-#ifndef __CFFERRS_H__
-#define __CFFERRS_H__
+#ifndef CFFERRS_H_
+#define CFFERRS_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX CFF_Err_
@@ -36,7 +36,7 @@
#include FT_ERRORS_H
-#endif /* __CFFERRS_H__ */
+#endif /* CFFERRS_H_ */
/* END */
diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c
index 43054f8..c58471c 100644
--- a/src/cff/cffgload.c
+++ b/src/cff/cffgload.c
@@ -4,7 +4,7 @@
/* */
/* OpenType Glyph Loader (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,13 +20,13 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_SFNT_H
+#include FT_INTERNAL_CALC_H
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
#include FT_OUTLINE_H
-#include FT_CFF_DRIVER_H
+#include FT_DRIVER_H
-#include "cffobjs.h"
#include "cffload.h"
#include "cffgload.h"
-#include "cf2ft.h" /* for cf2_decoder_parse_charstrings */
#include "cfferrs.h"
@@ -41,618 +41,6 @@
#define FT_COMPONENT trace_cffgload
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
-
- typedef enum CFF_Operator_
- {
- cff_op_unknown = 0,
-
- cff_op_rmoveto,
- cff_op_hmoveto,
- cff_op_vmoveto,
-
- cff_op_rlineto,
- cff_op_hlineto,
- cff_op_vlineto,
-
- cff_op_rrcurveto,
- cff_op_hhcurveto,
- cff_op_hvcurveto,
- cff_op_rcurveline,
- cff_op_rlinecurve,
- cff_op_vhcurveto,
- cff_op_vvcurveto,
-
- cff_op_flex,
- cff_op_hflex,
- cff_op_hflex1,
- cff_op_flex1,
-
- cff_op_endchar,
-
- cff_op_hstem,
- cff_op_vstem,
- cff_op_hstemhm,
- cff_op_vstemhm,
-
- cff_op_hintmask,
- cff_op_cntrmask,
- cff_op_dotsection, /* deprecated, acts as no-op */
-
- cff_op_abs,
- cff_op_add,
- cff_op_sub,
- cff_op_div,
- cff_op_neg,
- cff_op_random,
- cff_op_mul,
- cff_op_sqrt,
-
- cff_op_blend,
-
- cff_op_drop,
- cff_op_exch,
- cff_op_index,
- cff_op_roll,
- cff_op_dup,
-
- cff_op_put,
- cff_op_get,
- cff_op_store,
- cff_op_load,
-
- cff_op_and,
- cff_op_or,
- cff_op_not,
- cff_op_eq,
- cff_op_ifelse,
-
- cff_op_callsubr,
- cff_op_callgsubr,
- cff_op_return,
-
- /* Type 1 opcodes: invalid but seen in real life */
- cff_op_hsbw,
- cff_op_closepath,
- cff_op_callothersubr,
- cff_op_pop,
- cff_op_seac,
- cff_op_sbw,
- cff_op_setcurrentpoint,
-
- /* do not remove */
- cff_op_max
-
- } CFF_Operator;
-
-
-#define CFF_COUNT_CHECK_WIDTH 0x80
-#define CFF_COUNT_EXACT 0x40
-#define CFF_COUNT_CLEAR_STACK 0x20
-
- /* count values which have the `CFF_COUNT_CHECK_WIDTH' flag set are */
- /* used for checking the width and requested numbers of arguments */
- /* only; they are set to zero afterwards */
-
- /* the other two flags are informative only and unused currently */
-
- static const FT_Byte cff_argument_counts[] =
- {
- 0, /* unknown */
-
- 2 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT, /* rmoveto */
- 1 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT,
- 1 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT,
-
- 0 | CFF_COUNT_CLEAR_STACK, /* rlineto */
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
-
- 0 | CFF_COUNT_CLEAR_STACK, /* rrcurveto */
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
- 0 | CFF_COUNT_CLEAR_STACK,
-
- 13, /* flex */
- 7,
- 9,
- 11,
-
- 0 | CFF_COUNT_CHECK_WIDTH, /* endchar */
-
- 2 | CFF_COUNT_CHECK_WIDTH, /* hstem */
- 2 | CFF_COUNT_CHECK_WIDTH,
- 2 | CFF_COUNT_CHECK_WIDTH,
- 2 | CFF_COUNT_CHECK_WIDTH,
-
- 0 | CFF_COUNT_CHECK_WIDTH, /* hintmask */
- 0 | CFF_COUNT_CHECK_WIDTH, /* cntrmask */
- 0, /* dotsection */
-
- 1, /* abs */
- 2,
- 2,
- 2,
- 1,
- 0,
- 2,
- 1,
-
- 1, /* blend */
-
- 1, /* drop */
- 2,
- 1,
- 2,
- 1,
-
- 2, /* put */
- 1,
- 4,
- 3,
-
- 2, /* and */
- 2,
- 1,
- 2,
- 4,
-
- 1, /* callsubr */
- 1,
- 0,
-
- 2, /* hsbw */
- 0,
- 0,
- 0,
- 5, /* seac */
- 4, /* sbw */
- 2 /* setcurrentpoint */
- };
-
-#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
-
-
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********** *********/
- /********** *********/
- /********** GENERIC CHARSTRING PARSING *********/
- /********** *********/
- /********** *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_builder_init */
- /* */
- /* <Description> */
- /* Initializes a given glyph builder. */
- /* */
- /* <InOut> */
- /* builder :: A pointer to the glyph builder to initialize. */
- /* */
- /* <Input> */
- /* face :: The current face object. */
- /* */
- /* size :: The current size object. */
- /* */
- /* glyph :: The current glyph object. */
- /* */
- /* hinting :: Whether hinting is active. */
- /* */
- static void
- cff_builder_init( CFF_Builder* builder,
- TT_Face face,
- CFF_Size size,
- CFF_GlyphSlot glyph,
- FT_Bool hinting )
- {
- builder->path_begun = 0;
- builder->load_points = 1;
-
- builder->face = face;
- builder->glyph = glyph;
- builder->memory = face->root.memory;
-
- if ( glyph )
- {
- FT_GlyphLoader loader = glyph->root.internal->loader;
-
-
- builder->loader = loader;
- builder->base = &loader->base.outline;
- builder->current = &loader->current.outline;
- FT_GlyphLoader_Rewind( loader );
-
- builder->hints_globals = NULL;
- builder->hints_funcs = NULL;
-
- if ( hinting && size )
- {
- CFF_Internal internal = (CFF_Internal)size->root.internal;
-
-
- builder->hints_globals = (void *)internal->topfont;
- builder->hints_funcs = glyph->root.internal->glyph_hints;
- }
- }
-
- builder->pos_x = 0;
- builder->pos_y = 0;
-
- builder->left_bearing.x = 0;
- builder->left_bearing.y = 0;
- builder->advance.x = 0;
- builder->advance.y = 0;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_builder_done */
- /* */
- /* <Description> */
- /* Finalizes a given glyph builder. Its contents can still be used */
- /* after the call, but the function saves important information */
- /* within the corresponding glyph slot. */
- /* */
- /* <Input> */
- /* builder :: A pointer to the glyph builder to finalize. */
- /* */
- static void
- cff_builder_done( CFF_Builder* builder )
- {
- CFF_GlyphSlot glyph = builder->glyph;
-
-
- if ( glyph )
- glyph->root.outline = *builder->base;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_compute_bias */
- /* */
- /* <Description> */
- /* Computes the bias value in dependence of the number of glyph */
- /* subroutines. */
- /* */
- /* <Input> */
- /* in_charstring_type :: The `CharstringType' value of the top DICT */
- /* dictionary. */
- /* */
- /* num_subrs :: The number of glyph subroutines. */
- /* */
- /* <Return> */
- /* The bias value. */
- static FT_Int
- cff_compute_bias( FT_Int in_charstring_type,
- FT_UInt num_subrs )
- {
- FT_Int result;
-
-
- if ( in_charstring_type == 1 )
- result = 0;
- else if ( num_subrs < 1240 )
- result = 107;
- else if ( num_subrs < 33900U )
- result = 1131;
- else
- result = 32768U;
-
- return result;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_decoder_init */
- /* */
- /* <Description> */
- /* Initializes a given glyph decoder. */
- /* */
- /* <InOut> */
- /* decoder :: A pointer to the glyph builder to initialize. */
- /* */
- /* <Input> */
- /* face :: The current face object. */
- /* */
- /* size :: The current size object. */
- /* */
- /* slot :: The current glyph object. */
- /* */
- /* hinting :: Whether hinting is active. */
- /* */
- /* hint_mode :: The hinting mode. */
- /* */
- FT_LOCAL_DEF( void )
- cff_decoder_init( CFF_Decoder* decoder,
- TT_Face face,
- CFF_Size size,
- CFF_GlyphSlot slot,
- FT_Bool hinting,
- FT_Render_Mode hint_mode )
- {
- CFF_Font cff = (CFF_Font)face->extra.data;
-
-
- /* clear everything */
- FT_MEM_ZERO( decoder, sizeof ( *decoder ) );
-
- /* initialize builder */
- cff_builder_init( &decoder->builder, face, size, slot, hinting );
-
- /* initialize Type2 decoder */
- decoder->cff = cff;
- decoder->num_globals = cff->global_subrs_index.count;
- decoder->globals = cff->global_subrs;
- decoder->globals_bias = cff_compute_bias(
- cff->top_font.font_dict.charstring_type,
- decoder->num_globals );
-
- decoder->hint_mode = hint_mode;
- }
-
-
- /* this function is used to select the subfont */
- /* and the locals subrs array */
- FT_LOCAL_DEF( FT_Error )
- cff_decoder_prepare( CFF_Decoder* decoder,
- CFF_Size size,
- FT_UInt glyph_index )
- {
- CFF_Builder *builder = &decoder->builder;
- CFF_Font cff = (CFF_Font)builder->face->extra.data;
- CFF_SubFont sub = &cff->top_font;
- FT_Error error = FT_Err_Ok;
-
-
- /* manage CID fonts */
- if ( cff->num_subfonts )
- {
- FT_Byte fd_index = cff_fd_select_get( &cff->fd_select, glyph_index );
-
-
- if ( fd_index >= cff->num_subfonts )
- {
- FT_TRACE4(( "cff_decoder_prepare: invalid CID subfont index\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- FT_TRACE3(( " in subfont %d:\n", fd_index ));
-
- sub = cff->subfonts[fd_index];
-
- if ( builder->hints_funcs && size )
- {
- CFF_Internal internal = (CFF_Internal)size->root.internal;
-
-
- /* for CFFs without subfonts, this value has already been set */
- builder->hints_globals = (void *)internal->subfonts[fd_index];
- }
- }
-
- decoder->num_locals = sub->local_subrs_index.count;
- decoder->locals = sub->local_subrs;
- decoder->locals_bias = cff_compute_bias(
- decoder->cff->top_font.font_dict.charstring_type,
- decoder->num_locals );
-
- decoder->glyph_width = sub->private_dict.default_width;
- decoder->nominal_width = sub->private_dict.nominal_width;
-
- decoder->current_subfont = sub; /* for Adobe's CFF handler */
-
- Exit:
- return error;
- }
-
-
- /* check that there is enough space for `count' more points */
- FT_LOCAL_DEF( FT_Error )
- cff_check_points( CFF_Builder* builder,
- FT_Int count )
- {
- return FT_GLYPHLOADER_CHECK_POINTS( builder->loader, count, 0 );
- }
-
-
- /* add a new point, do not check space */
- FT_LOCAL_DEF( void )
- cff_builder_add_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y,
- FT_Byte flag )
- {
- FT_Outline* outline = builder->current;
-
-
- if ( builder->load_points )
- {
- FT_Vector* point = outline->points + outline->n_points;
- FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points;
-
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- CFF_Driver driver = (CFF_Driver)FT_FACE_DRIVER( builder->face );
-
-
- if ( driver->hinting_engine == FT_CFF_HINTING_FREETYPE )
- {
- point->x = x >> 16;
- point->y = y >> 16;
- }
- else
-#endif
- {
- /* cf2_decoder_parse_charstrings uses 16.16 coordinates */
- point->x = x >> 10;
- point->y = y >> 10;
- }
- *control = (FT_Byte)( flag ? FT_CURVE_TAG_ON : FT_CURVE_TAG_CUBIC );
- }
-
- outline->n_points++;
- }
-
-
- /* check space for a new on-curve point, then add it */
- FT_LOCAL_DEF( FT_Error )
- cff_builder_add_point1( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y )
- {
- FT_Error error;
-
-
- error = cff_check_points( builder, 1 );
- if ( !error )
- cff_builder_add_point( builder, x, y, 1 );
-
- return error;
- }
-
-
- /* check space for a new contour, then add it */
- static FT_Error
- cff_builder_add_contour( CFF_Builder* builder )
- {
- FT_Outline* outline = builder->current;
- FT_Error error;
-
-
- if ( !builder->load_points )
- {
- outline->n_contours++;
- return FT_Err_Ok;
- }
-
- error = FT_GLYPHLOADER_CHECK_POINTS( builder->loader, 0, 1 );
- if ( !error )
- {
- if ( outline->n_contours > 0 )
- outline->contours[outline->n_contours - 1] =
- (short)( outline->n_points - 1 );
-
- outline->n_contours++;
- }
-
- return error;
- }
-
-
- /* if a path was begun, add its first on-curve point */
- FT_LOCAL_DEF( FT_Error )
- cff_builder_start_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y )
- {
- FT_Error error = FT_Err_Ok;
-
-
- /* test whether we are building a new contour */
- if ( !builder->path_begun )
- {
- builder->path_begun = 1;
- error = cff_builder_add_contour( builder );
- if ( !error )
- error = cff_builder_add_point1( builder, x, y );
- }
-
- return error;
- }
-
-
- /* close the current contour */
- FT_LOCAL_DEF( void )
- cff_builder_close_contour( CFF_Builder* builder )
- {
- FT_Outline* outline = builder->current;
- FT_Int first;
-
-
- if ( !outline )
- return;
-
- first = outline->n_contours <= 1
- ? 0 : outline->contours[outline->n_contours - 2] + 1;
-
- /* We must not include the last point in the path if it */
- /* is located on the first point. */
- if ( outline->n_points > 1 )
- {
- FT_Vector* p1 = outline->points + first;
- FT_Vector* p2 = outline->points + outline->n_points - 1;
- FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points - 1;
-
-
- /* `delete' last point only if it coincides with the first */
- /* point and if it is not a control point (which can happen). */
- if ( p1->x == p2->x && p1->y == p2->y )
- if ( *control == FT_CURVE_TAG_ON )
- outline->n_points--;
- }
-
- if ( outline->n_contours > 0 )
- {
- /* Don't add contours only consisting of one point, i.e., */
- /* check whether begin point and last point are the same. */
- if ( first == outline->n_points - 1 )
- {
- outline->n_contours--;
- outline->n_points--;
- }
- else
- outline->contours[outline->n_contours - 1] =
- (short)( outline->n_points - 1 );
- }
- }
-
-
- FT_LOCAL_DEF( FT_Int )
- cff_lookup_glyph_by_stdcharcode( CFF_Font cff,
- FT_Int charcode )
- {
- FT_UInt n;
- FT_UShort glyph_sid;
-
-
- /* CID-keyed fonts don't have glyph names */
- if ( !cff->charset.sids )
- return -1;
-
- /* check range of standard char code */
- if ( charcode < 0 || charcode > 255 )
- return -1;
-
- /* Get code to SID mapping from `cff_standard_encoding'. */
- glyph_sid = cff_get_standard_encoding( (FT_UInt)charcode );
-
- for ( n = 0; n < cff->num_glyphs; n++ )
- {
- if ( cff->charset.sids[n] == glyph_sid )
- return (FT_Int)n;
- }
-
- return -1;
- }
-
-
FT_LOCAL_DEF( FT_Error )
cff_get_glyph_data( TT_Face face,
FT_UInt glyph_index,
@@ -680,7 +68,7 @@
#endif /* FT_CONFIG_OPTION_INCREMENTAL */
{
- CFF_Font cff = (CFF_Font)(face->extra.data);
+ CFF_Font cff = (CFF_Font)(face->extra.data);
return cff_index_access_element( &cff->charstrings_index, glyph_index,
@@ -724,1811 +112,6 @@
}
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
-
- static FT_Error
- cff_operator_seac( CFF_Decoder* decoder,
- FT_Pos asb,
- FT_Pos adx,
- FT_Pos ady,
- FT_Int bchar,
- FT_Int achar )
- {
- FT_Error error;
- CFF_Builder* builder = &decoder->builder;
- FT_Int bchar_index, achar_index;
- TT_Face face = decoder->builder.face;
- FT_Vector left_bearing, advance;
- FT_Byte* charstring;
- FT_ULong charstring_len;
- FT_Pos glyph_width;
-
-
- if ( decoder->seac )
- {
- FT_ERROR(( "cff_operator_seac: invalid nested seac\n" ));
- return FT_THROW( Syntax_Error );
- }
-
- adx += decoder->builder.left_bearing.x;
- ady += decoder->builder.left_bearing.y;
-
-#ifdef FT_CONFIG_OPTION_INCREMENTAL
- /* Incremental fonts don't necessarily have valid charsets. */
- /* They use the character code, not the glyph index, in this case. */
- if ( face->root.internal->incremental_interface )
- {
- bchar_index = bchar;
- achar_index = achar;
- }
- else
-#endif /* FT_CONFIG_OPTION_INCREMENTAL */
- {
- CFF_Font cff = (CFF_Font)(face->extra.data);
-
-
- bchar_index = cff_lookup_glyph_by_stdcharcode( cff, bchar );
- achar_index = cff_lookup_glyph_by_stdcharcode( cff, achar );
- }
-
- if ( bchar_index < 0 || achar_index < 0 )
- {
- FT_ERROR(( "cff_operator_seac:"
- " invalid seac character code arguments\n" ));
- return FT_THROW( Syntax_Error );
- }
-
- /* If we are trying to load a composite glyph, do not load the */
- /* accent character and return the array of subglyphs. */
- if ( builder->no_recurse )
- {
- FT_GlyphSlot glyph = (FT_GlyphSlot)builder->glyph;
- FT_GlyphLoader loader = glyph->internal->loader;
- FT_SubGlyph subg;
-
-
- /* reallocate subglyph array if necessary */
- error = FT_GlyphLoader_CheckSubGlyphs( loader, 2 );
- if ( error )
- goto Exit;
-
- subg = loader->current.subglyphs;
-
- /* subglyph 0 = base character */
- subg->index = bchar_index;
- subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES |
- FT_SUBGLYPH_FLAG_USE_MY_METRICS;
- subg->arg1 = 0;
- subg->arg2 = 0;
- subg++;
-
- /* subglyph 1 = accent character */
- subg->index = achar_index;
- subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES;
- subg->arg1 = (FT_Int)( adx >> 16 );
- subg->arg2 = (FT_Int)( ady >> 16 );
-
- /* set up remaining glyph fields */
- glyph->num_subglyphs = 2;
- glyph->subglyphs = loader->base.subglyphs;
- glyph->format = FT_GLYPH_FORMAT_COMPOSITE;
-
- loader->current.num_subglyphs = 2;
- }
-
- FT_GlyphLoader_Prepare( builder->loader );
-
- /* First load `bchar' in builder */
- error = cff_get_glyph_data( face, (FT_UInt)bchar_index,
- &charstring, &charstring_len );
- if ( !error )
- {
- /* the seac operator must not be nested */
- decoder->seac = TRUE;
- error = cff_decoder_parse_charstrings( decoder, charstring,
- charstring_len );
- decoder->seac = FALSE;
-
- cff_free_glyph_data( face, &charstring, charstring_len );
-
- if ( error )
- goto Exit;
- }
-
- /* Save the left bearing, advance and glyph width of the base */
- /* character as they will be erased by the next load. */
-
- left_bearing = builder->left_bearing;
- advance = builder->advance;
- glyph_width = decoder->glyph_width;
-
- builder->left_bearing.x = 0;
- builder->left_bearing.y = 0;
-
- builder->pos_x = adx - asb;
- builder->pos_y = ady;
-
- /* Now load `achar' on top of the base outline. */
- error = cff_get_glyph_data( face, (FT_UInt)achar_index,
- &charstring, &charstring_len );
- if ( !error )
- {
- /* the seac operator must not be nested */
- decoder->seac = TRUE;
- error = cff_decoder_parse_charstrings( decoder, charstring,
- charstring_len );
- decoder->seac = FALSE;
-
- cff_free_glyph_data( face, &charstring, charstring_len );
-
- if ( error )
- goto Exit;
- }
-
- /* Restore the left side bearing, advance and glyph width */
- /* of the base character. */
- builder->left_bearing = left_bearing;
- builder->advance = advance;
- decoder->glyph_width = glyph_width;
-
- builder->pos_x = 0;
- builder->pos_y = 0;
-
- Exit:
- return error;
- }
-
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* cff_decoder_parse_charstrings */
- /* */
- /* <Description> */
- /* Parses a given Type 2 charstrings program. */
- /* */
- /* <InOut> */
- /* decoder :: The current Type 1 decoder. */
- /* */
- /* <Input> */
- /* charstring_base :: The base of the charstring stream. */
- /* */
- /* charstring_len :: The length in bytes of the charstring stream. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- cff_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len )
- {
- FT_Error error;
- CFF_Decoder_Zone* zone;
- FT_Byte* ip;
- FT_Byte* limit;
- CFF_Builder* builder = &decoder->builder;
- FT_Pos x, y;
- FT_Fixed seed;
- FT_Fixed* stack;
- FT_Int charstring_type =
- decoder->cff->top_font.font_dict.charstring_type;
-
- T2_Hints_Funcs hinter;
-
-
- /* set default width */
- decoder->num_hints = 0;
- decoder->read_width = 1;
-
- /* compute random seed from stack address of parameter */
- seed = (FT_Fixed)( ( (FT_Offset)(char*)&seed ^
- (FT_Offset)(char*)&decoder ^
- (FT_Offset)(char*)&charstring_base ) &
- FT_ULONG_MAX );
- seed = ( seed ^ ( seed >> 10 ) ^ ( seed >> 20 ) ) & 0xFFFFL;
- if ( seed == 0 )
- seed = 0x7384;
-
- /* initialize the decoder */
- decoder->top = decoder->stack;
- decoder->zone = decoder->zones;
- zone = decoder->zones;
- stack = decoder->top;
-
- hinter = (T2_Hints_Funcs)builder->hints_funcs;
-
- builder->path_begun = 0;
-
- zone->base = charstring_base;
- limit = zone->limit = charstring_base + charstring_len;
- ip = zone->cursor = zone->base;
-
- error = FT_Err_Ok;
-
- x = builder->pos_x;
- y = builder->pos_y;
-
- /* begin hints recording session, if any */
- if ( hinter )
- hinter->open( hinter->hints );
-
- /* now execute loop */
- while ( ip < limit )
- {
- CFF_Operator op;
- FT_Byte v;
-
-
- /********************************************************************/
- /* */
- /* Decode operator or operand */
- /* */
- v = *ip++;
- if ( v >= 32 || v == 28 )
- {
- FT_Int shift = 16;
- FT_Int32 val;
-
-
- /* this is an operand, push it on the stack */
-
- /* if we use shifts, all computations are done with unsigned */
- /* values; the conversion to a signed value is the last step */
- if ( v == 28 )
- {
- if ( ip + 1 >= limit )
- goto Syntax_Error;
- val = (FT_Short)( ( (FT_UShort)ip[0] << 8 ) | ip[1] );
- ip += 2;
- }
- else if ( v < 247 )
- val = (FT_Int32)v - 139;
- else if ( v < 251 )
- {
- if ( ip >= limit )
- goto Syntax_Error;
- val = ( (FT_Int32)v - 247 ) * 256 + *ip++ + 108;
- }
- else if ( v < 255 )
- {
- if ( ip >= limit )
- goto Syntax_Error;
- val = -( (FT_Int32)v - 251 ) * 256 - *ip++ - 108;
- }
- else
- {
- if ( ip + 3 >= limit )
- goto Syntax_Error;
- val = (FT_Int32)( ( (FT_UInt32)ip[0] << 24 ) |
- ( (FT_UInt32)ip[1] << 16 ) |
- ( (FT_UInt32)ip[2] << 8 ) |
- (FT_UInt32)ip[3] );
- ip += 4;
- if ( charstring_type == 2 )
- shift = 0;
- }
- if ( decoder->top - stack >= CFF_MAX_OPERANDS )
- goto Stack_Overflow;
-
- val = (FT_Int32)( (FT_UInt32)val << shift );
- *decoder->top++ = val;
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- if ( !( val & 0xFFFFL ) )
- FT_TRACE4(( " %hd", (FT_Short)( (FT_UInt32)val >> 16 ) ));
- else
- FT_TRACE4(( " %.2f", val / 65536.0 ));
-#endif
-
- }
- else
- {
- /* The specification says that normally arguments are to be taken */
- /* from the bottom of the stack. However, this seems not to be */
- /* correct, at least for Acroread 7.0.8 on GNU/Linux: It pops the */
- /* arguments similar to a PS interpreter. */
-
- FT_Fixed* args = decoder->top;
- FT_Int num_args = (FT_Int)( args - decoder->stack );
- FT_Int req_args;
-
-
- /* find operator */
- op = cff_op_unknown;
-
- switch ( v )
- {
- case 1:
- op = cff_op_hstem;
- break;
- case 3:
- op = cff_op_vstem;
- break;
- case 4:
- op = cff_op_vmoveto;
- break;
- case 5:
- op = cff_op_rlineto;
- break;
- case 6:
- op = cff_op_hlineto;
- break;
- case 7:
- op = cff_op_vlineto;
- break;
- case 8:
- op = cff_op_rrcurveto;
- break;
- case 9:
- op = cff_op_closepath;
- break;
- case 10:
- op = cff_op_callsubr;
- break;
- case 11:
- op = cff_op_return;
- break;
- case 12:
- {
- if ( ip >= limit )
- goto Syntax_Error;
- v = *ip++;
-
- switch ( v )
- {
- case 0:
- op = cff_op_dotsection;
- break;
- case 1: /* this is actually the Type1 vstem3 operator */
- op = cff_op_vstem;
- break;
- case 2: /* this is actually the Type1 hstem3 operator */
- op = cff_op_hstem;
- break;
- case 3:
- op = cff_op_and;
- break;
- case 4:
- op = cff_op_or;
- break;
- case 5:
- op = cff_op_not;
- break;
- case 6:
- op = cff_op_seac;
- break;
- case 7:
- op = cff_op_sbw;
- break;
- case 8:
- op = cff_op_store;
- break;
- case 9:
- op = cff_op_abs;
- break;
- case 10:
- op = cff_op_add;
- break;
- case 11:
- op = cff_op_sub;
- break;
- case 12:
- op = cff_op_div;
- break;
- case 13:
- op = cff_op_load;
- break;
- case 14:
- op = cff_op_neg;
- break;
- case 15:
- op = cff_op_eq;
- break;
- case 16:
- op = cff_op_callothersubr;
- break;
- case 17:
- op = cff_op_pop;
- break;
- case 18:
- op = cff_op_drop;
- break;
- case 20:
- op = cff_op_put;
- break;
- case 21:
- op = cff_op_get;
- break;
- case 22:
- op = cff_op_ifelse;
- break;
- case 23:
- op = cff_op_random;
- break;
- case 24:
- op = cff_op_mul;
- break;
- case 26:
- op = cff_op_sqrt;
- break;
- case 27:
- op = cff_op_dup;
- break;
- case 28:
- op = cff_op_exch;
- break;
- case 29:
- op = cff_op_index;
- break;
- case 30:
- op = cff_op_roll;
- break;
- case 33:
- op = cff_op_setcurrentpoint;
- break;
- case 34:
- op = cff_op_hflex;
- break;
- case 35:
- op = cff_op_flex;
- break;
- case 36:
- op = cff_op_hflex1;
- break;
- case 37:
- op = cff_op_flex1;
- break;
- default:
- FT_TRACE4(( " unknown op (12, %d)\n", v ));
- break;
- }
- }
- break;
- case 13:
- op = cff_op_hsbw;
- break;
- case 14:
- op = cff_op_endchar;
- break;
- case 16:
- op = cff_op_blend;
- break;
- case 18:
- op = cff_op_hstemhm;
- break;
- case 19:
- op = cff_op_hintmask;
- break;
- case 20:
- op = cff_op_cntrmask;
- break;
- case 21:
- op = cff_op_rmoveto;
- break;
- case 22:
- op = cff_op_hmoveto;
- break;
- case 23:
- op = cff_op_vstemhm;
- break;
- case 24:
- op = cff_op_rcurveline;
- break;
- case 25:
- op = cff_op_rlinecurve;
- break;
- case 26:
- op = cff_op_vvcurveto;
- break;
- case 27:
- op = cff_op_hhcurveto;
- break;
- case 29:
- op = cff_op_callgsubr;
- break;
- case 30:
- op = cff_op_vhcurveto;
- break;
- case 31:
- op = cff_op_hvcurveto;
- break;
- default:
- FT_TRACE4(( " unknown op (%d)\n", v ));
- break;
- }
-
- if ( op == cff_op_unknown )
- continue;
-
- /* check arguments */
- req_args = cff_argument_counts[op];
- if ( req_args & CFF_COUNT_CHECK_WIDTH )
- {
- if ( num_args > 0 && decoder->read_width )
- {
- /* If `nominal_width' is non-zero, the number is really a */
- /* difference against `nominal_width'. Else, the number here */
- /* is truly a width, not a difference against `nominal_width'. */
- /* If the font does not set `nominal_width', then */
- /* `nominal_width' defaults to zero, and so we can set */
- /* `glyph_width' to `nominal_width' plus number on the stack */
- /* -- for either case. */
-
- FT_Int set_width_ok;
-
-
- switch ( op )
- {
- case cff_op_hmoveto:
- case cff_op_vmoveto:
- set_width_ok = num_args & 2;
- break;
-
- case cff_op_hstem:
- case cff_op_vstem:
- case cff_op_hstemhm:
- case cff_op_vstemhm:
- case cff_op_rmoveto:
- case cff_op_hintmask:
- case cff_op_cntrmask:
- set_width_ok = num_args & 1;
- break;
-
- case cff_op_endchar:
- /* If there is a width specified for endchar, we either have */
- /* 1 argument or 5 arguments. We like to argue. */
- set_width_ok = ( num_args == 5 ) || ( num_args == 1 );
- break;
-
- default:
- set_width_ok = 0;
- break;
- }
-
- if ( set_width_ok )
- {
- decoder->glyph_width = decoder->nominal_width +
- ( stack[0] >> 16 );
-
- if ( decoder->width_only )
- {
- /* we only want the advance width; stop here */
- break;
- }
-
- /* Consumed an argument. */
- num_args--;
- }
- }
-
- decoder->read_width = 0;
- req_args = 0;
- }
-
- req_args &= 0x000F;
- if ( num_args < req_args )
- goto Stack_Underflow;
- args -= req_args;
- num_args -= req_args;
-
- /* At this point, `args' points to the first argument of the */
- /* operand in case `req_args' isn't zero. Otherwise, we have */
- /* to adjust `args' manually. */
-
- /* Note that we only pop arguments from the stack which we */
- /* really need and can digest so that we can continue in case */
- /* of superfluous stack elements. */
-
- switch ( op )
- {
- case cff_op_hstem:
- case cff_op_vstem:
- case cff_op_hstemhm:
- case cff_op_vstemhm:
- /* the number of arguments is always even here */
- FT_TRACE4((
- op == cff_op_hstem ? " hstem\n" :
- ( op == cff_op_vstem ? " vstem\n" :
- ( op == cff_op_hstemhm ? " hstemhm\n" : " vstemhm\n" ) ) ));
-
- if ( hinter )
- hinter->stems( hinter->hints,
- ( op == cff_op_hstem || op == cff_op_hstemhm ),
- num_args / 2,
- args - ( num_args & ~1 ) );
-
- decoder->num_hints += num_args / 2;
- args = stack;
- break;
-
- case cff_op_hintmask:
- case cff_op_cntrmask:
- FT_TRACE4(( op == cff_op_hintmask ? " hintmask" : " cntrmask" ));
-
- /* implement vstem when needed -- */
- /* the specification doesn't say it, but this also works */
- /* with the 'cntrmask' operator */
- /* */
- if ( num_args > 0 )
- {
- if ( hinter )
- hinter->stems( hinter->hints,
- 0,
- num_args / 2,
- args - ( num_args & ~1 ) );
-
- decoder->num_hints += num_args / 2;
- }
-
- /* In a valid charstring there must be at least one byte */
- /* after `hintmask' or `cntrmask' (e.g., for a `return' */
- /* instruction). Additionally, there must be space for */
- /* `num_hints' bits. */
-
- if ( ( ip + ( ( decoder->num_hints + 7 ) >> 3 ) ) >= limit )
- goto Syntax_Error;
-
- if ( hinter )
- {
- if ( op == cff_op_hintmask )
- hinter->hintmask( hinter->hints,
- (FT_UInt)builder->current->n_points,
- (FT_UInt)decoder->num_hints,
- ip );
- else
- hinter->counter( hinter->hints,
- (FT_UInt)decoder->num_hints,
- ip );
- }
-
-#ifdef FT_DEBUG_LEVEL_TRACE
- {
- FT_UInt maskbyte;
-
-
- FT_TRACE4(( " (maskbytes:" ));
-
- for ( maskbyte = 0;
- maskbyte < (FT_UInt)( ( decoder->num_hints + 7 ) >> 3 );
- maskbyte++, ip++ )
- FT_TRACE4(( " 0x%02X", *ip ));
-
- FT_TRACE4(( ")\n" ));
- }
-#else
- ip += ( decoder->num_hints + 7 ) >> 3;
-#endif
- args = stack;
- break;
-
- case cff_op_rmoveto:
- FT_TRACE4(( " rmoveto\n" ));
-
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- x += args[-2];
- y += args[-1];
- args = stack;
- break;
-
- case cff_op_vmoveto:
- FT_TRACE4(( " vmoveto\n" ));
-
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- y += args[-1];
- args = stack;
- break;
-
- case cff_op_hmoveto:
- FT_TRACE4(( " hmoveto\n" ));
-
- cff_builder_close_contour( builder );
- builder->path_begun = 0;
- x += args[-1];
- args = stack;
- break;
-
- case cff_op_rlineto:
- FT_TRACE4(( " rlineto\n" ));
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, num_args / 2 ) )
- goto Fail;
-
- if ( num_args < 2 )
- goto Stack_Underflow;
-
- args -= num_args & ~1;
- while ( args < decoder->top )
- {
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 1 );
- args += 2;
- }
- args = stack;
- break;
-
- case cff_op_hlineto:
- case cff_op_vlineto:
- {
- FT_Int phase = ( op == cff_op_hlineto );
-
-
- FT_TRACE4(( op == cff_op_hlineto ? " hlineto\n"
- : " vlineto\n" ));
-
- if ( num_args < 0 )
- goto Stack_Underflow;
-
- /* there exist subsetted fonts (found in PDFs) */
- /* which call `hlineto' without arguments */
- if ( num_args == 0 )
- break;
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, num_args ) )
- goto Fail;
-
- args = stack;
- while ( args < decoder->top )
- {
- if ( phase )
- x += args[0];
- else
- y += args[0];
-
- if ( cff_builder_add_point1( builder, x, y ) )
- goto Fail;
-
- args++;
- phase ^= 1;
- }
- args = stack;
- }
- break;
-
- case cff_op_rrcurveto:
- {
- FT_Int nargs;
-
-
- FT_TRACE4(( " rrcurveto\n" ));
-
- if ( num_args < 6 )
- goto Stack_Underflow;
-
- nargs = num_args - num_args % 6;
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, nargs / 2 ) )
- goto Fail;
-
- args -= nargs;
- while ( args < decoder->top )
- {
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[2];
- y += args[3];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[4];
- y += args[5];
- cff_builder_add_point( builder, x, y, 1 );
- args += 6;
- }
- args = stack;
- }
- break;
-
- case cff_op_vvcurveto:
- {
- FT_Int nargs;
-
-
- FT_TRACE4(( " vvcurveto\n" ));
-
- if ( num_args < 4 )
- goto Stack_Underflow;
-
- /* if num_args isn't of the form 4n or 4n+1, */
- /* we enforce it by clearing the second bit */
-
- nargs = num_args & ~2;
-
- if ( cff_builder_start_point( builder, x, y ) )
- goto Fail;
-
- args -= nargs;
-
- if ( nargs & 1 )
- {
- x += args[0];
- args++;
- nargs--;
- }
-
- if ( cff_check_points( builder, 3 * ( nargs / 4 ) ) )
- goto Fail;
-
- while ( args < decoder->top )
- {
- y += args[0];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[1];
- y += args[2];
- cff_builder_add_point( builder, x, y, 0 );
- y += args[3];
- cff_builder_add_point( builder, x, y, 1 );
- args += 4;
- }
- args = stack;
- }
- break;
-
- case cff_op_hhcurveto:
- {
- FT_Int nargs;
-
-
- FT_TRACE4(( " hhcurveto\n" ));
-
- if ( num_args < 4 )
- goto Stack_Underflow;
-
- /* if num_args isn't of the form 4n or 4n+1, */
- /* we enforce it by clearing the second bit */
-
- nargs = num_args & ~2;
-
- if ( cff_builder_start_point( builder, x, y ) )
- goto Fail;
-
- args -= nargs;
- if ( nargs & 1 )
- {
- y += args[0];
- args++;
- nargs--;
- }
-
- if ( cff_check_points( builder, 3 * ( nargs / 4 ) ) )
- goto Fail;
-
- while ( args < decoder->top )
- {
- x += args[0];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[1];
- y += args[2];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[3];
- cff_builder_add_point( builder, x, y, 1 );
- args += 4;
- }
- args = stack;
- }
- break;
-
- case cff_op_vhcurveto:
- case cff_op_hvcurveto:
- {
- FT_Int phase;
- FT_Int nargs;
-
-
- FT_TRACE4(( op == cff_op_vhcurveto ? " vhcurveto\n"
- : " hvcurveto\n" ));
-
- if ( cff_builder_start_point( builder, x, y ) )
- goto Fail;
-
- if ( num_args < 4 )
- goto Stack_Underflow;
-
- /* if num_args isn't of the form 8n, 8n+1, 8n+4, or 8n+5, */
- /* we enforce it by clearing the second bit */
-
- nargs = num_args & ~2;
-
- args -= nargs;
- if ( cff_check_points( builder, ( nargs / 4 ) * 3 ) )
- goto Stack_Underflow;
-
- phase = ( op == cff_op_hvcurveto );
-
- while ( nargs >= 4 )
- {
- nargs -= 4;
- if ( phase )
- {
- x += args[0];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[1];
- y += args[2];
- cff_builder_add_point( builder, x, y, 0 );
- y += args[3];
- if ( nargs == 1 )
- x += args[4];
- cff_builder_add_point( builder, x, y, 1 );
- }
- else
- {
- y += args[0];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[1];
- y += args[2];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[3];
- if ( nargs == 1 )
- y += args[4];
- cff_builder_add_point( builder, x, y, 1 );
- }
- args += 4;
- phase ^= 1;
- }
- args = stack;
- }
- break;
-
- case cff_op_rlinecurve:
- {
- FT_Int num_lines;
- FT_Int nargs;
-
-
- FT_TRACE4(( " rlinecurve\n" ));
-
- if ( num_args < 8 )
- goto Stack_Underflow;
-
- nargs = num_args & ~1;
- num_lines = ( nargs - 6 ) / 2;
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, num_lines + 3 ) )
- goto Fail;
-
- args -= nargs;
-
- /* first, add the line segments */
- while ( num_lines > 0 )
- {
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 1 );
- args += 2;
- num_lines--;
- }
-
- /* then the curve */
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[2];
- y += args[3];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[4];
- y += args[5];
- cff_builder_add_point( builder, x, y, 1 );
- args = stack;
- }
- break;
-
- case cff_op_rcurveline:
- {
- FT_Int num_curves;
- FT_Int nargs;
-
-
- FT_TRACE4(( " rcurveline\n" ));
-
- if ( num_args < 8 )
- goto Stack_Underflow;
-
- nargs = num_args - 2;
- nargs = nargs - nargs % 6 + 2;
- num_curves = ( nargs - 2 ) / 6;
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, num_curves * 3 + 2 ) )
- goto Fail;
-
- args -= nargs;
-
- /* first, add the curves */
- while ( num_curves > 0 )
- {
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[2];
- y += args[3];
- cff_builder_add_point( builder, x, y, 0 );
- x += args[4];
- y += args[5];
- cff_builder_add_point( builder, x, y, 1 );
- args += 6;
- num_curves--;
- }
-
- /* then the final line */
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 1 );
- args = stack;
- }
- break;
-
- case cff_op_hflex1:
- {
- FT_Pos start_y;
-
-
- FT_TRACE4(( " hflex1\n" ));
-
- /* adding five more points: 4 control points, 1 on-curve point */
- /* -- make sure we have enough space for the start point if it */
- /* needs to be added */
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, 6 ) )
- goto Fail;
-
- /* record the starting point's y position for later use */
- start_y = y;
-
- /* first control point */
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* second control point */
- x += args[2];
- y += args[3];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* join point; on curve, with y-value the same as the last */
- /* control point's y-value */
- x += args[4];
- cff_builder_add_point( builder, x, y, 1 );
-
- /* third control point, with y-value the same as the join */
- /* point's y-value */
- x += args[5];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* fourth control point */
- x += args[6];
- y += args[7];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* ending point, with y-value the same as the start */
- x += args[8];
- y = start_y;
- cff_builder_add_point( builder, x, y, 1 );
-
- args = stack;
- break;
- }
-
- case cff_op_hflex:
- {
- FT_Pos start_y;
-
-
- FT_TRACE4(( " hflex\n" ));
-
- /* adding six more points; 4 control points, 2 on-curve points */
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, 6 ) )
- goto Fail;
-
- /* record the starting point's y-position for later use */
- start_y = y;
-
- /* first control point */
- x += args[0];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* second control point */
- x += args[1];
- y += args[2];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* join point; on curve, with y-value the same as the last */
- /* control point's y-value */
- x += args[3];
- cff_builder_add_point( builder, x, y, 1 );
-
- /* third control point, with y-value the same as the join */
- /* point's y-value */
- x += args[4];
- cff_builder_add_point( builder, x, y, 0 );
-
- /* fourth control point */
- x += args[5];
- y = start_y;
- cff_builder_add_point( builder, x, y, 0 );
-
- /* ending point, with y-value the same as the start point's */
- /* y-value -- we don't add this point, though */
- x += args[6];
- cff_builder_add_point( builder, x, y, 1 );
-
- args = stack;
- break;
- }
-
- case cff_op_flex1:
- {
- FT_Pos start_x, start_y; /* record start x, y values for */
- /* alter use */
- FT_Fixed dx = 0, dy = 0; /* used in horizontal/vertical */
- /* algorithm below */
- FT_Int horizontal, count;
- FT_Fixed* temp;
-
-
- FT_TRACE4(( " flex1\n" ));
-
- /* adding six more points; 4 control points, 2 on-curve points */
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, 6 ) )
- goto Fail;
-
- /* record the starting point's x, y position for later use */
- start_x = x;
- start_y = y;
-
- /* XXX: figure out whether this is supposed to be a horizontal */
- /* or vertical flex; the Type 2 specification is vague... */
-
- temp = args;
-
- /* grab up to the last argument */
- for ( count = 5; count > 0; count-- )
- {
- dx += temp[0];
- dy += temp[1];
- temp += 2;
- }
-
- if ( dx < 0 )
- dx = -dx;
- if ( dy < 0 )
- dy = -dy;
-
- /* strange test, but here it is... */
- horizontal = ( dx > dy );
-
- for ( count = 5; count > 0; count-- )
- {
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y,
- (FT_Bool)( count == 3 ) );
- args += 2;
- }
-
- /* is last operand an x- or y-delta? */
- if ( horizontal )
- {
- x += args[0];
- y = start_y;
- }
- else
- {
- x = start_x;
- y += args[0];
- }
-
- cff_builder_add_point( builder, x, y, 1 );
-
- args = stack;
- break;
- }
-
- case cff_op_flex:
- {
- FT_UInt count;
-
-
- FT_TRACE4(( " flex\n" ));
-
- if ( cff_builder_start_point( builder, x, y ) ||
- cff_check_points( builder, 6 ) )
- goto Fail;
-
- for ( count = 6; count > 0; count-- )
- {
- x += args[0];
- y += args[1];
- cff_builder_add_point( builder, x, y,
- (FT_Bool)( count == 4 || count == 1 ) );
- args += 2;
- }
-
- args = stack;
- }
- break;
-
- case cff_op_seac:
- FT_TRACE4(( " seac\n" ));
-
- error = cff_operator_seac( decoder,
- args[0], args[1], args[2],
- (FT_Int)( args[3] >> 16 ),
- (FT_Int)( args[4] >> 16 ) );
-
- /* add current outline to the glyph slot */
- FT_GlyphLoader_Add( builder->loader );
-
- /* return now! */
- FT_TRACE4(( "\n" ));
- return error;
-
- case cff_op_endchar:
- FT_TRACE4(( " endchar\n" ));
-
- /* We are going to emulate the seac operator. */
- if ( num_args >= 4 )
- {
- /* Save glyph width so that the subglyphs don't overwrite it. */
- FT_Pos glyph_width = decoder->glyph_width;
-
-
- error = cff_operator_seac( decoder,
- 0L, args[-4], args[-3],
- (FT_Int)( args[-2] >> 16 ),
- (FT_Int)( args[-1] >> 16 ) );
-
- decoder->glyph_width = glyph_width;
- }
- else
- {
- cff_builder_close_contour( builder );
-
- /* close hints recording session */
- if ( hinter )
- {
- if ( hinter->close( hinter->hints,
- (FT_UInt)builder->current->n_points ) )
- goto Syntax_Error;
-
- /* apply hints to the loaded glyph outline now */
- error = hinter->apply( hinter->hints,
- builder->current,
- (PSH_Globals)builder->hints_globals,
- decoder->hint_mode );
- if ( error )
- goto Fail;
- }
-
- /* add current outline to the glyph slot */
- FT_GlyphLoader_Add( builder->loader );
- }
-
- /* return now! */
- FT_TRACE4(( "\n" ));
- return error;
-
- case cff_op_abs:
- FT_TRACE4(( " abs\n" ));
-
- if ( args[0] < 0 )
- args[0] = -args[0];
- args++;
- break;
-
- case cff_op_add:
- FT_TRACE4(( " add\n" ));
-
- args[0] += args[1];
- args++;
- break;
-
- case cff_op_sub:
- FT_TRACE4(( " sub\n" ));
-
- args[0] -= args[1];
- args++;
- break;
-
- case cff_op_div:
- FT_TRACE4(( " div\n" ));
-
- args[0] = FT_DivFix( args[0], args[1] );
- args++;
- break;
-
- case cff_op_neg:
- FT_TRACE4(( " neg\n" ));
-
- args[0] = -args[0];
- args++;
- break;
-
- case cff_op_random:
- {
- FT_Fixed Rand;
-
-
- FT_TRACE4(( " rand\n" ));
-
- Rand = seed;
- if ( Rand >= 0x8000L )
- Rand++;
-
- args[0] = Rand;
- seed = FT_MulFix( seed, 0x10000L - seed );
- if ( seed == 0 )
- seed += 0x2873;
- args++;
- }
- break;
-
- case cff_op_mul:
- FT_TRACE4(( " mul\n" ));
-
- args[0] = FT_MulFix( args[0], args[1] );
- args++;
- break;
-
- case cff_op_sqrt:
- FT_TRACE4(( " sqrt\n" ));
-
- if ( args[0] > 0 )
- {
- FT_Int count = 9;
- FT_Fixed root = args[0];
- FT_Fixed new_root;
-
-
- for (;;)
- {
- new_root = ( root + FT_DivFix( args[0], root ) + 1 ) >> 1;
- if ( new_root == root || count <= 0 )
- break;
- root = new_root;
- }
- args[0] = new_root;
- }
- else
- args[0] = 0;
- args++;
- break;
-
- case cff_op_drop:
- /* nothing */
- FT_TRACE4(( " drop\n" ));
-
- break;
-
- case cff_op_exch:
- {
- FT_Fixed tmp;
-
-
- FT_TRACE4(( " exch\n" ));
-
- tmp = args[0];
- args[0] = args[1];
- args[1] = tmp;
- args += 2;
- }
- break;
-
- case cff_op_index:
- {
- FT_Int idx = (FT_Int)( args[0] >> 16 );
-
-
- FT_TRACE4(( " index\n" ));
-
- if ( idx < 0 )
- idx = 0;
- else if ( idx > num_args - 2 )
- idx = num_args - 2;
- args[0] = args[-( idx + 1 )];
- args++;
- }
- break;
-
- case cff_op_roll:
- {
- FT_Int count = (FT_Int)( args[0] >> 16 );
- FT_Int idx = (FT_Int)( args[1] >> 16 );
-
-
- FT_TRACE4(( " roll\n" ));
-
- if ( count <= 0 )
- count = 1;
-
- args -= count;
- if ( args < stack )
- goto Stack_Underflow;
-
- if ( idx >= 0 )
- {
- while ( idx > 0 )
- {
- FT_Fixed tmp = args[count - 1];
- FT_Int i;
-
-
- for ( i = count - 2; i >= 0; i-- )
- args[i + 1] = args[i];
- args[0] = tmp;
- idx--;
- }
- }
- else
- {
- while ( idx < 0 )
- {
- FT_Fixed tmp = args[0];
- FT_Int i;
-
-
- for ( i = 0; i < count - 1; i++ )
- args[i] = args[i + 1];
- args[count - 1] = tmp;
- idx++;
- }
- }
- args += count;
- }
- break;
-
- case cff_op_dup:
- FT_TRACE4(( " dup\n" ));
-
- args[1] = args[0];
- args += 2;
- break;
-
- case cff_op_put:
- {
- FT_Fixed val = args[0];
- FT_Int idx = (FT_Int)( args[1] >> 16 );
-
-
- FT_TRACE4(( " put\n" ));
-
- if ( idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS )
- decoder->buildchar[idx] = val;
- }
- break;
-
- case cff_op_get:
- {
- FT_Int idx = (FT_Int)( args[0] >> 16 );
- FT_Fixed val = 0;
-
-
- FT_TRACE4(( " get\n" ));
-
- if ( idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS )
- val = decoder->buildchar[idx];
-
- args[0] = val;
- args++;
- }
- break;
-
- case cff_op_store:
- FT_TRACE4(( " store\n"));
-
- goto Unimplemented;
-
- case cff_op_load:
- FT_TRACE4(( " load\n" ));
-
- goto Unimplemented;
-
- case cff_op_dotsection:
- /* this operator is deprecated and ignored by the parser */
- FT_TRACE4(( " dotsection\n" ));
- break;
-
- case cff_op_closepath:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " closepath (invalid op)\n" ));
-
- args = stack;
- break;
-
- case cff_op_hsbw:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " hsbw (invalid op)\n" ));
-
- decoder->glyph_width = decoder->nominal_width + ( args[1] >> 16 );
-
- decoder->builder.left_bearing.x = args[0];
- decoder->builder.left_bearing.y = 0;
-
- x = decoder->builder.pos_x + args[0];
- y = decoder->builder.pos_y;
- args = stack;
- break;
-
- case cff_op_sbw:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " sbw (invalid op)\n" ));
-
- decoder->glyph_width = decoder->nominal_width + ( args[2] >> 16 );
-
- decoder->builder.left_bearing.x = args[0];
- decoder->builder.left_bearing.y = args[1];
-
- x = decoder->builder.pos_x + args[0];
- y = decoder->builder.pos_y + args[1];
- args = stack;
- break;
-
- case cff_op_setcurrentpoint:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " setcurrentpoint (invalid op)\n" ));
-
- x = decoder->builder.pos_x + args[0];
- y = decoder->builder.pos_y + args[1];
- args = stack;
- break;
-
- case cff_op_callothersubr:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " callothersubr (invalid op)\n" ));
-
- /* subsequent `pop' operands should add the arguments, */
- /* this is the implementation described for `unknown' other */
- /* subroutines in the Type1 spec. */
- /* */
- /* XXX Fix return arguments (see discussion below). */
- args -= 2 + ( args[-2] >> 16 );
- if ( args < stack )
- goto Stack_Underflow;
- break;
-
- case cff_op_pop:
- /* this is an invalid Type 2 operator; however, there */
- /* exist fonts which are incorrectly converted from probably */
- /* Type 1 to CFF, and some parsers seem to accept it */
-
- FT_TRACE4(( " pop (invalid op)\n" ));
-
- /* XXX Increasing `args' is wrong: After a certain number of */
- /* `pop's we get a stack overflow. Reason for doing it is */
- /* code like this (actually found in a CFF font): */
- /* */
- /* 17 1 3 callothersubr */
- /* pop */
- /* callsubr */
- /* */
- /* Since we handle `callothersubr' as a no-op, and */
- /* `callsubr' needs at least one argument, `pop' can't be a */
- /* no-op too as it basically should be. */
- /* */
- /* The right solution would be to provide real support for */
- /* `callothersubr' as done in `t1decode.c', however, given */
- /* the fact that CFF fonts with `pop' are invalid, it is */
- /* questionable whether it is worth the time. */
- args++;
- break;
-
- case cff_op_and:
- {
- FT_Fixed cond = args[0] && args[1];
-
-
- FT_TRACE4(( " and\n" ));
-
- args[0] = cond ? 0x10000L : 0;
- args++;
- }
- break;
-
- case cff_op_or:
- {
- FT_Fixed cond = args[0] || args[1];
-
-
- FT_TRACE4(( " or\n" ));
-
- args[0] = cond ? 0x10000L : 0;
- args++;
- }
- break;
-
- case cff_op_eq:
- {
- FT_Fixed cond = !args[0];
-
-
- FT_TRACE4(( " eq\n" ));
-
- args[0] = cond ? 0x10000L : 0;
- args++;
- }
- break;
-
- case cff_op_ifelse:
- {
- FT_Fixed cond = ( args[2] <= args[3] );
-
-
- FT_TRACE4(( " ifelse\n" ));
-
- if ( !cond )
- args[0] = args[1];
- args++;
- }
- break;
-
- case cff_op_callsubr:
- {
- FT_UInt idx = (FT_UInt)( ( args[0] >> 16 ) +
- decoder->locals_bias );
-
-
- FT_TRACE4(( " callsubr (idx %d, entering level %d)\n",
- idx,
- zone - decoder->zones + 1 ));
-
- if ( idx >= decoder->num_locals )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " invalid local subr index\n" ));
- goto Syntax_Error;
- }
-
- if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " too many nested subrs\n" ));
- goto Syntax_Error;
- }
-
- zone->cursor = ip; /* save current instruction pointer */
-
- zone++;
- zone->base = decoder->locals[idx];
- zone->limit = decoder->locals[idx + 1];
- zone->cursor = zone->base;
-
- if ( !zone->base || zone->limit == zone->base )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " invoking empty subrs\n" ));
- goto Syntax_Error;
- }
-
- decoder->zone = zone;
- ip = zone->base;
- limit = zone->limit;
- }
- break;
-
- case cff_op_callgsubr:
- {
- FT_UInt idx = (FT_UInt)( ( args[0] >> 16 ) +
- decoder->globals_bias );
-
-
- FT_TRACE4(( " callgsubr (idx %d, entering level %d)\n",
- idx,
- zone - decoder->zones + 1 ));
-
- if ( idx >= decoder->num_globals )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " invalid global subr index\n" ));
- goto Syntax_Error;
- }
-
- if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " too many nested subrs\n" ));
- goto Syntax_Error;
- }
-
- zone->cursor = ip; /* save current instruction pointer */
-
- zone++;
- zone->base = decoder->globals[idx];
- zone->limit = decoder->globals[idx + 1];
- zone->cursor = zone->base;
-
- if ( !zone->base || zone->limit == zone->base )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " invoking empty subrs\n" ));
- goto Syntax_Error;
- }
-
- decoder->zone = zone;
- ip = zone->base;
- limit = zone->limit;
- }
- break;
-
- case cff_op_return:
- FT_TRACE4(( " return (leaving level %d)\n",
- decoder->zone - decoder->zones ));
-
- if ( decoder->zone <= decoder->zones )
- {
- FT_ERROR(( "cff_decoder_parse_charstrings:"
- " unexpected return\n" ));
- goto Syntax_Error;
- }
-
- decoder->zone--;
- zone = decoder->zone;
- ip = zone->cursor;
- limit = zone->limit;
- break;
-
- default:
- Unimplemented:
- FT_ERROR(( "Unimplemented opcode: %d", ip[-1] ));
-
- if ( ip[-1] == 12 )
- FT_ERROR(( " %d", ip[0] ));
- FT_ERROR(( "\n" ));
-
- return FT_THROW( Unimplemented_Feature );
- }
-
- decoder->top = args;
-
- if ( decoder->top - stack >= CFF_MAX_OPERANDS )
- goto Stack_Overflow;
-
- } /* general operator processing */
-
- } /* while ip < limit */
-
- FT_TRACE4(( "..end..\n\n" ));
-
- Fail:
- return error;
-
- Syntax_Error:
- FT_TRACE4(( "cff_decoder_parse_charstrings: syntax error\n" ));
- return FT_THROW( Invalid_File_Format );
-
- Stack_Underflow:
- FT_TRACE4(( "cff_decoder_parse_charstrings: stack underflow\n" ));
- return FT_THROW( Too_Few_Arguments );
-
- Stack_Overflow:
- FT_TRACE4(( "cff_decoder_parse_charstrings: stack overflow\n" ));
- return FT_THROW( Stack_Overflow );
- }
-
-#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
-
-
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
@@ -2559,11 +142,14 @@
FT_Int glyph_index;
CFF_Font cff = (CFF_Font)face->other;
+ PSAux_Service psaux = (PSAux_Service)face->psaux;
+ const CFF_Decoder_Funcs decoder_funcs = psaux->cff_decoder_funcs;
+
*max_advance = 0;
/* Initialize load decoder */
- cff_decoder_init( &decoder, face, 0, 0, 0, 0 );
+ decoder_funcs->init( &decoder, face, 0, 0, 0, 0, 0, 0 );
decoder.builder.metrics_only = 1;
decoder.builder.load_points = 0;
@@ -2582,11 +168,12 @@
&charstring, &charstring_len );
if ( !error )
{
- error = cff_decoder_prepare( &decoder, size, glyph_index );
+ error = decoder_funcs->prepare( &decoder, size, glyph_index );
if ( !error )
- error = cff_decoder_parse_charstrings( &decoder,
- charstring,
- charstring_len );
+ error = decoder_funcs->parse_charstrings_old( &decoder,
+ charstring,
+ charstring_len,
+ 0 );
cff_free_glyph_data( face, &charstring, &charstring_len );
}
@@ -2612,10 +199,14 @@
{
FT_Error error;
CFF_Decoder decoder;
+ PS_Decoder psdecoder;
TT_Face face = (TT_Face)glyph->root.face;
FT_Bool hinting, scaled, force_scaling;
CFF_Font cff = (CFF_Font)face->extra.data;
+ PSAux_Service psaux = (PSAux_Service)face->psaux;
+ const CFF_Decoder_Funcs decoder_funcs = psaux->cff_decoder_funcs;
+
FT_Matrix font_matrix;
FT_Vector font_offset;
@@ -2805,7 +396,7 @@
{
#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- CFF_Driver driver = (CFF_Driver)FT_FACE_DRIVER( face );
+ PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( face );
#endif
@@ -2813,9 +404,12 @@
FT_ULong charstring_len;
- cff_decoder_init( &decoder, face, size, glyph, hinting,
- FT_LOAD_TARGET_MODE( load_flags ) );
+ decoder_funcs->init( &decoder, face, size, glyph, hinting,
+ FT_LOAD_TARGET_MODE( load_flags ),
+ cff_get_glyph_data,
+ cff_free_glyph_data );
+ /* this is for pure CFFs */
if ( load_flags & FT_LOAD_ADVANCE_ONLY )
decoder.width_only = TRUE;
@@ -2828,22 +422,25 @@
if ( error )
goto Glyph_Build_Finished;
- error = cff_decoder_prepare( &decoder, size, glyph_index );
+ error = decoder_funcs->prepare( &decoder, size, glyph_index );
if ( error )
goto Glyph_Build_Finished;
#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
/* choose which CFF renderer to use */
- if ( driver->hinting_engine == FT_CFF_HINTING_FREETYPE )
- error = cff_decoder_parse_charstrings( &decoder,
- charstring,
- charstring_len );
+ if ( driver->hinting_engine == FT_HINTING_FREETYPE )
+ error = decoder_funcs->parse_charstrings_old( &decoder,
+ charstring,
+ charstring_len,
+ 0 );
else
#endif
{
- error = cf2_decoder_parse_charstrings( &decoder,
- charstring,
- charstring_len );
+ psaux->ps_decoder_init( &psdecoder, &decoder, FALSE );
+
+ error = decoder_funcs->parse_charstrings( &psdecoder,
+ charstring,
+ charstring_len );
/* Adobe's engine uses 16.16 numbers everywhere; */
/* as a consequence, glyphs larger than 2000ppem get rejected */
@@ -2856,9 +453,9 @@
force_scaling = TRUE;
glyph->hint = hinting;
- error = cf2_decoder_parse_charstrings( &decoder,
- charstring,
- charstring_len );
+ error = decoder_funcs->parse_charstrings( &psdecoder,
+ charstring,
+ charstring_len );
}
}
@@ -2896,7 +493,7 @@
Glyph_Build_Finished:
/* save new glyph tables, if no error */
if ( !error )
- cff_builder_done( &decoder.builder );
+ decoder.builder.funcs.done( &decoder.builder );
/* XXX: anything to do for broken glyph entry? */
}
@@ -2949,7 +546,6 @@
{
FT_BBox cbox;
FT_Glyph_Metrics* metrics = &glyph->root.metrics;
- FT_Vector advance;
FT_Bool has_vertical_info;
@@ -3014,26 +610,27 @@
glyph->root.outline.flags |= FT_OUTLINE_REVERSE_FILL;
- if ( !( font_matrix.xx == 0x10000L &&
- font_matrix.yy == 0x10000L &&
- font_matrix.xy == 0 &&
- font_matrix.yx == 0 ) )
+ /* apply the font matrix, if any */
+ if ( font_matrix.xx != 0x10000L || font_matrix.yy != 0x10000L ||
+ font_matrix.xy != 0 || font_matrix.yx != 0 )
+ {
FT_Outline_Transform( &glyph->root.outline, &font_matrix );
- if ( !( font_offset.x == 0 &&
- font_offset.y == 0 ) )
+ metrics->horiAdvance = FT_MulFix( metrics->horiAdvance,
+ font_matrix.xx );
+ metrics->vertAdvance = FT_MulFix( metrics->vertAdvance,
+ font_matrix.yy );
+ }
+
+ if ( font_offset.x || font_offset.y )
+ {
FT_Outline_Translate( &glyph->root.outline,
- font_offset.x, font_offset.y );
+ font_offset.x,
+ font_offset.y );
- advance.x = metrics->horiAdvance;
- advance.y = 0;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->horiAdvance = advance.x + font_offset.x;
-
- advance.x = 0;
- advance.y = metrics->vertAdvance;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->vertAdvance = advance.y + font_offset.y;
+ metrics->horiAdvance += font_offset.x;
+ metrics->vertAdvance += font_offset.y;
+ }
if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 || force_scaling )
{
@@ -3064,9 +661,7 @@
metrics->width = cbox.xMax - cbox.xMin;
metrics->height = cbox.yMax - cbox.yMin;
- if ( !face->horizontal.number_Of_HMetrics )
- metrics->horiBearingX = cbox.xMin;
-
+ metrics->horiBearingX = cbox.xMin;
metrics->horiBearingY = cbox.yMax;
if ( has_vertical_info )
diff --git a/src/cff/cffgload.h b/src/cff/cffgload.h
index 5f2655f..803f397 100644
--- a/src/cff/cffgload.h
+++ b/src/cff/cffgload.h
@@ -4,7 +4,7 @@
/* */
/* OpenType Glyph Loader (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,125 +16,17 @@
/***************************************************************************/
-#ifndef __CFFGLOAD_H__
-#define __CFFGLOAD_H__
+#ifndef CFFGLOAD_H_
+#define CFFGLOAD_H_
#include <ft2build.h>
#include FT_FREETYPE_H
-#include "cffobjs.h"
+#include FT_INTERNAL_CFF_OBJECTS_TYPES_H
FT_BEGIN_HEADER
-
-#define CFF_MAX_OPERANDS 48
-#define CFF_MAX_SUBRS_CALLS 16 /* maximum subroutine nesting; */
- /* only 10 are allowed but there exist */
- /* fonts like `HiraKakuProN-W3.ttf' */
- /* (Hiragino Kaku Gothic ProN W3; */
- /* 8.2d6e1; 2014-12-19) that exceed */
- /* this limit */
-#define CFF_MAX_TRANS_ELEMENTS 32
-
-
- /*************************************************************************/
- /* */
- /* <Structure> */
- /* CFF_Builder */
- /* */
- /* <Description> */
- /* A structure used during glyph loading to store its outline. */
- /* */
- /* <Fields> */
- /* memory :: The current memory object. */
- /* */
- /* face :: The current face object. */
- /* */
- /* glyph :: The current glyph slot. */
- /* */
- /* loader :: The current glyph loader. */
- /* */
- /* base :: The base glyph outline. */
- /* */
- /* current :: The current glyph outline. */
- /* */
- /* pos_x :: The horizontal translation (if composite glyph). */
- /* */
- /* pos_y :: The vertical translation (if composite glyph). */
- /* */
- /* left_bearing :: The left side bearing point. */
- /* */
- /* advance :: The horizontal advance vector. */
- /* */
- /* bbox :: Unused. */
- /* */
- /* path_begun :: A flag which indicates that a new path has begun. */
- /* */
- /* load_points :: If this flag is not set, no points are loaded. */
- /* */
- /* no_recurse :: Set but not used. */
- /* */
- /* metrics_only :: A boolean indicating that we only want to compute */
- /* the metrics of a given glyph, not load all of its */
- /* points. */
- /* */
- /* hints_funcs :: Auxiliary pointer for hinting. */
- /* */
- /* hints_globals :: Auxiliary pointer for hinting. */
- /* */
- typedef struct CFF_Builder_
- {
- FT_Memory memory;
- TT_Face face;
- CFF_GlyphSlot glyph;
- FT_GlyphLoader loader;
- FT_Outline* base;
- FT_Outline* current;
-
- FT_Pos pos_x;
- FT_Pos pos_y;
-
- FT_Vector left_bearing;
- FT_Vector advance;
-
- FT_BBox bbox; /* bounding box */
- FT_Bool path_begun;
- FT_Bool load_points;
- FT_Bool no_recurse;
-
- FT_Bool metrics_only;
-
- void* hints_funcs; /* hinter-specific */
- void* hints_globals; /* hinter-specific */
-
- } CFF_Builder;
-
-
- FT_LOCAL( FT_Error )
- cff_check_points( CFF_Builder* builder,
- FT_Int count );
-
- FT_LOCAL( void )
- cff_builder_add_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y,
- FT_Byte flag );
- FT_LOCAL( FT_Error )
- cff_builder_add_point1( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y );
- FT_LOCAL( FT_Error )
- cff_builder_start_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y );
- FT_LOCAL( void )
- cff_builder_close_contour( CFF_Builder* builder );
-
-
- FT_LOCAL( FT_Int )
- cff_lookup_glyph_by_stdcharcode( CFF_Font cff,
- FT_Int charcode );
FT_LOCAL( FT_Error )
cff_get_glyph_data( TT_Face face,
FT_UInt glyph_index,
@@ -146,74 +38,6 @@
FT_ULong length );
- /* execution context charstring zone */
-
- typedef struct CFF_Decoder_Zone_
- {
- FT_Byte* base;
- FT_Byte* limit;
- FT_Byte* cursor;
-
- } CFF_Decoder_Zone;
-
-
- typedef struct CFF_Decoder_
- {
- CFF_Builder builder;
- CFF_Font cff;
-
- FT_Fixed stack[CFF_MAX_OPERANDS + 1];
- FT_Fixed* top;
-
- CFF_Decoder_Zone zones[CFF_MAX_SUBRS_CALLS + 1];
- CFF_Decoder_Zone* zone;
-
- FT_Int flex_state;
- FT_Int num_flex_vectors;
- FT_Vector flex_vectors[7];
-
- FT_Pos glyph_width;
- FT_Pos nominal_width;
-
- FT_Bool read_width;
- FT_Bool width_only;
- FT_Int num_hints;
- FT_Fixed buildchar[CFF_MAX_TRANS_ELEMENTS];
-
- FT_UInt num_locals;
- FT_UInt num_globals;
-
- FT_Int locals_bias;
- FT_Int globals_bias;
-
- FT_Byte** locals;
- FT_Byte** globals;
-
- FT_Byte** glyph_names; /* for pure CFF fonts only */
- FT_UInt num_glyphs; /* number of glyphs in font */
-
- FT_Render_Mode hint_mode;
-
- FT_Bool seac;
-
- CFF_SubFont current_subfont; /* for current glyph_index */
-
- } CFF_Decoder;
-
-
- FT_LOCAL( void )
- cff_decoder_init( CFF_Decoder* decoder,
- TT_Face face,
- CFF_Size size,
- CFF_GlyphSlot slot,
- FT_Bool hinting,
- FT_Render_Mode hint_mode );
-
- FT_LOCAL( FT_Error )
- cff_decoder_prepare( CFF_Decoder* decoder,
- CFF_Size size,
- FT_UInt glyph_index );
-
#if 0 /* unused until we support pure CFF fonts */
/* Compute the maximum advance width of a font through quick parsing */
@@ -223,12 +47,6 @@
#endif /* 0 */
-#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- FT_LOCAL( FT_Error )
- cff_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len );
-#endif
FT_LOCAL( FT_Error )
cff_slot_load( CFF_GlyphSlot glyph,
@@ -239,7 +57,7 @@
FT_END_HEADER
-#endif /* __CFFGLOAD_H__ */
+#endif /* CFFGLOAD_H_ */
/* END */
diff --git a/src/cff/cffload.c b/src/cff/cffload.c
index fcb7348..1c6fe51 100644
--- a/src/cff/cffload.c
+++ b/src/cff/cffload.c
@@ -4,7 +4,7 @@
/* */
/* OpenType and CFF data/program tables loader (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,6 +22,12 @@
#include FT_INTERNAL_STREAM_H
#include FT_TRUETYPE_TAGS_H
#include FT_TYPE1_TABLES_H
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#include FT_MULTIPLE_MASTERS_H
+#include FT_SERVICE_MULTIPLE_MASTERS_H
+#endif
#include "cffload.h"
#include "cffparse.h"
@@ -29,6 +35,9 @@
#include "cfferrs.h"
+#define FT_FIXED_ONE ( (FT_Fixed)0x10000 )
+
+
#if 1
static const FT_UShort cff_isoadobe_charset[229] =
@@ -225,19 +234,33 @@
static FT_Error
cff_index_init( CFF_Index idx,
FT_Stream stream,
- FT_Bool load )
+ FT_Bool load,
+ FT_Bool cff2 )
{
FT_Error error;
FT_Memory memory = stream->memory;
- FT_UShort count;
+ FT_UInt count;
- FT_MEM_ZERO( idx, sizeof ( *idx ) );
+ FT_ZERO( idx );
idx->stream = stream;
idx->start = FT_STREAM_POS();
- if ( !FT_READ_USHORT( count ) &&
- count > 0 )
+
+ if ( cff2 )
+ {
+ if ( FT_READ_ULONG( count ) )
+ goto Exit;
+ idx->hdr_size = 5;
+ }
+ else
+ {
+ if ( FT_READ_USHORT( count ) )
+ goto Exit;
+ idx->hdr_size = 3;
+ }
+
+ if ( count > 0 )
{
FT_Byte offsize;
FT_ULong size;
@@ -258,7 +281,7 @@
idx->off_size = offsize;
size = (FT_ULong)( count + 1 ) * offsize;
- idx->data_offset = idx->start + 3 + size;
+ idx->data_offset = idx->start + idx->hdr_size + size;
if ( FT_STREAM_SKIP( size - offsize ) )
goto Exit;
@@ -310,7 +333,7 @@
FT_FRAME_RELEASE( idx->bytes );
FT_FREE( idx->offsets );
- FT_MEM_ZERO( idx, sizeof ( *idx ) );
+ FT_ZERO( idx );
}
}
@@ -323,7 +346,7 @@
FT_Memory memory = stream->memory;
- if ( idx->count > 0 && idx->offsets == NULL )
+ if ( idx->count > 0 && !idx->offsets )
{
FT_Byte offsize = idx->off_size;
FT_ULong data_size;
@@ -335,7 +358,7 @@
data_size = (FT_ULong)( idx->count + 1 ) * offsize;
if ( FT_NEW_ARRAY( idx->offsets, idx->count + 1 ) ||
- FT_STREAM_SEEK( idx->start + 3 ) ||
+ FT_STREAM_SEEK( idx->start + idx->hdr_size ) ||
FT_FRAME_ENTER( data_size ) )
goto Exit;
@@ -382,28 +405,31 @@
static FT_Error
cff_index_get_pointers( CFF_Index idx,
FT_Byte*** table,
- FT_Byte** pool )
+ FT_Byte** pool,
+ FT_ULong* pool_size )
{
FT_Error error = FT_Err_Ok;
FT_Memory memory = idx->stream->memory;
FT_Byte** t = NULL;
FT_Byte* new_bytes = NULL;
+ FT_ULong new_size;
*table = NULL;
- if ( idx->offsets == NULL )
+ if ( !idx->offsets )
{
error = cff_index_load_offsets( idx );
if ( error )
goto Exit;
}
- if ( idx->count > 0 &&
- !FT_NEW_ARRAY( t, idx->count + 1 ) &&
- ( !pool || !FT_ALLOC( new_bytes,
- idx->data_size + idx->count ) ) )
+ new_size = idx->data_size + idx->count;
+
+ if ( idx->count > 0 &&
+ !FT_NEW_ARRAY( t, idx->count + 1 ) &&
+ ( !pool || !FT_ALLOC( new_bytes, new_size ) ) )
{
FT_ULong n, cur_offset;
FT_ULong extra = 0;
@@ -459,6 +485,8 @@
if ( pool )
*pool = new_bytes;
+ if ( pool_size )
+ *pool_size = new_size;
}
Exit:
@@ -488,7 +516,7 @@
FT_ULong pos = element * idx->off_size;
- if ( FT_STREAM_SEEK( idx->start + 3 + pos ) )
+ if ( FT_STREAM_SEEK( idx->start + idx->hdr_size + pos ) )
goto Exit;
off1 = cff_index_read_offset( idx, &error );
@@ -501,8 +529,8 @@
{
element++;
off2 = cff_index_read_offset( idx, &error );
- }
- while ( off2 == 0 && element < idx->count );
+
+ } while ( off2 == 0 && element < idx->count );
}
}
else /* use offsets table */
@@ -584,20 +612,26 @@
FT_UInt element )
{
CFF_Index idx = &font->name_index;
- FT_Memory memory = idx->stream->memory;
+ FT_Memory memory;
FT_Byte* bytes;
FT_ULong byte_len;
FT_Error error;
FT_String* name = 0;
+ if ( !idx->stream ) /* CFF2 does not include a name index */
+ goto Exit;
+
+ memory = idx->stream->memory;
+
error = cff_index_access_element( idx, element, &bytes, &byte_len );
if ( error )
goto Exit;
if ( !FT_ALLOC( name, byte_len + 1 ) )
{
- FT_MEM_COPY( name, bytes, byte_len );
+ if ( byte_len )
+ FT_MEM_COPY( name, bytes, byte_len );
name[byte_len] = 0;
}
cff_index_forget_element( idx, &bytes );
@@ -719,6 +753,11 @@
FT_Byte fd = 0;
+ /* if there is no FDSelect, return zero */
+ /* Note: CFF2 with just one Font Dict has no FDSelect */
+ if ( !fdselect->data )
+ goto Exit;
+
switch ( fdselect->format )
{
case 0:
@@ -771,6 +810,7 @@
;
}
+ Exit:
return fd;
}
@@ -809,7 +849,7 @@
/* When multiple GIDs map to the same CID, we choose the lowest */
/* GID. This is not described in any spec, but it matches the */
/* behaviour of recent Acroread versions. */
- for ( j = (FT_Long)num_glyphs - 1; j >= 0 ; j-- )
+ for ( j = (FT_Long)num_glyphs - 1; j >= 0; j-- )
charset->cids[charset->sids[j]] = (FT_UShort)j;
charset->max_cid = max_cid;
@@ -871,8 +911,8 @@
FT_UShort glyph_sid;
- /* If the the offset is greater than 2, we have to parse the */
- /* charset table. */
+ /* If the offset is greater than 2, we have to parse the charset */
+ /* table. */
if ( offset > 2 )
{
FT_UInt j;
@@ -1049,6 +1089,523 @@
static void
+ cff_vstore_done( CFF_VStoreRec* vstore,
+ FT_Memory memory )
+ {
+ FT_UInt i;
+
+
+ /* free regionList and axisLists */
+ if ( vstore->varRegionList )
+ {
+ for ( i = 0; i < vstore->regionCount; i++ )
+ FT_FREE( vstore->varRegionList[i].axisList );
+ }
+ FT_FREE( vstore->varRegionList );
+
+ /* free varData and indices */
+ if ( vstore->varData )
+ {
+ for ( i = 0; i < vstore->dataCount; i++ )
+ FT_FREE( vstore->varData[i].regionIndices );
+ }
+ FT_FREE( vstore->varData );
+ }
+
+
+ /* convert 2.14 to Fixed */
+ #define FT_fdot14ToFixed( x ) ( (FT_Fixed)( (FT_ULong)(x) << 2 ) )
+
+
+ static FT_Error
+ cff_vstore_load( CFF_VStoreRec* vstore,
+ FT_Stream stream,
+ FT_ULong base_offset,
+ FT_ULong offset )
+ {
+ FT_Memory memory = stream->memory;
+ FT_Error error = FT_ERR( Invalid_File_Format );
+
+ FT_ULong* dataOffsetArray = NULL;
+ FT_UInt i, j;
+
+
+ /* no offset means no vstore to parse */
+ if ( offset )
+ {
+ FT_UInt vsOffset;
+ FT_UInt format;
+ FT_ULong regionListOffset;
+
+
+ /* we need to parse the table to determine its size; */
+ /* skip table length */
+ if ( FT_STREAM_SEEK( base_offset + offset ) ||
+ FT_STREAM_SKIP( 2 ) )
+ goto Exit;
+
+ /* actual variation store begins after the length */
+ vsOffset = FT_STREAM_POS();
+
+ /* check the header */
+ if ( FT_READ_USHORT( format ) )
+ goto Exit;
+ if ( format != 1 )
+ {
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ /* read top level fields */
+ if ( FT_READ_ULONG( regionListOffset ) ||
+ FT_READ_USHORT( vstore->dataCount ) )
+ goto Exit;
+
+ /* make temporary copy of item variation data offsets; */
+ /* we'll parse region list first, then come back */
+ if ( FT_NEW_ARRAY( dataOffsetArray, vstore->dataCount ) )
+ goto Exit;
+
+ for ( i = 0; i < vstore->dataCount; i++ )
+ {
+ if ( FT_READ_ULONG( dataOffsetArray[i] ) )
+ goto Exit;
+ }
+
+ /* parse regionList and axisLists */
+ if ( FT_STREAM_SEEK( vsOffset + regionListOffset ) ||
+ FT_READ_USHORT( vstore->axisCount ) ||
+ FT_READ_USHORT( vstore->regionCount ) )
+ goto Exit;
+
+ if ( FT_NEW_ARRAY( vstore->varRegionList, vstore->regionCount ) )
+ goto Exit;
+
+ for ( i = 0; i < vstore->regionCount; i++ )
+ {
+ CFF_VarRegion* region = &vstore->varRegionList[i];
+
+
+ if ( FT_NEW_ARRAY( region->axisList, vstore->axisCount ) )
+ goto Exit;
+
+ for ( j = 0; j < vstore->axisCount; j++ )
+ {
+ CFF_AxisCoords* axis = ®ion->axisList[j];
+
+ FT_Int16 start14, peak14, end14;
+
+
+ if ( FT_READ_SHORT( start14 ) ||
+ FT_READ_SHORT( peak14 ) ||
+ FT_READ_SHORT( end14 ) )
+ goto Exit;
+
+ axis->startCoord = FT_fdot14ToFixed( start14 );
+ axis->peakCoord = FT_fdot14ToFixed( peak14 );
+ axis->endCoord = FT_fdot14ToFixed( end14 );
+ }
+ }
+
+ /* use dataOffsetArray now to parse varData items */
+ if ( FT_NEW_ARRAY( vstore->varData, vstore->dataCount ) )
+ goto Exit;
+
+ for ( i = 0; i < vstore->dataCount; i++ )
+ {
+ CFF_VarData* data = &vstore->varData[i];
+
+
+ if ( FT_STREAM_SEEK( vsOffset + dataOffsetArray[i] ) )
+ goto Exit;
+
+ /* ignore `itemCount' and `shortDeltaCount' */
+ /* because CFF2 has no delta sets */
+ if ( FT_STREAM_SKIP( 4 ) )
+ goto Exit;
+
+ /* Note: just record values; consistency is checked later */
+ /* by cff_blend_build_vector when it consumes `vstore' */
+
+ if ( FT_READ_USHORT( data->regionIdxCount ) )
+ goto Exit;
+
+ if ( FT_NEW_ARRAY( data->regionIndices, data->regionIdxCount ) )
+ goto Exit;
+
+ for ( j = 0; j < data->regionIdxCount; j++ )
+ {
+ if ( FT_READ_USHORT( data->regionIndices[j] ) )
+ goto Exit;
+ }
+ }
+ }
+
+ error = FT_Err_Ok;
+
+ Exit:
+ FT_FREE( dataOffsetArray );
+ if ( error )
+ cff_vstore_done( vstore, memory );
+
+ return error;
+ }
+
+
+ /* Clear blend stack (after blend values are consumed). */
+ /* */
+ /* TODO: Should do this in cff_run_parse, but subFont */
+ /* ref is not available there. */
+ /* */
+ /* Allocation is not changed when stack is cleared. */
+ FT_LOCAL_DEF( void )
+ cff_blend_clear( CFF_SubFont subFont )
+ {
+ subFont->blend_top = subFont->blend_stack;
+ subFont->blend_used = 0;
+ }
+
+
+ /* Blend numOperands on the stack, */
+ /* store results into the first numBlends values, */
+ /* then pop remaining arguments. */
+ /* */
+ /* This is comparable to `cf2_doBlend' but */
+ /* the cffparse stack is different and can't be written. */
+ /* Blended values are written to a different buffer, */
+ /* using reserved operator 255. */
+ /* */
+ /* Blend calculation is done in 16.16 fixed point. */
+ FT_LOCAL_DEF( FT_Error )
+ cff_blend_doBlend( CFF_SubFont subFont,
+ CFF_Parser parser,
+ FT_UInt numBlends )
+ {
+ FT_UInt delta;
+ FT_UInt base;
+ FT_UInt i, j;
+ FT_UInt size;
+
+ CFF_Blend blend = &subFont->blend;
+
+ FT_Memory memory = subFont->blend.font->memory; /* for FT_REALLOC */
+ FT_Error error = FT_Err_Ok; /* for FT_REALLOC */
+
+ /* compute expected number of operands for this blend */
+ FT_UInt numOperands = (FT_UInt)( numBlends * blend->lenBV );
+ FT_UInt count = (FT_UInt)( parser->top - 1 - parser->stack );
+
+
+ if ( numOperands > count )
+ {
+ FT_TRACE4(( " cff_blend_doBlend: Stack underflow %d argument%s\n",
+ count,
+ count == 1 ? "" : "s" ));
+
+ error = FT_THROW( Stack_Underflow );
+ goto Exit;
+ }
+
+ /* check whether we have room for `numBlends' values at `blend_top' */
+ size = 5 * numBlends; /* add 5 bytes per entry */
+ if ( subFont->blend_used + size > subFont->blend_alloc )
+ {
+ FT_Byte* blend_stack_old = subFont->blend_stack;
+ FT_Byte* blend_top_old = subFont->blend_top;
+
+
+ /* increase or allocate `blend_stack' and reset `blend_top'; */
+ /* prepare to append `numBlends' values to the buffer */
+ if ( FT_REALLOC( subFont->blend_stack,
+ subFont->blend_alloc,
+ subFont->blend_alloc + size ) )
+ goto Exit;
+
+ subFont->blend_top = subFont->blend_stack + subFont->blend_used;
+ subFont->blend_alloc += size;
+
+ /* iterate over the parser stack and adjust pointers */
+ /* if the reallocated buffer has a different address */
+ if ( blend_stack_old &&
+ subFont->blend_stack != blend_stack_old )
+ {
+ FT_PtrDist offset = subFont->blend_stack - blend_stack_old;
+ FT_Byte** p;
+
+
+ for ( p = parser->stack; p < parser->top; p++ )
+ {
+ if ( *p >= blend_stack_old && *p < blend_top_old )
+ *p += offset;
+ }
+ }
+ }
+ subFont->blend_used += size;
+
+ base = count - numOperands; /* index of first blend arg */
+ delta = base + numBlends; /* index of first delta arg */
+
+ for ( i = 0; i < numBlends; i++ )
+ {
+ const FT_Int32* weight = &blend->BV[1];
+ FT_UInt32 sum;
+
+
+ /* convert inputs to 16.16 fixed point */
+ sum = cff_parse_num( parser, &parser->stack[i + base] ) * 0x10000;
+
+ for ( j = 1; j < blend->lenBV; j++ )
+ sum += cff_parse_num( parser, &parser->stack[delta++] ) * *weight++;
+
+ /* point parser stack to new value on blend_stack */
+ parser->stack[i + base] = subFont->blend_top;
+
+ /* Push blended result as Type 2 5-byte fixed point number. This */
+ /* will not conflict with actual DICTs because 255 is a reserved */
+ /* opcode in both CFF and CFF2 DICTs. See `cff_parse_num' for */
+ /* decode of this, which rounds to an integer. */
+ *subFont->blend_top++ = 255;
+ *subFont->blend_top++ = (FT_Byte)( sum >> 24 );
+ *subFont->blend_top++ = (FT_Byte)( sum >> 16 );
+ *subFont->blend_top++ = (FT_Byte)( sum >> 8 );
+ *subFont->blend_top++ = (FT_Byte)sum;
+ }
+
+ /* leave only numBlends results on parser stack */
+ parser->top = &parser->stack[base + numBlends];
+
+ Exit:
+ return error;
+ }
+
+
+ /* Compute a blend vector from variation store index and normalized */
+ /* vector based on pseudo-code in OpenType Font Variations Overview. */
+ /* */
+ /* Note: lenNDV == 0 produces a default blend vector, (1,0,0,...). */
+ FT_LOCAL_DEF( FT_Error )
+ cff_blend_build_vector( CFF_Blend blend,
+ FT_UInt vsindex,
+ FT_UInt lenNDV,
+ FT_Fixed* NDV )
+ {
+ FT_Error error = FT_Err_Ok; /* for FT_REALLOC */
+ FT_Memory memory = blend->font->memory; /* for FT_REALLOC */
+
+ FT_UInt len;
+ CFF_VStore vs;
+ CFF_VarData* varData;
+ FT_UInt master;
+
+
+ FT_ASSERT( lenNDV == 0 || NDV );
+
+ blend->builtBV = FALSE;
+
+ vs = &blend->font->vstore;
+
+ /* VStore and fvar must be consistent */
+ if ( lenNDV != 0 && lenNDV != vs->axisCount )
+ {
+ FT_TRACE4(( " cff_blend_build_vector: Axis count mismatch\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ if ( vsindex >= vs->dataCount )
+ {
+ FT_TRACE4(( " cff_blend_build_vector: vsindex out of range\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ /* select the item variation data structure */
+ varData = &vs->varData[vsindex];
+
+ /* prepare buffer for the blend vector */
+ len = varData->regionIdxCount + 1; /* add 1 for default component */
+ if ( FT_REALLOC( blend->BV,
+ blend->lenBV * sizeof( *blend->BV ),
+ len * sizeof( *blend->BV ) ) )
+ goto Exit;
+
+ blend->lenBV = len;
+
+ /* outer loop steps through master designs to be blended */
+ for ( master = 0; master < len; master++ )
+ {
+ FT_UInt j;
+ FT_UInt idx;
+ CFF_VarRegion* varRegion;
+
+
+ /* default factor is always one */
+ if ( master == 0 )
+ {
+ blend->BV[master] = FT_FIXED_ONE;
+ FT_TRACE4(( " build blend vector len %d\n"
+ " [ %f ",
+ len,
+ blend->BV[master] / 65536.0 ));
+ continue;
+ }
+
+ /* VStore array does not include default master, so subtract one */
+ idx = varData->regionIndices[master - 1];
+ varRegion = &vs->varRegionList[idx];
+
+ if ( idx >= vs->regionCount )
+ {
+ FT_TRACE4(( " cff_blend_build_vector:"
+ " region index out of range\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ /* Note: `lenNDV' could be zero. */
+ /* In that case, build default blend vector (1,0,0...). */
+ if ( !lenNDV )
+ {
+ blend->BV[master] = 0;
+ continue;
+ }
+
+ /* In the normal case, initialize each component to 1 */
+ /* before inner loop. */
+ blend->BV[master] = FT_FIXED_ONE; /* default */
+
+ /* inner loop steps through axes in this region */
+ for ( j = 0; j < lenNDV; j++ )
+ {
+ CFF_AxisCoords* axis = &varRegion->axisList[j];
+ FT_Fixed axisScalar;
+
+
+ /* compute the scalar contribution of this axis; */
+ /* ignore invalid ranges */
+ if ( axis->startCoord > axis->peakCoord ||
+ axis->peakCoord > axis->endCoord )
+ axisScalar = FT_FIXED_ONE;
+
+ else if ( axis->startCoord < 0 &&
+ axis->endCoord > 0 &&
+ axis->peakCoord != 0 )
+ axisScalar = FT_FIXED_ONE;
+
+ /* peak of 0 means ignore this axis */
+ else if ( axis->peakCoord == 0 )
+ axisScalar = FT_FIXED_ONE;
+
+ /* ignore this region if coords are out of range */
+ else if ( NDV[j] < axis->startCoord ||
+ NDV[j] > axis->endCoord )
+ axisScalar = 0;
+
+ /* calculate a proportional factor */
+ else
+ {
+ if ( NDV[j] == axis->peakCoord )
+ axisScalar = FT_FIXED_ONE;
+ else if ( NDV[j] < axis->peakCoord )
+ axisScalar = FT_DivFix( NDV[j] - axis->startCoord,
+ axis->peakCoord - axis->startCoord );
+ else
+ axisScalar = FT_DivFix( axis->endCoord - NDV[j],
+ axis->endCoord - axis->peakCoord );
+ }
+
+ /* take product of all the axis scalars */
+ blend->BV[master] = FT_MulFix( blend->BV[master], axisScalar );
+ }
+
+ FT_TRACE4(( ", %f ",
+ blend->BV[master] / 65536.0 ));
+ }
+
+ FT_TRACE4(( "]\n" ));
+
+ /* record the parameters used to build the blend vector */
+ blend->lastVsindex = vsindex;
+
+ if ( lenNDV != 0 )
+ {
+ /* user has set a normalized vector */
+ if ( FT_REALLOC( blend->lastNDV,
+ blend->lenNDV * sizeof ( *NDV ),
+ lenNDV * sizeof ( *NDV ) ) )
+ goto Exit;
+
+ FT_MEM_COPY( blend->lastNDV,
+ NDV,
+ lenNDV * sizeof ( *NDV ) );
+ }
+
+ blend->lenNDV = lenNDV;
+ blend->builtBV = TRUE;
+
+ Exit:
+ return error;
+ }
+
+
+ /* `lenNDV' is zero for default vector; */
+ /* return TRUE if blend vector needs to be built. */
+ FT_LOCAL_DEF( FT_Bool )
+ cff_blend_check_vector( CFF_Blend blend,
+ FT_UInt vsindex,
+ FT_UInt lenNDV,
+ FT_Fixed* NDV )
+ {
+ if ( !blend->builtBV ||
+ blend->lastVsindex != vsindex ||
+ blend->lenNDV != lenNDV ||
+ ( lenNDV &&
+ ft_memcmp( NDV,
+ blend->lastNDV,
+ lenNDV * sizeof ( *NDV ) ) != 0 ) )
+ {
+ /* need to build blend vector */
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
+ FT_LOCAL_DEF( FT_Error )
+ cff_get_var_blend( CFF_Face face,
+ FT_UInt *num_coords,
+ FT_Fixed* *coords,
+ FT_Fixed* *normalizedcoords,
+ FT_MM_Var* *mm_var )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ return mm->get_var_blend( FT_FACE( face ),
+ num_coords,
+ coords,
+ normalizedcoords,
+ mm_var );
+ }
+
+
+ FT_LOCAL_DEF( void )
+ cff_done_blend( CFF_Face face )
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+
+ if (mm)
+ mm->done_blend( FT_FACE( face ) );
+ }
+
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+
+
+ static void
cff_encoding_done( CFF_Encoding encoding )
{
encoding->format = 0;
@@ -1300,26 +1857,156 @@
}
+ /* Parse private dictionary; first call is always from `cff_face_init', */
+ /* so NDV has not been set for CFF2 variation. */
+ /* */
+ /* `cff_slot_load' must call this function each time NDV changes. */
+ FT_LOCAL_DEF( FT_Error )
+ cff_load_private_dict( CFF_Font font,
+ CFF_SubFont subfont,
+ FT_UInt lenNDV,
+ FT_Fixed* NDV )
+ {
+ FT_Error error = FT_Err_Ok;
+ CFF_ParserRec parser;
+ CFF_FontRecDict top = &subfont->font_dict;
+ CFF_Private priv = &subfont->private_dict;
+ FT_Stream stream = font->stream;
+ FT_UInt stackSize;
+
+
+ /* store handle needed to access memory, vstore for blend; */
+ /* we need this for clean-up even if there is no private DICT */
+ subfont->blend.font = font;
+ subfont->blend.usedBV = FALSE; /* clear state */
+
+ if ( !top->private_offset || !top->private_size )
+ goto Exit2; /* no private DICT, do nothing */
+
+ /* set defaults */
+ FT_ZERO( priv );
+
+ priv->blue_shift = 7;
+ priv->blue_fuzz = 1;
+ priv->lenIV = -1;
+ priv->expansion_factor = (FT_Fixed)( 0.06 * 0x10000L );
+ priv->blue_scale = (FT_Fixed)( 0.039625 * 0x10000L * 1000 );
+
+ /* provide inputs for blend calculations */
+ priv->subfont = subfont;
+ subfont->lenNDV = lenNDV;
+ subfont->NDV = NDV;
+
+ /* add 1 for the operator */
+ stackSize = font->cff2 ? font->top_font.font_dict.maxstack + 1
+ : CFF_MAX_STACK_DEPTH + 1;
+
+ if ( cff_parser_init( &parser,
+ font->cff2 ? CFF2_CODE_PRIVATE : CFF_CODE_PRIVATE,
+ priv,
+ font->library,
+ stackSize,
+ top->num_designs,
+ top->num_axes ) )
+ goto Exit;
+
+ if ( FT_STREAM_SEEK( font->base_offset + top->private_offset ) ||
+ FT_FRAME_ENTER( top->private_size ) )
+ goto Exit;
+
+ FT_TRACE4(( " private dictionary:\n" ));
+ error = cff_parser_run( &parser,
+ (FT_Byte*)stream->cursor,
+ (FT_Byte*)stream->limit );
+ FT_FRAME_EXIT();
+
+ if ( error )
+ goto Exit;
+
+ /* ensure that `num_blue_values' is even */
+ priv->num_blue_values &= ~1;
+
+ /* sanitize `initialRandomSeed' to be a positive value, if necessary; */
+ /* this is not mandated by the specification but by our implementation */
+ if ( priv->initial_random_seed < 0 )
+ priv->initial_random_seed = -priv->initial_random_seed;
+ else if ( priv->initial_random_seed == 0 )
+ priv->initial_random_seed = 987654321;
+
+ /* some sanitizing to avoid overflows later on; */
+ /* the upper limits are ad-hoc values */
+ if ( priv->blue_shift > 1000 || priv->blue_shift < 0 )
+ {
+ FT_TRACE2(( "cff_load_private_dict:"
+ " setting unlikely BlueShift value %d to default (7)\n",
+ priv->blue_shift ));
+ priv->blue_shift = 7;
+ }
+
+ if ( priv->blue_fuzz > 1000 || priv->blue_fuzz < 0 )
+ {
+ FT_TRACE2(( "cff_load_private_dict:"
+ " setting unlikely BlueFuzz value %d to default (1)\n",
+ priv->blue_fuzz ));
+ priv->blue_fuzz = 1;
+ }
+
+ Exit:
+ /* clean up */
+ cff_blend_clear( subfont ); /* clear blend stack */
+ cff_parser_done( &parser ); /* free parser stack */
+
+ Exit2:
+ /* no clean up (parser not initialized) */
+ return error;
+ }
+
+
+ /* There are 3 ways to call this function, distinguished by code. */
+ /* */
+ /* . CFF_CODE_TOPDICT for either a CFF Top DICT or a CFF Font DICT */
+ /* . CFF2_CODE_TOPDICT for CFF2 Top DICT */
+ /* . CFF2_CODE_FONTDICT for CFF2 Font DICT */
+
static FT_Error
- cff_subfont_load( CFF_SubFont font,
+ cff_subfont_load( CFF_SubFont subfont,
CFF_Index idx,
FT_UInt font_index,
FT_Stream stream,
FT_ULong base_offset,
- FT_Library library )
+ FT_UInt code,
+ CFF_Font font,
+ CFF_Face face )
{
FT_Error error;
CFF_ParserRec parser;
FT_Byte* dict = NULL;
FT_ULong dict_len;
- CFF_FontRecDict top = &font->font_dict;
- CFF_Private priv = &font->private_dict;
+ CFF_FontRecDict top = &subfont->font_dict;
+ CFF_Private priv = &subfont->private_dict;
+
+ PSAux_Service psaux = (PSAux_Service)face->psaux;
+
+ FT_Bool cff2 = FT_BOOL( code == CFF2_CODE_TOPDICT ||
+ code == CFF2_CODE_FONTDICT );
+ FT_UInt stackSize = cff2 ? CFF2_DEFAULT_STACK
+ : CFF_MAX_STACK_DEPTH;
- cff_parser_init( &parser, CFF_CODE_TOPDICT, &font->font_dict, library );
+ /* Note: We use default stack size for CFF2 Font DICT because */
+ /* Top and Font DICTs are not allowed to have blend operators. */
+ error = cff_parser_init( &parser,
+ code,
+ &subfont->font_dict,
+ font->library,
+ stackSize,
+ 0,
+ 0 );
+ if ( error )
+ goto Exit;
/* set defaults */
- FT_MEM_ZERO( top, sizeof ( *top ) );
+ FT_ZERO( top );
top->underline_position = -( 100L << 16 );
top->underline_thickness = 50L << 16;
@@ -1342,14 +2029,35 @@
top->cid_ordering = 0xFFFFU;
top->cid_font_name = 0xFFFFU;
- error = cff_index_access_element( idx, font_index, &dict, &dict_len );
+ /* set default stack size */
+ top->maxstack = cff2 ? CFF2_DEFAULT_STACK : 48;
+
+ if ( idx->count ) /* count is nonzero for a real index */
+ error = cff_index_access_element( idx, font_index, &dict, &dict_len );
+ else
+ {
+ /* CFF2 has a fake top dict index; */
+ /* simulate `cff_index_access_element' */
+
+ /* Note: macros implicitly use `stream' and set `error' */
+ if ( FT_STREAM_SEEK( idx->data_offset ) ||
+ FT_FRAME_EXTRACT( idx->data_size, dict ) )
+ goto Exit;
+
+ dict_len = idx->data_size;
+ }
+
if ( !error )
{
FT_TRACE4(( " top dictionary:\n" ));
error = cff_parser_run( &parser, dict, dict + dict_len );
}
- cff_index_forget_element( idx, &dict );
+ /* clean up regardless of error */
+ if ( idx->count )
+ cff_index_forget_element( idx, &dict );
+ else
+ FT_FRAME_RELEASE( dict );
if ( error )
goto Exit;
@@ -1358,34 +2066,63 @@
if ( top->cid_registry != 0xFFFFU )
goto Exit;
- /* parse the private dictionary, if any */
- if ( top->private_offset && top->private_size )
+ /* Parse the private dictionary, if any. */
+ /* */
+ /* CFF2 does not have a private dictionary in the Top DICT */
+ /* but may have one in a Font DICT. We need to parse */
+ /* the latter here in order to load any local subrs. */
+ error = cff_load_private_dict( font, subfont, 0, 0 );
+ if ( error )
+ goto Exit;
+
+ if ( !cff2 )
{
- /* set defaults */
- FT_MEM_ZERO( priv, sizeof ( *priv ) );
+ /*
+ * Initialize the random number generator.
+ *
+ * . If we have a face-specific seed, use it.
+ * If non-zero, update it to a positive value.
+ *
+ * . Otherwise, use the seed from the CFF driver.
+ * If non-zero, update it to a positive value.
+ *
+ * . If the random value is zero, use the seed given by the subfont's
+ * `initialRandomSeed' value.
+ *
+ */
+ if ( face->root.internal->random_seed == -1 )
+ {
+ PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( face );
- priv->blue_shift = 7;
- priv->blue_fuzz = 1;
- priv->lenIV = -1;
- priv->expansion_factor = (FT_Fixed)( 0.06 * 0x10000L );
- priv->blue_scale = (FT_Fixed)( 0.039625 * 0x10000L * 1000 );
- cff_parser_init( &parser, CFF_CODE_PRIVATE, priv, library );
+ subfont->random = (FT_UInt32)driver->random_seed;
+ if ( driver->random_seed )
+ {
+ do
+ {
+ driver->random_seed =
+ (FT_Int32)psaux->cff_random( (FT_UInt32)driver->random_seed );
- if ( FT_STREAM_SEEK( base_offset + font->font_dict.private_offset ) ||
- FT_FRAME_ENTER( font->font_dict.private_size ) )
- goto Exit;
+ } while ( driver->random_seed < 0 );
+ }
+ }
+ else
+ {
+ subfont->random = (FT_UInt32)face->root.internal->random_seed;
+ if ( face->root.internal->random_seed )
+ {
+ do
+ {
+ face->root.internal->random_seed =
+ (FT_Int32)psaux->cff_random(
+ (FT_UInt32)face->root.internal->random_seed );
- FT_TRACE4(( " private dictionary:\n" ));
- error = cff_parser_run( &parser,
- (FT_Byte*)stream->cursor,
- (FT_Byte*)stream->limit );
- FT_FRAME_EXIT();
- if ( error )
- goto Exit;
+ } while ( face->root.internal->random_seed < 0 );
+ }
+ }
- /* ensure that `num_blue_values' is even */
- priv->num_blue_values &= ~1;
+ if ( !subfont->random )
+ subfont->random = (FT_UInt32)priv->initial_random_seed;
}
/* read the local subrs, if any */
@@ -1395,17 +2132,19 @@
priv->local_subrs_offset ) )
goto Exit;
- error = cff_index_init( &font->local_subrs_index, stream, 1 );
+ error = cff_index_init( &subfont->local_subrs_index, stream, 1, cff2 );
if ( error )
goto Exit;
- error = cff_index_get_pointers( &font->local_subrs_index,
- &font->local_subrs, NULL );
+ error = cff_index_get_pointers( &subfont->local_subrs_index,
+ &subfont->local_subrs, NULL, NULL );
if ( error )
goto Exit;
}
Exit:
+ cff_parser_done( &parser ); /* free parser stack */
+
return error;
}
@@ -1418,6 +2157,10 @@
{
cff_index_done( &subfont->local_subrs_index );
FT_FREE( subfont->local_subrs );
+
+ FT_FREE( subfont->blend.lastNDV );
+ FT_FREE( subfont->blend.BV );
+ FT_FREE( subfont->blend_stack );
}
}
@@ -1427,18 +2170,19 @@
FT_Stream stream,
FT_Int face_index,
CFF_Font font,
- FT_Bool pure_cff )
+ CFF_Face face,
+ FT_Bool pure_cff,
+ FT_Bool cff2 )
{
static const FT_Frame_Field cff_header_fields[] =
{
#undef FT_STRUCTURE
#define FT_STRUCTURE CFF_FontRec
- FT_FRAME_START( 4 ),
+ FT_FRAME_START( 3 ),
FT_FRAME_BYTE( version_major ),
FT_FRAME_BYTE( version_minor ),
FT_FRAME_BYTE( header_size ),
- FT_FRAME_BYTE( absolute_offsize ),
FT_FRAME_END
};
@@ -1453,51 +2197,142 @@
FT_ZERO( font );
FT_ZERO( &string_index );
- font->stream = stream;
- font->memory = memory;
- dict = &font->top_font.font_dict;
- base_offset = FT_STREAM_POS();
+ dict = &font->top_font.font_dict;
+ base_offset = FT_STREAM_POS();
+
+ font->library = library;
+ font->stream = stream;
+ font->memory = memory;
+ font->cff2 = cff2;
+ font->base_offset = base_offset;
/* read CFF font header */
if ( FT_STREAM_READ_FIELDS( cff_header_fields, font ) )
goto Exit;
- /* check format */
- if ( font->version_major != 1 ||
- font->header_size < 4 ||
- font->absolute_offsize > 4 )
+ if ( cff2 )
{
- FT_TRACE2(( " not a CFF font header\n" ));
- error = FT_THROW( Unknown_File_Format );
- goto Exit;
+ if ( font->version_major != 2 ||
+ font->header_size < 5 )
+ {
+ FT_TRACE2(( " not a CFF2 font header\n" ));
+ error = FT_THROW( Unknown_File_Format );
+ goto Exit;
+ }
+
+ if ( FT_READ_USHORT( font->top_dict_length ) )
+ goto Exit;
+ }
+ else
+ {
+ FT_Byte absolute_offset;
+
+
+ if ( FT_READ_BYTE( absolute_offset ) )
+ goto Exit;
+
+ if ( font->version_major != 1 ||
+ font->header_size < 4 ||
+ absolute_offset > 4 )
+ {
+ FT_TRACE2(( " not a CFF font header\n" ));
+ error = FT_THROW( Unknown_File_Format );
+ goto Exit;
+ }
}
/* skip the rest of the header */
- if ( FT_STREAM_SKIP( font->header_size - 4 ) )
+ if ( FT_STREAM_SEEK( base_offset + font->header_size ) )
+ {
+ /* For pure CFFs we have read only four bytes so far. Contrary to */
+ /* other formats like SFNT those bytes doesn't define a signature; */
+ /* it is thus possible that the font isn't a CFF at all. */
+ if ( pure_cff )
+ {
+ FT_TRACE2(( " not a CFF file\n" ));
+ error = FT_THROW( Unknown_File_Format );
+ }
goto Exit;
+ }
- /* read the name, top dict, string and global subrs index */
- if ( FT_SET_ERROR( cff_index_init( &font->name_index,
- stream, 0 ) ) ||
- FT_SET_ERROR( cff_index_init( &font->font_dict_index,
- stream, 0 ) ) ||
- FT_SET_ERROR( cff_index_init( &string_index,
- stream, 1 ) ) ||
- FT_SET_ERROR( cff_index_init( &font->global_subrs_index,
- stream, 1 ) ) ||
- FT_SET_ERROR( cff_index_get_pointers( &string_index,
- &font->strings,
- &font->string_pool ) ) )
- goto Exit;
+ if ( cff2 )
+ {
+ /* For CFF2, the top dict data immediately follow the header */
+ /* and the length is stored in the header `offSize' field; */
+ /* there is no index for it. */
+ /* */
+ /* Use the `font_dict_index' to save the current position */
+ /* and length of data, but leave count at zero as an indicator. */
+ FT_ZERO( &font->font_dict_index );
+
+ font->font_dict_index.data_offset = FT_STREAM_POS();
+ font->font_dict_index.data_size = font->top_dict_length;
+
+ /* skip the top dict data for now, we will parse it later */
+ if ( FT_STREAM_SKIP( font->top_dict_length ) )
+ goto Exit;
+
+ /* next, read the global subrs index */
+ if ( FT_SET_ERROR( cff_index_init( &font->global_subrs_index,
+ stream, 1, cff2 ) ) )
+ goto Exit;
+ }
+ else
+ {
+ /* for CFF, read the name, top dict, string and global subrs index */
+ if ( FT_SET_ERROR( cff_index_init( &font->name_index,
+ stream, 0, cff2 ) ) )
+ {
+ if ( pure_cff )
+ {
+ FT_TRACE2(( " not a CFF file\n" ));
+ error = FT_THROW( Unknown_File_Format );
+ }
+ goto Exit;
+ }
+
+ /* if we have an empty font name, */
+ /* it must be the only font in the CFF */
+ if ( font->name_index.count > 1 &&
+ font->name_index.data_size < font->name_index.count )
+ {
+ /* for pure CFFs, we still haven't checked enough bytes */
+ /* to be sure that it is a CFF at all */
+ error = pure_cff ? FT_THROW( Unknown_File_Format )
+ : FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ if ( FT_SET_ERROR( cff_index_init( &font->font_dict_index,
+ stream, 0, cff2 ) ) ||
+ FT_SET_ERROR( cff_index_init( &string_index,
+ stream, 1, cff2 ) ) ||
+ FT_SET_ERROR( cff_index_init( &font->global_subrs_index,
+ stream, 1, cff2 ) ) ||
+ FT_SET_ERROR( cff_index_get_pointers( &string_index,
+ &font->strings,
+ &font->string_pool,
+ &font->string_pool_size ) ) )
+ goto Exit;
+
+ /* there must be a Top DICT index entry for each name index entry */
+ if ( font->name_index.count > font->font_dict_index.count )
+ {
+ FT_ERROR(( "cff_font_load:"
+ " not enough entries in Top DICT index\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+ }
font->num_strings = string_index.count;
if ( pure_cff )
{
/* well, we don't really forget the `disabled' fonts... */
- subfont_index = (FT_UInt)face_index;
+ subfont_index = (FT_UInt)( face_index & 0xFFFF );
- if ( subfont_index >= font->name_index.count )
+ if ( face_index > 0 && subfont_index >= font->name_index.count )
{
FT_ERROR(( "cff_font_load:"
" invalid subfont index for pure CFF font (%d)\n",
@@ -1534,34 +2369,48 @@
subfont_index,
stream,
base_offset,
- library );
+ cff2 ? CFF2_CODE_TOPDICT : CFF_CODE_TOPDICT,
+ font,
+ face );
if ( error )
goto Exit;
if ( FT_STREAM_SEEK( base_offset + dict->charstrings_offset ) )
goto Exit;
- error = cff_index_init( &font->charstrings_index, stream, 0 );
+ error = cff_index_init( &font->charstrings_index, stream, 0, cff2 );
if ( error )
goto Exit;
- /* now, check for a CID font */
- if ( dict->cid_registry != 0xFFFFU )
+ /* now, check for a CID or CFF2 font */
+ if ( dict->cid_registry != 0xFFFFU ||
+ cff2 )
{
CFF_IndexRec fd_index;
CFF_SubFont sub = NULL;
FT_UInt idx;
+ /* for CFF2, read the Variation Store if available; */
+ /* this must follow the Top DICT parse and precede any Private DICT */
+ error = cff_vstore_load( &font->vstore,
+ stream,
+ base_offset,
+ dict->vstore_offset );
+ if ( error )
+ goto Exit;
+
/* this is a CID-keyed font, we must now allocate a table of */
/* sub-fonts, then load each of them separately */
if ( FT_STREAM_SEEK( base_offset + dict->cid_fd_array_offset ) )
goto Exit;
- error = cff_index_init( &fd_index, stream, 0 );
+ error = cff_index_init( &fd_index, stream, 0, cff2 );
if ( error )
goto Exit;
+ /* Font Dicts are not limited to 256 for CFF2. */
+ /* TODO: support this for CFF2 */
if ( fd_index.count > CFF_MAX_CID_FONTS )
{
FT_TRACE0(( "cff_font_load: FD array too large in CID font\n" ));
@@ -1582,17 +2431,26 @@
{
sub = font->subfonts[idx];
FT_TRACE4(( "parsing subfont %u\n", idx ));
- error = cff_subfont_load( sub, &fd_index, idx,
- stream, base_offset, library );
+ error = cff_subfont_load( sub,
+ &fd_index,
+ idx,
+ stream,
+ base_offset,
+ cff2 ? CFF2_CODE_FONTDICT
+ : CFF_CODE_TOPDICT,
+ font,
+ face );
if ( error )
goto Fail_CID;
}
- /* now load the FD Select array */
- error = CFF_Load_FD_Select( &font->fd_select,
- font->charstrings_index.count,
- stream,
- base_offset + dict->cid_fd_select_offset );
+ /* now load the FD Select array; */
+ /* CFF2 omits FDSelect if there is only one FD */
+ if ( !cff2 || fd_index.count > 1 )
+ error = CFF_Load_FD_Select( &font->fd_select,
+ font->charstrings_index.count,
+ stream,
+ base_offset + dict->cid_fd_select_offset );
Fail_CID:
cff_index_done( &fd_index );
@@ -1614,13 +2472,13 @@
font->num_glyphs = font->charstrings_index.count;
error = cff_index_get_pointers( &font->global_subrs_index,
- &font->global_subrs, NULL );
+ &font->global_subrs, NULL, NULL );
if ( error )
goto Exit;
/* read the Charset and Encoding tables if available */
- if ( font->num_glyphs > 0 )
+ if ( !cff2 && font->num_glyphs > 0 )
{
FT_Bool invert = FT_BOOL( dict->cid_registry != 0xFFFFU && pure_cff );
@@ -1668,7 +2526,7 @@
cff_index_done( &font->charstrings_index );
/* release font dictionaries, but only if working with */
- /* a CID keyed CFF font */
+ /* a CID keyed CFF font or a CFF2 font */
if ( font->num_subfonts > 0 )
{
for ( idx = 0; idx < font->num_subfonts; idx++ )
@@ -1680,6 +2538,7 @@
cff_encoding_done( &font->encoding );
cff_charset_done( &font->charset, font->stream );
+ cff_vstore_done( &font->vstore, memory );
cff_subfont_done( memory, &font->top_font );
@@ -1697,6 +2556,8 @@
font->cf2_instance.finalizer( font->cf2_instance.data );
FT_FREE( font->cf2_instance.data );
}
+
+ FT_FREE( font->font_extra );
}
diff --git a/src/cff/cffload.h b/src/cff/cffload.h
index 459e7b0..14d14e2 100644
--- a/src/cff/cffload.h
+++ b/src/cff/cffload.h
@@ -4,7 +4,7 @@
/* */
/* OpenType & CFF data/program tables loader (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,12 +16,14 @@
/***************************************************************************/
-#ifndef __CFFLOAD_H__
-#define __CFFLOAD_H__
+#ifndef CFFLOAD_H_
+#define CFFLOAD_H_
#include <ft2build.h>
-#include "cfftypes.h"
+#include FT_INTERNAL_CFF_TYPES_H
+#include "cffparse.h"
+#include FT_INTERNAL_CFF_OBJECTS_TYPES_H /* for CFF_Face */
FT_BEGIN_HEADER
@@ -60,24 +62,64 @@
FT_LOCAL( FT_Error )
- cff_font_load( FT_Library library,
- FT_Stream stream,
- FT_Int face_index,
- CFF_Font font,
- FT_Bool pure_cff );
+ cff_font_load( FT_Library library,
+ FT_Stream stream,
+ FT_Int face_index,
+ CFF_Font font,
+ CFF_Face face,
+ FT_Bool pure_cff,
+ FT_Bool cff2 );
FT_LOCAL( void )
cff_font_done( CFF_Font font );
+ FT_LOCAL( FT_Error )
+ cff_load_private_dict( CFF_Font font,
+ CFF_SubFont subfont,
+ FT_UInt lenNDV,
+ FT_Fixed* NDV );
+
FT_LOCAL( FT_Byte )
cff_fd_select_get( CFF_FDSelect fdselect,
FT_UInt glyph_index );
+ FT_LOCAL( FT_Bool )
+ cff_blend_check_vector( CFF_Blend blend,
+ FT_UInt vsindex,
+ FT_UInt lenNDV,
+ FT_Fixed* NDV );
+
+ FT_LOCAL( FT_Error )
+ cff_blend_build_vector( CFF_Blend blend,
+ FT_UInt vsindex,
+ FT_UInt lenNDV,
+ FT_Fixed* NDV );
+
+ FT_LOCAL( void )
+ cff_blend_clear( CFF_SubFont subFont );
+
+ FT_LOCAL( FT_Error )
+ cff_blend_doBlend( CFF_SubFont subfont,
+ CFF_Parser parser,
+ FT_UInt numBlends );
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ FT_LOCAL( FT_Error )
+ cff_get_var_blend( CFF_Face face,
+ FT_UInt *num_coords,
+ FT_Fixed* *coords,
+ FT_Fixed* *normalizedcoords,
+ FT_MM_Var* *mm_var );
+
+ FT_LOCAL( void )
+ cff_done_blend( CFF_Face face );
+#endif
+
FT_END_HEADER
-#endif /* __CFFLOAD_H__ */
+#endif /* CFFLOAD_H_ */
/* END */
diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
index 4a1ef11..a2d7aec 100644
--- a/src/cff/cffobjs.c
+++ b/src/cff/cffobjs.c
@@ -4,7 +4,7 @@
/* */
/* OpenType objects manager (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -25,8 +25,15 @@
#include FT_TRUETYPE_IDS_H
#include FT_TRUETYPE_TAGS_H
#include FT_INTERNAL_SFNT_H
-#include FT_CFF_DRIVER_H
+#include FT_DRIVER_H
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#include FT_MULTIPLE_MASTERS_H
+#include FT_SERVICE_MULTIPLE_MASTERS_H
+#include FT_SERVICE_METRICS_VARIATIONS_H
+#endif
+
+#include FT_INTERNAL_CFF_OBJECTS_TYPES_H
#include "cffobjs.h"
#include "cffload.h"
#include "cffcmap.h"
@@ -34,6 +41,9 @@
#include "cfferrs.h"
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include FT_SERVICE_CFF_TABLE_LOAD_H
+
/*************************************************************************/
/* */
@@ -49,9 +59,6 @@
/* */
/* SIZE FUNCTIONS */
/* */
- /* Note that we store the global hints in the size's `internal' root */
- /* field. */
- /* */
/*************************************************************************/
@@ -75,10 +82,11 @@
FT_LOCAL_DEF( void )
cff_size_done( FT_Size cffsize ) /* CFF_Size */
{
+ FT_Memory memory = cffsize->face->memory;
CFF_Size size = (CFF_Size)cffsize;
CFF_Face face = (CFF_Face)size->root.face;
CFF_Font font = (CFF_Font)face->extra.data;
- CFF_Internal internal = (CFF_Internal)cffsize->internal;
+ CFF_Internal internal = (CFF_Internal)cffsize->internal->module_data;
if ( internal )
@@ -98,7 +106,7 @@
funcs->destroy( internal->subfonts[i - 1] );
}
- /* `internal' is freed by destroy_size (in ftobjs.c) */
+ FT_FREE( internal );
}
}
@@ -114,7 +122,7 @@
FT_UInt n, count;
- FT_MEM_ZERO( priv, sizeof ( *priv ) );
+ FT_ZERO( priv );
count = priv->num_blue_values = cpriv->num_blue_values;
for ( n = 0; n < count; n++ )
@@ -194,7 +202,7 @@
goto Exit;
}
- cffsize->internal = (FT_Size_Internal)(void*)internal;
+ cffsize->internal->module_data = internal;
}
size->strike_index = 0xFFFFFFFFUL;
@@ -224,7 +232,7 @@
{
CFF_Face face = (CFF_Face)size->face;
CFF_Font font = (CFF_Font)face->extra.data;
- CFF_Internal internal = (CFF_Internal)size->internal;
+ CFF_Internal internal = (CFF_Internal)size->internal->module_data;
FT_Long top_upm = (FT_Long)font->top_font.font_dict.units_per_em;
FT_UInt i;
@@ -296,7 +304,7 @@
{
CFF_Face cffface = (CFF_Face)size->face;
CFF_Font font = (CFF_Font)cffface->extra.data;
- CFF_Internal internal = (CFF_Internal)size->internal;
+ CFF_Internal internal = (CFF_Internal)size->internal->module_data;
FT_Long top_upm = (FT_Long)font->top_font.font_dict.units_per_em;
FT_UInt i;
@@ -405,7 +413,7 @@
remove_subset_prefix( FT_String* name )
{
FT_Int32 idx = 0;
- FT_Int32 length = (FT_Int32)strlen( name ) + 1;
+ FT_Int32 length = (FT_Int32)ft_strlen( name ) + 1;
FT_Bool continue_search = 1;
@@ -442,15 +450,15 @@
FT_Int32 family_name_length, style_name_length;
- family_name_length = (FT_Int32)strlen( family_name );
- style_name_length = (FT_Int32)strlen( style_name );
+ family_name_length = (FT_Int32)ft_strlen( family_name );
+ style_name_length = (FT_Int32)ft_strlen( style_name );
if ( family_name_length > style_name_length )
{
FT_Int idx;
- for ( idx = 1; idx <= style_name_length; ++idx )
+ for ( idx = 1; idx <= style_name_length; idx++ )
{
if ( family_name[family_name_length - idx] !=
style_name[style_name_length - idx] )
@@ -469,7 +477,7 @@
family_name[idx] == ' ' ||
family_name[idx] == '_' ||
family_name[idx] == '+' ) )
- --idx;
+ idx--;
if ( idx > 0 )
family_name[idx + 1] = '\0';
@@ -490,13 +498,16 @@
SFNT_Service sfnt;
FT_Service_PsCMaps psnames;
PSHinter_Service pshinter;
+ PSAux_Service psaux;
+ FT_Service_CFFLoad cffload;
FT_Bool pure_cff = 1;
+ FT_Bool cff2 = 0;
FT_Bool sfnt_format = 0;
FT_Library library = cffface->driver->root.library;
- sfnt = (SFNT_Service)FT_Get_Module_Interface(
- library, "sfnt" );
+ sfnt = (SFNT_Service)FT_Get_Module_Interface( library,
+ "sfnt" );
if ( !sfnt )
{
FT_ERROR(( "cff_face_init: cannot access `sfnt' module\n" ));
@@ -506,8 +517,20 @@
FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
- pshinter = (PSHinter_Service)FT_Get_Module_Interface(
- library, "pshinter" );
+ pshinter = (PSHinter_Service)FT_Get_Module_Interface( library,
+ "pshinter" );
+
+ psaux = (PSAux_Service)FT_Get_Module_Interface( library,
+ "psaux" );
+ if ( !psaux )
+ {
+ FT_ERROR(( "cff_face_init: cannot access `psaux' module\n" ));
+ error = FT_THROW( Missing_Module );
+ goto Exit;
+ }
+ face->psaux = psaux;
+
+ FT_FACE_FIND_GLOBAL_SERVICE( face, cffload, CFF_LOAD );
FT_TRACE2(( "CFF driver\n" ));
@@ -516,6 +539,7 @@
goto Exit;
/* check whether we have a valid OpenType file */
+ FT_TRACE2(( " " ));
error = sfnt->init_face( stream, face, face_index, num_params, params );
if ( !error )
{
@@ -553,8 +577,18 @@
goto Exit;
}
- /* now load the CFF part of the file */
- error = face->goto_table( face, TTAG_CFF, stream, 0 );
+ /* now load the CFF part of the file; */
+ /* give priority to CFF2 */
+ error = face->goto_table( face, TTAG_CFF2, stream, 0 );
+ if ( !error )
+ {
+ cff2 = 1;
+ face->is_cff2 = cff2;
+ }
+
+ if ( FT_ERR_EQ( error, Table_Missing ) )
+ error = face->goto_table( face, TTAG_CFF, stream, 0 );
+
if ( error )
goto Exit;
}
@@ -579,14 +613,29 @@
goto Exit;
face->extra.data = cff;
- error = cff_font_load( library, stream, face_index, cff, pure_cff );
+ error = cff_font_load( library,
+ stream,
+ face_index,
+ cff,
+ face,
+ pure_cff,
+ cff2 );
if ( error )
goto Exit;
+ /* if we are performing a simple font format check, exit immediately */
+ /* (this is here for pure CFF) */
+ if ( face_index < 0 )
+ {
+ cffface->num_faces = (FT_Long)cff->num_faces;
+ return FT_Err_Ok;
+ }
+
cff->pshinter = pshinter;
cff->psnames = psnames;
+ cff->cffload = cffload;
- cffface->face_index = face_index;
+ cffface->face_index = face_index & 0xFFFF;
/* Complement the root flags with some interesting information. */
/* Note that this is only necessary for pure CFF and CEF fonts; */
@@ -617,22 +666,78 @@
FT_TRACE4(( "SIDs\n" ));
/* dump string index, including default strings for convenience */
- for ( idx = 0; idx < cff->num_strings + 390; idx++ )
+ for ( idx = 0; idx <= 390; idx++ )
{
s = cff_index_get_sid_string( cff, idx );
if ( s )
- FT_TRACE4((" %5d %s\n", idx, s ));
+ FT_TRACE4(( " %5d %s\n", idx, s ));
+ }
+
+ /* In Multiple Master CFFs, two SIDs hold the Normalize Design */
+ /* Vector (NDV) and Convert Design Vector (CDV) charstrings, */
+ /* which may contain NULL bytes in the middle of the data, too. */
+ /* We thus access `cff->strings' directly. */
+ for ( idx = 1; idx < cff->num_strings; idx++ )
+ {
+ FT_Byte* s1 = cff->strings[idx - 1];
+ FT_Byte* s2 = cff->strings[idx];
+ FT_PtrDist s1len = s2 - s1 - 1; /* without the final NULL byte */
+ FT_PtrDist l;
+
+
+ FT_TRACE4(( " %5d ", idx + 390 ));
+ for ( l = 0; l < s1len; l++ )
+ FT_TRACE4(( "%c", s1[l] ));
+ FT_TRACE4(( "\n" ));
+ }
+
+ /* print last element */
+ if ( cff->num_strings )
+ {
+ FT_Byte* s1 = cff->strings[cff->num_strings - 1];
+ FT_Byte* s2 = cff->string_pool + cff->string_pool_size;
+ FT_PtrDist s1len = s2 - s1 - 1;
+ FT_PtrDist l;
+
+
+ FT_TRACE4(( " %5d ", cff->num_strings + 390 ));
+ for ( l = 0; l < s1len; l++ )
+ FT_TRACE4(( "%c", s1[l] ));
+ FT_TRACE4(( "\n" ));
}
}
#endif /* FT_DEBUG_LEVEL_TRACE */
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ {
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+ FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
+
+ FT_UInt instance_index = (FT_UInt)face_index >> 16;
+
+
+ if ( FT_HAS_MULTIPLE_MASTERS( cffface ) &&
+ mm &&
+ instance_index > 0 )
+ {
+ error = mm->set_instance( cffface, instance_index );
+ if ( error )
+ goto Exit;
+
+ if ( var )
+ var->metrics_adjust( cffface );
+ }
+ }
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+
if ( !dict->has_font_matrix )
dict->units_per_em = pure_cff ? 1000 : face->root.units_per_EM;
- /* Normalize the font matrix so that `matrix->xx' is 1; the */
- /* scaling is done with `units_per_em' then (at this point, */
- /* it already contains the scaling factor, but without */
- /* normalization of the matrix). */
+ /* Normalize the font matrix so that `matrix->yy' is 1; if */
+ /* it is zero, we use `matrix->yx' instead. The scaling is */
+ /* done with `units_per_em' then (at this point, it already */
+ /* contains the scaling factor, but without normalization */
+ /* of the matrix). */
/* */
/* Note that the offsets must be expressed in integer font */
/* units. */
@@ -641,9 +746,12 @@
FT_Matrix* matrix = &dict->font_matrix;
FT_Vector* offset = &dict->font_offset;
FT_ULong* upm = &dict->units_per_em;
- FT_Fixed temp = FT_ABS( matrix->yy );
+ FT_Fixed temp;
+ temp = matrix->yy ? FT_ABS( matrix->yy )
+ : FT_ABS( matrix->yx );
+
if ( temp != 0x10000L )
{
*upm = (FT_ULong)FT_DivFix( (FT_Long)*upm, temp );
@@ -711,7 +819,10 @@
matrix = &sub->font_matrix;
offset = &sub->font_offset;
upm = &sub->units_per_em;
- temp = FT_ABS( matrix->yy );
+
+ temp = matrix->yy ? FT_ABS( matrix->yy )
+ : FT_ABS( matrix->yx );
+
if ( temp != 0x10000L )
{
@@ -757,7 +868,8 @@
cffface->height = (FT_Short)( ( cffface->units_per_EM * 12 ) / 10 );
if ( cffface->height < cffface->ascender - cffface->descender )
- cffface->height = (FT_Short)( cffface->ascender - cffface->descender );
+ cffface->height = (FT_Short)( cffface->ascender -
+ cffface->descender );
cffface->underline_position =
(FT_Short)( dict->underline_position >> 16 );
@@ -765,27 +877,33 @@
(FT_Short)( dict->underline_thickness >> 16 );
/* retrieve font family & style name */
- cffface->family_name = cff_index_get_name( cff,
- (FT_UInt)face_index );
+ if ( dict->family_name )
+ {
+ char* family_name;
+
+
+ family_name = cff_index_get_sid_string( cff, dict->family_name );
+ if ( family_name )
+ cffface->family_name = cff_strcpy( memory, family_name );
+ }
+
+ if ( !cffface->family_name )
+ {
+ cffface->family_name = cff_index_get_name(
+ cff,
+ (FT_UInt)( face_index & 0xFFFF ) );
+ if ( cffface->family_name )
+ remove_subset_prefix( cffface->family_name );
+ }
+
if ( cffface->family_name )
{
char* full = cff_index_get_sid_string( cff,
dict->full_name );
char* fullp = full;
char* family = cffface->family_name;
- char* family_name = NULL;
- remove_subset_prefix( cffface->family_name );
-
- if ( dict->family_name )
- {
- family_name = cff_index_get_sid_string( cff,
- dict->family_name );
- if ( family_name )
- family = family_name;
- }
-
/* We try to extract the style name from the full name. */
/* We need to ignore spaces and dashes during the search. */
if ( full && family )
@@ -900,7 +1018,6 @@
cffface->style_flags = flags;
}
-
#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
/* CID-keyed CFF fonts don't have glyph names -- the SFNT loader */
/* has unset this flag because of the 3.0 `post' table. */
@@ -911,7 +1028,6 @@
if ( dict->cid_registry != 0xFFFFU && pure_cff )
cffface->face_flags |= FT_FACE_FLAG_CID_KEYED;
-
/*******************************************************************/
/* */
/* Compute char maps. */
@@ -962,7 +1078,7 @@
error = FT_Err_Ok;
/* if no Unicode charmap was previously selected, select this one */
- if ( cffface->charmap == NULL && nn != (FT_UInt)cffface->num_charmaps )
+ if ( !cffface->charmap && nn != (FT_UInt)cffface->num_charmaps )
cffface->charmap = cffface->charmaps[nn];
Skip_Unicode:
@@ -1030,23 +1146,30 @@
FT_FREE( face->extra.data );
}
}
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ cff_done_blend( face );
+ face->blend = NULL;
+#endif
}
FT_LOCAL_DEF( FT_Error )
cff_driver_init( FT_Module module ) /* CFF_Driver */
{
- CFF_Driver driver = (CFF_Driver)module;
+ PS_Driver driver = (PS_Driver)module;
+
+ FT_UInt32 seed;
/* set default property values, cf. `ftcffdrv.h' */
#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
- driver->hinting_engine = FT_CFF_HINTING_FREETYPE;
+ driver->hinting_engine = FT_HINTING_FREETYPE;
#else
- driver->hinting_engine = FT_CFF_HINTING_ADOBE;
+ driver->hinting_engine = FT_HINTING_ADOBE;
#endif
- driver->no_stem_darkening = FALSE;
+ driver->no_stem_darkening = TRUE;
driver->darken_params[0] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1;
driver->darken_params[1] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1;
@@ -1057,6 +1180,18 @@
driver->darken_params[6] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4;
driver->darken_params[7] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4;
+ /* compute random seed from some memory addresses */
+ seed = (FT_UInt32)( (FT_Offset)(char*)&seed ^
+ (FT_Offset)(char*)&module ^
+ (FT_Offset)(char*)module->memory );
+ seed = seed ^ ( seed >> 10 ) ^ ( seed >> 20 );
+
+ driver->random_seed = (FT_Int32)seed;
+ if ( driver->random_seed < 0 )
+ driver->random_seed = -driver->random_seed;
+ else if ( driver->random_seed == 0 )
+ driver->random_seed = 123456789;
+
return FT_Err_Ok;
}
diff --git a/src/cff/cffobjs.h b/src/cff/cffobjs.h
index 3cc9531..616a25b 100644
--- a/src/cff/cffobjs.h
+++ b/src/cff/cffobjs.h
@@ -4,7 +4,7 @@
/* */
/* OpenType objects manager (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,116 +16,16 @@
/***************************************************************************/
-#ifndef __CFFOBJS_H__
-#define __CFFOBJS_H__
+#ifndef CFFOBJS_H_
+#define CFFOBJS_H_
#include <ft2build.h>
-#include FT_INTERNAL_OBJECTS_H
-#include "cfftypes.h"
-#include FT_INTERNAL_TRUETYPE_TYPES_H
-#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#include FT_INTERNAL_POSTSCRIPT_HINTS_H
FT_BEGIN_HEADER
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_Driver */
- /* */
- /* <Description> */
- /* A handle to an OpenType driver object. */
- /* */
- typedef struct CFF_DriverRec_* CFF_Driver;
-
- typedef TT_Face CFF_Face;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_Size */
- /* */
- /* <Description> */
- /* A handle to an OpenType size object. */
- /* */
- typedef struct CFF_SizeRec_
- {
- FT_SizeRec root;
- FT_ULong strike_index; /* 0xFFFFFFFF to indicate invalid */
-
- } CFF_SizeRec, *CFF_Size;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_GlyphSlot */
- /* */
- /* <Description> */
- /* A handle to an OpenType glyph slot object. */
- /* */
- typedef struct CFF_GlyphSlotRec_
- {
- FT_GlyphSlotRec root;
-
- FT_Bool hint;
- FT_Bool scaled;
-
- FT_Fixed x_scale;
- FT_Fixed y_scale;
-
- } CFF_GlyphSlotRec, *CFF_GlyphSlot;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
- /* CFF_Internal */
- /* */
- /* <Description> */
- /* The interface to the `internal' field of `FT_Size'. */
- /* */
- typedef struct CFF_InternalRec_
- {
- PSH_Globals topfont;
- PSH_Globals subfonts[CFF_MAX_CID_FONTS];
-
- } CFF_InternalRec, *CFF_Internal;
-
-
- /*************************************************************************/
- /* */
- /* Subglyph transformation record. */
- /* */
- typedef struct CFF_Transform_
- {
- FT_Fixed xx, xy; /* transformation matrix coefficients */
- FT_Fixed yx, yy;
- FT_F26Dot6 ox, oy; /* offsets */
-
- } CFF_Transform;
-
-
- /***********************************************************************/
- /* */
- /* CFF driver class. */
- /* */
- typedef struct CFF_DriverRec_
- {
- FT_DriverRec root;
-
- FT_UInt hinting_engine;
- FT_Bool no_stem_darkening;
-
- FT_Int darken_params[8];
-
- } CFF_DriverRec;
-
-
FT_LOCAL( FT_Error )
cff_size_init( FT_Size size ); /* CFF_Size */
@@ -171,15 +71,15 @@
/* Driver functions */
/* */
FT_LOCAL( FT_Error )
- cff_driver_init( FT_Module module ); /* CFF_Driver */
+ cff_driver_init( FT_Module module ); /* PS_Driver */
FT_LOCAL( void )
- cff_driver_done( FT_Module module ); /* CFF_Driver */
+ cff_driver_done( FT_Module module ); /* PS_Driver */
FT_END_HEADER
-#endif /* __CFFOBJS_H__ */
+#endif /* CFFOBJS_H_ */
/* END */
diff --git a/src/cff/cffparse.c b/src/cff/cffparse.c
index 063b351..b9611cf 100644
--- a/src/cff/cffparse.c
+++ b/src/cff/cffparse.c
@@ -4,7 +4,7 @@
/* */
/* CFF token stream parser (body) */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,9 +20,12 @@
#include "cffparse.h"
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_CALC_H
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
#include "cfferrs.h"
#include "cffpic.h"
+#include "cffload.h"
/*************************************************************************/
@@ -35,18 +38,52 @@
#define FT_COMPONENT trace_cffparse
- FT_LOCAL_DEF( void )
+ FT_LOCAL_DEF( FT_Error )
cff_parser_init( CFF_Parser parser,
FT_UInt code,
void* object,
- FT_Library library)
+ FT_Library library,
+ FT_UInt stackSize,
+ FT_UShort num_designs,
+ FT_UShort num_axes )
{
- FT_MEM_ZERO( parser, sizeof ( *parser ) );
+ FT_Memory memory = library->memory; /* for FT_NEW_ARRAY */
+ FT_Error error; /* for FT_NEW_ARRAY */
+
+ FT_ZERO( parser );
+
+#if 0
parser->top = parser->stack;
+#endif
parser->object_code = code;
parser->object = object;
parser->library = library;
+ parser->num_designs = num_designs;
+ parser->num_axes = num_axes;
+
+ /* allocate the stack buffer */
+ if ( FT_NEW_ARRAY( parser->stack, stackSize ) )
+ {
+ FT_FREE( parser->stack );
+ goto Exit;
+ }
+
+ parser->stackSize = stackSize;
+ parser->top = parser->stack; /* empty stack */
+
+ Exit:
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ cff_parser_done( CFF_Parser parser )
+ {
+ FT_Memory memory = parser->library->memory; /* for FT_FREE */
+
+
+ FT_FREE( parser->stack );
}
@@ -120,6 +157,22 @@
1000000000L
};
+ /* maximum values allowed for multiplying */
+ /* with the corresponding `power_tens' element */
+ static const FT_Long power_ten_limits[] =
+ {
+ FT_LONG_MAX / 1L,
+ FT_LONG_MAX / 10L,
+ FT_LONG_MAX / 100L,
+ FT_LONG_MAX / 1000L,
+ FT_LONG_MAX / 10000L,
+ FT_LONG_MAX / 100000L,
+ FT_LONG_MAX / 1000000L,
+ FT_LONG_MAX / 10000000L,
+ FT_LONG_MAX / 100000000L,
+ FT_LONG_MAX / 1000000000L,
+ };
+
/* read a real */
static FT_Fixed
@@ -397,28 +450,66 @@
/* read a number, either integer or real */
- static FT_Long
- cff_parse_num( FT_Byte** d )
+ FT_LOCAL_DEF( FT_Long )
+ cff_parse_num( CFF_Parser parser,
+ FT_Byte** d )
{
- return **d == 30 ? ( cff_parse_real( d[0], d[1], 0, NULL ) >> 16 )
- : cff_parse_integer( d[0], d[1] );
+ if ( **d == 30 )
+ {
+ /* binary-coded decimal is truncated to integer */
+ return cff_parse_real( *d, parser->limit, 0, NULL ) >> 16;
+ }
+
+ else if ( **d == 255 )
+ {
+ /* 16.16 fixed point is used internally for CFF2 blend results. */
+ /* Since these are trusted values, a limit check is not needed. */
+
+ /* After the 255, 4 bytes give the number. */
+ /* The blend value is converted to integer, with rounding; */
+ /* due to the right-shift we don't need the lowest byte. */
+#if 0
+ return (FT_Short)(
+ ( ( ( (FT_UInt32)*( d[0] + 1 ) << 24 ) |
+ ( (FT_UInt32)*( d[0] + 2 ) << 16 ) |
+ ( (FT_UInt32)*( d[0] + 3 ) << 8 ) |
+ (FT_UInt32)*( d[0] + 4 ) ) + 0x8000U ) >> 16 );
+#else
+ return (FT_Short)(
+ ( ( ( (FT_UInt32)*( d[0] + 1 ) << 16 ) |
+ ( (FT_UInt32)*( d[0] + 2 ) << 8 ) |
+ (FT_UInt32)*( d[0] + 3 ) ) + 0x80U ) >> 8 );
+#endif
+ }
+
+ else
+ return cff_parse_integer( *d, parser->limit );
}
/* read a floating point number, either integer or real */
static FT_Fixed
- do_fixed( FT_Byte** d,
- FT_Long scaling )
+ do_fixed( CFF_Parser parser,
+ FT_Byte** d,
+ FT_Long scaling )
{
if ( **d == 30 )
- return cff_parse_real( d[0], d[1], scaling, NULL );
+ return cff_parse_real( *d, parser->limit, scaling, NULL );
else
{
- FT_Long val = cff_parse_integer( d[0], d[1] );
+ FT_Long val = cff_parse_integer( *d, parser->limit );
if ( scaling )
+ {
+ if ( FT_ABS( val ) > power_ten_limits[scaling] )
+ {
+ val = val > 0 ? 0x7FFFFFFFL : -0x7FFFFFFFL;
+ goto Overflow;
+ }
+
val *= power_tens[scaling];
+ }
if ( val > 0x7FFF )
{
@@ -442,19 +533,21 @@
/* read a floating point number, either integer or real */
static FT_Fixed
- cff_parse_fixed( FT_Byte** d )
+ cff_parse_fixed( CFF_Parser parser,
+ FT_Byte** d )
{
- return do_fixed( d, 0 );
+ return do_fixed( parser, d, 0 );
}
/* read a floating point number, either integer or real, */
/* but return `10^scaling' times the number read in */
static FT_Fixed
- cff_parse_fixed_scaled( FT_Byte** d,
- FT_Long scaling )
+ cff_parse_fixed_scaled( CFF_Parser parser,
+ FT_Byte** d,
+ FT_Long scaling )
{
- return do_fixed( d, scaling );
+ return do_fixed( parser, d, scaling );
}
@@ -462,13 +555,14 @@
/* and return it as precise as possible -- `scaling' returns */
/* the scaling factor (as a power of 10) */
static FT_Fixed
- cff_parse_fixed_dynamic( FT_Byte** d,
- FT_Long* scaling )
+ cff_parse_fixed_dynamic( CFF_Parser parser,
+ FT_Byte** d,
+ FT_Long* scaling )
{
FT_ASSERT( scaling );
if ( **d == 30 )
- return cff_parse_real( d[0], d[1], 0, scaling );
+ return cff_parse_real( *d, parser->limit, 0, scaling );
else
{
FT_Long number;
@@ -516,7 +610,11 @@
if ( parser->top >= parser->stack + 6 )
{
- FT_Long scaling;
+ FT_Fixed values[6];
+ FT_Long scalings[6];
+
+ FT_Long min_scaling, max_scaling;
+ int i;
error = FT_Err_Ok;
@@ -525,22 +623,36 @@
/* We expect a well-formed font matrix, this is, the matrix elements */
/* `xx' and `yy' are of approximately the same magnitude. To avoid */
- /* loss of precision, we use the magnitude of element `xx' to scale */
- /* all other elements. The scaling factor is then contained in the */
- /* `units_per_em' value. */
+ /* loss of precision, we use the magnitude of the largest matrix */
+ /* element to scale all other elements. The scaling factor is then */
+ /* contained in the `units_per_em' value. */
- matrix->xx = cff_parse_fixed_dynamic( data++, &scaling );
+ max_scaling = FT_LONG_MIN;
+ min_scaling = FT_LONG_MAX;
- scaling = -scaling;
+ for ( i = 0; i < 6; i++ )
+ {
+ values[i] = cff_parse_fixed_dynamic( parser, data++, &scalings[i] );
+ if ( values[i] )
+ {
+ if ( scalings[i] > max_scaling )
+ max_scaling = scalings[i];
+ if ( scalings[i] < min_scaling )
+ min_scaling = scalings[i];
+ }
+ }
- if ( scaling < 0 || scaling > 9 )
+ if ( max_scaling < -9 ||
+ max_scaling > 0 ||
+ ( max_scaling - min_scaling ) < 0 ||
+ ( max_scaling - min_scaling ) > 9 )
{
/* Return default matrix in case of unlikely values. */
FT_TRACE1(( "cff_parse_font_matrix:"
- " strange scaling value for xx element (%d),\n"
+ " strange scaling values (minimum %d, maximum %d),\n"
" "
- " using default matrix\n", scaling ));
+ " using default matrix\n", min_scaling, max_scaling ));
matrix->xx = 0x10000L;
matrix->yx = 0;
@@ -553,13 +665,42 @@
goto Exit;
}
- matrix->yx = cff_parse_fixed_scaled( data++, scaling );
- matrix->xy = cff_parse_fixed_scaled( data++, scaling );
- matrix->yy = cff_parse_fixed_scaled( data++, scaling );
- offset->x = cff_parse_fixed_scaled( data++, scaling );
- offset->y = cff_parse_fixed_scaled( data, scaling );
+ for ( i = 0; i < 6; i++ )
+ {
+ FT_Fixed value = values[i];
+ FT_Long divisor, half_divisor;
- *upm = (FT_ULong)power_tens[scaling];
+
+ if ( !value )
+ continue;
+
+ divisor = power_tens[max_scaling - scalings[i]];
+ half_divisor = divisor >> 1;
+
+ if ( value < 0 )
+ {
+ if ( FT_LONG_MIN + half_divisor < value )
+ values[i] = ( value - half_divisor ) / divisor;
+ else
+ values[i] = FT_LONG_MIN / divisor;
+ }
+ else
+ {
+ if ( FT_LONG_MAX - half_divisor > value )
+ values[i] = ( value + half_divisor ) / divisor;
+ else
+ values[i] = FT_LONG_MAX / divisor;
+ }
+ }
+
+ matrix->xx = values[0];
+ matrix->yx = values[1];
+ matrix->xy = values[2];
+ matrix->yy = values[3];
+ offset->x = values[4];
+ offset->y = values[5];
+
+ *upm = (FT_ULong)power_tens[-max_scaling];
FT_TRACE4(( " [%f %f %f %f %f %f]\n",
(double)matrix->xx / *upm / 65536,
@@ -588,10 +729,10 @@
if ( parser->top >= parser->stack + 4 )
{
- bbox->xMin = FT_RoundFix( cff_parse_fixed( data++ ) );
- bbox->yMin = FT_RoundFix( cff_parse_fixed( data++ ) );
- bbox->xMax = FT_RoundFix( cff_parse_fixed( data++ ) );
- bbox->yMax = FT_RoundFix( cff_parse_fixed( data ) );
+ bbox->xMin = FT_RoundFix( cff_parse_fixed( parser, data++ ) );
+ bbox->yMin = FT_RoundFix( cff_parse_fixed( parser, data++ ) );
+ bbox->xMax = FT_RoundFix( cff_parse_fixed( parser, data++ ) );
+ bbox->yMax = FT_RoundFix( cff_parse_fixed( parser, data ) );
error = FT_Err_Ok;
FT_TRACE4(( " [%d %d %d %d]\n",
@@ -620,7 +761,7 @@
FT_Long tmp;
- tmp = cff_parse_num( data++ );
+ tmp = cff_parse_num( parser, data++ );
if ( tmp < 0 )
{
FT_ERROR(( "cff_parse_private_dict: Invalid dictionary size\n" ));
@@ -629,7 +770,7 @@
}
dict->private_size = (FT_ULong)tmp;
- tmp = cff_parse_num( data );
+ tmp = cff_parse_num( parser, data );
if ( tmp < 0 )
{
FT_ERROR(( "cff_parse_private_dict: Invalid dictionary offset\n" ));
@@ -649,6 +790,56 @@
}
+ /* The `MultipleMaster' operator comes before any */
+ /* top DICT operators that contain T2 charstrings. */
+
+ static FT_Error
+ cff_parse_multiple_master( CFF_Parser parser )
+ {
+ CFF_FontRecDict dict = (CFF_FontRecDict)parser->object;
+ FT_Error error;
+
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ /* beautify tracing message */
+ if ( ft_trace_levels[FT_COMPONENT] < 4 )
+ FT_TRACE1(( "Multiple Master CFFs not supported yet,"
+ " handling first master design only\n" ));
+ else
+ FT_TRACE1(( " (not supported yet,"
+ " handling first master design only)\n" ));
+#endif
+
+ error = FT_ERR( Stack_Underflow );
+
+ /* currently, we handle only the first argument */
+ if ( parser->top >= parser->stack + 5 )
+ {
+ FT_Long num_designs = cff_parse_num( parser, parser->stack );
+
+
+ if ( num_designs > 16 || num_designs < 2 )
+ {
+ FT_ERROR(( "cff_parse_multiple_master:"
+ " Invalid number of designs\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ }
+ else
+ {
+ dict->num_designs = (FT_UShort)num_designs;
+ dict->num_axes = (FT_UShort)( parser->top - parser->stack - 4 );
+
+ parser->num_designs = dict->num_designs;
+ parser->num_axes = dict->num_axes;
+
+ error = FT_Err_Ok;
+ }
+ }
+
+ return error;
+ }
+
+
static FT_Error
cff_parse_cid_ros( CFF_Parser parser )
{
@@ -661,11 +852,11 @@
if ( parser->top >= parser->stack + 3 )
{
- dict->cid_registry = (FT_UInt)cff_parse_num( data++ );
- dict->cid_ordering = (FT_UInt)cff_parse_num( data++ );
+ dict->cid_registry = (FT_UInt)cff_parse_num( parser, data++ );
+ dict->cid_ordering = (FT_UInt)cff_parse_num( parser, data++ );
if ( **data == 30 )
FT_TRACE1(( "cff_parse_cid_ros: real supplement is rounded\n" ));
- dict->cid_supplement = cff_parse_num( data );
+ dict->cid_supplement = cff_parse_num( parser, data );
if ( dict->cid_supplement < 0 )
FT_TRACE1(( "cff_parse_cid_ros: negative supplement %d is found\n",
dict->cid_supplement ));
@@ -681,6 +872,125 @@
}
+ static FT_Error
+ cff_parse_vsindex( CFF_Parser parser )
+ {
+ /* vsindex operator can only be used in a Private DICT */
+ CFF_Private priv = (CFF_Private)parser->object;
+ FT_Byte** data = parser->stack;
+ CFF_Blend blend;
+ FT_Error error;
+
+
+ if ( !priv || !priv->subfont )
+ {
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ blend = &priv->subfont->blend;
+
+ if ( blend->usedBV )
+ {
+ FT_ERROR(( " cff_parse_vsindex: vsindex not allowed after blend\n" ));
+ error = FT_THROW( Syntax_Error );
+ goto Exit;
+ }
+
+ priv->vsindex = (FT_UInt)cff_parse_num( parser, data++ );
+
+ FT_TRACE4(( " %d\n", priv->vsindex ));
+
+ error = FT_Err_Ok;
+
+ Exit:
+ return error;
+ }
+
+
+ static FT_Error
+ cff_parse_blend( CFF_Parser parser )
+ {
+ /* blend operator can only be used in a Private DICT */
+ CFF_Private priv = (CFF_Private)parser->object;
+ CFF_SubFont subFont;
+ CFF_Blend blend;
+ FT_UInt numBlends;
+ FT_Error error;
+
+
+ if ( !priv || !priv->subfont )
+ {
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ subFont = priv->subfont;
+ blend = &subFont->blend;
+
+ if ( cff_blend_check_vector( blend,
+ priv->vsindex,
+ subFont->lenNDV,
+ subFont->NDV ) )
+ {
+ error = cff_blend_build_vector( blend,
+ priv->vsindex,
+ subFont->lenNDV,
+ subFont->NDV );
+ if ( error )
+ goto Exit;
+ }
+
+ numBlends = (FT_UInt)cff_parse_num( parser, parser->top - 1 );
+ if ( numBlends > parser->stackSize )
+ {
+ FT_ERROR(( "cff_parse_blend: Invalid number of blends\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ FT_TRACE4(( " %d value%s blended\n",
+ numBlends,
+ numBlends == 1 ? "" : "s" ));
+
+ error = cff_blend_doBlend( subFont, parser, numBlends );
+
+ blend->usedBV = TRUE;
+
+ Exit:
+ return error;
+ }
+
+
+ /* maxstack operator increases parser and operand stacks for CFF2 */
+ static FT_Error
+ cff_parse_maxstack( CFF_Parser parser )
+ {
+ /* maxstack operator can only be used in a Top DICT */
+ CFF_FontRecDict dict = (CFF_FontRecDict)parser->object;
+ FT_Byte** data = parser->stack;
+ FT_Error error = FT_Err_Ok;
+
+
+ if ( !dict )
+ {
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ dict->maxstack = (FT_UInt)cff_parse_num( parser, data++ );
+ if ( dict->maxstack > CFF2_MAX_STACK )
+ dict->maxstack = CFF2_MAX_STACK;
+ if ( dict->maxstack < CFF2_DEFAULT_STACK )
+ dict->maxstack = CFF2_DEFAULT_STACK;
+
+ FT_TRACE4(( " %d\n", dict->maxstack ));
+
+ Exit:
+ return error;
+ }
+
+
#define CFF_FIELD_NUM( code, name, id ) \
CFF_FIELD( code, name, id, cff_kind_num )
#define CFF_FIELD_FIXED( code, name, id ) \
@@ -692,9 +1002,6 @@
#define CFF_FIELD_BOOL( code, name, id ) \
CFF_FIELD( code, name, id, cff_kind_bool )
-#define CFFCODE_TOPDICT 0x1000
-#define CFFCODE_PRIVATE 0x2000
-
#ifndef FT_CONFIG_OPTION_PIC
@@ -715,6 +1022,15 @@
0, 0 \
},
+#define CFF_FIELD_BLEND( code, id ) \
+ { \
+ cff_kind_blend, \
+ code | CFFCODE, \
+ 0, 0, \
+ cff_parse_blend, \
+ 0, 0 \
+ },
+
#define CFF_FIELD( code, name, id, kind ) \
{ \
kind, \
@@ -758,6 +1074,16 @@
id \
},
+#define CFF_FIELD_BLEND( code, id ) \
+ { \
+ cff_kind_blend, \
+ code | CFFCODE, \
+ 0, 0, \
+ cff_parse_blend, \
+ 0, 0, \
+ id \
+ },
+
#define CFF_FIELD( code, name, id, kind ) \
{ \
kind, \
@@ -824,6 +1150,8 @@
#define CFF_FIELD_DELTA( code, name, max, id ) i++;
#undef CFF_FIELD_CALLBACK
#define CFF_FIELD_CALLBACK( code, name, id ) i++;
+#undef CFF_FIELD_BLEND
+#define CFF_FIELD_BLEND( code, id ) i++;
#include "cfftoken.h"
@@ -871,6 +1199,17 @@
clazz[i].count_offset = FT_FIELD_OFFSET( num_ ## name_ ); \
i++;
+#undef CFF_FIELD_BLEND
+#define CFF_FIELD_BLEND( code_, id_ ) \
+ clazz[i].kind = cff_kind_blend; \
+ clazz[i].code = code_ | CFFCODE; \
+ clazz[i].offset = 0; \
+ clazz[i].size = 0; \
+ clazz[i].reader = cff_parse_blend; \
+ clazz[i].array_max = 0; \
+ clazz[i].count_offset = 0; \
+ i++;
+
#include "cfftoken.h"
clazz[i].kind = 0;
@@ -921,6 +1260,18 @@
clazz[i].id = id_; \
i++;
+#undef CFF_FIELD_BLEND
+#define CFF_FIELD_BLEND( code_, id_ ) \
+ clazz[i].kind = cff_kind_blend; \
+ clazz[i].code = code_ | CFFCODE; \
+ clazz[i].offset = 0; \
+ clazz[i].size = 0; \
+ clazz[i].reader = cff_parse_blend; \
+ clazz[i].array_max = 0; \
+ clazz[i].count_offset = 0; \
+ clazz[i].id = id_; \
+ i++;
+
#include "cfftoken.h"
clazz[i].kind = 0;
@@ -950,9 +1301,14 @@
FT_Byte* start,
FT_Byte* limit )
{
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ PSAux_Service psaux;
+#endif
+
FT_Byte* p = start;
FT_Error error = FT_Err_Ok;
FT_Library library = parser->library;
+
FT_UNUSED( library );
@@ -965,14 +1321,16 @@
{
FT_UInt v = *p;
-
- if ( v >= 27 && v != 31 )
+ /* Opcode 31 is legacy MM T2 operator, not a number. */
+ /* Opcode 255 is reserved and should not appear in fonts; */
+ /* it is used internally for CFF2 blends. */
+ if ( v >= 27 && v != 31 && v != 255 )
{
/* it's a number; we will push its position on the stack */
- if ( parser->top - parser->stack >= CFF_MAX_STACK_DEPTH )
+ if ( (FT_UInt)( parser->top - parser->stack ) >= parser->stackSize )
goto Stack_Overflow;
- *parser->top ++ = p;
+ *parser->top++ = p;
/* now, skip it */
if ( v == 30 )
@@ -1001,19 +1359,159 @@
else if ( v > 246 )
p += 1;
}
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ else if ( v == 31 )
+ {
+ /* a Type 2 charstring */
+
+ CFF_Decoder decoder;
+ CFF_FontRec cff_rec;
+ FT_Byte* charstring_base;
+ FT_ULong charstring_len;
+
+ FT_Fixed* stack;
+ FT_Byte* q;
+
+
+ charstring_base = ++p;
+
+ /* search `endchar' operator */
+ for (;;)
+ {
+ if ( p >= limit )
+ goto Exit;
+ if ( *p == 14 )
+ break;
+ p++;
+ }
+
+ charstring_len = (FT_ULong)( p - charstring_base ) + 1;
+
+ /* construct CFF_Decoder object */
+ FT_ZERO( &decoder );
+ FT_ZERO( &cff_rec );
+
+ cff_rec.top_font.font_dict.num_designs = parser->num_designs;
+ cff_rec.top_font.font_dict.num_axes = parser->num_axes;
+ decoder.cff = &cff_rec;
+
+ psaux = (PSAux_Service)FT_Get_Module_Interface( library, "psaux" );
+ if ( !psaux )
+ {
+ FT_ERROR(( "cff_parser_run: cannot access `psaux' module\n" ));
+ error = FT_THROW( Missing_Module );
+ goto Exit;
+ }
+
+ error = psaux->cff_decoder_funcs->parse_charstrings_old(
+ &decoder, charstring_base, charstring_len, 1 );
+
+ /* Now copy the stack data in the temporary decoder object, */
+ /* converting it back to charstring number representations */
+ /* (this is ugly, I know). */
+ /* */
+ /* We overwrite the original top DICT charstring under the */
+ /* assumption that the charstring representation of the result */
+ /* of `cff_decoder_parse_charstrings' is shorter, which should */
+ /* be always true. */
+
+ q = charstring_base - 1;
+ stack = decoder.stack;
+
+ while ( stack < decoder.top )
+ {
+ FT_ULong num;
+ FT_Bool neg;
+
+
+ if ( (FT_UInt)( parser->top - parser->stack ) >= parser->stackSize )
+ goto Stack_Overflow;
+
+ *parser->top++ = q;
+
+ if ( *stack < 0 )
+ {
+ num = (FT_ULong)-*stack;
+ neg = 1;
+ }
+ else
+ {
+ num = (FT_ULong)*stack;
+ neg = 0;
+ }
+
+ if ( num & 0xFFFFU )
+ {
+ if ( neg )
+ num = (FT_ULong)-num;
+
+ *q++ = 255;
+ *q++ = ( num & 0xFF000000U ) >> 24;
+ *q++ = ( num & 0x00FF0000U ) >> 16;
+ *q++ = ( num & 0x0000FF00U ) >> 8;
+ *q++ = num & 0x000000FFU;
+ }
+ else
+ {
+ num >>= 16;
+
+ if ( neg )
+ {
+ if ( num <= 107 )
+ *q++ = (FT_Byte)( 139 - num );
+ else if ( num <= 1131 )
+ {
+ *q++ = (FT_Byte)( ( ( num - 108 ) >> 8 ) + 251 );
+ *q++ = (FT_Byte)( ( num - 108 ) & 0xFF );
+ }
+ else
+ {
+ num = (FT_ULong)-num;
+
+ *q++ = 28;
+ *q++ = (FT_Byte)( num >> 8 );
+ *q++ = (FT_Byte)( num & 0xFF );
+ }
+ }
+ else
+ {
+ if ( num <= 107 )
+ *q++ = (FT_Byte)( num + 139 );
+ else if ( num <= 1131 )
+ {
+ *q++ = (FT_Byte)( ( ( num - 108 ) >> 8 ) + 247 );
+ *q++ = (FT_Byte)( ( num - 108 ) & 0xFF );
+ }
+ else
+ {
+ *q++ = 28;
+ *q++ = (FT_Byte)( num >> 8 );
+ *q++ = (FT_Byte)( num & 0xFF );
+ }
+ }
+ }
+
+ stack++;
+ }
+ }
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
else
{
/* This is not a number, hence it's an operator. Compute its code */
/* and look for it in our current list. */
FT_UInt code;
- FT_UInt num_args = (FT_UInt)
- ( parser->top - parser->stack );
+ FT_UInt num_args;
const CFF_Field_Handler* field;
+ if ( (FT_UInt)( parser->top - parser->stack ) >= parser->stackSize )
+ goto Stack_Overflow;
+
+ num_args = (FT_UInt)( parser->top - parser->stack );
*parser->top = p;
- code = v;
+ code = v;
+
if ( v == 12 )
{
/* two byte operator */
@@ -1048,15 +1546,15 @@
case cff_kind_bool:
case cff_kind_string:
case cff_kind_num:
- val = cff_parse_num( parser->stack );
+ val = cff_parse_num( parser, parser->stack );
goto Store_Number;
case cff_kind_fixed:
- val = cff_parse_fixed( parser->stack );
+ val = cff_parse_fixed( parser, parser->stack );
goto Store_Number;
case cff_kind_fixed_thousand:
- val = cff_parse_fixed_scaled( parser->stack, 3 );
+ val = cff_parse_fixed_scaled( parser, parser->stack, 3 );
Store_Number:
switch ( field->size )
@@ -1125,7 +1623,7 @@
val = 0;
while ( num_args > 0 )
{
- val += cff_parse_num( data++ );
+ val = ADD_LONG( val, cff_parse_num( parser, data++ ) );
switch ( field->size )
{
case (8 / FT_CHAR_BIT):
@@ -1154,7 +1652,7 @@
}
break;
- default: /* callback */
+ default: /* callback or blend */
error = field->reader( parser );
if ( error )
goto Exit;
@@ -1168,7 +1666,10 @@
Found:
/* clear stack */
- parser->top = parser->stack;
+ /* TODO: could clear blend stack here, */
+ /* but we don't have access to subFont */
+ if ( field->kind != cff_kind_blend )
+ parser->top = parser->stack;
}
p++;
}
diff --git a/src/cff/cffparse.h b/src/cff/cffparse.h
index 8ad02ea..8a8caec 100644
--- a/src/cff/cffparse.h
+++ b/src/cff/cffparse.h
@@ -4,7 +4,7 @@
/* */
/* CFF token stream parser (specification) */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,45 +16,74 @@
/***************************************************************************/
-#ifndef __CFF_PARSE_H__
-#define __CFF_PARSE_H__
+#ifndef CFFPARSE_H_
+#define CFFPARSE_H_
#include <ft2build.h>
-#include "cfftypes.h"
+#include FT_INTERNAL_CFF_TYPES_H
#include FT_INTERNAL_OBJECTS_H
FT_BEGIN_HEADER
+ /* CFF uses constant parser stack size; */
+ /* CFF2 can increase from default 193 */
#define CFF_MAX_STACK_DEPTH 96
-#define CFF_CODE_TOPDICT 0x1000
-#define CFF_CODE_PRIVATE 0x2000
+ /*
+ * There are plans to remove the `maxstack' operator in a forthcoming
+ * revision of the CFF2 specification, increasing the (then static) stack
+ * size to 513. By making the default stack size equal to the maximum
+ * stack size, the operator is essentially disabled, which has the
+ * desired effect in FreeType.
+ */
+#define CFF2_MAX_STACK 513
+#define CFF2_DEFAULT_STACK 513
+
+#define CFF_CODE_TOPDICT 0x1000
+#define CFF_CODE_PRIVATE 0x2000
+#define CFF2_CODE_TOPDICT 0x3000
+#define CFF2_CODE_FONTDICT 0x4000
+#define CFF2_CODE_PRIVATE 0x5000
typedef struct CFF_ParserRec_
{
- FT_Library library;
- FT_Byte* start;
- FT_Byte* limit;
- FT_Byte* cursor;
+ FT_Library library;
+ FT_Byte* start;
+ FT_Byte* limit;
+ FT_Byte* cursor;
- FT_Byte* stack[CFF_MAX_STACK_DEPTH + 1];
- FT_Byte** top;
+ FT_Byte** stack;
+ FT_Byte** top;
+ FT_UInt stackSize; /* allocated size */
- FT_UInt object_code;
- void* object;
+ FT_UInt object_code;
+ void* object;
+
+ FT_UShort num_designs; /* a copy of `CFF_FontRecDict->num_designs' */
+ FT_UShort num_axes; /* a copy of `CFF_FontRecDict->num_axes' */
} CFF_ParserRec, *CFF_Parser;
- FT_LOCAL( void )
+ FT_LOCAL( FT_Long )
+ cff_parse_num( CFF_Parser parser,
+ FT_Byte** d );
+
+ FT_LOCAL( FT_Error )
cff_parser_init( CFF_Parser parser,
FT_UInt code,
void* object,
- FT_Library library);
+ FT_Library library,
+ FT_UInt stackSize,
+ FT_UShort num_designs,
+ FT_UShort num_axes );
+
+ FT_LOCAL( void )
+ cff_parser_done( CFF_Parser parser );
FT_LOCAL( FT_Error )
cff_parser_run( CFF_Parser parser,
@@ -72,6 +101,7 @@
cff_kind_bool,
cff_kind_delta,
cff_kind_callback,
+ cff_kind_blend,
cff_kind_max /* do not remove */
};
@@ -100,7 +130,7 @@
FT_END_HEADER
-#endif /* __CFF_PARSE_H__ */
+#endif /* CFFPARSE_H_ */
/* END */
diff --git a/src/cff/cffpic.c b/src/cff/cffpic.c
index d40dec5..08b74c7 100644
--- a/src/cff/cffpic.c
+++ b/src/cff/cffpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for cff module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/cff/cffpic.h b/src/cff/cffpic.h
index a29620e..8ba4203 100644
--- a/src/cff/cffpic.h
+++ b/src/cff/cffpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for cff module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,15 +16,12 @@
/***************************************************************************/
-#ifndef __CFFPIC_H__
-#define __CFFPIC_H__
+#ifndef CFFPIC_H_
+#define CFFPIC_H_
-FT_BEGIN_HEADER
-
#include FT_INTERNAL_PIC_H
-
#ifndef FT_CONFIG_OPTION_PIC
#define CFF_SERVICE_PS_INFO_GET cff_service_ps_info
@@ -34,6 +31,9 @@
#define CFF_SERVICE_CID_INFO_GET cff_service_cid_info
#define CFF_SERVICE_PROPERTIES_GET cff_service_properties
#define CFF_SERVICES_GET cff_services
+#define CFF_SERVICE_MULTI_MASTERS_GET cff_service_multi_masters
+#define CFF_SERVICE_METRICS_VAR_GET cff_service_metrics_variations
+#define CFF_SERVICE_CFF_LOAD_GET cff_service_cff_load
#define CFF_CMAP_ENCODING_CLASS_REC_GET cff_cmap_encoding_class_rec
#define CFF_CMAP_UNICODE_CLASS_REC_GET cff_cmap_unicode_class_rec
#define CFF_FIELD_HANDLERS_GET cff_field_handlers
@@ -47,20 +47,27 @@
#include FT_SERVICE_TT_CMAP_H
#include FT_SERVICE_CID_H
#include FT_SERVICE_PROPERTIES_H
+#include FT_SERVICE_MULTIPLE_MASTERS_H
+#include FT_SERVICE_METRICS_VARIATIONS_H
+FT_BEGIN_HEADER
+
typedef struct CffModulePIC_
{
- FT_ServiceDescRec* cff_services;
- CFF_Field_Handler* cff_field_handlers;
- FT_Service_PsInfoRec cff_service_ps_info;
- FT_Service_GlyphDictRec cff_service_glyph_dict;
- FT_Service_PsFontNameRec cff_service_ps_name;
- FT_Service_TTCMapsRec cff_service_get_cmap_info;
- FT_Service_CIDRec cff_service_cid_info;
- FT_Service_PropertiesRec cff_service_properties;
- FT_CMap_ClassRec cff_cmap_encoding_class_rec;
- FT_CMap_ClassRec cff_cmap_unicode_class_rec;
+ FT_ServiceDescRec* cff_services;
+ CFF_Field_Handler* cff_field_handlers;
+ FT_Service_PsInfoRec cff_service_ps_info;
+ FT_Service_GlyphDictRec cff_service_glyph_dict;
+ FT_Service_PsFontNameRec cff_service_ps_name;
+ FT_Service_TTCMapsRec cff_service_get_cmap_info;
+ FT_Service_CIDRec cff_service_cid_info;
+ FT_Service_PropertiesRec cff_service_properties;
+ FT_Service_MultiMastersRec cff_service_multi_masters;
+ FT_Service_MetricsVariationsRec cff_service_metrics_variations;
+ FT_Service_CFFLoadRec cff_service_cff_load;
+ FT_CMap_ClassRec cff_cmap_encoding_class_rec;
+ FT_CMap_ClassRec cff_cmap_unicode_class_rec;
} CffModulePIC;
@@ -82,6 +89,12 @@
( GET_PIC( library )->cff_service_properties )
#define CFF_SERVICES_GET \
( GET_PIC( library )->cff_services )
+#define CFF_SERVICE_MULTI_MASTERS_GET \
+ ( GET_PIC( library )->cff_service_multi_masters )
+#define CFF_SERVICE_METRICS_VAR_GET \
+ ( GET_PIC( library )->cff_service_metrics_variations )
+#define CFF_SERVICE_CFF_LOAD_GET \
+ ( GET_PIC( library )->cff_service_cff_load )
#define CFF_CMAP_ENCODING_CLASS_REC_GET \
( GET_PIC( library )->cff_cmap_encoding_class_rec )
#define CFF_CMAP_UNICODE_CLASS_REC_GET \
@@ -96,13 +109,13 @@
FT_Error
cff_driver_class_pic_init( FT_Library library );
+FT_END_HEADER
+
#endif /* FT_CONFIG_OPTION_PIC */
/* */
-FT_END_HEADER
-
-#endif /* __CFFPIC_H__ */
+#endif /* CFFPIC_H_ */
/* END */
diff --git a/src/cff/cfftoken.h b/src/cff/cfftoken.h
index 5b32076..fec1ca2 100644
--- a/src/cff/cfftoken.h
+++ b/src/cff/cfftoken.h
@@ -4,7 +4,7 @@
/* */
/* CFF token definitions (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,7 +20,7 @@
#define FT_STRUCTURE CFF_FontRecDictRec
#undef CFFCODE
-#define CFFCODE CFFCODE_TOPDICT
+#define CFFCODE CFF_CODE_TOPDICT
CFF_FIELD_STRING ( 0, version, "Version" )
CFF_FIELD_STRING ( 1, notice, "Notice" )
@@ -38,6 +38,9 @@
CFF_FIELD_NUM ( 13, unique_id, "UniqueID" )
CFF_FIELD_CALLBACK( 5, font_bbox, "FontBBox" )
CFF_FIELD_NUM ( 0x108, stroke_width, "StrokeWidth" )
+#if 0
+ CFF_FIELD_DELTA ( 14, xuid, 16, "XUID" )
+#endif
CFF_FIELD_NUM ( 15, charset_offset, "charset" )
CFF_FIELD_NUM ( 16, encoding_offset, "Encoding" )
CFF_FIELD_NUM ( 17, charstrings_offset, "CharStrings" )
@@ -48,8 +51,13 @@
#if 0
CFF_FIELD_STRING ( 0x116, base_font_name, "BaseFontName" )
CFF_FIELD_DELTA ( 0x117, base_font_blend, 16, "BaseFontBlend" )
+#endif
+
+ /* the next two operators were removed from the Type2 specification */
+ /* in version 16-March-2000 */
CFF_FIELD_CALLBACK( 0x118, multiple_master, "MultipleMaster" )
- CFF_FIELD_CALLBACK( 0x119, blend_axis_types, "BlendAxisTypes" )
+#if 0
+ CFF_FIELD_CALLBACK( 0x11A, blend_axis_types, "BlendAxisTypes" )
#endif
CFF_FIELD_CALLBACK( 0x11E, cid_ros, "ROS" )
@@ -70,7 +78,7 @@
#undef FT_STRUCTURE
#define FT_STRUCTURE CFF_PrivateRec
#undef CFFCODE
-#define CFFCODE CFFCODE_PRIVATE
+#define CFFCODE CFF_CODE_PRIVATE
CFF_FIELD_DELTA ( 6, blue_values, 14, "BlueValues" )
CFF_FIELD_DELTA ( 7, other_blues, 10, "OtherBlues" )
@@ -94,4 +102,49 @@
CFF_FIELD_NUM ( 21, nominal_width, "nominalWidthX" )
+#undef FT_STRUCTURE
+#define FT_STRUCTURE CFF_FontRecDictRec
+#undef CFFCODE
+#define CFFCODE CFF2_CODE_TOPDICT
+
+ CFF_FIELD_CALLBACK( 0x107, font_matrix, "FontMatrix" )
+ CFF_FIELD_NUM ( 17, charstrings_offset, "CharStrings" )
+ CFF_FIELD_NUM ( 0x124, cid_fd_array_offset, "FDArray" )
+ CFF_FIELD_NUM ( 0x125, cid_fd_select_offset, "FDSelect" )
+ CFF_FIELD_NUM ( 24, vstore_offset, "vstore" )
+ CFF_FIELD_CALLBACK( 25, maxstack, "maxstack" )
+
+
+#undef FT_STRUCTURE
+#define FT_STRUCTURE CFF_FontRecDictRec
+#undef CFFCODE
+#define CFFCODE CFF2_CODE_FONTDICT
+
+ CFF_FIELD_CALLBACK( 18, private_dict, "Private" )
+ CFF_FIELD_CALLBACK( 0x107, font_matrix, "FontMatrix" )
+
+
+#undef FT_STRUCTURE
+#define FT_STRUCTURE CFF_PrivateRec
+#undef CFFCODE
+#define CFFCODE CFF2_CODE_PRIVATE
+
+ CFF_FIELD_DELTA ( 6, blue_values, 14, "BlueValues" )
+ CFF_FIELD_DELTA ( 7, other_blues, 10, "OtherBlues" )
+ CFF_FIELD_DELTA ( 8, family_blues, 14, "FamilyBlues" )
+ CFF_FIELD_DELTA ( 9, family_other_blues, 10, "FamilyOtherBlues" )
+ CFF_FIELD_FIXED_1000( 0x109, blue_scale, "BlueScale" )
+ CFF_FIELD_NUM ( 0x10A, blue_shift, "BlueShift" )
+ CFF_FIELD_NUM ( 0x10B, blue_fuzz, "BlueFuzz" )
+ CFF_FIELD_NUM ( 10, standard_width, "StdHW" )
+ CFF_FIELD_NUM ( 11, standard_height, "StdVW" )
+ CFF_FIELD_DELTA ( 0x10C, snap_widths, 13, "StemSnapH" )
+ CFF_FIELD_DELTA ( 0x10D, snap_heights, 13, "StemSnapV" )
+ CFF_FIELD_NUM ( 0x111, language_group, "LanguageGroup" )
+ CFF_FIELD_FIXED ( 0x112, expansion_factor, "ExpansionFactor" )
+ CFF_FIELD_CALLBACK ( 22, vsindex, "vsindex" )
+ CFF_FIELD_BLEND ( 23, "blend" )
+ CFF_FIELD_NUM ( 19, local_subrs_offset, "Subrs" )
+
+
/* END */
diff --git a/src/cff/module.mk b/src/cff/module.mk
index ba08ebc..8013d5d 100644
--- a/src/cff/module.mk
+++ b/src/cff/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cff/rules.mk b/src/cff/rules.mk
index 7f6e857..bce6729 100644
--- a/src/cff/rules.mk
+++ b/src/cff/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -32,27 +32,14 @@
$(CFF_DIR)/cffload.c \
$(CFF_DIR)/cffobjs.c \
$(CFF_DIR)/cffparse.c \
- $(CFF_DIR)/cffpic.c \
- $(CFF_DIR)/cf2arrst.c \
- $(CFF_DIR)/cf2blues.c \
- $(CFF_DIR)/cf2error.c \
- $(CFF_DIR)/cf2font.c \
- $(CFF_DIR)/cf2ft.c \
- $(CFF_DIR)/cf2hints.c \
- $(CFF_DIR)/cf2intrp.c \
- $(CFF_DIR)/cf2read.c \
- $(CFF_DIR)/cf2stack.c
+ $(CFF_DIR)/cffpic.c
# CFF driver headers
#
CFF_DRV_H := $(CFF_DRV_SRC:%.c=%.h) \
$(CFF_DIR)/cfferrs.h \
- $(CFF_DIR)/cfftoken.h \
- $(CFF_DIR)/cfftypes.h \
- $(CFF_DIR)/cf2fixed.h \
- $(CFF_DIR)/cf2glue.h \
- $(CFF_DIR)/cf2types.h
+ $(CFF_DIR)/cfftoken.h
# CFF driver object(s)
diff --git a/src/cid/Jamfile b/src/cid/Jamfile
index af00180..1c232fd 100644
--- a/src/cid/Jamfile
+++ b/src/cid/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/cid Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,12 @@
if $(FT2_MULTI)
{
- _sources = cidobjs cidload cidgload cidriver cidparse ;
+ _sources = cidgload
+ cidload
+ cidobjs
+ cidparse
+ cidriver
+ ;
}
else
{
diff --git a/src/cid/ciderrs.h b/src/cid/ciderrs.h
index 5e0e776..a5a86e3 100644
--- a/src/cid/ciderrs.h
+++ b/src/cid/ciderrs.h
@@ -4,7 +4,7 @@
/* */
/* CID error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,12 +22,12 @@
/* */
/*************************************************************************/
-#ifndef __CIDERRS_H__
-#define __CIDERRS_H__
+#ifndef CIDERRS_H_
+#define CIDERRS_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX CID_Err_
@@ -35,7 +35,7 @@
#include FT_ERRORS_H
-#endif /* __CIDERRS_H__ */
+#endif /* CIDERRS_H_ */
/* END */
diff --git a/src/cid/cidgload.c b/src/cid/cidgload.c
index d06293c..d14f9a2 100644
--- a/src/cid/cidgload.c
+++ b/src/cid/cidgload.c
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 Glyph Loader (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -24,6 +24,10 @@
#include FT_OUTLINE_H
#include FT_INTERNAL_CALC_H
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include FT_INTERNAL_CFF_TYPES_H
+#include FT_DRIVER_H
+
#include "ciderrs.h"
@@ -52,9 +56,11 @@
FT_ULong glyph_length = 0;
PSAux_Service psaux = (PSAux_Service)face->psaux;
+ FT_Bool force_scaling = FALSE;
+
#ifdef FT_CONFIG_OPTION_INCREMENTAL
- FT_Incremental_InterfaceRec *inc =
- face->root.internal->incremental_interface;
+ FT_Incremental_InterfaceRec *inc =
+ face->root.internal->incremental_interface;
#endif
@@ -100,7 +106,7 @@
/* and charstring offset from the CIDMap. */
{
FT_UInt entry_len = (FT_UInt)( cid->fd_bytes + cid->gd_bytes );
- FT_ULong off1;
+ FT_ULong off1, off2;
if ( FT_STREAM_SEEK( cid->data_offset + cid->cidmap_offset +
@@ -108,18 +114,23 @@
FT_FRAME_ENTER( 2 * entry_len ) )
goto Exit;
- p = (FT_Byte*)stream->cursor;
- fd_select = cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
- off1 = 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;
+ p = (FT_Byte*)stream->cursor;
+ fd_select = cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
+ off1 = cid_get_offset( &p, (FT_Byte)cid->gd_bytes );
+ p += cid->fd_bytes;
+ off2 = cid_get_offset( &p, (FT_Byte)cid->gd_bytes );
FT_FRAME_EXIT();
- if ( fd_select >= (FT_ULong)cid->num_dicts )
+ if ( fd_select >= (FT_ULong)cid->num_dicts ||
+ off2 > stream->size ||
+ off1 > off2 )
{
+ FT_TRACE0(( "cid_load_glyph: invalid glyph stream offsets\n" ));
error = FT_THROW( Invalid_Offset );
goto Exit;
}
+
+ glyph_length = off2 - off1;
if ( glyph_length == 0 )
goto Exit;
if ( FT_ALLOC( charstring, glyph_length ) )
@@ -137,9 +148,10 @@
/* Set up subrs */
- decoder->num_subrs = cid_subrs->num_subrs;
- decoder->subrs = cid_subrs->code;
- decoder->subrs_len = 0;
+ decoder->num_subrs = cid_subrs->num_subrs;
+ decoder->subrs = cid_subrs->code;
+ decoder->subrs_len = 0;
+ decoder->subrs_hash = NULL;
/* Set up font matrix */
dict = cid->font_dicts + fd_select;
@@ -152,17 +164,69 @@
/* Adjustment for seed bytes. */
cs_offset = decoder->lenIV >= 0 ? (FT_UInt)decoder->lenIV : 0;
+ if ( cs_offset > glyph_length )
+ {
+ FT_TRACE0(( "cid_load_glyph: invalid glyph stream offsets\n" ));
+ error = FT_THROW( Invalid_Offset );
+ goto Exit;
+ }
/* Decrypt only if lenIV >= 0. */
if ( decoder->lenIV >= 0 )
psaux->t1_decrypt( charstring, glyph_length, 4330 );
- error = decoder->funcs.parse_charstrings(
- decoder, charstring + cs_offset,
- glyph_length - cs_offset );
- }
+ /* choose which renderer to use */
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
+ if ( ( (PS_Driver)FT_FACE_DRIVER( face ) )->hinting_engine ==
+ FT_HINTING_FREETYPE ||
+ decoder->builder.metrics_only )
+ error = psaux->t1_decoder_funcs->parse_charstrings_old(
+ decoder,
+ charstring + cs_offset,
+ glyph_length - cs_offset );
+#else
+ if ( decoder->builder.metrics_only )
+ error = psaux->t1_decoder_funcs->parse_metrics(
+ decoder,
+ charstring + cs_offset,
+ glyph_length - cs_offset );
+#endif
+ else
+ {
+ PS_Decoder psdecoder;
+ CFF_SubFontRec subfont;
- FT_FREE( charstring );
+
+ psaux->ps_decoder_init( &psdecoder, decoder, TRUE );
+
+ psaux->t1_make_subfont( FT_FACE( face ),
+ &dict->private_dict,
+ &subfont );
+ psdecoder.current_subfont = &subfont;
+
+ error = psaux->t1_decoder_funcs->parse_charstrings(
+ &psdecoder,
+ charstring + cs_offset,
+ glyph_length - cs_offset );
+
+ /* Adobe's engine uses 16.16 numbers everywhere; */
+ /* as a consequence, glyphs larger than 2000ppem get rejected */
+ if ( FT_ERR_EQ( error, Glyph_Too_Big ) )
+ {
+ /* this time, we retry unhinted and scale up the glyph later on */
+ /* (the engine uses and sets the hardcoded value 0x10000 / 64 = */
+ /* 0x400 for both `x_scale' and `y_scale' in this case) */
+ ((CID_GlyphSlot)decoder->builder.glyph)->hint = FALSE;
+
+ force_scaling = TRUE;
+
+ error = psaux->t1_decoder_funcs->parse_charstrings(
+ &psdecoder,
+ charstring + cs_offset,
+ glyph_length - cs_offset );
+ }
+ }
+ }
#ifdef FT_CONFIG_OPTION_INCREMENTAL
@@ -188,6 +252,10 @@
#endif /* FT_CONFIG_OPTION_INCREMENTAL */
Exit:
+ FT_FREE( charstring );
+
+ ((CID_GlyphSlot)decoder->builder.glyph)->scaled = force_scaling;
+
return error;
}
@@ -276,10 +344,12 @@
T1_DecoderRec decoder;
CID_Face face = (CID_Face)cidglyph->face;
FT_Bool hinting;
+ FT_Bool scaled;
PSAux_Service psaux = (PSAux_Service)face->psaux;
FT_Matrix font_matrix;
FT_Vector font_offset;
+ FT_Bool must_finish_decoder = FALSE;
if ( glyph_index >= (FT_UInt)face->root.num_glyphs )
@@ -299,7 +369,10 @@
hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 &&
( load_flags & FT_LOAD_NO_HINTING ) == 0 );
+ scaled = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 );
+ glyph->hint = hinting;
+ glyph->scaled = scaled;
cidglyph->format = FT_GLYPH_FORMAT_OUTLINE;
error = psaux->t1_decoder_funcs->init( &decoder,
@@ -317,6 +390,8 @@
/* TODO: initialize decoder.len_buildchar and decoder.buildchar */
/* if we ever support CID-keyed multiple master fonts */
+ must_finish_decoder = TRUE;
+
/* set up the decoder */
decoder.builder.no_recurse = FT_BOOL(
( ( load_flags & FT_LOAD_NO_RECURSE ) != 0 ) );
@@ -325,12 +400,18 @@
if ( error )
goto Exit;
+ /* copy flags back for forced scaling */
+ hinting = glyph->hint;
+ scaled = glyph->scaled;
+
font_matrix = decoder.font_matrix;
font_offset = decoder.font_offset;
/* save new glyph tables */
psaux->t1_decoder_funcs->done( &decoder );
+ must_finish_decoder = FALSE;
+
/* now set the metrics -- this is rather simple, as */
/* the left side bearing is the xMin, and the top side */
/* bearing the yMax */
@@ -357,7 +438,6 @@
{
FT_BBox cbox;
FT_Glyph_Metrics* metrics = &cidglyph->metrics;
- FT_Vector advance;
/* copy the _unscaled_ advance width */
@@ -377,24 +457,29 @@
if ( cidsize->metrics.y_ppem < 24 )
cidglyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
- /* apply the font matrix */
- FT_Outline_Transform( &cidglyph->outline, &font_matrix );
+ /* apply the font matrix, if any */
+ if ( font_matrix.xx != 0x10000L || font_matrix.yy != 0x10000L ||
+ font_matrix.xy != 0 || font_matrix.yx != 0 )
+ {
+ FT_Outline_Transform( &cidglyph->outline, &font_matrix );
- FT_Outline_Translate( &cidglyph->outline,
- font_offset.x,
- font_offset.y );
+ metrics->horiAdvance = FT_MulFix( metrics->horiAdvance,
+ font_matrix.xx );
+ metrics->vertAdvance = FT_MulFix( metrics->vertAdvance,
+ font_matrix.yy );
+ }
- advance.x = metrics->horiAdvance;
- advance.y = 0;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->horiAdvance = advance.x + font_offset.x;
+ if ( font_offset.x || font_offset.y )
+ {
+ FT_Outline_Translate( &cidglyph->outline,
+ font_offset.x,
+ font_offset.y );
- advance.x = 0;
- advance.y = metrics->vertAdvance;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->vertAdvance = advance.y + font_offset.y;
+ metrics->horiAdvance += font_offset.x;
+ metrics->vertAdvance += font_offset.y;
+ }
- if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )
+ if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 || scaled )
{
/* scale the outline and the metrics */
FT_Int n;
@@ -435,6 +520,10 @@
}
Exit:
+
+ if ( must_finish_decoder )
+ psaux->t1_decoder_funcs->done( &decoder );
+
return error;
}
diff --git a/src/cid/cidgload.h b/src/cid/cidgload.h
index 4a10ce5..4811852 100644
--- a/src/cid/cidgload.h
+++ b/src/cid/cidgload.h
@@ -4,7 +4,7 @@
/* */
/* OpenType Glyph Loader (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __CIDGLOAD_H__
-#define __CIDGLOAD_H__
+#ifndef CIDGLOAD_H_
+#define CIDGLOAD_H_
#include <ft2build.h>
@@ -45,7 +45,7 @@
FT_END_HEADER
-#endif /* __CIDGLOAD_H__ */
+#endif /* CIDGLOAD_H_ */
/* END */
diff --git a/src/cid/cidload.c b/src/cid/cidload.c
index 6f35860..27cd09b 100644
--- a/src/cid/cidload.c
+++ b/src/cid/cidload.c
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 font loader (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -167,6 +167,7 @@
matrix = &dict->font_matrix;
offset = &dict->font_offset;
+ /* input is scaled by 1000 to accommodate default FontMatrix */
result = cid_parser_to_fixed_array( parser, 6, temp, 3 );
if ( result < 6 )
@@ -180,15 +181,12 @@
return FT_THROW( Invalid_File_Format );
}
- /* Set Units per EM based on FontMatrix values. We set the value to */
- /* 1000 / temp_scale, because temp_scale was already multiplied by */
- /* 1000 (in t1_tofixed, from psobjs.c). */
-
- root->units_per_EM = (FT_UShort)FT_DivFix( 1000, temp_scale );
-
- /* we need to scale the values by 1.0/temp[3] */
+ /* atypical case */
if ( temp_scale != 0x10000L )
{
+ /* set units per EM based on FontMatrix values */
+ root->units_per_EM = (FT_UShort)FT_DivFix( 1000, temp_scale );
+
temp[0] = FT_DivFix( temp[0], temp_scale );
temp[1] = FT_DivFix( temp[1], temp_scale );
temp[2] = FT_DivFix( temp[2], temp_scale );
@@ -217,6 +215,7 @@
{
CID_FaceInfo cid = &face->cid;
FT_Memory memory = face->root.memory;
+ FT_Stream stream = parser->stream;
FT_Error error = FT_Err_Ok;
FT_Long num_dicts;
@@ -229,6 +228,31 @@
goto Exit;
}
+ /*
+ * A single entry in the FDArray must (at least) contain the following
+ * structure elements.
+ *
+ * %ADOBeginFontDict 18
+ * X dict begin 13
+ * /FontMatrix [X X X X] 22
+ * /Private X dict begin 22
+ * end 4
+ * end 4
+ * %ADOEndFontDict 16
+ *
+ * This needs 18+13+22+22+4+4+16=99 bytes or more. Normally, you also
+ * need a `dup X' at the very beginning and a `put' at the end, so a
+ * rough guess using 100 bytes as the minimum is justified.
+ */
+ if ( (FT_ULong)num_dicts > stream->size / 100 )
+ {
+ FT_TRACE0(( "parse_fd_array: adjusting FDArray size"
+ " (from %d to %d)\n",
+ num_dicts,
+ stream->size / 100 ));
+ num_dicts = (FT_Long)( stream->size / 100 );
+ }
+
if ( !cid->font_dicts )
{
FT_Int n;
@@ -397,7 +421,14 @@
cur = parser->root.cursor;
}
+
+ if ( !face->cid.num_dicts )
+ {
+ FT_ERROR(( "cid_parse_dict: No font dictionary found\n" ));
+ return FT_THROW( Invalid_File_Format );
+ }
}
+
return parser->root.error;
}
@@ -430,12 +461,8 @@
FT_Byte* p;
- /* Check for possible overflow. */
- if ( num_subrs == FT_UINT_MAX )
- {
- error = FT_THROW( Syntax_Error );
- goto Fail;
- }
+ if ( !num_subrs )
+ continue;
/* reallocate offsets array if needed */
if ( num_subrs + 1 > max_offsets )
@@ -469,14 +496,25 @@
/* offsets must be ordered */
for ( count = 1; count <= num_subrs; count++ )
if ( offsets[count - 1] > offsets[count] )
+ {
+ FT_ERROR(( "cid_read_subrs: offsets are not ordered\n" ));
+ error = FT_THROW( Invalid_File_Format );
goto Fail;
+ }
+
+ if ( offsets[num_subrs] > stream->size - cid->data_offset )
+ {
+ FT_ERROR(( "cid_read_subrs: too large `subrs' offsets\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Fail;
+ }
/* now, compute the size of subrs charstrings, */
/* allocate, and read them */
data_len = offsets[num_subrs] - offsets[0];
if ( FT_NEW_ARRAY( subr->code, num_subrs + 1 ) ||
- FT_ALLOC( subr->code[0], data_len ) )
+ FT_ALLOC( subr->code[0], data_len ) )
goto Fail;
if ( FT_STREAM_SEEK( cid->data_offset + offsets[0] ) ||
@@ -535,7 +573,7 @@
{
FT_UNUSED( face );
- FT_MEM_ZERO( loader, sizeof ( *loader ) );
+ FT_ZERO( loader );
}
@@ -656,6 +694,12 @@
CID_Parser* parser;
FT_Memory memory = face->root.memory;
FT_Error error;
+ FT_Int n;
+
+ CID_FaceInfo cid = &face->cid;
+
+ FT_ULong binary_length;
+ FT_ULong entry_len;
cid_init_loader( &loader, face );
@@ -680,22 +724,117 @@
if ( parser->binary_length )
{
+ if ( parser->binary_length >
+ face->root.stream->size - parser->data_offset )
+ {
+ FT_TRACE0(( "cid_face_open: adjusting length of binary data\n"
+ " (from %d to %d bytes)\n",
+ parser->binary_length,
+ face->root.stream->size - parser->data_offset ));
+ parser->binary_length = face->root.stream->size -
+ parser->data_offset;
+ }
+
/* we must convert the data section from hexadecimal to binary */
- if ( FT_ALLOC( face->binary_data, parser->binary_length ) ||
- cid_hex_to_binary( face->binary_data, parser->binary_length,
- parser->data_offset, face ) )
+ if ( FT_ALLOC( face->binary_data, parser->binary_length ) ||
+ FT_SET_ERROR( cid_hex_to_binary( face->binary_data,
+ parser->binary_length,
+ parser->data_offset,
+ face ) ) )
goto Exit;
FT_Stream_OpenMemory( face->cid_stream,
face->binary_data, parser->binary_length );
- face->cid.data_offset = 0;
+ cid->data_offset = 0;
}
else
{
- *face->cid_stream = *face->root.stream;
- face->cid.data_offset = loader.parser.data_offset;
+ *face->cid_stream = *face->root.stream;
+ cid->data_offset = loader.parser.data_offset;
}
+ /* sanity tests */
+
+ if ( cid->fd_bytes < 0 || cid->gd_bytes < 1 )
+ {
+ FT_ERROR(( "cid_parse_dict:"
+ " Invalid `FDBytes' or `GDBytes' value\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ /* allow at most 32bit offsets */
+ if ( cid->fd_bytes > 4 || cid->gd_bytes > 4 )
+ {
+ FT_ERROR(( "cid_parse_dict:"
+ " Values of `FDBytes' or `GDBytes' larger than 4\n"
+ " "
+ " are not supported\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ binary_length = face->cid_stream->size - cid->data_offset;
+ entry_len = (FT_ULong)( cid->fd_bytes + cid->gd_bytes );
+
+ for ( n = 0; n < cid->num_dicts; n++ )
+ {
+ CID_FaceDict dict = cid->font_dicts + n;
+
+
+ if ( dict->sd_bytes < 0 ||
+ ( dict->num_subrs && dict->sd_bytes < 1 ) )
+ {
+ FT_ERROR(( "cid_parse_dict: Invalid `SDBytes' value\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ if ( dict->sd_bytes > 4 )
+ {
+ FT_ERROR(( "cid_parse_dict:"
+ " Values of `SDBytes' larger than 4"
+ " are not supported\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ if ( dict->subrmap_offset > binary_length )
+ {
+ FT_ERROR(( "cid_parse_dict: Invalid `SubrMapOffset' value\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ /* `num_subrs' is scanned as a signed integer */
+ if ( (FT_Int)dict->num_subrs < 0 ||
+ ( dict->sd_bytes &&
+ dict->num_subrs > ( binary_length - dict->subrmap_offset ) /
+ (FT_UInt)dict->sd_bytes ) )
+ {
+ FT_ERROR(( "cid_parse_dict: Invalid `SubrCount' value\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+ }
+
+ if ( cid->cidmap_offset > binary_length )
+ {
+ FT_ERROR(( "cid_parse_dict: Invalid `CIDMapOffset' value\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ if ( entry_len &&
+ cid->cid_count >
+ ( binary_length - cid->cidmap_offset ) / entry_len )
+ {
+ FT_ERROR(( "cid_parse_dict: Invalid `CIDCount' value\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ /* we can now safely proceed */
error = cid_read_subrs( face );
Exit:
diff --git a/src/cid/cidload.h b/src/cid/cidload.h
index d7776d2..3f8bd08 100644
--- a/src/cid/cidload.h
+++ b/src/cid/cidload.h
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 font loader (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __CIDLOAD_H__
-#define __CIDLOAD_H__
+#ifndef CIDLOAD_H_
+#define CIDLOAD_H_
#include <ft2build.h>
@@ -47,7 +47,7 @@
FT_END_HEADER
-#endif /* __CIDLOAD_H__ */
+#endif /* CIDLOAD_H_ */
/* END */
diff --git a/src/cid/cidobjs.c b/src/cid/cidobjs.c
index a3d6895..77afe1c 100644
--- a/src/cid/cidobjs.c
+++ b/src/cid/cidobjs.c
@@ -4,7 +4,7 @@
/* */
/* CID objects manager (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -26,6 +26,7 @@
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
#include FT_INTERNAL_POSTSCRIPT_AUX_H
#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+#include FT_DRIVER_H
#include "ciderrs.h"
@@ -113,16 +114,16 @@
CID_Size size = (CID_Size)cidsize;
- if ( cidsize->internal )
+ if ( cidsize->internal->module_data )
{
PSH_Globals_Funcs funcs;
funcs = cid_size_get_globals_funcs( size );
if ( funcs )
- funcs->destroy( (PSH_Globals)cidsize->internal );
+ funcs->destroy( (PSH_Globals)cidsize->internal->module_data );
- cidsize->internal = NULL;
+ cidsize->internal->module_data = NULL;
}
}
@@ -145,7 +146,7 @@
error = funcs->create( cidsize->face->memory, priv, &globals );
if ( !error )
- cidsize->internal = (FT_Size_Internal)(void*)globals;
+ cidsize->internal->module_data = globals;
}
return error;
@@ -164,7 +165,7 @@
funcs = cid_size_get_globals_funcs( (CID_Size)size );
if ( funcs )
- funcs->set_scale( (PSH_Globals)size->internal,
+ funcs->set_scale( (PSH_Globals)size->internal->module_data,
size->metrics.x_scale,
size->metrics.y_scale,
0, 0 );
@@ -334,7 +335,7 @@
/* check the face index */
/* XXX: handle CID fonts with more than a single face */
- if ( face_index != 0 )
+ if ( ( face_index & 0xFFFF ) != 0 )
{
FT_ERROR(( "cid_face_init: invalid face index\n" ));
error = FT_THROW( Invalid_Argument );
@@ -354,7 +355,7 @@
cidface->num_glyphs = (FT_Long)cid->cid_count;
cidface->num_charmaps = 0;
- cidface->face_index = face_index;
+ cidface->face_index = face_index & 0xFFFF;
cidface->face_flags |= FT_FACE_FLAG_SCALABLE | /* scalable outlines */
FT_FACE_FLAG_HORIZONTAL | /* horizontal data */
@@ -463,9 +464,42 @@
/* FreeType error code. 0 means success. */
/* */
FT_LOCAL_DEF( FT_Error )
- cid_driver_init( FT_Module driver )
+ cid_driver_init( FT_Module module )
{
- FT_UNUSED( driver );
+ PS_Driver driver = (PS_Driver)module;
+
+ FT_UInt32 seed;
+
+
+ /* set default property values, cf. `ftt1drv.h' */
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
+ driver->hinting_engine = FT_HINTING_FREETYPE;
+#else
+ driver->hinting_engine = FT_HINTING_ADOBE;
+#endif
+
+ driver->no_stem_darkening = TRUE;
+
+ driver->darken_params[0] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1;
+ driver->darken_params[1] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1;
+ driver->darken_params[2] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2;
+ driver->darken_params[3] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2;
+ driver->darken_params[4] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3;
+ driver->darken_params[5] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3;
+ driver->darken_params[6] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4;
+ driver->darken_params[7] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4;
+
+ /* compute random seed from some memory addresses */
+ seed = (FT_UInt32)( (FT_Offset)(char*)&seed ^
+ (FT_Offset)(char*)&module ^
+ (FT_Offset)(char*)module->memory );
+ seed = seed ^ ( seed >> 10 ) ^ ( seed >> 20 );
+
+ driver->random_seed = (FT_Int32)seed;
+ if ( driver->random_seed < 0 )
+ driver->random_seed = -driver->random_seed;
+ else if ( driver->random_seed == 0 )
+ driver->random_seed = 123456789;
return FT_Err_Ok;
}
diff --git a/src/cid/cidobjs.h b/src/cid/cidobjs.h
index e9095ca..0221f01 100644
--- a/src/cid/cidobjs.h
+++ b/src/cid/cidobjs.h
@@ -4,7 +4,7 @@
/* */
/* CID objects manager (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __CIDOBJS_H__
-#define __CIDOBJS_H__
+#ifndef CIDOBJS_H_
+#define CIDOBJS_H_
#include <ft2build.h>
@@ -148,7 +148,7 @@
FT_END_HEADER
-#endif /* __CIDOBJS_H__ */
+#endif /* CIDOBJS_H_ */
/* END */
diff --git a/src/cid/cidparse.c b/src/cid/cidparse.c
index c276949..b1c7f3c 100644
--- a/src/cid/cidparse.c
+++ b/src/cid/cidparse.c
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 parser (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -47,6 +47,12 @@
/*************************************************************************/
+#define STARTDATA "StartData"
+#define STARTDATA_LEN ( sizeof ( STARTDATA ) - 1 )
+#define SFNTS "/sfnts"
+#define SFNTS_LEN ( sizeof ( SFNTS ) - 1 )
+
+
FT_LOCAL_DEF( FT_Error )
cid_parser_new( CID_Parser* parser,
FT_Stream stream,
@@ -59,7 +65,7 @@
FT_Byte *arg1, *arg2;
- FT_MEM_ZERO( parser, sizeof ( *parser ) );
+ FT_ZERO( parser );
psaux->ps_parser_funcs->init( &parser->root, 0, 0, memory );
parser->stream = stream;
@@ -85,9 +91,29 @@
/* now, read the rest of the file until we find */
/* `StartData' or `/sfnts' */
{
- FT_Byte buffer[256 + 10];
- FT_ULong read_len = 256 + 10;
- FT_Byte* p = buffer;
+ /*
+ * The algorithm is as follows (omitting the case with less than 256
+ * bytes to fill for simplicity).
+ *
+ * 1. Fill the buffer with 256 + STARTDATA_LEN bytes.
+ *
+ * 2. Search for the STARTDATA and SFNTS strings at positions
+ * buffer[0], buffer[1], ...,
+ * buffer[255 + STARTDATA_LEN - SFNTS_LEN].
+ *
+ * 3. Move the last STARTDATA_LEN bytes to buffer[0].
+ *
+ * 4. Fill the buffer with 256 bytes, starting at STARTDATA_LEN.
+ *
+ * 5. Repeat with step 2.
+ *
+ */
+ FT_Byte buffer[256 + STARTDATA_LEN + 1];
+
+ /* values for the first loop */
+ FT_ULong read_len = 256 + STARTDATA_LEN;
+ FT_ULong read_offset = 0;
+ FT_Byte* p = buffer;
for ( offset = FT_STREAM_POS(); ; offset += 256 )
@@ -96,40 +122,48 @@
stream_len = stream->size - FT_STREAM_POS();
- if ( stream_len == 0 )
+
+ read_len = FT_MIN( read_len, stream_len );
+ if ( FT_STREAM_READ( p, read_len ) )
+ goto Exit;
+
+ /* ensure that we do not compare with data beyond the buffer */
+ p[read_len] = '\0';
+
+ limit = p + read_len - SFNTS_LEN;
+
+ for ( p = buffer; p < limit; p++ )
+ {
+ if ( p[0] == 'S' &&
+ ft_strncmp( (char*)p, STARTDATA, STARTDATA_LEN ) == 0 )
+ {
+ /* save offset of binary data after `StartData' */
+ offset += (FT_ULong)( p - buffer ) + STARTDATA_LEN + 1;
+ goto Found;
+ }
+ else if ( p[1] == 's' &&
+ ft_strncmp( (char*)p, SFNTS, SFNTS_LEN ) == 0 )
+ {
+ offset += (FT_ULong)( p - buffer ) + SFNTS_LEN + 1;
+ goto Found;
+ }
+ }
+
+ if ( read_offset + read_len < STARTDATA_LEN )
{
FT_TRACE2(( "cid_parser_new: no `StartData' keyword found\n" ));
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
- read_len = FT_MIN( read_len, stream_len );
- if ( FT_STREAM_READ( p, read_len ) )
- goto Exit;
+ FT_MEM_MOVE( buffer,
+ buffer + read_offset + read_len - STARTDATA_LEN,
+ STARTDATA_LEN );
- if ( read_len < 256 )
- p[read_len] = '\0';
-
- limit = p + read_len - 10;
-
- for ( p = buffer; p < limit; p++ )
- {
- if ( p[0] == 'S' && ft_strncmp( (char*)p, "StartData", 9 ) == 0 )
- {
- /* save offset of binary data after `StartData' */
- offset += (FT_ULong)( p - buffer + 10 );
- goto Found;
- }
- else if ( p[1] == 's' && ft_strncmp( (char*)p, "/sfnts", 6 ) == 0 )
- {
- offset += (FT_ULong)( p - buffer + 7 );
- goto Found;
- }
- }
-
- FT_MEM_MOVE( buffer, p, 10 );
- read_len = 256;
- p = buffer + 10;
+ /* values for the next loop */
+ read_len = 256;
+ read_offset = STARTDATA_LEN;
+ p = buffer + read_offset;
}
}
@@ -165,7 +199,7 @@
limit = parser->root.limit;
cur = parser->root.cursor;
- while ( cur < limit )
+ while ( cur <= limit - SFNTS_LEN )
{
if ( parser->root.error )
{
@@ -173,11 +207,13 @@
goto Exit;
}
- if ( cur[0] == 'S' && ft_strncmp( (char*)cur, "StartData", 9 ) == 0 )
+ if ( cur[0] == 'S' &&
+ cur <= limit - STARTDATA_LEN &&
+ ft_strncmp( (char*)cur, STARTDATA, STARTDATA_LEN ) == 0 )
{
if ( ft_strncmp( (char*)arg1, "(Hex)", 5 ) == 0 )
{
- FT_Long tmp = ft_atol( (const char *)arg2 );
+ FT_Long tmp = ft_strtol( (const char *)arg2, NULL, 10 );
if ( tmp < 0 )
@@ -191,7 +227,8 @@
goto Exit;
}
- else if ( cur[1] == 's' && ft_strncmp( (char*)cur, "/sfnts", 6 ) == 0 )
+ else if ( cur[1] == 's' &&
+ ft_strncmp( (char*)cur, SFNTS, SFNTS_LEN ) == 0 )
{
FT_TRACE2(( "cid_parser_new: cannot handle Type 11 fonts\n" ));
error = FT_THROW( Unknown_File_Format );
@@ -216,6 +253,12 @@
}
+#undef STARTDATA
+#undef STARTDATA_LEN
+#undef SFNTS
+#undef SFNTS_LEN
+
+
FT_LOCAL_DEF( void )
cid_parser_done( CID_Parser* parser )
{
diff --git a/src/cid/cidparse.h b/src/cid/cidparse.h
index f581bb4..61602f7 100644
--- a/src/cid/cidparse.h
+++ b/src/cid/cidparse.h
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 parser (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __CIDPARSE_H__
-#define __CIDPARSE_H__
+#ifndef CIDPARSE_H_
+#define CIDPARSE_H_
#include <ft2build.h>
@@ -117,7 +117,7 @@
FT_END_HEADER
-#endif /* __CIDPARSE_H__ */
+#endif /* CIDPARSE_H_ */
/* END */
diff --git a/src/cid/cidriver.c b/src/cid/cidriver.c
index 07c4cc4..d9faf35 100644
--- a/src/cid/cidriver.c
+++ b/src/cid/cidriver.c
@@ -4,7 +4,7 @@
/* */
/* CID driver interface (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,6 +20,7 @@
#include "cidriver.h"
#include "cidgload.h"
#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_POSTSCRIPT_PROPS_H
#include "ciderrs.h"
@@ -27,6 +28,10 @@
#include FT_SERVICE_FONT_FORMAT_H
#include FT_SERVICE_POSTSCRIPT_INFO_H
#include FT_SERVICE_CID_H
+#include FT_SERVICE_PROPERTIES_H
+#include FT_DRIVER_H
+
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
/*************************************************************************/
@@ -59,7 +64,7 @@
static const FT_Service_PsFontNameRec cid_service_ps_name =
{
- (FT_PsName_GetFunc) cid_get_postscript_name
+ (FT_PsName_GetFunc)cid_get_postscript_name /* get_ps_font_name */
};
@@ -88,11 +93,14 @@
static const FT_Service_PsInfoRec cid_service_ps_info =
{
- (PS_GetFontInfoFunc) cid_ps_get_font_info,
- (PS_GetFontExtraFunc) cid_ps_get_font_extra,
- (PS_HasGlyphNamesFunc) NULL, /* unsupported with CID fonts */
- (PS_GetFontPrivateFunc)NULL, /* unsupported */
- (PS_GetFontValueFunc) NULL /* not implemented */
+ (PS_GetFontInfoFunc) cid_ps_get_font_info, /* ps_get_font_info */
+ (PS_GetFontExtraFunc) cid_ps_get_font_extra, /* ps_get_font_extra */
+ /* unsupported with CID fonts */
+ (PS_HasGlyphNamesFunc) NULL, /* ps_has_glyph_names */
+ /* unsupported */
+ (PS_GetFontPrivateFunc)NULL, /* ps_get_font_private */
+ /* not implemented */
+ (PS_GetFontValueFunc) NULL /* ps_get_font_value */
};
@@ -155,13 +163,28 @@
static const FT_Service_CIDRec cid_service_cid_info =
{
- (FT_CID_GetRegistryOrderingSupplementFunc)cid_get_ros,
- (FT_CID_GetIsInternallyCIDKeyedFunc) cid_get_is_cid,
- (FT_CID_GetCIDFromGlyphIndexFunc) cid_get_cid_from_glyph_index
+ (FT_CID_GetRegistryOrderingSupplementFunc)
+ cid_get_ros, /* get_ros */
+ (FT_CID_GetIsInternallyCIDKeyedFunc)
+ cid_get_is_cid, /* get_is_cid */
+ (FT_CID_GetCIDFromGlyphIndexFunc)
+ cid_get_cid_from_glyph_index /* get_cid_from_glyph_index */
};
/*
+ * PROPERTY SERVICE
+ *
+ */
+
+ FT_DEFINE_SERVICE_PROPERTIESREC(
+ cid_service_properties,
+
+ (FT_Properties_SetFunc)ps_property_set, /* set_property */
+ (FT_Properties_GetFunc)ps_property_get ) /* get_property */
+
+
+ /*
* SERVICE LIST
*
*/
@@ -172,6 +195,7 @@
{ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cid_service_ps_name },
{ FT_SERVICE_ID_POSTSCRIPT_INFO, &cid_service_ps_info },
{ FT_SERVICE_ID_CID, &cid_service_cid_info },
+ { FT_SERVICE_ID_PROPERTIES, &cid_service_properties },
{ NULL, NULL }
};
@@ -190,46 +214,42 @@
FT_CALLBACK_TABLE_DEF
const FT_Driver_ClassRec t1cid_driver_class =
{
- /* first of all, the FT_Module_Class fields */
{
FT_MODULE_FONT_DRIVER |
FT_MODULE_DRIVER_SCALABLE |
FT_MODULE_DRIVER_HAS_HINTER,
+ sizeof ( PS_DriverRec ),
- sizeof ( FT_DriverRec ),
"t1cid", /* module name */
0x10000L, /* version 1.0 of driver */
0x20000L, /* requires FreeType 2.0 */
- 0,
+ NULL, /* module-specific interface */
- cid_driver_init,
- cid_driver_done,
- cid_get_interface
+ cid_driver_init, /* FT_Module_Constructor module_init */
+ cid_driver_done, /* FT_Module_Destructor module_done */
+ cid_get_interface /* FT_Module_Requester get_interface */
},
- /* then the other font drivers fields */
sizeof ( CID_FaceRec ),
sizeof ( CID_SizeRec ),
sizeof ( CID_GlyphSlotRec ),
- cid_face_init,
- cid_face_done,
+ cid_face_init, /* FT_Face_InitFunc init_face */
+ cid_face_done, /* FT_Face_DoneFunc done_face */
+ cid_size_init, /* FT_Size_InitFunc init_size */
+ cid_size_done, /* FT_Size_DoneFunc done_size */
+ cid_slot_init, /* FT_Slot_InitFunc init_slot */
+ cid_slot_done, /* FT_Slot_DoneFunc done_slot */
- cid_size_init,
- cid_size_done,
- cid_slot_init,
- cid_slot_done,
+ cid_slot_load_glyph, /* FT_Slot_LoadFunc load_glyph */
- cid_slot_load_glyph,
+ NULL, /* FT_Face_GetKerningFunc get_kerning */
+ NULL, /* FT_Face_AttachFunc attach_file */
+ NULL, /* FT_Face_GetAdvancesFunc get_advances */
- 0, /* FT_Face_GetKerningFunc */
- 0, /* FT_Face_AttachFunc */
-
- 0, /* FT_Face_GetAdvancesFunc */
-
- cid_size_request,
- 0 /* FT_Size_SelectFunc */
+ cid_size_request, /* FT_Size_RequestFunc request_size */
+ NULL /* FT_Size_SelectFunc select_size */
};
diff --git a/src/cid/cidriver.h b/src/cid/cidriver.h
index e5b8678..59d9ded 100644
--- a/src/cid/cidriver.h
+++ b/src/cid/cidriver.h
@@ -4,7 +4,7 @@
/* */
/* High-level CID driver interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __CIDRIVER_H__
-#define __CIDRIVER_H__
+#ifndef CIDRIVER_H_
+#define CIDRIVER_H_
#include <ft2build.h>
@@ -37,7 +37,7 @@
FT_END_HEADER
-#endif /* __CIDRIVER_H__ */
+#endif /* CIDRIVER_H_ */
/* END */
diff --git a/src/cid/cidtoken.h b/src/cid/cidtoken.h
index 82eae0c..b0e2dac 100644
--- a/src/cid/cidtoken.h
+++ b/src/cid/cidtoken.h
@@ -4,7 +4,7 @@
/* */
/* CID token definitions (specification only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/cid/module.mk b/src/cid/module.mk
index e312a3c..9010e33 100644
--- a/src/cid/module.mk
+++ b/src/cid/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cid/rules.mk b/src/cid/rules.mk
index 282f2aa..94333bd 100644
--- a/src/cid/rules.mk
+++ b/src/cid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cid/type1cid.c b/src/cid/type1cid.c
index 0d54ca7..61770e3 100644
--- a/src/cid/type1cid.c
+++ b/src/cid/type1cid.c
@@ -4,7 +4,7 @@
/* */
/* FreeType OpenType driver component (body only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,13 +17,13 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
-#include "cidparse.c"
+
+#include "cidgload.c"
#include "cidload.c"
#include "cidobjs.c"
+#include "cidparse.c"
#include "cidriver.c"
-#include "cidgload.c"
/* END */
diff --git a/src/gxvalid/Jamfile b/src/gxvalid/Jamfile
index 9419067..74f3c51 100644
--- a/src/gxvalid/Jamfile
+++ b/src/gxvalid/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/gxvalid Jamfile
#
-# Copyright 2005-2015 by
+# Copyright 2005-2018 by
# suzuki toshiya, Masatake YAMATO and Red Hat K.K.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -17,10 +17,29 @@
if $(FT2_MULTI)
{
- _sources = gxvcommn gxvfeat gxvbsln gxvtrak gxvopbd gxvprop
- gxvmort gxvmort0 gxvmort1 gxvmort2 gxvmort4 gxvmort5
- gxvmorx gxvmorx0 gxvmorx1 gxvmorx2 gxvmorx4 gxvmorx5
- gxvlcar gxvkern gxvmod gxvjust ;
+ _sources = gxvbsln
+ gxvcommn
+ gxvfeat
+ gxvjust
+ gxvkern
+ gxvlcar
+ gxvmod
+ gxvmort
+ gxvmort0
+ gxvmort1
+ gxvmort2
+ gxvmort4
+ gxvmort5
+ gxvmorx
+ gxvmorx0
+ gxvmorx1
+ gxvmorx2
+ gxvmorx4
+ gxvmorx5
+ gxvopbd
+ gxvprop
+ gxvtrak
+ ;
}
else
{
diff --git a/src/gxvalid/README b/src/gxvalid/README
index 60f2fc1..af8128e 100644
--- a/src/gxvalid/README
+++ b/src/gxvalid/README
@@ -9,7 +9,7 @@
additional tables in TrueType font which are used by `QuickDraw GX
Text', Apple Advanced Typography (AAT). In addition, gxvalid can
validates `kern' tables which have been extended for AAT. Like the
- otvalid module, gxvalid uses Freetype 2's validator framework
+ otvalid module, gxvalid uses FreeType 2's validator framework
(ftvalid).
You can link gxvalid with your program; before running your own layout
@@ -287,11 +287,11 @@
4-5. invalid feature number (117/183)
-------------------------------------
- The GX/AAT extension can include 255 different layout features, but
- popular layout features are predefined (see
- http://developer.apple.com/fonts/Registry/index.html). Some fonts
- include feature numbers which are incompatible with the predefined
- feature registry.
+ The GX/AAT extension can include 255 different layout features,
+ but popular layout features are predefined (see
+ https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html).
+ Some fonts include feature numbers which are incompatible with the
+ predefined feature registry.
In our survey, there are 140 fonts including `feat' table.
@@ -413,7 +413,7 @@
format assured for Windows and OS/2 support is only subtable
format 0. The Microsoft TrueType specification also describes
subtable format 2, but does not mention which platforms support
- it. Aubtable formats 1, 3, and higher are documented as reserved
+ it. Subtable formats 1, 3, and higher are documented as reserved
for future use. Therefore, the classic version can store subtable
formats 0 and 2, at least. `ttfdump.exe', a font tool provided by
Microsoft, ignores the subtable format written in the subtable
@@ -518,7 +518,7 @@
------------------------------------------------------------------------
-Copyright 2004-2015 by
+Copyright 2004-2018 by
suzuki toshiya, Masatake YAMATO, Red hat K.K.,
David Turner, Robert Wilhelm, and Werner Lemberg.
diff --git a/src/gxvalid/gxvalid.c b/src/gxvalid/gxvalid.c
index 7b5b091..d0577a2 100644
--- a/src/gxvalid/gxvalid.c
+++ b/src/gxvalid/gxvalid.c
@@ -4,7 +4,7 @@
/* */
/* FreeType validator for TrueTypeGX/AAT tables (body only). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -16,15 +16,17 @@
/* */
/***************************************************************************/
-#define FT_MAKE_OPTION_SINGLE_OBJECT
+#define FT_MAKE_OPTION_SINGLE_OBJECT
#include <ft2build.h>
-#include "gxvfeat.c"
-#include "gxvcommn.c"
#include "gxvbsln.c"
-#include "gxvtrak.c"
+#include "gxvcommn.c"
+#include "gxvfeat.c"
#include "gxvjust.c"
+#include "gxvkern.c"
+#include "gxvlcar.c"
+#include "gxvmod.c"
#include "gxvmort.c"
#include "gxvmort0.c"
#include "gxvmort1.c"
@@ -37,11 +39,9 @@
#include "gxvmorx2.c"
#include "gxvmorx4.c"
#include "gxvmorx5.c"
-#include "gxvkern.c"
#include "gxvopbd.c"
#include "gxvprop.c"
-#include "gxvlcar.c"
-#include "gxvmod.c"
+#include "gxvtrak.c"
/* END */
diff --git a/src/gxvalid/gxvalid.h b/src/gxvalid/gxvalid.h
index 8c227d0..19f0379 100644
--- a/src/gxvalid/gxvalid.h
+++ b/src/gxvalid/gxvalid.h
@@ -2,9 +2,9 @@
/* */
/* gxvalid.h */
/* */
-/* TrueTyeeGX/AAT table validation (specification only). */
+/* TrueTypeGX/AAT table validation (specification only). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -25,8 +25,8 @@
/***************************************************************************/
-#ifndef __GXVALID_H__
-#define __GXVALID_H__
+#ifndef GXVALID_H_
+#define GXVALID_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -102,7 +102,7 @@
FT_END_HEADER
-#endif /* __GXVALID_H__ */
+#endif /* GXVALID_H_ */
/* END */
diff --git a/src/gxvalid/gxvbsln.c b/src/gxvalid/gxvbsln.c
index 1b17a5d..c367d38 100644
--- a/src/gxvalid/gxvbsln.c
+++ b/src/gxvalid/gxvbsln.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT bsln table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvcommn.c b/src/gxvalid/gxvcommn.c
index 93f6ffb..b966011 100644
--- a/src/gxvalid/gxvcommn.c
+++ b/src/gxvalid/gxvcommn.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT common tables validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -454,7 +454,7 @@
}
- /* ================= Segment Single Format 2 Loolup Table ============== */
+ /* ================= Segment Single Format 2 Lookup Table ============== */
/*
* Apple spec says:
*
@@ -789,7 +789,7 @@
FT_INVALID_FORMAT;
func = fmt_funcs_table[format];
- if ( func == NULL )
+ if ( !func )
FT_INVALID_FORMAT;
func( p, limit, gxvalid );
@@ -900,7 +900,7 @@
for ( i = 0; i < nnames; i++ )
{
if ( FT_Get_Sfnt_Name( gxvalid->face, i, &name ) != FT_Err_Ok )
- continue ;
+ continue;
if ( name.name_id == name_index )
goto Out;
@@ -972,7 +972,7 @@
FT_UShort i;
- ft_memset( nGlyphInClass, 0, 256 );
+ FT_MEM_ZERO( nGlyphInClass, 256 );
for ( i = 0; i < nGlyphs; i++ )
@@ -1159,13 +1159,9 @@
case GXV_GLYPHOFFSET_LONG:
glyphOffset.l = FT_NEXT_LONG( p );
break;
-
- default:
- GXV_SET_ERR_IF_PARANOID( FT_INVALID_FORMAT );
- goto Exit;
}
- if ( NULL != gxvalid->statetable.entry_validate_func )
+ if ( gxvalid->statetable.entry_validate_func )
gxvalid->statetable.entry_validate_func( state,
flags,
&glyphOffset,
@@ -1174,7 +1170,6 @@
gxvalid );
}
- Exit:
*length_p = (FT_UShort)( p - table );
GXV_EXIT;
@@ -1249,10 +1244,10 @@
if ( stateSize > 0xFF )
FT_INVALID_DATA;
- if ( gxvalid->statetable.optdata_load_func != NULL )
+ if ( gxvalid->statetable.optdata_load_func )
gxvalid->statetable.optdata_load_func( p, limit, gxvalid );
- if ( gxvalid->statetable.subtable_setup_func != NULL)
+ if ( gxvalid->statetable.subtable_setup_func )
setup_func = gxvalid->statetable.subtable_setup_func;
else
setup_func = gxv_StateTable_subtable_setup;
@@ -1477,7 +1472,7 @@
if ( ( p + ( maxEntry + 1 ) * entrySize ) > limit )
FT_INVALID_TOO_SHORT;
- for (entry = 0; entry <= maxEntry ; entry++ )
+ for (entry = 0; entry <= maxEntry; entry++ )
{
FT_UShort newState_idx;
FT_UShort flags;
@@ -1539,7 +1534,7 @@
goto Exit;
}
- if ( NULL != gxvalid->xstatetable.entry_validate_func )
+ if ( gxvalid->xstatetable.entry_validate_func )
gxvalid->xstatetable.entry_validate_func( state,
flags,
&glyphOffset,
@@ -1596,10 +1591,10 @@
GXV_TRACE(( "StateTable Subtables\n" ));
- if ( gxvalid->xstatetable.optdata_load_func != NULL )
+ if ( gxvalid->xstatetable.optdata_load_func )
gxvalid->xstatetable.optdata_load_func( p, limit, gxvalid );
- if ( gxvalid->xstatetable.subtable_setup_func != NULL )
+ if ( gxvalid->xstatetable.subtable_setup_func )
setup_func = gxvalid->xstatetable.subtable_setup_func;
else
setup_func = gxv_XStateTable_subtable_setup;
diff --git a/src/gxvalid/gxvcommn.h b/src/gxvalid/gxvcommn.h
index b24608c..8e4ff9c 100644
--- a/src/gxvalid/gxvcommn.h
+++ b/src/gxvalid/gxvcommn.h
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT common tables validation (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -39,8 +39,8 @@
*/
-#ifndef __GXVCOMMN_H__
-#define __GXVCOMMN_H__
+#ifndef GXVCOMMN_H_
+#define GXVCOMMN_H_
#include <ft2build.h>
@@ -338,7 +338,7 @@
\
\
for ( b = p; b < (FT_Bytes)p + len; b++ ) \
- FT_TRACE1(("\\x%02x", *b)) ; \
+ FT_TRACE1(("\\x%02x", *b)); \
} \
FT_END_STMNT
@@ -350,9 +350,9 @@
\
for ( b = p; b < (FT_Bytes)p + len; b++ ) \
if ( 0x40 < *b && *b < 0x7E ) \
- FT_TRACE1(("%c", *b)) ; \
+ FT_TRACE1(("%c", *b)); \
else \
- FT_TRACE1(("\\x%02x", *b)) ; \
+ FT_TRACE1(("\\x%02x", *b)); \
} \
FT_END_STMNT
@@ -576,7 +576,7 @@
FT_END_HEADER
-#endif /* __GXVCOMMN_H__ */
+#endif /* GXVCOMMN_H_ */
/* END */
diff --git a/src/gxvalid/gxverror.h b/src/gxvalid/gxverror.h
index 6bbc23a..d115125 100644
--- a/src/gxvalid/gxverror.h
+++ b/src/gxvalid/gxverror.h
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT validation module error codes (specification only). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -32,12 +32,12 @@
/* */
/*************************************************************************/
-#ifndef __GXVERROR_H__
-#define __GXVERROR_H__
+#ifndef GXVERROR_H_
+#define GXVERROR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX GXV_Err_
@@ -45,7 +45,7 @@
#include FT_ERRORS_H
-#endif /* __GXVERROR_H__ */
+#endif /* GXVERROR_H_ */
/* END */
diff --git a/src/gxvalid/gxvfeat.c b/src/gxvalid/gxvfeat.c
index 0da9777..2c805d1 100644
--- a/src/gxvalid/gxvfeat.c
+++ b/src/gxvalid/gxvfeat.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT feat table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvfeat.h b/src/gxvalid/gxvfeat.h
index b617df5..2d94380 100644
--- a/src/gxvalid/gxvfeat.h
+++ b/src/gxvalid/gxvfeat.h
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT feat table validation (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -25,8 +25,8 @@
/***************************************************************************/
-#ifndef __GXVFEAT_H__
-#define __GXVFEAT_H__
+#ifndef GXVFEAT_H_
+#define GXVFEAT_H_
#include "gxvalid.h"
@@ -167,7 +167,7 @@
};
-#endif /* __GXVFEAT_H__ */
+#endif /* GXVFEAT_H_ */
/* END */
diff --git a/src/gxvalid/gxvfgen.c b/src/gxvalid/gxvfgen.c
index 75c5e20..840c0f3 100644
--- a/src/gxvalid/gxvfgen.c
+++ b/src/gxvalid/gxvfgen.c
@@ -5,7 +5,7 @@
/* Generate feature registry data for gxv `feat' validator. */
/* This program is derived from gxfeatreg.c in gxlayout. */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* Masatake YAMATO and Redhat K.K. */
/* */
/* This file may only be used, */
@@ -21,7 +21,7 @@
/* gxfeatreg.c */
/* */
/* Database of font features pre-defined by Apple Computer, Inc. */
-/* http://developer.apple.com/fonts/Registry/ */
+/* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html */
/* (body). */
/* */
/* Copyright 2003 by */
diff --git a/src/gxvalid/gxvjust.c b/src/gxvalid/gxvjust.c
index 55b44bc..00c4293 100644
--- a/src/gxvalid/gxvjust.c
+++ b/src/gxvalid/gxvjust.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT just table validation (body). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -152,7 +152,7 @@
FT_Bytes limit,
GXV_Validator gxvalid )
{
- FT_Bytes p = table ;
+ FT_Bytes p = table;
FT_Bytes wdc_end = table + GXV_JUST_DATA( wdc_offset_max );
FT_UInt i;
diff --git a/src/gxvalid/gxvkern.c b/src/gxvalid/gxvkern.c
index f257c03..9c0efd7 100644
--- a/src/gxvalid/gxvkern.c
+++ b/src/gxvalid/gxvkern.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT kern table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -693,7 +693,7 @@
GXV_NAME_ENTER( "validating coverage" );
- GXV_TRACE(( "interprete coverage 0x%04x by Apple style\n", coverage ));
+ GXV_TRACE(( "interpret coverage 0x%04x by Apple style\n", coverage ));
if ( KERN_IS_NEW( gxvalid ) )
{
@@ -728,7 +728,7 @@
}
}
- GXV_TRACE(( "cannot interprete coverage, broken kern subtable\n" ));
+ GXV_TRACE(( "cannot interpret coverage, broken kern subtable\n" ));
Exit:
GXV_EXIT;
diff --git a/src/gxvalid/gxvlcar.c b/src/gxvalid/gxvlcar.c
index af589fd..0f261a9 100644
--- a/src/gxvalid/gxvlcar.c
+++ b/src/gxvalid/gxvlcar.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT lcar table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -114,7 +114,7 @@
+------ lcar --------------------+
| |
| +===============+ |
- | | looup header | |
+ | | lookup header | |
| +===============+ |
| | BinSrchHeader | |
| +===============+ |
diff --git a/src/gxvalid/gxvmod.c b/src/gxvalid/gxvmod.c
index 17a02e7..1a3c862 100644
--- a/src/gxvalid/gxvmod.c
+++ b/src/gxvalid/gxvmod.c
@@ -4,7 +4,7 @@
/* */
/* FreeType's TrueTypeGX/AAT validation module implementation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -235,14 +235,14 @@
static
const FT_Service_GXvalidateRec gxvalid_interface =
{
- gxv_validate
+ gxv_validate /* validate */
};
static
const FT_Service_CKERNvalidateRec ckernvalid_interface =
{
- classic_kern_validate
+ classic_kern_validate /* validate */
};
@@ -274,11 +274,11 @@
0x10000L,
0x20000L,
- 0, /* module-specific interface */
+ NULL, /* module-specific interface */
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) gxvalid_get_service
+ (FT_Module_Constructor)NULL, /* module_init */
+ (FT_Module_Destructor) NULL, /* module_done */
+ (FT_Module_Requester) gxvalid_get_service /* get_interface */
};
diff --git a/src/gxvalid/gxvmod.h b/src/gxvalid/gxvmod.h
index 1ff2cfc..745c62e 100644
--- a/src/gxvalid/gxvmod.h
+++ b/src/gxvalid/gxvmod.h
@@ -5,7 +5,7 @@
/* FreeType's TrueTypeGX/AAT validation module implementation */
/* (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -26,8 +26,8 @@
/***************************************************************************/
-#ifndef __GXVMOD_H__
-#define __GXVMOD_H__
+#ifndef GXVMOD_H_
+#define GXVMOD_H_
#include <ft2build.h>
#include FT_MODULE_H
@@ -45,7 +45,7 @@
FT_END_HEADER
-#endif /* __GXVMOD_H__ */
+#endif /* GXVMOD_H_ */
/* END */
diff --git a/src/gxvalid/gxvmort.c b/src/gxvalid/gxvmort.c
index a9e7a58..b361cb2 100644
--- a/src/gxvalid/gxvmort.c
+++ b/src/gxvalid/gxvmort.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT mort table validation (body). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -205,7 +205,7 @@
FT_INVALID_FORMAT;
func = fmt_funcs_table[type];
- if ( func == NULL )
+ if ( !func )
GXV_TRACE(( "morx type %d is reserved\n", type ));
func( p, p + rest, gxvalid );
diff --git a/src/gxvalid/gxvmort.h b/src/gxvalid/gxvmort.h
index c95391b..d803064 100644
--- a/src/gxvalid/gxvmort.h
+++ b/src/gxvalid/gxvmort.h
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT common definition for mort table (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -25,8 +25,8 @@
/***************************************************************************/
-#ifndef __GXVMORT_H__
-#define __GXVMORT_H__
+#ifndef GXVMORT_H_
+#define GXVMORT_H_
#include "gxvalid.h"
#include "gxvcommn.h"
@@ -88,7 +88,7 @@
GXV_Validator gxvalid );
-#endif /* __GXVMORT_H__ */
+#endif /* GXVMORT_H_ */
/* END */
diff --git a/src/gxvalid/gxvmort0.c b/src/gxvalid/gxvmort0.c
index 0cace35..95cf53d 100644
--- a/src/gxvalid/gxvmort0.c
+++ b/src/gxvalid/gxvmort0.c
@@ -5,7 +5,7 @@
/* TrueTypeGX/AAT mort table validation */
/* body for type0 (Indic Script Rearrangement) subtable. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvmort1.c b/src/gxvalid/gxvmort1.c
index aa02df5..a7683a1 100644
--- a/src/gxvalid/gxvmort1.c
+++ b/src/gxvalid/gxvmort1.c
@@ -5,7 +5,7 @@
/* TrueTypeGX/AAT mort table validation */
/* body for type1 (Contextual Substitution) subtable. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -192,7 +192,7 @@
GXV_NAME_ENTER( "validating contents of substitutionTable" );
- for ( i = 0; i < num_gids ; i ++ )
+ for ( i = 0; i < num_gids; i++ )
{
FT_UShort dst_gid;
diff --git a/src/gxvalid/gxvmort2.c b/src/gxvalid/gxvmort2.c
index 6f56c94..c23c277 100644
--- a/src/gxvalid/gxvmort2.c
+++ b/src/gxvalid/gxvmort2.c
@@ -5,7 +5,7 @@
/* TrueTypeGX/AAT mort table validation */
/* body for type2 (Ligature Substitution) subtable. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvmort4.c b/src/gxvalid/gxvmort4.c
index 535f377..9d21a5f 100644
--- a/src/gxvalid/gxvmort4.c
+++ b/src/gxvalid/gxvmort4.c
@@ -5,7 +5,7 @@
/* TrueTypeGX/AAT mort table validation */
/* body for type4 (Non-Contextual Glyph Substitution) subtable. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvmort5.c b/src/gxvalid/gxvmort5.c
index fb2f915..42cb428 100644
--- a/src/gxvalid/gxvmort5.c
+++ b/src/gxvalid/gxvmort5.c
@@ -5,7 +5,7 @@
/* TrueTypeGX/AAT mort table validation */
/* body for type5 (Contextual Glyph Insertion) subtable. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvmorx.c b/src/gxvalid/gxvmorx.c
index 1c6b3f2..9fd6e6b 100644
--- a/src/gxvalid/gxvmorx.c
+++ b/src/gxvalid/gxvmorx.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT morx table validation (body). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -98,7 +98,7 @@
FT_INVALID_FORMAT;
func = fmt_funcs_table[type];
- if ( func == NULL )
+ if ( !func )
GXV_TRACE(( "morx type %d is reserved\n", type ));
func( p, p + rest, gxvalid );
diff --git a/src/gxvalid/gxvmorx.h b/src/gxvalid/gxvmorx.h
index 60efdfd..6d9925e 100644
--- a/src/gxvalid/gxvmorx.h
+++ b/src/gxvalid/gxvmorx.h
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT common definition for morx table (specification). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -25,8 +25,8 @@
/***************************************************************************/
-#ifndef __GXVMORX_H__
-#define __GXVMORX_H__
+#ifndef GXVMORX_H_
+#define GXVMORX_H_
#include "gxvalid.h"
@@ -62,7 +62,7 @@
GXV_Validator gxvalid );
-#endif /* __GXVMORX_H__ */
+#endif /* GXVMORX_H_ */
/* END */
diff --git a/src/gxvalid/gxvmorx0.c b/src/gxvalid/gxvmorx0.c
index e340baa..302261b 100644
--- a/src/gxvalid/gxvmorx0.c
+++ b/src/gxvalid/gxvmorx0.c
@@ -5,7 +5,7 @@
/* TrueTypeGX/AAT morx table validation */
/* body for type0 (Indic Script Rearrangement) subtable. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvmorx1.c b/src/gxvalid/gxvmorx1.c
index 7ba2909..890ca74 100644
--- a/src/gxvalid/gxvmorx1.c
+++ b/src/gxvalid/gxvmorx1.c
@@ -5,7 +5,7 @@
/* TrueTypeGX/AAT morx table validation */
/* body for type1 (Contextual Substitution) subtable. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvmorx2.c b/src/gxvalid/gxvmorx2.c
index 51e3055..3135031 100644
--- a/src/gxvalid/gxvmorx2.c
+++ b/src/gxvalid/gxvmorx2.c
@@ -5,7 +5,7 @@
/* TrueTypeGX/AAT morx table validation */
/* body for type2 (Ligature Substitution) subtable. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvmorx4.c b/src/gxvalid/gxvmorx4.c
index c42677d..1e2397b 100644
--- a/src/gxvalid/gxvmorx4.c
+++ b/src/gxvalid/gxvmorx4.c
@@ -5,7 +5,7 @@
/* TrueTypeGX/AAT morx table validation */
/* body for "morx" type4 (Non-Contextual Glyph Substitution) subtable. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvmorx5.c b/src/gxvalid/gxvmorx5.c
index 7ac872f..db4f929 100644
--- a/src/gxvalid/gxvmorx5.c
+++ b/src/gxvalid/gxvmorx5.c
@@ -5,7 +5,7 @@
/* TrueTypeGX/AAT morx table validation */
/* body for type5 (Contextual Glyph Insertion) subtable. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvopbd.c b/src/gxvalid/gxvopbd.c
index 7cd5163..e2c167e 100644
--- a/src/gxvalid/gxvopbd.c
+++ b/src/gxvalid/gxvopbd.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT opbd table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvprop.c b/src/gxvalid/gxvprop.c
index ecc3c94..a67b6bd 100644
--- a/src/gxvalid/gxvprop.c
+++ b/src/gxvalid/gxvprop.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT prop table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/src/gxvalid/gxvtrak.c b/src/gxvalid/gxvtrak.c
index c4d29e4..d501b50 100644
--- a/src/gxvalid/gxvtrak.c
+++ b/src/gxvalid/gxvtrak.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT trak table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -111,7 +111,7 @@
GXV_LIMIT_CHECK( nTracks * ( 4 + 2 + 2 ) );
- for ( i = 0; i < nTracks; i ++ )
+ for ( i = 0; i < nTracks; i++ )
{
p = table + i * ( 4 + 2 + 2 );
track = FT_NEXT_LONG( p );
@@ -125,7 +125,7 @@
gxv_sfntName_validate( nameIndex, 256, 32767, gxvalid );
- for ( j = i; j < nTracks; j ++ )
+ for ( j = i; j < nTracks; j++ )
{
p = table + j * ( 4 + 2 + 2 );
t = FT_NEXT_LONG( p );
diff --git a/src/gxvalid/module.mk b/src/gxvalid/module.mk
index 1d76494..b64879d 100644
--- a/src/gxvalid/module.mk
+++ b/src/gxvalid/module.mk
@@ -2,7 +2,7 @@
# FreeType 2 gxvalid module definition
#
-# Copyright 2004-2015 by
+# Copyright 2004-2018 by
# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
diff --git a/src/gxvalid/rules.mk b/src/gxvalid/rules.mk
index 44a2d43..3a17c03 100644
--- a/src/gxvalid/rules.mk
+++ b/src/gxvalid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2004-2015 by
+# Copyright 2004-2018 by
# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
diff --git a/src/gzip/Jamfile b/src/gzip/Jamfile
index 0944a5f..a7b4c8c 100644
--- a/src/gzip/Jamfile
+++ b/src/gzip/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/gzip Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/gzip/ftgzip.c b/src/gzip/ftgzip.c
index 879eb88..f8011c2 100644
--- a/src/gzip/ftgzip.c
+++ b/src/gzip/ftgzip.c
@@ -8,7 +8,7 @@
/* parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -30,7 +30,7 @@
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX Gzip_Err_
@@ -51,17 +51,29 @@
#else /* !FT_CONFIG_OPTION_SYSTEM_ZLIB */
- /* In this case, we include our own modified sources of the ZLib */
- /* within the "ftgzip" component. The modifications were necessary */
- /* to #include all files without conflicts, as well as preventing */
- /* the definition of "extern" functions that may cause linking */
- /* conflicts when a program is linked with both FreeType and the */
- /* original ZLib. */
+ /* In this case, we include our own modified sources of the ZLib */
+ /* within the `gzip' component. The modifications were necessary */
+ /* to #include all files without conflicts, as well as preventing */
+ /* the definition of `extern' functions that may cause linking */
+ /* conflicts when a program is linked with both FreeType and the */
+ /* original ZLib. */
#ifndef USE_ZLIB_ZCALLOC
-#define MY_ZCALLOC /* prevent all zcalloc() & zfree() in zutils.c */
+#define MY_ZCALLOC /* prevent all zcalloc() & zfree() in zutil.c */
#endif
+ /* Note that our `zlib.h' includes `ftzconf.h' instead of `zconf.h'; */
+ /* the main reason is that even a global `zlib.h' includes `zconf.h' */
+ /* with */
+ /* */
+ /* #include "zconf.h" */
+ /* */
+ /* instead of the expected */
+ /* */
+ /* #include <zconf.h> */
+ /* */
+ /* so that configuration with `FT_CONFIG_OPTION_SYSTEM_ZLIB' might */
+ /* include the wrong `zconf.h' file, leading to errors. */
#include "zlib.h"
#undef SLOW
@@ -305,7 +317,7 @@
zstream->next_in = zip->buffer;
if ( inflateInit2( zstream, -MAX_WBITS ) != Z_OK ||
- zstream->next_in == NULL )
+ !zstream->next_in )
error = FT_THROW( Invalid_File_Format );
Exit:
@@ -377,7 +389,10 @@
size = stream->read( stream, stream->pos, zip->input,
FT_GZIP_BUFFER_SIZE );
if ( size == 0 )
+ {
+ zip->limit = zip->cursor;
return FT_THROW( Invalid_Stream_Operation );
+ }
}
else
{
@@ -386,7 +401,10 @@
size = FT_GZIP_BUFFER_SIZE;
if ( size == 0 )
+ {
+ zip->limit = zip->cursor;
return FT_THROW( Invalid_Stream_Operation );
+ }
FT_MEM_COPY( zip->input, stream->base + stream->pos, size );
}
@@ -433,7 +451,8 @@
}
else if ( err != Z_OK )
{
- error = FT_THROW( Invalid_Stream_Operation );
+ zip->limit = zip->cursor;
+ error = FT_THROW( Invalid_Stream_Operation );
break;
}
}
@@ -557,19 +576,22 @@
stream->descriptor.pointer = NULL;
}
+
+ if ( !stream->read )
+ FT_FREE( stream->base );
}
- static FT_ULong
- ft_gzip_stream_io( FT_Stream stream,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
+ static unsigned long
+ ft_gzip_stream_io( FT_Stream stream,
+ unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count )
{
FT_GZipFile zip = (FT_GZipFile)stream->descriptor.pointer;
- return ft_gzip_file_io( zip, pos, buffer, count );
+ return ft_gzip_file_io( zip, offset, buffer, count );
}
@@ -584,7 +606,7 @@
old_pos = stream->pos;
if ( !FT_Stream_Seek( stream, stream->size - 4 ) )
{
- result = FT_Stream_ReadULong( stream, &error );
+ result = FT_Stream_ReadULongLE( stream, &error );
if ( error )
result = 0;
@@ -681,11 +703,15 @@
}
error = FT_Err_Ok;
}
+
+ if ( zip_size )
+ stream->size = zip_size;
+ else
+ stream->size = 0x7FFFFFFFL; /* don't know the real size! */
}
- stream->size = 0x7FFFFFFFL; /* don't know the real size! */
stream->pos = 0;
- stream->base = 0;
+ stream->base = NULL;
stream->read = ft_gzip_stream_io;
stream->close = ft_gzip_stream_close;
diff --git a/src/gzip/zconf.h b/src/gzip/ftzconf.h
similarity index 100%
rename from src/gzip/zconf.h
rename to src/gzip/ftzconf.h
diff --git a/src/gzip/rules.mk b/src/gzip/rules.mk
index a8f74ec..1a2e48b 100644
--- a/src/gzip/rules.mk
+++ b/src/gzip/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -34,12 +34,13 @@
# gzip support sources
#
-# All source and header files get loaded by `ftgzip.c' only if SYTEM_ZLIB is
-# not defined (regardless whether we have a `single' or a `multi' build).
+# All source and header files get loaded by `ftgzip.c' only if SYSTEM_ZLIB
+# is not defined (regardless whether we have a `single' or a `multi' build).
# However, it doesn't harm if we add everything as a dependency
# unconditionally.
#
GZIP_DRV_SRCS := $(GZIP_DIR)/adler32.c \
+ $(GZIP_DIR)/ftzconf.h \
$(GZIP_DIR)/infblock.c \
$(GZIP_DIR)/infblock.h \
$(GZIP_DIR)/infcodes.c \
@@ -50,7 +51,6 @@
$(GZIP_DIR)/inftrees.h \
$(GZIP_DIR)/infutil.c \
$(GZIP_DIR)/infutil.h \
- $(GZIP_DIR)/zconf.h \
$(GZIP_DIR)/zlib.h \
$(GZIP_DIR)/zutil.c \
$(GZIP_DIR)/zutil.h
diff --git a/src/gzip/zlib.h b/src/gzip/zlib.h
index 50d0d3f..a4e82c6 100644
--- a/src/gzip/zlib.h
+++ b/src/gzip/zlib.h
@@ -31,7 +31,7 @@
#ifndef _ZLIB_H
#define _ZLIB_H
-#include "zconf.h"
+#include "ftzconf.h"
#ifdef __cplusplus
extern "C" {
@@ -560,7 +560,7 @@
inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
if no more input was provided, Z_DATA_ERROR if no flush point has been found,
or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
- case, the application may save the current current value of total_in which
+ case, the application may save the current value of total_in which
indicates where valid compressed data was found. In the error case, the
application may repeatedly call inflateSync, providing more input each time,
until success or end of the input data.
diff --git a/src/lzw/Jamfile b/src/lzw/Jamfile
index 91effe2..cb83aa4 100644
--- a/src/lzw/Jamfile
+++ b/src/lzw/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/lzw Jamfile
#
-# Copyright 2004-2015 by
+# Copyright 2004-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/lzw/ftlzw.c b/src/lzw/ftlzw.c
index 5664ff9..cb46f93 100644
--- a/src/lzw/ftlzw.c
+++ b/src/lzw/ftlzw.c
@@ -8,7 +8,7 @@
/* be used to parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* Albert Chin-A-Young. */
/* */
/* based on code in `src/gzip/ftgzip.c' */
@@ -31,7 +31,7 @@
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX LZW_Err_
@@ -330,16 +330,16 @@
}
- static FT_ULong
- ft_lzw_stream_io( FT_Stream stream,
- FT_ULong pos,
- FT_Byte* buffer,
- FT_ULong count )
+ static unsigned long
+ ft_lzw_stream_io( FT_Stream stream,
+ unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count )
{
FT_LZWFile zip = (FT_LZWFile)stream->descriptor.pointer;
- return ft_lzw_file_io( zip, pos, buffer, count );
+ return ft_lzw_file_io( zip, offset, buffer, count );
}
diff --git a/src/lzw/ftzopen.c b/src/lzw/ftzopen.c
index f96bb73..2b868ba 100644
--- a/src/lzw/ftzopen.c
+++ b/src/lzw/ftzopen.c
@@ -8,7 +8,7 @@
/* be used to parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -42,7 +42,12 @@
state->buf_total += count;
state->in_eof = FT_BOOL( count < state->num_bits );
state->buf_offset = 0;
- state->buf_size = ( state->buf_size << 3 ) - ( state->num_bits - 1 );
+
+ state->buf_size <<= 3;
+ if ( state->buf_size > state->num_bits )
+ state->buf_size -= state->num_bits - 1;
+ else
+ return -1; /* not enough data */
if ( count == 0 ) /* end of file */
return -1;
@@ -66,7 +71,10 @@
{
if ( state->free_ent >= state->free_bits )
{
- state->num_bits = ++num_bits;
+ state->num_bits = ++num_bits;
+ if ( num_bits > LZW_MAX_BITS )
+ return -1;
+
state->free_bits = state->num_bits < state->max_bits
? (FT_UInt)( ( 1UL << num_bits ) - 256 )
: state->max_free + 1;
@@ -366,7 +374,7 @@
{
while ( state->stack_top > 0 )
{
- --state->stack_top;
+ state->stack_top--;
if ( buffer )
buffer[result] = state->stack[state->stack_top];
diff --git a/src/lzw/ftzopen.h b/src/lzw/ftzopen.h
index d35e380..4fd267e 100644
--- a/src/lzw/ftzopen.h
+++ b/src/lzw/ftzopen.h
@@ -8,7 +8,7 @@
/* be used to parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -19,8 +19,8 @@
/* */
/***************************************************************************/
-#ifndef __FT_ZOPEN_H__
-#define __FT_ZOPEN_H__
+#ifndef FTZOPEN_H_
+#define FTZOPEN_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -166,7 +166,7 @@
/* */
-#endif /* __FT_ZOPEN_H__ */
+#endif /* FTZOPEN_H_ */
/* END */
diff --git a/src/lzw/rules.mk b/src/lzw/rules.mk
index ab1c02f..18933c4 100644
--- a/src/lzw/rules.mk
+++ b/src/lzw/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2004-2015 by
+# Copyright 2004-2018 by
# Albert Chin-A-Young.
#
# based on `src/lzw/rules.mk'
diff --git a/src/otvalid/Jamfile b/src/otvalid/Jamfile
index dbc2395..21b8e0c 100644
--- a/src/otvalid/Jamfile
+++ b/src/otvalid/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/otvalid Jamfile
#
-# Copyright 2004-2015 by
+# Copyright 2004-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,15 @@
if $(FT2_MULTI)
{
- _sources = otvbase otvcommn otvgdef otvgpos otvgsub otvjstf otvmod otvmath ;
+ _sources = otvbase
+ otvcommn
+ otvgdef
+ otvgpos
+ otvgsub
+ otvjstf
+ otvmath
+ otvmod
+ ;
}
else
{
diff --git a/src/otvalid/module.mk b/src/otvalid/module.mk
index 3d8c0d9..34f3dab 100644
--- a/src/otvalid/module.mk
+++ b/src/otvalid/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2004-2015 by
+# Copyright 2004-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/otvalid/otvalid.c b/src/otvalid/otvalid.c
index ca597d7..4423ca1 100644
--- a/src/otvalid/otvalid.c
+++ b/src/otvalid/otvalid.c
@@ -4,7 +4,7 @@
/* */
/* FreeType validator for OpenType tables (body only). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -15,8 +15,8 @@
/* */
/***************************************************************************/
-#define FT_MAKE_OPTION_SINGLE_OBJECT
+#define FT_MAKE_OPTION_SINGLE_OBJECT
#include <ft2build.h>
#include "otvbase.c"
@@ -28,4 +28,5 @@
#include "otvmath.c"
#include "otvmod.c"
+
/* END */
diff --git a/src/otvalid/otvalid.h b/src/otvalid/otvalid.h
index 3475deb..d7801ab 100644
--- a/src/otvalid/otvalid.h
+++ b/src/otvalid/otvalid.h
@@ -4,7 +4,7 @@
/* */
/* OpenType table validation (specification only). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __OTVALID_H__
-#define __OTVALID_H__
+#ifndef OTVALID_H_
+#define OTVALID_H_
#include <ft2build.h>
@@ -72,7 +72,7 @@
FT_END_HEADER
-#endif /* __OTVALID_H__ */
+#endif /* OTVALID_H_ */
/* END */
diff --git a/src/otvalid/otvbase.c b/src/otvalid/otvbase.c
index 24038c6..a01d45c 100644
--- a/src/otvalid/otvbase.c
+++ b/src/otvalid/otvbase.c
@@ -4,7 +4,7 @@
/* */
/* OpenType BASE table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -284,22 +284,41 @@
OTV_Validator otvalid = &otvalidrec;
FT_Bytes p = table;
FT_UInt table_size;
+ FT_UShort version;
OTV_OPTIONAL_TABLE( HorizAxis );
OTV_OPTIONAL_TABLE( VertAxis );
+ OTV_OPTIONAL_TABLE32( itemVarStore );
+
otvalid->root = ftvalid;
FT_TRACE3(( "validating BASE table\n" ));
OTV_INIT;
- OTV_LIMIT_CHECK( 6 );
+ OTV_LIMIT_CHECK( 4 );
- if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
+ if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */
FT_INVALID_FORMAT;
- table_size = 6;
+ version = FT_NEXT_USHORT( p ); /* minorVersion */
+
+ table_size = 8;
+ switch ( version )
+ {
+ case 0:
+ OTV_LIMIT_CHECK( 4 );
+ break;
+
+ case 1:
+ OTV_LIMIT_CHECK( 8 );
+ table_size += 4;
+ break;
+
+ default:
+ FT_INVALID_FORMAT;
+ }
OTV_OPTIONAL_OFFSET( HorizAxis );
OTV_SIZE_CHECK( HorizAxis );
@@ -311,6 +330,14 @@
if ( VertAxis )
otv_Axis_validate( table + VertAxis, otvalid );
+ if ( version > 0 )
+ {
+ OTV_OPTIONAL_OFFSET32( itemVarStore );
+ OTV_SIZE_CHECK32( itemVarStore );
+ if ( itemVarStore )
+ OTV_TRACE(( " [omitting itemVarStore validation]\n" )); /* XXX */
+ }
+
FT_TRACE4(( "\n" ));
}
diff --git a/src/otvalid/otvcommn.c b/src/otvalid/otvcommn.c
index 103ffba..0ccfb03 100644
--- a/src/otvalid/otvcommn.c
+++ b/src/otvalid/otvcommn.c
@@ -4,7 +4,7 @@
/* */
/* OpenType common tables validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -68,7 +68,7 @@
OTV_LIMIT_CHECK( GlyphCount * 2 ); /* GlyphArray */
- for ( i = 0; i < GlyphCount; ++i )
+ for ( i = 0; i < GlyphCount; i++ )
{
FT_UInt gid;
@@ -313,19 +313,26 @@
OTV_NAME_ENTER( "Device" );
- OTV_LIMIT_CHECK( 8 );
+ OTV_LIMIT_CHECK( 6 );
StartSize = FT_NEXT_USHORT( p );
EndSize = FT_NEXT_USHORT( p );
DeltaFormat = FT_NEXT_USHORT( p );
- if ( DeltaFormat < 1 || DeltaFormat > 3 )
- FT_INVALID_FORMAT;
+ if ( DeltaFormat == 0x8000U )
+ {
+ /* VariationIndex, nothing to do */
+ }
+ else
+ {
+ if ( DeltaFormat < 1 || DeltaFormat > 3 )
+ FT_INVALID_FORMAT;
- if ( EndSize < StartSize )
- FT_INVALID_DATA;
+ if ( EndSize < StartSize )
+ FT_INVALID_DATA;
- count = EndSize - StartSize + 1;
- OTV_LIMIT_CHECK( ( 1 << DeltaFormat ) * count / 8 ); /* DeltaValue */
+ count = EndSize - StartSize + 1;
+ OTV_LIMIT_CHECK( ( 1 << DeltaFormat ) * count / 8 ); /* DeltaValue */
+ }
OTV_EXIT;
}
@@ -347,7 +354,7 @@
OTV_Validator otvalid )
{
FT_Bytes p = table;
- FT_UInt LookupType, SubTableCount;
+ FT_UInt LookupType, LookupFlag, SubTableCount;
OTV_Validate_Func validate;
@@ -355,7 +362,7 @@
OTV_LIMIT_CHECK( 6 );
LookupType = FT_NEXT_USHORT( p );
- p += 2; /* skip LookupFlag */
+ LookupFlag = FT_NEXT_USHORT( p );
SubTableCount = FT_NEXT_USHORT( p );
OTV_TRACE(( " (type %d)\n", LookupType ));
@@ -373,6 +380,9 @@
for ( ; SubTableCount > 0; SubTableCount-- )
validate( table + FT_NEXT_USHORT( p ), otvalid );
+ if ( LookupFlag & 0x10 )
+ OTV_LIMIT_CHECK( 2 ); /* MarkFilteringSet */
+
OTV_EXIT;
}
diff --git a/src/otvalid/otvcommn.h b/src/otvalid/otvcommn.h
index 3aebf02..a392784 100644
--- a/src/otvalid/otvcommn.h
+++ b/src/otvalid/otvcommn.h
@@ -4,7 +4,7 @@
/* */
/* OpenType common tables validation (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __OTVCOMMN_H__
-#define __OTVCOMMN_H__
+#ifndef OTVCOMMN_H_
+#define OTVCOMMN_H_
#include <ft2build.h>
@@ -67,29 +67,38 @@
#undef FT_INVALID_
-#define FT_INVALID_( _error ) \
+#define FT_INVALID_( _error ) \
ft_validator_error( otvalid->root, FT_THROW( _error ) )
#define OTV_OPTIONAL_TABLE( _table ) FT_UShort _table; \
FT_Bytes _table ## _p
+#define OTV_OPTIONAL_TABLE32( _table ) FT_ULong _table; \
+ FT_Bytes _table ## _p
+
#define OTV_OPTIONAL_OFFSET( _offset ) \
FT_BEGIN_STMNT \
_offset ## _p = p; \
_offset = FT_NEXT_USHORT( p ); \
FT_END_STMNT
-#define OTV_LIMIT_CHECK( _count ) \
- FT_BEGIN_STMNT \
+#define OTV_OPTIONAL_OFFSET32( _offset ) \
+ FT_BEGIN_STMNT \
+ _offset ## _p = p; \
+ _offset = FT_NEXT_ULONG( p ); \
+ FT_END_STMNT
+
+#define OTV_LIMIT_CHECK( _count ) \
+ FT_BEGIN_STMNT \
if ( p + (_count) > otvalid->root->limit ) \
- FT_INVALID_TOO_SHORT; \
+ FT_INVALID_TOO_SHORT; \
FT_END_STMNT
#define OTV_SIZE_CHECK( _size ) \
FT_BEGIN_STMNT \
if ( _size > 0 && _size < table_size ) \
{ \
- if ( otvalid->root->level == FT_VALIDATE_PARANOID ) \
+ if ( otvalid->root->level == FT_VALIDATE_PARANOID ) \
FT_INVALID_OFFSET; \
else \
{ \
@@ -102,12 +111,33 @@
" set to zero.\n" \
"\n", #_size )); \
\
- /* always assume 16bit entities */ \
_size = pp[0] = pp[1] = 0; \
} \
} \
FT_END_STMNT
+#define OTV_SIZE_CHECK32( _size ) \
+ FT_BEGIN_STMNT \
+ if ( _size > 0 && _size < table_size ) \
+ { \
+ if ( otvalid->root->level == FT_VALIDATE_PARANOID ) \
+ FT_INVALID_OFFSET; \
+ else \
+ { \
+ /* strip off `const' */ \
+ FT_Byte* pp = (FT_Byte*)_size ## _p; \
+ \
+ \
+ FT_TRACE3(( "\n" \
+ "Invalid offset to optional table `%s'" \
+ " set to zero.\n" \
+ "\n", #_size )); \
+ \
+ _size = pp[0] = pp[1] = pp[2] = pp[3] = 0; \
+ } \
+ } \
+ FT_END_STMNT
+
#define OTV_NAME_(x) #x
#define OTV_NAME(x) OTV_NAME_(x)
@@ -146,11 +176,11 @@
#define OTV_INIT otvalid->debug_indent = 0
-#define OTV_ENTER \
- FT_BEGIN_STMNT \
- otvalid->debug_indent += 2; \
- FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 )); \
- FT_TRACE4(( "%s table\n", \
+#define OTV_ENTER \
+ FT_BEGIN_STMNT \
+ otvalid->debug_indent += 2; \
+ FT_TRACE4(( "%*.s", otvalid->debug_indent, 0 )); \
+ FT_TRACE4(( "%s table\n", \
otvalid->debug_function_name[otvalid->nesting_level] )); \
FT_END_STMNT
@@ -431,7 +461,7 @@
FT_END_HEADER
-#endif /* __OTVCOMMN_H__ */
+#endif /* OTVCOMMN_H_ */
/* END */
diff --git a/src/otvalid/otverror.h b/src/otvalid/otverror.h
index 214795e..2fcf42e 100644
--- a/src/otvalid/otverror.h
+++ b/src/otvalid/otverror.h
@@ -4,7 +4,7 @@
/* */
/* OpenType validation module error codes (specification only). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,12 +23,12 @@
/* */
/*************************************************************************/
-#ifndef __OTVERROR_H__
-#define __OTVERROR_H__
+#ifndef OTVERROR_H_
+#define OTVERROR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX OTV_Err_
@@ -36,7 +36,7 @@
#include FT_ERRORS_H
-#endif /* __OTVERROR_H__ */
+#endif /* OTVERROR_H_ */
/* END */
diff --git a/src/otvalid/otvgdef.c b/src/otvalid/otvgdef.c
index 8269d2f..08f3171 100644
--- a/src/otvalid/otvgdef.c
+++ b/src/otvalid/otvgdef.c
@@ -4,7 +4,7 @@
/* */
/* OpenType GDEF table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -68,7 +68,7 @@
OTV_LIMIT_CHECK( GlyphCount * 2 );
otvalid->nesting_level++;
- func = otvalid->func[otvalid->nesting_level];
+ func = otvalid->func[otvalid->nesting_level];
otvalid->extra1 = 0;
for ( ; GlyphCount > 0; GlyphCount-- )
@@ -136,6 +136,40 @@
/*************************************************************************/
/*************************************************************************/
/***** *****/
+ /***** MARK GLYPH SETS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ static void
+ otv_MarkGlyphSets_validate( FT_Bytes table,
+ OTV_Validator otvalid )
+ {
+ FT_Bytes p = table;
+ FT_UInt MarkGlyphSetCount;
+
+
+ OTV_NAME_ENTER( "MarkGlyphSets" );
+
+ p += 2; /* skip Format */
+
+ OTV_LIMIT_CHECK( 2 );
+ MarkGlyphSetCount = FT_NEXT_USHORT( p );
+
+ OTV_TRACE(( " (MarkGlyphSetCount = %d)\n", MarkGlyphSetCount ));
+
+ OTV_LIMIT_CHECK( MarkGlyphSetCount * 4 ); /* CoverageOffsets */
+
+ for ( ; MarkGlyphSetCount > 0; MarkGlyphSetCount-- )
+ otv_Coverage_validate( table + FT_NEXT_ULONG( p ), otvalid, -1 );
+
+ OTV_EXIT;
+ }
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
/***** GDEF TABLE *****/
/***** *****/
/*************************************************************************/
@@ -152,14 +186,18 @@
{
OTV_ValidatorRec otvalidrec;
OTV_Validator otvalid = &otvalidrec;
- FT_Bytes p = table;
+ FT_Bytes p = table;
FT_UInt table_size;
- FT_Bool need_MarkAttachClassDef;
+ FT_UShort version;
+ FT_Bool need_MarkAttachClassDef = 1;
OTV_OPTIONAL_TABLE( GlyphClassDef );
OTV_OPTIONAL_TABLE( AttachListOffset );
OTV_OPTIONAL_TABLE( LigCaretListOffset );
OTV_OPTIONAL_TABLE( MarkAttachClassDef );
+ OTV_OPTIONAL_TABLE( MarkGlyphSetsDef );
+
+ OTV_OPTIONAL_TABLE32( itemVarStore );
otvalid->root = ftvalid;
@@ -167,24 +205,49 @@
FT_TRACE3(( "validating GDEF table\n" ));
OTV_INIT;
- OTV_LIMIT_CHECK( 12 );
+ OTV_LIMIT_CHECK( 4 );
- if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
+ if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */
FT_INVALID_FORMAT;
- /* MarkAttachClassDef has been added to the OpenType */
- /* specification without increasing GDEF's version, */
- /* so we use this ugly hack to find out whether the */
- /* table is needed actually. */
+ version = FT_NEXT_USHORT( p ); /* minorVersion */
- need_MarkAttachClassDef = FT_BOOL(
- otv_GSUBGPOS_have_MarkAttachmentType_flag( gsub ) ||
- otv_GSUBGPOS_have_MarkAttachmentType_flag( gpos ) );
+ table_size = 10;
+ switch ( version )
+ {
+ case 0:
+ /* MarkAttachClassDef has been added to the OpenType */
+ /* specification without increasing GDEF's version, */
+ /* so we use this ugly hack to find out whether the */
+ /* table is needed actually. */
- if ( need_MarkAttachClassDef )
- table_size = 12; /* OpenType >= 1.2 */
- else
- table_size = 10; /* OpenType < 1.2 */
+ need_MarkAttachClassDef = FT_BOOL(
+ otv_GSUBGPOS_have_MarkAttachmentType_flag( gsub ) ||
+ otv_GSUBGPOS_have_MarkAttachmentType_flag( gpos ) );
+
+ if ( need_MarkAttachClassDef )
+ {
+ OTV_LIMIT_CHECK( 8 );
+ table_size += 2;
+ }
+ else
+ OTV_LIMIT_CHECK( 6 ); /* OpenType < 1.2 */
+
+ break;
+
+ case 2:
+ OTV_LIMIT_CHECK( 10 );
+ table_size += 4;
+ break;
+
+ case 3:
+ OTV_LIMIT_CHECK( 14 );
+ table_size += 8;
+ break;
+
+ default:
+ FT_INVALID_FORMAT;
+ }
otvalid->glyph_count = glyph_count;
@@ -217,6 +280,22 @@
otv_ClassDef_validate( table + MarkAttachClassDef, otvalid );
}
+ if ( version > 0 )
+ {
+ OTV_OPTIONAL_OFFSET( MarkGlyphSetsDef );
+ OTV_SIZE_CHECK( MarkGlyphSetsDef );
+ if ( MarkGlyphSetsDef )
+ otv_MarkGlyphSets_validate( table + MarkGlyphSetsDef, otvalid );
+ }
+
+ if ( version > 2 )
+ {
+ OTV_OPTIONAL_OFFSET32( itemVarStore );
+ OTV_SIZE_CHECK32( itemVarStore );
+ if ( itemVarStore )
+ OTV_TRACE(( " [omitting itemVarStore validation]\n" )); /* XXX */
+ }
+
FT_TRACE4(( "\n" ));
}
diff --git a/src/otvalid/otvgpos.c b/src/otvalid/otvgpos.c
index 44c43c5..696b35c 100644
--- a/src/otvalid/otvgpos.c
+++ b/src/otvalid/otvgpos.c
@@ -4,7 +4,7 @@
/* */
/* OpenType GPOS table validation (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -130,7 +130,7 @@
otv_MarkArray_validate( table + Array1, otvalid );
otvalid->nesting_level++;
- func = otvalid->func[otvalid->nesting_level];
+ func = otvalid->func[otvalid->nesting_level];
otvalid->extra1 = ClassCount;
func( table + Array2, otvalid );
@@ -218,10 +218,6 @@
OTV_LIMIT_CHECK( 2 );
OTV_OPTIONAL_OFFSET( device );
- /* XXX: this value is usually too small, especially if the current */
- /* ValueRecord is part of an array -- getting the correct table */
- /* size is probably not worth the trouble */
-
table_size = p - otvalid->extra3;
OTV_SIZE_CHECK( device );
@@ -271,7 +267,7 @@
case 3:
{
- FT_UInt table_size;
+ FT_UInt table_size;
OTV_OPTIONAL_TABLE( XDeviceTable );
OTV_OPTIONAL_TABLE( YDeviceTable );
@@ -426,6 +422,8 @@
/*************************************************************************/
/*************************************************************************/
+ /* sets otvalid->extra3 (pointer to base table) */
+
static void
otv_PairSet_validate( FT_Bytes table,
FT_UInt format1,
@@ -438,6 +436,8 @@
OTV_NAME_ENTER( "PairSet" );
+ otvalid->extra3 = table;
+
OTV_LIMIT_CHECK( 2 );
PairValueCount = FT_NEXT_USHORT( p );
@@ -483,8 +483,6 @@
OTV_TRACE(( " (format %d)\n", PosFormat ));
- otvalid->extra3 = table;
-
switch ( PosFormat )
{
case 1: /* PairPosFormat1 */
@@ -537,7 +535,9 @@
otv_ClassDef_validate( table + ClassDef2, otvalid );
OTV_LIMIT_CHECK( ClassCount1 * ClassCount2 *
- ( len_value1 + len_value2 ) );
+ ( len_value1 + len_value2 ) );
+
+ otvalid->extra3 = table;
/* Class1Record */
for ( ; ClassCount1 > 0; ClassCount1-- )
@@ -985,20 +985,42 @@
{
OTV_ValidatorRec validrec;
OTV_Validator otvalid = &validrec;
- FT_Bytes p = table;
+ FT_Bytes p = table;
+ FT_UInt table_size;
+ FT_UShort version;
FT_UInt ScriptList, FeatureList, LookupList;
+ OTV_OPTIONAL_TABLE32( featureVariations );
+
otvalid->root = ftvalid;
FT_TRACE3(( "validating GPOS table\n" ));
OTV_INIT;
- OTV_LIMIT_CHECK( 10 );
+ OTV_LIMIT_CHECK( 4 );
- if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
+ if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */
FT_INVALID_FORMAT;
+ version = FT_NEXT_USHORT( p ); /* minorVersion */
+
+ table_size = 10;
+ switch ( version )
+ {
+ case 0:
+ OTV_LIMIT_CHECK( 6 );
+ break;
+
+ case 1:
+ OTV_LIMIT_CHECK( 10 );
+ table_size += 4;
+ break;
+
+ default:
+ FT_INVALID_FORMAT;
+ }
+
ScriptList = FT_NEXT_USHORT( p );
FeatureList = FT_NEXT_USHORT( p );
LookupList = FT_NEXT_USHORT( p );
@@ -1014,6 +1036,14 @@
otv_ScriptList_validate( table + ScriptList, table + FeatureList,
otvalid );
+ if ( version > 0 )
+ {
+ OTV_OPTIONAL_OFFSET32( featureVariations );
+ OTV_SIZE_CHECK32( featureVariations );
+ if ( featureVariations )
+ OTV_TRACE(( " [omitting featureVariations validation]\n" )); /* XXX */
+ }
+
FT_TRACE4(( "\n" ));
}
diff --git a/src/otvalid/otvgpos.h b/src/otvalid/otvgpos.h
index a792bd9..95f9ac3 100644
--- a/src/otvalid/otvgpos.h
+++ b/src/otvalid/otvgpos.h
@@ -4,7 +4,7 @@
/* */
/* OpenType GPOS table validator (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __OTVGPOS_H__
-#define __OTVGPOS_H__
+#ifndef OTVGPOS_H_
+#define OTVGPOS_H_
FT_BEGIN_HEADER
@@ -30,7 +30,7 @@
FT_END_HEADER
-#endif /* __OTVGPOS_H__ */
+#endif /* OTVGPOS_H_ */
/* END */
diff --git a/src/otvalid/otvgsub.c b/src/otvalid/otvgsub.c
index 0f8b02c..d35ea67 100644
--- a/src/otvalid/otvgsub.c
+++ b/src/otvalid/otvgsub.c
@@ -4,7 +4,7 @@
/* */
/* OpenType GSUB table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -552,19 +552,41 @@
OTV_ValidatorRec otvalidrec;
OTV_Validator otvalid = &otvalidrec;
FT_Bytes p = table;
+ FT_UInt table_size;
+ FT_UShort version;
FT_UInt ScriptList, FeatureList, LookupList;
+ OTV_OPTIONAL_TABLE32( featureVariations );
+
otvalid->root = ftvalid;
FT_TRACE3(( "validating GSUB table\n" ));
OTV_INIT;
- OTV_LIMIT_CHECK( 10 );
+ OTV_LIMIT_CHECK( 4 );
- if ( FT_NEXT_ULONG( p ) != 0x10000UL ) /* Version */
+ if ( FT_NEXT_USHORT( p ) != 1 ) /* majorVersion */
FT_INVALID_FORMAT;
+ version = FT_NEXT_USHORT( p ); /* minorVersion */
+
+ table_size = 10;
+ switch ( version )
+ {
+ case 0:
+ OTV_LIMIT_CHECK( 6 );
+ break;
+
+ case 1:
+ OTV_LIMIT_CHECK( 10 );
+ table_size += 4;
+ break;
+
+ default:
+ FT_INVALID_FORMAT;
+ }
+
ScriptList = FT_NEXT_USHORT( p );
FeatureList = FT_NEXT_USHORT( p );
LookupList = FT_NEXT_USHORT( p );
@@ -580,6 +602,14 @@
otv_ScriptList_validate( table + ScriptList, table + FeatureList,
otvalid );
+ if ( version > 0 )
+ {
+ OTV_OPTIONAL_OFFSET32( featureVariations );
+ OTV_SIZE_CHECK32( featureVariations );
+ if ( featureVariations )
+ OTV_TRACE(( " [omitting featureVariations validation]\n" )); /* XXX */
+ }
+
FT_TRACE4(( "\n" ));
}
diff --git a/src/otvalid/otvjstf.c b/src/otvalid/otvjstf.c
index fe68a60..94d4af9 100644
--- a/src/otvalid/otvjstf.c
+++ b/src/otvalid/otvjstf.c
@@ -4,7 +4,7 @@
/* */
/* OpenType JSTF table validation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/otvalid/otvmath.c b/src/otvalid/otvmath.c
index db3d5f8..b9800f6 100644
--- a/src/otvalid/otvmath.c
+++ b/src/otvalid/otvmath.c
@@ -4,7 +4,7 @@
/* */
/* OpenType MATH table validation (body). */
/* */
-/* Copyright 2007-2015 by */
+/* Copyright 2007-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* Written by George Williams. */
@@ -60,7 +60,7 @@
table_size = 2 * ( 56 + 51 );
p += 4 * 2; /* First 4 constants have no device tables */
- for ( i = 0; i < 51; ++i )
+ for ( i = 0; i < 51; i++ )
{
p += 2; /* skip the value */
OTV_OPTIONAL_OFFSET( DeviceTableOffset );
@@ -88,7 +88,7 @@
FT_Int isItalic )
{
FT_Bytes p = table;
- FT_UInt i, cnt, table_size ;
+ FT_UInt i, cnt, table_size;
OTV_OPTIONAL_TABLE( Coverage );
OTV_OPTIONAL_TABLE( DeviceTableOffset );
@@ -110,7 +110,7 @@
OTV_SIZE_CHECK( Coverage );
otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)cnt );
- for ( i = 0; i < cnt; ++i )
+ for ( i = 0; i < cnt; i++ )
{
p += 2; /* Skip the value */
OTV_OPTIONAL_OFFSET( DeviceTableOffset );
@@ -151,7 +151,7 @@
table_size = 4 + 4 * cnt;
/* Heights */
- for ( i = 0; i < cnt; ++i )
+ for ( i = 0; i < cnt; i++ )
{
p += 2; /* Skip the value */
OTV_OPTIONAL_OFFSET( DeviceTableOffset );
@@ -161,7 +161,7 @@
}
/* One more Kerning value */
- for ( i = 0; i < cnt + 1; ++i )
+ for ( i = 0; i < cnt + 1; i++ )
{
p += 2; /* Skip the value */
OTV_OPTIONAL_OFFSET( DeviceTableOffset );
@@ -198,9 +198,9 @@
OTV_SIZE_CHECK( Coverage );
otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)cnt );
- for ( i = 0; i < cnt; ++i )
+ for ( i = 0; i < cnt; i++ )
{
- for ( j = 0; j < 4; ++j )
+ for ( j = 0; j < 4; j++ )
{
OTV_OPTIONAL_OFFSET( MKRecordOffset );
OTV_SIZE_CHECK( MKRecordOffset );
@@ -296,7 +296,7 @@
if ( DeviceTableOffset )
otv_Device_validate( table + DeviceTableOffset, otvalid );
- for ( i = 0; i < pcnt; ++i )
+ for ( i = 0; i < pcnt; i++ )
{
FT_UInt gid;
@@ -332,7 +332,7 @@
OTV_LIMIT_CHECK( 4 * vcnt );
table_size = 4 + 4 * vcnt;
- for ( i = 0; i < vcnt; ++i )
+ for ( i = 0; i < vcnt; i++ )
{
FT_UInt gid;
@@ -384,14 +384,14 @@
if ( HCoverage )
otv_Coverage_validate( table + HCoverage, otvalid, (FT_Int)hcnt );
- for ( i = 0; i < vcnt; ++i )
+ for ( i = 0; i < vcnt; i++ )
{
OTV_OPTIONAL_OFFSET( Offset );
OTV_SIZE_CHECK( Offset );
otv_MathGlyphConstruction_validate( table + Offset, otvalid );
}
- for ( i = 0; i < hcnt; ++i )
+ for ( i = 0; i < hcnt; i++ )
{
OTV_OPTIONAL_OFFSET( Offset );
OTV_SIZE_CHECK( Offset );
diff --git a/src/otvalid/otvmod.c b/src/otvalid/otvmod.c
index 92f8513..89ee449 100644
--- a/src/otvalid/otvmod.c
+++ b/src/otvalid/otvmod.c
@@ -4,7 +4,7 @@
/* */
/* FreeType's OpenType validation module implementation (body). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -240,7 +240,7 @@
static
const FT_Service_OTvalidateRec otvalid_interface =
{
- otv_validate
+ otv_validate /* validate */
};
@@ -271,11 +271,11 @@
0x10000L,
0x20000L,
- 0, /* module-specific interface */
+ NULL, /* module-specific interface */
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) otvalid_get_service
+ (FT_Module_Constructor)NULL, /* module_init */
+ (FT_Module_Destructor) NULL, /* module_done */
+ (FT_Module_Requester) otvalid_get_service /* get_interface */
};
diff --git a/src/otvalid/otvmod.h b/src/otvalid/otvmod.h
index c3a0234..6917bcc 100644
--- a/src/otvalid/otvmod.h
+++ b/src/otvalid/otvmod.h
@@ -5,7 +5,7 @@
/* FreeType's OpenType validation module implementation */
/* (specification). */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __OTVMOD_H__
-#define __OTVMOD_H__
+#ifndef OTVMOD_H_
+#define OTVMOD_H_
#include <ft2build.h>
@@ -37,7 +37,7 @@
FT_END_HEADER
-#endif /* __OTVMOD_H__ */
+#endif /* OTVMOD_H_ */
/* END */
diff --git a/src/otvalid/rules.mk b/src/otvalid/rules.mk
index 56d749c..d4fc723 100644
--- a/src/otvalid/rules.mk
+++ b/src/otvalid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2004-2015 by
+# Copyright 2004-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/pcf/Jamfile b/src/pcf/Jamfile
index 8cd90e4..7b92b12 100644
--- a/src/pcf/Jamfile
+++ b/src/pcf/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/pcf Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,10 @@
if $(FT2_MULTI)
{
- _sources = pcfdrivr pcfread pcfutil ;
+ _sources = pcfdrivr
+ pcfread
+ pcfutil
+ ;
}
else
{
diff --git a/src/pcf/README b/src/pcf/README
index 10eff15..09ea970 100644
--- a/src/pcf/README
+++ b/src/pcf/README
@@ -41,8 +41,8 @@
Known problems
**************
-- dealing explicitly with encodings breaks the uniformity of freetype2
- api.
+- dealing explicitly with encodings breaks the uniformity of FreeType 2
+ API.
- except for encodings properties, client applications have no
visibility of the PCF_Face object. This means that applications
diff --git a/src/pcf/pcf.c b/src/pcf/pcf.c
index 11d5b7b..8ffd6e2 100644
--- a/src/pcf/pcf.c
+++ b/src/pcf/pcf.c
@@ -26,11 +26,11 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
-
#include <ft2build.h>
-#include "pcfutil.c"
-#include "pcfread.c"
+
#include "pcfdrivr.c"
+#include "pcfread.c"
+#include "pcfutil.c"
+
/* END */
diff --git a/src/pcf/pcf.h b/src/pcf/pcf.h
index c0da503..f0390cb 100644
--- a/src/pcf/pcf.h
+++ b/src/pcf/pcf.h
@@ -25,8 +25,8 @@
*/
-#ifndef __PCF_H__
-#define __PCF_H__
+#ifndef PCF_H_
+#define PCF_H_
#include <ft2build.h>
@@ -163,6 +163,15 @@
} PCF_FaceRec, *PCF_Face;
+ typedef struct PCF_DriverRec_
+ {
+ FT_DriverRec root;
+
+ FT_Bool no_long_family_names;
+
+ } PCF_DriverRec, *PCF_Driver;
+
+
/* macros for pcf font format */
#define LSBFirst 0
@@ -226,12 +235,13 @@
#define GLYPHPADOPTIONS 4 /* I'm not sure about this */
FT_LOCAL( FT_Error )
- pcf_load_font( FT_Stream,
- PCF_Face );
+ pcf_load_font( FT_Stream stream,
+ PCF_Face face,
+ FT_Long face_index );
FT_END_HEADER
-#endif /* __PCF_H__ */
+#endif /* PCF_H_ */
/* END */
diff --git a/src/pcf/pcfdrivr.c b/src/pcf/pcfdrivr.c
index 552049e..0119d94 100644
--- a/src/pcf/pcfdrivr.c
+++ b/src/pcf/pcfdrivr.c
@@ -49,6 +49,8 @@
#include FT_SERVICE_BDF_H
#include FT_SERVICE_FONT_FORMAT_H
+#include FT_SERVICE_PROPERTIES_H
+#include FT_DRIVER_H
/*************************************************************************/
@@ -271,7 +273,7 @@
FT_TRACE2(( "PCF driver\n" ));
- error = pcf_load_font( stream, face );
+ error = pcf_load_font( stream, face, face_index );
if ( error )
{
PCF_Face_Done( pcfface );
@@ -286,6 +288,7 @@
/* this didn't work, try gzip support! */
+ FT_TRACE2(( " ... try gzip stream\n" ));
error2 = FT_Stream_OpenGzip( &face->comp_stream, stream );
if ( FT_ERR_EQ( error2, Unimplemented_Feature ) )
goto Fail;
@@ -301,6 +304,7 @@
/* this didn't work, try LZW support! */
+ FT_TRACE2(( " ... try LZW stream\n" ));
error3 = FT_Stream_OpenLZW( &face->comp_stream, stream );
if ( FT_ERR_EQ( error3, Unimplemented_Feature ) )
goto Fail;
@@ -316,6 +320,7 @@
/* this didn't work, try Bzip2 support! */
+ FT_TRACE2(( " ... try Bzip2 stream\n" ));
error4 = FT_Stream_OpenBzip2( &face->comp_stream, stream );
if ( FT_ERR_EQ( error4, Unimplemented_Feature ) )
goto Fail;
@@ -332,7 +337,7 @@
stream = pcfface->stream;
- error = pcf_load_font( stream, face );
+ error = pcf_load_font( stream, face, face_index );
if ( error )
goto Fail;
@@ -345,13 +350,16 @@
#endif
}
- /* PCF could not have multiple face in single font file.
- * XXX: non-zero face_index is already invalid argument, but
- * Type1, Type42 driver has a convention to return
+ /* PCF cannot have multiple faces in a single font file.
+ * XXX: A non-zero face_index is already an invalid argument, but
+ * Type1, Type42 drivers have a convention to return
* an invalid argument error when the font could be
* opened by the specified driver.
*/
- if ( face_index > 0 ) {
+ if ( face_index < 0 )
+ goto Exit;
+ else if ( face_index > 0 && ( face_index & 0xFFFF ) > 0 )
+ {
FT_ERROR(( "PCF_Face_Init: invalid face index\n" ));
PCF_Face_Done( pcfface );
return FT_THROW( Invalid_Argument );
@@ -379,7 +387,11 @@
if ( !ft_strcmp( s, "10646" ) ||
( !ft_strcmp( s, "8859" ) &&
!ft_strcmp( face->charset_encoding, "1" ) ) )
- unicode_charmap = 1;
+ unicode_charmap = 1;
+ /* another name for ASCII */
+ else if ( !ft_strcmp( s, "646.1991" ) &&
+ !ft_strcmp( face->charset_encoding, "IRV" ) )
+ unicode_charmap = 1;
}
}
@@ -401,12 +413,6 @@
}
error = FT_CMap_New( &pcf_cmap_class, NULL, &charmap, NULL );
-
-#if 0
- /* Select default charmap */
- if ( pcfface->num_charmaps )
- pcfface->charmap = pcfface->charmaps[0];
-#endif
}
}
@@ -430,9 +436,9 @@
FT_Select_Metrics( size->face, strike_index );
- size->metrics.ascender = accel->fontAscent << 6;
- size->metrics.descender = -accel->fontDescent << 6;
- size->metrics.max_advance = accel->maxbounds.characterWidth << 6;
+ size->metrics.ascender = accel->fontAscent * 64;
+ size->metrics.descender = -accel->fontDescent * 64;
+ size->metrics.max_advance = accel->maxbounds.characterWidth * 64;
return FT_Err_Ok;
}
@@ -489,8 +495,6 @@
PCF_Metric metric;
FT_ULong bytes;
- FT_UNUSED( load_flags );
-
FT_TRACE1(( "PCF_Glyph_Load: glyph index %d\n", glyph_index ));
@@ -520,11 +524,6 @@
bitmap->num_grays = 1;
bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
- FT_TRACE6(( "BIT_ORDER %d ; BYTE_ORDER %d ; GLYPH_PAD %d\n",
- PCF_BIT_ORDER( face->bitmapsFormat ),
- PCF_BYTE_ORDER( face->bitmapsFormat ),
- PCF_GLYPH_PAD( face->bitmapsFormat ) ));
-
switch ( PCF_GLYPH_PAD( face->bitmapsFormat ) )
{
case 1:
@@ -547,6 +546,24 @@
return FT_THROW( Invalid_File_Format );
}
+ slot->format = FT_GLYPH_FORMAT_BITMAP;
+ slot->bitmap_left = metric->leftSideBearing;
+ slot->bitmap_top = metric->ascent;
+
+ slot->metrics.horiAdvance = (FT_Pos)( metric->characterWidth * 64 );
+ slot->metrics.horiBearingX = (FT_Pos)( metric->leftSideBearing * 64 );
+ slot->metrics.horiBearingY = (FT_Pos)( metric->ascent * 64 );
+ slot->metrics.width = (FT_Pos)( ( metric->rightSideBearing -
+ metric->leftSideBearing ) * 64 );
+ slot->metrics.height = (FT_Pos)( bitmap->rows * 64 );
+
+ ft_synthesize_vertical_metrics( &slot->metrics,
+ ( face->accel.fontAscent +
+ face->accel.fontDescent ) * 64 );
+
+ if ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY )
+ goto Exit;
+
/* XXX: to do: are there cases that need repadding the bitmap? */
bytes = (FT_ULong)bitmap->pitch * bitmap->rows;
@@ -579,21 +596,6 @@
}
}
- slot->format = FT_GLYPH_FORMAT_BITMAP;
- slot->bitmap_left = metric->leftSideBearing;
- slot->bitmap_top = metric->ascent;
-
- slot->metrics.horiAdvance = (FT_Pos)( metric->characterWidth << 6 );
- slot->metrics.horiBearingX = (FT_Pos)( metric->leftSideBearing << 6 );
- slot->metrics.horiBearingY = (FT_Pos)( metric->ascent << 6 );
- slot->metrics.width = (FT_Pos)( ( metric->rightSideBearing -
- metric->leftSideBearing ) << 6 );
- slot->metrics.height = (FT_Pos)( bitmap->rows << 6 );
-
- ft_synthesize_vertical_metrics( &slot->metrics,
- ( face->accel.fontAscent +
- face->accel.fontDescent ) << 6 );
-
Exit:
return error;
}
@@ -614,7 +616,7 @@
prop = pcf_find_property( face, prop_name );
- if ( prop != NULL )
+ if ( prop )
{
if ( prop->isString )
{
@@ -623,19 +625,23 @@
}
else
{
- if ( prop->value.l > 0x7FFFFFFFL || prop->value.l < ( -1 - 0x7FFFFFFFL ) )
+ if ( prop->value.l > 0x7FFFFFFFL ||
+ prop->value.l < ( -1 - 0x7FFFFFFFL ) )
{
- FT_TRACE1(( "pcf_get_bdf_property: " ));
- FT_TRACE1(( "too large integer 0x%x is truncated\n" ));
+ FT_TRACE1(( "pcf_get_bdf_property:" ));
+ FT_TRACE1(( " too large integer 0x%x is truncated\n" ));
}
- /* Apparently, the PCF driver loads all properties as signed integers!
- * This really doesn't seem to be a problem, because this is
- * sufficient for any meaningful values.
+
+ /*
+ * The PCF driver loads all properties as signed integers.
+ * This really doesn't seem to be a problem, because this is
+ * sufficient for any meaningful values.
*/
aproperty->type = BDF_PROPERTY_TYPE_INTEGER;
aproperty->u.integer = (FT_Int32)prop->value.l;
}
- return 0;
+
+ return FT_Err_Ok;
}
return FT_THROW( Invalid_Argument );
@@ -650,17 +656,127 @@
*acharset_encoding = face->charset_encoding;
*acharset_registry = face->charset_registry;
- return 0;
+ return FT_Err_Ok;
}
static const FT_Service_BDFRec pcf_service_bdf =
{
- (FT_BDF_GetCharsetIdFunc)pcf_get_charset_id,
- (FT_BDF_GetPropertyFunc) pcf_get_bdf_property
+ (FT_BDF_GetCharsetIdFunc)pcf_get_charset_id, /* get_charset_id */
+ (FT_BDF_GetPropertyFunc) pcf_get_bdf_property /* get_property */
};
+ /*
+ * PROPERTY SERVICE
+ *
+ */
+ static FT_Error
+ pcf_property_set( FT_Module module, /* PCF_Driver */
+ const char* property_name,
+ const void* value,
+ FT_Bool value_is_string )
+ {
+#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
+
+ FT_Error error = FT_Err_Ok;
+ PCF_Driver driver = (PCF_Driver)module;
+
+#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ FT_UNUSED( value_is_string );
+#endif
+
+
+ if ( !ft_strcmp( property_name, "no-long-family-names" ) )
+ {
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ if ( value_is_string )
+ {
+ const char* s = (const char*)value;
+ long lfn = ft_strtol( s, NULL, 10 );
+
+
+ if ( lfn == 0 )
+ driver->no_long_family_names = 0;
+ else if ( lfn == 1 )
+ driver->no_long_family_names = 1;
+ else
+ return FT_THROW( Invalid_Argument );
+ }
+ else
+#endif
+ {
+ FT_Bool* no_long_family_names = (FT_Bool*)value;
+
+
+ driver->no_long_family_names = *no_long_family_names;
+ }
+
+ return error;
+ }
+
+#else /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
+
+ FT_UNUSED( module );
+ FT_UNUSED( value );
+ FT_UNUSED( value_is_string );
+#ifndef FT_DEBUG_LEVEL_TRACE
+ FT_UNUSED( property_name );
+#endif
+
+#endif /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
+
+ FT_TRACE0(( "pcf_property_set: missing property `%s'\n",
+ property_name ));
+ return FT_THROW( Missing_Property );
+ }
+
+
+ static FT_Error
+ pcf_property_get( FT_Module module, /* PCF_Driver */
+ const char* property_name,
+ const void* value )
+ {
+#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
+
+ FT_Error error = FT_Err_Ok;
+ PCF_Driver driver = (PCF_Driver)module;
+
+
+ if ( !ft_strcmp( property_name, "no-long-family-names" ) )
+ {
+ FT_Bool no_long_family_names = driver->no_long_family_names;
+ FT_Bool* val = (FT_Bool*)value;
+
+
+ *val = no_long_family_names;
+
+ return error;
+ }
+
+#else /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
+
+ FT_UNUSED( module );
+ FT_UNUSED( value );
+#ifndef FT_DEBUG_LEVEL_TRACE
+ FT_UNUSED( property_name );
+#endif
+
+#endif /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
+
+ FT_TRACE0(( "pcf_property_get: missing property `%s'\n",
+ property_name ));
+ return FT_THROW( Missing_Property );
+ }
+
+
+ FT_DEFINE_SERVICE_PROPERTIESREC(
+ pcf_service_properties,
+
+ (FT_Properties_SetFunc)pcf_property_set, /* set_property */
+ (FT_Properties_GetFunc)pcf_property_get ) /* get_property */
+
+
/*
*
* SERVICE LIST
@@ -671,6 +787,7 @@
{
{ FT_SERVICE_ID_BDF, &pcf_service_bdf },
{ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_PCF },
+ { FT_SERVICE_ID_PROPERTIES, &pcf_service_properties },
{ NULL, NULL }
};
@@ -685,44 +802,67 @@
}
+ FT_CALLBACK_DEF( FT_Error )
+ pcf_driver_init( FT_Module module ) /* PCF_Driver */
+ {
+#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
+ PCF_Driver driver = (PCF_Driver)module;
+
+
+ driver->no_long_family_names = 0;
+#else
+ FT_UNUSED( module );
+#endif
+
+ return FT_Err_Ok;
+ }
+
+
+ FT_CALLBACK_DEF( void )
+ pcf_driver_done( FT_Module module ) /* PCF_Driver */
+ {
+ FT_UNUSED( module );
+ }
+
+
FT_CALLBACK_TABLE_DEF
const FT_Driver_ClassRec pcf_driver_class =
{
{
FT_MODULE_FONT_DRIVER |
FT_MODULE_DRIVER_NO_OUTLINES,
- sizeof ( FT_DriverRec ),
+ sizeof ( PCF_DriverRec ),
"pcf",
0x10000L,
0x20000L,
- 0,
+ NULL, /* module-specific interface */
- 0, /* FT_Module_Constructor */
- 0, /* FT_Module_Destructor */
- pcf_driver_requester
+ pcf_driver_init, /* FT_Module_Constructor module_init */
+ pcf_driver_done, /* FT_Module_Destructor module_done */
+ pcf_driver_requester /* FT_Module_Requester get_interface */
},
sizeof ( PCF_FaceRec ),
sizeof ( FT_SizeRec ),
sizeof ( FT_GlyphSlotRec ),
- PCF_Face_Init,
- PCF_Face_Done,
- 0, /* FT_Size_InitFunc */
- 0, /* FT_Size_DoneFunc */
- 0, /* FT_Slot_InitFunc */
- 0, /* FT_Slot_DoneFunc */
+ PCF_Face_Init, /* FT_Face_InitFunc init_face */
+ PCF_Face_Done, /* FT_Face_DoneFunc done_face */
+ NULL, /* FT_Size_InitFunc init_size */
+ NULL, /* FT_Size_DoneFunc done_size */
+ NULL, /* FT_Slot_InitFunc init_slot */
+ NULL, /* FT_Slot_DoneFunc done_slot */
- PCF_Glyph_Load,
+ PCF_Glyph_Load, /* FT_Slot_LoadFunc load_glyph */
- 0, /* FT_Face_GetKerningFunc */
- 0, /* FT_Face_AttachFunc */
- 0, /* FT_Face_GetAdvancesFunc */
+ NULL, /* FT_Face_GetKerningFunc get_kerning */
+ NULL, /* FT_Face_AttachFunc attach_file */
+ NULL, /* FT_Face_GetAdvancesFunc get_advances */
- PCF_Size_Request,
- PCF_Size_Select
+ PCF_Size_Request, /* FT_Size_RequestFunc request_size */
+ PCF_Size_Select /* FT_Size_SelectFunc select_size */
};
diff --git a/src/pcf/pcfdrivr.h b/src/pcf/pcfdrivr.h
index 5461495..29d3049 100644
--- a/src/pcf/pcfdrivr.h
+++ b/src/pcf/pcfdrivr.h
@@ -25,8 +25,8 @@
*/
-#ifndef __PCFDRIVR_H__
-#define __PCFDRIVR_H__
+#ifndef PCFDRIVR_H_
+#define PCFDRIVR_H_
#include <ft2build.h>
#include FT_INTERNAL_DRIVER_H
@@ -42,7 +42,7 @@
FT_END_HEADER
-#endif /* __PCFDRIVR_H__ */
+#endif /* PCFDRIVR_H_ */
/* END */
diff --git a/src/pcf/pcferror.h b/src/pcf/pcferror.h
index e51fff8..add8ef2 100644
--- a/src/pcf/pcferror.h
+++ b/src/pcf/pcferror.h
@@ -22,12 +22,12 @@
/* */
/*************************************************************************/
-#ifndef __PCFERROR_H__
-#define __PCFERROR_H__
+#ifndef PCFERROR_H_
+#define PCFERROR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX PCF_Err_
@@ -35,7 +35,7 @@
#include FT_ERRORS_H
-#endif /* __PCFERROR_H__ */
+#endif /* PCFERROR_H_ */
/* END */
diff --git a/src/pcf/pcfread.c b/src/pcf/pcfread.c
index 039af33..537da0d 100644
--- a/src/pcf/pcfread.c
+++ b/src/pcf/pcfread.c
@@ -50,8 +50,15 @@
#ifdef FT_DEBUG_LEVEL_TRACE
static const char* const tableNames[] =
{
- "prop", "accl", "mtrcs", "bmps", "imtrcs",
- "enc", "swidth", "names", "accel"
+ "properties",
+ "accelerators",
+ "metrics",
+ "bitmaps",
+ "ink metrics",
+ "encodings",
+ "swidths",
+ "glyph names",
+ "BDF accelerators"
};
#endif
@@ -102,13 +109,27 @@
FT_STREAM_READ_FIELDS( pcf_toc_header, toc ) )
return FT_THROW( Cannot_Open_Resource );
- if ( toc->version != PCF_FILE_VERSION ||
- toc->count > FT_ARRAY_MAX( face->toc.tables ) ||
- toc->count == 0 )
+ if ( toc->version != PCF_FILE_VERSION ||
+ toc->count == 0 )
return FT_THROW( Invalid_File_Format );
+ if ( stream->size < 16 )
+ return FT_THROW( Invalid_File_Format );
+
+ /* we need 16 bytes per TOC entry, */
+ /* and there can be most 9 tables */
+ if ( toc->count > ( stream->size >> 4 ) ||
+ toc->count > 9 )
+ {
+ FT_TRACE0(( "pcf_read_TOC: adjusting number of tables"
+ " (from %d to %d)\n",
+ toc->count,
+ FT_MIN( stream->size >> 4, 9 ) ));
+ toc->count = FT_MIN( stream->size >> 4, 9 );
+ }
+
if ( FT_NEW_ARRAY( face->toc.tables, toc->count ) )
- return FT_THROW( Out_Of_Memory );
+ return error;
tables = face->toc.tables;
for ( n = 0; n < toc->count; n++ )
@@ -221,8 +242,8 @@
if ( tables[i].type == (FT_UInt)( 1 << j ) )
name = tableNames[j];
- FT_TRACE4(( " %d: type=%s, format=0x%X, "
- "size=%ld (0x%lX), offset=%ld (0x%lX)\n",
+ FT_TRACE4(( " %d: type=%s, format=0x%X,"
+ " size=%ld (0x%lX), offset=%ld (0x%lX)\n",
i, name,
tables[i].format,
tables[i].size, tables[i].size,
@@ -308,7 +329,7 @@
/* parsing normal metrics */
- fields = PCF_BYTE_ORDER( format ) == MSBFirst
+ fields = ( PCF_BYTE_ORDER( format ) == MSBFirst )
? pcf_metric_msb_header
: pcf_metric_header;
@@ -332,6 +353,17 @@
metric->attributes = 0;
}
+ FT_TRACE5(( " width=%d,"
+ " lsb=%d, rsb=%d,"
+ " ascent=%d, descent=%d,"
+ " attributes=%d\n",
+ metric->characterWidth,
+ metric->leftSideBearing,
+ metric->rightSideBearing,
+ metric->ascent,
+ metric->descent,
+ metric->attributes ));
+
Exit:
return error;
}
@@ -431,7 +463,7 @@
int i;
- for ( i = 0 ; i < face->nprops && !found; i++ )
+ for ( i = 0; i < face->nprops && !found; i++ )
{
if ( !ft_strcmp( properties[i].name, prop ) )
found = 1;
@@ -450,7 +482,7 @@
{
PCF_ParseProperty props = NULL;
PCF_Property properties = NULL;
- FT_ULong nprops, i;
+ FT_ULong nprops, orig_nprops, i;
FT_ULong format, size;
FT_Error error;
FT_Memory memory = FT_FACE( face )->memory;
@@ -470,32 +502,43 @@
if ( FT_READ_ULONG_LE( format ) )
goto Bail;
- FT_TRACE4(( "pcf_get_properties:\n" ));
-
- FT_TRACE4(( " format = %ld\n", format ));
+ FT_TRACE4(( "pcf_get_properties:\n"
+ " format: 0x%lX (%s)\n",
+ format,
+ PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" ));
if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
goto Bail;
if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_ULONG( nprops );
+ (void)FT_READ_ULONG( orig_nprops );
else
- (void)FT_READ_ULONG_LE( nprops );
+ (void)FT_READ_ULONG_LE( orig_nprops );
if ( error )
goto Bail;
- FT_TRACE4(( " nprop = %d (truncate %d props)\n",
- (int)nprops, nprops - (FT_ULong)(int)nprops ));
-
- nprops = (FT_ULong)(int)nprops;
+ FT_TRACE4(( " number of properties: %ld\n", orig_nprops ));
/* rough estimate */
- if ( nprops > size / PCF_PROPERTY_SIZE )
+ if ( orig_nprops > size / PCF_PROPERTY_SIZE )
{
error = FT_THROW( Invalid_Table );
goto Bail;
}
+ /* as a heuristic limit to avoid excessive allocation in */
+ /* gzip bombs (i.e., very small, invalid input data that */
+ /* pretends to expand to an insanely large file) we only */
+ /* load the first 256 properties */
+ if ( orig_nprops > 256 )
+ {
+ FT_TRACE0(( "pcf_get_properties:"
+ " only loading first 256 properties\n" ));
+ nprops = 256;
+ }
+ else
+ nprops = orig_nprops;
+
face->nprops = (int)nprops;
if ( FT_NEW_ARRAY( props, nprops ) )
@@ -515,14 +558,23 @@
}
}
+ /* this skip will only work if we really have an extremely large */
+ /* number of properties; it will fail for fake data, avoiding an */
+ /* unnecessarily large allocation later on */
+ if ( FT_STREAM_SKIP( ( orig_nprops - nprops ) * PCF_PROPERTY_SIZE ) )
+ {
+ error = FT_THROW( Invalid_Stream_Skip );
+ goto Bail;
+ }
+
/* pad the property array */
/* */
/* clever here - nprops is the same as the number of odd-units read, */
/* as only isStringProp are odd length (Keith Packard) */
/* */
- if ( nprops & 3 )
+ if ( orig_nprops & 3 )
{
- i = 4 - ( nprops & 3 );
+ i = 4 - ( orig_nprops & 3 );
if ( FT_STREAM_SKIP( i ) )
{
error = FT_THROW( Invalid_Stream_Skip );
@@ -537,15 +589,24 @@
if ( error )
goto Bail;
- FT_TRACE4(( " string_size = %ld\n", string_size ));
+ FT_TRACE4(( " string size: %ld\n", string_size ));
/* rough estimate */
- if ( string_size > size - nprops * PCF_PROPERTY_SIZE )
+ if ( string_size > size - orig_nprops * PCF_PROPERTY_SIZE )
{
error = FT_THROW( Invalid_Table );
goto Bail;
}
+ /* the strings in the `strings' array are PostScript strings, */
+ /* which can have a maximum length of 65536 characters each */
+ if ( string_size > 16777472 ) /* 256 * (65536 + 1) */
+ {
+ FT_TRACE0(( "pcf_get_properties:"
+ " loading only 16777472 bytes of strings array\n" ));
+ string_size = 16777472;
+ }
+
/* allocate one more byte so that we have a final null byte */
if ( FT_NEW_ARRAY( strings, string_size + 1 ) )
goto Bail;
@@ -559,6 +620,7 @@
face->properties = properties;
+ FT_TRACE4(( "\n" ));
for ( i = 0; i < nprops; i++ )
{
FT_Long name_offset = props[i].name;
@@ -621,7 +683,7 @@
FT_Memory memory = FT_FACE( face )->memory;
FT_ULong format, size;
PCF_Metric metrics = NULL;
- FT_ULong nmetrics, i;
+ FT_ULong nmetrics, orig_nmetrics, i;
error = pcf_seek_to_table_type( stream,
@@ -636,6 +698,13 @@
if ( FT_READ_ULONG_LE( format ) )
goto Bail;
+ FT_TRACE4(( "pcf_get_metrics:\n"
+ " format: 0x%lX (%s, %s)\n",
+ format,
+ PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB",
+ PCF_FORMAT_MATCH( format, PCF_COMPRESSED_METRICS ) ?
+ "compressed" : "uncompressed" ));
+
if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) &&
!PCF_FORMAT_MATCH( format, PCF_COMPRESSED_METRICS ) )
return FT_THROW( Invalid_File_Format );
@@ -643,61 +712,70 @@
if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
{
if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_ULONG( nmetrics );
+ (void)FT_READ_ULONG( orig_nmetrics );
else
- (void)FT_READ_ULONG_LE( nmetrics );
+ (void)FT_READ_ULONG_LE( orig_nmetrics );
}
else
{
if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- (void)FT_READ_USHORT( nmetrics );
+ (void)FT_READ_USHORT( orig_nmetrics );
else
- (void)FT_READ_USHORT_LE( nmetrics );
+ (void)FT_READ_USHORT_LE( orig_nmetrics );
}
if ( error )
return FT_THROW( Invalid_File_Format );
- face->nmetrics = nmetrics;
-
- if ( !nmetrics )
- return FT_THROW( Invalid_Table );
-
- FT_TRACE4(( "pcf_get_metrics:\n" ));
-
- FT_TRACE4(( " number of metrics: %d\n", nmetrics ));
+ FT_TRACE4(( " number of metrics: %ld\n", orig_nmetrics ));
/* rough estimate */
if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
{
- if ( nmetrics > size / PCF_METRIC_SIZE )
+ if ( orig_nmetrics > size / PCF_METRIC_SIZE )
return FT_THROW( Invalid_Table );
}
else
{
- if ( nmetrics > size / PCF_COMPRESSED_METRIC_SIZE )
+ if ( orig_nmetrics > size / PCF_COMPRESSED_METRIC_SIZE )
return FT_THROW( Invalid_Table );
}
+ if ( !orig_nmetrics )
+ return FT_THROW( Invalid_Table );
+
+ /* PCF is a format from ancient times; Unicode was in its */
+ /* infancy, and widely used two-byte character sets for CJK */
+ /* scripts (Big 5, GB 2312, JIS X 0208, etc.) did have at most */
+ /* 15000 characters. Even the more exotic CNS 11643 and CCCII */
+ /* standards, which were essentially three-byte character sets, */
+ /* provided less then 65536 assigned characters. */
+ /* */
+ /* While technically possible to have a larger number of glyphs */
+ /* in PCF files, we thus limit the number to 65536. */
+ if ( orig_nmetrics > 65536 )
+ {
+ FT_TRACE0(( "pcf_get_metrics:"
+ " only loading first 65536 metrics\n" ));
+ nmetrics = 65536;
+ }
+ else
+ nmetrics = orig_nmetrics;
+
+ face->nmetrics = nmetrics;
+
if ( FT_NEW_ARRAY( face->metrics, nmetrics ) )
- return FT_THROW( Out_Of_Memory );
+ return error;
metrics = face->metrics;
+
+ FT_TRACE4(( "\n" ));
for ( i = 0; i < nmetrics; i++, metrics++ )
{
+ FT_TRACE5(( " idx %ld:", i ));
error = pcf_get_metric( stream, format, metrics );
metrics->bits = 0;
- FT_TRACE5(( " idx %d: width=%d, "
- "lsb=%d, rsb=%d, ascent=%d, descent=%d, swidth=%d\n",
- i,
- metrics->characterWidth,
- metrics->leftSideBearing,
- metrics->rightSideBearing,
- metrics->ascent,
- metrics->descent,
- metrics->attributes ));
-
if ( error )
break;
@@ -705,7 +783,7 @@
/* compute a glyph's bitmap dimensions, thus setting them to zero in */
/* case of an error disables this particular glyph only */
if ( metrics->rightSideBearing < metrics->leftSideBearing ||
- metrics->ascent + metrics->descent < 0 )
+ metrics->ascent < -metrics->descent )
{
metrics->characterWidth = 0;
metrics->leftSideBearing = 0;
@@ -735,7 +813,7 @@
FT_Long* offsets = NULL;
FT_Long bitmapSizes[GLYPHPADOPTIONS];
FT_ULong format, size;
- FT_ULong nbitmaps, i, sizebitmaps = 0;
+ FT_ULong nbitmaps, orig_nbitmaps, i, sizebitmaps = 0;
error = pcf_seek_to_table_type( stream,
@@ -753,18 +831,42 @@
format = FT_GET_ULONG_LE();
if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- nbitmaps = FT_GET_ULONG();
+ orig_nbitmaps = FT_GET_ULONG();
else
- nbitmaps = FT_GET_ULONG_LE();
+ orig_nbitmaps = FT_GET_ULONG_LE();
FT_Stream_ExitFrame( stream );
+ FT_TRACE4(( "pcf_get_bitmaps:\n"
+ " format: 0x%lX\n"
+ " (%s, %s,\n"
+ " padding=%d bit%s, scanning=%d bit%s)\n",
+ format,
+ PCF_BYTE_ORDER( format ) == MSBFirst
+ ? "most significant byte first"
+ : "least significant byte first",
+ PCF_BIT_ORDER( format ) == MSBFirst
+ ? "most significant bit first"
+ : "least significant bit first",
+ 8 << PCF_GLYPH_PAD_INDEX( format ),
+ ( 8 << PCF_GLYPH_PAD_INDEX( format ) ) == 1 ? "" : "s",
+ 8 << PCF_SCAN_UNIT_INDEX( format ),
+ ( 8 << PCF_SCAN_UNIT_INDEX( format ) ) == 1 ? "" : "s" ));
+
if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
return FT_THROW( Invalid_File_Format );
- FT_TRACE4(( "pcf_get_bitmaps:\n" ));
+ FT_TRACE4(( " number of bitmaps: %ld\n", orig_nbitmaps ));
- FT_TRACE4(( " number of bitmaps: %d\n", nbitmaps ));
+ /* see comment in `pcf_get_metrics' */
+ if ( orig_nbitmaps > 65536 )
+ {
+ FT_TRACE0(( "pcf_get_bitmaps:"
+ " only loading first 65536 bitmaps\n" ));
+ nbitmaps = 65536;
+ }
+ else
+ nbitmaps = orig_nbitmaps;
if ( nbitmaps != face->nmetrics )
return FT_THROW( Invalid_File_Format );
@@ -772,6 +874,7 @@
if ( FT_NEW_ARRAY( offsets, nbitmaps ) )
return error;
+ FT_TRACE5(( "\n" ));
for ( i = 0; i < nbitmaps; i++ )
{
if ( PCF_BYTE_ORDER( format ) == MSBFirst )
@@ -779,7 +882,7 @@
else
(void)FT_READ_LONG_LE( offsets[i] );
- FT_TRACE5(( " bitmap %d: offset %ld (0x%lX)\n",
+ FT_TRACE5(( " bitmap %ld: offset %ld (0x%lX)\n",
i, offsets[i], offsets[i] ));
}
if ( error )
@@ -796,17 +899,19 @@
sizebitmaps = (FT_ULong)bitmapSizes[PCF_GLYPH_PAD_INDEX( format )];
- FT_TRACE4(( " padding %d implies a size of %ld\n",
- i, bitmapSizes[i] ));
+ FT_TRACE4(( " %ld-bit padding implies a size of %ld\n",
+ 8 << i, bitmapSizes[i] ));
}
- FT_TRACE4(( " %d bitmaps, padding index %ld\n",
+ FT_TRACE4(( " %ld bitmaps, using %ld-bit padding\n",
nbitmaps,
- PCF_GLYPH_PAD_INDEX( format ) ));
- FT_TRACE4(( " bitmap size = %d\n", sizebitmaps ));
+ 8 << PCF_GLYPH_PAD_INDEX( format ) ));
+ FT_TRACE4(( " bitmap size: %ld\n", sizebitmaps ));
FT_UNUSED( sizebitmaps ); /* only used for debugging */
+ /* right now, we only check the bitmap offsets; */
+ /* actual bitmaps are only loaded on demand */
for ( i = 0; i < nbitmaps; i++ )
{
/* rough estimate */
@@ -814,7 +919,7 @@
( (FT_ULong)offsets[i] > size ) )
{
FT_TRACE0(( "pcf_get_bitmaps:"
- " invalid offset to bitmap data of glyph %d\n", i ));
+ " invalid offset to bitmap data of glyph %ld\n", i ));
}
else
face->metrics[i].bits = stream->pos + (FT_ULong)offsets[i];
@@ -838,7 +943,7 @@
int firstCol, lastCol;
int firstRow, lastRow;
FT_ULong nencoding;
- int encodingOffset;
+ FT_UShort encodingOffset;
int i, j;
FT_ULong k;
PCF_Encoding encoding = NULL;
@@ -878,10 +983,20 @@
FT_Stream_ExitFrame( stream );
+ FT_TRACE4(( "pcf_get_encodings:\n"
+ " format: 0x%lX (%s)\n",
+ format,
+ PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" ));
+
if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
return FT_THROW( Invalid_File_Format );
- /* sanity checks */
+ FT_TRACE4(( " firstCol 0x%X, lastCol 0x%X\n"
+ " firstRow 0x%X, lastRow 0x%X\n",
+ firstCol, lastCol,
+ firstRow, lastRow ));
+
+ /* sanity checks; we limit numbers of rows and columns to 256 */
if ( firstCol < 0 ||
firstCol > lastCol ||
lastCol > 0xFF ||
@@ -890,35 +1005,36 @@
lastRow > 0xFF )
return FT_THROW( Invalid_Table );
- FT_TRACE4(( "pdf_get_encodings:\n" ));
-
- FT_TRACE4(( " firstCol %d, lastCol %d, firstRow %d, lastRow %d\n",
- firstCol, lastCol, firstRow, lastRow ));
-
nencoding = (FT_ULong)( lastCol - firstCol + 1 ) *
(FT_ULong)( lastRow - firstRow + 1 );
if ( FT_NEW_ARRAY( encoding, nencoding ) )
- return FT_THROW( Out_Of_Memory );
+ return error;
error = FT_Stream_EnterFrame( stream, 2 * nencoding );
if ( error )
goto Bail;
+ FT_TRACE5(( "\n" ));
+
k = 0;
for ( i = firstRow; i <= lastRow; i++ )
{
for ( j = firstCol; j <= lastCol; j++ )
{
+ /* X11's reference implementation uses the equivalent to */
+ /* `FT_GET_SHORT', however PCF fonts with more than 32768 */
+ /* characters (e.g. `unifont.pcf') clearly show that an */
+ /* unsigned value is needed. */
if ( PCF_BYTE_ORDER( format ) == MSBFirst )
- encodingOffset = FT_GET_SHORT();
+ encodingOffset = FT_GET_USHORT();
else
- encodingOffset = FT_GET_SHORT_LE();
+ encodingOffset = FT_GET_USHORT_LE();
- if ( encodingOffset > -1 )
+ if ( encodingOffset != 0xFFFFU )
{
encoding[k].enc = i * 256 + j;
- encoding[k].glyph = (FT_UShort)encodingOffset;
+ encoding[k].glyph = encodingOffset;
FT_TRACE5(( " code %d (0x%04X): idx %d\n",
encoding[k].enc, encoding[k].enc, encoding[k].glyph ));
@@ -1009,6 +1125,15 @@
if ( FT_READ_ULONG_LE( format ) )
goto Bail;
+ FT_TRACE4(( "pcf_get_accel%s:\n"
+ " format: 0x%lX (%s, %s)\n",
+ type == PCF_BDF_ACCELERATORS ? " (getting BDF accelerators)"
+ : "",
+ format,
+ PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB",
+ PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) ?
+ "accelerated" : "not accelerated" ));
+
if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) &&
!PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) )
goto Bail;
@@ -1024,12 +1149,43 @@
goto Bail;
}
+ FT_TRACE5(( " noOverlap=%s, constantMetrics=%s,"
+ " terminalFont=%s, constantWidth=%s\n"
+ " inkInside=%s, inkMetrics=%s, drawDirection=%s\n"
+ " fontAscent=%ld, fontDescent=%ld, maxOverlap=%ld\n",
+ accel->noOverlap ? "yes" : "no",
+ accel->constantMetrics ? "yes" : "no",
+ accel->terminalFont ? "yes" : "no",
+ accel->constantWidth ? "yes" : "no",
+ accel->inkInside ? "yes" : "no",
+ accel->inkMetrics ? "yes" : "no",
+ accel->drawDirection ? "RTL" : "LTR",
+ accel->fontAscent,
+ accel->fontDescent,
+ accel->maxOverlap ));
+
+ /* sanity checks */
+ if ( FT_ABS( accel->fontAscent ) > 0x7FFF )
+ {
+ accel->fontAscent = accel->fontAscent < 0 ? -0x7FFF : 0x7FFF;
+ FT_TRACE0(( "pfc_get_accel: clamping font ascent to value %d\n",
+ accel->fontAscent ));
+ }
+ if ( FT_ABS( accel->fontDescent ) > 0x7FFF )
+ {
+ accel->fontDescent = accel->fontDescent < 0 ? -0x7FFF : 0x7FFF;
+ FT_TRACE0(( "pfc_get_accel: clamping font descent to value %d\n",
+ accel->fontDescent ));
+ }
+
+ FT_TRACE5(( " minbounds:" ));
error = pcf_get_metric( stream,
format & ( ~PCF_FORMAT_MASK ),
&(accel->minbounds) );
if ( error )
goto Bail;
+ FT_TRACE5(( " maxbounds:" ));
error = pcf_get_metric( stream,
format & ( ~PCF_FORMAT_MASK ),
&(accel->maxbounds) );
@@ -1038,12 +1194,14 @@
if ( PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) )
{
+ FT_TRACE5(( " ink minbounds:" ));
error = pcf_get_metric( stream,
format & ( ~PCF_FORMAT_MASK ),
&(accel->ink_minbounds) );
if ( error )
goto Bail;
+ FT_TRACE5(( " ink maxbounds:" ));
error = pcf_get_metric( stream,
format & ( ~PCF_FORMAT_MASK ),
&(accel->ink_maxbounds) );
@@ -1052,7 +1210,7 @@
}
else
{
- accel->ink_minbounds = accel->minbounds; /* I'm not sure about this */
+ accel->ink_minbounds = accel->minbounds;
accel->ink_maxbounds = accel->maxbounds;
}
@@ -1141,7 +1299,7 @@
len = lengths[nn];
- if ( src == NULL )
+ if ( !src )
continue;
/* separate elements with a space */
@@ -1173,8 +1331,10 @@
FT_LOCAL_DEF( FT_Error )
pcf_load_font( FT_Stream stream,
- PCF_Face face )
+ PCF_Face face,
+ FT_Long face_index )
{
+ FT_Face root = FT_FACE( face );
FT_Error error;
FT_Memory memory = FT_FACE( face )->memory;
FT_Bool hasBDFAccelerators;
@@ -1184,6 +1344,13 @@
if ( error )
goto Exit;
+ root->num_faces = 1;
+ root->face_index = 0;
+
+ /* If we are performing a simple font format check, exit immediately. */
+ if ( face_index < 0 )
+ return FT_Err_Ok;
+
error = pcf_get_properties( stream, face );
if ( error )
goto Exit;
@@ -1226,13 +1393,9 @@
/* now construct the face object */
{
- FT_Face root = FT_FACE( face );
PCF_Property prop;
- root->num_faces = 1;
- root->face_index = 0;
-
root->face_flags |= FT_FACE_FLAG_FIXED_SIZES |
FT_FACE_FLAG_HORIZONTAL |
FT_FACE_FLAG_FAST_GLYPHS;
@@ -1240,14 +1403,81 @@
if ( face->accel.constantWidth )
root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
- if ( ( error = pcf_interpret_style( face ) ) != 0 )
- goto Exit;
+ if ( FT_SET_ERROR( pcf_interpret_style( face ) ) )
+ goto Exit;
prop = pcf_find_property( face, "FAMILY_NAME" );
if ( prop && prop->isString )
{
- if ( FT_STRDUP( root->family_name, prop->value.atom ) )
- goto Exit;
+
+#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
+
+ PCF_Driver driver = (PCF_Driver)FT_FACE_DRIVER( face );
+
+
+ if ( !driver->no_long_family_names )
+ {
+ /* Prepend the foundry name plus a space to the family name. */
+ /* There are many fonts just called `Fixed' which look */
+ /* completely different, and which have nothing to do with each */
+ /* other. When selecting `Fixed' in KDE or Gnome one gets */
+ /* results that appear rather random, the style changes often if */
+ /* one changes the size and one cannot select some fonts at all. */
+ /* */
+ /* We also check whether we have `wide' characters; all put */
+ /* together, we get family names like `Sony Fixed' or `Misc */
+ /* Fixed Wide'. */
+
+ PCF_Property foundry_prop, point_size_prop, average_width_prop;
+
+ int l = ft_strlen( prop->value.atom ) + 1;
+ int wide = 0;
+
+
+ foundry_prop = pcf_find_property( face, "FOUNDRY" );
+ point_size_prop = pcf_find_property( face, "POINT_SIZE" );
+ average_width_prop = pcf_find_property( face, "AVERAGE_WIDTH" );
+
+ if ( point_size_prop && average_width_prop )
+ {
+ if ( average_width_prop->value.l >= point_size_prop->value.l )
+ {
+ /* This font is at least square shaped or even wider */
+ wide = 1;
+ l += ft_strlen( " Wide" );
+ }
+ }
+
+ if ( foundry_prop && foundry_prop->isString )
+ {
+ l += ft_strlen( foundry_prop->value.atom ) + 1;
+
+ if ( FT_NEW_ARRAY( root->family_name, l ) )
+ goto Exit;
+
+ ft_strcpy( root->family_name, foundry_prop->value.atom );
+ ft_strcat( root->family_name, " " );
+ ft_strcat( root->family_name, prop->value.atom );
+ }
+ else
+ {
+ if ( FT_NEW_ARRAY( root->family_name, l ) )
+ goto Exit;
+
+ ft_strcpy( root->family_name, prop->value.atom );
+ }
+
+ if ( wide )
+ ft_strcat( root->family_name, " Wide" );
+ }
+ else
+
+#endif /* PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
+
+ {
+ if ( FT_STRDUP( root->family_name, prop->value.atom ) )
+ goto Exit;
+ }
}
else
root->family_name = NULL;
@@ -1270,46 +1500,132 @@
FT_Short resolution_x = 0, resolution_y = 0;
- FT_MEM_ZERO( bsize, sizeof ( FT_Bitmap_Size ) );
+ FT_ZERO( bsize );
+
+ /* for simplicity, we take absolute values of integer properties */
#if 0
bsize->height = face->accel.maxbounds.ascent << 6;
#endif
- bsize->height = (FT_Short)( face->accel.fontAscent +
- face->accel.fontDescent );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( face->accel.fontAscent + face->accel.fontDescent < 0 )
+ FT_TRACE0(( "pcf_load_font: negative height\n" ));
+#endif
+ if ( FT_ABS( face->accel.fontAscent +
+ face->accel.fontDescent ) > 0x7FFF )
+ {
+ bsize->height = 0x7FFF;
+ FT_TRACE0(( "pcf_load_font: clamping height to value %d\n",
+ bsize->height ));
+ }
+ else
+ bsize->height = FT_ABS( (FT_Short)( face->accel.fontAscent +
+ face->accel.fontDescent ) );
prop = pcf_find_property( face, "AVERAGE_WIDTH" );
if ( prop )
- bsize->width = (FT_Short)( ( prop->value.l + 5 ) / 10 );
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( prop->value.l < 0 )
+ FT_TRACE0(( "pcf_load_font: negative average width\n" ));
+#endif
+ if ( ( FT_ABS( prop->value.l ) > 0x7FFFL * 10 - 5 ) )
+ {
+ bsize->width = 0x7FFF;
+ FT_TRACE0(( "pcf_load_font: clamping average width to value %d\n",
+ bsize->width ));
+ }
+ else
+ bsize->width = FT_ABS( (FT_Short)( ( prop->value.l + 5 ) / 10 ) );
+ }
else
- bsize->width = (FT_Short)( bsize->height * 2/3 );
+ {
+ /* this is a heuristical value */
+ bsize->width = (FT_Short)FT_MulDiv( bsize->height, 2, 3 );
+ }
prop = pcf_find_property( face, "POINT_SIZE" );
if ( prop )
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( prop->value.l < 0 )
+ FT_TRACE0(( "pcf_load_font: negative point size\n" ));
+#endif
/* convert from 722.7 decipoints to 72 points per inch */
- bsize->size =
- (FT_Pos)( ( prop->value.l * 64 * 7200 + 36135L ) / 72270L );
+ if ( FT_ABS( prop->value.l ) > 0x504C2L ) /* 0x7FFF * 72270/7200 */
+ {
+ bsize->size = 0x7FFF;
+ FT_TRACE0(( "pcf_load_font: clamping point size to value %d\n",
+ bsize->size ));
+ }
+ else
+ bsize->size = FT_MulDiv( FT_ABS( prop->value.l ),
+ 64 * 7200,
+ 72270L );
+ }
prop = pcf_find_property( face, "PIXEL_SIZE" );
if ( prop )
- bsize->y_ppem = (FT_Short)prop->value.l << 6;
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( prop->value.l < 0 )
+ FT_TRACE0(( "pcf_load_font: negative pixel size\n" ));
+#endif
+ if ( FT_ABS( prop->value.l ) > 0x7FFF )
+ {
+ bsize->y_ppem = 0x7FFF << 6;
+ FT_TRACE0(( "pcf_load_font: clamping pixel size to value %d\n",
+ bsize->y_ppem ));
+ }
+ else
+ bsize->y_ppem = FT_ABS( (FT_Short)prop->value.l ) << 6;
+ }
prop = pcf_find_property( face, "RESOLUTION_X" );
if ( prop )
- resolution_x = (FT_Short)prop->value.l;
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( prop->value.l < 0 )
+ FT_TRACE0(( "pcf_load_font: negative X resolution\n" ));
+#endif
+ if ( FT_ABS( prop->value.l ) > 0x7FFF )
+ {
+ resolution_x = 0x7FFF;
+ FT_TRACE0(( "pcf_load_font: clamping X resolution to value %d\n",
+ resolution_x ));
+ }
+ else
+ resolution_x = FT_ABS( (FT_Short)prop->value.l );
+ }
prop = pcf_find_property( face, "RESOLUTION_Y" );
if ( prop )
- resolution_y = (FT_Short)prop->value.l;
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( prop->value.l < 0 )
+ FT_TRACE0(( "pcf_load_font: negative Y resolution\n" ));
+#endif
+ if ( FT_ABS( prop->value.l ) > 0x7FFF )
+ {
+ resolution_y = 0x7FFF;
+ FT_TRACE0(( "pcf_load_font: clamping Y resolution to value %d\n",
+ resolution_y ));
+ }
+ else
+ resolution_y = FT_ABS( (FT_Short)prop->value.l );
+ }
if ( bsize->y_ppem == 0 )
{
bsize->y_ppem = bsize->size;
if ( resolution_y )
- bsize->y_ppem = bsize->y_ppem * resolution_y / 72;
+ bsize->y_ppem = FT_MulDiv( bsize->y_ppem, resolution_y, 72 );
}
if ( resolution_x && resolution_y )
- bsize->x_ppem = bsize->y_ppem * resolution_x / resolution_y;
+ bsize->x_ppem = FT_MulDiv( bsize->y_ppem,
+ resolution_x,
+ resolution_y );
else
bsize->x_ppem = bsize->y_ppem;
}
diff --git a/src/pcf/pcfread.h b/src/pcf/pcfread.h
index c9524f1..bed30e5 100644
--- a/src/pcf/pcfread.h
+++ b/src/pcf/pcfread.h
@@ -25,8 +25,8 @@
*/
-#ifndef __PCFREAD_H__
-#define __PCFREAD_H__
+#ifndef PCFREAD_H_
+#define PCFREAD_H_
#include <ft2build.h>
@@ -39,7 +39,7 @@
FT_END_HEADER
-#endif /* __PCFREAD_H__ */
+#endif /* PCFREAD_H_ */
/* END */
diff --git a/src/pcf/pcfutil.h b/src/pcf/pcfutil.h
index ce10fb5..be986e7 100644
--- a/src/pcf/pcfutil.h
+++ b/src/pcf/pcfutil.h
@@ -25,8 +25,8 @@
*/
-#ifndef __PCFUTIL_H__
-#define __PCFUTIL_H__
+#ifndef PCFUTIL_H_
+#define PCFUTIL_H_
#include <ft2build.h>
@@ -49,7 +49,7 @@
FT_END_HEADER
-#endif /* __PCFUTIL_H__ */
+#endif /* PCFUTIL_H_ */
/* END */
diff --git a/src/pfr/Jamfile b/src/pfr/Jamfile
index 2064bcd..cb55a7e 100644
--- a/src/pfr/Jamfile
+++ b/src/pfr/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/pfr Jamfile
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,13 @@
if $(FT2_MULTI)
{
- _sources = pfrdrivr pfrgload pfrload pfrobjs pfrcmap pfrsbit ;
+ _sources = pfrcmap
+ pfrdrivr
+ pfrgload
+ pfrload
+ pfrobjs
+ pfrsbit
+ ;
}
else
{
diff --git a/src/pfr/module.mk b/src/pfr/module.mk
index 3f5a47e..27fec8e 100644
--- a/src/pfr/module.mk
+++ b/src/pfr/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/pfr/pfr.c b/src/pfr/pfr.c
index 96e6730..1760882 100644
--- a/src/pfr/pfr.c
+++ b/src/pfr/pfr.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR driver component. */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -15,15 +15,16 @@
/* */
/***************************************************************************/
-#define FT_MAKE_OPTION_SINGLE_OBJECT
+#define FT_MAKE_OPTION_SINGLE_OBJECT
#include <ft2build.h>
-#include "pfrload.c"
-#include "pfrgload.c"
#include "pfrcmap.c"
-#include "pfrobjs.c"
#include "pfrdrivr.c"
+#include "pfrgload.c"
+#include "pfrload.c"
+#include "pfrobjs.c"
#include "pfrsbit.c"
+
/* END */
diff --git a/src/pfr/pfrcmap.c b/src/pfr/pfrcmap.c
index 88ff55a..6064378 100644
--- a/src/pfr/pfrcmap.c
+++ b/src/pfr/pfrcmap.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR cmap handling (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -130,7 +130,7 @@
}
if ( gchar->char_code < char_code )
- min = mid+1;
+ min = mid + 1;
else
max = mid;
}
@@ -161,12 +161,16 @@
{
sizeof ( PFR_CMapRec ),
- (FT_CMap_InitFunc) pfr_cmap_init,
- (FT_CMap_DoneFunc) pfr_cmap_done,
- (FT_CMap_CharIndexFunc)pfr_cmap_char_index,
- (FT_CMap_CharNextFunc) pfr_cmap_char_next,
+ (FT_CMap_InitFunc) pfr_cmap_init, /* init */
+ (FT_CMap_DoneFunc) pfr_cmap_done, /* done */
+ (FT_CMap_CharIndexFunc)pfr_cmap_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) pfr_cmap_char_next, /* char_next */
- NULL, NULL, NULL, NULL, NULL
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
};
diff --git a/src/pfr/pfrcmap.h b/src/pfr/pfrcmap.h
index 87e1e5b..c70a0c8 100644
--- a/src/pfr/pfrcmap.h
+++ b/src/pfr/pfrcmap.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR cmap handling (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PFRCMAP_H__
-#define __PFRCMAP_H__
+#ifndef PFRCMAP_H_
+#define PFRCMAP_H_
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
@@ -40,7 +40,7 @@
FT_END_HEADER
-#endif /* __PFRCMAP_H__ */
+#endif /* PFRCMAP_H_ */
/* END */
diff --git a/src/pfr/pfrdrivr.c b/src/pfr/pfrdrivr.c
index 8753748..6c7e501 100644
--- a/src/pfr/pfrdrivr.c
+++ b/src/pfr/pfrdrivr.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR driver interface (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -139,9 +139,9 @@
static
const FT_Service_PfrMetricsRec pfr_metrics_service_rec =
{
- pfr_get_metrics,
- pfr_face_get_kerning,
- pfr_get_advance
+ pfr_get_metrics, /* get_metrics */
+ pfr_face_get_kerning, /* get_kerning */
+ pfr_get_advance /* get_advance */
};
@@ -181,31 +181,32 @@
0x10000L,
0x20000L,
- NULL,
+ NULL, /* module-specific interface */
- 0, /* FT_Module_Constructor */
- 0, /* FT_Module_Destructor */
- pfr_get_service
+ NULL, /* FT_Module_Constructor module_init */
+ NULL, /* FT_Module_Destructor module_done */
+ pfr_get_service /* FT_Module_Requester get_interface */
},
sizeof ( PFR_FaceRec ),
sizeof ( PFR_SizeRec ),
sizeof ( PFR_SlotRec ),
- pfr_face_init,
- pfr_face_done,
- 0, /* FT_Size_InitFunc */
- 0, /* FT_Size_DoneFunc */
- pfr_slot_init,
- pfr_slot_done,
+ pfr_face_init, /* FT_Face_InitFunc init_face */
+ pfr_face_done, /* FT_Face_DoneFunc done_face */
+ NULL, /* FT_Size_InitFunc init_size */
+ NULL, /* FT_Size_DoneFunc done_size */
+ pfr_slot_init, /* FT_Slot_InitFunc init_slot */
+ pfr_slot_done, /* FT_Slot_DoneFunc done_slot */
- pfr_slot_load,
+ pfr_slot_load, /* FT_Slot_LoadFunc load_glyph */
- pfr_get_kerning,
- 0, /* FT_Face_AttachFunc */
- 0, /* FT_Face_GetAdvancesFunc */
- 0, /* FT_Size_RequestFunc */
- 0, /* FT_Size_SelectFunc */
+ pfr_get_kerning, /* FT_Face_GetKerningFunc get_kerning */
+ NULL, /* FT_Face_AttachFunc attach_file */
+ NULL, /* FT_Face_GetAdvancesFunc get_advances */
+
+ NULL, /* FT_Size_RequestFunc request_size */
+ NULL, /* FT_Size_SelectFunc select_size */
};
diff --git a/src/pfr/pfrdrivr.h b/src/pfr/pfrdrivr.h
index b5be470..cab8527 100644
--- a/src/pfr/pfrdrivr.h
+++ b/src/pfr/pfrdrivr.h
@@ -4,7 +4,7 @@
/* */
/* High-level Type PFR driver interface (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PFRDRIVR_H__
-#define __PFRDRIVR_H__
+#ifndef PFRDRIVR_H_
+#define PFRDRIVR_H_
#include <ft2build.h>
@@ -37,7 +37,7 @@
FT_END_HEADER
-#endif /* __PFRDRIVR_H__ */
+#endif /* PFRDRIVR_H_ */
/* END */
diff --git a/src/pfr/pfrerror.h b/src/pfr/pfrerror.h
index 978e7b2..7027c81 100644
--- a/src/pfr/pfrerror.h
+++ b/src/pfr/pfrerror.h
@@ -4,7 +4,7 @@
/* */
/* PFR error codes (specification only). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,12 +22,12 @@
/* */
/*************************************************************************/
-#ifndef __PFRERROR_H__
-#define __PFRERROR_H__
+#ifndef PFRERROR_H_
+#define PFRERROR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX PFR_Err_
@@ -35,7 +35,7 @@
#include FT_ERRORS_H
-#endif /* __PFRERROR_H__ */
+#endif /* PFRERROR_H_ */
/* END */
diff --git a/src/pfr/pfrgload.c b/src/pfr/pfrgload.c
index 1cd13c2..b799019 100644
--- a/src/pfr/pfrgload.c
+++ b/src/pfr/pfrgload.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR glyph loader (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -92,8 +92,8 @@
if ( outline->n_contours > 0 )
first = outline->contours[outline->n_contours - 1];
- /* if the last point falls on the same location than the first one */
- /* we need to delete it */
+ /* if the last point falls on the same location as the first one */
+ /* we need to delete it */
if ( last > first )
{
FT_Vector* p1 = outline->points + first;
@@ -215,8 +215,10 @@
/* check that there is space for a new contour and a new point */
error = FT_GLYPHLOADER_CHECK_POINTS( loader, 1, 1 );
if ( !error )
+ {
/* add new start point */
error = pfr_glyph_line_to( glyph, to );
+ }
return error;
}
@@ -304,8 +306,8 @@
glyph->y_control = glyph->x_control + x_count;
- mask = 0;
- x = 0;
+ mask = 0;
+ x = 0;
for ( i = 0; i < count; i++ )
{
@@ -331,10 +333,10 @@
mask >>= 1;
}
- /* XXX: for now we ignore the secondary stroke and edge definitions */
- /* since we don't want to support native PFR hinting */
- /* */
- if ( flags & PFR_GLYPH_EXTRA_ITEMS )
+ /* XXX: we ignore the secondary stroke and edge definitions */
+ /* since we don't support native PFR hinting */
+ /* */
+ if ( flags & PFR_GLYPH_SINGLE_EXTRA_ITEMS )
{
error = pfr_extra_items_skip( &p, limit );
if ( error )
@@ -366,27 +368,27 @@
switch ( format >> 4 )
{
- case 0: /* end glyph */
+ case 0: /* end glyph */
FT_TRACE6(( "- end glyph" ));
args_count = 0;
break;
- case 1: /* general line operation */
+ case 1: /* general line operation */
FT_TRACE6(( "- general line" ));
goto Line1;
- case 4: /* move to inside contour */
+ case 4: /* move to inside contour */
FT_TRACE6(( "- move to inside" ));
goto Line1;
- case 5: /* move to outside contour */
+ case 5: /* move to outside contour */
FT_TRACE6(( "- move to outside" ));
Line1:
args_format = format_low;
args_count = 1;
break;
- case 2: /* horizontal line to */
+ case 2: /* horizontal line to */
FT_TRACE6(( "- horizontal line to cx.%d", format_low ));
if ( format_low >= x_count )
goto Failure;
@@ -396,7 +398,7 @@
args_count = 0;
break;
- case 3: /* vertical line to */
+ case 3: /* vertical line to */
FT_TRACE6(( "- vertical line to cy.%d", format_low ));
if ( format_low >= y_count )
goto Failure;
@@ -406,19 +408,19 @@
args_count = 0;
break;
- case 6: /* horizontal to vertical curve */
+ case 6: /* horizontal to vertical curve */
FT_TRACE6(( "- hv curve " ));
args_format = 0xB8E;
args_count = 3;
break;
- case 7: /* vertical to horizontal curve */
+ case 7: /* vertical to horizontal curve */
FT_TRACE6(( "- vh curve" ));
args_format = 0xE2B;
args_count = 3;
break;
- default: /* general curve to */
+ default: /* general curve to */
FT_TRACE6(( "- general curve" ));
args_count = 4;
args_format = format_low;
@@ -439,14 +441,14 @@
{
case 0: /* 8-bit index */
PFR_CHECK( 1 );
- idx = PFR_NEXT_BYTE( p );
+ idx = PFR_NEXT_BYTE( p );
if ( idx >= x_count )
goto Failure;
cur->x = glyph->x_control[idx];
FT_TRACE7(( " cx#%d", idx ));
break;
- case 1: /* 16-bit value */
+ case 1: /* 16-bit absolute value */
PFR_CHECK( 2 );
cur->x = PFR_NEXT_SHORT( p );
FT_TRACE7(( " x.%d", cur->x ));
@@ -516,22 +518,22 @@
/* */
switch ( format >> 4 )
{
- case 0: /* end glyph => EXIT */
+ case 0: /* end glyph => EXIT */
pfr_glyph_end( glyph );
goto Exit;
- case 1: /* line operations */
+ case 1: /* line operations */
case 2:
case 3:
error = pfr_glyph_line_to( glyph, pos );
goto Test_Error;
- case 4: /* move to inside contour */
- case 5: /* move to outside contour */
+ case 4: /* move to inside contour */
+ case 5: /* move to outside contour */
error = pfr_glyph_move_to( glyph, pos );
goto Test_Error;
- default: /* curve operations */
+ default: /* curve operations */
error = pfr_glyph_curve_to( glyph, pos, pos + 1, pos + 2 );
Test_Error: /* test error condition */
@@ -577,10 +579,11 @@
/* ignore extra items when present */
/* */
- if ( flags & PFR_GLYPH_EXTRA_ITEMS )
+ if ( flags & PFR_GLYPH_COMPOUND_EXTRA_ITEMS )
{
error = pfr_extra_items_skip( &p, limit );
- if (error) goto Exit;
+ if ( error )
+ goto Exit;
}
/* we can't rely on the FT_GlyphLoader to load sub-glyphs, because */
@@ -632,14 +635,14 @@
if ( format & PFR_SUBGLYPH_XSCALE )
{
PFR_CHECK( 2 );
- subglyph->x_scale = PFR_NEXT_SHORT( p ) << 4;
+ subglyph->x_scale = PFR_NEXT_SHORT( p ) * 16;
}
subglyph->y_scale = 0x10000L;
if ( format & PFR_SUBGLYPH_YSCALE )
{
PFR_CHECK( 2 );
- subglyph->y_scale = PFR_NEXT_SHORT( p ) << 4;
+ subglyph->y_scale = PFR_NEXT_SHORT( p ) * 16;
}
/* read offset */
@@ -753,8 +756,10 @@
count = glyph->num_subs - old_count;
- FT_TRACE4(( "compound glyph with %d elements (offset %lu):\n",
- count, offset ));
+ FT_TRACE4(( "compound glyph with %d element%s (offset %lu):\n",
+ count,
+ count == 1 ? "" : "s",
+ offset ));
/* now, load each individual glyph */
for ( n = 0; n < count; n++ )
@@ -807,7 +812,9 @@
/* proceed to next sub-glyph */
}
- FT_TRACE4(( "end compound glyph with %d elements\n", count ));
+ FT_TRACE4(( "end compound glyph with %d element%s\n",
+ count,
+ count == 1 ? "" : "s" ));
}
else
{
diff --git a/src/pfr/pfrgload.h b/src/pfr/pfrgload.h
index c7c8da1..01f48d7 100644
--- a/src/pfr/pfrgload.h
+++ b/src/pfr/pfrgload.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR glyph loader (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PFRGLOAD_H__
-#define __PFRGLOAD_H__
+#ifndef PFRGLOAD_H_
+#define PFRGLOAD_H_
#include "pfrtypes.h"
@@ -43,7 +43,7 @@
FT_END_HEADER
-#endif /* __PFRGLOAD_H__ */
+#endif /* PFRGLOAD_H_ */
/* END */
diff --git a/src/pfr/pfrload.c b/src/pfr/pfrload.c
index ec7311d..2776da4 100644
--- a/src/pfr/pfrload.c
+++ b/src/pfr/pfrload.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR loader (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -26,6 +26,93 @@
#define FT_COMPONENT trace_pfr
+ /*
+ * The overall structure of a PFR file is as follows.
+ *
+ * PFR header
+ * 58 bytes (contains nPhysFonts)
+ *
+ * Logical font directory (size at most 2^16 bytes)
+ * 2 bytes (nLogFonts)
+ * + nLogFonts * 5 bytes
+ *
+ * ==> nLogFonts <= 13106
+ *
+ * Logical font section (size at most 2^24 bytes)
+ * nLogFonts * logFontRecord
+ *
+ * logFontRecord (size at most 2^16 bytes)
+ * 12 bytes (fontMatrix)
+ * + 1 byte (flags)
+ * + 0-5 bytes (depending on `flags')
+ * + 0-(1+255*(2+255)) = 0-65536 (depending on `flags')
+ * + 5 bytes (physical font info)
+ * + 0-1 bytes (depending on PFR header)
+ *
+ * ==> minimum size 18 bytes
+ *
+ * Physical font section (size at most 2^24 bytes)
+ * nPhysFonts * (physFontRecord
+ * + nBitmapSizes * nBmapChars * bmapCharRecord)
+ *
+ * physFontRecord (size at most 2^24 bytes)
+ * 14 bytes (font info)
+ * + 1 byte (flags)
+ * + 0-2 (depending on `flags')
+ * + 0-? (structure too complicated to be shown here; depending on
+ * `flags'; contains `nBitmapSizes' and `nBmapChars')
+ * + 3 bytes (nAuxBytes)
+ * + nAuxBytes
+ * + 1 byte (nBlueValues)
+ * + 2 * nBlueValues
+ * + 6 bytes (hinting data)
+ * + 2 bytes (nCharacters)
+ * + nCharacters * (4-10 bytes) (depending on `flags')
+ *
+ * ==> minimum size 27 bytes
+ *
+ * bmapCharRecord
+ * 4-7 bytes
+ *
+ * Glyph program strings (three possible types: simpleGps, compoundGps,
+ * and bitmapGps; size at most 2^24 bytes)
+ * simpleGps (size at most 2^16 bytes)
+ * 1 byte (flags)
+ * 1-2 bytes (n[XY]orus, depending on `flags')
+ * 0-(64+512*2) = 0-1088 bytes (depending on `n[XY]orus')
+ * 0-? (structure too complicated to be shown here; depending on
+ * `flags')
+ * 1-? glyph data (faintly resembling PS Type 1 charstrings)
+ *
+ * ==> minimum size 3 bytes
+ *
+ * compoundGps (size at most 2^16 bytes)
+ * 1 byte (nElements <= 63, flags)
+ * + 0-(1+255*(2+255)) = 0-65536 (depending on `flags')
+ * + nElements * (6-14 bytes)
+ *
+ * bitmapGps (size at most 2^16 bytes)
+ * 1 byte (flags)
+ * 3-13 bytes (position info, depending on `flags')
+ * 0-? bitmap data
+ *
+ * ==> minimum size 4 bytes
+ *
+ * PFR trailer
+ * 8 bytes
+ *
+ *
+ * ==> minimum size of a valid PFR:
+ * 58 (header)
+ * + 2 (nLogFonts)
+ * + 27 (1 physFontRecord)
+ * + 8 (trailer)
+ * -----
+ * 95 bytes
+ *
+ */
+
+
/*************************************************************************/
/*************************************************************************/
/***** *****/
@@ -75,7 +162,8 @@
if ( extra->type == item_type )
{
error = extra->parser( p, p + item_size, item_data );
- if ( error ) goto Exit;
+ if ( error )
+ goto Exit;
break;
}
@@ -183,7 +271,8 @@
{
result = 0;
}
- return result;
+
+ return result;
}
@@ -206,9 +295,26 @@
FT_UInt result = 0;
- if ( FT_STREAM_SEEK( section_offset ) || FT_READ_USHORT( count ) )
+ if ( FT_STREAM_SEEK( section_offset ) ||
+ FT_READ_USHORT( count ) )
goto Exit;
+ /* check maximum value and a rough minimum size: */
+ /* - no more than 13106 log fonts */
+ /* - we need 5 bytes for a log header record */
+ /* - we need at least 18 bytes for a log font record */
+ /* - the overall size is at least 95 bytes plus the */
+ /* log header and log font records */
+ if ( count > ( ( 1 << 16 ) - 2 ) / 5 ||
+ 2 + count * 5 >= stream->size - section_offset ||
+ 95 + count * ( 5 + 18 ) >= stream->size )
+ {
+ FT_ERROR(( "pfr_log_font_count:"
+ " invalid number of logical fonts\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
result = count;
Exit:
@@ -254,13 +360,14 @@
FT_UInt local;
- if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( size ) )
+ if ( FT_STREAM_SEEK( offset ) ||
+ FT_FRAME_ENTER( size ) )
goto Exit;
p = stream->cursor;
limit = p + size;
- PFR_CHECK(13);
+ PFR_CHECK( 13 );
log_font->matrix[0] = PFR_NEXT_LONG( p );
log_font->matrix[1] = PFR_NEXT_LONG( p );
@@ -276,7 +383,7 @@
if ( flags & PFR_LOG_2BYTE_STROKE )
local++;
- if ( (flags & PFR_LINE_JOIN_MASK) == PFR_LINE_JOIN_MITER )
+ if ( ( flags & PFR_LINE_JOIN_MASK ) == PFR_LINE_JOIN_MITER )
local += 3;
}
if ( flags & PFR_LOG_BOLD )
@@ -308,10 +415,11 @@
if ( flags & PFR_LOG_EXTRA_ITEMS )
{
error = pfr_extra_items_skip( &p, limit );
- if (error) goto Fail;
+ if ( error )
+ goto Fail;
}
- PFR_CHECK(5);
+ PFR_CHECK( 5 );
log_font->phys_size = PFR_NEXT_USHORT( p );
log_font->phys_offset = PFR_NEXT_ULONG( p );
if ( size_increment )
@@ -358,7 +466,7 @@
PFR_CHECK( 5 );
- p += 3; /* skip bctSize */
+ p += 3; /* skip bctSize */
flags0 = PFR_NEXT_BYTE( p );
count = PFR_NEXT_BYTE( p );
@@ -434,12 +542,12 @@
}
- /* Load font ID. This is a so-called "unique" name that is rather
- * long and descriptive (like "Tiresias ScreenFont v7.51").
+ /* Load font ID. This is a so-called `unique' name that is rather
+ * long and descriptive (like `Tiresias ScreenFont v7.51').
*
* Note that a PFR font's family name is contained in an *undocumented*
- * string of the "auxiliary data" portion of a physical font record. This
- * may also contain the "real" style name!
+ * string of the `auxiliary data' portion of a physical font record. This
+ * may also contain the `real' style name!
*
* If no family name is present, the font ID is used instead for the
* family.
@@ -454,7 +562,7 @@
FT_UInt len = (FT_UInt)( limit - p );
- if ( phy_font->font_id != NULL )
+ if ( phy_font->font_id )
goto Exit;
if ( FT_ALLOC( phy_font->font_id, len + 1 ) )
@@ -481,7 +589,7 @@
FT_Memory memory = phy_font->memory;
- if ( phy_font->vertical.stem_snaps != NULL )
+ if ( phy_font->vertical.stem_snaps )
goto Exit;
PFR_CHECK( 1 );
@@ -507,7 +615,7 @@
Too_Short:
error = FT_THROW( Invalid_Table );
- FT_ERROR(( "pfr_exta_item_load_stem_snaps:"
+ FT_ERROR(( "pfr_extra_item_load_stem_snaps:"
" invalid stem snaps table\n" ));
goto Exit;
}
@@ -525,8 +633,6 @@
FT_Memory memory = phy_font->memory;
- FT_TRACE2(( "pfr_extra_item_load_kerning_pairs()\n" ));
-
if ( FT_NEW( item ) )
goto Exit;
@@ -612,7 +718,6 @@
}
-
static const PFR_ExtraItemRec pfr_phy_font_extra_items[] =
{
{ 1, (PFR_ExtraItem_ParseFunc)pfr_extra_item_load_bitmap_info },
@@ -623,7 +728,8 @@
};
- /* Loads a name from the auxiliary data. Since this extracts undocumented
+ /*
+ * Load a name from the auxiliary data. Since this extracts undocumented
* strings from the font file, we need to be careful here.
*/
static FT_Error
@@ -637,12 +743,14 @@
FT_UInt n, ok;
+ if ( *astring )
+ FT_FREE( *astring );
+
if ( len > 0 && p[len - 1] == 0 )
len--;
- /* check that each character is ASCII for making sure not to
- load garbage
- */
+ /* check that each character is ASCII */
+ /* for making sure not to load garbage */
ok = ( len > 0 );
for ( n = 0; n < len; n++ )
if ( p[n] < 32 || p[n] > 127 )
@@ -659,6 +767,7 @@
FT_MEM_COPY( result, p, len );
result[len] = 0;
}
+
Exit:
*astring = result;
return error;
@@ -729,7 +838,8 @@
phy_font->kern_items = NULL;
phy_font->kern_items_tail = &phy_font->kern_items;
- if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( size ) )
+ if ( FT_STREAM_SEEK( offset ) ||
+ FT_FRAME_ENTER( size ) )
goto Exit;
phy_font->cursor = stream->cursor;
@@ -757,16 +867,16 @@
/* load the extra items when present */
if ( flags & PFR_PHY_EXTRA_ITEMS )
{
- error = pfr_extra_items_parse( &p, limit,
- pfr_phy_font_extra_items, phy_font );
+ error = pfr_extra_items_parse( &p, limit,
+ pfr_phy_font_extra_items, phy_font );
if ( error )
goto Fail;
}
- /* In certain fonts, the auxiliary bytes contain interesting */
- /* information. These are not in the specification but can be */
- /* guessed by looking at the content of a few PFR0 fonts. */
+ /* In certain fonts, the auxiliary bytes contain interesting */
+ /* information. These are not in the specification but can be */
+ /* guessed by looking at the content of a few PFR0 fonts. */
PFR_CHECK( 3 );
num_aux = PFR_NEXT_ULONG( p );
@@ -776,7 +886,7 @@
FT_Byte* q2;
- PFR_CHECK( num_aux );
+ PFR_CHECK_SIZE( num_aux );
p += num_aux;
while ( num_aux > 0 )
@@ -797,9 +907,8 @@
switch ( type )
{
case 1:
- /* this seems to correspond to the font's family name,
- * padded to 16-bits with one zero when necessary
- */
+ /* this seems to correspond to the font's family name, padded to */
+ /* an even number of bytes with a zero byte appended if needed */
error = pfr_aux_name_load( q, length - 4U, memory,
&phy_font->family_name );
if ( error )
@@ -817,9 +926,8 @@
break;
case 3:
- /* this seems to correspond to the font's style name,
- * padded to 16-bits with one zero when necessary
- */
+ /* this seems to correspond to the font's style name, padded to */
+ /* an even number of bytes with a zero byte appended if needed */
error = pfr_aux_name_load( q, length - 4U, memory,
&phy_font->style_name );
if ( error )
@@ -867,9 +975,6 @@
phy_font->num_chars = count = PFR_NEXT_USHORT( p );
phy_font->chars_offset = offset + (FT_Offset)( p - stream->cursor );
- if ( FT_NEW_ARRAY( phy_font->chars, count ) )
- goto Fail;
-
Size = 1 + 1 + 2;
if ( flags & PFR_PHY_2BYTE_CHARCODE )
Size += 1;
@@ -886,7 +991,10 @@
if ( flags & PFR_PHY_3BYTE_GPS_OFFSET )
Size += 1;
- PFR_CHECK( count * Size );
+ PFR_CHECK_SIZE( count * Size );
+
+ if ( FT_NEW_ARRAY( phy_font->chars, count ) )
+ goto Fail;
for ( n = 0; n < count; n++ )
{
diff --git a/src/pfr/pfrload.h b/src/pfr/pfrload.h
index 0a51234..36e809a 100644
--- a/src/pfr/pfrload.h
+++ b/src/pfr/pfrload.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR loader (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PFRLOAD_H__
-#define __PFRLOAD_H__
+#ifndef PFRLOAD_H_
+#define PFRLOAD_H_
#include "pfrobjs.h"
#include FT_INTERNAL_STREAM_H
@@ -25,14 +25,19 @@
FT_BEGIN_HEADER
+ /* some size checks should be always done (mainly to prevent */
+ /* excessive allocation for malformed data), ... */
+#define PFR_CHECK_SIZE( x ) do \
+ { \
+ if ( p + (x) > limit ) \
+ goto Too_Short; \
+ } while ( 0 )
+
+ /* ... and some only if intensive checking is explicitly requested */
#ifdef PFR_CONFIG_NO_CHECKS
#define PFR_CHECK( x ) do { } while ( 0 )
#else
-#define PFR_CHECK( x ) do \
- { \
- if ( p + (x) > limit ) \
- goto Too_Short; \
- } while ( 0 )
+#define PFR_CHECK PFR_CHECK_SIZE
#endif
#define PFR_NEXT_BYTE( p ) FT_NEXT_BYTE( p )
@@ -112,7 +117,7 @@
FT_END_HEADER
-#endif /* __PFRLOAD_H__ */
+#endif /* PFRLOAD_H_ */
/* END */
diff --git a/src/pfr/pfrobjs.c b/src/pfr/pfrobjs.c
index aababf4..737b97b 100644
--- a/src/pfr/pfrobjs.c
+++ b/src/pfr/pfrobjs.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR object methods (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -109,7 +109,7 @@
if ( face_index < 0 )
goto Exit;
- if ( face_index >= pfrface->num_faces )
+ if ( ( face_index & 0xFFFF ) >= pfrface->num_faces )
{
FT_ERROR(( "pfr_face_init: invalid face index\n" ));
error = FT_THROW( Invalid_Argument );
@@ -118,9 +118,11 @@
/* load the face */
error = pfr_log_font_load(
- &face->log_font, stream, (FT_UInt)face_index,
- face->header.log_dir_offset,
- FT_BOOL( face->header.phy_font_max_size_high != 0 ) );
+ &face->log_font,
+ stream,
+ (FT_UInt)( face_index & 0xFFFF ),
+ face->header.log_dir_offset,
+ FT_BOOL( face->header.phy_font_max_size_high != 0 ) );
if ( error )
goto Exit;
@@ -136,13 +138,13 @@
PFR_PhyFont phy_font = &face->phy_font;
- pfrface->face_index = face_index;
+ pfrface->face_index = face_index & 0xFFFF;
pfrface->num_glyphs = (FT_Long)phy_font->num_chars + 1;
pfrface->face_flags |= FT_FACE_FLAG_SCALABLE;
- /* if all characters point to the same gps_offset 0, we */
- /* assume that the font only contains bitmaps */
+ /* if gps_offset == 0 for all characters, we */
+ /* assume that the font only contains bitmaps */
{
FT_UInt nn;
@@ -164,7 +166,7 @@
}
}
- if ( (phy_font->flags & PFR_PHY_PROPORTIONAL) == 0 )
+ if ( ( phy_font->flags & PFR_PHY_PROPORTIONAL ) == 0 )
pfrface->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
if ( phy_font->flags & PFR_PHY_VERTICAL )
@@ -178,16 +180,16 @@
if ( phy_font->num_kern_pairs > 0 )
pfrface->face_flags |= FT_FACE_FLAG_KERNING;
- /* If no family name was found in the "undocumented" auxiliary
+ /* If no family name was found in the `undocumented' auxiliary
* data, use the font ID instead. This sucks but is better than
* nothing.
*/
pfrface->family_name = phy_font->family_name;
- if ( pfrface->family_name == NULL )
+ if ( !pfrface->family_name )
pfrface->family_name = phy_font->font_id;
/* note that the style name can be NULL in certain PFR fonts,
- * probably meaning "Regular"
+ * probably meaning `Regular'
*/
pfrface->style_name = phy_font->style_name;
@@ -262,15 +264,9 @@
charmap.encoding = FT_ENCODING_UNICODE;
error = FT_CMap_New( &pfr_cmap_class_rec, NULL, &charmap, NULL );
-
-#if 0
- /* Select default charmap */
- if ( pfrface->num_charmaps )
- pfrface->charmap = pfrface->charmaps[0];
-#endif
}
- /* check whether we've loaded any kerning pairs */
+ /* check whether we have loaded any kerning pairs */
if ( phy_font->num_kern_pairs )
pfrface->face_flags |= FT_FACE_FLAG_KERNING;
}
@@ -340,8 +336,12 @@
/* try to load an embedded bitmap */
if ( ( load_flags & ( FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP ) ) == 0 )
{
- error = pfr_slot_load_bitmap( slot, size, gindex );
- if ( error == 0 )
+ error = pfr_slot_load_bitmap(
+ slot,
+ size,
+ gindex,
+ ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) != 0 );
+ if ( !error )
goto Exit;
}
@@ -402,7 +402,7 @@
pfrslot->linearHoriAdvance = metrics->horiAdvance;
pfrslot->linearVertAdvance = metrics->vertAdvance;
- /* make-up vertical metrics(?) */
+ /* make up vertical metrics(?) */
metrics->vertBearingX = 0;
metrics->vertBearingY = 0;
@@ -522,8 +522,8 @@
FT_UInt probe = power * size;
FT_UInt extra = count - power;
FT_Byte* base = stream->cursor;
- FT_Bool twobytes = FT_BOOL( item->flags & 1 );
- FT_Bool twobyte_adj = FT_BOOL( item->flags & 2 );
+ FT_Bool twobytes = FT_BOOL( item->flags & PFR_KERN_2BYTE_CHAR );
+ FT_Bool twobyte_adj = FT_BOOL( item->flags & PFR_KERN_2BYTE_ADJ );
FT_Byte* p;
FT_UInt32 cpair;
@@ -596,4 +596,5 @@
return error;
}
+
/* END */
diff --git a/src/pfr/pfrobjs.h b/src/pfr/pfrobjs.h
index e990b45..59c709f 100644
--- a/src/pfr/pfrobjs.h
+++ b/src/pfr/pfrobjs.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR object methods (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PFROBJS_H__
-#define __PFROBJS_H__
+#ifndef PFROBJS_H_
+#define PFROBJS_H_
#include "pfrtypes.h"
@@ -90,7 +90,7 @@
FT_END_HEADER
-#endif /* __PFROBJS_H__ */
+#endif /* PFROBJS_H_ */
/* END */
diff --git a/src/pfr/pfrsbit.c b/src/pfr/pfrsbit.c
index bb5df5c..ba909dd 100644
--- a/src/pfr/pfrsbit.c
+++ b/src/pfr/pfrsbit.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR bitmap loader (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -37,11 +37,11 @@
typedef struct PFR_BitWriter_
{
- FT_Byte* line; /* current line start */
- FT_Int pitch; /* line size in bytes */
- FT_UInt width; /* width in pixels/bits */
- FT_UInt rows; /* number of remaining rows to scan */
- FT_UInt total; /* total number of bits to draw */
+ FT_Byte* line; /* current line start */
+ FT_Int pitch; /* line size in bytes */
+ FT_UInt width; /* width in pixels/bits */
+ FT_UInt rows; /* number of remaining rows to scan */
+ FT_UInt total; /* total number of bits to draw */
} PFR_BitWriterRec, *PFR_BitWriter;
@@ -277,49 +277,99 @@
pfr_lookup_bitmap_data( FT_Byte* base,
FT_Byte* limit,
FT_UInt count,
- FT_UInt flags,
+ FT_UInt* flags,
FT_UInt char_code,
FT_ULong* found_offset,
FT_ULong* found_size )
{
- FT_UInt left, right, char_len;
- FT_Bool two = FT_BOOL( flags & 1 );
+ FT_UInt min, max, char_len;
+ FT_Bool two = FT_BOOL( *flags & PFR_BITMAP_2BYTE_CHARCODE );
FT_Byte* buff;
char_len = 4;
- if ( two ) char_len += 1;
- if ( flags & 2 ) char_len += 1;
- if ( flags & 4 ) char_len += 1;
+ if ( two )
+ char_len += 1;
+ if ( *flags & PFR_BITMAP_2BYTE_SIZE )
+ char_len += 1;
+ if ( *flags & PFR_BITMAP_3BYTE_OFFSET )
+ char_len += 1;
- left = 0;
- right = count;
-
- while ( left < right )
+ if ( !( *flags & PFR_BITMAP_CHARCODES_VALIDATED ) )
{
- FT_UInt middle, code;
+ FT_Byte* p;
+ FT_Byte* lim;
+ FT_UInt code;
+ FT_Long prev_code;
- middle = ( left + right ) >> 1;
- buff = base + middle * char_len;
+ *flags |= PFR_BITMAP_VALID_CHARCODES;
+ prev_code = -1;
+ lim = base + count * char_len;
- /* check that we are not outside of the table -- */
- /* this is possible with broken fonts... */
- if ( buff + char_len > limit )
- goto Fail;
+ if ( lim > limit )
+ {
+ FT_TRACE0(( "pfr_lookup_bitmap_data:"
+ " number of bitmap records too large,\n"
+ " "
+ " thus ignoring all bitmaps in this strike\n" ));
+ *flags &= ~PFR_BITMAP_VALID_CHARCODES;
+ }
+ else
+ {
+ /* check whether records are sorted by code */
+ for ( p = base; p < lim; p += char_len )
+ {
+ if ( two )
+ code = FT_PEEK_USHORT( p );
+ else
+ code = *p;
+
+ if ( (FT_Long)code <= prev_code )
+ {
+ FT_TRACE0(( "pfr_lookup_bitmap_data:"
+ " bitmap records are not sorted,\n"
+ " "
+ " thus ignoring all bitmaps in this strike\n" ));
+ *flags &= ~PFR_BITMAP_VALID_CHARCODES;
+ break;
+ }
+
+ prev_code = code;
+ }
+ }
+
+ *flags |= PFR_BITMAP_CHARCODES_VALIDATED;
+ }
+
+ /* ignore bitmaps in case table is not valid */
+ /* (this might be sanitized, but PFR is dead...) */
+ if ( !( *flags & PFR_BITMAP_VALID_CHARCODES ) )
+ goto Fail;
+
+ min = 0;
+ max = count;
+
+ /* binary search */
+ while ( min < max )
+ {
+ FT_UInt mid, code;
+
+
+ mid = ( min + max ) >> 1;
+ buff = base + mid * char_len;
if ( two )
code = PFR_NEXT_USHORT( buff );
else
code = PFR_NEXT_BYTE( buff );
- if ( code == char_code )
- goto Found_It;
-
- if ( code < char_code )
- left = middle;
+ if ( char_code < code )
+ max = mid;
+ else if ( char_code > code )
+ min = mid + 1;
else
- right = middle;
+ goto Found_It;
}
Fail:
@@ -329,20 +379,20 @@
return;
Found_It:
- if ( flags & 2 )
+ if ( *flags & PFR_BITMAP_2BYTE_SIZE )
*found_size = PFR_NEXT_USHORT( buff );
else
*found_size = PFR_NEXT_BYTE( buff );
- if ( flags & 4 )
+ if ( *flags & PFR_BITMAP_3BYTE_OFFSET )
*found_offset = PFR_NEXT_ULONG( buff );
else
*found_offset = PFR_NEXT_USHORT( buff );
}
- /* load bitmap metrics. "*padvance" must be set to the default value */
- /* before calling this function... */
+ /* load bitmap metrics. `*padvance' must be set to the default value */
+ /* before calling this function */
/* */
static FT_Error
pfr_load_bitmap_metrics( FT_Byte** pdata,
@@ -357,7 +407,6 @@
{
FT_Error error = FT_Err_Ok;
FT_Byte flags;
- FT_Char c;
FT_Byte b;
FT_Byte* p = *pdata;
FT_Long xpos, ypos, advance;
@@ -377,9 +426,9 @@
{
case 0:
PFR_CHECK( 1 );
- c = PFR_NEXT_INT8( p );
- xpos = c >> 4;
- ypos = ( (FT_Char)( c << 4 ) ) >> 4;
+ b = PFR_NEXT_BYTE( p );
+ xpos = (FT_Char)b >> 4;
+ ypos = ( (FT_Char)( b << 4 ) ) >> 4;
break;
case 1:
@@ -445,7 +494,7 @@
case 1:
PFR_CHECK( 1 );
- advance = PFR_NEXT_INT8( p ) << 8;
+ advance = PFR_NEXT_INT8( p ) * 256;
break;
case 2:
@@ -510,8 +559,7 @@
break;
default:
- FT_ERROR(( "pfr_read_bitmap_data: invalid image type\n" ));
- error = FT_THROW( Invalid_File_Format );
+ ;
}
}
@@ -530,7 +578,8 @@
FT_LOCAL( FT_Error )
pfr_slot_load_bitmap( PFR_Slot glyph,
PFR_Size size,
- FT_UInt glyph_index )
+ FT_UInt glyph_index,
+ FT_Bool metrics_only )
{
FT_Error error;
PFR_Face face = (PFR_Face) glyph->root.face;
@@ -544,7 +593,7 @@
character = &phys->chars[glyph_index];
- /* Look-up a bitmap strike corresponding to the current */
+ /* look up a bitmap strike corresponding to the current */
/* character dimensions */
{
FT_UInt n;
@@ -555,9 +604,7 @@
{
if ( strike->x_ppm == (FT_UInt)size->root.metrics.x_ppem &&
strike->y_ppm == (FT_UInt)size->root.metrics.y_ppem )
- {
goto Found_Strike;
- }
strike++;
}
@@ -568,17 +615,20 @@
Found_Strike:
- /* Now lookup the glyph's position within the file */
+ /* now look up the glyph's position within the file */
{
FT_UInt char_len;
char_len = 4;
- if ( strike->flags & 1 ) char_len += 1;
- if ( strike->flags & 2 ) char_len += 1;
- if ( strike->flags & 4 ) char_len += 1;
+ if ( strike->flags & PFR_BITMAP_2BYTE_CHARCODE )
+ char_len += 1;
+ if ( strike->flags & PFR_BITMAP_2BYTE_SIZE )
+ char_len += 1;
+ if ( strike->flags & PFR_BITMAP_3BYTE_OFFSET )
+ char_len += 1;
- /* Access data directly in the frame to speed lookups */
+ /* access data directly in the frame to speed lookups */
if ( FT_STREAM_SEEK( phys->bct_offset + strike->bct_offset ) ||
FT_FRAME_ENTER( char_len * strike->num_bitmaps ) )
goto Exit;
@@ -586,7 +636,7 @@
pfr_lookup_bitmap_data( stream->cursor,
stream->limit,
strike->num_bitmaps,
- strike->flags,
+ &strike->flags,
character->char_code,
&gps_offset,
&gps_size );
@@ -595,7 +645,7 @@
if ( gps_size == 0 )
{
- /* Could not find a bitmap program string for this glyph */
+ /* could not find a bitmap program string for this glyph */
error = FT_THROW( Invalid_Argument );
goto Exit;
}
@@ -617,8 +667,8 @@
glyph->root.linearHoriAdvance = advance;
- /* compute default advance, i.e., scaled advance. This can be */
- /* overridden in the bitmap header of certain glyphs. */
+ /* compute default advance, i.e., scaled advance; this can be */
+ /* overridden in the bitmap header of certain glyphs */
advance = FT_MulDiv( (FT_Fixed)size->root.metrics.x_ppem << 8,
character->advance,
(FT_Long)phys->metrics_resolution );
@@ -633,6 +683,55 @@
&xpos, &ypos,
&xsize, &ysize,
&advance, &format );
+ if ( error )
+ goto Exit1;
+
+ /*
+ * Before allocating the target bitmap, we check whether the given
+ * bitmap dimensions are valid, depending on the image format.
+ *
+ * Format 0: We have a stream of pixels (with 8 pixels per byte).
+ *
+ * (xsize * ysize + 7) / 8 <= gps_size
+ *
+ * Format 1: Run-length encoding; the high nibble holds the number of
+ * white bits, the low nibble the number of black bits. In
+ * other words, a single byte can represent at most 15
+ * pixels.
+ *
+ * xsize * ysize <= 15 * gps_size
+ *
+ * Format 2: Run-length encoding; the high byte holds the number of
+ * white bits, the low byte the number of black bits. In
+ * other words, two bytes can represent at most 255 pixels.
+ *
+ * xsize * ysize <= 255 * (gps_size + 1) / 2
+ */
+ switch ( format )
+ {
+ case 0:
+ if ( ( (FT_ULong)xsize * ysize + 7 ) / 8 > gps_size )
+ error = FT_THROW( Invalid_Table );
+ break;
+ case 1:
+ if ( (FT_ULong)xsize * ysize > 15 * gps_size )
+ error = FT_THROW( Invalid_Table );
+ break;
+ case 2:
+ if ( (FT_ULong)xsize * ysize > 255 * ( ( gps_size + 1 ) / 2 ) )
+ error = FT_THROW( Invalid_Table );
+ break;
+ default:
+ FT_ERROR(( "pfr_slot_load_bitmap: invalid image type\n" ));
+ error = FT_THROW( Invalid_Table );
+ }
+
+ if ( error )
+ {
+ if ( FT_ERR_EQ( error, Invalid_Table ) )
+ FT_ERROR(( "pfr_slot_load_bitmap: invalid bitmap dimensions\n" ));
+ goto Exit1;
+ }
/*
* XXX: on 16bit systems we return an error for huge bitmaps
@@ -666,8 +765,8 @@
/* XXX: needs casts to fit FT_Glyph_Metrics.{width|height} */
glyph->root.metrics.width = (FT_Pos)xsize << 6;
glyph->root.metrics.height = (FT_Pos)ysize << 6;
- glyph->root.metrics.horiBearingX = xpos << 6;
- glyph->root.metrics.horiBearingY = ypos << 6;
+ glyph->root.metrics.horiBearingX = xpos * 64;
+ glyph->root.metrics.horiBearingY = ypos * 64;
glyph->root.metrics.horiAdvance = FT_PIX_ROUND( ( advance >> 2 ) );
glyph->root.metrics.vertBearingX = - glyph->root.metrics.width >> 1;
glyph->root.metrics.vertBearingY = 0;
@@ -677,6 +776,9 @@
glyph->root.bitmap_left = (FT_Int)xpos;
glyph->root.bitmap_top = (FT_Int)( ypos + (FT_Long)ysize );
+ if ( metrics_only )
+ goto Exit1;
+
/* Allocate and read bitmap data */
{
FT_ULong len = (FT_ULong)glyph->root.bitmap.pitch * ysize;
@@ -684,17 +786,17 @@
error = ft_glyphslot_alloc_bitmap( &glyph->root, len );
if ( !error )
- {
error = pfr_load_bitmap_bits(
p,
stream->limit,
format,
- FT_BOOL(face->header.color_flags & 2),
+ FT_BOOL( face->header.color_flags &
+ PFR_FLAG_INVERT_BITMAP ),
&glyph->root.bitmap );
- }
}
}
+ Exit1:
FT_FRAME_EXIT();
}
@@ -702,4 +804,5 @@
return error;
}
+
/* END */
diff --git a/src/pfr/pfrsbit.h b/src/pfr/pfrsbit.h
index 0db2cd5..07b27bc 100644
--- a/src/pfr/pfrsbit.h
+++ b/src/pfr/pfrsbit.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR bitmap loader (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PFRSBIT_H__
-#define __PFRSBIT_H__
+#ifndef PFRSBIT_H_
+#define PFRSBIT_H_
#include "pfrobjs.h"
@@ -26,11 +26,12 @@
FT_LOCAL( FT_Error )
pfr_slot_load_bitmap( PFR_Slot glyph,
PFR_Size size,
- FT_UInt glyph_index );
+ FT_UInt glyph_index,
+ FT_Bool metrics_only );
FT_END_HEADER
-#endif /* __PFR_SBIT_H__ */
+#endif /* PFRSBIT_H_ */
/* END */
diff --git a/src/pfr/pfrtypes.h b/src/pfr/pfrtypes.h
index 5ffb1b1..058d6aa 100644
--- a/src/pfr/pfrtypes.h
+++ b/src/pfr/pfrtypes.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR data structures (specification only). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PFRTYPES_H__
-#define __PFRTYPES_H__
+#ifndef PFRTYPES_H_
+#define PFRTYPES_H_
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
@@ -69,12 +69,8 @@
/* used in `color_flags' field of the PFR_Header */
- typedef enum PFR_HeaderFlags_
- {
- PFR_FLAG_BLACK_PIXEL = 1,
- PFR_FLAG_INVERT_BITMAP = 2
-
- } PFR_HeaderFlags;
+#define PFR_FLAG_BLACK_PIXEL 0x01U
+#define PFR_FLAG_INVERT_BITMAP 0x02U
/************************************************************************/
@@ -96,36 +92,27 @@
} PFR_LogFontRec, *PFR_LogFont;
- typedef enum PFR_LogFlags_
- {
- PFR_LOG_EXTRA_ITEMS = 0x40,
- PFR_LOG_2BYTE_BOLD = 0x20,
- PFR_LOG_BOLD = 0x10,
- PFR_LOG_2BYTE_STROKE = 8,
- PFR_LOG_STROKE = 4,
- PFR_LINE_JOIN_MASK = 3
+#define PFR_LINE_JOIN_MITER 0x00U
+#define PFR_LINE_JOIN_ROUND 0x01U
+#define PFR_LINE_JOIN_BEVEL 0x02U
+#define PFR_LINE_JOIN_MASK ( PFR_LINE_JOIN_ROUND | PFR_LINE_JOIN_BEVEL )
- } PFR_LogFlags;
-
-
- typedef enum PFR_LineJoinFlags_
- {
- PFR_LINE_JOIN_MITER = 0,
- PFR_LINE_JOIN_ROUND = 1,
- PFR_LINE_JOIN_BEVEL = 2
-
- } PFR_LineJoinFlags;
+#define PFR_LOG_STROKE 0x04U
+#define PFR_LOG_2BYTE_STROKE 0x08U
+#define PFR_LOG_BOLD 0x10U
+#define PFR_LOG_2BYTE_BOLD 0x20U
+#define PFR_LOG_EXTRA_ITEMS 0x40U
/************************************************************************/
- typedef enum PFR_BitmapFlags_
- {
- PFR_BITMAP_3BYTE_OFFSET = 4,
- PFR_BITMAP_2BYTE_SIZE = 2,
- PFR_BITMAP_2BYTE_CHARCODE = 1
+#define PFR_BITMAP_2BYTE_CHARCODE 0x01U
+#define PFR_BITMAP_2BYTE_SIZE 0x02U
+#define PFR_BITMAP_3BYTE_OFFSET 0x04U
- } PFR_BitmapFlags;
+ /*not part of the specification but used for implementation */
+#define PFR_BITMAP_CHARCODES_VALIDATED 0x40U
+#define PFR_BITMAP_VALID_CHARCODES 0x80U
typedef struct PFR_BitmapCharRec_
@@ -137,15 +124,11 @@
} PFR_BitmapCharRec, *PFR_BitmapChar;
- typedef enum PFR_StrikeFlags_
- {
- PFR_STRIKE_2BYTE_COUNT = 0x10,
- PFR_STRIKE_3BYTE_OFFSET = 0x08,
- PFR_STRIKE_3BYTE_SIZE = 0x04,
- PFR_STRIKE_2BYTE_YPPM = 0x02,
- PFR_STRIKE_2BYTE_XPPM = 0x01
-
- } PFR_StrikeFlags;
+#define PFR_STRIKE_2BYTE_XPPM 0x01U
+#define PFR_STRIKE_2BYTE_YPPM 0x02U
+#define PFR_STRIKE_3BYTE_SIZE 0x04U
+#define PFR_STRIKE_3BYTE_OFFSET 0x08U
+#define PFR_STRIKE_2BYTE_COUNT 0x10U
typedef struct PFR_StrikeRec_
@@ -266,38 +249,29 @@
} PFR_PhyFontRec, *PFR_PhyFont;
- typedef enum PFR_PhyFlags_
- {
- PFR_PHY_EXTRA_ITEMS = 0x80,
- PFR_PHY_3BYTE_GPS_OFFSET = 0x20,
- PFR_PHY_2BYTE_GPS_SIZE = 0x10,
- PFR_PHY_ASCII_CODE = 0x08,
- PFR_PHY_PROPORTIONAL = 0x04,
- PFR_PHY_2BYTE_CHARCODE = 0x02,
- PFR_PHY_VERTICAL = 0x01
-
- } PFR_PhyFlags;
+#define PFR_PHY_VERTICAL 0x01U
+#define PFR_PHY_2BYTE_CHARCODE 0x02U
+#define PFR_PHY_PROPORTIONAL 0x04U
+#define PFR_PHY_ASCII_CODE 0x08U
+#define PFR_PHY_2BYTE_GPS_SIZE 0x10U
+#define PFR_PHY_3BYTE_GPS_OFFSET 0x20U
+#define PFR_PHY_EXTRA_ITEMS 0x80U
- typedef enum PFR_KernFlags_
- {
- PFR_KERN_2BYTE_CHAR = 0x01,
- PFR_KERN_2BYTE_ADJ = 0x02
-
- } PFR_KernFlags;
+#define PFR_KERN_2BYTE_CHAR 0x01U
+#define PFR_KERN_2BYTE_ADJ 0x02U
/************************************************************************/
- typedef enum PFR_GlyphFlags_
- {
- PFR_GLYPH_IS_COMPOUND = 0x80,
- PFR_GLYPH_EXTRA_ITEMS = 0x08,
- PFR_GLYPH_1BYTE_XYCOUNT = 0x04,
- PFR_GLYPH_XCOUNT = 0x02,
- PFR_GLYPH_YCOUNT = 0x01
+#define PFR_GLYPH_YCOUNT 0x01U
+#define PFR_GLYPH_XCOUNT 0x02U
+#define PFR_GLYPH_1BYTE_XYCOUNT 0x04U
- } PFR_GlyphFlags;
+#define PFR_GLYPH_SINGLE_EXTRA_ITEMS 0x08U
+#define PFR_GLYPH_COMPOUND_EXTRA_ITEMS 0x40U
+
+#define PFR_GLYPH_IS_COMPOUND 0x80U
/* controlled coordinate */
@@ -321,14 +295,10 @@
} PFR_SubGlyphRec, *PFR_SubGlyph;
- typedef enum PFR_SubgGlyphFlags_
- {
- PFR_SUBGLYPH_3BYTE_OFFSET = 0x80,
- PFR_SUBGLYPH_2BYTE_SIZE = 0x40,
- PFR_SUBGLYPH_YSCALE = 0x20,
- PFR_SUBGLYPH_XSCALE = 0x10
-
- } PFR_SubGlyphFlags;
+#define PFR_SUBGLYPH_XSCALE 0x10U
+#define PFR_SUBGLYPH_YSCALE 0x20U
+#define PFR_SUBGLYPH_2BYTE_SIZE 0x40U
+#define PFR_SUBGLYPH_3BYTE_OFFSET 0x80U
typedef struct PFR_GlyphRec_
@@ -356,7 +326,7 @@
FT_END_HEADER
-#endif /* __PFRTYPES_H__ */
+#endif /* PFRTYPES_H_ */
/* END */
diff --git a/src/pfr/rules.mk b/src/pfr/rules.mk
index e665460..3acb795 100644
--- a/src/pfr/rules.mk
+++ b/src/pfr/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/psaux/Jamfile b/src/psaux/Jamfile
index d7c2e6c..a231d59 100644
--- a/src/psaux/Jamfile
+++ b/src/psaux/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/psaux Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,8 +16,22 @@
if $(FT2_MULTI)
{
- _sources = psauxmod psobjs t1decode t1cmap
- psconv afmparse
+ _sources = afmparse
+ psauxmod
+ psconv
+ psobjs
+ t1cmap
+ t1decode
+ cffdecode
+ psarrst
+ psblues
+ pserror
+ psfont
+ psft
+ pshints
+ psintrp
+ psread
+ psstack
;
}
else
diff --git a/src/psaux/afmparse.c b/src/psaux/afmparse.c
index 3ad44ec..0c33d59 100644
--- a/src/psaux/afmparse.c
+++ b/src/psaux/afmparse.c
@@ -4,7 +4,7 @@
/* */
/* AFM parser (body). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,6 +20,8 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#ifndef T1_CONFIG_OPTION_NO_AFM
+
#include "afmparse.h"
#include "psconv.h"
@@ -973,5 +975,12 @@
return error;
}
+#else /* T1_CONFIG_OPTION_NO_AFM */
+
+ /* ANSI C doesn't like empty source files */
+ typedef int _afm_parse_dummy;
+
+#endif /* T1_CONFIG_OPTION_NO_AFM */
+
/* END */
diff --git a/src/psaux/afmparse.h b/src/psaux/afmparse.h
index f922c4e..86f852a 100644
--- a/src/psaux/afmparse.h
+++ b/src/psaux/afmparse.h
@@ -4,7 +4,7 @@
/* */
/* AFM parser (specification). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __AFMPARSE_H__
-#define __AFMPARSE_H__
+#ifndef AFMPARSE_H_
+#define AFMPARSE_H_
#include <ft2build.h>
@@ -83,7 +83,7 @@
FT_END_HEADER
-#endif /* __AFMPARSE_H__ */
+#endif /* AFMPARSE_H_ */
/* END */
diff --git a/src/psaux/cffdecode.c b/src/psaux/cffdecode.c
new file mode 100644
index 0000000..80d622c
--- /dev/null
+++ b/src/psaux/cffdecode.c
@@ -0,0 +1,2370 @@
+/***************************************************************************/
+/* */
+/* cffdecode.c */
+/* */
+/* PostScript CFF (Type 2) decoding routines (body). */
+/* */
+/* Copyright 2017-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_SERVICE_H
+#include FT_SERVICE_CFF_TABLE_LOAD_H
+
+#include "cffdecode.h"
+#include "psobjs.h"
+
+#include "psauxerr.h"
+
+
+ /*************************************************************************/
+ /* */
+ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
+ /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
+ /* messages during execution. */
+ /* */
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_cffdecode
+
+
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+
+ typedef enum CFF_Operator_
+ {
+ cff_op_unknown = 0,
+
+ cff_op_rmoveto,
+ cff_op_hmoveto,
+ cff_op_vmoveto,
+
+ cff_op_rlineto,
+ cff_op_hlineto,
+ cff_op_vlineto,
+
+ cff_op_rrcurveto,
+ cff_op_hhcurveto,
+ cff_op_hvcurveto,
+ cff_op_rcurveline,
+ cff_op_rlinecurve,
+ cff_op_vhcurveto,
+ cff_op_vvcurveto,
+
+ cff_op_flex,
+ cff_op_hflex,
+ cff_op_hflex1,
+ cff_op_flex1,
+
+ cff_op_endchar,
+
+ cff_op_hstem,
+ cff_op_vstem,
+ cff_op_hstemhm,
+ cff_op_vstemhm,
+
+ cff_op_hintmask,
+ cff_op_cntrmask,
+ cff_op_dotsection, /* deprecated, acts as no-op */
+
+ cff_op_abs,
+ cff_op_add,
+ cff_op_sub,
+ cff_op_div,
+ cff_op_neg,
+ cff_op_random,
+ cff_op_mul,
+ cff_op_sqrt,
+
+ cff_op_blend,
+
+ cff_op_drop,
+ cff_op_exch,
+ cff_op_index,
+ cff_op_roll,
+ cff_op_dup,
+
+ cff_op_put,
+ cff_op_get,
+ cff_op_store,
+ cff_op_load,
+
+ cff_op_and,
+ cff_op_or,
+ cff_op_not,
+ cff_op_eq,
+ cff_op_ifelse,
+
+ cff_op_callsubr,
+ cff_op_callgsubr,
+ cff_op_return,
+
+ /* Type 1 opcodes: invalid but seen in real life */
+ cff_op_hsbw,
+ cff_op_closepath,
+ cff_op_callothersubr,
+ cff_op_pop,
+ cff_op_seac,
+ cff_op_sbw,
+ cff_op_setcurrentpoint,
+
+ /* do not remove */
+ cff_op_max
+
+ } CFF_Operator;
+
+
+#define CFF_COUNT_CHECK_WIDTH 0x80
+#define CFF_COUNT_EXACT 0x40
+#define CFF_COUNT_CLEAR_STACK 0x20
+
+ /* count values which have the `CFF_COUNT_CHECK_WIDTH' flag set are */
+ /* used for checking the width and requested numbers of arguments */
+ /* only; they are set to zero afterwards */
+
+ /* the other two flags are informative only and unused currently */
+
+ static const FT_Byte cff_argument_counts[] =
+ {
+ 0, /* unknown */
+
+ 2 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT, /* rmoveto */
+ 1 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT,
+ 1 | CFF_COUNT_CHECK_WIDTH | CFF_COUNT_EXACT,
+
+ 0 | CFF_COUNT_CLEAR_STACK, /* rlineto */
+ 0 | CFF_COUNT_CLEAR_STACK,
+ 0 | CFF_COUNT_CLEAR_STACK,
+
+ 0 | CFF_COUNT_CLEAR_STACK, /* rrcurveto */
+ 0 | CFF_COUNT_CLEAR_STACK,
+ 0 | CFF_COUNT_CLEAR_STACK,
+ 0 | CFF_COUNT_CLEAR_STACK,
+ 0 | CFF_COUNT_CLEAR_STACK,
+ 0 | CFF_COUNT_CLEAR_STACK,
+ 0 | CFF_COUNT_CLEAR_STACK,
+
+ 13, /* flex */
+ 7,
+ 9,
+ 11,
+
+ 0 | CFF_COUNT_CHECK_WIDTH, /* endchar */
+
+ 2 | CFF_COUNT_CHECK_WIDTH, /* hstem */
+ 2 | CFF_COUNT_CHECK_WIDTH,
+ 2 | CFF_COUNT_CHECK_WIDTH,
+ 2 | CFF_COUNT_CHECK_WIDTH,
+
+ 0 | CFF_COUNT_CHECK_WIDTH, /* hintmask */
+ 0 | CFF_COUNT_CHECK_WIDTH, /* cntrmask */
+ 0, /* dotsection */
+
+ 1, /* abs */
+ 2,
+ 2,
+ 2,
+ 1,
+ 0,
+ 2,
+ 1,
+
+ 1, /* blend */
+
+ 1, /* drop */
+ 2,
+ 1,
+ 2,
+ 1,
+
+ 2, /* put */
+ 1,
+ 4,
+ 3,
+
+ 2, /* and */
+ 2,
+ 1,
+ 2,
+ 4,
+
+ 1, /* callsubr */
+ 1,
+ 0,
+
+ 2, /* hsbw */
+ 0,
+ 0,
+ 0,
+ 5, /* seac */
+ 4, /* sbw */
+ 2 /* setcurrentpoint */
+ };
+
+
+ static FT_Error
+ cff_operator_seac( CFF_Decoder* decoder,
+ FT_Pos asb,
+ FT_Pos adx,
+ FT_Pos ady,
+ FT_Int bchar,
+ FT_Int achar )
+ {
+ FT_Error error;
+ CFF_Builder* builder = &decoder->builder;
+ FT_Int bchar_index, achar_index;
+ TT_Face face = decoder->builder.face;
+ FT_Vector left_bearing, advance;
+ FT_Byte* charstring;
+ FT_ULong charstring_len;
+ FT_Pos glyph_width;
+
+
+ if ( decoder->seac )
+ {
+ FT_ERROR(( "cff_operator_seac: invalid nested seac\n" ));
+ return FT_THROW( Syntax_Error );
+ }
+
+ adx += decoder->builder.left_bearing.x;
+ ady += decoder->builder.left_bearing.y;
+
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+ /* Incremental fonts don't necessarily have valid charsets. */
+ /* They use the character code, not the glyph index, in this case. */
+ if ( face->root.internal->incremental_interface )
+ {
+ bchar_index = bchar;
+ achar_index = achar;
+ }
+ else
+#endif /* FT_CONFIG_OPTION_INCREMENTAL */
+ {
+ CFF_Font cff = (CFF_Font)(face->extra.data);
+
+
+ bchar_index = cff_lookup_glyph_by_stdcharcode( cff, bchar );
+ achar_index = cff_lookup_glyph_by_stdcharcode( cff, achar );
+ }
+
+ if ( bchar_index < 0 || achar_index < 0 )
+ {
+ FT_ERROR(( "cff_operator_seac:"
+ " invalid seac character code arguments\n" ));
+ return FT_THROW( Syntax_Error );
+ }
+
+ /* If we are trying to load a composite glyph, do not load the */
+ /* accent character and return the array of subglyphs. */
+ if ( builder->no_recurse )
+ {
+ FT_GlyphSlot glyph = (FT_GlyphSlot)builder->glyph;
+ FT_GlyphLoader loader = glyph->internal->loader;
+ FT_SubGlyph subg;
+
+
+ /* reallocate subglyph array if necessary */
+ error = FT_GlyphLoader_CheckSubGlyphs( loader, 2 );
+ if ( error )
+ goto Exit;
+
+ subg = loader->current.subglyphs;
+
+ /* subglyph 0 = base character */
+ subg->index = bchar_index;
+ subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES |
+ FT_SUBGLYPH_FLAG_USE_MY_METRICS;
+ subg->arg1 = 0;
+ subg->arg2 = 0;
+ subg++;
+
+ /* subglyph 1 = accent character */
+ subg->index = achar_index;
+ subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES;
+ subg->arg1 = (FT_Int)( adx >> 16 );
+ subg->arg2 = (FT_Int)( ady >> 16 );
+
+ /* set up remaining glyph fields */
+ glyph->num_subglyphs = 2;
+ glyph->subglyphs = loader->base.subglyphs;
+ glyph->format = FT_GLYPH_FORMAT_COMPOSITE;
+
+ loader->current.num_subglyphs = 2;
+ }
+
+ FT_GlyphLoader_Prepare( builder->loader );
+
+ /* First load `bchar' in builder */
+ error = decoder->get_glyph_callback( face, (FT_UInt)bchar_index,
+ &charstring, &charstring_len );
+ if ( !error )
+ {
+ /* the seac operator must not be nested */
+ decoder->seac = TRUE;
+ error = cff_decoder_parse_charstrings( decoder, charstring,
+ charstring_len, 0 );
+ decoder->seac = FALSE;
+
+ decoder->free_glyph_callback( face, &charstring, charstring_len );
+
+ if ( error )
+ goto Exit;
+ }
+
+ /* Save the left bearing, advance and glyph width of the base */
+ /* character as they will be erased by the next load. */
+
+ left_bearing = builder->left_bearing;
+ advance = builder->advance;
+ glyph_width = decoder->glyph_width;
+
+ builder->left_bearing.x = 0;
+ builder->left_bearing.y = 0;
+
+ builder->pos_x = adx - asb;
+ builder->pos_y = ady;
+
+ /* Now load `achar' on top of the base outline. */
+ error = decoder->get_glyph_callback( face, (FT_UInt)achar_index,
+ &charstring, &charstring_len );
+ if ( !error )
+ {
+ /* the seac operator must not be nested */
+ decoder->seac = TRUE;
+ error = cff_decoder_parse_charstrings( decoder, charstring,
+ charstring_len, 0 );
+ decoder->seac = FALSE;
+
+ decoder->free_glyph_callback( face, &charstring, charstring_len );
+
+ if ( error )
+ goto Exit;
+ }
+
+ /* Restore the left side bearing, advance and glyph width */
+ /* of the base character. */
+ builder->left_bearing = left_bearing;
+ builder->advance = advance;
+ decoder->glyph_width = glyph_width;
+
+ builder->pos_x = 0;
+ builder->pos_y = 0;
+
+ Exit:
+ return error;
+ }
+
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /********** *********/
+ /********** *********/
+ /********** GENERIC CHARSTRING PARSING *********/
+ /********** *********/
+ /********** *********/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* cff_compute_bias */
+ /* */
+ /* <Description> */
+ /* Computes the bias value in dependence of the number of glyph */
+ /* subroutines. */
+ /* */
+ /* <Input> */
+ /* in_charstring_type :: The `CharstringType' value of the top DICT */
+ /* dictionary. */
+ /* */
+ /* num_subrs :: The number of glyph subroutines. */
+ /* */
+ /* <Return> */
+ /* The bias value. */
+ static FT_Int
+ cff_compute_bias( FT_Int in_charstring_type,
+ FT_UInt num_subrs )
+ {
+ FT_Int result;
+
+
+ if ( in_charstring_type == 1 )
+ result = 0;
+ else if ( num_subrs < 1240 )
+ result = 107;
+ else if ( num_subrs < 33900U )
+ result = 1131;
+ else
+ result = 32768U;
+
+ return result;
+ }
+
+
+ FT_LOCAL_DEF( FT_Int )
+ cff_lookup_glyph_by_stdcharcode( CFF_Font cff,
+ FT_Int charcode )
+ {
+ FT_UInt n;
+ FT_UShort glyph_sid;
+
+ FT_Service_CFFLoad cffload;
+
+
+ /* CID-keyed fonts don't have glyph names */
+ if ( !cff->charset.sids )
+ return -1;
+
+ /* check range of standard char code */
+ if ( charcode < 0 || charcode > 255 )
+ return -1;
+
+#if 0
+ /* retrieve cffload from list of current modules */
+ FT_Service_CFFLoad cffload;
+
+
+ FT_FACE_FIND_GLOBAL_SERVICE( face, cffload, CFF_LOAD );
+ if ( !cffload )
+ {
+ FT_ERROR(( "cff_lookup_glyph_by_stdcharcode:"
+ " the `cffload' module is not available\n" ));
+ return FT_THROW( Unimplemented_Feature );
+ }
+#endif
+
+ cffload = (FT_Service_CFFLoad)cff->cffload;
+
+ /* Get code to SID mapping from `cff_standard_encoding'. */
+ glyph_sid = cffload->get_standard_encoding( (FT_UInt)charcode );
+
+ for ( n = 0; n < cff->num_glyphs; n++ )
+ {
+ if ( cff->charset.sids[n] == glyph_sid )
+ return (FT_Int)n;
+ }
+
+ return -1;
+ }
+
+
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* cff_decoder_parse_charstrings */
+ /* */
+ /* <Description> */
+ /* Parses a given Type 2 charstrings program. */
+ /* */
+ /* <InOut> */
+ /* decoder :: The current Type 1 decoder. */
+ /* */
+ /* <Input> */
+ /* charstring_base :: The base of the charstring stream. */
+ /* */
+ /* charstring_len :: The length in bytes of the charstring stream. */
+ /* */
+ /* in_dict :: Set to 1 if function is called from top or */
+ /* private DICT (needed for Multiple Master CFFs). */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_LOCAL_DEF( FT_Error )
+ cff_decoder_parse_charstrings( CFF_Decoder* decoder,
+ FT_Byte* charstring_base,
+ FT_ULong charstring_len,
+ FT_Bool in_dict )
+ {
+ FT_Error error;
+ CFF_Decoder_Zone* zone;
+ FT_Byte* ip;
+ FT_Byte* limit;
+ CFF_Builder* builder = &decoder->builder;
+ FT_Pos x, y;
+ FT_Fixed* stack;
+ FT_Int charstring_type =
+ decoder->cff->top_font.font_dict.charstring_type;
+ FT_UShort num_designs =
+ decoder->cff->top_font.font_dict.num_designs;
+ FT_UShort num_axes =
+ decoder->cff->top_font.font_dict.num_axes;
+
+ T2_Hints_Funcs hinter;
+
+
+ /* set default width */
+ decoder->num_hints = 0;
+ decoder->read_width = 1;
+
+ /* initialize the decoder */
+ decoder->top = decoder->stack;
+ decoder->zone = decoder->zones;
+ zone = decoder->zones;
+ stack = decoder->top;
+
+ hinter = (T2_Hints_Funcs)builder->hints_funcs;
+
+ builder->path_begun = 0;
+
+ zone->base = charstring_base;
+ limit = zone->limit = charstring_base + charstring_len;
+ ip = zone->cursor = zone->base;
+
+ error = FT_Err_Ok;
+
+ x = builder->pos_x;
+ y = builder->pos_y;
+
+ /* begin hints recording session, if any */
+ if ( hinter )
+ hinter->open( hinter->hints );
+
+ /* now execute loop */
+ while ( ip < limit )
+ {
+ CFF_Operator op;
+ FT_Byte v;
+
+
+ /********************************************************************/
+ /* */
+ /* Decode operator or operand */
+ /* */
+ v = *ip++;
+ if ( v >= 32 || v == 28 )
+ {
+ FT_Int shift = 16;
+ FT_Int32 val;
+
+
+ /* this is an operand, push it on the stack */
+
+ /* if we use shifts, all computations are done with unsigned */
+ /* values; the conversion to a signed value is the last step */
+ if ( v == 28 )
+ {
+ if ( ip + 1 >= limit )
+ goto Syntax_Error;
+ val = (FT_Short)( ( (FT_UShort)ip[0] << 8 ) | ip[1] );
+ ip += 2;
+ }
+ else if ( v < 247 )
+ val = (FT_Int32)v - 139;
+ else if ( v < 251 )
+ {
+ if ( ip >= limit )
+ goto Syntax_Error;
+ val = ( (FT_Int32)v - 247 ) * 256 + *ip++ + 108;
+ }
+ else if ( v < 255 )
+ {
+ if ( ip >= limit )
+ goto Syntax_Error;
+ val = -( (FT_Int32)v - 251 ) * 256 - *ip++ - 108;
+ }
+ else
+ {
+ if ( ip + 3 >= limit )
+ goto Syntax_Error;
+ val = (FT_Int32)( ( (FT_UInt32)ip[0] << 24 ) |
+ ( (FT_UInt32)ip[1] << 16 ) |
+ ( (FT_UInt32)ip[2] << 8 ) |
+ (FT_UInt32)ip[3] );
+ ip += 4;
+ if ( charstring_type == 2 )
+ shift = 0;
+ }
+ if ( decoder->top - stack >= CFF_MAX_OPERANDS )
+ goto Stack_Overflow;
+
+ val = (FT_Int32)( (FT_UInt32)val << shift );
+ *decoder->top++ = val;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( !( val & 0xFFFFL ) )
+ FT_TRACE4(( " %hd", (FT_Short)( (FT_UInt32)val >> 16 ) ));
+ else
+ FT_TRACE4(( " %.5f", val / 65536.0 ));
+#endif
+
+ }
+ else
+ {
+ /* The specification says that normally arguments are to be taken */
+ /* from the bottom of the stack. However, this seems not to be */
+ /* correct, at least for Acroread 7.0.8 on GNU/Linux: It pops the */
+ /* arguments similar to a PS interpreter. */
+
+ FT_Fixed* args = decoder->top;
+ FT_Int num_args = (FT_Int)( args - decoder->stack );
+ FT_Int req_args;
+
+
+ /* find operator */
+ op = cff_op_unknown;
+
+ switch ( v )
+ {
+ case 1:
+ op = cff_op_hstem;
+ break;
+ case 3:
+ op = cff_op_vstem;
+ break;
+ case 4:
+ op = cff_op_vmoveto;
+ break;
+ case 5:
+ op = cff_op_rlineto;
+ break;
+ case 6:
+ op = cff_op_hlineto;
+ break;
+ case 7:
+ op = cff_op_vlineto;
+ break;
+ case 8:
+ op = cff_op_rrcurveto;
+ break;
+ case 9:
+ op = cff_op_closepath;
+ break;
+ case 10:
+ op = cff_op_callsubr;
+ break;
+ case 11:
+ op = cff_op_return;
+ break;
+ case 12:
+ if ( ip >= limit )
+ goto Syntax_Error;
+ v = *ip++;
+
+ switch ( v )
+ {
+ case 0:
+ op = cff_op_dotsection;
+ break;
+ case 1: /* this is actually the Type1 vstem3 operator */
+ op = cff_op_vstem;
+ break;
+ case 2: /* this is actually the Type1 hstem3 operator */
+ op = cff_op_hstem;
+ break;
+ case 3:
+ op = cff_op_and;
+ break;
+ case 4:
+ op = cff_op_or;
+ break;
+ case 5:
+ op = cff_op_not;
+ break;
+ case 6:
+ op = cff_op_seac;
+ break;
+ case 7:
+ op = cff_op_sbw;
+ break;
+ case 8:
+ op = cff_op_store;
+ break;
+ case 9:
+ op = cff_op_abs;
+ break;
+ case 10:
+ op = cff_op_add;
+ break;
+ case 11:
+ op = cff_op_sub;
+ break;
+ case 12:
+ op = cff_op_div;
+ break;
+ case 13:
+ op = cff_op_load;
+ break;
+ case 14:
+ op = cff_op_neg;
+ break;
+ case 15:
+ op = cff_op_eq;
+ break;
+ case 16:
+ op = cff_op_callothersubr;
+ break;
+ case 17:
+ op = cff_op_pop;
+ break;
+ case 18:
+ op = cff_op_drop;
+ break;
+ case 20:
+ op = cff_op_put;
+ break;
+ case 21:
+ op = cff_op_get;
+ break;
+ case 22:
+ op = cff_op_ifelse;
+ break;
+ case 23:
+ op = cff_op_random;
+ break;
+ case 24:
+ op = cff_op_mul;
+ break;
+ case 26:
+ op = cff_op_sqrt;
+ break;
+ case 27:
+ op = cff_op_dup;
+ break;
+ case 28:
+ op = cff_op_exch;
+ break;
+ case 29:
+ op = cff_op_index;
+ break;
+ case 30:
+ op = cff_op_roll;
+ break;
+ case 33:
+ op = cff_op_setcurrentpoint;
+ break;
+ case 34:
+ op = cff_op_hflex;
+ break;
+ case 35:
+ op = cff_op_flex;
+ break;
+ case 36:
+ op = cff_op_hflex1;
+ break;
+ case 37:
+ op = cff_op_flex1;
+ break;
+ default:
+ FT_TRACE4(( " unknown op (12, %d)\n", v ));
+ break;
+ }
+ break;
+ case 13:
+ op = cff_op_hsbw;
+ break;
+ case 14:
+ op = cff_op_endchar;
+ break;
+ case 16:
+ op = cff_op_blend;
+ break;
+ case 18:
+ op = cff_op_hstemhm;
+ break;
+ case 19:
+ op = cff_op_hintmask;
+ break;
+ case 20:
+ op = cff_op_cntrmask;
+ break;
+ case 21:
+ op = cff_op_rmoveto;
+ break;
+ case 22:
+ op = cff_op_hmoveto;
+ break;
+ case 23:
+ op = cff_op_vstemhm;
+ break;
+ case 24:
+ op = cff_op_rcurveline;
+ break;
+ case 25:
+ op = cff_op_rlinecurve;
+ break;
+ case 26:
+ op = cff_op_vvcurveto;
+ break;
+ case 27:
+ op = cff_op_hhcurveto;
+ break;
+ case 29:
+ op = cff_op_callgsubr;
+ break;
+ case 30:
+ op = cff_op_vhcurveto;
+ break;
+ case 31:
+ op = cff_op_hvcurveto;
+ break;
+ default:
+ FT_TRACE4(( " unknown op (%d)\n", v ));
+ break;
+ }
+
+ if ( op == cff_op_unknown )
+ continue;
+
+ /* in Multiple Master CFFs, T2 charstrings can appear in */
+ /* dictionaries, but some operators are prohibited */
+ if ( in_dict )
+ {
+ switch ( op )
+ {
+ case cff_op_hstem:
+ case cff_op_vstem:
+ case cff_op_vmoveto:
+ case cff_op_rlineto:
+ case cff_op_hlineto:
+ case cff_op_vlineto:
+ case cff_op_rrcurveto:
+ case cff_op_hstemhm:
+ case cff_op_hintmask:
+ case cff_op_cntrmask:
+ case cff_op_rmoveto:
+ case cff_op_hmoveto:
+ case cff_op_vstemhm:
+ case cff_op_rcurveline:
+ case cff_op_rlinecurve:
+ case cff_op_vvcurveto:
+ case cff_op_hhcurveto:
+ case cff_op_vhcurveto:
+ case cff_op_hvcurveto:
+ case cff_op_hflex:
+ case cff_op_flex:
+ case cff_op_hflex1:
+ case cff_op_flex1:
+ case cff_op_callsubr:
+ case cff_op_callgsubr:
+ goto MM_Error;
+
+ default:
+ break;
+ }
+ }
+
+ /* check arguments */
+ req_args = cff_argument_counts[op];
+ if ( req_args & CFF_COUNT_CHECK_WIDTH )
+ {
+ if ( num_args > 0 && decoder->read_width )
+ {
+ /* If `nominal_width' is non-zero, the number is really a */
+ /* difference against `nominal_width'. Else, the number here */
+ /* is truly a width, not a difference against `nominal_width'. */
+ /* If the font does not set `nominal_width', then */
+ /* `nominal_width' defaults to zero, and so we can set */
+ /* `glyph_width' to `nominal_width' plus number on the stack */
+ /* -- for either case. */
+
+ FT_Int set_width_ok;
+
+
+ switch ( op )
+ {
+ case cff_op_hmoveto:
+ case cff_op_vmoveto:
+ set_width_ok = num_args & 2;
+ break;
+
+ case cff_op_hstem:
+ case cff_op_vstem:
+ case cff_op_hstemhm:
+ case cff_op_vstemhm:
+ case cff_op_rmoveto:
+ case cff_op_hintmask:
+ case cff_op_cntrmask:
+ set_width_ok = num_args & 1;
+ break;
+
+ case cff_op_endchar:
+ /* If there is a width specified for endchar, we either have */
+ /* 1 argument or 5 arguments. We like to argue. */
+ set_width_ok = in_dict
+ ? 0
+ : ( ( num_args == 5 ) || ( num_args == 1 ) );
+ break;
+
+ default:
+ set_width_ok = 0;
+ break;
+ }
+
+ if ( set_width_ok )
+ {
+ decoder->glyph_width = decoder->nominal_width +
+ ( stack[0] >> 16 );
+
+ if ( decoder->width_only )
+ {
+ /* we only want the advance width; stop here */
+ break;
+ }
+
+ /* Consumed an argument. */
+ num_args--;
+ }
+ }
+
+ decoder->read_width = 0;
+ req_args = 0;
+ }
+
+ req_args &= 0x000F;
+ if ( num_args < req_args )
+ goto Stack_Underflow;
+ args -= req_args;
+ num_args -= req_args;
+
+ /* At this point, `args' points to the first argument of the */
+ /* operand in case `req_args' isn't zero. Otherwise, we have */
+ /* to adjust `args' manually. */
+
+ /* Note that we only pop arguments from the stack which we */
+ /* really need and can digest so that we can continue in case */
+ /* of superfluous stack elements. */
+
+ switch ( op )
+ {
+ case cff_op_hstem:
+ case cff_op_vstem:
+ case cff_op_hstemhm:
+ case cff_op_vstemhm:
+ /* the number of arguments is always even here */
+ FT_TRACE4((
+ op == cff_op_hstem ? " hstem\n" :
+ ( op == cff_op_vstem ? " vstem\n" :
+ ( op == cff_op_hstemhm ? " hstemhm\n" : " vstemhm\n" ) ) ));
+
+ if ( hinter )
+ hinter->stems( hinter->hints,
+ ( op == cff_op_hstem || op == cff_op_hstemhm ),
+ num_args / 2,
+ args - ( num_args & ~1 ) );
+
+ decoder->num_hints += num_args / 2;
+ args = stack;
+ break;
+
+ case cff_op_hintmask:
+ case cff_op_cntrmask:
+ FT_TRACE4(( op == cff_op_hintmask ? " hintmask" : " cntrmask" ));
+
+ /* implement vstem when needed -- */
+ /* the specification doesn't say it, but this also works */
+ /* with the 'cntrmask' operator */
+ /* */
+ if ( num_args > 0 )
+ {
+ if ( hinter )
+ hinter->stems( hinter->hints,
+ 0,
+ num_args / 2,
+ args - ( num_args & ~1 ) );
+
+ decoder->num_hints += num_args / 2;
+ }
+
+ /* In a valid charstring there must be at least one byte */
+ /* after `hintmask' or `cntrmask' (e.g., for a `return' */
+ /* instruction). Additionally, there must be space for */
+ /* `num_hints' bits. */
+
+ if ( ( ip + ( ( decoder->num_hints + 7 ) >> 3 ) ) >= limit )
+ goto Syntax_Error;
+
+ if ( hinter )
+ {
+ if ( op == cff_op_hintmask )
+ hinter->hintmask( hinter->hints,
+ (FT_UInt)builder->current->n_points,
+ (FT_UInt)decoder->num_hints,
+ ip );
+ else
+ hinter->counter( hinter->hints,
+ (FT_UInt)decoder->num_hints,
+ ip );
+ }
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ FT_UInt maskbyte;
+
+
+ FT_TRACE4(( " (maskbytes:" ));
+
+ for ( maskbyte = 0;
+ maskbyte < (FT_UInt)( ( decoder->num_hints + 7 ) >> 3 );
+ maskbyte++, ip++ )
+ FT_TRACE4(( " 0x%02X", *ip ));
+
+ FT_TRACE4(( ")\n" ));
+ }
+#else
+ ip += ( decoder->num_hints + 7 ) >> 3;
+#endif
+ args = stack;
+ break;
+
+ case cff_op_rmoveto:
+ FT_TRACE4(( " rmoveto\n" ));
+
+ cff_builder_close_contour( builder );
+ builder->path_begun = 0;
+ x = ADD_LONG( x, args[-2] );
+ y = ADD_LONG( y, args[-1] );
+ args = stack;
+ break;
+
+ case cff_op_vmoveto:
+ FT_TRACE4(( " vmoveto\n" ));
+
+ cff_builder_close_contour( builder );
+ builder->path_begun = 0;
+ y = ADD_LONG( y, args[-1] );
+ args = stack;
+ break;
+
+ case cff_op_hmoveto:
+ FT_TRACE4(( " hmoveto\n" ));
+
+ cff_builder_close_contour( builder );
+ builder->path_begun = 0;
+ x = ADD_LONG( x, args[-1] );
+ args = stack;
+ break;
+
+ case cff_op_rlineto:
+ FT_TRACE4(( " rlineto\n" ));
+
+ if ( cff_builder_start_point( builder, x, y ) ||
+ cff_check_points( builder, num_args / 2 ) )
+ goto Fail;
+
+ if ( num_args < 2 )
+ goto Stack_Underflow;
+
+ args -= num_args & ~1;
+ while ( args < decoder->top )
+ {
+ x = ADD_LONG( x, args[0] );
+ y = ADD_LONG( y, args[1] );
+ cff_builder_add_point( builder, x, y, 1 );
+ args += 2;
+ }
+ args = stack;
+ break;
+
+ case cff_op_hlineto:
+ case cff_op_vlineto:
+ {
+ FT_Int phase = ( op == cff_op_hlineto );
+
+
+ FT_TRACE4(( op == cff_op_hlineto ? " hlineto\n"
+ : " vlineto\n" ));
+
+ if ( num_args < 0 )
+ goto Stack_Underflow;
+
+ /* there exist subsetted fonts (found in PDFs) */
+ /* which call `hlineto' without arguments */
+ if ( num_args == 0 )
+ break;
+
+ if ( cff_builder_start_point( builder, x, y ) ||
+ cff_check_points( builder, num_args ) )
+ goto Fail;
+
+ args = stack;
+ while ( args < decoder->top )
+ {
+ if ( phase )
+ x = ADD_LONG( x, args[0] );
+ else
+ y = ADD_LONG( y, args[0] );
+
+ if ( cff_builder_add_point1( builder, x, y ) )
+ goto Fail;
+
+ args++;
+ phase ^= 1;
+ }
+ args = stack;
+ }
+ break;
+
+ case cff_op_rrcurveto:
+ {
+ FT_Int nargs;
+
+
+ FT_TRACE4(( " rrcurveto\n" ));
+
+ if ( num_args < 6 )
+ goto Stack_Underflow;
+
+ nargs = num_args - num_args % 6;
+
+ if ( cff_builder_start_point( builder, x, y ) ||
+ cff_check_points( builder, nargs / 2 ) )
+ goto Fail;
+
+ args -= nargs;
+ while ( args < decoder->top )
+ {
+ x = ADD_LONG( x, args[0] );
+ y = ADD_LONG( y, args[1] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[2] );
+ y = ADD_LONG( y, args[3] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[4] );
+ y = ADD_LONG( y, args[5] );
+ cff_builder_add_point( builder, x, y, 1 );
+
+ args += 6;
+ }
+ args = stack;
+ }
+ break;
+
+ case cff_op_vvcurveto:
+ {
+ FT_Int nargs;
+
+
+ FT_TRACE4(( " vvcurveto\n" ));
+
+ if ( num_args < 4 )
+ goto Stack_Underflow;
+
+ /* if num_args isn't of the form 4n or 4n+1, */
+ /* we enforce it by clearing the second bit */
+
+ nargs = num_args & ~2;
+
+ if ( cff_builder_start_point( builder, x, y ) )
+ goto Fail;
+
+ args -= nargs;
+
+ if ( nargs & 1 )
+ {
+ x = ADD_LONG( x, args[0] );
+ args++;
+ nargs--;
+ }
+
+ if ( cff_check_points( builder, 3 * ( nargs / 4 ) ) )
+ goto Fail;
+
+ while ( args < decoder->top )
+ {
+ y = ADD_LONG( y, args[0] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[1] );
+ y = ADD_LONG( y, args[2] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ y = ADD_LONG( y, args[3] );
+ cff_builder_add_point( builder, x, y, 1 );
+
+ args += 4;
+ }
+ args = stack;
+ }
+ break;
+
+ case cff_op_hhcurveto:
+ {
+ FT_Int nargs;
+
+
+ FT_TRACE4(( " hhcurveto\n" ));
+
+ if ( num_args < 4 )
+ goto Stack_Underflow;
+
+ /* if num_args isn't of the form 4n or 4n+1, */
+ /* we enforce it by clearing the second bit */
+
+ nargs = num_args & ~2;
+
+ if ( cff_builder_start_point( builder, x, y ) )
+ goto Fail;
+
+ args -= nargs;
+ if ( nargs & 1 )
+ {
+ y = ADD_LONG( y, args[0] );
+ args++;
+ nargs--;
+ }
+
+ if ( cff_check_points( builder, 3 * ( nargs / 4 ) ) )
+ goto Fail;
+
+ while ( args < decoder->top )
+ {
+ x = ADD_LONG( x, args[0] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[1] );
+ y = ADD_LONG( y, args[2] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[3] );
+ cff_builder_add_point( builder, x, y, 1 );
+
+ args += 4;
+ }
+ args = stack;
+ }
+ break;
+
+ case cff_op_vhcurveto:
+ case cff_op_hvcurveto:
+ {
+ FT_Int phase;
+ FT_Int nargs;
+
+
+ FT_TRACE4(( op == cff_op_vhcurveto ? " vhcurveto\n"
+ : " hvcurveto\n" ));
+
+ if ( cff_builder_start_point( builder, x, y ) )
+ goto Fail;
+
+ if ( num_args < 4 )
+ goto Stack_Underflow;
+
+ /* if num_args isn't of the form 8n, 8n+1, 8n+4, or 8n+5, */
+ /* we enforce it by clearing the second bit */
+
+ nargs = num_args & ~2;
+
+ args -= nargs;
+ if ( cff_check_points( builder, ( nargs / 4 ) * 3 ) )
+ goto Stack_Underflow;
+
+ phase = ( op == cff_op_hvcurveto );
+
+ while ( nargs >= 4 )
+ {
+ nargs -= 4;
+ if ( phase )
+ {
+ x = ADD_LONG( x, args[0] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[1] );
+ y = ADD_LONG( y, args[2] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ y = ADD_LONG( y, args[3] );
+ if ( nargs == 1 )
+ x = ADD_LONG( x, args[4] );
+ cff_builder_add_point( builder, x, y, 1 );
+ }
+ else
+ {
+ y = ADD_LONG( y, args[0] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[1] );
+ y = ADD_LONG( y, args[2] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[3] );
+ if ( nargs == 1 )
+ y = ADD_LONG( y, args[4] );
+ cff_builder_add_point( builder, x, y, 1 );
+ }
+ args += 4;
+ phase ^= 1;
+ }
+ args = stack;
+ }
+ break;
+
+ case cff_op_rlinecurve:
+ {
+ FT_Int num_lines;
+ FT_Int nargs;
+
+
+ FT_TRACE4(( " rlinecurve\n" ));
+
+ if ( num_args < 8 )
+ goto Stack_Underflow;
+
+ nargs = num_args & ~1;
+ num_lines = ( nargs - 6 ) / 2;
+
+ if ( cff_builder_start_point( builder, x, y ) ||
+ cff_check_points( builder, num_lines + 3 ) )
+ goto Fail;
+
+ args -= nargs;
+
+ /* first, add the line segments */
+ while ( num_lines > 0 )
+ {
+ x = ADD_LONG( x, args[0] );
+ y = ADD_LONG( y, args[1] );
+ cff_builder_add_point( builder, x, y, 1 );
+
+ args += 2;
+ num_lines--;
+ }
+
+ /* then the curve */
+ x = ADD_LONG( x, args[0] );
+ y = ADD_LONG( y, args[1] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[2] );
+ y = ADD_LONG( y, args[3] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[4] );
+ y = ADD_LONG( y, args[5] );
+ cff_builder_add_point( builder, x, y, 1 );
+
+ args = stack;
+ }
+ break;
+
+ case cff_op_rcurveline:
+ {
+ FT_Int num_curves;
+ FT_Int nargs;
+
+
+ FT_TRACE4(( " rcurveline\n" ));
+
+ if ( num_args < 8 )
+ goto Stack_Underflow;
+
+ nargs = num_args - 2;
+ nargs = nargs - nargs % 6 + 2;
+ num_curves = ( nargs - 2 ) / 6;
+
+ if ( cff_builder_start_point( builder, x, y ) ||
+ cff_check_points( builder, num_curves * 3 + 2 ) )
+ goto Fail;
+
+ args -= nargs;
+
+ /* first, add the curves */
+ while ( num_curves > 0 )
+ {
+ x = ADD_LONG( x, args[0] );
+ y = ADD_LONG( y, args[1] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[2] );
+ y = ADD_LONG( y, args[3] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ x = ADD_LONG( x, args[4] );
+ y = ADD_LONG( y, args[5] );
+ cff_builder_add_point( builder, x, y, 1 );
+
+ args += 6;
+ num_curves--;
+ }
+
+ /* then the final line */
+ x = ADD_LONG( x, args[0] );
+ y = ADD_LONG( y, args[1] );
+ cff_builder_add_point( builder, x, y, 1 );
+
+ args = stack;
+ }
+ break;
+
+ case cff_op_hflex1:
+ {
+ FT_Pos start_y;
+
+
+ FT_TRACE4(( " hflex1\n" ));
+
+ /* adding five more points: 4 control points, 1 on-curve point */
+ /* -- make sure we have enough space for the start point if it */
+ /* needs to be added */
+ if ( cff_builder_start_point( builder, x, y ) ||
+ cff_check_points( builder, 6 ) )
+ goto Fail;
+
+ /* record the starting point's y position for later use */
+ start_y = y;
+
+ /* first control point */
+ x = ADD_LONG( x, args[0] );
+ y = ADD_LONG( y, args[1] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ /* second control point */
+ x = ADD_LONG( x, args[2] );
+ y = ADD_LONG( y, args[3] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ /* join point; on curve, with y-value the same as the last */
+ /* control point's y-value */
+ x = ADD_LONG( x, args[4] );
+ cff_builder_add_point( builder, x, y, 1 );
+
+ /* third control point, with y-value the same as the join */
+ /* point's y-value */
+ x = ADD_LONG( x, args[5] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ /* fourth control point */
+ x = ADD_LONG( x, args[6] );
+ y = ADD_LONG( y, args[7] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ /* ending point, with y-value the same as the start */
+ x = ADD_LONG( x, args[8] );
+ y = start_y;
+ cff_builder_add_point( builder, x, y, 1 );
+
+ args = stack;
+ break;
+ }
+
+ case cff_op_hflex:
+ {
+ FT_Pos start_y;
+
+
+ FT_TRACE4(( " hflex\n" ));
+
+ /* adding six more points; 4 control points, 2 on-curve points */
+ if ( cff_builder_start_point( builder, x, y ) ||
+ cff_check_points( builder, 6 ) )
+ goto Fail;
+
+ /* record the starting point's y-position for later use */
+ start_y = y;
+
+ /* first control point */
+ x = ADD_LONG( x, args[0] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ /* second control point */
+ x = ADD_LONG( x, args[1] );
+ y = ADD_LONG( y, args[2] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ /* join point; on curve, with y-value the same as the last */
+ /* control point's y-value */
+ x = ADD_LONG( x, args[3] );
+ cff_builder_add_point( builder, x, y, 1 );
+
+ /* third control point, with y-value the same as the join */
+ /* point's y-value */
+ x = ADD_LONG( x, args[4] );
+ cff_builder_add_point( builder, x, y, 0 );
+
+ /* fourth control point */
+ x = ADD_LONG( x, args[5] );
+ y = start_y;
+ cff_builder_add_point( builder, x, y, 0 );
+
+ /* ending point, with y-value the same as the start point's */
+ /* y-value -- we don't add this point, though */
+ x = ADD_LONG( x, args[6] );
+ cff_builder_add_point( builder, x, y, 1 );
+
+ args = stack;
+ break;
+ }
+
+ case cff_op_flex1:
+ {
+ FT_Pos start_x, start_y; /* record start x, y values for */
+ /* alter use */
+ FT_Fixed dx = 0, dy = 0; /* used in horizontal/vertical */
+ /* algorithm below */
+ FT_Int horizontal, count;
+ FT_Fixed* temp;
+
+
+ FT_TRACE4(( " flex1\n" ));
+
+ /* adding six more points; 4 control points, 2 on-curve points */
+ if ( cff_builder_start_point( builder, x, y ) ||
+ cff_check_points( builder, 6 ) )
+ goto Fail;
+
+ /* record the starting point's x, y position for later use */
+ start_x = x;
+ start_y = y;
+
+ /* XXX: figure out whether this is supposed to be a horizontal */
+ /* or vertical flex; the Type 2 specification is vague... */
+
+ temp = args;
+
+ /* grab up to the last argument */
+ for ( count = 5; count > 0; count-- )
+ {
+ dx = ADD_LONG( dx, temp[0] );
+ dy = ADD_LONG( dy, temp[1] );
+ temp += 2;
+ }
+
+ if ( dx < 0 )
+ dx = -dx;
+ if ( dy < 0 )
+ dy = -dy;
+
+ /* strange test, but here it is... */
+ horizontal = ( dx > dy );
+
+ for ( count = 5; count > 0; count-- )
+ {
+ x = ADD_LONG( x, args[0] );
+ y = ADD_LONG( y, args[1] );
+ cff_builder_add_point( builder, x, y,
+ (FT_Bool)( count == 3 ) );
+ args += 2;
+ }
+
+ /* is last operand an x- or y-delta? */
+ if ( horizontal )
+ {
+ x = ADD_LONG( x, args[0] );
+ y = start_y;
+ }
+ else
+ {
+ x = start_x;
+ y = ADD_LONG( y, args[0] );
+ }
+
+ cff_builder_add_point( builder, x, y, 1 );
+
+ args = stack;
+ break;
+ }
+
+ case cff_op_flex:
+ {
+ FT_UInt count;
+
+
+ FT_TRACE4(( " flex\n" ));
+
+ if ( cff_builder_start_point( builder, x, y ) ||
+ cff_check_points( builder, 6 ) )
+ goto Fail;
+
+ for ( count = 6; count > 0; count-- )
+ {
+ x = ADD_LONG( x, args[0] );
+ y = ADD_LONG( y, args[1] );
+ cff_builder_add_point( builder, x, y,
+ (FT_Bool)( count == 4 || count == 1 ) );
+ args += 2;
+ }
+
+ args = stack;
+ }
+ break;
+
+ case cff_op_seac:
+ FT_TRACE4(( " seac\n" ));
+
+ error = cff_operator_seac( decoder,
+ args[0], args[1], args[2],
+ (FT_Int)( args[3] >> 16 ),
+ (FT_Int)( args[4] >> 16 ) );
+
+ /* add current outline to the glyph slot */
+ FT_GlyphLoader_Add( builder->loader );
+
+ /* return now! */
+ FT_TRACE4(( "\n" ));
+ return error;
+
+ case cff_op_endchar:
+ /* in dictionaries, `endchar' simply indicates end of data */
+ if ( in_dict )
+ return error;
+
+ FT_TRACE4(( " endchar\n" ));
+
+ /* We are going to emulate the seac operator. */
+ if ( num_args >= 4 )
+ {
+ /* Save glyph width so that the subglyphs don't overwrite it. */
+ FT_Pos glyph_width = decoder->glyph_width;
+
+
+ error = cff_operator_seac( decoder,
+ 0L, args[-4], args[-3],
+ (FT_Int)( args[-2] >> 16 ),
+ (FT_Int)( args[-1] >> 16 ) );
+
+ decoder->glyph_width = glyph_width;
+ }
+ else
+ {
+ cff_builder_close_contour( builder );
+
+ /* close hints recording session */
+ if ( hinter )
+ {
+ if ( hinter->close( hinter->hints,
+ (FT_UInt)builder->current->n_points ) )
+ goto Syntax_Error;
+
+ /* apply hints to the loaded glyph outline now */
+ error = hinter->apply( hinter->hints,
+ builder->current,
+ (PSH_Globals)builder->hints_globals,
+ decoder->hint_mode );
+ if ( error )
+ goto Fail;
+ }
+
+ /* add current outline to the glyph slot */
+ FT_GlyphLoader_Add( builder->loader );
+ }
+
+ /* return now! */
+ FT_TRACE4(( "\n" ));
+ return error;
+
+ case cff_op_abs:
+ FT_TRACE4(( " abs\n" ));
+
+ if ( args[0] < 0 )
+ {
+ if ( args[0] == FT_LONG_MIN )
+ args[0] = FT_LONG_MAX;
+ else
+ args[0] = -args[0];
+ }
+ args++;
+ break;
+
+ case cff_op_add:
+ FT_TRACE4(( " add\n" ));
+
+ args[0] = ADD_LONG( args[0], args[1] );
+ args++;
+ break;
+
+ case cff_op_sub:
+ FT_TRACE4(( " sub\n" ));
+
+ args[0] = SUB_LONG( args[0], args[1] );
+ args++;
+ break;
+
+ case cff_op_div:
+ FT_TRACE4(( " div\n" ));
+
+ args[0] = FT_DivFix( args[0], args[1] );
+ args++;
+ break;
+
+ case cff_op_neg:
+ FT_TRACE4(( " neg\n" ));
+
+ if ( args[0] == FT_LONG_MIN )
+ args[0] = FT_LONG_MAX;
+ args[0] = -args[0];
+ args++;
+ break;
+
+ case cff_op_random:
+ FT_TRACE4(( " random\n" ));
+
+ /* only use the lower 16 bits of `random' */
+ /* to generate a number in the range (0;1] */
+ args[0] = (FT_Fixed)
+ ( ( decoder->current_subfont->random & 0xFFFF ) + 1 );
+ args++;
+
+ decoder->current_subfont->random =
+ cff_random( decoder->current_subfont->random );
+ break;
+
+ case cff_op_mul:
+ FT_TRACE4(( " mul\n" ));
+
+ args[0] = FT_MulFix( args[0], args[1] );
+ args++;
+ break;
+
+ case cff_op_sqrt:
+ FT_TRACE4(( " sqrt\n" ));
+
+ if ( args[0] > 0 )
+ {
+ FT_Fixed root = args[0];
+ FT_Fixed new_root;
+
+
+ for (;;)
+ {
+ new_root = ( root + FT_DivFix( args[0], root ) + 1 ) >> 1;
+ if ( new_root == root )
+ break;
+ root = new_root;
+ }
+ args[0] = new_root;
+ }
+ else
+ args[0] = 0;
+ args++;
+ break;
+
+ case cff_op_drop:
+ /* nothing */
+ FT_TRACE4(( " drop\n" ));
+
+ break;
+
+ case cff_op_exch:
+ {
+ FT_Fixed tmp;
+
+
+ FT_TRACE4(( " exch\n" ));
+
+ tmp = args[0];
+ args[0] = args[1];
+ args[1] = tmp;
+ args += 2;
+ }
+ break;
+
+ case cff_op_index:
+ {
+ FT_Int idx = (FT_Int)( args[0] >> 16 );
+
+
+ FT_TRACE4(( " index\n" ));
+
+ if ( idx < 0 )
+ idx = 0;
+ else if ( idx > num_args - 2 )
+ idx = num_args - 2;
+ args[0] = args[-( idx + 1 )];
+ args++;
+ }
+ break;
+
+ case cff_op_roll:
+ {
+ FT_Int count = (FT_Int)( args[0] >> 16 );
+ FT_Int idx = (FT_Int)( args[1] >> 16 );
+
+
+ FT_TRACE4(( " roll\n" ));
+
+ if ( count <= 0 )
+ count = 1;
+
+ args -= count;
+ if ( args < stack )
+ goto Stack_Underflow;
+
+ if ( idx >= 0 )
+ {
+ while ( idx > 0 )
+ {
+ FT_Fixed tmp = args[count - 1];
+ FT_Int i;
+
+
+ for ( i = count - 2; i >= 0; i-- )
+ args[i + 1] = args[i];
+ args[0] = tmp;
+ idx--;
+ }
+ }
+ else
+ {
+ while ( idx < 0 )
+ {
+ FT_Fixed tmp = args[0];
+ FT_Int i;
+
+
+ for ( i = 0; i < count - 1; i++ )
+ args[i] = args[i + 1];
+ args[count - 1] = tmp;
+ idx++;
+ }
+ }
+ args += count;
+ }
+ break;
+
+ case cff_op_dup:
+ FT_TRACE4(( " dup\n" ));
+
+ args[1] = args[0];
+ args += 2;
+ break;
+
+ case cff_op_put:
+ {
+ FT_Fixed val = args[0];
+ FT_Int idx = (FT_Int)( args[1] >> 16 );
+
+
+ FT_TRACE4(( " put\n" ));
+
+ /* the Type2 specification before version 16-March-2000 */
+ /* didn't give a hard-coded size limit of the temporary */
+ /* storage array; instead, an argument of the */
+ /* `MultipleMaster' operator set the size */
+ if ( idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS )
+ decoder->buildchar[idx] = val;
+ }
+ break;
+
+ case cff_op_get:
+ {
+ FT_Int idx = (FT_Int)( args[0] >> 16 );
+ FT_Fixed val = 0;
+
+
+ FT_TRACE4(( " get\n" ));
+
+ if ( idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS )
+ val = decoder->buildchar[idx];
+
+ args[0] = val;
+ args++;
+ }
+ break;
+
+ case cff_op_store:
+ /* this operator was removed from the Type2 specification */
+ /* in version 16-March-2000 */
+
+ /* since we currently don't handle interpolation of multiple */
+ /* master fonts, this is a no-op */
+ FT_TRACE4(( " store\n" ));
+ break;
+
+ case cff_op_load:
+ /* this operator was removed from the Type2 specification */
+ /* in version 16-March-2000 */
+ {
+ FT_Int reg_idx = (FT_Int)args[0];
+ FT_Int idx = (FT_Int)args[1];
+ FT_Int count = (FT_Int)args[2];
+
+
+ FT_TRACE4(( " load\n" ));
+
+ /* since we currently don't handle interpolation of multiple */
+ /* master fonts, we store a vector [1 0 0 ...] in the */
+ /* temporary storage array regardless of the Registry index */
+ if ( reg_idx >= 0 && reg_idx <= 2 &&
+ idx >= 0 && idx < CFF_MAX_TRANS_ELEMENTS &&
+ count >= 0 && count <= num_axes )
+ {
+ FT_Int end, i;
+
+
+ end = FT_MIN( idx + count, CFF_MAX_TRANS_ELEMENTS );
+
+ if ( idx < end )
+ decoder->buildchar[idx] = 1 << 16;
+
+ for ( i = idx + 1; i < end; i++ )
+ decoder->buildchar[i] = 0;
+ }
+ }
+ break;
+
+ case cff_op_blend:
+ /* this operator was removed from the Type2 specification */
+ /* in version 16-March-2000 */
+ {
+ FT_Int num_results = (FT_Int)( args[0] >> 16 );
+
+
+ FT_TRACE4(( " blend\n" ));
+
+ if ( num_results < 0 )
+ goto Syntax_Error;
+
+ if ( num_results * (FT_Int)num_designs > num_args )
+ goto Stack_Underflow;
+
+ /* since we currently don't handle interpolation of multiple */
+ /* master fonts, return the `num_results' values of the */
+ /* first master */
+ args -= num_results * ( num_designs - 1 );
+ num_args -= num_results * ( num_designs - 1 );
+ }
+ break;
+
+ case cff_op_dotsection:
+ /* this operator is deprecated and ignored by the parser */
+ FT_TRACE4(( " dotsection\n" ));
+ break;
+
+ case cff_op_closepath:
+ /* this is an invalid Type 2 operator; however, there */
+ /* exist fonts which are incorrectly converted from probably */
+ /* Type 1 to CFF, and some parsers seem to accept it */
+
+ FT_TRACE4(( " closepath (invalid op)\n" ));
+
+ args = stack;
+ break;
+
+ case cff_op_hsbw:
+ /* this is an invalid Type 2 operator; however, there */
+ /* exist fonts which are incorrectly converted from probably */
+ /* Type 1 to CFF, and some parsers seem to accept it */
+
+ FT_TRACE4(( " hsbw (invalid op)\n" ));
+
+ decoder->glyph_width =
+ ADD_LONG( decoder->nominal_width, ( args[1] >> 16 ) );
+
+ decoder->builder.left_bearing.x = args[0];
+ decoder->builder.left_bearing.y = 0;
+
+ x = ADD_LONG( decoder->builder.pos_x, args[0] );
+ y = decoder->builder.pos_y;
+ args = stack;
+ break;
+
+ case cff_op_sbw:
+ /* this is an invalid Type 2 operator; however, there */
+ /* exist fonts which are incorrectly converted from probably */
+ /* Type 1 to CFF, and some parsers seem to accept it */
+
+ FT_TRACE4(( " sbw (invalid op)\n" ));
+
+ decoder->glyph_width =
+ ADD_LONG( decoder->nominal_width, ( args[2] >> 16 ) );
+
+ decoder->builder.left_bearing.x = args[0];
+ decoder->builder.left_bearing.y = args[1];
+
+ x = ADD_LONG( decoder->builder.pos_x, args[0] );
+ y = ADD_LONG( decoder->builder.pos_y, args[1] );
+ args = stack;
+ break;
+
+ case cff_op_setcurrentpoint:
+ /* this is an invalid Type 2 operator; however, there */
+ /* exist fonts which are incorrectly converted from probably */
+ /* Type 1 to CFF, and some parsers seem to accept it */
+
+ FT_TRACE4(( " setcurrentpoint (invalid op)\n" ));
+
+ x = ADD_LONG( decoder->builder.pos_x, args[0] );
+ y = ADD_LONG( decoder->builder.pos_y, args[1] );
+ args = stack;
+ break;
+
+ case cff_op_callothersubr:
+ /* this is an invalid Type 2 operator; however, there */
+ /* exist fonts which are incorrectly converted from probably */
+ /* Type 1 to CFF, and some parsers seem to accept it */
+
+ FT_TRACE4(( " callothersubr (invalid op)\n" ));
+
+ /* subsequent `pop' operands should add the arguments, */
+ /* this is the implementation described for `unknown' other */
+ /* subroutines in the Type1 spec. */
+ /* */
+ /* XXX Fix return arguments (see discussion below). */
+ args -= 2 + ( args[-2] >> 16 );
+ if ( args < stack )
+ goto Stack_Underflow;
+ break;
+
+ case cff_op_pop:
+ /* this is an invalid Type 2 operator; however, there */
+ /* exist fonts which are incorrectly converted from probably */
+ /* Type 1 to CFF, and some parsers seem to accept it */
+
+ FT_TRACE4(( " pop (invalid op)\n" ));
+
+ /* XXX Increasing `args' is wrong: After a certain number of */
+ /* `pop's we get a stack overflow. Reason for doing it is */
+ /* code like this (actually found in a CFF font): */
+ /* */
+ /* 17 1 3 callothersubr */
+ /* pop */
+ /* callsubr */
+ /* */
+ /* Since we handle `callothersubr' as a no-op, and */
+ /* `callsubr' needs at least one argument, `pop' can't be a */
+ /* no-op too as it basically should be. */
+ /* */
+ /* The right solution would be to provide real support for */
+ /* `callothersubr' as done in `t1decode.c', however, given */
+ /* the fact that CFF fonts with `pop' are invalid, it is */
+ /* questionable whether it is worth the time. */
+ args++;
+ break;
+
+ case cff_op_and:
+ {
+ FT_Fixed cond = ( args[0] && args[1] );
+
+
+ FT_TRACE4(( " and\n" ));
+
+ args[0] = cond ? 0x10000L : 0;
+ args++;
+ }
+ break;
+
+ case cff_op_or:
+ {
+ FT_Fixed cond = ( args[0] || args[1] );
+
+
+ FT_TRACE4(( " or\n" ));
+
+ args[0] = cond ? 0x10000L : 0;
+ args++;
+ }
+ break;
+
+ case cff_op_not:
+ {
+ FT_Fixed cond = !args[0];
+
+
+ FT_TRACE4(( " not\n" ));
+
+ args[0] = cond ? 0x10000L : 0;
+ args++;
+ }
+ break;
+
+ case cff_op_eq:
+ {
+ FT_Fixed cond = ( args[0] == args[1] );
+
+
+ FT_TRACE4(( " eq\n" ));
+
+ args[0] = cond ? 0x10000L : 0;
+ args++;
+ }
+ break;
+
+ case cff_op_ifelse:
+ {
+ FT_Fixed cond = ( args[2] <= args[3] );
+
+
+ FT_TRACE4(( " ifelse\n" ));
+
+ if ( !cond )
+ args[0] = args[1];
+ args++;
+ }
+ break;
+
+ case cff_op_callsubr:
+ {
+ FT_UInt idx = (FT_UInt)( ( args[0] >> 16 ) +
+ decoder->locals_bias );
+
+
+ FT_TRACE4(( " callsubr (idx %d, entering level %d)\n",
+ idx,
+ zone - decoder->zones + 1 ));
+
+ if ( idx >= decoder->num_locals )
+ {
+ FT_ERROR(( "cff_decoder_parse_charstrings:"
+ " invalid local subr index\n" ));
+ goto Syntax_Error;
+ }
+
+ if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS )
+ {
+ FT_ERROR(( "cff_decoder_parse_charstrings:"
+ " too many nested subrs\n" ));
+ goto Syntax_Error;
+ }
+
+ zone->cursor = ip; /* save current instruction pointer */
+
+ zone++;
+ zone->base = decoder->locals[idx];
+ zone->limit = decoder->locals[idx + 1];
+ zone->cursor = zone->base;
+
+ if ( !zone->base || zone->limit == zone->base )
+ {
+ FT_ERROR(( "cff_decoder_parse_charstrings:"
+ " invoking empty subrs\n" ));
+ goto Syntax_Error;
+ }
+
+ decoder->zone = zone;
+ ip = zone->base;
+ limit = zone->limit;
+ }
+ break;
+
+ case cff_op_callgsubr:
+ {
+ FT_UInt idx = (FT_UInt)( ( args[0] >> 16 ) +
+ decoder->globals_bias );
+
+
+ FT_TRACE4(( " callgsubr (idx %d, entering level %d)\n",
+ idx,
+ zone - decoder->zones + 1 ));
+
+ if ( idx >= decoder->num_globals )
+ {
+ FT_ERROR(( "cff_decoder_parse_charstrings:"
+ " invalid global subr index\n" ));
+ goto Syntax_Error;
+ }
+
+ if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS )
+ {
+ FT_ERROR(( "cff_decoder_parse_charstrings:"
+ " too many nested subrs\n" ));
+ goto Syntax_Error;
+ }
+
+ zone->cursor = ip; /* save current instruction pointer */
+
+ zone++;
+ zone->base = decoder->globals[idx];
+ zone->limit = decoder->globals[idx + 1];
+ zone->cursor = zone->base;
+
+ if ( !zone->base || zone->limit == zone->base )
+ {
+ FT_ERROR(( "cff_decoder_parse_charstrings:"
+ " invoking empty subrs\n" ));
+ goto Syntax_Error;
+ }
+
+ decoder->zone = zone;
+ ip = zone->base;
+ limit = zone->limit;
+ }
+ break;
+
+ case cff_op_return:
+ FT_TRACE4(( " return (leaving level %d)\n",
+ decoder->zone - decoder->zones ));
+
+ if ( decoder->zone <= decoder->zones )
+ {
+ FT_ERROR(( "cff_decoder_parse_charstrings:"
+ " unexpected return\n" ));
+ goto Syntax_Error;
+ }
+
+ decoder->zone--;
+ zone = decoder->zone;
+ ip = zone->cursor;
+ limit = zone->limit;
+ break;
+
+ default:
+ FT_ERROR(( "Unimplemented opcode: %d", ip[-1] ));
+
+ if ( ip[-1] == 12 )
+ FT_ERROR(( " %d", ip[0] ));
+ FT_ERROR(( "\n" ));
+
+ return FT_THROW( Unimplemented_Feature );
+ }
+
+ decoder->top = args;
+
+ if ( decoder->top - stack >= CFF_MAX_OPERANDS )
+ goto Stack_Overflow;
+
+ } /* general operator processing */
+
+ } /* while ip < limit */
+
+ FT_TRACE4(( "..end..\n\n" ));
+
+ Fail:
+ return error;
+
+ MM_Error:
+ FT_TRACE4(( "cff_decoder_parse_charstrings:"
+ " invalid opcode found in top DICT charstring\n"));
+ return FT_THROW( Invalid_File_Format );
+
+ Syntax_Error:
+ FT_TRACE4(( "cff_decoder_parse_charstrings: syntax error\n" ));
+ return FT_THROW( Invalid_File_Format );
+
+ Stack_Underflow:
+ FT_TRACE4(( "cff_decoder_parse_charstrings: stack underflow\n" ));
+ return FT_THROW( Too_Few_Arguments );
+
+ Stack_Overflow:
+ FT_TRACE4(( "cff_decoder_parse_charstrings: stack overflow\n" ));
+ return FT_THROW( Stack_Overflow );
+ }
+
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* cff_decoder_init */
+ /* */
+ /* <Description> */
+ /* Initializes a given glyph decoder. */
+ /* */
+ /* <InOut> */
+ /* decoder :: A pointer to the glyph builder to initialize. */
+ /* */
+ /* <Input> */
+ /* face :: The current face object. */
+ /* */
+ /* size :: The current size object. */
+ /* */
+ /* slot :: The current glyph object. */
+ /* */
+ /* hinting :: Whether hinting is active. */
+ /* */
+ /* hint_mode :: The hinting mode. */
+ /* */
+ FT_LOCAL_DEF( void )
+ cff_decoder_init( CFF_Decoder* decoder,
+ TT_Face face,
+ CFF_Size size,
+ CFF_GlyphSlot slot,
+ FT_Bool hinting,
+ FT_Render_Mode hint_mode,
+ CFF_Decoder_Get_Glyph_Callback get_callback,
+ CFF_Decoder_Free_Glyph_Callback free_callback )
+ {
+ CFF_Font cff = (CFF_Font)face->extra.data;
+
+
+ /* clear everything */
+ FT_ZERO( decoder );
+
+ /* initialize builder */
+ cff_builder_init( &decoder->builder, face, size, slot, hinting );
+
+ /* initialize Type2 decoder */
+ decoder->cff = cff;
+ decoder->num_globals = cff->global_subrs_index.count;
+ decoder->globals = cff->global_subrs;
+ decoder->globals_bias = cff_compute_bias(
+ cff->top_font.font_dict.charstring_type,
+ decoder->num_globals );
+
+ decoder->hint_mode = hint_mode;
+
+ decoder->get_glyph_callback = get_callback;
+ decoder->free_glyph_callback = free_callback;
+ }
+
+
+ /* this function is used to select the subfont */
+ /* and the locals subrs array */
+ FT_LOCAL_DEF( FT_Error )
+ cff_decoder_prepare( CFF_Decoder* decoder,
+ CFF_Size size,
+ FT_UInt glyph_index )
+ {
+ CFF_Builder *builder = &decoder->builder;
+ CFF_Font cff = (CFF_Font)builder->face->extra.data;
+ CFF_SubFont sub = &cff->top_font;
+ FT_Error error = FT_Err_Ok;
+
+ FT_Service_CFFLoad cffload = (FT_Service_CFFLoad)cff->cffload;
+
+
+ /* manage CID fonts */
+ if ( cff->num_subfonts )
+ {
+ FT_Byte fd_index = cffload->fd_select_get( &cff->fd_select,
+ glyph_index );
+
+
+ if ( fd_index >= cff->num_subfonts )
+ {
+ FT_TRACE4(( "cff_decoder_prepare: invalid CID subfont index\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ FT_TRACE3(( " in subfont %d:\n", fd_index ));
+
+ sub = cff->subfonts[fd_index];
+
+ if ( builder->hints_funcs && size )
+ {
+ FT_Size ftsize = FT_SIZE( size );
+ CFF_Internal internal = (CFF_Internal)ftsize->internal->module_data;
+
+
+ /* for CFFs without subfonts, this value has already been set */
+ builder->hints_globals = (void *)internal->subfonts[fd_index];
+ }
+ }
+
+ decoder->num_locals = sub->local_subrs_index.count;
+ decoder->locals = sub->local_subrs;
+ decoder->locals_bias = cff_compute_bias(
+ decoder->cff->top_font.font_dict.charstring_type,
+ decoder->num_locals );
+
+ decoder->glyph_width = sub->private_dict.default_width;
+ decoder->nominal_width = sub->private_dict.nominal_width;
+
+ decoder->current_subfont = sub;
+
+ Exit:
+ return error;
+ }
+
+
+/* END */
diff --git a/src/psaux/cffdecode.h b/src/psaux/cffdecode.h
new file mode 100644
index 0000000..0d4f5fe
--- /dev/null
+++ b/src/psaux/cffdecode.h
@@ -0,0 +1,64 @@
+/***************************************************************************/
+/* */
+/* cffdecode.h */
+/* */
+/* PostScript CFF (Type 2) decoding routines (specification). */
+/* */
+/* Copyright 2017-2018 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef CFFDECODE_H_
+#define CFFDECODE_H_
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
+
+
+FT_BEGIN_HEADER
+
+ FT_LOCAL( void )
+ cff_decoder_init( CFF_Decoder* decoder,
+ TT_Face face,
+ CFF_Size size,
+ CFF_GlyphSlot slot,
+ FT_Bool hinting,
+ FT_Render_Mode hint_mode,
+ CFF_Decoder_Get_Glyph_Callback get_callback,
+ CFF_Decoder_Free_Glyph_Callback free_callback );
+
+ FT_LOCAL( FT_Error )
+ cff_decoder_prepare( CFF_Decoder* decoder,
+ CFF_Size size,
+ FT_UInt glyph_index );
+
+
+ FT_LOCAL( FT_Int )
+ cff_lookup_glyph_by_stdcharcode( CFF_Font cff,
+ FT_Int charcode );
+
+
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ FT_LOCAL( FT_Error )
+ cff_decoder_parse_charstrings( CFF_Decoder* decoder,
+ FT_Byte* charstring_base,
+ FT_ULong charstring_len,
+ FT_Bool in_dict );
+#endif
+
+
+FT_END_HEADER
+
+#endif
+
+
+/* END */
diff --git a/src/psaux/module.mk b/src/psaux/module.mk
index 1d90e14..6584d07 100644
--- a/src/psaux/module.mk
+++ b/src/psaux/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cff/cf2arrst.c b/src/psaux/psarrst.c
similarity index 92%
rename from src/cff/cf2arrst.c
rename to src/psaux/psarrst.c
index 528b1fa..a878094 100644
--- a/src/cff/cf2arrst.c
+++ b/src/psaux/psarrst.c
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2arrst.c */
+/* psarrst.c */
/* */
/* Adobe's code for Array Stacks (body). */
/* */
@@ -36,13 +36,13 @@
/***************************************************************************/
-#include "cf2ft.h"
+#include "psft.h"
#include FT_INTERNAL_DEBUG_H
-#include "cf2glue.h"
-#include "cf2arrst.h"
+#include "psglue.h"
+#include "psarrst.h"
-#include "cf2error.h"
+#include "pserror.h"
/*
@@ -58,7 +58,7 @@
FT_Error* error,
size_t sizeItem )
{
- FT_ASSERT( arrstack != NULL );
+ FT_ASSERT( arrstack );
/* initialize the structure */
arrstack->memory = memory;
@@ -78,7 +78,7 @@
FT_Memory memory = arrstack->memory; /* for FT_FREE */
- FT_ASSERT( arrstack != NULL );
+ FT_ASSERT( arrstack );
arrstack->allocated = 0;
arrstack->count = 0;
@@ -95,7 +95,7 @@
cf2_arrstack_setNumElements( CF2_ArrStack arrstack,
size_t numElements )
{
- FT_ASSERT( arrstack != NULL );
+ FT_ASSERT( arrstack );
{
FT_Error error = FT_Err_Ok; /* for FT_REALLOC */
@@ -104,7 +104,7 @@
size_t newSize = numElements * arrstack->sizeItem;
- if ( numElements > LONG_MAX / arrstack->sizeItem )
+ if ( numElements > FT_LONG_MAX / arrstack->sizeItem )
goto exit;
@@ -140,7 +140,7 @@
cf2_arrstack_setCount( CF2_ArrStack arrstack,
size_t numElements )
{
- FT_ASSERT( arrstack != NULL );
+ FT_ASSERT( arrstack );
if ( numElements > arrstack->allocated )
{
@@ -157,7 +157,7 @@
FT_LOCAL_DEF( void )
cf2_arrstack_clear( CF2_ArrStack arrstack )
{
- FT_ASSERT( arrstack != NULL );
+ FT_ASSERT( arrstack );
arrstack->count = 0;
}
@@ -167,7 +167,7 @@
FT_LOCAL_DEF( size_t )
cf2_arrstack_size( const CF2_ArrStack arrstack )
{
- FT_ASSERT( arrstack != NULL );
+ FT_ASSERT( arrstack );
return arrstack->count;
}
@@ -176,7 +176,7 @@
FT_LOCAL_DEF( void* )
cf2_arrstack_getBuffer( const CF2_ArrStack arrstack )
{
- FT_ASSERT( arrstack != NULL );
+ FT_ASSERT( arrstack );
return arrstack->ptr;
}
@@ -190,7 +190,7 @@
void* newPtr;
- FT_ASSERT( arrstack != NULL );
+ FT_ASSERT( arrstack );
if ( idx >= arrstack->count )
{
@@ -212,7 +212,7 @@
cf2_arrstack_push( CF2_ArrStack arrstack,
const void* ptr )
{
- FT_ASSERT( arrstack != NULL );
+ FT_ASSERT( arrstack );
if ( arrstack->count == arrstack->allocated )
{
@@ -225,7 +225,7 @@
}
}
- FT_ASSERT( ptr != NULL );
+ FT_ASSERT( ptr );
{
size_t offset = arrstack->count * arrstack->sizeItem;
diff --git a/src/cff/cf2arrst.h b/src/psaux/psarrst.h
similarity index 95%
rename from src/cff/cf2arrst.h
rename to src/psaux/psarrst.h
index ff5ad8b..b3568eb 100644
--- a/src/cff/cf2arrst.h
+++ b/src/psaux/psarrst.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2arrst.h */
+/* psarrst.h */
/* */
/* Adobe's code for Array Stacks (specification). */
/* */
@@ -36,11 +36,11 @@
/***************************************************************************/
-#ifndef __CF2ARRST_H__
-#define __CF2ARRST_H__
+#ifndef PSARRST_H_
+#define PSARRST_H_
-#include "cf2error.h"
+#include "pserror.h"
FT_BEGIN_HEADER
@@ -94,7 +94,7 @@
FT_END_HEADER
-#endif /* __CF2ARRST_H__ */
+#endif /* PSARRST_H_ */
/* END */
diff --git a/src/psaux/psaux.c b/src/psaux/psaux.c
index 7f1d9aa..fb447fc 100644
--- a/src/psaux/psaux.c
+++ b/src/psaux/psaux.c
@@ -4,7 +4,7 @@
/* */
/* FreeType auxiliary PostScript driver component (body only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,18 +17,25 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
-#include "psobjs.c"
-#include "psauxmod.c"
-#include "t1decode.c"
-#include "t1cmap.c"
-#ifndef T1_CONFIG_OPTION_NO_AFM
#include "afmparse.c"
-#endif
-
+#include "psauxmod.c"
#include "psconv.c"
+#include "psobjs.c"
+#include "t1cmap.c"
+#include "t1decode.c"
+#include "cffdecode.c"
+
+#include "psarrst.c"
+#include "psblues.c"
+#include "pserror.c"
+#include "psfont.c"
+#include "psft.c"
+#include "pshints.c"
+#include "psintrp.c"
+#include "psread.c"
+#include "psstack.c"
/* END */
diff --git a/src/psaux/psauxerr.h b/src/psaux/psauxerr.h
index 97712f0..cc33fd2 100644
--- a/src/psaux/psauxerr.h
+++ b/src/psaux/psauxerr.h
@@ -4,7 +4,7 @@
/* */
/* PS auxiliary module error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,12 +23,12 @@
/* */
/*************************************************************************/
-#ifndef __PSAUXERR_H__
-#define __PSAUXERR_H__
+#ifndef PSAUXERR_H_
+#define PSAUXERR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX PSaux_Err_
@@ -36,7 +36,7 @@
#include FT_ERRORS_H
-#endif /* __PSAUXERR_H__ */
+#endif /* PSAUXERR_H_ */
/* END */
diff --git a/src/psaux/psauxmod.c b/src/psaux/psauxmod.c
index 06fcab0..ee49708 100644
--- a/src/psaux/psauxmod.c
+++ b/src/psaux/psauxmod.c
@@ -4,7 +4,7 @@
/* */
/* FreeType auxiliary PostScript module implementation (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -21,6 +21,8 @@
#include "psobjs.h"
#include "t1decode.h"
#include "t1cmap.h"
+#include "psft.h"
+#include "cffdecode.h"
#ifndef T1_CONFIG_OPTION_NO_AFM
#include "afmparse.h"
@@ -30,52 +32,69 @@
FT_CALLBACK_TABLE_DEF
const PS_Table_FuncsRec ps_table_funcs =
{
- ps_table_new,
- ps_table_done,
- ps_table_add,
- ps_table_release
+ ps_table_new, /* init */
+ ps_table_done, /* done */
+ ps_table_add, /* add */
+ ps_table_release /* release */
};
FT_CALLBACK_TABLE_DEF
const PS_Parser_FuncsRec ps_parser_funcs =
{
- ps_parser_init,
- ps_parser_done,
- ps_parser_skip_spaces,
- ps_parser_skip_PS_token,
- ps_parser_to_int,
- ps_parser_to_fixed,
- ps_parser_to_bytes,
- ps_parser_to_coord_array,
- ps_parser_to_fixed_array,
- ps_parser_to_token,
- ps_parser_to_token_array,
- ps_parser_load_field,
- ps_parser_load_field_table
+ ps_parser_init, /* init */
+ ps_parser_done, /* done */
+
+ ps_parser_skip_spaces, /* skip_spaces */
+ ps_parser_skip_PS_token, /* skip_PS_token */
+
+ ps_parser_to_int, /* to_int */
+ ps_parser_to_fixed, /* to_fixed */
+ ps_parser_to_bytes, /* to_bytes */
+ ps_parser_to_coord_array, /* to_coord_array */
+ ps_parser_to_fixed_array, /* to_fixed_array */
+ ps_parser_to_token, /* to_token */
+ ps_parser_to_token_array, /* to_token_array */
+
+ ps_parser_load_field, /* load_field */
+ ps_parser_load_field_table /* load_field_table */
+ };
+
+
+ FT_CALLBACK_TABLE_DEF
+ const PS_Builder_FuncsRec ps_builder_funcs =
+ {
+ ps_builder_init, /* init */
+ ps_builder_done /* done */
};
FT_CALLBACK_TABLE_DEF
const T1_Builder_FuncsRec t1_builder_funcs =
{
- t1_builder_init,
- t1_builder_done,
- t1_builder_check_points,
- t1_builder_add_point,
- t1_builder_add_point1,
- t1_builder_add_contour,
- t1_builder_start_point,
- t1_builder_close_contour
+ t1_builder_init, /* init */
+ t1_builder_done, /* done */
+
+ t1_builder_check_points, /* check_points */
+ t1_builder_add_point, /* add_point */
+ t1_builder_add_point1, /* add_point1 */
+ t1_builder_add_contour, /* add_contour */
+ t1_builder_start_point, /* start_point */
+ t1_builder_close_contour /* close_contour */
};
FT_CALLBACK_TABLE_DEF
const T1_Decoder_FuncsRec t1_decoder_funcs =
{
- t1_decoder_init,
- t1_decoder_done,
- t1_decoder_parse_charstrings
+ t1_decoder_init, /* init */
+ t1_decoder_done, /* done */
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
+ t1_decoder_parse_charstrings, /* parse_charstrings_old */
+#else
+ t1_decoder_parse_metrics, /* parse_metrics */
+#endif
+ cf2_decoder_parse_charstrings /* parse_charstrings */
};
@@ -83,9 +102,9 @@
FT_CALLBACK_TABLE_DEF
const AFM_Parser_FuncsRec afm_parser_funcs =
{
- afm_parser_init,
- afm_parser_done,
- afm_parser_parse
+ afm_parser_init, /* init */
+ afm_parser_done, /* done */
+ afm_parser_parse /* parse */
};
#endif
@@ -100,6 +119,34 @@
};
+ FT_CALLBACK_TABLE_DEF
+ const CFF_Builder_FuncsRec cff_builder_funcs =
+ {
+ cff_builder_init, /* init */
+ cff_builder_done, /* done */
+
+ cff_check_points, /* check_points */
+ cff_builder_add_point, /* add_point */
+ cff_builder_add_point1, /* add_point1 */
+ cff_builder_add_contour, /* add_contour */
+ cff_builder_start_point, /* start_point */
+ cff_builder_close_contour /* close_contour */
+ };
+
+
+ FT_CALLBACK_TABLE_DEF
+ const CFF_Decoder_FuncsRec cff_decoder_funcs =
+ {
+ cff_decoder_init, /* init */
+ cff_decoder_prepare, /* prepare */
+
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ cff_decoder_parse_charstrings, /* parse_charstrings_old */
+#endif
+ cf2_decoder_parse_charstrings /* parse_charstrings */
+ };
+
+
static
const PSAux_Interface psaux_interface =
{
@@ -108,6 +155,9 @@
&t1_builder_funcs,
&t1_decoder_funcs,
t1_decrypt,
+ cff_random,
+ ps_decoder_init,
+ t1_make_subfont,
(const T1_CMap_ClassesRec*) &t1_cmap_classes,
@@ -116,6 +166,8 @@
#else
0,
#endif
+
+ &cff_decoder_funcs,
};
@@ -130,9 +182,9 @@
&psaux_interface, /* module-specific interface */
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
+ (FT_Module_Constructor)NULL, /* module_init */
+ (FT_Module_Destructor) NULL, /* module_done */
+ (FT_Module_Requester) NULL /* get_interface */
};
diff --git a/src/psaux/psauxmod.h b/src/psaux/psauxmod.h
index ae6a8f9..f30978f 100644
--- a/src/psaux/psauxmod.h
+++ b/src/psaux/psauxmod.h
@@ -4,7 +4,7 @@
/* */
/* FreeType auxiliary PostScript module implementation (specification). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,13 +16,15 @@
/***************************************************************************/
-#ifndef __PSAUXMOD_H__
-#define __PSAUXMOD_H__
+#ifndef PSAUXMOD_H_
+#define PSAUXMOD_H_
#include <ft2build.h>
#include FT_MODULE_H
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
+
FT_BEGIN_HEADER
@@ -31,12 +33,19 @@
#endif
+ FT_CALLBACK_TABLE
+ const CFF_Builder_FuncsRec cff_builder_funcs;
+
+ FT_CALLBACK_TABLE
+ const PS_Builder_FuncsRec ps_builder_funcs;
+
+
FT_EXPORT_VAR( const FT_Module_Class ) psaux_driver_class;
FT_END_HEADER
-#endif /* __PSAUXMOD_H__ */
+#endif /* PSAUXMOD_H_ */
/* END */
diff --git a/src/cff/cf2blues.c b/src/psaux/psblues.c
similarity index 91%
rename from src/cff/cf2blues.c
rename to src/psaux/psblues.c
index 250f89e..ae39d03 100644
--- a/src/cff/cf2blues.c
+++ b/src/psaux/psblues.c
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2blues.c */
+/* psblues.c */
/* */
/* Adobe's code for handling Blue Zones (body). */
/* */
@@ -36,12 +36,12 @@
/***************************************************************************/
-#include "cf2ft.h"
+#include "psft.h"
#include FT_INTERNAL_DEBUG_H
-#include "cf2blues.h"
-#include "cf2hints.h"
-#include "cf2font.h"
+#include "psblues.h"
+#include "pshints.h"
+#include "psfont.h"
/*************************************************************************/
@@ -67,7 +67,7 @@
CF2_Font font )
{
/* pointer to parsed font object */
- CFF_Decoder* decoder = font->decoder;
+ PS_Decoder* decoder = font->decoder;
CF2_Fixed zoneHeight;
CF2_Fixed maxZoneHeight = 0;
@@ -194,8 +194,8 @@
blues->zone[blues->count].csTopEdge =
cf2_blueToFixed( blueValues[i + 1] );
- zoneHeight = blues->zone[blues->count].csTopEdge -
- blues->zone[blues->count].csBottomEdge;
+ zoneHeight = SUB_INT32( blues->zone[blues->count].csTopEdge,
+ blues->zone[blues->count].csBottomEdge );
if ( zoneHeight < 0 )
{
@@ -243,8 +243,8 @@
blues->zone[blues->count].csTopEdge =
cf2_blueToFixed( otherBlues[i + 1] );
- zoneHeight = blues->zone[blues->count].csTopEdge -
- blues->zone[blues->count].csBottomEdge;
+ zoneHeight = SUB_INT32( blues->zone[blues->count].csTopEdge,
+ blues->zone[blues->count].csBottomEdge );
if ( zoneHeight < 0 )
{
@@ -301,7 +301,7 @@
/* top edge */
flatFamilyEdge = cf2_blueToFixed( familyOtherBlues[j + 1] );
- diff = cf2_fixedAbs( flatEdge - flatFamilyEdge );
+ diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) );
if ( diff < minDiff && diff < csUnitsPerPixel )
{
@@ -319,7 +319,7 @@
/* top edge */
flatFamilyEdge = cf2_blueToFixed( familyBlues[1] );
- diff = cf2_fixedAbs( flatEdge - flatFamilyEdge );
+ diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) );
if ( diff < minDiff && diff < csUnitsPerPixel )
blues->zone[i].csFlatEdge = flatFamilyEdge;
@@ -342,7 +342,7 @@
/* adjust edges of top zone upward by twice darkening amount */
flatFamilyEdge += 2 * font->darkenY; /* bottom edge */
- diff = cf2_fixedAbs( flatEdge - flatFamilyEdge );
+ diff = cf2_fixedAbs( SUB_INT32( flatEdge, flatFamilyEdge ) );
if ( diff < minDiff && diff < csUnitsPerPixel )
{
@@ -408,8 +408,8 @@
/* Note: constant changed from 0.5 to 0.6 to avoid a problem with */
/* 10ppem Arial */
- blues->boost = cf2_floatToFixed( .6 ) -
- FT_MulDiv( cf2_floatToFixed ( .6 ),
+ blues->boost = cf2_doubleToFixed( .6 ) -
+ FT_MulDiv( cf2_doubleToFixed ( .6 ),
blues->scale,
blues->blueScale );
if ( blues->boost > 0x7FFF )
@@ -489,17 +489,18 @@
if ( blues->zone[i].bottomZone &&
cf2_hint_isBottom( bottomHintEdge ) )
{
- if ( ( blues->zone[i].csBottomEdge - csFuzz ) <=
- bottomHintEdge->csCoord &&
+ if ( SUB_INT32( blues->zone[i].csBottomEdge, csFuzz ) <=
+ bottomHintEdge->csCoord &&
bottomHintEdge->csCoord <=
- ( blues->zone[i].csTopEdge + csFuzz ) )
+ ADD_INT32( blues->zone[i].csTopEdge, csFuzz ) )
{
/* bottom edge captured by bottom zone */
if ( blues->suppressOvershoot )
dsNew = blues->zone[i].dsFlatEdge;
- else if ( ( blues->zone[i].csTopEdge - bottomHintEdge->csCoord ) >=
+ else if ( SUB_INT32( blues->zone[i].csTopEdge,
+ bottomHintEdge->csCoord ) >=
blues->blueShift )
{
/* guarantee minimum of 1 pixel overshoot */
@@ -514,7 +515,7 @@
dsNew = cf2_fixedRound( bottomHintEdge->dsCoord );
}
- dsMove = dsNew - bottomHintEdge->dsCoord;
+ dsMove = SUB_INT32( dsNew, bottomHintEdge->dsCoord );
captured = TRUE;
break;
@@ -523,17 +524,18 @@
if ( !blues->zone[i].bottomZone && cf2_hint_isTop( topHintEdge ) )
{
- if ( ( blues->zone[i].csBottomEdge - csFuzz ) <=
- topHintEdge->csCoord &&
+ if ( SUB_INT32( blues->zone[i].csBottomEdge, csFuzz ) <=
+ topHintEdge->csCoord &&
topHintEdge->csCoord <=
- ( blues->zone[i].csTopEdge + csFuzz ) )
+ ADD_INT32( blues->zone[i].csTopEdge, csFuzz ) )
{
/* top edge captured by top zone */
if ( blues->suppressOvershoot )
dsNew = blues->zone[i].dsFlatEdge;
- else if ( ( topHintEdge->csCoord - blues->zone[i].csBottomEdge ) >=
+ else if ( SUB_INT32( topHintEdge->csCoord,
+ blues->zone[i].csBottomEdge ) >=
blues->blueShift )
{
/* guarantee minimum of 1 pixel overshoot */
@@ -548,7 +550,7 @@
dsNew = cf2_fixedRound( topHintEdge->dsCoord );
}
- dsMove = dsNew - topHintEdge->dsCoord;
+ dsMove = SUB_INT32( dsNew, topHintEdge->dsCoord );
captured = TRUE;
break;
@@ -561,13 +563,14 @@
/* move both edges and flag them `locked' */
if ( cf2_hint_isValid( bottomHintEdge ) )
{
- bottomHintEdge->dsCoord += dsMove;
+ bottomHintEdge->dsCoord = ADD_INT32( bottomHintEdge->dsCoord,
+ dsMove );
cf2_hint_lock( bottomHintEdge );
}
if ( cf2_hint_isValid( topHintEdge ) )
{
- topHintEdge->dsCoord += dsMove;
+ topHintEdge->dsCoord = ADD_INT32( topHintEdge->dsCoord, dsMove );
cf2_hint_lock( topHintEdge );
}
}
diff --git a/src/cff/cf2blues.h b/src/psaux/psblues.h
similarity index 96%
rename from src/cff/cf2blues.h
rename to src/psaux/psblues.h
index 2f38fca..25ef684 100644
--- a/src/cff/cf2blues.h
+++ b/src/psaux/psblues.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2blues.h */
+/* psblues.h */
/* */
/* Adobe's code for handling Blue Zones (specification). */
/* */
@@ -65,11 +65,11 @@
*/
-#ifndef __CF2BLUES_H__
-#define __CF2BLUES_H__
+#ifndef PSBLUES_H_
+#define PSBLUES_H_
-#include "cf2glue.h"
+#include "psglue.h"
FT_BEGIN_HEADER
@@ -111,7 +111,7 @@
* Constant used for hint adjustment and for synthetic em box hint
* placement.
*/
-#define CF2_MIN_COUNTER cf2_floatToFixed( 0.5 )
+#define CF2_MIN_COUNTER cf2_doubleToFixed( 0.5 )
/* shared typedef is in cf2glue.h */
@@ -179,7 +179,7 @@
FT_END_HEADER
-#endif /* __CF2BLUES_H__ */
+#endif /* PSBLUES_H_ */
/* END */
diff --git a/src/psaux/psconv.c b/src/psaux/psconv.c
index aca7412..a033850 100644
--- a/src/psaux/psconv.c
+++ b/src/psaux/psconv.c
@@ -4,7 +4,7 @@
/* */
/* Some convenience conversions (body). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -111,6 +111,10 @@
p++;
if ( p == limit )
goto Bad;
+
+ /* only a single sign is allowed */
+ if ( *p == '-' || *p == '+' )
+ return 0;
}
num_limit = 0x7FFFFFFFL / base;
@@ -215,6 +219,10 @@
p++;
if ( p == limit )
goto Bad;
+
+ /* only a single sign is allowed */
+ if ( *p == '-' || *p == '+' )
+ return 0;
}
/* read the integer part */
diff --git a/src/psaux/psconv.h b/src/psaux/psconv.h
index 10f1ff7..d643ffc 100644
--- a/src/psaux/psconv.h
+++ b/src/psaux/psconv.h
@@ -4,7 +4,7 @@
/* */
/* Some convenience conversions (specification). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PSCONV_H__
-#define __PSCONV_H__
+#ifndef PSCONV_H_
+#define PSCONV_H_
#include <ft2build.h>
@@ -65,7 +65,7 @@
FT_END_HEADER
-#endif /* __PSCONV_H__ */
+#endif /* PSCONV_H_ */
/* END */
diff --git a/src/cff/cf2error.c b/src/psaux/pserror.c
similarity index 94%
rename from src/cff/cf2error.c
rename to src/psaux/pserror.c
index b5595a3..9169e52 100644
--- a/src/cff/cf2error.c
+++ b/src/psaux/pserror.c
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2error.c */
+/* pserror.c */
/* */
/* Adobe's code for error handling (body). */
/* */
@@ -36,15 +36,15 @@
/***************************************************************************/
-#include "cf2ft.h"
-#include "cf2error.h"
+#include "psft.h"
+#include "pserror.h"
FT_LOCAL_DEF( void )
cf2_setError( FT_Error* error,
FT_Error value )
{
- if ( error && *error == 0 )
+ if ( error && !*error )
*error = value;
}
diff --git a/src/cff/cf2error.h b/src/psaux/pserror.h
similarity index 93%
rename from src/cff/cf2error.h
rename to src/psaux/pserror.h
index 6453ebc..13d5206 100644
--- a/src/cff/cf2error.h
+++ b/src/psaux/pserror.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2error.h */
+/* pserror.h */
/* */
/* Adobe's code for error handling (specification). */
/* */
@@ -36,13 +36,13 @@
/***************************************************************************/
-#ifndef __CF2ERROR_H__
-#define __CF2ERROR_H__
+#ifndef PSERROR_H_
+#define PSERROR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX CF2_Err_
@@ -50,7 +50,7 @@
#include FT_ERRORS_H
-#include "cf2ft.h"
+#include "psft.h"
FT_BEGIN_HEADER
@@ -66,11 +66,11 @@
* model our error mechanism on a Java-like exception mechanism.
* When we assign an error code we are thus `throwing' an error.
*
- * The perservation of an error code is done by coding convention.
+ * The preservation of an error code is done by coding convention.
* Upon a function call if the error code is anything other than
* `FT_Err_Ok', which is guaranteed to be zero, we
* will return without altering that error. This will allow the
- * error to propogate and be handled at the appropriate location in
+ * error to propagate and be handled at the appropriate location in
* the code.
*
* This allows a style of code where the error code is initialized
@@ -113,7 +113,7 @@
FT_END_HEADER
-#endif /* __CF2ERROR_H__ */
+#endif /* PSERROR_H_ */
/* END */
diff --git a/src/cff/cf2fixed.h b/src/psaux/psfixed.h
similarity index 92%
rename from src/cff/cf2fixed.h
rename to src/psaux/psfixed.h
index d6d9faf..219589e 100644
--- a/src/cff/cf2fixed.h
+++ b/src/psaux/psfixed.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2fixed.h */
+/* psfixed.h */
/* */
/* Adobe's code for Fixed Point Mathematics (specification only). */
/* */
@@ -36,8 +36,8 @@
/***************************************************************************/
-#ifndef __CF2FIXED_H__
-#define __CF2FIXED_H__
+#ifndef PSFIXED_H_
+#define PSFIXED_H_
FT_BEGIN_HEADER
@@ -51,8 +51,8 @@
#define CF2_FIXED_MAX ( (CF2_Fixed)0x7FFFFFFFL )
#define CF2_FIXED_MIN ( (CF2_Fixed)0x80000000L )
-#define CF2_FIXED_ONE 0x10000L
-#define CF2_FIXED_EPSILON 0x0001
+#define CF2_FIXED_ONE ( (CF2_Fixed)0x10000L )
+#define CF2_FIXED_EPSILON ( (CF2_Fixed)0x0001 )
/* in C 89, left and right shift of negative numbers is */
/* implementation specific behaviour in the general case */
@@ -63,10 +63,10 @@
( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) )
#define cf2_fixedRound( x ) \
( (CF2_Fixed)( ( (FT_UInt32)(x) + 0x8000U ) & 0xFFFF0000UL ) )
-#define cf2_floatToFixed( f ) \
+#define cf2_doubleToFixed( f ) \
( (CF2_Fixed)( (f) * 65536.0 + 0.5 ) )
#define cf2_fixedAbs( x ) \
- ( (x) < 0 ? -(x) : (x) )
+ ( (x) < 0 ? NEG_INT32( x ) : (x) )
#define cf2_fixedFloor( x ) \
( (CF2_Fixed)( (FT_UInt32)(x) & 0xFFFF0000UL ) )
#define cf2_fixedFraction( x ) \
@@ -89,7 +89,7 @@
FT_END_HEADER
-#endif /* __CF2FIXED_H__ */
+#endif /* PSFIXED_H_ */
/* END */
diff --git a/src/cff/cf2font.c b/src/psaux/psfont.c
similarity index 89%
rename from src/cff/cf2font.c
rename to src/psaux/psfont.c
index 83fd348..dde67a7 100644
--- a/src/cff/cf2font.c
+++ b/src/psaux/psfont.c
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2font.c */
+/* psfont.c */
/* */
/* Adobe's code for font instances (body). */
/* */
@@ -39,12 +39,12 @@
#include <ft2build.h>
#include FT_INTERNAL_CALC_H
-#include "cf2ft.h"
+#include "psft.h"
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2error.h"
-#include "cf2intrp.h"
+#include "psglue.h"
+#include "psfont.h"
+#include "pserror.h"
+#include "psintrp.h"
/* Compute a stem darkening amount in character space. */
@@ -117,7 +117,7 @@
return;
/* protect against range problems and divide by zero */
- if ( emRatio < cf2_floatToFixed( .01 ) )
+ if ( emRatio < cf2_doubleToFixed( .01 ) )
return;
if ( stemDarkened )
@@ -234,7 +234,8 @@
}
- /* set up values for the current FontDict and matrix */
+ /* set up values for the current FontDict and matrix; */
+ /* called for each glyph to be rendered */
/* caller's transform is adjusted for subpixel positioning */
static void
@@ -242,10 +243,13 @@
const CF2_Matrix* transform )
{
/* pointer to parsed font object */
- CFF_Decoder* decoder = font->decoder;
+ PS_Decoder* decoder = font->decoder;
FT_Bool needExtraSetup = FALSE;
+ CFF_VStoreRec* vstore;
+ FT_Bool hasVariations = FALSE;
+
/* character space units */
CF2_Fixed boldenX = font->syntheticEmboldeningAmountX;
CF2_Fixed boldenY = font->syntheticEmboldeningAmountY;
@@ -253,6 +257,8 @@
CFF_SubFont subFont;
CF2_Fixed ppem;
+ CF2_UInt lenNormalizedV = 0;
+ FT_Fixed* normalizedV = NULL;
/* clear previous error */
font->error = FT_Err_Ok;
@@ -266,6 +272,54 @@
needExtraSetup = TRUE;
}
+ if ( !font->isT1 )
+ {
+ FT_Service_CFFLoad cffload = (FT_Service_CFFLoad)font->cffload;
+
+
+ /* check for variation vectors */
+ vstore = cf2_getVStore( decoder );
+ hasVariations = ( vstore->dataCount != 0 );
+
+ if ( hasVariations )
+ {
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /* check whether Private DICT in this subfont needs to be reparsed */
+ font->error = cf2_getNormalizedVector( decoder,
+ &lenNormalizedV,
+ &normalizedV );
+ if ( font->error )
+ return;
+
+ if ( cffload->blend_check_vector( &subFont->blend,
+ subFont->private_dict.vsindex,
+ lenNormalizedV,
+ normalizedV ) )
+ {
+ /* blend has changed, reparse */
+ cffload->load_private_dict( decoder->cff,
+ subFont,
+ lenNormalizedV,
+ normalizedV );
+ needExtraSetup = TRUE;
+ }
+#endif
+
+ /* copy from subfont */
+ font->blend.font = subFont->blend.font;
+
+ /* clear state of charstring blend */
+ font->blend.usedBV = FALSE;
+
+ /* initialize value for charstring */
+ font->vsindex = subFont->private_dict.vsindex;
+
+ /* store vector inputs for blends in charstring */
+ font->lenNDV = lenNormalizedV;
+ font->NDV = normalizedV;
+ }
+ }
+
/* if ppem has changed, we need to recompute some cached data */
/* note: because of CID font matrix concatenation, ppem and transform */
/* do not necessarily track. */
@@ -398,7 +452,7 @@
/* choose a constant for StdHW that depends on font contrast */
stdHW = cf2_getStdHW( decoder );
- if ( stdHW > 0 && font->stdVW > 2 * stdHW )
+ if ( stdHW > 0 && font->stdVW > MUL_INT32( 2, stdHW ) )
font->stdHW = FT_DivFix( cf2_intToFixed( 75 ), emRatio );
else
{
@@ -423,7 +477,8 @@
/* compute blue zones for this instance */
cf2_blues_init( &font->blues, font );
- }
+
+ } /* needExtraSetup */
}
diff --git a/src/cff/cf2font.h b/src/psaux/psfont.h
similarity index 88%
rename from src/cff/cf2font.h
rename to src/psaux/psfont.h
index 86cf02f..e611ac4 100644
--- a/src/cff/cf2font.h
+++ b/src/psaux/psfont.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2font.h */
+/* psfont.h */
/* */
/* Adobe's code for font instances (specification). */
/* */
@@ -36,12 +36,14 @@
/***************************************************************************/
-#ifndef __CF2FONT_H__
-#define __CF2FONT_H__
+#ifndef PSFONT_H_
+#define PSFONT_H_
-#include "cf2ft.h"
-#include "cf2blues.h"
+#include FT_SERVICE_CFF_TABLE_LOAD_H
+
+#include "psft.h"
+#include "psblues.h"
FT_BEGIN_HEADER
@@ -54,6 +56,7 @@
/* (Hiragino Kaku Gothic ProN W3; */
/* 8.2d6e1; 2014-12-19) that exceed */
/* this limit */
+#define CF2_STORAGE_SIZE 32
/* typedef is in `cf2glue.h' */
@@ -62,6 +65,8 @@
FT_Memory memory;
FT_Error error; /* shared error for this instance */
+ FT_Bool isT1;
+ FT_Bool isCFF2;
CF2_RenderingFlags renderingFlags;
/* variables that depend on Transform: */
@@ -73,6 +78,12 @@
CF2_Matrix outerTransform; /* post hinting; includes rotations */
CF2_Fixed ppem; /* transform-dependent */
+ /* variation data */
+ CFF_BlendRec blend; /* cached charstring blend vector */
+ CF2_UInt vsindex; /* current vsindex */
+ CF2_UInt lenNDV; /* current length NDV or zero */
+ FT_Fixed* NDV; /* ptr to current NDV or NULL */
+
CF2_Int unitsPerEm;
CF2_Fixed syntheticEmboldeningAmountX; /* character space units */
@@ -80,7 +91,7 @@
/* FreeType related members */
CF2_OutlineRec outline; /* freetype glyph outline functions */
- CFF_Decoder* decoder;
+ PS_Decoder* decoder;
CFF_SubFont lastSubfont; /* FreeType parsed data; */
/* top font or subfont */
@@ -102,6 +113,8 @@
/* counterclockwise winding */
CF2_BluesRec blues; /* computed zone data */
+
+ FT_Service_CFFLoad cffload; /* pointer to cff functions */
};
@@ -115,7 +128,7 @@
FT_END_HEADER
-#endif /* __CF2FONT_H__ */
+#endif /* PSFONT_H_ */
/* END */
diff --git a/src/cff/cf2ft.c b/src/psaux/psft.c
similarity index 60%
rename from src/cff/cf2ft.c
rename to src/psaux/psft.c
index d2544a2..1f75017 100644
--- a/src/cff/cf2ft.c
+++ b/src/psaux/psft.c
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2ft.c */
+/* psft.c */
/* */
/* FreeType Glue Component to Adobe's Interpreter (body). */
/* */
@@ -36,11 +36,20 @@
/***************************************************************************/
-#include "cf2ft.h"
+#include "psft.h"
#include FT_INTERNAL_DEBUG_H
-#include "cf2font.h"
-#include "cf2error.h"
+#include "psfont.h"
+#include "pserror.h"
+#include "psobjs.h"
+#include "cffdecode.h"
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#include FT_MULTIPLE_MASTERS_H
+#include FT_SERVICE_MULTIPLE_MASTERS_H
+#endif
+
+#include FT_SERVICE_CFF_TABLE_LOAD_H
#define CF2_MAX_SIZE cf2_intToFixed( 2000 ) /* max ppem */
@@ -83,12 +92,13 @@
cf2_setGlyphWidth( CF2_Outline outline,
CF2_Fixed width )
{
- CFF_Decoder* decoder = outline->decoder;
+ PS_Decoder* decoder = outline->decoder;
FT_ASSERT( decoder );
- decoder->glyph_width = cf2_fixedToInt( width );
+ if ( !decoder->builder.is_t1 )
+ *decoder->glyph_width = cf2_fixedToInt( width );
}
@@ -104,7 +114,8 @@
FT_Memory memory = font->memory;
- (void)memory;
+ FT_FREE( font->blend.lastNDV );
+ FT_FREE( font->blend.BV );
}
}
@@ -121,8 +132,8 @@
const CF2_CallbackParams params )
{
/* downcast the object pointer */
- CF2_Outline outline = (CF2_Outline)callbacks;
- CFF_Builder* builder;
+ CF2_Outline outline = (CF2_Outline)callbacks;
+ PS_Builder* builder;
(void)params; /* only used in debug mode */
@@ -133,7 +144,7 @@
builder = &outline->decoder->builder;
/* note: two successive moves simply close the contour twice */
- cff_builder_close_contour( builder );
+ ps_builder_close_contour( builder );
builder->path_begun = 0;
}
@@ -145,8 +156,8 @@
FT_Error error;
/* downcast the object pointer */
- CF2_Outline outline = (CF2_Outline)callbacks;
- CFF_Builder* builder;
+ CF2_Outline outline = (CF2_Outline)callbacks;
+ PS_Builder* builder;
FT_ASSERT( outline && outline->decoder );
@@ -158,9 +169,9 @@
{
/* record the move before the line; also check points and set */
/* `path_begun' */
- error = cff_builder_start_point( builder,
- params->pt0.x,
- params->pt0.y );
+ error = ps_builder_start_point( builder,
+ params->pt0.x,
+ params->pt0.y );
if ( error )
{
if ( !*callbacks->error )
@@ -169,10 +180,10 @@
}
}
- /* `cff_builder_add_point1' includes a check_points call for one point */
- error = cff_builder_add_point1( builder,
- params->pt1.x,
- params->pt1.y );
+ /* `ps_builder_add_point1' includes a check_points call for one point */
+ error = ps_builder_add_point1( builder,
+ params->pt1.x,
+ params->pt1.y );
if ( error )
{
if ( !*callbacks->error )
@@ -189,8 +200,8 @@
FT_Error error;
/* downcast the object pointer */
- CF2_Outline outline = (CF2_Outline)callbacks;
- CFF_Builder* builder;
+ CF2_Outline outline = (CF2_Outline)callbacks;
+ PS_Builder* builder;
FT_ASSERT( outline && outline->decoder );
@@ -202,9 +213,9 @@
{
/* record the move before the line; also check points and set */
/* `path_begun' */
- error = cff_builder_start_point( builder,
- params->pt0.x,
- params->pt0.y );
+ error = ps_builder_start_point( builder,
+ params->pt0.x,
+ params->pt0.y );
if ( error )
{
if ( !*callbacks->error )
@@ -214,7 +225,7 @@
}
/* prepare room for 3 points: 2 off-curve, 1 on-curve */
- error = cff_check_points( builder, 3 );
+ error = ps_builder_check_points( builder, 3 );
if ( error )
{
if ( !*callbacks->error )
@@ -222,15 +233,15 @@
return;
}
- cff_builder_add_point( builder,
- params->pt1.x,
- params->pt1.y, 0 );
- cff_builder_add_point( builder,
- params->pt2.x,
- params->pt2.y, 0 );
- cff_builder_add_point( builder,
- params->pt3.x,
- params->pt3.y, 1 );
+ ps_builder_add_point( builder,
+ params->pt1.x,
+ params->pt1.y, 0 );
+ ps_builder_add_point( builder,
+ params->pt2.x,
+ params->pt2.y, 0 );
+ ps_builder_add_point( builder,
+ params->pt3.x,
+ params->pt3.y, 1 );
}
@@ -239,7 +250,7 @@
FT_Memory memory,
FT_Error* error )
{
- FT_MEM_ZERO( outline, sizeof ( CF2_OutlineRec ) );
+ FT_ZERO( outline );
outline->root.memory = memory;
outline->root.error = error;
@@ -252,11 +263,11 @@
/* get scaling and hint flag from GlyphSlot */
static void
- cf2_getScaleAndHintFlag( CFF_Decoder* decoder,
- CF2_Fixed* x_scale,
- CF2_Fixed* y_scale,
- FT_Bool* hinted,
- FT_Bool* scaled )
+ cf2_getScaleAndHintFlag( PS_Decoder* decoder,
+ CF2_Fixed* x_scale,
+ CF2_Fixed* y_scale,
+ FT_Bool* hinted,
+ FT_Bool* scaled )
{
FT_ASSERT( decoder && decoder->builder.glyph );
@@ -266,8 +277,8 @@
if ( *hinted )
{
- *x_scale = ( decoder->builder.glyph->x_scale + 32 ) / 64;
- *y_scale = ( decoder->builder.glyph->y_scale + 32 ) / 64;
+ *x_scale = ADD_INT32( decoder->builder.glyph->x_scale, 32 ) / 64;
+ *y_scale = ADD_INT32( decoder->builder.glyph->y_scale, 32 ) / 64;
}
else
{
@@ -283,47 +294,60 @@
/* get units per em from `FT_Face' */
/* TODO: should handle font matrix concatenation? */
static FT_UShort
- cf2_getUnitsPerEm( CFF_Decoder* decoder )
+ cf2_getUnitsPerEm( PS_Decoder* decoder )
{
FT_ASSERT( decoder && decoder->builder.face );
- FT_ASSERT( decoder->builder.face->root.units_per_EM );
+ FT_ASSERT( decoder->builder.face->units_per_EM );
- return decoder->builder.face->root.units_per_EM;
+ return decoder->builder.face->units_per_EM;
}
/* Main entry point: Render one glyph. */
FT_LOCAL_DEF( FT_Error )
- cf2_decoder_parse_charstrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_ULong charstring_len )
+ cf2_decoder_parse_charstrings( PS_Decoder* decoder,
+ FT_Byte* charstring_base,
+ FT_ULong charstring_len )
{
FT_Memory memory;
FT_Error error = FT_Err_Ok;
CF2_Font font;
+ FT_Bool is_t1 = decoder->builder.is_t1;
- FT_ASSERT( decoder && decoder->cff );
+
+ FT_ASSERT( decoder &&
+ ( is_t1 || decoder->cff ) );
+
+ if ( is_t1 && !decoder->current_subfont )
+ {
+ FT_ERROR(( "cf2_decoder_parse_charstrings (Type 1): "
+ "SubFont missing. Use `t1_make_subfont' first\n" ));
+ return FT_THROW( Invalid_Table );
+ }
memory = decoder->builder.memory;
/* CF2 data is saved here across glyphs */
- font = (CF2_Font)decoder->cff->cf2_instance.data;
+ font = (CF2_Font)decoder->cf2_instance->data;
/* on first glyph, allocate instance structure */
- if ( decoder->cff->cf2_instance.data == NULL )
+ if ( !decoder->cf2_instance->data )
{
- decoder->cff->cf2_instance.finalizer =
+ decoder->cf2_instance->finalizer =
(FT_Generic_Finalizer)cf2_free_instance;
- if ( FT_ALLOC( decoder->cff->cf2_instance.data,
+ if ( FT_ALLOC( decoder->cf2_instance->data,
sizeof ( CF2_FontRec ) ) )
return FT_THROW( Out_Of_Memory );
- font = (CF2_Font)decoder->cff->cf2_instance.data;
+ font = (CF2_Font)decoder->cf2_instance->data;
font->memory = memory;
+ if ( !is_t1 )
+ font->cffload = (FT_Service_CFFLoad)decoder->cff->cffload;
+
/* initialize a client outline, to be shared by each glyph rendered */
cf2_outline_init( &font->outline, font->memory, &font->error );
}
@@ -336,8 +360,13 @@
{
/* build parameters for Adobe engine */
- CFF_Builder* builder = &decoder->builder;
- CFF_Driver driver = (CFF_Driver)FT_FACE_DRIVER( builder->face );
+ PS_Builder* builder = &decoder->builder;
+ PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( builder->face );
+
+ FT_Bool no_stem_darkening_driver =
+ driver->no_stem_darkening;
+ FT_Char no_stem_darkening_font =
+ builder->face->internal->no_stem_darkening;
/* local error */
FT_Error error2 = FT_Err_Ok;
@@ -366,10 +395,21 @@
&hinted,
&scaled );
+ if ( is_t1 )
+ font->isCFF2 = FALSE;
+ else
+ {
+ /* copy isCFF2 boolean from TT_Face to CF2_Font */
+ font->isCFF2 = ((TT_Face)builder->face)->is_cff2;
+ }
+ font->isT1 = is_t1;
+
font->renderingFlags = 0;
if ( hinted )
font->renderingFlags |= CF2_FlagsHinted;
- if ( scaled && !driver->no_stem_darkening )
+ if ( scaled && ( !no_stem_darkening_font ||
+ ( no_stem_darkening_font < 0 &&
+ !no_stem_darkening_driver ) ) )
font->renderingFlags |= CF2_FlagsDarkened;
font->darkenParams[0] = driver->darken_params[0];
@@ -405,7 +445,7 @@
/* get pointer to current FreeType subfont (based on current glyphID) */
FT_LOCAL_DEF( CFF_SubFont )
- cf2_getSubfont( CFF_Decoder* decoder )
+ cf2_getSubfont( PS_Decoder* decoder )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -413,13 +453,59 @@
}
+ /* get pointer to VStore structure */
+ FT_LOCAL_DEF( CFF_VStore )
+ cf2_getVStore( PS_Decoder* decoder )
+ {
+ FT_ASSERT( decoder && decoder->cff );
+
+ return &decoder->cff->vstore;
+ }
+
+
+ /* get maxstack value from CFF2 Top DICT */
+ FT_LOCAL_DEF( FT_UInt )
+ cf2_getMaxstack( PS_Decoder* decoder )
+ {
+ FT_ASSERT( decoder && decoder->cff );
+
+ return decoder->cff->top_font.font_dict.maxstack;
+ }
+
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /* Get normalized design vector for current render request; */
+ /* return pointer and length. */
+ /* */
+ /* Note: Uses FT_Fixed not CF2_Fixed for the vector. */
+ FT_LOCAL_DEF( FT_Error )
+ cf2_getNormalizedVector( PS_Decoder* decoder,
+ CF2_UInt *len,
+ FT_Fixed* *vec )
+ {
+ TT_Face face;
+ FT_Service_MultiMasters mm;
+
+
+ FT_ASSERT( decoder && decoder->builder.face );
+ FT_ASSERT( vec && len );
+ FT_ASSERT( !decoder->builder.is_t1 );
+
+ face = (TT_Face)decoder->builder.face;
+ mm = (FT_Service_MultiMasters)face->mm;
+
+ return mm->get_var_blend( FT_FACE( face ), len, NULL, vec, NULL );
+ }
+#endif
+
+
/* get `y_ppem' from `CFF_Size' */
FT_LOCAL_DEF( CF2_Fixed )
- cf2_getPpemY( CFF_Decoder* decoder )
+ cf2_getPpemY( PS_Decoder* decoder )
{
- FT_ASSERT( decoder &&
- decoder->builder.face &&
- decoder->builder.face->root.size );
+ FT_ASSERT( decoder &&
+ decoder->builder.face &&
+ decoder->builder.face->size );
/*
* Note that `y_ppem' can be zero if there wasn't a call to
@@ -431,7 +517,7 @@
*
*/
return cf2_intToFixed(
- decoder->builder.face->root.size->metrics.y_ppem );
+ decoder->builder.face->size->metrics.y_ppem );
}
@@ -439,7 +525,7 @@
/* FreeType stores these as integer font units */
/* (note: variable names seem swapped) */
FT_LOCAL_DEF( CF2_Fixed )
- cf2_getStdVW( CFF_Decoder* decoder )
+ cf2_getStdVW( PS_Decoder* decoder )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -449,7 +535,7 @@
FT_LOCAL_DEF( CF2_Fixed )
- cf2_getStdHW( CFF_Decoder* decoder )
+ cf2_getStdHW( PS_Decoder* decoder )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -460,10 +546,10 @@
/* note: FreeType stores 1000 times the actual value for `BlueScale' */
FT_LOCAL_DEF( void )
- cf2_getBlueMetrics( CFF_Decoder* decoder,
- CF2_Fixed* blueScale,
- CF2_Fixed* blueShift,
- CF2_Fixed* blueFuzz )
+ cf2_getBlueMetrics( PS_Decoder* decoder,
+ CF2_Fixed* blueScale,
+ CF2_Fixed* blueShift,
+ CF2_Fixed* blueFuzz )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -480,9 +566,9 @@
/* get blue values counts and arrays; the FreeType parser has validated */
/* the counts and verified that each is an even number */
FT_LOCAL_DEF( void )
- cf2_getBlueValues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
+ cf2_getBlueValues( PS_Decoder* decoder,
+ size_t* count,
+ FT_Pos* *data )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -493,9 +579,9 @@
FT_LOCAL_DEF( void )
- cf2_getOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
+ cf2_getOtherBlues( PS_Decoder* decoder,
+ size_t* count,
+ FT_Pos* *data )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -506,9 +592,9 @@
FT_LOCAL_DEF( void )
- cf2_getFamilyBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
+ cf2_getFamilyBlues( PS_Decoder* decoder,
+ size_t* count,
+ FT_Pos* *data )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -519,9 +605,9 @@
FT_LOCAL_DEF( void )
- cf2_getFamilyOtherBlues( CFF_Decoder* decoder,
- size_t* count,
- FT_Pos* *data )
+ cf2_getFamilyOtherBlues( PS_Decoder* decoder,
+ size_t* count,
+ FT_Pos* *data )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -532,7 +618,7 @@
FT_LOCAL_DEF( CF2_Int )
- cf2_getLanguageGroup( CFF_Decoder* decoder )
+ cf2_getLanguageGroup( PS_Decoder* decoder )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -543,15 +629,18 @@
/* convert unbiased subroutine index to `CF2_Buffer' and */
/* return 0 on success */
FT_LOCAL_DEF( CF2_Int )
- cf2_initGlobalRegionBuffer( CFF_Decoder* decoder,
- CF2_UInt idx,
- CF2_Buffer buf )
+ cf2_initGlobalRegionBuffer( PS_Decoder* decoder,
+ CF2_Int subrNum,
+ CF2_Buffer buf )
{
+ CF2_UInt idx;
+
+
FT_ASSERT( decoder );
FT_ZERO( buf );
- idx += (CF2_UInt)decoder->globals_bias;
+ idx = (CF2_UInt)( subrNum + decoder->globals_bias );
if ( idx >= decoder->num_globals )
return TRUE; /* error */
@@ -568,9 +657,9 @@
/* convert AdobeStandardEncoding code to CF2_Buffer; */
/* used for seac component */
FT_LOCAL_DEF( FT_Error )
- cf2_getSeacComponent( CFF_Decoder* decoder,
- CF2_Int code,
- CF2_Buffer buf )
+ cf2_getSeacComponent( PS_Decoder* decoder,
+ CF2_Int code,
+ CF2_Buffer buf )
{
CF2_Int gid;
FT_Byte* charstring;
@@ -579,13 +668,14 @@
FT_ASSERT( decoder );
+ FT_ASSERT( !decoder->builder.is_t1 );
FT_ZERO( buf );
#ifdef FT_CONFIG_OPTION_INCREMENTAL
/* Incremental fonts don't necessarily have valid charsets. */
/* They use the character code, not the glyph index, in this case. */
- if ( decoder->builder.face->root.internal->incremental_interface )
+ if ( decoder->builder.face->internal->incremental_interface )
gid = code;
else
#endif /* FT_CONFIG_OPTION_INCREMENTAL */
@@ -595,10 +685,10 @@
return FT_THROW( Invalid_Glyph_Format );
}
- error = cff_get_glyph_data( decoder->builder.face,
- (CF2_UInt)gid,
- &charstring,
- &len );
+ error = decoder->get_glyph_callback( (TT_Face)decoder->builder.face,
+ (CF2_UInt)gid,
+ &charstring,
+ &len );
/* TODO: for now, just pass the FreeType error through */
if ( error )
return error;
@@ -615,42 +705,142 @@
FT_LOCAL_DEF( void )
- cf2_freeSeacComponent( CFF_Decoder* decoder,
- CF2_Buffer buf )
+ cf2_freeSeacComponent( PS_Decoder* decoder,
+ CF2_Buffer buf )
{
FT_ASSERT( decoder );
+ FT_ASSERT( !decoder->builder.is_t1 );
- cff_free_glyph_data( decoder->builder.face,
- (FT_Byte**)&buf->start,
- (FT_ULong)( buf->end - buf->start ) );
+ decoder->free_glyph_callback( (TT_Face)decoder->builder.face,
+ (FT_Byte**)&buf->start,
+ (FT_ULong)( buf->end - buf->start ) );
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ cf2_getT1SeacComponent( PS_Decoder* decoder,
+ FT_UInt glyph_index,
+ CF2_Buffer buf )
+ {
+ FT_Data glyph_data;
+ FT_Error error = FT_Err_Ok;
+ T1_Face face = (T1_Face)decoder->builder.face;
+ T1_Font type1 = &face->type1;
+
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+ FT_Incremental_InterfaceRec *inc =
+ face->root.internal->incremental_interface;
+
+
+ /* For incremental fonts get the character data using the */
+ /* callback function. */
+ if ( inc )
+ error = inc->funcs->get_glyph_data( inc->object,
+ glyph_index, &glyph_data );
+ else
+#endif
+ /* For ordinary fonts get the character data stored in the face record. */
+ {
+ glyph_data.pointer = type1->charstrings[glyph_index];
+ glyph_data.length = (FT_Int)type1->charstrings_len[glyph_index];
+ }
+
+ if ( !error )
+ {
+ FT_Byte* charstring_base = (FT_Byte*)glyph_data.pointer;
+ FT_ULong charstring_len = (FT_ULong)glyph_data.length;
+
+
+ FT_ASSERT( charstring_base + charstring_len >= charstring_base );
+
+ FT_ZERO( buf );
+ buf->start =
+ buf->ptr = charstring_base;
+ buf->end = charstring_base + charstring_len;
+ }
+
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ cf2_freeT1SeacComponent( PS_Decoder* decoder,
+ CF2_Buffer buf )
+ {
+ T1_Face face;
+ FT_Data data;
+
+
+ FT_ASSERT( decoder );
+
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+ face = (T1_Face)decoder->builder.face;
+
+ data.pointer = buf->start;
+ data.length = (FT_Int)( buf->end - buf->start );
+
+ if ( face->root.internal->incremental_interface )
+ face->root.internal->incremental_interface->funcs->free_glyph_data(
+ face->root.internal->incremental_interface->object,
+ &data );
+#endif /* FT_CONFIG_OPTION_INCREMENTAL */
}
FT_LOCAL_DEF( CF2_Int )
- cf2_initLocalRegionBuffer( CFF_Decoder* decoder,
- CF2_UInt idx,
- CF2_Buffer buf )
+ cf2_initLocalRegionBuffer( PS_Decoder* decoder,
+ CF2_Int subrNum,
+ CF2_Buffer buf )
{
+ CF2_UInt idx;
+
+
FT_ASSERT( decoder );
FT_ZERO( buf );
- idx += (CF2_UInt)decoder->locals_bias;
+ idx = (CF2_UInt)( subrNum + decoder->locals_bias );
if ( idx >= decoder->num_locals )
return TRUE; /* error */
FT_ASSERT( decoder->locals );
- buf->start =
- buf->ptr = decoder->locals[idx];
- buf->end = decoder->locals[idx + 1];
+ buf->start = decoder->locals[idx];
+
+ if ( decoder->builder.is_t1 )
+ {
+ /* The Type 1 driver stores subroutines without the seed bytes. */
+ /* The CID driver stores subroutines with seed bytes. This */
+ /* case is taken care of when decoder->subrs_len == 0. */
+ if ( decoder->locals_len )
+ buf->end = buf->start + decoder->locals_len[idx];
+ else
+ {
+ /* We are using subroutines from a CID font. We must adjust */
+ /* for the seed bytes. */
+ buf->start += ( decoder->lenIV >= 0 ? decoder->lenIV : 0 );
+ buf->end = decoder->locals[idx + 1];
+ }
+
+ if ( !buf->start )
+ {
+ FT_ERROR(( "cf2_initLocalRegionBuffer (Type 1 mode):"
+ " invoking empty subrs\n" ));
+ }
+ }
+ else
+ {
+ buf->end = decoder->locals[idx + 1];
+ }
+
+ buf->ptr = buf->start;
return FALSE; /* success */
}
FT_LOCAL_DEF( CF2_Fixed )
- cf2_getDefaultWidthX( CFF_Decoder* decoder )
+ cf2_getDefaultWidthX( PS_Decoder* decoder )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -660,7 +850,7 @@
FT_LOCAL_DEF( CF2_Fixed )
- cf2_getNominalWidthX( CFF_Decoder* decoder )
+ cf2_getNominalWidthX( PS_Decoder* decoder )
{
FT_ASSERT( decoder && decoder->current_subfont );
@@ -672,7 +862,7 @@
FT_LOCAL_DEF( void )
cf2_outline_reset( CF2_Outline outline )
{
- CFF_Decoder* decoder = outline->decoder;
+ PS_Decoder* decoder = outline->decoder;
FT_ASSERT( decoder );
@@ -686,12 +876,12 @@
FT_LOCAL_DEF( void )
cf2_outline_close( CF2_Outline outline )
{
- CFF_Decoder* decoder = outline->decoder;
+ PS_Decoder* decoder = outline->decoder;
FT_ASSERT( decoder );
- cff_builder_close_contour( &decoder->builder );
+ ps_builder_close_contour( &decoder->builder );
FT_GlyphLoader_Add( decoder->builder.loader );
}
diff --git a/src/psaux/psft.h b/src/psaux/psft.h
new file mode 100644
index 0000000..ab17211
--- /dev/null
+++ b/src/psaux/psft.h
@@ -0,0 +1,167 @@
+/***************************************************************************/
+/* */
+/* psft.h */
+/* */
+/* FreeType Glue Component to Adobe's Interpreter (specification). */
+/* */
+/* Copyright 2013 Adobe Systems Incorporated. */
+/* */
+/* This software, and all works of authorship, whether in source or */
+/* object code form as indicated by the copyright notice(s) included */
+/* herein (collectively, the "Work") is made available, and may only be */
+/* used, modified, and distributed under the FreeType Project License, */
+/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
+/* FreeType Project License, each contributor to the Work hereby grants */
+/* to any individual or legal entity exercising permissions granted by */
+/* the FreeType Project License and this section (hereafter, "You" or */
+/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
+/* royalty-free, irrevocable (except as stated in this section) patent */
+/* license to make, have made, use, offer to sell, sell, import, and */
+/* otherwise transfer the Work, where such license applies only to those */
+/* patent claims licensable by such contributor that are necessarily */
+/* infringed by their contribution(s) alone or by combination of their */
+/* contribution(s) with the Work to which such contribution(s) was */
+/* submitted. If You institute patent litigation against any entity */
+/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
+/* the Work or a contribution incorporated within the Work constitutes */
+/* direct or contributory patent infringement, then any patent licenses */
+/* granted to You under this License for that Work shall terminate as of */
+/* the date such litigation is filed. */
+/* */
+/* By using, modifying, or distributing the Work you indicate that you */
+/* have read and understood the terms and conditions of the */
+/* FreeType Project License as well as those provided in this section, */
+/* and you accept them fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef PSFT_H_
+#define PSFT_H_
+
+
+#include "pstypes.h"
+
+
+ /* TODO: disable asserts for now */
+#define CF2_NDEBUG
+
+
+#include FT_SYSTEM_H
+
+#include "psglue.h"
+#include FT_INTERNAL_POSTSCRIPT_AUX_H /* for PS_Decoder */
+
+
+FT_BEGIN_HEADER
+
+
+ FT_LOCAL( FT_Error )
+ cf2_decoder_parse_charstrings( PS_Decoder* decoder,
+ FT_Byte* charstring_base,
+ FT_ULong charstring_len );
+
+ FT_LOCAL( CFF_SubFont )
+ cf2_getSubfont( PS_Decoder* decoder );
+
+ FT_LOCAL( CFF_VStore )
+ cf2_getVStore( PS_Decoder* decoder );
+
+ FT_LOCAL( FT_UInt )
+ cf2_getMaxstack( PS_Decoder* decoder );
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ FT_LOCAL( FT_Error )
+ cf2_getNormalizedVector( PS_Decoder* decoder,
+ CF2_UInt *len,
+ FT_Fixed* *vec );
+#endif
+
+ FT_LOCAL( CF2_Fixed )
+ cf2_getPpemY( PS_Decoder* decoder );
+ FT_LOCAL( CF2_Fixed )
+ cf2_getStdVW( PS_Decoder* decoder );
+ FT_LOCAL( CF2_Fixed )
+ cf2_getStdHW( PS_Decoder* decoder );
+
+ FT_LOCAL( void )
+ cf2_getBlueMetrics( PS_Decoder* decoder,
+ CF2_Fixed* blueScale,
+ CF2_Fixed* blueShift,
+ CF2_Fixed* blueFuzz );
+ FT_LOCAL( void )
+ cf2_getBlueValues( PS_Decoder* decoder,
+ size_t* count,
+ FT_Pos* *data );
+ FT_LOCAL( void )
+ cf2_getOtherBlues( PS_Decoder* decoder,
+ size_t* count,
+ FT_Pos* *data );
+ FT_LOCAL( void )
+ cf2_getFamilyBlues( PS_Decoder* decoder,
+ size_t* count,
+ FT_Pos* *data );
+ FT_LOCAL( void )
+ cf2_getFamilyOtherBlues( PS_Decoder* decoder,
+ size_t* count,
+ FT_Pos* *data );
+
+ FT_LOCAL( CF2_Int )
+ cf2_getLanguageGroup( PS_Decoder* decoder );
+
+ FT_LOCAL( CF2_Int )
+ cf2_initGlobalRegionBuffer( PS_Decoder* decoder,
+ CF2_Int subrNum,
+ CF2_Buffer buf );
+ FT_LOCAL( FT_Error )
+ cf2_getSeacComponent( PS_Decoder* decoder,
+ CF2_Int code,
+ CF2_Buffer buf );
+ FT_LOCAL( void )
+ cf2_freeSeacComponent( PS_Decoder* decoder,
+ CF2_Buffer buf );
+ FT_LOCAL( CF2_Int )
+ cf2_initLocalRegionBuffer( PS_Decoder* decoder,
+ CF2_Int subrNum,
+ CF2_Buffer buf );
+
+ FT_LOCAL( CF2_Fixed )
+ cf2_getDefaultWidthX( PS_Decoder* decoder );
+ FT_LOCAL( CF2_Fixed )
+ cf2_getNominalWidthX( PS_Decoder* decoder );
+
+
+ FT_LOCAL( FT_Error )
+ cf2_getT1SeacComponent( PS_Decoder* decoder,
+ FT_UInt glyph_index,
+ CF2_Buffer buf );
+ FT_LOCAL( void )
+ cf2_freeT1SeacComponent( PS_Decoder* decoder,
+ CF2_Buffer buf );
+
+ /*
+ * FreeType client outline
+ *
+ * process output from the charstring interpreter
+ */
+ typedef struct CF2_OutlineRec_
+ {
+ CF2_OutlineCallbacksRec root; /* base class must be first */
+ PS_Decoder* decoder;
+
+ } CF2_OutlineRec, *CF2_Outline;
+
+
+ FT_LOCAL( void )
+ cf2_outline_reset( CF2_Outline outline );
+ FT_LOCAL( void )
+ cf2_outline_close( CF2_Outline outline );
+
+
+FT_END_HEADER
+
+
+#endif /* PSFT_H_ */
+
+
+/* END */
diff --git a/src/cff/cf2glue.h b/src/psaux/psglue.h
similarity index 95%
rename from src/cff/cf2glue.h
rename to src/psaux/psglue.h
index a24da39..5545e12 100644
--- a/src/cff/cf2glue.h
+++ b/src/psaux/psglue.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2glue.h */
+/* psglue.h */
/* */
/* Adobe's code for shared stuff (specification only). */
/* */
@@ -36,15 +36,15 @@
/***************************************************************************/
-#ifndef __CF2GLUE_H__
-#define __CF2GLUE_H__
+#ifndef PSGLUE_H_
+#define PSGLUE_H_
/* common includes for other modules */
-#include "cf2error.h"
-#include "cf2fixed.h"
-#include "cf2arrst.h"
-#include "cf2read.h"
+#include "pserror.h"
+#include "psfixed.h"
+#include "psarrst.h"
+#include "psread.h"
FT_BEGIN_HEADER
@@ -138,7 +138,7 @@
FT_END_HEADER
-#endif /* __CF2GLUE_H__ */
+#endif /* PSGLUE_H_ */
/* END */
diff --git a/src/cff/cf2hints.c b/src/psaux/pshints.c
similarity index 85%
rename from src/cff/cf2hints.c
rename to src/psaux/pshints.c
index 0e27000..3615196 100644
--- a/src/cff/cf2hints.c
+++ b/src/psaux/pshints.c
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2hints.c */
+/* pshints.c */
/* */
/* Adobe's code for handling CFF hints (body). */
/* */
@@ -36,13 +36,13 @@
/***************************************************************************/
-#include "cf2ft.h"
+#include "psft.h"
#include FT_INTERNAL_DEBUG_H
-#include "cf2glue.h"
-#include "cf2font.h"
-#include "cf2hints.h"
-#include "cf2intrp.h"
+#include "psglue.h"
+#include "psfont.h"
+#include "pshints.h"
+#include "psintrp.h"
/*************************************************************************/
@@ -74,8 +74,8 @@
/* cross product of pt1 position from origin with pt2 position from */
/* pt1; we reduce the precision so that the result fits into 32 bits */
- return ( x1 >> 16 ) * ( ( y2 - y1 ) >> 16 ) -
- ( y1 >> 16 ) * ( ( x2 - x1 ) >> 16 );
+ return ( x1 >> 16 ) * ( SUB_INT32( y2, y1 ) >> 16 ) -
+ ( y1 >> 16 ) * ( SUB_INT32( x2, x1 ) >> 16 );
}
@@ -105,7 +105,7 @@
stemHintArray,
indexStemHint );
- width = stemHint->max - stemHint->min;
+ width = SUB_INT32( stemHint->max, stemHint->min );
if ( width == cf2_intToFixed( -21 ) )
{
@@ -185,11 +185,11 @@
/* darkening. Bottoms are not changed; tops are incremented by twice */
/* `darkenY'. */
if ( cf2_hint_isTop( hint ) )
- hint->csCoord += 2 * font->darkenY;
+ hint->csCoord = ADD_INT32( hint->csCoord, 2 * font->darkenY );
- hint->csCoord += hintOrigin;
- hint->scale = scale;
- hint->index = indexStemHint; /* index in original stem hint array */
+ hint->csCoord = ADD_INT32( hint->csCoord, hintOrigin );
+ hint->scale = scale;
+ hint->index = indexStemHint; /* index in original stem hint array */
/* if original stem hint has been used, use the same position */
if ( hint->flags != 0 && stemHint->used )
@@ -299,6 +299,36 @@
}
+ static void
+ cf2_hintmap_dump( CF2_HintMap hintmap )
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ CF2_UInt i;
+
+
+ FT_TRACE6(( " index csCoord dsCoord scale flags\n" ));
+
+ for ( i = 0; i < hintmap->count; i++ )
+ {
+ CF2_Hint hint = &hintmap->edge[i];
+
+
+ FT_TRACE6(( " %3d %7.2f %7.2f %5d %s%s%s%s\n",
+ hint->index,
+ hint->csCoord / 65536.0,
+ hint->dsCoord / ( hint->scale * 1.0 ),
+ hint->scale,
+ ( cf2_hint_isPair( hint ) ? "p" : "g" ),
+ ( cf2_hint_isTop( hint ) ? "t" : "b" ),
+ ( cf2_hint_isLocked( hint ) ? "L" : ""),
+ ( cf2_hint_isSynthetic( hint ) ? "S" : "" ) ));
+ }
+#else
+ FT_UNUSED( hintmap );
+#endif
+ }
+
+
/* transform character space coordinate to device space using hint map */
static CF2_Fixed
cf2_hintmap_map( CF2_HintMap hintmap,
@@ -314,6 +344,7 @@
/* start linear search from last hit */
CF2_UInt i = hintmap->lastIndex;
+
FT_ASSERT( hintmap->lastIndex < CF2_MAX_HINT_EDGES );
/* search up */
@@ -330,9 +361,10 @@
if ( i == 0 && csCoord < hintmap->edge[0].csCoord )
{
/* special case for points below first edge: use uniform scale */
- return FT_MulFix( csCoord - hintmap->edge[0].csCoord,
- hintmap->scale ) +
- hintmap->edge[0].dsCoord;
+ return ADD_INT32( FT_MulFix( SUB_INT32( csCoord,
+ hintmap->edge[0].csCoord ),
+ hintmap->scale ),
+ hintmap->edge[0].dsCoord );
}
else
{
@@ -340,9 +372,10 @@
* Note: entries with duplicate csCoord are allowed.
* Use edge[i], the highest entry where csCoord >= entry[i].csCoord
*/
- return FT_MulFix( csCoord - hintmap->edge[i].csCoord,
- hintmap->edge[i].scale ) +
- hintmap->edge[i].dsCoord;
+ return ADD_INT32( FT_MulFix( SUB_INT32( csCoord,
+ hintmap->edge[i].csCoord ),
+ hintmap->edge[i].scale ),
+ hintmap->edge[i].dsCoord );
}
}
}
@@ -401,10 +434,10 @@
/* calculate all four possibilities; moves down are negative */
CF2_Fixed downMoveDown = 0 - fracDown;
CF2_Fixed upMoveDown = 0 - fracUp;
- CF2_Fixed downMoveUp = fracDown == 0
+ CF2_Fixed downMoveUp = ( fracDown == 0 )
? 0
: cf2_intToFixed( 1 ) - fracDown;
- CF2_Fixed upMoveUp = fracUp == 0
+ CF2_Fixed upMoveUp = ( fracUp == 0 )
? 0
: cf2_intToFixed( 1 ) - fracUp;
@@ -437,14 +470,16 @@
/* is there room to move up? */
/* there is if we are at top of array or the next edge is at or */
/* beyond proposed move up? */
- if ( j >= hintmap->count - 1 ||
+ if ( j >= hintmap->count - 1 ||
hintmap->edge[j + 1].dsCoord >=
- hintmap->edge[j].dsCoord + moveUp + upMinCounter )
+ ADD_INT32( hintmap->edge[j].dsCoord,
+ moveUp + upMinCounter ) )
{
/* there is room to move up; is there also room to move down? */
- if ( i == 0 ||
+ if ( i == 0 ||
hintmap->edge[i - 1].dsCoord <=
- hintmap->edge[i].dsCoord + moveDown - downMinCounter )
+ ADD_INT32( hintmap->edge[i].dsCoord,
+ moveDown - downMinCounter ) )
{
/* move smaller absolute amount */
move = ( -moveDown < moveUp ) ? moveDown : moveUp; /* optimum */
@@ -455,9 +490,10 @@
else
{
/* is there room to move down? */
- if ( i == 0 ||
+ if ( i == 0 ||
hintmap->edge[i - 1].dsCoord <=
- hintmap->edge[i].dsCoord + moveDown - downMinCounter )
+ ADD_INT32( hintmap->edge[i].dsCoord,
+ moveDown - downMinCounter ) )
{
move = moveDown;
/* true if non-optimum move */
@@ -491,9 +527,11 @@
}
/* move the edge(s) */
- hintmap->edge[i].dsCoord += move;
+ hintmap->edge[i].dsCoord = ADD_INT32( hintmap->edge[i].dsCoord,
+ move );
if ( isPair )
- hintmap->edge[j].dsCoord += move;
+ hintmap->edge[j].dsCoord = ADD_INT32( hintmap->edge[j].dsCoord,
+ move );
}
/* assert there are no overlaps in device space */
@@ -507,18 +545,20 @@
{
if ( hintmap->edge[i].csCoord != hintmap->edge[i - 1].csCoord )
hintmap->edge[i - 1].scale =
- FT_DivFix(
- hintmap->edge[i].dsCoord - hintmap->edge[i - 1].dsCoord,
- hintmap->edge[i].csCoord - hintmap->edge[i - 1].csCoord );
+ FT_DivFix( SUB_INT32( hintmap->edge[i].dsCoord,
+ hintmap->edge[i - 1].dsCoord ),
+ SUB_INT32( hintmap->edge[i].csCoord,
+ hintmap->edge[i - 1].csCoord ) );
}
if ( isPair )
{
if ( hintmap->edge[j].csCoord != hintmap->edge[j - 1].csCoord )
hintmap->edge[j - 1].scale =
- FT_DivFix(
- hintmap->edge[j].dsCoord - hintmap->edge[j - 1].dsCoord,
- hintmap->edge[j].csCoord - hintmap->edge[j - 1].csCoord );
+ FT_DivFix( SUB_INT32( hintmap->edge[j].dsCoord,
+ hintmap->edge[j - 1].dsCoord ),
+ SUB_INT32( hintmap->edge[j].csCoord,
+ hintmap->edge[j - 1].csCoord ) );
i += 1; /* skip upper edge on next loop */
}
@@ -539,15 +579,18 @@
/* is there room to move up? */
if ( hintmap->edge[j + 1].dsCoord >=
- hintmap->edge[j].dsCoord + hintMove->moveUp + CF2_MIN_COUNTER )
+ ADD_INT32( hintmap->edge[j].dsCoord,
+ hintMove->moveUp + CF2_MIN_COUNTER ) )
{
/* there is more room now, move edge up */
- hintmap->edge[j].dsCoord += hintMove->moveUp;
+ hintmap->edge[j].dsCoord = ADD_INT32( hintmap->edge[j].dsCoord,
+ hintMove->moveUp );
if ( cf2_hint_isPair( &hintmap->edge[j] ) )
{
FT_ASSERT( j > 0 );
- hintmap->edge[j - 1].dsCoord += hintMove->moveUp;
+ hintmap->edge[j - 1].dsCoord =
+ ADD_INT32( hintmap->edge[j - 1].dsCoord, hintMove->moveUp );
}
}
}
@@ -587,8 +630,9 @@
}
/* paired edges must be in proper order */
- FT_ASSERT( !isPair ||
- topHintEdge->csCoord >= bottomHintEdge->csCoord );
+ if ( isPair &&
+ topHintEdge->csCoord < bottomHintEdge->csCoord )
+ return;
/* linear search to find index value of insertion point */
indexInsert = 0;
@@ -598,6 +642,14 @@
break;
}
+ FT_TRACE7(( " Got hint at %.2f (%.2f)\n",
+ firstHintEdge->csCoord / 65536.0,
+ firstHintEdge->dsCoord / 65536.0 ));
+ if ( isPair )
+ FT_TRACE7(( " Got hint at %.2f (%.2f)\n",
+ secondHintEdge->csCoord / 65536.0,
+ secondHintEdge->dsCoord / 65536.0 ));
+
/*
* Discard any hints that overlap in character space. Most often, this
* is while building the initial map, where captured hints from all
@@ -634,18 +686,19 @@
{
/* Use hint map to position the center of stem, and nominal scale */
/* to position the two edges. This preserves the stem width. */
- CF2_Fixed midpoint = cf2_hintmap_map(
- hintmap->initialHintMap,
- ( secondHintEdge->csCoord +
- firstHintEdge->csCoord ) / 2 );
- CF2_Fixed halfWidth = FT_MulFix(
- ( secondHintEdge->csCoord -
- firstHintEdge->csCoord ) / 2,
- hintmap->scale );
+ CF2_Fixed midpoint =
+ cf2_hintmap_map(
+ hintmap->initialHintMap,
+ ADD_INT32( secondHintEdge->csCoord,
+ firstHintEdge->csCoord ) / 2 );
+ CF2_Fixed halfWidth =
+ FT_MulFix( SUB_INT32( secondHintEdge->csCoord,
+ firstHintEdge->csCoord ) / 2,
+ hintmap->scale );
- firstHintEdge->dsCoord = midpoint - halfWidth;
- secondHintEdge->dsCoord = midpoint + halfWidth;
+ firstHintEdge->dsCoord = SUB_INT32( midpoint, halfWidth );
+ secondHintEdge->dsCoord = ADD_INT32( midpoint, halfWidth );
}
else
firstHintEdge->dsCoord = cf2_hintmap_map( hintmap->initialHintMap,
@@ -714,13 +767,22 @@
/* insert first edge */
hintmap->edge[indexInsert] = *firstHintEdge; /* copy struct */
- hintmap->count += 1;
+ hintmap->count += 1;
+
+ FT_TRACE7(( " Inserting hint %.2f (%.2f)\n",
+ firstHintEdge->csCoord / 65536.0,
+ firstHintEdge->dsCoord / 65536.0 ));
if ( isPair )
{
/* insert second edge */
hintmap->edge[indexInsert + 1] = *secondHintEdge; /* copy struct */
hintmap->count += 1;
+
+ FT_TRACE7(( " Inserting hint %.2f (%.2f)\n",
+ secondHintEdge->csCoord / 65536.0,
+ secondHintEdge->dsCoord / 65536.0 ));
+
}
}
@@ -780,7 +842,15 @@
cf2_arrstack_size( hStemHintArray ) +
cf2_arrstack_size( vStemHintArray ) );
if ( !cf2_hintmask_isValid( hintMask ) )
- return; /* too many stem hints */
+ {
+ if ( font->isT1 )
+ {
+ /* no error, just continue unhinted */
+ *hintMask->error = FT_Err_Ok;
+ hintmap->hinted = FALSE;
+ }
+ return; /* too many stem hints */
+ }
}
/* begin by clearing the map */
@@ -796,7 +866,7 @@
/* Defense-in-depth. Should never return here. */
if ( bitCount > hintMask->bitCount )
- return;
+ return;
/* synthetic embox hints get highest priority */
if ( font->blues.doEmBoxHints )
@@ -955,6 +1025,12 @@
}
}
+ FT_TRACE6(( initialMap ? "flags: [p]air [g]host [t]op "
+ "[b]ottom [L]ocked [S]ynthetic\n"
+ "Initial hintmap\n"
+ : "Hints:\n" ));
+ cf2_hintmap_dump( hintmap );
+
/*
* Note: The following line is a convenient place to break when
* debugging hinting. Examine `hintmap->edge' for the list of
@@ -967,6 +1043,9 @@
/* adjust positions of hint edges that are not locked to blue zones */
cf2_hintmap_adjustHints( hintmap );
+ FT_TRACE6(( "(adjusted)\n" ));
+ cf2_hintmap_dump( hintmap );
+
/* save the position of all hints that were used in this hint map; */
/* if we use them again, we'll locate them in the same position */
if ( !initialMap )
@@ -1062,7 +1141,7 @@
cf2_fixedAbs( glyphpath->yOffset ) );
/* .1 character space unit */
- glyphpath->snapThreshold = cf2_floatToFixed( 0.1f );
+ glyphpath->snapThreshold = cf2_doubleToFixed( 0.1 );
glyphpath->moveIsPending = TRUE;
glyphpath->pathIsOpen = FALSE;
@@ -1094,16 +1173,20 @@
FT_Vector pt; /* hinted point in upright DS */
- pt.x = FT_MulFix( glyphpath->scaleX, x ) +
- FT_MulFix( glyphpath->scaleC, y );
+ pt.x = ADD_INT32( FT_MulFix( glyphpath->scaleX, x ),
+ FT_MulFix( glyphpath->scaleC, y ) );
pt.y = cf2_hintmap_map( hintmap, y );
- ppt->x = FT_MulFix( glyphpath->font->outerTransform.a, pt.x ) +
- FT_MulFix( glyphpath->font->outerTransform.c, pt.y ) +
- glyphpath->fractionalTranslation.x;
- ppt->y = FT_MulFix( glyphpath->font->outerTransform.b, pt.x ) +
- FT_MulFix( glyphpath->font->outerTransform.d, pt.y ) +
- glyphpath->fractionalTranslation.y;
+ ppt->x = ADD_INT32(
+ FT_MulFix( glyphpath->font->outerTransform.a, pt.x ),
+ ADD_INT32(
+ FT_MulFix( glyphpath->font->outerTransform.c, pt.y ),
+ glyphpath->fractionalTranslation.x ) );
+ ppt->y = ADD_INT32(
+ FT_MulFix( glyphpath->font->outerTransform.b, pt.x ),
+ ADD_INT32(
+ FT_MulFix( glyphpath->font->outerTransform.d, pt.y ),
+ glyphpath->fractionalTranslation.y ) );
}
@@ -1127,7 +1210,7 @@
* second segment.
* Let `w 'be the zero-based vector from `u1' to `v1'.
* `perp' is the `perpendicular dot product'; see
- * http://mathworld.wolfram.com/PerpDotProduct.html.
+ * https://mathworld.wolfram.com/PerpDotProduct.html.
* `s' is the parameter for the parametric line for the first segment
* (`u').
*
@@ -1153,12 +1236,12 @@
CF2_Fixed denominator, s;
- u.x = CF2_CS_SCALE( u2->x - u1->x );
- u.y = CF2_CS_SCALE( u2->y - u1->y );
- v.x = CF2_CS_SCALE( v2->x - v1->x );
- v.y = CF2_CS_SCALE( v2->y - v1->y );
- w.x = CF2_CS_SCALE( v1->x - u1->x );
- w.y = CF2_CS_SCALE( v1->y - u1->y );
+ u.x = CF2_CS_SCALE( SUB_INT32( u2->x, u1->x ) );
+ u.y = CF2_CS_SCALE( SUB_INT32( u2->y, u1->y ) );
+ v.x = CF2_CS_SCALE( SUB_INT32( v2->x, v1->x ) );
+ v.y = CF2_CS_SCALE( SUB_INT32( v2->y, v1->y ) );
+ w.x = CF2_CS_SCALE( SUB_INT32( v1->x, u1->x ) );
+ w.y = CF2_CS_SCALE( SUB_INT32( v1->y, u1->y ) );
denominator = cf2_perp( u, v );
@@ -1167,8 +1250,11 @@
s = FT_DivFix( cf2_perp( w, v ), denominator );
- intersection->x = u1->x + FT_MulFix( s, u2->x - u1->x );
- intersection->y = u1->y + FT_MulFix( s, u2->y - u1->y );
+ intersection->x = ADD_INT32( u1->x,
+ FT_MulFix( s, SUB_INT32( u2->x, u1->x ) ) );
+ intersection->y = ADD_INT32( u1->y,
+ FT_MulFix( s, SUB_INT32( u2->y, u1->y ) ) );
+
/*
* Special case snapping for horizontal and vertical lines.
@@ -1179,25 +1265,29 @@
*
*/
- if ( u1->x == u2->x &&
- cf2_fixedAbs( intersection->x - u1->x ) < glyphpath->snapThreshold )
+ if ( u1->x == u2->x &&
+ cf2_fixedAbs( SUB_INT32( intersection->x,
+ u1->x ) ) < glyphpath->snapThreshold )
intersection->x = u1->x;
- if ( u1->y == u2->y &&
- cf2_fixedAbs( intersection->y - u1->y ) < glyphpath->snapThreshold )
+ if ( u1->y == u2->y &&
+ cf2_fixedAbs( SUB_INT32( intersection->y,
+ u1->y ) ) < glyphpath->snapThreshold )
intersection->y = u1->y;
- if ( v1->x == v2->x &&
- cf2_fixedAbs( intersection->x - v1->x ) < glyphpath->snapThreshold )
+ if ( v1->x == v2->x &&
+ cf2_fixedAbs( SUB_INT32( intersection->x,
+ v1->x ) ) < glyphpath->snapThreshold )
intersection->x = v1->x;
- if ( v1->y == v2->y &&
- cf2_fixedAbs( intersection->y - v1->y ) < glyphpath->snapThreshold )
+ if ( v1->y == v2->y &&
+ cf2_fixedAbs( SUB_INT32( intersection->y,
+ v1->y ) ) < glyphpath->snapThreshold )
intersection->y = v1->y;
/* limit the intersection distance from midpoint of u2 and v1 */
- if ( cf2_fixedAbs( intersection->x - ( u2->x + v1->x ) / 2 ) >
- glyphpath->miterLimit ||
- cf2_fixedAbs( intersection->y - ( u2->y + v1->y ) / 2 ) >
- glyphpath->miterLimit )
+ if ( cf2_fixedAbs( intersection->x - ADD_INT32( u2->x, v1->x ) / 2 ) >
+ glyphpath->miterLimit ||
+ cf2_fixedAbs( intersection->y - ADD_INT32( u2->y, v1->y ) / 2 ) >
+ glyphpath->miterLimit )
return FALSE;
return TRUE;
@@ -1445,16 +1535,16 @@
CF2_Fixed* x,
CF2_Fixed* y )
{
- CF2_Fixed dx = x2 - x1;
- CF2_Fixed dy = y2 - y1;
+ CF2_Fixed dx = SUB_INT32( x2, x1 );
+ CF2_Fixed dy = SUB_INT32( y2, y1 );
/* note: negative offsets don't work here; negate deltas to change */
/* quadrants, below */
if ( glyphpath->font->reverseWinding )
{
- dx = -dx;
- dy = -dy;
+ dx = NEG_INT32( dx );
+ dy = NEG_INT32( dy );
}
*x = *y = 0;
@@ -1463,8 +1553,9 @@
return;
/* add momentum for this path element */
- glyphpath->callbacks->windingMomentum +=
- cf2_getWindingMomentum( x1, y1, x2, y2 );
+ glyphpath->callbacks->windingMomentum =
+ ADD_INT32( glyphpath->callbacks->windingMomentum,
+ cf2_getWindingMomentum( x1, y1, x2, y2 ) );
/* note: allow mixed integer and fixed multiplication here */
if ( dx >= 0 )
@@ -1473,13 +1564,13 @@
{
/* first quadrant, +x +y */
- if ( dx > 2 * dy )
+ if ( dx > MUL_INT32( 2, dy ) )
{
/* +x */
*x = 0;
*y = 0;
}
- else if ( dy > 2 * dx )
+ else if ( dy > MUL_INT32( 2, dx ) )
{
/* +y */
*x = glyphpath->xOffset;
@@ -1488,9 +1579,9 @@
else
{
/* +x +y */
- *x = FT_MulFix( cf2_floatToFixed( 0.7 ),
+ *x = FT_MulFix( cf2_doubleToFixed( 0.7 ),
glyphpath->xOffset );
- *y = FT_MulFix( cf2_floatToFixed( 1.0 - 0.7 ),
+ *y = FT_MulFix( cf2_doubleToFixed( 1.0 - 0.7 ),
glyphpath->yOffset );
}
}
@@ -1498,24 +1589,24 @@
{
/* fourth quadrant, +x -y */
- if ( dx > -2 * dy )
+ if ( dx > MUL_INT32( -2, dy ) )
{
/* +x */
*x = 0;
*y = 0;
}
- else if ( -dy > 2 * dx )
+ else if ( NEG_INT32( dy ) > MUL_INT32( 2, dx ) )
{
/* -y */
- *x = -glyphpath->xOffset;
+ *x = NEG_INT32( glyphpath->xOffset );
*y = glyphpath->yOffset;
}
else
{
/* +x -y */
- *x = FT_MulFix( cf2_floatToFixed( -0.7 ),
+ *x = FT_MulFix( cf2_doubleToFixed( -0.7 ),
glyphpath->xOffset );
- *y = FT_MulFix( cf2_floatToFixed( 1.0 - 0.7 ),
+ *y = FT_MulFix( cf2_doubleToFixed( 1.0 - 0.7 ),
glyphpath->yOffset );
}
}
@@ -1526,13 +1617,13 @@
{
/* second quadrant, -x +y */
- if ( -dx > 2 * dy )
+ if ( NEG_INT32( dx ) > MUL_INT32( 2, dy ) )
{
/* -x */
*x = 0;
- *y = 2 * glyphpath->yOffset;
+ *y = MUL_INT32( 2, glyphpath->yOffset );
}
- else if ( dy > -2 * dx )
+ else if ( dy > MUL_INT32( -2, dx ) )
{
/* +y */
*x = glyphpath->xOffset;
@@ -1541,9 +1632,9 @@
else
{
/* -x +y */
- *x = FT_MulFix( cf2_floatToFixed( 0.7 ),
+ *x = FT_MulFix( cf2_doubleToFixed( 0.7 ),
glyphpath->xOffset );
- *y = FT_MulFix( cf2_floatToFixed( 1.0 + 0.7 ),
+ *y = FT_MulFix( cf2_doubleToFixed( 1.0 + 0.7 ),
glyphpath->yOffset );
}
}
@@ -1551,24 +1642,24 @@
{
/* third quadrant, -x -y */
- if ( -dx > -2 * dy )
+ if ( NEG_INT32( dx ) > MUL_INT32( -2, dy ) )
{
/* -x */
*x = 0;
- *y = 2 * glyphpath->yOffset;
+ *y = MUL_INT32( 2, glyphpath->yOffset );
}
- else if ( -dy > -2 * dx )
+ else if ( NEG_INT32( dy ) > MUL_INT32( -2, dx ) )
{
/* -y */
- *x = -glyphpath->xOffset;
+ *x = NEG_INT32( glyphpath->xOffset );
*y = glyphpath->yOffset;
}
else
{
/* -x -y */
- *x = FT_MulFix( cf2_floatToFixed( -0.7 ),
+ *x = FT_MulFix( cf2_doubleToFixed( -0.7 ),
glyphpath->xOffset );
- *y = FT_MulFix( cf2_floatToFixed( 1.0 + 0.7 ),
+ *y = FT_MulFix( cf2_doubleToFixed( 1.0 + 0.7 ),
glyphpath->yOffset );
}
}
@@ -1674,10 +1765,10 @@
&yOffset );
/* construct offset points */
- P0.x = glyphpath->currentCS.x + xOffset;
- P0.y = glyphpath->currentCS.y + yOffset;
- P1.x = x + xOffset;
- P1.y = y + yOffset;
+ P0.x = ADD_INT32( glyphpath->currentCS.x, xOffset );
+ P0.y = ADD_INT32( glyphpath->currentCS.y, yOffset );
+ P1.x = ADD_INT32( x, xOffset );
+ P1.y = ADD_INT32( y, yOffset );
if ( glyphpath->moveIsPending )
{
@@ -1752,19 +1843,20 @@
&yOffset3 );
/* add momentum from the middle segment */
- glyphpath->callbacks->windingMomentum +=
- cf2_getWindingMomentum( x1, y1, x2, y2 );
+ glyphpath->callbacks->windingMomentum =
+ ADD_INT32( glyphpath->callbacks->windingMomentum,
+ cf2_getWindingMomentum( x1, y1, x2, y2 ) );
/* construct offset points */
- P0.x = glyphpath->currentCS.x + xOffset1;
- P0.y = glyphpath->currentCS.y + yOffset1;
- P1.x = x1 + xOffset1;
- P1.y = y1 + yOffset1;
+ P0.x = ADD_INT32( glyphpath->currentCS.x, xOffset1 );
+ P0.y = ADD_INT32( glyphpath->currentCS.y, yOffset1 );
+ P1.x = ADD_INT32( x1, xOffset1 );
+ P1.y = ADD_INT32( y1, yOffset1 );
/* note: preserve angle of final segment by using offset3 at both ends */
- P2.x = x2 + xOffset3;
- P2.y = y2 + yOffset3;
- P3.x = x3 + xOffset3;
- P3.y = y3 + yOffset3;
+ P2.x = ADD_INT32( x2, xOffset3 );
+ P2.y = ADD_INT32( y2, yOffset3 );
+ P3.x = ADD_INT32( x3, xOffset3 );
+ P3.y = ADD_INT32( y3, yOffset3 );
if ( glyphpath->moveIsPending )
{
diff --git a/src/cff/cf2hints.h b/src/psaux/pshints.h
similarity index 97%
rename from src/cff/cf2hints.h
rename to src/psaux/pshints.h
index f25d91b..92e37e9 100644
--- a/src/cff/cf2hints.h
+++ b/src/psaux/pshints.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2hints.h */
+/* pshints.h */
/* */
/* Adobe's code for handling CFF hints (body). */
/* */
@@ -36,9 +36,8 @@
/***************************************************************************/
-#ifndef __CF2HINTS_H__
-#define __CF2HINTS_H__
-
+#ifndef PSHINT_H_
+#define PSHINT_H_
FT_BEGIN_HEADER
@@ -220,7 +219,7 @@
/* character space miter limit threshold */
CF2_Fixed miterLimit;
- /* vertical/horzizontal snap distance in character space */
+ /* vertical/horizontal snap distance in character space */
CF2_Fixed snapThreshold;
FT_Vector offsetStart0; /* first and second points of first */
@@ -283,7 +282,7 @@
FT_END_HEADER
-#endif /* __CF2HINTS_H__ */
+#endif /* PSHINT_H_ */
/* END */
diff --git a/src/psaux/psintrp.c b/src/psaux/psintrp.c
new file mode 100644
index 0000000..da5a8da
--- /dev/null
+++ b/src/psaux/psintrp.c
@@ -0,0 +1,3040 @@
+/***************************************************************************/
+/* */
+/* psintrp.c */
+/* */
+/* Adobe's CFF Interpreter (body). */
+/* */
+/* Copyright 2007-2014 Adobe Systems Incorporated. */
+/* */
+/* This software, and all works of authorship, whether in source or */
+/* object code form as indicated by the copyright notice(s) included */
+/* herein (collectively, the "Work") is made available, and may only be */
+/* used, modified, and distributed under the FreeType Project License, */
+/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
+/* FreeType Project License, each contributor to the Work hereby grants */
+/* to any individual or legal entity exercising permissions granted by */
+/* the FreeType Project License and this section (hereafter, "You" or */
+/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
+/* royalty-free, irrevocable (except as stated in this section) patent */
+/* license to make, have made, use, offer to sell, sell, import, and */
+/* otherwise transfer the Work, where such license applies only to those */
+/* patent claims licensable by such contributor that are necessarily */
+/* infringed by their contribution(s) alone or by combination of their */
+/* contribution(s) with the Work to which such contribution(s) was */
+/* submitted. If You institute patent litigation against any entity */
+/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
+/* the Work or a contribution incorporated within the Work constitutes */
+/* direct or contributory patent infringement, then any patent licenses */
+/* granted to You under this License for that Work shall terminate as of */
+/* the date such litigation is filed. */
+/* */
+/* By using, modifying, or distributing the Work you indicate that you */
+/* have read and understood the terms and conditions of the */
+/* FreeType Project License as well as those provided in this section, */
+/* and you accept them fully. */
+/* */
+/***************************************************************************/
+
+
+#include "psft.h"
+#include FT_INTERNAL_DEBUG_H
+#include FT_SERVICE_CFF_TABLE_LOAD_H
+
+#include "psglue.h"
+#include "psfont.h"
+#include "psstack.h"
+#include "pshints.h"
+#include "psintrp.h"
+
+#include "pserror.h"
+
+#include "psobjs.h" /* for cff_random */
+#include "t1decode.h" /* for t1 seac */
+
+
+ /*************************************************************************/
+ /* */
+ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
+ /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
+ /* messages during execution. */
+ /* */
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_cf2interp
+
+
+ FT_LOCAL_DEF( void )
+ cf2_hintmask_init( CF2_HintMask hintmask,
+ FT_Error* error )
+ {
+ FT_ZERO( hintmask );
+
+ hintmask->error = error;
+ }
+
+
+ FT_LOCAL_DEF( FT_Bool )
+ cf2_hintmask_isValid( const CF2_HintMask hintmask )
+ {
+ return hintmask->isValid;
+ }
+
+
+ FT_LOCAL_DEF( FT_Bool )
+ cf2_hintmask_isNew( const CF2_HintMask hintmask )
+ {
+ return hintmask->isNew;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ cf2_hintmask_setNew( CF2_HintMask hintmask,
+ FT_Bool val )
+ {
+ hintmask->isNew = val;
+ }
+
+
+ /* clients call `getMaskPtr' in order to iterate */
+ /* through hint mask */
+
+ FT_LOCAL_DEF( FT_Byte* )
+ cf2_hintmask_getMaskPtr( CF2_HintMask hintmask )
+ {
+ return hintmask->mask;
+ }
+
+
+ static size_t
+ cf2_hintmask_setCounts( CF2_HintMask hintmask,
+ size_t bitCount )
+ {
+ if ( bitCount > CF2_MAX_HINTS )
+ {
+ /* total of h and v stems must be <= 96 */
+ CF2_SET_ERROR( hintmask->error, Invalid_Glyph_Format );
+ return 0;
+ }
+
+ hintmask->bitCount = bitCount;
+ hintmask->byteCount = ( hintmask->bitCount + 7 ) / 8;
+
+ hintmask->isValid = TRUE;
+ hintmask->isNew = TRUE;
+
+ return bitCount;
+ }
+
+
+ /* consume the hintmask bytes from the charstring, advancing the src */
+ /* pointer */
+ static void
+ cf2_hintmask_read( CF2_HintMask hintmask,
+ CF2_Buffer charstring,
+ size_t bitCount )
+ {
+ size_t i;
+
+#ifndef CF2_NDEBUG
+ /* these are the bits in the final mask byte that should be zero */
+ /* Note: this variable is only used in an assert expression below */
+ /* and then only if CF2_NDEBUG is not defined */
+ CF2_UInt mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1;
+#endif
+
+
+ /* initialize counts and isValid */
+ if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 )
+ return;
+
+ FT_ASSERT( hintmask->byteCount > 0 );
+
+ FT_TRACE4(( " (maskbytes:" ));
+
+ /* set mask and advance interpreter's charstring pointer */
+ for ( i = 0; i < hintmask->byteCount; i++ )
+ {
+ hintmask->mask[i] = (FT_Byte)cf2_buf_readByte( charstring );
+ FT_TRACE4(( " 0x%02X", hintmask->mask[i] ));
+ }
+
+ FT_TRACE4(( ")\n" ));
+
+ /* assert any unused bits in last byte are zero unless there's a prior */
+ /* error */
+ /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */
+#ifndef CF2_NDEBUG
+ FT_ASSERT( ( hintmask->mask[hintmask->byteCount - 1] & mask ) == 0 ||
+ *hintmask->error );
+#endif
+ }
+
+
+ FT_LOCAL_DEF( void )
+ cf2_hintmask_setAll( CF2_HintMask hintmask,
+ size_t bitCount )
+ {
+ size_t i;
+ CF2_UInt mask = ( 1 << ( -(CF2_Int)bitCount & 7 ) ) - 1;
+
+
+ /* initialize counts and isValid */
+ if ( cf2_hintmask_setCounts( hintmask, bitCount ) == 0 )
+ return;
+
+ FT_ASSERT( hintmask->byteCount > 0 );
+ FT_ASSERT( hintmask->byteCount <=
+ sizeof ( hintmask->mask ) / sizeof ( hintmask->mask[0] ) );
+
+ /* set mask to all ones */
+ for ( i = 0; i < hintmask->byteCount; i++ )
+ hintmask->mask[i] = 0xFF;
+
+ /* clear unused bits */
+ /* bitCount -> mask, 0 -> 0, 1 -> 7f, 2 -> 3f, ... 6 -> 3, 7 -> 1 */
+ hintmask->mask[hintmask->byteCount - 1] &= ~mask;
+ }
+
+
+ /* Type2 charstring opcodes */
+ enum
+ {
+ cf2_cmdRESERVED_0, /* 0 */
+ cf2_cmdHSTEM, /* 1 */
+ cf2_cmdRESERVED_2, /* 2 */
+ cf2_cmdVSTEM, /* 3 */
+ cf2_cmdVMOVETO, /* 4 */
+ cf2_cmdRLINETO, /* 5 */
+ cf2_cmdHLINETO, /* 6 */
+ cf2_cmdVLINETO, /* 7 */
+ cf2_cmdRRCURVETO, /* 8 */
+ cf2_cmdCLOSEPATH, /* 9 T1 only */
+ cf2_cmdCALLSUBR, /* 10 */
+ cf2_cmdRETURN, /* 11 */
+ cf2_cmdESC, /* 12 */
+ cf2_cmdHSBW, /* 13 T1 only */
+ cf2_cmdENDCHAR, /* 14 */
+ cf2_cmdVSINDEX, /* 15 */
+ cf2_cmdBLEND, /* 16 */
+ cf2_cmdRESERVED_17, /* 17 */
+ cf2_cmdHSTEMHM, /* 18 */
+ cf2_cmdHINTMASK, /* 19 */
+ cf2_cmdCNTRMASK, /* 20 */
+ cf2_cmdRMOVETO, /* 21 */
+ cf2_cmdHMOVETO, /* 22 */
+ cf2_cmdVSTEMHM, /* 23 */
+ cf2_cmdRCURVELINE, /* 24 */
+ cf2_cmdRLINECURVE, /* 25 */
+ cf2_cmdVVCURVETO, /* 26 */
+ cf2_cmdHHCURVETO, /* 27 */
+ cf2_cmdEXTENDEDNMBR, /* 28 */
+ cf2_cmdCALLGSUBR, /* 29 */
+ cf2_cmdVHCURVETO, /* 30 */
+ cf2_cmdHVCURVETO /* 31 */
+ };
+
+ enum
+ {
+ cf2_escDOTSECTION, /* 0 */
+ cf2_escVSTEM3, /* 1 T1 only */
+ cf2_escHSTEM3, /* 2 T1 only */
+ cf2_escAND, /* 3 */
+ cf2_escOR, /* 4 */
+ cf2_escNOT, /* 5 */
+ cf2_escSEAC, /* 6 T1 only */
+ cf2_escSBW, /* 7 T1 only */
+ cf2_escRESERVED_8, /* 8 */
+ cf2_escABS, /* 9 */
+ cf2_escADD, /* 10 like otherADD */
+ cf2_escSUB, /* 11 like otherSUB */
+ cf2_escDIV, /* 12 */
+ cf2_escRESERVED_13, /* 13 */
+ cf2_escNEG, /* 14 */
+ cf2_escEQ, /* 15 */
+ cf2_escCALLOTHERSUBR,/* 16 T1 only */
+ cf2_escPOP, /* 17 T1 only */
+ cf2_escDROP, /* 18 */
+ cf2_escRESERVED_19, /* 19 */
+ cf2_escPUT, /* 20 like otherPUT */
+ cf2_escGET, /* 21 like otherGET */
+ cf2_escIFELSE, /* 22 like otherIFELSE */
+ cf2_escRANDOM, /* 23 like otherRANDOM */
+ cf2_escMUL, /* 24 like otherMUL */
+ cf2_escRESERVED_25, /* 25 */
+ cf2_escSQRT, /* 26 */
+ cf2_escDUP, /* 27 like otherDUP */
+ cf2_escEXCH, /* 28 like otherEXCH */
+ cf2_escINDEX, /* 29 */
+ cf2_escROLL, /* 30 */
+ cf2_escRESERVED_31, /* 31 */
+ cf2_escRESERVED_32, /* 32 */
+ cf2_escSETCURRENTPT, /* 33 T1 only */
+ cf2_escHFLEX, /* 34 */
+ cf2_escFLEX, /* 35 */
+ cf2_escHFLEX1, /* 36 */
+ cf2_escFLEX1, /* 37 */
+ cf2_escRESERVED_38 /* 38 & all higher */
+ };
+
+
+ /* `stemHintArray' does not change once we start drawing the outline. */
+ static void
+ cf2_doStems( const CF2_Font font,
+ CF2_Stack opStack,
+ CF2_ArrStack stemHintArray,
+ CF2_Fixed* width,
+ FT_Bool* haveWidth,
+ CF2_Fixed hintOffset )
+ {
+ CF2_UInt i;
+ CF2_UInt count = cf2_stack_count( opStack );
+ FT_Bool hasWidthArg = (FT_Bool)( count & 1 );
+
+ /* variable accumulates delta values from operand stack */
+ CF2_Fixed position = hintOffset;
+
+ if ( font->isT1 && !font->decoder->flex_state && !*haveWidth )
+ FT_ERROR(( "cf2_doStems (Type 1 mode):"
+ " No width. Use hsbw/sbw as first op\n" ));
+
+ if ( !font->isT1 && hasWidthArg && !*haveWidth )
+ *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
+ cf2_getNominalWidthX( font->decoder ) );
+
+ if ( font->decoder->width_only )
+ goto exit;
+
+ for ( i = hasWidthArg ? 1 : 0; i < count; i += 2 )
+ {
+ /* construct a CF2_StemHint and push it onto the list */
+ CF2_StemHintRec stemhint;
+
+
+ stemhint.min =
+ position = ADD_INT32( position,
+ cf2_stack_getReal( opStack, i ) );
+ stemhint.max =
+ position = ADD_INT32( position,
+ cf2_stack_getReal( opStack, i + 1 ) );
+
+ stemhint.used = FALSE;
+ stemhint.maxDS =
+ stemhint.minDS = 0;
+
+ cf2_arrstack_push( stemHintArray, &stemhint ); /* defer error check */
+ }
+
+ cf2_stack_clear( opStack );
+
+ exit:
+ /* cf2_doStems must define a width (may be default) */
+ *haveWidth = TRUE;
+ }
+
+
+ static void
+ cf2_doFlex( CF2_Stack opStack,
+ CF2_Fixed* curX,
+ CF2_Fixed* curY,
+ CF2_GlyphPath glyphPath,
+ const FT_Bool* readFromStack,
+ FT_Bool doConditionalLastRead )
+ {
+ CF2_Fixed vals[14];
+ CF2_UInt idx;
+ FT_Bool isHFlex;
+ CF2_Int top, i, j;
+
+
+ vals[0] = *curX;
+ vals[1] = *curY;
+ idx = 0;
+ isHFlex = FT_BOOL( readFromStack[9] == FALSE );
+ top = isHFlex ? 9 : 10;
+
+ for ( i = 0; i < top; i++ )
+ {
+ vals[i + 2] = vals[i];
+ if ( readFromStack[i] )
+ vals[i + 2] = ADD_INT32( vals[i + 2], cf2_stack_getReal( opStack,
+ idx++ ) );
+ }
+
+ if ( isHFlex )
+ vals[9 + 2] = *curY;
+
+ if ( doConditionalLastRead )
+ {
+ FT_Bool lastIsX = (FT_Bool)(
+ cf2_fixedAbs( SUB_INT32( vals[10], *curX ) ) >
+ cf2_fixedAbs( SUB_INT32( vals[11], *curY ) ) );
+ CF2_Fixed lastVal = cf2_stack_getReal( opStack, idx );
+
+
+ if ( lastIsX )
+ {
+ vals[12] = ADD_INT32( vals[10], lastVal );
+ vals[13] = *curY;
+ }
+ else
+ {
+ vals[12] = *curX;
+ vals[13] = ADD_INT32( vals[11], lastVal );
+ }
+ }
+ else
+ {
+ if ( readFromStack[10] )
+ vals[12] = ADD_INT32( vals[10],
+ cf2_stack_getReal( opStack, idx++ ) );
+ else
+ vals[12] = *curX;
+
+ if ( readFromStack[11] )
+ vals[13] = ADD_INT32( vals[11],
+ cf2_stack_getReal( opStack, idx ) );
+ else
+ vals[13] = *curY;
+ }
+
+ for ( j = 0; j < 2; j++ )
+ cf2_glyphpath_curveTo( glyphPath, vals[j * 6 + 2],
+ vals[j * 6 + 3],
+ vals[j * 6 + 4],
+ vals[j * 6 + 5],
+ vals[j * 6 + 6],
+ vals[j * 6 + 7] );
+
+ cf2_stack_clear( opStack );
+
+ *curX = vals[12];
+ *curY = vals[13];
+ }
+
+
+ /* Blend numOperands on the stack, */
+ /* store results into the first numBlends values, */
+ /* then pop remaining arguments. */
+ static void
+ cf2_doBlend( const CFF_Blend blend,
+ CF2_Stack opStack,
+ CF2_UInt numBlends )
+ {
+ CF2_UInt delta;
+ CF2_UInt base;
+ CF2_UInt i, j;
+ CF2_UInt numOperands = (CF2_UInt)( numBlends * blend->lenBV );
+
+
+ base = cf2_stack_count( opStack ) - numOperands;
+ delta = base + numBlends;
+
+ for ( i = 0; i < numBlends; i++ )
+ {
+ const CF2_Fixed* weight = &blend->BV[1];
+
+ /* start with first term */
+ CF2_Fixed sum = cf2_stack_getReal( opStack, i + base );
+
+
+ for ( j = 1; j < blend->lenBV; j++ )
+ sum = ADD_INT32( sum,
+ FT_MulFix( *weight++,
+ cf2_stack_getReal( opStack,
+ delta++ ) ) );
+
+ /* store blended result */
+ cf2_stack_setReal( opStack, i + base, sum );
+ }
+
+ /* leave only `numBlends' results on stack */
+ cf2_stack_pop( opStack, numOperands - numBlends );
+ }
+
+
+ /*
+ * `error' is a shared error code used by many objects in this
+ * routine. Before the code continues from an error, it must check and
+ * record the error in `*error'. The idea is that this shared
+ * error code will record the first error encountered. If testing
+ * for an error anyway, the cost of `goto exit' is small, so we do it,
+ * even if continuing would be safe. In this case, `lastError' is
+ * set, so the testing and storing can be done in one place, at `exit'.
+ *
+ * Continuing after an error is intended for objects which do their own
+ * testing of `*error', e.g., array stack functions. This allows us to
+ * avoid an extra test after the call.
+ *
+ * Unimplemented opcodes are ignored.
+ *
+ */
+ FT_LOCAL_DEF( void )
+ cf2_interpT2CharString( CF2_Font font,
+ CF2_Buffer buf,
+ CF2_OutlineCallbacks callbacks,
+ const FT_Vector* translation,
+ FT_Bool doingSeac,
+ CF2_Fixed curX,
+ CF2_Fixed curY,
+ CF2_Fixed* width )
+ {
+ /* lastError is used for errors that are immediately tested */
+ FT_Error lastError = FT_Err_Ok;
+
+ /* pointer to parsed font object */
+ PS_Decoder* decoder = font->decoder;
+
+ FT_Error* error = &font->error;
+ FT_Memory memory = font->memory;
+
+ CF2_Fixed scaleY = font->innerTransform.d;
+ CF2_Fixed nominalWidthX = cf2_getNominalWidthX( decoder );
+
+ /* stuff for Type 1 */
+ FT_Int known_othersubr_result_cnt = 0;
+ FT_Bool large_int = FALSE;
+ FT_Bool initial_map_ready = FALSE;
+
+#define PS_STORAGE_SIZE 3
+ CF2_F16Dot16 results[PS_STORAGE_SIZE]; /* for othersubr results */
+ FT_Int result_cnt = 0;
+
+ /* save this for hinting seac accents */
+ CF2_Fixed hintOriginY = curY;
+
+ CF2_Stack opStack = NULL;
+ FT_UInt stackSize;
+ FT_Byte op1; /* first opcode byte */
+
+ CF2_F16Dot16 storage[CF2_STORAGE_SIZE]; /* for `put' and `get' */
+ CF2_F16Dot16 flexStore[6]; /* for Type 1 flex */
+
+ /* instruction limit; 20,000,000 matches Avalon */
+ FT_UInt32 instructionLimit = 20000000UL;
+
+ CF2_ArrStackRec subrStack;
+
+ FT_Bool haveWidth;
+ CF2_Buffer charstring = NULL;
+
+ CF2_Int charstringIndex = -1; /* initialize to empty */
+
+ /* TODO: placeholders for hint structures */
+
+ /* objects used for hinting */
+ CF2_ArrStackRec hStemHintArray;
+ CF2_ArrStackRec vStemHintArray;
+
+ CF2_HintMaskRec hintMask;
+ CF2_GlyphPathRec glyphPath;
+
+
+ FT_ZERO( &storage );
+ FT_ZERO( &results );
+ FT_ZERO( &flexStore );
+
+ /* initialize the remaining objects */
+ cf2_arrstack_init( &subrStack,
+ memory,
+ error,
+ sizeof ( CF2_BufferRec ) );
+ cf2_arrstack_init( &hStemHintArray,
+ memory,
+ error,
+ sizeof ( CF2_StemHintRec ) );
+ cf2_arrstack_init( &vStemHintArray,
+ memory,
+ error,
+ sizeof ( CF2_StemHintRec ) );
+
+ /* initialize CF2_StemHint arrays */
+ cf2_hintmask_init( &hintMask, error );
+
+ /* initialize path map to manage drawing operations */
+
+ /* Note: last 4 params are used to handle `MoveToPermissive', which */
+ /* may need to call `hintMap.Build' */
+ /* TODO: MoveToPermissive is gone; are these still needed? */
+ cf2_glyphpath_init( &glyphPath,
+ font,
+ callbacks,
+ scaleY,
+ /* hShift, */
+ &hStemHintArray,
+ &vStemHintArray,
+ &hintMask,
+ hintOriginY,
+ &font->blues,
+ translation );
+
+ /*
+ * Initialize state for width parsing. From the CFF Spec:
+ *
+ * The first stack-clearing operator, which must be one of hstem,
+ * hstemhm, vstem, vstemhm, cntrmask, hintmask, hmoveto, vmoveto,
+ * rmoveto, or endchar, takes an additional argument - the width (as
+ * described earlier), which may be expressed as zero or one numeric
+ * argument.
+ *
+ * What we implement here uses the first validly specified width, but
+ * does not detect errors for specifying more than one width.
+ *
+ * If one of the above operators occurs without explicitly specifying
+ * a width, we assume the default width.
+ *
+ * CFF2 charstrings always return the default width (0).
+ *
+ */
+ haveWidth = font->isCFF2 ? TRUE : FALSE;
+ *width = cf2_getDefaultWidthX( decoder );
+
+ /*
+ * Note: At this point, all pointers to resources must be NULL
+ * and all local objects must be initialized.
+ * There must be no branches to `exit:' above this point.
+ *
+ */
+
+ /* allocate an operand stack */
+ stackSize = font->isCFF2 ? cf2_getMaxstack( decoder )
+ : CF2_OPERAND_STACK_SIZE;
+ opStack = cf2_stack_init( memory, error, stackSize );
+
+ if ( !opStack )
+ {
+ lastError = FT_THROW( Out_Of_Memory );
+ goto exit;
+ }
+
+ /* initialize subroutine stack by placing top level charstring as */
+ /* first element (max depth plus one for the charstring) */
+ /* Note: Caller owns and must finalize the first charstring. */
+ /* Our copy of it does not change that requirement. */
+ cf2_arrstack_setCount( &subrStack, CF2_MAX_SUBR + 1 );
+
+ charstring = (CF2_Buffer)cf2_arrstack_getBuffer( &subrStack );
+ *charstring = *buf; /* structure copy */
+
+ charstringIndex = 0; /* entry is valid now */
+
+ /* catch errors so far */
+ if ( *error )
+ goto exit;
+
+ /* main interpreter loop */
+ while ( 1 )
+ {
+ if ( font->isT1 )
+ FT_ASSERT( known_othersubr_result_cnt == 0 ||
+ result_cnt == 0 );
+
+ if ( cf2_buf_isEnd( charstring ) )
+ {
+ /* If we've reached the end of the charstring, simulate a */
+ /* cf2_cmdRETURN or cf2_cmdENDCHAR. */
+ /* We do this for both CFF and CFF2. */
+ if ( charstringIndex )
+ op1 = cf2_cmdRETURN; /* end of buffer for subroutine */
+ else
+ op1 = cf2_cmdENDCHAR; /* end of buffer for top level charstring */
+ }
+ else
+ {
+ op1 = (FT_Byte)cf2_buf_readByte( charstring );
+
+ /* Explicit RETURN and ENDCHAR in CFF2 should be ignored. */
+ /* Note: Trace message will report 0 instead of 11 or 14. */
+ if ( ( op1 == cf2_cmdRETURN || op1 == cf2_cmdENDCHAR ) &&
+ font->isCFF2 )
+ op1 = cf2_cmdRESERVED_0;
+ }
+
+ if ( font->isT1 )
+ {
+ if ( !initial_map_ready &&
+ !( op1 == cf2_cmdHSTEM ||
+ op1 == cf2_cmdVSTEM ||
+ op1 == cf2_cmdHSBW ||
+ op1 == cf2_cmdCALLSUBR ||
+ op1 == cf2_cmdRETURN ||
+ op1 == cf2_cmdESC ||
+ op1 == cf2_cmdENDCHAR ||
+ op1 >= 32 /* Numbers */ ) )
+ {
+ /* Skip outline commands first time round. */
+ /* `endchar' will trigger initial hintmap build */
+ /* and rewind the charstring. */
+ cf2_stack_clear( opStack );
+ continue;
+ }
+
+ if ( result_cnt > 0 &&
+ !( op1 == cf2_cmdCALLSUBR ||
+ op1 == cf2_cmdRETURN ||
+ op1 == cf2_cmdESC ||
+ op1 >= 32 /* Numbers */ ) )
+ {
+ /* all operands have been transferred by previous pops */
+ result_cnt = 0;
+ }
+
+ if ( large_int && !( op1 >= 32 || op1 == cf2_escDIV ) )
+ {
+ FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
+ " no `div' after large integer\n" ));
+
+ large_int = FALSE;
+ }
+ }
+
+ /* check for errors once per loop */
+ if ( *error )
+ goto exit;
+
+ instructionLimit--;
+ if ( instructionLimit == 0 )
+ {
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ switch( op1 )
+ {
+ case cf2_cmdRESERVED_0:
+ case cf2_cmdRESERVED_2:
+ case cf2_cmdRESERVED_17:
+ /* we may get here if we have a prior error */
+ FT_TRACE4(( " unknown op (%d)\n", op1 ));
+ break;
+
+ case cf2_cmdVSINDEX:
+ FT_TRACE4(( " vsindex\n" ));
+
+ if ( !font->isCFF2 )
+ break; /* clear stack & ignore */
+
+ if ( font->blend.usedBV )
+ {
+ /* vsindex not allowed after blend */
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ {
+ FT_Int temp = cf2_stack_popInt( opStack );
+
+
+ if ( temp >= 0 )
+ font->vsindex = (FT_UInt)temp;
+ }
+ break;
+
+ case cf2_cmdBLEND:
+ {
+ FT_UInt numBlends;
+
+
+ FT_TRACE4(( " blend\n" ));
+
+ if ( !font->isCFF2 )
+ break; /* clear stack & ignore */
+
+ /* do we have a `blend' op in a non-variant font? */
+ if ( !font->blend.font )
+ {
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ /* check cached blend vector */
+ if ( font->cffload->blend_check_vector( &font->blend,
+ font->vsindex,
+ font->lenNDV,
+ font->NDV ) )
+ {
+ lastError = font->cffload->blend_build_vector( &font->blend,
+ font->vsindex,
+ font->lenNDV,
+ font->NDV );
+ if ( lastError )
+ goto exit;
+ }
+
+ /* do the blend */
+ numBlends = (FT_UInt)cf2_stack_popInt( opStack );
+ if ( numBlends > stackSize )
+ {
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ cf2_doBlend( &font->blend, opStack, numBlends );
+
+ font->blend.usedBV = TRUE;
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_cmdHSTEMHM:
+ case cf2_cmdHSTEM:
+ FT_TRACE4(( op1 == cf2_cmdHSTEMHM ? " hstemhm\n" : " hstem\n" ));
+
+ if ( !font->isT1 )
+ {
+ /* never add hints after the mask is computed */
+ /* except if in Type 1 mode (no hintmask op) */
+ if ( cf2_hintmask_isValid( &hintMask ) )
+ {
+ FT_TRACE4(( "cf2_interpT2CharString:"
+ " invalid horizontal hint mask\n" ));
+ break;
+ }
+ }
+
+ /* add left-sidebearing correction in Type 1 mode */
+ cf2_doStems( font,
+ opStack,
+ &hStemHintArray,
+ width,
+ &haveWidth,
+ font->isT1 ? decoder->builder.left_bearing->y
+ : 0 );
+
+ if ( decoder->width_only )
+ goto exit;
+
+ break;
+
+ case cf2_cmdVSTEMHM:
+ case cf2_cmdVSTEM:
+ FT_TRACE4(( op1 == cf2_cmdVSTEMHM ? " vstemhm\n" : " vstem\n" ));
+
+ if ( !font->isT1 )
+ {
+ /* never add hints after the mask is computed */
+ /* except if in Type 1 mode (no hintmask op) */
+ if ( cf2_hintmask_isValid( &hintMask ) )
+ {
+ FT_TRACE4(( "cf2_interpT2CharString:"
+ " invalid vertical hint mask\n" ));
+ break;
+ }
+ }
+
+ /* add left-sidebearing correction in Type 1 mode */
+ cf2_doStems( font,
+ opStack,
+ &vStemHintArray,
+ width,
+ &haveWidth,
+ font->isT1 ? decoder->builder.left_bearing->x
+ : 0 );
+
+ if ( decoder->width_only )
+ goto exit;
+
+ break;
+
+ case cf2_cmdVMOVETO:
+ FT_TRACE4(( " vmoveto\n" ));
+
+ if ( font->isT1 && !decoder->flex_state && !haveWidth )
+ FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
+ " No width. Use hsbw/sbw as first op\n" ));
+
+ if ( cf2_stack_count( opStack ) > 1 && !haveWidth )
+ *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
+ nominalWidthX );
+
+ /* width is defined or default after this */
+ haveWidth = TRUE;
+
+ if ( decoder->width_only )
+ goto exit;
+
+ curY = ADD_INT32( curY, cf2_stack_popFixed( opStack ) );
+
+ if ( !decoder->flex_state )
+ cf2_glyphpath_moveTo( &glyphPath, curX, curY );
+
+ break;
+
+ case cf2_cmdRLINETO:
+ {
+ CF2_UInt idx;
+ CF2_UInt count = cf2_stack_count( opStack );
+
+
+ FT_TRACE4(( " rlineto\n" ));
+
+ for ( idx = 0; idx < count; idx += 2 )
+ {
+ curX = ADD_INT32( curX, cf2_stack_getReal( opStack,
+ idx + 0 ) );
+ curY = ADD_INT32( curY, cf2_stack_getReal( opStack,
+ idx + 1 ) );
+
+ cf2_glyphpath_lineTo( &glyphPath, curX, curY );
+ }
+
+ cf2_stack_clear( opStack );
+ }
+ continue; /* no need to clear stack again */
+
+ case cf2_cmdHLINETO:
+ case cf2_cmdVLINETO:
+ {
+ CF2_UInt idx;
+ CF2_UInt count = cf2_stack_count( opStack );
+
+ FT_Bool isX = FT_BOOL( op1 == cf2_cmdHLINETO );
+
+
+ FT_TRACE4(( isX ? " hlineto\n" : " vlineto\n" ));
+
+ for ( idx = 0; idx < count; idx++ )
+ {
+ CF2_Fixed v = cf2_stack_getReal( opStack, idx );
+
+
+ if ( isX )
+ curX = ADD_INT32( curX, v );
+ else
+ curY = ADD_INT32( curY, v );
+
+ isX = !isX;
+
+ cf2_glyphpath_lineTo( &glyphPath, curX, curY );
+ }
+
+ cf2_stack_clear( opStack );
+ }
+ continue;
+
+ case cf2_cmdRCURVELINE:
+ case cf2_cmdRRCURVETO:
+ {
+ CF2_UInt count = cf2_stack_count( opStack );
+ CF2_UInt idx = 0;
+
+
+ FT_TRACE4(( op1 == cf2_cmdRCURVELINE ? " rcurveline\n"
+ : " rrcurveto\n" ));
+
+ while ( idx + 6 <= count )
+ {
+ CF2_Fixed x1, y1, x2, y2, x3, y3;
+
+
+ x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
+ y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), curY );
+ x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), x1 );
+ y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y1 );
+ x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 );
+ y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 5 ), y2 );
+
+ cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
+
+ curX = x3;
+ curY = y3;
+ idx += 6;
+ }
+
+ if ( op1 == cf2_cmdRCURVELINE )
+ {
+ curX = ADD_INT32( curX, cf2_stack_getReal( opStack,
+ idx + 0 ) );
+ curY = ADD_INT32( curY, cf2_stack_getReal( opStack,
+ idx + 1 ) );
+
+ cf2_glyphpath_lineTo( &glyphPath, curX, curY );
+ }
+
+ cf2_stack_clear( opStack );
+ }
+ continue; /* no need to clear stack again */
+
+ case cf2_cmdCLOSEPATH:
+ if ( !font->isT1 )
+ FT_TRACE4(( " unknown op (%d)\n", op1 ));
+ else
+ {
+ FT_TRACE4(( " closepath" ));
+
+ /* if there is no path, `closepath' is a no-op */
+ ps_builder_close_contour( &decoder->builder );
+
+ haveWidth = TRUE;
+ }
+ break;
+
+ case cf2_cmdCALLGSUBR:
+ case cf2_cmdCALLSUBR:
+ {
+ CF2_Int subrNum;
+
+
+ FT_TRACE4(( op1 == cf2_cmdCALLGSUBR ? " callgsubr"
+ : " callsubr" ));
+
+ if ( ( !font->isT1 && charstringIndex > CF2_MAX_SUBR ) ||
+ ( font->isT1 && charstringIndex > T1_MAX_SUBRS_CALLS ) )
+ {
+ /* max subr plus one for charstring */
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit; /* overflow of stack */
+ }
+
+ /* push our current CFF charstring region on subrStack */
+ charstring = (CF2_Buffer)
+ cf2_arrstack_getPointer(
+ &subrStack,
+ (size_t)charstringIndex + 1 );
+
+ /* set up the new CFF region and pointer */
+ subrNum = cf2_stack_popInt( opStack );
+
+ if ( font->isT1 && decoder->locals_hash )
+ {
+ size_t* val = ft_hash_num_lookup( subrNum,
+ decoder->locals_hash );
+
+
+ if ( val )
+ subrNum = *val;
+ else
+ subrNum = -1;
+ }
+
+ switch ( op1 )
+ {
+ case cf2_cmdCALLGSUBR:
+ FT_TRACE4(( " (idx %d, entering level %d)\n",
+ subrNum + decoder->globals_bias,
+ charstringIndex + 1 ));
+
+ if ( cf2_initGlobalRegionBuffer( decoder,
+ subrNum,
+ charstring ) )
+ {
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit; /* subroutine lookup or stream error */
+ }
+ break;
+
+ default:
+ /* cf2_cmdCALLSUBR */
+ FT_TRACE4(( " (idx %d, entering level %d)\n",
+ subrNum + decoder->locals_bias,
+ charstringIndex + 1 ));
+
+ if ( cf2_initLocalRegionBuffer( decoder,
+ subrNum,
+ charstring ) )
+ {
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit; /* subroutine lookup or stream error */
+ }
+ }
+
+ charstringIndex += 1; /* entry is valid now */
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_cmdRETURN:
+ FT_TRACE4(( " return (leaving level %d)\n", charstringIndex ));
+
+ if ( charstringIndex < 1 )
+ {
+ /* Note: cannot return from top charstring */
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit; /* underflow of stack */
+ }
+
+ /* restore position in previous charstring */
+ charstring = (CF2_Buffer)
+ cf2_arrstack_getPointer(
+ &subrStack,
+ (CF2_UInt)--charstringIndex );
+ continue; /* do not clear the stack */
+
+ case cf2_cmdESC:
+ {
+ FT_Byte op2 = (FT_Byte)cf2_buf_readByte( charstring );
+
+
+ /* first switch for 2-byte operators handles CFF2 */
+ /* and opcodes that are reserved for both CFF and CFF2 */
+ switch ( op2 )
+ {
+ case cf2_escHFLEX:
+ {
+ static const FT_Bool readFromStack[12] =
+ {
+ TRUE /* dx1 */, FALSE /* dy1 */,
+ TRUE /* dx2 */, TRUE /* dy2 */,
+ TRUE /* dx3 */, FALSE /* dy3 */,
+ TRUE /* dx4 */, FALSE /* dy4 */,
+ TRUE /* dx5 */, FALSE /* dy5 */,
+ TRUE /* dx6 */, FALSE /* dy6 */
+ };
+
+
+ FT_TRACE4(( " hflex\n" ));
+
+ cf2_doFlex( opStack,
+ &curX,
+ &curY,
+ &glyphPath,
+ readFromStack,
+ FALSE /* doConditionalLastRead */ );
+ }
+ continue;
+
+ case cf2_escFLEX:
+ {
+ static const FT_Bool readFromStack[12] =
+ {
+ TRUE /* dx1 */, TRUE /* dy1 */,
+ TRUE /* dx2 */, TRUE /* dy2 */,
+ TRUE /* dx3 */, TRUE /* dy3 */,
+ TRUE /* dx4 */, TRUE /* dy4 */,
+ TRUE /* dx5 */, TRUE /* dy5 */,
+ TRUE /* dx6 */, TRUE /* dy6 */
+ };
+
+
+ FT_TRACE4(( " flex\n" ));
+
+ cf2_doFlex( opStack,
+ &curX,
+ &curY,
+ &glyphPath,
+ readFromStack,
+ FALSE /* doConditionalLastRead */ );
+ }
+ break; /* TODO: why is this not a continue? */
+
+ case cf2_escHFLEX1:
+ {
+ static const FT_Bool readFromStack[12] =
+ {
+ TRUE /* dx1 */, TRUE /* dy1 */,
+ TRUE /* dx2 */, TRUE /* dy2 */,
+ TRUE /* dx3 */, FALSE /* dy3 */,
+ TRUE /* dx4 */, FALSE /* dy4 */,
+ TRUE /* dx5 */, TRUE /* dy5 */,
+ TRUE /* dx6 */, FALSE /* dy6 */
+ };
+
+
+ FT_TRACE4(( " hflex1\n" ));
+
+ cf2_doFlex( opStack,
+ &curX,
+ &curY,
+ &glyphPath,
+ readFromStack,
+ FALSE /* doConditionalLastRead */ );
+ }
+ continue;
+
+ case cf2_escFLEX1:
+ {
+ static const FT_Bool readFromStack[12] =
+ {
+ TRUE /* dx1 */, TRUE /* dy1 */,
+ TRUE /* dx2 */, TRUE /* dy2 */,
+ TRUE /* dx3 */, TRUE /* dy3 */,
+ TRUE /* dx4 */, TRUE /* dy4 */,
+ TRUE /* dx5 */, TRUE /* dy5 */,
+ FALSE /* dx6 */, FALSE /* dy6 */
+ };
+
+
+ FT_TRACE4(( " flex1\n" ));
+
+ cf2_doFlex( opStack,
+ &curX,
+ &curY,
+ &glyphPath,
+ readFromStack,
+ TRUE /* doConditionalLastRead */ );
+ }
+ continue;
+
+ /* these opcodes are always reserved */
+ case cf2_escRESERVED_8:
+ case cf2_escRESERVED_13:
+ case cf2_escRESERVED_19:
+ case cf2_escRESERVED_25:
+ case cf2_escRESERVED_31:
+ case cf2_escRESERVED_32:
+ FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
+ break;
+
+ default:
+ {
+ if ( font->isCFF2 || op2 >= cf2_escRESERVED_38 )
+ FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
+ else if ( font->isT1 && result_cnt > 0 && op2 != cf2_escPOP )
+ {
+ /* all operands have been transferred by previous pops */
+ result_cnt = 0;
+ }
+ else
+ {
+ /* second switch for 2-byte operators handles */
+ /* CFF and Type 1 */
+ switch ( op2 )
+ {
+
+ case cf2_escDOTSECTION:
+ /* something about `flip type of locking' -- ignore it */
+ FT_TRACE4(( " dotsection\n" ));
+
+ break;
+
+ case cf2_escVSTEM3:
+ case cf2_escHSTEM3:
+ /*
+ * Type 1: Type 2:
+ * x0 dx0 x1 dx1 x2 dx2 vstem3 x dx {dxa dxb}* vstem
+ * y0 dy0 y1 dy1 y2 dy2 hstem3 y dy {dya dyb}* hstem
+ * relative to lsb point relative to zero
+ *
+ */
+ {
+ if ( !font->isT1 )
+ FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
+ else
+ {
+ CF2_F16Dot16 v0, v1, v2;
+
+ FT_Bool isV = FT_BOOL( op2 == cf2_escVSTEM3 );
+
+
+ FT_TRACE4(( isV ? " vstem3\n"
+ : " hstem3\n" ));
+
+ FT_ASSERT( cf2_stack_count( opStack ) == 6 );
+
+ v0 = cf2_stack_getReal( opStack, 0 );
+ v1 = cf2_stack_getReal( opStack, 2 );
+ v2 = cf2_stack_getReal( opStack, 4 );
+
+ cf2_stack_setReal(
+ opStack, 2,
+ SUB_INT32( SUB_INT32( v1, v0 ),
+ cf2_stack_getReal( opStack, 1 ) ) );
+ cf2_stack_setReal(
+ opStack, 4,
+ SUB_INT32( SUB_INT32( v2, v1 ),
+ cf2_stack_getReal( opStack, 3 ) ) );
+
+ /* add left-sidebearing correction */
+ cf2_doStems( font,
+ opStack,
+ isV ? &vStemHintArray : &hStemHintArray,
+ width,
+ &haveWidth,
+ isV ? decoder->builder.left_bearing->x
+ : decoder->builder.left_bearing->y );
+
+ if ( decoder->width_only )
+ goto exit;
+ }
+ }
+ break;
+
+ case cf2_escAND:
+ {
+ CF2_F16Dot16 arg1;
+ CF2_F16Dot16 arg2;
+
+
+ FT_TRACE4(( " and\n" ));
+
+ arg2 = cf2_stack_popFixed( opStack );
+ arg1 = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushInt( opStack, arg1 && arg2 );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escOR:
+ {
+ CF2_F16Dot16 arg1;
+ CF2_F16Dot16 arg2;
+
+
+ FT_TRACE4(( " or\n" ));
+
+ arg2 = cf2_stack_popFixed( opStack );
+ arg1 = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushInt( opStack, arg1 || arg2 );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escNOT:
+ {
+ CF2_F16Dot16 arg;
+
+
+ FT_TRACE4(( " not\n" ));
+
+ arg = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushInt( opStack, !arg );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escSEAC:
+ if ( !font->isT1 )
+ FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
+ else
+ {
+ FT_Error error2;
+ CF2_Int bchar_index, achar_index;
+ FT_Vector left_bearing, advance;
+
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+ T1_Face face = (T1_Face)decoder->builder.face;
+#endif
+ CF2_BufferRec component;
+ CF2_Fixed dummyWidth;
+
+ CF2_Int achar = cf2_stack_popInt( opStack );
+ CF2_Int bchar = cf2_stack_popInt( opStack );
+
+ FT_Pos ady = cf2_stack_popFixed ( opStack );
+ FT_Pos adx = cf2_stack_popFixed ( opStack );
+ FT_Pos asb = cf2_stack_popFixed ( opStack );
+
+
+ FT_TRACE4(( " seac\n" ));
+
+ if ( doingSeac )
+ {
+ FT_ERROR(( " nested seac\n" ));
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit; /* nested seac */
+ }
+
+ if ( decoder->builder.metrics_only )
+ {
+ FT_ERROR(( " unexpected seac\n" ));
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit; /* unexpected seac */
+ }
+
+ /* `glyph_names' is set to 0 for CID fonts which do */
+ /* not include an encoding. How can we deal with */
+ /* these? */
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+ if ( decoder->glyph_names == 0 &&
+ !face->root.internal->incremental_interface )
+#else
+ if ( decoder->glyph_names == 0 )
+#endif /* FT_CONFIG_OPTION_INCREMENTAL */
+ {
+ FT_ERROR((
+ "cf2_interpT2CharString: (Type 1 seac)"
+ " glyph names table not available in this font\n" ));
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ /* seac weirdness */
+ adx += decoder->builder.left_bearing->x;
+
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+ if ( face->root.internal->incremental_interface )
+ {
+ /* the caller must handle the font encoding also */
+ bchar_index = bchar;
+ achar_index = achar;
+ }
+ else
+#endif
+ {
+ bchar_index = t1_lookup_glyph_by_stdcharcode_ps(
+ decoder, bchar );
+ achar_index = t1_lookup_glyph_by_stdcharcode_ps(
+ decoder, achar );
+ }
+
+ if ( bchar_index < 0 || achar_index < 0 )
+ {
+ FT_ERROR((
+ "cf2_interpT2CharString: (Type 1 seac)"
+ " invalid seac character code arguments\n" ));
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ /* if we are trying to load a composite glyph, */
+ /* do not load the accent character and return */
+ /* the array of subglyphs. */
+ if ( decoder->builder.no_recurse )
+ {
+ FT_GlyphSlot glyph = (FT_GlyphSlot)decoder->builder.glyph;
+ FT_GlyphLoader loader = glyph->internal->loader;
+ FT_SubGlyph subg;
+
+
+ /* reallocate subglyph array if necessary */
+ error2 = FT_GlyphLoader_CheckSubGlyphs( loader, 2 );
+ if ( error2 )
+ {
+ lastError = error2; /* pass FreeType error through */
+ goto exit;
+ }
+
+ subg = loader->current.subglyphs;
+
+ /* subglyph 0 = base character */
+ subg->index = bchar_index;
+ subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES |
+ FT_SUBGLYPH_FLAG_USE_MY_METRICS;
+ subg->arg1 = 0;
+ subg->arg2 = 0;
+ subg++;
+
+ /* subglyph 1 = accent character */
+ subg->index = achar_index;
+ subg->flags = FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES;
+ subg->arg1 = (FT_Int)FIXED_TO_INT( adx - asb );
+ subg->arg2 = (FT_Int)FIXED_TO_INT( ady );
+
+ /* set up remaining glyph fields */
+ glyph->num_subglyphs = 2;
+ glyph->subglyphs = loader->base.subglyphs;
+ glyph->format = FT_GLYPH_FORMAT_COMPOSITE;
+
+ loader->current.num_subglyphs = 2;
+
+ goto exit;
+ }
+
+ /* First load `bchar' in builder */
+ /* now load the unscaled outline */
+
+ /* prepare loader */
+ FT_GlyphLoader_Prepare( decoder->builder.loader );
+
+ error2 = cf2_getT1SeacComponent( decoder,
+ (FT_UInt)bchar_index,
+ &component );
+ if ( error2 )
+ {
+ lastError = error2; /* pass FreeType error through */
+ goto exit;
+ }
+ cf2_interpT2CharString( font,
+ &component,
+ callbacks,
+ translation,
+ TRUE,
+ 0,
+ 0,
+ &dummyWidth );
+ cf2_freeT1SeacComponent( decoder, &component );
+
+ /* save the left bearing and width of the base */
+ /* character as they will be erased by the next load */
+
+ left_bearing = *decoder->builder.left_bearing;
+ advance = *decoder->builder.advance;
+
+ decoder->builder.left_bearing->x = 0;
+ decoder->builder.left_bearing->y = 0;
+
+ /* Now load `achar' on top of */
+ /* the base outline */
+
+ error2 = cf2_getT1SeacComponent( decoder,
+ (FT_UInt)achar_index,
+ &component );
+ if ( error2 )
+ {
+ lastError = error2; /* pass FreeType error through */
+ goto exit;
+ }
+ cf2_interpT2CharString( font,
+ &component,
+ callbacks,
+ translation,
+ TRUE,
+ adx - asb,
+ ady,
+ &dummyWidth );
+ cf2_freeT1SeacComponent( decoder, &component );
+
+ /* restore the left side bearing and */
+ /* advance width of the base character */
+
+ *decoder->builder.left_bearing = left_bearing;
+ *decoder->builder.advance = advance;
+
+ goto exit;
+ }
+ break;
+
+ case cf2_escSBW:
+ if ( !font->isT1 )
+ FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
+ else
+ {
+ CF2_Fixed lsb_x, lsb_y;
+ PS_Builder* builder;
+
+
+ FT_TRACE4(( " sbw" ));
+
+ builder = &decoder->builder;
+
+ builder->advance->y = cf2_stack_popFixed( opStack );
+ builder->advance->x = cf2_stack_popFixed( opStack );
+
+ lsb_y = cf2_stack_popFixed( opStack );
+ lsb_x = cf2_stack_popFixed( opStack );
+
+ builder->left_bearing->x =
+ ADD_INT32( builder->left_bearing->x, lsb_x );
+ builder->left_bearing->y =
+ ADD_INT32( builder->left_bearing->y, lsb_y );
+
+ haveWidth = TRUE;
+
+ /* the `metrics_only' indicates that we only want */
+ /* to compute the glyph's metrics (lsb + advance */
+ /* width), not load the rest of it; so exit */
+ /* immediately */
+ if ( builder->metrics_only )
+ goto exit;
+
+ if ( initial_map_ready )
+ {
+ curX = ADD_INT32( curX, lsb_x );
+ curY = ADD_INT32( curY, lsb_y );
+ }
+ }
+ break;
+
+ case cf2_escABS:
+ {
+ CF2_F16Dot16 arg;
+
+
+ FT_TRACE4(( " abs\n" ));
+
+ arg = cf2_stack_popFixed( opStack );
+
+ if ( arg < -CF2_FIXED_MAX )
+ cf2_stack_pushFixed( opStack, CF2_FIXED_MAX );
+ else
+ cf2_stack_pushFixed( opStack, FT_ABS( arg ) );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escADD:
+ {
+ CF2_F16Dot16 summand1;
+ CF2_F16Dot16 summand2;
+
+
+ FT_TRACE4(( " add\n" ));
+
+ summand2 = cf2_stack_popFixed( opStack );
+ summand1 = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushFixed( opStack,
+ ADD_INT32( summand1,
+ summand2 ) );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escSUB:
+ {
+ CF2_F16Dot16 minuend;
+ CF2_F16Dot16 subtrahend;
+
+
+ FT_TRACE4(( " sub\n" ));
+
+ subtrahend = cf2_stack_popFixed( opStack );
+ minuend = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushFixed( opStack,
+ SUB_INT32( minuend, subtrahend ) );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escDIV:
+ {
+ CF2_F16Dot16 dividend;
+ CF2_F16Dot16 divisor;
+
+
+ FT_TRACE4(( " div\n" ));
+
+ if ( font->isT1 && large_int )
+ {
+ divisor = (CF2_F16Dot16)cf2_stack_popInt( opStack );
+ dividend = (CF2_F16Dot16)cf2_stack_popInt( opStack );
+
+ large_int = FALSE;
+ }
+ else
+ {
+ divisor = cf2_stack_popFixed( opStack );
+ dividend = cf2_stack_popFixed( opStack );
+ }
+
+ cf2_stack_pushFixed( opStack,
+ FT_DivFix( dividend, divisor ) );
+
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escNEG:
+ {
+ CF2_F16Dot16 arg;
+
+
+ FT_TRACE4(( " neg\n" ));
+
+ arg = cf2_stack_popFixed( opStack );
+
+ if ( arg < -CF2_FIXED_MAX )
+ cf2_stack_pushFixed( opStack, CF2_FIXED_MAX );
+ else
+ cf2_stack_pushFixed( opStack, -arg );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escEQ:
+ {
+ CF2_F16Dot16 arg1;
+ CF2_F16Dot16 arg2;
+
+
+ FT_TRACE4(( " eq\n" ));
+
+ arg2 = cf2_stack_popFixed( opStack );
+ arg1 = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushInt( opStack, arg1 == arg2 );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escCALLOTHERSUBR:
+ if ( !font->isT1 )
+ FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
+ else
+ {
+ CF2_Int subr_no;
+ CF2_Int arg_cnt;
+ CF2_UInt count;
+ CF2_UInt opIdx = 0;
+
+
+ FT_TRACE4(( " callothersubr\n" ));
+
+ subr_no = cf2_stack_popInt( opStack );
+ arg_cnt = cf2_stack_popInt( opStack );
+
+ /*******************************************************/
+ /* */
+ /* remove all operands to callothersubr from the stack */
+ /* */
+ /* for handled othersubrs, where we know the number of */
+ /* arguments, we increase the stack by the value of */
+ /* known_othersubr_result_cnt */
+ /* */
+ /* for unhandled othersubrs the following pops adjust */
+ /* the stack pointer as necessary */
+
+ count = cf2_stack_count( opStack );
+ FT_ASSERT( (CF2_UInt)arg_cnt <= count );
+
+ opIdx += count - (CF2_UInt)arg_cnt;
+
+ known_othersubr_result_cnt = 0;
+ result_cnt = 0;
+
+ /* XXX TODO: The checks to `arg_count == <whatever>' */
+ /* might not be correct; an othersubr expects a */
+ /* certain number of operands on the PostScript stack */
+ /* (as opposed to the T1 stack) but it doesn't have to */
+ /* put them there by itself; previous othersubrs might */
+ /* have left the operands there if they were not */
+ /* followed by an appropriate number of pops */
+ /* */
+ /* On the other hand, Adobe Reader 7.0.8 for Linux */
+ /* doesn't accept a font that contains charstrings */
+ /* like */
+ /* */
+ /* 100 200 2 20 callothersubr */
+ /* 300 1 20 callothersubr pop */
+ /* */
+ /* Perhaps this is the reason why BuildCharArray */
+ /* exists. */
+
+ switch ( subr_no )
+ {
+ case 0: /* end flex feature */
+ if ( arg_cnt != 3 )
+ goto Unexpected_OtherSubr;
+
+ if ( initial_map_ready &&
+ ( !decoder->flex_state ||
+ decoder->num_flex_vectors != 7 ) )
+ {
+ FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
+ " unexpected flex end\n" ));
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ /* the two `results' are popped */
+ /* by the following setcurrentpoint */
+ cf2_stack_pushFixed( opStack, curX );
+ cf2_stack_pushFixed( opStack, curY );
+ known_othersubr_result_cnt = 2;
+ break;
+
+ case 1: /* start flex feature */
+ if ( arg_cnt != 0 )
+ goto Unexpected_OtherSubr;
+
+ if ( !initial_map_ready )
+ break;
+
+ if ( ps_builder_check_points( &decoder->builder, 6 ) )
+ goto exit;
+
+ decoder->flex_state = 1;
+ decoder->num_flex_vectors = 0;
+ break;
+
+ case 2: /* add flex vectors */
+ {
+ FT_Int idx;
+ FT_Int idx2;
+
+
+ if ( arg_cnt != 0 )
+ goto Unexpected_OtherSubr;
+
+ if ( !initial_map_ready )
+ break;
+
+ if ( !decoder->flex_state )
+ {
+ FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
+ " missing flex start\n" ));
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ /* note that we should not add a point for */
+ /* index 0; this will move our current position */
+ /* to the flex point without adding any point */
+ /* to the outline */
+ idx = decoder->num_flex_vectors++;
+ if ( idx > 0 && idx < 7 )
+ {
+ /* in malformed fonts it is possible to have */
+ /* other opcodes in the middle of a flex (which */
+ /* don't increase `num_flex_vectors'); we thus */
+ /* have to check whether we can add a point */
+
+ if ( ps_builder_check_points( &decoder->builder,
+ 1 ) )
+ {
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ /* map: 1->2 2->4 3->6 4->2 5->4 6->6 */
+ idx2 = ( idx > 3 ? idx - 3 : idx ) * 2;
+
+ flexStore[idx2 - 2] = curX;
+ flexStore[idx2 - 1] = curY;
+
+ if ( idx == 3 || idx == 6 )
+ cf2_glyphpath_curveTo( &glyphPath,
+ flexStore[0],
+ flexStore[1],
+ flexStore[2],
+ flexStore[3],
+ flexStore[4],
+ flexStore[5] );
+ }
+ }
+ break;
+
+ case 3: /* change hints */
+ if ( arg_cnt != 1 )
+ goto Unexpected_OtherSubr;
+
+ if ( initial_map_ready )
+ {
+ /* do not clear hints if initial hintmap */
+ /* is not ready - we need to collate all */
+ cf2_arrstack_clear( &vStemHintArray );
+ cf2_arrstack_clear( &hStemHintArray );
+
+ cf2_hintmask_init( &hintMask, error );
+ hintMask.isValid = FALSE;
+ hintMask.isNew = TRUE;
+ }
+
+ known_othersubr_result_cnt = 1;
+ break;
+
+ case 12:
+ case 13:
+ /* counter control hints, clear stack */
+ cf2_stack_clear( opStack );
+ break;
+
+ case 14:
+ case 15:
+ case 16:
+ case 17:
+ case 18: /* multiple masters */
+ {
+ PS_Blend blend = decoder->blend;
+ FT_UInt num_points, nn, mm;
+ CF2_UInt delta;
+ CF2_UInt values;
+
+
+ if ( !blend )
+ {
+ FT_ERROR((
+ "cf2_interpT2CharString:"
+ " unexpected multiple masters operator\n" ));
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ num_points = (FT_UInt)subr_no - 13 +
+ ( subr_no == 18 );
+ if ( arg_cnt != (FT_Int)( num_points *
+ blend->num_designs ) )
+ {
+ FT_ERROR((
+ "cf2_interpT2CharString:"
+ " incorrect number of multiple masters arguments\n" ));
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ /* We want to compute */
+ /* */
+ /* a0*w0 + a1*w1 + ... + ak*wk */
+ /* */
+ /* but we only have a0, a1-a0, a2-a0, ..., ak-a0. */
+ /* */
+ /* However, given that w0 + w1 + ... + wk == 1, we */
+ /* can rewrite it easily as */
+ /* */
+ /* a0 + (a1-a0)*w1 + (a2-a0)*w2 + ... + (ak-a0)*wk */
+ /* */
+ /* where k == num_designs-1. */
+ /* */
+ /* I guess that's why it's written in this `compact' */
+ /* form. */
+ /* */
+ delta = opIdx + num_points;
+ values = opIdx;
+ for ( nn = 0; nn < num_points; nn++ )
+ {
+ CF2_Fixed tmp = cf2_stack_getReal( opStack,
+ values );
+
+
+ for ( mm = 1; mm < blend->num_designs; mm++ )
+ tmp = ADD_INT32( tmp,
+ FT_MulFix(
+ cf2_stack_getReal( opStack,
+ delta++ ),
+ blend->weight_vector[mm] ) );
+
+ cf2_stack_setReal( opStack, values++, tmp );
+ }
+ cf2_stack_pop( opStack,
+ (CF2_UInt)arg_cnt - num_points );
+
+ known_othersubr_result_cnt = (FT_Int)num_points;
+ break;
+ }
+
+ case 19:
+ /* <idx> 1 19 callothersubr */
+ /* ==> replace elements starting from index */
+ /* cvi( <idx> ) of BuildCharArray with */
+ /* WeightVector */
+ {
+ FT_Int idx;
+ PS_Blend blend = decoder->blend;
+
+
+ if ( arg_cnt != 1 || !blend )
+ goto Unexpected_OtherSubr;
+
+ idx = cf2_stack_popInt( opStack );
+
+ if ( idx < 0 ||
+ (FT_UInt)idx + blend->num_designs >
+ decoder->len_buildchar )
+ goto Unexpected_OtherSubr;
+
+ ft_memcpy( &decoder->buildchar[idx],
+ blend->weight_vector,
+ blend->num_designs *
+ sizeof ( blend->weight_vector[0] ) );
+ }
+ break;
+
+ case 20:
+ /* <arg1> <arg2> 2 20 callothersubr pop */
+ /* ==> push <arg1> + <arg2> onto T1 stack */
+ {
+ CF2_F16Dot16 summand1;
+ CF2_F16Dot16 summand2;
+
+
+ if ( arg_cnt != 2 )
+ goto Unexpected_OtherSubr;
+
+ summand2 = cf2_stack_popFixed( opStack );
+ summand1 = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushFixed( opStack,
+ ADD_INT32( summand1,
+ summand2 ) );
+ known_othersubr_result_cnt = 1;
+ }
+ break;
+
+ case 21:
+ /* <arg1> <arg2> 2 21 callothersubr pop */
+ /* ==> push <arg1> - <arg2> onto T1 stack */
+ {
+ CF2_F16Dot16 minuend;
+ CF2_F16Dot16 subtrahend;
+
+
+ if ( arg_cnt != 2 )
+ goto Unexpected_OtherSubr;
+
+ subtrahend = cf2_stack_popFixed( opStack );
+ minuend = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushFixed( opStack,
+ SUB_INT32( minuend,
+ subtrahend ) );
+ known_othersubr_result_cnt = 1;
+ }
+ break;
+
+ case 22:
+ /* <arg1> <arg2> 2 22 callothersubr pop */
+ /* ==> push <arg1> * <arg2> onto T1 stack */
+ {
+ CF2_F16Dot16 factor1;
+ CF2_F16Dot16 factor2;
+
+
+ if ( arg_cnt != 2 )
+ goto Unexpected_OtherSubr;
+
+ factor2 = cf2_stack_popFixed( opStack );
+ factor1 = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushFixed( opStack,
+ FT_MulFix( factor1, factor2 ) );
+ known_othersubr_result_cnt = 1;
+ }
+ break;
+
+ case 23:
+ /* <arg1> <arg2> 2 23 callothersubr pop */
+ /* ==> push <arg1> / <arg2> onto T1 stack */
+ {
+ CF2_F16Dot16 dividend;
+ CF2_F16Dot16 divisor;
+
+
+ if ( arg_cnt != 2 )
+ goto Unexpected_OtherSubr;
+
+ divisor = cf2_stack_popFixed( opStack );
+ dividend = cf2_stack_popFixed( opStack );
+
+ if ( divisor == 0 )
+ goto Unexpected_OtherSubr;
+
+ cf2_stack_pushFixed( opStack,
+ FT_DivFix( dividend,
+ divisor ) );
+ known_othersubr_result_cnt = 1;
+ }
+ break;
+
+ case 24:
+ /* <val> <idx> 2 24 callothersubr */
+ /* ==> set BuildCharArray[cvi( <idx> )] = <val> */
+ {
+ CF2_Int idx;
+ PS_Blend blend = decoder->blend;
+
+
+ if ( arg_cnt != 2 || !blend )
+ goto Unexpected_OtherSubr;
+
+ idx = cf2_stack_popInt( opStack );
+
+ if ( idx < 0 ||
+ (FT_UInt)idx >= decoder->len_buildchar )
+ goto Unexpected_OtherSubr;
+
+ decoder->buildchar[idx] =
+ cf2_stack_popFixed( opStack );
+ }
+ break;
+
+ case 25:
+ /* <idx> 1 25 callothersubr pop */
+ /* ==> push BuildCharArray[cvi( idx )] */
+ /* onto T1 stack */
+ {
+ CF2_Int idx;
+ PS_Blend blend = decoder->blend;
+
+
+ if ( arg_cnt != 1 || !blend )
+ goto Unexpected_OtherSubr;
+
+ idx = cf2_stack_popInt( opStack );
+
+ if ( idx < 0 ||
+ (FT_UInt)idx >= decoder->len_buildchar )
+ goto Unexpected_OtherSubr;
+
+ cf2_stack_pushFixed( opStack,
+ decoder->buildchar[idx] );
+ known_othersubr_result_cnt = 1;
+ }
+ break;
+
+#if 0
+ case 26:
+ /* <val> mark <idx> */
+ /* ==> set BuildCharArray[cvi( <idx> )] = <val>, */
+ /* leave mark on T1 stack */
+ /* <val> <idx> */
+ /* ==> set BuildCharArray[cvi( <idx> )] = <val> */
+ XXX which routine has left its mark on the
+ XXX (PostScript) stack?;
+ break;
+#endif
+
+ case 27:
+ /* <res1> <res2> <val1> <val2> 4 27 callothersubr pop */
+ /* ==> push <res1> onto T1 stack if <val1> <= <val2>, */
+ /* otherwise push <res2> */
+ {
+ CF2_F16Dot16 arg1;
+ CF2_F16Dot16 arg2;
+ CF2_F16Dot16 cond1;
+ CF2_F16Dot16 cond2;
+
+
+ if ( arg_cnt != 4 )
+ goto Unexpected_OtherSubr;
+
+ cond2 = cf2_stack_popFixed( opStack );
+ cond1 = cf2_stack_popFixed( opStack );
+ arg2 = cf2_stack_popFixed( opStack );
+ arg1 = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushFixed( opStack,
+ cond1 <= cond2 ? arg1 : arg2 );
+ known_othersubr_result_cnt = 1;
+ }
+ break;
+
+ case 28:
+ /* 0 28 callothersubr pop */
+ /* ==> push random value from interval [0, 1) */
+ /* onto stack */
+ {
+ CF2_F16Dot16 r;
+
+
+ if ( arg_cnt != 0 )
+ goto Unexpected_OtherSubr;
+
+ /* only use the lower 16 bits of `random' */
+ /* to generate a number in the range (0;1] */
+ r = (CF2_F16Dot16)
+ ( ( decoder->current_subfont->random & 0xFFFF ) + 1 );
+
+ decoder->current_subfont->random =
+ cff_random( decoder->current_subfont->random );
+
+ cf2_stack_pushFixed( opStack, r );
+ known_othersubr_result_cnt = 1;
+ }
+ break;
+
+ default:
+ if ( arg_cnt >= 0 && subr_no >= 0 )
+ {
+ FT_Int i;
+
+
+ FT_ERROR((
+ "cf2_interpT2CharString (Type 1 mode):"
+ " unknown othersubr [%d %d], wish me luck\n",
+ arg_cnt, subr_no ));
+
+ /* store the unused args */
+ /* for this unhandled OtherSubr */
+
+ if ( arg_cnt > PS_STORAGE_SIZE )
+ arg_cnt = PS_STORAGE_SIZE;
+ result_cnt = arg_cnt;
+
+ for ( i = 1; i <= arg_cnt; i++ )
+ results[result_cnt - i] =
+ cf2_stack_popFixed( opStack );
+
+ break;
+ }
+ /* fall through */
+
+ Unexpected_OtherSubr:
+ FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
+ " invalid othersubr [%d %d]\n",
+ arg_cnt, subr_no ));
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escPOP:
+ if ( !font->isT1 )
+ FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
+ else
+ {
+ FT_TRACE4(( " pop" ));
+
+ if ( known_othersubr_result_cnt > 0 )
+ {
+ known_othersubr_result_cnt--;
+ /* ignore, we pushed the operands ourselves */
+ continue;
+ }
+
+ if ( result_cnt == 0 )
+ {
+ FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
+ " no more operands for othersubr\n" ));
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit;
+ }
+
+ result_cnt--;
+ cf2_stack_pushFixed( opStack, results[result_cnt] );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escDROP:
+ FT_TRACE4(( " drop\n" ));
+
+ (void)cf2_stack_popFixed( opStack );
+ continue; /* do not clear the stack */
+
+ case cf2_escPUT:
+ {
+ CF2_F16Dot16 val;
+ CF2_Int idx;
+
+
+ FT_TRACE4(( " put\n" ));
+
+ idx = cf2_stack_popInt( opStack );
+ val = cf2_stack_popFixed( opStack );
+
+ if ( idx >= 0 && idx < CF2_STORAGE_SIZE )
+ storage[idx] = val;
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escGET:
+ {
+ CF2_Int idx;
+
+
+ FT_TRACE4(( " get\n" ));
+
+ idx = cf2_stack_popInt( opStack );
+
+ if ( idx >= 0 && idx < CF2_STORAGE_SIZE )
+ cf2_stack_pushFixed( opStack, storage[idx] );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escIFELSE:
+ {
+ CF2_F16Dot16 arg1;
+ CF2_F16Dot16 arg2;
+ CF2_F16Dot16 cond1;
+ CF2_F16Dot16 cond2;
+
+
+ FT_TRACE4(( " ifelse\n" ));
+
+ cond2 = cf2_stack_popFixed( opStack );
+ cond1 = cf2_stack_popFixed( opStack );
+ arg2 = cf2_stack_popFixed( opStack );
+ arg1 = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushFixed( opStack,
+ cond1 <= cond2 ? arg1 : arg2 );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escRANDOM: /* in spec */
+ {
+ CF2_F16Dot16 r;
+
+
+ FT_TRACE4(( " random\n" ));
+
+ /* only use the lower 16 bits of `random' */
+ /* to generate a number in the range (0;1] */
+ r = (CF2_F16Dot16)
+ ( ( decoder->current_subfont->random & 0xFFFF ) + 1 );
+
+ decoder->current_subfont->random =
+ cff_random( decoder->current_subfont->random );
+
+ cf2_stack_pushFixed( opStack, r );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escMUL:
+ {
+ CF2_F16Dot16 factor1;
+ CF2_F16Dot16 factor2;
+
+
+ FT_TRACE4(( " mul\n" ));
+
+ factor2 = cf2_stack_popFixed( opStack );
+ factor1 = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushFixed( opStack,
+ FT_MulFix( factor1, factor2 ) );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escSQRT:
+ {
+ CF2_F16Dot16 arg;
+
+
+ FT_TRACE4(( " sqrt\n" ));
+
+ arg = cf2_stack_popFixed( opStack );
+ if ( arg > 0 )
+ {
+ /* use a start value that doesn't make */
+ /* the algorithm's addition overflow */
+ FT_Fixed root = arg < 10 ? arg : arg >> 1;
+ FT_Fixed new_root;
+
+
+ /* Babylonian method */
+ for (;;)
+ {
+ new_root = ( root + FT_DivFix( arg, root ) + 1 ) >> 1;
+ if ( new_root == root )
+ break;
+ root = new_root;
+ }
+ arg = new_root;
+ }
+ else
+ arg = 0;
+
+ cf2_stack_pushFixed( opStack, arg );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escDUP:
+ {
+ CF2_F16Dot16 arg;
+
+
+ FT_TRACE4(( " dup\n" ));
+
+ arg = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushFixed( opStack, arg );
+ cf2_stack_pushFixed( opStack, arg );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escEXCH:
+ {
+ CF2_F16Dot16 arg1;
+ CF2_F16Dot16 arg2;
+
+
+ FT_TRACE4(( " exch\n" ));
+
+ arg2 = cf2_stack_popFixed( opStack );
+ arg1 = cf2_stack_popFixed( opStack );
+
+ cf2_stack_pushFixed( opStack, arg2 );
+ cf2_stack_pushFixed( opStack, arg1 );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escINDEX:
+ {
+ CF2_Int idx;
+ CF2_UInt size;
+
+
+ FT_TRACE4(( " index\n" ));
+
+ idx = cf2_stack_popInt( opStack );
+ size = cf2_stack_count( opStack );
+
+ if ( size > 0 )
+ {
+ /* for `cf2_stack_getReal', */
+ /* index 0 is bottom of stack */
+ CF2_UInt gr_idx;
+
+
+ if ( idx < 0 )
+ gr_idx = size - 1;
+ else if ( (CF2_UInt)idx >= size )
+ gr_idx = 0;
+ else
+ gr_idx = size - 1 - (CF2_UInt)idx;
+
+ cf2_stack_pushFixed( opStack,
+ cf2_stack_getReal( opStack,
+ gr_idx ) );
+ }
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escROLL:
+ {
+ CF2_Int idx;
+ CF2_Int count;
+
+
+ FT_TRACE4(( " roll\n" ));
+
+ idx = cf2_stack_popInt( opStack );
+ count = cf2_stack_popInt( opStack );
+
+ cf2_stack_roll( opStack, count, idx );
+ }
+ continue; /* do not clear the stack */
+
+ case cf2_escSETCURRENTPT:
+ if ( !font->isT1 )
+ FT_TRACE4(( " unknown op (12, %d)\n", op2 ));
+ else
+ {
+ FT_TRACE4(( " setcurrentpoint" ));
+
+ if ( !initial_map_ready )
+ break;
+
+ /* From the T1 specification, section 6.4: */
+ /* */
+ /* The setcurrentpoint command is used only in */
+ /* conjunction with results from OtherSubrs */
+ /* procedures. */
+
+ /* known_othersubr_result_cnt != 0 is already handled */
+ /* above. */
+
+ /* Note, however, that both Ghostscript and Adobe */
+ /* Distiller handle this situation by silently */
+ /* ignoring the inappropriate `setcurrentpoint' */
+ /* instruction. So we do the same. */
+#if 0
+
+ if ( decoder->flex_state != 1 )
+ {
+ FT_ERROR(( "cf2_interpT2CharString:"
+ " unexpected `setcurrentpoint'\n" ));
+ goto Syntax_Error;
+ }
+ else
+ ...
+#endif
+
+ curY = cf2_stack_popFixed( opStack );
+ curX = cf2_stack_popFixed( opStack );
+
+ decoder->flex_state = 0;
+ }
+ break;
+
+ } /* end of 2nd switch checking op2 */
+ }
+ }
+ } /* end of 1st switch checking op2 */
+ } /* case cf2_cmdESC */
+
+ break;
+
+ case cf2_cmdHSBW:
+ if ( !font->isT1 )
+ FT_TRACE4(( " unknown op (%d)\n", op1 ));
+ else
+ {
+ CF2_Fixed lsb_x;
+ PS_Builder* builder;
+
+
+ FT_TRACE4(( " hsbw" ));
+
+ builder = &decoder->builder;
+
+ builder->advance->x = cf2_stack_popFixed( opStack );
+ builder->advance->y = 0;
+
+ lsb_x = cf2_stack_popFixed( opStack );
+
+ builder->left_bearing->x = ADD_INT32( builder->left_bearing->x,
+ lsb_x );
+
+ haveWidth = TRUE;
+
+ /* the `metrics_only' indicates that we only want to compute */
+ /* the glyph's metrics (lsb + advance width), not load the */
+ /* rest of it; so exit immediately */
+ if ( builder->metrics_only )
+ goto exit;
+
+ if ( initial_map_ready )
+ curX = ADD_INT32( curX, lsb_x );
+ }
+ break;
+
+ case cf2_cmdENDCHAR:
+ FT_TRACE4(( " endchar\n" ));
+
+ if ( font->isT1 && !initial_map_ready )
+ {
+ FT_TRACE5(( "cf2_interpT2CharString (Type 1 mode): "
+ "Build initial hintmap, rewinding...\n" ));
+
+ /* trigger initial hintmap build */
+ cf2_glyphpath_moveTo( &glyphPath, curX, curY );
+
+ initial_map_ready = TRUE;
+
+ /* change hints routine - clear for rewind */
+ cf2_arrstack_clear( &vStemHintArray );
+ cf2_arrstack_clear( &hStemHintArray );
+
+ cf2_hintmask_init( &hintMask, error );
+ hintMask.isValid = FALSE;
+ hintMask.isNew = TRUE;
+
+ /* rewind charstring */
+ /* some charstrings use endchar from a final subroutine call */
+ /* without returning, detect these and exit to the top level */
+ /* charstring */
+ while ( charstringIndex > 0 )
+ {
+ FT_TRACE4(( " return (leaving level %d)\n", charstringIndex ));
+
+ /* restore position in previous charstring */
+ charstring = (CF2_Buffer)
+ cf2_arrstack_getPointer(
+ &subrStack,
+ (CF2_UInt)--charstringIndex );
+ }
+ charstring->ptr = charstring->start;
+
+ break;
+ }
+
+ if ( cf2_stack_count( opStack ) == 1 ||
+ cf2_stack_count( opStack ) == 5 )
+ {
+ if ( !haveWidth )
+ *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
+ nominalWidthX );
+ }
+
+ /* width is defined or default after this */
+ haveWidth = TRUE;
+
+ if ( decoder->width_only )
+ goto exit;
+
+ /* close path if still open */
+ cf2_glyphpath_closeOpenPath( &glyphPath );
+
+ /* disable seac for CFF2 and Type1 */
+ /* (charstring ending with args on stack) */
+ if ( !font->isCFF2 && !font->isT1 && cf2_stack_count( opStack ) > 1 )
+ {
+ /* must be either 4 or 5 -- */
+ /* this is a (deprecated) implied `seac' operator */
+
+ CF2_Int achar;
+ CF2_Int bchar;
+ CF2_BufferRec component;
+ CF2_Fixed dummyWidth; /* ignore component width */
+ FT_Error error2;
+
+
+ if ( doingSeac )
+ {
+ lastError = FT_THROW( Invalid_Glyph_Format );
+ goto exit; /* nested seac */
+ }
+
+ achar = cf2_stack_popInt( opStack );
+ bchar = cf2_stack_popInt( opStack );
+
+ curY = cf2_stack_popFixed( opStack );
+ curX = cf2_stack_popFixed( opStack );
+
+ error2 = cf2_getSeacComponent( decoder, achar, &component );
+ if ( error2 )
+ {
+ lastError = error2; /* pass FreeType error through */
+ goto exit;
+ }
+ cf2_interpT2CharString( font,
+ &component,
+ callbacks,
+ translation,
+ TRUE,
+ curX,
+ curY,
+ &dummyWidth );
+ cf2_freeSeacComponent( decoder, &component );
+
+ error2 = cf2_getSeacComponent( decoder, bchar, &component );
+ if ( error2 )
+ {
+ lastError = error2; /* pass FreeType error through */
+ goto exit;
+ }
+ cf2_interpT2CharString( font,
+ &component,
+ callbacks,
+ translation,
+ TRUE,
+ 0,
+ 0,
+ &dummyWidth );
+ cf2_freeSeacComponent( decoder, &component );
+ }
+ goto exit;
+
+ case cf2_cmdCNTRMASK:
+ case cf2_cmdHINTMASK:
+ /* the final \n in the tracing message gets added in */
+ /* `cf2_hintmask_read' (which also traces the mask bytes) */
+ FT_TRACE4(( op1 == cf2_cmdCNTRMASK ? " cntrmask" : " hintmask" ));
+
+ /* never add hints after the mask is computed */
+ if ( cf2_stack_count( opStack ) > 1 &&
+ cf2_hintmask_isValid( &hintMask ) )
+ {
+ FT_TRACE4(( "cf2_interpT2CharString: invalid hint mask\n" ));
+ break;
+ }
+
+ /* if there are arguments on the stack, there this is an */
+ /* implied cf2_cmdVSTEMHM */
+ cf2_doStems( font,
+ opStack,
+ &vStemHintArray,
+ width,
+ &haveWidth,
+ 0 );
+
+ if ( decoder->width_only )
+ goto exit;
+
+ if ( op1 == cf2_cmdHINTMASK )
+ {
+ /* consume the hint mask bytes which follow the operator */
+ cf2_hintmask_read( &hintMask,
+ charstring,
+ cf2_arrstack_size( &hStemHintArray ) +
+ cf2_arrstack_size( &vStemHintArray ) );
+ }
+ else
+ {
+ /*
+ * Consume the counter mask bytes which follow the operator:
+ * Build a temporary hint map, just to place and lock those
+ * stems participating in the counter mask. These are most
+ * likely the dominant hstems, and are grouped together in a
+ * few counter groups, not necessarily in correspondence
+ * with the hint groups. This reduces the chances of
+ * conflicts between hstems that are initially placed in
+ * separate hint groups and then brought together. The
+ * positions are copied back to `hStemHintArray', so we can
+ * discard `counterMask' and `counterHintMap'.
+ *
+ */
+ CF2_HintMapRec counterHintMap;
+ CF2_HintMaskRec counterMask;
+
+
+ cf2_hintmap_init( &counterHintMap,
+ font,
+ &glyphPath.initialHintMap,
+ &glyphPath.hintMoves,
+ scaleY );
+ cf2_hintmask_init( &counterMask, error );
+
+ cf2_hintmask_read( &counterMask,
+ charstring,
+ cf2_arrstack_size( &hStemHintArray ) +
+ cf2_arrstack_size( &vStemHintArray ) );
+ cf2_hintmap_build( &counterHintMap,
+ &hStemHintArray,
+ &vStemHintArray,
+ &counterMask,
+ 0,
+ FALSE );
+ }
+ break;
+
+ case cf2_cmdRMOVETO:
+ FT_TRACE4(( " rmoveto\n" ));
+
+ if ( font->isT1 && !decoder->flex_state && !haveWidth )
+ FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
+ " No width. Use hsbw/sbw as first op\n" ));
+
+ if ( cf2_stack_count( opStack ) > 2 && !haveWidth )
+ *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
+ nominalWidthX );
+
+ /* width is defined or default after this */
+ haveWidth = TRUE;
+
+ if ( decoder->width_only )
+ goto exit;
+
+ curY = ADD_INT32( curY, cf2_stack_popFixed( opStack ) );
+ curX = ADD_INT32( curX, cf2_stack_popFixed( opStack ) );
+
+ if ( !decoder->flex_state )
+ cf2_glyphpath_moveTo( &glyphPath, curX, curY );
+
+ break;
+
+ case cf2_cmdHMOVETO:
+ FT_TRACE4(( " hmoveto\n" ));
+
+ if ( font->isT1 && !decoder->flex_state && !haveWidth )
+ FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
+ " No width. Use hsbw/sbw as first op\n" ));
+
+ if ( cf2_stack_count( opStack ) > 1 && !haveWidth )
+ *width = ADD_INT32( cf2_stack_getReal( opStack, 0 ),
+ nominalWidthX );
+
+ /* width is defined or default after this */
+ haveWidth = TRUE;
+
+ if ( decoder->width_only )
+ goto exit;
+
+ curX = ADD_INT32( curX, cf2_stack_popFixed( opStack ) );
+
+ if ( !decoder->flex_state )
+ cf2_glyphpath_moveTo( &glyphPath, curX, curY );
+
+ break;
+
+ case cf2_cmdRLINECURVE:
+ {
+ CF2_UInt count = cf2_stack_count( opStack );
+ CF2_UInt idx = 0;
+
+
+ FT_TRACE4(( " rlinecurve\n" ));
+
+ while ( idx + 6 < count )
+ {
+ curX = ADD_INT32( curX, cf2_stack_getReal( opStack,
+ idx + 0 ) );
+ curY = ADD_INT32( curY, cf2_stack_getReal( opStack,
+ idx + 1 ) );
+
+ cf2_glyphpath_lineTo( &glyphPath, curX, curY );
+ idx += 2;
+ }
+
+ while ( idx < count )
+ {
+ CF2_Fixed x1, y1, x2, y2, x3, y3;
+
+
+ x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
+ y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), curY );
+ x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), x1 );
+ y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y1 );
+ x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 );
+ y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 5 ), y2 );
+
+ cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
+
+ curX = x3;
+ curY = y3;
+ idx += 6;
+ }
+
+ cf2_stack_clear( opStack );
+ }
+ continue; /* no need to clear stack again */
+
+ case cf2_cmdVVCURVETO:
+ {
+ CF2_UInt count, count1 = cf2_stack_count( opStack );
+ CF2_UInt idx = 0;
+
+
+ /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
+ /* we enforce it by clearing the second bit */
+ /* (and sorting the stack indexing to suit) */
+ count = count1 & ~2U;
+ idx += count1 - count;
+
+ FT_TRACE4(( " vvcurveto\n" ));
+
+ while ( idx < count )
+ {
+ CF2_Fixed x1, y1, x2, y2, x3, y3;
+
+
+ if ( ( count - idx ) & 1 )
+ {
+ x1 = ADD_INT32( cf2_stack_getReal( opStack, idx ), curX );
+
+ idx++;
+ }
+ else
+ x1 = curX;
+
+ y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curY );
+ x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
+ y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
+ x3 = x2;
+ y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y2 );
+
+ cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
+
+ curX = x3;
+ curY = y3;
+ idx += 4;
+ }
+
+ cf2_stack_clear( opStack );
+ }
+ continue; /* no need to clear stack again */
+
+ case cf2_cmdHHCURVETO:
+ {
+ CF2_UInt count, count1 = cf2_stack_count( opStack );
+ CF2_UInt idx = 0;
+
+
+ /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
+ /* we enforce it by clearing the second bit */
+ /* (and sorting the stack indexing to suit) */
+ count = count1 & ~2U;
+ idx += count1 - count;
+
+ FT_TRACE4(( " hhcurveto\n" ));
+
+ while ( idx < count )
+ {
+ CF2_Fixed x1, y1, x2, y2, x3, y3;
+
+
+ if ( ( count - idx ) & 1 )
+ {
+ y1 = ADD_INT32( cf2_stack_getReal( opStack, idx ), curY );
+
+ idx++;
+ }
+ else
+ y1 = curY;
+
+ x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
+ x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
+ y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
+ x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), x2 );
+ y3 = y2;
+
+ cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
+
+ curX = x3;
+ curY = y3;
+ idx += 4;
+ }
+
+ cf2_stack_clear( opStack );
+ }
+ continue; /* no need to clear stack again */
+
+ case cf2_cmdVHCURVETO:
+ case cf2_cmdHVCURVETO:
+ {
+ CF2_UInt count, count1 = cf2_stack_count( opStack );
+ CF2_UInt idx = 0;
+
+ FT_Bool alternate = FT_BOOL( op1 == cf2_cmdHVCURVETO );
+
+
+ /* if `cf2_stack_count' isn't of the form 8n, 8n+1, */
+ /* 8n+4, or 8n+5, we enforce it by clearing the */
+ /* second bit */
+ /* (and sorting the stack indexing to suit) */
+ count = count1 & ~2U;
+ idx += count1 - count;
+
+ FT_TRACE4(( alternate ? " hvcurveto\n" : " vhcurveto\n" ));
+
+ while ( idx < count )
+ {
+ CF2_Fixed x1, x2, x3, y1, y2, y3;
+
+
+ if ( alternate )
+ {
+ x1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curX );
+ y1 = curY;
+ x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
+ y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
+ y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), y2 );
+
+ if ( count - idx == 5 )
+ {
+ x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), x2 );
+
+ idx++;
+ }
+ else
+ x3 = x2;
+
+ alternate = FALSE;
+ }
+ else
+ {
+ x1 = curX;
+ y1 = ADD_INT32( cf2_stack_getReal( opStack, idx + 0 ), curY );
+ x2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 1 ), x1 );
+ y2 = ADD_INT32( cf2_stack_getReal( opStack, idx + 2 ), y1 );
+ x3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 3 ), x2 );
+
+ if ( count - idx == 5 )
+ {
+ y3 = ADD_INT32( cf2_stack_getReal( opStack, idx + 4 ), y2 );
+
+ idx++;
+ }
+ else
+ y3 = y2;
+
+ alternate = TRUE;
+ }
+
+ cf2_glyphpath_curveTo( &glyphPath, x1, y1, x2, y2, x3, y3 );
+
+ curX = x3;
+ curY = y3;
+ idx += 4;
+ }
+
+ cf2_stack_clear( opStack );
+ }
+ continue; /* no need to clear stack again */
+
+ case cf2_cmdEXTENDEDNMBR:
+ {
+ CF2_Int v;
+
+ CF2_Int byte1 = cf2_buf_readByte( charstring );
+ CF2_Int byte2 = cf2_buf_readByte( charstring );
+
+
+ v = (FT_Short)( ( byte1 << 8 ) |
+ byte2 );
+
+ FT_TRACE4(( " %d", v ));
+
+ cf2_stack_pushInt( opStack, v );
+ }
+ continue;
+
+ default:
+ /* numbers */
+ {
+ if ( /* op1 >= 32 && */ op1 <= 246 )
+ {
+ CF2_Int v;
+
+
+ v = op1 - 139;
+
+ FT_TRACE4(( " %d", v ));
+
+ /* -107 .. 107 */
+ cf2_stack_pushInt( opStack, v );
+ }
+
+ else if ( /* op1 >= 247 && */ op1 <= 250 )
+ {
+ CF2_Int v;
+
+
+ v = op1;
+ v -= 247;
+ v *= 256;
+ v += cf2_buf_readByte( charstring );
+ v += 108;
+
+ FT_TRACE4(( " %d", v ));
+
+ /* 108 .. 1131 */
+ cf2_stack_pushInt( opStack, v );
+ }
+
+ else if ( /* op1 >= 251 && */ op1 <= 254 )
+ {
+ CF2_Int v;
+
+
+ v = op1;
+ v -= 251;
+ v *= 256;
+ v += cf2_buf_readByte( charstring );
+ v = -v - 108;
+
+ FT_TRACE4(( " %d", v ));
+
+ /* -1131 .. -108 */
+ cf2_stack_pushInt( opStack, v );
+ }
+
+ else /* op1 == 255 */
+ {
+ CF2_Fixed v;
+
+ FT_UInt32 byte1 = (FT_UInt32)cf2_buf_readByte( charstring );
+ FT_UInt32 byte2 = (FT_UInt32)cf2_buf_readByte( charstring );
+ FT_UInt32 byte3 = (FT_UInt32)cf2_buf_readByte( charstring );
+ FT_UInt32 byte4 = (FT_UInt32)cf2_buf_readByte( charstring );
+
+
+ v = (CF2_Fixed)( ( byte1 << 24 ) |
+ ( byte2 << 16 ) |
+ ( byte3 << 8 ) |
+ byte4 );
+
+ /*
+ * For Type 1:
+ *
+ * According to the specification, values > 32000 or < -32000
+ * must be followed by a `div' operator to make the result be
+ * in the range [-32000;32000]. We expect that the second
+ * argument of `div' is not a large number. Additionally, we
+ * don't handle stuff like `<large1> <large2> <num> div <num>
+ * div' or <large1> <large2> <num> div div'. This is probably
+ * not allowed anyway.
+ *
+ * <large> <num> <num>+ div is not checked but should not be
+ * allowed as the large value remains untouched.
+ *
+ */
+ if ( font->isT1 )
+ {
+ if ( v > 32000 || v < -32000 )
+ {
+ if ( large_int )
+ FT_ERROR(( "cf2_interpT2CharString (Type 1 mode):"
+ " no `div' after large integer\n" ));
+ else
+ large_int = TRUE;
+ }
+
+ FT_TRACE4(( " %d", v ));
+
+ cf2_stack_pushInt( opStack, (CF2_Int)v );
+ }
+ else
+ {
+ FT_TRACE4(( " %.5fF", v / 65536.0 ));
+
+ cf2_stack_pushFixed( opStack, v );
+ }
+ }
+ }
+ continue; /* don't clear stack */
+
+ } /* end of switch statement checking `op1' */
+
+ cf2_stack_clear( opStack );
+
+ } /* end of main interpreter loop */
+
+ /* we get here if the charstring ends without cf2_cmdENDCHAR */
+ FT_TRACE4(( "cf2_interpT2CharString:"
+ " charstring ends without ENDCHAR\n" ));
+
+ exit:
+ /* check whether last error seen is also the first one */
+ cf2_setError( error, lastError );
+
+ if ( *error )
+ FT_TRACE4(( "charstring error %d\n", *error ));
+
+ /* free resources from objects we've used */
+ cf2_glyphpath_finalize( &glyphPath );
+ cf2_arrstack_finalize( &vStemHintArray );
+ cf2_arrstack_finalize( &hStemHintArray );
+ cf2_arrstack_finalize( &subrStack );
+ cf2_stack_free( opStack );
+
+ FT_TRACE4(( "\n" ));
+
+ return;
+ }
+
+
+/* END */
diff --git a/src/cff/cf2intrp.h b/src/psaux/psintrp.h
similarity index 95%
rename from src/cff/cf2intrp.h
rename to src/psaux/psintrp.h
index b5d8947..4790aaa 100644
--- a/src/cff/cf2intrp.h
+++ b/src/psaux/psintrp.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2font.h */
+/* psintrp.h */
/* */
/* Adobe's CFF Interpreter (specification). */
/* */
@@ -36,12 +36,12 @@
/***************************************************************************/
-#ifndef __CF2INTRP_H__
-#define __CF2INTRP_H__
+#ifndef PSINTRP_H_
+#define PSINTRP_H_
-#include "cf2ft.h"
-#include "cf2hints.h"
+#include "psft.h"
+#include "pshints.h"
FT_BEGIN_HEADER
@@ -77,7 +77,7 @@
FT_END_HEADER
-#endif /* __CF2INTRP_H__ */
+#endif /* PSINTRP_H_ */
/* END */
diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c
index c7cbc67..f54bc7e 100644
--- a/src/psaux/psobjs.c
+++ b/src/psaux/psobjs.c
@@ -4,7 +4,7 @@
/* */
/* Auxiliary functions for PostScript fonts (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,11 +20,13 @@
#include FT_INTERNAL_POSTSCRIPT_AUX_H
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_CALC_H
+#include FT_DRIVER_H
#include "psobjs.h"
#include "psconv.h"
#include "psauxerr.h"
+#include "psauxmod.h"
/*************************************************************************/
@@ -344,7 +346,7 @@
FT_Byte c = *cur;
- ++cur;
+ cur++;
if ( c == '\\' )
{
@@ -370,17 +372,17 @@
case '\\':
case '(':
case ')':
- ++cur;
+ cur++;
break;
default:
/* skip octal escape or ignore backslash */
- for ( i = 0; i < 3 && cur < limit; ++i )
+ for ( i = 0; i < 3 && cur < limit; i++ )
{
if ( !IS_OCTAL_DIGIT( *cur ) )
break;
- ++cur;
+ cur++;
}
}
}
@@ -455,19 +457,19 @@
FT_ASSERT( **acur == '{' );
- for ( cur = *acur; cur < limit && error == FT_Err_Ok; ++cur )
+ for ( cur = *acur; cur < limit && error == FT_Err_Ok; cur++ )
{
switch ( *cur )
{
case '{':
- ++embed;
+ embed++;
break;
case '}':
- --embed;
+ embed--;
if ( embed == 0 )
{
- ++cur;
+ cur++;
goto end;
}
break;
@@ -594,6 +596,9 @@
error = FT_THROW( Invalid_File_Format );
}
+ if ( cur > limit )
+ cur = limit;
+
parser->error = error;
parser->cursor = cur;
}
@@ -692,7 +697,7 @@
/* ************ otherwise, it is any token **************/
default:
token->start = cur;
- token->type = ( *cur == '/' ? T1_TOKEN_TYPE_KEY : T1_TOKEN_TYPE_ANY );
+ token->type = ( *cur == '/' ) ? T1_TOKEN_TYPE_KEY : T1_TOKEN_TYPE_ANY;
ps_parser_skip_PS_token( parser );
cur = parser->cursor;
if ( !parser->error )
@@ -747,7 +752,7 @@
if ( !token.type )
break;
- if ( tokens != NULL && cur < limit )
+ if ( tokens && cur < limit )
*cur = token;
cur++;
@@ -812,12 +817,12 @@
old_cur = cur;
- if ( coords != NULL && count >= max_coords )
+ if ( coords && count >= max_coords )
break;
/* call PS_Conv_ToFixed() even if coords == NULL */
/* to properly parse number at `cur' */
- *( coords != NULL ? &coords[count] : &dummy ) =
+ *( coords ? &coords[count] : &dummy ) =
(FT_Short)( PS_Conv_ToFixed( &cur, limit, 0 ) >> 16 );
if ( old_cur == cur )
@@ -892,12 +897,12 @@
old_cur = cur;
- if ( values != NULL && count >= max_values )
+ if ( values && count >= max_values )
break;
/* call PS_Conv_ToFixed() even if coords == NULL */
/* to properly parse number at `cur' */
- *( values != NULL ? &values[count] : &dummy ) =
+ *( values ? &values[count] : &dummy ) =
PS_Conv_ToFixed( &cur, limit, power_ten );
if ( old_cur == cur )
@@ -1084,9 +1089,9 @@
for ( ; count > 0; count--, idx++ )
{
- FT_Byte* q = (FT_Byte*)objects[idx] + field->offset;
+ FT_Byte* q = (FT_Byte*)objects[idx] + field->offset;
FT_Long val;
- FT_String* string;
+ FT_String* string = NULL;
skip_spaces( &cur, limit );
@@ -1169,7 +1174,7 @@
/* for this to work (FT_String**)q must have been */
/* initialized to NULL */
- if ( *(FT_String**)q != NULL )
+ if ( *(FT_String**)q )
{
FT_TRACE0(( "ps_parser_load_field: overwriting field %s\n",
field->ident ));
@@ -1214,7 +1219,7 @@
case T1_FIELD_TYPE_MM_BBOX:
{
FT_Memory memory = parser->memory;
- FT_Fixed* temp;
+ FT_Fixed* temp = NULL;
FT_Int result;
FT_UInt i;
@@ -1229,15 +1234,17 @@
if ( result < 0 || (FT_UInt)result < max_objects )
{
FT_ERROR(( "ps_parser_load_field:"
- " expected %d integers in the %s subarray\n"
+ " expected %d integer%s in the %s subarray\n"
" "
" of /FontBBox in the /Blend dictionary\n",
- max_objects,
+ max_objects, max_objects > 1 ? "s" : "",
i == 0 ? "first"
: ( i == 1 ? "second"
: ( i == 2 ? "third"
: "fourth" ) ) ));
error = FT_THROW( Invalid_File_Format );
+
+ FT_FREE( temp );
goto Exit;
}
@@ -1546,7 +1553,7 @@
builder->current = &loader->current.outline;
FT_GlyphLoader_Rewind( loader );
- builder->hints_globals = size->internal;
+ builder->hints_globals = size->internal->module_data;
builder->hints_funcs = NULL;
if ( hinting )
@@ -1713,6 +1720,581 @@
first = outline->n_contours <= 1
? 0 : outline->contours[outline->n_contours - 2] + 1;
+ /* in malformed fonts it can happen that a contour was started */
+ /* but no points were added */
+ if ( outline->n_contours && first == outline->n_points )
+ {
+ outline->n_contours--;
+ return;
+ }
+
+ /* We must not include the last point in the path if it */
+ /* is located on the first point. */
+ if ( outline->n_points > 1 )
+ {
+ FT_Vector* p1 = outline->points + first;
+ FT_Vector* p2 = outline->points + outline->n_points - 1;
+ FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points - 1;
+
+
+ /* `delete' last point only if it coincides with the first */
+ /* point and it is not a control point (which can happen). */
+ if ( p1->x == p2->x && p1->y == p2->y )
+ if ( *control == FT_CURVE_TAG_ON )
+ outline->n_points--;
+ }
+
+ if ( outline->n_contours > 0 )
+ {
+ /* Don't add contours only consisting of one point, i.e., */
+ /* check whether the first and the last point is the same. */
+ if ( first == outline->n_points - 1 )
+ {
+ outline->n_contours--;
+ outline->n_points--;
+ }
+ else
+ outline->contours[outline->n_contours - 1] =
+ (short)( outline->n_points - 1 );
+ }
+ }
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CFF BUILDER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* cff_builder_init */
+ /* */
+ /* <Description> */
+ /* Initializes a given glyph builder. */
+ /* */
+ /* <InOut> */
+ /* builder :: A pointer to the glyph builder to initialize. */
+ /* */
+ /* <Input> */
+ /* face :: The current face object. */
+ /* */
+ /* size :: The current size object. */
+ /* */
+ /* glyph :: The current glyph object. */
+ /* */
+ /* hinting :: Whether hinting is active. */
+ /* */
+ FT_LOCAL_DEF( void )
+ cff_builder_init( CFF_Builder* builder,
+ TT_Face face,
+ CFF_Size size,
+ CFF_GlyphSlot glyph,
+ FT_Bool hinting )
+ {
+ builder->path_begun = 0;
+ builder->load_points = 1;
+
+ builder->face = face;
+ builder->glyph = glyph;
+ builder->memory = face->root.memory;
+
+ if ( glyph )
+ {
+ FT_GlyphLoader loader = glyph->root.internal->loader;
+
+
+ builder->loader = loader;
+ builder->base = &loader->base.outline;
+ builder->current = &loader->current.outline;
+ FT_GlyphLoader_Rewind( loader );
+
+ builder->hints_globals = NULL;
+ builder->hints_funcs = NULL;
+
+ if ( hinting && size )
+ {
+ FT_Size ftsize = FT_SIZE( size );
+ CFF_Internal internal = (CFF_Internal)ftsize->internal->module_data;
+
+ if ( internal )
+ {
+ builder->hints_globals = (void *)internal->topfont;
+ builder->hints_funcs = glyph->root.internal->glyph_hints;
+ }
+ }
+ }
+
+ builder->pos_x = 0;
+ builder->pos_y = 0;
+
+ builder->left_bearing.x = 0;
+ builder->left_bearing.y = 0;
+ builder->advance.x = 0;
+ builder->advance.y = 0;
+
+ builder->funcs = cff_builder_funcs;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* cff_builder_done */
+ /* */
+ /* <Description> */
+ /* Finalizes a given glyph builder. Its contents can still be used */
+ /* after the call, but the function saves important information */
+ /* within the corresponding glyph slot. */
+ /* */
+ /* <Input> */
+ /* builder :: A pointer to the glyph builder to finalize. */
+ /* */
+ FT_LOCAL_DEF( void )
+ cff_builder_done( CFF_Builder* builder )
+ {
+ CFF_GlyphSlot glyph = builder->glyph;
+
+
+ if ( glyph )
+ glyph->root.outline = *builder->base;
+ }
+
+
+ /* check that there is enough space for `count' more points */
+ FT_LOCAL_DEF( FT_Error )
+ cff_check_points( CFF_Builder* builder,
+ FT_Int count )
+ {
+ return FT_GLYPHLOADER_CHECK_POINTS( builder->loader, count, 0 );
+ }
+
+
+ /* add a new point, do not check space */
+ FT_LOCAL_DEF( void )
+ cff_builder_add_point( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y,
+ FT_Byte flag )
+ {
+ FT_Outline* outline = builder->current;
+
+
+ if ( builder->load_points )
+ {
+ FT_Vector* point = outline->points + outline->n_points;
+ FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points;
+
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( builder->face );
+
+
+ if ( driver->hinting_engine == FT_HINTING_FREETYPE )
+ {
+ point->x = x >> 16;
+ point->y = y >> 16;
+ }
+ else
+#endif
+ {
+ /* cf2_decoder_parse_charstrings uses 16.16 coordinates */
+ point->x = x >> 10;
+ point->y = y >> 10;
+ }
+ *control = (FT_Byte)( flag ? FT_CURVE_TAG_ON : FT_CURVE_TAG_CUBIC );
+ }
+
+ outline->n_points++;
+ }
+
+
+ /* check space for a new on-curve point, then add it */
+ FT_LOCAL_DEF( FT_Error )
+ cff_builder_add_point1( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y )
+ {
+ FT_Error error;
+
+
+ error = cff_check_points( builder, 1 );
+ if ( !error )
+ cff_builder_add_point( builder, x, y, 1 );
+
+ return error;
+ }
+
+
+ /* check space for a new contour, then add it */
+ FT_LOCAL_DEF( FT_Error )
+ cff_builder_add_contour( CFF_Builder* builder )
+ {
+ FT_Outline* outline = builder->current;
+ FT_Error error;
+
+
+ if ( !builder->load_points )
+ {
+ outline->n_contours++;
+ return FT_Err_Ok;
+ }
+
+ error = FT_GLYPHLOADER_CHECK_POINTS( builder->loader, 0, 1 );
+ if ( !error )
+ {
+ if ( outline->n_contours > 0 )
+ outline->contours[outline->n_contours - 1] =
+ (short)( outline->n_points - 1 );
+
+ outline->n_contours++;
+ }
+
+ return error;
+ }
+
+
+ /* if a path was begun, add its first on-curve point */
+ FT_LOCAL_DEF( FT_Error )
+ cff_builder_start_point( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y )
+ {
+ FT_Error error = FT_Err_Ok;
+
+
+ /* test whether we are building a new contour */
+ if ( !builder->path_begun )
+ {
+ builder->path_begun = 1;
+ error = cff_builder_add_contour( builder );
+ if ( !error )
+ error = cff_builder_add_point1( builder, x, y );
+ }
+
+ return error;
+ }
+
+
+ /* close the current contour */
+ FT_LOCAL_DEF( void )
+ cff_builder_close_contour( CFF_Builder* builder )
+ {
+ FT_Outline* outline = builder->current;
+ FT_Int first;
+
+
+ if ( !outline )
+ return;
+
+ first = outline->n_contours <= 1
+ ? 0 : outline->contours[outline->n_contours - 2] + 1;
+
+ /* We must not include the last point in the path if it */
+ /* is located on the first point. */
+ if ( outline->n_points > 1 )
+ {
+ FT_Vector* p1 = outline->points + first;
+ FT_Vector* p2 = outline->points + outline->n_points - 1;
+ FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points - 1;
+
+
+ /* `delete' last point only if it coincides with the first */
+ /* point and if it is not a control point (which can happen). */
+ if ( p1->x == p2->x && p1->y == p2->y )
+ if ( *control == FT_CURVE_TAG_ON )
+ outline->n_points--;
+ }
+
+ if ( outline->n_contours > 0 )
+ {
+ /* Don't add contours only consisting of one point, i.e., */
+ /* check whether begin point and last point are the same. */
+ if ( first == outline->n_points - 1 )
+ {
+ outline->n_contours--;
+ outline->n_points--;
+ }
+ else
+ outline->contours[outline->n_contours - 1] =
+ (short)( outline->n_points - 1 );
+ }
+ }
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** PS BUILDER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ps_builder_init */
+ /* */
+ /* <Description> */
+ /* Initializes a given glyph builder. */
+ /* */
+ /* <InOut> */
+ /* builder :: A pointer to the glyph builder to initialize. */
+ /* */
+ /* <Input> */
+ /* face :: The current face object. */
+ /* */
+ /* size :: The current size object. */
+ /* */
+ /* glyph :: The current glyph object. */
+ /* */
+ /* hinting :: Whether hinting should be applied. */
+ /* */
+ FT_LOCAL_DEF( void )
+ ps_builder_init( PS_Builder* ps_builder,
+ void* builder,
+ FT_Bool is_t1 )
+ {
+ FT_ZERO( ps_builder );
+
+ if ( is_t1 )
+ {
+ T1_Builder t1builder = (T1_Builder)builder;
+
+
+ ps_builder->memory = t1builder->memory;
+ ps_builder->face = (FT_Face)t1builder->face;
+ ps_builder->glyph = (CFF_GlyphSlot)t1builder->glyph;
+ ps_builder->loader = t1builder->loader;
+ ps_builder->base = t1builder->base;
+ ps_builder->current = t1builder->current;
+
+ ps_builder->pos_x = &t1builder->pos_x;
+ ps_builder->pos_y = &t1builder->pos_y;
+
+ ps_builder->left_bearing = &t1builder->left_bearing;
+ ps_builder->advance = &t1builder->advance;
+
+ ps_builder->bbox = &t1builder->bbox;
+ ps_builder->path_begun = 0;
+ ps_builder->load_points = t1builder->load_points;
+ ps_builder->no_recurse = t1builder->no_recurse;
+
+ ps_builder->metrics_only = t1builder->metrics_only;
+ }
+ else
+ {
+ CFF_Builder* cffbuilder = (CFF_Builder*)builder;
+
+
+ ps_builder->memory = cffbuilder->memory;
+ ps_builder->face = (FT_Face)cffbuilder->face;
+ ps_builder->glyph = cffbuilder->glyph;
+ ps_builder->loader = cffbuilder->loader;
+ ps_builder->base = cffbuilder->base;
+ ps_builder->current = cffbuilder->current;
+
+ ps_builder->pos_x = &cffbuilder->pos_x;
+ ps_builder->pos_y = &cffbuilder->pos_y;
+
+ ps_builder->left_bearing = &cffbuilder->left_bearing;
+ ps_builder->advance = &cffbuilder->advance;
+
+ ps_builder->bbox = &cffbuilder->bbox;
+ ps_builder->path_begun = cffbuilder->path_begun;
+ ps_builder->load_points = cffbuilder->load_points;
+ ps_builder->no_recurse = cffbuilder->no_recurse;
+
+ ps_builder->metrics_only = cffbuilder->metrics_only;
+ }
+
+ ps_builder->is_t1 = is_t1;
+ ps_builder->funcs = ps_builder_funcs;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ps_builder_done */
+ /* */
+ /* <Description> */
+ /* Finalizes a given glyph builder. Its contents can still be used */
+ /* after the call, but the function saves important information */
+ /* within the corresponding glyph slot. */
+ /* */
+ /* <Input> */
+ /* builder :: A pointer to the glyph builder to finalize. */
+ /* */
+ FT_LOCAL_DEF( void )
+ ps_builder_done( PS_Builder* builder )
+ {
+ CFF_GlyphSlot glyph = builder->glyph;
+
+
+ if ( glyph )
+ glyph->root.outline = *builder->base;
+ }
+
+
+ /* check that there is enough space for `count' more points */
+ FT_LOCAL_DEF( FT_Error )
+ ps_builder_check_points( PS_Builder* builder,
+ FT_Int count )
+ {
+ return FT_GLYPHLOADER_CHECK_POINTS( builder->loader, count, 0 );
+ }
+
+
+ /* add a new point, do not check space */
+ FT_LOCAL_DEF( void )
+ ps_builder_add_point( PS_Builder* builder,
+ FT_Pos x,
+ FT_Pos y,
+ FT_Byte flag )
+ {
+ FT_Outline* outline = builder->current;
+
+
+ if ( builder->load_points )
+ {
+ FT_Vector* point = outline->points + outline->n_points;
+ FT_Byte* control = (FT_Byte*)outline->tags + outline->n_points;
+
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+ PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( builder->face );
+
+
+ if ( !builder->is_t1 &&
+ driver->hinting_engine == FT_HINTING_FREETYPE )
+ {
+ point->x = x >> 16;
+ point->y = y >> 16;
+ }
+ else
+#endif
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
+#ifndef CFF_CONFIG_OPTION_OLD_ENGINE
+ PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( builder->face );
+#endif
+ if ( builder->is_t1 &&
+ driver->hinting_engine == FT_HINTING_FREETYPE )
+ {
+ point->x = FIXED_TO_INT( x );
+ point->y = FIXED_TO_INT( y );
+ }
+ else
+#endif
+ {
+ /* cf2_decoder_parse_charstrings uses 16.16 coordinates */
+ point->x = x >> 10;
+ point->y = y >> 10;
+ }
+ *control = (FT_Byte)( flag ? FT_CURVE_TAG_ON : FT_CURVE_TAG_CUBIC );
+ }
+ outline->n_points++;
+ }
+
+
+ /* check space for a new on-curve point, then add it */
+ FT_LOCAL_DEF( FT_Error )
+ ps_builder_add_point1( PS_Builder* builder,
+ FT_Pos x,
+ FT_Pos y )
+ {
+ FT_Error error;
+
+
+ error = ps_builder_check_points( builder, 1 );
+ if ( !error )
+ ps_builder_add_point( builder, x, y, 1 );
+
+ return error;
+ }
+
+
+ /* check space for a new contour, then add it */
+ FT_LOCAL_DEF( FT_Error )
+ ps_builder_add_contour( PS_Builder* builder )
+ {
+ FT_Outline* outline = builder->current;
+ FT_Error error;
+
+
+ /* this might happen in invalid fonts */
+ if ( !outline )
+ {
+ FT_ERROR(( "ps_builder_add_contour: no outline to add points to\n" ));
+ return FT_THROW( Invalid_File_Format );
+ }
+
+ if ( !builder->load_points )
+ {
+ outline->n_contours++;
+ return FT_Err_Ok;
+ }
+
+ error = FT_GLYPHLOADER_CHECK_POINTS( builder->loader, 0, 1 );
+ if ( !error )
+ {
+ if ( outline->n_contours > 0 )
+ outline->contours[outline->n_contours - 1] =
+ (short)( outline->n_points - 1 );
+
+ outline->n_contours++;
+ }
+
+ return error;
+ }
+
+
+ /* if a path was begun, add its first on-curve point */
+ FT_LOCAL_DEF( FT_Error )
+ ps_builder_start_point( PS_Builder* builder,
+ FT_Pos x,
+ FT_Pos y )
+ {
+ FT_Error error = FT_Err_Ok;
+
+
+ /* test whether we are building a new contour */
+ if ( !builder->path_begun )
+ {
+ builder->path_begun = 1;
+ error = ps_builder_add_contour( builder );
+ if ( !error )
+ error = ps_builder_add_point1( builder, x, y );
+ }
+
+ return error;
+ }
+
+
+ /* close the current contour */
+ FT_LOCAL_DEF( void )
+ ps_builder_close_contour( PS_Builder* builder )
+ {
+ FT_Outline* outline = builder->current;
+ FT_Int first;
+
+
+ if ( !outline )
+ return;
+
+ first = outline->n_contours <= 1
+ ? 0 : outline->contours[outline->n_contours - 2] + 1;
+
+ /* in malformed fonts it can happen that a contour was started */
+ /* but no points were added */
+ if ( outline->n_contours && first == outline->n_points )
+ {
+ outline->n_contours--;
+ return;
+ }
+
/* We must not include the last point in the path if it */
/* is located on the first point. */
if ( outline->n_points > 1 )
@@ -1753,6 +2335,176 @@
/*************************************************************************/
/*************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ps_decoder_init */
+ /* */
+ /* <Description> */
+ /* Creates a wrapper decoder for use in the combined */
+ /* Type 1 / CFF interpreter. */
+ /* */
+ /* <InOut> */
+ /* ps_decoder :: A pointer to the decoder to initialize. */
+ /* */
+ /* <Input> */
+ /* decoder :: A pointer to the original decoder. */
+ /* */
+ /* is_t1 :: Flag indicating Type 1 or CFF */
+ /* */
+ FT_LOCAL_DEF( void )
+ ps_decoder_init( PS_Decoder* ps_decoder,
+ void* decoder,
+ FT_Bool is_t1 )
+ {
+ FT_ZERO( ps_decoder );
+
+ if ( is_t1 )
+ {
+ T1_Decoder t1_decoder = (T1_Decoder)decoder;
+
+
+ ps_builder_init( &ps_decoder->builder,
+ &t1_decoder->builder,
+ is_t1 );
+
+ ps_decoder->cf2_instance = &t1_decoder->cf2_instance;
+ ps_decoder->psnames = t1_decoder->psnames;
+
+ ps_decoder->num_glyphs = t1_decoder->num_glyphs;
+ ps_decoder->glyph_names = t1_decoder->glyph_names;
+ ps_decoder->hint_mode = t1_decoder->hint_mode;
+ ps_decoder->blend = t1_decoder->blend;
+
+ ps_decoder->num_locals = (FT_UInt)t1_decoder->num_subrs;
+ ps_decoder->locals = t1_decoder->subrs;
+ ps_decoder->locals_len = t1_decoder->subrs_len;
+ ps_decoder->locals_hash = t1_decoder->subrs_hash;
+
+ ps_decoder->buildchar = t1_decoder->buildchar;
+ ps_decoder->len_buildchar = t1_decoder->len_buildchar;
+
+ ps_decoder->lenIV = t1_decoder->lenIV;
+ }
+ else
+ {
+ CFF_Decoder* cff_decoder = (CFF_Decoder*)decoder;
+
+
+ ps_builder_init( &ps_decoder->builder,
+ &cff_decoder->builder,
+ is_t1 );
+
+ ps_decoder->cff = cff_decoder->cff;
+ ps_decoder->cf2_instance = &cff_decoder->cff->cf2_instance;
+ ps_decoder->current_subfont = cff_decoder->current_subfont;
+
+ ps_decoder->num_globals = cff_decoder->num_globals;
+ ps_decoder->globals = cff_decoder->globals;
+ ps_decoder->globals_bias = cff_decoder->globals_bias;
+ ps_decoder->num_locals = cff_decoder->num_locals;
+ ps_decoder->locals = cff_decoder->locals;
+ ps_decoder->locals_bias = cff_decoder->locals_bias;
+
+ ps_decoder->glyph_width = &cff_decoder->glyph_width;
+ ps_decoder->width_only = cff_decoder->width_only;
+
+ ps_decoder->hint_mode = cff_decoder->hint_mode;
+
+ ps_decoder->get_glyph_callback = cff_decoder->get_glyph_callback;
+ ps_decoder->free_glyph_callback = cff_decoder->free_glyph_callback;
+ }
+ }
+
+
+ /* Synthesize a SubFont object for Type 1 fonts, for use in the */
+ /* new interpreter to access Private dict data. */
+ FT_LOCAL_DEF( void )
+ t1_make_subfont( FT_Face face,
+ PS_Private priv,
+ CFF_SubFont subfont )
+ {
+ CFF_Private cpriv = &subfont->private_dict;
+ FT_UInt n, count;
+
+
+ FT_ZERO( subfont );
+ FT_ZERO( cpriv );
+
+ count = cpriv->num_blue_values = priv->num_blue_values;
+ for ( n = 0; n < count; n++ )
+ cpriv->blue_values[n] = (FT_Pos)priv->blue_values[n];
+
+ count = cpriv->num_other_blues = priv->num_other_blues;
+ for ( n = 0; n < count; n++ )
+ cpriv->other_blues[n] = (FT_Pos)priv->other_blues[n];
+
+ count = cpriv->num_family_blues = priv->num_family_blues;
+ for ( n = 0; n < count; n++ )
+ cpriv->family_blues[n] = (FT_Pos)priv->family_blues[n];
+
+ count = cpriv->num_family_other_blues = priv->num_family_other_blues;
+ for ( n = 0; n < count; n++ )
+ cpriv->family_other_blues[n] = (FT_Pos)priv->family_other_blues[n];
+
+ cpriv->blue_scale = priv->blue_scale;
+ cpriv->blue_shift = (FT_Pos)priv->blue_shift;
+ cpriv->blue_fuzz = (FT_Pos)priv->blue_fuzz;
+
+ cpriv->standard_width = (FT_Pos)priv->standard_width[0];
+ cpriv->standard_height = (FT_Pos)priv->standard_height[0];
+
+ count = cpriv->num_snap_widths = priv->num_snap_widths;
+ for ( n = 0; n < count; n++ )
+ cpriv->snap_widths[n] = (FT_Pos)priv->snap_widths[n];
+
+ count = cpriv->num_snap_heights = priv->num_snap_heights;
+ for ( n = 0; n < count; n++ )
+ cpriv->snap_heights[n] = (FT_Pos)priv->snap_heights[n];
+
+ cpriv->force_bold = priv->force_bold;
+ cpriv->lenIV = priv->lenIV;
+ cpriv->language_group = priv->language_group;
+ cpriv->expansion_factor = priv->expansion_factor;
+
+ cpriv->subfont = subfont;
+
+
+ /* Initialize the random number generator. */
+ if ( face->internal->random_seed != -1 )
+ {
+ /* If we have a face-specific seed, use it. */
+ /* If non-zero, update it to a positive value. */
+ subfont->random = (FT_UInt32)face->internal->random_seed;
+ if ( face->internal->random_seed )
+ {
+ do
+ {
+ face->internal->random_seed = (FT_Int32)cff_random(
+ (FT_UInt32)face->internal->random_seed );
+
+ } while ( face->internal->random_seed < 0 );
+ }
+ }
+ if ( !subfont->random )
+ {
+ FT_UInt32 seed;
+
+
+ /* compute random seed from some memory addresses */
+ seed = (FT_UInt32)( (FT_Offset)(char*)&seed ^
+ (FT_Offset)(char*)&face ^
+ (FT_Offset)(char*)&subfont );
+ seed = seed ^ ( seed >> 10 ) ^ ( seed >> 20 );
+ if ( seed == 0 )
+ seed = 0x7384;
+
+ subfont->random = seed;
+ }
+ }
+
+
FT_LOCAL_DEF( void )
t1_decrypt( FT_Byte* buffer,
FT_Offset length,
@@ -1766,4 +2518,16 @@
}
+ FT_LOCAL_DEF( FT_UInt32 )
+ cff_random( FT_UInt32 r )
+ {
+ /* a 32bit version of the `xorshift' algorithm */
+ r ^= r << 13;
+ r ^= r >> 17;
+ r ^= r << 5;
+
+ return r;
+ }
+
+
/* END */
diff --git a/src/psaux/psobjs.h b/src/psaux/psobjs.h
index bf879c1..8e0fe5f 100644
--- a/src/psaux/psobjs.h
+++ b/src/psaux/psobjs.h
@@ -4,7 +4,7 @@
/* */
/* Auxiliary functions for PostScript fonts (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,12 +16,13 @@
/***************************************************************************/
-#ifndef __PSOBJS_H__
-#define __PSOBJS_H__
+#ifndef PSOBJS_H_
+#define PSOBJS_H_
#include <ft2build.h>
#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include FT_INTERNAL_CFF_OBJECTS_TYPES_H
FT_BEGIN_HEADER
@@ -193,20 +194,120 @@
/*************************************************************************/
/*************************************************************************/
/***** *****/
+ /***** CFF BUILDER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ FT_LOCAL( void )
+ cff_builder_init( CFF_Builder* builder,
+ TT_Face face,
+ CFF_Size size,
+ CFF_GlyphSlot glyph,
+ FT_Bool hinting );
+
+ FT_LOCAL( void )
+ cff_builder_done( CFF_Builder* builder );
+
+ FT_LOCAL( FT_Error )
+ cff_check_points( CFF_Builder* builder,
+ FT_Int count );
+
+ FT_LOCAL( void )
+ cff_builder_add_point( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y,
+ FT_Byte flag );
+ FT_LOCAL( FT_Error )
+ cff_builder_add_point1( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y );
+ FT_LOCAL( FT_Error )
+ cff_builder_start_point( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y );
+ FT_LOCAL( void )
+ cff_builder_close_contour( CFF_Builder* builder );
+
+ FT_LOCAL( FT_Error )
+ cff_builder_add_contour( CFF_Builder* builder );
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** PS BUILDER *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ FT_LOCAL( void )
+ ps_builder_init( PS_Builder* ps_builder,
+ void* builder,
+ FT_Bool is_t1 );
+
+
+ FT_LOCAL( void )
+ ps_builder_done( PS_Builder* builder );
+
+ FT_LOCAL( FT_Error )
+ ps_builder_check_points( PS_Builder* builder,
+ FT_Int count );
+
+ FT_LOCAL( void )
+ ps_builder_add_point( PS_Builder* builder,
+ FT_Pos x,
+ FT_Pos y,
+ FT_Byte flag );
+
+ FT_LOCAL( FT_Error )
+ ps_builder_add_point1( PS_Builder* builder,
+ FT_Pos x,
+ FT_Pos y );
+
+ FT_LOCAL( FT_Error )
+ ps_builder_add_contour( PS_Builder* builder );
+
+ FT_LOCAL( FT_Error )
+ ps_builder_start_point( PS_Builder* builder,
+ FT_Pos x,
+ FT_Pos y );
+
+ FT_LOCAL( void )
+ ps_builder_close_contour( PS_Builder* builder );
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
/***** OTHER *****/
/***** *****/
/*************************************************************************/
/*************************************************************************/
FT_LOCAL( void )
+ ps_decoder_init( PS_Decoder* ps_decoder,
+ void* decoder,
+ FT_Bool is_t1 );
+
+ FT_LOCAL( void )
+ t1_make_subfont( FT_Face face,
+ PS_Private priv,
+ CFF_SubFont subfont );
+
+ FT_LOCAL( void )
t1_decrypt( FT_Byte* buffer,
FT_Offset length,
FT_UShort seed );
+ FT_LOCAL( FT_UInt32 )
+ cff_random( FT_UInt32 r );
+
+
FT_END_HEADER
-#endif /* __PSOBJS_H__ */
+#endif /* PSOBJS_H_ */
/* END */
diff --git a/src/cff/cf2read.c b/src/psaux/psread.c
similarity index 96%
rename from src/cff/cf2read.c
rename to src/psaux/psread.c
index 2b429e3..719863c 100644
--- a/src/cff/cf2read.c
+++ b/src/psaux/psread.c
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2read.c */
+/* psread.c */
/* */
/* Adobe's code for stream handling (body). */
/* */
@@ -36,12 +36,12 @@
/***************************************************************************/
-#include "cf2ft.h"
+#include "psft.h"
#include FT_INTERNAL_DEBUG_H
-#include "cf2glue.h"
+#include "psglue.h"
-#include "cf2error.h"
+#include "pserror.h"
/* Define CF2_IO_FAIL as 1 to enable random errors and random */
diff --git a/src/cff/cf2read.h b/src/psaux/psread.h
similarity index 95%
rename from src/cff/cf2read.h
rename to src/psaux/psread.h
index 7ef7c8c..464b29b 100644
--- a/src/cff/cf2read.h
+++ b/src/psaux/psread.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2read.h */
+/* psread.h */
/* */
/* Adobe's code for stream handling (specification). */
/* */
@@ -36,8 +36,8 @@
/***************************************************************************/
-#ifndef __CF2READ_H__
-#define __CF2READ_H__
+#ifndef PSREAD_H_
+#define PSREAD_H_
FT_BEGIN_HEADER
@@ -62,7 +62,7 @@
FT_END_HEADER
-#endif /* __CF2READ_H__ */
+#endif /* PSREAD_H_ */
/* END */
diff --git a/src/psaux/psstack.c b/src/psaux/psstack.c
new file mode 100644
index 0000000..69d0633
--- /dev/null
+++ b/src/psaux/psstack.c
@@ -0,0 +1,328 @@
+/***************************************************************************/
+/* */
+/* psstack.c */
+/* */
+/* Adobe's code for emulating a CFF stack (body). */
+/* */
+/* Copyright 2007-2013 Adobe Systems Incorporated. */
+/* */
+/* This software, and all works of authorship, whether in source or */
+/* object code form as indicated by the copyright notice(s) included */
+/* herein (collectively, the "Work") is made available, and may only be */
+/* used, modified, and distributed under the FreeType Project License, */
+/* LICENSE.TXT. Additionally, subject to the terms and conditions of the */
+/* FreeType Project License, each contributor to the Work hereby grants */
+/* to any individual or legal entity exercising permissions granted by */
+/* the FreeType Project License and this section (hereafter, "You" or */
+/* "Your") a perpetual, worldwide, non-exclusive, no-charge, */
+/* royalty-free, irrevocable (except as stated in this section) patent */
+/* license to make, have made, use, offer to sell, sell, import, and */
+/* otherwise transfer the Work, where such license applies only to those */
+/* patent claims licensable by such contributor that are necessarily */
+/* infringed by their contribution(s) alone or by combination of their */
+/* contribution(s) with the Work to which such contribution(s) was */
+/* submitted. If You institute patent litigation against any entity */
+/* (including a cross-claim or counterclaim in a lawsuit) alleging that */
+/* the Work or a contribution incorporated within the Work constitutes */
+/* direct or contributory patent infringement, then any patent licenses */
+/* granted to You under this License for that Work shall terminate as of */
+/* the date such litigation is filed. */
+/* */
+/* By using, modifying, or distributing the Work you indicate that you */
+/* have read and understood the terms and conditions of the */
+/* FreeType Project License as well as those provided in this section, */
+/* and you accept them fully. */
+/* */
+/***************************************************************************/
+
+
+#include "psft.h"
+#include FT_INTERNAL_DEBUG_H
+
+#include "psglue.h"
+#include "psfont.h"
+#include "psstack.h"
+
+#include "pserror.h"
+
+
+ /* Allocate and initialize an instance of CF2_Stack. */
+ /* Note: This function returns NULL on error (does not set */
+ /* `error'). */
+ FT_LOCAL_DEF( CF2_Stack )
+ cf2_stack_init( FT_Memory memory,
+ FT_Error* e,
+ FT_UInt stackSize )
+ {
+ FT_Error error = FT_Err_Ok; /* for FT_NEW */
+
+ CF2_Stack stack = NULL;
+
+
+ if ( !FT_NEW( stack ) )
+ {
+ /* initialize the structure; FT_NEW zeroes it */
+ stack->memory = memory;
+ stack->error = e;
+ }
+
+ /* allocate the stack buffer */
+ if ( FT_NEW_ARRAY( stack->buffer, stackSize ) )
+ {
+ FT_FREE( stack );
+ return NULL;
+ }
+
+ stack->stackSize = stackSize;
+ stack->top = stack->buffer; /* empty stack */
+
+ return stack;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ cf2_stack_free( CF2_Stack stack )
+ {
+ if ( stack )
+ {
+ FT_Memory memory = stack->memory;
+
+ /* free the buffer */
+ FT_FREE( stack->buffer );
+
+ /* free the main structure */
+ FT_FREE( stack );
+ }
+ }
+
+
+ FT_LOCAL_DEF( CF2_UInt )
+ cf2_stack_count( CF2_Stack stack )
+ {
+ return (CF2_UInt)( stack->top - stack->buffer );
+ }
+
+
+ FT_LOCAL_DEF( void )
+ cf2_stack_pushInt( CF2_Stack stack,
+ CF2_Int val )
+ {
+ if ( stack->top == stack->buffer + stack->stackSize )
+ {
+ CF2_SET_ERROR( stack->error, Stack_Overflow );
+ return; /* stack overflow */
+ }
+
+ stack->top->u.i = val;
+ stack->top->type = CF2_NumberInt;
+ stack->top++;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ cf2_stack_pushFixed( CF2_Stack stack,
+ CF2_Fixed val )
+ {
+ if ( stack->top == stack->buffer + stack->stackSize )
+ {
+ CF2_SET_ERROR( stack->error, Stack_Overflow );
+ return; /* stack overflow */
+ }
+
+ stack->top->u.r = val;
+ stack->top->type = CF2_NumberFixed;
+ stack->top++;
+ }
+
+
+ /* this function is only allowed to pop an integer type */
+ FT_LOCAL_DEF( CF2_Int )
+ cf2_stack_popInt( CF2_Stack stack )
+ {
+ if ( stack->top == stack->buffer )
+ {
+ CF2_SET_ERROR( stack->error, Stack_Underflow );
+ return 0; /* underflow */
+ }
+ if ( stack->top[-1].type != CF2_NumberInt )
+ {
+ CF2_SET_ERROR( stack->error, Syntax_Error );
+ return 0; /* type mismatch */
+ }
+
+ stack->top--;
+
+ return stack->top->u.i;
+ }
+
+
+ /* Note: type mismatch is silently cast */
+ /* TODO: check this */
+ FT_LOCAL_DEF( CF2_Fixed )
+ cf2_stack_popFixed( CF2_Stack stack )
+ {
+ if ( stack->top == stack->buffer )
+ {
+ CF2_SET_ERROR( stack->error, Stack_Underflow );
+ return cf2_intToFixed( 0 ); /* underflow */
+ }
+
+ stack->top--;
+
+ switch ( stack->top->type )
+ {
+ case CF2_NumberInt:
+ return cf2_intToFixed( stack->top->u.i );
+ case CF2_NumberFrac:
+ return cf2_fracToFixed( stack->top->u.f );
+ default:
+ return stack->top->u.r;
+ }
+ }
+
+
+ /* Note: type mismatch is silently cast */
+ /* TODO: check this */
+ FT_LOCAL_DEF( CF2_Fixed )
+ cf2_stack_getReal( CF2_Stack stack,
+ CF2_UInt idx )
+ {
+ FT_ASSERT( cf2_stack_count( stack ) <= stack->stackSize );
+
+ if ( idx >= cf2_stack_count( stack ) )
+ {
+ CF2_SET_ERROR( stack->error, Stack_Overflow );
+ return cf2_intToFixed( 0 ); /* bounds error */
+ }
+
+ switch ( stack->buffer[idx].type )
+ {
+ case CF2_NumberInt:
+ return cf2_intToFixed( stack->buffer[idx].u.i );
+ case CF2_NumberFrac:
+ return cf2_fracToFixed( stack->buffer[idx].u.f );
+ default:
+ return stack->buffer[idx].u.r;
+ }
+ }
+
+
+ /* provide random access to stack */
+ FT_LOCAL_DEF( void )
+ cf2_stack_setReal( CF2_Stack stack,
+ CF2_UInt idx,
+ CF2_Fixed val )
+ {
+ if ( idx > cf2_stack_count( stack ) )
+ {
+ CF2_SET_ERROR( stack->error, Stack_Overflow );
+ return;
+ }
+
+ stack->buffer[idx].u.r = val;
+ stack->buffer[idx].type = CF2_NumberFixed;
+ }
+
+
+ /* discard (pop) num values from stack */
+ FT_LOCAL_DEF( void )
+ cf2_stack_pop( CF2_Stack stack,
+ CF2_UInt num )
+ {
+ if ( num > cf2_stack_count( stack ) )
+ {
+ CF2_SET_ERROR( stack->error, Stack_Underflow );
+ return;
+ }
+ stack->top -= num;
+ }
+
+
+ FT_LOCAL_DEF( void )
+ cf2_stack_roll( CF2_Stack stack,
+ CF2_Int count,
+ CF2_Int shift )
+ {
+ /* we initialize this variable to avoid compiler warnings */
+ CF2_StackNumber last = { { 0 }, CF2_NumberInt };
+
+ CF2_Int start_idx, idx, i;
+
+
+ if ( count < 2 )
+ return; /* nothing to do (values 0 and 1), or undefined value */
+
+ if ( (CF2_UInt)count > cf2_stack_count( stack ) )
+ {
+ CF2_SET_ERROR( stack->error, Stack_Overflow );
+ return;
+ }
+
+ if ( shift < 0 )
+ shift = -( ( -shift ) % count );
+ else
+ shift %= count;
+
+ if ( shift == 0 )
+ return; /* nothing to do */
+
+ /* We use the following algorithm to do the rolling, */
+ /* which needs two temporary variables only. */
+ /* */
+ /* Example: */
+ /* */
+ /* count = 8 */
+ /* shift = 2 */
+ /* */
+ /* stack indices before roll: 7 6 5 4 3 2 1 0 */
+ /* stack indices after roll: 1 0 7 6 5 4 3 2 */
+ /* */
+ /* The value of index 0 gets moved to index 2, while */
+ /* the old value of index 2 gets moved to index 4, */
+ /* and so on. We thus have the following copying */
+ /* chains for shift value 2. */
+ /* */
+ /* 0 -> 2 -> 4 -> 6 -> 0 */
+ /* 1 -> 3 -> 5 -> 7 -> 1 */
+ /* */
+ /* If `count' and `shift' are incommensurable, we */
+ /* have a single chain only. Otherwise, increase */
+ /* the start index by 1 after the first chain, then */
+ /* do the next chain until all elements in all */
+ /* chains are handled. */
+
+ start_idx = -1;
+ idx = -1;
+ for ( i = 0; i < count; i++ )
+ {
+ CF2_StackNumber tmp;
+
+
+ if ( start_idx == idx )
+ {
+ start_idx++;
+ idx = start_idx;
+ last = stack->buffer[idx];
+ }
+
+ idx += shift;
+ if ( idx >= count )
+ idx -= count;
+ else if ( idx < 0 )
+ idx += count;
+
+ tmp = stack->buffer[idx];
+ stack->buffer[idx] = last;
+ last = tmp;
+ }
+ }
+
+
+ FT_LOCAL_DEF( void )
+ cf2_stack_clear( CF2_Stack stack )
+ {
+ stack->top = stack->buffer;
+ }
+
+
+/* END */
diff --git a/src/cff/cf2stack.h b/src/psaux/psstack.h
similarity index 86%
rename from src/cff/cf2stack.h
rename to src/psaux/psstack.h
index 7d6d196..38f7b41 100644
--- a/src/cff/cf2stack.h
+++ b/src/psaux/psstack.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2stack.h */
+/* psstack.h */
/* */
/* Adobe's code for emulating a CFF stack (specification). */
/* */
@@ -36,8 +36,8 @@
/***************************************************************************/
-#ifndef __CF2STACK_H__
-#define __CF2STACK_H__
+#ifndef PSSTACK_H_
+#define PSSTACK_H_
FT_BEGIN_HEADER
@@ -62,15 +62,17 @@
{
FT_Memory memory;
FT_Error* error;
- CF2_StackNumber buffer[CF2_OPERAND_STACK_SIZE];
+ CF2_StackNumber* buffer;
CF2_StackNumber* top;
+ FT_UInt stackSize;
} CF2_StackRec, *CF2_Stack;
FT_LOCAL( CF2_Stack )
cf2_stack_init( FT_Memory memory,
- FT_Error* error );
+ FT_Error* error,
+ FT_UInt stackSize );
FT_LOCAL( void )
cf2_stack_free( CF2_Stack stack );
@@ -92,6 +94,19 @@
FT_LOCAL( CF2_Fixed )
cf2_stack_getReal( CF2_Stack stack,
CF2_UInt idx );
+ FT_LOCAL( void )
+ cf2_stack_setReal( CF2_Stack stack,
+ CF2_UInt idx,
+ CF2_Fixed val );
+
+ FT_LOCAL( void )
+ cf2_stack_pop( CF2_Stack stack,
+ CF2_UInt num );
+
+ FT_LOCAL( void )
+ cf2_stack_roll( CF2_Stack stack,
+ CF2_Int count,
+ CF2_Int idx );
FT_LOCAL( void )
cf2_stack_clear( CF2_Stack stack );
@@ -100,7 +115,7 @@
FT_END_HEADER
-#endif /* __CF2STACK_H__ */
+#endif /* PSSTACK_H_ */
/* END */
diff --git a/src/cff/cf2types.h b/src/psaux/pstypes.h
similarity index 95%
rename from src/cff/cf2types.h
rename to src/psaux/pstypes.h
index ac6a022..dfbaa3d 100644
--- a/src/cff/cf2types.h
+++ b/src/psaux/pstypes.h
@@ -1,6 +1,6 @@
/***************************************************************************/
/* */
-/* cf2types.h */
+/* pstypes.h */
/* */
/* Adobe's code for defining data types (specification only). */
/* */
@@ -36,8 +36,8 @@
/***************************************************************************/
-#ifndef __CF2TYPES_H__
-#define __CF2TYPES_H__
+#ifndef PSTYPES_H_
+#define PSTYPES_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -72,7 +72,7 @@
FT_END_HEADER
-#endif /* __CF2TYPES_H__ */
+#endif /* PSTYPES_H_ */
/* END */
diff --git a/src/psaux/rules.mk b/src/psaux/rules.mk
index 0d2118c..a87bfe9 100644
--- a/src/psaux/rules.mk
+++ b/src/psaux/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -33,12 +33,25 @@
$(PSAUX_DIR)/t1cmap.c \
$(PSAUX_DIR)/afmparse.c \
$(PSAUX_DIR)/psconv.c \
- $(PSAUX_DIR)/psauxmod.c
+ $(PSAUX_DIR)/psauxmod.c \
+ $(PSAUX_DIR)/psarrst.c \
+ $(PSAUX_DIR)/psblues.c \
+ $(PSAUX_DIR)/pserror.c \
+ $(PSAUX_DIR)/psfont.c \
+ $(PSAUX_DIR)/psft.c \
+ $(PSAUX_DIR)/pshints.c \
+ $(PSAUX_DIR)/psintrp.c \
+ $(PSAUX_DIR)/psread.c \
+ $(PSAUX_DIR)/psstack.c \
+ $(PSAUX_DIR)/cffdecode.c
# PSAUX driver headers
#
PSAUX_DRV_H := $(PSAUX_DRV_SRC:%c=%h) \
- $(PSAUX_DIR)/psauxerr.h
+ $(PSAUX_DIR)/psauxerr.h \
+ $(PSAUX_DIR)/psfixed.h \
+ $(PSAUX_DIR)/psglue.h \
+ $(PSAUX_DIR)/pstypes.h
# PSAUX driver object(s)
diff --git a/src/psaux/t1cmap.c b/src/psaux/t1cmap.c
index 2e2d433..112a789 100644
--- a/src/psaux/t1cmap.c
+++ b/src/psaux/t1cmap.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 character map support (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -45,7 +45,7 @@
cmap->code_to_sid = is_expert ? psnames->adobe_expert_encoding
: psnames->adobe_std_encoding;
- FT_ASSERT( cmap->code_to_sid != NULL );
+ FT_ASSERT( cmap->code_to_sid );
}
@@ -136,12 +136,16 @@
{
sizeof ( T1_CMapStdRec ),
- (FT_CMap_InitFunc) t1_cmap_standard_init,
- (FT_CMap_DoneFunc) t1_cmap_std_done,
- (FT_CMap_CharIndexFunc)t1_cmap_std_char_index,
- (FT_CMap_CharNextFunc) t1_cmap_std_char_next,
+ (FT_CMap_InitFunc) t1_cmap_standard_init, /* init */
+ (FT_CMap_DoneFunc) t1_cmap_std_done, /* done */
+ (FT_CMap_CharIndexFunc)t1_cmap_std_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) t1_cmap_std_char_next, /* char_next */
- NULL, NULL, NULL, NULL, NULL
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
};
@@ -161,12 +165,16 @@
{
sizeof ( T1_CMapStdRec ),
- (FT_CMap_InitFunc) t1_cmap_expert_init,
- (FT_CMap_DoneFunc) t1_cmap_std_done,
- (FT_CMap_CharIndexFunc)t1_cmap_std_char_index,
- (FT_CMap_CharNextFunc) t1_cmap_std_char_next,
+ (FT_CMap_InitFunc) t1_cmap_expert_init, /* init */
+ (FT_CMap_DoneFunc) t1_cmap_std_done, /* done */
+ (FT_CMap_CharIndexFunc)t1_cmap_std_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) t1_cmap_std_char_next, /* char_next */
- NULL, NULL, NULL, NULL, NULL
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
};
@@ -193,7 +201,7 @@
cmap->count = (FT_UInt)encoding->code_last - cmap->first;
cmap->indices = encoding->char_index;
- FT_ASSERT( cmap->indices != NULL );
+ FT_ASSERT( cmap->indices );
FT_ASSERT( encoding->code_first <= encoding->code_last );
return 0;
@@ -232,7 +240,7 @@
FT_UInt32 char_code = *pchar_code;
- ++char_code;
+ char_code++;
if ( char_code < cmap->first )
char_code = cmap->first;
@@ -257,12 +265,16 @@
{
sizeof ( T1_CMapCustomRec ),
- (FT_CMap_InitFunc) t1_cmap_custom_init,
- (FT_CMap_DoneFunc) t1_cmap_custom_done,
- (FT_CMap_CharIndexFunc)t1_cmap_custom_char_index,
- (FT_CMap_CharNextFunc) t1_cmap_custom_char_next,
+ (FT_CMap_InitFunc) t1_cmap_custom_init, /* init */
+ (FT_CMap_DoneFunc) t1_cmap_custom_done, /* done */
+ (FT_CMap_CharIndexFunc)t1_cmap_custom_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) t1_cmap_custom_char_next, /* char_next */
- NULL, NULL, NULL, NULL, NULL
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
};
@@ -343,12 +355,16 @@
{
sizeof ( PS_UnicodesRec ),
- (FT_CMap_InitFunc) t1_cmap_unicode_init,
- (FT_CMap_DoneFunc) t1_cmap_unicode_done,
- (FT_CMap_CharIndexFunc)t1_cmap_unicode_char_index,
- (FT_CMap_CharNextFunc) t1_cmap_unicode_char_next,
+ (FT_CMap_InitFunc) t1_cmap_unicode_init, /* init */
+ (FT_CMap_DoneFunc) t1_cmap_unicode_done, /* done */
+ (FT_CMap_CharIndexFunc)t1_cmap_unicode_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) t1_cmap_unicode_char_next, /* char_next */
- NULL, NULL, NULL, NULL, NULL
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
};
diff --git a/src/psaux/t1cmap.h b/src/psaux/t1cmap.h
index b8ba06c..4308e31 100644
--- a/src/psaux/t1cmap.h
+++ b/src/psaux/t1cmap.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 character map support (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T1CMAP_H__
-#define __T1CMAP_H__
+#ifndef T1CMAP_H_
+#define T1CMAP_H_
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
@@ -99,7 +99,7 @@
FT_END_HEADER
-#endif /* __T1CMAP_H__ */
+#endif /* T1CMAP_H_ */
/* END */
diff --git a/src/psaux/t1decode.c b/src/psaux/t1decode.c
index 2e19928..6ad1456 100644
--- a/src/psaux/t1decode.c
+++ b/src/psaux/t1decode.c
@@ -4,7 +4,7 @@
/* */
/* PostScript Type 1 decoding routines (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,6 +20,7 @@
#include FT_INTERNAL_CALC_H
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+#include FT_INTERNAL_HASH_H
#include FT_OUTLINE_H
#include "t1decode.h"
@@ -111,6 +112,56 @@
/*************************************************************************/
/* */
/* <Function> */
+ /* t1_lookup_glyph_by_stdcharcode_ps */
+ /* */
+ /* <Description> */
+ /* Looks up a given glyph by its StandardEncoding charcode. Used to */
+ /* implement the SEAC Type 1 operator in the Adobe engine */
+ /* */
+ /* <Input> */
+ /* face :: The current face object. */
+ /* */
+ /* charcode :: The character code to look for. */
+ /* */
+ /* <Return> */
+ /* A glyph index in the font face. Returns -1 if the corresponding */
+ /* glyph wasn't found. */
+ /* */
+ FT_LOCAL_DEF( FT_Int )
+ t1_lookup_glyph_by_stdcharcode_ps( PS_Decoder* decoder,
+ FT_Int charcode )
+ {
+ FT_UInt n;
+ const FT_String* glyph_name;
+ FT_Service_PsCMaps psnames = decoder->psnames;
+
+
+ /* check range of standard char code */
+ if ( charcode < 0 || charcode > 255 )
+ return -1;
+
+ glyph_name = psnames->adobe_std_strings(
+ psnames->adobe_std_encoding[charcode]);
+
+ for ( n = 0; n < decoder->num_glyphs; n++ )
+ {
+ FT_String* name = (FT_String*)decoder->glyph_names[n];
+
+
+ if ( name &&
+ name[0] == glyph_name[0] &&
+ ft_strcmp( name, glyph_name ) == 0 )
+ return (FT_Int)n;
+ }
+
+ return -1;
+ }
+
+
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
+ /*************************************************************************/
+ /* */
+ /* <Function> */
/* t1_lookup_glyph_by_stdcharcode */
/* */
/* <Description> */
@@ -157,6 +208,15 @@
}
+ /* parse a single Type 1 glyph */
+ FT_LOCAL_DEF( FT_Error )
+ t1_decoder_parse_glyph( T1_Decoder decoder,
+ FT_UInt glyph )
+ {
+ return decoder->parse_callback( decoder, glyph );
+ }
+
+
/*************************************************************************/
/* */
/* <Function> */
@@ -404,9 +464,7 @@
( decoder->buildchar == NULL ) );
if ( decoder->buildchar && decoder->len_buildchar > 0 )
- ft_memset( &decoder->buildchar[0],
- 0,
- sizeof ( decoder->buildchar[0] ) * decoder->len_buildchar );
+ FT_ARRAY_ZERO( decoder->buildchar, decoder->len_buildchar );
FT_TRACE4(( "\n"
"Start charstring\n" ));
@@ -512,7 +570,7 @@
break;
case 12:
- if ( ip > limit )
+ if ( ip >= limit )
{
FT_ERROR(( "t1_decoder_parse_charstrings:"
" invalid escape (12+EOF)\n" ));
@@ -667,9 +725,9 @@
#ifdef FT_DEBUG_LEVEL_TRACE
if ( large_int )
- FT_TRACE4(( " %ld", value ));
+ FT_TRACE4(( " %d", value ));
else
- FT_TRACE4(( " %ld", Fix2Int( value ) ));
+ FT_TRACE4(( " %d", value / 65536 ));
#endif
*top++ = value;
@@ -735,7 +793,7 @@
if ( arg_cnt != 3 )
goto Unexpected_OtherSubr;
- if ( decoder->flex_state == 0 ||
+ if ( !decoder->flex_state ||
decoder->num_flex_vectors != 7 )
{
FT_ERROR(( "t1_decoder_parse_charstrings:"
@@ -753,13 +811,12 @@
if ( arg_cnt != 0 )
goto Unexpected_OtherSubr;
+ if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ||
+ FT_SET_ERROR( t1_builder_check_points( builder, 6 ) ) )
+ goto Fail;
+
decoder->flex_state = 1;
decoder->num_flex_vectors = 0;
- if ( ( error = t1_builder_start_point( builder, x, y ) )
- != FT_Err_Ok ||
- ( error = t1_builder_check_points( builder, 6 ) )
- != FT_Err_Ok )
- goto Fail;
break;
case 2: /* add flex vectors */
@@ -770,7 +827,7 @@
if ( arg_cnt != 0 )
goto Unexpected_OtherSubr;
- if ( decoder->flex_state == 0 )
+ if ( !decoder->flex_state )
{
FT_ERROR(( "t1_decoder_parse_charstrings:"
" missing flex start\n" ));
@@ -782,10 +839,19 @@
/* point without adding any point to the outline */
idx = decoder->num_flex_vectors++;
if ( idx > 0 && idx < 7 )
+ {
+ /* in malformed fonts it is possible to have other */
+ /* opcodes in the middle of a flex (which don't */
+ /* increase `num_flex_vectors'); we thus have to */
+ /* check whether we can add a point */
+ if ( FT_SET_ERROR( t1_builder_check_points( builder, 1 ) ) )
+ goto Syntax_Error;
+
t1_builder_add_point( builder,
x,
y,
(FT_Byte)( idx == 3 || idx == 6 ) );
+ }
}
break;
@@ -857,7 +923,9 @@
for ( mm = 1; mm < blend->num_designs; mm++ )
- tmp += FT_MulFix( *delta++, blend->weight_vector[mm] );
+ tmp = ADD_LONG( tmp,
+ FT_MulFix( *delta++,
+ blend->weight_vector[mm] ) );
*values++ = tmp;
}
@@ -875,7 +943,7 @@
PS_Blend blend = decoder->blend;
- if ( arg_cnt != 1 || blend == NULL )
+ if ( arg_cnt != 1 || !blend )
goto Unexpected_OtherSubr;
idx = Fix2Int( top[0] );
@@ -897,7 +965,7 @@
if ( arg_cnt != 2 )
goto Unexpected_OtherSubr;
- top[0] += top[1]; /* XXX (over|under)flow */
+ top[0] = ADD_LONG( top[0], top[1] );
known_othersubr_result_cnt = 1;
break;
@@ -908,7 +976,7 @@
if ( arg_cnt != 2 )
goto Unexpected_OtherSubr;
- top[0] -= top[1]; /* XXX (over|under)flow */
+ top[0] = SUB_LONG( top[0], top[1] );
known_othersubr_result_cnt = 1;
break;
@@ -943,7 +1011,7 @@
PS_Blend blend = decoder->blend;
- if ( arg_cnt != 2 || blend == NULL )
+ if ( arg_cnt != 2 || !blend )
goto Unexpected_OtherSubr;
idx = Fix2Int( top[1] );
@@ -964,7 +1032,7 @@
PS_Blend blend = decoder->blend;
- if ( arg_cnt != 1 || blend == NULL )
+ if ( arg_cnt != 1 || !blend )
goto Unexpected_OtherSubr;
idx = Fix2Int( top[0] );
@@ -1122,7 +1190,7 @@
FT_TRACE4(( "BuildCharArray = [ " ));
- for ( i = 0; i < decoder->len_buildchar; ++i )
+ for ( i = 0; i < decoder->len_buildchar; i++ )
FT_TRACE4(( "%d ", decoder->buildchar[i] ));
FT_TRACE4(( "]\n" ));
@@ -1140,11 +1208,13 @@
builder->parse_state = T1_Parse_Have_Width;
- builder->left_bearing.x += top[0];
- builder->advance.x = top[1];
- builder->advance.y = 0;
+ builder->left_bearing.x = ADD_LONG( builder->left_bearing.x,
+ top[0] );
- orig_x = x = builder->pos_x + top[0];
+ builder->advance.x = top[1];
+ builder->advance.y = 0;
+
+ orig_x = x = ADD_LONG( builder->pos_x, top[0] );
orig_y = y = builder->pos_y;
FT_UNUSED( orig_y );
@@ -1170,13 +1240,16 @@
builder->parse_state = T1_Parse_Have_Width;
- builder->left_bearing.x += top[0];
- builder->left_bearing.y += top[1];
- builder->advance.x = top[2];
- builder->advance.y = top[3];
+ builder->left_bearing.x = ADD_LONG( builder->left_bearing.x,
+ top[0] );
+ builder->left_bearing.y = ADD_LONG( builder->left_bearing.y,
+ top[1] );
- x = builder->pos_x + top[0];
- y = builder->pos_y + top[1];
+ builder->advance.x = top[2];
+ builder->advance.y = top[3];
+
+ x = ADD_LONG( builder->pos_x, top[0] );
+ y = ADD_LONG( builder->pos_y, top[1] );
/* the `metrics_only' indicates that we only want to compute */
/* the glyph's metrics (lsb + advance width), not load the */
@@ -1200,17 +1273,17 @@
case op_hlineto:
FT_TRACE4(( " hlineto" ));
- if ( ( error = t1_builder_start_point( builder, x, y ) )
- != FT_Err_Ok )
+ if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) )
goto Fail;
- x += top[0];
+ x = ADD_LONG( x, top[0] );
goto Add_Line;
case op_hmoveto:
FT_TRACE4(( " hmoveto" ));
- x += top[0];
+ x = ADD_LONG( x, top[0] );
+
if ( !decoder->flex_state )
{
if ( builder->parse_state == T1_Parse_Start )
@@ -1222,42 +1295,41 @@
case op_hvcurveto:
FT_TRACE4(( " hvcurveto" ));
- if ( ( error = t1_builder_start_point( builder, x, y ) )
- != FT_Err_Ok ||
- ( error = t1_builder_check_points( builder, 3 ) )
- != FT_Err_Ok )
+ if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ||
+ FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) )
goto Fail;
- x += top[0];
+ x = ADD_LONG( x, top[0] );
t1_builder_add_point( builder, x, y, 0 );
- x += top[1];
- y += top[2];
+
+ x = ADD_LONG( x, top[1] );
+ y = ADD_LONG( y, top[2] );
t1_builder_add_point( builder, x, y, 0 );
- y += top[3];
+
+ y = ADD_LONG( y, top[3] );
t1_builder_add_point( builder, x, y, 1 );
break;
case op_rlineto:
FT_TRACE4(( " rlineto" ));
- if ( ( error = t1_builder_start_point( builder, x, y ) )
- != FT_Err_Ok )
+ if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) )
goto Fail;
- x += top[0];
- y += top[1];
+ x = ADD_LONG( x, top[0] );
+ y = ADD_LONG( y, top[1] );
Add_Line:
- if ( ( error = t1_builder_add_point1( builder, x, y ) )
- != FT_Err_Ok )
+ if ( FT_SET_ERROR( t1_builder_add_point1( builder, x, y ) ) )
goto Fail;
break;
case op_rmoveto:
FT_TRACE4(( " rmoveto" ));
- x += top[0];
- y += top[1];
+ x = ADD_LONG( x, top[0] );
+ y = ADD_LONG( y, top[1] );
+
if ( !decoder->flex_state )
{
if ( builder->parse_state == T1_Parse_Start )
@@ -1269,57 +1341,55 @@
case op_rrcurveto:
FT_TRACE4(( " rrcurveto" ));
- if ( ( error = t1_builder_start_point( builder, x, y ) )
- != FT_Err_Ok ||
- ( error = t1_builder_check_points( builder, 3 ) )
- != FT_Err_Ok )
+ if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ||
+ FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) )
goto Fail;
- x += top[0];
- y += top[1];
+ x = ADD_LONG( x, top[0] );
+ y = ADD_LONG( y, top[1] );
t1_builder_add_point( builder, x, y, 0 );
- x += top[2];
- y += top[3];
+ x = ADD_LONG( x, top[2] );
+ y = ADD_LONG( y, top[3] );
t1_builder_add_point( builder, x, y, 0 );
- x += top[4];
- y += top[5];
+ x = ADD_LONG( x, top[4] );
+ y = ADD_LONG( y, top[5] );
t1_builder_add_point( builder, x, y, 1 );
break;
case op_vhcurveto:
FT_TRACE4(( " vhcurveto" ));
- if ( ( error = t1_builder_start_point( builder, x, y ) )
- != FT_Err_Ok ||
- ( error = t1_builder_check_points( builder, 3 ) )
- != FT_Err_Ok )
+ if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) ||
+ FT_SET_ERROR( t1_builder_check_points( builder, 3 ) ) )
goto Fail;
- y += top[0];
+ y = ADD_LONG( y, top[0] );
t1_builder_add_point( builder, x, y, 0 );
- x += top[1];
- y += top[2];
+
+ x = ADD_LONG( x, top[1] );
+ y = ADD_LONG( y, top[2] );
t1_builder_add_point( builder, x, y, 0 );
- x += top[3];
+
+ x = ADD_LONG( x, top[3] );
t1_builder_add_point( builder, x, y, 1 );
break;
case op_vlineto:
FT_TRACE4(( " vlineto" ));
- if ( ( error = t1_builder_start_point( builder, x, y ) )
- != FT_Err_Ok )
+ if ( FT_SET_ERROR( t1_builder_start_point( builder, x, y ) ) )
goto Fail;
- y += top[0];
+ y = ADD_LONG( y, top[0] );
goto Add_Line;
case op_vmoveto:
FT_TRACE4(( " vmoveto" ));
- y += top[0];
+ y = ADD_LONG( y, top[0] );
+
if ( !decoder->flex_state )
{
if ( builder->parse_state == T1_Parse_Start )
@@ -1335,7 +1405,7 @@
/* otherwise, we divide numbers in 16.16 format -- */
/* in both cases, it is the same operation */
*top = FT_DivFix( top[0], top[1] );
- ++top;
+ top++;
large_int = FALSE;
break;
@@ -1348,6 +1418,19 @@
FT_TRACE4(( " callsubr" ));
idx = Fix2Int( top[0] );
+
+ if ( decoder->subrs_hash )
+ {
+ size_t* val = ft_hash_num_lookup( idx,
+ decoder->subrs_hash );
+
+
+ if ( val )
+ idx = *val;
+ else
+ idx = -1;
+ }
+
if ( idx < 0 || idx >= decoder->num_subrs )
{
FT_ERROR(( "t1_decoder_parse_charstrings:"
@@ -1463,7 +1546,7 @@
/* record vertical hint */
if ( hinter )
{
- top[0] += orig_x;
+ top[0] = ADD_LONG( top[0], orig_x );
hinter->stem( hinter->hints, 0, top );
}
break;
@@ -1477,9 +1560,9 @@
FT_Pos dx = orig_x;
- top[0] += dx;
- top[2] += dx;
- top[4] += dx;
+ top[0] = ADD_LONG( top[0], dx );
+ top[2] = ADD_LONG( top[2], dx );
+ top[4] = ADD_LONG( top[4], dx );
hinter->stem3( hinter->hints, 0, top );
}
break;
@@ -1555,14 +1638,286 @@
return FT_THROW( Stack_Underflow );
}
+#else /* T1_CONFIG_OPTION_OLD_ENGINE */
- /* parse a single Type 1 glyph */
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* t1_decoder_parse_metrics */
+ /* */
+ /* <Description> */
+ /* Parses a given Type 1 charstrings program to extract width */
+ /* */
+ /* <Input> */
+ /* decoder :: The current Type 1 decoder. */
+ /* */
+ /* charstring_base :: The base address of the charstring stream. */
+ /* */
+ /* charstring_len :: The length in bytes of the charstring stream. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
FT_LOCAL_DEF( FT_Error )
- t1_decoder_parse_glyph( T1_Decoder decoder,
- FT_UInt glyph )
+ t1_decoder_parse_metrics( T1_Decoder decoder,
+ FT_Byte* charstring_base,
+ FT_UInt charstring_len )
{
- return decoder->parse_callback( decoder, glyph );
+ T1_Decoder_Zone zone;
+ FT_Byte* ip;
+ FT_Byte* limit;
+ T1_Builder builder = &decoder->builder;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_Bool bol = TRUE;
+#endif
+
+
+ /* First of all, initialize the decoder */
+ decoder->top = decoder->stack;
+ decoder->zone = decoder->zones;
+ zone = decoder->zones;
+
+ builder->parse_state = T1_Parse_Start;
+
+ FT_TRACE4(( "\n"
+ "Start charstring: get width\n" ));
+
+ zone->base = charstring_base;
+ limit = zone->limit = charstring_base + charstring_len;
+ ip = zone->cursor = zone->base;
+
+ /* now, execute loop */
+ while ( ip < limit )
+ {
+ FT_Long* top = decoder->top;
+ T1_Operator op = op_none;
+ FT_Int32 value = 0;
+
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( bol )
+ {
+ FT_TRACE5(( " (%d)", decoder->top - decoder->stack ));
+ bol = FALSE;
+ }
+#endif
+
+ /*********************************************************************/
+ /* */
+ /* Decode operator or operand */
+ /* */
+ /* */
+
+ /* first of all, decompress operator or value */
+ switch ( *ip++ )
+ {
+ case 1:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 14:
+ case 15:
+ case 21:
+ case 22:
+ case 30:
+ case 31:
+ goto No_Width;
+
+ case 13:
+ op = op_hsbw;
+ break;
+
+ case 12:
+ if ( ip >= limit )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " invalid escape (12+EOF)\n" ));
+ goto Syntax_Error;
+ }
+
+ switch ( *ip++ )
+ {
+ case 7:
+ op = op_sbw;
+ break;
+
+ default:
+ goto No_Width;
+ }
+ break;
+
+ case 255: /* four bytes integer */
+ if ( ip + 4 > limit )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " unexpected EOF in integer\n" ));
+ goto Syntax_Error;
+ }
+
+ value = (FT_Int32)( ( (FT_UInt32)ip[0] << 24 ) |
+ ( (FT_UInt32)ip[1] << 16 ) |
+ ( (FT_UInt32)ip[2] << 8 ) |
+ (FT_UInt32)ip[3] );
+ ip += 4;
+
+ /* According to the specification, values > 32000 or < -32000 must */
+ /* be followed by a `div' operator to make the result be in the */
+ /* range [-32000;32000]. We expect that the second argument of */
+ /* `div' is not a large number. Additionally, we don't handle */
+ /* stuff like `<large1> <large2> <num> div <num> div' or */
+ /* <large1> <large2> <num> div div'. This is probably not allowed */
+ /* anyway. */
+ if ( value > 32000 || value < -32000 )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " large integer found for width\n" ));
+ goto Syntax_Error;
+ }
+ else
+ {
+ value = (FT_Int32)( (FT_UInt32)value << 16 );
+ }
+
+ break;
+
+ default:
+ if ( ip[-1] >= 32 )
+ {
+ if ( ip[-1] < 247 )
+ value = (FT_Int32)ip[-1] - 139;
+ else
+ {
+ if ( ++ip > limit )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " unexpected EOF in integer\n" ));
+ goto Syntax_Error;
+ }
+
+ if ( ip[-2] < 251 )
+ value = ( ( ip[-2] - 247 ) * 256 ) + ip[-1] + 108;
+ else
+ value = -( ( ( ip[-2] - 251 ) * 256 ) + ip[-1] + 108 );
+ }
+
+ value = (FT_Int32)( (FT_UInt32)value << 16 );
+ }
+ else
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " invalid byte (%d)\n", ip[-1] ));
+ goto Syntax_Error;
+ }
+ }
+
+ /*********************************************************************/
+ /* */
+ /* Push value on stack, or process operator */
+ /* */
+ /* */
+ if ( op == op_none )
+ {
+ if ( top - decoder->stack >= T1_MAX_CHARSTRINGS_OPERANDS )
+ {
+ FT_ERROR(( "t1_decoder_parse_metrics: stack overflow\n" ));
+ goto Syntax_Error;
+ }
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE4(( " %d", value / 65536 ));
+#endif
+
+ *top++ = value;
+ decoder->top = top;
+ }
+ else /* general operator */
+ {
+ FT_Int num_args = t1_args_count[op];
+
+
+ FT_ASSERT( num_args >= 0 );
+
+ if ( top - decoder->stack < num_args )
+ goto Stack_Underflow;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+
+ if ( top - decoder->stack != num_args )
+ FT_TRACE0(( "t1_decoder_parse_metrics:"
+ " too much operands on the stack"
+ " (seen %d, expected %d)\n",
+ top - decoder->stack, num_args ));
+
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+ top -= num_args;
+
+ switch ( op )
+ {
+ case op_hsbw:
+ FT_TRACE4(( " hsbw" ));
+
+ builder->parse_state = T1_Parse_Have_Width;
+
+ builder->left_bearing.x = ADD_LONG( builder->left_bearing.x,
+ top[0] );
+
+ builder->advance.x = top[1];
+ builder->advance.y = 0;
+
+ /* we only want to compute the glyph's metrics */
+ /* (lsb + advance width), not load the rest of */
+ /* it; so exit immediately */
+ return FT_Err_Ok;
+
+ case op_sbw:
+ FT_TRACE4(( " sbw" ));
+
+ builder->parse_state = T1_Parse_Have_Width;
+
+ builder->left_bearing.x = ADD_LONG( builder->left_bearing.x,
+ top[0] );
+ builder->left_bearing.y = ADD_LONG( builder->left_bearing.y,
+ top[1] );
+
+ builder->advance.x = top[2];
+ builder->advance.y = top[3];
+
+ /* we only want to compute the glyph's metrics */
+ /* (lsb + advance width), not load the rest of */
+ /* it; so exit immediately */
+ return FT_Err_Ok;
+
+ default:
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " unhandled opcode %d\n", op ));
+ goto Syntax_Error;
+ }
+
+ } /* general operator processing */
+
+ } /* while ip < limit */
+
+ FT_TRACE4(( "..end..\n\n" ));
+
+ No_Width:
+ FT_ERROR(( "t1_decoder_parse_metrics:"
+ " no width, found op %d instead\n",
+ ip[-1] ));
+ Syntax_Error:
+ return FT_THROW( Syntax_Error );
+
+ Stack_Underflow:
+ return FT_THROW( Stack_Underflow );
}
+#endif /* T1_CONFIG_OPTION_OLD_ENGINE */
/* initialize T1 decoder */
@@ -1577,7 +1932,7 @@
FT_Render_Mode hint_mode,
T1_Decoder_Callback parse_callback )
{
- FT_MEM_ZERO( decoder, sizeof ( *decoder ) );
+ FT_ZERO( decoder );
/* retrieve PSNames interface from list of current modules */
{
@@ -1617,7 +1972,16 @@
FT_LOCAL_DEF( void )
t1_decoder_done( T1_Decoder decoder )
{
+ FT_Memory memory = decoder->builder.memory;
+
+
t1_builder_done( &decoder->builder );
+
+ if ( decoder->cf2_instance.finalizer )
+ {
+ decoder->cf2_instance.finalizer( decoder->cf2_instance.data );
+ FT_FREE( decoder->cf2_instance.data );
+ }
}
diff --git a/src/psaux/t1decode.h b/src/psaux/t1decode.h
index e83078f..1d9718d 100644
--- a/src/psaux/t1decode.h
+++ b/src/psaux/t1decode.h
@@ -4,7 +4,7 @@
/* */
/* PostScript Type 1 decoding routines (specification). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T1DECODE_H__
-#define __T1DECODE_H__
+#ifndef T1DECODE_H_
+#define T1DECODE_H_
#include <ft2build.h>
@@ -31,7 +31,11 @@
FT_CALLBACK_TABLE
const T1_Decoder_FuncsRec t1_decoder_funcs;
+ FT_LOCAL( FT_Int )
+ t1_lookup_glyph_by_stdcharcode_ps( PS_Decoder* decoder,
+ FT_Int charcode );
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
FT_LOCAL( FT_Error )
t1_decoder_parse_glyph( T1_Decoder decoder,
FT_UInt glyph_index );
@@ -40,6 +44,12 @@
t1_decoder_parse_charstrings( T1_Decoder decoder,
FT_Byte* base,
FT_UInt len );
+#else
+ FT_LOCAL( FT_Error )
+ t1_decoder_parse_metrics( T1_Decoder decoder,
+ FT_Byte* charstring_base,
+ FT_UInt charstring_len );
+#endif
FT_LOCAL( FT_Error )
t1_decoder_init( T1_Decoder decoder,
@@ -58,7 +68,7 @@
FT_END_HEADER
-#endif /* __T1DECODE_H__ */
+#endif /* T1DECODE_H_ */
/* END */
diff --git a/src/pshinter/Jamfile b/src/pshinter/Jamfile
index e763c47..3f5f0ae 100644
--- a/src/pshinter/Jamfile
+++ b/src/pshinter/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/pshinter Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,12 @@
if $(FT2_MULTI)
{
- _sources = pshrec pshglob pshalgo pshmod pshpic ;
+ _sources = pshalgo
+ pshglob
+ pshmod
+ pshpic
+ pshrec
+ ;
}
else
{
diff --git a/src/pshinter/module.mk b/src/pshinter/module.mk
index 1fd8e55..06707be 100644
--- a/src/pshinter/module.mk
+++ b/src/pshinter/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/pshinter/pshalgo.c b/src/pshinter/pshalgo.c
index bfdb3ed..b98077c 100644
--- a/src/pshinter/pshalgo.c
+++ b/src/pshinter/pshalgo.c
@@ -4,7 +4,7 @@
/* */
/* PostScript hinting algorithm (body). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
@@ -26,7 +26,7 @@
#undef FT_COMPONENT
-#define FT_COMPONENT trace_pshalgo2
+#define FT_COMPONENT trace_pshalgo
#ifdef DEBUG_HINTER
@@ -779,7 +779,7 @@
* It turns out though that minimizing the total number of lit
* pixels is also important, so position C), with one edge
* aligned with a pixel boundary is actually preferable
- * to A). There are also more possibile positions for C) than
+ * to A). There are also more possible positions for C) than
* for A) or B), so it involves less distortion of the overall
* character shape.
*/
@@ -802,7 +802,7 @@
}
/* We choose between B) and C) above based on the amount
- * of fractinal stem width; for small amounts, choose
+ * of fractional stem width; for small amounts, choose
* C) always, for large amounts, B) always, and inbetween,
* pick whichever one involves less stem movement.
*/
@@ -898,7 +898,7 @@
static void
psh_print_zone( PSH_Zone zone )
{
- printf( "zone [scale,delta,min,max] = [%.3f,%.3f,%d,%d]\n",
+ printf( "zone [scale,delta,min,max] = [%.5f,%.2f,%d,%d]\n",
zone->scale / 65536.0,
zone->delta / 64.0,
zone->min,
@@ -916,103 +916,9 @@
/*************************************************************************/
/*************************************************************************/
-#if 1
-
#define psh_corner_is_flat ft_corner_is_flat
#define psh_corner_orientation ft_corner_orientation
-#else
-
- FT_LOCAL_DEF( FT_Int )
- psh_corner_is_flat( FT_Pos x_in,
- FT_Pos y_in,
- FT_Pos x_out,
- FT_Pos y_out )
- {
- FT_Pos ax = x_in;
- FT_Pos ay = y_in;
-
- FT_Pos d_in, d_out, d_corner;
-
-
- if ( ax < 0 )
- ax = -ax;
- if ( ay < 0 )
- ay = -ay;
- d_in = ax + ay;
-
- ax = x_out;
- if ( ax < 0 )
- ax = -ax;
- ay = y_out;
- if ( ay < 0 )
- ay = -ay;
- d_out = ax + ay;
-
- ax = x_out + x_in;
- if ( ax < 0 )
- ax = -ax;
- ay = y_out + y_in;
- if ( ay < 0 )
- ay = -ay;
- d_corner = ax + ay;
-
- return ( d_in + d_out - d_corner ) < ( d_corner >> 4 );
- }
-
- static FT_Int
- psh_corner_orientation( FT_Pos in_x,
- FT_Pos in_y,
- FT_Pos out_x,
- FT_Pos out_y )
- {
- FT_Int result;
-
-
- /* deal with the trivial cases quickly */
- if ( in_y == 0 )
- {
- if ( in_x >= 0 )
- result = out_y;
- else
- result = -out_y;
- }
- else if ( in_x == 0 )
- {
- if ( in_y >= 0 )
- result = -out_x;
- else
- result = out_x;
- }
- else if ( out_y == 0 )
- {
- if ( out_x >= 0 )
- result = in_y;
- else
- result = -in_y;
- }
- else if ( out_x == 0 )
- {
- if ( out_y >= 0 )
- result = -in_x;
- else
- result = in_x;
- }
- else /* general case */
- {
- long long delta = (long long)in_x * out_y - (long long)in_y * out_x;
-
- if ( delta == 0 )
- result = 0;
- else
- result = 1 - 2 * ( delta < 0 );
- }
-
- return result;
- }
-
-#endif /* !1 */
-
#ifdef COMPUTE_INFLEXS
@@ -1256,7 +1162,7 @@
/* clear all fields */
- FT_MEM_ZERO( glyph, sizeof ( *glyph ) );
+ FT_ZERO( glyph );
memory = glyph->memory = globals->memory;
@@ -1625,7 +1531,7 @@
}
}
- if ( point->hint == NULL )
+ if ( !point->hint )
{
for ( nn = 0; nn < num_hints; nn++ )
{
@@ -1666,8 +1572,8 @@
PS_Mask mask = table->hint_masks->masks;
FT_UInt num_masks = table->hint_masks->num_masks;
FT_UInt first = 0;
- FT_Int major_dir = dimension == 0 ? PSH_DIR_VERTICAL
- : PSH_DIR_HORIZONTAL;
+ FT_Int major_dir = ( dimension == 0 ) ? PSH_DIR_VERTICAL
+ : PSH_DIR_HORIZONTAL;
PSH_Dimension dim = &glyph->globals->dimension[dimension];
FT_Fixed scale = dim->scale_mult;
FT_Int threshold;
diff --git a/src/pshinter/pshalgo.h b/src/pshinter/pshalgo.h
index 8373e5e..c50683f 100644
--- a/src/pshinter/pshalgo.h
+++ b/src/pshinter/pshalgo.h
@@ -4,7 +4,7 @@
/* */
/* PostScript hinting algorithm (specification). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PSHALGO_H__
-#define __PSHALGO_H__
+#ifndef PSHALGO_H_
+#define PSHALGO_H_
#include "pshrec.h"
@@ -235,7 +235,7 @@
FT_END_HEADER
-#endif /* __PSHALGO_H__ */
+#endif /* PSHALGO_H_ */
/* END */
diff --git a/src/pshinter/pshglob.c b/src/pshinter/pshglob.c
index 6723b71..accc049 100644
--- a/src/pshinter/pshglob.c
+++ b/src/pshinter/pshglob.c
@@ -5,7 +5,7 @@
/* PostScript hinter global hinting management (body). */
/* Inspired by the new auto-hinter module. */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
@@ -80,7 +80,7 @@
#if 0
- /* org_width is is font units, result in device pixels, 26.6 format */
+ /* org_width is in font units, result in device pixels, 26.6 format */
FT_LOCAL_DEF( FT_Pos )
psh_dimension_snap_width( PSH_Dimension dimension,
FT_Int org_width )
@@ -227,8 +227,8 @@
}
- /* Re-read blue zones from the original fonts and store them into out */
- /* private structure. This function re-orders, sanitizes and */
+ /* Re-read blue zones from the original fonts and store them into our */
+ /* private structure. This function re-orders, sanitizes, and */
/* fuzz-expands the zones as well. */
static void
psh_blues_set_zones( PSH_Blues target,
@@ -339,7 +339,7 @@
bot = zone[1].org_bottom;
delta = bot - top;
- if ( delta < 2 * fuzz )
+ if ( delta / 2 < fuzz )
zone[0].org_top = zone[1].org_bottom = top + delta / 2;
else
{
diff --git a/src/pshinter/pshglob.h b/src/pshinter/pshglob.h
index c376df7..cf80bf4 100644
--- a/src/pshinter/pshglob.h
+++ b/src/pshinter/pshglob.h
@@ -4,7 +4,7 @@
/* */
/* PostScript hinter global hinting management. */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PSHGLOB_H__
-#define __PSHGLOB_H__
+#ifndef PSHGLOB_H_
+#define PSHGLOB_H_
#include FT_FREETYPE_H
@@ -190,7 +190,7 @@
FT_END_HEADER
-#endif /* __PSHGLOB_H__ */
+#endif /* PSHGLOB_H_ */
/* END */
diff --git a/src/pshinter/pshinter.c b/src/pshinter/pshinter.c
index 9e65fe2..0eedac4 100644
--- a/src/pshinter/pshinter.c
+++ b/src/pshinter/pshinter.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PostScript Hinting module */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,13 +17,13 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
+
+#include "pshalgo.c"
+#include "pshglob.c"
+#include "pshmod.c"
#include "pshpic.c"
#include "pshrec.c"
-#include "pshglob.c"
-#include "pshalgo.c"
-#include "pshmod.c"
/* END */
diff --git a/src/pshinter/pshmod.c b/src/pshinter/pshmod.c
index 961b468..0b8f6f9 100644
--- a/src/pshinter/pshmod.c
+++ b/src/pshinter/pshmod.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PostScript hinter module implementation (body). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -95,9 +95,11 @@
FT_DEFINE_PSHINTER_INTERFACE(
pshinter_interface,
+
pshinter_get_globals_funcs,
pshinter_get_t1_funcs,
- pshinter_get_t2_funcs )
+ pshinter_get_t2_funcs
+ )
FT_DEFINE_MODULE(
@@ -111,9 +113,9 @@
&PSHINTER_INTERFACE_GET, /* module-specific interface */
- (FT_Module_Constructor)ps_hinter_init,
- (FT_Module_Destructor) ps_hinter_done,
- (FT_Module_Requester) NULL ) /* no additional interface for now */
-
+ (FT_Module_Constructor)ps_hinter_init, /* module_init */
+ (FT_Module_Destructor) ps_hinter_done, /* module_done */
+ (FT_Module_Requester) NULL /* get_interface */
+ )
/* END */
diff --git a/src/pshinter/pshmod.h b/src/pshinter/pshmod.h
index a58d856..556de2f 100644
--- a/src/pshinter/pshmod.h
+++ b/src/pshinter/pshmod.h
@@ -4,7 +4,7 @@
/* */
/* PostScript hinter module interface (specification). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PSHMOD_H__
-#define __PSHMOD_H__
+#ifndef PSHMOD_H_
+#define PSHMOD_H_
#include <ft2build.h>
@@ -33,7 +33,7 @@
FT_END_HEADER
-#endif /* __PSHMOD_H__ */
+#endif /* PSHMOD_H_ */
/* END */
diff --git a/src/pshinter/pshnterr.h b/src/pshinter/pshnterr.h
index ce790a8..b9d02d2 100644
--- a/src/pshinter/pshnterr.h
+++ b/src/pshinter/pshnterr.h
@@ -4,7 +4,7 @@
/* */
/* PS Hinter error codes (specification only). */
/* */
-/* Copyright 2003-2015 by */
+/* Copyright 2003-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,12 +22,12 @@
/* */
/*************************************************************************/
-#ifndef __PSHNTERR_H__
-#define __PSHNTERR_H__
+#ifndef PSHNTERR_H_
+#define PSHNTERR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX PSH_Err_
@@ -35,7 +35,7 @@
#include FT_ERRORS_H
-#endif /* __PSHNTERR_H__ */
+#endif /* PSHNTERR_H_ */
/* END */
diff --git a/src/pshinter/pshpic.c b/src/pshinter/pshpic.c
index afd8fb9..465ad31 100644
--- a/src/pshinter/pshpic.c
+++ b/src/pshinter/pshpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for pshinter module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/pshinter/pshpic.h b/src/pshinter/pshpic.h
index 62de457..4469ba8 100644
--- a/src/pshinter/pshpic.h
+++ b/src/pshinter/pshpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for pshinter module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,12 +16,10 @@
/***************************************************************************/
-#ifndef __PSHPIC_H__
-#define __PSHPIC_H__
+#ifndef PSHPIC_H_
+#define PSHPIC_H_
-FT_BEGIN_HEADER
-
#include FT_INTERNAL_PIC_H
@@ -33,6 +31,8 @@
#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+FT_BEGIN_HEADER
+
typedef struct PSHinterPIC_
{
PSHinter_Interface pshinter_interface;
@@ -51,13 +51,13 @@
FT_Error
pshinter_module_class_pic_init( FT_Library library );
+FT_END_HEADER
+
#endif /* FT_CONFIG_OPTION_PIC */
/* */
-FT_END_HEADER
-
-#endif /* __PSHPIC_H__ */
+#endif /* PSHPIC_H_ */
/* END */
diff --git a/src/pshinter/pshrec.c b/src/pshinter/pshrec.c
index f8895fc..6648d13 100644
--- a/src/pshinter/pshrec.c
+++ b/src/pshinter/pshrec.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PostScript hints recorder (body). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -818,7 +818,7 @@
ps_hints_init( PS_Hints hints,
FT_Memory memory )
{
- FT_MEM_ZERO( hints, sizeof ( *hints ) );
+ FT_ZERO( hints );
hints->memory = memory;
}
@@ -1140,7 +1140,7 @@
FT_LOCAL_DEF( void )
t1_hints_funcs_init( T1_Hints_FuncsRec* funcs )
{
- FT_MEM_ZERO( (char*)funcs, sizeof ( *funcs ) );
+ FT_ZERO( funcs );
funcs->open = (T1_Hints_OpenFunc) t1_hints_open;
funcs->close = (T1_Hints_CloseFunc) ps_hints_close;
@@ -1206,7 +1206,7 @@
FT_LOCAL_DEF( void )
t2_hints_funcs_init( T2_Hints_FuncsRec* funcs )
{
- FT_MEM_ZERO( funcs, sizeof ( *funcs ) );
+ FT_ZERO( funcs );
funcs->open = (T2_Hints_OpenFunc) t2_hints_open;
funcs->close = (T2_Hints_CloseFunc) ps_hints_close;
diff --git a/src/pshinter/pshrec.h b/src/pshinter/pshrec.h
index 2b1ad94..7e3dfe0 100644
--- a/src/pshinter/pshrec.h
+++ b/src/pshinter/pshrec.h
@@ -4,7 +4,7 @@
/* */
/* Postscript (Type1/Type2) hints recorder (specification). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -28,8 +28,8 @@
/**************************************************************************/
-#ifndef __PSHREC_H__
-#define __PSHREC_H__
+#ifndef PSHREC_H_
+#define PSHREC_H_
#include <ft2build.h>
@@ -166,7 +166,7 @@
FT_END_HEADER
-#endif /* __PS_HINTER_RECORD_H__ */
+#endif /* PSHREC_H_ */
/* END */
diff --git a/src/pshinter/rules.mk b/src/pshinter/rules.mk
index 7838e67..966690e 100644
--- a/src/pshinter/rules.mk
+++ b/src/pshinter/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/psnames/Jamfile b/src/psnames/Jamfile
index b9fe235..a0fd373 100644
--- a/src/psnames/Jamfile
+++ b/src/psnames/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/psnames Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,9 @@
if $(FT2_MULTI)
{
- _sources = psmodule pspic ;
+ _sources = psmodule
+ pspic
+ ;
}
else
{
diff --git a/src/psnames/module.mk b/src/psnames/module.mk
index 3708f60..410f48a 100644
--- a/src/psnames/module.mk
+++ b/src/psnames/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/psnames/psmodule.c b/src/psnames/psmodule.c
index 0f04c2f..8929ebe 100644
--- a/src/psnames/psmodule.c
+++ b/src/psnames/psmodule.c
@@ -4,7 +4,7 @@
/* */
/* PSNames module implementation (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,6 +22,22 @@
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
#include "psmodule.h"
+
+ /*
+ * The file `pstables.h' with its arrays and its function
+ * `ft_get_adobe_glyph_index' is useful for other projects also (for
+ * example, `pdfium' is using it). However, if used as a C++ header,
+ * including it in two different source files makes it necessary to use
+ * `extern const' for the declaration of its arrays, otherwise the data
+ * would be duplicated as mandated by the C++ standard.
+ *
+ * For this reason, we use `DEFINE_PS_TABLES' to guard the function
+ * definitions, and `DEFINE_PS_TABLES_DATA' to provide both proper array
+ * declarations and definitions.
+ */
+#include "pstables.h"
+#define DEFINE_PS_TABLES
+#define DEFINE_PS_TABLES_DATA
#include "pstables.h"
#include "psnamerr.h"
@@ -525,37 +541,42 @@
FT_DEFINE_SERVICE_PSCMAPSREC(
pscmaps_interface,
- (PS_Unicode_ValueFunc) ps_unicode_value,
- (PS_Unicodes_InitFunc) ps_unicodes_init,
- (PS_Unicodes_CharIndexFunc)ps_unicodes_char_index,
- (PS_Unicodes_CharNextFunc) ps_unicodes_char_next,
- (PS_Macintosh_NameFunc) ps_get_macintosh_name,
- (PS_Adobe_Std_StringsFunc) ps_get_standard_strings,
+ (PS_Unicode_ValueFunc) ps_unicode_value, /* unicode_value */
+ (PS_Unicodes_InitFunc) ps_unicodes_init, /* unicodes_init */
+ (PS_Unicodes_CharIndexFunc)ps_unicodes_char_index, /* unicodes_char_index */
+ (PS_Unicodes_CharNextFunc) ps_unicodes_char_next, /* unicodes_char_next */
- t1_standard_encoding,
- t1_expert_encoding )
+ (PS_Macintosh_NameFunc) ps_get_macintosh_name, /* macintosh_name */
+ (PS_Adobe_Std_StringsFunc) ps_get_standard_strings, /* adobe_std_strings */
+
+ t1_standard_encoding, /* adobe_std_encoding */
+ t1_expert_encoding /* adobe_expert_encoding */
+ )
#else
FT_DEFINE_SERVICE_PSCMAPSREC(
pscmaps_interface,
- NULL,
- NULL,
- NULL,
- NULL,
- (PS_Macintosh_NameFunc) ps_get_macintosh_name,
- (PS_Adobe_Std_StringsFunc) ps_get_standard_strings,
+ NULL, /* unicode_value */
+ NULL, /* unicodes_init */
+ NULL, /* unicodes_char_index */
+ NULL, /* unicodes_char_next */
- t1_standard_encoding,
- t1_expert_encoding )
+ (PS_Macintosh_NameFunc) ps_get_macintosh_name, /* macintosh_name */
+ (PS_Adobe_Std_StringsFunc) ps_get_standard_strings, /* adobe_std_strings */
+
+ t1_standard_encoding, /* adobe_std_encoding */
+ t1_expert_encoding /* adobe_expert_encoding */
+ )
#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */
FT_DEFINE_SERVICEDESCREC1(
pscmaps_services,
+
FT_SERVICE_ID_POSTSCRIPT_CMAPS, &PSCMAPS_INTERFACE_GET )
@@ -601,9 +622,11 @@
PUT_PS_NAMES_SERVICE(
(void*)&PSCMAPS_INTERFACE_GET ), /* module specific interface */
- (FT_Module_Constructor)NULL,
- (FT_Module_Destructor) NULL,
- (FT_Module_Requester) PUT_PS_NAMES_SERVICE( psnames_get_service ) )
+
+ (FT_Module_Constructor)NULL, /* module_init */
+ (FT_Module_Destructor) NULL, /* module_done */
+ (FT_Module_Requester) PUT_PS_NAMES_SERVICE( psnames_get_service ) /* get_interface */
+ )
/* END */
diff --git a/src/psnames/psmodule.h b/src/psnames/psmodule.h
index f85f322..3e94f8b 100644
--- a/src/psnames/psmodule.h
+++ b/src/psnames/psmodule.h
@@ -4,7 +4,7 @@
/* */
/* High-level PSNames module interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __PSMODULE_H__
-#define __PSMODULE_H__
+#ifndef PSMODULE_H_
+#define PSMODULE_H_
#include <ft2build.h>
@@ -32,7 +32,7 @@
FT_END_HEADER
-#endif /* __PSMODULE_H__ */
+#endif /* PSMODULE_H_ */
/* END */
diff --git a/src/psnames/psnamerr.h b/src/psnames/psnamerr.h
index 09cc247..14eb76c 100644
--- a/src/psnames/psnamerr.h
+++ b/src/psnames/psnamerr.h
@@ -4,7 +4,7 @@
/* */
/* PS names module error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,12 +23,12 @@
/* */
/*************************************************************************/
-#ifndef __PSNAMERR_H__
-#define __PSNAMERR_H__
+#ifndef PSNAMERR_H_
+#define PSNAMERR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX PSnames_Err_
@@ -36,7 +36,7 @@
#include FT_ERRORS_H
-#endif /* __PSNAMERR_H__ */
+#endif /* PSNAMERR_H_ */
/* END */
diff --git a/src/psnames/psnames.c b/src/psnames/psnames.c
index a438596..febb80d 100644
--- a/src/psnames/psnames.c
+++ b/src/psnames/psnames.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PSNames module component (body only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,10 +17,10 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
-#include "pspic.c"
+
#include "psmodule.c"
+#include "pspic.c"
/* END */
diff --git a/src/psnames/pspic.c b/src/psnames/pspic.c
index 1394f97..85a06f3 100644
--- a/src/psnames/pspic.c
+++ b/src/psnames/pspic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for psnames module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/psnames/pspic.h b/src/psnames/pspic.h
index 88ccda3..889780c 100644
--- a/src/psnames/pspic.h
+++ b/src/psnames/pspic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for psnames module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,14 +16,13 @@
/***************************************************************************/
-#ifndef __PSPIC_H__
-#define __PSPIC_H__
+#ifndef PSPIC_H_
+#define PSPIC_H_
-FT_BEGIN_HEADER
-
#include FT_INTERNAL_PIC_H
+
#ifndef FT_CONFIG_OPTION_PIC
#define PSCMAPS_SERVICES_GET pscmaps_services
@@ -33,6 +32,9 @@
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
+
+FT_BEGIN_HEADER
+
typedef struct PSModulePIC_
{
FT_ServiceDescRec* pscmaps_services;
@@ -54,13 +56,13 @@
FT_Error
psnames_module_class_pic_init( FT_Library library );
+FT_END_HEADER
+
#endif /* FT_CONFIG_OPTION_PIC */
/* */
-FT_END_HEADER
-
-#endif /* __PSPIC_H__ */
+#endif /* PSPIC_H_ */
/* END */
diff --git a/src/psnames/pstables.h b/src/psnames/pstables.h
index 3f31c31..79545ee 100644
--- a/src/psnames/pstables.h
+++ b/src/psnames/pstables.h
@@ -4,7 +4,7 @@
/* */
/* PostScript glyph names. */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -19,7 +19,16 @@
/* This file has been generated automatically -- do not edit! */
- static const char ft_standard_glyph_names[3696] =
+#ifndef DEFINE_PS_TABLES_DATA
+#ifdef __cplusplus
+ extern "C"
+#else
+ extern
+#endif
+#endif
+ const char ft_standard_glyph_names[3696]
+#ifdef DEFINE_PS_TABLES_DATA
+ =
{
'.','n','u','l','l', 0,
'n','o','n','m','a','r','k','i','n','g','r','e','t','u','r','n', 0,
@@ -441,14 +450,25 @@
'R','e','g','u','l','a','r', 0,
'R','o','m','a','n', 0,
'S','e','m','i','b','o','l','d', 0,
- };
+ }
+#endif /* DEFINE_PS_TABLES_DATA */
+ ;
#define FT_NUM_MAC_NAMES 258
/* Values are offsets into the `ft_standard_glyph_names' table */
- static const short ft_mac_names[FT_NUM_MAC_NAMES] =
+#ifndef DEFINE_PS_TABLES_DATA
+#ifdef __cplusplus
+ extern "C"
+#else
+ extern
+#endif
+#endif
+ const short ft_mac_names[FT_NUM_MAC_NAMES]
+#ifdef DEFINE_PS_TABLES_DATA
+ =
{
253, 0, 6, 261, 267, 274, 283, 294, 301, 309, 758, 330, 340, 351,
360, 365, 371, 378, 385, 391, 396, 400, 404, 410, 415, 420, 424, 430,
@@ -469,14 +489,25 @@
1066,1073,1101,1143,1536,1783,1596,1843,1253,1207,1319,1579,1826,1229,
1270,1313,1323,1171,1290,1332,1211,1235,1276, 169, 175, 182, 189, 200,
209, 218, 225, 232, 239, 246
- };
+ }
+#endif /* DEFINE_PS_TABLES_DATA */
+ ;
#define FT_NUM_SID_NAMES 391
/* Values are offsets into the `ft_standard_glyph_names' table */
- static const short ft_sid_names[FT_NUM_SID_NAMES] =
+#ifndef DEFINE_PS_TABLES_DATA
+#ifdef __cplusplus
+ extern "C"
+#else
+ extern
+#endif
+#endif
+ const short ft_sid_names[FT_NUM_SID_NAMES]
+#ifdef DEFINE_PS_TABLES_DATA
+ =
{
253, 261, 267, 274, 283, 294, 301, 309, 319, 330, 340, 351, 360, 365,
371, 378, 385, 391, 396, 400, 404, 410, 415, 420, 424, 430, 436, 441,
@@ -506,11 +537,22 @@
3237,3249,3264,3275,3283,3297,3309,3321,3338,3353,3365,3377,3394,3409,
3418,3430,3442,3454,3471,3483,3498,3506,3518,3530,3542,3559,3574,3586,
3597,3612,3620,3628,3636,3644,3650,3655,3660,3666,3673,3681,3687
- };
+ }
+#endif /* DEFINE_PS_TABLES_DATA */
+ ;
/* the following are indices into the SID name table */
- static const unsigned short t1_standard_encoding[256] =
+#ifndef DEFINE_PS_TABLES_DATA
+#ifdef __cplusplus
+ extern "C"
+#else
+ extern
+#endif
+#endif
+ const unsigned short t1_standard_encoding[256]
+#ifdef DEFINE_PS_TABLES_DATA
+ =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -528,11 +570,22 @@
137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,138, 0,139, 0, 0, 0, 0,140,141,142,143, 0, 0, 0, 0,
0,144, 0, 0, 0,145, 0, 0,146,147,148,149, 0, 0, 0, 0
- };
+ }
+#endif /* DEFINE_PS_TABLES_DATA */
+ ;
/* the following are indices into the SID name table */
- static const unsigned short t1_expert_encoding[256] =
+#ifndef DEFINE_PS_TABLES_DATA
+#ifdef __cplusplus
+ extern "C"
+#else
+ extern
+#endif
+#endif
+ const unsigned short t1_expert_encoding[256]
+#ifdef DEFINE_PS_TABLES_DATA
+ =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -550,7 +603,9 @@
331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,
347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,
363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378
- };
+ }
+#endif /* DEFINE_PS_TABLES_DATA */
+ ;
/*
@@ -564,7 +619,16 @@
#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
- static const unsigned char ft_adobe_glyph_list[55997L] =
+#ifndef DEFINE_PS_TABLES_DATA
+#ifdef __cplusplus
+ extern "C"
+#else
+ extern
+#endif
+#endif
+ const unsigned char ft_adobe_glyph_list[55997L]
+#ifdef DEFINE_PS_TABLES_DATA
+ =
{
0, 52, 0,106, 2,167, 3, 63, 4,220, 6,125, 9,143, 10, 23,
11,137, 12,199, 14,246, 15, 87, 16,233, 17,219, 18,104, 19, 88,
@@ -4066,9 +4130,12 @@
248,232,239,239,107,128, 2,144,243,244,242,239,235,101,128, 1,
182,117, 2,218,167,218,178,232,233,242,225,231,225,238, 97,128,
48, 90,235,225,244,225,235,225,238, 97,128, 48,186
- };
+ }
+#endif /* DEFINE_PS_TABLES_DATA */
+ ;
+#ifdef DEFINE_PS_TABLES
/*
* This function searches the compressed table efficiently.
*/
@@ -4163,6 +4230,7 @@
NotFound:
return 0;
}
+#endif /* DEFINE_PS_TABLES */
#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */
diff --git a/src/psnames/rules.mk b/src/psnames/rules.mk
index 3c77486..4d629d8 100644
--- a/src/psnames/rules.mk
+++ b/src/psnames/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/raster/Jamfile b/src/raster/Jamfile
index f03ed32..838e7ef 100644
--- a/src/raster/Jamfile
+++ b/src/raster/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/raster Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,10 @@
if $(FT2_MULTI)
{
- _sources = ftraster ftrend1 rastpic ;
+ _sources = ftraster
+ ftrend1
+ rastpic
+ ;
}
else
{
diff --git a/src/raster/ftmisc.h b/src/raster/ftmisc.h
index 19be4ca..7e40119 100644
--- a/src/raster/ftmisc.h
+++ b/src/raster/ftmisc.h
@@ -5,7 +5,7 @@
/* Miscellaneous macros for stand-alone rasterizer (specification */
/* only). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
@@ -24,8 +24,8 @@
/* */
/***************************************************/
-#ifndef __FTMISC_H__
-#define __FTMISC_H__
+#ifndef FTMISC_H_
+#define FTMISC_H_
/* memset */
@@ -37,7 +37,7 @@
#define FT_LOCAL_DEF( x ) static x
- /* from include/freetype2/fttypes.h */
+ /* from include/freetype/fttypes.h */
typedef unsigned char FT_Byte;
typedef signed int FT_Int;
@@ -54,7 +54,7 @@
(FT_ULong)_x4 )
- /* from include/freetype2/ftsystem.h */
+ /* from include/freetype/ftsystem.h */
typedef struct FT_MemoryRec_* FT_Memory;
@@ -136,7 +136,7 @@
return ( s > 0 ) ? d : -d;
}
-#endif /* __FTMISC_H__ */
+#endif /* FTMISC_H_ */
/* END */
diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c
index eeab143..4354730 100644
--- a/src/raster/ftraster.c
+++ b/src/raster/ftraster.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,18 +18,18 @@
/*************************************************************************/
/* */
/* This file can be compiled without the rest of the FreeType engine, by */
- /* defining the _STANDALONE_ macro when compiling it. You also need to */
+ /* defining the STANDALONE_ macro when compiling it. You also need to */
/* put the files `ftimage.h' and `ftmisc.h' into the $(incdir) */
/* directory. Typically, you should do something like */
/* */
/* - copy `src/raster/ftraster.c' (this file) to your current directory */
/* */
- /* - copy `include/ftimage.h' and `src/raster/ftmisc.h' to your current */
- /* directory */
+ /* - copy `include/freetype/ftimage.h' and `src/raster/ftmisc.h' to your */
+ /* current directory */
/* */
- /* - compile `ftraster' with the _STANDALONE_ macro defined, as in */
+ /* - compile `ftraster' with the STANDALONE_ macro defined, as in */
/* */
- /* cc -c -D_STANDALONE_ ftraster.c */
+ /* cc -c -DSTANDALONE_ ftraster.c */
/* */
/* The renderer can be initialized with a call to */
/* `ft_standard_raster.raster_new'; a bitmap can be generated */
@@ -47,7 +47,7 @@
/* */
/*************************************************************************/
-#ifdef _STANDALONE_
+#ifdef STANDALONE_
/* The size in bytes of the render pool used by the scan-line converter */
/* to do all of its work. */
@@ -60,7 +60,7 @@
#include "ftmisc.h"
#include "ftimage.h"
-#else /* !_STANDALONE_ */
+#else /* !STANDALONE_ */
#include <ft2build.h>
#include "ftraster.h"
@@ -68,7 +68,7 @@
#include "rastpic.h"
-#endif /* !_STANDALONE_ */
+#endif /* !STANDALONE_ */
/*************************************************************************/
@@ -173,14 +173,12 @@
#define FT_COMPONENT trace_raster
-#ifdef _STANDALONE_
+#ifdef STANDALONE_
/* Auxiliary macros for token concatenation. */
#define FT_ERR_XCAT( x, y ) x ## y
#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
-#define FT_MAX( a, b ) ( (a) > (b) ? (a) : (b) )
-
/* This macro is used to indicate that a function parameter is unused. */
/* Its purpose is simply to reduce compiler warnings. Note also that */
/* simply defining it as `(void)x' doesn't avoid warnings with certain */
@@ -226,7 +224,7 @@
raster_done_ \
};
-#else /* !_STANDALONE_ */
+#else /* !STANDALONE_ */
#include FT_INTERNAL_OBJECTS_H
@@ -242,7 +240,7 @@
#define Raster_Err_Unsupported Raster_Err_Cannot_Render_Glyph
-#endif /* !_STANDALONE_ */
+#endif /* !STANDALONE_ */
#ifndef FT_MEM_SET
@@ -253,6 +251,10 @@
#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
#endif
+#ifndef FT_ZERO
+#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) )
+#endif
+
/* FMulDiv means `Fast MulDiv'; it is used in case where `b' is */
/* typically a small value and the result of a*b is known to fit into */
/* 32 bits. */
@@ -450,13 +452,21 @@
#define CEILING( x ) ( ( (x) + ras.precision - 1 ) & -ras.precision )
#define TRUNC( x ) ( (Long)(x) >> ras.precision_bits )
#define FRAC( x ) ( (x) & ( ras.precision - 1 ) )
-#define SCALED( x ) ( ( (Long)(x) << ras.scale_shift ) - ras.precision_half )
+#define SCALED( x ) ( ( (x) < 0 ? -( -(x) << ras.scale_shift ) \
+ : ( (x) << ras.scale_shift ) ) \
+ - ras.precision_half )
#define IS_BOTTOM_OVERSHOOT( x ) \
(Bool)( CEILING( x ) - x >= ras.precision_half )
#define IS_TOP_OVERSHOOT( x ) \
(Bool)( x - FLOOR( x ) >= ras.precision_half )
+#if FT_RENDER_POOL_SIZE > 2048
+#define FT_MAX_BLACK_POOL ( FT_RENDER_POOL_SIZE / sizeof ( Long ) )
+#else
+#define FT_MAX_BLACK_POOL ( 2048 / sizeof ( Long ) )
+#endif
+
/* The most used variables are positioned at the top of the structure. */
/* Thus, their offset can be coded with less opcodes, resulting in a */
/* smaller executable. */
@@ -799,15 +809,14 @@
/* if it is <, simply insert it, ignore if == */
if ( n >= 0 && y > y_turns[n] )
- while ( n >= 0 )
+ do
{
Int y2 = (Int)y_turns[n];
y_turns[n] = y;
y = y2;
- n--;
- }
+ } while ( --n >= 0 );
if ( n < 0 )
{
@@ -848,7 +857,7 @@
if ( n > 1 && p )
{
- while ( n > 0 )
+ do
{
Int bottom, top;
@@ -876,8 +885,7 @@
return FAILURE;
p = p->link;
- n--;
- }
+ } while ( --n );
}
else
ras.fProfile = NULL;
@@ -1248,7 +1256,7 @@
start_arc = arc;
- while ( arc >= start_arc && e <= e2 )
+ do
{
ras.joint = FALSE;
@@ -1281,7 +1289,7 @@
}
arc -= degree;
}
- }
+ } while ( arc >= start_arc && e <= e2 );
Fin:
ras.top = top;
@@ -1512,8 +1520,9 @@
state_bez = y1 < y3 ? Ascending_State : Descending_State;
if ( ras.state != state_bez )
{
- Bool o = state_bez == Ascending_State ? IS_BOTTOM_OVERSHOOT( y1 )
- : IS_TOP_OVERSHOOT( y1 );
+ Bool o = ( state_bez == Ascending_State )
+ ? IS_BOTTOM_OVERSHOOT( y1 )
+ : IS_TOP_OVERSHOOT( y1 );
/* finalize current profile if any */
@@ -1648,8 +1657,9 @@
/* detect a change of direction */
if ( ras.state != state_bez )
{
- Bool o = state_bez == Ascending_State ? IS_BOTTOM_OVERSHOOT( y1 )
- : IS_TOP_OVERSHOOT( y1 );
+ Bool o = ( state_bez == Ascending_State )
+ ? IS_BOTTOM_OVERSHOOT( y1 )
+ : IS_TOP_OVERSHOOT( y1 );
/* finalize current profile if any */
@@ -2114,7 +2124,7 @@
while ( current )
{
current->X = *current->offset;
- current->offset += current->flags & Flow_Up ? 1 : -1;
+ current->offset += ( current->flags & Flow_Up ) ? 1 : -1;
current->height--;
current = current->link;
}
@@ -2382,7 +2392,7 @@
pxl = e2;
/* check that the other pixel isn't set */
- e1 = pxl == e1 ? e2 : e1;
+ e1 = ( pxl == e1 ) ? e2 : e1;
e1 = TRUNC( e1 );
@@ -2583,7 +2593,7 @@
pxl = e2;
/* check that the other pixel isn't set */
- e1 = pxl == e1 ? e2 : e1;
+ e1 = ( pxl == e1 ) ? e2 : e1;
e1 = TRUNC( e1 );
@@ -3041,7 +3051,7 @@
/**** a static object. *****/
-#ifdef _STANDALONE_
+#ifdef STANDALONE_
static int
@@ -3053,7 +3063,7 @@
*araster = (FT_Raster)&the_raster;
- FT_MEM_ZERO( &the_raster, sizeof ( the_raster ) );
+ FT_ZERO( &the_raster );
ft_black_init( &the_raster );
return 0;
@@ -3068,7 +3078,7 @@
}
-#else /* !_STANDALONE_ */
+#else /* !STANDALONE_ */
static int
@@ -3102,13 +3112,13 @@
}
-#endif /* !_STANDALONE_ */
+#endif /* !STANDALONE_ */
static void
- ft_black_reset( black_PRaster raster,
- char* pool_base,
- Long pool_size )
+ ft_black_reset( FT_Raster raster,
+ PByte pool_base,
+ ULong pool_size )
{
FT_UNUSED( raster );
FT_UNUSED( pool_base );
@@ -3117,20 +3127,20 @@
static int
- ft_black_set_mode( black_PRaster raster,
- ULong mode,
- const char* palette )
+ ft_black_set_mode( FT_Raster raster,
+ ULong mode,
+ void* args )
{
FT_UNUSED( raster );
FT_UNUSED( mode );
- FT_UNUSED( palette );
+ FT_UNUSED( args );
return 0;
}
static int
- ft_black_render( black_PRaster raster,
+ ft_black_render( FT_Raster raster,
const FT_Raster_Params* params )
{
const FT_Outline* outline = (const FT_Outline*)params->source;
@@ -3138,7 +3148,7 @@
black_TWorker worker[1];
- Long buffer[FT_MAX( FT_RENDER_POOL_SIZE, 2048 ) / sizeof ( Long )];
+ Long buffer[FT_MAX_BLACK_POOL];
if ( !raster )
@@ -3175,6 +3185,20 @@
if ( !target_map->buffer )
return FT_THROW( Invalid );
+ /* reject too large outline coordinates */
+ {
+ FT_Vector* vec = outline->points;
+ FT_Vector* limit = vec + outline->n_points;
+
+
+ for ( ; vec < limit; vec++ )
+ {
+ if ( vec->x < -0x1000000L || vec->x > 0x1000000L ||
+ vec->y < -0x1000000L || vec->y > 0x1000000L )
+ return FT_THROW( Invalid );
+ }
+ }
+
ras.outline = *outline;
ras.target = *target_map;
@@ -3190,11 +3214,12 @@
FT_GLYPH_FORMAT_OUTLINE,
- (FT_Raster_New_Func) ft_black_new,
- (FT_Raster_Reset_Func) ft_black_reset,
- (FT_Raster_Set_Mode_Func)ft_black_set_mode,
- (FT_Raster_Render_Func) ft_black_render,
- (FT_Raster_Done_Func) ft_black_done )
+ (FT_Raster_New_Func) ft_black_new, /* raster_new */
+ (FT_Raster_Reset_Func) ft_black_reset, /* raster_reset */
+ (FT_Raster_Set_Mode_Func)ft_black_set_mode, /* raster_set_mode */
+ (FT_Raster_Render_Func) ft_black_render, /* raster_render */
+ (FT_Raster_Done_Func) ft_black_done /* raster_done */
+ )
/* END */
diff --git a/src/raster/ftraster.h b/src/raster/ftraster.h
index a270d48..40b5d6d 100644
--- a/src/raster/ftraster.h
+++ b/src/raster/ftraster.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTRASTER_H__
-#define __FTRASTER_H__
+#ifndef FTRASTER_H_
+#define FTRASTER_H_
#include <ft2build.h>
@@ -33,14 +33,14 @@
/* Uncomment the following line if you are using ftraster.c as a */
/* standalone module, fully independent of FreeType. */
/* */
-/* #define _STANDALONE_ */
+/* #define STANDALONE_ */
FT_EXPORT_VAR( const FT_Raster_Funcs ) ft_standard_raster;
FT_END_HEADER
-#endif /* __FTRASTER_H__ */
+#endif /* FTRASTER_H_ */
/* END */
diff --git a/src/raster/ftrend1.c b/src/raster/ftrend1.c
index f314392..a7ce973 100644
--- a/src/raster/ftrend1.c
+++ b/src/raster/ftrend1.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer interface (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -31,12 +31,7 @@
static FT_Error
ft_raster1_init( FT_Renderer render )
{
- FT_Library library = FT_MODULE_LIBRARY( render );
-
-
- render->clazz->raster_class->raster_reset( render->raster,
- library->raster_pool,
- library->raster_pool_size );
+ render->clazz->raster_class->raster_reset( render->raster, NULL, 0 );
return FT_Err_Ok;
}
@@ -88,7 +83,7 @@
FT_GlyphSlot slot,
FT_BBox* cbox )
{
- FT_MEM_ZERO( cbox, sizeof ( *cbox ) );
+ FT_ZERO( cbox );
if ( slot->format == render->glyph_format )
FT_Outline_Get_CBox( &slot->outline, cbox );
@@ -102,12 +97,12 @@
FT_Render_Mode mode,
const FT_Vector* origin )
{
- FT_Error error;
- FT_Outline* outline;
- FT_BBox cbox, cbox0;
- FT_UInt width, height, pitch;
- FT_Bitmap* bitmap;
- FT_Memory memory;
+ FT_Error error = FT_Err_Ok;
+ FT_Outline* outline = &slot->outline;
+ FT_Bitmap* bitmap = &slot->bitmap;
+ FT_Memory memory = render->root.memory;
+ FT_Pos x_shift = 0;
+ FT_Pos y_shift = 0;
FT_Raster_Params params;
@@ -126,60 +121,6 @@
return FT_THROW( Cannot_Render_Glyph );
}
- outline = &slot->outline;
-
- /* translate the outline to the new origin if needed */
- if ( origin )
- FT_Outline_Translate( outline, origin->x, origin->y );
-
- /* compute the control box, and grid fit it */
- FT_Outline_Get_CBox( outline, &cbox0 );
-
- /* undocumented but confirmed: bbox values get rounded */
-#if 1
- cbox.xMin = FT_PIX_ROUND( cbox0.xMin );
- cbox.yMin = FT_PIX_ROUND( cbox0.yMin );
- cbox.xMax = FT_PIX_ROUND( cbox0.xMax );
- cbox.yMax = FT_PIX_ROUND( cbox0.yMax );
-#else
- cbox.xMin = FT_PIX_FLOOR( cbox.xMin );
- cbox.yMin = FT_PIX_FLOOR( cbox.yMin );
- cbox.xMax = FT_PIX_CEIL( cbox.xMax );
- cbox.yMax = FT_PIX_CEIL( cbox.yMax );
-#endif
-
- /* If either `width' or `height' round to 0, try */
- /* explicitly rounding up/down. In the case of */
- /* glyphs containing only one very narrow feature, */
- /* this gives the drop-out compensation in the scan */
- /* conversion code a chance to do its stuff. */
- width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
- if ( width == 0 )
- {
- cbox.xMin = FT_PIX_FLOOR( cbox0.xMin );
- cbox.xMax = FT_PIX_CEIL( cbox0.xMax );
-
- width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
- }
-
- height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
- if ( height == 0 )
- {
- cbox.yMin = FT_PIX_FLOOR( cbox0.yMin );
- cbox.yMax = FT_PIX_CEIL( cbox0.yMax );
-
- height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
- }
-
- if ( width > FT_USHORT_MAX || height > FT_USHORT_MAX )
- {
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
-
- bitmap = &slot->bitmap;
- memory = render->root.memory;
-
/* release old bitmap buffer */
if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
{
@@ -187,44 +128,54 @@
slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
}
- pitch = ( ( width + 15 ) >> 4 ) << 1;
- bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
+ ft_glyphslot_preset_bitmap( slot, mode, origin );
- bitmap->width = width;
- bitmap->rows = height;
- bitmap->pitch = (int)pitch;
-
- if ( FT_ALLOC_MULT( bitmap->buffer, pitch, height ) )
+ /* allocate new one */
+ if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) )
goto Exit;
slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
+ x_shift = -slot->bitmap_left * 64;
+ y_shift = ( (FT_Int)bitmap->rows - slot->bitmap_top ) * 64;
+
+ if ( origin )
+ {
+ x_shift += origin->x;
+ y_shift += origin->y;
+ }
+
/* translate outline to render it into the bitmap */
- FT_Outline_Translate( outline, -cbox.xMin, -cbox.yMin );
+ if ( x_shift || y_shift )
+ FT_Outline_Translate( outline, x_shift, y_shift );
/* set up parameters */
params.target = bitmap;
params.source = outline;
- params.flags = 0;
+ params.flags = FT_RASTER_FLAG_DEFAULT;
/* render outline into the bitmap */
error = render->raster_render( render->raster, ¶ms );
- FT_Outline_Translate( outline, cbox.xMin, cbox.yMin );
-
- if ( error )
- goto Exit;
-
- slot->format = FT_GLYPH_FORMAT_BITMAP;
- slot->bitmap_left = (FT_Int)( cbox.xMin >> 6 );
- slot->bitmap_top = (FT_Int)( cbox.yMax >> 6 );
-
Exit:
+ if ( !error )
+ /* everything is fine; the glyph is now officially a bitmap */
+ slot->format = FT_GLYPH_FORMAT_BITMAP;
+ else if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
+ {
+ FT_FREE( bitmap->buffer );
+ slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
+ }
+
+ if ( x_shift || y_shift )
+ FT_Outline_Translate( outline, -x_shift, -y_shift );
+
return error;
}
- FT_DEFINE_RENDERER( ft_raster1_renderer_class,
+ FT_DEFINE_RENDERER(
+ ft_raster1_renderer_class,
FT_MODULE_RENDERER,
sizeof ( FT_RendererRec ),
@@ -233,21 +184,20 @@
0x10000L,
0x20000L,
- 0, /* module specific interface */
+ NULL, /* module specific interface */
- (FT_Module_Constructor)ft_raster1_init,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- ,
+ (FT_Module_Constructor)ft_raster1_init, /* module_init */
+ (FT_Module_Destructor) NULL, /* module_done */
+ (FT_Module_Requester) NULL, /* get_interface */
FT_GLYPH_FORMAT_OUTLINE,
- (FT_Renderer_RenderFunc) ft_raster1_render,
- (FT_Renderer_TransformFunc)ft_raster1_transform,
- (FT_Renderer_GetCBoxFunc) ft_raster1_get_cbox,
- (FT_Renderer_SetModeFunc) ft_raster1_set_mode,
+ (FT_Renderer_RenderFunc) ft_raster1_render, /* render_glyph */
+ (FT_Renderer_TransformFunc)ft_raster1_transform, /* transform_glyph */
+ (FT_Renderer_GetCBoxFunc) ft_raster1_get_cbox, /* get_glyph_cbox */
+ (FT_Renderer_SetModeFunc) ft_raster1_set_mode, /* set_mode */
- (FT_Raster_Funcs*) &FT_STANDARD_RASTER_GET
+ (FT_Raster_Funcs*)&FT_STANDARD_RASTER_GET /* raster_class */
)
diff --git a/src/raster/ftrend1.h b/src/raster/ftrend1.h
index c367260..2abdf2d 100644
--- a/src/raster/ftrend1.h
+++ b/src/raster/ftrend1.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTREND1_H__
-#define __FTREND1_H__
+#ifndef FTREND1_H_
+#define FTREND1_H_
#include <ft2build.h>
@@ -29,16 +29,10 @@
FT_DECLARE_RENDERER( ft_raster1_renderer_class )
- /* this renderer is _NOT_ part of the default modules, you'll need */
- /* to register it by hand in your application. It should only be */
- /* used for backwards-compatibility with FT 1.x anyway. */
- /* */
- FT_DECLARE_RENDERER( ft_raster5_renderer_class )
-
FT_END_HEADER
-#endif /* __FTREND1_H__ */
+#endif /* FTREND1_H_ */
/* END */
diff --git a/src/raster/module.mk b/src/raster/module.mk
index 75ea107..b115f41 100644
--- a/src/raster/module.mk
+++ b/src/raster/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/raster/raster.c b/src/raster/raster.c
index 21bb16d..76edd21 100644
--- a/src/raster/raster.c
+++ b/src/raster/raster.c
@@ -4,7 +4,7 @@
/* */
/* FreeType monochrome rasterer module component (body only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,11 +17,11 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
-#include "rastpic.c"
+
#include "ftraster.c"
#include "ftrend1.c"
+#include "rastpic.c"
/* END */
diff --git a/src/raster/rasterrs.h b/src/raster/rasterrs.h
index e7f00bc..22a3e15 100644
--- a/src/raster/rasterrs.h
+++ b/src/raster/rasterrs.h
@@ -4,7 +4,7 @@
/* */
/* monochrome renderer error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,12 +23,12 @@
/* */
/*************************************************************************/
-#ifndef __RASTERRS_H__
-#define __RASTERRS_H__
+#ifndef RASTERRS_H_
+#define RASTERRS_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX Raster_Err_
@@ -36,7 +36,7 @@
#include FT_ERRORS_H
-#endif /* __RASTERRS_H__ */
+#endif /* RASTERRS_H_ */
/* END */
diff --git a/src/raster/rastpic.c b/src/raster/rastpic.c
index fe58c99..1dc8981 100644
--- a/src/raster/rastpic.c
+++ b/src/raster/rastpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for raster module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -59,8 +59,9 @@
FT_Memory memory = library->memory;
- /* since this function also serves raster5 renderer, */
- /* it implements reference counting */
+ /* XXX: since this function also served the no longer available */
+ /* raster5 renderer it uses reference counting, which could */
+ /* be removed now */
if ( pic_container->raster )
{
((RasterPIC*)pic_container->raster)->ref_count++;
@@ -82,21 +83,6 @@
return error;
}
-
- /* re-route these init and free functions to the above functions */
- FT_Error
- ft_raster5_renderer_class_pic_init( FT_Library library )
- {
- return ft_raster1_renderer_class_pic_init( library );
- }
-
-
- void
- ft_raster5_renderer_class_pic_free( FT_Library library )
- {
- ft_raster1_renderer_class_pic_free( library );
- }
-
#endif /* FT_CONFIG_OPTION_PIC */
diff --git a/src/raster/rastpic.h b/src/raster/rastpic.h
index a875884..6d0877c 100644
--- a/src/raster/rastpic.h
+++ b/src/raster/rastpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for raster module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,15 +16,15 @@
/***************************************************************************/
-#ifndef __RASTPIC_H__
-#define __RASTPIC_H__
+#ifndef RASTPIC_H_
+#define RASTPIC_H_
-FT_BEGIN_HEADER
-
#include FT_INTERNAL_PIC_H
+FT_BEGIN_HEADER
+
#ifndef FT_CONFIG_OPTION_PIC
#define FT_STANDARD_RASTER_GET ft_standard_raster
@@ -48,22 +48,16 @@
void
ft_raster1_renderer_class_pic_free( FT_Library library );
- void
- ft_raster5_renderer_class_pic_free( FT_Library library );
-
FT_Error
ft_raster1_renderer_class_pic_init( FT_Library library );
- FT_Error
- ft_raster5_renderer_class_pic_init( FT_Library library );
-
#endif /* FT_CONFIG_OPTION_PIC */
/* */
FT_END_HEADER
-#endif /* __RASTPIC_H__ */
+#endif /* RASTPIC_H_ */
/* END */
diff --git a/src/raster/rules.mk b/src/raster/rules.mk
index c214b35..9aef1f0 100644
--- a/src/raster/rules.mk
+++ b/src/raster/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/sfnt/Jamfile b/src/sfnt/Jamfile
index 73c6e15..57977fc 100644
--- a/src/sfnt/Jamfile
+++ b/src/sfnt/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/sfnt Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,18 @@
if $(FT2_MULTI)
{
- _sources = sfobjs sfdriver ttcmap ttmtx ttpost ttload ttsbit ttkern ttbdf sfntpic ;
+ _sources = pngshim
+ sfdriver
+ sfntpic
+ sfobjs
+ ttbdf
+ ttcmap
+ ttkern
+ ttload
+ ttmtx
+ ttpost
+ ttsbit
+ ;
}
else
{
diff --git a/src/sfnt/module.mk b/src/sfnt/module.mk
index 535fe22..51ca67e 100644
--- a/src/sfnt/module.mk
+++ b/src/sfnt/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/sfnt/pngshim.c b/src/sfnt/pngshim.c
index ea60452..1602026 100644
--- a/src/sfnt/pngshim.c
+++ b/src/sfnt/pngshim.c
@@ -4,7 +4,7 @@
/* */
/* PNG Bitmap glyph support. */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* Google, Inc. */
/* Written by Stuart Gill and Behdad Esfahbod. */
/* */
@@ -24,9 +24,10 @@
#include FT_CONFIG_STANDARD_LIBRARY_H
-#ifdef FT_CONFIG_OPTION_USE_PNG
+#if defined( TT_CONFIG_OPTION_EMBEDDED_BITMAPS ) && \
+ defined( FT_CONFIG_OPTION_USE_PNG )
- /* We always include <stjmp.h>, so make libpng shut up! */
+ /* We always include <setjmp.h>, so make libpng shut up! */
#define PNG_SKIP_SETJMP_CHECK 1
#include <png.h>
#include "pngshim.h"
@@ -48,18 +49,85 @@
}
- /* Premultiplies data and converts RGBA bytes => native endian. */
+ /* Premultiplies data and converts RGBA bytes => BGRA. */
static void
premultiply_data( png_structp png,
png_row_infop row_info,
png_bytep data )
{
- unsigned int i;
+ unsigned int i = 0, limit;
+
+ /* The `vector_size' attribute was introduced in gcc 3.1, which */
+ /* predates clang; the `__BYTE_ORDER__' preprocessor symbol was */
+ /* introduced in gcc 4.6 and clang 3.2, respectively. */
+ /* `__builtin_shuffle' for gcc was introduced in gcc 4.7.0. */
+#if ( ( defined( __GNUC__ ) && \
+ ( ( __GNUC__ >= 5 ) || \
+ ( ( __GNUC__ == 4 ) && ( __GNUC_MINOR__ >= 7 ) ) ) ) || \
+ ( defined( __clang__ ) && \
+ ( ( __clang_major__ >= 4 ) || \
+ ( ( __clang_major__ == 3 ) && ( __clang_minor__ >= 2 ) ) ) ) ) && \
+ defined( __OPTIMIZE__ ) && \
+ __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+
+#ifdef __clang__
+ /* the clang documentation doesn't cover the two-argument case of */
+ /* `__builtin_shufflevector'; however, it is is implemented since */
+ /* version 2.8 */
+#define vector_shuffle __builtin_shufflevector
+#else
+#define vector_shuffle __builtin_shuffle
+#endif
+
+ typedef unsigned short v82 __attribute__(( vector_size( 16 ) ));
+
+
+ if ( row_info->rowbytes > 15 )
+ {
+ /* process blocks of 16 bytes in one rush, which gives a nice speed-up */
+ limit = row_info->rowbytes - 16 + 1;
+ for ( ; i < limit; i += 16 )
+ {
+ unsigned char* base = &data[i];
+
+ v82 s, s0, s1, a;
+
+ /* clang <= 3.9 can't apply scalar values to vectors */
+ /* (or rather, it needs a different syntax) */
+ v82 n0x80 = { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 };
+ v82 n0xFF = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+ v82 n8 = { 8, 8, 8, 8, 8, 8, 8, 8 };
+
+ v82 ma = { 1, 1, 3, 3, 5, 5, 7, 7 };
+ v82 o1 = { 0, 0xFF, 0, 0xFF, 0, 0xFF, 0, 0xFF };
+ v82 m0 = { 1, 0, 3, 2, 5, 4, 7, 6 };
+
+
+ ft_memcpy( &s, base, 16 ); /* RGBA RGBA RGBA RGBA */
+ s0 = s & n0xFF; /* R B R B R B R B */
+ s1 = s >> n8; /* G A G A G A G A */
+
+ a = vector_shuffle( s1, ma ); /* A A A A A A A A */
+ s1 |= o1; /* G 1 G 1 G 1 G 1 */
+ s0 = vector_shuffle( s0, m0 ); /* B R B R B R B R */
+
+ s0 *= a;
+ s1 *= a;
+ s0 += n0x80;
+ s1 += n0x80;
+ s0 = ( s0 + ( s0 >> n8 ) ) >> n8;
+ s1 = ( s1 + ( s1 >> n8 ) ) >> n8;
+
+ s = s0 | ( s1 << n8 );
+ ft_memcpy( base, &s, 16 );
+ }
+ }
+#endif /* use `vector_size' */
FT_UNUSED( png );
-
- for ( i = 0; i < row_info->rowbytes; i += 4 )
+ limit = row_info->rowbytes;
+ for ( ; i < limit; i += 4 )
{
unsigned char* base = &data[i];
unsigned int alpha = base[3];
@@ -169,7 +237,7 @@
return;
}
- memcpy( data, stream->cursor, length );
+ ft_memcpy( data, stream->cursor, length );
FT_FRAME_EXIT();
}
@@ -184,7 +252,8 @@
FT_Memory memory,
FT_Byte* data,
FT_UInt png_len,
- FT_Bool populate_map_and_metrics )
+ FT_Bool populate_map_and_metrics,
+ FT_Bool metrics_only )
{
FT_Bitmap *map = &slot->bitmap;
FT_Error error = FT_Err_Ok;
@@ -258,9 +327,6 @@
if ( populate_map_and_metrics )
{
- FT_ULong size;
-
-
metrics->width = (FT_UShort)imgWidth;
metrics->height = (FT_UShort)imgHeight;
@@ -276,13 +342,6 @@
error = FT_THROW( Array_Too_Large );
goto DestroyExit;
}
-
- /* this doesn't overflow: 0x7FFF * 0x7FFF * 4 < 2^32 */
- size = map->rows * (FT_ULong)map->pitch;
-
- error = ft_glyphslot_alloc_bitmap( slot, size );
- if ( error )
- goto DestroyExit;
}
/* convert palette/gray image to rgb */
@@ -334,6 +393,9 @@
goto DestroyExit;
}
+ if ( metrics_only )
+ goto DestroyExit;
+
switch ( color_type )
{
default:
@@ -349,6 +411,17 @@
break;
}
+ if ( populate_map_and_metrics )
+ {
+ /* this doesn't overflow: 0x7FFF * 0x7FFF * 4 < 2^32 */
+ FT_ULong size = map->rows * (FT_ULong)map->pitch;
+
+
+ error = ft_glyphslot_alloc_bitmap( slot, size );
+ if ( error )
+ goto DestroyExit;
+ }
+
if ( FT_NEW_ARRAY( rows, imgHeight ) )
{
error = FT_THROW( Out_Of_Memory );
@@ -372,7 +445,12 @@
return error;
}
-#endif /* FT_CONFIG_OPTION_USE_PNG */
+#else /* !(TT_CONFIG_OPTION_EMBEDDED_BITMAPS && FT_CONFIG_OPTION_USE_PNG) */
+
+ /* ANSI C doesn't like empty source files */
+ typedef int _pngshim_dummy;
+
+#endif /* !(TT_CONFIG_OPTION_EMBEDDED_BITMAPS && FT_CONFIG_OPTION_USE_PNG) */
/* END */
diff --git a/src/sfnt/pngshim.h b/src/sfnt/pngshim.h
index 4cc5c2b..194238c 100644
--- a/src/sfnt/pngshim.h
+++ b/src/sfnt/pngshim.h
@@ -4,7 +4,7 @@
/* */
/* PNG Bitmap glyph support. */
/* */
-/* Copyright 2013-2015 by */
+/* Copyright 2013-2018 by */
/* Google, Inc. */
/* Written by Stuart Gill and Behdad Esfahbod. */
/* */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __PNGSHIM_H__
-#define __PNGSHIM_H__
+#ifndef PNGSHIM_H_
+#define PNGSHIM_H_
#include <ft2build.h>
@@ -38,13 +38,14 @@
FT_Memory memory,
FT_Byte* data,
FT_UInt png_len,
- FT_Bool populate_map_and_metrics );
+ FT_Bool populate_map_and_metrics,
+ FT_Bool metrics_only );
#endif
FT_END_HEADER
-#endif /* __PNGSHIM_H__ */
+#endif /* PNGSHIM_H_ */
/* END */
diff --git a/src/sfnt/rules.mk b/src/sfnt/rules.mk
index 3cc76b3..83acc66 100644
--- a/src/sfnt/rules.mk
+++ b/src/sfnt/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/sfnt/sfdriver.c b/src/sfnt/sfdriver.c
index 0948ad4..303e1ca 100644
--- a/src/sfnt/sfdriver.c
+++ b/src/sfnt/sfdriver.c
@@ -4,7 +4,7 @@
/* */
/* High-level SFNT driver interface (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,6 +20,7 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_SFNT_H
#include FT_INTERNAL_OBJECTS_H
+#include FT_TRUETYPE_IDS_H
#include "sfdriver.h"
#include "ttload.h"
@@ -50,6 +51,11 @@
#include FT_SERVICE_SFNT_H
#include FT_SERVICE_TT_CMAP_H
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#include FT_MULTIPLE_MASTERS_H
+#include FT_SERVICE_MULTIPLE_MASTERS_H
+#endif
+
/*************************************************************************/
/* */
@@ -88,7 +94,7 @@
break;
case FT_SFNT_OS2:
- table = face->os2.version == 0xFFFFU ? NULL : &face->os2;
+ table = ( face->os2.version == 0xFFFFU ) ? NULL : &face->os2;
break;
case FT_SFNT_POST:
@@ -139,9 +145,11 @@
FT_DEFINE_SERVICE_SFNT_TABLEREC(
sfnt_service_sfnt_table,
- (FT_SFNT_TableLoadFunc)tt_face_load_any,
- (FT_SFNT_TableGetFunc) get_sfnt_table,
- (FT_SFNT_TableInfoFunc)sfnt_table_info )
+
+ (FT_SFNT_TableLoadFunc)tt_face_load_any, /* load_table */
+ (FT_SFNT_TableGetFunc) get_sfnt_table, /* get_table */
+ (FT_SFNT_TableInfoFunc)sfnt_table_info /* table_info */
+ )
#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
@@ -152,7 +160,7 @@
*/
static FT_Error
- sfnt_get_glyph_name( TT_Face face,
+ sfnt_get_glyph_name( FT_Face face,
FT_UInt glyph_index,
FT_Pointer buffer,
FT_UInt buffer_max )
@@ -161,7 +169,7 @@
FT_Error error;
- error = tt_face_get_ps_name( face, glyph_index, &gname );
+ error = tt_face_get_ps_name( (TT_Face)face, glyph_index, &gname );
if ( !error )
FT_STRCPYN( buffer, gname, buffer_max );
@@ -170,26 +178,26 @@
static FT_UInt
- sfnt_get_name_index( TT_Face face,
+ sfnt_get_name_index( FT_Face face,
FT_String* glyph_name )
{
- FT_Face root = &face->root;
+ TT_Face ttface = (TT_Face)face;
FT_UInt i, max_gid = FT_UINT_MAX;
- if ( root->num_glyphs < 0 )
+ if ( face->num_glyphs < 0 )
return 0;
- else if ( (FT_ULong)root->num_glyphs < FT_UINT_MAX )
- max_gid = (FT_UInt)root->num_glyphs;
+ else if ( (FT_ULong)face->num_glyphs < FT_UINT_MAX )
+ max_gid = (FT_UInt)face->num_glyphs;
else
FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08x\n",
- FT_UINT_MAX, root->num_glyphs ));
+ FT_UINT_MAX, face->num_glyphs ));
for ( i = 0; i < max_gid; i++ )
{
FT_String* gname;
- FT_Error error = tt_face_get_ps_name( face, i, &gname );
+ FT_Error error = tt_face_get_ps_name( ttface, i, &gname );
if ( error )
@@ -205,9 +213,10 @@
FT_DEFINE_SERVICE_GLYPHDICTREC(
sfnt_service_glyph_dict,
- (FT_GlyphDict_GetNameFunc) sfnt_get_glyph_name,
- (FT_GlyphDict_NameIndexFunc)sfnt_get_name_index )
+ (FT_GlyphDict_GetNameFunc) sfnt_get_glyph_name, /* get_name */
+ (FT_GlyphDict_NameIndexFunc)sfnt_get_name_index /* name_index */
+ )
#endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
@@ -217,120 +226,850 @@
*
*/
- static const char*
- sfnt_get_ps_name( TT_Face face )
+ /* an array representing allowed ASCII characters in a PS string */
+ static const unsigned char sfnt_ps_map[16] =
{
- FT_Int n, found_win, found_apple;
- const char* result = NULL;
+ /* 4 0 C 8 */
+ 0x00, 0x00, /* 0x00: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 */
+ 0x00, 0x00, /* 0x10: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 */
+ 0xDE, 0x7C, /* 0x20: 1 1 0 1 1 1 1 0 0 1 1 1 1 1 0 0 */
+ 0xFF, 0xAF, /* 0x30: 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 */
+ 0xFF, 0xFF, /* 0x40: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 */
+ 0xFF, 0xD7, /* 0x50: 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 */
+ 0xFF, 0xFF, /* 0x60: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 */
+ 0xFF, 0x57 /* 0x70: 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 */
+ };
- /* shouldn't happen, but just in case to avoid memory leaks */
- if ( face->postscript_name )
- return face->postscript_name;
+ static int
+ sfnt_is_postscript( int c )
+ {
+ unsigned int cc;
- /* scan the name table to see whether we have a Postscript name here, */
- /* either in Macintosh or Windows platform encodings */
- found_win = -1;
- found_apple = -1;
+
+ if ( c < 0 || c >= 0x80 )
+ return 0;
+
+ cc = (unsigned int)c;
+
+ return sfnt_ps_map[cc >> 3] & ( 1 << ( cc & 0x07 ) );
+ }
+
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
+ /* Only ASCII letters and digits are taken for a variation font */
+ /* instance's PostScript name. */
+ /* */
+ /* `ft_isalnum' is a macro, but we need a function here, thus */
+ /* this definition. */
+ static int
+ sfnt_is_alphanumeric( int c )
+ {
+ return ft_isalnum( c );
+ }
+
+
+ /* the implementation of MurmurHash3 is taken and adapted from */
+ /* https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp */
+
+#define ROTL32( x, r ) ( x << r ) | ( x >> ( 32 - r ) )
+
+
+ static FT_UInt32
+ fmix32( FT_UInt32 h )
+ {
+ h ^= h >> 16;
+ h *= 0x85ebca6b;
+ h ^= h >> 13;
+ h *= 0xc2b2ae35;
+ h ^= h >> 16;
+
+ return h;
+ }
+
+
+ static void
+ murmur_hash_3_128( const void* key,
+ const unsigned int len,
+ FT_UInt32 seed,
+ void* out )
+ {
+ const FT_Byte* data = (const FT_Byte*)key;
+ const int nblocks = (int)len / 16;
+
+ FT_UInt32 h1 = seed;
+ FT_UInt32 h2 = seed;
+ FT_UInt32 h3 = seed;
+ FT_UInt32 h4 = seed;
+
+ const FT_UInt32 c1 = 0x239b961b;
+ const FT_UInt32 c2 = 0xab0e9789;
+ const FT_UInt32 c3 = 0x38b34ae5;
+ const FT_UInt32 c4 = 0xa1e38b93;
+
+ const FT_UInt32* blocks = (const FT_UInt32*)( data + nblocks * 16 );
+
+ int i;
+
+
+ for( i = -nblocks; i; i++ )
+ {
+ FT_UInt32 k1 = blocks[i * 4 + 0];
+ FT_UInt32 k2 = blocks[i * 4 + 1];
+ FT_UInt32 k3 = blocks[i * 4 + 2];
+ FT_UInt32 k4 = blocks[i * 4 + 3];
+
+
+ k1 *= c1;
+ k1 = ROTL32( k1, 15 );
+ k1 *= c2;
+ h1 ^= k1;
+
+ h1 = ROTL32( h1, 19 );
+ h1 += h2;
+ h1 = h1 * 5 + 0x561ccd1b;
+
+ k2 *= c2;
+ k2 = ROTL32( k2, 16 );
+ k2 *= c3;
+ h2 ^= k2;
+
+ h2 = ROTL32( h2, 17 );
+ h2 += h3;
+ h2 = h2 * 5 + 0x0bcaa747;
+
+ k3 *= c3;
+ k3 = ROTL32( k3, 17 );
+ k3 *= c4;
+ h3 ^= k3;
+
+ h3 = ROTL32( h3, 15 );
+ h3 += h4;
+ h3 = h3 * 5 + 0x96cd1c35;
+
+ k4 *= c4;
+ k4 = ROTL32( k4, 18 );
+ k4 *= c1;
+ h4 ^= k4;
+
+ h4 = ROTL32( h4, 13 );
+ h4 += h1;
+ h4 = h4 * 5 + 0x32ac3b17;
+ }
+
+ {
+ const FT_Byte* tail = (const FT_Byte*)( data + nblocks * 16 );
+
+ FT_UInt32 k1 = 0;
+ FT_UInt32 k2 = 0;
+ FT_UInt32 k3 = 0;
+ FT_UInt32 k4 = 0;
+
+
+ switch ( len & 15 )
+ {
+ case 15:
+ k4 ^= (FT_UInt32)tail[14] << 16;
+ case 14:
+ k4 ^= (FT_UInt32)tail[13] << 8;
+ case 13:
+ k4 ^= (FT_UInt32)tail[12];
+ k4 *= c4;
+ k4 = ROTL32( k4, 18 );
+ k4 *= c1;
+ h4 ^= k4;
+
+ case 12:
+ k3 ^= (FT_UInt32)tail[11] << 24;
+ case 11:
+ k3 ^= (FT_UInt32)tail[10] << 16;
+ case 10:
+ k3 ^= (FT_UInt32)tail[9] << 8;
+ case 9:
+ k3 ^= (FT_UInt32)tail[8];
+ k3 *= c3;
+ k3 = ROTL32( k3, 17 );
+ k3 *= c4;
+ h3 ^= k3;
+
+ case 8:
+ k2 ^= (FT_UInt32)tail[7] << 24;
+ case 7:
+ k2 ^= (FT_UInt32)tail[6] << 16;
+ case 6:
+ k2 ^= (FT_UInt32)tail[5] << 8;
+ case 5:
+ k2 ^= (FT_UInt32)tail[4];
+ k2 *= c2;
+ k2 = ROTL32( k2, 16 );
+ k2 *= c3;
+ h2 ^= k2;
+
+ case 4:
+ k1 ^= (FT_UInt32)tail[3] << 24;
+ case 3:
+ k1 ^= (FT_UInt32)tail[2] << 16;
+ case 2:
+ k1 ^= (FT_UInt32)tail[1] << 8;
+ case 1:
+ k1 ^= (FT_UInt32)tail[0];
+ k1 *= c1;
+ k1 = ROTL32( k1, 15 );
+ k1 *= c2;
+ h1 ^= k1;
+ }
+ }
+
+ h1 ^= len;
+ h2 ^= len;
+ h3 ^= len;
+ h4 ^= len;
+
+ h1 += h2;
+ h1 += h3;
+ h1 += h4;
+
+ h2 += h1;
+ h3 += h1;
+ h4 += h1;
+
+ h1 = fmix32( h1 );
+ h2 = fmix32( h2 );
+ h3 = fmix32( h3 );
+ h4 = fmix32( h4 );
+
+ h1 += h2;
+ h1 += h3;
+ h1 += h4;
+
+ h2 += h1;
+ h3 += h1;
+ h4 += h1;
+
+ ((FT_UInt32*)out)[0] = h1;
+ ((FT_UInt32*)out)[1] = h2;
+ ((FT_UInt32*)out)[2] = h3;
+ ((FT_UInt32*)out)[3] = h4;
+ }
+
+
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+
+
+ typedef int (*char_type_func)( int c );
+
+
+ /* handling of PID/EID 3/0 and 3/1 is the same */
+#define IS_WIN( n ) ( (n)->platformID == 3 && \
+ ( (n)->encodingID == 1 || (n)->encodingID == 0 ) && \
+ (n)->languageID == 0x409 )
+
+#define IS_APPLE( n ) ( (n)->platformID == 1 && \
+ (n)->encodingID == 0 && \
+ (n)->languageID == 0 )
+
+ static char*
+ get_win_string( FT_Memory memory,
+ FT_Stream stream,
+ TT_Name entry,
+ char_type_func char_type,
+ FT_Bool report_invalid_characters )
+ {
+ FT_Error error = FT_Err_Ok;
+
+ char* result = NULL;
+ FT_String* r;
+ FT_Char* p;
+ FT_UInt len;
+
+ FT_UNUSED( error );
+
+
+ if ( FT_ALLOC( result, entry->stringLength / 2 + 1 ) )
+ return NULL;
+
+ if ( FT_STREAM_SEEK( entry->stringOffset ) ||
+ FT_FRAME_ENTER( entry->stringLength ) )
+ {
+ FT_FREE( result );
+ entry->stringLength = 0;
+ entry->stringOffset = 0;
+ FT_FREE( entry->string );
+
+ return NULL;
+ }
+
+ r = (FT_String*)result;
+ p = (FT_Char*)stream->cursor;
+
+ for ( len = entry->stringLength / 2; len > 0; len--, p += 2 )
+ {
+ if ( p[0] == 0 )
+ {
+ if ( char_type( p[1] ) )
+ *r++ = p[1];
+ else
+ {
+ if ( report_invalid_characters )
+ {
+ FT_TRACE0(( "get_win_string:"
+ " Character `%c' (0x%X) invalid in PS name string\n",
+ p[1], p[1] ));
+ /* it's not the job of FreeType to correct PS names... */
+ *r++ = p[1];
+ }
+ }
+ }
+ }
+ *r = '\0';
+
+ FT_FRAME_EXIT();
+
+ return result;
+ }
+
+
+ static char*
+ get_apple_string( FT_Memory memory,
+ FT_Stream stream,
+ TT_Name entry,
+ char_type_func char_type,
+ FT_Bool report_invalid_characters )
+ {
+ FT_Error error = FT_Err_Ok;
+
+ char* result = NULL;
+ FT_String* r;
+ FT_Char* p;
+ FT_UInt len;
+
+ FT_UNUSED( error );
+
+
+ if ( FT_ALLOC( result, entry->stringLength + 1 ) )
+ return NULL;
+
+ if ( FT_STREAM_SEEK( entry->stringOffset ) ||
+ FT_FRAME_ENTER( entry->stringLength ) )
+ {
+ FT_FREE( result );
+ entry->stringOffset = 0;
+ entry->stringLength = 0;
+ FT_FREE( entry->string );
+
+ return NULL;
+ }
+
+ r = (FT_String*)result;
+ p = (FT_Char*)stream->cursor;
+
+ for ( len = entry->stringLength; len > 0; len--, p++ )
+ {
+ if ( char_type( *p ) )
+ *r++ = *p;
+ else
+ {
+ if ( report_invalid_characters )
+ {
+ FT_TRACE0(( "get_apple_string:"
+ " Character `%c' (0x%X) invalid in PS name string\n",
+ *p, *p ));
+ /* it's not the job of FreeType to correct PS names... */
+ *r++ = *p;
+ }
+ }
+ }
+ *r = '\0';
+
+ FT_FRAME_EXIT();
+
+ return result;
+ }
+
+
+ static FT_Bool
+ sfnt_get_name_id( TT_Face face,
+ FT_UShort id,
+ FT_Int *win,
+ FT_Int *apple )
+ {
+ FT_Int n;
+
+
+ *win = -1;
+ *apple = -1;
for ( n = 0; n < face->num_names; n++ )
{
- TT_NameEntryRec* name = face->name_table.names + n;
+ TT_Name name = face->name_table.names + n;
- if ( name->nameID == 6 && name->stringLength > 0 )
+ if ( name->nameID == id && name->stringLength > 0 )
{
- if ( name->platformID == 3 &&
- name->encodingID == 1 &&
- name->languageID == 0x409 )
- found_win = n;
+ if ( IS_WIN( name ) )
+ *win = n;
- if ( name->platformID == 1 &&
- name->encodingID == 0 &&
- name->languageID == 0 )
- found_apple = n;
+ if ( IS_APPLE( name ) )
+ *apple = n;
}
}
- if ( found_win != -1 )
+ return ( *win >= 0 ) || ( *apple >= 0 );
+ }
+
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
+ /*
+ The maximum length of an axis value descriptor.
+
+ We need 65536 different values for the decimal fraction; this fits
+ nicely into five decimal places. Consequently, it consists of
+
+ . the minus sign if the number is negative,
+ . up to five characters for the digits before the decimal point,
+ . the decimal point if there is a fractional part, and
+ . up to five characters for the digits after the decimal point.
+
+ We also need one byte for the leading `_' character and up to four
+ bytes for the axis tag.
+ */
+#define MAX_VALUE_DESCRIPTOR_LEN ( 1 + 5 + 1 + 5 + 1 + 4 )
+
+
+ /* the maximum length of PostScript font names */
+#define MAX_PS_NAME_LEN 127
+
+
+ /*
+ * Find the shortest decimal representation of a 16.16 fixed point
+ * number. The function fills `buf' with the result, returning a pointer
+ * to the position after the representation's last byte.
+ */
+
+ static char*
+ fixed2float( FT_Int fixed,
+ char* buf )
+ {
+ char* p;
+ char* q;
+ char tmp[5];
+
+ FT_Int int_part;
+ FT_Int frac_part;
+
+ FT_Int i;
+
+
+ p = buf;
+
+ if ( fixed == 0 )
{
- FT_Memory memory = face->root.memory;
- TT_NameEntryRec* name = face->name_table.names + found_win;
- FT_UInt len = name->stringLength / 2;
- FT_Error error = FT_Err_Ok;
-
- FT_UNUSED( error );
-
-
- if ( !FT_ALLOC( result, name->stringLength + 1 ) )
- {
- FT_Stream stream = face->name_table.stream;
- FT_String* r = (FT_String*)result;
- FT_Char* p;
-
-
- if ( FT_STREAM_SEEK( name->stringOffset ) ||
- FT_FRAME_ENTER( name->stringLength ) )
- {
- FT_FREE( result );
- name->stringLength = 0;
- name->stringOffset = 0;
- FT_FREE( name->string );
-
- goto Exit;
- }
-
- p = (FT_Char*)stream->cursor;
-
- for ( ; len > 0; len--, p += 2 )
- {
- if ( p[0] == 0 && p[1] >= 32 )
- *r++ = p[1];
- }
- *r = '\0';
-
- FT_FRAME_EXIT();
- }
- goto Exit;
+ *p++ = '0';
+ return p;
}
- if ( found_apple != -1 )
+ if ( fixed < 0 )
{
- FT_Memory memory = face->root.memory;
- TT_NameEntryRec* name = face->name_table.names + found_apple;
- FT_UInt len = name->stringLength;
- FT_Error error = FT_Err_Ok;
+ *p++ = '-';
+ fixed = -fixed;
+ }
- FT_UNUSED( error );
+ int_part = ( fixed >> 16 ) & 0xFFFF;
+ frac_part = fixed & 0xFFFF;
+
+ /* get digits of integer part (in reverse order) */
+ q = tmp;
+ while ( int_part > 0 )
+ {
+ *q++ = '0' + int_part % 10;
+ int_part /= 10;
+ }
+
+ /* copy digits in correct order to buffer */
+ while ( q > tmp )
+ *p++ = *--q;
+
+ if ( !frac_part )
+ return p;
+
+ /* save position of point */
+ q = p;
+ *p++ = '.';
+
+ /* apply rounding */
+ frac_part = frac_part * 10 + 5;
+
+ /* get digits of fractional part */
+ for ( i = 0; i < 5; i++ )
+ {
+ *p++ = '0' + (char)( frac_part / 0x10000L );
+
+ frac_part %= 0x10000L;
+ if ( !frac_part )
+ break;
+
+ frac_part *= 10;
+ }
+
+ /*
+ If the remainder stored in `frac_part' (after the last FOR loop) is
+ smaller than 34480*10, the resulting decimal value minus 0.00001 is
+ an equivalent representation of `fixed'.
+
+ The above FOR loop always finds the larger of the two values; I
+ verified this by iterating over all possible fixed point numbers.
+
+ If the remainder is 17232*10, both values are equally good, and we
+ take the next even number (following IEEE 754's `round to nearest,
+ ties to even' rounding rule).
+
+ If the remainder is smaller than 17232*10, the lower of the two
+ numbers is nearer to the exact result (values 17232 and 34480 were
+ also found by testing all possible fixed point values).
+
+ We use this to find a shorter decimal representation. If not ending
+ with digit zero, we take the representation with less error.
+ */
+ p--;
+ if ( p - q == 5 ) /* five digits? */
+ {
+ /* take the representation that has zero as the last digit */
+ if ( frac_part < 34480 * 10 &&
+ *p == '1' )
+ *p = '0';
+
+ /* otherwise use the one with less error */
+ else if ( frac_part == 17232 * 10 &&
+ *p & 1 )
+ *p -= 1;
+
+ else if ( frac_part < 17232 * 10 &&
+ *p != '0' )
+ *p -= 1;
+ }
+
+ /* remove trailing zeros */
+ while ( *p == '0' )
+ *p-- = '\0';
+
+ return p + 1;
+ }
- if ( !FT_ALLOC( result, len + 1 ) )
+ static const char hexdigits[16] =
+ {
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+ };
+
+
+ static const char*
+ sfnt_get_var_ps_name( TT_Face face )
+ {
+ FT_Error error;
+ FT_Memory memory = face->root.memory;
+
+ FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
+
+ FT_UInt num_coords;
+ FT_Fixed* coords;
+ FT_MM_Var* mm_var;
+
+ FT_Int found, win, apple;
+ FT_UInt i, j;
+
+ char* result = NULL;
+ char* p;
+
+
+ if ( !face->var_postscript_prefix )
+ {
+ FT_UInt len;
+
+
+ /* check whether we have a Variations PostScript Name Prefix */
+ found = sfnt_get_name_id( face,
+ TT_NAME_ID_VARIATIONS_PREFIX,
+ &win,
+ &apple );
+ if ( !found )
{
- FT_Stream stream = face->name_table.stream;
+ /* otherwise use the typographic family name */
+ found = sfnt_get_name_id( face,
+ TT_NAME_ID_TYPOGRAPHIC_FAMILY,
+ &win,
+ &apple );
+ }
+
+ if ( !found )
+ {
+ /* as a last resort we try the family name; note that this is */
+ /* not in the Adobe TechNote, but GX fonts (which predate the */
+ /* TechNote) benefit from this behaviour */
+ found = sfnt_get_name_id( face,
+ TT_NAME_ID_FONT_FAMILY,
+ &win,
+ &apple );
+ }
+
+ if ( !found )
+ {
+ FT_TRACE0(( "sfnt_get_var_ps_name:"
+ " Can't construct PS name prefix for font instances\n" ));
+ return NULL;
+ }
+
+ /* prefer Windows entries over Apple */
+ if ( win != -1 )
+ result = get_win_string( face->root.memory,
+ face->name_table.stream,
+ face->name_table.names + win,
+ sfnt_is_alphanumeric,
+ 0 );
+ else
+ result = get_apple_string( face->root.memory,
+ face->name_table.stream,
+ face->name_table.names + apple,
+ sfnt_is_alphanumeric,
+ 0 );
+
+ len = ft_strlen( result );
+
+ /* sanitize if necessary; we reserve space for 36 bytes (a 128bit */
+ /* checksum as a hex number, preceded by `-' and followed by three */
+ /* ASCII dots, to be used if the constructed PS name would be too */
+ /* long); this is also sufficient for a single instance */
+ if ( len > MAX_PS_NAME_LEN - ( 1 + 32 + 3 ) )
+ {
+ len = MAX_PS_NAME_LEN - ( 1 + 32 + 3 );
+ result[len] = '\0';
+
+ FT_TRACE0(( "sfnt_get_var_ps_name:"
+ " Shortening variation PS name prefix\n"
+ " "
+ " to %d characters\n", len ));
+ }
+
+ face->var_postscript_prefix = result;
+ face->var_postscript_prefix_len = len;
+ }
+
+ mm->get_var_blend( FT_FACE( face ),
+ &num_coords,
+ &coords,
+ NULL,
+ &mm_var );
+
+ if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) &&
+ !FT_IS_VARIATION( FT_FACE( face ) ) )
+ {
+ SFNT_Service sfnt = (SFNT_Service)face->sfnt;
+
+ FT_Long instance = ( ( face->root.face_index & 0x7FFF0000L ) >> 16 ) - 1;
+ FT_UInt psid = mm_var->namedstyle[instance].psid;
+
+ char* ps_name = NULL;
- if ( FT_STREAM_SEEK( name->stringOffset ) ||
- FT_STREAM_READ( result, len ) )
+ /* try first to load the name string with index `postScriptNameID' */
+ if ( psid == 6 ||
+ ( psid > 255 && psid < 32768 ) )
+ (void)sfnt->get_name( face, (FT_UShort)psid, &ps_name );
+
+ if ( ps_name )
+ {
+ result = ps_name;
+ p = result + ft_strlen( result ) + 1;
+
+ goto check_length;
+ }
+ else
+ {
+ /* otherwise construct a name using `subfamilyNameID' */
+ FT_UInt strid = mm_var->namedstyle[instance].strid;
+
+ char* subfamily_name;
+ char* s;
+
+
+ (void)sfnt->get_name( face, (FT_UShort)strid, &subfamily_name );
+
+ if ( !subfamily_name )
{
- name->stringOffset = 0;
- name->stringLength = 0;
- FT_FREE( name->string );
- FT_FREE( result );
- goto Exit;
+ FT_TRACE1(( "sfnt_get_var_ps_name:"
+ " can't construct named instance PS name;\n"
+ " "
+ " trying to construct normal instance PS name\n" ));
+ goto construct_instance_name;
}
- ((char*)result)[len] = '\0';
+
+ /* after the prefix we have character `-' followed by the */
+ /* subfamily name (using only characters a-z, A-Z, and 0-9) */
+ if ( FT_ALLOC( result, face->var_postscript_prefix_len +
+ 1 + ft_strlen( subfamily_name ) + 1 ) )
+ return NULL;
+
+ ft_strcpy( result, face->var_postscript_prefix );
+
+ p = result + face->var_postscript_prefix_len;
+ *p++ = '-';
+
+ s = subfamily_name;
+ while ( *s )
+ {
+ if ( ft_isalnum( *s ) )
+ *p++ = *s;
+ s++;
+ }
+ *p++ = '\0';
+
+ FT_FREE( subfamily_name );
+ }
+ }
+ else
+ {
+ FT_Var_Axis* axis;
+
+
+ construct_instance_name:
+ axis = mm_var->axis;
+
+ if ( FT_ALLOC( result,
+ face->var_postscript_prefix_len +
+ num_coords * MAX_VALUE_DESCRIPTOR_LEN + 1 ) )
+ return NULL;
+
+ p = result;
+
+ ft_strcpy( p, face->var_postscript_prefix );
+ p += face->var_postscript_prefix_len;
+
+ for ( i = 0; i < num_coords; i++, coords++, axis++ )
+ {
+ char t;
+
+
+ /* omit axis value descriptor if it is identical */
+ /* to the default axis value */
+ if ( *coords == axis->def )
+ continue;
+
+ *p++ = '_';
+ p = fixed2float( *coords, p );
+
+ t = (char)( axis->tag >> 24 );
+ if ( t != ' ' && ft_isalnum( t ) )
+ *p++ = t;
+ t = (char)( axis->tag >> 16 );
+ if ( t != ' ' && ft_isalnum( t ) )
+ *p++ = t;
+ t = (char)( axis->tag >> 8 );
+ if ( t != ' ' && ft_isalnum( t ) )
+ *p++ = t;
+ t = (char)axis->tag;
+ if ( t != ' ' && ft_isalnum( t ) )
+ *p++ = t;
}
}
- Exit:
+ check_length:
+ if ( p - result > MAX_PS_NAME_LEN )
+ {
+ /* the PS name is too long; replace the part after the prefix with */
+ /* a checksum; we use MurmurHash 3 with a hash length of 128 bit */
+
+ FT_UInt32 seed = 123456789;
+
+ FT_UInt32 hash[4];
+ FT_UInt32* h;
+
+
+ murmur_hash_3_128( result, p - result, seed, hash );
+
+ p = result + face->var_postscript_prefix_len;
+ *p++ = '-';
+
+ /* we convert the hash value to hex digits from back to front */
+ p += 32 + 3;
+ h = hash + 3;
+
+ *p-- = '\0';
+ *p-- = '.';
+ *p-- = '.';
+ *p-- = '.';
+
+ for ( i = 0; i < 4; i++, h-- )
+ {
+ FT_UInt32 v = *h;
+
+
+ for ( j = 0; j < 8; j++ )
+ {
+ *p-- = hexdigits[v & 0xF];
+ v >>= 4;
+ }
+ }
+ }
+
+ return result;
+ }
+
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+
+
+ static const char*
+ sfnt_get_ps_name( TT_Face face )
+ {
+ FT_Int found, win, apple;
+ const char* result = NULL;
+
+
+ if ( face->postscript_name )
+ return face->postscript_name;
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( face->blend &&
+ ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) ||
+ FT_IS_VARIATION( FT_FACE( face ) ) ) )
+ {
+ face->postscript_name = sfnt_get_var_ps_name( face );
+ return face->postscript_name;
+ }
+#endif
+
+ /* scan the name table to see whether we have a Postscript name here, */
+ /* either in Macintosh or Windows platform encodings */
+ found = sfnt_get_name_id( face, TT_NAME_ID_PS_NAME, &win, &apple );
+ if ( !found )
+ return NULL;
+
+ /* prefer Windows entries over Apple */
+ if ( win != -1 )
+ result = get_win_string( face->root.memory,
+ face->name_table.stream,
+ face->name_table.names + win,
+ sfnt_is_postscript,
+ 1 );
+ else
+ result = get_apple_string( face->root.memory,
+ face->name_table.stream,
+ face->name_table.names + apple,
+ sfnt_is_postscript,
+ 1 );
+
face->postscript_name = result;
+
return result;
}
FT_DEFINE_SERVICE_PSFONTNAMEREC(
sfnt_service_ps_name,
- (FT_PsName_GetFunc)sfnt_get_ps_name )
+
+ (FT_PsName_GetFunc)sfnt_get_ps_name /* get_ps_font_name */
+ )
/*
@@ -338,7 +1077,9 @@
*/
FT_DEFINE_SERVICE_TTCMAPSREC(
tt_service_get_cmap_info,
- (TT_CMap_Info_GetFunc)tt_get_cmap_info )
+
+ (TT_CMap_Info_GetFunc)tt_get_cmap_info /* get_cmap_info */
+ )
#ifdef TT_CONFIG_OPTION_BDF
@@ -381,8 +1122,10 @@
FT_DEFINE_SERVICE_BDFRec(
sfnt_service_bdf,
- (FT_BDF_GetCharsetIdFunc)sfnt_get_charset_id,
- (FT_BDF_GetPropertyFunc) tt_face_find_bdf_prop )
+
+ (FT_BDF_GetCharsetIdFunc)sfnt_get_charset_id, /* get_charset_id */
+ (FT_BDF_GetPropertyFunc) tt_face_find_bdf_prop /* get_property */
+ )
#endif /* TT_CONFIG_OPTION_BDF */
@@ -395,6 +1138,7 @@
#if defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES && defined TT_CONFIG_OPTION_BDF
FT_DEFINE_SERVICEDESCREC5(
sfnt_services,
+
FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
FT_SERVICE_ID_GLYPH_DICT, &SFNT_SERVICE_GLYPH_DICT_GET,
@@ -403,6 +1147,7 @@
#elif defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES
FT_DEFINE_SERVICEDESCREC4(
sfnt_services,
+
FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
FT_SERVICE_ID_GLYPH_DICT, &SFNT_SERVICE_GLYPH_DICT_GET,
@@ -410,6 +1155,7 @@
#elif defined TT_CONFIG_OPTION_BDF
FT_DEFINE_SERVICEDESCREC4(
sfnt_services,
+
FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
FT_SERVICE_ID_BDF, &SFNT_SERVICE_BDF_GET,
@@ -417,6 +1163,7 @@
#else
FT_DEFINE_SERVICEDESCREC3(
sfnt_services,
+
FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET,
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET,
FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET )
@@ -459,53 +1206,64 @@
FT_DEFINE_SFNT_INTERFACE(
sfnt_interface,
- tt_face_goto_table,
- sfnt_init_face,
- sfnt_load_face,
- sfnt_done_face,
- sfnt_get_interface,
+ tt_face_goto_table, /* TT_Loader_GotoTableFunc goto_table */
- tt_face_load_any,
+ sfnt_init_face, /* TT_Init_Face_Func init_face */
+ sfnt_load_face, /* TT_Load_Face_Func load_face */
+ sfnt_done_face, /* TT_Done_Face_Func done_face */
+ sfnt_get_interface, /* FT_Module_Requester get_interface */
- tt_face_load_head,
- tt_face_load_hhea,
- tt_face_load_cmap,
- tt_face_load_maxp,
- tt_face_load_os2,
- tt_face_load_post,
+ tt_face_load_any, /* TT_Load_Any_Func load_any */
- tt_face_load_name,
- tt_face_free_name,
+ tt_face_load_head, /* TT_Load_Table_Func load_head */
+ tt_face_load_hhea, /* TT_Load_Metrics_Func load_hhea */
+ tt_face_load_cmap, /* TT_Load_Table_Func load_cmap */
+ tt_face_load_maxp, /* TT_Load_Table_Func load_maxp */
+ tt_face_load_os2, /* TT_Load_Table_Func load_os2 */
+ tt_face_load_post, /* TT_Load_Table_Func load_post */
- tt_face_load_kern,
- tt_face_load_gasp,
- tt_face_load_pclt,
+ tt_face_load_name, /* TT_Load_Table_Func load_name */
+ tt_face_free_name, /* TT_Free_Table_Func free_name */
+
+ tt_face_load_kern, /* TT_Load_Table_Func load_kern */
+ tt_face_load_gasp, /* TT_Load_Table_Func load_gasp */
+ tt_face_load_pclt, /* TT_Load_Table_Func load_init */
/* see `ttload.h' */
PUT_EMBEDDED_BITMAPS( tt_face_load_bhed ),
-
+ /* TT_Load_Table_Func load_bhed */
PUT_EMBEDDED_BITMAPS( tt_face_load_sbit_image ),
+ /* TT_Load_SBit_Image_Func load_sbit_image */
/* see `ttpost.h' */
PUT_PS_NAMES( tt_face_get_ps_name ),
+ /* TT_Get_PS_Name_Func get_psname */
PUT_PS_NAMES( tt_face_free_ps_names ),
+ /* TT_Free_Table_Func free_psnames */
/* since version 2.1.8 */
- tt_face_get_kerning,
+ tt_face_get_kerning, /* TT_Face_GetKerningFunc get_kerning */
/* since version 2.2 */
- tt_face_load_font_dir,
- tt_face_load_hmtx,
+ tt_face_load_font_dir, /* TT_Load_Table_Func load_font_dir */
+ tt_face_load_hmtx, /* TT_Load_Metrics_Func load_hmtx */
/* see `ttsbit.h' and `sfnt.h' */
PUT_EMBEDDED_BITMAPS( tt_face_load_sbit ),
+ /* TT_Load_Table_Func load_eblc */
PUT_EMBEDDED_BITMAPS( tt_face_free_sbit ),
+ /* TT_Free_Table_Func free_eblc */
PUT_EMBEDDED_BITMAPS( tt_face_set_sbit_strike ),
+ /* TT_Set_SBit_Strike_Func set_sbit_strike */
PUT_EMBEDDED_BITMAPS( tt_face_load_strike_metrics ),
+ /* TT_Load_Strike_Metrics_Func load_strike_metrics */
- tt_face_get_metrics
+ tt_face_get_metrics, /* TT_Get_Metrics_Func get_metrics */
+
+ tt_face_get_name, /* TT_Get_Name_Func get_name */
+ sfnt_get_name_id /* TT_Get_Name_ID_Func get_name_id */
)
@@ -521,9 +1279,10 @@
(const void*)&SFNT_INTERFACE_GET, /* module specific interface */
- (FT_Module_Constructor)0,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) sfnt_get_interface )
+ (FT_Module_Constructor)NULL, /* module_init */
+ (FT_Module_Destructor) NULL, /* module_done */
+ (FT_Module_Requester) sfnt_get_interface /* get_interface */
+ )
/* END */
diff --git a/src/sfnt/sfdriver.h b/src/sfnt/sfdriver.h
index 944119c..81c22d2 100644
--- a/src/sfnt/sfdriver.h
+++ b/src/sfnt/sfdriver.h
@@ -4,7 +4,7 @@
/* */
/* High-level SFNT driver interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SFDRIVER_H__
-#define __SFDRIVER_H__
+#ifndef SFDRIVER_H_
+#define SFDRIVER_H_
#include <ft2build.h>
@@ -32,7 +32,7 @@
FT_END_HEADER
-#endif /* __SFDRIVER_H__ */
+#endif /* SFDRIVER_H_ */
/* END */
diff --git a/src/sfnt/sferrors.h b/src/sfnt/sferrors.h
index e3bef3f..74003d4 100644
--- a/src/sfnt/sferrors.h
+++ b/src/sfnt/sferrors.h
@@ -4,7 +4,7 @@
/* */
/* SFNT error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,12 +22,12 @@
/* */
/*************************************************************************/
-#ifndef __SFERRORS_H__
-#define __SFERRORS_H__
+#ifndef SFERRORS_H_
+#define SFERRORS_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX SFNT_Err_
@@ -35,6 +35,7 @@
#include FT_ERRORS_H
-#endif /* __SFERRORS_H__ */
+#endif /* SFERRORS_H_ */
+
/* END */
diff --git a/src/sfnt/sfnt.c b/src/sfnt/sfnt.c
index 0b8b5f4..8b9a6b3 100644
--- a/src/sfnt/sfnt.c
+++ b/src/sfnt/sfnt.c
@@ -4,7 +4,7 @@
/* */
/* Single object library component. */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,27 +17,19 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
+
+#include "pngshim.c"
+#include "sfdriver.c"
#include "sfntpic.c"
-#include "ttload.c"
-#include "ttmtx.c"
+#include "sfobjs.c"
+#include "ttbdf.c"
#include "ttcmap.c"
#include "ttkern.c"
-#include "sfobjs.c"
-#include "sfdriver.c"
-
-#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-#include "pngshim.c"
-#include "ttsbit.c"
-#endif
-
-#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
+#include "ttload.c"
+#include "ttmtx.c"
#include "ttpost.c"
-#endif
+#include "ttsbit.c"
-#ifdef TT_CONFIG_OPTION_BDF
-#include "ttbdf.c"
-#endif
/* END */
diff --git a/src/sfnt/sfntpic.c b/src/sfnt/sfntpic.c
index 2aaf4bc..db2d816 100644
--- a/src/sfnt/sfntpic.c
+++ b/src/sfnt/sfntpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for sfnt module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/sfnt/sfntpic.h b/src/sfnt/sfntpic.h
index 563d634..8f43122 100644
--- a/src/sfnt/sfntpic.h
+++ b/src/sfnt/sfntpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for sfnt module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,12 +16,10 @@
/***************************************************************************/
-#ifndef __SFNTPIC_H__
-#define __SFNTPIC_H__
+#ifndef SFNTPIC_H_
+#define SFNTPIC_H_
-FT_BEGIN_HEADER
-
#include FT_INTERNAL_PIC_H
@@ -31,7 +29,6 @@
#define SFNT_SERVICE_GLYPH_DICT_GET sfnt_service_glyph_dict
#define SFNT_SERVICE_PS_NAME_GET sfnt_service_ps_name
#define TT_SERVICE_CMAP_INFO_GET tt_service_get_cmap_info
-#define SFNT_SERVICES_GET sfnt_services
#define TT_CMAP_CLASSES_GET tt_cmap_classes
#define SFNT_SERVICE_SFNT_TABLE_GET sfnt_service_sfnt_table
#define SFNT_SERVICE_BDF_GET sfnt_service_bdf
@@ -56,6 +53,8 @@
#include "ttcmap.h"
+FT_BEGIN_HEADER
+
typedef struct sfntModulePIC_
{
FT_ServiceDescRec* sfnt_services;
@@ -83,8 +82,6 @@
( GET_PIC( library )->sfnt_service_ps_name )
#define TT_SERVICE_CMAP_INFO_GET \
( GET_PIC( library )->tt_service_get_cmap_info )
-#define SFNT_SERVICES_GET \
- ( GET_PIC( library )->sfnt_services )
#define TT_CMAP_CLASSES_GET \
( GET_PIC( library )->tt_cmap_classes )
#define SFNT_SERVICE_SFNT_TABLE_GET \
@@ -102,13 +99,14 @@
FT_Error
sfnt_module_class_pic_init( FT_Library library );
+
+FT_END_HEADER
+
#endif /* FT_CONFIG_OPTION_PIC */
/* */
-FT_END_HEADER
-
-#endif /* __SFNTPIC_H__ */
+#endif /* SFNTPIC_H_ */
/* END */
diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c
index 40c27fa..6ba8509 100644
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -4,7 +4,7 @@
/* */
/* SFNT object management (base). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -28,6 +28,12 @@
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
#include FT_SFNT_NAMES_H
#include FT_GZIP_H
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#include FT_SERVICE_MULTIPLE_MASTERS_H
+#include FT_SERVICE_METRICS_VARIATIONS_H
+#endif
+
#include "sferrors.h"
#ifdef TT_CONFIG_OPTION_BDF
@@ -48,8 +54,8 @@
/* convert a UTF-16 name entry to ASCII */
static FT_String*
- tt_name_entry_ascii_from_utf16( TT_NameEntry entry,
- FT_Memory memory )
+ tt_name_ascii_from_utf16( TT_Name entry,
+ FT_Memory memory )
{
FT_String* string = NULL;
FT_UInt len, code, n;
@@ -83,8 +89,8 @@
/* convert an Apple Roman or symbol name entry to ASCII */
static FT_String*
- tt_name_entry_ascii_from_other( TT_NameEntry entry,
- FT_Memory memory )
+ tt_name_ascii_from_other( TT_Name entry,
+ FT_Memory memory )
{
FT_String* string = NULL;
FT_UInt len, code, n;
@@ -116,49 +122,32 @@
}
- typedef FT_String* (*TT_NameEntry_ConvertFunc)( TT_NameEntry entry,
- FT_Memory memory );
+ typedef FT_String* (*TT_Name_ConvertFunc)( TT_Name entry,
+ FT_Memory memory );
- /*************************************************************************/
- /* */
- /* <Function> */
- /* tt_face_get_name */
- /* */
- /* <Description> */
- /* Returns a given ENGLISH name record in ASCII. */
- /* */
- /* <Input> */
- /* face :: A handle to the source face object. */
- /* */
- /* nameid :: The name id of the name record to return. */
- /* */
- /* <InOut> */
- /* name :: The address of a string pointer. NULL if no name is */
- /* present. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- static FT_Error
+ /* documentation is in sfnt.h */
+
+ FT_LOCAL_DEF( FT_Error )
tt_face_get_name( TT_Face face,
FT_UShort nameid,
FT_String** name )
{
- FT_Memory memory = face->root.memory;
- FT_Error error = FT_Err_Ok;
- FT_String* result = NULL;
- FT_UShort n;
- TT_NameEntryRec* rec;
- FT_Int found_apple = -1;
- FT_Int found_apple_roman = -1;
- FT_Int found_apple_english = -1;
- FT_Int found_win = -1;
- FT_Int found_unicode = -1;
+ FT_Memory memory = face->root.memory;
+ FT_Error error = FT_Err_Ok;
+ FT_String* result = NULL;
+ FT_UShort n;
+ TT_Name rec;
- FT_Bool is_english = 0;
+ FT_Int found_apple = -1;
+ FT_Int found_apple_roman = -1;
+ FT_Int found_apple_english = -1;
+ FT_Int found_win = -1;
+ FT_Int found_unicode = -1;
- TT_NameEntry_ConvertFunc convert;
+ FT_Bool is_english = 0;
+
+ TT_Name_ConvertFunc convert;
FT_ASSERT( name );
@@ -243,7 +232,7 @@
/* all Unicode strings are encoded using UTF-16BE */
case TT_MS_ID_UNICODE_CS:
case TT_MS_ID_SYMBOL_CS:
- convert = tt_name_entry_ascii_from_utf16;
+ convert = tt_name_ascii_from_utf16;
break;
case TT_MS_ID_UCS_4:
@@ -252,7 +241,7 @@
/* MsGothic font shipped with Windows Vista shows that this really */
/* means UTF-16 encoded names (UCS-4 values are only used within */
/* charmaps). */
- convert = tt_name_entry_ascii_from_utf16;
+ convert = tt_name_ascii_from_utf16;
break;
default:
@@ -262,17 +251,17 @@
else if ( found_apple >= 0 )
{
rec = face->name_table.names + found_apple;
- convert = tt_name_entry_ascii_from_other;
+ convert = tt_name_ascii_from_other;
}
else if ( found_unicode >= 0 )
{
rec = face->name_table.names + found_unicode;
- convert = tt_name_entry_ascii_from_utf16;
+ convert = tt_name_ascii_from_utf16;
}
if ( rec && convert )
{
- if ( rec->string == NULL )
+ if ( !rec->string )
{
FT_Stream stream = face->name_table.stream;
@@ -322,7 +311,7 @@
{ TT_PLATFORM_MICROSOFT, TT_MS_ID_UCS_4, FT_ENCODING_UNICODE },
{ TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, FT_ENCODING_UNICODE },
{ TT_PLATFORM_MICROSOFT, TT_MS_ID_SJIS, FT_ENCODING_SJIS },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_GB2312, FT_ENCODING_GB2312 },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_PRC, FT_ENCODING_PRC },
{ TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, FT_ENCODING_BIG5 },
{ TT_PLATFORM_MICROSOFT, TT_MS_ID_WANSUNG, FT_ENCODING_WANSUNG },
{ TT_PLATFORM_MICROSOFT, TT_MS_ID_JOHAB, FT_ENCODING_JOHAB }
@@ -469,10 +458,14 @@
woff.metaOrigLength != 0 ) ) ||
( woff.metaLength != 0 && woff.metaOrigLength == 0 ) ||
( woff.privOffset == 0 && woff.privLength != 0 ) )
+ {
+ FT_ERROR(( "woff_font_open: invalid WOFF header\n" ));
return FT_THROW( Invalid_Table );
+ }
- if ( FT_ALLOC( sfnt, woff.totalSfntSize ) ||
- FT_NEW( sfnt_stream ) )
+ /* Don't trust `totalSfntSize' before thorough checks. */
+ if ( FT_ALLOC( sfnt, 12 + woff.num_tables * 16UL ) ||
+ FT_NEW( sfnt_stream ) )
goto Exit;
sfnt_header = sfnt;
@@ -539,6 +532,8 @@
if ( table->Tag <= old_tag )
{
FT_FRAME_EXIT();
+
+ FT_ERROR(( "woff_font_open: table tags are not sorted\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
@@ -573,6 +568,7 @@
sfnt_offset > woff.totalSfntSize - table->OrigLength ||
table->CompLength > table->OrigLength )
{
+ FT_ERROR(( "woff_font_open: invalid table offsets\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
@@ -598,6 +594,8 @@
if ( woff.metaOffset != woff_offset ||
woff.metaOffset + woff.metaLength > woff.length )
{
+ FT_ERROR(( "woff_font_open:"
+ " invalid `metadata' offset or length\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
@@ -614,6 +612,7 @@
if ( woff.privOffset != woff_offset ||
woff.privOffset + woff.privLength > woff.length )
{
+ FT_ERROR(( "woff_font_open: invalid `private' offset or length\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
@@ -625,10 +624,19 @@
if ( sfnt_offset != woff.totalSfntSize ||
woff_offset != woff.length )
{
+ FT_ERROR(( "woff_font_open: invalid `sfnt' table structure\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
+ /* Now use `totalSfntSize'. */
+ if ( FT_REALLOC( sfnt,
+ 12 + woff.num_tables * 16UL,
+ woff.totalSfntSize ) )
+ goto Exit;
+
+ sfnt_header = sfnt + 12;
+
/* Write the tables. */
for ( nn = 0; nn < woff.num_tables; nn++ )
@@ -669,6 +677,7 @@
goto Exit;
if ( output_len != table->OrigLength )
{
+ FT_ERROR(( "woff_font_open: compressed table length mismatch\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
@@ -778,6 +787,8 @@
tag != TTAG_OTTO &&
tag != TTAG_true &&
tag != TTAG_typ1 &&
+ tag != TTAG_0xA5kbd &&
+ tag != TTAG_0xA5lst &&
tag != 0x00020000UL )
{
FT_TRACE2(( " not a font using the SFNT container format\n" ));
@@ -796,6 +807,9 @@
if ( FT_STREAM_READ_FIELDS( ttc_header_fields, &face->ttc_header ) )
return error;
+ FT_TRACE3(( " with %ld subfonts\n",
+ face->ttc_header.count ));
+
if ( face->ttc_header.count == 0 )
return FT_THROW( Invalid_Table );
@@ -839,13 +853,14 @@
FT_LOCAL_DEF( FT_Error )
sfnt_init_face( FT_Stream stream,
TT_Face face,
- FT_Int face_index,
+ FT_Int face_instance_index,
FT_Int num_params,
FT_Parameter* params )
{
- FT_Error error;
- FT_Library library = face->root.driver->root.library;
- SFNT_Service sfnt;
+ FT_Error error;
+ FT_Library library = face->root.driver->root.library;
+ SFNT_Service sfnt;
+ FT_Int face_index;
/* for now, parameters are unused */
@@ -869,6 +884,31 @@
FT_FACE_FIND_GLOBAL_SERVICE( face, face->psnames, POSTSCRIPT_CMAPS );
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( !face->mm )
+ {
+ /* we want the MM interface from the `truetype' module only */
+ FT_Module tt_module = FT_Get_Module( library, "truetype" );
+
+
+ face->mm = ft_module_get_service( tt_module,
+ FT_SERVICE_ID_MULTI_MASTERS,
+ 0 );
+ }
+
+ if ( !face->var )
+ {
+ /* we want the metrics variations interface */
+ /* from the `truetype' module only */
+ FT_Module tt_module = FT_Get_Module( library, "truetype" );
+
+
+ face->var = ft_module_get_service( tt_module,
+ FT_SERVICE_ID_METRICS_VARIATIONS,
+ 0 );
+ }
+#endif
+
FT_TRACE2(( "SFNT driver\n" ));
error = sfnt_open_font( stream, face );
@@ -878,24 +918,171 @@
/* Stream may have changed in sfnt_open_font. */
stream = face->root.stream;
- FT_TRACE2(( "sfnt_init_face: %08p, %ld\n", face, face_index ));
+ FT_TRACE2(( "sfnt_init_face: %08p, %d\n", face, face_instance_index ));
- if ( face_index < 0 )
- face_index = 0;
+ face_index = FT_ABS( face_instance_index ) & 0xFFFF;
+
+ /* value -(N+1) requests information on index N */
+ if ( face_instance_index < 0 )
+ face_index--;
if ( face_index >= face->ttc_header.count )
- return FT_THROW( Invalid_Argument );
+ {
+ if ( face_instance_index >= 0 )
+ return FT_THROW( Invalid_Argument );
+ else
+ face_index = 0;
+ }
if ( FT_STREAM_SEEK( face->ttc_header.offsets[face_index] ) )
return error;
- /* check that we have a valid TrueType file */
+ /* check whether we have a valid TrueType file */
error = sfnt->load_font_dir( face, stream );
if ( error )
return error;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ {
+ FT_Memory memory = face->root.memory;
+
+ FT_ULong fvar_len;
+
+ FT_ULong version;
+ FT_ULong offset;
+
+ FT_UShort num_axes;
+ FT_UShort axis_size;
+ FT_UShort num_instances;
+ FT_UShort instance_size;
+
+ FT_Int instance_index;
+
+ FT_Byte* default_values = NULL;
+ FT_Byte* instance_values = NULL;
+
+
+ instance_index = FT_ABS( face_instance_index ) >> 16;
+
+ /* test whether current face is a GX font with named instances */
+ if ( face->goto_table( face, TTAG_fvar, stream, &fvar_len ) ||
+ fvar_len < 20 ||
+ FT_READ_ULONG( version ) ||
+ FT_READ_USHORT( offset ) ||
+ FT_STREAM_SKIP( 2 ) /* reserved */ ||
+ FT_READ_USHORT( num_axes ) ||
+ FT_READ_USHORT( axis_size ) ||
+ FT_READ_USHORT( num_instances ) ||
+ FT_READ_USHORT( instance_size ) )
+ {
+ version = 0;
+ offset = 0;
+ num_axes = 0;
+ axis_size = 0;
+ num_instances = 0;
+ instance_size = 0;
+ }
+
+ /* check that the data is bound by the table length */
+ if ( version != 0x00010000UL ||
+ axis_size != 20 ||
+ num_axes == 0 ||
+ /* `num_axes' limit implied by 16-bit `instance_size' */
+ num_axes > 0x3FFE ||
+ !( instance_size == 4 + 4 * num_axes ||
+ instance_size == 6 + 4 * num_axes ) ||
+ /* `num_instances' limit implied by limited range of name IDs */
+ num_instances > 0x7EFF ||
+ offset +
+ axis_size * num_axes +
+ instance_size * num_instances > fvar_len )
+ num_instances = 0;
+ else
+ face->variation_support |= TT_FACE_FLAG_VAR_FVAR;
+
+ /*
+ * As documented in the OpenType specification, an entry for the
+ * default instance may be omitted in the named instance table. In
+ * particular this means that even if there is no named instance
+ * table in the font we actually do have a named instance, namely the
+ * default instance.
+ *
+ * For consistency, we always want the default instance in our list
+ * of named instances. If it is missing, we try to synthesize it
+ * later on. Here, we have to adjust `num_instances' accordingly.
+ */
+
+ if ( ( face->variation_support & TT_FACE_FLAG_VAR_FVAR ) &&
+ !( FT_ALLOC( default_values, num_axes * 4 ) ||
+ FT_ALLOC( instance_values, num_axes * 4 ) ) )
+ {
+ /* the current stream position is 16 bytes after the table start */
+ FT_ULong array_start = FT_STREAM_POS() - 16 + offset;
+ FT_ULong default_value_offset, instance_offset;
+
+ FT_Byte* p;
+ FT_UInt i;
+
+
+ default_value_offset = array_start + 8;
+ p = default_values;
+
+ for ( i = 0; i < num_axes; i++ )
+ {
+ (void)FT_STREAM_READ_AT( default_value_offset, p, 4 );
+
+ default_value_offset += axis_size;
+ p += 4;
+ }
+
+ instance_offset = array_start + axis_size * num_axes + 4;
+
+ for ( i = 0; i < num_instances; i++ )
+ {
+ (void)FT_STREAM_READ_AT( instance_offset,
+ instance_values,
+ num_axes * 4 );
+
+ if ( !ft_memcmp( default_values, instance_values, num_axes * 4 ) )
+ break;
+
+ instance_offset += instance_size;
+ }
+
+ if ( i == num_instances )
+ {
+ /* no default instance in named instance table; */
+ /* we thus have to synthesize it */
+ num_instances++;
+ }
+ }
+
+ FT_FREE( default_values );
+ FT_FREE( instance_values );
+
+ /* we don't support Multiple Master CFFs yet; */
+ /* note that `glyf' or `CFF2' have precedence */
+ if ( face->goto_table( face, TTAG_glyf, stream, 0 ) &&
+ face->goto_table( face, TTAG_CFF2, stream, 0 ) &&
+ !face->goto_table( face, TTAG_CFF, stream, 0 ) )
+ num_instances = 0;
+
+ /* instance indices in `face_instance_index' start with index 1, */
+ /* thus `>' and not `>=' */
+ if ( instance_index > num_instances )
+ {
+ if ( face_instance_index >= 0 )
+ return FT_THROW( Invalid_Argument );
+ else
+ num_instances = 0;
+ }
+
+ face->root.style_flags = (FT_Long)num_instances << 16;
+ }
+#endif
+
face->root.num_faces = face->ttc_header.count;
- face->root.face_index = face_index;
+ face->root.face_index = face_instance_index;
return error;
}
@@ -946,7 +1133,7 @@
FT_LOCAL_DEF( FT_Error )
sfnt_load_face( FT_Stream stream,
TT_Face face,
- FT_Int face_index,
+ FT_Int face_instance_index,
FT_Int num_params,
FT_Parameter* params )
{
@@ -957,12 +1144,14 @@
FT_Bool has_outline;
FT_Bool is_apple_sbit;
FT_Bool is_apple_sbix;
- FT_Bool ignore_preferred_family = FALSE;
- FT_Bool ignore_preferred_subfamily = FALSE;
+ FT_Bool has_CBLC;
+ FT_Bool has_CBDT;
+ FT_Bool ignore_typographic_family = FALSE;
+ FT_Bool ignore_typographic_subfamily = FALSE;
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
- FT_UNUSED( face_index );
+ FT_UNUSED( face_instance_index );
/* Check parameters */
@@ -973,10 +1162,10 @@
for ( i = 0; i < num_params; i++ )
{
- if ( params[i].tag == FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY )
- ignore_preferred_family = TRUE;
- else if ( params[i].tag == FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY )
- ignore_preferred_subfamily = TRUE;
+ if ( params[i].tag == FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY )
+ ignore_typographic_family = TRUE;
+ else if ( params[i].tag == FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY )
+ ignore_typographic_subfamily = TRUE;
}
}
@@ -1001,12 +1190,14 @@
/* do we have outlines in there? */
#ifdef FT_CONFIG_OPTION_INCREMENTAL
- has_outline = FT_BOOL( face->root.internal->incremental_interface != 0 ||
- tt_face_lookup_table( face, TTAG_glyf ) != 0 ||
- tt_face_lookup_table( face, TTAG_CFF ) != 0 );
+ has_outline = FT_BOOL( face->root.internal->incremental_interface ||
+ tt_face_lookup_table( face, TTAG_glyf ) ||
+ tt_face_lookup_table( face, TTAG_CFF ) ||
+ tt_face_lookup_table( face, TTAG_CFF2 ) );
#else
- has_outline = FT_BOOL( tt_face_lookup_table( face, TTAG_glyf ) != 0 ||
- tt_face_lookup_table( face, TTAG_CFF ) != 0 );
+ has_outline = FT_BOOL( tt_face_lookup_table( face, TTAG_glyf ) ||
+ tt_face_lookup_table( face, TTAG_CFF ) ||
+ tt_face_lookup_table( face, TTAG_CFF2 ) );
#endif
is_apple_sbit = 0;
@@ -1035,7 +1226,17 @@
goto Exit;
}
- if ( face->header.Units_Per_EM == 0 )
+ has_CBLC = !face->goto_table( face, TTAG_CBLC, stream, 0 );
+ has_CBDT = !face->goto_table( face, TTAG_CBDT, stream, 0 );
+
+ /* Ignore outlines for CBLC/CBDT fonts. */
+ if ( has_CBLC || has_CBDT )
+ has_outline = FALSE;
+
+ /* OpenType 1.8.2 introduced limits to this value; */
+ /* however, they make sense for older SFNT fonts also */
+ if ( face->header.Units_Per_EM < 16 ||
+ face->header.Units_Per_EM > 16384 )
{
error = FT_THROW( Invalid_Table );
@@ -1138,30 +1339,10 @@
/* embedded bitmap support */
if ( sfnt->load_eblc )
- {
LOAD_( eblc );
- if ( error )
- {
- /* a font which contains neither bitmaps nor outlines is */
- /* still valid (although rather useless in most cases); */
- /* however, you can find such stripped fonts in PDFs */
- if ( FT_ERR_EQ( error, Table_Missing ) )
- error = FT_Err_Ok;
- else
- goto Exit;
- }
- }
+ /* consider the pclt, kerning, and gasp tables as optional */
LOAD_( pclt );
- if ( error )
- {
- if ( FT_ERR_NEQ( error, Table_Missing ) )
- goto Exit;
-
- face->pclt.Version = 0;
- }
-
- /* consider the kerning and gasp tables as optional */
LOAD_( gasp );
LOAD_( kern );
@@ -1177,27 +1358,27 @@
face->root.style_name = NULL;
if ( face->os2.version != 0xFFFFU && face->os2.fsSelection & 256 )
{
- if ( !ignore_preferred_family )
- GET_NAME( PREFERRED_FAMILY, &face->root.family_name );
+ if ( !ignore_typographic_family )
+ GET_NAME( TYPOGRAPHIC_FAMILY, &face->root.family_name );
if ( !face->root.family_name )
GET_NAME( FONT_FAMILY, &face->root.family_name );
- if ( !ignore_preferred_subfamily )
- GET_NAME( PREFERRED_SUBFAMILY, &face->root.style_name );
+ if ( !ignore_typographic_subfamily )
+ GET_NAME( TYPOGRAPHIC_SUBFAMILY, &face->root.style_name );
if ( !face->root.style_name )
GET_NAME( FONT_SUBFAMILY, &face->root.style_name );
}
else
{
GET_NAME( WWS_FAMILY, &face->root.family_name );
- if ( !face->root.family_name && !ignore_preferred_family )
- GET_NAME( PREFERRED_FAMILY, &face->root.family_name );
+ if ( !face->root.family_name && !ignore_typographic_family )
+ GET_NAME( TYPOGRAPHIC_FAMILY, &face->root.family_name );
if ( !face->root.family_name )
GET_NAME( FONT_FAMILY, &face->root.family_name );
GET_NAME( WWS_SUBFAMILY, &face->root.style_name );
- if ( !face->root.style_name && !ignore_preferred_subfamily )
- GET_NAME( PREFERRED_SUBFAMILY, &face->root.style_name );
+ if ( !face->root.style_name && !ignore_typographic_subfamily )
+ GET_NAME( TYPOGRAPHIC_SUBFAMILY, &face->root.style_name );
if ( !face->root.style_name )
GET_NAME( FONT_SUBFAMILY, &face->root.style_name );
}
@@ -1245,10 +1426,14 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
/* Don't bother to load the tables unless somebody asks for them. */
/* No need to do work which will (probably) not be used. */
- if ( tt_face_lookup_table( face, TTAG_glyf ) != 0 &&
- tt_face_lookup_table( face, TTAG_fvar ) != 0 &&
- tt_face_lookup_table( face, TTAG_gvar ) != 0 )
- flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
+ if ( face->variation_support & TT_FACE_FLAG_VAR_FVAR )
+ {
+ if ( tt_face_lookup_table( face, TTAG_glyf ) != 0 &&
+ tt_face_lookup_table( face, TTAG_gvar ) != 0 )
+ flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
+ if ( tt_face_lookup_table( face, TTAG_CFF2 ) != 0 )
+ flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
+ }
#endif
root->face_flags = flags;
@@ -1284,14 +1469,15 @@
flags |= FT_STYLE_FLAG_ITALIC;
}
- root->style_flags = flags;
+ root->style_flags |= flags;
/*********************************************************************/
/* */
/* Polish the charmaps. */
/* */
/* Try to set the charmap encoding according to the platform & */
- /* encoding ID of each charmap. */
+ /* encoding ID of each charmap. Emulate Unicode charmap if one */
+ /* is missing. */
/* */
tt_face_build_cmaps( face ); /* ignore errors */
@@ -1299,7 +1485,10 @@
/* set the encoding fields */
{
- FT_Int m;
+ FT_Int m;
+#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
+ FT_Bool has_unicode = FALSE;
+#endif
for ( m = 0; m < root->num_charmaps; m++ )
@@ -1310,14 +1499,34 @@
charmap->encoding = sfnt_find_encoding( charmap->platform_id,
charmap->encoding_id );
-#if 0
- if ( root->charmap == NULL &&
- charmap->encoding == FT_ENCODING_UNICODE )
- {
- /* set 'root->charmap' to the first Unicode encoding we find */
- root->charmap = charmap;
- }
-#endif
+#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+ if ( charmap->encoding == FT_ENCODING_UNICODE ||
+ charmap->encoding == FT_ENCODING_MS_SYMBOL ) /* PUA */
+ has_unicode = TRUE;
+ }
+
+ /* synthesize Unicode charmap if one is missing */
+ if ( !has_unicode )
+ {
+ FT_CharMapRec cmaprec;
+
+
+ cmaprec.face = root;
+ cmaprec.platform_id = TT_PLATFORM_MICROSOFT;
+ cmaprec.encoding_id = TT_MS_ID_UNICODE_CS;
+ cmaprec.encoding = FT_ENCODING_UNICODE;
+
+
+ error = FT_CMap_New( (FT_CMap_Class)&tt_cmap_unicode_class_rec,
+ NULL, &cmaprec, NULL );
+ if ( error &&
+ FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
+ goto Exit;
+ error = FT_Err_Ok;
+
+#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
+
}
}
@@ -1329,7 +1538,7 @@
* depths in the FT_Bitmap_Size record. This is a design error.
*/
{
- FT_UInt i, count;
+ FT_UInt count;
count = face->sbit_num_strikes;
@@ -1341,6 +1550,9 @@
FT_Short avgwidth = face->os2.xAvgCharWidth;
FT_Size_Metrics metrics;
+ FT_UInt* sbit_strike_map = NULL;
+ FT_UInt strike_idx, bsize_idx;
+
if ( em_size == 0 || face->os2.version == 0xFFFFU )
{
@@ -1348,31 +1560,50 @@
em_size = 1;
}
- if ( FT_NEW_ARRAY( root->available_sizes, count ) )
+ /* to avoid invalid strike data in the `available_sizes' field */
+ /* of `FT_Face', we map `available_sizes' indices to strike */
+ /* indices */
+ if ( FT_NEW_ARRAY( root->available_sizes, count ) ||
+ FT_NEW_ARRAY( sbit_strike_map, count ) )
goto Exit;
- for ( i = 0; i < count; i++ )
+ bsize_idx = 0;
+ for ( strike_idx = 0; strike_idx < count; strike_idx++ )
{
- FT_Bitmap_Size* bsize = root->available_sizes + i;
+ FT_Bitmap_Size* bsize = root->available_sizes + bsize_idx;
- error = sfnt->load_strike_metrics( face, i, &metrics );
+ error = sfnt->load_strike_metrics( face, strike_idx, &metrics );
if ( error )
- goto Exit;
+ continue;
bsize->height = (FT_Short)( metrics.height >> 6 );
- bsize->width = (FT_Short)(
- ( avgwidth * metrics.x_ppem + em_size / 2 ) / em_size );
+ bsize->width = (FT_Short)(
+ ( avgwidth * metrics.x_ppem + em_size / 2 ) / em_size );
bsize->x_ppem = metrics.x_ppem << 6;
bsize->y_ppem = metrics.y_ppem << 6;
/* assume 72dpi */
bsize->size = metrics.y_ppem << 6;
+
+ /* only use strikes with valid PPEM values */
+ if ( bsize->x_ppem && bsize->y_ppem )
+ sbit_strike_map[bsize_idx++] = strike_idx;
}
- root->face_flags |= FT_FACE_FLAG_FIXED_SIZES;
- root->num_fixed_sizes = (FT_Int)count;
+ /* reduce array size to the actually used elements */
+ (void)FT_RENEW_ARRAY( sbit_strike_map, count, bsize_idx );
+
+ /* from now on, all strike indices are mapped */
+ /* using `sbit_strike_map' */
+ if ( bsize_idx )
+ {
+ face->sbit_strike_map = sbit_strike_map;
+
+ root->face_flags |= FT_FACE_FLAG_FIXED_SIZES;
+ root->num_fixed_sizes = (FT_Int)bsize_idx;
+ }
}
}
@@ -1462,9 +1693,9 @@
(FT_Short)( face->vertical_info ? face->vertical.advance_Height_Max
: root->height );
- /* See http://www.microsoft.com/OpenType/OTSpec/post.htm -- */
- /* Adjust underline position from top edge to centre of */
- /* stroke to convert TrueType meaning to FreeType meaning. */
+ /* See https://www.microsoft.com/typography/otspec/post.htm -- */
+ /* Adjust underline position from top edge to centre of */
+ /* stroke to convert TrueType meaning to FreeType meaning. */
root->underline_position = face->postscript.underlinePosition -
face->postscript.underlineThickness / 2;
root->underline_thickness = face->postscript.underlineThickness;
@@ -1533,18 +1764,10 @@
face->cmap_size = 0;
}
- /* freeing the horizontal metrics */
- {
- FT_Stream stream = FT_FACE_STREAM( face );
+ face->horz_metrics_size = 0;
+ face->vert_metrics_size = 0;
-
- FT_FRAME_RELEASE( face->horz_metrics );
- FT_FRAME_RELEASE( face->vert_metrics );
- face->horz_metrics_size = 0;
- face->vert_metrics_size = 0;
- }
-
- /* freeing the vertical ones, if any */
+ /* freeing vertical metrics, if any */
if ( face->vertical_info )
{
FT_FREE( face->vertical.long_metrics );
@@ -1566,9 +1789,13 @@
/* freeing sbit size table */
FT_FREE( face->root.available_sizes );
+ FT_FREE( face->sbit_strike_map );
face->root.num_fixed_sizes = 0;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
FT_FREE( face->postscript_name );
+ FT_FREE( face->var_postscript_prefix );
+#endif
face->sfnt = NULL;
}
diff --git a/src/sfnt/sfobjs.h b/src/sfnt/sfobjs.h
index 77c7d92..1b8d1be 100644
--- a/src/sfnt/sfobjs.h
+++ b/src/sfnt/sfobjs.h
@@ -4,7 +4,7 @@
/* */
/* SFNT object management (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SFOBJS_H__
-#define __SFOBJS_H__
+#ifndef SFOBJS_H_
+#define SFOBJS_H_
#include <ft2build.h>
@@ -31,24 +31,29 @@
FT_LOCAL( FT_Error )
sfnt_init_face( FT_Stream stream,
TT_Face face,
- FT_Int face_index,
+ FT_Int face_instance_index,
FT_Int num_params,
FT_Parameter* params );
FT_LOCAL( FT_Error )
sfnt_load_face( FT_Stream stream,
TT_Face face,
- FT_Int face_index,
+ FT_Int face_instance_index,
FT_Int num_params,
FT_Parameter* params );
FT_LOCAL( void )
sfnt_done_face( TT_Face face );
+ FT_LOCAL( FT_Error )
+ tt_face_get_name( TT_Face face,
+ FT_UShort nameid,
+ FT_String** name );
+
FT_END_HEADER
-#endif /* __SFDRIVER_H__ */
+#endif /* SFDRIVER_H_ */
/* END */
diff --git a/src/sfnt/ttbdf.c b/src/sfnt/ttbdf.c
index 098b781..534201f 100644
--- a/src/sfnt/ttbdf.c
+++ b/src/sfnt/ttbdf.c
@@ -4,7 +4,7 @@
/* */
/* TrueType and OpenType embedded BDF properties (body). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -48,7 +48,7 @@
FT_Stream stream = FT_FACE(face)->stream;
- if ( bdf->table != NULL )
+ if ( bdf->table )
FT_FRAME_RELEASE( bdf->table );
bdf->table_end = NULL;
@@ -165,7 +165,7 @@
error = FT_ERR( Invalid_Argument );
- if ( size == NULL || property_name == NULL )
+ if ( !size || !property_name )
goto Exit;
property_len = ft_strlen( property_name );
@@ -177,6 +177,7 @@
FT_UInt _ppem = FT_NEXT_USHORT( p );
FT_UInt _count = FT_NEXT_USHORT( p );
+
if ( _ppem == size->metrics.y_ppem )
{
count = _count;
@@ -193,6 +194,7 @@
{
FT_UInt type = FT_PEEK_USHORT( p + 4 );
+
if ( ( type & 0x10 ) != 0 )
{
FT_UInt32 name_offset = FT_PEEK_ULONG( p );
@@ -244,7 +246,12 @@
return error;
}
-#endif /* TT_CONFIG_OPTION_BDF */
+#else /* !TT_CONFIG_OPTION_BDF */
+
+ /* ANSI C doesn't like empty source files */
+ typedef int _tt_bdf_dummy;
+
+#endif /* !TT_CONFIG_OPTION_BDF */
/* END */
diff --git a/src/sfnt/ttbdf.h b/src/sfnt/ttbdf.h
index fe4ba48..809a663 100644
--- a/src/sfnt/ttbdf.h
+++ b/src/sfnt/ttbdf.h
@@ -4,7 +4,7 @@
/* */
/* TrueType and OpenType embedded BDF properties (specification). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTBDF_H__
-#define __TTBDF_H__
+#ifndef TTBDF_H_
+#define TTBDF_H_
#include <ft2build.h>
@@ -28,6 +28,8 @@
FT_BEGIN_HEADER
+#ifdef TT_CONFIG_OPTION_BDF
+
FT_LOCAL( void )
tt_face_free_bdf_props( TT_Face face );
@@ -37,10 +39,12 @@
const char* property_name,
BDF_PropertyRec *aprop );
+#endif /* TT_CONFIG_OPTION_BDF */
+
FT_END_HEADER
-#endif /* __TTBDF_H__ */
+#endif /* TTBDF_H_ */
/* END */
diff --git a/src/sfnt/ttcmap.c b/src/sfnt/ttcmap.c
index 815ee7c..996e664 100644
--- a/src/sfnt/ttcmap.c
+++ b/src/sfnt/ttcmap.c
@@ -4,7 +4,7 @@
/* */
/* TrueType character mapping table (cmap) support (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,8 +23,10 @@
#include FT_INTERNAL_VALIDATE_H
#include FT_INTERNAL_STREAM_H
+#include FT_SERVICE_POSTSCRIPT_CMAPS_H
#include "ttload.h"
#include "ttcmap.h"
+#include "ttpost.h"
#include "sfntpic.h"
@@ -51,6 +53,13 @@
#define TT_NEXT_ULONG FT_NEXT_ULONG
+ /* Too large glyph index return values are caught in `FT_Get_Char_Index' */
+ /* and `FT_Get_Next_Char' (the latter calls the internal `next' function */
+ /* again in this case). To mark character code return values as invalid */
+ /* it is sufficient to set the corresponding glyph index return value to */
+ /* zero. */
+
+
FT_CALLBACK_DEF( FT_Error )
tt_cmap_init( TT_CMap cmap,
FT_Byte* table )
@@ -173,22 +182,24 @@
FT_DEFINE_TT_CMAP(
tt_cmap0_class_rec,
- sizeof ( TT_CMapRec ),
- (FT_CMap_InitFunc) tt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap0_char_index,
- (FT_CMap_CharNextFunc) tt_cmap0_char_next,
+ sizeof ( TT_CMapRec ),
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
+ (FT_CMap_InitFunc) tt_cmap_init, /* init */
+ (FT_CMap_DoneFunc) NULL, /* done */
+ (FT_CMap_CharIndexFunc)tt_cmap0_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) tt_cmap0_char_next, /* char_next */
+
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
0,
- (TT_CMap_ValidateFunc)tt_cmap0_validate,
- (TT_CMap_Info_GetFunc)tt_cmap0_get_info )
+ (TT_CMap_ValidateFunc)tt_cmap0_validate, /* validate */
+ (TT_CMap_Info_GetFunc)tt_cmap0_get_info /* get_cmap_info */
+ )
#endif /* TT_CONFIG_CMAP_FORMAT_0 */
@@ -199,7 +210,7 @@
/***** FORMAT 2 *****/
/***** *****/
/***** This is used for certain CJK encodings that encode text in a *****/
- /***** mixed 8/16 bits encoding along the following lines: *****/
+ /***** mixed 8/16 bits encoding along the following lines. *****/
/***** *****/
/***** * Certain byte values correspond to an 8-bit character code *****/
/***** (typically in the range 0..127 for ASCII compatibility). *****/
@@ -209,19 +220,19 @@
/***** second byte of a 2-byte character). *****/
/***** *****/
/***** The following charmap lookup and iteration functions all *****/
- /***** assume that the value "charcode" correspond to following: *****/
+ /***** assume that the value `charcode' fulfills the following. *****/
/***** *****/
- /***** - For one byte characters, "charcode" is simply the *****/
+ /***** - For one-byte characters, `charcode' is simply the *****/
/***** character code. *****/
/***** *****/
- /***** - For two byte characters, "charcode" is the 2-byte *****/
- /***** character code in big endian format. More exactly: *****/
+ /***** - For two-byte characters, `charcode' is the 2-byte *****/
+ /***** character code in big endian format. More precisely: *****/
/***** *****/
/***** (charcode >> 8) is the first byte value *****/
/***** (charcode & 0xFF) is the second byte value *****/
/***** *****/
- /***** Note that not all values of "charcode" are valid according *****/
- /***** to these rules, and the function moderately check the *****/
+ /***** Note that not all values of `charcode' are valid according *****/
+ /***** to these rules, and the function moderately checks the *****/
/***** arguments. *****/
/***** *****/
/*************************************************************************/
@@ -241,15 +252,15 @@
/* subs 518 SUBHEAD[NSUBS] sub-headers array */
/* glyph_ids 518+NSUB*8 USHORT[] glyph ID array */
/* */
- /* The `keys' table is used to map charcode high-bytes to sub-headers. */
+ /* The `keys' table is used to map charcode high bytes to sub-headers. */
/* The value of `NSUBS' is the number of sub-headers defined in the */
/* table and is computed by finding the maximum of the `keys' table. */
/* */
- /* Note that for any n, `keys[n]' is a byte offset within the `subs' */
+ /* Note that for any `n', `keys[n]' is a byte offset within the `subs' */
/* table, i.e., it is the corresponding sub-header index multiplied */
/* by 8. */
/* */
- /* Each sub-header has the following format: */
+ /* Each sub-header has the following format. */
/* */
/* NAME OFFSET TYPE DESCRIPTION */
/* */
@@ -258,17 +269,17 @@
/* delta 4 SHORT see below */
/* offset 6 USHORT see below */
/* */
- /* A sub-header defines, for each high-byte, the range of valid */
- /* low-bytes within the charmap. Note that the range defined by `first' */
+ /* A sub-header defines, for each high byte, the range of valid */
+ /* low bytes within the charmap. Note that the range defined by `first' */
/* and `count' must be completely included in the interval [0..255] */
/* according to the specification. */
/* */
/* If a character code is contained within a given sub-header, then */
- /* mapping it to a glyph index is done as follows: */
+ /* mapping it to a glyph index is done as follows. */
/* */
/* * The value of `offset' is read. This is a _byte_ distance from the */
/* location of the `offset' field itself into a slice of the */
- /* `glyph_ids' table. Let's call it `slice' (it is a USHORT[] too). */
+ /* `glyph_ids' table. Let's call it `slice' (it is a USHORT[], too). */
/* */
/* * The value `slice[char.lo - first]' is read. If it is 0, there is */
/* no glyph for the charcode. Otherwise, the value of `delta' is */
@@ -326,7 +337,7 @@
FT_ASSERT( p == table + 518 );
subs = p;
- glyph_ids = subs + (max_subs + 1) * 8;
+ glyph_ids = subs + ( max_subs + 1 ) * 8;
if ( glyph_ids > valid->limit )
FT_INVALID_TOO_SHORT;
@@ -349,7 +360,7 @@
/* check range within 0..255 */
if ( valid->level >= FT_VALIDATE_PARANOID )
{
- if ( first_code >= 256 || first_code + code_count > 256 )
+ if ( first_code >= 256 || code_count > 256 - first_code )
FT_INVALID_DATA;
}
@@ -401,7 +412,7 @@
{
FT_UInt char_lo = (FT_UInt)( char_code & 0xFF );
FT_UInt char_hi = (FT_UInt)( char_code >> 8 );
- FT_Byte* p = table + 6; /* keys table */
+ FT_Byte* p = table + 6; /* keys table */
FT_Byte* subs = table + 518; /* subheaders table */
FT_Byte* sub;
@@ -414,8 +425,8 @@
sub = subs; /* jump to first sub-header */
/* check that the sub-header for this byte is 0, which */
- /* indicates that it is really a valid one-byte value */
- /* Otherwise, return 0 */
+ /* indicates that it is really a valid one-byte value; */
+ /* otherwise, return 0 */
/* */
p += char_lo * 2;
if ( TT_PEEK_USHORT( p ) != 0 )
@@ -434,8 +445,10 @@
if ( sub == subs )
goto Exit;
}
+
result = sub;
}
+
Exit:
return result;
}
@@ -475,6 +488,7 @@
result = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
}
}
+
return result;
}
@@ -504,8 +518,19 @@
FT_UInt pos, idx;
+ if ( char_lo >= start + count && charcode <= 0xFF )
+ {
+ /* this happens only for a malformed cmap */
+ charcode = 0x100;
+ continue;
+ }
+
if ( offset == 0 )
+ {
+ if ( charcode == 0x100 )
+ goto Exit; /* this happens only for a malformed cmap */
goto Next_SubHeader;
+ }
if ( char_lo < start )
{
@@ -532,11 +557,20 @@
}
}
}
+
+ /* if unsuccessful, avoid `charcode' leaving */
+ /* the current 256-character block */
+ if ( count )
+ charcode--;
}
- /* jump to next sub-header, i.e. higher byte value */
+ /* If `charcode' is <= 0xFF, retry with `charcode + 1'. */
+ /* Otherwise jump to the next 256-character block and retry. */
Next_SubHeader:
- charcode = FT_PAD_FLOOR( charcode, 256 ) + 256;
+ if ( charcode <= 0xFF )
+ charcode++;
+ else
+ charcode = FT_PAD_FLOOR( charcode, 0x100 ) + 0x100;
}
Exit:
@@ -562,22 +596,24 @@
FT_DEFINE_TT_CMAP(
tt_cmap2_class_rec,
- sizeof ( TT_CMapRec ),
- (FT_CMap_InitFunc) tt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap2_char_index,
- (FT_CMap_CharNextFunc) tt_cmap2_char_next,
+ sizeof ( TT_CMapRec ),
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
+ (FT_CMap_InitFunc) tt_cmap_init, /* init */
+ (FT_CMap_DoneFunc) NULL, /* done */
+ (FT_CMap_CharIndexFunc)tt_cmap2_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) tt_cmap2_char_next, /* char_next */
+
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
2,
- (TT_CMap_ValidateFunc)tt_cmap2_validate,
- (TT_CMap_Info_GetFunc)tt_cmap2_get_info )
+ (TT_CMap_ValidateFunc)tt_cmap2_validate, /* validate */
+ (TT_CMap_Info_GetFunc)tt_cmap2_get_info /* get_cmap_info */
+ )
#endif /* TT_CONFIG_CMAP_FORMAT_2 */
@@ -754,6 +790,9 @@
static void
tt_cmap4_next( TT_CMap4 cmap )
{
+ TT_Face face = (TT_Face)cmap->cmap.cmap.charmap.face;
+ FT_Byte* limit = face->cmap_table + face->cmap_size;
+
FT_UInt charcode;
@@ -765,7 +804,7 @@
if ( charcode < cmap->cur_start )
charcode = cmap->cur_start;
- for ( ;; )
+ for (;;)
{
FT_Byte* values = cmap->cur_values;
FT_UInt end = cmap->cur_end;
@@ -779,15 +818,19 @@
FT_Byte* p = values + 2 * ( charcode - cmap->cur_start );
+ /* if p > limit, the whole segment is invalid */
+ if ( p > limit )
+ goto Next_Segment;
+
do
{
FT_UInt gindex = FT_NEXT_USHORT( p );
- if ( gindex != 0 )
+ if ( gindex )
{
gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
- if ( gindex != 0 )
+ if ( gindex )
{
cmap->cur_charcode = charcode;
cmap->cur_gindex = gindex;
@@ -803,7 +846,26 @@
FT_UInt gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
- if ( gindex != 0 )
+ if ( gindex >= (FT_UInt)face->root.num_glyphs )
+ {
+ /* we have an invalid glyph index; if there is an overflow, */
+ /* we can adjust `charcode', otherwise the whole segment is */
+ /* invalid */
+ gindex = 0;
+
+ if ( (FT_Int)charcode + delta < 0 &&
+ (FT_Int)end + delta >= 0 )
+ charcode = (FT_UInt)( -delta );
+
+ else if ( (FT_Int)charcode + delta < 0x10000L &&
+ (FT_Int)end + delta >= 0x10000L )
+ charcode = (FT_UInt)( 0x10000L - delta );
+
+ else
+ goto Next_Segment;
+ }
+
+ if ( gindex )
{
cmap->cur_charcode = charcode;
cmap->cur_gindex = gindex;
@@ -813,6 +875,7 @@
}
}
+ Next_Segment:
/* we need to find another range */
if ( tt_cmap4_set_range( cmap, cmap->cur_range + 1 ) < 0 )
break;
@@ -973,7 +1036,7 @@
/* segment if it contains only a single character. */
/* */
/* We thus omit the test here, delaying it to the */
- /* routines which actually access the cmap. */
+ /* routines that actually access the cmap. */
else if ( n != num_segs - 1 ||
!( start == 0xFFFFU && end == 0xFFFFU ) )
{
@@ -1026,12 +1089,17 @@
FT_UInt32* pcharcode,
FT_Bool next )
{
+ TT_Face face = (TT_Face)cmap->cmap.charmap.face;
+ FT_Byte* limit = face->cmap_table + face->cmap_size;
+
+
FT_UInt num_segs2, start, end, offset;
FT_Int delta;
FT_UInt i, num_segs;
FT_UInt32 charcode = *pcharcode;
FT_UInt gindex = 0;
FT_Byte* p;
+ FT_Byte* q;
p = cmap->data + 6;
@@ -1045,65 +1113,106 @@
if ( next )
charcode++;
+ if ( charcode > 0xFFFFU )
+ return 0;
+
/* linear search */
- for ( ; charcode <= 0xFFFFU; charcode++ )
+ p = cmap->data + 14; /* ends table */
+ q = cmap->data + 16 + num_segs2; /* starts table */
+
+ for ( i = 0; i < num_segs; i++ )
{
- FT_Byte* q;
+ end = TT_NEXT_USHORT( p );
+ start = TT_NEXT_USHORT( q );
-
- p = cmap->data + 14; /* ends table */
- q = cmap->data + 16 + num_segs2; /* starts table */
-
- for ( i = 0; i < num_segs; i++ )
+ if ( charcode < start )
{
- end = TT_NEXT_USHORT( p );
- start = TT_NEXT_USHORT( q );
-
- if ( charcode >= start && charcode <= end )
- {
- p = q - 2 + num_segs2;
- delta = TT_PEEK_SHORT( p );
- p += num_segs2;
- offset = TT_PEEK_USHORT( p );
-
- /* some fonts have an incorrect last segment; */
- /* we have to catch it */
- if ( i >= num_segs - 1 &&
- start == 0xFFFFU && end == 0xFFFFU )
- {
- TT_Face face = (TT_Face)cmap->cmap.charmap.face;
- FT_Byte* limit = face->cmap_table + face->cmap_size;
-
-
- if ( offset && p + offset + 2 > limit )
- {
- delta = 1;
- offset = 0;
- }
- }
-
- if ( offset == 0xFFFFU )
- continue;
-
- if ( offset )
- {
- p += offset + ( charcode - start ) * 2;
- gindex = TT_PEEK_USHORT( p );
- if ( gindex != 0 )
- gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
- }
- else
- gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
-
+ if ( next )
+ charcode = start;
+ else
break;
- }
}
- if ( !next || gindex )
+ Again:
+ if ( charcode <= end )
+ {
+ FT_Byte* r;
+
+
+ r = q - 2 + num_segs2;
+ delta = TT_PEEK_SHORT( r );
+ r += num_segs2;
+ offset = TT_PEEK_USHORT( r );
+
+ /* some fonts have an incorrect last segment; */
+ /* we have to catch it */
+ if ( i >= num_segs - 1 &&
+ start == 0xFFFFU && end == 0xFFFFU )
+ {
+ if ( offset && r + offset + 2 > limit )
+ {
+ delta = 1;
+ offset = 0;
+ }
+ }
+
+ if ( offset == 0xFFFFU )
+ continue;
+
+ if ( offset )
+ {
+ r += offset + ( charcode - start ) * 2;
+
+ /* if r > limit, the whole segment is invalid */
+ if ( next && r > limit )
+ continue;
+
+ gindex = TT_PEEK_USHORT( r );
+ if ( gindex )
+ {
+ gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
+ if ( gindex >= (FT_UInt)face->root.num_glyphs )
+ gindex = 0;
+ }
+ }
+ else
+ {
+ gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
+
+ if ( next && gindex >= (FT_UInt)face->root.num_glyphs )
+ {
+ /* we have an invalid glyph index; if there is an overflow, */
+ /* we can adjust `charcode', otherwise the whole segment is */
+ /* invalid */
+ gindex = 0;
+
+ if ( (FT_Int)charcode + delta < 0 &&
+ (FT_Int)end + delta >= 0 )
+ charcode = (FT_UInt)( -delta );
+
+ else if ( (FT_Int)charcode + delta < 0x10000L &&
+ (FT_Int)end + delta >= 0x10000L )
+ charcode = (FT_UInt)( 0x10000L - delta );
+
+ else
+ continue;
+ }
+ }
+
+ if ( next && !gindex )
+ {
+ if ( charcode >= 0xFFFFU )
+ break;
+
+ charcode++;
+ goto Again;
+ }
+
break;
+ }
}
- if ( next && gindex )
+ if ( next )
*pcharcode = charcode;
return gindex;
@@ -1115,6 +1224,9 @@
FT_UInt32* pcharcode,
FT_Bool next )
{
+ TT_Face face = (TT_Face)cmap->cmap.charmap.face;
+ FT_Byte* limit = face->cmap_table + face->cmap_size;
+
FT_UInt num_segs2, start, end, offset;
FT_Int delta;
FT_UInt max, min, mid, num_segs;
@@ -1166,10 +1278,6 @@
if ( mid >= num_segs - 1 &&
start == 0xFFFFU && end == 0xFFFFU )
{
- TT_Face face = (TT_Face)cmap->cmap.charmap.face;
- FT_Byte* limit = face->cmap_table + face->cmap_size;
-
-
if ( offset && p + offset + 2 > limit )
{
delta = 1;
@@ -1190,7 +1298,7 @@
mid = max + 1;
/* search in segments before the current segment */
- for ( i = max ; i > 0; i-- )
+ for ( i = max; i > 0; i-- )
{
FT_UInt prev_end;
FT_Byte* old_p;
@@ -1292,13 +1400,40 @@
if ( offset )
{
p += offset + ( charcode - start ) * 2;
+
+ /* if p > limit, the whole segment is invalid */
+ if ( next && p > limit )
+ break;
+
gindex = TT_PEEK_USHORT( p );
- if ( gindex != 0 )
+ if ( gindex )
+ {
gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
+ if ( gindex >= (FT_UInt)face->root.num_glyphs )
+ gindex = 0;
+ }
}
else
+ {
gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
+ if ( next && gindex >= (FT_UInt)face->root.num_glyphs )
+ {
+ /* we have an invalid glyph index; if there is an overflow, */
+ /* we can adjust `charcode', otherwise the whole segment is */
+ /* invalid */
+ gindex = 0;
+
+ if ( (FT_Int)charcode + delta < 0 &&
+ (FT_Int)end + delta >= 0 )
+ charcode = (FT_UInt)( -delta );
+
+ else if ( (FT_Int)charcode + delta < 0x10000L &&
+ (FT_Int)end + delta >= 0x10000L )
+ charcode = (FT_UInt)( 0x10000L - delta );
+ }
+ }
+
break;
}
}
@@ -1310,7 +1445,6 @@
/* if `charcode' is not in any segment, then `mid' is */
/* the segment nearest to `charcode' */
- /* */
if ( charcode > end )
{
@@ -1409,21 +1543,24 @@
FT_DEFINE_TT_CMAP(
tt_cmap4_class_rec,
- sizeof ( TT_CMap4Rec ),
- (FT_CMap_InitFunc) tt_cmap4_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap4_char_index,
- (FT_CMap_CharNextFunc) tt_cmap4_char_next,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
+ sizeof ( TT_CMap4Rec ),
+
+ (FT_CMap_InitFunc) tt_cmap4_init, /* init */
+ (FT_CMap_DoneFunc) NULL, /* done */
+ (FT_CMap_CharIndexFunc)tt_cmap4_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) tt_cmap4_char_next, /* char_next */
+
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
4,
- (TT_CMap_ValidateFunc)tt_cmap4_validate,
- (TT_CMap_Info_GetFunc)tt_cmap4_get_info )
+ (TT_CMap_ValidateFunc)tt_cmap4_validate, /* validate */
+ (TT_CMap_Info_GetFunc)tt_cmap4_get_info /* get_cmap_info */
+ )
#endif /* TT_CONFIG_CMAP_FORMAT_4 */
@@ -1443,7 +1580,7 @@
/* */
/* NAME OFFSET TYPE DESCRIPTION */
/* */
- /* format 0 USHORT must be 4 */
+ /* format 0 USHORT must be 6 */
/* length 2 USHORT table length in bytes */
/* language 4 USHORT Mac language code */
/* */
@@ -1511,6 +1648,7 @@
p += 2 * idx;
result = TT_PEEK_USHORT( p );
}
+
return result;
}
@@ -1531,7 +1669,7 @@
if ( char_code >= 0x10000UL )
- goto Exit;
+ return 0;
if ( char_code < start )
char_code = start;
@@ -1547,10 +1685,13 @@
result = char_code;
break;
}
+
+ if ( char_code >= 0xFFFFU )
+ return 0;
+
char_code++;
}
- Exit:
*pchar_code = result;
return gindex;
}
@@ -1572,22 +1713,24 @@
FT_DEFINE_TT_CMAP(
tt_cmap6_class_rec,
- sizeof ( TT_CMapRec ),
- (FT_CMap_InitFunc) tt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap6_char_index,
- (FT_CMap_CharNextFunc) tt_cmap6_char_next,
+ sizeof ( TT_CMapRec ),
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
+ (FT_CMap_InitFunc) tt_cmap_init, /* init */
+ (FT_CMap_DoneFunc) NULL, /* done */
+ (FT_CMap_CharIndexFunc)tt_cmap6_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) tt_cmap6_char_next, /* char_next */
+
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
6,
- (TT_CMap_ValidateFunc)tt_cmap6_validate,
- (TT_CMap_Info_GetFunc)tt_cmap6_get_info )
+ (TT_CMap_ValidateFunc)tt_cmap6_validate, /* validate */
+ (TT_CMap_Info_GetFunc)tt_cmap6_get_info /* get_cmap_info */
+ )
#endif /* TT_CONFIG_CMAP_FORMAT_6 */
@@ -1602,7 +1745,7 @@
/***** *****/
/***** The purpose of this format is to easily map UTF-16 text to *****/
/***** glyph indices. Basically, the `char_code' must be in one of *****/
- /***** the following formats: *****/
+ /***** the following formats. *****/
/***** *****/
/***** - A 16-bit value that isn't part of the Unicode Surrogates *****/
/***** Area (i.e. U+D800-U+DFFF). *****/
@@ -1615,7 +1758,7 @@
/***** The `is32' table embedded in the charmap indicates whether a *****/
/***** given 16-bit value is in the surrogates area or not. *****/
/***** *****/
- /***** So, for any given `char_code', we can assert the following: *****/
+ /***** So, for any given `char_code', we can assert the following. *****/
/***** *****/
/***** If `char_hi == 0' then we must have `is32[char_lo] == 0'. *****/
/***** *****/
@@ -1770,7 +1913,10 @@
if ( char_code <= end )
{
- result = (FT_UInt)( start_id + char_code - start );
+ if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
+ return 0;
+
+ result = (FT_UInt)( start_id + ( char_code - start ) );
break;
}
}
@@ -1782,8 +1928,9 @@
tt_cmap8_char_next( TT_CMap cmap,
FT_UInt32 *pchar_code )
{
+ FT_Face face = cmap->cmap.charmap.face;
FT_UInt32 result = 0;
- FT_UInt32 char_code = *pchar_code + 1;
+ FT_UInt32 char_code;
FT_UInt gindex = 0;
FT_Byte* table = cmap->data;
FT_Byte* p = table + 8204;
@@ -1791,6 +1938,11 @@
FT_UInt32 start, end, start_id;
+ if ( *pchar_code >= 0xFFFFFFFFUL )
+ return 0;
+
+ char_code = *pchar_code + 1;
+
p = table + 8208;
for ( ; num_groups > 0; num_groups-- )
@@ -1802,18 +1954,38 @@
if ( char_code < start )
char_code = start;
+ Again:
if ( char_code <= end )
{
- gindex = (FT_UInt)( char_code - start + start_id );
- if ( gindex != 0 )
+ /* ignore invalid group */
+ if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
+ continue;
+
+ gindex = (FT_UInt)( start_id + ( char_code - start ) );
+
+ /* does first element of group point to `.notdef' glyph? */
+ if ( gindex == 0 )
{
- result = char_code;
- goto Exit;
+ if ( char_code >= 0xFFFFFFFFUL )
+ break;
+
+ char_code++;
+ goto Again;
}
+
+ /* if `gindex' is invalid, the remaining values */
+ /* in this group are invalid, too */
+ if ( gindex >= (FT_UInt)face->num_glyphs )
+ {
+ gindex = 0;
+ continue;
+ }
+
+ result = char_code;
+ break;
}
}
- Exit:
*pchar_code = result;
return gindex;
}
@@ -1835,22 +2007,24 @@
FT_DEFINE_TT_CMAP(
tt_cmap8_class_rec,
- sizeof ( TT_CMapRec ),
- (FT_CMap_InitFunc) tt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap8_char_index,
- (FT_CMap_CharNextFunc) tt_cmap8_char_next,
+ sizeof ( TT_CMapRec ),
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
+ (FT_CMap_InitFunc) tt_cmap_init, /* init */
+ (FT_CMap_DoneFunc) NULL, /* done */
+ (FT_CMap_CharIndexFunc)tt_cmap8_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) tt_cmap8_char_next, /* char_next */
+
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
8,
- (TT_CMap_ValidateFunc)tt_cmap8_validate,
- (TT_CMap_Info_GetFunc)tt_cmap8_get_info )
+ (TT_CMap_ValidateFunc)tt_cmap8_validate, /* validate */
+ (TT_CMap_Info_GetFunc)tt_cmap8_get_info /* get_cmap_info */
+ )
#endif /* TT_CONFIG_CMAP_FORMAT_8 */
@@ -1930,14 +2104,20 @@
FT_Byte* p = table + 12;
FT_UInt32 start = TT_NEXT_ULONG( p );
FT_UInt32 count = TT_NEXT_ULONG( p );
- FT_UInt32 idx = (FT_ULong)( char_code - start );
+ FT_UInt32 idx;
+ if ( char_code < start )
+ return 0;
+
+ idx = char_code - start;
+
if ( idx < count )
{
p += 2 * idx;
result = TT_PEEK_USHORT( p );
}
+
return result;
}
@@ -1947,7 +2127,7 @@
FT_UInt32 *pchar_code )
{
FT_Byte* table = cmap->data;
- FT_UInt32 char_code = *pchar_code + 1;
+ FT_UInt32 char_code;
FT_UInt gindex = 0;
FT_Byte* p = table + 12;
FT_UInt32 start = TT_NEXT_ULONG( p );
@@ -1955,10 +2135,15 @@
FT_UInt32 idx;
+ if ( *pchar_code >= 0xFFFFFFFFUL )
+ return 0;
+
+ char_code = *pchar_code + 1;
+
if ( char_code < start )
char_code = start;
- idx = (FT_UInt32)( char_code - start );
+ idx = char_code - start;
p += 2 * idx;
for ( ; idx < count; idx++ )
@@ -1966,6 +2151,10 @@
gindex = TT_NEXT_USHORT( p );
if ( gindex != 0 )
break;
+
+ if ( char_code >= 0xFFFFFFFFUL )
+ return 0;
+
char_code++;
}
@@ -1990,22 +2179,24 @@
FT_DEFINE_TT_CMAP(
tt_cmap10_class_rec,
- sizeof ( TT_CMapRec ),
- (FT_CMap_InitFunc) tt_cmap_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap10_char_index,
- (FT_CMap_CharNextFunc) tt_cmap10_char_next,
+ sizeof ( TT_CMapRec ),
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
+ (FT_CMap_InitFunc) tt_cmap_init, /* init */
+ (FT_CMap_DoneFunc) NULL, /* done */
+ (FT_CMap_CharIndexFunc)tt_cmap10_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) tt_cmap10_char_next, /* char_next */
+
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
10,
- (TT_CMap_ValidateFunc)tt_cmap10_validate,
- (TT_CMap_Info_GetFunc)tt_cmap10_get_info )
+ (TT_CMap_ValidateFunc)tt_cmap10_validate, /* validate */
+ (TT_CMap_Info_GetFunc)tt_cmap10_get_info /* get_cmap_info */
+ )
#endif /* TT_CONFIG_CMAP_FORMAT_10 */
@@ -2134,6 +2325,7 @@
static void
tt_cmap12_next( TT_CMap12 cmap )
{
+ FT_Face face = cmap->cmap.cmap.charmap.face;
FT_Byte* p;
FT_ULong start, end, start_id, char_code;
FT_ULong n;
@@ -2155,18 +2347,38 @@
if ( char_code < start )
char_code = start;
- for ( ; char_code <= end; char_code++ )
+ Again:
+ if ( char_code <= end )
{
- gindex = (FT_UInt)( start_id + char_code - start );
+ /* ignore invalid group */
+ if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
+ continue;
- if ( gindex )
+ gindex = (FT_UInt)( start_id + ( char_code - start ) );
+
+ /* does first element of group point to `.notdef' glyph? */
+ if ( gindex == 0 )
{
- cmap->cur_charcode = char_code;;
- cmap->cur_gindex = gindex;
- cmap->cur_group = n;
+ if ( char_code >= 0xFFFFFFFFUL )
+ goto Fail;
- return;
+ char_code++;
+ goto Again;
}
+
+ /* if `gindex' is invalid, the remaining values */
+ /* in this group are invalid, too */
+ if ( gindex >= (FT_UInt)face->num_glyphs )
+ {
+ gindex = 0;
+ continue;
+ }
+
+ cmap->cur_charcode = char_code;
+ cmap->cur_gindex = gindex;
+ cmap->cur_group = n;
+
+ return;
}
}
@@ -2196,7 +2408,12 @@
end = 0xFFFFFFFFUL;
if ( next )
+ {
+ if ( char_code >= 0xFFFFFFFFUL )
+ return 0;
+
char_code++;
+ }
min = 0;
max = num_groups;
@@ -2217,20 +2434,24 @@
else
{
start_id = TT_PEEK_ULONG( p );
- gindex = (FT_UInt)( start_id + char_code - start );
+ /* reject invalid glyph index */
+ if ( start_id > 0xFFFFFFFFUL - ( char_code - start ) )
+ gindex = 0;
+ else
+ gindex = (FT_UInt)( start_id + ( char_code - start ) );
break;
}
}
if ( next )
{
+ FT_Face face = cmap->cmap.charmap.face;
TT_CMap12 cmap12 = (TT_CMap12)cmap;
/* if `char_code' is not in any group, then `mid' is */
/* the group nearest to `char_code' */
- /* */
if ( char_code > end )
{
@@ -2243,6 +2464,9 @@
cmap12->cur_charcode = char_code;
cmap12->cur_group = mid;
+ if ( gindex >= (FT_UInt)face->num_glyphs )
+ gindex = 0;
+
if ( !gindex )
{
tt_cmap12_next( cmap12 );
@@ -2253,8 +2477,7 @@
else
cmap12->cur_gindex = gindex;
- if ( gindex )
- *pchar_code = cmap12->cur_charcode;
+ *pchar_code = cmap12->cur_charcode;
}
return gindex;
@@ -2274,23 +2497,17 @@
FT_UInt32 *pchar_code )
{
TT_CMap12 cmap12 = (TT_CMap12)cmap;
- FT_ULong gindex;
+ FT_UInt gindex;
- if ( cmap12->cur_charcode >= 0xFFFFFFFFUL )
- return 0;
-
/* no need to search */
if ( cmap12->valid && cmap12->cur_charcode == *pchar_code )
{
tt_cmap12_next( cmap12 );
if ( cmap12->valid )
{
- gindex = cmap12->cur_gindex;
-
- /* XXX: check cur_charcode overflow is expected */
- if ( gindex )
- *pchar_code = (FT_UInt32)cmap12->cur_charcode;
+ gindex = cmap12->cur_gindex;
+ *pchar_code = (FT_UInt32)cmap12->cur_charcode;
}
else
gindex = 0;
@@ -2298,8 +2515,7 @@
else
gindex = tt_cmap12_char_map_binary( cmap, pchar_code, 1 );
- /* XXX: check gindex overflow is expected */
- return (FT_UInt32)gindex;
+ return gindex;
}
@@ -2319,22 +2535,24 @@
FT_DEFINE_TT_CMAP(
tt_cmap12_class_rec,
- sizeof ( TT_CMap12Rec ),
- (FT_CMap_InitFunc) tt_cmap12_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap12_char_index,
- (FT_CMap_CharNextFunc) tt_cmap12_char_next,
+ sizeof ( TT_CMap12Rec ),
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
+ (FT_CMap_InitFunc) tt_cmap12_init, /* init */
+ (FT_CMap_DoneFunc) NULL, /* done */
+ (FT_CMap_CharIndexFunc)tt_cmap12_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) tt_cmap12_char_next, /* char_next */
+
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
12,
- (TT_CMap_ValidateFunc)tt_cmap12_validate,
- (TT_CMap_Info_GetFunc)tt_cmap12_get_info )
+ (TT_CMap_ValidateFunc)tt_cmap12_validate, /* validate */
+ (TT_CMap_Info_GetFunc)tt_cmap12_get_info /* get_cmap_info */
+ )
#endif /* TT_CONFIG_CMAP_FORMAT_12 */
@@ -2458,6 +2676,7 @@
static void
tt_cmap13_next( TT_CMap13 cmap )
{
+ FT_Face face = cmap->cmap.cmap.charmap.face;
FT_Byte* p;
FT_ULong start, end, glyph_id, char_code;
FT_ULong n;
@@ -2483,9 +2702,9 @@
{
gindex = (FT_UInt)glyph_id;
- if ( gindex )
+ if ( gindex && gindex < (FT_UInt)face->num_glyphs )
{
- cmap->cur_charcode = char_code;;
+ cmap->cur_charcode = char_code;
cmap->cur_gindex = gindex;
cmap->cur_group = n;
@@ -2520,7 +2739,12 @@
end = 0xFFFFFFFFUL;
if ( next )
+ {
+ if ( char_code >= 0xFFFFFFFFUL )
+ return 0;
+
char_code++;
+ }
min = 0;
max = num_groups;
@@ -2548,6 +2772,7 @@
if ( next )
{
+ FT_Face face = cmap->cmap.charmap.face;
TT_CMap13 cmap13 = (TT_CMap13)cmap;
@@ -2565,6 +2790,9 @@
cmap13->cur_charcode = char_code;
cmap13->cur_group = mid;
+ if ( gindex >= (FT_UInt)face->num_glyphs )
+ gindex = 0;
+
if ( !gindex )
{
tt_cmap13_next( cmap13 );
@@ -2575,8 +2803,7 @@
else
cmap13->cur_gindex = gindex;
- if ( gindex )
- *pchar_code = cmap13->cur_charcode;
+ *pchar_code = cmap13->cur_charcode;
}
return gindex;
@@ -2599,18 +2826,14 @@
FT_UInt gindex;
- if ( cmap13->cur_charcode >= 0xFFFFFFFFUL )
- return 0;
-
/* no need to search */
if ( cmap13->valid && cmap13->cur_charcode == *pchar_code )
{
tt_cmap13_next( cmap13 );
if ( cmap13->valid )
{
- gindex = cmap13->cur_gindex;
- if ( gindex )
- *pchar_code = cmap13->cur_charcode;
+ gindex = cmap13->cur_gindex;
+ *pchar_code = cmap13->cur_charcode;
}
else
gindex = 0;
@@ -2638,22 +2861,24 @@
FT_DEFINE_TT_CMAP(
tt_cmap13_class_rec,
- sizeof ( TT_CMap13Rec ),
- (FT_CMap_InitFunc) tt_cmap13_init,
- (FT_CMap_DoneFunc) NULL,
- (FT_CMap_CharIndexFunc)tt_cmap13_char_index,
- (FT_CMap_CharNextFunc) tt_cmap13_char_next,
+ sizeof ( TT_CMap13Rec ),
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
+ (FT_CMap_InitFunc) tt_cmap13_init, /* init */
+ (FT_CMap_DoneFunc) NULL, /* done */
+ (FT_CMap_CharIndexFunc)tt_cmap13_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) tt_cmap13_char_next, /* char_next */
+
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
13,
- (TT_CMap_ValidateFunc)tt_cmap13_validate,
- (TT_CMap_Info_GetFunc)tt_cmap13_get_info )
+ (TT_CMap_ValidateFunc)tt_cmap13_validate, /* validate */
+ (TT_CMap_Info_GetFunc)tt_cmap13_get_info /* get_cmap_info */
+ )
#endif /* TT_CONFIG_CMAP_FORMAT_13 */
@@ -2744,7 +2969,7 @@
cmap->max_results = 0;
- if ( memory != NULL && cmap->results != NULL )
+ if ( memory && cmap->results )
FT_FREE( cmap->results );
}
@@ -2836,17 +3061,22 @@
/* through the normal Unicode cmap, no GIDs, just check order) */
if ( defOff != 0 )
{
- FT_Byte* defp = table + defOff;
- FT_ULong numRanges = TT_NEXT_ULONG( defp );
+ FT_Byte* defp = table + defOff;
+ FT_ULong numRanges;
FT_ULong i;
- FT_ULong lastBase = 0;
+ FT_ULong lastBase = 0;
+ if ( defp + 4 > valid->limit )
+ FT_INVALID_TOO_SHORT;
+
+ numRanges = TT_NEXT_ULONG( defp );
+
/* defp + numRanges * 4 > valid->limit ? */
if ( numRanges > (FT_ULong)( valid->limit - defp ) / 4 )
FT_INVALID_TOO_SHORT;
- for ( i = 0; i < numRanges; ++i )
+ for ( i = 0; i < numRanges; i++ )
{
FT_ULong base = TT_NEXT_UINT24( defp );
FT_ULong cnt = FT_NEXT_BYTE( defp );
@@ -2865,16 +3095,21 @@
/* and the non-default table (these glyphs are specified here) */
if ( nondefOff != 0 )
{
- FT_Byte* ndp = table + nondefOff;
- FT_ULong numMappings = TT_NEXT_ULONG( ndp );
- FT_ULong i, lastUni = 0;
+ FT_Byte* ndp = table + nondefOff;
+ FT_ULong numMappings;
+ FT_ULong i, lastUni = 0;
- /* numMappings * 4 > (FT_ULong)( valid->limit - ndp ) ? */
- if ( numMappings > ( (FT_ULong)( valid->limit - ndp ) ) / 4 )
+ if ( ndp + 4 > valid->limit )
FT_INVALID_TOO_SHORT;
- for ( i = 0; i < numMappings; ++i )
+ numMappings = TT_NEXT_ULONG( ndp );
+
+ /* numMappings * 5 > (FT_ULong)( valid->limit - ndp ) ? */
+ if ( numMappings > ( (FT_ULong)( valid->limit - ndp ) ) / 5 )
+ FT_INVALID_TOO_SHORT;
+
+ for ( i = 0; i < numMappings; i++ )
{
FT_ULong uni = TT_NEXT_UINT24( ndp );
FT_ULong gid = TT_NEXT_USHORT( ndp );
@@ -2962,7 +3197,7 @@
if ( char_code < start )
max = mid;
- else if ( char_code > start+cnt )
+ else if ( char_code > start + cnt )
min = mid + 1;
else
return TRUE;
@@ -3115,7 +3350,7 @@
return NULL;
result = cmap14->results;
- for ( i = 0; i < count; ++i )
+ for ( i = 0; i < count; i++ )
{
result[i] = (FT_UInt32)TT_NEXT_UINT24( p );
p += 8;
@@ -3140,7 +3375,7 @@
if ( tt_cmap14_ensure( cmap14, ( count + 1 ), memory ) )
return NULL;
- for ( q = cmap14->results; count > 0; --count )
+ for ( q = cmap14->results; count > 0; count-- )
{
FT_UInt32 varSel = TT_NEXT_UINT24( p );
FT_ULong defOff = TT_NEXT_ULONG( p );
@@ -3199,7 +3434,7 @@
if ( tt_cmap14_ensure( cmap14, ( cnt + 1 ), memory ) )
return NULL;
- for ( q = cmap14->results; numRanges > 0; --numRanges )
+ for ( q = cmap14->results; numRanges > 0; numRanges-- )
{
FT_UInt32 uni = (FT_UInt32)TT_NEXT_UINT24( p );
@@ -3236,7 +3471,7 @@
return NULL;
ret = cmap14->results;
- for ( i = 0; i < numMappings; ++i )
+ for ( i = 0; i < numMappings; i++ )
{
ret[i] = (FT_UInt32)TT_NEXT_UINT24( p );
p += 2;
@@ -3316,14 +3551,14 @@
ni = 1;
i = 0;
- for ( ;; )
+ for (;;)
{
if ( nuni > duni + dcnt )
{
- for ( k = 0; k <= dcnt; ++k )
+ for ( k = 0; k <= dcnt; k++ )
ret[i++] = duni + k;
- ++di;
+ di++;
if ( di > numRanges )
break;
@@ -3337,7 +3572,7 @@
ret[i++] = nuni;
/* If it is within the default range then ignore it -- */
/* that should not have happened */
- ++ni;
+ ni++;
if ( ni > numMappings )
break;
@@ -3356,7 +3591,7 @@
{
ret[i++] = (FT_UInt32)TT_NEXT_UINT24( p );
p += 2;
- ++ni;
+ ni++;
}
}
else if ( di <= numRanges )
@@ -3364,7 +3599,7 @@
/* If we get here then we have run out of all non-default */
/* mappings. We have read one default range which we haven't */
/* stored and there may be others that need to be read. */
- for ( k = 0; k <= dcnt; ++k )
+ for ( k = 0; k <= dcnt; k++ )
ret[i++] = duni + k;
while ( di < numRanges )
@@ -3372,9 +3607,9 @@
duni = (FT_UInt32)TT_NEXT_UINT24( dp );
dcnt = FT_NEXT_BYTE( dp );
- for ( k = 0; k <= dcnt; ++k )
+ for ( k = 0; k <= dcnt; k++ )
ret[i++] = duni + k;
- ++di;
+ di++;
}
}
@@ -3387,27 +3622,133 @@
FT_DEFINE_TT_CMAP(
tt_cmap14_class_rec,
- sizeof ( TT_CMap14Rec ),
- (FT_CMap_InitFunc) tt_cmap14_init,
- (FT_CMap_DoneFunc) tt_cmap14_done,
- (FT_CMap_CharIndexFunc)tt_cmap14_char_index,
- (FT_CMap_CharNextFunc) tt_cmap14_char_next,
+ sizeof ( TT_CMap14Rec ),
- /* Format 14 extension functions */
- (FT_CMap_CharVarIndexFunc) tt_cmap14_char_var_index,
- (FT_CMap_CharVarIsDefaultFunc)tt_cmap14_char_var_isdefault,
- (FT_CMap_VariantListFunc) tt_cmap14_variants,
- (FT_CMap_CharVariantListFunc) tt_cmap14_char_variants,
- (FT_CMap_VariantCharListFunc) tt_cmap14_variant_chars,
+ (FT_CMap_InitFunc) tt_cmap14_init, /* init */
+ (FT_CMap_DoneFunc) tt_cmap14_done, /* done */
+ (FT_CMap_CharIndexFunc)tt_cmap14_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) tt_cmap14_char_next, /* char_next */
+
+ /* Format 14 extension functions */
+ (FT_CMap_CharVarIndexFunc) tt_cmap14_char_var_index,
+ (FT_CMap_CharVarIsDefaultFunc)tt_cmap14_char_var_isdefault,
+ (FT_CMap_VariantListFunc) tt_cmap14_variants,
+ (FT_CMap_CharVariantListFunc) tt_cmap14_char_variants,
+ (FT_CMap_VariantCharListFunc) tt_cmap14_variant_chars,
14,
- (TT_CMap_ValidateFunc)tt_cmap14_validate,
- (TT_CMap_Info_GetFunc)tt_cmap14_get_info )
+ (TT_CMap_ValidateFunc)tt_cmap14_validate, /* validate */
+ (TT_CMap_Info_GetFunc)tt_cmap14_get_info /* get_cmap_info */
+ )
#endif /* TT_CONFIG_CMAP_FORMAT_14 */
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** SYNTHETIC UNICODE *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /* This charmap is generated using postscript glyph names. */
+
+#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+ FT_CALLBACK_DEF( const char * )
+ tt_get_glyph_name( TT_Face face,
+ FT_UInt idx )
+ {
+ FT_String* PSname;
+
+
+ tt_face_get_ps_name( face, idx, &PSname );
+
+ return PSname;
+ }
+
+
+ FT_CALLBACK_DEF( FT_Error )
+ tt_cmap_unicode_init( PS_Unicodes unicodes,
+ FT_Pointer pointer )
+ {
+ TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
+ FT_Memory memory = FT_FACE_MEMORY( face );
+ FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
+
+ FT_UNUSED( pointer );
+
+
+ return psnames->unicodes_init( memory,
+ unicodes,
+ face->root.num_glyphs,
+ (PS_GetGlyphNameFunc)&tt_get_glyph_name,
+ (PS_FreeGlyphNameFunc)NULL,
+ (FT_Pointer)face );
+ }
+
+
+ FT_CALLBACK_DEF( void )
+ tt_cmap_unicode_done( PS_Unicodes unicodes )
+ {
+ FT_Face face = FT_CMAP_FACE( unicodes );
+ FT_Memory memory = FT_FACE_MEMORY( face );
+
+
+ FT_FREE( unicodes->maps );
+ unicodes->num_maps = 0;
+ }
+
+
+ FT_CALLBACK_DEF( FT_UInt )
+ tt_cmap_unicode_char_index( PS_Unicodes unicodes,
+ FT_UInt32 char_code )
+ {
+ TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
+ FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
+
+
+ return psnames->unicodes_char_index( unicodes, char_code );
+ }
+
+
+ FT_CALLBACK_DEF( FT_UInt32 )
+ tt_cmap_unicode_char_next( PS_Unicodes unicodes,
+ FT_UInt32 *pchar_code )
+ {
+ TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
+ FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
+
+
+ return psnames->unicodes_char_next( unicodes, pchar_code );
+ }
+
+
+ FT_DEFINE_TT_CMAP(
+ tt_cmap_unicode_class_rec,
+
+ sizeof ( PS_UnicodesRec ),
+
+ (FT_CMap_InitFunc) tt_cmap_unicode_init, /* init */
+ (FT_CMap_DoneFunc) tt_cmap_unicode_done, /* done */
+ (FT_CMap_CharIndexFunc)tt_cmap_unicode_char_index, /* char_index */
+ (FT_CMap_CharNextFunc) tt_cmap_unicode_char_next, /* char_next */
+
+ (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
+ (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
+ (FT_CMap_VariantListFunc) NULL, /* variant_list */
+ (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
+ (FT_CMap_VariantCharListFunc) NULL, /* variantchar_list */
+
+ ~0U,
+ (TT_CMap_ValidateFunc)NULL, /* validate */
+ (TT_CMap_Info_GetFunc)NULL /* get_cmap_info */
+ )
+
+#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
+
#ifndef FT_CONFIG_OPTION_PIC
static const TT_CMap_Class tt_cmap_classes[] =
@@ -3542,7 +3883,7 @@
error = clazz->validate( cmap, FT_VALIDATOR( &valid ) );
}
- if ( valid.validator.error == 0 )
+ if ( !valid.validator.error )
{
FT_CMap ttcmap;
@@ -3568,7 +3909,7 @@
}
}
- if ( *pclazz == NULL )
+ if ( !*pclazz )
{
FT_TRACE0(( "tt_face_build_cmaps:"
" unsupported cmap sub-table ignored\n" ));
@@ -3587,8 +3928,10 @@
FT_CMap cmap = (FT_CMap)charmap;
TT_CMap_Class clazz = (TT_CMap_Class)cmap->clazz;
-
- return clazz->get_cmap_info( charmap, cmap_info );
+ if ( clazz->get_cmap_info )
+ return clazz->get_cmap_info( charmap, cmap_info );
+ else
+ return FT_THROW( Invalid_CharMap_Format );
}
diff --git a/src/sfnt/ttcmap.h b/src/sfnt/ttcmap.h
index b7ea8ee..d264d99 100644
--- a/src/sfnt/ttcmap.h
+++ b/src/sfnt/ttcmap.h
@@ -4,7 +4,7 @@
/* */
/* TrueType character mapping table (cmap) support (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTCMAP_H__
-#define __TTCMAP_H__
+#ifndef TTCMAP_H_
+#define TTCMAP_H_
#include <ft2build.h>
@@ -141,6 +141,8 @@
#define TT_VALID_GLYPH_COUNT( x ) TT_VALIDATOR( x )->num_glyphs
+ FT_CALLBACK_TABLE const TT_CMap_ClassRec tt_cmap_unicode_class_rec;
+
FT_LOCAL( FT_Error )
tt_face_build_cmaps( TT_Face face );
@@ -152,7 +154,7 @@
FT_END_HEADER
-#endif /* __TTCMAP_H__ */
+#endif /* TTCMAP_H_ */
/* END */
diff --git a/src/sfnt/ttcmapc.h b/src/sfnt/ttcmapc.h
index 4a48940..4980e9d 100644
--- a/src/sfnt/ttcmapc.h
+++ b/src/sfnt/ttcmapc.h
@@ -4,7 +4,7 @@
/* */
/* TT CMAP classes definitions (specification only). */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/sfnt/ttkern.c b/src/sfnt/ttkern.c
index 4fccc53..68f15a2 100644
--- a/src/sfnt/ttkern.c
+++ b/src/sfnt/ttkern.c
@@ -5,7 +5,7 @@
/* Load the basic TrueType kerning table. This doesn't handle */
/* kerning data within the GPOS table at the moment. */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -85,7 +85,7 @@
for ( nn = 0; nn < num_tables; nn++ )
{
- FT_UInt num_pairs, length, coverage;
+ FT_UInt num_pairs, length, coverage, format;
FT_Byte* p_next;
FT_UInt32 mask = (FT_UInt32)1UL << nn;
@@ -107,9 +107,15 @@
if ( p_next > p_limit ) /* handle broken table */
p_next = p_limit;
+ format = coverage >> 8;
+
+ /* we currently only support format 0 kerning tables */
+ if ( format != 0 )
+ goto NextTable;
+
/* only use horizontal kerning tables */
- if ( ( coverage & ~8U ) != 0x0001 ||
- p + 8 > p_limit )
+ if ( ( coverage & 3U ) != 0x0001 ||
+ p + 8 > p_next )
goto NextTable;
num_pairs = FT_NEXT_USHORT( p );
@@ -214,8 +220,7 @@
if ( ( face->kern_avail_bits & mask ) == 0 )
goto NextTable;
- if ( p + 8 > next )
- goto NextTable;
+ FT_ASSERT( p + 8 <= next ); /* tested in tt_face_load_kern */
num_pairs = FT_NEXT_USHORT( p );
p += 6;
diff --git a/src/sfnt/ttkern.h b/src/sfnt/ttkern.h
index 89cb24f..4e45d09 100644
--- a/src/sfnt/ttkern.h
+++ b/src/sfnt/ttkern.h
@@ -5,7 +5,7 @@
/* Load the basic TrueType kerning table. This doesn't handle */
/* kerning data within the GPOS table at the moment. */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __TTKERN_H__
-#define __TTKERN_H__
+#ifndef TTKERN_H_
+#define TTKERN_H_
#include <ft2build.h>
@@ -46,7 +46,7 @@
FT_END_HEADER
-#endif /* __TTKERN_H__ */
+#endif /* TTKERN_H_ */
/* END */
diff --git a/src/sfnt/ttload.c b/src/sfnt/ttload.c
index ad2975d..a86a546 100644
--- a/src/sfnt/ttload.c
+++ b/src/sfnt/ttload.c
@@ -5,7 +5,7 @@
/* Load the basic TrueType tables, i.e., tables that can be either in */
/* TTF or OTF fonts (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -151,7 +151,8 @@
/* Here, we */
/* */
- /* - check that `num_tables' is valid (and adjust it if necessary) */
+ /* - check that `num_tables' is valid (and adjust it if necessary); */
+ /* also return the number of valid table entries */
/* */
/* - look for a `head' table, check its size, and parse it to check */
/* whether its `magic' field is correctly set */
@@ -167,7 +168,8 @@
/* */
static FT_Error
check_table_dir( SFNT_Header sfnt,
- FT_Stream stream )
+ FT_Stream stream,
+ FT_UShort* valid )
{
FT_Error error;
FT_UShort nn, valid_entries = 0;
@@ -209,7 +211,10 @@
/* we ignore invalid tables */
if ( table.Offset > stream->size )
+ {
+ FT_TRACE2(( "check_table_dir: table entry %d invalid\n", nn ));
continue;
+ }
else if ( table.Length > stream->size - table.Offset )
{
/* Some tables have such a simple structure that clipping its */
@@ -273,11 +278,11 @@
has_meta = 1;
}
- sfnt->num_tables = valid_entries;
+ *valid = valid_entries;
- if ( sfnt->num_tables == 0 )
+ if ( !valid_entries )
{
- FT_TRACE2(( "check_table_dir: no tables found\n" ));
+ FT_TRACE2(( "check_table_dir: no valid tables found\n" ));
error = FT_THROW( Unknown_File_Format );
goto Exit;
}
@@ -333,8 +338,7 @@
SFNT_HeaderRec sfnt;
FT_Error error;
FT_Memory memory = stream->memory;
- TT_TableRec* entry;
- FT_Int nn;
+ FT_UShort nn, valid_entries = 0;
static const FT_Frame_Field offset_table_fields[] =
{
@@ -375,85 +379,114 @@
if ( sfnt.format_tag != TTAG_OTTO )
{
/* check first */
- error = check_table_dir( &sfnt, stream );
+ error = check_table_dir( &sfnt, stream, &valid_entries );
if ( error )
{
FT_TRACE2(( "tt_face_load_font_dir:"
" invalid table directory for TrueType\n" ));
-
goto Exit;
}
}
+ else
+ valid_entries = sfnt.num_tables;
- face->num_tables = sfnt.num_tables;
+ face->num_tables = valid_entries;
face->format_tag = sfnt.format_tag;
if ( FT_QNEW_ARRAY( face->dir_tables, face->num_tables ) )
goto Exit;
- if ( FT_STREAM_SEEK( sfnt.offset + 12 ) ||
- FT_FRAME_ENTER( face->num_tables * 16L ) )
+ if ( FT_STREAM_SEEK( sfnt.offset + 12 ) ||
+ FT_FRAME_ENTER( sfnt.num_tables * 16L ) )
goto Exit;
- entry = face->dir_tables;
-
FT_TRACE2(( "\n"
" tag offset length checksum\n"
" ----------------------------------\n" ));
+ valid_entries = 0;
for ( nn = 0; nn < sfnt.num_tables; nn++ )
{
- entry->Tag = FT_GET_TAG4();
- entry->CheckSum = FT_GET_ULONG();
- entry->Offset = FT_GET_ULONG();
- entry->Length = FT_GET_ULONG();
+ TT_TableRec entry;
+ FT_UShort i;
+ FT_Bool duplicate;
+
+
+ entry.Tag = FT_GET_TAG4();
+ entry.CheckSum = FT_GET_ULONG();
+ entry.Offset = FT_GET_ULONG();
+ entry.Length = FT_GET_ULONG();
/* ignore invalid tables that can't be sanitized */
- if ( entry->Offset > stream->size )
+ if ( entry.Offset > stream->size )
continue;
- else if ( entry->Length > stream->size - entry->Offset )
+ else if ( entry.Length > stream->size - entry.Offset )
{
- if ( entry->Tag == TTAG_hmtx ||
- entry->Tag == TTAG_vmtx )
+ if ( entry.Tag == TTAG_hmtx ||
+ entry.Tag == TTAG_vmtx )
{
#ifdef FT_DEBUG_LEVEL_TRACE
- FT_ULong old_length = entry->Length;
+ FT_ULong old_length = entry.Length;
#endif
/* make metrics table length a multiple of 4 */
- entry->Length = ( stream->size - entry->Offset ) & ~3U;
+ entry.Length = ( stream->size - entry.Offset ) & ~3U;
FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx"
- " (sanitized; original length %08lx)\n",
- (FT_Char)( entry->Tag >> 24 ),
- (FT_Char)( entry->Tag >> 16 ),
- (FT_Char)( entry->Tag >> 8 ),
- (FT_Char)( entry->Tag ),
- entry->Offset,
- entry->Length,
- entry->CheckSum,
+ " (sanitized; original length %08lx)",
+ (FT_Char)( entry.Tag >> 24 ),
+ (FT_Char)( entry.Tag >> 16 ),
+ (FT_Char)( entry.Tag >> 8 ),
+ (FT_Char)( entry.Tag ),
+ entry.Offset,
+ entry.Length,
+ entry.CheckSum,
old_length ));
- entry++;
}
else
continue;
}
+#ifdef FT_DEBUG_LEVEL_TRACE
+ else
+ FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx",
+ (FT_Char)( entry.Tag >> 24 ),
+ (FT_Char)( entry.Tag >> 16 ),
+ (FT_Char)( entry.Tag >> 8 ),
+ (FT_Char)( entry.Tag ),
+ entry.Offset,
+ entry.Length,
+ entry.CheckSum ));
+#endif
+
+ /* ignore duplicate tables – the first one wins */
+ duplicate = 0;
+ for ( i = 0; i < valid_entries; i++ )
+ {
+ if ( face->dir_tables[i].Tag == entry.Tag )
+ {
+ duplicate = 1;
+ break;
+ }
+ }
+ if ( duplicate )
+ {
+ FT_TRACE2(( " (duplicate, ignored)\n" ));
+ continue;
+ }
else
{
- FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx\n",
- (FT_Char)( entry->Tag >> 24 ),
- (FT_Char)( entry->Tag >> 16 ),
- (FT_Char)( entry->Tag >> 8 ),
- (FT_Char)( entry->Tag ),
- entry->Offset,
- entry->Length,
- entry->CheckSum ));
- entry++;
+ FT_TRACE2(( "\n" ));
+
+ /* we finally have a valid entry */
+ face->dir_tables[valid_entries++] = entry;
}
}
+ /* final adjustment to number of tables */
+ face->num_tables = valid_entries;
+
FT_FRAME_EXIT();
FT_TRACE2(( "table directory loaded\n\n" ));
@@ -646,7 +679,7 @@
/*************************************************************************/
/* */
/* <Function> */
- /* tt_face_load_max_profile */
+ /* tt_face_load_maxp */
/* */
/* <Description> */
/* Loads the maximum profile into a face object. */
@@ -742,15 +775,6 @@
maxProfile->maxTwilightPoints = 0xFFFFU - 4;
}
-
- /* we arbitrarily limit recursion to avoid stack exhaustion */
- if ( maxProfile->maxComponentDepth > 100 )
- {
- FT_TRACE0(( "tt_face_load_maxp:"
- " abnormally large component depth (%d) set to 100\n",
- maxProfile->maxComponentDepth ));
- maxProfile->maxComponentDepth = 100;
- }
}
FT_TRACE3(( "numGlyphs: %u\n", maxProfile->numGlyphs ));
@@ -784,7 +808,6 @@
FT_Memory memory = stream->memory;
FT_ULong table_pos, table_len;
FT_ULong storage_start, storage_limit;
- FT_UInt count;
TT_NameTable table;
static const FT_Frame_Field name_table_fields[] =
@@ -802,7 +825,7 @@
static const FT_Frame_Field name_record_fields[] =
{
#undef FT_STRUCTURE
-#define FT_STRUCTURE TT_NameEntryRec
+#define FT_STRUCTURE TT_NameRec
/* no FT_FRAME_START */
FT_FRAME_USHORT( platformID ),
@@ -814,6 +837,17 @@
FT_FRAME_END
};
+ static const FT_Frame_Field langTag_record_fields[] =
+ {
+#undef FT_STRUCTURE
+#define FT_STRUCTURE TT_LangTagRec
+
+ /* no FT_FRAME_START */
+ FT_FRAME_USHORT( stringLength ),
+ FT_FRAME_USHORT( stringOffset ),
+ FT_FRAME_END
+ };
+
table = &face->name_table;
table->stream = stream;
@@ -824,18 +858,17 @@
table_pos = FT_STREAM_POS();
-
if ( FT_STREAM_READ_FIELDS( name_table_fields, table ) )
goto Exit;
- /* Some popular Asian fonts have an invalid `storageOffset' value */
- /* (it should be at least "6 + 12*num_names"). However, the string */
- /* offsets, computed as "storageOffset + entry->stringOffset", are */
- /* valid pointers within the name table... */
- /* */
- /* We thus can't check `storageOffset' right now. */
- /* */
- storage_start = table_pos + 6 + 12*table->numNameRecords;
+ /* Some popular Asian fonts have an invalid `storageOffset' value (it */
+ /* should be at least `6 + 12*numNameRecords'). However, the string */
+ /* offsets, computed as `storageOffset + entry->stringOffset', are */
+ /* valid pointers within the name table... */
+ /* */
+ /* We thus can't check `storageOffset' right now. */
+ /* */
+ storage_start = table_pos + 6 + 12 * table->numNameRecords;
storage_limit = table_pos + table_len;
if ( storage_start > storage_limit )
@@ -845,18 +878,56 @@
goto Exit;
}
- /* Allocate the array of name records. */
- count = table->numNameRecords;
- table->numNameRecords = 0;
+ /* `name' format 1 contains additional language tag records, */
+ /* which we load first */
+ if ( table->format == 1 )
+ {
+ if ( FT_STREAM_SEEK( storage_start ) ||
+ FT_READ_USHORT( table->numLangTagRecords ) )
+ goto Exit;
- if ( FT_NEW_ARRAY( table->names, count ) ||
- FT_FRAME_ENTER( count * 12 ) )
+ storage_start += 2 + 4 * table->numLangTagRecords;
+
+ /* allocate language tag records array */
+ if ( FT_NEW_ARRAY( table->langTags, table->numLangTagRecords ) ||
+ FT_FRAME_ENTER( table->numLangTagRecords * 4 ) )
+ goto Exit;
+
+ /* load language tags */
+ {
+ TT_LangTag entry = table->langTags;
+ TT_LangTag limit = entry + table->numLangTagRecords;
+
+
+ for ( ; entry < limit; entry++ )
+ {
+ (void)FT_STREAM_READ_FIELDS( langTag_record_fields, entry );
+
+ /* check that the langTag string is within the table */
+ entry->stringOffset += table_pos + table->storageOffset;
+ if ( entry->stringOffset < storage_start ||
+ entry->stringOffset + entry->stringLength > storage_limit )
+ {
+ /* invalid entry; ignore it */
+ entry->stringLength = 0;
+ }
+ }
+ }
+
+ FT_FRAME_EXIT();
+
+ (void)FT_STREAM_SEEK( table_pos + 6 );
+ }
+
+ /* allocate name records array */
+ if ( FT_NEW_ARRAY( table->names, table->numNameRecords ) ||
+ FT_FRAME_ENTER( table->numNameRecords * 12 ) )
goto Exit;
- /* Load the name records and determine how much storage is needed */
- /* to hold the strings themselves. */
+ /* load name records */
{
- TT_NameEntryRec* entry = table->names;
+ TT_Name entry = table->names;
+ FT_UInt count = table->numNameRecords;
for ( ; count > 0; count-- )
@@ -873,22 +944,37 @@
if ( entry->stringOffset < storage_start ||
entry->stringOffset + entry->stringLength > storage_limit )
{
- /* invalid entry - ignore it */
- entry->stringOffset = 0;
- entry->stringLength = 0;
+ /* invalid entry; ignore it */
continue;
}
+ /* assure that we have a valid language tag ID, and */
+ /* that the corresponding langTag entry is valid, too */
+ if ( table->format == 1 && entry->languageID >= 0x8000U )
+ {
+ if ( entry->languageID - 0x8000U >= table->numLangTagRecords ||
+ !table->langTags[entry->languageID - 0x8000U].stringLength )
+ {
+ /* invalid entry; ignore it */
+ continue;
+ }
+ }
+
entry++;
}
- table->numNameRecords = (FT_UInt)( entry - table->names );
+ /* reduce array size to the actually used elements */
+ count = (FT_UInt)( entry - table->names );
+ (void)FT_RENEW_ARRAY( table->names,
+ table->numNameRecords,
+ count );
+ table->numNameRecords = count;
}
FT_FRAME_EXIT();
/* everything went well, update face->num_names */
- face->num_names = (FT_UShort) table->numNameRecords;
+ face->num_names = (FT_UShort)table->numNameRecords;
Exit:
return error;
@@ -898,7 +984,7 @@
/*************************************************************************/
/* */
/* <Function> */
- /* tt_face_free_names */
+ /* tt_face_free_name */
/* */
/* <Description> */
/* Frees the name records. */
@@ -911,25 +997,36 @@
{
FT_Memory memory = face->root.driver->root.memory;
TT_NameTable table = &face->name_table;
- TT_NameEntry entry = table->names;
- FT_UInt count = table->numNameRecords;
if ( table->names )
{
- for ( ; count > 0; count--, entry++ )
- {
- FT_FREE( entry->string );
- entry->stringLength = 0;
- }
+ TT_Name entry = table->names;
+ TT_Name limit = entry + table->numNameRecords;
- /* free strings table */
+
+ for ( ; entry < limit; entry++ )
+ FT_FREE( entry->string );
+
FT_FREE( table->names );
}
- table->numNameRecords = 0;
- table->format = 0;
- table->storageOffset = 0;
+ if ( table->langTags )
+ {
+ TT_LangTag entry = table->langTags;
+ TT_LangTag limit = entry + table->numLangTagRecords;
+
+
+ for ( ; entry < limit; entry++ )
+ FT_FREE( entry->string );
+
+ FT_FREE( table->langTags );
+ }
+
+ table->numNameRecords = 0;
+ table->numLangTagRecords = 0;
+ table->format = 0;
+ table->storageOffset = 0;
}
@@ -1160,8 +1257,8 @@
#define FT_STRUCTURE TT_Postscript
FT_FRAME_START( 32 ),
- FT_FRAME_ULONG( FormatType ),
- FT_FRAME_ULONG( italicAngle ),
+ FT_FRAME_LONG ( FormatType ),
+ FT_FRAME_LONG ( italicAngle ),
FT_FRAME_SHORT( underlinePosition ),
FT_FRAME_SHORT( underlineThickness ),
FT_FRAME_ULONG( isFixedPitch ),
diff --git a/src/sfnt/ttload.h b/src/sfnt/ttload.h
index a6d91c5..f94be8b 100644
--- a/src/sfnt/ttload.h
+++ b/src/sfnt/ttload.h
@@ -5,7 +5,7 @@
/* Load the basic TrueType tables, i.e., tables that can be either in */
/* TTF or OTF fonts (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __TTLOAD_H__
-#define __TTLOAD_H__
+#ifndef TTLOAD_H_
+#define TTLOAD_H_
#include <ft2build.h>
@@ -106,7 +106,7 @@
FT_END_HEADER
-#endif /* __TTLOAD_H__ */
+#endif /* TTLOAD_H_ */
/* END */
diff --git a/src/sfnt/ttmtx.c b/src/sfnt/ttmtx.c
index 58309aa..6ddda95 100644
--- a/src/sfnt/ttmtx.c
+++ b/src/sfnt/ttmtx.c
@@ -4,7 +4,7 @@
/* */
/* Load the metrics tables common to TTF and OTF fonts (body). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,11 +20,24 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_TRUETYPE_TAGS_H
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#include FT_SERVICE_METRICS_VARIATIONS_H
+#endif
+
#include "ttmtx.h"
#include "sferrors.h"
+ /* IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should */
+ /* be identical except for the names of their fields, */
+ /* which are different. */
+ /* */
+ /* This ensures that `tt_face_load_hmtx' is able to read */
+ /* both the horizontal and vertical headers. */
+
+
/*************************************************************************/
/* */
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */
@@ -214,6 +227,11 @@
FT_ULong table_pos, table_size, table_end;
FT_UShort k;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ FT_Service_MetricsVariations var =
+ (FT_Service_MetricsVariations)face->var;
+#endif
+
if ( vertical )
{
@@ -274,6 +292,34 @@
*abearing = 0;
*aadvance = 0;
}
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( var )
+ {
+ FT_Face f = FT_FACE( face );
+ FT_Int a = (FT_Int)*aadvance;
+ FT_Int b = (FT_Int)*abearing;
+
+
+ if ( vertical )
+ {
+ if ( var->vadvance_adjust )
+ var->vadvance_adjust( f, gindex, &a );
+ if ( var->tsb_adjust )
+ var->tsb_adjust( f, gindex, &b );
+ }
+ else
+ {
+ if ( var->hadvance_adjust )
+ var->hadvance_adjust( f, gindex, &a );
+ if ( var->lsb_adjust )
+ var->lsb_adjust( f, gindex, &b );
+ }
+
+ *aadvance = (FT_UShort)a;
+ *abearing = (FT_Short)b;
+ }
+#endif
}
diff --git a/src/sfnt/ttmtx.h b/src/sfnt/ttmtx.h
index 096ee06..ab00acd 100644
--- a/src/sfnt/ttmtx.h
+++ b/src/sfnt/ttmtx.h
@@ -4,7 +4,7 @@
/* */
/* Load the metrics tables common to TTF and OTF fonts (specification). */
/* */
-/* Copyright 2006-2015 by */
+/* Copyright 2006-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTMTX_H__
-#define __TTMTX_H__
+#ifndef TTMTX_H_
+#define TTMTX_H_
#include <ft2build.h>
@@ -49,7 +49,7 @@
FT_END_HEADER
-#endif /* __TTMTX_H__ */
+#endif /* TTMTX_H_ */
/* END */
diff --git a/src/sfnt/ttpost.c b/src/sfnt/ttpost.c
index 8d29d1e..6de99ef 100644
--- a/src/sfnt/ttpost.c
+++ b/src/sfnt/ttpost.c
@@ -2,10 +2,10 @@
/* */
/* ttpost.c */
/* */
-/* Postcript name table processing for TrueType and OpenType fonts */
+/* PostScript name table processing for TrueType and OpenType fonts */
/* (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -29,6 +29,10 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_TRUETYPE_TAGS_H
+
+
+#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
#include "ttpost.h"
#include "sferrors.h"
@@ -321,12 +325,13 @@
FT_UNUSED( post_limit );
- /* UNDOCUMENTED! This value appears only in the Apple TT specs. */
if ( FT_READ_USHORT( num_glyphs ) )
goto Exit;
/* check the number of glyphs */
- if ( num_glyphs > face->max_profile.numGlyphs || num_glyphs > 258 )
+ if ( num_glyphs > face->max_profile.numGlyphs ||
+ num_glyphs > 258 ||
+ num_glyphs < 1 )
{
error = FT_THROW( Invalid_File_Format );
goto Exit;
@@ -402,7 +407,7 @@
/* now read postscript table */
if ( format == 0x00020000L )
error = load_format_20( face, stream, post_limit );
- else if ( format == 0x00028000L )
+ else if ( format == 0x00025000L )
error = load_format_25( face, stream, post_limit );
else
error = FT_THROW( Invalid_File_Format );
@@ -441,7 +446,7 @@
FT_FREE( table->glyph_names );
table->num_names = 0;
}
- else if ( format == 0x00028000L )
+ else if ( format == 0x00025000L )
{
TT_Post_25 table = &names->names.format_25;
@@ -468,8 +473,8 @@
/* idx :: The glyph index. */
/* */
/* <InOut> */
- /* PSname :: The address of a string pointer. Will be NULL in case */
- /* of error, otherwise it is a pointer to the glyph name. */
+ /* PSname :: The address of a string pointer. Undefined in case of */
+ /* error, otherwise it is a pointer to the glyph name. */
/* */
/* You must not modify the returned string! */
/* */
@@ -537,7 +542,7 @@
*PSname = (FT_String*)table->glyph_names[name_index - 258];
}
}
- else if ( format == 0x00028000L )
+ else if ( format == 0x00025000L )
{
TT_Post_25 table = &names->names.format_25;
@@ -559,5 +564,12 @@
return FT_Err_Ok;
}
+#else /* !TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
+
+ /* ANSI C doesn't like empty source files */
+ typedef int _tt_post_dummy;
+
+#endif /* !TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
+
/* END */
diff --git a/src/sfnt/ttpost.h b/src/sfnt/ttpost.h
index e3eca02..3bec07e 100644
--- a/src/sfnt/ttpost.h
+++ b/src/sfnt/ttpost.h
@@ -2,10 +2,10 @@
/* */
/* ttpost.h */
/* */
-/* Postcript name table processing for TrueType and OpenType fonts */
+/* PostScript name table processing for TrueType and OpenType fonts */
/* (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __TTPOST_H__
-#define __TTPOST_H__
+#ifndef TTPOST_H_
+#define TTPOST_H_
#include <ft2build.h>
@@ -40,7 +40,7 @@
FT_END_HEADER
-#endif /* __TTPOST_H__ */
+#endif /* TTPOST_H_ */
/* END */
diff --git a/src/sfnt/ttsbit.c b/src/sfnt/ttsbit.c
index 143f276..33b8640 100644
--- a/src/sfnt/ttsbit.c
+++ b/src/sfnt/ttsbit.c
@@ -4,7 +4,7 @@
/* */
/* TrueType and OpenType embedded bitmap support (body). */
/* */
-/* Copyright 2005-2015 by */
+/* Copyright 2005-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* Copyright 2013 by Google, Inc. */
@@ -24,6 +24,10 @@
#include FT_INTERNAL_STREAM_H
#include FT_TRUETYPE_TAGS_H
#include FT_BITMAP_H
+
+
+#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
+
#include "ttsbit.h"
#include "sferrors.h"
@@ -48,6 +52,7 @@
{
FT_Error error;
FT_ULong table_size;
+ FT_ULong table_start;
face->sbit_table = NULL;
@@ -83,6 +88,8 @@
goto Exit;
}
+ table_start = FT_STREAM_POS();
+
switch ( (FT_UInt)face->sbit_table_type )
{
case TT_SBIT_TABLE_TYPE_EBLC:
@@ -104,7 +111,12 @@
version = FT_NEXT_LONG( p );
num_strikes = FT_NEXT_ULONG( p );
- if ( ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00020000UL )
+ /* there's at least one font (FZShuSong-Z01, version 3) */
+ /* that uses the wrong byte order for the `version' field */
+ if ( ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00020000UL &&
+ ( (FT_ULong)version & 0x0000FFFFUL ) != 0x00000200UL &&
+ ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00030000UL &&
+ ( (FT_ULong)version & 0x0000FFFFUL ) != 0x00000300UL )
{
error = FT_THROW( Unknown_File_Format );
goto Exit;
@@ -189,12 +201,51 @@
break;
default:
+ /* we ignore unknown table formats */
error = FT_THROW( Unknown_File_Format );
break;
}
if ( !error )
- FT_TRACE3(( "sbit_num_strikes: %u\n", face->sbit_num_strikes ));
+ FT_TRACE3(( "tt_face_load_sbit_strikes: found %u strikes\n",
+ face->sbit_num_strikes ));
+
+ face->ebdt_start = 0;
+ face->ebdt_size = 0;
+
+ if ( face->sbit_table_type == TT_SBIT_TABLE_TYPE_SBIX )
+ {
+ /* the `sbix' table is self-contained; */
+ /* it has no associated data table */
+ face->ebdt_start = table_start;
+ face->ebdt_size = table_size;
+ }
+ else if ( face->sbit_table_type != TT_SBIT_TABLE_TYPE_NONE )
+ {
+ FT_ULong ebdt_size;
+
+
+ error = face->goto_table( face, TTAG_CBDT, stream, &ebdt_size );
+ if ( error )
+ error = face->goto_table( face, TTAG_EBDT, stream, &ebdt_size );
+ if ( error )
+ error = face->goto_table( face, TTAG_bdat, stream, &ebdt_size );
+
+ if ( !error )
+ {
+ face->ebdt_start = FT_STREAM_POS();
+ face->ebdt_size = ebdt_size;
+ }
+ }
+
+ if ( !face->ebdt_size )
+ {
+ FT_TRACE2(( "tt_face_load_sbit_strikes:"
+ " no embedded bitmap data table found;\n"
+ " "
+ " resetting number of strikes to zero\n" ));
+ face->sbit_num_strikes = 0;
+ }
return FT_Err_Ok;
@@ -238,8 +289,22 @@
FT_ULong strike_index,
FT_Size_Metrics* metrics )
{
- if ( strike_index >= (FT_ULong)face->sbit_num_strikes )
- return FT_THROW( Invalid_Argument );
+ /* we have to test for the existence of `sbit_strike_map' */
+ /* because the function gets also used at the very beginning */
+ /* to construct `sbit_strike_map' itself */
+ if ( face->sbit_strike_map )
+ {
+ if ( strike_index >= (FT_ULong)face->root.num_fixed_sizes )
+ return FT_THROW( Invalid_Argument );
+
+ /* map to real index */
+ strike_index = face->sbit_strike_map[strike_index];
+ }
+ else
+ {
+ if ( strike_index >= (FT_ULong)face->sbit_num_strikes )
+ return FT_THROW( Invalid_Argument );
+ }
switch ( (FT_UInt)face->sbit_table_type )
{
@@ -247,6 +312,8 @@
case TT_SBIT_TABLE_TYPE_CBLC:
{
FT_Byte* strike;
+ FT_Char max_before_bl;
+ FT_Char min_after_bl;
strike = face->sbit_table + 8 + strike_index * 48;
@@ -254,26 +321,93 @@
metrics->x_ppem = (FT_UShort)strike[44];
metrics->y_ppem = (FT_UShort)strike[45];
- metrics->ascender = (FT_Char)strike[16] << 6; /* hori.ascender */
- metrics->descender = (FT_Char)strike[17] << 6; /* hori.descender */
- metrics->height = metrics->ascender - metrics->descender;
+ metrics->ascender = (FT_Char)strike[16] * 64; /* hori.ascender */
+ metrics->descender = (FT_Char)strike[17] * 64; /* hori.descender */
+
+ /* Due to fuzzy wording in the EBLC documentation, we find both */
+ /* positive and negative values for `descender'. Additionally, */
+ /* many fonts have both `ascender' and `descender' set to zero */
+ /* (which is definitely wrong). MS Windows simply ignores all */
+ /* those values... For these reasons we apply some heuristics */
+ /* to get a reasonable, non-zero value for the height. */
+
+ max_before_bl = (FT_Char)strike[24];
+ min_after_bl = (FT_Char)strike[25];
+
+ if ( metrics->descender > 0 )
+ {
+ /* compare sign of descender with `min_after_bl' */
+ if ( min_after_bl < 0 )
+ metrics->descender = -metrics->descender;
+ }
+
+ else if ( metrics->descender == 0 )
+ {
+ if ( metrics->ascender == 0 )
+ {
+ FT_TRACE2(( "tt_face_load_strike_metrics:"
+ " sanitizing invalid ascender and descender\n"
+ " "
+ " values for strike %d (%dppem, %dppem)\n",
+ strike_index,
+ metrics->x_ppem, metrics->y_ppem ));
+
+ /* sanitize buggy ascender and descender values */
+ if ( max_before_bl || min_after_bl )
+ {
+ metrics->ascender = max_before_bl * 64;
+ metrics->descender = min_after_bl * 64;
+ }
+ else
+ {
+ metrics->ascender = metrics->y_ppem * 64;
+ metrics->descender = 0;
+ }
+ }
+ }
+
+#if 0
+ else
+ ; /* if we have a negative descender, simply use it */
+#endif
+
+ metrics->height = metrics->ascender - metrics->descender;
+ if ( metrics->height == 0 )
+ {
+ FT_TRACE2(( "tt_face_load_strike_metrics:"
+ " sanitizing invalid height value\n"
+ " "
+ " for strike (%d, %d)\n",
+ metrics->x_ppem, metrics->y_ppem ));
+ metrics->height = metrics->y_ppem * 64;
+ metrics->descender = metrics->ascender - metrics->height;
+ }
/* Is this correct? */
metrics->max_advance = ( (FT_Char)strike[22] + /* min_origin_SB */
strike[18] + /* max_width */
(FT_Char)strike[23] /* min_advance_SB */
- ) << 6;
+ ) * 64;
+
+ /* set the scale values (in 16.16 units) so advances */
+ /* from the hmtx and vmtx table are scaled correctly */
+ metrics->x_scale = FT_MulDiv( metrics->x_ppem,
+ 64 * 0x10000,
+ face->header.Units_Per_EM );
+ metrics->y_scale = FT_MulDiv( metrics->y_ppem,
+ 64 * 0x10000,
+ face->header.Units_Per_EM );
+
return FT_Err_Ok;
}
case TT_SBIT_TABLE_TYPE_SBIX:
{
FT_Stream stream = face->root.stream;
- FT_UInt offset, upem;
- FT_UShort ppem, resolution;
+ FT_UInt offset;
+ FT_UShort upem, ppem, resolution;
TT_HoriHeader *hori;
- FT_ULong table_size;
- FT_Pos ppem_, upem_; /* to reduce casts */
+ FT_Pos ppem_; /* to reduce casts */
FT_Error error;
FT_Byte* p;
@@ -282,15 +416,11 @@
p = face->sbit_table + 8 + 4 * strike_index;
offset = FT_NEXT_ULONG( p );
- error = face->goto_table( face, TTAG_sbix, stream, &table_size );
- if ( error )
- return error;
-
- if ( offset + 4 > table_size )
+ if ( offset + 4 > face->ebdt_size )
return FT_THROW( Invalid_File_Format );
- if ( FT_STREAM_SEEK( FT_STREAM_POS() + offset ) ||
- FT_FRAME_ENTER( 4 ) )
+ if ( FT_STREAM_SEEK( face->ebdt_start + offset ) ||
+ FT_FRAME_ENTER( 4 ) )
return error;
ppem = FT_GET_USHORT();
@@ -307,14 +437,25 @@
metrics->y_ppem = ppem;
ppem_ = (FT_Pos)ppem;
- upem_ = (FT_Pos)upem;
- metrics->ascender = ppem_ * hori->Ascender * 64 / upem_;
- metrics->descender = ppem_ * hori->Descender * 64 / upem_;
- metrics->height = ppem_ * ( hori->Ascender -
- hori->Descender +
- hori->Line_Gap ) * 64 / upem_;
- metrics->max_advance = ppem_ * hori->advance_Width_Max * 64 / upem_;
+ metrics->ascender =
+ FT_MulDiv( hori->Ascender, ppem_ * 64, upem );
+ metrics->descender =
+ FT_MulDiv( hori->Descender, ppem_ * 64, upem );
+ metrics->height =
+ FT_MulDiv( hori->Ascender - hori->Descender + hori->Line_Gap,
+ ppem_ * 64, upem );
+ metrics->max_advance =
+ FT_MulDiv( hori->advance_Width_Max, ppem_ * 64, upem );
+
+ /* set the scale values (in 16.16 units) so advances */
+ /* from the hmtx and vmtx table are scaled correctly */
+ metrics->x_scale = FT_MulDiv( metrics->x_ppem,
+ 64 * 0x10000,
+ face->header.Units_Per_EM );
+ metrics->y_scale = FT_MulDiv( metrics->y_ppem,
+ 64 * 0x10000,
+ face->header.Units_Per_EM );
return error;
}
@@ -352,17 +493,15 @@
FT_ULong strike_index,
TT_SBit_MetricsRec* metrics )
{
- FT_Error error;
+ FT_Error error = FT_ERR( Table_Missing );
FT_Stream stream = face->root.stream;
- FT_ULong ebdt_size;
- error = face->goto_table( face, TTAG_CBDT, stream, &ebdt_size );
- if ( error )
- error = face->goto_table( face, TTAG_EBDT, stream, &ebdt_size );
- if ( error )
- error = face->goto_table( face, TTAG_bdat, stream, &ebdt_size );
- if ( error )
+ strike_index = face->sbit_strike_map[strike_index];
+
+ if ( !face->ebdt_size )
+ goto Exit;
+ if ( FT_STREAM_SEEK( face->ebdt_start ) )
goto Exit;
decoder->face = face;
@@ -373,8 +512,8 @@
decoder->metrics_loaded = 0;
decoder->bitmap_allocated = 0;
- decoder->ebdt_start = FT_STREAM_POS();
- decoder->ebdt_size = ebdt_size;
+ decoder->ebdt_start = face->ebdt_start;
+ decoder->ebdt_size = face->ebdt_size;
decoder->eblc_base = face->sbit_table;
decoder->eblc_limit = face->sbit_table + face->sbit_table_size;
@@ -419,7 +558,8 @@
static FT_Error
- tt_sbit_decoder_alloc_bitmap( TT_SBitDecoder decoder )
+ tt_sbit_decoder_alloc_bitmap( TT_SBitDecoder decoder,
+ FT_Bool metrics_only )
{
FT_Error error = FT_Err_Ok;
FT_UInt width, height;
@@ -482,6 +622,9 @@
if ( size == 0 )
goto Exit; /* exit successfully! */
+ if ( metrics_only )
+ goto Exit; /* only metrics are requested */
+
error = ft_glyphslot_alloc_bitmap( decoder->face->root.glyph, size );
if ( error )
goto Exit;
@@ -547,13 +690,17 @@
tt_sbit_decoder_load_image( TT_SBitDecoder decoder,
FT_UInt glyph_index,
FT_Int x_pos,
- FT_Int y_pos );
+ FT_Int y_pos,
+ FT_UInt recurse_count,
+ FT_Bool metrics_only );
- typedef FT_Error (*TT_SBitDecoder_LoadFunc)( TT_SBitDecoder decoder,
- FT_Byte* p,
- FT_Byte* plimit,
- FT_Int x_pos,
- FT_Int y_pos );
+ typedef FT_Error (*TT_SBitDecoder_LoadFunc)(
+ TT_SBitDecoder decoder,
+ FT_Byte* p,
+ FT_Byte* plimit,
+ FT_Int x_pos,
+ FT_Int y_pos,
+ FT_UInt recurse_count );
static FT_Error
@@ -561,7 +708,8 @@
FT_Byte* p,
FT_Byte* limit,
FT_Int x_pos,
- FT_Int y_pos )
+ FT_Int y_pos,
+ FT_UInt recurse_count )
{
FT_Error error = FT_Err_Ok;
FT_Byte* line;
@@ -569,6 +717,8 @@
FT_UInt bit_height, bit_width;
FT_Bitmap* bitmap;
+ FT_UNUSED( recurse_count );
+
/* check that we can write the glyph into the bitmap */
bitmap = decoder->bitmap;
@@ -700,7 +850,8 @@
FT_Byte* p,
FT_Byte* limit,
FT_Int x_pos,
- FT_Int y_pos )
+ FT_Int y_pos,
+ FT_UInt recurse_count )
{
FT_Error error = FT_Err_Ok;
FT_Byte* line;
@@ -709,6 +860,8 @@
FT_Bitmap* bitmap;
FT_UShort rval;
+ FT_UNUSED( recurse_count );
+
/* check that we can write the glyph into the bitmap */
bitmap = decoder->bitmap;
@@ -738,6 +891,12 @@
goto Exit;
}
+ if ( !line_bits || !height )
+ {
+ /* nothing to do */
+ goto Exit;
+ }
+
/* now do the blit */
/* adjust `line' to point to the first byte of the bitmap */
@@ -777,7 +936,7 @@
}
*pwrite++ |= ( ( rval >> nbits ) & 0xFF ) &
- ( ~( 0xFF << w ) << ( 8 - w - x_pos ) );
+ ( ~( 0xFFU << w ) << ( 8 - w - x_pos ) );
rval <<= 8;
w = line_bits - w;
@@ -824,7 +983,8 @@
FT_Byte* p,
FT_Byte* limit,
FT_Int x_pos,
- FT_Int y_pos )
+ FT_Int y_pos,
+ FT_UInt recurse_count )
{
FT_Error error = FT_Err_Ok;
FT_UInt num_components, nn;
@@ -847,8 +1007,9 @@
goto Fail;
}
- FT_TRACE3(( "tt_sbit_decoder_load_compound: loading %d components\n",
- num_components ));
+ FT_TRACE3(( "tt_sbit_decoder_load_compound: loading %d component%s\n",
+ num_components,
+ num_components == 1 ? "" : "s" ));
for ( nn = 0; nn < num_components; nn++ )
{
@@ -858,8 +1019,13 @@
/* NB: a recursive call */
- error = tt_sbit_decoder_load_image( decoder, gindex,
- x_pos + dx, y_pos + dy );
+ error = tt_sbit_decoder_load_image( decoder,
+ gindex,
+ x_pos + dx,
+ y_pos + dy,
+ recurse_count + 1,
+ /* request full bitmap image */
+ FALSE );
if ( error )
break;
}
@@ -891,11 +1057,14 @@
FT_Byte* p,
FT_Byte* limit,
FT_Int x_pos,
- FT_Int y_pos )
+ FT_Int y_pos,
+ FT_UInt recurse_count )
{
FT_Error error = FT_Err_Ok;
FT_ULong png_len;
+ FT_UNUSED( recurse_count );
+
if ( limit - p < 4 )
{
@@ -920,6 +1089,7 @@
decoder->stream->memory,
p,
png_len,
+ FALSE,
FALSE );
Exit:
@@ -937,7 +1107,9 @@
FT_ULong glyph_start,
FT_ULong glyph_size,
FT_Int x_pos,
- FT_Int y_pos )
+ FT_Int y_pos,
+ FT_UInt recurse_count,
+ FT_Bool metrics_only )
{
FT_Error error;
FT_Stream stream = decoder->stream;
@@ -947,7 +1119,8 @@
/* seek into the EBDT table now */
- if ( glyph_start + glyph_size > decoder->ebdt_size )
+ if ( !glyph_size ||
+ glyph_start + glyph_size > decoder->ebdt_size )
{
error = FT_THROW( Invalid_Argument );
goto Exit;
@@ -1058,12 +1231,16 @@
if ( !decoder->bitmap_allocated )
{
- error = tt_sbit_decoder_alloc_bitmap( decoder );
+ error = tt_sbit_decoder_alloc_bitmap( decoder, metrics_only );
+
if ( error )
goto Fail;
}
- error = loader( decoder, p, p_limit, x_pos, y_pos );
+ if ( metrics_only )
+ goto Fail; /* this is not an error */
+
+ error = loader( decoder, p, p_limit, x_pos, y_pos, recurse_count );
}
Fail:
@@ -1078,13 +1255,10 @@
tt_sbit_decoder_load_image( TT_SBitDecoder decoder,
FT_UInt glyph_index,
FT_Int x_pos,
- FT_Int y_pos )
+ FT_Int y_pos,
+ FT_UInt recurse_count,
+ FT_Bool metrics_only )
{
- /*
- * First, we find the correct strike range that applies to this
- * glyph index.
- */
-
FT_Byte* p = decoder->eblc_base + decoder->strike_index_array;
FT_Byte* p_limit = decoder->eblc_limit;
FT_ULong num_ranges = decoder->strike_index_count;
@@ -1092,6 +1266,17 @@
FT_ULong image_start = 0, image_end = 0, image_offset;
+ /* arbitrary recursion limit */
+ if ( recurse_count > 100 )
+ {
+ FT_TRACE4(( "tt_sbit_decoder_load_image:"
+ " recursion depth exceeded\n" ));
+ goto Failure;
+ }
+
+
+ /* First, we find the correct strike range that applies to this */
+ /* glyph index. */
for ( ; num_ranges > 0; num_ranges-- )
{
start = FT_NEXT_USHORT( p );
@@ -1256,16 +1441,25 @@
image_start,
image_end,
x_pos,
- y_pos );
+ y_pos,
+ recurse_count,
+ metrics_only );
Failure:
return FT_THROW( Invalid_Table );
NoBitmap:
+ if ( recurse_count )
+ {
+ FT_TRACE4(( "tt_sbit_decoder_load_image:"
+ " missing subglyph sbit with glyph index %d\n",
+ glyph_index ));
+ return FT_THROW( Invalid_Composite );
+ }
+
FT_TRACE4(( "tt_sbit_decoder_load_image:"
" no sbit found for glyph index %d\n", glyph_index ));
-
- return FT_THROW( Invalid_Argument );
+ return FT_THROW( Missing_Bitmap );
}
@@ -1275,10 +1469,10 @@
FT_UInt glyph_index,
FT_Stream stream,
FT_Bitmap *map,
- TT_SBit_MetricsRec *metrics )
+ TT_SBit_MetricsRec *metrics,
+ FT_Bool metrics_only )
{
- FT_UInt sbix_pos, strike_offset, glyph_start, glyph_end;
- FT_ULong table_size;
+ FT_UInt strike_offset, glyph_start, glyph_end;
FT_Int originOffsetX, originOffsetY;
FT_Tag graphicType;
FT_Int recurse_depth = 0;
@@ -1287,29 +1481,31 @@
FT_Byte* p;
FT_UNUSED( map );
+#ifndef FT_CONFIG_OPTION_USE_PNG
+ FT_UNUSED( metrics_only );
+#endif
+ strike_index = face->sbit_strike_map[strike_index];
+
metrics->width = 0;
metrics->height = 0;
p = face->sbit_table + 8 + 4 * strike_index;
strike_offset = FT_NEXT_ULONG( p );
- error = face->goto_table( face, TTAG_sbix, stream, &table_size );
- if ( error )
- return error;
- sbix_pos = FT_STREAM_POS();
-
retry:
if ( glyph_index > (FT_UInt)face->root.num_glyphs )
return FT_THROW( Invalid_Argument );
- if ( strike_offset >= table_size ||
- table_size - strike_offset < 4 + glyph_index * 4 + 8 )
+ if ( strike_offset >= face->ebdt_size ||
+ face->ebdt_size - strike_offset < 4 + glyph_index * 4 + 8 )
return FT_THROW( Invalid_File_Format );
- if ( FT_STREAM_SEEK( sbix_pos + strike_offset + 4 + glyph_index * 4 ) ||
- FT_FRAME_ENTER( 8 ) )
+ if ( FT_STREAM_SEEK( face->ebdt_start +
+ strike_offset + 4 +
+ glyph_index * 4 ) ||
+ FT_FRAME_ENTER( 8 ) )
return error;
glyph_start = FT_GET_ULONG();
@@ -1318,14 +1514,14 @@
FT_FRAME_EXIT();
if ( glyph_start == glyph_end )
- return FT_THROW( Invalid_Argument );
- if ( glyph_start > glyph_end ||
- glyph_end - glyph_start < 8 ||
- table_size - strike_offset < glyph_end )
+ return FT_THROW( Missing_Bitmap );
+ if ( glyph_start > glyph_end ||
+ glyph_end - glyph_start < 8 ||
+ face->ebdt_size - strike_offset < glyph_end )
return FT_THROW( Invalid_File_Format );
- if ( FT_STREAM_SEEK( sbix_pos + strike_offset + glyph_start ) ||
- FT_FRAME_ENTER( glyph_end - glyph_start ) )
+ if ( FT_STREAM_SEEK( face->ebdt_start + strike_offset + glyph_start ) ||
+ FT_FRAME_ENTER( glyph_end - glyph_start ) )
return error;
originOffsetX = FT_GET_SHORT();
@@ -1356,7 +1552,8 @@
stream->memory,
stream->cursor,
glyph_end - glyph_start - 8,
- TRUE );
+ TRUE,
+ metrics_only );
#else
error = FT_THROW( Unimplemented_Feature );
#endif
@@ -1416,22 +1613,27 @@
error = tt_sbit_decoder_init( decoder, face, strike_index, metrics );
if ( !error )
{
- error = tt_sbit_decoder_load_image( decoder,
- glyph_index,
- 0,
- 0 );
+ error = tt_sbit_decoder_load_image(
+ decoder,
+ glyph_index,
+ 0,
+ 0,
+ 0,
+ ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) != 0 );
tt_sbit_decoder_done( decoder );
}
}
break;
case TT_SBIT_TABLE_TYPE_SBIX:
- error = tt_face_load_sbix_image( face,
- strike_index,
- glyph_index,
- stream,
- map,
- metrics );
+ error = tt_face_load_sbix_image(
+ face,
+ strike_index,
+ glyph_index,
+ stream,
+ map,
+ metrics,
+ ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) != 0 );
break;
default:
@@ -1440,9 +1642,10 @@
}
/* Flatten color bitmaps if color was not requested. */
- if ( !error &&
- !( load_flags & FT_LOAD_COLOR ) &&
- map->pixel_mode == FT_PIXEL_MODE_BGRA )
+ if ( !error &&
+ !( load_flags & FT_LOAD_COLOR ) &&
+ !( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) &&
+ map->pixel_mode == FT_PIXEL_MODE_BGRA )
{
FT_Bitmap new_map;
FT_Library library = face->root.glyph->library;
@@ -1468,5 +1671,12 @@
return error;
}
+#else /* !TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
-/* EOF */
+ /* ANSI C doesn't like empty source files */
+ typedef int _tt_sbit_dummy;
+
+#endif /* !TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
+
+
+/* END */
diff --git a/src/sfnt/ttsbit.h b/src/sfnt/ttsbit.h
index d4e13ae..ce2af3c 100644
--- a/src/sfnt/ttsbit.h
+++ b/src/sfnt/ttsbit.h
@@ -4,7 +4,7 @@
/* */
/* TrueType and OpenType embedded bitmap support (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTSBIT_H__
-#define __TTSBIT_H__
+#ifndef TTSBIT_H_
+#define TTSBIT_H_
#include <ft2build.h>
@@ -57,7 +57,7 @@
FT_END_HEADER
-#endif /* __TTSBIT_H__ */
+#endif /* TTSBIT_H_ */
/* END */
diff --git a/src/smooth/Jamfile b/src/smooth/Jamfile
index 73b29d6..9957d5e 100644
--- a/src/smooth/Jamfile
+++ b/src/smooth/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/smooth Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,10 @@
if $(FT2_MULTI)
{
- _sources = ftgrays ftsmooth ftspic ;
+ _sources = ftgrays
+ ftsmooth
+ ftspic
+ ;
}
else
{
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index 77b58f2..803a19e 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -4,7 +4,7 @@
/* */
/* A new `perfect' anti-aliasing renderer (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,18 +18,18 @@
/*************************************************************************/
/* */
/* This file can be compiled without the rest of the FreeType engine, by */
- /* defining the _STANDALONE_ macro when compiling it. You also need to */
+ /* defining the STANDALONE_ macro when compiling it. You also need to */
/* put the files `ftgrays.h' and `ftimage.h' into the current */
/* compilation directory. Typically, you could do something like */
/* */
/* - copy `src/smooth/ftgrays.c' (this file) to your current directory */
/* */
- /* - copy `include/ftimage.h' and `src/smooth/ftgrays.h' to the same */
- /* directory */
+ /* - copy `include/freetype/ftimage.h' and `src/smooth/ftgrays.h' to the */
+ /* same directory */
/* */
- /* - compile `ftgrays' with the _STANDALONE_ macro defined, as in */
+ /* - compile `ftgrays' with the STANDALONE_ macro defined, as in */
/* */
- /* cc -c -D_STANDALONE_ ftgrays.c */
+ /* cc -c -DSTANDALONE_ ftgrays.c */
/* */
/* The renderer can be initialized with a call to */
/* `ft_gray_raster.raster_new'; an anti-aliased bitmap can be generated */
@@ -91,7 +91,7 @@
#define FT_COMPONENT trace_smooth
-#ifdef _STANDALONE_
+#ifdef STANDALONE_
/* The size in bytes of the render pool used by the scan-line converter */
@@ -106,6 +106,7 @@
#define FT_BEGIN_STMNT do {
#define FT_END_STMNT } while ( 0 )
+#define FT_MIN( a, b ) ( (a) < (b) ? (a) : (b) )
#define FT_MAX( a, b ) ( (a) > (b) ? (a) : (b) )
#define FT_ABS( a ) ( (a) < 0 ? -(a) : (a) )
@@ -135,8 +136,20 @@
#include <string.h>
#include <setjmp.h>
#include <limits.h>
-#define FT_UINT_MAX UINT_MAX
-#define FT_INT_MAX INT_MAX
+#define FT_CHAR_BIT CHAR_BIT
+#define FT_UINT_MAX UINT_MAX
+#define FT_INT_MAX INT_MAX
+#define FT_ULONG_MAX ULONG_MAX
+
+#define ADD_LONG( a, b ) \
+ (long)( (unsigned long)(a) + (unsigned long)(b) )
+#define SUB_LONG( a, b ) \
+ (long)( (unsigned long)(a) - (unsigned long)(b) )
+#define MUL_LONG( a, b ) \
+ (long)( (unsigned long)(a) * (unsigned long)(b) )
+#define NEG_LONG( a ) \
+ (long)( -(unsigned long)(a) )
+
#define ft_memset memset
@@ -254,13 +267,14 @@
};
-#else /* !_STANDALONE_ */
+#else /* !STANDALONE_ */
#include <ft2build.h>
#include "ftgrays.h"
#include FT_INTERNAL_OBJECTS_H
#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_CALC_H
#include FT_OUTLINE_H
#include "ftsmerrs.h"
@@ -272,7 +286,7 @@
#define ErrRaster_Memory_Overflow Smooth_Err_Out_Of_Memory
-#endif /* !_STANDALONE_ */
+#endif /* !STANDALONE_ */
#ifndef FT_MEM_SET
@@ -283,6 +297,10 @@
#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
#endif
+#ifndef FT_ZERO
+#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) )
+#endif
+
/* as usual, for the speed hungry :-) */
#undef RAS_ARG
@@ -300,7 +318,7 @@
#else /* FT_STATIC_RASTER */
-#define RAS_ARG /* empty */
+#define RAS_ARG void
#define RAS_ARG_ /* empty */
#define RAS_VAR /* empty */
#define RAS_VAR_ /* empty */
@@ -316,26 +334,26 @@
#undef TRUNC
#undef SCALED
-#define ONE_PIXEL ( 1L << PIXEL_BITS )
-#define PIXEL_MASK ( -1L << PIXEL_BITS )
+#define ONE_PIXEL ( 1 << PIXEL_BITS )
#define TRUNC( x ) ( (TCoord)( (x) >> PIXEL_BITS ) )
-#define SUBPIXELS( x ) ( (TPos)(x) << PIXEL_BITS )
+#define SUBPIXELS( x ) ( (TPos)(x) * ONE_PIXEL )
#define FLOOR( x ) ( (x) & -ONE_PIXEL )
#define CEILING( x ) ( ( (x) + ONE_PIXEL - 1 ) & -ONE_PIXEL )
#define ROUND( x ) ( ( (x) + ONE_PIXEL / 2 ) & -ONE_PIXEL )
#if PIXEL_BITS >= 6
-#define UPSCALE( x ) ( (x) << ( PIXEL_BITS - 6 ) )
+#define UPSCALE( x ) ( (x) * ( ONE_PIXEL >> 6 ) )
#define DOWNSCALE( x ) ( (x) >> ( PIXEL_BITS - 6 ) )
#else
#define UPSCALE( x ) ( (x) >> ( 6 - PIXEL_BITS ) )
-#define DOWNSCALE( x ) ( (x) << ( 6 - PIXEL_BITS ) )
+#define DOWNSCALE( x ) ( (x) * ( 64 >> PIXEL_BITS ) )
#endif
/* Compute `dividend / divisor' and return both its quotient and */
/* remainder, cast to a specific type. This macro also ensures that */
- /* the remainder is always positive. */
+ /* the remainder is always positive. We use the remainder to keep */
+ /* track of accumulating errors and compensate for them. */
#define FT_DIV_MOD( type, dividend, divisor, quotient, remainder ) \
FT_BEGIN_STMNT \
(quotient) = (type)( (dividend) / (divisor) ); \
@@ -352,7 +370,7 @@
/* optimize a division and modulo operation on the same parameters */
/* into a single call to `__aeabi_idivmod'. See */
/* */
- /* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43721 */
+ /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43721 */
#undef FT_DIV_MOD
#define FT_DIV_MOD( type, dividend, divisor, quotient, remainder ) \
FT_BEGIN_STMNT \
@@ -367,6 +385,16 @@
#endif /* __arm__ */
+ /* These macros speed up repetitive divisions by replacing them */
+ /* with multiplications and right shifts. */
+#define FT_UDIVPREP( c, b ) \
+ long b ## _r = c ? (long)( FT_ULONG_MAX >> PIXEL_BITS ) / ( b ) \
+ : 0
+#define FT_UDIV( a, b ) \
+ ( ( (unsigned long)( a ) * (unsigned long)( b ## _r ) ) >> \
+ ( sizeof( long ) * FT_CHAR_BIT - PIXEL_BITS ) )
+
+
/*************************************************************************/
/* */
/* TYPE DEFINITIONS */
@@ -376,44 +404,36 @@
/* need to define them to "float" or "double" when experimenting with */
/* new algorithms */
- typedef long TCoord; /* integer scanline/pixel coordinate */
- typedef long TPos; /* sub-pixel coordinate */
-
- /* determine the type used to store cell areas. This normally takes at */
- /* least PIXEL_BITS*2 + 1 bits. On 16-bit systems, we need to use */
- /* `long' instead of `int', otherwise bad things happen */
-
-#if PIXEL_BITS <= 7
-
- typedef int TArea;
-
-#else /* PIXEL_BITS >= 8 */
-
- /* approximately determine the size of integers using an ANSI-C header */
-#if FT_UINT_MAX == 0xFFFFU
- typedef long TArea;
-#else
- typedef int TArea;
-#endif
-
-#endif /* PIXEL_BITS >= 8 */
-
-
- /* maximum number of gray spans in a call to the span callback */
-#define FT_MAX_GRAY_SPANS 32
+ typedef long TPos; /* subpixel coordinate */
+ typedef int TCoord; /* integer scanline/pixel coordinate */
+ typedef int TArea; /* cell areas, coordinate products */
typedef struct TCell_* PCell;
typedef struct TCell_
{
- TPos x; /* same with gray_TWorker.ex */
+ TCoord x; /* same with gray_TWorker.ex */
TCoord cover; /* same with gray_TWorker.cover */
TArea area;
PCell next;
} TCell;
+ typedef struct TPixmap_
+ {
+ unsigned char* origin; /* pixmap origin at the bottom-left */
+ int pitch; /* pitch to go down one row */
+
+ } TPixmap;
+
+ /* maximum number of gray cells in the buffer */
+#if FT_RENDER_POOL_SIZE > 2048
+#define FT_MAX_GRAY_POOL ( FT_RENDER_POOL_SIZE / sizeof ( TCell ) )
+#else
+#define FT_MAX_GRAY_POOL ( 2048 / sizeof ( TCell ) )
+#endif
+
#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
/* We disable the warning `structure was padded due to */
@@ -428,45 +448,25 @@
ft_jmp_buf jump_buffer;
TCoord ex, ey;
- TPos min_ex, max_ex;
- TPos min_ey, max_ey;
- TPos count_ex, count_ey;
+ TCoord min_ex, max_ex;
+ TCoord min_ey, max_ey;
TArea area;
TCoord cover;
int invalid;
+ PCell* ycells;
PCell cells;
FT_PtrDist max_cells;
FT_PtrDist num_cells;
- TCoord cx, cy;
TPos x, y;
- TPos last_ey;
-
- FT_Vector bez_stack[32 * 3 + 1];
- int lev_stack[32];
-
FT_Outline outline;
- FT_Bitmap target;
- FT_BBox clip_box;
-
- FT_Span gray_spans[FT_MAX_GRAY_SPANS];
- int num_gray_spans;
+ TPixmap target;
FT_Raster_Span_Func render_span;
void* render_span_data;
- int span_y;
-
- int band_size;
- int band_shoot;
-
- void* buffer;
- long buffer_size;
-
- PCell* ycells;
- TPos ycount;
} gray_TWorker, *gray_PWorker;
@@ -489,95 +489,53 @@
} gray_TRaster, *gray_PRaster;
+#ifdef FT_DEBUG_LEVEL_TRACE
- /*************************************************************************/
- /* */
- /* Initialize the cells table. */
- /* */
+ /* to be called while in the debugger -- */
+ /* this function causes a compiler warning since it is unused otherwise */
static void
- gray_init_cells( RAS_ARG_ void* buffer,
- long byte_size )
+ gray_dump_cells( RAS_ARG )
{
- ras.buffer = buffer;
- ras.buffer_size = byte_size;
+ int y;
- ras.ycells = (PCell*) buffer;
- ras.cells = NULL;
- ras.max_cells = 0;
- ras.num_cells = 0;
- ras.area = 0;
- ras.cover = 0;
- ras.invalid = 1;
+
+ for ( y = ras.min_ey; y < ras.max_ey; y++ )
+ {
+ PCell cell = ras.ycells[y - ras.min_ey];
+
+
+ printf( "%3d:", y );
+
+ for ( ; cell != NULL; cell = cell->next )
+ printf( " (%3d, c:%4d, a:%6d)",
+ cell->x, cell->cover, cell->area );
+ printf( "\n" );
+ }
}
-
- /*************************************************************************/
- /* */
- /* Compute the outline bounding box. */
- /* */
- static void
- gray_compute_cbox( RAS_ARG )
- {
- FT_Outline* outline = &ras.outline;
- FT_Vector* vec = outline->points;
- FT_Vector* limit = vec + outline->n_points;
-
-
- if ( outline->n_points <= 0 )
- {
- ras.min_ex = ras.max_ex = 0;
- ras.min_ey = ras.max_ey = 0;
- return;
- }
-
- ras.min_ex = ras.max_ex = vec->x;
- ras.min_ey = ras.max_ey = vec->y;
-
- vec++;
-
- for ( ; vec < limit; vec++ )
- {
- TPos x = vec->x;
- TPos y = vec->y;
-
-
- if ( x < ras.min_ex ) ras.min_ex = x;
- if ( x > ras.max_ex ) ras.max_ex = x;
- if ( y < ras.min_ey ) ras.min_ey = y;
- if ( y > ras.max_ey ) ras.max_ey = y;
- }
-
- /* truncate the bounding box to integer pixels */
- ras.min_ex = ras.min_ex >> 6;
- ras.min_ey = ras.min_ey >> 6;
- ras.max_ex = ( ras.max_ex + 63 ) >> 6;
- ras.max_ey = ( ras.max_ey + 63 ) >> 6;
- }
+#endif /* FT_DEBUG_LEVEL_TRACE */
/*************************************************************************/
/* */
/* Record the current cell in the table. */
/* */
- static PCell
- gray_find_cell( RAS_ARG )
+ static void
+ gray_record_cell( RAS_ARG )
{
PCell *pcell, cell;
- TPos x = ras.ex;
+ TCoord x = ras.ex;
- if ( x > ras.count_ex )
- x = ras.count_ex;
-
- pcell = &ras.ycells[ras.ey];
+ pcell = &ras.ycells[ras.ey - ras.min_ey];
for (;;)
{
cell = *pcell;
- if ( cell == NULL || cell->x > x )
+ if ( !cell || cell->x > x )
break;
if ( cell->x == x )
- goto Exit;
+ goto Found;
pcell = &cell->next;
}
@@ -585,30 +543,21 @@
if ( ras.num_cells >= ras.max_cells )
ft_longjmp( ras.jump_buffer, 1 );
+ /* insert new cell */
cell = ras.cells + ras.num_cells++;
cell->x = x;
- cell->area = 0;
- cell->cover = 0;
+ cell->area = ras.area;
+ cell->cover = ras.cover;
cell->next = *pcell;
*pcell = cell;
- Exit:
- return cell;
- }
+ return;
-
- static void
- gray_record_cell( RAS_ARG )
- {
- if ( ras.area | ras.cover )
- {
- PCell cell = gray_find_cell( RAS_VAR );
-
-
- cell->area += ras.area;
- cell->cover += ras.cover;
- }
+ Found:
+ /* update old cell */
+ cell->area += ras.area;
+ cell->cover += ras.cover;
}
@@ -630,60 +579,25 @@
/* Note that if a cell is to the left of the clipping region, it is */
/* actually set to the (min_ex-1) horizontal position. */
- /* All cells that are on the left of the clipping region go to the */
- /* min_ex - 1 horizontal position. */
- ey -= ras.min_ey;
-
- if ( ex > ras.max_ex )
- ex = ras.max_ex;
-
- ex -= ras.min_ex;
- if ( ex < 0 )
- ex = -1;
-
- /* are we moving to a different cell ? */
- if ( ex != ras.ex || ey != ras.ey )
- {
- /* record the current one if it is valid */
- if ( !ras.invalid )
- gray_record_cell( RAS_VAR );
-
- ras.area = 0;
- ras.cover = 0;
- ras.ex = ex;
- ras.ey = ey;
- }
-
- ras.invalid = ( (unsigned int)ey >= (unsigned int)ras.count_ey ||
- ex >= ras.count_ex );
- }
-
-
- /*************************************************************************/
- /* */
- /* Start a new contour at a given cell. */
- /* */
- static void
- gray_start_cell( RAS_ARG_ TCoord ex,
- TCoord ey )
- {
- if ( ex > ras.max_ex )
- ex = (TCoord)( ras.max_ex );
-
if ( ex < ras.min_ex )
- ex = (TCoord)( ras.min_ex - 1 );
+ ex = ras.min_ex - 1;
- ras.area = 0;
- ras.cover = 0;
- ras.ex = ex - ras.min_ex;
- ras.ey = ey - ras.min_ey;
- ras.last_ey = SUBPIXELS( ey );
- ras.invalid = 0;
+ /* record the current one if it is valid and substantial */
+ if ( !ras.invalid && ( ras.area || ras.cover ) )
+ gray_record_cell( RAS_VAR );
- gray_set_cell( RAS_VAR_ ex, ey );
+ ras.area = 0;
+ ras.cover = 0;
+ ras.ex = ex;
+ ras.ey = ey;
+
+ ras.invalid = ( ey >= ras.max_ey || ey < ras.min_ey ||
+ ex >= ras.max_ex );
}
+#ifndef FT_LONG64
+
/*************************************************************************/
/* */
/* Render a scanline as one or more cells. */
@@ -695,17 +609,13 @@
TPos x2,
TCoord y2 )
{
- TCoord ex1, ex2, fx1, fx2, delta, mod;
- long p, first, dx;
+ TCoord ex1, ex2, fx1, fx2, first, dy, delta, mod;
+ TPos p, dx;
int incr;
- dx = x2 - x1;
-
ex1 = TRUNC( x1 );
ex2 = TRUNC( x2 );
- fx1 = (TCoord)( x1 - SUBPIXELS( ex1 ) );
- fx2 = (TCoord)( x2 - SUBPIXELS( ex2 ) );
/* trivial case. Happens often */
if ( y1 == y2 )
@@ -714,26 +624,29 @@
return;
}
+ fx1 = (TCoord)( x1 - SUBPIXELS( ex1 ) );
+ fx2 = (TCoord)( x2 - SUBPIXELS( ex2 ) );
+
/* everything is located in a single cell. That is easy! */
/* */
if ( ex1 == ex2 )
- {
- delta = y2 - y1;
- ras.area += (TArea)(( fx1 + fx2 ) * delta);
- ras.cover += delta;
- return;
- }
+ goto End;
/* ok, we'll have to render a run of adjacent cells on the same */
/* scanline... */
/* */
- p = ( ONE_PIXEL - fx1 ) * ( y2 - y1 );
- first = ONE_PIXEL;
- incr = 1;
+ dx = x2 - x1;
+ dy = y2 - y1;
- if ( dx < 0 )
+ if ( dx > 0 )
{
- p = fx1 * ( y2 - y1 );
+ p = ( ONE_PIXEL - fx1 ) * dy;
+ first = ONE_PIXEL;
+ incr = 1;
+ }
+ else
+ {
+ p = fx1 * dy;
first = 0;
incr = -1;
dx = -dx;
@@ -741,44 +654,45 @@
FT_DIV_MOD( TCoord, p, dx, delta, mod );
- ras.area += (TArea)(( fx1 + first ) * delta);
+ ras.area += (TArea)( ( fx1 + first ) * delta );
ras.cover += delta;
-
- ex1 += incr;
+ y1 += delta;
+ ex1 += incr;
gray_set_cell( RAS_VAR_ ex1, ey );
- y1 += delta;
if ( ex1 != ex2 )
{
TCoord lift, rem;
- p = ONE_PIXEL * ( y2 - y1 + delta );
+ p = ONE_PIXEL * dy;
FT_DIV_MOD( TCoord, p, dx, lift, rem );
- mod -= (int)dx;
-
- while ( ex1 != ex2 )
+ do
{
delta = lift;
mod += rem;
- if ( mod >= 0 )
+ if ( mod >= (TCoord)dx )
{
mod -= (TCoord)dx;
delta++;
}
- ras.area += (TArea)(ONE_PIXEL * delta);
+ ras.area += (TArea)( ONE_PIXEL * delta );
ras.cover += delta;
y1 += delta;
ex1 += incr;
gray_set_cell( RAS_VAR_ ex1, ey );
- }
+ } while ( ex1 != ex2 );
}
- delta = y2 - y1;
- ras.area += (TArea)(( fx2 + ONE_PIXEL - first ) * delta);
- ras.cover += delta;
+ fx1 = ONE_PIXEL - first;
+
+ End:
+ dy = y2 - y1;
+
+ ras.area += (TArea)( ( fx1 + fx2 ) * dy );
+ ras.cover += dy;
}
@@ -790,35 +704,21 @@
gray_render_line( RAS_ARG_ TPos to_x,
TPos to_y )
{
- TCoord ey1, ey2, fy1, fy2, mod;
- TPos dx, dy, x, x2;
- long p, first;
- int delta, rem, lift, incr;
+ TCoord ey1, ey2, fy1, fy2, first, delta, mod;
+ TPos p, dx, dy, x, x2;
+ int incr;
- ey1 = TRUNC( ras.last_ey );
+ ey1 = TRUNC( ras.y );
ey2 = TRUNC( to_y ); /* if (ey2 >= ras.max_ey) ey2 = ras.max_ey-1; */
- fy1 = (TCoord)( ras.y - ras.last_ey );
- fy2 = (TCoord)( to_y - SUBPIXELS( ey2 ) );
-
- dx = to_x - ras.x;
- dy = to_y - ras.y;
/* perform vertical clipping */
- {
- TCoord min, max;
+ if ( ( ey1 >= ras.max_ey && ey2 >= ras.max_ey ) ||
+ ( ey1 < ras.min_ey && ey2 < ras.min_ey ) )
+ goto End;
-
- min = ey1;
- max = ey2;
- if ( ey1 > ey2 )
- {
- min = ey2;
- max = ey1;
- }
- if ( min >= ras.max_ey || max < ras.min_ey )
- goto End;
- }
+ fy1 = (TCoord)( ras.y - SUBPIXELS( ey1 ) );
+ fy2 = (TCoord)( to_y - SUBPIXELS( ey2 ) );
/* everything is on a single scanline */
if ( ey1 == ey2 )
@@ -827,9 +727,10 @@
goto End;
}
- /* vertical line - avoid calling gray_render_scanline */
- incr = 1;
+ dx = to_x - ras.x;
+ dy = to_y - ras.y;
+ /* vertical line - avoid calling gray_render_scanline */
if ( dx == 0 )
{
TCoord ex = TRUNC( ras.x );
@@ -837,21 +738,25 @@
TArea area;
- first = ONE_PIXEL;
- if ( dy < 0 )
+ if ( dy > 0)
+ {
+ first = ONE_PIXEL;
+ incr = 1;
+ }
+ else
{
first = 0;
incr = -1;
}
- delta = (int)( first - fy1 );
+ delta = first - fy1;
ras.area += (TArea)two_fx * delta;
ras.cover += delta;
ey1 += incr;
gray_set_cell( RAS_VAR_ ex, ey1 );
- delta = (int)( first + first - ONE_PIXEL );
+ delta = first + first - ONE_PIXEL;
area = (TArea)two_fx * delta;
while ( ey1 != ey2 )
{
@@ -862,7 +767,7 @@
gray_set_cell( RAS_VAR_ ex, ey1 );
}
- delta = (int)( fy2 - ONE_PIXEL + first );
+ delta = fy2 - ONE_PIXEL + first;
ras.area += (TArea)two_fx * delta;
ras.cover += delta;
@@ -870,11 +775,13 @@
}
/* ok, we have to render several scanlines */
- p = ( ONE_PIXEL - fy1 ) * dx;
- first = ONE_PIXEL;
- incr = 1;
-
- if ( dy < 0 )
+ if ( dy > 0)
+ {
+ p = ( ONE_PIXEL - fy1 ) * dx;
+ first = ONE_PIXEL;
+ incr = 1;
+ }
+ else
{
p = fy1 * dx;
first = 0;
@@ -882,51 +789,190 @@
dy = -dy;
}
- FT_DIV_MOD( int, p, dy, delta, mod );
+ FT_DIV_MOD( TCoord, p, dy, delta, mod );
x = ras.x + delta;
- gray_render_scanline( RAS_VAR_ ey1, ras.x, fy1, x, (TCoord)first );
+ gray_render_scanline( RAS_VAR_ ey1, ras.x, fy1, x, first );
ey1 += incr;
gray_set_cell( RAS_VAR_ TRUNC( x ), ey1 );
if ( ey1 != ey2 )
{
- p = ONE_PIXEL * dx;
- FT_DIV_MOD( int, p, dy, lift, rem );
- mod -= (int)dy;
+ TCoord lift, rem;
- while ( ey1 != ey2 )
+
+ p = ONE_PIXEL * dx;
+ FT_DIV_MOD( TCoord, p, dy, lift, rem );
+
+ do
{
delta = lift;
mod += rem;
- if ( mod >= 0 )
+ if ( mod >= (TCoord)dy )
{
- mod -= (int)dy;
+ mod -= (TCoord)dy;
delta++;
}
x2 = x + delta;
- gray_render_scanline( RAS_VAR_ ey1, x,
- (TCoord)( ONE_PIXEL - first ), x2,
- (TCoord)first );
+ gray_render_scanline( RAS_VAR_ ey1,
+ x, ONE_PIXEL - first,
+ x2, first );
x = x2;
ey1 += incr;
gray_set_cell( RAS_VAR_ TRUNC( x ), ey1 );
- }
+ } while ( ey1 != ey2 );
}
- gray_render_scanline( RAS_VAR_ ey1, x,
- (TCoord)( ONE_PIXEL - first ), to_x,
- fy2 );
+ gray_render_scanline( RAS_VAR_ ey1,
+ x, ONE_PIXEL - first,
+ to_x, fy2 );
End:
ras.x = to_x;
ras.y = to_y;
- ras.last_ey = SUBPIXELS( ey2 );
}
+#else
+
+ /*************************************************************************/
+ /* */
+ /* Render a straight line across multiple cells in any direction. */
+ /* */
+ static void
+ gray_render_line( RAS_ARG_ TPos to_x,
+ TPos to_y )
+ {
+ TPos dx, dy, fx1, fy1, fx2, fy2;
+ TCoord ex1, ex2, ey1, ey2;
+
+
+ ey1 = TRUNC( ras.y );
+ ey2 = TRUNC( to_y );
+
+ /* perform vertical clipping */
+ if ( ( ey1 >= ras.max_ey && ey2 >= ras.max_ey ) ||
+ ( ey1 < ras.min_ey && ey2 < ras.min_ey ) )
+ goto End;
+
+ ex1 = TRUNC( ras.x );
+ ex2 = TRUNC( to_x );
+
+ fx1 = ras.x - SUBPIXELS( ex1 );
+ fy1 = ras.y - SUBPIXELS( ey1 );
+
+ dx = to_x - ras.x;
+ dy = to_y - ras.y;
+
+ if ( ex1 == ex2 && ey1 == ey2 ) /* inside one cell */
+ ;
+ else if ( dy == 0 ) /* ex1 != ex2 */ /* any horizontal line */
+ {
+ ex1 = ex2;
+ gray_set_cell( RAS_VAR_ ex1, ey1 );
+ }
+ else if ( dx == 0 )
+ {
+ if ( dy > 0 ) /* vertical line up */
+ do
+ {
+ fy2 = ONE_PIXEL;
+ ras.cover += ( fy2 - fy1 );
+ ras.area += ( fy2 - fy1 ) * fx1 * 2;
+ fy1 = 0;
+ ey1++;
+ gray_set_cell( RAS_VAR_ ex1, ey1 );
+ } while ( ey1 != ey2 );
+ else /* vertical line down */
+ do
+ {
+ fy2 = 0;
+ ras.cover += ( fy2 - fy1 );
+ ras.area += ( fy2 - fy1 ) * fx1 * 2;
+ fy1 = ONE_PIXEL;
+ ey1--;
+ gray_set_cell( RAS_VAR_ ex1, ey1 );
+ } while ( ey1 != ey2 );
+ }
+ else /* any other line */
+ {
+ TPos prod = dx * fy1 - dy * fx1;
+ FT_UDIVPREP( ex1 != ex2, dx );
+ FT_UDIVPREP( ey1 != ey2, dy );
+
+
+ /* The fundamental value `prod' determines which side and the */
+ /* exact coordinate where the line exits current cell. It is */
+ /* also easily updated when moving from one cell to the next. */
+ do
+ {
+ if ( prod <= 0 &&
+ prod - dx * ONE_PIXEL > 0 ) /* left */
+ {
+ fx2 = 0;
+ fy2 = (TPos)FT_UDIV( -prod, -dx );
+ prod -= dy * ONE_PIXEL;
+ ras.cover += ( fy2 - fy1 );
+ ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
+ fx1 = ONE_PIXEL;
+ fy1 = fy2;
+ ex1--;
+ }
+ else if ( prod - dx * ONE_PIXEL <= 0 &&
+ prod - dx * ONE_PIXEL + dy * ONE_PIXEL > 0 ) /* up */
+ {
+ prod -= dx * ONE_PIXEL;
+ fx2 = (TPos)FT_UDIV( -prod, dy );
+ fy2 = ONE_PIXEL;
+ ras.cover += ( fy2 - fy1 );
+ ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
+ fx1 = fx2;
+ fy1 = 0;
+ ey1++;
+ }
+ else if ( prod - dx * ONE_PIXEL + dy * ONE_PIXEL <= 0 &&
+ prod + dy * ONE_PIXEL >= 0 ) /* right */
+ {
+ prod += dy * ONE_PIXEL;
+ fx2 = ONE_PIXEL;
+ fy2 = (TPos)FT_UDIV( prod, dx );
+ ras.cover += ( fy2 - fy1 );
+ ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
+ fx1 = 0;
+ fy1 = fy2;
+ ex1++;
+ }
+ else /* ( prod + dy * ONE_PIXEL < 0 &&
+ prod > 0 ) down */
+ {
+ fx2 = (TPos)FT_UDIV( prod, -dy );
+ fy2 = 0;
+ prod += dx * ONE_PIXEL;
+ ras.cover += ( fy2 - fy1 );
+ ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
+ fx1 = fx2;
+ fy1 = ONE_PIXEL;
+ ey1--;
+ }
+
+ gray_set_cell( RAS_VAR_ ex1, ey1 );
+ } while ( ex1 != ex2 || ey1 != ey2 );
+ }
+
+ fx2 = to_x - SUBPIXELS( ex2 );
+ fy2 = to_y - SUBPIXELS( ey2 );
+
+ ras.cover += ( fy2 - fy1 );
+ ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
+
+ End:
+ ras.x = to_x;
+ ras.y = to_y;
+ }
+
+#endif
static void
gray_split_conic( FT_Vector* base )
@@ -952,73 +998,64 @@
gray_render_conic( RAS_ARG_ const FT_Vector* control,
const FT_Vector* to )
{
+ FT_Vector bez_stack[16 * 2 + 1]; /* enough to accommodate bisections */
+ FT_Vector* arc = bez_stack;
TPos dx, dy;
- TPos min, max, y;
- int top, level;
- int* levels;
- FT_Vector* arc;
+ int draw, split;
- levels = ras.lev_stack;
-
- arc = ras.bez_stack;
arc[0].x = UPSCALE( to->x );
arc[0].y = UPSCALE( to->y );
arc[1].x = UPSCALE( control->x );
arc[1].y = UPSCALE( control->y );
arc[2].x = ras.x;
arc[2].y = ras.y;
- top = 0;
+
+ /* short-cut the arc that crosses the current band */
+ if ( ( TRUNC( arc[0].y ) >= ras.max_ey &&
+ TRUNC( arc[1].y ) >= ras.max_ey &&
+ TRUNC( arc[2].y ) >= ras.max_ey ) ||
+ ( TRUNC( arc[0].y ) < ras.min_ey &&
+ TRUNC( arc[1].y ) < ras.min_ey &&
+ TRUNC( arc[2].y ) < ras.min_ey ) )
+ {
+ ras.x = arc[0].x;
+ ras.y = arc[0].y;
+ return;
+ }
dx = FT_ABS( arc[2].x + arc[0].x - 2 * arc[1].x );
dy = FT_ABS( arc[2].y + arc[0].y - 2 * arc[1].y );
if ( dx < dy )
dx = dy;
- if ( dx < ONE_PIXEL / 4 )
- goto Draw;
+ /* We can calculate the number of necessary bisections because */
+ /* each bisection predictably reduces deviation exactly 4-fold. */
+ /* Even 32-bit deviation would vanish after 16 bisections. */
+ draw = 1;
+ while ( dx > ONE_PIXEL / 4 )
+ {
+ dx >>= 2;
+ draw <<= 1;
+ }
- /* short-cut the arc that crosses the current band */
- min = max = arc[0].y;
-
- y = arc[1].y;
- if ( y < min ) min = y;
- if ( y > max ) max = y;
-
- y = arc[2].y;
- if ( y < min ) min = y;
- if ( y > max ) max = y;
-
- if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
- goto Draw;
-
- level = 0;
+ /* We use decrement counter to count the total number of segments */
+ /* to draw starting from 2^level. Before each draw we split as */
+ /* many times as there are trailing zeros in the counter. */
do
{
- dx >>= 2;
- level++;
- } while ( dx > ONE_PIXEL / 4 );
-
- levels[0] = level;
-
- do
- {
- level = levels[top];
- if ( level > 0 )
+ split = 1;
+ while ( ( draw & split ) == 0 )
{
gray_split_conic( arc );
arc += 2;
- top++;
- levels[top] = levels[top - 1] = level - 1;
- continue;
+ split <<= 1;
}
- Draw:
gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
- top--;
arc -= 2;
- } while ( top >= 0 );
+ } while ( --draw );
}
@@ -1055,11 +1092,13 @@
const FT_Vector* control2,
const FT_Vector* to )
{
- FT_Vector* arc;
- TPos min, max, y;
+ FT_Vector bez_stack[16 * 3 + 1]; /* enough to accommodate bisections */
+ FT_Vector* arc = bez_stack;
+ TPos dx, dy, dx_, dy_;
+ TPos dx1, dy1, dx2, dy2;
+ TPos L, s, s_limit;
- arc = ras.bez_stack;
arc[0].x = UPSCALE( to->x );
arc[0].y = UPSCALE( to->y );
arc[1].x = UPSCALE( control2->x );
@@ -1069,29 +1108,20 @@
arc[3].x = ras.x;
arc[3].y = ras.y;
- /* Short-cut the arc that crosses the current band. */
- min = max = arc[0].y;
-
- y = arc[1].y;
- if ( y < min )
- min = y;
- if ( y > max )
- max = y;
-
- y = arc[2].y;
- if ( y < min )
- min = y;
- if ( y > max )
- max = y;
-
- y = arc[3].y;
- if ( y < min )
- min = y;
- if ( y > max )
- max = y;
-
- if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
- goto Draw;
+ /* short-cut the arc that crosses the current band */
+ if ( ( TRUNC( arc[0].y ) >= ras.max_ey &&
+ TRUNC( arc[1].y ) >= ras.max_ey &&
+ TRUNC( arc[2].y ) >= ras.max_ey &&
+ TRUNC( arc[3].y ) >= ras.max_ey ) ||
+ ( TRUNC( arc[0].y ) < ras.min_ey &&
+ TRUNC( arc[1].y ) < ras.min_ey &&
+ TRUNC( arc[2].y ) < ras.min_ey &&
+ TRUNC( arc[3].y ) < ras.min_ey ) )
+ {
+ ras.x = arc[0].x;
+ ras.y = arc[0].y;
+ return;
+ }
for (;;)
{
@@ -1100,64 +1130,53 @@
/* F. Hain, at */
/* http://www.cis.southalabama.edu/~hain/general/Publications/Bezier/Camera-ready%20CISST02%202.pdf */
- {
- TPos dx, dy, dx_, dy_;
- TPos dx1, dy1, dx2, dy2;
- TPos L, s, s_limit;
+ /* dx and dy are x and y components of the P0-P3 chord vector. */
+ dx = dx_ = arc[3].x - arc[0].x;
+ dy = dy_ = arc[3].y - arc[0].y;
+ L = FT_HYPOT( dx_, dy_ );
- /* dx and dy are x and y components of the P0-P3 chord vector. */
- dx = dx_ = arc[3].x - arc[0].x;
- dy = dy_ = arc[3].y - arc[0].y;
+ /* Avoid possible arithmetic overflow below by splitting. */
+ if ( L > 32767 )
+ goto Split;
- L = FT_HYPOT( dx_, dy_ );
+ /* Max deviation may be as much as (s/L) * 3/4 (if Hain's v = 1). */
+ s_limit = L * (TPos)( ONE_PIXEL / 6 );
- /* Avoid possible arithmetic overflow below by splitting. */
- if ( L > 32767 )
- goto Split;
+ /* s is L * the perpendicular distance from P1 to the line P0-P3. */
+ dx1 = arc[1].x - arc[0].x;
+ dy1 = arc[1].y - arc[0].y;
+ s = FT_ABS( SUB_LONG( MUL_LONG( dy, dx1 ), MUL_LONG( dx, dy1 ) ) );
- /* Max deviation may be as much as (s/L) * 3/4 (if Hain's v = 1). */
- s_limit = L * (TPos)( ONE_PIXEL / 6 );
+ if ( s > s_limit )
+ goto Split;
- /* s is L * the perpendicular distance from P1 to the line P0-P3. */
- dx1 = arc[1].x - arc[0].x;
- dy1 = arc[1].y - arc[0].y;
- s = FT_ABS( dy * dx1 - dx * dy1 );
+ /* s is L * the perpendicular distance from P2 to the line P0-P3. */
+ dx2 = arc[2].x - arc[0].x;
+ dy2 = arc[2].y - arc[0].y;
+ s = FT_ABS( SUB_LONG( MUL_LONG( dy, dx2 ), MUL_LONG( dx, dy2 ) ) );
- if ( s > s_limit )
- goto Split;
+ if ( s > s_limit )
+ goto Split;
- /* s is L * the perpendicular distance from P2 to the line P0-P3. */
- dx2 = arc[2].x - arc[0].x;
- dy2 = arc[2].y - arc[0].y;
- s = FT_ABS( dy * dx2 - dx * dy2 );
+ /* Split super curvy segments where the off points are so far
+ from the chord that the angles P0-P1-P3 or P0-P2-P3 become
+ acute as detected by appropriate dot products. */
+ if ( dx1 * ( dx1 - dx ) + dy1 * ( dy1 - dy ) > 0 ||
+ dx2 * ( dx2 - dx ) + dy2 * ( dy2 - dy ) > 0 )
+ goto Split;
- if ( s > s_limit )
- goto Split;
+ gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
- /* Split super curvy segments where the off points are so far
- from the chord that the angles P0-P1-P3 or P0-P2-P3 become
- acute as detected by appropriate dot products. */
- if ( dx1 * ( dx1 - dx ) + dy1 * ( dy1 - dy ) > 0 ||
- dx2 * ( dx2 - dx ) + dy2 * ( dy2 - dy ) > 0 )
- goto Split;
+ if ( arc == bez_stack )
+ return;
- /* No reason to split. */
- goto Draw;
- }
+ arc -= 3;
+ continue;
Split:
gray_split_cubic( arc );
arc += 3;
- continue;
-
- Draw:
- gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
-
- if ( arc == ras.bez_stack )
- return;
-
- arc -= 3;
}
}
@@ -1169,18 +1188,14 @@
TPos x, y;
- /* record current cell, if any */
- if ( !ras.invalid )
- gray_record_cell( RAS_VAR );
-
/* start to a new position */
x = UPSCALE( to->x );
y = UPSCALE( to->y );
- gray_start_cell( RAS_VAR_ TRUNC( x ), TRUNC( y ) );
+ gray_set_cell( RAS_VAR_ TRUNC( x ), TRUNC( y ) );
- worker->x = x;
- worker->y = y;
+ ras.x = x;
+ ras.y = y;
return 0;
}
@@ -1216,83 +1231,23 @@
static void
- gray_render_span( int y,
- int count,
- const FT_Span* spans,
- gray_PWorker worker )
- {
- unsigned char* p;
- FT_Bitmap* map = &worker->target;
-
-
- /* first of all, compute the scanline offset */
- p = (unsigned char*)map->buffer - y * map->pitch;
- if ( map->pitch >= 0 )
- p += ( map->rows - 1 ) * (unsigned int)map->pitch;
-
- for ( ; count > 0; count--, spans++ )
- {
- unsigned char coverage = spans->coverage;
-
-
- if ( coverage )
- {
- /* For small-spans it is faster to do it by ourselves than
- * calling `memset'. This is mainly due to the cost of the
- * function call.
- */
- if ( spans->len >= 8 )
- FT_MEM_SET( p + spans->x, (unsigned char)coverage, spans->len );
- else
- {
- unsigned char* q = p + spans->x;
-
-
- switch ( spans->len )
- {
- case 7: *q++ = (unsigned char)coverage;
- case 6: *q++ = (unsigned char)coverage;
- case 5: *q++ = (unsigned char)coverage;
- case 4: *q++ = (unsigned char)coverage;
- case 3: *q++ = (unsigned char)coverage;
- case 2: *q++ = (unsigned char)coverage;
- case 1: *q = (unsigned char)coverage;
- default:
- ;
- }
- }
- }
- }
- }
-
-
- static void
gray_hline( RAS_ARG_ TCoord x,
TCoord y,
- TPos area,
+ TArea coverage,
TCoord acount )
{
- int coverage;
-
-
- /* compute the coverage line's coverage, depending on the */
- /* outline fill rule */
- /* */
- /* the coverage percentage is area/(PIXEL_BITS*PIXEL_BITS*2) */
- /* */
- coverage = (int)( area >> ( PIXEL_BITS * 2 + 1 - 8 ) );
- /* use range 0..256 */
+ /* scale the coverage from 0..(ONE_PIXEL*ONE_PIXEL*2) to 0..256 */
+ coverage >>= PIXEL_BITS * 2 + 1 - 8;
if ( coverage < 0 )
- coverage = -coverage;
+ coverage = -coverage - 1;
+ /* compute the line's coverage depending on the outline fill rule */
if ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL )
{
coverage &= 511;
- if ( coverage > 256 )
- coverage = 512 - coverage;
- else if ( coverage == 256 )
- coverage = 255;
+ if ( coverage >= 256 )
+ coverage = 511 - coverage;
}
else
{
@@ -1301,179 +1256,83 @@
coverage = 255;
}
- y += (TCoord)ras.min_ey;
- x += (TCoord)ras.min_ex;
-
- /* FT_Span.x is a 16-bit short, so limit our coordinates appropriately */
- if ( x >= 32767 )
- x = 32767;
-
- /* FT_Span.y is an integer, so limit our coordinates appropriately */
- if ( y >= FT_INT_MAX )
- y = FT_INT_MAX;
-
- if ( coverage )
+ if ( ras.render_span ) /* for FT_RASTER_FLAG_DIRECT only */
{
- FT_Span* span;
- int count;
+ FT_Span span;
- /* see whether we can add this span to the current list */
- count = ras.num_gray_spans;
- span = ras.gray_spans + count - 1;
- if ( count > 0 &&
- ras.span_y == y &&
- (int)span->x + span->len == (int)x &&
- span->coverage == coverage )
+ span.x = (short)x;
+ span.len = (unsigned short)acount;
+ span.coverage = (unsigned char)coverage;
+
+ ras.render_span( y, 1, &span, ras.render_span_data );
+ }
+ else
+ {
+ unsigned char* q = ras.target.origin - ras.target.pitch * y + x;
+ unsigned char c = (unsigned char)coverage;
+
+
+ /* For small-spans it is faster to do it by ourselves than
+ * calling `memset'. This is mainly due to the cost of the
+ * function call.
+ */
+ switch ( acount )
{
- span->len = (unsigned short)( span->len + acount );
- return;
+ case 7: *q++ = c;
+ case 6: *q++ = c;
+ case 5: *q++ = c;
+ case 4: *q++ = c;
+ case 3: *q++ = c;
+ case 2: *q++ = c;
+ case 1: *q = c;
+ case 0: break;
+ default:
+ FT_MEM_SET( q, c, acount );
}
-
- if ( ras.span_y != y || count >= FT_MAX_GRAY_SPANS )
- {
- if ( ras.render_span && count > 0 )
- ras.render_span( ras.span_y, count, ras.gray_spans,
- ras.render_span_data );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- if ( count > 0 )
- {
- int n;
-
-
- FT_TRACE7(( "y = %3d ", ras.span_y ));
- span = ras.gray_spans;
- for ( n = 0; n < count; n++, span++ )
- FT_TRACE7(( "[%d..%d]:%02x ",
- span->x, span->x + span->len - 1, span->coverage ));
- FT_TRACE7(( "\n" ));
- }
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
- ras.num_gray_spans = 0;
- ras.span_y = (int)y;
-
- span = ras.gray_spans;
- }
- else
- span++;
-
- /* add a gray span to the current list */
- span->x = (short)x;
- span->len = (unsigned short)acount;
- span->coverage = (unsigned char)coverage;
-
- ras.num_gray_spans++;
}
}
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- /* to be called while in the debugger -- */
- /* this function causes a compiler warning since it is unused otherwise */
static void
- gray_dump_cells( RAS_ARG )
+ gray_sweep( RAS_ARG )
{
- int yindex;
+ int y;
- for ( yindex = 0; yindex < ras.ycount; yindex++ )
+ for ( y = ras.min_ey; y < ras.max_ey; y++ )
{
- PCell cell;
-
-
- printf( "%3d:", yindex );
-
- for ( cell = ras.ycells[yindex]; cell != NULL; cell = cell->next )
- printf( " (%3ld, c:%4ld, a:%6d)", cell->x, cell->cover, cell->area );
- printf( "\n" );
- }
- }
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
-
- static void
- gray_sweep( RAS_ARG_ const FT_Bitmap* target )
- {
- int yindex;
-
- FT_UNUSED( target );
-
-
- if ( ras.num_cells == 0 )
- return;
-
- ras.num_gray_spans = 0;
-
- FT_TRACE7(( "gray_sweep: start\n" ));
-
- for ( yindex = 0; yindex < ras.ycount; yindex++ )
- {
- PCell cell = ras.ycells[yindex];
- TCoord cover = 0;
- TCoord x = 0;
+ PCell cell = ras.ycells[y - ras.min_ey];
+ TCoord x = ras.min_ex;
+ TArea cover = 0;
+ TArea area;
for ( ; cell != NULL; cell = cell->next )
{
- TPos area;
+ if ( cover != 0 && cell->x > x )
+ gray_hline( RAS_VAR_ x, y, cover, cell->x - x );
+ cover += (TArea)cell->cover * ( ONE_PIXEL * 2 );
+ area = cover - cell->area;
- if ( cell->x > x && cover != 0 )
- gray_hline( RAS_VAR_ x, yindex, cover * ( ONE_PIXEL * 2 ),
- cell->x - x );
-
- cover += cell->cover;
- area = cover * ( ONE_PIXEL * 2 ) - cell->area;
-
- if ( area != 0 && cell->x >= 0 )
- gray_hline( RAS_VAR_ cell->x, yindex, area, 1 );
+ if ( area != 0 && cell->x >= ras.min_ex )
+ gray_hline( RAS_VAR_ cell->x, y, area, 1 );
x = cell->x + 1;
}
if ( cover != 0 )
- gray_hline( RAS_VAR_ x, yindex, cover * ( ONE_PIXEL * 2 ),
- ras.count_ex - x );
+ gray_hline( RAS_VAR_ x, y, cover, ras.max_ex - x );
}
-
- if ( ras.render_span && ras.num_gray_spans > 0 )
- ras.render_span( ras.span_y, ras.num_gray_spans,
- ras.gray_spans, ras.render_span_data );
-
-#ifdef FT_DEBUG_LEVEL_TRACE
-
- if ( ras.num_gray_spans > 0 )
- {
- FT_Span* span;
- int n;
-
-
- FT_TRACE7(( "y = %3d ", ras.span_y ));
- span = ras.gray_spans;
- for ( n = 0; n < ras.num_gray_spans; n++, span++ )
- FT_TRACE7(( "[%d..%d]:%02x ",
- span->x, span->x + span->len - 1, span->coverage ));
- FT_TRACE7(( "\n" ));
- }
-
- FT_TRACE7(( "gray_sweep: end\n" ));
-
-#endif /* FT_DEBUG_LEVEL_TRACE */
-
}
-#ifdef _STANDALONE_
+#ifdef STANDALONE_
/*************************************************************************/
/* */
- /* The following function should only compile in stand-alone mode, */
+ /* The following functions should only compile in stand-alone mode, */
/* i.e., when building this component without the rest of FreeType. */
/* */
/*************************************************************************/
@@ -1744,32 +1603,102 @@
return 0;
Exit:
- FT_TRACE5(( "FT_Outline_Decompose: Error %d\n", error ));
+ FT_TRACE5(( "FT_Outline_Decompose: Error 0x%x\n", error ));
return error;
Invalid_Outline:
return FT_THROW( Invalid_Outline );
}
-#endif /* _STANDALONE_ */
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* FT_Outline_Get_CBox */
+ /* */
+ /* <Description> */
+ /* Return an outline's `control box'. The control box encloses all */
+ /* the outline's points, including Bézier control points. Though it */
+ /* coincides with the exact bounding box for most glyphs, it can be */
+ /* slightly larger in some situations (like when rotating an outline */
+ /* that contains Bézier outside arcs). */
+ /* */
+ /* Computing the control box is very fast, while getting the bounding */
+ /* box can take much more time as it needs to walk over all segments */
+ /* and arcs in the outline. To get the latter, you can use the */
+ /* `ftbbox' component, which is dedicated to this single task. */
+ /* */
+ /* <Input> */
+ /* outline :: A pointer to the source outline descriptor. */
+ /* */
+ /* <Output> */
+ /* acbox :: The outline's control box. */
+ /* */
+ /* <Note> */
+ /* See @FT_Glyph_Get_CBox for a discussion of tricky fonts. */
+ /* */
- typedef struct gray_TBand_
+ static void
+ FT_Outline_Get_CBox( const FT_Outline* outline,
+ FT_BBox *acbox )
{
- TPos min, max;
+ TPos xMin, yMin, xMax, yMax;
- } gray_TBand;
+
+ if ( outline && acbox )
+ {
+ if ( outline->n_points == 0 )
+ {
+ xMin = 0;
+ yMin = 0;
+ xMax = 0;
+ yMax = 0;
+ }
+ else
+ {
+ FT_Vector* vec = outline->points;
+ FT_Vector* limit = vec + outline->n_points;
+
+
+ xMin = xMax = vec->x;
+ yMin = yMax = vec->y;
+ vec++;
+
+ for ( ; vec < limit; vec++ )
+ {
+ TPos x, y;
+
+
+ x = vec->x;
+ if ( x < xMin ) xMin = x;
+ if ( x > xMax ) xMax = x;
+
+ y = vec->y;
+ if ( y < yMin ) yMin = y;
+ if ( y > yMax ) yMax = y;
+ }
+ }
+ acbox->xMin = xMin;
+ acbox->xMax = xMax;
+ acbox->yMin = yMin;
+ acbox->yMax = yMax;
+ }
+ }
+
+#endif /* STANDALONE_ */
FT_DEFINE_OUTLINE_FUNCS(
func_interface,
- (FT_Outline_MoveTo_Func) gray_move_to,
- (FT_Outline_LineTo_Func) gray_line_to,
- (FT_Outline_ConicTo_Func)gray_conic_to,
- (FT_Outline_CubicTo_Func)gray_cubic_to,
- 0,
- 0 )
+ (FT_Outline_MoveTo_Func) gray_move_to, /* move_to */
+ (FT_Outline_LineTo_Func) gray_line_to, /* line_to */
+ (FT_Outline_ConicTo_Func)gray_conic_to, /* conic_to */
+ (FT_Outline_CubicTo_Func)gray_cubic_to, /* cubic_to */
+
+ 0, /* shift */
+ 0 /* delta */
+ )
static int
@@ -1788,10 +1717,21 @@
error = FT_Outline_Decompose( &ras.outline, &func_interface, &ras );
if ( !ras.invalid )
gray_record_cell( RAS_VAR );
+
+ FT_TRACE7(( "band [%d..%d]: %d cell%s\n",
+ ras.min_ey,
+ ras.max_ey,
+ ras.num_cells,
+ ras.num_cells == 1 ? "" : "s" ));
}
else
+ {
error = FT_THROW( Memory_Overflow );
+ FT_TRACE7(( "band [%d..%d]: to be bisected\n",
+ ras.min_ey, ras.max_ey ));
+ }
+
return error;
}
@@ -1799,158 +1739,108 @@
static int
gray_convert_glyph( RAS_ARG )
{
- gray_TBand bands[40];
- gray_TBand* volatile band;
- int volatile n, num_bands;
- TPos volatile min, max, max_y;
- FT_BBox* clip;
+ const TCoord yMin = ras.min_ey;
+ const TCoord yMax = ras.max_ey;
+ const TCoord xMin = ras.min_ex;
+ const TCoord xMax = ras.max_ex;
+ TCell buffer[FT_MAX_GRAY_POOL];
+ size_t height = (size_t)( yMax - yMin );
+ size_t n = FT_MAX_GRAY_POOL / 8;
+ TCoord y;
+ TCoord bands[32]; /* enough to accommodate bisections */
+ TCoord* band;
- /* Set up state in the raster object */
- gray_compute_cbox( RAS_VAR );
-
- /* clip to target bitmap, exit if nothing to do */
- clip = &ras.clip_box;
-
- if ( ras.max_ex <= clip->xMin || ras.min_ex >= clip->xMax ||
- ras.max_ey <= clip->yMin || ras.min_ey >= clip->yMax )
- return 0;
-
- if ( ras.min_ex < clip->xMin ) ras.min_ex = clip->xMin;
- if ( ras.min_ey < clip->yMin ) ras.min_ey = clip->yMin;
-
- if ( ras.max_ex > clip->xMax ) ras.max_ex = clip->xMax;
- if ( ras.max_ey > clip->yMax ) ras.max_ey = clip->yMax;
-
- ras.count_ex = ras.max_ex - ras.min_ex;
- ras.count_ey = ras.max_ey - ras.min_ey;
/* set up vertical bands */
- num_bands = (int)( ( ras.max_ey - ras.min_ey ) / ras.band_size );
- if ( num_bands == 0 )
- num_bands = 1;
- if ( num_bands >= 39 )
- num_bands = 39;
-
- ras.band_shoot = 0;
-
- min = ras.min_ey;
- max_y = ras.max_ey;
-
- for ( n = 0; n < num_bands; n++, min = max )
+ if ( height > n )
{
- max = min + ras.band_size;
- if ( n == num_bands - 1 || max > max_y )
- max = max_y;
+ /* two divisions rounded up */
+ n = ( height + n - 1 ) / n;
+ height = ( height + n - 1 ) / n;
+ }
- bands[0].min = min;
- bands[0].max = max;
- band = bands;
+ /* memory management */
+ n = ( height * sizeof ( PCell ) + sizeof ( TCell ) - 1 ) / sizeof ( TCell );
- while ( band >= bands )
+ ras.cells = buffer + n;
+ ras.max_cells = (FT_PtrDist)( FT_MAX_GRAY_POOL - n );
+ ras.ycells = (PCell*)buffer;
+
+ for ( y = yMin; y < yMax; )
+ {
+ ras.min_ey = y;
+ y += height;
+ ras.max_ey = FT_MIN( y, yMax );
+
+ band = bands;
+ band[1] = xMin;
+ band[0] = xMax;
+
+ do
{
- TPos bottom, top, middle;
- int error;
-
- {
- PCell cells_max;
- int yindex;
- long cell_start, cell_end, cell_mod;
+ TCoord width = band[0] - band[1];
+ int error;
- ras.ycells = (PCell*)ras.buffer;
- ras.ycount = band->max - band->min;
-
- cell_start = (long)sizeof ( PCell ) * ras.ycount;
- cell_mod = cell_start % (long)sizeof ( TCell );
- if ( cell_mod > 0 )
- cell_start += (long)sizeof ( TCell ) - cell_mod;
-
- cell_end = ras.buffer_size;
- cell_end -= cell_end % (long)sizeof ( TCell );
-
- cells_max = (PCell)( (char*)ras.buffer + cell_end );
- ras.cells = (PCell)( (char*)ras.buffer + cell_start );
- if ( ras.cells >= cells_max )
- goto ReduceBands;
-
- ras.max_cells = cells_max - ras.cells;
- if ( ras.max_cells < 2 )
- goto ReduceBands;
-
- for ( yindex = 0; yindex < ras.ycount; yindex++ )
- ras.ycells[yindex] = NULL;
- }
+ FT_MEM_ZERO( ras.ycells, height * sizeof ( PCell ) );
ras.num_cells = 0;
ras.invalid = 1;
- ras.min_ey = band->min;
- ras.max_ey = band->max;
- ras.count_ey = band->max - band->min;
+ ras.min_ex = band[1];
+ ras.max_ex = band[0];
error = gray_convert_glyph_inner( RAS_VAR );
if ( !error )
{
- gray_sweep( RAS_VAR_ &ras.target );
+ gray_sweep( RAS_VAR );
band--;
continue;
}
else if ( error != ErrRaster_Memory_Overflow )
return 1;
- ReduceBands:
/* render pool overflow; we will reduce the render band by half */
- bottom = band->min;
- top = band->max;
- middle = bottom + ( ( top - bottom ) >> 1 );
+ width >>= 1;
- /* This is too complex for a single scanline; there must */
- /* be some problems. */
- if ( middle == bottom )
+ /* this should never happen even with tiny rendering pool */
+ if ( width == 0 )
{
-#ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE7(( "gray_convert_glyph: rotten glyph\n" ));
-#endif
return 1;
}
- if ( bottom-top >= ras.band_size )
- ras.band_shoot++;
-
- band[1].min = bottom;
- band[1].max = middle;
- band[0].min = middle;
- band[0].max = top;
band++;
- }
+ band[1] = band[0];
+ band[0] += width;
+ } while ( band >= bands );
}
- if ( ras.band_shoot > 8 && ras.band_size > 16 )
- ras.band_size = ras.band_size / 2;
-
return 0;
}
static int
- gray_raster_render( gray_PRaster raster,
+ gray_raster_render( FT_Raster raster,
const FT_Raster_Params* params )
{
- const FT_Outline* outline = (const FT_Outline*)params->source;
- const FT_Bitmap* target_map = params->target;
+ const FT_Outline* outline = (const FT_Outline*)params->source;
+ const FT_Bitmap* target_map = params->target;
+ FT_BBox cbox, clip;
+#ifndef FT_STATIC_RASTER
gray_TWorker worker[1];
-
- TCell buffer[FT_MAX( FT_RENDER_POOL_SIZE, 2048 ) / sizeof ( TCell )];
- long buffer_size = sizeof ( buffer );
- int band_size = (int)( buffer_size /
- (long)( sizeof ( TCell ) * 8 ) );
+#endif
if ( !raster )
return FT_THROW( Invalid_Argument );
+ /* this version does not support monochrome rendering */
+ if ( !( params->flags & FT_RASTER_FLAG_AA ) )
+ return FT_THROW( Invalid_Mode );
+
if ( !outline )
return FT_THROW( Invalid_Outline );
@@ -1965,9 +1855,19 @@
outline->contours[outline->n_contours - 1] + 1 )
return FT_THROW( Invalid_Outline );
- /* if direct mode is not set, we must have a target bitmap */
- if ( !( params->flags & FT_RASTER_FLAG_DIRECT ) )
+ ras.outline = *outline;
+
+ if ( params->flags & FT_RASTER_FLAG_DIRECT )
{
+ if ( !params->gray_spans )
+ return 0;
+
+ ras.render_span = (FT_Raster_Span_Func)params->gray_spans;
+ ras.render_span_data = params->user;
+ }
+ else
+ {
+ /* if direct mode is not set, we must have a target bitmap */
if ( !target_map )
return FT_THROW( Invalid_Argument );
@@ -1977,51 +1877,59 @@
if ( !target_map->buffer )
return FT_THROW( Invalid_Argument );
+
+ if ( target_map->pitch < 0 )
+ ras.target.origin = target_map->buffer;
+ else
+ ras.target.origin = target_map->buffer
+ + ( target_map->rows - 1 ) * (unsigned int)target_map->pitch;
+
+ ras.target.pitch = target_map->pitch;
+
+ ras.render_span = (FT_Raster_Span_Func)NULL;
+ ras.render_span_data = NULL;
}
- /* this version does not support monochrome rendering */
- if ( !( params->flags & FT_RASTER_FLAG_AA ) )
- return FT_THROW( Invalid_Mode );
+ FT_Outline_Get_CBox( outline, &cbox );
+
+ /* reject too large outline coordinates */
+ if ( cbox.xMin < -0x1000000L || cbox.xMax > 0x1000000L ||
+ cbox.yMin < -0x1000000L || cbox.yMax > 0x1000000L )
+ return FT_THROW( Invalid_Outline );
+
+ /* truncate the bounding box to integer pixels */
+ cbox.xMin = cbox.xMin >> 6;
+ cbox.yMin = cbox.yMin >> 6;
+ cbox.xMax = ( cbox.xMax + 63 ) >> 6;
+ cbox.yMax = ( cbox.yMax + 63 ) >> 6;
/* compute clipping box */
if ( !( params->flags & FT_RASTER_FLAG_DIRECT ) )
{
/* compute clip box from target pixmap */
- ras.clip_box.xMin = 0;
- ras.clip_box.yMin = 0;
- ras.clip_box.xMax = (FT_Pos)target_map->width;
- ras.clip_box.yMax = (FT_Pos)target_map->rows;
+ clip.xMin = 0;
+ clip.yMin = 0;
+ clip.xMax = (FT_Pos)target_map->width;
+ clip.yMax = (FT_Pos)target_map->rows;
}
else if ( params->flags & FT_RASTER_FLAG_CLIP )
- ras.clip_box = params->clip_box;
+ clip = params->clip_box;
else
{
- ras.clip_box.xMin = -32768L;
- ras.clip_box.yMin = -32768L;
- ras.clip_box.xMax = 32767L;
- ras.clip_box.yMax = 32767L;
+ clip.xMin = -32768L;
+ clip.yMin = -32768L;
+ clip.xMax = 32767L;
+ clip.yMax = 32767L;
}
- gray_init_cells( RAS_VAR_ buffer, buffer_size );
+ /* clip to target bitmap, exit if nothing to do */
+ ras.min_ex = FT_MAX( cbox.xMin, clip.xMin );
+ ras.min_ey = FT_MAX( cbox.yMin, clip.yMin );
+ ras.max_ex = FT_MIN( cbox.xMax, clip.xMax );
+ ras.max_ey = FT_MIN( cbox.yMax, clip.yMax );
- ras.outline = *outline;
- ras.num_cells = 0;
- ras.invalid = 1;
- ras.band_size = band_size;
- ras.num_gray_spans = 0;
- ras.span_y = 0;
-
- if ( params->flags & FT_RASTER_FLAG_DIRECT )
- {
- ras.render_span = (FT_Raster_Span_Func)params->gray_spans;
- ras.render_span_data = params->user;
- }
- else
- {
- ras.target = *target_map;
- ras.render_span = (FT_Raster_Span_Func)gray_render_span;
- ras.render_span_data = &ras;
- }
+ if ( ras.max_ex <= ras.min_ex || ras.max_ey <= ras.min_ey )
+ return 0;
return gray_convert_glyph( RAS_VAR );
}
@@ -2030,7 +1938,7 @@
/**** RASTER OBJECT CREATION: In stand-alone mode, we simply use *****/
/**** a static object. *****/
-#ifdef _STANDALONE_
+#ifdef STANDALONE_
static int
gray_raster_new( void* memory,
@@ -2042,7 +1950,7 @@
*araster = (FT_Raster)&the_raster;
- FT_MEM_ZERO( &the_raster, sizeof ( the_raster ) );
+ FT_ZERO( &the_raster );
return 0;
}
@@ -2055,7 +1963,7 @@
FT_UNUSED( raster );
}
-#else /* !_STANDALONE_ */
+#else /* !STANDALONE_ */
static int
gray_raster_new( FT_Memory memory,
@@ -2085,13 +1993,13 @@
FT_FREE( raster );
}
-#endif /* !_STANDALONE_ */
+#endif /* !STANDALONE_ */
static void
- gray_raster_reset( FT_Raster raster,
- char* pool_base,
- long pool_size )
+ gray_raster_reset( FT_Raster raster,
+ unsigned char* pool_base,
+ unsigned long pool_size )
{
FT_UNUSED( raster );
FT_UNUSED( pool_base );
@@ -2118,11 +2026,12 @@
FT_GLYPH_FORMAT_OUTLINE,
- (FT_Raster_New_Func) gray_raster_new,
- (FT_Raster_Reset_Func) gray_raster_reset,
- (FT_Raster_Set_Mode_Func)gray_raster_set_mode,
- (FT_Raster_Render_Func) gray_raster_render,
- (FT_Raster_Done_Func) gray_raster_done )
+ (FT_Raster_New_Func) gray_raster_new, /* raster_new */
+ (FT_Raster_Reset_Func) gray_raster_reset, /* raster_reset */
+ (FT_Raster_Set_Mode_Func)gray_raster_set_mode, /* raster_set_mode */
+ (FT_Raster_Render_Func) gray_raster_render, /* raster_render */
+ (FT_Raster_Done_Func) gray_raster_done /* raster_done */
+ )
/* END */
diff --git a/src/smooth/ftgrays.h b/src/smooth/ftgrays.h
index 1b57603..9e11ca6 100644
--- a/src/smooth/ftgrays.h
+++ b/src/smooth/ftgrays.h
@@ -4,7 +4,7 @@
/* */
/* FreeType smooth renderer declaration */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,15 +16,15 @@
/***************************************************************************/
-#ifndef __FTGRAYS_H__
-#define __FTGRAYS_H__
+#ifndef FTGRAYS_H_
+#define FTGRAYS_H_
#ifdef __cplusplus
extern "C" {
#endif
-#ifdef _STANDALONE_
+#ifdef STANDALONE_
#include "ftimage.h"
#else
#include <ft2build.h>
@@ -52,7 +52,7 @@
}
#endif
-#endif /* __FTGRAYS_H__ */
+#endif /* FTGRAYS_H_ */
/* END */
diff --git a/src/smooth/ftsmerrs.h b/src/smooth/ftsmerrs.h
index cc38aa1..226dc1b 100644
--- a/src/smooth/ftsmerrs.h
+++ b/src/smooth/ftsmerrs.h
@@ -4,7 +4,7 @@
/* */
/* smooth renderer error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,12 +23,12 @@
/* */
/*************************************************************************/
-#ifndef __FTSMERRS_H__
-#define __FTSMERRS_H__
+#ifndef FTSMERRS_H_
+#define FTSMERRS_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX Smooth_Err_
@@ -36,7 +36,7 @@
#include FT_ERRORS_H
-#endif /* __FTSMERRS_H__ */
+#endif /* FTSMERRS_H_ */
/* END */
diff --git a/src/smooth/ftsmooth.c b/src/smooth/ftsmooth.c
index 3620550..ef176bd 100644
--- a/src/smooth/ftsmooth.c
+++ b/src/smooth/ftsmooth.c
@@ -4,7 +4,7 @@
/* */
/* Anti-aliasing renderer interface (body). */
/* */
-/* Copyright 2000-2015 by */
+/* Copyright 2000-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -31,12 +31,7 @@
static FT_Error
ft_smooth_init( FT_Renderer render )
{
- FT_Library library = FT_MODULE_LIBRARY( render );
-
-
- render->clazz->raster_class->raster_reset( render->raster,
- library->raster_pool,
- library->raster_pool_size );
+ render->clazz->raster_class->raster_reset( render->raster, NULL, 0 );
return 0;
}
@@ -87,7 +82,7 @@
FT_GlyphSlot slot,
FT_BBox* cbox )
{
- FT_MEM_ZERO( cbox, sizeof ( *cbox ) );
+ FT_ZERO( cbox );
if ( slot->format == render->glyph_format )
FT_Outline_Get_CBox( &slot->outline, cbox );
@@ -102,26 +97,17 @@
const FT_Vector* origin,
FT_Render_Mode required_mode )
{
- FT_Error error;
+ FT_Error error = FT_Err_Ok;
FT_Outline* outline = &slot->outline;
FT_Bitmap* bitmap = &slot->bitmap;
FT_Memory memory = render->root.memory;
- FT_BBox cbox;
FT_Pos x_shift = 0;
FT_Pos y_shift = 0;
- FT_Pos x_left, y_top;
- FT_Pos width, height, pitch;
-#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- FT_Pos height_org, width_org;
-#endif
- FT_Int hmul = mode == FT_RENDER_MODE_LCD;
- FT_Int vmul = mode == FT_RENDER_MODE_LCD_V;
+ FT_Int hmul = ( mode == FT_RENDER_MODE_LCD );
+ FT_Int vmul = ( mode == FT_RENDER_MODE_LCD_V );
FT_Raster_Params params;
- FT_Bool have_outline_shifted = FALSE;
- FT_Bool have_buffer = FALSE;
-
/* check glyph image format */
if ( slot->format != render->glyph_format )
@@ -137,91 +123,6 @@
goto Exit;
}
- if ( origin )
- {
- x_shift = origin->x;
- y_shift = origin->y;
- }
-
- /* compute the control box, and grid fit it */
- /* taking into account the origin shift */
- FT_Outline_Get_CBox( outline, &cbox );
-
- cbox.xMin = FT_PIX_FLOOR( cbox.xMin + x_shift );
- cbox.yMin = FT_PIX_FLOOR( cbox.yMin + y_shift );
- cbox.xMax = FT_PIX_CEIL( cbox.xMax + x_shift );
- cbox.yMax = FT_PIX_CEIL( cbox.yMax + y_shift );
-
- x_shift -= cbox.xMin;
- y_shift -= cbox.yMin;
-
- x_left = cbox.xMin >> 6;
- y_top = cbox.yMax >> 6;
-
- width = (FT_ULong)( cbox.xMax - cbox.xMin ) >> 6;
- height = (FT_ULong)( cbox.yMax - cbox.yMin ) >> 6;
-
-#ifndef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- width_org = width;
- height_org = height;
-#endif
-
- pitch = width;
- if ( hmul )
- {
- width *= 3;
- pitch = FT_PAD_CEIL( width, 4 );
- }
-
- if ( vmul )
- height *= 3;
-
-#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-
- if ( slot->library->lcd_filter_func )
- {
- FT_Int extra = slot->library->lcd_extra;
-
-
- if ( hmul )
- {
- x_shift += 64 * ( extra >> 1 );
- x_left -= extra >> 1;
- width += 3 * extra;
- pitch = FT_PAD_CEIL( width, 4 );
- }
-
- if ( vmul )
- {
- y_shift += 64 * ( extra >> 1 );
- y_top += extra >> 1;
- height += 3 * extra;
- }
- }
-
-#endif
-
- /*
- * XXX: on 16bit system, we return an error for huge bitmap
- * to prevent an overflow.
- */
- if ( x_left > FT_INT_MAX || y_top > FT_INT_MAX ||
- x_left < FT_INT_MIN || y_top < FT_INT_MIN )
- {
- error = FT_THROW( Invalid_Pixel_Size );
- goto Exit;
- }
-
- /* Required check is (pitch * height < FT_ULONG_MAX), */
- /* but we care realistic cases only. Always pitch <= width. */
- if ( width > 0x7FFF || height > 0x7FFF )
- {
- FT_ERROR(( "ft_smooth_render_generic: glyph too large: %u x %u\n",
- width, height ));
- error = FT_THROW( Raster_Overflow );
- goto Exit;
- }
-
/* release old bitmap buffer */
if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
{
@@ -229,30 +130,30 @@
slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
}
+ ft_glyphslot_preset_bitmap( slot, mode, origin );
+
/* allocate new one */
- if ( FT_ALLOC( bitmap->buffer, (FT_ULong)( pitch * height ) ) )
+ if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, bitmap->pitch ) )
goto Exit;
- else
- have_buffer = TRUE;
slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
- slot->format = FT_GLYPH_FORMAT_BITMAP;
- slot->bitmap_left = (FT_Int)x_left;
- slot->bitmap_top = (FT_Int)y_top;
+ x_shift = 64 * -slot->bitmap_left;
+ y_shift = 64 * -slot->bitmap_top;
+ if ( bitmap->pixel_mode == FT_PIXEL_MODE_LCD_V )
+ y_shift += 64 * (FT_Int)bitmap->rows / 3;
+ else
+ y_shift += 64 * (FT_Int)bitmap->rows;
- bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
- bitmap->num_grays = 256;
- bitmap->width = (unsigned int)width;
- bitmap->rows = (unsigned int)height;
- bitmap->pitch = pitch;
+ if ( origin )
+ {
+ x_shift += origin->x;
+ y_shift += origin->y;
+ }
/* translate outline to render it into the bitmap */
if ( x_shift || y_shift )
- {
FT_Outline_Translate( outline, x_shift, y_shift );
- have_outline_shifted = TRUE;
- }
/* set up parameters */
params.target = bitmap;
@@ -299,80 +200,143 @@
if ( error )
goto Exit;
- if ( slot->library->lcd_filter_func )
- slot->library->lcd_filter_func( bitmap, mode, slot->library );
+ /* finally apply filtering */
+ if ( hmul || vmul )
+ {
+ FT_Byte* lcd_weights;
+ FT_Bitmap_LcdFilterFunc lcd_filter_func;
+
+
+ /* Per-face LCD filtering takes priority if set up. */
+ if ( slot->face && slot->face->internal->lcd_filter_func )
+ {
+ lcd_weights = slot->face->internal->lcd_weights;
+ lcd_filter_func = slot->face->internal->lcd_filter_func;
+ }
+ else
+ {
+ lcd_weights = slot->library->lcd_weights;
+ lcd_filter_func = slot->library->lcd_filter_func;
+ }
+
+ if ( lcd_filter_func )
+ lcd_filter_func( bitmap, mode, lcd_weights );
+ }
#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
- /* render outline into bitmap */
- error = render->raster_render( render->raster, ¶ms );
- if ( error )
- goto Exit;
-
- /* expand it horizontally */
- if ( hmul )
+ if ( hmul ) /* lcd */
{
- FT_Byte* line = bitmap->buffer;
- FT_UInt hh;
+ FT_Byte* line;
+ FT_Byte* temp = NULL;
+ FT_UInt i, j;
+
+ unsigned int height = bitmap->rows;
+ unsigned int width = bitmap->width;
+ int pitch = bitmap->pitch;
- for ( hh = height_org; hh > 0; hh--, line += pitch )
+ /* Render 3 separate monochrome bitmaps, shifting the outline */
+ /* by 1/3 pixel. */
+ width /= 3;
+
+ bitmap->buffer += width;
+
+ error = render->raster_render( render->raster, ¶ms );
+ if ( error )
+ goto Exit;
+
+ FT_Outline_Translate( outline, -21, 0 );
+ x_shift -= 21;
+ bitmap->buffer += width;
+
+ error = render->raster_render( render->raster, ¶ms );
+ if ( error )
+ goto Exit;
+
+ FT_Outline_Translate( outline, 42, 0 );
+ x_shift += 42;
+ bitmap->buffer -= 2 * width;
+
+ error = render->raster_render( render->raster, ¶ms );
+ if ( error )
+ goto Exit;
+
+ /* XXX: Rearrange the bytes according to FT_PIXEL_MODE_LCD. */
+ /* XXX: It is more efficient to render every third byte above. */
+
+ if ( FT_ALLOC( temp, (FT_ULong)pitch ) )
+ goto Exit;
+
+ for ( i = 0; i < height; i++ )
{
- FT_UInt xx;
- FT_Byte* end = line + width;
-
-
- for ( xx = width_org; xx > 0; xx-- )
+ line = bitmap->buffer + i * (FT_ULong)pitch;
+ for ( j = 0; j < width; j++ )
{
- FT_UInt pixel = line[xx-1];
-
-
- end[-3] = (FT_Byte)pixel;
- end[-2] = (FT_Byte)pixel;
- end[-1] = (FT_Byte)pixel;
- end -= 3;
+ temp[3 * j ] = line[j];
+ temp[3 * j + 1] = line[j + width];
+ temp[3 * j + 2] = line[j + width + width];
}
+ FT_MEM_COPY( line, temp, pitch );
}
- }
- /* expand it vertically */
- if ( vmul )
+ FT_FREE( temp );
+ }
+ else if ( vmul ) /* lcd_v */
{
- FT_Byte* read = bitmap->buffer + ( height - height_org ) * pitch;
- FT_Byte* write = bitmap->buffer;
- FT_UInt hh;
+ int pitch = bitmap->pitch;
- for ( hh = height_org; hh > 0; hh-- )
- {
- ft_memcpy( write, read, pitch );
- write += pitch;
+ /* Render 3 separate monochrome bitmaps, shifting the outline */
+ /* by 1/3 pixel. Triple the pitch to render on each third row. */
+ bitmap->pitch *= 3;
+ bitmap->rows /= 3;
- ft_memcpy( write, read, pitch );
- write += pitch;
+ bitmap->buffer += pitch;
- ft_memcpy( write, read, pitch );
- write += pitch;
- read += pitch;
- }
+ error = render->raster_render( render->raster, ¶ms );
+ if ( error )
+ goto Exit;
+
+ FT_Outline_Translate( outline, 0, 21 );
+ y_shift += 21;
+ bitmap->buffer += pitch;
+
+ error = render->raster_render( render->raster, ¶ms );
+ if ( error )
+ goto Exit;
+
+ FT_Outline_Translate( outline, 0, -42 );
+ y_shift -= 42;
+ bitmap->buffer -= 2 * pitch;
+
+ error = render->raster_render( render->raster, ¶ms );
+ if ( error )
+ goto Exit;
+
+ bitmap->pitch /= 3;
+ bitmap->rows *= 3;
}
+ else /* grayscale */
+ error = render->raster_render( render->raster, ¶ms );
#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
- /* everything is fine; don't deallocate buffer */
- have_buffer = FALSE;
-
- error = FT_Err_Ok;
-
Exit:
- if ( have_outline_shifted )
- FT_Outline_Translate( outline, -x_shift, -y_shift );
- if ( have_buffer )
+ if ( !error )
+ {
+ /* everything is fine; the glyph is now officially a bitmap */
+ slot->format = FT_GLYPH_FORMAT_BITMAP;
+ }
+ else if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
{
FT_FREE( bitmap->buffer );
slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
}
+ if ( x_shift || y_shift )
+ FT_Outline_Translate( outline, -x_shift, -y_shift );
+
return error;
}
@@ -399,14 +363,8 @@
FT_Render_Mode mode,
const FT_Vector* origin )
{
- FT_Error error;
-
- error = ft_smooth_render_generic( render, slot, mode, origin,
- FT_RENDER_MODE_LCD );
- if ( !error )
- slot->bitmap.pixel_mode = FT_PIXEL_MODE_LCD;
-
- return error;
+ return ft_smooth_render_generic( render, slot, mode, origin,
+ FT_RENDER_MODE_LCD );
}
@@ -417,18 +375,13 @@
FT_Render_Mode mode,
const FT_Vector* origin )
{
- FT_Error error;
-
- error = ft_smooth_render_generic( render, slot, mode, origin,
- FT_RENDER_MODE_LCD_V );
- if ( !error )
- slot->bitmap.pixel_mode = FT_PIXEL_MODE_LCD_V;
-
- return error;
+ return ft_smooth_render_generic( render, slot, mode, origin,
+ FT_RENDER_MODE_LCD_V );
}
- FT_DEFINE_RENDERER( ft_smooth_renderer_class,
+ FT_DEFINE_RENDERER(
+ ft_smooth_renderer_class,
FT_MODULE_RENDERER,
sizeof ( FT_RendererRec ),
@@ -437,25 +390,25 @@
0x10000L,
0x20000L,
- 0, /* module specific interface */
+ NULL, /* module specific interface */
- (FT_Module_Constructor)ft_smooth_init,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- ,
+ (FT_Module_Constructor)ft_smooth_init, /* module_init */
+ (FT_Module_Destructor) NULL, /* module_done */
+ (FT_Module_Requester) NULL, /* get_interface */
FT_GLYPH_FORMAT_OUTLINE,
- (FT_Renderer_RenderFunc) ft_smooth_render,
- (FT_Renderer_TransformFunc)ft_smooth_transform,
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox,
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode,
+ (FT_Renderer_RenderFunc) ft_smooth_render, /* render_glyph */
+ (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */
+ (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
+ (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
- (FT_Raster_Funcs*) &FT_GRAYS_RASTER_GET
+ (FT_Raster_Funcs*)&FT_GRAYS_RASTER_GET /* raster_class */
)
- FT_DEFINE_RENDERER( ft_smooth_lcd_renderer_class,
+ FT_DEFINE_RENDERER(
+ ft_smooth_lcd_renderer_class,
FT_MODULE_RENDERER,
sizeof ( FT_RendererRec ),
@@ -464,24 +417,25 @@
0x10000L,
0x20000L,
- 0, /* module specific interface */
+ NULL, /* module specific interface */
- (FT_Module_Constructor)ft_smooth_init,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- ,
+ (FT_Module_Constructor)ft_smooth_init, /* module_init */
+ (FT_Module_Destructor) NULL, /* module_done */
+ (FT_Module_Requester) NULL, /* get_interface */
FT_GLYPH_FORMAT_OUTLINE,
- (FT_Renderer_RenderFunc) ft_smooth_render_lcd,
- (FT_Renderer_TransformFunc)ft_smooth_transform,
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox,
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode,
+ (FT_Renderer_RenderFunc) ft_smooth_render_lcd, /* render_glyph */
+ (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */
+ (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
+ (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
- (FT_Raster_Funcs*) &FT_GRAYS_RASTER_GET
+ (FT_Raster_Funcs*)&FT_GRAYS_RASTER_GET /* raster_class */
)
- FT_DEFINE_RENDERER( ft_smooth_lcdv_renderer_class,
+
+ FT_DEFINE_RENDERER(
+ ft_smooth_lcdv_renderer_class,
FT_MODULE_RENDERER,
sizeof ( FT_RendererRec ),
@@ -490,21 +444,20 @@
0x10000L,
0x20000L,
- 0, /* module specific interface */
+ NULL, /* module specific interface */
- (FT_Module_Constructor)ft_smooth_init,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- ,
+ (FT_Module_Constructor)ft_smooth_init, /* module_init */
+ (FT_Module_Destructor) NULL, /* module_done */
+ (FT_Module_Requester) NULL, /* get_interface */
FT_GLYPH_FORMAT_OUTLINE,
- (FT_Renderer_RenderFunc) ft_smooth_render_lcd_v,
- (FT_Renderer_TransformFunc)ft_smooth_transform,
- (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox,
- (FT_Renderer_SetModeFunc) ft_smooth_set_mode,
+ (FT_Renderer_RenderFunc) ft_smooth_render_lcd_v, /* render_glyph */
+ (FT_Renderer_TransformFunc)ft_smooth_transform, /* transform_glyph */
+ (FT_Renderer_GetCBoxFunc) ft_smooth_get_cbox, /* get_glyph_cbox */
+ (FT_Renderer_SetModeFunc) ft_smooth_set_mode, /* set_mode */
- (FT_Raster_Funcs*) &FT_GRAYS_RASTER_GET
+ (FT_Raster_Funcs*)&FT_GRAYS_RASTER_GET /* raster_class */
)
diff --git a/src/smooth/ftsmooth.h b/src/smooth/ftsmooth.h
index 765018c..c76ffc5 100644
--- a/src/smooth/ftsmooth.h
+++ b/src/smooth/ftsmooth.h
@@ -4,7 +4,7 @@
/* */
/* Anti-aliasing renderer interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTSMOOTH_H__
-#define __FTSMOOTH_H__
+#ifndef FTSMOOTH_H_
+#define FTSMOOTH_H_
#include <ft2build.h>
@@ -27,23 +27,16 @@
FT_BEGIN_HEADER
-#ifndef FT_CONFIG_OPTION_NO_STD_RASTER
- FT_DECLARE_RENDERER( ft_std_renderer_class )
-#endif
-
-#ifndef FT_CONFIG_OPTION_NO_SMOOTH_RASTER
FT_DECLARE_RENDERER( ft_smooth_renderer_class )
FT_DECLARE_RENDERER( ft_smooth_lcd_renderer_class )
- FT_DECLARE_RENDERER( ft_smooth_lcd_v_renderer_class )
-#endif
-
+ FT_DECLARE_RENDERER( ft_smooth_lcdv_renderer_class )
FT_END_HEADER
-#endif /* __FTSMOOTH_H__ */
+#endif /* FTSMOOTH_H_ */
/* END */
diff --git a/src/smooth/ftspic.c b/src/smooth/ftspic.c
index 8e6ed57..10f04cf 100644
--- a/src/smooth/ftspic.c
+++ b/src/smooth/ftspic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for smooth module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/smooth/ftspic.h b/src/smooth/ftspic.h
index 99b9f0e..80fb64c 100644
--- a/src/smooth/ftspic.h
+++ b/src/smooth/ftspic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for smooth module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,14 +16,15 @@
/***************************************************************************/
-#ifndef __FTSPIC_H__
-#define __FTSPIC_H__
+#ifndef FTSPIC_H_
+#define FTSPIC_H_
+
+
+#include FT_INTERNAL_PIC_H
FT_BEGIN_HEADER
-#include FT_INTERNAL_PIC_H
-
#ifndef FT_CONFIG_OPTION_PIC
#define FT_GRAYS_RASTER_GET ft_grays_raster
@@ -68,7 +69,7 @@
FT_END_HEADER
-#endif /* __FTSPIC_H__ */
+#endif /* FTSPIC_H_ */
/* END */
diff --git a/src/smooth/module.mk b/src/smooth/module.mk
index 740936f..5b8bc3b 100644
--- a/src/smooth/module.mk
+++ b/src/smooth/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/smooth/rules.mk b/src/smooth/rules.mk
index f00ebd5..f30824a 100644
--- a/src/smooth/rules.mk
+++ b/src/smooth/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/smooth/smooth.c b/src/smooth/smooth.c
index 4ca4344..5249a89 100644
--- a/src/smooth/smooth.c
+++ b/src/smooth/smooth.c
@@ -4,7 +4,7 @@
/* */
/* FreeType anti-aliasing rasterer module component (body only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,11 +17,11 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
-#include "ftspic.c"
+
#include "ftgrays.c"
#include "ftsmooth.c"
+#include "ftspic.c"
/* END */
diff --git a/src/tools/afblue.pl b/src/tools/afblue.pl
index 56b6452..7c6f1a7 100644
--- a/src/tools/afblue.pl
+++ b/src/tools/afblue.pl
@@ -5,7 +5,7 @@
#
# Process a blue zone character data file.
#
-# Copyright 2013-2015 by
+# Copyright 2013-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used,
@@ -38,7 +38,8 @@
my $curr_enum_element; # Name of the current enumeration element.
my $curr_offset; # The offset relative to current aux. variable.
-my $curr_elem_size; # The size of the current string or block.
+my $curr_elem_size; # The number of non-space characters in the current string or
+ # the number of elements in the current block.
my $have_sections = 0; # Boolean; set if start of a section has been seen.
my $have_strings; # Boolean; set if current section contains strings.
@@ -159,12 +160,14 @@
# A series of ASCII characters in the printable range.
my $s = shift;
- # We ignore spaces.
- $s =~ s/ //g;
+ # We reduce multiple space characters to a single one.
+ $s =~ s/ +/ /g;
- my $count = $s =~ s/\G(.)/'$1', /g;
- $curr_offset += $count;
- $curr_elem_size += $count;
+ # Count all non-space characters. Note that `()' applies a list context
+ # to the capture that is used to count the elements.
+ $curr_elem_size += () = $s =~ /[^ ]/g;
+
+ $curr_offset += $s =~ s/\G(.)/'$1', /g;
return $s;
}
diff --git a/src/tools/apinames.c b/src/tools/apinames.c
index 9f81b1a..06c3260 100644
--- a/src/tools/apinames.c
+++ b/src/tools/apinames.c
@@ -22,7 +22,7 @@
#include <ctype.h>
#define PROGRAM_NAME "apinames"
-#define PROGRAM_VERSION "0.2"
+#define PROGRAM_VERSION "0.3"
#define LINEBUFF_SIZE 1024
@@ -32,7 +32,8 @@
OUTPUT_WINDOWS_DEF, /* output a Windows .DEF file for Visual C++ or Mingw */
OUTPUT_BORLAND_DEF, /* output a Windows .DEF file for Borland C++ */
OUTPUT_WATCOM_LBC, /* output a Watcom Linker Command File */
- OUTPUT_NETWARE_IMP /* output a NetWare ImportFile */
+ OUTPUT_NETWARE_IMP, /* output a NetWare ImportFile */
+ OUTPUT_GNU_VERMAP /* output a version map for GNU or Solaris linker */
} OutputFormat;
@@ -90,14 +91,14 @@
max_names += (max_names >> 1) + 4;
the_names = (NameRec*)realloc( the_names,
sizeof ( the_names[0] ) * max_names );
- if ( the_names == NULL )
+ if ( !the_names )
panic( "not enough memory" );
}
nm = &the_names[num_names++];
nm->hash = h;
nm->name = (char*)malloc( len+1 );
- if ( nm->name == NULL )
+ if ( !nm->name )
panic( "not enough memory" );
memcpy( nm->name, name, len );
@@ -159,7 +160,7 @@
char temp[512];
- if ( dll_name == NULL )
+ if ( !dll_name )
{
fprintf( stderr,
"you must provide a DLL name with the -d option!\n" );
@@ -168,7 +169,7 @@
/* we must omit the .dll suffix from the library name */
dot = strchr( dll_name, '.' );
- if ( dot != NULL )
+ if ( dot )
{
int len = dot - dll_name;
@@ -190,7 +191,7 @@
case OUTPUT_NETWARE_IMP:
{
- if ( dll_name != NULL )
+ if ( dll_name )
fprintf( out, " (%s)\n", dll_name );
for ( nn = 0; nn < num_names - 1; nn++ )
fprintf( out, " %s,\n", the_names[nn].name );
@@ -198,6 +199,15 @@
}
break;
+ case OUTPUT_GNU_VERMAP:
+ {
+ fprintf( out, "{\n\tglobal:\n" );
+ for ( nn = 0; nn < num_names; nn++ )
+ fprintf( out, "\t\t%s;\n", the_names[nn].name );
+ fprintf( out, "\tlocal:\n\t\t*;\n};\n" );
+ }
+ break;
+
default: /* LIST */
for ( nn = 0; nn < num_names; nn++ )
fprintf( out, "%s\n", the_names[nn].name );
@@ -323,6 +333,7 @@
" -wB : output .DEF file for Borland C++\n"
" -wW : output Watcom Linker Response File\n"
" -wN : output NetWare Import File\n"
+ " -wL : output version map for GNU or Solaris linker\n"
"\n";
fprintf( stderr,
@@ -371,7 +382,7 @@
arg += 2;
out = fopen( arg, "wt" );
- if ( out == NULL )
+ if ( !out )
{
fprintf( stderr, "could not open '%s' for writing\n", argv[2] );
exit(3);
@@ -410,6 +421,10 @@
format = OUTPUT_NETWARE_IMP;
break;
+ case 'L':
+ format = OUTPUT_GNU_VERMAP;
+ break;
+
case 0:
break;
@@ -440,7 +455,7 @@
{
FILE* file = fopen( argv[0], "rb" );
- if ( file == NULL )
+ if ( !file )
fprintf( stderr, "unable to open '%s'\n", argv[0] );
else
{
diff --git a/src/tools/chktrcmp.py b/src/tools/chktrcmp.py
index ce6500c..4c40bda 100755
--- a/src/tools/chktrcmp.py
+++ b/src/tools/chktrcmp.py
@@ -15,7 +15,7 @@
KNOWN_COMPONENT = {}
SRC_FILE_DIRS = [ "src" ]
-TRACE_DEF_FILES = [ "include/internal/fttrace.h" ]
+TRACE_DEF_FILES = [ "include/freetype/internal/fttrace.h" ]
# --------------------------------------------------------------
diff --git a/src/tools/docmaker/content.py b/src/tools/docmaker/content.py
index 6887f0b..198780a 100644
--- a/src/tools/docmaker/content.py
+++ b/src/tools/docmaker/content.py
@@ -3,7 +3,7 @@
#
# Parse comment blocks to build content blocks (library file).
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
@@ -46,16 +46,34 @@
#
-# A regular expression to isolate identifiers from other text.
+# A regular expression to isolate identifiers from other text. Two syntax
+# forms are supported:
#
-re_identifier = re.compile( r'((?:\w|-)*)' )
+# <name>
+# <name>[<id>]
+#
+# where both `<name>' and `<id>' consist of alphanumeric characters, `_',
+# and `-'. Use `<id>' if there are multiple, valid `<name>' entries; in the
+# index, `<id>' will be appended in parentheses.
+#
+# For example,
+#
+# stem_darkening[autofit]
+#
+# becomes `stem_darkening (autofit)' in the index.
+#
+re_identifier = re.compile( r"""
+ ((?:\w|-)+
+ (?:\[(?:\w|-)+\])?)
+ """, re.VERBOSE )
#
# We collect macro names ending in `_H' (group 1), as defined in
-# `config/ftheader.h'. While outputting the object data, we use this info
-# together with the object's file location (group 2) to emit the appropriate
-# header file macro and its associated file name before the object itself.
+# `freetype/config/ftheader.h'. While outputting the object data, we use
+# this info together with the object's file location (group 2) to emit the
+# appropriate header file macro and its associated file name before the
+# object itself.
#
# Example:
#
@@ -91,7 +109,7 @@
def dump( self, prefix = "", width = 60 ):
lines = self.dump_lines( 0, width )
for l in lines:
- print prefix + l
+ print( prefix + l )
def dump_lines( self, margin = 0, width = 60 ):
result = []
@@ -121,7 +139,7 @@
def dump( self, prefix = "", width = 60 ):
lines = self.dump_lines( 0, width )
for l in lines:
- print prefix + l
+ print( prefix + l )
def dump_lines( self, margin = 0, width = 60 ):
cur = "" # current line
@@ -225,13 +243,13 @@
def dump( self, prefix = "" ):
if self.field:
- print prefix + self.field + " ::"
+ print( prefix + self.field + " ::" )
prefix = prefix + "----"
first = 1
for p in self.items:
if not first:
- print ""
+ print( "" )
p.dump( prefix )
first = 0
@@ -312,10 +330,10 @@
return None
def dump( self, margin ):
- print " " * margin + "<" + self.tag + ">"
+ print( " " * margin + "<" + self.tag + ">" )
for f in self.fields:
f.dump( " " )
- print " " * margin + "</" + self.tag + ">"
+ print( " " * margin + "</" + self.tag + ">" )
################################################################
@@ -435,15 +453,32 @@
markup_lines = []
first = 1
+ margin = -1
+ in_code = 0
+
for line in content:
- found = None
- for t in re_markup_tags:
- m = t.match( line )
+ if in_code:
+ m = re_code_end.match( line )
+ if m and len( m.group( 1 ) ) <= margin:
+ in_code = 0
+ margin = -1
+ else:
+ m = re_code_start.match( line )
if m:
- found = string.lower( m.group( 1 ) )
- prefix = len( m.group( 0 ) )
- line = " " * prefix + line[prefix:] # remove markup from line
- break
+ in_code = 1
+ margin = len( m.group( 1 ) )
+
+ found = None
+
+ if not in_code:
+ for t in re_markup_tags:
+ m = t.match( line )
+ if m:
+ found = string.lower( m.group( 1 ) )
+ prefix = len( m.group( 0 ) )
+ # remove markup from line
+ line = " " * prefix + line[prefix:]
+ break
# is it the start of a new markup section ?
if found:
diff --git a/src/tools/docmaker/docbeauty.py b/src/tools/docmaker/docbeauty.py
index 3ddf4a9..0b021fa 100644
--- a/src/tools/docmaker/docbeauty.py
+++ b/src/tools/docmaker/docbeauty.py
@@ -10,9 +10,7 @@
from content import *
from utils import *
-import utils
-
-import sys, os, time, string, getopt
+import sys, os, string, getopt
content_processor = ContentProcessor()
@@ -40,13 +38,13 @@
def usage():
- print "\nDocBeauty 0.1 Usage information\n"
- print " docbeauty [options] file1 [file2 ...]\n"
- print "using the following options:\n"
- print " -h : print this page"
- print " -b : backup original files with the 'orig' extension"
- print ""
- print " --backup : same as -b"
+ print( "\nDocBeauty 0.1 Usage information\n" )
+ print( " docbeauty [options] file1 [file2 ...]\n" )
+ print( "using the following options:\n" )
+ print( " -h : print this page" )
+ print( " -b : backup original files with the 'orig' extension" )
+ print( "" )
+ print( " --backup : same as -b" )
def main( argv ):
diff --git a/src/tools/docmaker/docmaker.py b/src/tools/docmaker/docmaker.py
index de82d93..eb49afb 100644
--- a/src/tools/docmaker/docmaker.py
+++ b/src/tools/docmaker/docmaker.py
@@ -4,7 +4,7 @@
#
# Convert source code markup to HTML documentation.
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
@@ -31,21 +31,21 @@
import utils
-import sys, os, time, string, glob, getopt
+import sys, glob, getopt
def usage():
- print "\nDocMaker Usage information\n"
- print " docmaker [options] file1 [file2 ...]\n"
- print "using the following options:\n"
- print " -h : print this page"
- print " -t : set project title, as in '-t \"My Project\"'"
- print " -o : set output directory, as in '-o mydir'"
- print " -p : set documentation prefix, as in '-p ft2'"
- print ""
- print " --title : same as -t, as in '--title=\"My Project\"'"
- print " --output : same as -o, as in '--output=mydir'"
- print " --prefix : same as -p, as in '--prefix=ft2'"
+ print( "\nDocMaker Usage information\n" )
+ print( " docmaker [options] file1 [file2 ...]\n" )
+ print( "using the following options:\n" )
+ print( " -h : print this page" )
+ print( " -t : set project title, as in '-t \"My Project\"'" )
+ print( " -o : set output directory, as in '-o mydir'" )
+ print( " -p : set documentation prefix, as in '-p ft2'" )
+ print( "" )
+ print( " --title : same as -t, as in '--title=\"My Project\"'" )
+ print( " --output : same as -o, as in '--output=mydir'" )
+ print( " --prefix : same as -p, as in '--prefix=ft2'" )
def main( argv ):
diff --git a/src/tools/docmaker/formatter.py b/src/tools/docmaker/formatter.py
index f0a8808..2708fd4 100644
--- a/src/tools/docmaker/formatter.py
+++ b/src/tools/docmaker/formatter.py
@@ -3,7 +3,7 @@
#
# Convert parsed content blocks to a structured document (library file).
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
@@ -56,6 +56,11 @@
self.block_index = self.identifiers.keys()
self.block_index.sort( key = index_key )
+ # also add section names to dictionary (without making them appear
+ # in the index)
+ for section in self.sections:
+ self.add_identifier( section.name, section )
+
def add_identifier( self, name, block ):
if name in self.identifiers:
# duplicate name!
diff --git a/src/tools/docmaker/sources.py b/src/tools/docmaker/sources.py
index 0cf21ce..e3b95e0 100644
--- a/src/tools/docmaker/sources.py
+++ b/src/tools/docmaker/sources.py
@@ -3,7 +3,7 @@
#
# Convert source code comments to multi-line blocks (library file).
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
@@ -29,7 +29,7 @@
#
-import fileinput, re, sys, os, string
+import fileinput, re, string
################################################################
@@ -138,27 +138,40 @@
#
# A regular expression to detect a cross reference, after markup tags have
-# been stripped off. Group 1 is the reference, group 2 the rest of the
-# line.
+# been stripped off.
#
-# A cross reference consists of letters, digits, or characters `-' and `_'.
+# Two syntax forms are supported:
#
-re_crossref = re.compile( r'@((?:\w|-)*)(.*)' ) # @foo
+# @<name>
+# @<name>[<id>]
+#
+# where both `<name>' and `<id>' consist of alphanumeric characters, `_',
+# and `-'. Use `<id>' if there are multiple, valid `<name>' entries.
+#
+# Example: @foo[bar]
+#
+re_crossref = re.compile( r"""
+ @
+ (?P<name>(?:\w|-)+
+ (?:\[(?:\w|-)+\])?)
+ (?P<rest>.*)
+ """, re.VERBOSE )
#
# Two regular expressions to detect italic and bold markup, respectively.
# Group 1 is the markup, group 2 the rest of the line.
#
# Note that the markup is limited to words consisting of letters, digits,
-# the character `_', or an apostrophe (but not as the first character).
+# the characters `_' and `-', or an apostrophe (but not as the first
+# character).
#
-re_italic = re.compile( r"_(\w(?:\w|')*)_(.*)" ) # _italic_
-re_bold = re.compile( r"\*(\w(?:\w|')*)\*(.*)" ) # *bold*
+re_italic = re.compile( r"_((?:\w|-)(?:\w|'|-)*)_(.*)" ) # _italic_
+re_bold = re.compile( r"\*((?:\w|-)(?:\w|'|-)*)\*(.*)" ) # *bold*
#
# This regular expression code to identify an URL has been taken from
#
-# http://mail.python.org/pipermail/tutor/2002-September/017228.html
+# https://mail.python.org/pipermail/tutor/2002-September/017228.html
#
# (with slight modifications).
#
@@ -283,10 +296,10 @@
# debugging only -- not used in normal operations
def dump( self ):
if self.content:
- print "{{{content start---"
+ print( "{{{content start---" )
for l in self.content:
- print l
- print "---content end}}}"
+ print( l )
+ print( "---content end}}}" )
return
fmt = ""
@@ -294,7 +307,7 @@
fmt = repr( self.format.id ) + " "
for line in self.lines:
- print line
+ print( line )
################################################################
diff --git a/src/tools/docmaker/tohtml.py b/src/tools/docmaker/tohtml.py
index bc6bcf0..9f318a2 100644
--- a/src/tools/docmaker/tohtml.py
+++ b/src/tools/docmaker/tohtml.py
@@ -3,7 +3,7 @@
#
# A sub-class container of the `Formatter' class to produce HTML.
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
@@ -25,7 +25,7 @@
# The following strings define the HTML header used by all generated pages.
html_header_1 = """\
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
+"https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -164,7 +164,8 @@
"""
# The header and footer used for each section.
-section_title_header = "<h1>"
+section_title_header1 = '<h1 id="'
+section_title_header2 = '">'
section_title_footer = "</h1>"
# The header and footer used for code segments.
@@ -309,7 +310,14 @@
def make_block_url( self, block, name = None ):
if name == None:
name = block.name
- return self.make_section_url( block.section ) + "#" + name
+
+ try:
+ section_url = self.make_section_url( block.section )
+ except:
+ # we already have a section
+ section_url = self.make_section_url( block )
+
+ return section_url + "#" + name
def make_html_word( self, word ):
"""Analyze a simple word to detect cross-references and markup."""
@@ -317,11 +325,27 @@
m = re_crossref.match( word )
if m:
try:
- name = m.group( 1 )
- rest = m.group( 2 )
+ name = m.group( 'name' )
+ rest = m.group( 'rest' )
block = self.identifiers[name]
url = self.make_block_url( block )
- return '<a href="' + url + '">' + name + '</a>' + rest
+ # display `foo[bar]' as `foo'
+ name = re.sub( r'\[.*\]', '', name )
+ # normalize url, following RFC 3986
+ url = string.replace( url, "[", "(" )
+ url = string.replace( url, "]", ")" )
+
+ try:
+ # for sections, display title
+ url = ( '‘<a href="' + url + '">'
+ + block.title + '</a>’'
+ + rest )
+ except:
+ url = ( '<a href="' + url + '">'
+ + name + '</a>'
+ + rest )
+
+ return url
except:
# we detected a cross-reference to an unknown item
sys.stderr.write( "WARNING: undefined cross reference"
@@ -366,7 +390,7 @@
"""Convert a code sequence to HTML."""
line = code_header + '\n'
for l in lines:
- line = line + html_quote( l ) + '\n'
+ line = line + html_quote( l ).rstrip() + '\n'
return line + code_footer
@@ -382,7 +406,7 @@
return string.join( lines, '\n' )
def print_html_items( self, items ):
- print self.make_html_items( items )
+ print( self.make_html_items( items ) )
def print_html_field( self, field ):
if field.name:
@@ -390,10 +414,10 @@
+ field.name
+ "</b></td><td>" )
- print self.make_html_items( field.items )
+ print( self.make_html_items( field.items ) )
if field.name:
- print "</td></tr></table>"
+ print( "</td></tr></table>" )
def html_source_quote( self, line, block_name = None ):
result = ""
@@ -417,16 +441,22 @@
id = block.name
# link to a field ID if possible
- for markup in block.markups:
- if markup.tag == 'values':
- for field in markup.fields:
- if field.name:
- id = name
+ try:
+ for markup in block.markups:
+ if markup.tag == 'values':
+ for field in markup.fields:
+ if field.name:
+ id = name
- result = ( result + prefix
- + '<a href="'
- + self.make_block_url( block, id )
- + '">' + name + '</a>' )
+ result = ( result + prefix
+ + '<a href="'
+ + self.make_block_url( block, id )
+ + '">' + name + '</a>' )
+ except:
+ # sections don't have `markups'; however, we don't
+ # want references to sections here anyway
+ result = result + html_quote( line[:length] )
+
else:
result = result + html_quote( line[:length] )
@@ -438,14 +468,14 @@
return result
def print_html_field_list( self, fields ):
- print '<table class="fields">'
+ print( '<table class="fields">' )
for field in fields:
- print ( '<tr><td class="val" id="' + field.name + '">'
- + field.name
- + '</td><td class="desc">' )
+ print( '<tr><td class="val" id="' + field.name + '">'
+ + field.name
+ + '</td><td class="desc">' )
self.print_html_items( field.items )
- print "</td></tr>"
- print "</table>"
+ print( "</td></tr>" )
+ print( "</table>" )
def print_html_markup( self, markup ):
table_fields = []
@@ -469,7 +499,7 @@
# formatting the index
#
def index_enter( self ):
- print self.html_index_header
+ print( self.html_index_header )
self.index_items = {}
def index_name_enter( self, name ):
@@ -482,7 +512,7 @@
count = len( self.block_index )
rows = ( count + self.columns - 1 ) // self.columns
- print '<table class="index">'
+ print( '<table class="index">' )
for r in range( rows ):
line = "<tr>"
for c in range( self.columns ):
@@ -490,20 +520,26 @@
if i < count:
bname = self.block_index[r + c * rows]
url = self.index_items[bname]
+ # display `foo[bar]' as `foo (bar)'
+ bname = string.replace( bname, "[", " (" )
+ bname = string.replace( bname, "]", ")" )
+ # normalize url, following RFC 3986
+ url = string.replace( url, "[", "(" )
+ url = string.replace( url, "]", ")" )
line = ( line + '<td><a href="' + url + '">'
+ bname + '</a></td>' )
else:
line = line + '<td></td>'
line = line + "</tr>"
- print line
+ print( line )
- print "</table>"
+ print( "</table>" )
print( index_footer_start
+ self.file_prefix + "toc.html"
+ index_footer_end )
- print self.html_footer
+ print( self.html_footer )
self.index_items = {}
@@ -517,25 +553,25 @@
# formatting the table of contents
#
def toc_enter( self ):
- print self.html_toc_header
- print "<h1>Table of Contents</h1>"
+ print( self.html_toc_header )
+ print( "<h1>Table of Contents</h1>" )
def toc_chapter_enter( self, chapter ):
- print chapter_header + string.join( chapter.title ) + chapter_inter
- print '<table class="toc">'
+ print( chapter_header + string.join( chapter.title ) + chapter_inter )
+ print( '<table class="toc">' )
def toc_section_enter( self, section ):
- print ( '<tr><td class="link">'
- + '<a href="' + self.make_section_url( section ) + '">'
- + section.title + '</a></td><td class="desc">' )
- print self.make_html_para( section.abstract )
+ print( '<tr><td class="link">'
+ + '<a href="' + self.make_section_url( section ) + '">'
+ + section.title + '</a></td><td class="desc">' )
+ print( self.make_html_para( section.abstract ) )
def toc_section_exit( self, section ):
- print "</td></tr>"
+ print( "</td></tr>" )
def toc_chapter_exit( self, chapter ):
- print "</table>"
- print chapter_footer
+ print( "</table>" )
+ print( chapter_footer )
def toc_index( self, index_filename ):
print( chapter_header
@@ -547,7 +583,7 @@
+ self.file_prefix + "index.html"
+ toc_footer_end )
- print self.html_footer
+ print( self.html_footer )
def toc_dump( self, toc_filename = None, index_filename = None ):
if toc_filename == None:
@@ -562,9 +598,11 @@
# formatting sections
#
def section_enter( self, section ):
- print self.html_header
+ print( self.html_header )
- print section_title_header + section.title + section_title_footer
+ print( section_title_header1 + section.name + section_title_header2
+ + section.title
+ + section_title_footer )
maxwidth = 0
for b in section.blocks.values():
@@ -574,8 +612,8 @@
width = 70 # XXX magic number
if maxwidth > 0:
# print section synopsis
- print section_synopsis_header
- print '<table class="synopsis">'
+ print( section_synopsis_header )
+ print( '<table class="synopsis">' )
columns = width // maxwidth
if columns < 1:
@@ -601,26 +639,38 @@
# even omit it completely)
line = line + " "
else:
- line = ( line + '<a href="#' + name + '">'
+ url = name
+ # display `foo[bar]' as `foo'
+ name = re.sub( r'\[.*\]', '', name )
+ # normalize url, following RFC 3986
+ url = string.replace( url, "[", "(" )
+ url = string.replace( url, "]", ")" )
+ line = ( line + '<a href="#' + url + '">'
+ name + '</a>' )
line = line + '</td>'
line = line + "</tr>"
- print line
+ print( line )
- print "</table>"
- print section_synopsis_footer
+ print( "</table>" )
+ print( section_synopsis_footer )
- print description_header
- print self.make_html_items( section.description )
- print description_footer
+ print( description_header )
+ print( self.make_html_items( section.description ) )
+ print( description_footer )
def block_enter( self, block ):
- print block_header
+ print( block_header )
# place html anchor if needed
if block.name:
- print( '<h3 id="' + block.name + '">' + block.name + '</h3>' )
+ url = block.name
+ # display `foo[bar]' as `foo'
+ name = re.sub( r'\[.*\]', '', block.name )
+ # normalize url, following RFC 3986
+ url = string.replace( url, "[", "(" )
+ url = string.replace( url, "]", ")" )
+ print( '<h3 id="' + url + '">' + name + '</h3>' )
# dump the block C source lines now
if block.code:
@@ -636,28 +686,28 @@
# + " '" + block.source.filename + "'.\n" )
if header:
- print ( header_location_header
- + 'Defined in ' + header + '.'
- + header_location_footer )
+ print( header_location_header
+ + 'Defined in ' + header + '.'
+ + header_location_footer )
- print source_header
+ print( source_header )
for l in block.code:
- print self.html_source_quote( l, block.name )
- print source_footer
+ print( self.html_source_quote( l, block.name ) )
+ print( source_footer )
def markup_enter( self, markup, block ):
if markup.tag == "description":
- print description_header
+ print( description_header )
else:
- print marker_header + markup.tag + marker_inter
+ print( marker_header + markup.tag + marker_inter )
self.print_html_markup( markup )
def markup_exit( self, markup, block ):
if markup.tag == "description":
- print description_footer
+ print( description_footer )
else:
- print marker_footer
+ print( marker_footer )
def block_exit( self, block ):
print( block_footer_start + self.file_prefix + "index.html"
@@ -665,7 +715,7 @@
+ block_footer_end )
def section_exit( self, section ):
- print html_footer
+ print( html_footer )
def section_dump_all( self ):
for section in self.sections:
diff --git a/src/tools/docmaker/utils.py b/src/tools/docmaker/utils.py
index 52af17a..f40f167 100644
--- a/src/tools/docmaker/utils.py
+++ b/src/tools/docmaker/utils.py
@@ -3,7 +3,7 @@
#
# Auxiliary functions for the `docmaker' tool (library file).
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
@@ -79,7 +79,7 @@
if not os.path.isdir( output_dir ):
sys.stderr.write( "argument"
+ " '" + output_dir + "' "
- + "is not a valid directory" )
+ + "is not a valid directory\n" )
sys.exit( 2 )
else:
output_dir = None
diff --git a/src/tools/ftfuzzer/README b/src/tools/ftfuzzer/README
new file mode 100644
index 0000000..09d8e9f
--- /dev/null
+++ b/src/tools/ftfuzzer/README
@@ -0,0 +1,81 @@
+ftfuzzer
+========
+
+
+ftfuzzer.cc
+-----------
+
+This file contains a target function for FreeType fuzzing. It can be
+used with libFuzzer (https://llvm.org/docs/LibFuzzer.html) or
+potentially any other similar fuzzer.
+
+Usage:
+
+ 1. Build `libfreetype.a' and `ftfuzzer.cc' using the most recent
+ clang compiler with these flags:
+
+ # for fuzzer coverage feedback
+ -fsanitize-coverage=edge,8bit-counters
+ # for bug checking
+ -fsanitize=address,signed-integer-overflow,shift
+
+ You also need the header files from the `libarchive' library
+ (https://www.libarchive.org/) for handling tar files (see file
+ `ftmutator.cc' below for more).
+
+ 2. Link with `libFuzzer' (it contains `main') and `libarchive'.
+
+ 3. Run the fuzzer on some test corpus.
+
+The exact flags and commands may vary.
+
+ https://github.com/google/oss-fuzz/tree/master/projects/freetype2
+
+There is a continuous fuzzing bot that runs ftfuzzer.
+
+ https://oss-fuzz.com
+
+(You need an account to be able to see coverage reports and the like
+on oss-fuzz.com.)
+
+Check the bot configuration for the most current settings.
+
+
+ftmutator.cc
+------------
+
+FreeType has the ability to `attach' auxiliary files to a font file,
+providing additional information. The main usage is to load AFM files
+for PostScript Type 1 fonts.
+
+However, libFuzzer currently only supports mutation of a single input
+file. For this reason, `ftmutator.cc' contains a custom fuzzer
+mutator that uses an uncompressed tar file archive as the input. The
+first file in such a tarball gets opened by FreeType as a font, all
+other files are treated as input for `FT_Attach_Stream'.
+
+Compilation is similar to `ftfuzzer.c'.
+
+
+runinput.cc
+-----------
+
+To run the target function on a set of input files, this file contains
+a convenience `main' function. Link it with `ftfuzzer.cc',
+`libfreetype.a', and `libarchive' and run like
+
+ ./a.out my_tests_inputs/*
+
+----------------------------------------------------------------------
+
+Copyright 2015-2018 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
+
+This file is part of the FreeType project, and may only be used,
+modified, and distributed under the terms of the FreeType project
+license, LICENSE.TXT. By continuing to use, modify, or distribute
+this file you indicate that you have read the license and understand
+and accept it fully.
+
+
+--- end of README ---
diff --git a/src/tools/ftfuzzer/ftfuzzer.cc b/src/tools/ftfuzzer/ftfuzzer.cc
new file mode 100644
index 0000000..acf2bc9
--- /dev/null
+++ b/src/tools/ftfuzzer/ftfuzzer.cc
@@ -0,0 +1,428 @@
+// ftfuzzer.cc
+//
+// A fuzzing function to test FreeType with libFuzzer.
+//
+// Copyright 2015-2018 by
+// David Turner, Robert Wilhelm, and Werner Lemberg.
+//
+// This file is part of the FreeType project, and may only be used,
+// modified, and distributed under the terms of the FreeType project
+// license, LICENSE.TXT. By continuing to use, modify, or distribute
+// this file you indicate that you have read the license and
+// understand and accept it fully.
+
+
+// we use `unique_ptr', `decltype', and other gimmicks defined since C++11
+#if __cplusplus < 201103L
+# error "a C++11 compiler is needed"
+#endif
+
+#include <archive.h>
+#include <archive_entry.h>
+
+#include <assert.h>
+#include <stdint.h>
+
+#include <memory>
+#include <vector>
+
+
+ using namespace std;
+
+
+#include <ft2build.h>
+
+#include FT_FREETYPE_H
+#include FT_GLYPH_H
+#include FT_CACHE_H
+#include FT_CACHE_CHARMAP_H
+#include FT_CACHE_IMAGE_H
+#include FT_CACHE_SMALL_BITMAPS_H
+#include FT_SYNTHESIS_H
+#include FT_ADVANCES_H
+#include FT_OUTLINE_H
+#include FT_BBOX_H
+#include FT_MODULE_H
+#include FT_DRIVER_H
+#include FT_MULTIPLE_MASTERS_H
+
+
+ static FT_Library library;
+ static int InitResult;
+
+
+ struct FT_Global
+ {
+ FT_Global()
+ {
+ InitResult = FT_Init_FreeType( &library );
+ if ( InitResult )
+ return;
+
+ // try to activate Adobe's CFF engine; it might not be the default
+ unsigned int cff_hinting_engine = FT_HINTING_ADOBE;
+ FT_Property_Set( library,
+ "cff",
+ "hinting-engine", &cff_hinting_engine );
+ }
+
+ ~FT_Global()
+ {
+ FT_Done_FreeType( library );
+ }
+ };
+
+ FT_Global global_ft;
+
+
+ // We want to select n values at random (without repetition),
+ // with 0 < n <= N. The algorithm is taken from TAoCP, Vol. 2
+ // (Algorithm S, selection sampling technique)
+ struct Random
+ {
+ int n;
+ int N;
+
+ int t; // total number of values so far
+ int m; // number of selected values so far
+
+ uint32_t r; // the current pseudo-random number
+
+ Random( int n_,
+ int N_ )
+ : n( n_ ),
+ N( N_ )
+ {
+ t = 0;
+ m = 0;
+
+ // Ideally, this should depend on the input file,
+ // for example, taking the sha256 as input;
+ // however, this is overkill for fuzzying tests.
+ r = 12345;
+ }
+
+ int get()
+ {
+ if ( m >= n )
+ return -1;
+
+ Redo:
+ // We can't use `rand': different C libraries might provide
+ // different implementations of this function. As a replacement,
+ // we use a 32bit version of the `xorshift' algorithm.
+ r ^= r << 13;
+ r ^= r >> 17;
+ r ^= r << 5;
+
+ double U = double( r ) / UINT32_MAX;
+
+ if ( ( N - t ) * U >= ( n - m ) )
+ {
+ t++;
+ goto Redo;
+ }
+
+ t++;
+ m++;
+
+ return t;
+ }
+ };
+
+
+ static int
+ archive_read_entry_data( struct archive *ar,
+ vector<FT_Byte> *vw )
+ {
+ int r;
+ const FT_Byte* buff;
+ size_t size;
+ int64_t offset;
+
+ for (;;)
+ {
+ r = archive_read_data_block( ar,
+ reinterpret_cast<const void**>( &buff ),
+ &size,
+ &offset );
+ if ( r == ARCHIVE_EOF )
+ return ARCHIVE_OK;
+ if ( r != ARCHIVE_OK )
+ return r;
+
+ vw->insert( vw->end(), buff, buff + size );
+ }
+ }
+
+
+ static vector<vector<FT_Byte>>
+ parse_data( const uint8_t* data,
+ size_t size )
+ {
+ struct archive_entry* entry;
+ int r;
+ vector<vector<FT_Byte>> files;
+
+ unique_ptr<struct archive,
+ decltype ( archive_read_free )*> a( archive_read_new(),
+ archive_read_free );
+
+ // activate reading of uncompressed tar archives
+ archive_read_support_format_tar( a.get() );
+
+ // the need for `const_cast' was removed with libarchive commit be4d4dd
+ if ( !( r = archive_read_open_memory(
+ a.get(),
+ const_cast<void*>(static_cast<const void*>( data ) ),
+ size ) ) )
+ {
+ unique_ptr<struct archive,
+ decltype ( archive_read_close )*> a_open( a.get(),
+ archive_read_close );
+
+ // read files contained in archive
+ for (;;)
+ {
+ r = archive_read_next_header( a_open.get(), &entry );
+ if ( r == ARCHIVE_EOF )
+ break;
+ if ( r != ARCHIVE_OK )
+ break;
+
+ vector<FT_Byte> entry_data;
+ r = archive_read_entry_data( a.get(), &entry_data );
+ if ( r != ARCHIVE_OK )
+ break;
+
+ files.push_back( move( entry_data ) );
+ }
+ }
+
+ if ( files.size() == 0 )
+ files.emplace_back( data, data + size );
+
+ return files;
+ }
+
+
+ static void
+ setIntermediateAxis( FT_Face face )
+ {
+ // only handle Multiple Masters and GX variation fonts
+ if ( !FT_HAS_MULTIPLE_MASTERS( face ) )
+ return;
+
+ // get variation data for current instance
+ FT_MM_Var* variations_ptr = nullptr;
+ if ( FT_Get_MM_Var( face, &variations_ptr ) )
+ return;
+
+ unique_ptr<FT_MM_Var,
+ decltype ( free )*> variations( variations_ptr, free );
+ vector<FT_Fixed> coords( variations->num_axis );
+
+ // select an arbitrary instance
+ for ( unsigned int i = 0; i < variations->num_axis; i++ )
+ coords[i] = ( variations->axis[i].minimum +
+ variations->axis[i].def ) / 2;
+
+ if ( FT_Set_Var_Design_Coordinates( face,
+ FT_UInt( coords.size() ),
+ coords.data() ) )
+ return;
+ }
+
+
+ // the interface function to the libFuzzer library
+ extern "C" int
+ LLVMFuzzerTestOneInput( const uint8_t* data,
+ size_t size_ )
+ {
+ assert( !InitResult );
+
+ if ( size_ < 1 )
+ return 0;
+
+ const vector<vector<FT_Byte>>& files = parse_data( data, size_ );
+
+ FT_Face face;
+ FT_Int32 load_flags = FT_LOAD_DEFAULT;
+#if 0
+ FT_Render_Mode render_mode = FT_RENDER_MODE_NORMAL;
+#endif
+
+ // We use a conservative approach here, at the cost of calling
+ // `FT_New_Face' quite often. The idea is that the fuzzer should be
+ // able to try all faces and named instances of a font, expecting that
+ // some faces don't work for various reasons, e.g., a broken subfont, or
+ // an unsupported NFNT bitmap font in a Mac dfont resource that holds
+ // more than a single font.
+
+ // get number of faces
+ if ( FT_New_Memory_Face( library,
+ files[0].data(),
+ (FT_Long)files[0].size(),
+ -1,
+ &face ) )
+ return 0;
+ long num_faces = face->num_faces;
+ FT_Done_Face( face );
+
+ // loop over up to 20 arbitrarily selected faces
+ // from index range [0;num-faces-1]
+ long max_face_cnt = num_faces < 20
+ ? num_faces
+ : 20;
+
+ Random faces_pool( (int)max_face_cnt, (int)num_faces );
+
+ for ( long face_cnt = 0;
+ face_cnt < max_face_cnt;
+ face_cnt++ )
+ {
+ long face_index = faces_pool.get() - 1;
+
+ // get number of instances
+ if ( FT_New_Memory_Face( library,
+ files[0].data(),
+ (FT_Long)files[0].size(),
+ -( face_index + 1 ),
+ &face ) )
+ continue;
+ long num_instances = face->style_flags >> 16;
+ FT_Done_Face( face );
+
+ // loop over the face without instance (index 0)
+ // and up to 20 arbitrarily selected instances
+ // from index range [1;num_instances]
+ long max_instance_cnt = num_instances < 20
+ ? num_instances
+ : 20;
+
+ Random instances_pool( (int)max_instance_cnt, (int)num_instances );
+
+ for ( long instance_cnt = 0;
+ instance_cnt <= max_instance_cnt;
+ instance_cnt++ )
+ {
+ long instance_index = 0;
+
+ if ( !instance_cnt )
+ {
+ if ( FT_New_Memory_Face( library,
+ files[0].data(),
+ (FT_Long)files[0].size(),
+ face_index,
+ &face ) )
+ continue;
+ }
+ else
+ {
+ instance_index = instances_pool.get();
+
+ if ( FT_New_Memory_Face( library,
+ files[0].data(),
+ (FT_Long)files[0].size(),
+ ( instance_index << 16 ) + face_index,
+ &face ) )
+ continue;
+ }
+
+ // if we have more than a single input file coming from an archive,
+ // attach them (starting with the second file) using the order given
+ // in the archive
+ for ( size_t files_index = 1;
+ files_index < files.size();
+ files_index++ )
+ {
+ FT_Open_Args open_args = {};
+ open_args.flags = FT_OPEN_MEMORY;
+ open_args.memory_base = files[files_index].data();
+ open_args.memory_size = (FT_Long)files[files_index].size();
+
+ // the last archive element will be eventually used as the
+ // attachment
+ FT_Attach_Stream( face, &open_args );
+ }
+
+ // loop over an arbitrary size for outlines
+ // and up to ten arbitrarily selected bitmap strike sizes
+ // from the range [0;num_fixed_sizes - 1]
+ int max_size_cnt = face->num_fixed_sizes < 10
+ ? face->num_fixed_sizes
+ : 10;
+
+ Random sizes_pool( max_size_cnt, face->num_fixed_sizes );
+
+ for ( int size_cnt = 0;
+ size_cnt <= max_size_cnt;
+ size_cnt++ )
+ {
+ FT_Int32 flags = load_flags;
+
+ int size_index = 0;
+
+ if ( !size_cnt )
+ {
+ // set up 20pt at 72dpi as an arbitrary size
+ if ( FT_Set_Char_Size( face, 20 * 64, 20 * 64, 72, 72 ) )
+ continue;
+ flags |= FT_LOAD_NO_BITMAP;
+ }
+ else
+ {
+ // bitmap strikes are not active for font variations
+ if ( instance_index )
+ continue;
+
+ size_index = sizes_pool.get() - 1;
+
+ if ( FT_Select_Size( face, size_index ) )
+ continue;
+ flags |= FT_LOAD_COLOR;
+ }
+
+ // test MM interface only for a face without a selected instance
+ // and without a selected bitmap strike
+ if ( !instance_index && !size_cnt )
+ setIntermediateAxis( face );
+
+ // loop over all glyphs
+ for ( unsigned int glyph_index = 0;
+ glyph_index < (unsigned int)face->num_glyphs;
+ glyph_index++ )
+ {
+ if ( FT_Load_Glyph( face, glyph_index, flags ) )
+ continue;
+
+ // Rendering is the most expensive and the least interesting part.
+ //
+ // if ( FT_Render_Glyph( face->glyph, render_mode) )
+ // continue;
+ // FT_GlyphSlot_Embolden( face->glyph );
+
+#if 0
+ FT_Glyph glyph;
+ if ( !FT_Get_Glyph( face->glyph, &glyph ) )
+ FT_Done_Glyph( glyph );
+
+ FT_Outline* outline = &face->glyph->outline;
+ FT_Matrix rot30 = { 0xDDB4, -0x8000, 0x8000, 0xDDB4 };
+
+ FT_Outline_Transform( outline, &rot30 );
+
+ FT_BBox bbox;
+ FT_Outline_Get_BBox( outline, &bbox );
+#endif
+ }
+ }
+ FT_Done_Face( face );
+ }
+ }
+
+ return 0;
+ }
+
+
+// END
diff --git a/src/tools/ftfuzzer/ftmutator.cc b/src/tools/ftfuzzer/ftmutator.cc
new file mode 100644
index 0000000..ae4b140
--- /dev/null
+++ b/src/tools/ftfuzzer/ftmutator.cc
@@ -0,0 +1,314 @@
+// ftmutator.cc
+//
+// A custom fuzzer mutator to test for FreeType with libFuzzer.
+//
+// Copyright 2015-2018 by
+// David Turner, Robert Wilhelm, and Werner Lemberg.
+//
+// This file is part of the FreeType project, and may only be used,
+// modified, and distributed under the terms of the FreeType project
+// license, LICENSE.TXT. By continuing to use, modify, or distribute
+// this file you indicate that you have read the license and
+// understand and accept it fully.
+
+
+// Since `tar' is not a valid format for input to FreeType, treat any input
+// that looks like `tar' as multiple files and mutate them separately.
+//
+// In the future, a variation of this may be used to guide mutation on a
+// logically higher level.
+
+
+// we use `unique_ptr', `decltype', and other gimmicks defined since C++11
+#if __cplusplus < 201103L
+# error "a C++11 compiler is needed"
+#endif
+
+#include <cstdint>
+#include <cassert>
+#include <cstdio>
+#include <cstdlib>
+#include <cstddef>
+#include <cstring>
+#include <iostream>
+
+#include <memory>
+#include <vector>
+
+#include <archive.h>
+#include <archive_entry.h>
+
+#include "FuzzerInterface.h"
+
+
+ using namespace std;
+
+
+ // This function should be defined by `ftfuzzer.cc'.
+ extern "C" int
+ LLVMFuzzerTestOneInput( const uint8_t* Data,
+ size_t Size );
+
+
+ static void
+ check_result( struct archive* a,
+ int r )
+ {
+ if ( r == ARCHIVE_OK )
+ return;
+
+ const char* m = archive_error_string( a );
+ write( 1, m, strlen( m ) );
+ exit( 1 );
+ }
+
+
+ static int
+ archive_read_entry_data( struct archive *ar,
+ vector<uint8_t> *vw )
+ {
+ int r;
+ const uint8_t* buff;
+ size_t size;
+ int64_t offset;
+
+ for (;;)
+ {
+ r = archive_read_data_block( ar,
+ reinterpret_cast<const void**>( &buff ),
+ &size,
+ &offset );
+ if ( r == ARCHIVE_EOF )
+ return ARCHIVE_OK;
+ if ( r != ARCHIVE_OK )
+ return r;
+
+ vw->insert( vw->end(), buff, buff + size );
+ }
+ }
+
+
+ static vector<vector<uint8_t>>
+ parse_data( const uint8_t* data,
+ size_t size )
+ {
+ struct archive_entry* entry;
+ int r;
+ vector<vector<uint8_t>> files;
+
+ unique_ptr<struct archive,
+ decltype ( archive_read_free )*> a( archive_read_new(),
+ archive_read_free );
+
+ // activate reading of uncompressed tar archives
+ archive_read_support_format_tar( a.get() );
+
+ // the need for `const_cast' was removed with libarchive commit be4d4dd
+ if ( !( r = archive_read_open_memory(
+ a.get(),
+ const_cast<void*>(static_cast<const void*>( data ) ),
+ size ) ) )
+ {
+ unique_ptr<struct archive,
+ decltype ( archive_read_close )*> a_open( a.get(),
+ archive_read_close );
+
+ // read files contained in archive
+ for (;;)
+ {
+ r = archive_read_next_header( a_open.get(), &entry );
+ if ( r == ARCHIVE_EOF )
+ break;
+ if ( r != ARCHIVE_OK )
+ break;
+
+ vector<uint8_t> entry_data;
+ r = archive_read_entry_data( a.get(), &entry_data );
+ if ( entry_data.size() == 0 )
+ continue;
+
+ files.push_back( move( entry_data ) );
+ if ( r != ARCHIVE_OK )
+ break;
+ }
+ }
+
+ return files;
+ }
+
+
+ class FTFuzzer
+ : public fuzzer::UserSuppliedFuzzer
+ {
+
+ public:
+ FTFuzzer( fuzzer::FuzzerRandomBase* Rand )
+ : fuzzer::UserSuppliedFuzzer( Rand ) {}
+
+
+ int
+ TargetFunction( const uint8_t* Data,
+ size_t Size )
+ {
+ return LLVMFuzzerTestOneInput( Data, Size );
+ }
+
+
+ // Custom mutator.
+ virtual size_t
+ Mutate( uint8_t* Data,
+ size_t Size,
+ size_t MaxSize )
+ {
+ vector<vector<uint8_t>> files = parse_data( Data, Size );
+
+ // If the file was not recognized as a tar file, treat it as non-tar.
+ if ( files.size() == 0 )
+ return fuzzer::UserSuppliedFuzzer::Mutate( Data, Size, MaxSize );
+
+ // This is somewhat `white box' on tar. The tar format uses 512 byte
+ // blocks. One block as header for each file, two empty blocks of 0's
+ // at the end. File data is padded to fill its last block.
+ size_t used_blocks = files.size() + 2;
+ for ( const auto& file : files )
+ used_blocks += ( file.size() + 511 ) / 512;
+
+ size_t max_blocks = MaxSize / 512;
+
+ // If the input is big, it will need to be downsized. If the original
+ // tar file was too big, it may have been clipped to fit. In this
+ // case it may not be possible to properly write out the data, as
+ // there may not be enough space for the trailing two blocks. Start
+ // dropping file data or files from the end.
+ for ( size_t i = files.size();
+ i-- > 1 && used_blocks > max_blocks; )
+ {
+ size_t blocks_to_free = used_blocks - max_blocks;
+ size_t blocks_currently_used_by_file_data =
+ ( files[i].size() + 511 ) / 512;
+
+ if ( blocks_currently_used_by_file_data >= blocks_to_free )
+ {
+ files[i].resize( ( blocks_currently_used_by_file_data -
+ blocks_to_free ) * 512 );
+ used_blocks -= blocks_to_free;
+ continue;
+ }
+
+ files.pop_back();
+ used_blocks -= blocks_currently_used_by_file_data + 1;
+ }
+
+ // If we get down to one file, don't use tar.
+ if ( files.size() == 1 )
+ {
+ memcpy( Data, files[0].data(), files[0].size() );
+ return fuzzer::UserSuppliedFuzzer::Mutate( Data,
+ files[0].size(),
+ MaxSize );
+ }
+
+ size_t free_blocks = max_blocks - used_blocks;
+
+ // Allow each file to use up as much of the currently available space
+ // it can. If it uses or gives up blocks, add them or remove them
+ // from the pool.
+ for ( auto&& file : files )
+ {
+ size_t blocks_currently_used_by_file = ( file.size() + 511 ) / 512;
+ size_t blocks_available = blocks_currently_used_by_file +
+ free_blocks;
+ size_t max_size = blocks_available * 512;
+ size_t data_size = file.size();
+
+ file.resize( max_size );
+ file.resize( fuzzer::UserSuppliedFuzzer::Mutate( file.data(),
+ data_size,
+ max_size ) );
+
+ size_t blocks_now_used_by_file = ( file.size() + 511 ) / 512;
+ free_blocks = free_blocks +
+ blocks_currently_used_by_file -
+ blocks_now_used_by_file;
+ }
+
+ unique_ptr<struct archive,
+ decltype ( archive_write_free )*> a( archive_write_new(),
+ archive_write_free );
+
+ check_result( a.get(), archive_write_add_filter_none( a.get() ) );
+ check_result( a.get(), archive_write_set_format_ustar( a.get() ) );
+
+ // `used' may not be correct until after the archive is closed.
+ size_t used = 0xbadbeef;
+ check_result( a.get(), archive_write_open_memory( a.get(),
+ Data,
+ MaxSize,
+ &used ) );
+
+ {
+ unique_ptr<struct archive,
+ decltype ( archive_write_close )*> a_open( a.get(),
+ archive_write_close );
+
+ int file_index = 0;
+ for ( const auto& file : files )
+ {
+ unique_ptr<struct archive_entry,
+ decltype ( archive_entry_free )*>
+ e( archive_entry_new2( a_open.get() ),
+ archive_entry_free );
+
+ char name_buffer[100];
+ snprintf( name_buffer, 100, "file%d", file_index++ );
+
+ archive_entry_set_pathname( e.get(), name_buffer );
+ archive_entry_set_size( e.get(), file.size() );
+ archive_entry_set_filetype( e.get(), AE_IFREG );
+ archive_entry_set_perm( e.get(), 0644 );
+
+ check_result( a_open.get(),
+ archive_write_header( a_open.get(), e.get() ) );
+ archive_write_data( a_open.get(), file.data(), file.size() );
+ check_result( a_open.get(),
+ archive_write_finish_entry( a_open.get() ) );
+ }
+ }
+
+ return used;
+ }
+
+
+ // Cross `Data1' and `Data2', write up to `MaxOutSize' bytes into `Out',
+ // return the number of bytes written, which should be positive.
+ virtual size_t
+ CrossOver( const uint8_t* Data1,
+ size_t Size1,
+ const uint8_t* Data2,
+ size_t Size2,
+ uint8_t* Out,
+ size_t MaxOutSize )
+ {
+ return fuzzer::UserSuppliedFuzzer::CrossOver( Data1,
+ Size1,
+ Data2,
+ Size2,
+ Out,
+ MaxOutSize );
+ }
+
+ }; // end of FTFuzzer class
+
+
+ int
+ main( int argc,
+ char* *argv )
+ {
+ fuzzer::FuzzerRandomLibc Rand( 0 );
+ FTFuzzer F( &Rand );
+
+ fuzzer::FuzzerDriver( argc, argv, F );
+ }
+
+
+// END
diff --git a/src/tools/ftfuzzer/rasterfuzzer.cc b/src/tools/ftfuzzer/rasterfuzzer.cc
new file mode 100644
index 0000000..c69b95e
--- /dev/null
+++ b/src/tools/ftfuzzer/rasterfuzzer.cc
@@ -0,0 +1,129 @@
+// rasterfuzzer.cc
+//
+// A fuzzing function to test FreeType's rasterizers with libFuzzer.
+//
+// Copyright 2016-2018 by
+// David Turner, Robert Wilhelm, and Werner Lemberg.
+//
+// This file is part of the FreeType project, and may only be used,
+// modified, and distributed under the terms of the FreeType project
+// license, LICENSE.TXT. By continuing to use, modify, or distribute
+// this file you indicate that you have read the license and
+// understand and accept it fully.
+
+
+#include <stdint.h>
+
+#include <vector>
+
+
+ using namespace std;
+
+
+#include <ft2build.h>
+
+#include FT_FREETYPE_H
+#include FT_IMAGE_H
+#include FT_OUTLINE_H
+
+
+ static FT_Library library;
+ static int InitResult;
+
+
+ struct FT_Global {
+ FT_Global() {
+ InitResult = FT_Init_FreeType( &library );
+ }
+ ~FT_Global() {
+ FT_Done_FreeType( library );
+ }
+ };
+
+ FT_Global global_ft;
+
+
+ extern "C" int
+ LLVMFuzzerTestOneInput( const uint8_t* data,
+ size_t size_ )
+ {
+ unsigned char pixels[4];
+
+ FT_Bitmap bitmap_mono = {
+ 1, // rows
+ 1, // width
+ 4, // pitch
+ pixels, // buffer
+ 2, // num_grays
+ FT_PIXEL_MODE_MONO, // pixel_mode
+ 0, // palette_mode
+ NULL // palette
+ };
+
+ FT_Bitmap bitmap_gray = {
+ 1, // rows
+ 1, // width
+ 4, // pitch
+ pixels, // buffer
+ 256, // num_grays
+ FT_PIXEL_MODE_GRAY, // pixel_mode
+ 0, // palette_mode
+ NULL // palette
+ };
+
+ const size_t vsize = sizeof ( FT_Vector );
+ const size_t tsize = sizeof ( char );
+
+ // we use the input data for both points and tags
+ short n_points = short( size_ / ( vsize + tsize ) );
+ if ( n_points <= 2 )
+ return 0;
+
+ FT_Vector* points = reinterpret_cast<FT_Vector*>(
+ const_cast<uint8_t*>(
+ data ) );
+ char* tags = reinterpret_cast<char*>(
+ const_cast<uint8_t*>(
+ data + size_t( n_points ) * vsize ) );
+
+ // to reduce the number of invalid outlines that are immediately
+ // rejected in `FT_Outline_Render', limit values to 2^18 pixels
+ // (i.e., 2^24 bits)
+ for ( short i = 0; i < n_points; i++ )
+ {
+ if ( points[i].x == LONG_MIN )
+ points[i].x = 0;
+ else if ( points[i].x < 0 )
+ points[i].x = -( -points[i].x & 0xFFFFFF ) - 1;
+ else
+ points[i].x = ( points[i].x & 0xFFFFFF ) + 1;
+
+ if ( points[i].y == LONG_MIN )
+ points[i].y = 0;
+ else if ( points[i].y < 0 )
+ points[i].y = -( -points[i].y & 0xFFFFFF ) - 1;
+ else
+ points[i].y = ( points[i].y & 0xFFFFFF ) + 1;
+ }
+
+ short contours[1];
+ contours[0] = n_points - 1;
+
+ FT_Outline outline =
+ {
+ 1, // n_contours
+ n_points, // n_points
+ points, // points
+ tags, // tags
+ contours, // contours
+ FT_OUTLINE_NONE // flags
+ };
+
+ FT_Outline_Get_Bitmap( library, &outline, &bitmap_mono );
+ FT_Outline_Get_Bitmap( library, &outline, &bitmap_gray );
+
+ return 0;
+ }
+
+
+// END
diff --git a/src/tools/ftfuzzer/runinput.cc b/src/tools/ftfuzzer/runinput.cc
new file mode 100644
index 0000000..2b02f57
--- /dev/null
+++ b/src/tools/ftfuzzer/runinput.cc
@@ -0,0 +1,58 @@
+// runinput.cc
+//
+// A `main' function for fuzzers like `ftfuzzer.cc'.
+//
+// Copyright 2015-2018 by
+// David Turner, Robert Wilhelm, and Werner Lemberg.
+//
+// This file is part of the FreeType project, and may only be used,
+// modified, and distributed under the terms of the FreeType project
+// license, LICENSE.TXT. By continuing to use, modify, or distribute
+// this file you indicate that you have read the license and
+// understand and accept it fully.
+
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+
+ extern "C" void
+ LLVMFuzzerTestOneInput( const uint8_t* data,
+ size_t size );
+
+
+ unsigned char a[1 << 24];
+
+
+ int
+ main( int argc,
+ char* *argv )
+ {
+ assert( argc >= 2 );
+
+ for ( int i = 1; i < argc; i++ )
+ {
+ fprintf( stderr, "%s\n", argv[i] );
+
+ FILE* f = fopen( argv[i], "r" );
+ assert( f );
+
+ size_t n = fread( a, 1, sizeof ( a ), f );
+ fclose( f );
+ if ( !n )
+ continue;
+
+ unsigned char* b = (unsigned char*)malloc( n );
+ memcpy( b, a, n );
+
+ LLVMFuzzerTestOneInput( b, n );
+
+ free( b );
+ }
+ }
+
+
+// END
diff --git a/src/tools/ftrandom/Makefile b/src/tools/ftrandom/Makefile
index 2e61929..24dc49c 100644
--- a/src/tools/ftrandom/Makefile
+++ b/src/tools/ftrandom/Makefile
@@ -5,7 +5,12 @@
OBJ_DIR ?= $(TOP_DIR)/objs
-# The setup below is for gcc on a Unix-like platform.
+# The setup below is for gcc on a Unix-like platform,
+# where FreeType has been set up to create a static library
+# (which is the default).
+
+VPATH = $(OBJ_DIR) \
+ $(OBJ_DIR)/.libs
SRC_DIR = $(TOP_DIR)/src/tools/ftrandom
@@ -20,16 +25,21 @@
-Wchar-subscripts \
-Wsequence-point
CFLAGS = $(WFLAGS) \
- -g \
- -I $(TOP_DIR)/include
+ -g
+INCLUDES = -I $(TOP_DIR)/include
+LDFLAGS =
LIBS = -lm \
- -L $(OBJ_DIR) \
- -lfreetype \
- -lz
+ -lz \
+ -lpng \
+ -lbz2 \
+ -lharfbuzz
all: $(OBJ_DIR)/ftrandom
-$(OBJ_DIR)/ftrandom: $(SRC_DIR)/ftrandom.c $(OBJ_DIR)/libfreetype.a
- $(CC) -o $(OBJ_DIR)/ftrandom $(CFLAGS) $(SRC_DIR)/ftrandom.c $(LIBS)
+$(OBJ_DIR)/ftrandom.o: $(SRC_DIR)/ftrandom.c
+ $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $<
+
+$(OBJ_DIR)/ftrandom: $(OBJ_DIR)/ftrandom.o libfreetype.a
+ $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
# EOF
diff --git a/src/tools/ftrandom/README b/src/tools/ftrandom/README
index 71bf053..7c61086 100644
--- a/src/tools/ftrandom/README
+++ b/src/tools/ftrandom/README
@@ -1,48 +1,69 @@
ftrandom
---------
+========
This program expects a set of directories containing good fonts, and a set
of extensions of fonts to be tested. It will randomly pick a font, copy it,
-introduce and error and then test it.
+introduce an error and then test it.
-The FreeType tests are quite basic:
+The FreeType tests are quite basic; for each erroneous font ftrandom
- For each erroneous font it
- forks off a new tester;
- initializes the library;
- opens each font in the file;
- loads each glyph;
- (optionally reviewing the contours of the glyph)
- (optionally rasterizing)
- closes the face.
+ . forks off a new tester,
+ . initializes the library,
+ . opens each font in the file,
+ . loads each glyph,
+ . optionally reviews the contours of the glyph,
+ . optionally rasterizes the glyph, and
+ . closes the face.
-If the tester exits with a signal, or takes longer than 20 seconds then
-ftrandom saves the erroneous font and continues. If the tester exits
-normally or with an error, then the superstructure removes the test font and
-continues.
+If a tester takes longer than 20 seconds, ftrandom saves the erroneous font
+and continues. If the tester exits normally or with an error, then the
+superstructure removes the test font and continues.
-Arguments are:
+
+Command line options
+--------------------
--all Test every font in the directory(ies) no matter
- what its extension (some CID-keyed fonts have no
- extension).
- --check-outlines Call FT_Outline_Decompose on each glyph.
+ what its extension.
+ --check-outlines Call `FT_Outline_Decompose' on each glyph.
--dir <dir> Append <dir> to the list of directories to search
- for good fonts.
+ for good fonts. No recursive search.
--error-count <cnt> Introduce <cnt> single-byte errors into the
- erroneous fonts.
+ erroneous fonts (default: 1).
--error-fraction <frac> Multiply the file size of the font by <frac> and
introduce that many errors into the erroneous
- font file.
- --ext <ext> Add <ext> to the set of font types tested. Known
- extensions are `ttf', `otf', `ttc', `cid', `pfb',
- `pfa', `bdf', `pcf', `pfr', `fon', `otb', and
- `cff'.
+ font file. <frac> should be in the range [0;1]
+ (default: 0.0).
+ --ext <ext> Add <ext> to the set of font types tested.
--help Print out this list of options.
--nohints Specify FT_LOAD_NO_HINTING when loading glyphs.
- --rasterize Call FT_Render_Glyph as well as loading it.
+ --rasterize Call `FT_Render_Glyph' as well as loading it.
--result <dir> This is the directory in which test files are
placed.
--test <file> Run a single test on a pre-generated testcase.
- Done in the current process so it can be debugged
- more easily.
+ This is done in the current process so it can be
+ debugged more easily.
+
+The default font extensions tested by ftrandom are
+
+ .ttf .otf .ttc .cid .pfb .pfa .bdf .pcf .pfr .fon .otb .cff
+
+The default font directory is controlled by the macro `GOOD_FONTS_DIR' in
+the source code (and can be thus specified during compilation); its default
+value is
+
+ /usr/local/share/fonts
+
+The default result directory is `results' (in the current directory).
+
+
+Compilation
+-----------
+
+Two possible solutions.
+
+. Run ftrandom within a debugging tool like `valgrind' to catch various
+ memory issues.
+
+. Compile FreeType with sanitizer flags as provided by gcc or clang, for
+ example, then link it with ftrandom.
diff --git a/src/tools/ftrandom/ftrandom.c b/src/tools/ftrandom/ftrandom.c
index 9a5b632..ab5cfc9 100644
--- a/src/tools/ftrandom/ftrandom.c
+++ b/src/tools/ftrandom/ftrandom.c
@@ -29,6 +29,9 @@
/* This file is now part of the FreeType library */
+#define _XOPEN_SOURCE 500 /* for `kill', `strdup', `random', and `srandom' */
+
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -38,7 +41,6 @@
#include <sys/wait.h>
#include <unistd.h>
#include <dirent.h>
-#include <math.h>
#include <signal.h>
#include <time.h>
@@ -56,7 +58,7 @@
static int rasterize = false;
static char* results_dir = "results";
-#define GOOD_FONTS_DIR "/home/wl/freetype-testfonts"
+#define GOOD_FONTS_DIR "/usr/local/share/fonts"
static char* default_dir_list[] =
{
@@ -81,28 +83,31 @@
NULL
};
- static int error_count = 1;
- static int error_fraction = 0;
+ static unsigned int error_count = 1;
+ static double error_fraction = 0.0;
static FT_F26Dot6 font_size = 12 * 64;
static struct fontlist
{
char* name;
- int len;
+ long len;
unsigned int isbinary: 1;
unsigned int isascii: 1;
unsigned int ishex: 1;
} *fontlist;
- static int fcnt;
+ static unsigned int fcnt;
static int
FT_MoveTo( const FT_Vector *to,
void *user )
{
+ FT_UNUSED( to );
+ FT_UNUSED( user );
+
return 0;
}
@@ -111,6 +116,9 @@
FT_LineTo( const FT_Vector *to,
void *user )
{
+ FT_UNUSED( to );
+ FT_UNUSED( user );
+
return 0;
}
@@ -120,6 +128,10 @@
const FT_Vector *to,
void *user )
{
+ FT_UNUSED( _cp );
+ FT_UNUSED( to );
+ FT_UNUSED( user );
+
return 0;
}
@@ -130,6 +142,11 @@
const FT_Vector *to,
void *user )
{
+ FT_UNUSED( cp1 );
+ FT_UNUSED( cp2 );
+ FT_UNUSED( to );
+ FT_UNUSED( user );
+
return 0;
}
@@ -147,8 +164,8 @@
static void
TestFace( FT_Face face )
{
- int gid;
- int load_flags = FT_LOAD_DEFAULT;
+ unsigned int gid;
+ int load_flags = FT_LOAD_DEFAULT;
if ( check_outlines &&
@@ -160,7 +177,7 @@
FT_Set_Char_Size( face, 0, font_size, 72, 72 );
- for ( gid = 0; gid < face->num_glyphs; ++gid )
+ for ( gid = 0; gid < face->num_glyphs; gid++ )
{
if ( check_outlines &&
FT_IS_SCALABLE( face ) )
@@ -202,19 +219,21 @@
TestFace( face );
else
{
- int i, num;
+ long i, num;
num = face->num_faces;
FT_Done_Face( face );
- for ( i = 0; i < num; ++i )
+ for ( i = 0; i < num; i++ )
{
if ( !FT_New_Face( context, testfont, i, &face ) )
TestFace( face );
}
}
+ FT_Done_FreeType( context );
+
exit( 0 );
}
@@ -227,16 +246,16 @@
char* pt;
- if ( extensions == NULL )
+ if ( !extensions )
return true;
pt = strrchr( filename, '.' );
- if ( pt == NULL )
+ if ( !pt )
return false;
if ( pt < strrchr( filename, '/' ) )
return false;
- for ( i = 0; extensions[i] != NULL; ++i )
+ for ( i = 0; extensions[i] != NULL; i++ )
if ( strcasecmp( pt + 1, extensions[i] ) == 0 ||
strcasecmp( pt, extensions[i] ) == 0 )
return true;
@@ -254,7 +273,7 @@
item->isbinary = item->isascii = item->ishex = false;
foo = fopen( item->name, "rb" );
- if ( foo != NULL )
+ if ( foo )
{
/* Try to guess the file type from the first few characters... */
int ch1 = getc( foo );
@@ -281,8 +300,8 @@
else if ( ch1 == '%' && ch2 == '!' )
{
/* Random PostScript */
- if ( strstr( item->name, ".pfa" ) != NULL ||
- strstr( item->name, ".PFA" ) != NULL )
+ if ( strstr( item->name, ".pfa" ) ||
+ strstr( item->name, ".PFA" ) )
item->ishex = true;
else
item->isascii = true;
@@ -329,22 +348,23 @@
FindFonts( char** fontdirs,
char** extensions )
{
- int i, max;
- char buffer[1025];
- struct stat statb;
+ int i;
+ unsigned int max;
+ char buffer[1025];
+ struct stat statb;
max = 0;
fcnt = 0;
- for ( i = 0; fontdirs[i] != NULL; ++i )
+ for ( i = 0; fontdirs[i] != NULL; i++ )
{
DIR* examples;
struct dirent* ent;
examples = opendir( fontdirs[i] );
- if ( examples == NULL )
+ if ( !examples )
{
fprintf( stderr,
"Can't open example font directory `%s'\n",
@@ -358,13 +378,13 @@
"%s/%s", fontdirs[i], ent->d_name );
if ( stat( buffer, &statb ) == -1 || S_ISDIR( statb.st_mode ) )
continue;
- if ( extensions == NULL || extmatch( buffer, extensions ) )
+ if ( !extensions || extmatch( buffer, extensions ) )
{
if ( fcnt >= max )
{
max += 100;
fontlist = realloc( fontlist, max * sizeof ( struct fontlist ) );
- if ( fontlist == NULL )
+ if ( !fontlist )
{
fprintf( stderr, "Can't allocate memory\n" );
exit( 1 );
@@ -375,7 +395,7 @@
fontlist[fcnt].len = statb.st_size;
figurefiletype( &fontlist[fcnt] );
- ++fcnt;
+ fcnt++;
}
}
@@ -392,13 +412,13 @@
}
- static int
+ static unsigned int
getErrorCnt( struct fontlist* item )
{
- if ( error_count == 0 && error_fraction == 0 )
+ if ( error_count == 0 && error_fraction == 0.0 )
return 0;
- return error_count + ceil( error_fraction * item->len );
+ return error_count + (unsigned int)( error_fraction * item->len );
}
@@ -417,21 +437,21 @@
copyfont( struct fontlist* item,
char* newfont )
{
- static char buffer[8096];
- FILE *good, *new;
- int len;
- int i, err_cnt;
+ static char buffer[8096];
+ FILE *good, *newf;
+ size_t len;
+ unsigned int i, err_cnt;
good = fopen( item->name, "r" );
- if ( good == NULL )
+ if ( !good )
{
fprintf( stderr, "Can't open `%s'\n", item->name );
return false;
}
- new = fopen( newfont, "w+" );
- if ( new == NULL )
+ newf = fopen( newfont, "w+" );
+ if ( !newf )
{
fprintf( stderr, "Can't create temporary output file `%s'\n",
newfont );
@@ -439,19 +459,19 @@
}
while ( ( len = fread( buffer, 1, sizeof ( buffer ), good ) ) > 0 )
- fwrite( buffer, 1, len, new );
+ fwrite( buffer, 1, len, newf );
fclose( good );
err_cnt = getErrorCnt( item );
- for ( i = 0; i < err_cnt; ++i )
+ for ( i = 0; i < err_cnt; i++ )
{
- fseek( new, getRandom( 0, item->len - 1 ), SEEK_SET );
+ fseek( newf, getRandom( 0, (int)( item->len - 1 ) ), SEEK_SET );
if ( item->isbinary )
- putc( getRandom( 0, 0xFF ), new );
+ putc( getRandom( 0, 0xFF ), newf );
else if ( item->isascii )
- putc( getRandom( 0x20, 0x7E ), new );
+ putc( getRandom( 0x20, 0x7E ), newf );
else
{
int hex = getRandom( 0, 15 );
@@ -462,18 +482,18 @@
else
hex += 'A' - 10;
- putc( hex, new );
+ putc( hex, newf );
}
}
- if ( ferror( new ) )
+ if ( ferror( newf ) )
{
- fclose( new );
+ fclose( newf );
unlink( newfont );
return false;
}
- fclose( new );
+ fclose( newf );
return true;
}
@@ -484,6 +504,8 @@
static void
abort_test( int sig )
{
+ FT_UNUSED( sig );
+
/* If a time-out happens, then kill the child */
kill( child_pid, SIGFPE );
write( 2, "Timeout... ", 11 );
@@ -493,7 +515,7 @@
static void
do_test( void )
{
- int i = getRandom( 0, fcnt - 1 );
+ int i = getRandom( 0, (int)( fcnt - 1 ) );
static int test_num = 0;
char buffer[1024];
@@ -534,22 +556,42 @@
usage( FILE* out,
char* name )
{
+ char** d = default_dir_list;
+ char** e = default_ext_list;
+
+
fprintf( out, "%s [options] -- Generate random erroneous fonts\n"
" and attempt to parse them with FreeType.\n\n", name );
fprintf( out, " --all All non-directory files are assumed to be fonts.\n" );
fprintf( out, " --check-outlines Make sure we can parse the outlines of each glyph.\n" );
- fprintf( out, " --dir <path> Append <path> to list of font search directories.\n" );
- fprintf( out, " --error-count <cnt> Introduce <cnt> single byte errors into each font.\n" );
+ fprintf( out, " --dir <path> Append <path> to list of font search directories\n"
+ " (no recursive search).\n" );
+ fprintf( out, " --error-count <cnt> Introduce <cnt> single byte errors into each font\n"
+ " (default: 1)\n" );
fprintf( out, " --error-fraction <frac> Introduce <frac>*filesize single byte errors\n"
- " into each font.\n" );
+ " into each font (default: 0.0).\n" );
fprintf( out, " --ext <ext> Add <ext> to list of extensions indicating fonts.\n" );
fprintf( out, " --help Print this.\n" );
fprintf( out, " --nohints Turn off hinting.\n" );
fprintf( out, " --rasterize Attempt to rasterize each glyph.\n" );
- fprintf( out, " --results <dir> Directory in which to place the test fonts.\n" );
+ fprintf( out, " --results <path> Place the created test fonts into <path>\n"
+ " (default: `results')\n" );
fprintf( out, " --size <float> Use the given font size for the tests.\n" );
fprintf( out, " --test <file> Run a single test on an already existing file.\n" );
+ fprintf( out, "\n" );
+
+ fprintf( out, "Default font extensions:\n" );
+ fprintf( out, " " );
+ while ( *e )
+ fprintf( out, " .%s", *e++ );
+ fprintf( out, "\n" );
+
+ fprintf( out, "Default font directories:\n" );
+ fprintf( out, " " );
+ while ( *d )
+ fprintf( out, " %s", *d++ );
+ fprintf( out, "\n" );
}
@@ -564,17 +606,17 @@
char* testfile = NULL;
- dirs = calloc( argc + 1, sizeof ( char ** ) );
- exts = calloc( argc + 1, sizeof ( char ** ) );
+ dirs = calloc( (size_t)( argc + 1 ), sizeof ( char ** ) );
+ exts = calloc( (size_t)( argc + 1 ), sizeof ( char ** ) );
- for ( i = 1; i < argc; ++i )
+ for ( i = 1; i < argc; i++ )
{
char* pt = argv[i];
char* end;
if ( pt[0] == '-' && pt[1] == '-' )
- ++pt;
+ pt++;
if ( strcmp( pt, "-all" ) == 0 )
allexts = true;
@@ -585,9 +627,9 @@
else if ( strcmp( pt, "-error-count" ) == 0 )
{
if ( !rset )
- error_fraction = 0;
+ error_fraction = 0.0;
rset = true;
- error_count = strtol( argv[++i], &end, 10 );
+ error_count = (unsigned int)strtoul( argv[++i], &end, 10 );
if ( *end != '\0' )
{
fprintf( stderr, "Bad value for error-count: %s\n", argv[i] );
@@ -605,6 +647,11 @@
fprintf( stderr, "Bad value for error-fraction: %s\n", argv[i] );
exit( 1 );
}
+ if ( error_fraction < 0.0 || error_fraction > 1.0 )
+ {
+ fprintf( stderr, "error-fraction must be in the range [0;1]\n" );
+ exit( 1 );
+ }
}
else if ( strcmp( pt, "-ext" ) == 0 )
exts[ecnt++] = argv[++i];
@@ -654,11 +701,11 @@
dirs = default_dir_list;
}
- if ( testfile != NULL )
+ if ( testfile )
ExecuteTest( testfile ); /* This should never return */
time( &now );
- srandom( now );
+ srandom( (unsigned int)now );
FindFonts( dirs, exts );
mkdir( results_dir, 0755 );
diff --git a/src/tools/glnames.py b/src/tools/glnames.py
index 0ad554c..b048d29 100644
--- a/src/tools/glnames.py
+++ b/src/tools/glnames.py
@@ -6,7 +6,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -151,7 +151,7 @@
# The list of standard `SID' glyph names. For the official list,
# see Annex A of document at
#
-# http://partners.adobe.com/public/developer/en/font/5176.CFF.pdf .
+# https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5176.CFF.pdf .
#
sid_standard_names = \
[
@@ -415,7 +415,7 @@
# This data has been taken literally from the files `glyphlist.txt'
# and `zapfdingbats.txt' version 2.0, Sept 2002. It is available from
#
-# http://sourceforge.net/adobe/aglfn/
+# https://github.com/adobe-type-tools/agl-aglfn
#
adobe_glyph_list = """\
A;0041
@@ -4920,8 +4920,17 @@
def dump( self, file ):
write = file.write
- write( " static const char " + self.master_table +
- "[" + repr( self.total ) + "] =\n" )
+ write( "#ifndef DEFINE_PS_TABLES_DATA\n" )
+ write( "#ifdef __cplusplus\n" )
+ write( ' extern "C"\n' )
+ write( "#else\n" )
+ write( " extern\n" )
+ write( "#endif\n" )
+ write( "#endif\n" )
+ write( " const char " + self.master_table +
+ "[" + repr( self.total ) + "]\n" )
+ write( "#ifdef DEFINE_PS_TABLES_DATA\n" )
+ write( " =\n" )
write( " {\n" )
line = ""
@@ -4930,7 +4939,10 @@
line += string.join( ( re.findall( ".", name ) ), "','" )
line += "', 0,\n"
- write( line + " };\n\n\n" )
+ write( line )
+ write( " }\n" )
+ write( "#endif /* DEFINE_PS_TABLES_DATA */\n" )
+ write( " ;\n\n\n" )
def dump_sublist( self, file, table_name, macro_name, sublist ):
write = file.write
@@ -4938,8 +4950,17 @@
write( " /* Values are offsets into the `" +
self.master_table + "' table */\n\n" )
- write( " static const short " + table_name +
- "[" + macro_name + "] =\n" )
+ write( "#ifndef DEFINE_PS_TABLES_DATA\n" )
+ write( "#ifdef __cplusplus\n" )
+ write( ' extern "C"\n' )
+ write( "#else\n" )
+ write( " extern\n" )
+ write( "#endif\n" )
+ write( "#endif\n" )
+ write( " const short " + table_name +
+ "[" + macro_name + "]\n" )
+ write( "#ifdef DEFINE_PS_TABLES_DATA\n" )
+ write( " =\n" )
write( " {\n" )
line = " "
@@ -4955,7 +4976,11 @@
col = 0
comma = ",\n "
- write( line + "\n };\n\n\n" )
+ write( line )
+ write( "\n" )
+ write( " }\n" )
+ write( "#endif /* DEFINE_PS_TABLES_DATA */\n" )
+ write( " ;\n\n\n" )
# We now store the Adobe Glyph List in compressed form. The list is put
@@ -5188,8 +5213,17 @@
write = file.write
write( " /* the following are indices into the SID name table */\n" )
- write( " static const unsigned short " + encoding_name +
- "[" + repr( len( encoding_list ) ) + "] =\n" )
+ write( "#ifndef DEFINE_PS_TABLES_DATA\n" )
+ write( "#ifdef __cplusplus\n" )
+ write( ' extern "C"\n' )
+ write( "#else\n" )
+ write( " extern\n" )
+ write( "#endif\n" )
+ write( "#endif\n" )
+ write( " const unsigned short " + encoding_name +
+ "[" + repr( len( encoding_list ) ) + "]\n" )
+ write( "#ifdef DEFINE_PS_TABLES_DATA\n" )
+ write( " =\n" )
write( " {\n" )
line = " "
@@ -5204,14 +5238,27 @@
col = 0
comma = ",\n "
- write( line + "\n };\n\n\n" )
+ write( line )
+ write( "\n" )
+ write( " }\n" )
+ write( "#endif /* DEFINE_PS_TABLES_DATA */\n" )
+ write( " ;\n\n\n" )
def dump_array( the_array, write, array_name ):
"""dumps a given encoding"""
- write( " static const unsigned char " + array_name +
- "[" + repr( len( the_array ) ) + "L] =\n" )
+ write( "#ifndef DEFINE_PS_TABLES_DATA\n" )
+ write( "#ifdef __cplusplus\n" )
+ write( ' extern "C"\n' )
+ write( "#else\n" )
+ write( " extern\n" )
+ write( "#endif\n" )
+ write( "#endif\n" )
+ write( " const unsigned char " + array_name +
+ "[" + repr( len( the_array ) ) + "L]\n" )
+ write( "#ifdef DEFINE_PS_TABLES_DATA\n" )
+ write( " =\n" )
write( " {\n" )
line = ""
@@ -5232,7 +5279,11 @@
write( line )
line = ""
- write( line + "\n };\n\n\n" )
+ write( line )
+ write( "\n" )
+ write( " }\n" )
+ write( "#endif /* DEFINE_PS_TABLES_DATA */\n" )
+ write( " ;\n\n\n" )
def main():
@@ -5242,7 +5293,7 @@
print __doc__ % sys.argv[0]
sys.exit( 1 )
- file = open( sys.argv[1], "w\n" )
+ file = open( sys.argv[1], "wb" )
write = file.write
count_sid = len( sid_standard_names )
@@ -5267,7 +5318,7 @@
write( "/* */\n" )
write( "/* PostScript glyph names. */\n" )
write( "/* */\n" )
- write( "/* Copyright 2005-2015 by */\n" )
+ write( "/* Copyright 2005-2018 by */\n" )
write( "/* David Turner, Robert Wilhelm, and Werner Lemberg. */\n" )
write( "/* */\n" )
write( "/* This file is part of the FreeType project, and may only be used, */\n" )
@@ -5327,6 +5378,7 @@
# write the lookup routine now
#
write( """\
+#ifdef DEFINE_PS_TABLES
/*
* This function searches the compressed table efficiently.
*/
@@ -5421,6 +5473,7 @@
NotFound:
return 0;
}
+#endif /* DEFINE_PS_TABLES */
#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */
diff --git a/src/tools/no-copyright b/src/tools/no-copyright
index 5011e3f..d639aa4 100644
--- a/src/tools/no-copyright
+++ b/src/tools/no-copyright
@@ -14,6 +14,9 @@
docs/FTL.TXT
docs/GPLv2.TXT
#
+include/freetype/internal/fthash.h
+#
+src/base/fthash.c
src/base/md5.c
src/base/md5.h
#
@@ -56,6 +59,7 @@
src/gzip/zutil.c
src/gzip/zutil.h
#
+src/tools/apinames.c
src/tools/ftrandom/ftrandom.c
#
# EOF
diff --git a/src/tools/update-copyright-year b/src/tools/update-copyright-year
index 1077541..934f11c 100755
--- a/src/tools/update-copyright-year
+++ b/src/tools/update-copyright-year
@@ -2,7 +2,7 @@
& eval 'exec perl -wS -i "$0" $argv:q'
if 0;
-# Copyright 2015 by
+# Copyright 2015-2018 by
# Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/truetype/Jamfile b/src/truetype/Jamfile
index 55a60af..e321fba 100644
--- a/src/truetype/Jamfile
+++ b/src/truetype/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/truetype Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,15 @@
if $(FT2_MULTI)
{
- _sources = ttdriver ttobjs ttpload ttgload ttinterp ttgxvar ttpic ;
+ _sources = ttdriver
+ ttgload
+ ttgxvar
+ ttinterp
+ ttobjs
+ ttpic
+ ttpload
+ ttsubpix
+ ;
}
else
{
diff --git a/src/truetype/module.mk b/src/truetype/module.mk
index c6dc6fa..16bc9c8 100644
--- a/src/truetype/module.mk
+++ b/src/truetype/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/truetype/rules.mk b/src/truetype/rules.mk
index 1db16ba..e16113f 100644
--- a/src/truetype/rules.mk
+++ b/src/truetype/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/truetype/truetype.c b/src/truetype/truetype.c
index f929437..4843709 100644
--- a/src/truetype/truetype.c
+++ b/src/truetype/truetype.c
@@ -4,7 +4,7 @@
/* */
/* FreeType TrueType driver component (body only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,22 +17,16 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
-#include "ttpic.c"
+
#include "ttdriver.c" /* driver interface */
-#include "ttpload.c" /* tables loader */
#include "ttgload.c" /* glyph loader */
-#include "ttobjs.c" /* object manager */
-
-#ifdef TT_USE_BYTECODE_INTERPRETER
-#include "ttinterp.c"
-#include "ttsubpix.c"
-#endif
-
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
#include "ttgxvar.c" /* gx distortable font */
-#endif
+#include "ttinterp.c"
+#include "ttobjs.c" /* object manager */
+#include "ttpic.c"
+#include "ttpload.c" /* tables loader */
+#include "ttsubpix.c"
/* END */
diff --git a/src/truetype/ttdriver.c b/src/truetype/ttdriver.c
index 08b30c9..820cafb 100644
--- a/src/truetype/ttdriver.c
+++ b/src/truetype/ttdriver.c
@@ -4,7 +4,7 @@
/* */
/* TrueType font driver implementation (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -25,12 +25,13 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
#include FT_MULTIPLE_MASTERS_H
#include FT_SERVICE_MULTIPLE_MASTERS_H
+#include FT_SERVICE_METRICS_VARIATIONS_H
#endif
#include FT_SERVICE_TRUETYPE_ENGINE_H
#include FT_SERVICE_TRUETYPE_GLYF_H
#include FT_SERVICE_PROPERTIES_H
-#include FT_TRUETYPE_DRIVER_H
+#include FT_DRIVER_H
#include "ttdriver.h"
#include "ttgload.h"
@@ -61,23 +62,50 @@
static FT_Error
tt_property_set( FT_Module module, /* TT_Driver */
const char* property_name,
- const void* value )
+ const void* value,
+ FT_Bool value_is_string )
{
FT_Error error = FT_Err_Ok;
TT_Driver driver = (TT_Driver)module;
+#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ FT_UNUSED( value_is_string );
+#endif
+
if ( !ft_strcmp( property_name, "interpreter-version" ) )
{
- FT_UInt* interpreter_version = (FT_UInt*)value;
+ FT_UInt interpreter_version;
-#ifndef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( *interpreter_version != TT_INTERPRETER_VERSION_35 )
- error = FT_ERR( Unimplemented_Feature );
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+ if ( value_is_string )
+ {
+ const char* s = (const char*)value;
+
+
+ interpreter_version = (FT_UInt)ft_strtol( s, NULL, 10 );
+ }
else
#endif
- driver->interpreter_version = *interpreter_version;
+ {
+ FT_UInt* iv = (FT_UInt*)value;
+
+
+ interpreter_version = *iv;
+ }
+
+ if ( interpreter_version == TT_INTERPRETER_VERSION_35
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ || interpreter_version == TT_INTERPRETER_VERSION_38
+#endif
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ || interpreter_version == TT_INTERPRETER_VERSION_40
+#endif
+ )
+ driver->interpreter_version = interpreter_version;
+ else
+ error = FT_ERR( Unimplemented_Feature );
return error;
}
@@ -117,8 +145,10 @@
FT_DEFINE_SERVICE_PROPERTIESREC(
tt_service_properties,
- (FT_Properties_SetFunc)tt_property_set,
- (FT_Properties_GetFunc)tt_property_get )
+
+ (FT_Properties_SetFunc)tt_property_set, /* set_property */
+ (FT_Properties_GetFunc)tt_property_get /* get_property */
+ )
/*************************************************************************/
@@ -194,13 +224,20 @@
FT_Fixed *advances )
{
FT_UInt nn;
- TT_Face face = (TT_Face) ttface;
+ TT_Face face = (TT_Face)ttface;
/* XXX: TODO: check for sbits */
if ( flags & FT_LOAD_VERTICAL_LAYOUT )
{
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /* no fast retrieval for blended MM fonts without VVAR table */
+ if ( ( FT_IS_NAMED_INSTANCE( ttface ) || FT_IS_VARIATION( ttface ) ) &&
+ !( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
+ return FT_THROW( Unimplemented_Feature );
+#endif
+
for ( nn = 0; nn < count; nn++ )
{
FT_Short tsb;
@@ -214,6 +251,13 @@
}
else
{
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /* no fast retrieval for blended MM fonts without HVAR table */
+ if ( ( FT_IS_NAMED_INSTANCE( ttface ) || FT_IS_VARIATION( ttface ) ) &&
+ !( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
+ return FT_THROW( Unimplemented_Feature );
+#endif
+
for ( nn = 0; nn < count; nn++ )
{
FT_Short lsb;
@@ -228,6 +272,7 @@
return FT_Err_Ok;
}
+
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
@@ -259,15 +304,17 @@
/* use the scaled metrics, even when tt_size_reset fails */
FT_Select_Metrics( size->face, strike_index );
- tt_size_reset( ttsize ); /* ignore return value */
+ tt_size_reset( ttsize, 0 ); /* ignore return value */
}
else
{
- SFNT_Service sfnt = (SFNT_Service) ttface->sfnt;
- FT_Size_Metrics* metrics = &size->metrics;
+ SFNT_Service sfnt = (SFNT_Service)ttface->sfnt;
+ FT_Size_Metrics* size_metrics = &size->metrics;
- error = sfnt->load_strike_metrics( ttface, strike_index, metrics );
+ error = sfnt->load_strike_metrics( ttface,
+ strike_index,
+ size_metrics );
if ( error )
ttsize->strike_index = 0xFFFFFFFFUL;
}
@@ -291,7 +338,7 @@
if ( FT_HAS_FIXED_SIZES( size->face ) )
{
TT_Face ttface = (TT_Face)size->face;
- SFNT_Service sfnt = (SFNT_Service) ttface->sfnt;
+ SFNT_Service sfnt = (SFNT_Service)ttface->sfnt;
FT_ULong strike_index;
@@ -309,8 +356,28 @@
if ( FT_IS_SCALABLE( size->face ) )
{
- error = tt_size_reset( ttsize );
- ttsize->root.metrics = ttsize->metrics;
+ error = tt_size_reset( ttsize, 0 );
+
+#ifdef TT_USE_BYTECODE_INTERPRETER
+ /* for the `MPS' bytecode instruction we need the point size */
+ if ( !error )
+ {
+ FT_UInt resolution =
+ ttsize->metrics->x_ppem > ttsize->metrics->y_ppem
+ ? req->horiResolution
+ : req->vertResolution;
+
+
+ /* if we don't have a resolution value, assume 72dpi */
+ if ( req->type == FT_SIZE_REQUEST_TYPE_SCALES ||
+ !resolution )
+ resolution = 72;
+
+ ttsize->point_size = FT_MulDiv( ttsize->ttmetrics.ppem,
+ 64 * 72,
+ resolution );
+ }
+#endif
}
return error;
@@ -392,6 +459,11 @@
load_flags |= FT_LOAD_NO_HINTING;
}
+ /* use hinted metrics only if we load a glyph with hinting */
+ size->metrics = ( load_flags & FT_LOAD_NO_HINTING )
+ ? &ttsize->metrics
+ : &size->hinted_metrics;
+
/* now load the glyph outline if necessary */
error = TT_Load_Glyph( size, slot, glyph_index, load_flags );
@@ -415,24 +487,46 @@
/*************************************************************************/
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
FT_DEFINE_SERVICE_MULTIMASTERSREC(
tt_service_gx_multi_masters,
- (FT_Get_MM_Func) NULL,
- (FT_Set_MM_Design_Func) NULL,
- (FT_Set_MM_Blend_Func) TT_Set_MM_Blend,
- (FT_Get_MM_Var_Func) TT_Get_MM_Var,
- (FT_Set_Var_Design_Func)TT_Set_Var_Design )
-#endif
+
+ (FT_Get_MM_Func) NULL, /* get_mm */
+ (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
+ (FT_Set_MM_Blend_Func) TT_Set_MM_Blend, /* set_mm_blend */
+ (FT_Get_MM_Blend_Func) TT_Get_MM_Blend, /* get_mm_blend */
+ (FT_Get_MM_Var_Func) TT_Get_MM_Var, /* get_mm_var */
+ (FT_Set_Var_Design_Func)TT_Set_Var_Design, /* set_var_design */
+ (FT_Get_Var_Design_Func)TT_Get_Var_Design, /* get_var_design */
+ (FT_Set_Instance_Func) TT_Set_Named_Instance, /* set_instance */
+
+ (FT_Get_Var_Blend_Func) tt_get_var_blend, /* get_var_blend */
+ (FT_Done_Blend_Func) tt_done_blend /* done_blend */
+ )
+
+ FT_DEFINE_SERVICE_METRICSVARIATIONSREC(
+ tt_service_metrics_variations,
+
+ (FT_HAdvance_Adjust_Func)tt_hadvance_adjust, /* hadvance_adjust */
+ (FT_LSB_Adjust_Func) NULL, /* lsb_adjust */
+ (FT_RSB_Adjust_Func) NULL, /* rsb_adjust */
+
+ (FT_VAdvance_Adjust_Func)tt_vadvance_adjust, /* vadvance_adjust */
+ (FT_TSB_Adjust_Func) NULL, /* tsb_adjust */
+ (FT_BSB_Adjust_Func) NULL, /* bsb_adjust */
+ (FT_VOrg_Adjust_Func) NULL, /* vorg_adjust */
+
+ (FT_Metrics_Adjust_Func) tt_apply_mvar /* metrics_adjust */
+ )
+
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+
static const FT_Service_TrueTypeEngineRec tt_service_truetype_engine =
{
#ifdef TT_USE_BYTECODE_INTERPRETER
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_TRUETYPE_ENGINE_TYPE_UNPATENTED
-#else
FT_TRUETYPE_ENGINE_TYPE_PATENTED
-#endif
#else /* !TT_USE_BYTECODE_INTERPRETER */
@@ -441,21 +535,28 @@
#endif /* TT_USE_BYTECODE_INTERPRETER */
};
+
FT_DEFINE_SERVICE_TTGLYFREC(
tt_service_truetype_glyf,
- (TT_Glyf_GetLocationFunc)tt_face_get_location )
+
+ (TT_Glyf_GetLocationFunc)tt_face_get_location /* get_location */
+ )
+
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_DEFINE_SERVICEDESCREC5(
+ FT_DEFINE_SERVICEDESCREC6(
tt_services,
- FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE,
- FT_SERVICE_ID_MULTI_MASTERS, &TT_SERVICE_GX_MULTI_MASTERS_GET,
- FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine,
- FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET,
- FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET )
+
+ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE,
+ FT_SERVICE_ID_MULTI_MASTERS, &TT_SERVICE_GX_MULTI_MASTERS_GET,
+ FT_SERVICE_ID_METRICS_VARIATIONS, &TT_SERVICE_METRICS_VARIATIONS_GET,
+ FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine,
+ FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET,
+ FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET )
#else
FT_DEFINE_SERVICEDESCREC4(
tt_services,
+
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE,
FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine,
FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET,
@@ -483,7 +584,7 @@
#endif
result = ft_service_list_lookup( TT_SERVICES_GET, tt_interface );
- if ( result != NULL )
+ if ( result )
return result;
#ifndef FT_CONFIG_OPTION_PIC
@@ -534,31 +635,31 @@
0x10000L, /* driver version == 1.0 */
0x20000L, /* driver requires FreeType 2.0 or above */
- (void*)0, /* driver specific interface */
+ NULL, /* module-specific interface */
- tt_driver_init,
- tt_driver_done,
- tt_get_interface,
+ tt_driver_init, /* FT_Module_Constructor module_init */
+ tt_driver_done, /* FT_Module_Destructor module_done */
+ tt_get_interface, /* FT_Module_Requester get_interface */
sizeof ( TT_FaceRec ),
sizeof ( TT_SizeRec ),
sizeof ( FT_GlyphSlotRec ),
- tt_face_init,
- tt_face_done,
- tt_size_init,
- tt_size_done,
- tt_slot_init,
- 0, /* FT_Slot_DoneFunc */
+ tt_face_init, /* FT_Face_InitFunc init_face */
+ tt_face_done, /* FT_Face_DoneFunc done_face */
+ tt_size_init, /* FT_Size_InitFunc init_size */
+ tt_size_done, /* FT_Size_DoneFunc done_size */
+ tt_slot_init, /* FT_Slot_InitFunc init_slot */
+ NULL, /* FT_Slot_DoneFunc done_slot */
- tt_glyph_load,
+ tt_glyph_load, /* FT_Slot_LoadFunc load_glyph */
- tt_get_kerning,
- 0, /* FT_Face_AttachFunc */
- tt_get_advances,
+ tt_get_kerning, /* FT_Face_GetKerningFunc get_kerning */
+ NULL, /* FT_Face_AttachFunc attach_file */
+ tt_get_advances, /* FT_Face_GetAdvancesFunc get_advances */
- tt_size_request,
- TT_SIZE_SELECT
+ tt_size_request, /* FT_Size_RequestFunc request_size */
+ TT_SIZE_SELECT /* FT_Size_SelectFunc select_size */
)
diff --git a/src/truetype/ttdriver.h b/src/truetype/ttdriver.h
index 6cacd60..707aa68 100644
--- a/src/truetype/ttdriver.h
+++ b/src/truetype/ttdriver.h
@@ -4,7 +4,7 @@
/* */
/* High-level TrueType driver interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTDRIVER_H__
-#define __TTDRIVER_H__
+#ifndef TTDRIVER_H_
+#define TTDRIVER_H_
#include <ft2build.h>
@@ -32,7 +32,7 @@
FT_END_HEADER
-#endif /* __TTDRIVER_H__ */
+#endif /* TTDRIVER_H_ */
/* END */
diff --git a/src/truetype/tterrors.h b/src/truetype/tterrors.h
index ba32cf7..88bca3a 100644
--- a/src/truetype/tterrors.h
+++ b/src/truetype/tterrors.h
@@ -4,7 +4,7 @@
/* */
/* TrueType error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,12 +23,12 @@
/* */
/*************************************************************************/
-#ifndef __TTERRORS_H__
-#define __TTERRORS_H__
+#ifndef TTERRORS_H_
+#define TTERRORS_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX TT_Err_
@@ -36,6 +36,7 @@
#include FT_ERRORS_H
-#endif /* __TTERRORS_H__ */
+#endif /* TTERRORS_H_ */
+
/* END */
diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
index e1acd69..39d9c3f 100644
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -4,7 +4,7 @@
/* */
/* TrueType Glyph Loader (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -18,12 +18,14 @@
#include <ft2build.h>
#include FT_INTERNAL_DEBUG_H
+#include FT_CONFIG_CONFIG_H
#include FT_INTERNAL_CALC_H
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_SFNT_H
#include FT_TRUETYPE_TAGS_H
#include FT_OUTLINE_H
-#include FT_TRUETYPE_DRIVER_H
+#include FT_DRIVER_H
+#include FT_LIST_H
#include "ttgload.h"
#include "ttpload.h"
@@ -85,7 +87,7 @@
/*************************************************************************/
/* */
/* Return the vertical metrics in font units for a given glyph. */
- /* See macro `TT_LOADER_SET_PP' below for explanations. */
+ /* See function `tt_loader_set_pp' below for explanations. */
/* */
FT_LOCAL_DEF( void )
TT_Get_VMetrics( TT_Face face,
@@ -120,8 +122,8 @@
tt_get_metrics( TT_Loader loader,
FT_UInt glyph_index )
{
- TT_Face face = (TT_Face)loader->face;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+ TT_Face face = loader->face;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
#endif
@@ -152,7 +154,7 @@
loader->top_bearing = top_bearing;
loader->vadvance = advance_height;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 &&
loader->exec )
{
@@ -161,10 +163,10 @@
/* This may not be the right place for this, but it works... */
/* Note that we have to unconditionally load the tweaks since */
/* it is possible that glyphs individually switch ClearType's */
- /* backwards compatibility mode on and off. */
+ /* backward compatibility mode on and off. */
sph_set_tweaks( loader, glyph_index );
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
if ( !loader->linear_def )
{
@@ -182,7 +184,7 @@
tt_get_metrics_incr_overrides( TT_Loader loader,
FT_UInt glyph_index )
{
- TT_Face face = (TT_Face)loader->face;
+ TT_Face face = loader->face;
FT_Short left_bearing = 0, top_bearing = 0;
FT_UShort advance_width = 0, advance_height = 0;
@@ -193,39 +195,39 @@
if ( face->root.internal->incremental_interface &&
face->root.internal->incremental_interface->funcs->get_glyph_metrics )
{
- FT_Incremental_MetricsRec metrics;
+ FT_Incremental_MetricsRec incr_metrics;
FT_Error error;
- metrics.bearing_x = loader->left_bearing;
- metrics.bearing_y = 0;
- metrics.advance = loader->advance;
- metrics.advance_v = 0;
+ incr_metrics.bearing_x = loader->left_bearing;
+ incr_metrics.bearing_y = 0;
+ incr_metrics.advance = loader->advance;
+ incr_metrics.advance_v = 0;
error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
face->root.internal->incremental_interface->object,
- glyph_index, FALSE, &metrics );
+ glyph_index, FALSE, &incr_metrics );
if ( error )
goto Exit;
- left_bearing = (FT_Short)metrics.bearing_x;
- advance_width = (FT_UShort)metrics.advance;
+ left_bearing = (FT_Short)incr_metrics.bearing_x;
+ advance_width = (FT_UShort)incr_metrics.advance;
#if 0
/* GWW: Do I do the same for vertical metrics? */
- metrics.bearing_x = 0;
- metrics.bearing_y = loader->top_bearing;
- metrics.advance = loader->vadvance;
+ incr_metrics.bearing_x = 0;
+ incr_metrics.bearing_y = loader->top_bearing;
+ incr_metrics.advance = loader->vadvance;
error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
face->root.internal->incremental_interface->object,
- glyph_index, TRUE, &metrics );
+ glyph_index, TRUE, &incr_metrics );
if ( error )
goto Exit;
- top_bearing = (FT_Short)metrics.bearing_y;
- advance_height = (FT_UShort)metrics.advance;
+ top_bearing = (FT_Short)incr_metrics.bearing_y;
+ advance_height = (FT_UShort)incr_metrics.advance;
#endif /* 0 */
@@ -250,29 +252,6 @@
/*************************************************************************/
/* */
- /* Translates an array of coordinates. */
- /* */
- static void
- translate_array( FT_UInt n,
- FT_Vector* coords,
- FT_Pos delta_x,
- FT_Pos delta_y )
- {
- FT_UInt k;
-
-
- if ( delta_x )
- for ( k = 0; k < n; k++ )
- coords[k].x += delta_x;
-
- if ( delta_y )
- for ( k = 0; k < n; k++ )
- coords[k].y += delta_y;
- }
-
-
- /*************************************************************************/
- /* */
/* The following functions are used by default with TrueType fonts. */
/* However, they can be replaced by alternatives if we need to support */
/* TrueType-compressed formats (like MicroType) in the future. */
@@ -354,7 +333,6 @@
FT_Outline* outline;
FT_UShort n_ins;
FT_Int n_points;
- FT_ULong tmp;
FT_Byte *flag, *flag_limit;
FT_Byte c, count;
@@ -420,18 +398,21 @@
FT_TRACE5(( " Instructions size: %u\n", n_ins ));
- /* check it */
- if ( ( limit - p ) < n_ins )
- {
- FT_TRACE0(( "TT_Load_Simple_Glyph: instruction count mismatch\n" ));
- error = FT_THROW( Too_Many_Hints );
- goto Fail;
- }
-
#ifdef TT_USE_BYTECODE_INTERPRETER
if ( IS_HINTED( load->load_flags ) )
{
+ FT_ULong tmp;
+
+
+ /* check instructions size */
+ if ( ( limit - p ) < n_ins )
+ {
+ FT_TRACE1(( "TT_Load_Simple_Glyph: instruction count mismatch\n" ));
+ error = FT_THROW( Too_Many_Hints );
+ goto Fail;
+ }
+
/* we don't trust `maxSizeOfInstructions' in the `maxp' table */
/* and thus update the bytecode array size by ourselves */
@@ -449,7 +430,8 @@
load->glyph->control_len = n_ins;
load->glyph->control_data = load->exec->glyphIns;
- FT_MEM_COPY( load->exec->glyphIns, p, (FT_Long)n_ins );
+ if ( n_ins )
+ FT_MEM_COPY( load->exec->glyphIns, p, (FT_Long)n_ins );
}
#endif /* TT_USE_BYTECODE_INTERPRETER */
@@ -462,7 +444,7 @@
flag = (FT_Byte*)outline->tags;
flag_limit = flag + n_points;
- FT_ASSERT( flag != NULL );
+ FT_ASSERT( flag );
while ( flag < flag_limit )
{
@@ -656,20 +638,20 @@
if ( subglyph->flags & WE_HAVE_A_SCALE )
{
- xx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
+ xx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
yy = xx;
}
else if ( subglyph->flags & WE_HAVE_AN_XY_SCALE )
{
- xx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- yy = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
+ xx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
+ yy = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
}
else if ( subglyph->flags & WE_HAVE_A_2X2 )
{
- xx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- yx = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- xy = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
- yy = (FT_Fixed)FT_NEXT_SHORT( p ) << 2;
+ xx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
+ yx = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
+ xy = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
+ yy = (FT_Fixed)FT_NEXT_SHORT( p ) * 4;
}
subglyph->transform.xx = xx;
@@ -682,6 +664,52 @@
} while ( subglyph->flags & MORE_COMPONENTS );
gloader->current.num_subglyphs = num_subglyphs;
+ FT_TRACE5(( " %d component%s\n",
+ num_subglyphs,
+ num_subglyphs > 1 ? "s" : "" ));
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ FT_UInt i;
+
+
+ subglyph = gloader->current.subglyphs;
+
+ for ( i = 0; i < num_subglyphs; i++ )
+ {
+ if ( num_subglyphs > 1 )
+ FT_TRACE7(( " subglyph %d:\n", i ));
+
+ FT_TRACE7(( " glyph index: %d\n", subglyph->index ));
+
+ if ( subglyph->flags & ARGS_ARE_XY_VALUES )
+ FT_TRACE7(( " offset: x=%d, y=%d\n",
+ subglyph->arg1,
+ subglyph->arg2 ));
+ else
+ FT_TRACE7(( " matching points: base=%d, component=%d\n",
+ subglyph->arg1,
+ subglyph->arg2 ));
+
+ if ( subglyph->flags & WE_HAVE_A_SCALE )
+ FT_TRACE7(( " scaling: %f\n",
+ subglyph->transform.xx / 65536.0 ));
+ else if ( subglyph->flags & WE_HAVE_AN_XY_SCALE )
+ FT_TRACE7(( " scaling: x=%f, y=%f\n",
+ subglyph->transform.xx / 65536.0,
+ subglyph->transform.yy / 65536.0 ));
+ else if ( subglyph->flags & WE_HAVE_A_2X2 )
+ FT_TRACE7(( " scaling: xx=%f, yx=%f\n"
+ " xy=%f, yy=%f\n",
+ subglyph->transform.xx / 65536.0,
+ subglyph->transform.yx / 65536.0,
+ subglyph->transform.xy / 65536.0,
+ subglyph->transform.yy / 65536.0 ));
+
+ subglyph++;
+ }
+ }
+#endif /* FT_DEBUG_LEVEL_TRACE */
#ifdef TT_USE_BYTECODE_INTERPRETER
@@ -753,8 +781,9 @@
TT_Hint_Glyph( TT_Loader loader,
FT_Bool is_composite )
{
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- TT_Face face = (TT_Face)loader->face;
+#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
+ defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ TT_Face face = loader->face;
TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
#endif
@@ -772,7 +801,7 @@
{
FT_TRACE1(( "TT_Hint_Glyph: too long instructions" ));
FT_TRACE1(( " (0x%lx byte) is truncated\n",
- loader->glyph->control_len ));
+ loader->glyph->control_len ));
}
n_ins = loader->glyph->control_len;
@@ -781,7 +810,7 @@
FT_ARRAY_COPY( zone->org, zone->cur, zone->n_points );
/* Reset graphics state. */
- loader->exec->GS = ((TT_Size)loader->size)->GS;
+ loader->exec->GS = loader->size->GS;
/* XXX: UNDOCUMENTED! Hinting instructions of a composite glyph */
/* completely refer to the (already) hinted subglyphs. */
@@ -794,10 +823,8 @@
}
else
{
- loader->exec->metrics.x_scale =
- ((TT_Size)loader->size)->metrics.x_scale;
- loader->exec->metrics.y_scale =
- ((TT_Size)loader->size)->metrics.y_scale;
+ loader->exec->metrics.x_scale = loader->size->metrics->x_scale;
+ loader->exec->metrics.y_scale = loader->size->metrics->y_scale;
}
#endif
@@ -838,13 +865,23 @@
#endif
- /* save glyph phantom points */
- loader->pp1 = zone->cur[zone->n_points - 4];
- loader->pp2 = zone->cur[zone->n_points - 3];
- loader->pp3 = zone->cur[zone->n_points - 2];
- loader->pp4 = zone->cur[zone->n_points - 1];
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /* Save possibly modified glyph phantom points unless in v40 backward */
+ /* compatibility mode, where no movement on the x axis means no reason */
+ /* to change bearings or advance widths. */
+ if ( !( driver->interpreter_version == TT_INTERPRETER_VERSION_40 &&
+ loader->exec->backward_compatibility ) )
+ {
+#endif
+ loader->pp1 = zone->cur[zone->n_points - 4];
+ loader->pp2 = zone->cur[zone->n_points - 3];
+ loader->pp3 = zone->cur[zone->n_points - 2];
+ loader->pp4 = zone->cur[zone->n_points - 1];
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ }
+#endif
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
{
if ( loader->exec->sph_tweak_flags & SPH_TWEAK_DEEMBOLDEN )
@@ -853,7 +890,7 @@
else if ( loader->exec->sph_tweak_flags & SPH_TWEAK_EMBOLDEN )
FT_Outline_EmboldenXY( &loader->gloader->current.outline, 24, 0 );
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
return FT_Err_Ok;
}
@@ -897,13 +934,24 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- if ( ((TT_Face)loader->face)->doblend )
+ if ( FT_IS_NAMED_INSTANCE( FT_FACE( loader->face ) ) ||
+ FT_IS_VARIATION( FT_FACE( loader->face ) ) )
{
/* Deltas apply to the unscaled data. */
- error = TT_Vary_Apply_Glyph_Deltas( (TT_Face)(loader->face),
- loader->glyph_index,
- outline,
- (FT_UInt)n_points );
+ error = TT_Vary_Apply_Glyph_Deltas( loader->face,
+ loader->glyph_index,
+ outline,
+ (FT_UInt)n_points );
+
+ /* recalculate linear horizontal and vertical advances */
+ /* if we don't have HVAR and VVAR, respectively */
+ if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
+ loader->linear = outline->points[n_points - 3].x -
+ outline->points[n_points - 4].x;
+ if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
+ loader->vadvance = outline->points[n_points - 1].x -
+ outline->points[n_points - 2].x;
+
if ( error )
return error;
}
@@ -919,12 +967,12 @@
}
{
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- TT_Face face = (TT_Face)loader->face;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ TT_Face face = loader->face;
TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
FT_String* family = face->root.family_name;
- FT_UInt ppem = loader->size->metrics.x_ppem;
+ FT_UInt ppem = loader->size->metrics->x_ppem;
FT_String* style = face->root.style_name;
FT_UInt x_scale_factor = 1000;
#endif
@@ -938,7 +986,7 @@
FT_Bool do_scale = FALSE;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
{
@@ -953,9 +1001,9 @@
if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 ||
x_scale_factor != 1000 )
{
- x_scale = FT_MulDiv( ((TT_Size)loader->size)->metrics.x_scale,
+ x_scale = FT_MulDiv( loader->size->metrics->x_scale,
(FT_Long)x_scale_factor, 1000 );
- y_scale = ((TT_Size)loader->size)->metrics.y_scale;
+ y_scale = loader->size->metrics->y_scale;
/* compensate for any scaling by de/emboldening; */
/* the amount was determined via experimentation */
@@ -969,14 +1017,14 @@
}
else
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
{
/* scale the glyph */
if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
{
- x_scale = ((TT_Size)loader->size)->metrics.x_scale;
- y_scale = ((TT_Size)loader->size)->metrics.y_scale;
+ x_scale = loader->size->metrics->x_scale;
+ y_scale = loader->size->metrics->y_scale;
do_scale = TRUE;
}
@@ -989,9 +1037,24 @@
vec->x = FT_MulFix( vec->x, x_scale );
vec->y = FT_MulFix( vec->y, y_scale );
}
+ }
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /* if we have a HVAR table, `pp1' and/or `pp2' are already adjusted */
+ if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) ||
+ !IS_HINTED( loader->load_flags ) )
+#endif
+ {
loader->pp1 = outline->points[n_points - 4];
loader->pp2 = outline->points[n_points - 3];
+ }
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /* if we have a VVAR table, `pp3' and/or `pp4' are already adjusted */
+ if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) ||
+ !IS_HINTED( loader->load_flags ) )
+#endif
+ {
loader->pp3 = outline->points[n_points - 2];
loader->pp4 = outline->points[n_points - 1];
}
@@ -1023,30 +1086,29 @@
FT_UInt start_point,
FT_UInt num_base_points )
{
- FT_GlyphLoader gloader = loader->gloader;
- FT_Vector* base_vec = gloader->base.outline.points;
- FT_UInt num_points = (FT_UInt)gloader->base.outline.n_points;
+ FT_GlyphLoader gloader = loader->gloader;
+ FT_Outline current;
FT_Bool have_scale;
FT_Pos x, y;
+ current.points = gloader->base.outline.points +
+ num_base_points;
+ current.n_points = gloader->base.outline.n_points -
+ (short)num_base_points;
+
have_scale = FT_BOOL( subglyph->flags & ( WE_HAVE_A_SCALE |
WE_HAVE_AN_XY_SCALE |
WE_HAVE_A_2X2 ) );
/* perform the transform required for this subglyph */
if ( have_scale )
- {
- FT_UInt i;
-
-
- for ( i = num_base_points; i < num_points; i++ )
- FT_Vector_Transform( base_vec + i, &subglyph->transform );
- }
+ FT_Outline_Transform( ¤t, &subglyph->transform );
/* get offset */
if ( !( subglyph->flags & ARGS_ARE_XY_VALUES ) )
{
+ FT_UInt num_points = (FT_UInt)gloader->base.outline.n_points;
FT_UInt k = (FT_UInt)subglyph->arg1;
FT_UInt l = (FT_UInt)subglyph->arg2;
FT_Vector* p1;
@@ -1101,7 +1163,7 @@
: -subglyph->transform.yx;
int c = subglyph->transform.xy > 0 ? subglyph->transform.xy
: -subglyph->transform.xy;
- int d = subglyph->transform.yy > 0 ? subglyph->transform.yy
+ int d = subglyph->transform.yy > 0 ? subglyph->transform.yy
: -subglyph->transform.yy;
int m = a > b ? a : b;
int n = c > d ? c : d;
@@ -1135,8 +1197,8 @@
if ( !( loader->load_flags & FT_LOAD_NO_SCALE ) )
{
- FT_Fixed x_scale = ((TT_Size)loader->size)->metrics.x_scale;
- FT_Fixed y_scale = ((TT_Size)loader->size)->metrics.y_scale;
+ FT_Fixed x_scale = loader->size->metrics->x_scale;
+ FT_Fixed y_scale = loader->size->metrics->y_scale;
x = FT_MulFix( x, x_scale );
@@ -1144,16 +1206,34 @@
if ( subglyph->flags & ROUND_XY_TO_GRID )
{
- x = FT_PIX_ROUND( x );
- y = FT_PIX_ROUND( y );
+ TT_Face face = loader->face;
+ TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
+
+
+ if ( IS_HINTED( loader->load_flags ) )
+ {
+ /*
+ * We round the horizontal offset only if there is hinting along
+ * the x axis; this corresponds to integer advance width values.
+ *
+ * Theoretically, a glyph's bytecode can toggle ClearType's
+ * `backward compatibility' mode, which would allow modification
+ * of the advance width. In reality, however, applications
+ * neither allow nor expect modified advance widths if subpixel
+ * rendering is active.
+ *
+ */
+ if ( driver->interpreter_version == TT_INTERPRETER_VERSION_35 )
+ x = FT_PIX_ROUND( x );
+
+ y = FT_PIX_ROUND( y );
+ }
}
}
}
if ( x || y )
- translate_array( num_points - num_base_points,
- base_vec + num_base_points,
- x, y );
+ FT_Outline_Translate( ¤t, x, y );
return FT_Err_Ok;
}
@@ -1215,7 +1295,7 @@
FT_TRACE5(( " Instructions size = %d\n", n_ins ));
/* check it */
- max_ins = ((TT_Face)loader->face)->max_profile.maxSizeOfInstructions;
+ max_ins = loader->face->max_profile.maxSizeOfInstructions;
if ( n_ins > max_ins )
{
/* don't trust `maxSizeOfInstructions'; */
@@ -1349,49 +1429,72 @@
* (3) for everything else.
*
*/
+ static void
+ tt_loader_set_pp( TT_Loader loader )
+ {
+ FT_Bool subpixel_hinting = 0;
+ FT_Bool grayscale = 0;
+ FT_Bool use_aw_2 = 0;
+
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+ TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( loader->face );
+#endif
-#define TT_LOADER_SET_PP( loader ) \
- do \
- { \
- FT_Bool subpixel_hinting_ = loader->exec \
- ? loader->exec->subpixel_hinting \
- : 0; \
- FT_Bool grayscale_ = loader->exec \
- ? loader->exec->grayscale \
- : 0; \
- FT_Bool use_aw_2_ = (FT_Bool)( subpixel_hinting_ && \
- grayscale_ ); \
- \
- \
- (loader)->pp1.x = (loader)->bbox.xMin - (loader)->left_bearing; \
- (loader)->pp1.y = 0; \
- (loader)->pp2.x = (loader)->pp1.x + (loader)->advance; \
- (loader)->pp2.y = 0; \
- \
- (loader)->pp3.x = use_aw_2_ ? (loader)->advance / 2 : 0; \
- (loader)->pp3.y = (loader)->bbox.yMax + (loader)->top_bearing; \
- (loader)->pp4.x = use_aw_2_ ? (loader)->advance / 2 : 0; \
- (loader)->pp4.y = (loader)->pp3.y - (loader)->vadvance; \
- } while ( 0 )
-#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
+ {
+ subpixel_hinting = loader->exec ? loader->exec->subpixel_hinting
+ : 0;
+ grayscale = loader->exec ? loader->exec->grayscale
+ : 0;
+ }
+#endif
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 )
+ {
+ subpixel_hinting = loader->exec ? loader->exec->subpixel_hinting_lean
+ : 0;
+ grayscale = loader->exec ? loader->exec->grayscale_cleartype
+ : 0;
+ }
+#endif
-#define TT_LOADER_SET_PP( loader ) \
- do \
- { \
- (loader)->pp1.x = (loader)->bbox.xMin - (loader)->left_bearing; \
- (loader)->pp1.y = 0; \
- (loader)->pp2.x = (loader)->pp1.x + (loader)->advance; \
- (loader)->pp2.y = 0; \
- \
- (loader)->pp3.x = 0; \
- (loader)->pp3.y = (loader)->bbox.yMax + (loader)->top_bearing; \
- (loader)->pp4.x = 0; \
- (loader)->pp4.y = (loader)->pp3.y - (loader)->vadvance; \
- } while ( 0 )
+ use_aw_2 = (FT_Bool)( subpixel_hinting && grayscale );
-#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+ loader->pp1.x = loader->bbox.xMin - loader->left_bearing;
+ loader->pp1.y = 0;
+ loader->pp2.x = loader->pp1.x + loader->advance;
+ loader->pp2.y = 0;
+
+ loader->pp3.x = use_aw_2 ? loader->advance / 2 : 0;
+ loader->pp3.y = loader->bbox.yMax + loader->top_bearing;
+ loader->pp4.x = use_aw_2 ? loader->advance / 2 : 0;
+ loader->pp4.y = loader->pp3.y - loader->vadvance;
+ }
+
+
+ /* a utility function to retrieve i-th node from given FT_List */
+ static FT_ListNode
+ ft_list_get_node_at( FT_List list,
+ FT_UInt idx )
+ {
+ FT_ListNode cur;
+
+
+ if ( !list )
+ return NULL;
+
+ for ( cur = list->head; cur; cur = cur->next )
+ {
+ if ( !idx )
+ return cur;
+
+ idx--;
+ }
+
+ return NULL;
+ }
/*************************************************************************/
@@ -1412,7 +1515,7 @@
FT_Error error = FT_Err_Ok;
FT_Fixed x_scale, y_scale;
FT_ULong offset;
- TT_Face face = (TT_Face)loader->face;
+ TT_Face face = loader->face;
FT_GlyphLoader gloader = loader->gloader;
FT_Bool opened_frame = 0;
@@ -1423,13 +1526,17 @@
#endif
- /* some fonts have an incorrect value of `maxComponentDepth', */
- /* thus we allow depth 1 to catch the majority of them */
- if ( recurse_count > 1 &&
- recurse_count > face->max_profile.maxComponentDepth )
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( recurse_count )
+ FT_TRACE5(( " nesting level: %d\n", recurse_count ));
+#endif
+
+ /* some fonts have an incorrect value of `maxComponentDepth' */
+ if ( recurse_count > face->max_profile.maxComponentDepth )
{
- error = FT_THROW( Invalid_Composite );
- goto Exit;
+ FT_TRACE1(( "load_truetype_glyph: maxComponentDepth set to %d\n",
+ recurse_count ));
+ face->max_profile.maxComponentDepth = (FT_UShort)recurse_count;
}
#ifndef FT_CONFIG_OPTION_INCREMENTAL
@@ -1445,8 +1552,8 @@
if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
{
- x_scale = ((TT_Size)loader->size)->metrics.x_scale;
- y_scale = ((TT_Size)loader->size)->metrics.y_scale;
+ x_scale = loader->size->metrics->x_scale;
+ y_scale = loader->size->metrics->y_scale;
}
else
{
@@ -1475,7 +1582,7 @@
offset = 0;
loader->byte_len = glyph_data.length;
- FT_MEM_ZERO( &inc_stream, sizeof ( inc_stream ) );
+ FT_ZERO( &inc_stream );
FT_Stream_OpenMemory( &inc_stream,
glyph_data.pointer,
(FT_ULong)glyph_data.length );
@@ -1493,10 +1600,10 @@
{
#ifdef FT_CONFIG_OPTION_INCREMENTAL
/* for the incremental interface, `glyf_offset' is always zero */
- if ( !loader->glyf_offset &&
+ if ( !face->glyf_offset &&
!face->root.internal->incremental_interface )
#else
- if ( !loader->glyf_offset )
+ if ( !face->glyf_offset )
#endif /* FT_CONFIG_OPTION_INCREMENTAL */
{
FT_TRACE2(( "no `glyf' table but non-zero `loca' entry\n" ));
@@ -1505,7 +1612,7 @@
}
error = face->access_glyph_frame( loader, glyph_index,
- loader->glyf_offset + offset,
+ face->glyf_offset + offset,
(FT_UInt)loader->byte_len );
if ( error )
goto Exit;
@@ -1544,7 +1651,7 @@
/* must initialize points before (possibly) overriding */
/* glyph metrics from the incremental interface */
- TT_LOADER_SET_PP( loader );
+ tt_loader_set_pp( loader );
#ifdef FT_CONFIG_OPTION_INCREMENTAL
tt_get_metrics_incr_overrides( loader, glyph_index );
@@ -1552,7 +1659,8 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- if ( ((TT_Face)(loader->face))->doblend )
+ if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) ||
+ FT_IS_VARIATION( FT_FACE( face ) ) )
{
/* a small outline structure with four elements for */
/* communication with `TT_Vary_Apply_Glyph_Deltas' */
@@ -1579,10 +1687,10 @@
outline.contours = contours;
/* this must be done before scaling */
- error = TT_Vary_Apply_Glyph_Deltas( (TT_Face)(loader->face),
- glyph_index,
- &outline,
- outline.n_points );
+ error = TT_Vary_Apply_Glyph_Deltas( loader->face,
+ glyph_index,
+ &outline,
+ (FT_UInt)outline.n_points );
if ( error )
goto Exit;
@@ -1595,6 +1703,14 @@
loader->pp3.y = points[2].y;
loader->pp4.x = points[3].x;
loader->pp4.y = points[3].y;
+
+
+ /* recalculate linear horizontal and vertical advances */
+ /* if we don't have HVAR and VVAR, respectively */
+ if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
+ loader->linear = loader->pp2.x - loader->pp1.x;
+ if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
+ loader->vadvance = loader->pp4.x - loader->pp3.x;
}
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
@@ -1619,7 +1735,7 @@
/* must initialize phantom points before (possibly) overriding */
/* glyph metrics from the incremental interface */
- TT_LOADER_SET_PP( loader );
+ tt_loader_set_pp( loader );
#ifdef FT_CONFIG_OPTION_INCREMENTAL
tt_get_metrics_incr_overrides( loader, glyph_index );
@@ -1653,12 +1769,53 @@
/***********************************************************************/
/* otherwise, load a composite! */
- else if ( loader->n_contours == -1 )
+ else if ( loader->n_contours < 0 )
{
+ FT_Memory memory = face->root.memory;
+
FT_UInt start_point;
FT_UInt start_contour;
FT_ULong ins_pos; /* position of composite instructions, if any */
+ FT_ListNode node, node2;
+
+
+ /* normalize the `n_contours' value */
+ loader->n_contours = -1;
+
+ /*
+ * We store the glyph index directly in the `node->data' pointer,
+ * following the glib solution (cf. macro `GUINT_TO_POINTER') with a
+ * double cast to make this portable. Note, however, that this needs
+ * pointers with a width of at least 32 bits.
+ */
+
+
+ /* clear the nodes filled by sibling chains */
+ node = ft_list_get_node_at( &loader->composites, recurse_count );
+ for ( node2 = node; node2; node2 = node2->next )
+ node2->data = (void*)FT_ULONG_MAX;
+
+ /* check whether we already have a composite glyph with this index */
+ if ( FT_List_Find( &loader->composites,
+ FT_UINT_TO_POINTER( glyph_index ) ) )
+ {
+ FT_TRACE1(( "TT_Load_Composite_Glyph:"
+ " infinite recursion detected\n" ));
+ error = FT_THROW( Invalid_Composite );
+ goto Exit;
+ }
+
+ else if ( node )
+ node->data = FT_UINT_TO_POINTER( glyph_index );
+
+ else
+ {
+ if ( FT_NEW( node ) )
+ goto Exit;
+ node->data = FT_UINT_TO_POINTER( glyph_index );
+ FT_List_Add( &loader->composites, node );
+ }
start_point = (FT_UInt)gloader->base.outline.n_points;
start_contour = (FT_UInt)gloader->base.outline.n_contours;
@@ -1677,9 +1834,10 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- if ( face->doblend )
+ if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) ||
+ FT_IS_VARIATION( FT_FACE( face ) ) )
{
- FT_UInt i, limit;
+ short i, limit;
FT_SubGlyph subglyph;
FT_Outline outline;
@@ -1687,22 +1845,24 @@
char* tags = NULL;
short* contours = NULL;
- FT_Memory memory = face->root.memory;
-
- limit = gloader->current.num_subglyphs;
+ limit = (short)gloader->current.num_subglyphs;
/* construct an outline structure for */
/* communication with `TT_Vary_Apply_Glyph_Deltas' */
- outline.n_points = gloader->current.num_subglyphs + 4;
+ outline.n_points = (short)( gloader->current.num_subglyphs + 4 );
outline.n_contours = outline.n_points;
+ outline.points = NULL;
+ outline.tags = NULL;
+ outline.contours = NULL;
+
if ( FT_NEW_ARRAY( points, outline.n_points ) ||
FT_NEW_ARRAY( tags, outline.n_points ) ||
FT_NEW_ARRAY( contours, outline.n_points ) )
goto Exit1;
- subglyph = gloader->current.subglyphs + gloader->base.num_subglyphs;
+ subglyph = gloader->current.subglyphs;
for ( i = 0; i < limit; i++, subglyph++ )
{
@@ -1744,22 +1904,22 @@
/* this call provides additional offsets */
/* for each component's translation */
- if ( ( error = TT_Vary_Apply_Glyph_Deltas(
- face,
- glyph_index,
- &outline,
- outline.n_points ) ) != 0 )
+ if ( FT_SET_ERROR( TT_Vary_Apply_Glyph_Deltas(
+ face,
+ glyph_index,
+ &outline,
+ (FT_UInt)outline.n_points ) ) )
goto Exit1;
- subglyph = gloader->current.subglyphs + gloader->base.num_subglyphs;
+ subglyph = gloader->current.subglyphs;
for ( i = 0; i < limit; i++, subglyph++ )
{
- /* XXX: overflow check for subglyph->{arg1,arg2}. */
- /* Deltas must be within signed 16-bit, */
- /* but the restriction of summed deltas is not clear */
- subglyph->arg1 = (FT_Int16)points[i].x;
- subglyph->arg2 = (FT_Int16)points[i].y;
+ if ( subglyph->flags & ARGS_ARE_XY_VALUES )
+ {
+ subglyph->arg1 = (FT_Int16)points[i].x;
+ subglyph->arg2 = (FT_Int16)points[i].y;
+ }
}
loader->pp1.x = points[i + 0].x;
@@ -1772,6 +1932,13 @@
loader->pp4.x = points[i + 3].x;
loader->pp4.y = points[i + 3].y;
+ /* recalculate linear horizontal and vertical advances */
+ /* if we don't have HVAR and VVAR, respectively */
+ if ( !( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
+ loader->linear = loader->pp2.x - loader->pp1.x;
+ if ( !( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
+ loader->vadvance = loader->pp4.x - loader->pp3.x;
+
Exit1:
FT_FREE( outline.points );
FT_FREE( outline.tags );
@@ -1831,6 +1998,9 @@
{
FT_Vector pp[4];
+ FT_Int linear_hadvance;
+ FT_Int linear_vadvance;
+
/* Each time we call load_truetype_glyph in this loop, the */
/* value of `gloader.base.subglyphs' can change due to table */
@@ -1843,6 +2013,9 @@
pp[2] = loader->pp3;
pp[3] = loader->pp4;
+ linear_hadvance = loader->linear;
+ linear_vadvance = loader->vadvance;
+
num_base_points = (FT_UInt)gloader->base.outline.n_points;
error = load_truetype_glyph( loader,
@@ -1862,6 +2035,9 @@
loader->pp2 = pp[1];
loader->pp3 = pp[2];
loader->pp4 = pp[3];
+
+ loader->linear = linear_hadvance;
+ loader->vadvance = linear_vadvance;
}
num_points = (FT_UInt)gloader->base.outline.n_points;
@@ -1902,12 +2078,6 @@
}
}
}
- else
- {
- /* invalid composite count (negative but not -1) */
- error = FT_THROW( Invalid_Outline );
- goto Exit;
- }
/***********************************************************************/
/***********************************************************************/
@@ -1935,20 +2105,21 @@
compute_glyph_metrics( TT_Loader loader,
FT_UInt glyph_index )
{
- TT_Face face = (TT_Face)loader->face;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+ TT_Face face = loader->face;
+#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
+ defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
#endif
FT_BBox bbox;
FT_Fixed y_scale;
TT_GlyphSlot glyph = loader->glyph;
- TT_Size size = (TT_Size)loader->size;
+ TT_Size size = loader->size;
y_scale = 0x10000L;
if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
- y_scale = size->root.metrics.y_scale;
+ y_scale = size->metrics->y_scale;
if ( glyph->format != FT_GLYPH_FORMAT_COMPOSITE )
FT_Outline_Get_CBox( &glyph->outline, &bbox );
@@ -1963,18 +2134,27 @@
glyph->metrics.horiBearingY = bbox.yMax;
glyph->metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
- /* adjust advance width to the value contained in the hdmx table */
- if ( !face->postscript.isFixedPitch &&
- IS_HINTED( loader->load_flags ) )
+ /* Adjust advance width to the value contained in the hdmx table */
+ /* unless FT_LOAD_COMPUTE_METRICS is set or backward compatibility */
+ /* mode of the v40 interpreter is active. See `ttinterp.h' for */
+ /* details on backward compatibility mode. */
+ if (
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ !( driver->interpreter_version == TT_INTERPRETER_VERSION_40 &&
+ ( loader->exec && loader->exec->backward_compatibility ) ) &&
+#endif
+ !face->postscript.isFixedPitch &&
+ IS_HINTED( loader->load_flags ) &&
+ !( loader->load_flags & FT_LOAD_COMPUTE_METRICS ) )
{
FT_Byte* widthp;
widthp = tt_face_get_device_metrics( face,
- size->root.metrics.x_ppem,
+ size->metrics->x_ppem,
glyph_index );
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
{
@@ -1988,21 +2168,21 @@
( ( ignore_x_mode && loader->exec->compatible_widths ) ||
!ignore_x_mode ||
SPH_OPTION_BITMAP_WIDTHS ) )
- glyph->metrics.horiAdvance = *widthp << 6;
+ glyph->metrics.horiAdvance = *widthp * 64;
}
else
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
{
if ( widthp )
- glyph->metrics.horiAdvance = *widthp << 6;
+ glyph->metrics.horiAdvance = *widthp * 64;
}
}
/* set glyph dimensions */
- glyph->metrics.width = bbox.xMax - bbox.xMin;
- glyph->metrics.height = bbox.yMax - bbox.yMin;
+ glyph->metrics.width = SUB_LONG( bbox.xMax, bbox.xMin );
+ glyph->metrics.height = SUB_LONG( bbox.yMax, bbox.yMin );
/* Now take care of vertical metrics. In the case where there is */
/* no vertical information within the font (relatively common), */
@@ -2038,7 +2218,8 @@
/* table in the font. Otherwise, we use the */
/* values defined in the horizontal header. */
- height = (FT_Short)FT_DivFix( bbox.yMax - bbox.yMin,
+ height = (FT_Short)FT_DivFix( SUB_LONG( bbox.yMax,
+ bbox.yMin ),
y_scale );
if ( face->os2.version != 0xFFFFU )
advance = (FT_Pos)( face->os2.sTypoAscender -
@@ -2053,7 +2234,7 @@
#ifdef FT_CONFIG_OPTION_INCREMENTAL
{
FT_Incremental_InterfaceRec* incr;
- FT_Incremental_MetricsRec metrics;
+ FT_Incremental_MetricsRec incr_metrics;
FT_Error error;
@@ -2063,19 +2244,19 @@
/* overriding metrics for this glyph. */
if ( incr && incr->funcs->get_glyph_metrics )
{
- metrics.bearing_x = 0;
- metrics.bearing_y = top;
- metrics.advance = advance;
+ incr_metrics.bearing_x = 0;
+ incr_metrics.bearing_y = top;
+ incr_metrics.advance = advance;
error = incr->funcs->get_glyph_metrics( incr->object,
glyph_index,
TRUE,
- &metrics );
+ &incr_metrics );
if ( error )
return error;
- top = metrics.bearing_y;
- advance = metrics.advance;
+ top = incr_metrics.bearing_y;
+ advance = incr_metrics.advance;
}
}
@@ -2117,7 +2298,7 @@
SFNT_Service sfnt;
FT_Stream stream;
FT_Error error;
- TT_SBit_MetricsRec metrics;
+ TT_SBit_MetricsRec sbit_metrics;
face = (TT_Face)glyph->face;
@@ -2130,34 +2311,34 @@
(FT_UInt)load_flags,
stream,
&glyph->bitmap,
- &metrics );
+ &sbit_metrics );
if ( !error )
{
glyph->outline.n_points = 0;
glyph->outline.n_contours = 0;
- glyph->metrics.width = (FT_Pos)metrics.width << 6;
- glyph->metrics.height = (FT_Pos)metrics.height << 6;
+ glyph->metrics.width = (FT_Pos)sbit_metrics.width * 64;
+ glyph->metrics.height = (FT_Pos)sbit_metrics.height * 64;
- glyph->metrics.horiBearingX = (FT_Pos)metrics.horiBearingX << 6;
- glyph->metrics.horiBearingY = (FT_Pos)metrics.horiBearingY << 6;
- glyph->metrics.horiAdvance = (FT_Pos)metrics.horiAdvance << 6;
+ glyph->metrics.horiBearingX = (FT_Pos)sbit_metrics.horiBearingX * 64;
+ glyph->metrics.horiBearingY = (FT_Pos)sbit_metrics.horiBearingY * 64;
+ glyph->metrics.horiAdvance = (FT_Pos)sbit_metrics.horiAdvance * 64;
- glyph->metrics.vertBearingX = (FT_Pos)metrics.vertBearingX << 6;
- glyph->metrics.vertBearingY = (FT_Pos)metrics.vertBearingY << 6;
- glyph->metrics.vertAdvance = (FT_Pos)metrics.vertAdvance << 6;
+ glyph->metrics.vertBearingX = (FT_Pos)sbit_metrics.vertBearingX * 64;
+ glyph->metrics.vertBearingY = (FT_Pos)sbit_metrics.vertBearingY * 64;
+ glyph->metrics.vertAdvance = (FT_Pos)sbit_metrics.vertAdvance * 64;
glyph->format = FT_GLYPH_FORMAT_BITMAP;
if ( load_flags & FT_LOAD_VERTICAL_LAYOUT )
{
- glyph->bitmap_left = metrics.vertBearingX;
- glyph->bitmap_top = metrics.vertBearingY;
+ glyph->bitmap_left = sbit_metrics.vertBearingX;
+ glyph->bitmap_top = sbit_metrics.vertBearingY;
}
else
{
- glyph->bitmap_left = metrics.horiBearingX;
- glyph->bitmap_top = metrics.horiBearingY;
+ glyph->bitmap_left = sbit_metrics.horiBearingX;
+ glyph->bitmap_top = sbit_metrics.horiBearingY;
}
}
@@ -2174,19 +2355,23 @@
FT_Int32 load_flags,
FT_Bool glyf_table_only )
{
- FT_Error error;
-
TT_Face face;
FT_Stream stream;
+
#ifdef TT_USE_BYTECODE_INTERPRETER
+ FT_Error error;
FT_Bool pedantic = FT_BOOL( load_flags & FT_LOAD_PEDANTIC );
+#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
+ defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( (TT_Face)glyph->face );
+#endif
#endif
face = (TT_Face)glyph->face;
stream = face->root.stream;
- FT_MEM_ZERO( loader, sizeof ( TT_LoaderRec ) );
+ FT_ZERO( loader );
#ifdef TT_USE_BYTECODE_INTERPRETER
@@ -2194,11 +2379,13 @@
if ( IS_HINTED( load_flags ) && !glyf_table_only )
{
TT_ExecContext exec;
- FT_Bool grayscale;
+ FT_Bool grayscale = TRUE;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ FT_Bool subpixel_hinting_lean;
+ FT_Bool grayscale_cleartype;
+#endif
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
-
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
FT_Bool subpixel_hinting = FALSE;
#if 0
@@ -2210,7 +2397,7 @@
FT_Bool subpixel_positioned;
FT_Bool gray_cleartype;
#endif
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
FT_Bool reexecute = FALSE;
@@ -2231,7 +2418,32 @@
if ( !exec )
return FT_THROW( Could_Not_Find_Context );
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 )
+ {
+ subpixel_hinting_lean =
+ FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
+ FT_RENDER_MODE_MONO );
+ grayscale_cleartype =
+ FT_BOOL( subpixel_hinting_lean &&
+ !( ( load_flags &
+ FT_LOAD_TARGET_LCD ) ||
+ ( load_flags &
+ FT_LOAD_TARGET_LCD_V ) ) );
+ exec->vertical_lcd_lean =
+ FT_BOOL( subpixel_hinting_lean &&
+ ( load_flags &
+ FT_LOAD_TARGET_LCD_V ) );
+ }
+ else
+ {
+ subpixel_hinting_lean = FALSE;
+ grayscale_cleartype = FALSE;
+ exec->vertical_lcd_lean = FALSE;
+ }
+#endif
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
{
@@ -2288,18 +2500,23 @@
}
else
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
- {
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 )
+ grayscale = FT_BOOL( !subpixel_hinting_lean &&
+ FT_LOAD_TARGET_MODE( load_flags ) !=
+ FT_RENDER_MODE_MONO );
+ else
+#endif
grayscale = FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
- FT_RENDER_MODE_MONO );
- }
+ FT_RENDER_MODE_MONO );
error = TT_Load_Context( exec, face, size );
if ( error )
return error;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
{
@@ -2327,9 +2544,37 @@
}
else
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
{
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ if ( driver->interpreter_version == TT_INTERPRETER_VERSION_40 )
+ {
+ /* a change from mono to subpixel rendering (and vice versa) */
+ /* requires a re-execution of the CVT program */
+ if ( subpixel_hinting_lean != exec->subpixel_hinting_lean )
+ {
+ FT_TRACE4(( "tt_loader_init: subpixel hinting change,"
+ " re-executing `prep' table\n" ));
+
+ exec->subpixel_hinting_lean = subpixel_hinting_lean;
+ reexecute = TRUE;
+ }
+
+ /* a change from colored to grayscale subpixel rendering (and */
+ /* vice versa) requires a re-execution of the CVT program */
+ if ( grayscale_cleartype != exec->grayscale_cleartype )
+ {
+ FT_TRACE4(( "tt_loader_init: grayscale subpixel hinting change,"
+ " re-executing `prep' table\n" ));
+
+ exec->grayscale_cleartype = grayscale_cleartype;
+ reexecute = TRUE;
+ }
+ }
+#endif
+
/* a change from mono to grayscale rendering (and vice versa) */
/* requires a re-execution of the CVT program */
if ( grayscale != exec->grayscale )
@@ -2362,10 +2607,11 @@
if ( exec->GS.instruct_control & 2 )
exec->GS = tt_default_graphics_state;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/* check whether we have a font hinted for ClearType -- */
/* note that this flag can also be modified in a glyph's bytecode */
- if ( exec->GS.instruct_control & 4 )
+ if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 &&
+ exec->GS.instruct_control & 4 )
exec->ignore_x_mode = 0;
#endif
@@ -2376,32 +2622,6 @@
#endif /* TT_USE_BYTECODE_INTERPRETER */
- /* 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
-
- if ( face->root.internal->incremental_interface )
- loader->glyf_offset = 0;
- else
-
-#endif
-
- {
- error = face->goto_table( face, TTAG_glyf, stream, 0 );
-
- if ( FT_ERR_EQ( error, Table_Missing ) )
- loader->glyf_offset = 0;
- else if ( error )
- {
- FT_ERROR(( "tt_loader_init: could not access glyph table\n" ));
- return error;
- }
- else
- loader->glyf_offset = FT_STREAM_POS();
- }
-
/* get face's glyph loader */
if ( !glyf_table_only )
{
@@ -2414,15 +2634,28 @@
loader->load_flags = (FT_ULong)load_flags;
- loader->face = (FT_Face)face;
- loader->size = (FT_Size)size;
+ loader->face = face;
+ loader->size = size;
loader->glyph = (FT_GlyphSlot)glyph;
loader->stream = stream;
+ loader->composites.head = NULL;
+ loader->composites.tail = NULL;
+
return FT_Err_Ok;
}
+ static void
+ tt_loader_done( TT_Loader loader )
+ {
+ FT_List_Finalize( &loader->composites,
+ NULL,
+ loader->face->root.memory,
+ NULL );
+ }
+
+
/*************************************************************************/
/* */
/* <Function> */
@@ -2459,39 +2692,108 @@
FT_Error error;
TT_LoaderRec loader;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#define IS_DEFAULT_INSTANCE ( !( FT_IS_NAMED_INSTANCE( glyph->face ) || \
+ FT_IS_VARIATION( glyph->face ) ) )
+#else
+#define IS_DEFAULT_INSTANCE 1
+#endif
+
FT_TRACE1(( "TT_Load_Glyph: glyph index %d\n", glyph_index ));
#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
- /* try to load embedded bitmap if any */
- /* */
- /* XXX: The convention should be emphasized in */
- /* the documents because it can be confusing. */
+ /* try to load embedded bitmap (if any) */
if ( size->strike_index != 0xFFFFFFFFUL &&
- ( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
+ ( load_flags & FT_LOAD_NO_BITMAP ) == 0 &&
+ IS_DEFAULT_INSTANCE )
{
+ FT_Fixed x_scale = size->root.metrics.x_scale;
+ FT_Fixed y_scale = size->root.metrics.y_scale;
+
+
error = load_sbit_image( size, glyph, glyph_index, load_flags );
- if ( !error )
+ if ( FT_ERR_EQ( error, Missing_Bitmap ) )
+ {
+ /* the bitmap strike is incomplete and misses the requested glyph; */
+ /* if we have a bitmap-only font, return an empty glyph */
+ if ( !FT_IS_SCALABLE( glyph->face ) )
+ {
+ TT_Face face = (TT_Face)glyph->face;
+
+ FT_Short left_bearing = 0;
+ FT_Short top_bearing = 0;
+
+ FT_UShort advance_width = 0;
+ FT_UShort advance_height = 0;
+
+
+ /* to return an empty glyph, however, we need metrics data */
+ /* from the `hmtx' (or `vmtx') table; the assumption is that */
+ /* empty glyphs are missing intentionally, representing */
+ /* whitespace - not having at least horizontal metrics is */
+ /* thus considered an error */
+ if ( !face->horz_metrics_size )
+ return error;
+
+ /* we now construct an empty bitmap glyph */
+ TT_Get_HMetrics( face, glyph_index,
+ &left_bearing,
+ &advance_width );
+ TT_Get_VMetrics( face, glyph_index,
+ 0,
+ &top_bearing,
+ &advance_height );
+
+ glyph->outline.n_points = 0;
+ glyph->outline.n_contours = 0;
+
+ glyph->metrics.width = 0;
+ glyph->metrics.height = 0;
+
+ glyph->metrics.horiBearingX = FT_MulFix( left_bearing, x_scale );
+ glyph->metrics.horiBearingY = 0;
+ glyph->metrics.horiAdvance = FT_MulFix( advance_width, x_scale );
+
+ glyph->metrics.vertBearingX = 0;
+ glyph->metrics.vertBearingY = FT_MulFix( top_bearing, y_scale );
+ glyph->metrics.vertAdvance = FT_MulFix( advance_height, y_scale );
+
+ glyph->format = FT_GLYPH_FORMAT_BITMAP;
+ glyph->bitmap.pixel_mode = FT_PIXEL_MODE_MONO;
+
+ glyph->bitmap_left = 0;
+ glyph->bitmap_top = 0;
+
+ return FT_Err_Ok;
+ }
+ }
+ else if ( error )
+ {
+ /* return error if font is not scalable */
+ if ( !FT_IS_SCALABLE( glyph->face ) )
+ return error;
+ }
+ else
{
if ( FT_IS_SCALABLE( glyph->face ) )
{
/* for the bbox we need the header only */
(void)tt_loader_init( &loader, size, glyph, load_flags, TRUE );
(void)load_truetype_glyph( &loader, glyph_index, 0, TRUE );
+ tt_loader_done( &loader );
glyph->linearHoriAdvance = loader.linear;
glyph->linearVertAdvance = loader.vadvance;
/* sanity checks: if `xxxAdvance' in the sbit metric */
/* structure isn't set, use `linearXXXAdvance' */
if ( !glyph->metrics.horiAdvance && glyph->linearHoriAdvance )
- glyph->metrics.horiAdvance =
- FT_MulFix( glyph->linearHoriAdvance,
- size->root.metrics.x_scale );
+ glyph->metrics.horiAdvance = FT_MulFix( glyph->linearHoriAdvance,
+ x_scale );
if ( !glyph->metrics.vertAdvance && glyph->linearVertAdvance )
- glyph->metrics.vertAdvance =
- FT_MulFix( glyph->linearVertAdvance,
- size->root.metrics.y_scale );
+ glyph->metrics.vertAdvance = FT_MulFix( glyph->linearVertAdvance,
+ y_scale );
}
return FT_Err_Ok;
@@ -2502,14 +2804,20 @@
/* if FT_LOAD_NO_SCALE is not set, `ttmetrics' must be valid */
if ( !( load_flags & FT_LOAD_NO_SCALE ) && !size->ttmetrics.valid )
- return FT_THROW( Invalid_Size_Handle );
+ {
+ error = FT_THROW( Invalid_Size_Handle );
+ goto Exit;
+ }
if ( load_flags & FT_LOAD_SBITS_ONLY )
- return FT_THROW( Invalid_Argument );
+ {
+ error = FT_THROW( Invalid_Argument );
+ goto Exit;
+ }
error = tt_loader_init( &loader, size, glyph, load_flags, FALSE );
if ( error )
- return error;
+ goto Exit;
glyph->format = FT_GLYPH_FORMAT_OUTLINE;
glyph->num_subglyphs = 0;
@@ -2574,14 +2882,23 @@
error = compute_glyph_metrics( &loader, glyph_index );
}
+ tt_loader_done( &loader );
+
/* Set the `high precision' bit flag. */
/* This is _critical_ to get correct output for monochrome */
/* TrueType glyphs at all sizes using the bytecode interpreter. */
/* */
if ( !( load_flags & FT_LOAD_NO_SCALE ) &&
- size->root.metrics.y_ppem < 24 )
+ size->metrics->y_ppem < 24 )
glyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
+ Exit:
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( error )
+ FT_TRACE1(( " failed (error code 0x%x)\n",
+ error ));
+#endif
+
return error;
}
diff --git a/src/truetype/ttgload.h b/src/truetype/ttgload.h
index 8e3255e..d237cfd 100644
--- a/src/truetype/ttgload.h
+++ b/src/truetype/ttgload.h
@@ -4,7 +4,7 @@
/* */
/* TrueType Glyph Loader (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTGLOAD_H__
-#define __TTGLOAD_H__
+#ifndef TTGLOAD_H_
+#define TTGLOAD_H_
#include <ft2build.h>
@@ -56,7 +56,7 @@
FT_END_HEADER
-#endif /* __TTGLOAD_H__ */
+#endif /* TTGLOAD_H_ */
/* END */
diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c
index 2b12483..29ab2a4 100644
--- a/src/truetype/ttgxvar.c
+++ b/src/truetype/ttgxvar.c
@@ -4,7 +4,7 @@
/* */
/* TrueType GX Font Variation loader */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, Werner Lemberg, and George Williams. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,10 +22,6 @@
/* */
/* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6[fgca]var.html */
/* */
- /* The documentation for `fvar' is inconsistent. At one point it says */
- /* that `countSizePairs' should be 3, at another point 2. It should */
- /* be 2. */
- /* */
/* The documentation for `gvar' is not intelligible; `cvar' refers you */
/* to `gvar' and is thus also incomprehensible. */
/* */
@@ -49,7 +45,9 @@
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_SFNT_H
#include FT_TRUETYPE_TAGS_H
+#include FT_TRUETYPE_IDS_H
#include FT_MULTIPLE_MASTERS_H
+#include FT_LIST_H
#include "ttpload.h"
#include "ttgxvar.h"
@@ -62,8 +60,11 @@
#define FT_Stream_FTell( stream ) \
(FT_ULong)( (stream)->cursor - (stream)->base )
-#define FT_Stream_SeekSet( stream, off ) \
- ( (stream)->cursor = (stream)->base + (off) )
+#define FT_Stream_SeekSet( stream, off ) \
+ (stream)->cursor = \
+ ( (off) < (FT_ULong)( (stream)->limit - (stream)->base ) ) \
+ ? (stream)->base + (off) \
+ : (stream)->limit
/*************************************************************************/
@@ -112,6 +113,8 @@
/* <Input> */
/* stream :: The data stream. */
/* */
+ /* size :: The size of the table holding the data. */
+ /* */
/* <Output> */
/* point_cnt :: The number of points read. A zero value means that */
/* all points in the glyph will be affected, without */
@@ -123,6 +126,7 @@
/* */
static FT_UShort*
ft_var_readpackedpoints( FT_Stream stream,
+ FT_ULong size,
FT_UInt *point_cnt )
{
FT_UShort *points = NULL;
@@ -149,48 +153,55 @@
n |= FT_GET_BYTE();
}
- if ( FT_NEW_ARRAY( points, n ) )
+ if ( n > size )
+ {
+ FT_TRACE1(( "ft_var_readpackedpoints: number of points too large\n" ));
+ return NULL;
+ }
+
+ /* in the nested loops below we increase `i' twice; */
+ /* it is faster to simply allocate one more slot */
+ /* than to add another test within the loop */
+ if ( FT_NEW_ARRAY( points, n + 1 ) )
return NULL;
*point_cnt = n;
- i = 0;
+ first = 0;
+ i = 0;
while ( i < n )
{
runcnt = FT_GET_BYTE();
if ( runcnt & GX_PT_POINTS_ARE_WORDS )
{
runcnt &= GX_PT_POINT_RUN_COUNT_MASK;
- first = FT_GET_USHORT();
+ first += FT_GET_USHORT();
points[i++] = first;
- if ( runcnt < 1 || i + runcnt > n )
- goto Exit;
-
/* first point not included in run count */
for ( j = 0; j < runcnt; j++ )
{
first += FT_GET_USHORT();
points[i++] = first;
+ if ( i >= n )
+ break;
}
}
else
{
- first = FT_GET_BYTE();
+ first += FT_GET_BYTE();
points[i++] = first;
- if ( runcnt < 1 || i + runcnt > n )
- goto Exit;
-
for ( j = 0; j < runcnt; j++ )
{
first += FT_GET_BYTE();
points[i++] = first;
+ if ( i >= n )
+ break;
}
}
}
- Exit:
return points;
}
@@ -212,6 +223,8 @@
/* <Input> */
/* stream :: The data stream. */
/* */
+ /* size :: The size of the table holding the data. */
+ /* */
/* delta_cnt :: The number of deltas to be read. */
/* */
/* <Return> */
@@ -222,6 +235,7 @@
/* */
static FT_Short*
ft_var_readpackeddeltas( FT_Stream stream,
+ FT_ULong size,
FT_UInt delta_cnt )
{
FT_Short *deltas = NULL;
@@ -233,6 +247,12 @@
FT_UNUSED( error );
+ if ( delta_cnt > size )
+ {
+ FT_TRACE1(( "ft_var_readpackeddeltas: number of points too large\n" ));
+ return NULL;
+ }
+
if ( FT_NEW_ARRAY( deltas, delta_cnt ) )
return NULL;
@@ -303,7 +323,7 @@
FT_TRACE2(( "AVAR " ));
- blend->avar_checked = TRUE;
+ blend->avar_loaded = TRUE;
error = face->goto_table( face, TTAG_avar, stream, &table_len );
if ( error )
{
@@ -327,7 +347,7 @@
if ( axisCount != (FT_Long)blend->mmvar->num_axis )
{
- FT_TRACE2(( "ft_var_load_avar: number of axes in `avar' and `cvar'\n"
+ FT_TRACE2(( "ft_var_load_avar: number of axes in `avar' and `fvar'\n"
" table are different\n" ));
goto Exit;
}
@@ -341,7 +361,8 @@
FT_TRACE5(( " axis %d:\n", i ));
segment->pairCount = FT_GET_USHORT();
- if ( FT_NEW_ARRAY( segment->correspondence, segment->pairCount ) )
+ if ( (FT_ULong)segment->pairCount * 4 > table_len ||
+ FT_NEW_ARRAY( segment->correspondence, segment->pairCount ) )
{
/* Failure. Free everything we have done so far. We must do */
/* it right now since loading the `avar' table is optional. */
@@ -357,10 +378,10 @@
for ( j = 0; j < segment->pairCount; j++ )
{
/* convert to Fixed */
- segment->correspondence[j].fromCoord = FT_GET_SHORT() << 2;
- segment->correspondence[j].toCoord = FT_GET_SHORT() << 2;
+ segment->correspondence[j].fromCoord = FT_GET_SHORT() * 4;
+ segment->correspondence[j].toCoord = FT_GET_SHORT() * 4;
- FT_TRACE5(( " mapping %.4f to %.4f\n",
+ FT_TRACE5(( " mapping %.5f to %.5f\n",
segment->correspondence[j].fromCoord / 65536.0,
segment->correspondence[j].toCoord / 65536.0 ));
}
@@ -373,6 +394,999 @@
}
+ /* some macros we need */
+#define FT_FIXED_ONE ( (FT_Fixed)0x10000 )
+
+#define FT_fdot14ToFixed( x ) \
+ ( (FT_Fixed)( (FT_ULong)(x) << 2 ) )
+#define FT_intToFixed( i ) \
+ ( (FT_Fixed)( (FT_ULong)(i) << 16 ) )
+#define FT_fixedToInt( x ) \
+ ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) )
+
+
+ static FT_Error
+ ft_var_load_item_variation_store( TT_Face face,
+ FT_ULong offset,
+ GX_ItemVarStore itemStore )
+ {
+ FT_Stream stream = FT_FACE_STREAM( face );
+ FT_Memory memory = stream->memory;
+
+ FT_Error error;
+ FT_UShort format;
+ FT_ULong region_offset;
+ FT_UInt i, j, k;
+ FT_UInt shortDeltaCount;
+
+ GX_Blend blend = face->blend;
+ GX_ItemVarData varData;
+
+ FT_ULong* dataOffsetArray = NULL;
+
+
+ if ( FT_STREAM_SEEK( offset ) ||
+ FT_READ_USHORT( format ) )
+ goto Exit;
+
+ if ( format != 1 )
+ {
+ FT_TRACE2(( "ft_var_load_item_variation_store: bad store format %d\n",
+ format ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ /* read top level fields */
+ if ( FT_READ_ULONG( region_offset ) ||
+ FT_READ_USHORT( itemStore->dataCount ) )
+ goto Exit;
+
+ /* we need at least one entry in `itemStore->varData' */
+ if ( !itemStore->dataCount )
+ {
+ FT_TRACE2(( "ft_var_load_item_variation_store: missing varData\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ /* make temporary copy of item variation data offsets; */
+ /* we will parse region list first, then come back */
+ if ( FT_NEW_ARRAY( dataOffsetArray, itemStore->dataCount ) )
+ goto Exit;
+
+ for ( i = 0; i < itemStore->dataCount; i++ )
+ {
+ if ( FT_READ_ULONG( dataOffsetArray[i] ) )
+ goto Exit;
+ }
+
+ /* parse array of region records (region list) */
+ if ( FT_STREAM_SEEK( offset + region_offset ) )
+ goto Exit;
+
+ if ( FT_READ_USHORT( itemStore->axisCount ) ||
+ FT_READ_USHORT( itemStore->regionCount ) )
+ goto Exit;
+
+ if ( itemStore->axisCount != (FT_Long)blend->mmvar->num_axis )
+ {
+ FT_TRACE2(( "ft_var_load_item_variation_store:"
+ " number of axes in item variation store\n"
+ " "
+ " and `fvar' table are different\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ if ( FT_NEW_ARRAY( itemStore->varRegionList, itemStore->regionCount ) )
+ goto Exit;
+
+ for ( i = 0; i < itemStore->regionCount; i++ )
+ {
+ GX_AxisCoords axisCoords;
+
+
+ if ( FT_NEW_ARRAY( itemStore->varRegionList[i].axisList,
+ itemStore->axisCount ) )
+ goto Exit;
+
+ axisCoords = itemStore->varRegionList[i].axisList;
+
+ for ( j = 0; j < itemStore->axisCount; j++ )
+ {
+ FT_Short start, peak, end;
+
+
+ if ( FT_READ_SHORT( start ) ||
+ FT_READ_SHORT( peak ) ||
+ FT_READ_SHORT( end ) )
+ goto Exit;
+
+ axisCoords[j].startCoord = FT_fdot14ToFixed( start );
+ axisCoords[j].peakCoord = FT_fdot14ToFixed( peak );
+ axisCoords[j].endCoord = FT_fdot14ToFixed( end );
+ }
+ }
+
+ /* end of region list parse */
+
+ /* use dataOffsetArray now to parse varData items */
+ if ( FT_NEW_ARRAY( itemStore->varData, itemStore->dataCount ) )
+ goto Exit;
+
+ for ( i = 0; i < itemStore->dataCount; i++ )
+ {
+ varData = &itemStore->varData[i];
+
+ if ( FT_STREAM_SEEK( offset + dataOffsetArray[i] ) )
+ goto Exit;
+
+ if ( FT_READ_USHORT( varData->itemCount ) ||
+ FT_READ_USHORT( shortDeltaCount ) ||
+ FT_READ_USHORT( varData->regionIdxCount ) )
+ goto Exit;
+
+ /* check some data consistency */
+ if ( shortDeltaCount > varData->regionIdxCount )
+ {
+ FT_TRACE2(( "bad short count %d or region count %d\n",
+ shortDeltaCount,
+ varData->regionIdxCount ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ if ( varData->regionIdxCount > itemStore->regionCount )
+ {
+ FT_TRACE2(( "inconsistent regionCount %d in varData[%d]\n",
+ varData->regionIdxCount,
+ i ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ /* parse region indices */
+ if ( FT_NEW_ARRAY( varData->regionIndices,
+ varData->regionIdxCount ) )
+ goto Exit;
+
+ for ( j = 0; j < varData->regionIdxCount; j++ )
+ {
+ if ( FT_READ_USHORT( varData->regionIndices[j] ) )
+ goto Exit;
+
+ if ( varData->regionIndices[j] >= itemStore->regionCount )
+ {
+ FT_TRACE2(( "bad region index %d\n",
+ varData->regionIndices[j] ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+ }
+
+ /* Parse delta set. */
+ /* */
+ /* On input, deltas are (shortDeltaCount + regionIdxCount) bytes */
+ /* each; on output, deltas are expanded to `regionIdxCount' shorts */
+ /* each. */
+ if ( FT_NEW_ARRAY( varData->deltaSet,
+ varData->regionIdxCount * varData->itemCount ) )
+ goto Exit;
+
+ /* the delta set is stored as a 2-dimensional array of shorts; */
+ /* sign-extend signed bytes to signed shorts */
+ for ( j = 0; j < varData->itemCount * varData->regionIdxCount; )
+ {
+ for ( k = 0; k < shortDeltaCount; k++, j++ )
+ {
+ /* read the short deltas */
+ FT_Short delta;
+
+
+ if ( FT_READ_SHORT( delta ) )
+ goto Exit;
+
+ varData->deltaSet[j] = delta;
+ }
+
+ for ( ; k < varData->regionIdxCount; k++, j++ )
+ {
+ /* read the (signed) byte deltas */
+ FT_Char delta;
+
+
+ if ( FT_READ_CHAR( delta ) )
+ goto Exit;
+
+ varData->deltaSet[j] = delta;
+ }
+ }
+ }
+
+ Exit:
+ FT_FREE( dataOffsetArray );
+
+ return error;
+ }
+
+
+ static FT_Error
+ ft_var_load_delta_set_index_mapping( TT_Face face,
+ FT_ULong offset,
+ GX_DeltaSetIdxMap map,
+ GX_ItemVarStore itemStore )
+ {
+ FT_Stream stream = FT_FACE_STREAM( face );
+ FT_Memory memory = stream->memory;
+
+ FT_Error error;
+
+ FT_UShort format;
+ FT_UInt entrySize;
+ FT_UInt innerBitCount;
+ FT_UInt innerIndexMask;
+ FT_UInt i, j;
+
+
+ if ( FT_STREAM_SEEK( offset ) ||
+ FT_READ_USHORT( format ) ||
+ FT_READ_USHORT( map->mapCount ) )
+ goto Exit;
+
+ if ( format & 0xFFC0 )
+ {
+ FT_TRACE2(( "bad map format %d\n", format ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ /* bytes per entry: 1, 2, 3, or 4 */
+ entrySize = ( ( format & 0x0030 ) >> 4 ) + 1;
+ innerBitCount = ( format & 0x000F ) + 1;
+ innerIndexMask = ( 1 << innerBitCount ) - 1;
+
+ if ( FT_NEW_ARRAY( map->innerIndex, map->mapCount ) )
+ goto Exit;
+
+ if ( FT_NEW_ARRAY( map->outerIndex, map->mapCount ) )
+ goto Exit;
+
+ for ( i = 0; i < map->mapCount; i++ )
+ {
+ FT_UInt mapData = 0;
+ FT_UInt outerIndex, innerIndex;
+
+
+ /* read map data one unsigned byte at a time, big endian */
+ for ( j = 0; j < entrySize; j++ )
+ {
+ FT_Byte data;
+
+
+ if ( FT_READ_BYTE( data ) )
+ goto Exit;
+
+ mapData = ( mapData << 8 ) | data;
+ }
+
+ outerIndex = mapData >> innerBitCount;
+
+ if ( outerIndex >= itemStore->dataCount )
+ {
+ FT_TRACE2(( "outerIndex[%d] == %d out of range\n",
+ i,
+ outerIndex ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ map->outerIndex[i] = outerIndex;
+
+ innerIndex = mapData & innerIndexMask;
+
+ if ( innerIndex >= itemStore->varData[outerIndex].itemCount )
+ {
+ FT_TRACE2(( "innerIndex[%d] == %d out of range\n",
+ i,
+ innerIndex ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ map->innerIndex[i] = innerIndex;
+ }
+
+ Exit:
+ return error;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_var_load_hvvar */
+ /* */
+ /* <Description> */
+ /* If `vertical' is zero, parse the `HVAR' table and set */
+ /* `blend->hvar_loaded' to TRUE. On success, `blend->hvar_checked' */
+ /* is set to TRUE. */
+ /* */
+ /* If `vertical' is not zero, parse the `VVAR' table and set */
+ /* `blend->vvar_loaded' to TRUE. On success, `blend->vvar_checked' */
+ /* is set to TRUE. */
+ /* */
+ /* Some memory may remain allocated on error; it is always freed in */
+ /* `tt_done_blend', however. */
+ /* */
+ /* <InOut> */
+ /* face :: The font face. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ static FT_Error
+ ft_var_load_hvvar( TT_Face face,
+ FT_Bool vertical )
+ {
+ FT_Stream stream = FT_FACE_STREAM( face );
+ FT_Memory memory = stream->memory;
+
+ GX_Blend blend = face->blend;
+
+ GX_HVVarTable table;
+
+ FT_Error error;
+ FT_UShort majorVersion;
+ FT_ULong table_len;
+ FT_ULong table_offset;
+ FT_ULong store_offset;
+ FT_ULong widthMap_offset;
+
+
+ if ( vertical )
+ {
+ blend->vvar_loaded = TRUE;
+
+ FT_TRACE2(( "VVAR " ));
+
+ error = face->goto_table( face, TTAG_VVAR, stream, &table_len );
+ }
+ else
+ {
+ blend->hvar_loaded = TRUE;
+
+ FT_TRACE2(( "HVAR " ));
+
+ error = face->goto_table( face, TTAG_HVAR, stream, &table_len );
+ }
+
+ if ( error )
+ {
+ FT_TRACE2(( "is missing\n" ));
+ goto Exit;
+ }
+
+ table_offset = FT_STREAM_POS();
+
+ /* skip minor version */
+ if ( FT_READ_USHORT( majorVersion ) ||
+ FT_STREAM_SKIP( 2 ) )
+ goto Exit;
+
+ if ( majorVersion != 1 )
+ {
+ FT_TRACE2(( "bad table version %d\n", majorVersion ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ if ( FT_READ_ULONG( store_offset ) ||
+ FT_READ_ULONG( widthMap_offset ) )
+ goto Exit;
+
+ if ( vertical )
+ {
+ if ( FT_NEW( blend->vvar_table ) )
+ goto Exit;
+ table = blend->vvar_table;
+ }
+ else
+ {
+ if ( FT_NEW( blend->hvar_table ) )
+ goto Exit;
+ table = blend->hvar_table;
+ }
+
+ error = ft_var_load_item_variation_store(
+ face,
+ table_offset + store_offset,
+ &table->itemStore );
+ if ( error )
+ goto Exit;
+
+ if ( widthMap_offset )
+ {
+ error = ft_var_load_delta_set_index_mapping(
+ face,
+ table_offset + widthMap_offset,
+ &table->widthMap,
+ &table->itemStore );
+ if ( error )
+ goto Exit;
+ }
+
+ FT_TRACE2(( "loaded\n" ));
+ error = FT_Err_Ok;
+
+ Exit:
+ if ( !error )
+ {
+ if ( vertical )
+ {
+ blend->vvar_checked = TRUE;
+
+ /* FreeType doesn't provide functions to quickly retrieve */
+ /* TSB, BSB, or VORG values; we thus don't have to implement */
+ /* support for those three item variation stores. */
+
+ face->variation_support |= TT_FACE_FLAG_VAR_VADVANCE;
+ }
+ else
+ {
+ blend->hvar_checked = TRUE;
+
+ /* FreeType doesn't provide functions to quickly retrieve */
+ /* LSB or RSB values; we thus don't have to implement */
+ /* support for those two item variation stores. */
+
+ face->variation_support |= TT_FACE_FLAG_VAR_HADVANCE;
+ }
+ }
+
+ return error;
+ }
+
+
+ static FT_Int
+ ft_var_get_item_delta( TT_Face face,
+ GX_ItemVarStore itemStore,
+ FT_UInt outerIndex,
+ FT_UInt innerIndex )
+ {
+ GX_ItemVarData varData;
+ FT_Short* deltaSet;
+
+ FT_UInt master, j;
+ FT_Fixed netAdjustment = 0; /* accumulated adjustment */
+ FT_Fixed scaledDelta;
+ FT_Fixed delta;
+
+
+ /* See pseudo code from `Font Variations Overview' */
+ /* in the OpenType specification. */
+
+ varData = &itemStore->varData[outerIndex];
+ deltaSet = &varData->deltaSet[varData->regionIdxCount * innerIndex];
+
+ /* outer loop steps through master designs to be blended */
+ for ( master = 0; master < varData->regionIdxCount; master++ )
+ {
+ FT_Fixed scalar = FT_FIXED_ONE;
+ FT_UInt regionIndex = varData->regionIndices[master];
+
+ GX_AxisCoords axis = itemStore->varRegionList[regionIndex].axisList;
+
+
+ /* inner loop steps through axes in this region */
+ for ( j = 0; j < itemStore->axisCount; j++, axis++ )
+ {
+ FT_Fixed axisScalar;
+
+
+ /* compute the scalar contribution of this axis; */
+ /* ignore invalid ranges */
+ if ( axis->startCoord > axis->peakCoord ||
+ axis->peakCoord > axis->endCoord )
+ axisScalar = FT_FIXED_ONE;
+
+ else if ( axis->startCoord < 0 &&
+ axis->endCoord > 0 &&
+ axis->peakCoord != 0 )
+ axisScalar = FT_FIXED_ONE;
+
+ /* peak of 0 means ignore this axis */
+ else if ( axis->peakCoord == 0 )
+ axisScalar = FT_FIXED_ONE;
+
+ /* ignore this region if coords are out of range */
+ else if ( face->blend->normalizedcoords[j] < axis->startCoord ||
+ face->blend->normalizedcoords[j] > axis->endCoord )
+ axisScalar = 0;
+
+ /* calculate a proportional factor */
+ else
+ {
+ if ( face->blend->normalizedcoords[j] == axis->peakCoord )
+ axisScalar = FT_FIXED_ONE;
+ else if ( face->blend->normalizedcoords[j] < axis->peakCoord )
+ axisScalar =
+ FT_DivFix( face->blend->normalizedcoords[j] - axis->startCoord,
+ axis->peakCoord - axis->startCoord );
+ else
+ axisScalar =
+ FT_DivFix( axis->endCoord - face->blend->normalizedcoords[j],
+ axis->endCoord - axis->peakCoord );
+ }
+
+ /* take product of all the axis scalars */
+ scalar = FT_MulFix( scalar, axisScalar );
+
+ } /* per-axis loop */
+
+ /* get the scaled delta for this region */
+ delta = FT_intToFixed( deltaSet[master] );
+ scaledDelta = FT_MulFix( scalar, delta );
+
+ /* accumulate the adjustments from each region */
+ netAdjustment = netAdjustment + scaledDelta;
+
+ } /* per-region loop */
+
+ return FT_fixedToInt( netAdjustment );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* tt_hvadvance_adjust */
+ /* */
+ /* <Description> */
+ /* Apply `HVAR' advance width or `VVAR' advance height adjustment of */
+ /* a given glyph. */
+ /* */
+ /* <Input> */
+ /* gindex :: The glyph index. */
+ /* */
+ /* vertical :: If set, handle `VVAR' table. */
+ /* */
+ /* <InOut> */
+ /* face :: The font face. */
+ /* */
+ /* adelta :: Points to width or height value that gets modified. */
+ /* */
+ static FT_Error
+ tt_hvadvance_adjust( TT_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue,
+ FT_Bool vertical )
+ {
+ FT_Error error = FT_Err_Ok;
+ FT_UInt innerIndex, outerIndex;
+ FT_Int delta;
+
+ GX_HVVarTable table;
+
+
+ if ( !face->doblend || !face->blend )
+ goto Exit;
+
+ if ( vertical )
+ {
+ if ( !face->blend->vvar_loaded )
+ {
+ /* initialize vvar table */
+ face->blend->vvar_error = ft_var_load_hvvar( face, 1 );
+ }
+
+ if ( !face->blend->vvar_checked )
+ {
+ error = face->blend->vvar_error;
+ goto Exit;
+ }
+
+ table = face->blend->vvar_table;
+ }
+ else
+ {
+ if ( !face->blend->hvar_loaded )
+ {
+ /* initialize hvar table */
+ face->blend->hvar_error = ft_var_load_hvvar( face, 0 );
+ }
+
+ if ( !face->blend->hvar_checked )
+ {
+ error = face->blend->hvar_error;
+ goto Exit;
+ }
+
+ table = face->blend->hvar_table;
+ }
+
+ /* advance width or height adjustments are always present in an */
+ /* `HVAR' or `VVAR' table; no need to test for this capability */
+
+ if ( table->widthMap.innerIndex )
+ {
+ FT_UInt idx = gindex;
+
+
+ if ( idx >= table->widthMap.mapCount )
+ idx = table->widthMap.mapCount - 1;
+
+ /* trust that HVAR parser has checked indices */
+ outerIndex = table->widthMap.outerIndex[idx];
+ innerIndex = table->widthMap.innerIndex[idx];
+ }
+ else
+ {
+ GX_ItemVarData varData;
+
+
+ /* no widthMap data */
+ outerIndex = 0;
+ innerIndex = gindex;
+
+ varData = &table->itemStore.varData[outerIndex];
+ if ( gindex >= varData->itemCount )
+ {
+ FT_TRACE2(( "gindex %d out of range\n", gindex ));
+ error = FT_THROW( Invalid_Argument );
+ goto Exit;
+ }
+ }
+
+ delta = ft_var_get_item_delta( face,
+ &table->itemStore,
+ outerIndex,
+ innerIndex );
+
+ FT_TRACE5(( "%s value %d adjusted by %d unit%s (%s)\n",
+ vertical ? "vertical height" : "horizontal width",
+ *avalue,
+ delta,
+ delta == 1 ? "" : "s",
+ vertical ? "VVAR" : "HVAR" ));
+
+ *avalue += delta;
+
+ Exit:
+ return error;
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ tt_hadvance_adjust( TT_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue )
+ {
+ return tt_hvadvance_adjust( face, gindex, avalue, 0 );
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ tt_vadvance_adjust( TT_Face face,
+ FT_UInt gindex,
+ FT_Int *avalue )
+ {
+ return tt_hvadvance_adjust( face, gindex, avalue, 1 );
+ }
+
+
+#define GX_VALUE_SIZE 8
+
+ /* all values are FT_Short or FT_UShort entities; */
+ /* we treat them consistently as FT_Short */
+#define GX_VALUE_CASE( tag, dflt ) \
+ case MVAR_TAG_ ## tag : \
+ p = (FT_Short*)&face->dflt; \
+ break
+
+#define GX_GASP_CASE( idx ) \
+ case MVAR_TAG_GASP_ ## idx : \
+ if ( idx < face->gasp.numRanges - 1 ) \
+ p = (FT_Short*)&face->gasp.gaspRanges[idx].maxPPEM; \
+ else \
+ p = NULL; \
+ break
+
+
+ static FT_Short*
+ ft_var_get_value_pointer( TT_Face face,
+ FT_ULong mvar_tag )
+ {
+ FT_Short* p;
+
+
+ switch ( mvar_tag )
+ {
+ GX_GASP_CASE( 0 );
+ GX_GASP_CASE( 1 );
+ GX_GASP_CASE( 2 );
+ GX_GASP_CASE( 3 );
+ GX_GASP_CASE( 4 );
+ GX_GASP_CASE( 5 );
+ GX_GASP_CASE( 6 );
+ GX_GASP_CASE( 7 );
+ GX_GASP_CASE( 8 );
+ GX_GASP_CASE( 9 );
+
+ GX_VALUE_CASE( CPHT, os2.sCapHeight );
+ GX_VALUE_CASE( HASC, os2.sTypoAscender );
+ GX_VALUE_CASE( HCLA, os2.usWinAscent );
+ GX_VALUE_CASE( HCLD, os2.usWinDescent );
+ GX_VALUE_CASE( HCOF, horizontal.caret_Offset );
+ GX_VALUE_CASE( HCRN, horizontal.caret_Slope_Run );
+ GX_VALUE_CASE( HCRS, horizontal.caret_Slope_Rise );
+ GX_VALUE_CASE( HDSC, os2.sTypoDescender );
+ GX_VALUE_CASE( HLGP, os2.sTypoLineGap );
+ GX_VALUE_CASE( SBXO, os2.ySubscriptXOffset);
+ GX_VALUE_CASE( SBXS, os2.ySubscriptXSize );
+ GX_VALUE_CASE( SBYO, os2.ySubscriptYOffset );
+ GX_VALUE_CASE( SBYS, os2.ySubscriptYSize );
+ GX_VALUE_CASE( SPXO, os2.ySuperscriptXOffset );
+ GX_VALUE_CASE( SPXS, os2.ySuperscriptXSize );
+ GX_VALUE_CASE( SPYO, os2.ySuperscriptYOffset );
+ GX_VALUE_CASE( SPYS, os2.ySuperscriptYSize );
+ GX_VALUE_CASE( STRO, os2.yStrikeoutPosition );
+ GX_VALUE_CASE( STRS, os2.yStrikeoutSize );
+ GX_VALUE_CASE( UNDO, postscript.underlinePosition );
+ GX_VALUE_CASE( UNDS, postscript.underlineThickness );
+ GX_VALUE_CASE( VASC, vertical.Ascender );
+ GX_VALUE_CASE( VCOF, vertical.caret_Offset );
+ GX_VALUE_CASE( VCRN, vertical.caret_Slope_Run );
+ GX_VALUE_CASE( VCRS, vertical.caret_Slope_Rise );
+ GX_VALUE_CASE( VDSC, vertical.Descender );
+ GX_VALUE_CASE( VLGP, vertical.Line_Gap );
+ GX_VALUE_CASE( XHGT, os2.sxHeight );
+
+ default:
+ /* ignore unknown tag */
+ p = NULL;
+ }
+
+ return p;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_var_load_mvar */
+ /* */
+ /* <Description> */
+ /* Parse the `MVAR' table. */
+ /* */
+ /* Some memory may remain allocated on error; it is always freed in */
+ /* `tt_done_blend', however. */
+ /* */
+ /* <InOut> */
+ /* face :: The font face. */
+ /* */
+ static void
+ ft_var_load_mvar( TT_Face face )
+ {
+ FT_Stream stream = FT_FACE_STREAM( face );
+ FT_Memory memory = stream->memory;
+
+ GX_Blend blend = face->blend;
+ GX_ItemVarStore itemStore;
+ GX_Value value, limit;
+
+ FT_Error error;
+ FT_UShort majorVersion;
+ FT_ULong table_len;
+ FT_ULong table_offset;
+ FT_UShort store_offset;
+ FT_ULong records_offset;
+
+
+ FT_TRACE2(( "MVAR " ));
+
+ error = face->goto_table( face, TTAG_MVAR, stream, &table_len );
+ if ( error )
+ {
+ FT_TRACE2(( "is missing\n" ));
+ return;
+ }
+
+ table_offset = FT_STREAM_POS();
+
+ /* skip minor version */
+ if ( FT_READ_USHORT( majorVersion ) ||
+ FT_STREAM_SKIP( 2 ) )
+ return;
+
+ if ( majorVersion != 1 )
+ {
+ FT_TRACE2(( "bad table version %d\n", majorVersion ));
+ return;
+ }
+
+ if ( FT_NEW( blend->mvar_table ) )
+ return;
+
+ /* skip reserved entry and value record size */
+ if ( FT_STREAM_SKIP( 4 ) ||
+ FT_READ_USHORT( blend->mvar_table->valueCount ) ||
+ FT_READ_USHORT( store_offset ) )
+ return;
+
+ records_offset = FT_STREAM_POS();
+
+ error = ft_var_load_item_variation_store(
+ face,
+ table_offset + store_offset,
+ &blend->mvar_table->itemStore );
+ if ( error )
+ return;
+
+ if ( FT_NEW_ARRAY( blend->mvar_table->values,
+ blend->mvar_table->valueCount ) )
+ return;
+
+ if ( FT_STREAM_SEEK( records_offset ) ||
+ FT_FRAME_ENTER( blend->mvar_table->valueCount * GX_VALUE_SIZE ) )
+ return;
+
+ value = blend->mvar_table->values;
+ limit = value + blend->mvar_table->valueCount;
+ itemStore = &blend->mvar_table->itemStore;
+
+ for ( ; value < limit; value++ )
+ {
+ value->tag = FT_GET_ULONG();
+ value->outerIndex = FT_GET_USHORT();
+ value->innerIndex = FT_GET_USHORT();
+
+ if ( value->outerIndex >= itemStore->dataCount ||
+ value->innerIndex >= itemStore->varData[value->outerIndex]
+ .itemCount )
+ {
+ error = FT_THROW( Invalid_Table );
+ break;
+ }
+ }
+
+ FT_FRAME_EXIT();
+
+ if ( error )
+ return;
+
+ FT_TRACE2(( "loaded\n" ));
+
+ value = blend->mvar_table->values;
+ limit = value + blend->mvar_table->valueCount;
+
+ /* save original values of the data MVAR is going to modify */
+ for ( ; value < limit; value++ )
+ {
+ FT_Short* p = ft_var_get_value_pointer( face, value->tag );
+
+
+ if ( p )
+ value->unmodified = *p;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ else
+ FT_TRACE1(( "ft_var_load_mvar: Ignoring unknown tag `%c%c%c%c'\n",
+ (FT_Char)( value->tag >> 24 ),
+ (FT_Char)( value->tag >> 16 ),
+ (FT_Char)( value->tag >> 8 ),
+ (FT_Char)( value->tag ) ));
+#endif
+ }
+
+ face->variation_support |= TT_FACE_FLAG_VAR_MVAR;
+ }
+
+
+ static FT_Error
+ tt_size_reset_iterator( FT_ListNode node,
+ void* user )
+ {
+ TT_Size size = (TT_Size)node->data;
+
+ FT_UNUSED( user );
+
+
+ tt_size_reset( size, 1 );
+
+ return FT_Err_Ok;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* tt_apply_mvar */
+ /* */
+ /* <Description> */
+ /* Apply `MVAR' table adjustments. */
+ /* */
+ /* <InOut> */
+ /* face :: The font face. */
+ /* */
+ FT_LOCAL_DEF( void )
+ tt_apply_mvar( TT_Face face )
+ {
+ GX_Blend blend = face->blend;
+ GX_Value value, limit;
+
+
+ if ( !( face->variation_support & TT_FACE_FLAG_VAR_MVAR ) )
+ return;
+
+ value = blend->mvar_table->values;
+ limit = value + blend->mvar_table->valueCount;
+
+ for ( ; value < limit; value++ )
+ {
+ FT_Short* p = ft_var_get_value_pointer( face, value->tag );
+ FT_Int delta;
+
+
+ delta = ft_var_get_item_delta( face,
+ &blend->mvar_table->itemStore,
+ value->outerIndex,
+ value->innerIndex );
+
+ if ( p )
+ {
+ FT_TRACE5(( "value %c%c%c%c (%d unit%s) adjusted by %d unit%s (MVAR)\n",
+ (FT_Char)( value->tag >> 24 ),
+ (FT_Char)( value->tag >> 16 ),
+ (FT_Char)( value->tag >> 8 ),
+ (FT_Char)( value->tag ),
+ value->unmodified,
+ value->unmodified == 1 ? "" : "s",
+ delta,
+ delta == 1 ? "" : "s" ));
+
+ /* since we handle both signed and unsigned values as FT_Short, */
+ /* ensure proper overflow arithmetic */
+ *p = (FT_Short)( value->unmodified + (FT_Short)delta );
+ }
+ }
+
+ /* adjust all derived values */
+ {
+ FT_Face root = &face->root;
+
+
+ if ( face->os2.version != 0xFFFFU )
+ {
+ if ( face->os2.sTypoAscender || face->os2.sTypoDescender )
+ {
+ root->ascender = face->os2.sTypoAscender;
+ root->descender = face->os2.sTypoDescender;
+
+ root->height = root->ascender - root->descender +
+ face->os2.sTypoLineGap;
+ }
+ else
+ {
+ root->ascender = (FT_Short)face->os2.usWinAscent;
+ root->descender = -(FT_Short)face->os2.usWinDescent;
+
+ root->height = root->ascender - root->descender;
+ }
+ }
+
+ root->underline_position = face->postscript.underlinePosition -
+ face->postscript.underlineThickness / 2;
+ root->underline_thickness = face->postscript.underlineThickness;
+
+ /* iterate over all FT_Size objects and call `tt_size_reset' */
+ /* to propagate the metrics changes */
+ FT_List_Iterate( &root->sizes_list,
+ tt_size_reset_iterator,
+ NULL );
+ }
+ }
+
+
typedef struct GX_GVar_Head_
{
FT_Long version;
@@ -434,10 +1448,10 @@
FT_TRACE2(( "GVAR " ));
- if ( ( error = face->goto_table( face,
- TTAG_gvar,
- stream,
- &table_len ) ) != 0 )
+ if ( FT_SET_ERROR( face->goto_table( face,
+ TTAG_gvar,
+ stream,
+ &table_len ) ) )
{
FT_TRACE2(( "is missing\n" ));
goto Exit;
@@ -447,10 +1461,6 @@
if ( FT_STREAM_READ_FIELDS( gvar_fields, &gvar_head ) )
goto Exit;
- blend->tuplecount = gvar_head.globalCoordCount;
- blend->gv_glyphcnt = gvar_head.glyphCount;
- offsetToData = gvar_start + gvar_head.offsetToData;
-
if ( gvar_head.version != 0x00010000L )
{
FT_TRACE1(( "bad table version\n" ));
@@ -458,8 +1468,6 @@
goto Exit;
}
- FT_TRACE2(( "loaded\n" ));
-
if ( gvar_head.axisCount != (FT_UShort)blend->mmvar->num_axis )
{
FT_TRACE1(( "ft_var_load_gvar: number of axes in `gvar' and `cvar'\n"
@@ -468,8 +1476,36 @@
goto Exit;
}
- FT_TRACE5(( "gvar: there are %d shared coordinates:\n",
- blend->tuplecount ));
+ /* rough sanity check, ignoring offsets */
+ if ( (FT_ULong)gvar_head.globalCoordCount * gvar_head.axisCount >
+ table_len / 2 )
+ {
+ FT_TRACE1(( "ft_var_load_gvar:"
+ " invalid number of global coordinates\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ /* rough sanity check: offsets can be either 2 or 4 bytes */
+ if ( (FT_ULong)gvar_head.glyphCount *
+ ( ( gvar_head.flags & 1 ) ? 4 : 2 ) > table_len )
+ {
+ FT_TRACE1(( "ft_var_load_gvar: invalid number of glyphs\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ FT_TRACE2(( "loaded\n" ));
+
+ blend->gvar_size = table_len;
+ blend->tuplecount = gvar_head.globalCoordCount;
+ blend->gv_glyphcnt = gvar_head.glyphCount;
+ offsetToData = gvar_start + gvar_head.offsetToData;
+
+ FT_TRACE5(( "gvar: there %s %d shared coordinate%s:\n",
+ blend->tuplecount == 1 ? "is" : "are",
+ blend->tuplecount,
+ blend->tuplecount == 1 ? "" : "s" ));
if ( FT_NEW_ARRAY( blend->glyphoffsets, blend->gv_glyphcnt + 1 ) )
goto Exit;
@@ -511,11 +1547,11 @@
for ( i = 0; i < blend->tuplecount; i++ )
{
FT_TRACE5(( " [ " ));
- for ( j = 0 ; j < (FT_UInt)gvar_head.axisCount; j++ )
+ for ( j = 0; j < (FT_UInt)gvar_head.axisCount; j++ )
{
blend->tuplecoords[i * gvar_head.axisCount + j] =
- FT_GET_SHORT() << 2; /* convert to FT_Fixed */
- FT_TRACE5(( "%.4f ",
+ FT_GET_SHORT() * 4; /* convert to FT_Fixed */
+ FT_TRACE5(( "%.5f ",
blend->tuplecoords[i * gvar_head.axisCount + j] / 65536.0 ));
}
FT_TRACE5(( "]\n" ));
@@ -571,8 +1607,13 @@
for ( i = 0; i < blend->num_axis; i++ )
{
- FT_TRACE6(( " axis coordinate %d (%.4f):\n",
+ FT_TRACE6(( " axis coordinate %d (%.5f):\n",
i, blend->normalizedcoords[i] / 65536.0 ));
+ if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) )
+ FT_TRACE6(( " intermediate coordinates %d (%.5f, %.5f):\n",
+ i,
+ im_start_coords[i] / 65536.0,
+ im_end_coords[i] / 65536.0 ));
/* It's not clear why (for intermediate tuples) we don't need */
/* to check against start/end -- the documentation says we don't. */
@@ -585,71 +1626,257 @@
continue;
}
- else if ( blend->normalizedcoords[i] == 0 )
+ if ( blend->normalizedcoords[i] == 0 )
{
FT_TRACE6(( " axis coordinate is zero, stop\n" ));
apply = 0;
break;
}
- else if ( ( blend->normalizedcoords[i] < 0 && tuple_coords[i] > 0 ) ||
- ( blend->normalizedcoords[i] > 0 && tuple_coords[i] < 0 ) )
+ if ( blend->normalizedcoords[i] == tuple_coords[i] )
{
- FT_TRACE6(( " tuple coordinate value %.4f is exceeded, stop\n",
+ FT_TRACE6(( " tuple coordinate value %.5f fits perfectly\n",
tuple_coords[i] / 65536.0 ));
- apply = 0;
- break;
+ /* `apply' does not change */
+ continue;
}
- else if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) )
+ if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) )
{
- FT_TRACE6(( " tuple coordinate value %.4f fits\n",
- tuple_coords[i] / 65536.0 ));
/* not an intermediate tuple */
- apply = FT_MulFix( apply,
- blend->normalizedcoords[i] > 0
- ? blend->normalizedcoords[i]
- : -blend->normalizedcoords[i] );
- }
- else if ( blend->normalizedcoords[i] < im_start_coords[i] ||
- blend->normalizedcoords[i] > im_end_coords[i] )
- {
- FT_TRACE6(( " intermediate tuple range [%.4f;%.4f] is exceeded,"
- " stop\n",
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
- apply = 0;
- break;
- }
+ if ( blend->normalizedcoords[i] < FT_MIN( 0, tuple_coords[i] ) ||
+ blend->normalizedcoords[i] > FT_MAX( 0, tuple_coords[i] ) )
+ {
+ FT_TRACE6(( " tuple coordinate value %.5f is exceeded, stop\n",
+ tuple_coords[i] / 65536.0 ));
+ apply = 0;
+ break;
+ }
- else if ( blend->normalizedcoords[i] < tuple_coords[i] )
- {
- FT_TRACE6(( " intermediate tuple range [%.4f;%.4f] fits\n",
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
+ FT_TRACE6(( " tuple coordinate value %.5f fits\n",
+ tuple_coords[i] / 65536.0 ));
apply = FT_MulDiv( apply,
- blend->normalizedcoords[i] - im_start_coords[i],
- tuple_coords[i] - im_start_coords[i] );
+ blend->normalizedcoords[i],
+ tuple_coords[i] );
}
-
else
{
- FT_TRACE6(( " intermediate tuple range [%.4f;%.4f] fits\n",
- im_start_coords[i] / 65536.0,
- im_end_coords[i] / 65536.0 ));
- apply = FT_MulDiv( apply,
- im_end_coords[i] - blend->normalizedcoords[i],
- im_end_coords[i] - tuple_coords[i] );
+ /* intermediate tuple */
+
+ if ( blend->normalizedcoords[i] < im_start_coords[i] ||
+ blend->normalizedcoords[i] > im_end_coords[i] )
+ {
+ FT_TRACE6(( " intermediate tuple range [%.5f;%.5f] is exceeded,"
+ " stop\n",
+ im_start_coords[i] / 65536.0,
+ im_end_coords[i] / 65536.0 ));
+ apply = 0;
+ break;
+ }
+
+ else if ( blend->normalizedcoords[i] < tuple_coords[i] )
+ {
+ FT_TRACE6(( " intermediate tuple range [%.5f;%.5f] fits\n",
+ im_start_coords[i] / 65536.0,
+ im_end_coords[i] / 65536.0 ));
+ apply = FT_MulDiv( apply,
+ blend->normalizedcoords[i] - im_start_coords[i],
+ tuple_coords[i] - im_start_coords[i] );
+ }
+
+ else
+ {
+ FT_TRACE6(( " intermediate tuple range [%.5f;%.5f] fits\n",
+ im_start_coords[i] / 65536.0,
+ im_end_coords[i] / 65536.0 ));
+ apply = FT_MulDiv( apply,
+ im_end_coords[i] - blend->normalizedcoords[i],
+ im_end_coords[i] - tuple_coords[i] );
+ }
}
}
- FT_TRACE6(( " apply factor is %.4f\n", apply / 65536.0 ));
+ FT_TRACE6(( " apply factor is %.5f\n", apply / 65536.0 ));
return apply;
}
+ /* convert from design coordinates to normalized coordinates */
+
+ static void
+ ft_var_to_normalized( TT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords,
+ FT_Fixed* normalized )
+ {
+ GX_Blend blend;
+ FT_MM_Var* mmvar;
+ FT_UInt i, j;
+ FT_Var_Axis* a;
+ GX_AVarSegment av;
+
+
+ blend = face->blend;
+ mmvar = blend->mmvar;
+
+ if ( num_coords > mmvar->num_axis )
+ {
+ FT_TRACE2(( "ft_var_to_normalized:"
+ " only using first %d of %d coordinates\n",
+ mmvar->num_axis, num_coords ));
+ num_coords = mmvar->num_axis;
+ }
+
+ /* Axis normalization is a two-stage process. First we normalize */
+ /* based on the [min,def,max] values for the axis to be [-1,0,1]. */
+ /* Then, if there's an `avar' table, we renormalize this range. */
+
+ a = mmvar->axis;
+ for ( i = 0; i < num_coords; i++, a++ )
+ {
+ FT_Fixed coord = coords[i];
+
+
+ FT_TRACE5(( " %d: %.5f\n", i, coord / 65536.0 ));
+ if ( coord > a->maximum || coord < a->minimum )
+ {
+ FT_TRACE1((
+ "ft_var_to_normalized: design coordinate %.5f\n"
+ " is out of range [%.5f;%.5f]; clamping\n",
+ coord / 65536.0,
+ a->minimum / 65536.0,
+ a->maximum / 65536.0 ));
+
+ if ( coord > a->maximum )
+ coord = a->maximum;
+ else
+ coord = a->minimum;
+ }
+
+ if ( coord < a->def )
+ normalized[i] = -FT_DivFix( coord - a->def,
+ a->minimum - a->def );
+ else if ( coord > a->def )
+ normalized[i] = FT_DivFix( coord - a->def,
+ a->maximum - a->def );
+ else
+ normalized[i] = 0;
+ }
+
+ FT_TRACE5(( "\n" ));
+
+ for ( ; i < mmvar->num_axis; i++ )
+ normalized[i] = 0;
+
+ if ( blend->avar_segment )
+ {
+ FT_TRACE5(( "normalized design coordinates"
+ " before applying `avar' data:\n" ));
+
+ av = blend->avar_segment;
+ for ( i = 0; i < mmvar->num_axis; i++, av++ )
+ {
+ for ( j = 1; j < (FT_UInt)av->pairCount; j++ )
+ {
+ if ( normalized[i] < av->correspondence[j].fromCoord )
+ {
+ FT_TRACE5(( " %.5f\n", normalized[i] / 65536.0 ));
+
+ normalized[i] =
+ FT_MulDiv( normalized[i] - av->correspondence[j - 1].fromCoord,
+ av->correspondence[j].toCoord -
+ av->correspondence[j - 1].toCoord,
+ av->correspondence[j].fromCoord -
+ av->correspondence[j - 1].fromCoord ) +
+ av->correspondence[j - 1].toCoord;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+
+ /* convert from normalized coordinates to design coordinates */
+
+ static void
+ ft_var_to_design( TT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords,
+ FT_Fixed* design )
+ {
+ GX_Blend blend;
+ FT_MM_Var* mmvar;
+ FT_Var_Axis* a;
+
+ FT_UInt i, j, nc;
+
+
+ blend = face->blend;
+
+ nc = num_coords;
+ if ( num_coords > blend->num_axis )
+ {
+ FT_TRACE2(( "ft_var_to_design:"
+ " only using first %d of %d coordinates\n",
+ blend->num_axis, num_coords ));
+ nc = blend->num_axis;
+ }
+
+ for ( i = 0; i < nc; i++ )
+ design[i] = coords[i];
+
+ for ( ; i < num_coords; i++ )
+ design[i] = 0;
+
+ if ( blend->avar_segment )
+ {
+ GX_AVarSegment av = blend->avar_segment;
+
+
+ FT_TRACE5(( "design coordinates"
+ " after removing `avar' distortion:\n" ));
+
+ for ( i = 0; i < nc; i++, av++ )
+ {
+ for ( j = 1; j < (FT_UInt)av->pairCount; j++ )
+ {
+ if ( design[i] < av->correspondence[j].toCoord )
+ {
+ design[i] =
+ FT_MulDiv( design[i] - av->correspondence[j - 1].toCoord,
+ av->correspondence[j].fromCoord -
+ av->correspondence[j - 1].fromCoord,
+ av->correspondence[j].toCoord -
+ av->correspondence[j - 1].toCoord ) +
+ av->correspondence[j - 1].fromCoord;
+
+ FT_TRACE5(( " %.5f\n", design[i] / 65536.0 ));
+ break;
+ }
+ }
+ }
+ }
+
+ mmvar = blend->mmvar;
+ a = mmvar->axis;
+
+ for ( i = 0; i < nc; i++, a++ )
+ {
+ if ( design[i] < 0 )
+ design[i] = a->def + FT_MulFix( design[i],
+ a->def - a->minimum );
+ else if ( design[i] > 0 )
+ design[i] = a->def + FT_MulFix( design[i],
+ a->maximum - a->def );
+ else
+ design[i] = a->def;
+ }
+ }
+
+
/*************************************************************************/
/*************************************************************************/
/***** *****/
@@ -663,7 +1890,6 @@
{
FT_Long version;
FT_UShort offsetToData;
- FT_UShort countSizePairs;
FT_UShort axisCount;
FT_UShort axisSize;
FT_UShort instanceCount;
@@ -691,14 +1917,16 @@
/* */
/* <Description> */
/* Check that the font's `fvar' table is valid, parse it, and return */
- /* those data. */
+ /* those data. It also loads (and parses) the `MVAR' table, if */
+ /* possible. */
/* */
/* <InOut> */
/* face :: The font face. */
/* TT_Get_MM_Var initializes the blend structure. */
/* */
/* <Output> */
- /* master :: The `fvar' data (must be freed by caller). */
+ /* master :: The `fvar' data (must be freed by caller). Can be NULL, */
+ /* which makes this function simply load MM support. */
/* */
/* <Return> */
/* FreeType error code. 0 means success. */
@@ -707,18 +1935,33 @@
TT_Get_MM_Var( TT_Face face,
FT_MM_Var* *master )
{
- FT_Stream stream = face->root.stream;
- FT_Memory memory = face->root.memory;
+ FT_Stream stream = face->root.stream;
+ FT_Memory memory = face->root.memory;
FT_ULong table_len;
- FT_Error error = FT_Err_Ok;
- FT_ULong fvar_start;
- FT_Int i, j;
+ FT_Error error = FT_Err_Ok;
+ FT_ULong fvar_start = 0;
+ FT_UInt i, j;
FT_MM_Var* mmvar = NULL;
FT_Fixed* next_coords;
+ FT_Fixed* nsc;
FT_String* next_name;
FT_Var_Axis* a;
+ FT_Fixed* c;
FT_Var_Named_Style* ns;
GX_FVar_Head fvar_head;
+ FT_Bool usePsName = 0;
+ FT_UInt num_instances;
+ FT_UInt num_axes;
+ FT_UShort* axis_flags;
+
+ FT_Offset mmvar_size;
+ FT_Offset axis_flags_size;
+ FT_Offset axis_size;
+ FT_Offset namedstyle_size;
+ FT_Offset next_coords_size;
+ FT_Offset next_name_size;
+
+ FT_Bool need_init;
static const FT_Frame_Field fvar_fields[] =
{
@@ -727,13 +1970,13 @@
#define FT_STRUCTURE GX_FVar_Head
FT_FRAME_START( 16 ),
- FT_FRAME_LONG ( version ),
- FT_FRAME_USHORT( offsetToData ),
- FT_FRAME_USHORT( countSizePairs ),
- FT_FRAME_USHORT( axisCount ),
- FT_FRAME_USHORT( axisSize ),
- FT_FRAME_USHORT( instanceCount ),
- FT_FRAME_USHORT( instanceSize ),
+ FT_FRAME_LONG ( version ),
+ FT_FRAME_USHORT ( offsetToData ),
+ FT_FRAME_SKIP_SHORT,
+ FT_FRAME_USHORT ( axisCount ),
+ FT_FRAME_USHORT ( axisSize ),
+ FT_FRAME_USHORT ( instanceCount ),
+ FT_FRAME_USHORT ( instanceSize ),
FT_FRAME_END
};
@@ -757,21 +2000,28 @@
/* read the font data and set up the internal representation */
/* if not already done */
- if ( face->blend == NULL )
+ need_init = !face->blend;
+
+ if ( need_init )
{
FT_TRACE2(( "FVAR " ));
/* both `fvar' and `gvar' must be present */
- if ( ( error = face->goto_table( face, TTAG_gvar,
- stream, &table_len ) ) != 0 )
+ if ( FT_SET_ERROR( face->goto_table( face, TTAG_gvar,
+ stream, &table_len ) ) )
{
- FT_TRACE1(( "\n"
- "TT_Get_MM_Var: `gvar' table is missing\n" ));
- goto Exit;
+ /* CFF2 is an alternate to gvar here */
+ if ( FT_SET_ERROR( face->goto_table( face, TTAG_CFF2,
+ stream, &table_len ) ) )
+ {
+ FT_TRACE1(( "\n"
+ "TT_Get_MM_Var: `gvar' or `CFF2' table is missing\n" ));
+ goto Exit;
+ }
}
- if ( ( error = face->goto_table( face, TTAG_fvar,
- stream, &table_len ) ) != 0 )
+ if ( FT_SET_ERROR( face->goto_table( face, TTAG_fvar,
+ stream, &table_len ) ) )
{
FT_TRACE1(( "is missing\n" ));
goto Exit;
@@ -779,45 +2029,67 @@
fvar_start = FT_STREAM_POS( );
+ /* the validity of the `fvar' header data was already checked */
+ /* in function `sfnt_init_face' */
if ( FT_STREAM_READ_FIELDS( fvar_fields, &fvar_head ) )
goto Exit;
- if ( fvar_head.version != (FT_Long)0x00010000L ||
-#if 0
- /* fonts like `JamRegular.ttf' have an incorrect value for */
- /* `countSizePairs'; since value 2 is hard-coded in `fvar' */
- /* version 1.0, we simply ignore it */
- fvar_head.countSizePairs != 2 ||
-#endif
- fvar_head.axisSize != 20 ||
- /* axisCount limit implied by 16-bit instanceSize */
- fvar_head.axisCount > 0x3FFE ||
- fvar_head.instanceSize != 4 + 4 * fvar_head.axisCount ||
- /* instanceCount limit implied by limited range of name IDs */
- fvar_head.instanceCount > 0x7EFF ||
- fvar_head.offsetToData + fvar_head.axisCount * 20U +
- fvar_head.instanceCount * fvar_head.instanceSize > table_len )
- {
- FT_TRACE1(( "\n"
- "TT_Get_MM_Var: invalid `fvar' header\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
- }
+ usePsName = FT_BOOL( fvar_head.instanceSize ==
+ 6 + 4 * fvar_head.axisCount );
FT_TRACE2(( "loaded\n" ));
- FT_TRACE5(( "number of GX style axes: %d\n", fvar_head.axisCount ));
+ FT_TRACE5(( "%d variation ax%s\n",
+ fvar_head.axisCount,
+ fvar_head.axisCount == 1 ? "is" : "es" ));
if ( FT_NEW( face->blend ) )
goto Exit;
- /* cannot overflow 32-bit arithmetic because of limits above */
- face->blend->mmvar_len =
- sizeof ( FT_MM_Var ) +
- fvar_head.axisCount * sizeof ( FT_Var_Axis ) +
- fvar_head.instanceCount * sizeof ( FT_Var_Named_Style ) +
- fvar_head.instanceCount * fvar_head.axisCount * sizeof ( FT_Fixed ) +
- 5 * fvar_head.axisCount;
+ num_axes = fvar_head.axisCount;
+ face->blend->num_axis = num_axes;
+ }
+ else
+ num_axes = face->blend->num_axis;
+
+ /* `num_instances' holds the number of all named instances, */
+ /* including the default instance which might be missing */
+ /* in fvar's table of named instances */
+ num_instances = (FT_UInt)face->root.style_flags >> 16;
+
+ /* prepare storage area for MM data; this cannot overflow */
+ /* 32-bit arithmetic because of the size limits used in the */
+ /* `fvar' table validity check in `sfnt_init_face' */
+
+ /* the various `*_size' variables, which we also use as */
+ /* offsets into the `mmlen' array, must be multiples of the */
+ /* pointer size (except the last one); without such an */
+ /* alignment there might be runtime errors due to */
+ /* misaligned addresses */
+#undef ALIGN_SIZE
+#define ALIGN_SIZE( n ) \
+ ( ( (n) + sizeof (void*) - 1 ) & ~( sizeof (void*) - 1 ) )
+
+ mmvar_size = ALIGN_SIZE( sizeof ( FT_MM_Var ) );
+ axis_flags_size = ALIGN_SIZE( num_axes *
+ sizeof ( FT_UShort ) );
+ axis_size = ALIGN_SIZE( num_axes *
+ sizeof ( FT_Var_Axis ) );
+ namedstyle_size = ALIGN_SIZE( num_instances *
+ sizeof ( FT_Var_Named_Style ) );
+ next_coords_size = ALIGN_SIZE( num_instances *
+ num_axes *
+ sizeof ( FT_Fixed ) );
+ next_name_size = num_axes * 5;
+
+ if ( need_init )
+ {
+ face->blend->mmvar_len = mmvar_size +
+ axis_flags_size +
+ axis_size +
+ namedstyle_size +
+ next_coords_size +
+ next_name_size;
if ( FT_ALLOC( mmvar, face->blend->mmvar_len ) )
goto Exit;
@@ -827,28 +2099,33 @@
/* the data gets filled in later on */
mmvar->num_axis =
- fvar_head.axisCount;
+ num_axes;
mmvar->num_designs =
~0U; /* meaningless in this context; each glyph */
/* may have a different number of designs */
/* (or tuples, as called by Apple) */
mmvar->num_namedstyles =
- fvar_head.instanceCount;
- mmvar->axis =
- (FT_Var_Axis*)&( mmvar[1] );
- mmvar->namedstyle =
- (FT_Var_Named_Style*)&( mmvar->axis[fvar_head.axisCount] );
+ num_instances;
- next_coords =
- (FT_Fixed*)&( mmvar->namedstyle[fvar_head.instanceCount] );
- for ( i = 0; i < fvar_head.instanceCount; i++ )
+ /* alas, no public field in `FT_Var_Axis' for axis flags */
+ axis_flags =
+ (FT_UShort*)( (char*)mmvar + mmvar_size );
+ mmvar->axis =
+ (FT_Var_Axis*)( (char*)axis_flags + axis_flags_size );
+ mmvar->namedstyle =
+ (FT_Var_Named_Style*)( (char*)mmvar->axis + axis_size );
+
+ next_coords = (FT_Fixed*)( (char*)mmvar->namedstyle +
+ namedstyle_size );
+ for ( i = 0; i < num_instances; i++ )
{
mmvar->namedstyle[i].coords = next_coords;
- next_coords += fvar_head.axisCount;
+ next_coords += num_axes;
}
- next_name = (FT_String*)next_coords;
- for ( i = 0; i < fvar_head.axisCount; i++ )
+ next_name = (FT_String*)( (char*)mmvar->namedstyle +
+ namedstyle_size + next_coords_size );
+ for ( i = 0; i < num_axes; i++ )
{
mmvar->axis[i].name = next_name;
next_name += 5;
@@ -860,10 +2137,14 @@
goto Exit;
a = mmvar->axis;
- for ( i = 0; i < fvar_head.axisCount; i++ )
+ for ( i = 0; i < num_axes; i++ )
{
GX_FVar_Axis axis_rec;
+#ifdef FT_DEBUG_LEVEL_TRACE
+ int invalid = 0;
+#endif
+
if ( FT_STREAM_READ_FIELDS( fvaraxis_fields, &axis_rec ) )
goto Exit;
@@ -879,36 +2160,194 @@
a->name[3] = (FT_String)( ( a->tag ) & 0xFF );
a->name[4] = '\0';
- FT_TRACE5(( " \"%s\": minimum=%.4f, default=%.4f, maximum=%.4f\n",
+ *axis_flags = axis_rec.flags;
+
+ if ( a->minimum > a->def ||
+ a->def > a->maximum )
+ {
+ a->minimum = a->def;
+ a->maximum = a->def;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ invalid = 1;
+#endif
+ }
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( i == 0 )
+ FT_TRACE5(( " idx tag "
+ /* " XXX `XXXX'" */
+ " minimum default maximum flags\n" ));
+ /* " XXXX.XXXXX XXXX.XXXXX XXXX.XXXXX 0xXXXX" */
+
+ FT_TRACE5(( " %3d `%s'"
+ " %10.5f %10.5f %10.5f 0x%04X%s\n",
+ i,
a->name,
a->minimum / 65536.0,
a->def / 65536.0,
- a->maximum / 65536.0 ));
+ a->maximum / 65536.0,
+ *axis_flags,
+ invalid ? " (invalid, disabled)" : "" ));
+#endif
a++;
+ axis_flags++;
}
FT_TRACE5(( "\n" ));
- ns = mmvar->namedstyle;
+ /* named instance coordinates are stored as design coordinates; */
+ /* we have to convert them to normalized coordinates also */
+ if ( FT_NEW_ARRAY( face->blend->normalized_stylecoords,
+ num_axes * num_instances ) )
+ goto Exit;
+
+ if ( fvar_head.instanceCount && !face->blend->avar_loaded )
+ {
+ FT_ULong offset = FT_STREAM_POS();
+
+
+ ft_var_load_avar( face );
+
+ if ( FT_STREAM_SEEK( offset ) )
+ goto Exit;
+ }
+
+ FT_TRACE5(( "%d instance%s\n",
+ fvar_head.instanceCount,
+ fvar_head.instanceCount == 1 ? "" : "s" ));
+
+ ns = mmvar->namedstyle;
+ nsc = face->blend->normalized_stylecoords;
for ( i = 0; i < fvar_head.instanceCount; i++, ns++ )
{
- if ( FT_FRAME_ENTER( 4L + 4L * fvar_head.axisCount ) )
+ /* PostScript names add 2 bytes to the instance record size */
+ if ( FT_FRAME_ENTER( ( usePsName ? 6L : 4L ) +
+ 4L * num_axes ) )
goto Exit;
ns->strid = FT_GET_USHORT();
(void) /* flags = */ FT_GET_USHORT();
- for ( j = 0; j < fvar_head.axisCount; j++ )
- ns->coords[j] = FT_GET_LONG();
+ c = ns->coords;
+ for ( j = 0; j < num_axes; j++, c++ )
+ *c = FT_GET_LONG();
+
+ /* valid psid values are 6, [256;32767], and 0xFFFF */
+ if ( usePsName )
+ ns->psid = FT_GET_USHORT();
+ else
+ ns->psid = 0xFFFF;
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ SFNT_Service sfnt = (SFNT_Service)face->sfnt;
+
+ FT_String* strname = NULL;
+ FT_String* psname = NULL;
+
+ FT_ULong pos;
+
+
+ pos = FT_STREAM_POS();
+
+ if ( ns->strid != 0xFFFF )
+ {
+ (void)sfnt->get_name( face,
+ (FT_UShort)ns->strid,
+ &strname );
+ if ( strname && !ft_strcmp( strname, ".notdef" ) )
+ strname = NULL;
+ }
+
+ if ( ns->psid != 0xFFFF )
+ {
+ (void)sfnt->get_name( face,
+ (FT_UShort)ns->psid,
+ &psname );
+ if ( psname && !ft_strcmp( psname, ".notdef" ) )
+ psname = NULL;
+ }
+
+ (void)FT_STREAM_SEEK( pos );
+
+ FT_TRACE5(( " instance %d (%s%s%s, %s%s%s)\n",
+ i,
+ strname ? "name: `" : "",
+ strname ? strname : "unnamed",
+ strname ? "'" : "",
+ psname ? "PS name: `" : "",
+ psname ? psname : "no PS name",
+ psname ? "'" : "" ));
+
+ FT_FREE( strname );
+ FT_FREE( psname );
+ }
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+ ft_var_to_normalized( face, num_axes, ns->coords, nsc );
+ nsc += num_axes;
FT_FRAME_EXIT();
}
+
+ if ( num_instances != fvar_head.instanceCount )
+ {
+ SFNT_Service sfnt = (SFNT_Service)face->sfnt;
+
+ FT_Int found, dummy1, dummy2;
+ FT_UInt strid = ~0U;
+
+
+ /* the default instance is missing in array the */
+ /* of named instances; try to synthesize an entry */
+ found = sfnt->get_name_id( face,
+ TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY,
+ &dummy1,
+ &dummy2 );
+ if ( found )
+ strid = TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY;
+ else
+ {
+ found = sfnt->get_name_id( face,
+ TT_NAME_ID_FONT_SUBFAMILY,
+ &dummy1,
+ &dummy2 );
+ if ( found )
+ strid = TT_NAME_ID_FONT_SUBFAMILY;
+ }
+
+ if ( found )
+ {
+ found = sfnt->get_name_id( face,
+ TT_NAME_ID_PS_NAME,
+ &dummy1,
+ &dummy2 );
+ if ( found )
+ {
+ FT_TRACE5(( "TT_Get_MM_Var:"
+ " Adding default instance to named instances\n" ));
+
+ ns = &mmvar->namedstyle[fvar_head.instanceCount];
+
+ ns->strid = strid;
+ ns->psid = TT_NAME_ID_PS_NAME;
+
+ a = mmvar->axis;
+ c = ns->coords;
+ for ( j = 0; j < num_axes; j++, a++, c++ )
+ *c = a->def;
+ }
+ }
+ }
+
+ ft_var_load_mvar( face );
}
/* fill the output array if requested */
- if ( master != NULL )
+ if ( master )
{
FT_UInt n;
@@ -917,22 +2356,25 @@
goto Exit;
FT_MEM_COPY( mmvar, face->blend->mmvar, face->blend->mmvar_len );
+ axis_flags =
+ (FT_UShort*)( (char*)mmvar + mmvar_size );
mmvar->axis =
- (FT_Var_Axis*)&( mmvar[1] );
+ (FT_Var_Axis*)( (char*)axis_flags + axis_flags_size );
mmvar->namedstyle =
- (FT_Var_Named_Style*)&( mmvar->axis[mmvar->num_axis] );
- next_coords =
- (FT_Fixed*)&( mmvar->namedstyle[mmvar->num_namedstyles] );
+ (FT_Var_Named_Style*)( (char*)mmvar->axis+ axis_size );
+ next_coords = (FT_Fixed*)( (char*)mmvar->namedstyle +
+ namedstyle_size );
for ( n = 0; n < mmvar->num_namedstyles; n++ )
{
mmvar->namedstyle[n].coords = next_coords;
- next_coords += mmvar->num_axis;
+ next_coords += num_axes;
}
a = mmvar->axis;
- next_name = (FT_String*)next_coords;
- for ( n = 0; n < mmvar->num_axis; n++ )
+ next_name = (FT_String*)( (char*)mmvar->namedstyle +
+ namedstyle_size + next_coords_size );
+ for ( n = 0; n < num_axes; n++ )
{
a->name = next_name;
@@ -958,6 +2400,196 @@
}
+ static FT_Error
+ tt_set_mm_blend( TT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords,
+ FT_Bool set_design_coords )
+ {
+ FT_Error error = FT_Err_Ok;
+ GX_Blend blend;
+ FT_MM_Var* mmvar;
+ FT_UInt i;
+
+ FT_Bool all_design_coords = FALSE;
+
+ FT_Memory memory = face->root.memory;
+
+ enum
+ {
+ mcvt_retain,
+ mcvt_modify,
+ mcvt_load
+
+ } manageCvt;
+
+
+ face->doblend = FALSE;
+
+ if ( !face->blend )
+ {
+ if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) )
+ goto Exit;
+ }
+
+ blend = face->blend;
+ mmvar = blend->mmvar;
+
+ if ( num_coords > mmvar->num_axis )
+ {
+ FT_TRACE2(( "TT_Set_MM_Blend:"
+ " only using first %d of %d coordinates\n",
+ mmvar->num_axis, num_coords ));
+ num_coords = mmvar->num_axis;
+ }
+
+ FT_TRACE5(( "TT_Set_MM_Blend:\n"
+ " normalized design coordinates:\n" ));
+
+ for ( i = 0; i < num_coords; i++ )
+ {
+ FT_TRACE5(( " %.5f\n", coords[i] / 65536.0 ));
+ if ( coords[i] < -0x00010000L || coords[i] > 0x00010000L )
+ {
+ FT_TRACE1(( "TT_Set_MM_Blend: normalized design coordinate %.5f\n"
+ " is out of range [-1;1]\n",
+ coords[i] / 65536.0 ));
+ error = FT_THROW( Invalid_Argument );
+ goto Exit;
+ }
+ }
+
+ FT_TRACE5(( "\n" ));
+
+ if ( !face->is_cff2 && !blend->glyphoffsets )
+ if ( FT_SET_ERROR( ft_var_load_gvar( face ) ) )
+ goto Exit;
+
+ if ( !blend->coords )
+ {
+ if ( FT_NEW_ARRAY( blend->coords, mmvar->num_axis ) )
+ goto Exit;
+
+ /* the first time we have to compute all design coordinates */
+ all_design_coords = TRUE;
+ }
+
+ if ( !blend->normalizedcoords )
+ {
+ if ( FT_NEW_ARRAY( blend->normalizedcoords, mmvar->num_axis ) )
+ goto Exit;
+
+ manageCvt = mcvt_modify;
+
+ /* If we have not set the blend coordinates before this, then the */
+ /* cvt table will still be what we read from the `cvt ' table and */
+ /* we don't need to reload it. We may need to change it though... */
+ }
+ else
+ {
+ FT_Bool have_diff = 0;
+ FT_UInt j;
+ FT_Fixed* c;
+ FT_Fixed* n;
+
+
+ manageCvt = mcvt_retain;
+
+ for ( i = 0; i < num_coords; i++ )
+ {
+ if ( blend->normalizedcoords[i] != coords[i] )
+ {
+ manageCvt = mcvt_load;
+ have_diff = 1;
+ break;
+ }
+ }
+
+ if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) )
+ {
+ FT_UInt idx = (FT_UInt)face->root.face_index >> 16;
+
+
+ c = blend->normalizedcoords + i;
+ n = blend->normalized_stylecoords + idx * mmvar->num_axis + i;
+ for ( j = i; j < mmvar->num_axis; j++, n++, c++ )
+ if ( *c != *n )
+ have_diff = 1;
+ }
+ else
+ {
+ c = blend->normalizedcoords + i;
+ for ( j = i; j < mmvar->num_axis; j++, c++ )
+ if ( *c != 0 )
+ have_diff = 1;
+ }
+
+ /* return value -1 indicates `no change' */
+ if ( !have_diff )
+ return -1;
+
+ for ( ; i < mmvar->num_axis; i++ )
+ {
+ if ( blend->normalizedcoords[i] != 0 )
+ {
+ manageCvt = mcvt_load;
+ break;
+ }
+ }
+
+ /* If we don't change the blend coords then we don't need to do */
+ /* anything to the cvt table. It will be correct. Otherwise we */
+ /* no longer have the original cvt (it was modified when we set */
+ /* the blend last time), so we must reload and then modify it. */
+ }
+
+ blend->num_axis = mmvar->num_axis;
+ FT_MEM_COPY( blend->normalizedcoords,
+ coords,
+ num_coords * sizeof ( FT_Fixed ) );
+
+ if ( set_design_coords )
+ ft_var_to_design( face,
+ all_design_coords ? blend->num_axis : num_coords,
+ blend->normalizedcoords,
+ blend->coords );
+
+ face->doblend = TRUE;
+
+ if ( face->cvt )
+ {
+ switch ( manageCvt )
+ {
+ case mcvt_load:
+ /* The cvt table has been loaded already; every time we change the */
+ /* blend we may need to reload and remodify the cvt table. */
+ FT_FREE( face->cvt );
+ face->cvt = NULL;
+
+ error = tt_face_load_cvt( face, face->root.stream );
+ break;
+
+ case mcvt_modify:
+ /* The original cvt table is in memory. All we need to do is */
+ /* apply the `cvar' table (if any). */
+ error = tt_face_vary_cvt( face, face->root.stream );
+ break;
+
+ case mcvt_retain:
+ /* The cvt table is correct for this set of coordinates. */
+ break;
+ }
+ }
+
+ /* enforce recomputation of the PostScript name; */
+ FT_FREE( face->postscript_name );
+ face->postscript_name = NULL;
+
+ Exit:
+ return error;
+ }
+
+
/*************************************************************************/
/* */
/* <Function> */
@@ -988,133 +2620,95 @@
FT_UInt num_coords,
FT_Fixed* coords )
{
- FT_Error error = FT_Err_Ok;
- GX_Blend blend;
- FT_MM_Var* mmvar;
- FT_UInt i;
- FT_Memory memory = face->root.memory;
+ FT_Error error;
- enum
+
+ error = tt_set_mm_blend( face, num_coords, coords, 1 );
+ if ( error )
+ return error;
+
+ if ( num_coords )
+ face->root.face_flags |= FT_FACE_FLAG_VARIATION;
+ else
+ face->root.face_flags &= ~FT_FACE_FLAG_VARIATION;
+
+ return FT_Err_Ok;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* TT_Get_MM_Blend */
+ /* */
+ /* <Description> */
+ /* Get the blend (normalized) coordinates for this instance of the */
+ /* font. */
+ /* */
+ /* <InOut> */
+ /* face :: The font. */
+ /* Initialize the blend structure with `gvar' data. */
+ /* */
+ /* <Input> */
+ /* num_coords :: The number of available coordinates. If it is */
+ /* larger than the number of axes, set the excess */
+ /* values to 0. */
+ /* */
+ /* coords :: An array of `num_coords', each between [-1,1]. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0 means success. */
+ /* */
+ FT_LOCAL_DEF( FT_Error )
+ TT_Get_MM_Blend( TT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
+ FT_Error error = FT_Err_Ok;
+ GX_Blend blend;
+ FT_UInt i, nc;
+
+
+ if ( !face->blend )
{
- mcvt_retain,
- mcvt_modify,
- mcvt_load
-
- } manageCvt;
-
-
- face->doblend = FALSE;
-
- if ( face->blend == NULL )
- {
- if ( ( error = TT_Get_MM_Var( face, NULL ) ) != 0 )
- goto Exit;
+ if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) )
+ return error;
}
blend = face->blend;
- mmvar = blend->mmvar;
- if ( num_coords > mmvar->num_axis )
+ if ( !blend->coords )
{
- FT_TRACE2(( "TT_Set_MM_Blend: only using first %d of %d coordinates\n",
- mmvar->num_axis, num_coords ));
- num_coords = mmvar->num_axis;
+ /* select default instance coordinates */
+ /* if no instance is selected yet */
+ if ( FT_SET_ERROR( tt_set_mm_blend( face, 0, NULL, 1 ) ) )
+ return error;
}
- FT_TRACE5(( "normalized design coordinates:\n" ));
-
- for ( i = 0; i < num_coords; i++ )
+ nc = num_coords;
+ if ( num_coords > blend->num_axis )
{
- FT_TRACE5(( " %.4f\n", coords[i] / 65536.0 ));
- if ( coords[i] < -0x00010000L || coords[i] > 0x00010000L )
- {
- FT_TRACE1(( "TT_Set_MM_Blend: normalized design coordinate %.4f\n"
- " is out of range [-1;1]\n",
- coords[i] / 65536.0 ));
- error = FT_THROW( Invalid_Argument );
- goto Exit;
- }
+ FT_TRACE2(( "TT_Get_MM_Blend:"
+ " only using first %d of %d coordinates\n",
+ blend->num_axis, num_coords ));
+ nc = blend->num_axis;
}
- FT_TRACE5(( "\n" ));
-
- if ( blend->glyphoffsets == NULL )
- if ( ( error = ft_var_load_gvar( face ) ) != 0 )
- goto Exit;
-
- if ( blend->normalizedcoords == NULL )
+ if ( face->doblend )
{
- if ( FT_NEW_ARRAY( blend->normalizedcoords, mmvar->num_axis ) )
- goto Exit;
-
- manageCvt = mcvt_modify;
-
- /* If we have not set the blend coordinates before this, then the */
- /* cvt table will still be what we read from the `cvt ' table and */
- /* we don't need to reload it. We may need to change it though... */
+ for ( i = 0; i < nc; i++ )
+ coords[i] = blend->normalizedcoords[i];
}
else
{
- manageCvt = mcvt_retain;
-
- for ( i = 0; i < num_coords; i++ )
- {
- if ( blend->normalizedcoords[i] != coords[i] )
- {
- manageCvt = mcvt_load;
- break;
- }
- }
-
- for ( ; i < mmvar->num_axis; i++ )
- {
- if ( blend->normalizedcoords[i] != 0 )
- {
- manageCvt = mcvt_load;
- break;
- }
- }
-
- /* If we don't change the blend coords then we don't need to do */
- /* anything to the cvt table. It will be correct. Otherwise we */
- /* no longer have the original cvt (it was modified when we set */
- /* the blend last time), so we must reload and then modify it. */
+ for ( i = 0; i < nc; i++ )
+ coords[i] = 0;
}
- blend->num_axis = mmvar->num_axis;
- FT_MEM_COPY( blend->normalizedcoords,
- coords,
- num_coords * sizeof ( FT_Fixed ) );
+ for ( ; i < num_coords; i++ )
+ coords[i] = 0;
- face->doblend = TRUE;
-
- if ( face->cvt != NULL )
- {
- switch ( manageCvt )
- {
- case mcvt_load:
- /* The cvt table has been loaded already; every time we change the */
- /* blend we may need to reload and remodify the cvt table. */
- FT_FREE( face->cvt );
- face->cvt = NULL;
-
- error = tt_face_load_cvt( face, face->root.stream );
- break;
-
- case mcvt_modify:
- /* The original cvt table is in memory. All we need to do is */
- /* apply the `cvar' table (if any). */
- error = tt_face_vary_cvt( face, face->root.stream );
- break;
-
- case mcvt_retain:
- /* The cvt table is correct for this set of coordinates. */
- break;
- }
- }
-
- Exit:
- return error;
+ return FT_Err_Ok;
}
@@ -1148,19 +2742,22 @@
FT_UInt num_coords,
FT_Fixed* coords )
{
- FT_Error error = FT_Err_Ok;
- FT_Fixed* normalized = NULL;
- GX_Blend blend;
- FT_MM_Var* mmvar;
- FT_UInt i, j;
- FT_Var_Axis* a;
- GX_AVarSegment av;
- FT_Memory memory = face->root.memory;
+ FT_Error error = FT_Err_Ok;
+ GX_Blend blend;
+ FT_MM_Var* mmvar;
+ FT_UInt i;
+ FT_Memory memory = face->root.memory;
+
+ FT_Fixed* c;
+ FT_Fixed* n;
+ FT_Fixed* normalized = NULL;
+
+ FT_Bool have_diff = 0;
- if ( face->blend == NULL )
+ if ( !face->blend )
{
- if ( ( error = TT_Get_MM_Var( face, NULL ) ) != 0 )
+ if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) )
goto Exit;
}
@@ -1175,75 +2772,81 @@
num_coords = mmvar->num_axis;
}
- /* Axis normalization is a two stage process. First we normalize */
- /* based on the [min,def,max] values for the axis to be [-1,0,1]. */
- /* Then, if there's an `avar' table, we renormalize this range. */
-
- if ( FT_NEW_ARRAY( normalized, mmvar->num_axis ) )
- goto Exit;
-
- FT_TRACE5(( "design coordinates:\n" ));
-
- a = mmvar->axis;
- for ( i = 0; i < num_coords; i++, a++ )
+ if ( !blend->coords )
{
- FT_TRACE5(( " %.4f\n", coords[i] / 65536.0 ));
- if ( coords[i] > a->maximum || coords[i] < a->minimum )
- {
- FT_TRACE1(( "TT_Set_Var_Design: normalized design coordinate %.4f\n"
- " is out of range [%.4f;%.4f]\n",
- coords[i] / 65536.0,
- a->minimum / 65536.0,
- a->maximum / 65536.0 ));
- error = FT_THROW( Invalid_Argument );
+ if ( FT_NEW_ARRAY( blend->coords, mmvar->num_axis ) )
goto Exit;
- }
-
- if ( coords[i] < a->def )
- normalized[i] = -FT_DivFix( coords[i] - a->def,
- a->minimum - a->def );
- else if ( a->maximum == a->def )
- normalized[i] = 0;
- else
- normalized[i] = FT_DivFix( coords[i] - a->def,
- a->maximum - a->def );
}
- FT_TRACE5(( "\n" ));
-
- for ( ; i < mmvar->num_axis; i++ )
- normalized[i] = 0;
-
- if ( !blend->avar_checked )
- ft_var_load_avar( face );
-
- if ( blend->avar_segment != NULL )
+ c = blend->coords;
+ n = coords;
+ for ( i = 0; i < num_coords; i++, n++, c++ )
{
- FT_TRACE5(( "normalized design coordinates"
- " before applying `avar' data:\n" ));
-
- av = blend->avar_segment;
- for ( i = 0; i < mmvar->num_axis; i++, av++ )
+ if ( *c != *n )
{
- for ( j = 1; j < (FT_UInt)av->pairCount; j++ )
+ *c = *n;
+ have_diff = 1;
+ }
+ }
+
+ if ( FT_IS_NAMED_INSTANCE( FT_FACE( face ) ) )
+ {
+ FT_UInt instance_index;
+ FT_Var_Named_Style* named_style;
+
+
+ instance_index = (FT_UInt)face->root.face_index >> 16;
+ named_style = mmvar->namedstyle + instance_index - 1;
+
+ n = named_style->coords + num_coords;
+ for ( ; i < mmvar->num_axis; i++, n++, c++ )
+ {
+ if ( *c != *n )
{
- FT_TRACE5(( " %.4f\n", normalized[i] / 65536.0 ));
- if ( normalized[i] < av->correspondence[j].fromCoord )
- {
- normalized[i] =
- FT_MulDiv( normalized[i] - av->correspondence[j - 1].fromCoord,
- av->correspondence[j].toCoord -
- av->correspondence[j - 1].toCoord,
- av->correspondence[j].fromCoord -
- av->correspondence[j - 1].fromCoord ) +
- av->correspondence[j - 1].toCoord;
- break;
- }
+ *c = *n;
+ have_diff = 1;
+ }
+ }
+ }
+ else
+ {
+ FT_Var_Axis* a;
+
+
+ a = mmvar->axis + num_coords;
+ for ( ; i < mmvar->num_axis; i++, a++, c++ )
+ {
+ if ( *c != a->def )
+ {
+ *c = a->def;
+ have_diff = 1;
}
}
}
- error = TT_Set_MM_Blend( face, mmvar->num_axis, normalized );
+ /* return value -1 indicates `no change'; */
+ /* we can exit early if `normalizedcoords' is already computed */
+ if ( blend->normalizedcoords && !have_diff )
+ return -1;
+
+ if ( FT_NEW_ARRAY( normalized, mmvar->num_axis ) )
+ goto Exit;
+
+ if ( !face->blend->avar_loaded )
+ ft_var_load_avar( face );
+
+ FT_TRACE5(( "TT_Set_Var_Design:\n"
+ " normalized design coordinates:\n" ));
+ ft_var_to_normalized( face, num_coords, blend->coords, normalized );
+
+ error = tt_set_mm_blend( face, mmvar->num_axis, normalized, 0 );
+ if ( error )
+ goto Exit;
+
+ if ( num_coords )
+ face->root.face_flags |= FT_FACE_FLAG_VARIATION;
+ else
+ face->root.face_flags &= ~FT_FACE_FLAG_VARIATION;
Exit:
FT_FREE( normalized );
@@ -1252,6 +2855,165 @@
/*************************************************************************/
+ /* */
+ /* <Function> */
+ /* TT_Get_Var_Design */
+ /* */
+ /* <Description> */
+ /* Get the design coordinates of the currently selected interpolated */
+ /* font. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* num_coords :: The number of design coordinates to retrieve. If it */
+ /* is larger than the number of axes, set the excess */
+ /* values to~0. */
+ /* */
+ /* <Output> */
+ /* coords :: The design coordinates array. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ FT_LOCAL_DEF( FT_Error )
+ TT_Get_Var_Design( TT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
+ FT_Error error = FT_Err_Ok;
+ GX_Blend blend;
+ FT_UInt i, nc;
+
+
+ if ( !face->blend )
+ {
+ if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) )
+ return error;
+ }
+
+ blend = face->blend;
+
+ if ( !blend->coords )
+ {
+ /* select default instance coordinates */
+ /* if no instance is selected yet */
+ if ( FT_SET_ERROR( tt_set_mm_blend( face, 0, NULL, 1 ) ) )
+ return error;
+ }
+
+ nc = num_coords;
+ if ( num_coords > blend->num_axis )
+ {
+ FT_TRACE2(( "TT_Get_Var_Design:"
+ " only using first %d of %d coordinates\n",
+ blend->num_axis, num_coords ));
+ nc = blend->num_axis;
+ }
+
+ if ( face->doblend )
+ {
+ for ( i = 0; i < nc; i++ )
+ coords[i] = blend->coords[i];
+ }
+ else
+ {
+ for ( i = 0; i < nc; i++ )
+ coords[i] = 0;
+ }
+
+ for ( ; i < num_coords; i++ )
+ coords[i] = 0;
+
+ return FT_Err_Ok;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* TT_Set_Named_Instance */
+ /* */
+ /* <Description> */
+ /* Set the given named instance, also resetting any further */
+ /* variation. */
+ /* */
+ /* <Input> */
+ /* face :: A handle to the source face. */
+ /* */
+ /* instance_index :: The instance index, starting with value 1. */
+ /* Value 0 indicates to not use an instance. */
+ /* */
+ /* <Return> */
+ /* FreeType error code. 0~means success. */
+ /* */
+ FT_LOCAL_DEF( FT_Error )
+ TT_Set_Named_Instance( TT_Face face,
+ FT_UInt instance_index )
+ {
+ FT_Error error = FT_ERR( Invalid_Argument );
+ GX_Blend blend;
+ FT_MM_Var* mmvar;
+
+ FT_UInt num_instances;
+
+
+ if ( !face->blend )
+ {
+ if ( FT_SET_ERROR( TT_Get_MM_Var( face, NULL ) ) )
+ goto Exit;
+ }
+
+ blend = face->blend;
+ mmvar = blend->mmvar;
+
+ num_instances = (FT_UInt)face->root.style_flags >> 16;
+
+ /* `instance_index' starts with value 1, thus `>' */
+ if ( instance_index > num_instances )
+ goto Exit;
+
+ if ( instance_index > 0 && mmvar->namedstyle )
+ {
+ FT_Memory memory = face->root.memory;
+ SFNT_Service sfnt = (SFNT_Service)face->sfnt;
+
+ FT_Var_Named_Style* named_style;
+ FT_String* style_name;
+
+
+ named_style = mmvar->namedstyle + instance_index - 1;
+
+ error = sfnt->get_name( face,
+ (FT_UShort)named_style->strid,
+ &style_name );
+ if ( error )
+ goto Exit;
+
+ /* set (or replace) style name */
+ FT_FREE( face->root.style_name );
+ face->root.style_name = style_name;
+
+ /* finally, select the named instance */
+ error = TT_Set_Var_Design( face,
+ mmvar->num_axis,
+ named_style->coords );
+ if ( error )
+ goto Exit;
+ }
+ else
+ error = TT_Set_Var_Design( face, 0, NULL );
+
+ face->root.face_index = ( instance_index << 16 ) |
+ ( face->root.face_index & 0xFFFFL );
+ face->root.face_flags &= ~FT_FACE_FLAG_VARIATION;
+
+ Exit:
+ return error;
+ }
+
+
+ /*************************************************************************/
/*************************************************************************/
/***** *****/
/***** GX VAR PARSING ROUTINES *****/
@@ -1297,14 +3059,16 @@
FT_Fixed* im_start_coords = NULL;
FT_Fixed* im_end_coords = NULL;
GX_Blend blend = face->blend;
- FT_UInt point_count;
- FT_UShort* localpoints;
+ FT_UInt point_count, spoint_count = 0;
+ FT_UShort* sharedpoints = NULL;
+ FT_UShort* localpoints = NULL;
+ FT_UShort* points;
FT_Short* deltas;
FT_TRACE2(( "CVAR " ));
- if ( blend == NULL )
+ if ( !blend )
{
FT_TRACE2(( "\n"
"tt_face_vary_cvt: no blend specified\n" ));
@@ -1312,7 +3076,7 @@
goto Exit;
}
- if ( face->cvt == NULL )
+ if ( !face->cvt )
{
FT_TRACE2(( "\n"
"tt_face_vary_cvt: no `cvt ' table\n" ));
@@ -1352,13 +3116,39 @@
goto FExit;
tupleCount = FT_GET_USHORT();
- offsetToData = table_start + FT_GET_USHORT();
+ offsetToData = FT_GET_USHORT();
- /* The documentation implies there are flags packed into the */
- /* tuplecount, but John Jenkins says that shared points don't apply */
- /* to `cvar', and no other flags are defined. */
+ /* rough sanity test */
+ if ( offsetToData + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) * 4 >
+ table_len )
+ {
+ FT_TRACE2(( "tt_face_vary_cvt:"
+ " invalid CVT variation array header\n" ));
- FT_TRACE5(( "cvar: there are %d tuples:\n", tupleCount ));
+ error = FT_THROW( Invalid_Table );
+ goto FExit;
+ }
+
+ offsetToData += table_start;
+
+ if ( tupleCount & GX_TC_TUPLES_SHARE_POINT_NUMBERS )
+ {
+ here = FT_Stream_FTell( stream );
+
+ FT_Stream_SeekSet( stream, offsetToData );
+
+ sharedpoints = ft_var_readpackedpoints( stream,
+ table_len,
+ &spoint_count );
+ offsetToData = FT_Stream_FTell( stream );
+
+ FT_Stream_SeekSet( stream, here );
+ }
+
+ FT_TRACE5(( "cvar: there %s %d tuple%s:\n",
+ ( tupleCount & 0xFFF ) == 1 ? "is" : "are",
+ tupleCount & 0xFFF,
+ ( tupleCount & 0xFFF ) == 1 ? "" : "s" ));
for ( i = 0; i < ( tupleCount & 0xFFF ); i++ )
{
@@ -1372,33 +3162,32 @@
tupleDataSize = FT_GET_USHORT();
tupleIndex = FT_GET_USHORT();
- /* There is no provision here for a global tuple coordinate section, */
- /* so John says. There are no tuple indices, just embedded tuples. */
-
if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD )
{
for ( j = 0; j < blend->num_axis; j++ )
- tuple_coords[j] = FT_GET_SHORT() << 2; /* convert from */
+ tuple_coords[j] = FT_GET_SHORT() * 4; /* convert from */
/* short frac to fixed */
}
- else
+ else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount )
{
- /* skip this tuple; it makes no sense */
+ FT_TRACE2(( "tt_face_vary_cvt:"
+ " invalid tuple index\n" ));
- if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
- for ( j = 0; j < 2 * blend->num_axis; j++ )
- (void)FT_GET_SHORT();
-
- offsetToData += tupleDataSize;
- continue;
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
}
+ else
+ FT_MEM_COPY(
+ tuple_coords,
+ &blend->tuplecoords[( tupleIndex & 0xFFF ) * blend->num_axis],
+ blend->num_axis * sizeof ( FT_Fixed ) );
if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
{
for ( j = 0; j < blend->num_axis; j++ )
- im_start_coords[j] = FT_GET_SHORT() << 2;
+ im_start_coords[j] = FT_GET_SHORT() * 4;
for ( j = 0; j < blend->num_axis; j++ )
- im_end_coords[j] = FT_GET_SHORT() << 2;
+ im_end_coords[j] = FT_GET_SHORT() * 4;
}
apply = ft_var_apply_tuple( blend,
@@ -1406,11 +3195,8 @@
tuple_coords,
im_start_coords,
im_end_coords );
- if ( /* tuple isn't active for our blend */
- apply == 0 ||
- /* global points not allowed, */
- /* if they aren't local, makes no sense */
- !( tupleIndex & GX_TI_PRIVATE_POINT_NUMBERS ) )
+
+ if ( apply == 0 ) /* tuple isn't active for our blend */
{
offsetToData += tupleDataSize;
continue;
@@ -1420,11 +3206,27 @@
FT_Stream_SeekSet( stream, offsetToData );
- localpoints = ft_var_readpackedpoints( stream, &point_count );
- deltas = ft_var_readpackeddeltas( stream,
- point_count == 0 ? face->cvt_size
- : point_count );
- if ( localpoints == NULL || deltas == NULL )
+ if ( tupleIndex & GX_TI_PRIVATE_POINT_NUMBERS )
+ {
+ localpoints = ft_var_readpackedpoints( stream,
+ table_len,
+ &point_count );
+ points = localpoints;
+ }
+ else
+ {
+ points = sharedpoints;
+ point_count = spoint_count;
+ }
+
+ deltas = ft_var_readpackeddeltas( stream,
+ table_len,
+ point_count == 0 ? face->cvt_size
+ : point_count );
+
+ if ( !points ||
+ !deltas ||
+ ( localpoints == ALL_POINTS && point_count != face->cvt_size ) )
; /* failure, ignore it */
else if ( localpoints == ALL_POINTS )
@@ -1472,10 +3274,15 @@
for ( j = 0; j < point_count; j++ )
{
- int pindex = localpoints[j];
- FT_Long orig_cvt = face->cvt[pindex];
+ int pindex;
+ FT_Long orig_cvt;
+ pindex = points[j];
+ if ( (FT_ULong)pindex >= face->cvt_size )
+ continue;
+
+ orig_cvt = face->cvt[pindex];
face->cvt[pindex] = (FT_Short)( orig_cvt +
FT_MulFix( deltas[j], apply ) );
@@ -1510,6 +3317,8 @@
FT_FRAME_EXIT();
Exit:
+ if ( sharedpoints != ALL_POINTS )
+ FT_FREE( sharedpoints );
FT_FREE( tuple_coords );
FT_FREE( im_start_coords );
FT_FREE( im_end_coords );
@@ -1598,25 +3407,12 @@
d1 = out1 - in1;
d2 = out2 - in2;
- if ( out1 == out2 || in1 == in2 )
+ /* If the reference points have the same coordinate but different */
+ /* delta, inferred delta is zero. Otherwise interpolate. */
+ if ( in1 != in2 || out1 == out2 )
{
- for ( p = p1; p <= p2; p++ )
- {
- out = in_points[p].x;
-
- if ( out <= in1 )
- out += d1;
- else if ( out >= in2 )
- out += d2;
- else
- out = out1;
-
- out_points[p].x = out;
- }
- }
- else
- {
- FT_Fixed scale = FT_DivFix( out2 - out1, in2 - in1 );
+ FT_Fixed scale = in1 != in2 ? FT_DivFix( out2 - out1, in2 - in1 )
+ : 0;
for ( p = p1; p <= p2; p++ )
@@ -1643,19 +3439,18 @@
/* modeled after `Ins_IUP */
static void
- tt_handle_deltas( FT_Outline* outline,
- FT_Vector* in_points,
- FT_Bool* has_delta )
+ tt_interpolate_deltas( FT_Outline* outline,
+ FT_Vector* out_points,
+ FT_Vector* in_points,
+ FT_Bool* has_delta )
{
- FT_Vector* out_points;
+ FT_Int first_point;
+ FT_Int end_point;
- FT_UInt first_point;
- FT_UInt end_point;
+ FT_Int first_delta;
+ FT_Int cur_delta;
- FT_UInt first_delta;
- FT_UInt cur_delta;
-
- FT_UInt point;
+ FT_Int point;
FT_Short contour;
@@ -1663,8 +3458,6 @@
if ( !outline->n_contours )
return;
- out_points = outline->points;
-
contour = 0;
point = 0;
@@ -1768,6 +3561,7 @@
GX_Blend blend = face->blend;
FT_Vector* points_org = NULL;
+ FT_Vector* points_out = NULL;
FT_Bool* has_delta = NULL;
FT_Error error;
@@ -1786,7 +3580,7 @@
FT_Short *deltas_x, *deltas_y;
- if ( !face->doblend || blend == NULL )
+ if ( !face->doblend || !blend )
return FT_THROW( Invalid_Argument );
if ( glyph_index >= blend->gv_glyphcnt ||
@@ -1799,6 +3593,7 @@
}
if ( FT_NEW_ARRAY( points_org, n_points ) ||
+ FT_NEW_ARRAY( points_out, n_points ) ||
FT_NEW_ARRAY( has_delta, n_points ) )
goto Fail1;
@@ -1810,7 +3605,6 @@
glyph_start = FT_Stream_FTell( stream );
/* each set of glyph variation data is formatted similarly to `cvar' */
- /* (except we get shared points and global tuples) */
if ( FT_NEW_ARRAY( tuple_coords, blend->num_axis ) ||
FT_NEW_ARRAY( im_start_coords, blend->num_axis ) ||
@@ -1818,7 +3612,20 @@
goto Fail2;
tupleCount = FT_GET_USHORT();
- offsetToData = glyph_start + FT_GET_USHORT();
+ offsetToData = FT_GET_USHORT();
+
+ /* rough sanity test */
+ if ( offsetToData + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) * 4 >
+ blend->gvar_size )
+ {
+ FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:"
+ " invalid glyph variation array header\n" ));
+
+ error = FT_THROW( Invalid_Table );
+ goto Fail2;
+ }
+
+ offsetToData += glyph_start;
if ( tupleCount & GX_TC_TUPLES_SHARE_POINT_NUMBERS )
{
@@ -1826,13 +3633,21 @@
FT_Stream_SeekSet( stream, offsetToData );
- sharedpoints = ft_var_readpackedpoints( stream, &spoint_count );
+ sharedpoints = ft_var_readpackedpoints( stream,
+ blend->gvar_size,
+ &spoint_count );
offsetToData = FT_Stream_FTell( stream );
FT_Stream_SeekSet( stream, here );
}
- FT_TRACE5(( "gvar: there are %d tuples:\n", tupleCount ));
+ FT_TRACE5(( "gvar: there %s %d tuple%s:\n",
+ ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "is" : "are",
+ tupleCount & GX_TC_TUPLE_COUNT_MASK,
+ ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "" : "s" ));
+
+ for ( j = 0; j < n_points; j++ )
+ points_org[j] = outline->points[j];
for ( i = 0; i < ( tupleCount & GX_TC_TUPLE_COUNT_MASK ); i++ )
{
@@ -1849,11 +3664,14 @@
if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD )
{
for ( j = 0; j < blend->num_axis; j++ )
- tuple_coords[j] = FT_GET_SHORT() << 2; /* convert from */
+ tuple_coords[j] = FT_GET_SHORT() * 4; /* convert from */
/* short frac to fixed */
}
else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount )
{
+ FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:"
+ " invalid tuple index\n" ));
+
error = FT_THROW( Invalid_Table );
goto Fail2;
}
@@ -1866,9 +3684,9 @@
if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
{
for ( j = 0; j < blend->num_axis; j++ )
- im_start_coords[j] = FT_GET_SHORT() << 2;
+ im_start_coords[j] = FT_GET_SHORT() * 4;
for ( j = 0; j < blend->num_axis; j++ )
- im_end_coords[j] = FT_GET_SHORT() << 2;
+ im_end_coords[j] = FT_GET_SHORT() * 4;
}
apply = ft_var_apply_tuple( blend,
@@ -1885,11 +3703,13 @@
here = FT_Stream_FTell( stream );
+ FT_Stream_SeekSet( stream, offsetToData );
+
if ( tupleIndex & GX_TI_PRIVATE_POINT_NUMBERS )
{
- FT_Stream_SeekSet( stream, offsetToData );
-
- localpoints = ft_var_readpackedpoints( stream, &point_count );
+ localpoints = ft_var_readpackedpoints( stream,
+ blend->gvar_size,
+ &point_count );
points = localpoints;
}
else
@@ -1899,13 +3719,15 @@
}
deltas_x = ft_var_readpackeddeltas( stream,
+ blend->gvar_size,
point_count == 0 ? n_points
: point_count );
deltas_y = ft_var_readpackeddeltas( stream,
+ blend->gvar_size,
point_count == 0 ? n_points
: point_count );
- if ( points == NULL || deltas_y == NULL || deltas_x == NULL )
+ if ( !points || !deltas_y || !deltas_x )
; /* failure, ignore it */
else if ( points == ALL_POINTS )
@@ -1920,22 +3742,48 @@
/* this means that there are deltas for every point in the glyph */
for ( j = 0; j < n_points; j++ )
{
-#ifdef FT_DEBUG_LEVEL_TRACE
- FT_Vector point_org = outline->points[j];
-#endif
+ FT_Pos delta_x = FT_MulFix( deltas_x[j], apply );
+ FT_Pos delta_y = FT_MulFix( deltas_y[j], apply );
- outline->points[j].x += FT_MulFix( deltas_x[j], apply );
- outline->points[j].y += FT_MulFix( deltas_y[j], apply );
+ if ( j < n_points - 4 )
+ {
+ outline->points[j].x += delta_x;
+ outline->points[j].y += delta_y;
+ }
+ else
+ {
+ /* To avoid double adjustment of advance width or height, */
+ /* adjust phantom points only if there is no HVAR or VVAR */
+ /* support, respectively. */
+ if ( j == ( n_points - 4 ) &&
+ !( face->variation_support &
+ TT_FACE_FLAG_VAR_LSB ) )
+ outline->points[j].x += delta_x;
+
+ else if ( j == ( n_points - 3 ) &&
+ !( face->variation_support &
+ TT_FACE_FLAG_VAR_HADVANCE ) )
+ outline->points[j].x += delta_x;
+
+ else if ( j == ( n_points - 2 ) &&
+ !( face->variation_support &
+ TT_FACE_FLAG_VAR_TSB ) )
+ outline->points[j].y += delta_y;
+
+ else if ( j == ( n_points - 1 ) &&
+ !( face->variation_support &
+ TT_FACE_FLAG_VAR_VADVANCE ) )
+ outline->points[j].y += delta_y;
+ }
#ifdef FT_DEBUG_LEVEL_TRACE
- if ( ( point_org.x != outline->points[j].x ) ||
- ( point_org.y != outline->points[j].y ) )
+ if ( delta_x || delta_y )
{
FT_TRACE7(( " %d: (%d, %d) -> (%d, %d)\n",
j,
- point_org.x,
- point_org.y,
+ outline->points[j].x - delta_x,
+ outline->points[j].y - delta_y,
outline->points[j].x,
outline->points[j].y ));
count++;
@@ -1960,13 +3808,13 @@
/* IUP bytecode instruction */
for ( j = 0; j < n_points; j++ )
{
- points_org[j] = outline->points[j];
has_delta[j] = FALSE;
+ points_out[j] = points_org[j];
}
for ( j = 0; j < point_count; j++ )
{
- FT_UShort idx = localpoints[j];
+ FT_UShort idx = points[j];
if ( idx >= n_points )
@@ -1974,34 +3822,71 @@
has_delta[idx] = TRUE;
- outline->points[idx].x += FT_MulFix( deltas_x[j], apply );
- outline->points[idx].y += FT_MulFix( deltas_y[j], apply );
+ points_out[idx].x += FT_MulFix( deltas_x[j], apply );
+ points_out[idx].y += FT_MulFix( deltas_y[j], apply );
}
/* no need to handle phantom points here, */
/* since solitary points can't be interpolated */
- tt_handle_deltas( outline,
- points_org,
- has_delta );
+ tt_interpolate_deltas( outline,
+ points_out,
+ points_org,
+ has_delta );
-#ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE7(( " point deltas:\n" ));
- for ( j = 0; j < n_points; j++)
+ for ( j = 0; j < n_points; j++ )
{
- if ( ( points_org[j].x != outline->points[j].x ) ||
- ( points_org[j].y != outline->points[j].y ) )
+ FT_Pos delta_x = points_out[j].x - points_org[j].x;
+ FT_Pos delta_y = points_out[j].y - points_org[j].y;
+
+
+ if ( j < n_points - 4 )
+ {
+ outline->points[j].x += delta_x;
+ outline->points[j].y += delta_y;
+ }
+ else
+ {
+ /* To avoid double adjustment of advance width or height, */
+ /* adjust phantom points only if there is no HVAR or VVAR */
+ /* support, respectively. */
+ if ( j == ( n_points - 4 ) &&
+ !( face->variation_support &
+ TT_FACE_FLAG_VAR_LSB ) )
+ outline->points[j].x += delta_x;
+
+ else if ( j == ( n_points - 3 ) &&
+ !( face->variation_support &
+ TT_FACE_FLAG_VAR_HADVANCE ) )
+ outline->points[j].x += delta_x;
+
+ else if ( j == ( n_points - 2 ) &&
+ !( face->variation_support &
+ TT_FACE_FLAG_VAR_TSB ) )
+ outline->points[j].y += delta_y;
+
+ else if ( j == ( n_points - 1 ) &&
+ !( face->variation_support &
+ TT_FACE_FLAG_VAR_VADVANCE ) )
+ outline->points[j].y += delta_y;
+ }
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( delta_x || delta_y )
{
FT_TRACE7(( " %d: (%d, %d) -> (%d, %d)\n",
j,
- points_org[j].x,
- points_org[j].y,
+ outline->points[j].x - delta_x,
+ outline->points[j].y - delta_y,
outline->points[j].x,
outline->points[j].y ));
count++;
}
+#endif
}
+#ifdef FT_DEBUG_LEVEL_TRACE
if ( !count )
FT_TRACE7(( " none\n" ));
#endif
@@ -2020,6 +3905,8 @@
FT_TRACE5(( "\n" ));
Fail2:
+ if ( sharedpoints != ALL_POINTS )
+ FT_FREE( sharedpoints );
FT_FREE( tuple_coords );
FT_FREE( im_start_coords );
FT_FREE( im_end_coords );
@@ -2028,6 +3915,7 @@
Fail1:
FT_FREE( points_org );
+ FT_FREE( points_out );
FT_FREE( has_delta );
return error;
@@ -2037,37 +3925,150 @@
/*************************************************************************/
/* */
/* <Function> */
+ /* tt_get_var_blend */
+ /* */
+ /* <Description> */
+ /* An extended internal version of `TT_Get_MM_Blend' that returns */
+ /* pointers instead of copying data, without any initialization of */
+ /* the MM machinery in case it isn't loaded yet. */
+ /* */
+ FT_LOCAL_DEF( FT_Error )
+ tt_get_var_blend( TT_Face face,
+ FT_UInt *num_coords,
+ FT_Fixed* *coords,
+ FT_Fixed* *normalizedcoords,
+ FT_MM_Var* *mm_var )
+ {
+ if ( face->blend )
+ {
+ if ( num_coords )
+ *num_coords = face->blend->num_axis;
+ if ( coords )
+ *coords = face->blend->coords;
+ if ( normalizedcoords )
+ *normalizedcoords = face->blend->normalizedcoords;
+ if ( mm_var )
+ *mm_var = face->blend->mmvar;
+ }
+ else
+ {
+ if ( num_coords )
+ *num_coords = 0;
+ if ( coords )
+ *coords = NULL;
+ if ( mm_var )
+ *mm_var = NULL;
+ }
+
+ return FT_Err_Ok;
+ }
+
+
+ static void
+ ft_var_done_item_variation_store( TT_Face face,
+ GX_ItemVarStore itemStore )
+ {
+ FT_Memory memory = FT_FACE_MEMORY( face );
+ FT_UInt i;
+
+
+ if ( itemStore->varData )
+ {
+ for ( i = 0; i < itemStore->dataCount; i++ )
+ {
+ FT_FREE( itemStore->varData[i].regionIndices );
+ FT_FREE( itemStore->varData[i].deltaSet );
+ }
+
+ FT_FREE( itemStore->varData );
+ }
+
+ if ( itemStore->varRegionList )
+ {
+ for ( i = 0; i < itemStore->regionCount; i++ )
+ FT_FREE( itemStore->varRegionList[i].axisList );
+
+ FT_FREE( itemStore->varRegionList );
+ }
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
/* tt_done_blend */
/* */
/* <Description> */
/* Free the blend internal data structure. */
/* */
FT_LOCAL_DEF( void )
- tt_done_blend( FT_Memory memory,
- GX_Blend blend )
+ tt_done_blend( TT_Face face )
{
- if ( blend != NULL )
+ FT_Memory memory = FT_FACE_MEMORY( face );
+ GX_Blend blend = face->blend;
+
+
+ if ( blend )
{
- FT_UInt i;
+ FT_UInt i, num_axes;
+ /* blend->num_axis might not be set up yet */
+ num_axes = blend->mmvar->num_axis;
+
+ FT_FREE( blend->coords );
FT_FREE( blend->normalizedcoords );
+ FT_FREE( blend->normalized_stylecoords );
FT_FREE( blend->mmvar );
- if ( blend->avar_segment != NULL )
+ if ( blend->avar_segment )
{
- for ( i = 0; i < blend->num_axis; i++ )
+ for ( i = 0; i < num_axes; i++ )
FT_FREE( blend->avar_segment[i].correspondence );
FT_FREE( blend->avar_segment );
}
+ if ( blend->hvar_table )
+ {
+ ft_var_done_item_variation_store( face,
+ &blend->hvar_table->itemStore );
+
+ FT_FREE( blend->hvar_table->widthMap.innerIndex );
+ FT_FREE( blend->hvar_table->widthMap.outerIndex );
+ FT_FREE( blend->hvar_table );
+ }
+
+ if ( blend->vvar_table )
+ {
+ ft_var_done_item_variation_store( face,
+ &blend->vvar_table->itemStore );
+
+ FT_FREE( blend->vvar_table->widthMap.innerIndex );
+ FT_FREE( blend->vvar_table->widthMap.outerIndex );
+ FT_FREE( blend->vvar_table );
+ }
+
+ if ( blend->mvar_table )
+ {
+ ft_var_done_item_variation_store( face,
+ &blend->mvar_table->itemStore );
+
+ FT_FREE( blend->mvar_table->values );
+ FT_FREE( blend->mvar_table );
+ }
+
FT_FREE( blend->tuplecoords );
FT_FREE( blend->glyphoffsets );
FT_FREE( blend );
}
}
-#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+#else /* !TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+
+ /* ANSI C doesn't like empty source files */
+ typedef int _tt_gxvar_dummy;
+
+#endif /* !TT_CONFIG_OPTION_GX_VAR_SUPPORT */
/* END */
diff --git a/src/truetype/ttgxvar.h b/src/truetype/ttgxvar.h
index 060d4d6..a37bb90 100644
--- a/src/truetype/ttgxvar.h
+++ b/src/truetype/ttgxvar.h
@@ -4,7 +4,7 @@
/* */
/* TrueType GX Font Variation loader (specification) */
/* */
-/* Copyright 2004-2015 by */
+/* Copyright 2004-2018 by */
/* David Turner, Robert Wilhelm, Werner Lemberg and George Williams. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTGXVAR_H__
-#define __TTGXVAR_H__
+#ifndef TTGXVAR_H_
+#define TTGXVAR_H_
#include <ft2build.h>
@@ -27,6 +27,8 @@
FT_BEGIN_HEADER
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
/*************************************************************************/
/* */
/* <Struct> */
@@ -61,6 +63,152 @@
} GX_AVarSegmentRec, *GX_AVarSegment;
+ typedef struct GX_ItemVarDataRec_
+ {
+ FT_UInt itemCount; /* number of delta sets per item */
+ FT_UInt regionIdxCount; /* number of region indices in this data */
+ FT_UInt* regionIndices; /* array of `regionCount' indices; */
+ /* these index `varRegionList' */
+ FT_Short* deltaSet; /* array of `itemCount' deltas */
+ /* use `innerIndex' for this array */
+
+ } GX_ItemVarDataRec, *GX_ItemVarData;
+
+
+ /* contribution of one axis to a region */
+ typedef struct GX_AxisCoordsRec_
+ {
+ FT_Fixed startCoord;
+ FT_Fixed peakCoord; /* zero means no effect (factor = 1) */
+ FT_Fixed endCoord;
+
+ } GX_AxisCoordsRec, *GX_AxisCoords;
+
+
+ typedef struct GX_VarRegionRec_
+ {
+ GX_AxisCoords axisList; /* array of axisCount records */
+
+ } GX_VarRegionRec, *GX_VarRegion;
+
+
+ /* item variation store */
+ typedef struct GX_ItemVarStoreRec_
+ {
+ FT_UInt dataCount;
+ GX_ItemVarData varData; /* array of dataCount records; */
+ /* use `outerIndex' for this array */
+ FT_UShort axisCount;
+ FT_UInt regionCount; /* total number of regions defined */
+ GX_VarRegion varRegionList;
+
+ } GX_ItemVarStoreRec, *GX_ItemVarStore;
+
+
+ typedef struct GX_DeltaSetIdxMapRec_
+ {
+ FT_UInt mapCount;
+ FT_UInt* outerIndex; /* indices to item var data */
+ FT_UInt* innerIndex; /* indices to delta set */
+
+ } GX_DeltaSetIdxMapRec, *GX_DeltaSetIdxMap;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* GX_HVVarTableRec */
+ /* */
+ /* <Description> */
+ /* Data from either the `HVAR' or `VVAR' table. */
+ /* */
+ typedef struct GX_HVVarTableRec_
+ {
+ GX_ItemVarStoreRec itemStore; /* Item Variation Store */
+ GX_DeltaSetIdxMapRec widthMap; /* Advance Width Mapping */
+
+#if 0
+ GX_DeltaSetIdxMapRec lsbMap; /* not implemented */
+ GX_DeltaSetIdxMapRec rsbMap; /* not implemented */
+
+ GX_DeltaSetIdxMapRec tsbMap; /* not implemented */
+ GX_DeltaSetIdxMapRec bsbMap; /* not implemented */
+ GX_DeltaSetIdxMapRec vorgMap; /* not implemented */
+#endif
+
+ } GX_HVVarTableRec, *GX_HVVarTable;
+
+
+#define MVAR_TAG_GASP_0 FT_MAKE_TAG( 'g', 's', 'p', '0' )
+#define MVAR_TAG_GASP_1 FT_MAKE_TAG( 'g', 's', 'p', '1' )
+#define MVAR_TAG_GASP_2 FT_MAKE_TAG( 'g', 's', 'p', '2' )
+#define MVAR_TAG_GASP_3 FT_MAKE_TAG( 'g', 's', 'p', '3' )
+#define MVAR_TAG_GASP_4 FT_MAKE_TAG( 'g', 's', 'p', '4' )
+#define MVAR_TAG_GASP_5 FT_MAKE_TAG( 'g', 's', 'p', '5' )
+#define MVAR_TAG_GASP_6 FT_MAKE_TAG( 'g', 's', 'p', '6' )
+#define MVAR_TAG_GASP_7 FT_MAKE_TAG( 'g', 's', 'p', '7' )
+#define MVAR_TAG_GASP_8 FT_MAKE_TAG( 'g', 's', 'p', '8' )
+#define MVAR_TAG_GASP_9 FT_MAKE_TAG( 'g', 's', 'p', '9' )
+
+#define MVAR_TAG_CPHT FT_MAKE_TAG( 'c', 'p', 'h', 't' )
+#define MVAR_TAG_HASC FT_MAKE_TAG( 'h', 'a', 's', 'c' )
+#define MVAR_TAG_HCLA FT_MAKE_TAG( 'h', 'c', 'l', 'a' )
+#define MVAR_TAG_HCLD FT_MAKE_TAG( 'h', 'c', 'l', 'd' )
+#define MVAR_TAG_HCOF FT_MAKE_TAG( 'h', 'c', 'o', 'f' )
+#define MVAR_TAG_HCRN FT_MAKE_TAG( 'h', 'c', 'r', 'n' )
+#define MVAR_TAG_HCRS FT_MAKE_TAG( 'h', 'c', 'r', 's' )
+#define MVAR_TAG_HDSC FT_MAKE_TAG( 'h', 'd', 's', 'c' )
+#define MVAR_TAG_HLGP FT_MAKE_TAG( 'h', 'l', 'g', 'p' )
+#define MVAR_TAG_SBXO FT_MAKE_TAG( 's', 'b', 'x', 'o' )
+#define MVAR_TAG_SBXS FT_MAKE_TAG( 's', 'b', 'x', 's' )
+#define MVAR_TAG_SBYO FT_MAKE_TAG( 's', 'b', 'y', 'o' )
+#define MVAR_TAG_SBYS FT_MAKE_TAG( 's', 'b', 'y', 's' )
+#define MVAR_TAG_SPXO FT_MAKE_TAG( 's', 'p', 'x', 'o' )
+#define MVAR_TAG_SPXS FT_MAKE_TAG( 's', 'p', 'x', 's' )
+#define MVAR_TAG_SPYO FT_MAKE_TAG( 's', 'p', 'y', 'o' )
+#define MVAR_TAG_SPYS FT_MAKE_TAG( 's', 'p', 'y', 's' )
+#define MVAR_TAG_STRO FT_MAKE_TAG( 's', 't', 'r', 'o' )
+#define MVAR_TAG_STRS FT_MAKE_TAG( 's', 't', 'r', 's' )
+#define MVAR_TAG_UNDO FT_MAKE_TAG( 'u', 'n', 'd', 'o' )
+#define MVAR_TAG_UNDS FT_MAKE_TAG( 'u', 'n', 'd', 's' )
+#define MVAR_TAG_VASC FT_MAKE_TAG( 'v', 'a', 's', 'c' )
+#define MVAR_TAG_VCOF FT_MAKE_TAG( 'v', 'c', 'o', 'f' )
+#define MVAR_TAG_VCRN FT_MAKE_TAG( 'v', 'c', 'r', 'n' )
+#define MVAR_TAG_VCRS FT_MAKE_TAG( 'v', 'c', 'r', 's' )
+#define MVAR_TAG_VDSC FT_MAKE_TAG( 'v', 'd', 's', 'c' )
+#define MVAR_TAG_VLGP FT_MAKE_TAG( 'v', 'l', 'g', 'p' )
+#define MVAR_TAG_XHGT FT_MAKE_TAG( 'x', 'h', 'g', 't' )
+
+
+ typedef struct GX_ValueRec_
+ {
+ FT_ULong tag;
+ FT_UShort outerIndex;
+ FT_UShort innerIndex;
+
+ FT_Short unmodified; /* values are either FT_Short or FT_UShort */
+
+ } GX_ValueRec, *GX_Value;
+
+
+ /*************************************************************************/
+ /* */
+ /* <Struct> */
+ /* GX_MVarTableRec */
+ /* */
+ /* <Description> */
+ /* Data from the `MVAR' table. */
+ /* */
+ typedef struct GX_MVarTableRec_
+ {
+ FT_UShort valueCount;
+
+ GX_ItemVarStoreRec itemStore; /* Item Variation Store */
+ GX_Value values; /* Value Records */
+
+ } GX_MVarTableRec, *GX_MVarTable;
+
+
/*************************************************************************/
/* */
/* <Struct> */
@@ -68,32 +216,122 @@
/* */
/* <Description> */
/* Data for interpolating a font from a distortable font specified */
- /* by the GX *var tables ([fgca]var). */
+ /* by the GX *var tables ([fgcahvm]var). */
/* */
/* <Fields> */
- /* num_axis :: The number of axes along which interpolation */
- /* may happen */
+ /* num_axis :: */
+ /* The number of axes along which interpolation may happen. */
/* */
- /* normalizedcoords :: A normalized value (between [-1,1]) indicating */
- /* the contribution along each axis to the final */
- /* interpolated font. */
+ /* coords :: */
+ /* An array of design coordinates (in user space) indicating the */
+ /* contribution along each axis to the final interpolated font. */
+ /* `normalizedcoords' holds the same values. */
+ /* */
+ /* normalizedcoords :: */
+ /* An array of normalized values (between [-1,1]) indicating the */
+ /* contribution along each axis to the final interpolated font. */
+ /* `coords' holds the same values. */
+ /* */
+ /* mmvar :: */
+ /* Data from the `fvar' table. */
+ /* */
+ /* mmvar_len :: */
+ /* The length of the `mmvar' structure. */
+ /* */
+ /* normalized_stylecoords :: */
+ /* A two-dimensional array that holds the named instance data from */
+ /* `mmvar' as normalized values. */
+ /* */
+ /* avar_loaded :: */
+ /* A Boolean; if set, FreeType tried to load (and parse) the `avar' */
+ /* table. */
+ /* */
+ /* avar_segment :: */
+ /* Data from the `avar' table. */
+ /* */
+ /* hvar_loaded :: */
+ /* A Boolean; if set, FreeType tried to load (and parse) the `hvar' */
+ /* table. */
+ /* */
+ /* hvar_checked :: */
+ /* A Boolean; if set, FreeType successfully loaded and parsed the */
+ /* `hvar' table. */
+ /* */
+ /* hvar_error :: */
+ /* If loading and parsing of the `hvar' table failed, this field */
+ /* holds the corresponding error code. */
+ /* */
+ /* hvar_table :: */
+ /* Data from the `hvar' table. */
+ /* */
+ /* vvar_loaded :: */
+ /* A Boolean; if set, FreeType tried to load (and parse) the `vvar' */
+ /* table. */
+ /* */
+ /* vvar_checked :: */
+ /* A Boolean; if set, FreeType successfully loaded and parsed the */
+ /* `vvar' table. */
+ /* */
+ /* vvar_error :: */
+ /* If loading and parsing of the `vvar' table failed, this field */
+ /* holds the corresponding error code. */
+ /* */
+ /* vvar_table :: */
+ /* Data from the `vvar' table. */
+ /* */
+ /* mvar_table :: */
+ /* Data from the `mvar' table. */
+ /* */
+ /* tuplecount :: */
+ /* The number of shared tuples in the `gvar' table. */
+ /* */
+ /* tuplecoords :: */
+ /* A two-dimensional array that holds the shared tuple coordinates */
+ /* in the `gvar' table. */
+ /* */
+ /* gv_glyphcnt :: */
+ /* The number of glyphs handled in the `gvar' table. */
+ /* */
+ /* glyphoffsets :: */
+ /* Offsets into the glyph variation data array. */
+ /* */
+ /* gvar_size :: */
+ /* The size of the `gvar' table. */
/* */
typedef struct GX_BlendRec_
{
FT_UInt num_axis;
+ FT_Fixed* coords;
FT_Fixed* normalizedcoords;
FT_MM_Var* mmvar;
FT_Offset mmvar_len;
- FT_Bool avar_checked;
- GX_AVarSegment avar_segment;
+ FT_Fixed* normalized_stylecoords;
+ /* normalized_stylecoords[num_namedstyles][num_axis] */
- FT_UInt tuplecount; /* shared tuples in `gvar' */
- FT_Fixed* tuplecoords; /* tuplecoords[tuplecount][num_axis] */
+ FT_Bool avar_loaded;
+ GX_AVarSegment avar_segment; /* avar_segment[num_axis] */
+
+ FT_Bool hvar_loaded;
+ FT_Bool hvar_checked;
+ FT_Error hvar_error;
+ GX_HVVarTable hvar_table;
+
+ FT_Bool vvar_loaded;
+ FT_Bool vvar_checked;
+ FT_Error vvar_error;
+ GX_HVVarTable vvar_table;
+
+ GX_MVarTable mvar_table;
+
+ FT_UInt tuplecount;
+ FT_Fixed* tuplecoords; /* tuplecoords[tuplecount][num_axis] */
FT_UInt gv_glyphcnt;
- FT_ULong* glyphoffsets;
+ FT_ULong* glyphoffsets; /* glyphoffsets[gv_glyphcnt + 1] */
+
+ FT_ULong gvar_size;
} GX_BlendRec;
@@ -147,6 +385,11 @@
FT_Fixed* coords );
FT_LOCAL( FT_Error )
+ TT_Get_MM_Blend( TT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+ FT_LOCAL( FT_Error )
TT_Set_Var_Design( TT_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
@@ -155,6 +398,14 @@
TT_Get_MM_Var( TT_Face face,
FT_MM_Var* *master );
+ FT_LOCAL( FT_Error )
+ TT_Get_Var_Design( TT_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+ FT_LOCAL( FT_Error )
+ TT_Set_Named_Instance( TT_Face face,
+ FT_UInt instance_index );
FT_LOCAL( FT_Error )
tt_face_vary_cvt( TT_Face face,
@@ -167,16 +418,36 @@
FT_Outline* outline,
FT_UInt n_points );
+ FT_LOCAL( FT_Error )
+ tt_hadvance_adjust( TT_Face face,
+ FT_UInt gindex,
+ FT_Int *adelta );
+
+ FT_LOCAL( FT_Error )
+ tt_vadvance_adjust( TT_Face face,
+ FT_UInt gindex,
+ FT_Int *adelta );
FT_LOCAL( void )
- tt_done_blend( FT_Memory memory,
- GX_Blend blend );
+ tt_apply_mvar( TT_Face face );
+
+ FT_LOCAL( FT_Error )
+ tt_get_var_blend( TT_Face face,
+ FT_UInt *num_coords,
+ FT_Fixed* *coords,
+ FT_Fixed* *normalizedcoords,
+ FT_MM_Var* *mm_var );
+
+ FT_LOCAL( void )
+ tt_done_blend( TT_Face face );
+
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
FT_END_HEADER
-#endif /* __TTGXVAR_H__ */
+#endif /* TTGXVAR_H_ */
/* END */
diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c
index 089f604..da9b595 100644
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -4,7 +4,7 @@
/* */
/* TrueType bytecode interpreter (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -25,11 +25,15 @@
#include FT_INTERNAL_CALC_H
#include FT_TRIGONOMETRY_H
#include FT_SYSTEM_H
-#include FT_TRUETYPE_DRIVER_H
+#include FT_DRIVER_H
+#include FT_MULTIPLE_MASTERS_H
#include "ttinterp.h"
#include "tterrors.h"
#include "ttsubpix.h"
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#include "ttgxvar.h"
+#endif
#ifdef TT_USE_BYTECODE_INTERPRETER
@@ -45,25 +49,31 @@
#define FT_COMPONENT trace_ttinterp
- /*************************************************************************/
- /* */
- /* In order to detect infinite loops in the code, we set up a counter */
- /* within the run loop. A single stroke of interpretation is now */
- /* limited to a maximum number of opcodes defined below. */
- /* */
-#define MAX_RUNNABLE_OPCODES 1000000L
+#define NO_SUBPIXEL_HINTING \
+ ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \
+ TT_INTERPRETER_VERSION_35 )
-
-#define SUBPIXEL_HINTING \
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+#define SUBPIXEL_HINTING_INFINALITY \
( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \
TT_INTERPRETER_VERSION_38 )
+#endif
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+#define SUBPIXEL_HINTING_MINIMAL \
+ ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \
+ TT_INTERPRETER_VERSION_40 )
+#endif
-#define PROJECT( v1, v2 ) \
- exc->func_project( exc, (v1)->x - (v2)->x, (v1)->y - (v2)->y )
+#define PROJECT( v1, v2 ) \
+ exc->func_project( exc, \
+ SUB_LONG( (v1)->x, (v2)->x ), \
+ SUB_LONG( (v1)->y, (v2)->y ) )
-#define DUALPROJ( v1, v2 ) \
- exc->func_dualproj( exc, (v1)->x - (v2)->x, (v1)->y - (v2)->y )
+#define DUALPROJ( v1, v2 ) \
+ exc->func_dualproj( exc, \
+ SUB_LONG( (v1)->x, (v2)->x ), \
+ SUB_LONG( (v1)->y, (v2)->y ) )
#define FAST_PROJECT( v ) \
exc->func_project( exc, (v)->x, (v)->y )
@@ -74,47 +84,18 @@
/*************************************************************************/
/* */
- /* Instruction dispatch function, as used by the interpreter. */
- /* */
- typedef void (*TInstruction_Function)( TT_ExecContext exc,
- FT_Long* args );
-
-
- /*************************************************************************/
- /* */
/* Two simple bounds-checking macros. */
/* */
#define BOUNDS( x, n ) ( (FT_UInt)(x) >= (FT_UInt)(n) )
#define BOUNDSL( x, n ) ( (FT_ULong)(x) >= (FT_ULong)(n) )
- /*************************************************************************/
- /* */
- /* This macro computes (a*2^14)/b and complements TT_MulFix14. */
- /* */
-#define TT_DivFix14( a, b ) FT_DivFix( a, (b) << 2 )
-
-
#undef SUCCESS
#define SUCCESS 0
#undef FAILURE
#define FAILURE 1
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define GUESS_VECTOR( V ) \
- do \
- { \
- if ( exc->face->unpatented_hinting ) \
- { \
- exc->GS.V.x = (FT_F2Dot14)( exc->GS.both_x_axis ? 0x4000 : 0 ); \
- exc->GS.V.y = (FT_F2Dot14)( exc->GS.both_x_axis ? 0 : 0x4000 ); \
- } \
- } while (0)
-#else
-#define GUESS_VECTOR( V ) do { } while (0)
-#endif
-
/*************************************************************************/
/* */
@@ -152,7 +133,7 @@
coderange = &exec->codeRangeTable[range - 1];
- FT_ASSERT( coderange->base != NULL );
+ FT_ASSERT( coderange->base );
/* NOTE: Because the last instruction of a program may be a CALL */
/* which will return to the first byte *after* the code */
@@ -316,8 +297,8 @@
exec->stackSize = 0;
exec->glyphSize = 0;
- exec->stack = NULL;
- exec->glyphIns = NULL;
+ exec->stack = NULL;
+ exec->glyphIns = NULL;
exec->face = NULL;
exec->size = NULL;
@@ -423,8 +404,9 @@
exec->maxIDefs = size->max_instruction_defs;
exec->FDefs = size->function_defs;
exec->IDefs = size->instruction_defs;
+ exec->pointSize = size->point_size;
exec->tt_metrics = size->ttmetrics;
- exec->metrics = size->metrics;
+ exec->metrics = *size->metrics;
exec->maxFunc = size->max_func;
exec->maxIns = size->max_ins;
@@ -445,7 +427,7 @@
/* In case of multi-threading it can happen that the old size object */
/* no longer exists, thus we must clear all glyph zone references. */
- ft_memset( &exec->zp0, 0, sizeof ( exec->zp0 ) );
+ FT_ZERO( &exec->zp0 );
exec->zp1 = exec->zp0;
exec->zp2 = exec->zp0;
}
@@ -563,10 +545,6 @@
exec->GS.freeVector = exec->GS.projVector;
exec->GS.dualVector = exec->GS.projVector;
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- exec->GS.both_x_axis = TRUE;
-#endif
-
exec->GS.round_state = 1;
exec->GS.loop = 1;
@@ -593,10 +571,6 @@
{ 0x4000, 0 },
{ 0x4000, 0 },
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- TRUE,
-#endif
-
1, 64, 1,
TRUE, 68, 0, 0, 9, 3,
0, FALSE, 0, 1, 1, 1
@@ -716,17 +690,17 @@
/* IUP[0] */ PACK( 0, 0 ),
/* IUP[1] */ PACK( 0, 0 ),
- /* SHP[0] */ PACK( 0, 0 ),
- /* SHP[1] */ PACK( 0, 0 ),
+ /* SHP[0] */ PACK( 0, 0 ), /* loops */
+ /* SHP[1] */ PACK( 0, 0 ), /* loops */
/* SHC[0] */ PACK( 1, 0 ),
/* SHC[1] */ PACK( 1, 0 ),
/* SHZ[0] */ PACK( 1, 0 ),
/* SHZ[1] */ PACK( 1, 0 ),
- /* SHPIX */ PACK( 1, 0 ),
- /* IP */ PACK( 0, 0 ),
+ /* SHPIX */ PACK( 1, 0 ), /* loops */
+ /* IP */ PACK( 0, 0 ), /* loops */
/* MSIRP[0] */ PACK( 2, 0 ),
/* MSIRP[1] */ PACK( 2, 0 ),
- /* AlignRP */ PACK( 0, 0 ),
+ /* AlignRP */ PACK( 0, 0 ), /* loops */
/* RTDG */ PACK( 0, 0 ),
/* MIAP[0] */ PACK( 2, 0 ),
/* MIAP[1] */ PACK( 2, 0 ),
@@ -799,7 +773,7 @@
/* SANGW */ PACK( 1, 0 ),
/* AA */ PACK( 1, 0 ),
- /* FlipPT */ PACK( 0, 0 ),
+ /* FlipPT */ PACK( 0, 0 ), /* loops */
/* FlipRgON */ PACK( 2, 0 ),
/* FlipRgOFF */ PACK( 2, 0 ),
/* INS_$83 */ PACK( 0, 0 ),
@@ -817,8 +791,8 @@
/* INS_$8F */ PACK( 0, 0 ),
/* INS_$90 */ PACK( 0, 0 ),
- /* INS_$91 */ PACK( 0, 0 ),
- /* INS_$92 */ PACK( 0, 0 ),
+ /* GETVAR */ PACK( 0, 0 ), /* will be handled specially */
+ /* GETDATA */ PACK( 0, 1 ),
/* INS_$93 */ PACK( 0, 0 ),
/* INS_$94 */ PACK( 0, 0 ),
/* INS_$95 */ PACK( 0, 0 ),
@@ -1100,8 +1074,13 @@
"7 INS_$8F",
"7 INS_$90",
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ "6 GETVAR",
+ "7 GETDATA",
+#else
"7 INS_$91",
"7 INS_$92",
+#endif
"7 INS_$93",
"7 INS_$94",
"7 INS_$95",
@@ -1486,34 +1465,22 @@
{
if ( !exc->tt_metrics.ratio )
{
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( exc->face->unpatented_hinting )
- {
- if ( exc->GS.both_x_axis )
- exc->tt_metrics.ratio = exc->tt_metrics.x_ratio;
- else
- exc->tt_metrics.ratio = exc->tt_metrics.y_ratio;
- }
+ if ( exc->GS.projVector.y == 0 )
+ exc->tt_metrics.ratio = exc->tt_metrics.x_ratio;
+
+ else if ( exc->GS.projVector.x == 0 )
+ exc->tt_metrics.ratio = exc->tt_metrics.y_ratio;
+
else
-#endif
{
- if ( exc->GS.projVector.y == 0 )
- exc->tt_metrics.ratio = exc->tt_metrics.x_ratio;
-
- else if ( exc->GS.projVector.x == 0 )
- exc->tt_metrics.ratio = exc->tt_metrics.y_ratio;
-
- else
- {
- FT_F26Dot6 x, y;
+ FT_F26Dot6 x, y;
- x = TT_MulFix14( exc->tt_metrics.x_ratio,
- exc->GS.projVector.x );
- y = TT_MulFix14( exc->tt_metrics.y_ratio,
- exc->GS.projVector.y );
- exc->tt_metrics.ratio = FT_Hypot( x, y );
- }
+ x = TT_MulFix14( exc->tt_metrics.x_ratio,
+ exc->GS.projVector.x );
+ y = TT_MulFix14( exc->tt_metrics.y_ratio,
+ exc->GS.projVector.y );
+ exc->tt_metrics.ratio = FT_Hypot( x, y );
}
}
return exc->tt_metrics.ratio;
@@ -1611,7 +1578,7 @@
static FT_Short
GetShortIns( TT_ExecContext exc )
{
- /* Reading a byte stream so there is no endianess (DaveP) */
+ /* Reading a byte stream so there is no endianness (DaveP) */
exc->IP += 2;
return (FT_Short)( ( exc->code[exc->IP - 2] << 8 ) +
exc->code[exc->IP - 1] );
@@ -1650,7 +1617,7 @@
range = &exc->codeRangeTable[aRange - 1];
- if ( range->base == NULL ) /* invalid coderange */
+ if ( !range->base ) /* invalid coderange */
{
exc->error = FT_THROW( Invalid_CodeRange );
return FAILURE;
@@ -1692,6 +1659,10 @@
/* <InOut> */
/* zone :: The affected glyph zone. */
/* */
+ /* <Note> */
+ /* See `ttinterp.h' for details on backward compatibility mode. */
+ /* `Touches' the point. */
+ /* */
static void
Direct_Move( TT_ExecContext exc,
TT_GlyphZone zone,
@@ -1701,20 +1672,38 @@
FT_F26Dot6 v;
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_ASSERT( !exc->face->unpatented_hinting );
-#endif
-
v = exc->GS.freeVector.x;
if ( v != 0 )
{
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( !SUBPIXEL_HINTING ||
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
( !exc->ignore_x_mode ||
( exc->sph_tweak_flags & SPH_TWEAK_ALLOW_X_DMOVE ) ) )
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- zone->cur[point].x += FT_MulDiv( distance, v, exc->F_dot_P );
+ zone->cur[point].x = ADD_LONG( zone->cur[point].x,
+ FT_MulDiv( distance,
+ v,
+ exc->F_dot_P ) );
+ else
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /* Exception to the post-IUP curfew: Allow the x component of */
+ /* diagonal moves, but only post-IUP. DejaVu tries to adjust */
+ /* diagonal stems like on `Z' and `z' post-IUP. */
+ if ( SUBPIXEL_HINTING_MINIMAL && !exc->backward_compatibility )
+ zone->cur[point].x = ADD_LONG( zone->cur[point].x,
+ FT_MulDiv( distance,
+ v,
+ exc->F_dot_P ) );
+ else
+#endif
+
+ if ( NO_SUBPIXEL_HINTING )
+ zone->cur[point].x = ADD_LONG( zone->cur[point].x,
+ FT_MulDiv( distance,
+ v,
+ exc->F_dot_P ) );
zone->tags[point] |= FT_CURVE_TAG_TOUCH_X;
}
@@ -1723,7 +1712,16 @@
if ( v != 0 )
{
- zone->cur[point].y += FT_MulDiv( distance, v, exc->F_dot_P );
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ if ( !( SUBPIXEL_HINTING_MINIMAL &&
+ exc->backward_compatibility &&
+ exc->iupx_called &&
+ exc->iupy_called ) )
+#endif
+ zone->cur[point].y = ADD_LONG( zone->cur[point].y,
+ FT_MulDiv( distance,
+ v,
+ exc->F_dot_P ) );
zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y;
}
@@ -1756,19 +1754,21 @@
FT_F26Dot6 v;
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_ASSERT( !exc->face->unpatented_hinting );
-#endif
-
v = exc->GS.freeVector.x;
if ( v != 0 )
- zone->org[point].x += FT_MulDiv( distance, v, exc->F_dot_P );
+ zone->org[point].x = ADD_LONG( zone->org[point].x,
+ FT_MulDiv( distance,
+ v,
+ exc->F_dot_P ) );
v = exc->GS.freeVector.y;
if ( v != 0 )
- zone->org[point].y += FT_MulDiv( distance, v, exc->F_dot_P );
+ zone->org[point].y = ADD_LONG( zone->org[point].y,
+ FT_MulDiv( distance,
+ v,
+ exc->F_dot_P ) );
}
@@ -1778,6 +1778,7 @@
/* */
/* The following versions are used whenever both vectors are both */
/* along one of the coordinate unit vectors, i.e. in 90% of the cases. */
+ /* See `ttinterp.h' for details on backward compatibility mode. */
/* */
/*************************************************************************/
@@ -1788,13 +1789,20 @@
FT_UShort point,
FT_F26Dot6 distance )
{
- FT_UNUSED( exc );
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY && !exc->ignore_x_mode )
+ zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance );
+ else
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( !SUBPIXEL_HINTING ||
- !exc->ignore_x_mode )
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- zone->cur[point].x += distance;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ if ( SUBPIXEL_HINTING_MINIMAL && !exc->backward_compatibility )
+ zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance );
+ else
+#endif
+
+ if ( NO_SUBPIXEL_HINTING )
+ zone->cur[point].x = ADD_LONG( zone->cur[point].x, distance );
zone->tags[point] |= FT_CURVE_TAG_TOUCH_X;
}
@@ -1808,8 +1816,14 @@
{
FT_UNUSED( exc );
- zone->cur[point].y += distance;
- zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ if ( !( SUBPIXEL_HINTING_MINIMAL &&
+ exc->backward_compatibility &&
+ exc->iupx_called && exc->iupy_called ) )
+#endif
+ zone->cur[point].y = ADD_LONG( zone->cur[point].y, distance );
+
+ zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y;
}
@@ -1831,7 +1845,7 @@
{
FT_UNUSED( exc );
- zone->org[point].x += distance;
+ zone->org[point].x = ADD_LONG( zone->org[point].x, distance );
}
@@ -1843,7 +1857,7 @@
{
FT_UNUSED( exc );
- zone->org[point].y += distance;
+ zone->org[point].y = ADD_LONG( zone->org[point].y, distance );
}
@@ -1881,13 +1895,13 @@
if ( distance >= 0 )
{
- val = distance + compensation;
+ val = ADD_LONG( distance, compensation );
if ( val < 0 )
val = 0;
}
else
{
- val = distance - compensation;
+ val = SUB_LONG( distance, compensation );
if ( val > 0 )
val = 0;
}
@@ -1923,13 +1937,14 @@
if ( distance >= 0 )
{
- val = FT_PIX_ROUND( distance + compensation );
+ val = FT_PIX_ROUND_LONG( ADD_LONG( distance, compensation ) );
if ( val < 0 )
val = 0;
}
else
{
- val = -FT_PIX_ROUND( compensation - distance );
+ val = NEG_LONG( FT_PIX_ROUND_LONG( SUB_LONG( compensation,
+ distance ) ) );
if ( val > 0 )
val = 0;
}
@@ -1966,13 +1981,16 @@
if ( distance >= 0 )
{
- val = FT_PIX_FLOOR( distance + compensation ) + 32;
+ val = ADD_LONG( FT_PIX_FLOOR( ADD_LONG( distance, compensation ) ),
+ 32 );
if ( val < 0 )
val = 32;
}
else
{
- val = -( FT_PIX_FLOOR( compensation - distance ) + 32 );
+ val = NEG_LONG( ADD_LONG( FT_PIX_FLOOR( SUB_LONG( compensation,
+ distance ) ),
+ 32 ) );
if ( val > 0 )
val = -32;
}
@@ -2009,13 +2027,13 @@
if ( distance >= 0 )
{
- val = FT_PIX_FLOOR( distance + compensation );
+ val = FT_PIX_FLOOR( ADD_LONG( distance, compensation ) );
if ( val < 0 )
val = 0;
}
else
{
- val = -FT_PIX_FLOOR( compensation - distance );
+ val = NEG_LONG( FT_PIX_FLOOR( SUB_LONG( compensation, distance ) ) );
if ( val > 0 )
val = 0;
}
@@ -2052,13 +2070,14 @@
if ( distance >= 0 )
{
- val = FT_PIX_CEIL( distance + compensation );
+ val = FT_PIX_CEIL_LONG( ADD_LONG( distance, compensation ) );
if ( val < 0 )
val = 0;
}
else
{
- val = -FT_PIX_CEIL( compensation - distance );
+ val = NEG_LONG( FT_PIX_CEIL_LONG( SUB_LONG( compensation,
+ distance ) ) );
if ( val > 0 )
val = 0;
}
@@ -2088,20 +2107,21 @@
FT_F26Dot6 distance,
FT_F26Dot6 compensation )
{
- FT_F26Dot6 val;
+ FT_F26Dot6 val;
FT_UNUSED( exc );
if ( distance >= 0 )
{
- val = FT_PAD_ROUND( distance + compensation, 32 );
+ val = FT_PAD_ROUND_LONG( ADD_LONG( distance, compensation ), 32 );
if ( val < 0 )
val = 0;
}
else
{
- val = -FT_PAD_ROUND( compensation - distance, 32 );
+ val = NEG_LONG( FT_PAD_ROUND_LONG( SUB_LONG( compensation, distance ),
+ 32 ) );
if ( val > 0 )
val = 0;
}
@@ -2127,7 +2147,7 @@
/* Rounded distance. */
/* */
/* <Note> */
- /* The TrueType specification says very few about the relationship */
+ /* The TrueType specification says very little about the relationship */
/* between rounding and engine compensation. However, it seems from */
/* the description of super round that we should add the compensation */
/* before rounding. */
@@ -2142,17 +2162,19 @@
if ( distance >= 0 )
{
- val = ( distance - exc->phase + exc->threshold + compensation ) &
+ val = ADD_LONG( distance,
+ exc->threshold - exc->phase + compensation ) &
-exc->period;
- val += exc->phase;
+ val = ADD_LONG( val, exc->phase );
if ( val < 0 )
val = exc->phase;
}
else
{
- val = -( ( exc->threshold - exc->phase - distance + compensation ) &
- -exc->period );
- val -= exc->phase;
+ val = NEG_LONG( SUB_LONG( exc->threshold - exc->phase + compensation,
+ distance ) &
+ -exc->period );
+ val = SUB_LONG( val, exc->phase );
if ( val > 0 )
val = -exc->phase;
}
@@ -2191,17 +2213,19 @@
if ( distance >= 0 )
{
- val = ( ( distance - exc->phase + exc->threshold + compensation ) /
+ val = ( ADD_LONG( distance,
+ exc->threshold - exc->phase + compensation ) /
exc->period ) * exc->period;
- val += exc->phase;
+ val = ADD_LONG( val, exc->phase );
if ( val < 0 )
val = exc->phase;
}
else
{
- val = -( ( ( exc->threshold - exc->phase - distance + compensation ) /
- exc->period ) * exc->period );
- val -= exc->phase;
+ val = NEG_LONG( ( SUB_LONG( exc->threshold - exc->phase + compensation,
+ distance ) /
+ exc->period ) * exc->period );
+ val = SUB_LONG( val, exc->phase );
if ( val > 0 )
val = -exc->phase;
}
@@ -2352,10 +2376,6 @@
FT_Pos dx,
FT_Pos dy )
{
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_ASSERT( !exc->face->unpatented_hinting );
-#endif
-
return TT_DotFix14( dx, dy,
exc->GS.projVector.x,
exc->GS.projVector.y );
@@ -2457,51 +2477,6 @@
static void
Compute_Funcs( TT_ExecContext exc )
{
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( exc->face->unpatented_hinting )
- {
- /* If both vectors point rightwards along the x axis, set */
- /* `both-x-axis' true, otherwise set it false. The x values only */
- /* need be tested because the vector has been normalised to a unit */
- /* vector of length 0x4000 = unity. */
- exc->GS.both_x_axis = (FT_Bool)( exc->GS.projVector.x == 0x4000 &&
- exc->GS.freeVector.x == 0x4000 );
-
- /* Throw away projection and freedom vector information */
- /* because the patents don't allow them to be stored. */
- /* The relevant US Patents are 5155805 and 5325479. */
- exc->GS.projVector.x = 0;
- exc->GS.projVector.y = 0;
- exc->GS.freeVector.x = 0;
- exc->GS.freeVector.y = 0;
-
- if ( exc->GS.both_x_axis )
- {
- exc->func_project = Project_x;
- exc->func_move = Direct_Move_X;
- exc->func_move_orig = Direct_Move_Orig_X;
- }
- else
- {
- exc->func_project = Project_y;
- exc->func_move = Direct_Move_Y;
- exc->func_move_orig = Direct_Move_Orig_Y;
- }
-
- if ( exc->GS.dualVector.x == 0x4000 )
- exc->func_dualproj = Project_x;
- else if ( exc->GS.dualVector.y == 0x4000 )
- exc->func_dualproj = Project_y;
- else
- exc->func_dualproj = Dual_Project;
-
- /* Force recalculation of cached aspect ratio */
- exc->tt_metrics.ratio = 0;
-
- return;
- }
-#endif /* TT_CONFIG_OPTION_UNPATENTED_HINTING */
-
if ( exc->GS.freeVector.x == 0x4000 )
exc->F_dot_P = exc->GS.projVector.x;
else if ( exc->GS.freeVector.y == 0x4000 )
@@ -2580,26 +2555,23 @@
FT_F26Dot6 Vy,
FT_UnitVector* R )
{
- FT_F26Dot6 W;
+ FT_Vector V;
- if ( FT_ABS( Vx ) < 0x4000L && FT_ABS( Vy ) < 0x4000L )
+ if ( Vx == 0 && Vy == 0 )
{
- if ( Vx == 0 && Vy == 0 )
- {
- /* XXX: UNDOCUMENTED! It seems that it is possible to try */
- /* to normalize the vector (0,0). Return immediately. */
- return SUCCESS;
- }
-
- Vx *= 0x4000;
- Vy *= 0x4000;
+ /* XXX: UNDOCUMENTED! It seems that it is possible to try */
+ /* to normalize the vector (0,0). Return immediately. */
+ return SUCCESS;
}
- W = FT_Hypot( Vx, Vy );
+ V.x = Vx;
+ V.y = Vy;
- R->x = (FT_F2Dot14)TT_DivFix14( Vx, W );
- R->y = (FT_F2Dot14)TT_DivFix14( Vy, W );
+ FT_Vector_NormLen( &V );
+
+ R->x = (FT_F2Dot14)( V.x / 4 );
+ R->y = (FT_F2Dot14)( V.y / 4 );
return SUCCESS;
}
@@ -2644,13 +2616,20 @@
Ins_MPS( TT_ExecContext exc,
FT_Long* args )
{
- /* Note: The point size should be irrelevant in a given font program; */
- /* we thus decide to return only the PPEM value. */
-#if 0
- args[0] = exc->metrics.pointSize;
-#else
- args[0] = exc->func_cur_ppem( exc );
-#endif
+ if ( NO_SUBPIXEL_HINTING )
+ {
+ /* Microsoft's GDI bytecode interpreter always returns value 12; */
+ /* we return the current PPEM value instead. */
+ args[0] = exc->func_cur_ppem( exc );
+ }
+ else
+ {
+ /* A possible practical application of the MPS instruction is to */
+ /* implement optical scaling and similar features, which should be */
+ /* based on perceptual attributes, thus independent of the */
+ /* resolution. */
+ args[0] = exc->pointSize;
+ }
}
@@ -2879,7 +2858,7 @@
static void
Ins_ADD( FT_Long* args )
{
- args[0] += args[1];
+ args[0] = ADD_LONG( args[0], args[1] );
}
@@ -2892,7 +2871,7 @@
static void
Ins_SUB( FT_Long* args )
{
- args[0] -= args[1];
+ args[0] = SUB_LONG( args[0], args[1] );
}
@@ -2935,7 +2914,8 @@
static void
Ins_ABS( FT_Long* args )
{
- args[0] = FT_ABS( args[0] );
+ if ( args[0] < 0 )
+ args[0] = NEG_LONG( args[0] );
}
@@ -2943,12 +2923,12 @@
/* */
/* NEG[]: NEGate */
/* Opcode range: 0x65 */
- /* Stack: f26.6 --> f26.6 */
+ /* Stack: f26.6 --> f26.6 */
/* */
static void
Ins_NEG( FT_Long* args )
{
- args[0] = -args[0];
+ args[0] = NEG_LONG( args[0] );
}
@@ -2974,7 +2954,7 @@
static void
Ins_CEILING( FT_Long* args )
{
- args[0] = FT_PIX_CEIL( args[0] );
+ args[0] = FT_PIX_CEIL_LONG( args[0] );
}
@@ -2988,8 +2968,6 @@
Ins_RS( TT_ExecContext exc,
FT_Long* args )
{
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
-
FT_ULong I = (FT_ULong)args[0];
@@ -3002,9 +2980,10 @@
}
else
{
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/* subpixel hinting - avoid Typeman Dstroke and */
/* IStroke and Vacuform rounds */
- if ( SUBPIXEL_HINTING &&
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
( ( I == 24 &&
( exc->face->sph_found_func_flags &
@@ -3019,25 +2998,9 @@
exc->iup_called ) ) )
args[0] = 0;
else
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
args[0] = exc->storage[I];
}
-
-#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
-
- FT_ULong I = (FT_ULong)args[0];
-
-
- if ( BOUNDSL( I, exc->storeSize ) )
- {
- if ( exc->pedantic_hinting )
- ARRAY_BOUND_ERROR;
- else
- args[0] = 0;
- }
- else
- args[0] = exc->storage[I];
-
-#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
}
@@ -3200,7 +3163,7 @@
/*************************************************************************/
/* */
/* MAX[]: MAXimum */
- /* Opcode range: 0x68 */
+ /* Opcode range: 0x8B */
/* Stack: int32? int32? --> int32 */
/* */
static void
@@ -3214,7 +3177,7 @@
/*************************************************************************/
/* */
/* MIN[]: MINimum */
- /* Opcode range: 0x69 */
+ /* Opcode range: 0x8C */
/* Stack: int32? int32? --> int32 */
/* */
static void
@@ -3326,7 +3289,10 @@
if ( args[0] < 0 )
exc->error = FT_THROW( Bad_Argument );
else
- exc->GS.loop = args[0];
+ {
+ /* we heuristically limit the number of loops to 16 bits */
+ exc->GS.loop = args[0] > 0xFFFFL ? 0xFFFFL : args[0];
+ }
}
@@ -3458,13 +3424,27 @@
FT_Long* args )
{
if ( args[0] == 0 && exc->args == 0 )
+ {
exc->error = FT_THROW( Bad_Argument );
+ return;
+ }
+
exc->IP += args[0];
if ( exc->IP < 0 ||
( exc->callTop > 0 &&
exc->IP > exc->callStack[exc->callTop - 1].Def->end ) )
+ {
exc->error = FT_THROW( Bad_Argument );
+ return;
+ }
+
exc->step_ins = FALSE;
+
+ if ( args[0] < 0 )
+ {
+ if ( ++exc->neg_jump_counter > exc->neg_jump_counter_max )
+ exc->error = FT_THROW( Execution_Too_Long );
+ }
}
@@ -3519,7 +3499,7 @@
TT_DefRecord* rec;
TT_DefRecord* limit;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/* arguments to opcodes are skipped by `SKIP_Code' */
FT_Byte opcode_pattern[9][12] = {
/* #0 inline delta function 1 */
@@ -3617,9 +3597,16 @@
FT_UShort opcode_pointer[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
FT_UShort opcode_size[9] = { 12, 8, 8, 6, 7, 4, 5, 4, 2 };
FT_UShort i;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+ /* FDEF is only allowed in `prep' or `fpgm' */
+ if ( exc->curRange == tt_coderange_glyph )
+ {
+ exc->error = FT_THROW( DEF_In_Glyf_Bytecode );
+ return;
+ }
+
/* some font programs are broken enough to redefine functions! */
/* We will then parse the current table. */
@@ -3662,7 +3649,7 @@
if ( n > exc->maxFunc )
exc->maxFunc = (FT_UInt16)n;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/* We don't know for sure these are typeman functions, */
/* however they are only active when RS 22 is called */
if ( n >= 64 && n <= 66 )
@@ -3675,9 +3662,9 @@
while ( SkipCode( exc ) == SUCCESS )
{
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING )
+ if ( SUBPIXEL_HINTING_INFINALITY )
{
for ( i = 0; i < opcode_patterns; i++ )
{
@@ -3784,7 +3771,7 @@
( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_2 ) );
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
switch ( exc->opcode )
{
@@ -3813,9 +3800,9 @@
TT_CallRec* pRec;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
exc->sph_in_func_flags = 0x0000;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
if ( exc->callTop <= 0 ) /* We encountered an ENDF without a call */
{
@@ -3901,8 +3888,8 @@
if ( !def->active )
goto Fail;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
( ( exc->iup_called &&
( exc->sph_tweak_flags & SPH_TWEAK_NO_CALL_AFTER_IUP ) ) ||
@@ -3910,7 +3897,7 @@
goto Fail;
else
exc->sph_in_func_flags = def->sph_fdef_flags;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
/* check the call stack */
if ( exc->callTop >= exc->callSize )
@@ -3989,14 +3976,14 @@
if ( !def->active )
goto Fail;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) )
goto Fail;
else
exc->sph_in_func_flags = def->sph_fdef_flags;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
/* check stack */
if ( exc->callTop >= exc->callSize )
@@ -4019,6 +4006,10 @@
Ins_Goto_CodeRange( exc, def->range, def->start );
exc->step_ins = FALSE;
+
+ exc->loopcall_counter += (FT_ULong)args[0];
+ if ( exc->loopcall_counter > exc->loopcall_counter_max )
+ exc->error = FT_THROW( Execution_Too_Long );
}
return;
@@ -4042,6 +4033,13 @@
TT_DefRecord* limit;
+ /* we enable IDEF only in `prep' or `fpgm' */
+ if ( exc->curRange == tt_coderange_glyph )
+ {
+ exc->error = FT_THROW( DEF_In_Glyf_Bytecode );
+ return;
+ }
+
/* First of all, look for the same function in our table */
def = exc->IDefs;
@@ -4089,6 +4087,7 @@
exc->error = FT_THROW( Nested_DEFS );
return;
case 0x2D: /* ENDF */
+ def->end = exc->IP;
return;
}
}
@@ -4248,8 +4247,8 @@
p1 = exc->zp1.cur + aIdx2;
p2 = exc->zp2.cur + aIdx1;
- A = p1->x - p2->x;
- B = p1->y - p2->y;
+ A = SUB_LONG( p1->x, p2->x );
+ B = SUB_LONG( p1->y, p2->y );
/* If p1 == p2, SPvTL and SFvTL behave the same as */
/* SPvTCA[X] and SFvTCA[X], respectively. */
@@ -4264,9 +4263,9 @@
if ( ( opcode & 1 ) != 0 )
{
- C = B; /* counter clockwise rotation */
- B = A;
- A = -C;
+ C = B; /* counter clockwise rotation */
+ B = A;
+ A = NEG_LONG( C );
}
Normalize( A, B, Vec );
@@ -4308,16 +4307,12 @@
exc->GS.dualVector.x = AA;
exc->GS.dualVector.y = BB;
}
- else
- GUESS_VECTOR( projVector );
if ( ( opcode & 2 ) == 0 )
{
exc->GS.freeVector.x = AA;
exc->GS.freeVector.y = BB;
}
- else
- GUESS_VECTOR( freeVector );
Compute_Funcs( exc );
}
@@ -4339,7 +4334,6 @@
&exc->GS.projVector ) == SUCCESS )
{
exc->GS.dualVector = exc->GS.projVector;
- GUESS_VECTOR( freeVector );
Compute_Funcs( exc );
}
}
@@ -4360,7 +4354,6 @@
(FT_UShort)args[0],
&exc->GS.freeVector ) == SUCCESS )
{
- GUESS_VECTOR( projVector );
Compute_Funcs( exc );
}
}
@@ -4375,7 +4368,6 @@
static void
Ins_SFVTPV( TT_ExecContext exc )
{
- GUESS_VECTOR( projVector );
exc->GS.freeVector = exc->GS.projVector;
Compute_Funcs( exc );
}
@@ -4404,7 +4396,6 @@
Normalize( X, Y, &exc->GS.projVector );
exc->GS.dualVector = exc->GS.projVector;
- GUESS_VECTOR( freeVector );
Compute_Funcs( exc );
}
@@ -4430,7 +4421,6 @@
X = S;
Normalize( X, Y, &exc->GS.freeVector );
- GUESS_VECTOR( projVector );
Compute_Funcs( exc );
}
@@ -4445,21 +4435,8 @@
Ins_GPV( TT_ExecContext exc,
FT_Long* args )
{
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( exc->face->unpatented_hinting )
- {
- args[0] = exc->GS.both_x_axis ? 0x4000 : 0;
- args[1] = exc->GS.both_x_axis ? 0 : 0x4000;
- }
- else
- {
- args[0] = exc->GS.projVector.x;
- args[1] = exc->GS.projVector.y;
- }
-#else
args[0] = exc->GS.projVector.x;
args[1] = exc->GS.projVector.y;
-#endif
}
@@ -4473,21 +4450,8 @@
Ins_GFV( TT_ExecContext exc,
FT_Long* args )
{
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( exc->face->unpatented_hinting )
- {
- args[0] = exc->GS.both_x_axis ? 0x4000 : 0;
- args[1] = exc->GS.both_x_axis ? 0 : 0x4000;
- }
- else
- {
- args[0] = exc->GS.freeVector.x;
- args[1] = exc->GS.freeVector.y;
- }
-#else
args[0] = exc->GS.freeVector.x;
args[1] = exc->GS.freeVector.y;
-#endif
}
@@ -4607,7 +4571,7 @@
/* */
/* FLIPOFF[]: Set auto-FLIP to OFF */
/* Opcode range: 0x4E */
- /* Stack: --> */
+ /* Stack: --> */
/* */
static void
Ins_FLIPOFF( TT_ExecContext exc )
@@ -4842,7 +4806,7 @@
K = FAST_PROJECT( &exc->zp2.cur[L] );
- exc->func_move( exc, &exc->zp2, L, args[1] - K );
+ exc->func_move( exc, &exc->zp2, L, SUB_LONG( args[1], K ) );
/* UNDOCUMENTED! The MS rasterizer does that with */
/* twilight points (confirmed by Greg Hitchcock) */
@@ -4926,13 +4890,13 @@
}
}
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/* Disable Type 2 Vacuform Rounds - e.g. Arial Narrow */
- if ( SUBPIXEL_HINTING &&
- exc->ignore_x_mode &&
- FT_ABS( D ) == 64 )
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode &&
+ FT_ABS( D ) == 64 )
D += 1;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
args[0] = D;
}
@@ -4966,12 +4930,12 @@
}
{
- FT_Vector* v1 = exc->zp1.org + p2;
- FT_Vector* v2 = exc->zp2.org + p1;
+ FT_Vector* v1 = exc->zp1.org + p2;
+ FT_Vector* v2 = exc->zp2.org + p1;
- A = v1->x - v2->x;
- B = v1->y - v2->y;
+ A = SUB_LONG( v1->x, v2->x );
+ B = SUB_LONG( v1->y, v2->y );
/* If v1 == v2, SDPvTL behaves the same as */
/* SVTCA[X], respectively. */
@@ -4987,9 +4951,9 @@
if ( ( opcode & 1 ) != 0 )
{
- C = B; /* counter clockwise rotation */
- B = A;
- A = -C;
+ C = B; /* counter clockwise rotation */
+ B = A;
+ A = NEG_LONG( C );
}
Normalize( A, B, &exc->GS.dualVector );
@@ -4999,8 +4963,8 @@
FT_Vector* v2 = exc->zp2.cur + p1;
- A = v1->x - v2->x;
- B = v1->y - v2->y;
+ A = SUB_LONG( v1->x, v2->x );
+ B = SUB_LONG( v1->y, v2->y );
if ( A == 0 && B == 0 )
{
@@ -5011,13 +4975,12 @@
if ( ( opcode & 1 ) != 0 )
{
- C = B; /* counter clockwise rotation */
- B = A;
- A = -C;
+ C = B; /* counter clockwise rotation */
+ B = A;
+ A = NEG_LONG( C );
}
Normalize( A, B, &exc->GS.projVector );
- GUESS_VECTOR( freeVector );
Compute_Funcs( exc );
}
@@ -5157,11 +5120,11 @@
Ins_INSTCTRL( TT_ExecContext exc,
FT_Long* args )
{
- FT_Long K, L, Kf;
+ FT_ULong K, L, Kf;
- K = args[1];
- L = args[0];
+ K = (FT_ULong)args[1];
+ L = (FT_ULong)args[0];
/* selector values cannot be `OR'ed; */
/* they are indices starting with index 1, not flags */
@@ -5189,12 +5152,23 @@
exc->GS.instruct_control &= ~(FT_Byte)Kf;
exc->GS.instruct_control |= (FT_Byte)L;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- /* INSTCTRL modifying flag 3 also has an effect */
- /* outside of the CVT program */
if ( K == 3 )
- exc->ignore_x_mode = FT_BOOL( L == 4 );
+ {
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ /* INSTCTRL modifying flag 3 also has an effect */
+ /* outside of the CVT program */
+ if ( SUBPIXEL_HINTING_INFINALITY )
+ exc->ignore_x_mode = FT_BOOL( L == 4 );
#endif
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /* Native ClearType fonts sign a waiver that turns off all backward */
+ /* compatibility hacks and lets them program points to the grid like */
+ /* it's 1996. They might sign a waiver for just one glyph, though. */
+ if ( SUBPIXEL_HINTING_MINIMAL )
+ exc->backward_compatibility = !FT_BOOL( L == 4 );
+#endif
+ }
}
@@ -5249,14 +5223,14 @@
/* */
/* SCANTYPE[]: SCAN TYPE */
/* Opcode range: 0x8D */
- /* Stack: uint32? --> */
+ /* Stack: uint16 --> */
/* */
static void
Ins_SCANTYPE( TT_ExecContext exc,
FT_Long* args )
{
if ( args[0] >= 0 )
- exc->GS.scan_type = (FT_Int)args[0];
+ exc->GS.scan_type = (FT_Int)args[0] & 0xFFFF;
}
@@ -5279,6 +5253,15 @@
FT_UShort point;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /* See `ttinterp.h' for details on backward compatibility mode. */
+ if ( SUBPIXEL_HINTING_MINIMAL &&
+ exc->backward_compatibility &&
+ exc->iupx_called &&
+ exc->iupy_called )
+ goto Fail;
+#endif
+
if ( exc->top < exc->GS.loop )
{
if ( exc->pedantic_hinting )
@@ -5325,6 +5308,15 @@
FT_UShort I, K, L;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /* See `ttinterp.h' for details on backward compatibility mode. */
+ if ( SUBPIXEL_HINTING_MINIMAL &&
+ exc->backward_compatibility &&
+ exc->iupx_called &&
+ exc->iupy_called )
+ return;
+#endif
+
K = (FT_UShort)args[1];
L = (FT_UShort)args[0];
@@ -5354,6 +5346,15 @@
FT_UShort I, K, L;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /* See `ttinterp.h' for details on backward compatibility mode. */
+ if ( SUBPIXEL_HINTING_MINIMAL &&
+ exc->backward_compatibility &&
+ exc->iupx_called &&
+ exc->iupy_called )
+ return;
+#endif
+
K = (FT_UShort)args[1];
L = (FT_UShort)args[0];
@@ -5406,31 +5407,14 @@
d = PROJECT( zp.cur + p, zp.org + p );
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( exc->face->unpatented_hinting )
- {
- if ( exc->GS.both_x_axis )
- {
- *x = d;
- *y = 0;
- }
- else
- {
- *x = 0;
- *y = d;
- }
- }
- else
-#endif
- {
- *x = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.x, exc->F_dot_P );
- *y = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.y, exc->F_dot_P );
- }
+ *x = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.x, exc->F_dot_P );
+ *y = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.y, exc->F_dot_P );
return SUCCESS;
}
+ /* See `ttinterp.h' for details on backward compatibility mode. */
static void
Move_Zp2_Point( TT_ExecContext exc,
FT_UShort point,
@@ -5438,35 +5422,28 @@
FT_F26Dot6 dy,
FT_Bool touch )
{
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( exc->face->unpatented_hinting )
- {
- if ( exc->GS.both_x_axis )
- {
- exc->zp2.cur[point].x += dx;
- if ( touch )
- exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X;
- }
- else
- {
- exc->zp2.cur[point].y += dy;
- if ( touch )
- exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y;
- }
- return;
- }
-#endif
-
if ( exc->GS.freeVector.x != 0 )
{
- exc->zp2.cur[point].x += dx;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ if ( !( SUBPIXEL_HINTING_MINIMAL &&
+ exc->backward_compatibility ) )
+#endif
+ exc->zp2.cur[point].x = ADD_LONG( exc->zp2.cur[point].x, dx );
+
if ( touch )
exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X;
}
if ( exc->GS.freeVector.y != 0 )
{
- exc->zp2.cur[point].y += dy;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ if ( !( SUBPIXEL_HINTING_MINIMAL &&
+ exc->backward_compatibility &&
+ exc->iupx_called &&
+ exc->iupy_called ) )
+#endif
+ exc->zp2.cur[point].y = ADD_LONG( exc->zp2.cur[point].y, dy );
+
if ( touch )
exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y;
}
@@ -5513,13 +5490,12 @@
}
}
else
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/* doesn't follow Cleartype spec but produces better result */
- if ( SUBPIXEL_HINTING &&
- exc->ignore_x_mode )
+ if ( SUBPIXEL_HINTING_INFINALITY && exc->ignore_x_mode )
Move_Zp2_Point( exc, point, 0, dy, TRUE );
else
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
Move_Zp2_Point( exc, point, dx, dy, TRUE );
exc->GS.loop--;
@@ -5647,9 +5623,15 @@
{
FT_F26Dot6 dx, dy;
FT_UShort point;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
FT_Int B1, B2;
#endif
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ FT_Bool in_twilight = FT_BOOL( exc->GS.gep0 == 0 ||
+ exc->GS.gep1 == 0 ||
+ exc->GS.gep2 == 0 );
+#endif
+
if ( exc->top < exc->GS.loop + 1 )
@@ -5659,26 +5641,8 @@
goto Fail;
}
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( exc->face->unpatented_hinting )
- {
- if ( exc->GS.both_x_axis )
- {
- dx = (FT_UInt32)args[0];
- dy = 0;
- }
- else
- {
- dx = 0;
- dy = (FT_UInt32)args[0];
- }
- }
- else
-#endif
- {
- dx = TT_MulFix14( args[0], exc->GS.freeVector.x );
- dy = TT_MulFix14( args[0], exc->GS.freeVector.y );
- }
+ dx = TT_MulFix14( args[0], exc->GS.freeVector.x );
+ dy = TT_MulFix14( args[0], exc->GS.freeVector.y );
while ( exc->GS.loop > 0 )
{
@@ -5695,7 +5659,8 @@
}
}
else
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY )
{
/* If not using ignore_x_mode rendering, allow ZP2 move. */
/* If inline deltas aren't allowed, skip ZP2 move. */
@@ -5705,8 +5670,7 @@
/* - the glyph is specifically set to allow SHPIX moves */
/* - the move is on a previously Y-touched point */
- if ( SUBPIXEL_HINTING &&
- exc->ignore_x_mode )
+ if ( exc->ignore_x_mode )
{
/* save point for later comparison */
if ( exc->GS.freeVector.y != 0 )
@@ -5729,7 +5693,11 @@
( B1 & 63 ) != 0 &&
( B2 & 63 ) != 0 &&
B1 != B2 )
- Move_Zp2_Point( exc, point, -dx, -dy, TRUE );
+ Move_Zp2_Point( exc,
+ point,
+ NEG_LONG( dx ),
+ NEG_LONG( dy ),
+ TRUE );
}
}
else if ( exc->face->sph_compatibility_mode )
@@ -5761,7 +5729,7 @@
if ( ( B1 & 63 ) == 0 &&
( B2 & 63 ) != 0 &&
B1 != B2 )
- Move_Zp2_Point( exc, point, 0, -dy, TRUE );
+ Move_Zp2_Point( exc, point, 0, NEG_LONG( dy ), TRUE );
}
}
else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL )
@@ -5770,15 +5738,30 @@
else
Move_Zp2_Point( exc, point, dx, dy, TRUE );
}
+ else
+#endif
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ if ( SUBPIXEL_HINTING_MINIMAL &&
+ exc->backward_compatibility )
+ {
+ /* Special case: allow SHPIX to move points in the twilight zone. */
+ /* Otherwise, treat SHPIX the same as DELTAP. Unbreaks various */
+ /* fonts such as older versions of Rokkitt and DTL Argo T Light */
+ /* that would glitch severely after calling ALIGNRP after a */
+ /* blocked SHPIX. */
+ if ( in_twilight ||
+ ( !( exc->iupx_called && exc->iupy_called ) &&
+ ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) ||
+ ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ) ) )
+ Move_Zp2_Point( exc, point, 0, dy, TRUE );
+ }
+ else
+#endif
+ Move_Zp2_Point( exc, point, dx, dy, TRUE );
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
Skip:
-
-#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
-
- Move_Zp2_Point( exc, point, dx, dy, TRUE );
-
-#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
-
+#endif
exc->GS.loop--;
}
@@ -5798,14 +5781,14 @@
Ins_MSIRP( TT_ExecContext exc,
FT_Long* args )
{
- FT_UShort point;
+ FT_UShort point = 0;
FT_F26Dot6 distance;
-
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- FT_F26Dot6 control_value_cutin = 0; /* pacify compiler */
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ FT_F26Dot6 control_value_cutin = 0;
+ FT_F26Dot6 delta;
- if ( SUBPIXEL_HINTING )
+ if ( SUBPIXEL_HINTING_INFINALITY )
{
control_value_cutin = exc->GS.control_value_cutin;
@@ -5814,8 +5797,7 @@
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
control_value_cutin = 0;
}
-
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
point = (FT_UShort)args[0];
@@ -5838,16 +5820,23 @@
distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 );
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- /* subpixel hinting - make MSIRP respect CVT cut-in; */
- if ( SUBPIXEL_HINTING &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 &&
- FT_ABS( distance - args[1] ) >= control_value_cutin )
- distance = args[1];
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ delta = SUB_LONG( distance, args[1] );
+ if ( delta < 0 )
+ delta = NEG_LONG( delta );
- exc->func_move( exc, &exc->zp1, point, args[1] - distance );
+ /* subpixel hinting - make MSIRP respect CVT cut-in; */
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 &&
+ delta >= control_value_cutin )
+ distance = args[1];
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+
+ exc->func_move( exc,
+ &exc->zp1,
+ point,
+ SUB_LONG( args[1], distance ) );
exc->GS.rp1 = exc->GS.rp0;
exc->GS.rp2 = point;
@@ -5884,20 +5873,22 @@
if ( ( exc->opcode & 1 ) != 0 )
{
cur_dist = FAST_PROJECT( &exc->zp0.cur[point] );
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 )
- distance = Round_None(
- exc,
- cur_dist,
- exc->tt_metrics.compensations[0] ) - cur_dist;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 )
+ distance = SUB_LONG(
+ Round_None( exc,
+ cur_dist,
+ exc->tt_metrics.compensations[0] ),
+ cur_dist );
else
#endif
- distance = exc->func_round(
- exc,
- cur_dist,
- exc->tt_metrics.compensations[0] ) - cur_dist;
+ distance = SUB_LONG(
+ exc->func_round( exc,
+ cur_dist,
+ exc->tt_metrics.compensations[0] ),
+ cur_dist );
}
else
distance = 0;
@@ -5930,14 +5921,14 @@
cvtEntry = (FT_ULong)args[1];
point = (FT_UShort)args[0];
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->GS.freeVector.x != 0 &&
exc->GS.freeVector.y == 0 &&
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
control_value_cutin = 0;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
if ( BOUNDS( point, exc->zp0.n_points ) ||
BOUNDSL( cvtEntry, exc->cvtSize ) )
@@ -5971,39 +5962,46 @@
if ( exc->GS.gep0 == 0 ) /* If in twilight zone */
{
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/* Only adjust if not in sph_compatibility_mode or ignore_x_mode. */
/* Determined via experimentation and may be incorrect... */
- if ( !SUBPIXEL_HINTING ||
- ( !exc->ignore_x_mode ||
- !exc->face->sph_compatibility_mode ) )
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+ if ( !( SUBPIXEL_HINTING_INFINALITY &&
+ ( exc->ignore_x_mode &&
+ exc->face->sph_compatibility_mode ) ) )
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
exc->zp0.org[point].x = TT_MulFix14( distance,
exc->GS.freeVector.x );
exc->zp0.org[point].y = TT_MulFix14( distance,
exc->GS.freeVector.y ),
exc->zp0.cur[point] = exc->zp0.org[point];
}
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
( exc->sph_tweak_flags & SPH_TWEAK_MIAP_HACK ) &&
distance > 0 &&
exc->GS.freeVector.y != 0 )
distance = 0;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
org_dist = FAST_PROJECT( &exc->zp0.cur[point] );
if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */
{
- if ( FT_ABS( distance - org_dist ) > control_value_cutin )
+ FT_F26Dot6 delta;
+
+
+ delta = SUB_LONG( distance, org_dist );
+ if ( delta < 0 )
+ delta = NEG_LONG( delta );
+
+ if ( delta > control_value_cutin )
distance = org_dist;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 )
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 )
distance = Round_None( exc,
distance,
exc->tt_metrics.compensations[0] );
@@ -6014,7 +6012,7 @@
exc->tt_metrics.compensations[0] );
}
- exc->func_move( exc, &exc->zp0, point, distance - org_dist );
+ exc->func_move( exc, &exc->zp0, point, SUB_LONG( distance, org_dist ) );
Fail:
exc->GS.rp0 = point;
@@ -6032,19 +6030,19 @@
Ins_MDRP( TT_ExecContext exc,
FT_Long* args )
{
- FT_UShort point;
+ FT_UShort point = 0;
FT_F26Dot6 org_dist, distance, minimum_distance;
minimum_distance = exc->GS.minimum_distance;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->GS.freeVector.x != 0 &&
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
minimum_distance = 0;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
point = (FT_UShort)args[0];
@@ -6086,8 +6084,10 @@
FT_Vector vec;
- vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale );
- vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale );
+ vec.x = FT_MulFix( SUB_LONG( vec1->x, vec2->x ),
+ exc->metrics.x_scale );
+ vec.y = FT_MulFix( SUB_LONG( vec1->y, vec2->y ),
+ exc->metrics.y_scale );
org_dist = FAST_DUALPROJ( &vec );
}
@@ -6095,8 +6095,12 @@
/* single width cut-in test */
- if ( FT_ABS( org_dist - exc->GS.single_width_value ) <
- exc->GS.single_width_cutin )
+ /* |org_dist - single_width_value| < single_width_cutin */
+ if ( exc->GS.single_width_cutin > 0 &&
+ org_dist < exc->GS.single_width_value +
+ exc->GS.single_width_cutin &&
+ org_dist > exc->GS.single_width_value -
+ exc->GS.single_width_cutin )
{
if ( org_dist >= 0 )
org_dist = exc->GS.single_width_value;
@@ -6108,10 +6112,10 @@
if ( ( exc->opcode & 4 ) != 0 )
{
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- exc->ignore_x_mode &&
- exc->GS.freeVector.x != 0 )
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 )
distance = Round_None(
exc,
org_dist,
@@ -6140,8 +6144,8 @@
}
else
{
- if ( distance > -minimum_distance )
- distance = -minimum_distance;
+ if ( distance > NEG_LONG( minimum_distance ) )
+ distance = NEG_LONG( minimum_distance );
}
}
@@ -6149,7 +6153,7 @@
org_dist = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 );
- exc->func_move( exc, &exc->zp1, point, distance - org_dist );
+ exc->func_move( exc, &exc->zp1, point, SUB_LONG( distance, org_dist ) );
Fail:
exc->GS.rp1 = exc->GS.rp0;
@@ -6179,25 +6183,25 @@
org_dist,
control_value_cutin,
minimum_distance;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
FT_Int B1 = 0; /* pacify compiler */
FT_Int B2 = 0;
FT_Bool reverse_move = FALSE;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
minimum_distance = exc->GS.minimum_distance;
control_value_cutin = exc->GS.control_value_cutin;
point = (FT_UShort)args[0];
- cvtEntry = (FT_ULong)( args[1] + 1 );
+ cvtEntry = (FT_ULong)( ADD_LONG( args[1], 1 ) );
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->GS.freeVector.x != 0 &&
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
control_value_cutin = minimum_distance = 0;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
/* XXX: UNDOCUMENTED! cvt[-1] = 0 always */
@@ -6250,8 +6254,8 @@
cvt_dist = -cvt_dist;
}
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->GS.freeVector.y != 0 &&
( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) )
@@ -6261,7 +6265,7 @@
else if ( cur_dist > 64 && cur_dist < 84 )
cvt_dist += 32;
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
/* control value cut-in and round */
@@ -6272,6 +6276,9 @@
if ( exc->GS.gep0 == exc->GS.gep1 )
{
+ FT_F26Dot6 delta;
+
+
/* XXX: According to Greg Hitchcock, the following wording is */
/* the right one: */
/* */
@@ -6284,7 +6291,11 @@
/* `ttinst2.doc', version 1.66, is thus incorrect since */
/* it implies `>=' instead of `>'. */
- if ( FT_ABS( cvt_dist - org_dist ) > control_value_cutin )
+ delta = SUB_LONG( cvt_dist, org_dist );
+ if ( delta < 0 )
+ delta = NEG_LONG( delta );
+
+ if ( delta > control_value_cutin )
cvt_dist = org_dist;
}
@@ -6296,16 +6307,23 @@
else
{
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/* do cvt cut-in always in MIRP for sph */
- if ( SUBPIXEL_HINTING &&
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->GS.gep0 == exc->GS.gep1 )
{
- if ( FT_ABS( cvt_dist - org_dist ) > control_value_cutin )
+ FT_F26Dot6 delta;
+
+
+ delta = SUB_LONG( cvt_dist, org_dist );
+ if ( delta < 0 )
+ delta = NEG_LONG( delta );
+
+ if ( delta > control_value_cutin )
cvt_dist = org_dist;
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
distance = Round_None(
exc,
@@ -6324,13 +6342,13 @@
}
else
{
- if ( distance > -minimum_distance )
- distance = -minimum_distance;
+ if ( distance > NEG_LONG( minimum_distance ) )
+ distance = NEG_LONG( minimum_distance );
}
}
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING )
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY )
{
B1 = exc->zp1.cur[point].y;
@@ -6347,12 +6365,15 @@
( exc->sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) )
distance += 64;
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
- exc->func_move( exc, &exc->zp1, point, distance - cur_dist );
+ exc->func_move( exc,
+ &exc->zp1,
+ point,
+ SUB_LONG( distance, cur_dist ) );
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING )
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY )
{
B2 = exc->zp1.cur[point].y;
@@ -6373,10 +6394,13 @@
}
if ( reverse_move )
- exc->func_move( exc, &exc->zp1, point, -( distance - cur_dist ) );
+ exc->func_move( exc,
+ &exc->zp1,
+ point,
+ SUB_LONG( cur_dist, distance ) );
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
Fail:
exc->GS.rp1 = exc->GS.rp0;
@@ -6401,8 +6425,8 @@
FT_F26Dot6 distance;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->iup_called &&
( exc->sph_tweak_flags & SPH_TWEAK_NO_ALIGNRP_AFTER_IUP ) )
@@ -6410,7 +6434,7 @@
exc->error = FT_THROW( Invalid_Reference );
goto Fail;
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
if ( exc->top < exc->GS.loop ||
BOUNDS( exc->GS.rp0, exc->zp0.n_points ) )
@@ -6439,7 +6463,7 @@
distance = PROJECT( exc->zp1.cur + point,
exc->zp0.cur + exc->GS.rp0 );
- exc->func_move( exc, &exc->zp1, point, -distance );
+ exc->func_move( exc, &exc->zp1, point, NEG_LONG( distance ) );
}
exc->GS.loop--;
@@ -6496,21 +6520,19 @@
/* Cramer's rule */
- dbx = exc->zp0.cur[b1].x - exc->zp0.cur[b0].x;
- dby = exc->zp0.cur[b1].y - exc->zp0.cur[b0].y;
+ dbx = SUB_LONG( exc->zp0.cur[b1].x, exc->zp0.cur[b0].x );
+ dby = SUB_LONG( exc->zp0.cur[b1].y, exc->zp0.cur[b0].y );
- dax = exc->zp1.cur[a1].x - exc->zp1.cur[a0].x;
- day = exc->zp1.cur[a1].y - exc->zp1.cur[a0].y;
+ dax = SUB_LONG( exc->zp1.cur[a1].x, exc->zp1.cur[a0].x );
+ day = SUB_LONG( exc->zp1.cur[a1].y, exc->zp1.cur[a0].y );
- dx = exc->zp0.cur[b0].x - exc->zp1.cur[a0].x;
- dy = exc->zp0.cur[b0].y - exc->zp1.cur[a0].y;
+ dx = SUB_LONG( exc->zp0.cur[b0].x, exc->zp1.cur[a0].x );
+ dy = SUB_LONG( exc->zp0.cur[b0].y, exc->zp1.cur[a0].y );
- exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_BOTH;
-
- discriminant = FT_MulDiv( dax, -dby, 0x40 ) +
- FT_MulDiv( day, dbx, 0x40 );
- dotproduct = FT_MulDiv( dax, dbx, 0x40 ) +
- FT_MulDiv( day, dby, 0x40 );
+ discriminant = ADD_LONG( FT_MulDiv( dax, NEG_LONG( dby ), 0x40 ),
+ FT_MulDiv( day, dbx, 0x40 ) );
+ dotproduct = ADD_LONG( FT_MulDiv( dax, dbx, 0x40 ),
+ FT_MulDiv( day, dby, 0x40 ) );
/* The discriminant above is actually a cross product of vectors */
/* da and db. Together with the dot product, they can be used as */
@@ -6520,29 +6542,32 @@
/* discriminant = |da||db|sin(angle) . */
/* We use these equations to reject grazing intersections by */
/* thresholding abs(tan(angle)) at 1/19, corresponding to 3 degrees. */
- if ( 19 * FT_ABS( discriminant ) > FT_ABS( dotproduct ) )
+ if ( MUL_LONG( 19, FT_ABS( discriminant ) ) > FT_ABS( dotproduct ) )
{
- val = FT_MulDiv( dx, -dby, 0x40 ) + FT_MulDiv( dy, dbx, 0x40 );
+ val = ADD_LONG( FT_MulDiv( dx, NEG_LONG( dby ), 0x40 ),
+ FT_MulDiv( dy, dbx, 0x40 ) );
R.x = FT_MulDiv( val, dax, discriminant );
R.y = FT_MulDiv( val, day, discriminant );
- exc->zp2.cur[point].x = exc->zp1.cur[a0].x + R.x;
- exc->zp2.cur[point].y = exc->zp1.cur[a0].y + R.y;
+ /* XXX: Block in backward_compatibility and/or post-IUP? */
+ exc->zp2.cur[point].x = ADD_LONG( exc->zp1.cur[a0].x, R.x );
+ exc->zp2.cur[point].y = ADD_LONG( exc->zp1.cur[a0].y, R.y );
}
else
{
/* else, take the middle of the middles of A and B */
- exc->zp2.cur[point].x = ( exc->zp1.cur[a0].x +
- exc->zp1.cur[a1].x +
- exc->zp0.cur[b0].x +
- exc->zp0.cur[b1].x ) / 4;
- exc->zp2.cur[point].y = ( exc->zp1.cur[a0].y +
- exc->zp1.cur[a1].y +
- exc->zp0.cur[b0].y +
- exc->zp0.cur[b1].y ) / 4;
+ /* XXX: Block in backward_compatibility and/or post-IUP? */
+ exc->zp2.cur[point].x =
+ ADD_LONG( ADD_LONG( exc->zp1.cur[a0].x, exc->zp1.cur[a1].x ),
+ ADD_LONG( exc->zp0.cur[b0].x, exc->zp0.cur[b1].x ) ) / 4;
+ exc->zp2.cur[point].y =
+ ADD_LONG( ADD_LONG( exc->zp1.cur[a0].y, exc->zp1.cur[a1].y ),
+ ADD_LONG( exc->zp0.cur[b0].y, exc->zp0.cur[b1].y ) ) / 4;
}
+
+ exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_BOTH;
}
@@ -6574,7 +6599,7 @@
distance = PROJECT( exc->zp0.cur + p2, exc->zp1.cur + p1 ) / 2;
exc->func_move( exc, &exc->zp1, p1, distance );
- exc->func_move( exc, &exc->zp0, p2, -distance );
+ exc->func_move( exc, &exc->zp0, p2, NEG_LONG( distance ) );
}
@@ -6608,7 +6633,9 @@
* Otherwise, by definition, the value of exc->twilight.orus[n] is (0,0),
* for every n.
*/
- twilight = exc->GS.gep0 == 0 || exc->GS.gep1 == 0 || exc->GS.gep2 == 0;
+ twilight = ( exc->GS.gep0 == 0 ||
+ exc->GS.gep1 == 0 ||
+ exc->GS.gep2 == 0 );
if ( BOUNDS( exc->GS.rp1, exc->zp0.n_points ) )
{
@@ -6645,9 +6672,11 @@
FT_Vector vec;
- vec.x = FT_MulFix( exc->zp1.orus[exc->GS.rp2].x - orus_base->x,
+ vec.x = FT_MulFix( SUB_LONG( exc->zp1.orus[exc->GS.rp2].x,
+ orus_base->x ),
exc->metrics.x_scale );
- vec.y = FT_MulFix( exc->zp1.orus[exc->GS.rp2].y - orus_base->y,
+ vec.y = FT_MulFix( SUB_LONG( exc->zp1.orus[exc->GS.rp2].y,
+ orus_base->y ),
exc->metrics.y_scale );
old_range = FAST_DUALPROJ( &vec );
@@ -6656,7 +6685,7 @@
cur_range = PROJECT( &exc->zp1.cur[exc->GS.rp2], cur_base );
}
- for ( ; exc->GS.loop > 0; --exc->GS.loop )
+ for ( ; exc->GS.loop > 0; exc->GS.loop-- )
{
FT_UInt point = (FT_UInt)exc->stack[--exc->args];
FT_F26Dot6 org_dist, cur_dist, new_dist;
@@ -6682,9 +6711,11 @@
FT_Vector vec;
- vec.x = FT_MulFix( exc->zp2.orus[point].x - orus_base->x,
+ vec.x = FT_MulFix( SUB_LONG( exc->zp2.orus[point].x,
+ orus_base->x ),
exc->metrics.x_scale );
- vec.y = FT_MulFix( exc->zp2.orus[point].y - orus_base->y,
+ vec.y = FT_MulFix( SUB_LONG( exc->zp2.orus[point].y,
+ orus_base->y ),
exc->metrics.y_scale );
org_dist = FAST_DUALPROJ( &vec );
@@ -6723,7 +6754,7 @@
exc->func_move( exc,
&exc->zp2,
(FT_UShort)point,
- new_dist - cur_dist );
+ SUB_LONG( new_dist, cur_dist ) );
}
Fail:
@@ -6788,14 +6819,14 @@
FT_F26Dot6 dx;
- dx = worker->curs[p].x - worker->orgs[p].x;
+ dx = SUB_LONG( worker->curs[p].x, worker->orgs[p].x );
if ( dx != 0 )
{
for ( i = p1; i < p; i++ )
- worker->curs[i].x += dx;
+ worker->curs[i].x = ADD_LONG( worker->curs[i].x, dx );
for ( i = p + 1; i <= p2; i++ )
- worker->curs[i].x += dx;
+ worker->curs[i].x = ADD_LONG( worker->curs[i].x, dx );
}
}
@@ -6840,8 +6871,8 @@
org2 = worker->orgs[ref2].x;
cur1 = worker->curs[ref1].x;
cur2 = worker->curs[ref2].x;
- delta1 = cur1 - org1;
- delta2 = cur2 - org2;
+ delta1 = SUB_LONG( cur1, org1 );
+ delta2 = SUB_LONG( cur2, org2 );
if ( cur1 == cur2 || orus1 == orus2 )
{
@@ -6853,10 +6884,10 @@
if ( x <= org1 )
- x += delta1;
+ x = ADD_LONG( x, delta1 );
else if ( x >= org2 )
- x += delta2;
+ x = ADD_LONG( x, delta2 );
else
x = cur1;
@@ -6877,20 +6908,23 @@
if ( x <= org1 )
- x += delta1;
+ x = ADD_LONG( x, delta1 );
else if ( x >= org2 )
- x += delta2;
+ x = ADD_LONG( x, delta2 );
else
{
if ( !scale_valid )
{
scale_valid = 1;
- scale = FT_DivFix( cur2 - cur1, orus2 - orus1 );
+ scale = FT_DivFix( SUB_LONG( cur2, cur1 ),
+ SUB_LONG( orus2, orus1 ) );
}
- x = cur1 + FT_MulFix( worker->orus[i].x - orus1, scale );
+ x = ADD_LONG( cur1,
+ FT_MulFix( SUB_LONG( worker->orus[i].x, orus1 ),
+ scale ) );
}
worker->curs[i].x = x;
}
@@ -6920,6 +6954,23 @@
FT_Short contour; /* current contour */
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /* See `ttinterp.h' for details on backward compatibility mode. */
+ /* Allow IUP until it has been called on both axes. Immediately */
+ /* return on subsequent ones. */
+ if ( SUBPIXEL_HINTING_MINIMAL &&
+ exc->backward_compatibility )
+ {
+ if ( exc->iupx_called && exc->iupy_called )
+ return;
+
+ if ( exc->opcode & 1 )
+ exc->iupx_called = TRUE;
+ else
+ exc->iupy_called = TRUE;
+ }
+#endif
+
/* ignore empty outlines */
if ( exc->pts.n_contours == 0 )
return;
@@ -6943,15 +6994,15 @@
contour = 0;
point = 0;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- exc->ignore_x_mode )
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ exc->ignore_x_mode )
{
exc->iup_called = TRUE;
if ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_IUP )
return;
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
do
{
@@ -7023,37 +7074,16 @@
FT_UShort A;
FT_ULong C, P;
FT_Long B;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
FT_UShort B1, B2;
- if ( SUBPIXEL_HINTING &&
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->ignore_x_mode &&
exc->iup_called &&
( exc->sph_tweak_flags & SPH_TWEAK_NO_DELTAP_AFTER_IUP ) )
goto Fail;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
-
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- /* Delta hinting is covered by US Patent 5159668. */
- if ( exc->face->unpatented_hinting )
- {
- FT_Long n = args[0] * 2;
-
-
- if ( exc->args < n )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Too_Few_Arguments );
- n = exc->args;
- }
-
- exc->args -= n;
- exc->new_top = exc->args;
- return;
- }
-#endif
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
P = (FT_ULong)exc->func_cur_ppem( exc );
nump = (FT_ULong)args[0]; /* some points theoretically may occur more
@@ -7107,9 +7137,9 @@
B++;
B *= 1L << ( 6 - exc->GS.delta_shift );
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING )
+ if ( SUBPIXEL_HINTING_INFINALITY )
{
/*
* Allow delta move if
@@ -7162,13 +7192,29 @@
SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP ) &&
( B1 & 63 ) != 0 &&
( B2 & 63 ) != 0 ) ) )
- exc->func_move( exc, &exc->zp0, A, -B );
+ exc->func_move( exc, &exc->zp0, A, NEG_LONG( B ) );
}
}
else
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
- exc->func_move( exc, &exc->zp0, A, B );
+ {
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /* See `ttinterp.h' for details on backward compatibility */
+ /* mode. */
+ if ( SUBPIXEL_HINTING_MINIMAL &&
+ exc->backward_compatibility )
+ {
+ if ( !( exc->iupx_called && exc->iupy_called ) &&
+ ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) ||
+ ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) ) )
+ exc->func_move( exc, &exc->zp0, A, B );
+ }
+ else
+#endif
+ exc->func_move( exc, &exc->zp0, A, B );
+ }
}
}
else
@@ -7196,26 +7242,6 @@
FT_Long B;
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- /* Delta hinting is covered by US Patent 5159668. */
- if ( exc->face->unpatented_hinting )
- {
- FT_Long n = args[0] * 2;
-
-
- if ( exc->args < n )
- {
- if ( exc->pedantic_hinting )
- exc->error = FT_THROW( Too_Few_Arguments );
- n = exc->args;
- }
-
- exc->args -= n;
- exc->new_top = exc->args;
- return;
- }
-#endif
-
P = (FT_ULong)exc->func_cur_ppem( exc );
nump = (FT_ULong)args[0];
@@ -7304,24 +7330,25 @@
Ins_GETINFO( TT_ExecContext exc,
FT_Long* args )
{
- FT_Long K;
+ FT_Long K;
+ TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( exc->face );
K = 0;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/********************************/
/* RASTERIZER VERSION */
/* Selector Bit: 0 */
/* Return Bit(s): 0-7 */
/* */
- if ( SUBPIXEL_HINTING &&
- ( args[0] & 1 ) != 0 &&
- exc->subpixel_hinting )
+ if ( SUBPIXEL_HINTING_INFINALITY &&
+ ( args[0] & 1 ) != 0 &&
+ exc->subpixel_hinting )
{
if ( exc->ignore_x_mode )
{
- /* if in ClearType backwards compatibility mode, */
+ /* if in ClearType backward compatibility mode, */
/* we sometimes change the TrueType version dynamically */
K = exc->rasterizer_version;
FT_TRACE6(( "Setting rasterizer version %d\n",
@@ -7331,9 +7358,9 @@
K = TT_INTERPRETER_VERSION_38;
}
else
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
if ( ( args[0] & 1 ) != 0 )
- K = TT_INTERPRETER_VERSION_35;
+ K = driver->interpreter_version;
/********************************/
/* GLYPH ROTATED */
@@ -7341,7 +7368,7 @@
/* Return Bit(s): 8 */
/* */
if ( ( args[0] & 2 ) != 0 && exc->tt_metrics.rotated )
- K |= 0x80;
+ K |= 1 << 8;
/********************************/
/* GLYPH STRETCHED */
@@ -7349,19 +7376,87 @@
/* Return Bit(s): 9 */
/* */
if ( ( args[0] & 4 ) != 0 && exc->tt_metrics.stretched )
- K |= 1 << 8;
+ K |= 1 << 9;
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ /********************************/
+ /* VARIATION GLYPH */
+ /* Selector Bit: 3 */
+ /* Return Bit(s): 10 */
+ /* */
+ /* XXX: UNDOCUMENTED! */
+ if ( (args[0] & 8 ) != 0 && exc->face->blend )
+ K |= 1 << 10;
+#endif
/********************************/
- /* HINTING FOR GRAYSCALE */
+ /* BI-LEVEL HINTING AND */
+ /* GRAYSCALE RENDERING */
/* Selector Bit: 5 */
/* Return Bit(s): 12 */
/* */
if ( ( args[0] & 32 ) != 0 && exc->grayscale )
K |= 1 << 12;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /* Toggle the following flags only outside of monochrome mode. */
+ /* Otherwise, instructions may behave weirdly and rendering results */
+ /* may differ between v35 and v40 mode, e.g., in `Times New Roman */
+ /* Bold Italic'. */
+ if ( SUBPIXEL_HINTING_MINIMAL && exc->subpixel_hinting_lean )
+ {
+ /********************************/
+ /* HINTING FOR SUBPIXEL */
+ /* Selector Bit: 6 */
+ /* Return Bit(s): 13 */
+ /* */
+ /* v40 does subpixel hinting by default. */
+ if ( ( args[0] & 64 ) != 0 )
+ K |= 1 << 13;
- if ( SUBPIXEL_HINTING &&
+ /********************************/
+ /* VERTICAL LCD SUBPIXELS? */
+ /* Selector Bit: 8 */
+ /* Return Bit(s): 15 */
+ /* */
+ if ( ( args[0] & 256 ) != 0 && exc->vertical_lcd_lean )
+ K |= 1 << 15;
+
+ /********************************/
+ /* SUBPIXEL POSITIONED? */
+ /* Selector Bit: 10 */
+ /* Return Bit(s): 17 */
+ /* */
+ /* XXX: FreeType supports it, dependent on what client does? */
+ if ( ( args[0] & 1024 ) != 0 )
+ K |= 1 << 17;
+
+ /********************************/
+ /* SYMMETRICAL SMOOTHING */
+ /* Selector Bit: 11 */
+ /* Return Bit(s): 18 */
+ /* */
+ /* The only smoothing method FreeType supports unless someone sets */
+ /* FT_LOAD_TARGET_MONO. */
+ if ( ( args[0] & 2048 ) != 0 && exc->subpixel_hinting_lean )
+ K |= 1 << 18;
+
+ /********************************/
+ /* CLEARTYPE HINTING AND */
+ /* GRAYSCALE RENDERING */
+ /* Selector Bit: 12 */
+ /* Return Bit(s): 19 */
+ /* */
+ /* Grayscale rendering is what FreeType does anyway unless someone */
+ /* sets FT_LOAD_TARGET_MONO or FT_LOAD_TARGET_LCD(_V) */
+ if ( ( args[0] & 4096 ) != 0 && exc->grayscale_cleartype )
+ K |= 1 << 19;
+ }
+#endif
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+
+ if ( SUBPIXEL_HINTING_INFINALITY &&
exc->rasterizer_version >= TT_INTERPRETER_VERSION_35 )
{
@@ -7434,12 +7529,71 @@
}
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
args[0] = K;
}
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
+ /*************************************************************************/
+ /* */
+ /* GETVARIATION[]: get normalized variation (blend) coordinates */
+ /* Opcode range: 0x91 */
+ /* Stack: --> f2.14... */
+ /* */
+ /* XXX: UNDOCUMENTED! There is no official documentation from Apple for */
+ /* this bytecode instruction. Active only if a font has GX */
+ /* variation axes. */
+ /* */
+ static void
+ Ins_GETVARIATION( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ FT_UInt num_axes = exc->face->blend->num_axis;
+ FT_Fixed* coords = exc->face->blend->normalizedcoords;
+
+ FT_UInt i;
+
+
+ if ( BOUNDS( num_axes, exc->stackSize + 1 - exc->top ) )
+ {
+ exc->error = FT_THROW( Stack_Overflow );
+ return;
+ }
+
+ if ( coords )
+ {
+ for ( i = 0; i < num_axes; i++ )
+ args[i] = coords[i] >> 2; /* convert 16.16 to 2.14 format */
+ }
+ else
+ {
+ for ( i = 0; i < num_axes; i++ )
+ args[i] = 0;
+ }
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* GETDATA[]: no idea what this is good for */
+ /* Opcode range: 0x92 */
+ /* Stack: --> 17 */
+ /* */
+ /* XXX: UNDOCUMENTED! There is no documentation from Apple for this */
+ /* very weird bytecode instruction. */
+ /* */
+ static void
+ Ins_GETDATA( FT_Long* args )
+ {
+ args[0] = 17;
+ }
+
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+
+
static void
Ins_UNKNOWN( TT_ExecContext exc )
{
@@ -7513,10 +7667,11 @@
FT_EXPORT_DEF( FT_Error )
TT_RunIns( TT_ExecContext exc )
{
- FT_Long ins_counter = 0; /* executed instructions counter */
+ FT_ULong ins_counter = 0; /* executed instructions counter */
+ FT_ULong num_twilight_points;
FT_UShort i;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
FT_Byte opcode_pattern[1][2] = {
/* #8 TypeMan Talk Align */
{
@@ -7527,12 +7682,88 @@
FT_UShort opcode_patterns = 1;
FT_UShort opcode_pointer[1] = { 0 };
FT_UShort opcode_size[1] = { 1 };
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
exc->iup_called = FALSE;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /*
+ * Toggle backward compatibility according to what font wants, except
+ * when
+ *
+ * 1) we have a `tricky' font that heavily relies on the interpreter to
+ * render glyphs correctly, for example DFKai-SB, or
+ * 2) FT_RENDER_MODE_MONO (i.e, monochome rendering) is requested.
+ *
+ * In those cases, backward compatibility needs to be turned off to get
+ * correct rendering. The rendering is then completely up to the
+ * font's programming.
+ *
+ */
+ if ( SUBPIXEL_HINTING_MINIMAL &&
+ exc->subpixel_hinting_lean &&
+ !FT_IS_TRICKY( &exc->face->root ) )
+ exc->backward_compatibility = !( exc->GS.instruct_control & 4 );
+ else
+ exc->backward_compatibility = FALSE;
+
+ exc->iupx_called = FALSE;
+ exc->iupy_called = FALSE;
+#endif
+
+ /* We restrict the number of twilight points to a reasonable, */
+ /* heuristic value to avoid slow execution of malformed bytecode. */
+ num_twilight_points = FT_MAX( 30,
+ 2 * ( exc->pts.n_points + exc->cvtSize ) );
+ if ( exc->twilight.n_points > num_twilight_points )
+ {
+ if ( num_twilight_points > 0xFFFFU )
+ num_twilight_points = 0xFFFFU;
+
+ FT_TRACE5(( "TT_RunIns: Resetting number of twilight points\n"
+ " from %d to the more reasonable value %d\n",
+ exc->twilight.n_points,
+ num_twilight_points ));
+ exc->twilight.n_points = (FT_UShort)num_twilight_points;
+ }
+
+ /* Set up loop detectors. We restrict the number of LOOPCALL loops */
+ /* and the number of JMPR, JROT, and JROF calls with a negative */
+ /* argument to values that depend on various parameters like the */
+ /* size of the CVT table or the number of points in the current */
+ /* glyph (if applicable). */
+ /* */
+ /* The idea is that in real-world bytecode you either iterate over */
+ /* all CVT entries (in the `prep' table), or over all points (or */
+ /* contours, in the `glyf' table) of a glyph, and such iterations */
+ /* don't happen very often. */
+ exc->loopcall_counter = 0;
+ exc->neg_jump_counter = 0;
+
+ /* The maximum values are heuristic. */
+ if ( exc->pts.n_points )
+ exc->loopcall_counter_max = FT_MAX( 50,
+ 10 * exc->pts.n_points ) +
+ FT_MAX( 50,
+ exc->cvtSize / 10 );
+ else
+ exc->loopcall_counter_max = 300 + 8 * exc->cvtSize;
+
+ /* as a protection against an unreasonable number of CVT entries */
+ /* we assume at most 100 control values per glyph for the counter */
+ if ( exc->loopcall_counter_max >
+ 100 * (FT_ULong)exc->face->root.num_glyphs )
+ exc->loopcall_counter_max = 100 * (FT_ULong)exc->face->root.num_glyphs;
+
+ FT_TRACE5(( "TT_RunIns: Limiting total number of loops in LOOPCALL"
+ " to %d\n", exc->loopcall_counter_max ));
+
+ exc->neg_jump_counter_max = exc->loopcall_counter_max;
+ FT_TRACE5(( "TT_RunIns: Limiting total number of backward jumps"
+ " to %d\n", exc->neg_jump_counter_max ));
/* set PPEM and CVT functions */
exc->tt_metrics.ratio = 0;
@@ -7575,7 +7806,7 @@
? 2
: 12 - ( *opcode_name[exc->opcode] - '0' ),
"#" ));
- for ( n = 0; n < cnt; n++ )
+ for ( n = 1; n <= cnt; n++ )
FT_TRACE7(( " %d", exc->stack[exc->top - n] ));
FT_TRACE6(( "\n" ));
}
@@ -7611,7 +7842,21 @@
exc->args = 0;
}
- exc->new_top = exc->args + ( Pop_Push_Count[exc->opcode] & 15 );
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ if ( exc->opcode == 0x91 )
+ {
+ /* this is very special: GETVARIATION returns */
+ /* a variable number of arguments */
+
+ /* it is the job of the application to `activate' GX handling, */
+ /* this is, calling any of the GX API functions on the current */
+ /* font to select a variation instance */
+ if ( exc->face->blend )
+ exc->new_top = exc->args + exc->face->blend->num_axis;
+ }
+ else
+#endif
+ exc->new_top = exc->args + ( Pop_Push_Count[exc->opcode] & 15 );
/* `new_top' is the new top of the stack, after the instruction's */
/* execution. `top' will be set to `new_top' after the `switch' */
@@ -7625,9 +7870,9 @@
exc->step_ins = TRUE;
exc->error = FT_Err_Ok;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
- if ( SUBPIXEL_HINTING )
+ if ( SUBPIXEL_HINTING_INFINALITY )
{
for ( i = 0; i < opcode_patterns; i++ )
{
@@ -7656,7 +7901,7 @@
}
}
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
{
FT_Long* args = exc->stack + exc->args;
@@ -7804,7 +8049,7 @@
Ins_ALIGNPTS( exc, args );
break;
- case 0x28: /* ???? */
+ case 0x28: /* RAW */
Ins_UNKNOWN( exc );
break;
@@ -8156,10 +8401,33 @@
Ins_INSTCTRL( exc, args );
break;
- case 0x8F:
+ case 0x8F: /* ADJUST */
+ case 0x90: /* ADJUST */
Ins_UNKNOWN( exc );
break;
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+ case 0x91:
+ /* it is the job of the application to `activate' GX handling, */
+ /* this is, calling any of the GX API functions on the current */
+ /* font to select a variation instance */
+ if ( exc->face->blend )
+ Ins_GETVARIATION( exc, args );
+ else
+ Ins_UNKNOWN( exc );
+ break;
+
+ case 0x92:
+ /* there is at least one MS font (LaoUI.ttf version 5.01) that */
+ /* uses IDEFs for 0x91 and 0x92; for this reason we activate */
+ /* GETDATA for GX fonts only, similar to GETVARIATION */
+ if ( exc->face->blend )
+ Ins_GETDATA( args );
+ else
+ Ins_UNKNOWN( exc );
+ break;
+#endif
+
default:
if ( opcode >= 0xE0 )
Ins_MIRP( exc, args );
@@ -8240,7 +8508,7 @@
/* increment instruction counter and check if we didn't */
/* run this program for too long (e.g. infinite loops). */
- if ( ++ins_counter > MAX_RUNNABLE_OPCODES )
+ if ( ++ins_counter > TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES )
return FT_THROW( Execution_Too_Long );
LSuiteLabel_:
@@ -8257,29 +8525,27 @@
} while ( !exc->instruction_trap );
LNo_Error_:
+ FT_TRACE4(( " %d instruction%s executed\n",
+ ins_counter,
+ ins_counter == 1 ? "" : "s" ));
return FT_Err_Ok;
LErrorCodeOverflow_:
exc->error = FT_THROW( Code_Overflow );
LErrorLabel_:
- /* If any errors have occurred, function tables may be broken. */
- /* Force a re-execution of `prep' and `fpgm' tables if no */
- /* bytecode debugger is run. */
- if ( exc->error &&
- !exc->instruction_trap &&
- exc->curRange == tt_coderange_glyph )
- {
+ if ( exc->error && !exc->instruction_trap )
FT_TRACE1(( " The interpreter returned error 0x%x\n", exc->error ));
- exc->size->bytecode_ready = -1;
- exc->size->cvt_ready = -1;
- }
return exc->error;
}
+#else /* !TT_USE_BYTECODE_INTERPRETER */
-#endif /* TT_USE_BYTECODE_INTERPRETER */
+ /* ANSI C doesn't like empty source files */
+ typedef int _tt_interp_dummy;
+
+#endif /* !TT_USE_BYTECODE_INTERPRETER */
/* END */
diff --git a/src/truetype/ttinterp.h b/src/truetype/ttinterp.h
index 32706d0..2966439 100644
--- a/src/truetype/ttinterp.h
+++ b/src/truetype/ttinterp.h
@@ -4,7 +4,7 @@
/* */
/* TrueType bytecode interpreter (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTINTERP_H__
-#define __TTINTERP_H__
+#ifndef TTINTERP_H_
+#define TTINTERP_H_
#include <ft2build.h>
#include "ttobjs.h"
@@ -99,7 +99,7 @@
} TT_CallRec, *TT_CallStack;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/*************************************************************************/
/* */
@@ -138,7 +138,7 @@
} SPH_Font_Class;
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
/*************************************************************************/
@@ -170,6 +170,7 @@
pts,
twilight;
+ FT_Long pointSize; /* in 26.6 format */
FT_Size_Metrics metrics;
TT_Size_Metrics tt_metrics; /* size metrics */
@@ -247,9 +248,151 @@
TT_Set_CVT_Func func_write_cvt; /* write a cvt entry (in pixels) */
TT_Set_CVT_Func func_move_cvt; /* incr a cvt entry (in pixels) */
- FT_Bool grayscale; /* are we hinting for grayscale? */
+ FT_Bool grayscale; /* bi-level hinting and */
+ /* grayscale rendering */
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ /*
+ * FreeType supports ClearType-like hinting of TrueType fonts through
+ * the version 40 interpreter. This is achieved through several hacks
+ * in the base (v35) interpreter, as detailed below.
+ *
+ * ClearType is an umbrella term for several rendering techniques
+ * employed by Microsoft's various GUI and rendering toolkit
+ * implementations, most importantly: subpixel rendering for using the
+ * RGB subpixels of LCDs to approximately triple the perceived
+ * resolution on the x-axis and subpixel hinting for positioning stems
+ * on subpixel borders. TrueType programming is explicit, i.e., fonts
+ * must be programmed to take advantage of ClearType's possibilities.
+ *
+ * When ClearType was introduced, it seemed unlikely that all fonts
+ * would be reprogrammed, so Microsoft decided to implement a backward
+ * compatibility mode. It employs several simple to complicated
+ * assumptions and tricks, many of them font-dependent, that modify the
+ * interpretation of the bytecode contained in these fonts to retrofit
+ * them into a ClearType-y look. The quality of the results varies.
+ * Most (web)fonts that were released since then have come to rely on
+ * these hacks to render correctly, even some of Microsoft's flagship
+ * fonts (e.g., Calibri, Cambria, Segoe UI).
+ *
+ * FreeType's minimal subpixel hinting code (interpreter version 40)
+ * employs a small list of font-agnostic hacks loosely based on the
+ * public information available on Microsoft's compatibility mode[2].
+ * The focus is on modern (web)fonts rather than legacy fonts that were
+ * made for monochrome rendering. It will not match ClearType rendering
+ * exactly. Unlike the `Infinality' code (interpreter version 38) that
+ * came before, it will not try to toggle hacks for specific fonts for
+ * performance and complexity reasons. It will fall back to version 35
+ * behavior for tricky fonts[1] or when monochrome rendering is
+ * requested.
+ *
+ * Major hacks
+ *
+ * - Any point movement on the x axis is ignored (cf. `Direct_Move' and
+ * `Direct_Move_X'). This has the smallest code footprint and single
+ * biggest effect. The ClearType way to increase resolution is
+ * supersampling the x axis, the FreeType way is ignoring instructions
+ * on the x axis, which gives the same result in the majority of
+ * cases.
+ *
+ * - Points are not moved post-IUP (neither on the x nor on the y axis),
+ * except the x component of diagonal moves post-IUP (cf.
+ * `Direct_Move', `Direct_Move_Y', `Move_Zp2_Point'). Post-IUP
+ * changes are commonly used to `fix' pixel patterns which has little
+ * use outside monochrome rendering.
+ *
+ * - SHPIX and DELTAP don't execute unless moving a composite on the
+ * y axis or moving a previously y touched point. SHPIX additionally
+ * denies movement on the x axis (cf. `Ins_SHPIX' and `Ins_DELTAP').
+ * Both instructions are commonly used to `fix' pixel patterns for
+ * monochrome or Windows's GDI rendering but make little sense for
+ * FreeType rendering. Both can distort the outline. See [2] for
+ * details.
+ *
+ * - The hdmx table and modifications to phantom points are ignored.
+ * Bearings and advance widths remain unchanged (except rounding them
+ * outside the interpreter!), cf. `compute_glyph_metrics' and
+ * `TT_Hint_Glyph'. Letting non-native-ClearType fonts modify spacing
+ * might mess up spacing.
+ *
+ * Minor hacks
+ *
+ * - FLIPRGON, FLIPRGOFF, and FLIPPT don't execute post-IUP. This
+ * prevents dents in e.g. Arial-Regular's `D' and `G' glyphs at
+ * various sizes.
+ *
+ * (Post-IUP is the state after both IUP[x] and IUP[y] have been
+ * executed.)
+ *
+ * The best results are achieved for fonts that were from the outset
+ * designed with ClearType in mind, meaning they leave the x axis mostly
+ * alone and don't mess with the `final' outline to produce more
+ * pleasing pixel patterns. The harder the designer tried to produce
+ * very specific patterns (`superhinting') for pre-ClearType-displays,
+ * the worse the results.
+ *
+ * Microsoft defines a way to turn off backward compatibility and
+ * interpret instructions as before (called `native ClearType')[2][3].
+ * The font designer then regains full control and is responsible for
+ * making the font work correctly with ClearType without any
+ * hand-holding by the interpreter or rasterizer[4]. The v40
+ * interpreter assumes backward compatibility by default, which can be
+ * turned off the same way by executing the following in the control
+ * program (cf. `Ins_INSTCTRL').
+ *
+ * #PUSH 4,3
+ * INSTCTRL[]
+ *
+ * [1] Tricky fonts as FreeType defines them rely on the bytecode
+ * interpreter to display correctly. Hacks can interfere with them,
+ * so they get treated like native ClearType fonts (v40 with
+ * backward compatibility turned off). Cf. `TT_RunIns'.
+ *
+ * [2] Proposed by Microsoft's Greg Hitchcock in
+ * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
+ *
+ * [3] Beat Stamm describes it in more detail:
+ * http://www.beatstamm.com/typography/RTRCh4.htm#Sec12
+ *
+ * [4] The list of `native ClearType' fonts is small at the time of this
+ * writing; I found the following on a Windows 10 Update 1511
+ * installation: Constantia, Corbel, Sitka, Malgun Gothic, Microsoft
+ * JhengHei (Bold and UI Bold), Microsoft YaHei (Bold and UI Bold),
+ * SimSun, NSimSun, and Yu Gothic.
+ *
+ */
+
+ /* Using v40 implies subpixel hinting, unless FT_RENDER_MODE_MONO has been
+ * requested. Used to detect interpreter */
+ /* version switches. `_lean' to differentiate from the Infinality */
+ /* `subpixel_hinting', which is managed differently. */
+ FT_Bool subpixel_hinting_lean;
+
+ /* Long side of a LCD subpixel is vertical (e.g., screen is rotated). */
+ /* `_lean' to differentiate from the Infinality `vertical_lcd', which */
+ /* is managed differently. */
+ FT_Bool vertical_lcd_lean;
+
+ /* Default to backward compatibility mode in v40 interpreter. If */
+ /* this is false, it implies the interpreter is in v35 or in native */
+ /* ClearType mode. */
+ FT_Bool backward_compatibility;
+
+ /* Useful for detecting and denying post-IUP trickery that is usually */
+ /* used to fix pixel patterns (`superhinting'). */
+ FT_Bool iupx_called;
+ FT_Bool iupy_called;
+
+ /* ClearType hinting and grayscale rendering, as used by Universal */
+ /* Windows Platform apps (Windows 8 and above). Like the standard */
+ /* colorful ClearType mode, it utilizes a vastly increased virtual */
+ /* resolution on the x axis. Different from bi-level hinting and */
+ /* grayscale rendering, the old mode from Win9x days that roughly */
+ /* adheres to the physical pixel grid on both axes. */
+ FT_Bool grayscale_cleartype;
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL */
+
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
TT_Round_Func func_round_sphn; /* subpixel rounding function */
FT_Bool subpixel_hinting; /* Using subpixel hinting? */
@@ -279,7 +422,15 @@
FT_ULong sph_in_func_flags; /* flags to indicate if in */
/* special functions */
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
+
+ /* We maintain two counters (in addition to the instruction counter) */
+ /* that act as loop detectors for LOOPCALL and jump opcodes with */
+ /* negative arguments. */
+ FT_ULong loopcall_counter;
+ FT_ULong loopcall_counter_max;
+ FT_ULong neg_jump_counter;
+ FT_ULong neg_jump_counter_max;
} TT_ExecContextRec;
@@ -382,7 +533,7 @@
FT_END_HEADER
-#endif /* __TTINTERP_H__ */
+#endif /* TTINTERP_H_ */
/* END */
diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c
index 202aa04..6685dc8 100644
--- a/src/truetype/ttobjs.c
+++ b/src/truetype/ttobjs.c
@@ -4,7 +4,7 @@
/* */
/* Objects manager (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -21,7 +21,7 @@
#include FT_INTERNAL_STREAM_H
#include FT_TRUETYPE_TAGS_H
#include FT_INTERNAL_SFNT_H
-#include FT_TRUETYPE_DRIVER_H
+#include FT_DRIVER_H
#include "ttgload.h"
#include "ttpload.h"
@@ -32,10 +32,6 @@
#include "ttinterp.h"
#endif
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#include FT_TRUETYPE_UNPATENTED_H
-#endif
-
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
#include "ttgxvar.h"
#endif
@@ -121,7 +117,7 @@
FT_Error error;
- FT_MEM_ZERO( zone, sizeof ( *zone ) );
+ FT_ZERO( zone );
zone->memory = memory;
if ( FT_NEW_ARRAY( zone->org, maxPoints ) ||
@@ -151,20 +147,51 @@
{
#define TRICK_NAMES_MAX_CHARACTERS 19
-#define TRICK_NAMES_COUNT 9
+#define TRICK_NAMES_COUNT 26
static const char trick_names[TRICK_NAMES_COUNT]
[TRICK_NAMES_MAX_CHARACTERS + 1] =
{
+ /*
+ PostScript names are given in brackets if they differ from the
+ family name. The version numbers, together with the copyright or
+ release year data, are taken from fonts available to the
+ developers.
+
+ Note that later versions of the fonts might be no longer tricky;
+ for example, `MingLiU' version 7.00 (file `mingliu.ttc' from
+ Windows 7) is an ordinary TTC with non-tricky subfonts.
+ */
+
+ "cpop", /* dftt-p7.ttf; version 1.00, 1992 [DLJGyShoMedium] */
+ "DFGirl-W6-WIN-BF", /* dftt-h6.ttf; version 1.00, 1993 */
+ "DFGothic-EB", /* DynaLab Inc. 1992-1995 */
+ "DFGyoSho-Lt", /* DynaLab Inc. 1992-1995 */
+ "DFHei-Md-HK-BF", /* maybe DynaLab Inc. */
+ "DFHSGothic-W5", /* DynaLab Inc. 1992-1995 */
+ "DFHSMincho-W3", /* DynaLab Inc. 1992-1995 */
+ "DFHSMincho-W7", /* DynaLab Inc. 1992-1995 */
"DFKaiSho-SB", /* dfkaisb.ttf */
"DFKaiShu",
- "DFKai-SB", /* kaiu.ttf */
+ "DFKaiShu-Md-HK-BF", /* maybe DynaLab Inc. */
+ "DFKai-SB", /* kaiu.ttf; version 3.00, 1998 [DFKaiShu-SB-Estd-BF] */
+ "DFMing-Bd-HK-BF", /* maybe DynaLab Inc. */
+ "DLC", /* dftt-m7.ttf; version 1.00, 1993 [DLCMingBold] */
+ /* dftt-f5.ttf; version 1.00, 1993 [DLCFongSung] */
+ "DLCHayMedium", /* dftt-b5.ttf; version 1.00, 1993 */
+ "DLCHayBold", /* dftt-b7.ttf; version 1.00, 1993 */
+ "DLCKaiMedium", /* dftt-k5.ttf; version 1.00, 1992 */
+ "DLCLiShu", /* dftt-l5.ttf; version 1.00, 1992 */
+ "DLCRoundBold", /* dftt-r7.ttf; version 1.00, 1993 */
"HuaTianKaiTi?", /* htkt2.ttf */
"HuaTianSongTi?", /* htst3.ttf */
- "Ming(for ISO10646)", /* hkscsiic.ttf & iicore.ttf */
- "MingLiU", /* mingliu.ttf & mingliu.ttc */
- "PMingLiU", /* mingliu.ttc */
- "MingLi43", /* mingli.ttf */
+ "Ming(for ISO10646)", /* hkscsiic.ttf; version 0.12, 2007 [Ming] */
+ /* iicore.ttf; version 0.07, 2007 [Ming] */
+ "MingLiU", /* mingliu.ttf */
+ /* mingliu.ttc; version 3.21, 2001 */
+ "MingMedium", /* dftt-m5.ttf; version 1.00, 1993 [DLCMingMedium] */
+ "PMingLiU", /* mingliu.ttc; version 3.21, 2001 */
+ "MingLi43", /* mingli.ttf; version 1.00, 1992 */
};
int nn;
@@ -191,7 +218,7 @@
{
FT_Error error;
FT_UInt32 checksum = 0;
- int i;
+ FT_UInt i;
if ( FT_FRAME_ENTER( length ) )
@@ -200,8 +227,8 @@
for ( ; length > 3; length -= 4 )
checksum += (FT_UInt32)FT_GET_ULONG();
- for ( i = 3; length > 0; length --, i-- )
- checksum += (FT_UInt32)( FT_GET_BYTE() << ( i * 8 ) );
+ for ( i = 3; length > 0; length--, i-- )
+ checksum += (FT_UInt32)FT_GET_BYTE() << ( i * 8 );
FT_FRAME_EXIT();
@@ -246,7 +273,7 @@
tt_check_trickyness_sfnt_ids( TT_Face face )
{
#define TRICK_SFNT_IDS_PER_FACE 3
-#define TRICK_SFNT_IDS_NUM_FACES 17
+#define TRICK_SFNT_IDS_NUM_FACES 29
static const tt_sfnt_id_rec sfnt_id[TRICK_SFNT_IDS_NUM_FACES]
[TRICK_SFNT_IDS_PER_FACE] = {
@@ -265,11 +292,66 @@
{ 0x28233BF1UL, 0x000087C4UL }, /* fpgm */
{ 0xA344A1EBUL, 0x000001E1UL } /* prep */
},
+ { /* DFGothic-EB */
+ { 0x12C3EBB2UL, 0x00000350UL }, /* cvt */
+ { 0xB680EE64UL, 0x000087A7UL }, /* fpgm */
+ { 0xCE939563UL, 0x00000758UL } /* prep */
+ },
+ { /* DFGyoSho-Lt */
+ { 0x11E5EAD4UL, 0x00000350UL }, /* cvt */
+ { 0xCE5956E9UL, 0x0000BC85UL }, /* fpgm */
+ { 0x8272F416UL, 0x00000045UL } /* prep */
+ },
+ { /* DFHei-Md-HK-BF */
+ { 0x1257EB46UL, 0x00000350UL }, /* cvt */
+ { 0xF699D160UL, 0x0000715FUL }, /* fpgm */
+ { 0xD222F568UL, 0x000003BCUL } /* prep */
+ },
+ { /* DFHSGothic-W5 */
+ { 0x1262EB4EUL, 0x00000350UL }, /* cvt */
+ { 0xE86A5D64UL, 0x00007940UL }, /* fpgm */
+ { 0x7850F729UL, 0x000005FFUL } /* prep */
+ },
+ { /* DFHSMincho-W3 */
+ { 0x122DEB0AUL, 0x00000350UL }, /* cvt */
+ { 0x3D16328AUL, 0x0000859BUL }, /* fpgm */
+ { 0xA93FC33BUL, 0x000002CBUL } /* prep */
+ },
+ { /* DFHSMincho-W7 */
+ { 0x125FEB26UL, 0x00000350UL }, /* cvt */
+ { 0xA5ACC982UL, 0x00007EE1UL }, /* fpgm */
+ { 0x90999196UL, 0x0000041FUL } /* prep */
+ },
{ /* DFKaiShu */
{ 0x11E5EAD4UL, 0x00000350UL }, /* cvt */
{ 0x5A30CA3BUL, 0x00009063UL }, /* fpgm */
{ 0x13A42602UL, 0x0000007EUL } /* prep */
},
+ { /* DFKaiShu, variant */
+ { 0x11E5EAD4UL, 0x00000350UL }, /* cvt */
+ { 0xA6E78C01UL, 0x00008998UL }, /* fpgm */
+ { 0x13A42602UL, 0x0000007EUL } /* prep */
+ },
+ { /* DFKaiShu-Md-HK-BF */
+ { 0x11E5EAD4UL, 0x00000360UL }, /* cvt */
+ { 0x9DB282B2UL, 0x0000C06EUL }, /* fpgm */
+ { 0x53E6D7CAUL, 0x00000082UL } /* prep */
+ },
+ { /* DFMing-Bd-HK-BF */
+ { 0x1243EB18UL, 0x00000350UL }, /* cvt */
+ { 0xBA0A8C30UL, 0x000074ADUL }, /* fpgm */
+ { 0xF3D83409UL, 0x0000037BUL } /* prep */
+ },
+ { /* DLCLiShu */
+ { 0x07DCF546UL, 0x00000308UL }, /* cvt */
+ { 0x40FE7C90UL, 0x00008E2AUL }, /* fpgm */
+ { 0x608174B5UL, 0x0000007AUL } /* prep */
+ },
+ { /* DLCHayBold */
+ { 0xEB891238UL, 0x00000308UL }, /* cvt */
+ { 0xD2E4DCD4UL, 0x0000676FUL }, /* fpgm */
+ { 0x8EA5F293UL, 0x000003B8UL } /* prep */
+ },
{ /* HuaTianKaiTi */
{ 0xFFFBFFFCUL, 0x00000008UL }, /* cvt */
{ 0x9C9E48B8UL, 0x0000BEA2UL }, /* fpgm */
@@ -339,6 +421,11 @@
{ 0x00000000UL, 0x00000000UL }, /* cvt */
{ 0xF055FC48UL, 0x000001C2UL }, /* fpgm */
{ 0x3900DED3UL, 0x00001E18UL } /* prep */
+ },
+ { /* MINGLI.TTF, 1992 */
+ { 0x00170003UL, 0x00000060UL }, /* cvt */
+ { 0xDBB4306EUL, 0x000058AAUL }, /* fpgm */
+ { 0xD643482AUL, 0x00000035UL } /* prep */
}
};
@@ -397,11 +484,11 @@
for ( j = 0; j < TRICK_SFNT_IDS_NUM_FACES; j++ )
{
if ( !has_cvt && !sfnt_id[j][TRICK_SFNT_ID_cvt].Length )
- num_matched_ids[j] ++;
+ num_matched_ids[j]++;
if ( !has_fpgm && !sfnt_id[j][TRICK_SFNT_ID_fpgm].Length )
- num_matched_ids[j] ++;
+ num_matched_ids[j]++;
if ( !has_prep && !sfnt_id[j][TRICK_SFNT_ID_prep].Length )
- num_matched_ids[j] ++;
+ num_matched_ids[j]++;
if ( num_matched_ids[j] == TRICK_SFNT_IDS_PER_FACE )
return TRUE;
}
@@ -490,7 +577,10 @@
/* <Input> */
/* stream :: The source font stream. */
/* */
- /* face_index :: The index of the font face in the resource. */
+ /* face_index :: The index of the TrueType font, if we are opening a */
+ /* collection, in bits 0-15. The numbered instance */
+ /* index~+~1 of a GX (sub)font, if applicable, in bits */
+ /* 16-30. */
/* */
/* num_params :: Number of additional generic parameters. Ignored. */
/* */
@@ -532,6 +622,7 @@
goto Exit;
/* check that we have a valid TrueType file */
+ FT_TRACE2(( " " ));
error = sfnt->init_face( stream, face, face_index, num_params, params );
/* Stream may have changed. */
@@ -543,9 +634,11 @@
/* We must also be able to accept Mac/GX fonts, as well as OT ones. */
/* The 0x00020000 tag is completely undocumented; some fonts from */
/* Arphic made for Chinese Windows 3.1 have this. */
- if ( face->format_tag != 0x00010000L && /* MS fonts */
- face->format_tag != 0x00020000L && /* CJK fonts for Win 3.1 */
- face->format_tag != TTAG_true ) /* Mac fonts */
+ if ( face->format_tag != 0x00010000L && /* MS fonts */
+ face->format_tag != 0x00020000L && /* CJK fonts for Win 3.1 */
+ face->format_tag != TTAG_true && /* Mac fonts */
+ face->format_tag != TTAG_0xA5kbd && /* `Keyboard.dfont' (legacy Mac OS X) */
+ face->format_tag != TTAG_0xA5lst ) /* `LastResort.dfont' (legacy Mac OS X) */
{
FT_TRACE2(( " not a TTF font\n" ));
goto Bad_Format;
@@ -573,82 +666,70 @@
if ( FT_IS_SCALABLE( ttface ) )
{
-
#ifdef FT_CONFIG_OPTION_INCREMENTAL
-
if ( !ttface->internal->incremental_interface )
- error = tt_face_load_loca( face, stream );
- if ( !error )
- error = tt_face_load_cvt( face, stream );
- if ( !error )
- error = tt_face_load_fpgm( face, stream );
- if ( !error )
- error = tt_face_load_prep( face, stream );
-
- /* Check the scalable flag based on `loca'. */
- if ( !ttface->internal->incremental_interface &&
- ttface->num_fixed_sizes &&
- face->glyph_locations &&
- tt_check_single_notdef( ttface ) )
- {
- FT_TRACE5(( "tt_face_init:"
- " Only the `.notdef' glyph has an outline.\n"
- " "
- " Resetting scalable flag to FALSE.\n" ));
-
- ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
- }
-
-#else
-
- if ( !error )
- error = tt_face_load_loca( face, stream );
- if ( !error )
- error = tt_face_load_cvt( face, stream );
- if ( !error )
- error = tt_face_load_fpgm( face, stream );
- if ( !error )
- error = tt_face_load_prep( face, stream );
-
- /* Check the scalable flag based on `loca'. */
- if ( ttface->num_fixed_sizes &&
- face->glyph_locations &&
- tt_check_single_notdef( ttface ) )
- {
- FT_TRACE5(( "tt_face_init:"
- " Only the `.notdef' glyph has an outline.\n"
- " "
- " Resetting scalable flag to FALSE.\n" ));
-
- ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
- }
-
#endif
+ {
+ error = tt_face_load_loca( face, stream );
+ /* having a (non-zero) `glyf' table without */
+ /* a `loca' table is not valid */
+ if ( face->glyf_len && FT_ERR_EQ( error, Table_Missing ) )
+ goto Exit;
+ if ( error )
+ goto Exit;
+ }
+
+ /* `fpgm', `cvt', and `prep' are optional */
+ error = tt_face_load_cvt( face, stream );
+ if ( error && FT_ERR_NEQ( error, Table_Missing ) )
+ goto Exit;
+
+ error = tt_face_load_fpgm( face, stream );
+ if ( error && FT_ERR_NEQ( error, Table_Missing ) )
+ goto Exit;
+
+ error = tt_face_load_prep( face, stream );
+ if ( error && FT_ERR_NEQ( error, Table_Missing ) )
+ goto Exit;
+
+ /* Check the scalable flag based on `loca'. */
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+ if ( !ttface->internal->incremental_interface )
+#endif
+ {
+ if ( ttface->num_fixed_sizes &&
+ face->glyph_locations &&
+ tt_check_single_notdef( ttface ) )
+ {
+ FT_TRACE5(( "tt_face_init:"
+ " Only the `.notdef' glyph has an outline.\n"
+ " "
+ " Resetting scalable flag to FALSE.\n" ));
+
+ ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
+ }
+ }
}
-#if defined( TT_CONFIG_OPTION_UNPATENTED_HINTING ) && \
- !defined( TT_CONFIG_OPTION_BYTECODE_INTERPRETER )
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
{
- FT_Bool unpatented_hinting;
- int i;
+ FT_UInt instance_index = (FT_UInt)face_index >> 16;
- /* Determine whether unpatented hinting is to be used for this face. */
- unpatented_hinting = FT_BOOL
- ( library->debug_hooks[FT_DEBUG_HOOK_UNPATENTED_HINTING] != NULL );
+ if ( FT_HAS_MULTIPLE_MASTERS( ttface ) &&
+ instance_index > 0 )
+ {
+ error = TT_Set_Named_Instance( face, instance_index );
+ if ( error )
+ goto Exit;
- for ( i = 0; i < num_params && !face->unpatented_hinting; i++ )
- if ( params[i].tag == FT_PARAM_TAG_UNPATENTED_HINTING )
- unpatented_hinting = TRUE;
-
- if ( !unpatented_hinting )
- ttface->internal->ignore_unpatented_hinter = TRUE;
+ tt_apply_mvar( face );
+ }
}
-#endif /* TT_CONFIG_OPTION_UNPATENTED_HINTING &&
- !TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
/* initialize standard glyph loading routines */
TT_Init_Glyph_Loading( face );
@@ -712,7 +793,7 @@
face->cvt_program_size = 0;
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- tt_done_blend( memory, face->blend );
+ tt_done_blend( face );
face->blend = NULL;
#endif
}
@@ -770,14 +851,14 @@
exec->pedantic_hinting = pedantic;
{
- FT_Size_Metrics* metrics = &exec->metrics;
- TT_Size_Metrics* tt_metrics = &exec->tt_metrics;
+ FT_Size_Metrics* size_metrics = &exec->metrics;
+ TT_Size_Metrics* tt_metrics = &exec->tt_metrics;
- metrics->x_ppem = 0;
- metrics->y_ppem = 0;
- metrics->x_scale = 0;
- metrics->y_scale = 0;
+ size_metrics->x_ppem = 0;
+ size_metrics->y_ppem = 0;
+ size_metrics->x_scale = 0;
+ size_metrics->y_scale = 0;
tt_metrics->ppem = 0;
tt_metrics->scale = 0;
@@ -800,6 +881,11 @@
FT_TRACE4(( "Executing `fpgm' table.\n" ));
error = face->interpreter( exec );
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( error )
+ FT_TRACE4(( " interpretation failed with error code 0x%x\n",
+ error ));
+#endif
}
else
error = FT_Err_Ok;
@@ -863,8 +949,12 @@
TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 );
FT_TRACE4(( "Executing `prep' table.\n" ));
-
error = face->interpreter( exec );
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( error )
+ FT_TRACE4(( " interpretation failed with error code 0x%x\n",
+ error ));
+#endif
}
else
error = FT_Err_Ok;
@@ -983,17 +1073,17 @@
/* Set default metrics */
{
- TT_Size_Metrics* metrics = &size->ttmetrics;
+ TT_Size_Metrics* tt_metrics = &size->ttmetrics;
- metrics->rotated = FALSE;
- metrics->stretched = FALSE;
+ tt_metrics->rotated = FALSE;
+ tt_metrics->stretched = FALSE;
/* set default engine compensation */
- metrics->compensations[0] = 0; /* gray */
- metrics->compensations[1] = 0; /* black */
- metrics->compensations[2] = 0; /* white */
- metrics->compensations[3] = 0; /* reserved */
+ tt_metrics->compensations[0] = 0; /* gray */
+ tt_metrics->compensations[1] = 0; /* black */
+ tt_metrics->compensations[2] = 0; /* white */
+ tt_metrics->compensations[3] = 0; /* reserved */
}
/* allocate function defs, instruction defs, cvt, and storage area */
@@ -1029,7 +1119,15 @@
}
/* Fine, now run the font program! */
+
+ /* In case of an error while executing `fpgm', we intentionally don't */
+ /* clean up immediately – bugs in the `fpgm' are so fundamental that */
+ /* all following hinting calls should fail. Additionally, `fpgm' is */
+ /* to be executed just once; calling it again is completely useless */
+ /* and might even lead to extremely slow behaviour if it is malformed */
+ /* (containing an infinite loop, for example). */
error = tt_size_run_fpgm( size, pedantic );
+ return error;
Exit:
if ( error )
@@ -1048,8 +1146,10 @@
if ( size->bytecode_ready < 0 )
error = tt_size_init_bytecode( (FT_Size)size, pedantic );
+ else
+ error = size->bytecode_ready;
- if ( error || size->bytecode_ready )
+ if ( error )
goto Exit;
/* rescale CVT when needed */
@@ -1081,6 +1181,8 @@
error = tt_size_run_prep( size, pedantic );
}
+ else
+ error = size->cvt_ready;
Exit:
return error;
@@ -1157,26 +1259,34 @@
/* have been changed. */
/* */
/* <Input> */
- /* size :: A handle to the target size object. */
+ /* size :: A handle to the target size object. */
+ /* */
+ /* only_height :: Only recompute ascender, descender, and height; */
+ /* this flag is used for variation fonts where */
+ /* `tt_size_reset' is used as an iterator function. */
/* */
FT_LOCAL_DEF( FT_Error )
- tt_size_reset( TT_Size size )
+ tt_size_reset( TT_Size size,
+ FT_Bool only_height )
{
TT_Face face;
- FT_Error error = FT_Err_Ok;
- FT_Size_Metrics* metrics;
+ FT_Size_Metrics* size_metrics;
- size->ttmetrics.valid = FALSE;
-
face = (TT_Face)size->root.face;
- metrics = &size->metrics;
+ /* nothing to do for CFF2 */
+ if ( face->is_cff2 )
+ return FT_Err_Ok;
+
+ size->ttmetrics.valid = FALSE;
+
+ size_metrics = &size->hinted_metrics;
/* copy the result from base layer */
- *metrics = size->root.metrics;
+ *size_metrics = size->root.metrics;
- if ( metrics->x_ppem < 1 || metrics->y_ppem < 1 )
+ if ( size_metrics->x_ppem < 1 || size_metrics->y_ppem < 1 )
return FT_THROW( Invalid_PPem );
/* This bit flag, if set, indicates that the ppems must be */
@@ -1185,48 +1295,66 @@
/* */
if ( face->header.Flags & 8 )
{
- metrics->x_scale = FT_DivFix( metrics->x_ppem << 6,
- face->root.units_per_EM );
- metrics->y_scale = FT_DivFix( metrics->y_ppem << 6,
- face->root.units_per_EM );
+ /* the TT spec always asks for ROUND, not FLOOR or CEIL */
+ size_metrics->ascender = FT_PIX_ROUND(
+ FT_MulFix( face->root.ascender,
+ size_metrics->y_scale ) );
+ size_metrics->descender = FT_PIX_ROUND(
+ FT_MulFix( face->root.descender,
+ size_metrics->y_scale ) );
+ size_metrics->height = FT_PIX_ROUND(
+ FT_MulFix( face->root.height,
+ size_metrics->y_scale ) );
+ }
- metrics->ascender =
- FT_PIX_ROUND( FT_MulFix( face->root.ascender, metrics->y_scale ) );
- metrics->descender =
- FT_PIX_ROUND( FT_MulFix( face->root.descender, metrics->y_scale ) );
- metrics->height =
- FT_PIX_ROUND( FT_MulFix( face->root.height, metrics->y_scale ) );
- metrics->max_advance =
- FT_PIX_ROUND( FT_MulFix( face->root.max_advance_width,
- metrics->x_scale ) );
+ size->ttmetrics.valid = TRUE;
+
+ if ( only_height )
+ {
+ /* we must not recompute the scaling values here since */
+ /* `tt_size_reset' was already called (with only_height = 0) */
+ return FT_Err_Ok;
+ }
+
+ if ( face->header.Flags & 8 )
+ {
+ /* base scaling values on integer ppem values, */
+ /* as mandated by the TrueType specification */
+ size_metrics->x_scale = FT_DivFix( size_metrics->x_ppem << 6,
+ face->root.units_per_EM );
+ size_metrics->y_scale = FT_DivFix( size_metrics->y_ppem << 6,
+ face->root.units_per_EM );
+
+ size_metrics->max_advance = FT_PIX_ROUND(
+ FT_MulFix( face->root.max_advance_width,
+ size_metrics->x_scale ) );
}
/* compute new transformation */
- if ( metrics->x_ppem >= metrics->y_ppem )
+ if ( size_metrics->x_ppem >= size_metrics->y_ppem )
{
- size->ttmetrics.scale = metrics->x_scale;
- size->ttmetrics.ppem = metrics->x_ppem;
+ size->ttmetrics.scale = size_metrics->x_scale;
+ size->ttmetrics.ppem = size_metrics->x_ppem;
size->ttmetrics.x_ratio = 0x10000L;
- size->ttmetrics.y_ratio = FT_DivFix( metrics->y_ppem,
- metrics->x_ppem );
+ size->ttmetrics.y_ratio = FT_DivFix( size_metrics->y_ppem,
+ size_metrics->x_ppem );
}
else
{
- size->ttmetrics.scale = metrics->y_scale;
- size->ttmetrics.ppem = metrics->y_ppem;
- size->ttmetrics.x_ratio = FT_DivFix( metrics->x_ppem,
- metrics->y_ppem );
+ size->ttmetrics.scale = size_metrics->y_scale;
+ size->ttmetrics.ppem = size_metrics->y_ppem;
+ size->ttmetrics.x_ratio = FT_DivFix( size_metrics->x_ppem,
+ size_metrics->y_ppem );
size->ttmetrics.y_ratio = 0x10000L;
}
+ size->metrics = size_metrics;
+
#ifdef TT_USE_BYTECODE_INTERPRETER
size->cvt_ready = -1;
#endif /* TT_USE_BYTECODE_INTERPRETER */
- if ( !error )
- size->ttmetrics.valid = TRUE;
-
- return error;
+ return FT_Err_Ok;
}
@@ -1252,10 +1380,12 @@
TT_Driver driver = (TT_Driver)ttdriver;
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- driver->interpreter_version = TT_INTERPRETER_VERSION_38;
-#else
driver->interpreter_version = TT_INTERPRETER_VERSION_35;
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
+ driver->interpreter_version = TT_INTERPRETER_VERSION_38;
+#endif
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
+ driver->interpreter_version = TT_INTERPRETER_VERSION_40;
#endif
#else /* !TT_USE_BYTECODE_INTERPRETER */
diff --git a/src/truetype/ttobjs.h b/src/truetype/ttobjs.h
index 7ac4123..38fa30e 100644
--- a/src/truetype/ttobjs.h
+++ b/src/truetype/ttobjs.h
@@ -4,7 +4,7 @@
/* */
/* Objects manager (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTOBJS_H__
-#define __TTOBJS_H__
+#ifndef TTOBJS_H_
+#define TTOBJS_H_
#include <ft2build.h>
@@ -42,17 +42,6 @@
/*************************************************************************/
/* */
/* <Type> */
- /* TT_Instance */
- /* */
- /* <Description> */
- /* A handle to a TrueType size object. */
- /* */
- typedef struct TT_SizeRec_* TT_Size;
-
-
- /*************************************************************************/
- /* */
- /* <Type> */
/* TT_GlyphSlot */
/* */
/* <Description> */
@@ -83,10 +72,6 @@
FT_UnitVector projVector;
FT_UnitVector freeVector;
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_Bool both_x_axis;
-#endif
-
FT_Long loop;
FT_F26Dot6 minimum_distance;
FT_Int round_state;
@@ -293,7 +278,8 @@
/* we have our own copy of metrics so that we can modify */
/* it without affecting auto-hinting (when used) */
- FT_Size_Metrics metrics;
+ FT_Size_Metrics* metrics; /* for the current rendering mode */
+ FT_Size_Metrics hinted_metrics; /* for the hinted rendering mode */
TT_Size_Metrics ttmetrics;
@@ -301,6 +287,8 @@
#ifdef TT_USE_BYTECODE_INTERPRETER
+ FT_Long point_size; /* for the `MPS' bytecode instruction */
+
FT_UInt num_function_defs; /* number of function definitions */
FT_UInt max_function_defs;
TT_DefArray function_defs; /* table of function definitions */
@@ -402,7 +390,8 @@
#endif /* TT_USE_BYTECODE_INTERPRETER */
FT_LOCAL( FT_Error )
- tt_size_reset( TT_Size size );
+ tt_size_reset( TT_Size size,
+ FT_Bool only_height );
/*************************************************************************/
@@ -430,7 +419,7 @@
FT_END_HEADER
-#endif /* __TTOBJS_H__ */
+#endif /* TTOBJS_H_ */
/* END */
diff --git a/src/truetype/ttpic.c b/src/truetype/ttpic.c
index 242a6b7..cdbb806 100644
--- a/src/truetype/ttpic.c
+++ b/src/truetype/ttpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for truetype module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/truetype/ttpic.h b/src/truetype/ttpic.h
index 48ba4aa..df878ae 100644
--- a/src/truetype/ttpic.h
+++ b/src/truetype/ttpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for truetype module. */
/* */
-/* Copyright 2009-2015 by */
+/* Copyright 2009-2018 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,35 +16,41 @@
/***************************************************************************/
-#ifndef __TTPIC_H__
-#define __TTPIC_H__
+#ifndef TTPIC_H_
+#define TTPIC_H_
-FT_BEGIN_HEADER
+#include FT_INTERNAL_PIC_H
+
#ifndef FT_CONFIG_OPTION_PIC
-#define TT_SERVICES_GET tt_services
-#define TT_SERVICE_GX_MULTI_MASTERS_GET tt_service_gx_multi_masters
-#define TT_SERVICE_TRUETYPE_GLYF_GET tt_service_truetype_glyf
-#define TT_SERVICE_PROPERTIES_GET tt_service_properties
+#define TT_SERVICES_GET tt_services
+#define TT_SERVICE_GX_MULTI_MASTERS_GET tt_service_gx_multi_masters
+#define TT_SERVICE_METRICS_VARIATIONS_GET tt_service_metrics_variations
+#define TT_SERVICE_TRUETYPE_GLYF_GET tt_service_truetype_glyf
+#define TT_SERVICE_PROPERTIES_GET tt_service_properties
#else /* FT_CONFIG_OPTION_PIC */
#include FT_MULTIPLE_MASTERS_H
#include FT_SERVICE_MULTIPLE_MASTERS_H
+#include FT_SERVICE_METRICS_VARIATIONS_H
#include FT_SERVICE_TRUETYPE_GLYF_H
#include FT_SERVICE_PROPERTIES_H
+FT_BEGIN_HEADER
+
typedef struct TTModulePIC_
{
- FT_ServiceDescRec* tt_services;
+ FT_ServiceDescRec* tt_services;
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Service_MultiMastersRec tt_service_gx_multi_masters;
+ FT_Service_MultiMastersRec tt_service_gx_multi_masters;
+ FT_Service_MetricsVariationsRec tt_service_metrics_variations;
#endif
- FT_Service_TTGlyfRec tt_service_truetype_glyf;
- FT_Service_PropertiesRec tt_service_properties;
+ FT_Service_TTGlyfRec tt_service_truetype_glyf;
+ FT_Service_PropertiesRec tt_service_properties;
} TTModulePIC;
@@ -53,6 +59,8 @@
( (TTModulePIC*)((lib)->pic_container.truetype) )
#define TT_SERVICES_GET \
( GET_PIC( library )->tt_services )
+#define TT_SERVICE_METRICS_VARIATIONS_GET \
+ ( GET_PIC( library )->tt_service_metrics_variations )
#define TT_SERVICE_GX_MULTI_MASTERS_GET \
( GET_PIC( library )->tt_service_gx_multi_masters )
#define TT_SERVICE_TRUETYPE_GLYF_GET \
@@ -68,14 +76,13 @@
FT_Error
tt_driver_class_pic_init( FT_Library library );
+FT_END_HEADER
+
#endif /* FT_CONFIG_OPTION_PIC */
/* */
-
-FT_END_HEADER
-
-#endif /* __TTPIC_H__ */
+#endif /* TTPIC_H_ */
/* END */
diff --git a/src/truetype/ttpload.c b/src/truetype/ttpload.c
index fb338bd..d9526ad 100644
--- a/src/truetype/ttpload.c
+++ b/src/truetype/ttpload.c
@@ -4,7 +4,7 @@
/* */
/* TrueType-specific tables loader (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -73,9 +73,21 @@
/* it is possible that a font doesn't have a glyf table at all */
/* or its size is zero */
if ( FT_ERR_EQ( error, Table_Missing ) )
- face->glyf_len = 0;
+ {
+ face->glyf_len = 0;
+ face->glyf_offset = 0;
+ }
else if ( error )
goto Exit;
+ else
+ {
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+ if ( face->root.internal->incremental_interface )
+ face->glyf_offset = 0;
+ else
+#endif
+ face->glyf_offset = FT_STREAM_POS();
+ }
FT_TRACE2(( "Locations " ));
error = face->goto_table( face, TTAG_loca, stream, &table_len );
@@ -92,8 +104,7 @@
if ( table_len >= 0x40000L )
{
FT_TRACE2(( "table too large\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
+ table_len = 0x3FFFFL;
}
face->num_locations = table_len >> shift;
}
@@ -104,8 +115,7 @@
if ( table_len >= 0x20000L )
{
FT_TRACE2(( "table too large\n" ));
- error = FT_THROW( Invalid_Table );
- goto Exit;
+ table_len = 0x1FFFFL;
}
face->num_locations = table_len >> shift;
}
@@ -124,8 +134,9 @@
TT_Table entry = face->dir_tables;
TT_Table limit = entry + face->num_tables;
- FT_Long pos = (FT_Long)FT_STREAM_POS();
- FT_Long dist = 0x7FFFFFFFL;
+ FT_Long pos = (FT_Long)FT_STREAM_POS();
+ FT_Long dist = 0x7FFFFFFFL;
+ FT_Bool found = 0;
/* compute the distance to next table in font file */
@@ -135,10 +146,13 @@
if ( diff > 0 && diff < dist )
- dist = diff;
+ {
+ dist = diff;
+ found = 1;
+ }
}
- if ( entry == limit )
+ if ( !found )
{
/* `loca' is the last table */
dist = (FT_Long)stream->size - pos;
@@ -152,6 +166,14 @@
FT_TRACE2(( "adjusting num_locations to %d\n",
face->num_locations ));
}
+ else
+ {
+ face->root.num_glyphs = face->num_locations
+ ? (FT_Long)face->num_locations - 1 : 0;
+
+ FT_TRACE2(( "adjusting num_glyphs to %d\n",
+ face->root.num_glyphs ));
+ }
}
}
@@ -210,12 +232,13 @@
}
}
- /* Check broken location data */
+ /* Check broken location data. */
if ( pos1 > face->glyf_len )
{
FT_TRACE1(( "tt_face_get_location:"
- " too large offset=0x%08lx found for gid=0x%04lx,"
- " exceeding the end of glyf table (0x%08lx)\n",
+ " too large offset (0x%08lx) found for glyph index %ld,\n"
+ " "
+ " exceeding the end of `glyf' table (0x%08lx)\n",
pos1, gindex, face->glyf_len ));
*asize = 0;
return 0;
@@ -223,11 +246,26 @@
if ( pos2 > face->glyf_len )
{
- FT_TRACE1(( "tt_face_get_location:"
- " too large offset=0x%08lx found for gid=0x%04lx,"
- " truncate at the end of glyf table (0x%08lx)\n",
- pos2, gindex + 1, face->glyf_len ));
- pos2 = face->glyf_len;
+ /* We try to sanitize the last `loca' entry. */
+ if ( gindex == face->num_locations - 2 )
+ {
+ FT_TRACE1(( "tt_face_get_location:"
+ " too large size (%ld bytes) found for glyph index %ld,\n"
+ " "
+ " truncating at the end of `glyf' table to %ld bytes\n",
+ pos2 - pos1, gindex, face->glyf_len - pos1 ));
+ pos2 = face->glyf_len;
+ }
+ else
+ {
+ FT_TRACE1(( "tt_face_get_location:"
+ " too large offset (0x%08lx) found for glyph index %ld,\n"
+ " "
+ " exceeding the end of `glyf' table (0x%08lx)\n",
+ pos2, gindex + 1, face->glyf_len ));
+ *asize = 0;
+ return 0;
+ }
}
/* The `loca' table must be ordered; it refers to the length of */
@@ -486,7 +524,7 @@
{
FT_Error error;
FT_Memory memory = stream->memory;
- FT_UInt version, nn, num_records;
+ FT_UInt nn, num_records;
FT_ULong table_size, record_size;
FT_Byte* p;
FT_Byte* limit;
@@ -503,7 +541,10 @@
p = face->hdmx_table;
limit = p + table_size;
- version = FT_NEXT_USHORT( p );
+ /* Given that `hdmx' tables are losing its importance (for example, */
+ /* variation fonts introduced in OpenType 1.8 must not have this */
+ /* table) we no longer test for a correct `version' field. */
+ p += 2;
num_records = FT_NEXT_USHORT( p );
record_size = FT_NEXT_ULONG( p );
@@ -522,10 +563,10 @@
record_size &= 0xFFFFU;
/* The limit for `num_records' is a heuristic value. */
- if ( version != 0 ||
- num_records > 255 ||
- record_size > 0x10001L ||
- record_size < 4 )
+ if ( num_records > 255 ||
+ ( num_records > 0 &&
+ ( record_size > 0x10001L ||
+ record_size < 4 ) ) )
{
error = FT_THROW( Invalid_File_Format );
goto Fail;
diff --git a/src/truetype/ttpload.h b/src/truetype/ttpload.h
index bc92369..fa12527 100644
--- a/src/truetype/ttpload.h
+++ b/src/truetype/ttpload.h
@@ -4,7 +4,7 @@
/* */
/* TrueType-specific tables loader (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTPLOAD_H__
-#define __TTPLOAD_H__
+#ifndef TTPLOAD_H_
+#define TTPLOAD_H_
#include <ft2build.h>
@@ -69,7 +69,7 @@
FT_END_HEADER
-#endif /* __TTPLOAD_H__ */
+#endif /* TTPLOAD_H_ */
/* END */
diff --git a/src/truetype/ttsubpix.c b/src/truetype/ttsubpix.c
index dbda4d9..d94bcc8 100644
--- a/src/truetype/ttsubpix.c
+++ b/src/truetype/ttsubpix.c
@@ -4,7 +4,7 @@
/* */
/* TrueType Subpixel Hinting. */
/* */
-/* Copyright 2010-2015 by */
+/* Copyright 2010-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,12 +22,13 @@
#include FT_INTERNAL_SFNT_H
#include FT_TRUETYPE_TAGS_H
#include FT_OUTLINE_H
-#include FT_TRUETYPE_DRIVER_H
+#include FT_DRIVER_H
#include "ttsubpix.h"
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#if defined( TT_USE_BYTECODE_INTERPRETER ) && \
+ defined( TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY )
/*************************************************************************/
/* */
@@ -752,24 +753,24 @@
/* Does font name match rule family? */
- if ( strcmp( detected_font_name, rule_font_name ) == 0 )
+ if ( ft_strcmp( detected_font_name, rule_font_name ) == 0 )
return TRUE;
/* Is font name a wildcard ""? */
- if ( strcmp( rule_font_name, "" ) == 0 )
+ if ( ft_strcmp( rule_font_name, "" ) == 0 )
return TRUE;
/* Is font name contained in a class list? */
for ( i = 0; i < FAMILY_CLASS_RULES_SIZE; i++ )
{
- if ( strcmp( FAMILY_CLASS_Rules[i].name, rule_font_name ) == 0 )
+ if ( ft_strcmp( FAMILY_CLASS_Rules[i].name, rule_font_name ) == 0 )
{
for ( j = 0; j < SPH_MAX_CLASS_MEMBERS; j++ )
{
- if ( strcmp( FAMILY_CLASS_Rules[i].member[j], "" ) == 0 )
+ if ( ft_strcmp( FAMILY_CLASS_Rules[i].member[j], "" ) == 0 )
continue;
- if ( strcmp( FAMILY_CLASS_Rules[i].member[j],
- detected_font_name ) == 0 )
+ if ( ft_strcmp( FAMILY_CLASS_Rules[i].member[j],
+ detected_font_name ) == 0 )
return TRUE;
}
}
@@ -787,24 +788,24 @@
/* Does font style match rule style? */
- if ( strcmp( detected_font_style, rule_font_style ) == 0 )
+ if ( ft_strcmp( detected_font_style, rule_font_style ) == 0 )
return TRUE;
/* Is font style a wildcard ""? */
- if ( strcmp( rule_font_style, "" ) == 0 )
+ if ( ft_strcmp( rule_font_style, "" ) == 0 )
return TRUE;
/* Is font style contained in a class list? */
for ( i = 0; i < STYLE_CLASS_RULES_SIZE; i++ )
{
- if ( strcmp( STYLE_CLASS_Rules[i].name, rule_font_style ) == 0 )
+ if ( ft_strcmp( STYLE_CLASS_Rules[i].name, rule_font_style ) == 0 )
{
for ( j = 0; j < SPH_MAX_CLASS_MEMBERS; j++ )
{
- if ( strcmp( STYLE_CLASS_Rules[i].member[j], "" ) == 0 )
+ if ( ft_strcmp( STYLE_CLASS_Rules[i].member[j], "" ) == 0 )
continue;
- if ( strcmp( STYLE_CLASS_Rules[i].member[j],
- detected_font_style ) == 0 )
+ if ( ft_strcmp( STYLE_CLASS_Rules[i].member[j],
+ detected_font_style ) == 0 )
return TRUE;
}
}
@@ -903,9 +904,9 @@
sph_set_tweaks( TT_Loader loader,
FT_UInt glyph_index )
{
- TT_Face face = (TT_Face)loader->face;
+ TT_Face face = loader->face;
FT_String* family = face->root.family_name;
- FT_UInt ppem = loader->size->metrics.x_ppem;
+ FT_UInt ppem = loader->size->metrics->x_ppem;
FT_String* style = face->root.style_name;
@@ -1000,12 +1001,14 @@
}
}
-#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#else /* !(TT_USE_BYTECODE_INTERPRETER && */
+ /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY) */
/* ANSI C doesn't like empty source files */
typedef int _tt_subpix_dummy;
-#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* !(TT_USE_BYTECODE_INTERPRETER && */
+ /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY) */
/* END */
diff --git a/src/truetype/ttsubpix.h b/src/truetype/ttsubpix.h
index 9151aa3..1070bb0 100644
--- a/src/truetype/ttsubpix.h
+++ b/src/truetype/ttsubpix.h
@@ -4,7 +4,7 @@
/* */
/* TrueType Subpixel Hinting. */
/* */
-/* Copyright 2010-2015 by */
+/* Copyright 2010-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __TTSUBPIX_H__
-#define __TTSUBPIX_H__
+#ifndef TTSUBPIX_H_
+#define TTSUBPIX_H_
#include <ft2build.h>
#include "ttobjs.h"
@@ -27,7 +27,7 @@
FT_BEGIN_HEADER
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
/*************************************************************************/
/* */
@@ -100,11 +100,12 @@
#define SPH_OPTION_SET_COMPATIBLE_WIDTHS FALSE
#define SPH_OPTION_SET_RASTERIZER_VERSION 38
-#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
FT_END_HEADER
-#endif /* __TTSUBPIX_H__ */
+#endif /* TTSUBPIX_H_ */
+
/* END */
diff --git a/src/type1/Jamfile b/src/type1/Jamfile
index 5d7b62c..b94b7d0 100644
--- a/src/type1/Jamfile
+++ b/src/type1/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/type1 Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,13 @@
if $(FT2_MULTI)
{
- _sources = t1afm t1driver t1objs t1load t1gload t1parse ;
+ _sources = t1afm
+ t1driver
+ t1gload
+ t1load
+ t1objs
+ t1parse
+ ;
}
else
{
diff --git a/src/type1/module.mk b/src/type1/module.mk
index feb3459..3fea5cc 100644
--- a/src/type1/module.mk
+++ b/src/type1/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/type1/rules.mk b/src/type1/rules.mk
index fbd0543..cb1a142 100644
--- a/src/type1/rules.mk
+++ b/src/type1/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/type1/t1afm.c b/src/type1/t1afm.c
index 7f32059..61053d9 100644
--- a/src/type1/t1afm.c
+++ b/src/type1/t1afm.c
@@ -4,7 +4,7 @@
/* */
/* AFM support for Type 1 fonts (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -24,6 +24,8 @@
#include "t1errors.h"
+#ifndef T1_CONFIG_OPTION_NO_AFM
+
/*************************************************************************/
/* */
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */
@@ -197,7 +199,7 @@
/* encoding of first glyph (1 byte) */
/* encoding of second glyph (1 byte) */
/* offset (little-endian short) */
- for ( ; p < limit ; p += 4 )
+ for ( ; p < limit; p += 4 )
{
kp->index1 = FT_Get_Char_Index( t1_face, p[0] );
kp->index2 = FT_Get_Char_Index( t1_face, p[1] );
@@ -208,7 +210,7 @@
kp++;
}
- if ( oldcharmap != NULL )
+ if ( oldcharmap )
error = FT_Set_Charmap( t1_face, oldcharmap );
if ( error )
goto Exit;
@@ -239,9 +241,19 @@
AFM_ParserRec parser;
AFM_FontInfo fi = NULL;
FT_Error error = FT_ERR( Unknown_File_Format );
- T1_Font t1_font = &( (T1_Face)t1_face )->type1;
+ T1_Face face = (T1_Face)t1_face;
+ T1_Font t1_font = &face->type1;
+ if ( face->afm_data )
+ {
+ FT_TRACE1(( "T1_Read_Metrics:"
+ " Freeing previously attached metrics data.\n" ));
+ T1_Done_Metrics( memory, (AFM_FontInfo)face->afm_data );
+
+ face->afm_data = NULL;
+ }
+
if ( FT_NEW( fi ) ||
FT_FRAME_ENTER( stream->size ) )
goto Exit;
@@ -250,7 +262,7 @@
fi->Ascender = t1_font->font_bbox.yMax;
fi->Descender = t1_font->font_bbox.yMin;
- psaux = (PSAux_Service)( (T1_Face)t1_face )->psaux;
+ psaux = (PSAux_Service)face->psaux;
if ( psaux->afm_parser_funcs )
{
error = psaux->afm_parser_funcs->init( &parser,
@@ -298,15 +310,15 @@
if ( fi->NumKernPair )
{
t1_face->face_flags |= FT_FACE_FLAG_KERNING;
- ( (T1_Face)t1_face )->afm_data = fi;
- fi = NULL;
+ face->afm_data = fi;
+ fi = NULL;
}
}
FT_FRAME_EXIT();
Exit:
- if ( fi != NULL )
+ if ( fi )
T1_Done_Metrics( memory, fi );
return error;
@@ -392,5 +404,12 @@
return FT_Err_Ok;
}
+#else /* T1_CONFIG_OPTION_NO_AFM */
+
+ /* ANSI C doesn't like empty source files */
+ typedef int _t1_afm_dummy;
+
+#endif /* T1_CONFIG_OPTION_NO_AFM */
+
/* END */
diff --git a/src/type1/t1afm.h b/src/type1/t1afm.h
index 0f42f3e..cb8d302 100644
--- a/src/type1/t1afm.h
+++ b/src/type1/t1afm.h
@@ -4,7 +4,7 @@
/* */
/* AFM support for Type 1 fonts (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T1AFM_H__
-#define __T1AFM_H__
+#ifndef T1AFM_H_
+#define T1AFM_H_
#include <ft2build.h>
#include "t1objs.h"
@@ -48,7 +48,7 @@
FT_END_HEADER
-#endif /* __T1AFM_H__ */
+#endif /* T1AFM_H_ */
/* END */
diff --git a/src/type1/t1driver.c b/src/type1/t1driver.c
index 571f2d2..029b410 100644
--- a/src/type1/t1driver.c
+++ b/src/type1/t1driver.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 driver interface (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -29,6 +29,9 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
+#include FT_INTERNAL_HASH_H
+#include FT_INTERNAL_POSTSCRIPT_PROPS_H
+#include FT_DRIVER_H
#include FT_SERVICE_MULTIPLE_MASTERS_H
#include FT_SERVICE_GLYPH_DICT_H
@@ -36,6 +39,7 @@
#include FT_SERVICE_POSTSCRIPT_NAME_H
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
#include FT_SERVICE_POSTSCRIPT_INFO_H
+#include FT_SERVICE_PROPERTIES_H
#include FT_SERVICE_KERNING_H
@@ -87,8 +91,8 @@
static const FT_Service_GlyphDictRec t1_service_glyph_dict =
{
- (FT_GlyphDict_GetNameFunc) t1_get_glyph_name,
- (FT_GlyphDict_NameIndexFunc)t1_get_name_index
+ (FT_GlyphDict_GetNameFunc) t1_get_glyph_name, /* get_name */
+ (FT_GlyphDict_NameIndexFunc)t1_get_name_index /* name_index */
};
@@ -106,7 +110,7 @@
static const FT_Service_PsFontNameRec t1_service_ps_name =
{
- (FT_PsName_GetFunc)t1_get_ps_name
+ (FT_PsName_GetFunc)t1_get_ps_name /* get_ps_font_name */
};
@@ -118,11 +122,17 @@
#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
static const FT_Service_MultiMastersRec t1_service_multi_masters =
{
- (FT_Get_MM_Func) T1_Get_Multi_Master,
- (FT_Set_MM_Design_Func) T1_Set_MM_Design,
- (FT_Set_MM_Blend_Func) T1_Set_MM_Blend,
- (FT_Get_MM_Var_Func) T1_Get_MM_Var,
- (FT_Set_Var_Design_Func)T1_Set_Var_Design
+ (FT_Get_MM_Func) T1_Get_Multi_Master, /* get_mm */
+ (FT_Set_MM_Design_Func) T1_Set_MM_Design, /* set_mm_design */
+ (FT_Set_MM_Blend_Func) T1_Set_MM_Blend, /* set_mm_blend */
+ (FT_Get_MM_Blend_Func) T1_Get_MM_Blend, /* get_mm_blend */
+ (FT_Get_MM_Var_Func) T1_Get_MM_Var, /* get_mm_var */
+ (FT_Set_Var_Design_Func)T1_Set_Var_Design, /* set_var_design */
+ (FT_Get_Var_Design_Func)T1_Get_Var_Design, /* get_var_design */
+ (FT_Set_Instance_Func) T1_Reset_MM_Blend, /* set_instance */
+
+ (FT_Get_Var_Blend_Func) NULL, /* get_var_blend */
+ (FT_Done_Blend_Func) T1_Done_Blend /* done_blend */
};
#endif
@@ -329,13 +339,37 @@
break;
case PS_DICT_SUBR:
- if ( idx < (FT_UInt)type1->num_subrs )
{
- retval = type1->subrs_len[idx] + 1;
- if ( value && value_len >= retval )
+ FT_Bool ok = 0;
+
+
+ if ( type1->subrs_hash )
{
- ft_memcpy( value, (void *)( type1->subrs[idx] ), retval - 1 );
- ((FT_Char *)value)[retval - 1] = (FT_Char)'\0';
+ /* convert subr index to array index */
+ size_t* val = ft_hash_num_lookup( (FT_Int)idx,
+ type1->subrs_hash );
+
+
+ if ( val )
+ {
+ idx = *val;
+ ok = 1;
+ }
+ }
+ else
+ {
+ if ( idx < (FT_UInt)type1->num_subrs )
+ ok = 1;
+ }
+
+ if ( ok )
+ {
+ retval = type1->subrs_len[idx] + 1;
+ if ( value && value_len >= retval )
+ {
+ ft_memcpy( value, (void *)( type1->subrs[idx] ), retval - 1 );
+ ((FT_Char *)value)[retval - 1] = (FT_Char)'\0';
+ }
}
}
break;
@@ -567,23 +601,35 @@
static const FT_Service_PsInfoRec t1_service_ps_info =
{
- (PS_GetFontInfoFunc) t1_ps_get_font_info,
- (PS_GetFontExtraFunc) t1_ps_get_font_extra,
- (PS_HasGlyphNamesFunc) t1_ps_has_glyph_names,
- (PS_GetFontPrivateFunc)t1_ps_get_font_private,
- (PS_GetFontValueFunc) t1_ps_get_font_value,
+ (PS_GetFontInfoFunc) t1_ps_get_font_info, /* ps_get_font_info */
+ (PS_GetFontExtraFunc) t1_ps_get_font_extra, /* ps_get_font_extra */
+ (PS_HasGlyphNamesFunc) t1_ps_has_glyph_names, /* ps_has_glyph_names */
+ (PS_GetFontPrivateFunc)t1_ps_get_font_private, /* ps_get_font_private */
+ (PS_GetFontValueFunc) t1_ps_get_font_value, /* ps_get_font_value */
};
#ifndef T1_CONFIG_OPTION_NO_AFM
static const FT_Service_KerningRec t1_service_kerning =
{
- T1_Get_Track_Kerning,
+ T1_Get_Track_Kerning, /* get_track */
};
#endif
/*
+ * PROPERTY SERVICE
+ *
+ */
+
+ FT_DEFINE_SERVICE_PROPERTIESREC(
+ t1_service_properties,
+
+ (FT_Properties_SetFunc)ps_property_set, /* set_property */
+ (FT_Properties_GetFunc)ps_property_get ) /* get_property */
+
+
+ /*
* SERVICE LIST
*
*/
@@ -594,6 +640,7 @@
{ FT_SERVICE_ID_GLYPH_DICT, &t1_service_glyph_dict },
{ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TYPE_1 },
{ FT_SERVICE_ID_POSTSCRIPT_INFO, &t1_service_ps_info },
+ { FT_SERVICE_ID_PROPERTIES, &t1_service_properties },
#ifndef T1_CONFIG_OPTION_NO_AFM
{ FT_SERVICE_ID_KERNING, &t1_service_kerning },
@@ -683,42 +730,43 @@
FT_MODULE_DRIVER_SCALABLE |
FT_MODULE_DRIVER_HAS_HINTER,
- sizeof ( FT_DriverRec ),
+ sizeof ( PS_DriverRec ),
"type1",
0x10000L,
0x20000L,
- 0, /* format interface */
+ NULL, /* module-specific interface */
- T1_Driver_Init,
- T1_Driver_Done,
- Get_Interface,
+ T1_Driver_Init, /* FT_Module_Constructor module_init */
+ T1_Driver_Done, /* FT_Module_Destructor module_done */
+ Get_Interface, /* FT_Module_Requester get_interface */
},
sizeof ( T1_FaceRec ),
sizeof ( T1_SizeRec ),
sizeof ( T1_GlyphSlotRec ),
- T1_Face_Init,
- T1_Face_Done,
- T1_Size_Init,
- T1_Size_Done,
- T1_GlyphSlot_Init,
- T1_GlyphSlot_Done,
+ T1_Face_Init, /* FT_Face_InitFunc init_face */
+ T1_Face_Done, /* FT_Face_DoneFunc done_face */
+ T1_Size_Init, /* FT_Size_InitFunc init_size */
+ T1_Size_Done, /* FT_Size_DoneFunc done_size */
+ T1_GlyphSlot_Init, /* FT_Slot_InitFunc init_slot */
+ T1_GlyphSlot_Done, /* FT_Slot_DoneFunc done_slot */
- T1_Load_Glyph,
+ T1_Load_Glyph, /* FT_Slot_LoadFunc load_glyph */
#ifdef T1_CONFIG_OPTION_NO_AFM
- 0, /* FT_Face_GetKerningFunc */
- 0, /* FT_Face_AttachFunc */
+ NULL, /* FT_Face_GetKerningFunc get_kerning */
+ NULL, /* FT_Face_AttachFunc attach_file */
#else
- Get_Kerning,
- T1_Read_Metrics,
+ Get_Kerning, /* FT_Face_GetKerningFunc get_kerning */
+ T1_Read_Metrics, /* FT_Face_AttachFunc attach_file */
#endif
- T1_Get_Advances,
- T1_Size_Request,
- 0 /* FT_Size_SelectFunc */
+ T1_Get_Advances, /* FT_Face_GetAdvancesFunc get_advances */
+
+ T1_Size_Request, /* FT_Size_RequestFunc request_size */
+ NULL /* FT_Size_SelectFunc select_size */
};
diff --git a/src/type1/t1driver.h b/src/type1/t1driver.h
index 34bcf81..2b15072 100644
--- a/src/type1/t1driver.h
+++ b/src/type1/t1driver.h
@@ -4,7 +4,7 @@
/* */
/* High-level Type 1 driver interface (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T1DRIVER_H__
-#define __T1DRIVER_H__
+#ifndef T1DRIVER_H_
+#define T1DRIVER_H_
#include <ft2build.h>
@@ -36,7 +36,7 @@
FT_END_HEADER
-#endif /* __T1DRIVER_H__ */
+#endif /* T1DRIVER_H_ */
/* END */
diff --git a/src/type1/t1errors.h b/src/type1/t1errors.h
index fc7a9bd..9e0151b 100644
--- a/src/type1/t1errors.h
+++ b/src/type1/t1errors.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,12 +22,12 @@
/* */
/*************************************************************************/
-#ifndef __T1ERRORS_H__
-#define __T1ERRORS_H__
+#ifndef T1ERRORS_H_
+#define T1ERRORS_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX T1_Err_
@@ -35,7 +35,7 @@
#include FT_ERRORS_H
-#endif /* __T1ERRORS_H__ */
+#endif /* T1ERRORS_H_ */
/* END */
diff --git a/src/type1/t1gload.c b/src/type1/t1gload.c
index 829e874..87d40e7 100644
--- a/src/type1/t1gload.c
+++ b/src/type1/t1gload.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 Glyph Loader (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,6 +23,8 @@
#include FT_INTERNAL_STREAM_H
#include FT_OUTLINE_H
#include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include FT_INTERNAL_CFF_TYPES_H
+#include FT_DRIVER_H
#include "t1errors.h"
@@ -37,37 +39,28 @@
#define FT_COMPONENT trace_t1gload
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
- /********** *********/
- /********** COMPUTE THE MAXIMUM ADVANCE WIDTH *********/
- /********** *********/
- /********** The following code is in charge of computing *********/
- /********** the maximum advance width of the font. It *********/
- /********** quickly processes each glyph charstring to *********/
- /********** extract the value from either a `sbw' or `seac' *********/
- /********** operator. *********/
- /********** *********/
- /*************************************************************************/
- /*************************************************************************/
- /*************************************************************************/
-
-
static FT_Error
T1_Parse_Glyph_And_Get_Char_String( T1_Decoder decoder,
FT_UInt glyph_index,
- FT_Data* char_string )
+ FT_Data* char_string,
+ FT_Bool* force_scaling )
{
T1_Face face = (T1_Face)decoder->builder.face;
T1_Font type1 = &face->type1;
FT_Error error = FT_Err_Ok;
+ PSAux_Service psaux = (PSAux_Service)face->psaux;
+ const T1_Decoder_Funcs decoder_funcs = psaux->t1_decoder_funcs;
+ PS_Decoder psdecoder;
+
#ifdef FT_CONFIG_OPTION_INCREMENTAL
FT_Incremental_InterfaceRec *inc =
face->root.internal->incremental_interface;
#endif
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
+ PS_Driver driver = (PS_Driver)FT_FACE_DRIVER( face );
+#endif
decoder->font_matrix = type1->font_matrix;
decoder->font_offset = type1->font_offset;
@@ -90,9 +83,56 @@
}
if ( !error )
- error = decoder->funcs.parse_charstrings(
- decoder, (FT_Byte*)char_string->pointer,
- (FT_UInt)char_string->length );
+ {
+ /* choose which renderer to use */
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
+ if ( driver->hinting_engine == FT_HINTING_FREETYPE ||
+ decoder->builder.metrics_only )
+ error = decoder_funcs->parse_charstrings_old(
+ decoder,
+ (FT_Byte*)char_string->pointer,
+ (FT_UInt)char_string->length );
+#else
+ if ( decoder->builder.metrics_only )
+ error = decoder_funcs->parse_metrics(
+ decoder,
+ (FT_Byte*)char_string->pointer,
+ (FT_UInt)char_string->length );
+#endif
+ else
+ {
+ CFF_SubFontRec subfont;
+
+
+ psaux->ps_decoder_init( &psdecoder, decoder, TRUE );
+
+ psaux->t1_make_subfont( FT_FACE( face ),
+ &face->type1.private_dict, &subfont );
+ psdecoder.current_subfont = &subfont;
+
+ error = decoder_funcs->parse_charstrings(
+ &psdecoder,
+ (FT_Byte*)char_string->pointer,
+ (FT_ULong)char_string->length );
+
+ /* Adobe's engine uses 16.16 numbers everywhere; */
+ /* as a consequence, glyphs larger than 2000ppem get rejected */
+ if ( FT_ERR_EQ( error, Glyph_Too_Big ) )
+ {
+ /* this time, we retry unhinted and scale up the glyph later on */
+ /* (the engine uses and sets the hardcoded value 0x10000 / 64 = */
+ /* 0x400 for both `x_scale' and `y_scale' in this case) */
+ ((T1_GlyphSlot)decoder->builder.glyph)->hint = FALSE;
+
+ *force_scaling = TRUE;
+
+ error = decoder_funcs->parse_charstrings(
+ &psdecoder,
+ (FT_Byte*)char_string->pointer,
+ (FT_ULong)char_string->length );
+ }
+ }
+ }
#ifdef FT_CONFIG_OPTION_INCREMENTAL
@@ -126,8 +166,10 @@
FT_UInt glyph_index )
{
FT_Data glyph_data;
- FT_Error error = T1_Parse_Glyph_And_Get_Char_String(
- decoder, glyph_index, &glyph_data );
+ FT_Bool force_scaling = FALSE;
+ FT_Error error = T1_Parse_Glyph_And_Get_Char_String(
+ decoder, glyph_index, &glyph_data,
+ &force_scaling );
#ifdef FT_CONFIG_OPTION_INCREMENTAL
@@ -149,6 +191,23 @@
}
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+ /********** *********/
+ /********** COMPUTE THE MAXIMUM ADVANCE WIDTH *********/
+ /********** *********/
+ /********** The following code is in charge of computing *********/
+ /********** the maximum advance width of the font. It *********/
+ /********** quickly processes each glyph charstring to *********/
+ /********** extract the value from either a `sbw' or `seac' *********/
+ /********** operator. *********/
+ /********** *********/
+ /*************************************************************************/
+ /*************************************************************************/
+ /*************************************************************************/
+
+
FT_LOCAL_DEF( FT_Error )
T1_Compute_Max_Advance( T1_Face face,
FT_Pos* max_advance )
@@ -183,6 +242,7 @@
decoder.num_subrs = type1->num_subrs;
decoder.subrs = type1->subrs;
decoder.subrs_len = type1->subrs_len;
+ decoder.subrs_hash = type1->subrs_hash;
decoder.buildchar = face->buildchar;
decoder.len_buildchar = face->len_buildchar;
@@ -245,9 +305,10 @@
decoder.builder.metrics_only = 1;
decoder.builder.load_points = 0;
- decoder.num_subrs = type1->num_subrs;
- decoder.subrs = type1->subrs;
- decoder.subrs_len = type1->subrs_len;
+ decoder.num_subrs = type1->num_subrs;
+ decoder.subrs = type1->subrs;
+ decoder.subrs_len = type1->subrs_len;
+ decoder.subrs_hash = type1->subrs_hash;
decoder.buildchar = face->buildchar;
decoder.len_buildchar = face->len_buildchar;
@@ -276,6 +337,8 @@
T1_DecoderRec decoder;
T1_Face face = (T1_Face)t1glyph->face;
FT_Bool hinting;
+ FT_Bool scaled;
+ FT_Bool force_scaling = FALSE;
T1_Font type1 = &face->type1;
PSAux_Service psaux = (PSAux_Service)face->psaux;
const T1_Decoder_Funcs decoder_funcs = psaux->t1_decoder_funcs;
@@ -323,7 +386,10 @@
hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 &&
( load_flags & FT_LOAD_NO_HINTING ) == 0 );
+ scaled = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 );
+ glyph->hint = hinting;
+ glyph->scaled = scaled;
t1glyph->format = FT_GLYPH_FORMAT_OUTLINE;
error = decoder_funcs->init( &decoder,
@@ -346,19 +412,22 @@
decoder.num_subrs = type1->num_subrs;
decoder.subrs = type1->subrs;
decoder.subrs_len = type1->subrs_len;
+ decoder.subrs_hash = type1->subrs_hash;
decoder.buildchar = face->buildchar;
decoder.len_buildchar = face->len_buildchar;
/* now load the unscaled outline */
error = T1_Parse_Glyph_And_Get_Char_String( &decoder, glyph_index,
- &glyph_data );
+ &glyph_data,
+ &force_scaling );
if ( error )
goto Exit;
#ifdef FT_CONFIG_OPTION_INCREMENTAL
glyph_data_loaded = 1;
#endif
+ hinting = glyph->hint;
font_matrix = decoder.font_matrix;
font_offset = decoder.font_offset;
@@ -395,7 +464,6 @@
{
FT_BBox cbox;
FT_Glyph_Metrics* metrics = &t1glyph->metrics;
- FT_Vector advance;
/* copy the _unscaled_ advance width */
@@ -427,26 +495,29 @@
#if 1
/* apply the font matrix, if any */
- if ( font_matrix.xx != 0x10000L || font_matrix.yy != font_matrix.xx ||
- font_matrix.xy != 0 || font_matrix.yx != 0 )
+ if ( font_matrix.xx != 0x10000L || font_matrix.yy != 0x10000L ||
+ font_matrix.xy != 0 || font_matrix.yx != 0 )
+ {
FT_Outline_Transform( &t1glyph->outline, &font_matrix );
+ metrics->horiAdvance = FT_MulFix( metrics->horiAdvance,
+ font_matrix.xx );
+ metrics->vertAdvance = FT_MulFix( metrics->vertAdvance,
+ font_matrix.yy );
+ }
+
if ( font_offset.x || font_offset.y )
+ {
FT_Outline_Translate( &t1glyph->outline,
font_offset.x,
font_offset.y );
- advance.x = metrics->horiAdvance;
- advance.y = 0;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->horiAdvance = advance.x + font_offset.x;
- advance.x = 0;
- advance.y = metrics->vertAdvance;
- FT_Vector_Transform( &advance, &font_matrix );
- metrics->vertAdvance = advance.y + font_offset.y;
+ metrics->horiAdvance += font_offset.x;
+ metrics->vertAdvance += font_offset.y;
+ }
#endif
- if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )
+ if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 || force_scaling )
{
/* scale the outline and the metrics */
FT_Int n;
diff --git a/src/type1/t1gload.h b/src/type1/t1gload.h
index 05f60d5..72ef76f 100644
--- a/src/type1/t1gload.h
+++ b/src/type1/t1gload.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 Glyph Loader (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T1GLOAD_H__
-#define __T1GLOAD_H__
+#ifndef T1GLOAD_H_
+#define T1GLOAD_H_
#include <ft2build.h>
@@ -47,7 +47,7 @@
FT_END_HEADER
-#endif /* __T1GLOAD_H__ */
+#endif /* T1GLOAD_H_ */
/* END */
diff --git a/src/type1/t1load.c b/src/type1/t1load.c
index 376c90c..9dfa637 100644
--- a/src/type1/t1load.c
+++ b/src/type1/t1load.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 font loader (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -66,6 +66,7 @@
#include FT_MULTIPLE_MASTERS_H
#include FT_INTERNAL_TYPE1_TYPES_H
#include FT_INTERNAL_CALC_H
+#include FT_INTERNAL_HASH_H
#include "t1load.h"
#include "t1errors.h"
@@ -236,7 +237,7 @@
if ( ncv <= axismap->blend_points[0] )
return INT_TO_FIXED( axismap->design_points[0] );
- for ( j = 1; j < axismap->num_points; ++j )
+ for ( j = 1; j < axismap->num_points; j++ )
{
if ( ncv <= axismap->blend_points[j] )
return INT_TO_FIXED( axismap->design_points[j - 1] ) +
@@ -320,22 +321,25 @@
mmvar->num_axis = mmaster.num_axis;
mmvar->num_designs = mmaster.num_designs;
- mmvar->num_namedstyles = ~0U; /* Does not apply */
+ mmvar->num_namedstyles = 0; /* Not supported */
mmvar->axis = (FT_Var_Axis*)&mmvar[1];
/* Point to axes after MM_Var struct */
mmvar->namedstyle = NULL;
- for ( i = 0 ; i < mmaster.num_axis; ++i )
+ for ( i = 0; i < mmaster.num_axis; i++ )
{
mmvar->axis[i].name = mmaster.axis[i].name;
- mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum);
- mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum);
+ mmvar->axis[i].minimum = INT_TO_FIXED( mmaster.axis[i].minimum );
+ mmvar->axis[i].maximum = INT_TO_FIXED( mmaster.axis[i].maximum );
mmvar->axis[i].def = ( mmvar->axis[i].minimum +
mmvar->axis[i].maximum ) / 2;
/* Does not apply. But this value is in range */
mmvar->axis[i].strid = ~0U; /* Does not apply */
mmvar->axis[i].tag = ~0U; /* Does not apply */
+ if ( !mmvar->axis[i].name )
+ continue;
+
if ( ft_strcmp( mmvar->axis[i].name, "Weight" ) == 0 )
mmvar->axis[i].tag = FT_MAKE_TAG( 'w', 'g', 'h', 't' );
else if ( ft_strcmp( mmvar->axis[i].name, "Width" ) == 0 )
@@ -350,7 +354,7 @@
axiscoords,
blend->num_axis );
- for ( i = 0; i < mmaster.num_axis; ++i )
+ for ( i = 0; i < mmaster.num_axis; i++ )
mmvar->axis[i].def = mm_axis_unmap( &blend->design_map[i],
axiscoords[i] );
}
@@ -362,14 +366,16 @@
}
- FT_LOCAL_DEF( FT_Error )
- T1_Set_MM_Blend( T1_Face face,
+ static FT_Error
+ t1_set_mm_blend( T1_Face face,
FT_UInt num_coords,
FT_Fixed* coords )
{
PS_Blend blend = face->blend;
FT_UInt n, m;
+ FT_Bool have_diff = 0;
+
if ( !blend )
return FT_THROW( Invalid_Argument );
@@ -401,9 +407,71 @@
result = FT_MulFix( result, factor );
}
- blend->weight_vector[n] = result;
+
+ if ( blend->weight_vector[n] != result )
+ {
+ blend->weight_vector[n] = result;
+ have_diff = 1;
+ }
}
+ /* return value -1 indicates `no change' */
+ return have_diff ? FT_Err_Ok : -1;
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ T1_Set_MM_Blend( T1_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
+ FT_Error error;
+
+
+ error = t1_set_mm_blend( face, num_coords, coords );
+ if ( error )
+ return error;
+
+ if ( num_coords )
+ face->root.face_flags |= FT_FACE_FLAG_VARIATION;
+ else
+ face->root.face_flags &= ~FT_FACE_FLAG_VARIATION;
+
+ return FT_Err_Ok;
+ }
+
+
+ FT_LOCAL_DEF( FT_Error )
+ T1_Get_MM_Blend( T1_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
+ PS_Blend blend = face->blend;
+
+ FT_Fixed axiscoords[4];
+ FT_UInt i, nc;
+
+
+ if ( !blend )
+ return FT_THROW( Invalid_Argument );
+
+ mm_weights_unmap( blend->weight_vector,
+ axiscoords,
+ blend->num_axis );
+
+ nc = num_coords;
+ if ( num_coords > blend->num_axis )
+ {
+ FT_TRACE2(( "T1_Get_MM_Blend: only using first %d of %d coordinates\n",
+ blend->num_axis, num_coords ));
+ nc = blend->num_axis;
+ }
+
+ for ( i = 0; i < nc; i++ )
+ coords[i] = axiscoords[i];
+ for ( ; i < num_coords; i++ )
+ coords[i] = 0x8000;
+
return FT_Err_Ok;
}
@@ -413,6 +481,7 @@
FT_UInt num_coords,
FT_Long* coords )
{
+ FT_Error error;
PS_Blend blend = face->blend;
FT_UInt n, p;
FT_Fixed final_blends[T1_MAX_MM_DESIGNS];
@@ -479,7 +548,28 @@
final_blends[n] = the_blend;
}
- return T1_Set_MM_Blend( face, blend->num_axis, final_blends );
+ error = t1_set_mm_blend( face, blend->num_axis, final_blends );
+ if ( error )
+ return error;
+
+ if ( num_coords )
+ face->root.face_flags |= FT_FACE_FLAG_VARIATION;
+ else
+ face->root.face_flags &= ~FT_FACE_FLAG_VARIATION;
+
+ return FT_Err_Ok;
+ }
+
+
+ /* MM fonts don't have named instances, so only the design is reset */
+
+ FT_LOCAL_DEF( FT_Error )
+ T1_Reset_MM_Blend( T1_Face face,
+ FT_UInt instance_index )
+ {
+ FT_UNUSED( instance_index );
+
+ return T1_Set_MM_Blend( face, 0, NULL );
}
@@ -500,13 +590,49 @@
if ( num_coords > T1_MAX_MM_AXIS )
num_coords = T1_MAX_MM_AXIS;
- for ( i = 0; i < num_coords; ++i )
+ for ( i = 0; i < num_coords; i++ )
lcoords[i] = FIXED_TO_INT( coords[i] );
return T1_Set_MM_Design( face, num_coords, lcoords );
}
+ FT_LOCAL_DEF( FT_Error )
+ T1_Get_Var_Design( T1_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords )
+ {
+ PS_Blend blend = face->blend;
+
+ FT_Fixed axiscoords[4];
+ FT_UInt i, nc;
+
+
+ if ( !blend )
+ return FT_THROW( Invalid_Argument );
+
+ mm_weights_unmap( blend->weight_vector,
+ axiscoords,
+ blend->num_axis );
+
+ nc = num_coords;
+ if ( num_coords > blend->num_axis )
+ {
+ FT_TRACE2(( "T1_Get_Var_Design:"
+ " only using first %d of %d coordinates\n",
+ blend->num_axis, num_coords ));
+ nc = blend->num_axis;
+ }
+
+ for ( i = 0; i < nc; i++ )
+ coords[i] = mm_axis_unmap( &blend->design_map[i], axiscoords[i] );
+ for ( ; i < num_coords; i++ )
+ coords[i] = 0;
+
+ return FT_Err_Ok;
+ }
+
+
FT_LOCAL_DEF( void )
T1_Done_Blend( T1_Face face )
{
@@ -615,6 +741,15 @@
goto Exit;
}
+ name = (FT_Byte*)blend->axis_names[n];
+ if ( name )
+ {
+ FT_TRACE0(( "parse_blend_axis_types:"
+ " overwriting axis name `%s' with `%*.s'\n",
+ name, len, token->start ));
+ FT_FREE( name );
+ }
+
if ( FT_ALLOC( blend->axis_names[n], len + 1 ) )
goto Exit;
@@ -787,6 +922,13 @@
goto Exit;
}
+ if ( map->design_points )
+ {
+ FT_ERROR(( "parse_blend_design_map: duplicate table\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
/* allocate design map data */
if ( FT_NEW_ARRAY( map->design_points, num_points * 2 ) )
goto Exit;
@@ -1107,6 +1249,7 @@
FT_Int result;
+ /* input is scaled by 1000 to accommodate default FontMatrix */
result = T1_ToFixedArray( parser, 6, temp, 3 );
if ( result < 6 )
@@ -1124,15 +1267,12 @@
return;
}
- /* Set Units per EM based on FontMatrix values. We set the value to */
- /* 1000 / temp_scale, because temp_scale was already multiplied by */
- /* 1000 (in t1_tofixed, from psobjs.c). */
-
- root->units_per_EM = (FT_UShort)FT_DivFix( 1000, temp_scale );
-
- /* we need to scale the values by 1.0/temp_scale */
+ /* atypical case */
if ( temp_scale != 0x10000L )
{
+ /* set units per EM based on FontMatrix values */
+ root->units_per_EM = (FT_UShort)FT_DivFix( 1000, temp_scale );
+
temp[0] = FT_DivFix( temp[0], temp_scale );
temp[1] = FT_DivFix( temp[1], temp_scale );
temp[2] = FT_DivFix( temp[2], temp_scale );
@@ -1177,7 +1317,7 @@
if ( ft_isdigit( *cur ) || *cur == '[' )
{
T1_Encoding encode = &face->type1.encoding;
- FT_Int count, n;
+ FT_Int count, array_size, n;
PS_Table char_table = &loader->encoding_table;
FT_Memory memory = parser->root.memory;
FT_Error error;
@@ -1194,23 +1334,39 @@
else
count = (FT_Int)T1_ToInt( parser );
+ array_size = count;
+ if ( count > 256 )
+ {
+ FT_TRACE2(( "parse_encoding:"
+ " only using first 256 encoding array entries\n" ));
+ array_size = 256;
+ }
+
T1_Skip_Spaces( parser );
if ( parser->root.cursor >= limit )
return;
+ /* PostScript happily allows overwriting of encoding arrays */
+ if ( encode->char_index )
+ {
+ FT_FREE( encode->char_index );
+ FT_FREE( encode->char_name );
+ T1_Release_Table( char_table );
+ }
+
/* we use a T1_Table to store our charnames */
- loader->num_chars = encode->num_chars = count;
- if ( FT_NEW_ARRAY( encode->char_index, count ) ||
- FT_NEW_ARRAY( encode->char_name, count ) ||
+ loader->num_chars = encode->num_chars = array_size;
+ if ( FT_NEW_ARRAY( encode->char_index, array_size ) ||
+ FT_NEW_ARRAY( encode->char_name, array_size ) ||
FT_SET_ERROR( psaux->ps_table_funcs->init(
- char_table, count, memory ) ) )
+ char_table, array_size, memory ) ) )
{
parser->root.error = error;
return;
}
/* We need to `zero' out encoding_table.elements */
- for ( n = 0; n < count; n++ )
+ for ( n = 0; n < array_size; n++ )
{
char* notdef = (char *)".notdef";
@@ -1303,11 +1459,14 @@
len = (FT_UInt)( parser->root.cursor - cur );
- parser->root.error = T1_Add_Table( char_table, charcode,
- cur, len + 1 );
- if ( parser->root.error )
- return;
- char_table->elements[charcode][len] = '\0';
+ if ( n < array_size )
+ {
+ parser->root.error = T1_Add_Table( char_table, charcode,
+ cur, len + 1 );
+ if ( parser->root.error )
+ return;
+ char_table->elements[charcode][len] = '\0';
+ }
n++;
}
@@ -1370,6 +1529,7 @@
FT_Memory memory = parser->root.memory;
FT_Error error;
FT_Int num_subrs;
+ FT_UInt count;
PSAux_Service psaux = (PSAux_Service)face->psaux;
@@ -1389,6 +1549,47 @@
}
num_subrs = (FT_Int)T1_ToInt( parser );
+ if ( num_subrs < 0 )
+ {
+ parser->root.error = FT_THROW( Invalid_File_Format );
+ return;
+ }
+
+ /* we certainly need more than 8 bytes per subroutine */
+ if ( parser->root.limit >= parser->root.cursor &&
+ num_subrs > ( parser->root.limit - parser->root.cursor ) >> 3 )
+ {
+ /*
+ * There are two possibilities. Either the font contains an invalid
+ * value for `num_subrs', or we have a subsetted font where the
+ * subroutine indices are not adjusted, e.g.
+ *
+ * /Subrs 812 array
+ * dup 0 { ... } NP
+ * dup 51 { ... } NP
+ * dup 681 { ... } NP
+ * ND
+ *
+ * In both cases, we use a number hash that maps from subr indices to
+ * actual array elements.
+ */
+
+ FT_TRACE0(( "parse_subrs: adjusting number of subroutines"
+ " (from %d to %d)\n",
+ num_subrs,
+ ( parser->root.limit - parser->root.cursor ) >> 3 ));
+ num_subrs = ( parser->root.limit - parser->root.cursor ) >> 3;
+
+ if ( !loader->subrs_hash )
+ {
+ if ( FT_NEW( loader->subrs_hash ) )
+ goto Fail;
+
+ error = ft_hash_num_init( loader->subrs_hash, memory );
+ if ( error )
+ goto Fail;
+ }
+ }
/* position the parser right before the `dup' of the first subr */
T1_Skip_PS_Token( parser ); /* `array' */
@@ -1409,7 +1610,7 @@
/* */
/* `index' + binary data */
/* */
- for (;;)
+ for ( count = 0; ; count++ )
{
FT_Long idx;
FT_ULong size;
@@ -1445,6 +1646,14 @@
T1_Skip_Spaces ( parser );
}
+ /* if we use a hash, the subrs index is the key, and a running */
+ /* counter specified for `T1_Add_Table' acts as the value */
+ if ( loader->subrs_hash )
+ {
+ ft_hash_num_insert( idx, count, loader->subrs_hash, memory );
+ idx = count;
+ }
+
/* with synthetic fonts it is possible we get here twice */
if ( loader->num_subrs )
continue;
@@ -1456,7 +1665,7 @@
/* */
if ( face->type1.private_dict.lenIV >= 0 )
{
- FT_Byte* temp;
+ FT_Byte* temp = NULL;
/* some fonts define empty subr records -- this is not totally */
@@ -1510,7 +1719,7 @@
PSAux_Service psaux = (PSAux_Service)face->psaux;
- FT_Byte* cur;
+ FT_Byte* cur = parser->root.cursor;
FT_Byte* limit = parser->root.limit;
FT_Int n, num_glyphs;
FT_Int notdef_index = 0;
@@ -1524,6 +1733,15 @@
goto Fail;
}
+ /* we certainly need more than 8 bytes per glyph */
+ if ( num_glyphs > ( limit - cur ) >> 3 )
+ {
+ FT_TRACE0(( "parse_charstrings: adjusting number of glyphs"
+ " (from %d to %d)\n",
+ num_glyphs, ( limit - cur ) >> 3 ));
+ num_glyphs = ( limit - cur ) >> 3;
+ }
+
/* some fonts like Optima-Oblique not only define the /CharStrings */
/* array but access it also */
if ( num_glyphs == 0 || parser->root.error )
@@ -1651,7 +1869,7 @@
if ( face->type1.private_dict.lenIV >= 0 &&
n < num_glyphs + TABLE_EXTEND )
{
- FT_Byte* temp;
+ FT_Byte* temp = NULL;
if ( size <= (FT_ULong)face->type1.private_dict.lenIV )
@@ -1679,6 +1897,12 @@
}
}
+ if ( !n )
+ {
+ error = FT_THROW( Invalid_File_Format );
+ goto Fail;
+ }
+
loader->num_glyphs = n;
/* if /.notdef is found but does not occupy index 0, do our magic. */
@@ -2007,7 +2231,7 @@
parser->root.error = t1_load_keyword( face,
loader,
keyword );
- if ( parser->root.error != FT_Err_Ok )
+ if ( parser->root.error )
{
if ( FT_ERR_EQ( parser->root.error, Ignore ) )
parser->root.error = FT_Err_Ok;
@@ -2046,18 +2270,7 @@
{
FT_UNUSED( face );
- FT_MEM_ZERO( loader, sizeof ( *loader ) );
- loader->num_glyphs = 0;
- loader->num_chars = 0;
-
- /* initialize the tables -- simply set their `init' field to 0 */
- loader->encoding_table.init = 0;
- loader->charstrings.init = 0;
- loader->glyph_names.init = 0;
- loader->subrs.init = 0;
- loader->swap_table.init = 0;
- loader->fontdata = 0;
- loader->keywords_encountered = 0;
+ FT_ZERO( loader );
}
@@ -2065,6 +2278,7 @@
t1_done_loader( T1_Loader loader )
{
T1_Parser parser = &loader->parser;
+ FT_Memory memory = parser->root.memory;
/* finalize tables */
@@ -2074,6 +2288,10 @@
T1_Release_Table( &loader->swap_table );
T1_Release_Table( &loader->subrs );
+ /* finalize hash */
+ ft_hash_num_free( loader->subrs_hash, memory );
+ FT_FREE( loader->subrs_hash );
+
/* finalize parser */
T1_Finalize_Parser( parser );
}
@@ -2190,11 +2408,15 @@
if ( loader.subrs.init )
{
- loader.subrs.init = 0;
type1->num_subrs = loader.num_subrs;
type1->subrs_block = loader.subrs.block;
type1->subrs = loader.subrs.elements;
type1->subrs_len = loader.subrs.lengths;
+ type1->subrs_hash = loader.subrs_hash;
+
+ /* prevent `t1_done_loader' from freeing the propagated data */
+ loader.subrs.init = 0;
+ loader.subrs_hash = NULL;
}
if ( !IS_INCREMENTAL )
@@ -2271,6 +2493,24 @@
type1->encoding.num_chars = loader.num_chars;
}
+ /* some sanitizing to avoid overflows later on; */
+ /* the upper limits are ad-hoc values */
+ if ( priv->blue_shift > 1000 || priv->blue_shift < 0 )
+ {
+ FT_TRACE2(( "T1_Open_Face:"
+ " setting unlikely BlueShift value %d to default (7)\n",
+ priv->blue_shift ));
+ priv->blue_shift = 7;
+ }
+
+ if ( priv->blue_fuzz > 1000 || priv->blue_fuzz < 0 )
+ {
+ FT_TRACE2(( "T1_Open_Face:"
+ " setting unlikely BlueFuzz value %d to default (1)\n",
+ priv->blue_fuzz ));
+ priv->blue_fuzz = 1;
+ }
+
Exit:
t1_done_loader( &loader );
return error;
diff --git a/src/type1/t1load.h b/src/type1/t1load.h
index de422e7..03be3f7 100644
--- a/src/type1/t1load.h
+++ b/src/type1/t1load.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 font loader (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T1LOAD_H__
-#define __T1LOAD_H__
+#ifndef T1LOAD_H_
+#define T1LOAD_H_
#include <ft2build.h>
@@ -46,6 +46,7 @@
FT_Int num_subrs;
PS_TableRec subrs;
+ FT_Hash subrs_hash;
FT_Bool fontdata;
FT_UInt keywords_encountered; /* T1_LOADER_ENCOUNTERED_XXX */
@@ -69,7 +70,7 @@
T1_Get_Multi_Master( T1_Face face,
FT_Multi_Master* master );
- FT_LOCAL_DEF( FT_Error )
+ FT_LOCAL( FT_Error )
T1_Get_MM_Var( T1_Face face,
FT_MM_Var* *master );
@@ -79,11 +80,25 @@
FT_Fixed* coords );
FT_LOCAL( FT_Error )
+ T1_Get_MM_Blend( T1_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+ FT_LOCAL( FT_Error )
T1_Set_MM_Design( T1_Face face,
FT_UInt num_coords,
FT_Long* coords );
- FT_LOCAL_DEF( FT_Error )
+ FT_LOCAL( FT_Error )
+ T1_Reset_MM_Blend( T1_Face face,
+ FT_UInt instance_index );
+
+ FT_LOCAL( FT_Error )
+ T1_Get_Var_Design( T1_Face face,
+ FT_UInt num_coords,
+ FT_Fixed* coords );
+
+ FT_LOCAL( FT_Error )
T1_Set_Var_Design( T1_Face face,
FT_UInt num_coords,
FT_Fixed* coords );
@@ -96,7 +111,7 @@
FT_END_HEADER
-#endif /* __T1LOAD_H__ */
+#endif /* T1LOAD_H_ */
/* END */
diff --git a/src/type1/t1objs.c b/src/type1/t1objs.c
index af89888..7333c4c 100644
--- a/src/type1/t1objs.c
+++ b/src/type1/t1objs.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 objects manager (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -21,6 +21,7 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_TRUETYPE_IDS_H
+#include FT_DRIVER_H
#include "t1gload.h"
#include "t1load.h"
@@ -49,9 +50,6 @@
/* */
/* SIZE FUNCTIONS */
/* */
- /* note that we store the global hints in the size's "internal" root */
- /* field */
- /* */
/*************************************************************************/
@@ -67,7 +65,7 @@
"pshinter" );
return ( module && pshinter && pshinter->get_globals_funcs )
? pshinter->get_globals_funcs( module )
- : 0 ;
+ : 0;
}
@@ -77,16 +75,16 @@
T1_Size size = (T1_Size)t1size;
- if ( size->root.internal )
+ if ( t1size->internal->module_data )
{
PSH_Globals_Funcs funcs;
funcs = T1_Size_Get_Globals_Funcs( size );
if ( funcs )
- funcs->destroy( (PSH_Globals)size->root.internal );
+ funcs->destroy( (PSH_Globals)t1size->internal->module_data );
- size->root.internal = NULL;
+ t1size->internal->module_data = NULL;
}
}
@@ -108,7 +106,7 @@
error = funcs->create( size->root.face->memory,
&face->type1.private_dict, &globals );
if ( !error )
- size->root.internal = (FT_Size_Internal)(void*)globals;
+ t1size->internal->module_data = globals;
}
return error;
@@ -126,7 +124,7 @@
FT_Request_Metrics( size->root.face, req );
if ( funcs )
- funcs->set_scale( (PSH_Globals)size->root.internal,
+ funcs->set_scale( (PSH_Globals)t1size->internal->module_data,
size->root.metrics.x_scale,
size->root.metrics.y_scale,
0, 0 );
@@ -247,6 +245,9 @@
FT_FREE( type1->subrs );
FT_FREE( type1->subrs_len );
+ ft_hash_num_free( type1->subrs_hash, memory );
+ FT_FREE( type1->subrs_hash );
+
FT_FREE( type1->subrs_block );
FT_FREE( type1->charstrings_block );
FT_FREE( type1->glyph_names_block );
@@ -345,7 +346,7 @@
goto Exit;
/* check the face index */
- if ( face_index > 0 )
+ if ( ( face_index & 0xFFFF ) > 0 )
{
FT_ERROR(( "T1_Face_Init: invalid face index\n" ));
error = FT_THROW( Invalid_Argument );
@@ -375,14 +376,11 @@
if ( face->blend )
root->face_flags |= FT_FACE_FLAG_MULTIPLE_MASTERS;
- /* XXX: TODO -- add kerning with .afm support */
-
-
/* The following code to extract the family and the style is very */
/* simplistic and might get some things wrong. For a full-featured */
/* algorithm you might have a look at the whitepaper given at */
/* */
- /* http://blogs.msdn.com/text/archive/2007/04/23/wpf-font-selection-model.aspx */
+ /* https://blogs.msdn.com/text/archive/2007/04/23/wpf-font-selection-model.aspx */
/* get style name -- be careful, some broken fonts only */
/* have a `/FontName' dictionary entry! */
@@ -558,12 +556,6 @@
if ( clazz )
error = FT_CMap_New( clazz, NULL, &charmap, NULL );
-
-#if 0
- /* Select default charmap */
- if (root->num_charmaps)
- root->charmap = root->charmaps[0];
-#endif
}
}
@@ -587,9 +579,42 @@
/* FreeType error code. 0 means success. */
/* */
FT_LOCAL_DEF( FT_Error )
- T1_Driver_Init( FT_Module driver )
+ T1_Driver_Init( FT_Module module )
{
- FT_UNUSED( driver );
+ PS_Driver driver = (PS_Driver)module;
+
+ FT_UInt32 seed;
+
+
+ /* set default property values, cf. `ftt1drv.h' */
+#ifdef T1_CONFIG_OPTION_OLD_ENGINE
+ driver->hinting_engine = FT_HINTING_FREETYPE;
+#else
+ driver->hinting_engine = FT_HINTING_ADOBE;
+#endif
+
+ driver->no_stem_darkening = TRUE;
+
+ driver->darken_params[0] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1;
+ driver->darken_params[1] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1;
+ driver->darken_params[2] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2;
+ driver->darken_params[3] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2;
+ driver->darken_params[4] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3;
+ driver->darken_params[5] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3;
+ driver->darken_params[6] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4;
+ driver->darken_params[7] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4;
+
+ /* compute random seed from some memory addresses */
+ seed = (FT_UInt32)( (FT_Offset)(char*)&seed ^
+ (FT_Offset)(char*)&module ^
+ (FT_Offset)(char*)module->memory );
+ seed = seed ^ ( seed >> 10 ) ^ ( seed >> 20 );
+
+ driver->random_seed = (FT_Int32)seed;
+ if ( driver->random_seed < 0 )
+ driver->random_seed = -driver->random_seed;
+ else if ( driver->random_seed == 0 )
+ driver->random_seed = 123456789;
return FT_Err_Ok;
}
diff --git a/src/type1/t1objs.h b/src/type1/t1objs.h
index 6b4f3cb..8298e03 100644
--- a/src/type1/t1objs.h
+++ b/src/type1/t1objs.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 objects manager (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T1OBJS_H__
-#define __T1OBJS_H__
+#ifndef T1OBJS_H_
+#define T1OBJS_H_
#include <ft2build.h>
@@ -120,12 +120,12 @@
FT_Bool hint;
FT_Bool scaled;
- FT_Int max_points;
- FT_Int max_contours;
-
FT_Fixed x_scale;
FT_Fixed y_scale;
+ FT_Int max_points;
+ FT_Int max_contours;
+
} T1_GlyphSlotRec;
@@ -154,7 +154,7 @@
FT_END_HEADER
-#endif /* __T1OBJS_H__ */
+#endif /* T1OBJS_H_ */
/* END */
diff --git a/src/type1/t1parse.c b/src/type1/t1parse.c
index c73b2b2..8e201e5 100644
--- a/src/type1/t1parse.c
+++ b/src/type1/t1parse.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 parser (body). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -334,7 +334,6 @@
/* first of all, look at the `eexec' keyword */
FT_Byte* cur = parser->base_dict;
FT_Byte* limit = cur + parser->base_len;
- FT_Byte c;
FT_Pointer pos_lf;
FT_Bool test_cr;
@@ -342,9 +341,9 @@
Again:
for (;;)
{
- c = cur[0];
- if ( c == 'e' && cur + 9 < limit ) /* 9 = 5 letters for `eexec' + */
- /* whitespace + 4 chars */
+ if ( cur[0] == 'e' &&
+ cur + 9 < limit ) /* 9 = 5 letters for `eexec' + */
+ /* whitespace + 4 chars */
{
if ( cur[1] == 'e' &&
cur[2] == 'x' &&
@@ -374,8 +373,15 @@
while ( cur < limit )
{
- if ( *cur == 'e' && ft_strncmp( (char*)cur, "eexec", 5 ) == 0 )
- goto Found;
+ if ( cur[0] == 'e' &&
+ cur + 5 < limit )
+ {
+ if ( cur[1] == 'e' &&
+ cur[2] == 'x' &&
+ cur[3] == 'e' &&
+ cur[4] == 'c' )
+ goto Found;
+ }
T1_Skip_PS_Token( parser );
if ( parser->root.error )
@@ -389,6 +395,15 @@
cur = limit;
limit = parser->base_dict + parser->base_len;
+
+ if ( cur >= limit )
+ {
+ FT_ERROR(( "T1_Get_Private_Dict:"
+ " premature end in private dictionary\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
goto Again;
/* now determine where to write the _encrypted_ binary private */
@@ -422,7 +437,7 @@
*cur == '\t' ||
(test_cr && *cur == '\r' ) ||
*cur == '\n' ) )
- ++cur;
+ cur++;
if ( cur >= limit )
{
FT_ERROR(( "T1_Get_Private_Dict:"
diff --git a/src/type1/t1parse.h b/src/type1/t1parse.h
index 93b02e3..4ac82ae 100644
--- a/src/type1/t1parse.h
+++ b/src/type1/t1parse.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 parser (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T1PARSE_H__
-#define __T1PARSE_H__
+#ifndef T1PARSE_H_
+#define T1PARSE_H_
#include <ft2build.h>
@@ -123,7 +123,7 @@
FT_END_HEADER
-#endif /* __T1PARSE_H__ */
+#endif /* T1PARSE_H_ */
/* END */
diff --git a/src/type1/t1tokens.h b/src/type1/t1tokens.h
index 3992652..43a65d8 100644
--- a/src/type1/t1tokens.h
+++ b/src/type1/t1tokens.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 tokenizer (specification). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/type1/type1.c b/src/type1/type1.c
index 4c70ea7..72eff59 100644
--- a/src/type1/type1.c
+++ b/src/type1/type1.c
@@ -4,7 +4,7 @@
/* */
/* FreeType Type 1 driver component (body only). */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,17 +17,14 @@
#define FT_MAKE_OPTION_SINGLE_OBJECT
-
#include <ft2build.h>
-#include "t1parse.c"
-#include "t1load.c"
-#include "t1objs.c"
+
+#include "t1afm.c"
#include "t1driver.c"
#include "t1gload.c"
-
-#ifndef T1_CONFIG_OPTION_NO_AFM
-#include "t1afm.c"
-#endif
+#include "t1load.c"
+#include "t1objs.c"
+#include "t1parse.c"
/* END */
diff --git a/src/type42/Jamfile b/src/type42/Jamfile
index e0db3cc..b98de05 100644
--- a/src/type42/Jamfile
+++ b/src/type42/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/type42 Jamfile
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -16,7 +16,10 @@
if $(FT2_MULTI)
{
- _sources = t42objs t42parse t42drivr ;
+ _sources = t42drivr
+ t42objs
+ t42parse
+ ;
}
else
{
diff --git a/src/type42/module.mk b/src/type42/module.mk
index af7e651..3d4732b 100644
--- a/src/type42/module.mk
+++ b/src/type42/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/type42/rules.mk b/src/type42/rules.mk
index 4a8efca..9325d38 100644
--- a/src/type42/rules.mk
+++ b/src/type42/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002-2015 by
+# Copyright 2002-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/type42/t42drivr.c b/src/type42/t42drivr.c
index 2907096..f579b27 100644
--- a/src/type42/t42drivr.c
+++ b/src/type42/t42drivr.c
@@ -4,7 +4,7 @@
/* */
/* High-level Type 42 driver interface (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -81,7 +81,8 @@
if ( glyph_name[0] == gname[0] && !ft_strcmp( glyph_name, gname ) )
- return (FT_UInt)ft_atol( (const char *)face->type1.charstrings[i] );
+ return (FT_UInt)ft_strtol( (const char *)face->type1.charstrings[i],
+ NULL, 10 );
}
return 0;
@@ -90,8 +91,8 @@
static const FT_Service_GlyphDictRec t42_service_glyph_dict =
{
- (FT_GlyphDict_GetNameFunc) t42_get_glyph_name,
- (FT_GlyphDict_NameIndexFunc)t42_get_name_index
+ (FT_GlyphDict_GetNameFunc) t42_get_glyph_name, /* get_name */
+ (FT_GlyphDict_NameIndexFunc)t42_get_name_index /* name_index */
};
@@ -110,7 +111,7 @@
static const FT_Service_PsFontNameRec t42_service_ps_font_name =
{
- (FT_PsName_GetFunc)t42_get_ps_font_name
+ (FT_PsName_GetFunc)t42_get_ps_font_name /* get_ps_font_name */
};
@@ -161,11 +162,12 @@
static const FT_Service_PsInfoRec t42_service_ps_info =
{
- (PS_GetFontInfoFunc) t42_ps_get_font_info,
- (PS_GetFontExtraFunc) t42_ps_get_font_extra,
- (PS_HasGlyphNamesFunc) t42_ps_has_glyph_names,
- (PS_GetFontPrivateFunc)t42_ps_get_font_private,
- (PS_GetFontValueFunc) NULL /* not implemented */
+ (PS_GetFontInfoFunc) t42_ps_get_font_info, /* ps_get_font_info */
+ (PS_GetFontExtraFunc) t42_ps_get_font_extra, /* ps_get_font_extra */
+ (PS_HasGlyphNamesFunc) t42_ps_has_glyph_names, /* ps_has_glyph_names */
+ (PS_GetFontPrivateFunc)t42_ps_get_font_private, /* ps_get_font_private */
+ /* not implemented */
+ (PS_GetFontValueFunc) NULL /* ps_get_font_value */
};
@@ -212,32 +214,32 @@
0x10000L,
0x20000L,
- 0, /* format interface */
+ NULL, /* module-specific interface */
- T42_Driver_Init,
- T42_Driver_Done,
- T42_Get_Interface,
+ T42_Driver_Init, /* FT_Module_Constructor module_init */
+ T42_Driver_Done, /* FT_Module_Destructor module_done */
+ T42_Get_Interface, /* FT_Module_Requester get_interface */
},
sizeof ( T42_FaceRec ),
sizeof ( T42_SizeRec ),
sizeof ( T42_GlyphSlotRec ),
- T42_Face_Init,
- T42_Face_Done,
- T42_Size_Init,
- T42_Size_Done,
- T42_GlyphSlot_Init,
- T42_GlyphSlot_Done,
+ T42_Face_Init, /* FT_Face_InitFunc init_face */
+ T42_Face_Done, /* FT_Face_DoneFunc done_face */
+ T42_Size_Init, /* FT_Size_InitFunc init_size */
+ T42_Size_Done, /* FT_Size_DoneFunc done_size */
+ T42_GlyphSlot_Init, /* FT_Slot_InitFunc init_slot */
+ T42_GlyphSlot_Done, /* FT_Slot_DoneFunc done_slot */
- T42_GlyphSlot_Load,
+ T42_GlyphSlot_Load, /* FT_Slot_LoadFunc load_glyph */
- 0, /* FT_Face_GetKerningFunc */
- 0, /* FT_Face_AttachFunc */
+ NULL, /* FT_Face_GetKerningFunc get_kerning */
+ NULL, /* FT_Face_AttachFunc attach_file */
+ NULL, /* FT_Face_GetAdvancesFunc get_advances */
- 0, /* FT_Face_GetAdvancesFunc */
- T42_Size_Request,
- T42_Size_Select
+ T42_Size_Request, /* FT_Size_RequestFunc request_size */
+ T42_Size_Select /* FT_Size_SelectFunc select_size */
};
diff --git a/src/type42/t42drivr.h b/src/type42/t42drivr.h
index b4d1753..3667f3e 100644
--- a/src/type42/t42drivr.h
+++ b/src/type42/t42drivr.h
@@ -4,7 +4,7 @@
/* */
/* High-level Type 42 driver interface (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T42DRIVR_H__
-#define __T42DRIVR_H__
+#ifndef T42DRIVR_H_
+#define T42DRIVR_H_
#include <ft2build.h>
@@ -37,7 +37,7 @@
FT_END_HEADER
-#endif /* __T42DRIVR_H__ */
+#endif /* T42DRIVR_H_ */
/* END */
diff --git a/src/type42/t42error.h b/src/type42/t42error.h
index cddaf9e..e3978a7 100644
--- a/src/type42/t42error.h
+++ b/src/type42/t42error.h
@@ -4,7 +4,7 @@
/* */
/* Type 42 error codes (specification only). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -22,12 +22,12 @@
/* */
/*************************************************************************/
-#ifndef __T42ERROR_H__
-#define __T42ERROR_H__
+#ifndef T42ERROR_H_
+#define T42ERROR_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX T42_Err_
@@ -35,7 +35,7 @@
#include FT_ERRORS_H
-#endif /* __T42ERROR_H__ */
+#endif /* T42ERROR_H_ */
/* END */
diff --git a/src/type42/t42objs.c b/src/type42/t42objs.c
index 2756adf..66e5c40 100644
--- a/src/type42/t42objs.c
+++ b/src/type42/t42objs.c
@@ -4,7 +4,7 @@
/* */
/* Type 42 objects manager (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -208,7 +208,7 @@
goto Exit;
/* check the face index */
- if ( face_index > 0 )
+ if ( ( face_index & 0xFFFF ) > 0 )
{
FT_ERROR(( "T42_Face_Init: invalid face index\n" ));
error = FT_THROW( Invalid_Argument );
@@ -231,9 +231,6 @@
if ( info->is_fixed_pitch )
root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
- /* We only set this flag if we have the patented bytecode interpreter. */
- /* There are no known `tricky' Type42 fonts that could be loaded with */
- /* the unpatented interpreter. */
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
root->face_flags |= FT_FACE_FLAG_HINTER;
#endif
@@ -397,12 +394,6 @@
if ( clazz )
error = FT_CMap_New( clazz, NULL, &charmap, NULL );
-
-#if 0
- /* Select default charmap */
- if ( root->num_charmaps )
- root->charmap = root->charmaps[0];
-#endif
}
}
Exit:
@@ -593,7 +584,7 @@
FT_Error error = FT_Err_Ok;
- if ( face->glyph == NULL )
+ if ( !face->glyph )
{
/* First glyph slot for this face */
slot->ttslot = t42face->ttf_face->glyph;
@@ -652,11 +643,17 @@
FT_Error error;
T42_GlyphSlot t42slot = (T42_GlyphSlot)glyph;
T42_Size t42size = (T42_Size)size;
+ T42_Face t42face = (T42_Face)size->face;
FT_Driver_Class ttclazz = ((T42_Driver)glyph->face->driver)->ttclazz;
FT_TRACE1(( "T42_GlyphSlot_Load: glyph index %d\n", glyph_index ));
+ /* map T42 glyph index to embedded TTF's glyph index */
+ glyph_index = (FT_UInt)ft_strtol(
+ (const char *)t42face->type1.charstrings[glyph_index],
+ NULL, 10 );
+
t42_glyphslot_clear( t42slot->ttslot );
error = ttclazz->load_glyph( t42slot->ttslot,
t42size->ttsize,
diff --git a/src/type42/t42objs.h b/src/type42/t42objs.h
index 3722c67..3bad513 100644
--- a/src/type42/t42objs.h
+++ b/src/type42/t42objs.h
@@ -4,7 +4,7 @@
/* */
/* Type 42 objects manager (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T42OBJS_H__
-#define __T42OBJS_H__
+#ifndef T42OBJS_H_
+#define T42OBJS_H_
#include <ft2build.h>
#include FT_FREETYPE_H
@@ -118,7 +118,7 @@
FT_END_HEADER
-#endif /* __T42OBJS_H__ */
+#endif /* T42OBJS_H_ */
/* END */
diff --git a/src/type42/t42parse.c b/src/type42/t42parse.c
index 109e996..4813d1f 100644
--- a/src/type42/t42parse.c
+++ b/src/type42/t42parse.c
@@ -4,7 +4,7 @@
/* */
/* Type 42 font parser (body). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -246,13 +246,12 @@
T42_Parser parser = &loader->parser;
FT_Matrix* matrix = &face->type1.font_matrix;
FT_Vector* offset = &face->type1.font_offset;
- FT_Face root = (FT_Face)&face->root;
FT_Fixed temp[6];
FT_Fixed temp_scale;
FT_Int result;
- result = T1_ToFixedArray( parser, 6, temp, 3 );
+ result = T1_ToFixedArray( parser, 6, temp, 0 );
if ( result < 6 )
{
@@ -264,18 +263,12 @@
if ( temp_scale == 0 )
{
- FT_ERROR(( "t1_parse_font_matrix: invalid font matrix\n" ));
+ FT_ERROR(( "t42_parse_font_matrix: invalid font matrix\n" ));
parser->root.error = FT_THROW( Invalid_File_Format );
return;
}
- /* Set Units per EM based on FontMatrix values. We set the value to */
- /* 1000 / temp_scale, because temp_scale was already multiplied by */
- /* 1000 (in t1_tofixed, from psobjs.c). */
-
- root->units_per_EM = (FT_UShort)FT_DivFix( 1000, temp_scale );
-
- /* we need to scale the values by 1.0/temp_scale */
+ /* atypical case */
if ( temp_scale != 0x10000L )
{
temp[0] = FT_DivFix( temp[0], temp_scale );
@@ -339,10 +332,27 @@
else
count = (FT_Int)T1_ToInt( parser );
+ /* only composite fonts (which we don't support) */
+ /* can have larger values */
+ if ( count > 256 )
+ {
+ FT_ERROR(( "t42_parse_encoding: invalid encoding array size\n" ));
+ parser->root.error = FT_THROW( Invalid_File_Format );
+ return;
+ }
+
T1_Skip_Spaces( parser );
if ( parser->root.cursor >= limit )
return;
+ /* PostScript happily allows overwriting of encoding arrays */
+ if ( encode->char_index )
+ {
+ FT_FREE( encode->char_index );
+ FT_FREE( encode->char_name );
+ T1_Release_Table( char_table );
+ }
+
/* we use a T1_Table to store our charnames */
loader->num_chars = encode->num_chars = count;
if ( FT_NEW_ARRAY( encode->char_index, count ) ||
@@ -421,6 +431,13 @@
{
charcode = (FT_Int)T1_ToInt( parser );
T1_Skip_Spaces( parser );
+
+ /* protect against invalid charcode */
+ if ( cur == parser->root.cursor )
+ {
+ parser->root.error = FT_THROW( Unknown_File_Format );
+ return;
+ }
}
cur = parser->root.cursor;
@@ -455,10 +472,10 @@
/* immediates-only mode we would get an infinite loop if */
/* we don't do anything here. */
/* */
- /* This encoding array is not valid according to the type1 */
- /* specification (it might be an encoding for a CID type1 */
- /* font, however), so we conclude that this font is NOT a */
- /* type1 font. */
+ /* This encoding array is not valid according to the */
+ /* type42 specification (it might be an encoding for a CID */
+ /* type42 font, however), so we conclude that this font is */
+ /* NOT a type42 font. */
parser->root.error = FT_THROW( Unknown_File_Format );
return;
}
@@ -494,7 +511,7 @@
face->type1.encoding_type = T1_ENCODING_TYPE_ISOLATIN1;
else
- parser->root.error = FT_THROW( Ignore );
+ parser->root.error = FT_ERR( Ignore );
}
}
@@ -558,6 +575,9 @@
while ( parser->root.cursor < limit )
{
+ FT_ULong size;
+
+
cur = parser->root.cursor;
if ( *cur == ']' )
@@ -620,7 +640,7 @@
string_buf = parser->root.cursor + 1; /* one space after `RD' */
- if ( (FT_ULong)( limit - parser->root.cursor ) < string_size )
+ if ( (FT_ULong)( limit - parser->root.cursor ) <= string_size )
{
FT_ERROR(( "t42_parse_sfnts: too much binary data\n" ));
error = FT_THROW( Invalid_File_Format );
@@ -649,6 +669,11 @@
goto Fail;
}
+ /* The whole TTF is now loaded into `string_buf'. We are */
+ /* checking its contents while copying it to `ttf_data'. */
+
+ size = (FT_ULong)( limit - parser->root.cursor );
+
for ( n = 0; n < string_size; n++ )
{
switch ( status )
@@ -666,7 +691,7 @@
status = BEFORE_TABLE_DIR;
face->ttf_size = 12 + 16 * num_tables;
- if ( (FT_Long)( limit - parser->root.cursor ) < face->ttf_size )
+ if ( (FT_Long)size < face->ttf_size )
{
FT_ERROR(( "t42_parse_sfnts: invalid data in sfnts array\n" ));
error = FT_THROW( Invalid_File_Format );
@@ -697,6 +722,14 @@
len = FT_PEEK_ULONG( p );
+ if ( len > size ||
+ face->ttf_size > (FT_Long)( size - len ) )
+ {
+ FT_ERROR(( "t42_parse_sfnts:"
+ " invalid data in sfnts array\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Fail;
+ }
/* Pad to a 4-byte boundary length */
face->ttf_size += (FT_Long)( ( len + 3 ) & ~3U );
@@ -704,7 +737,6 @@
status = OTHER_TABLES;
- /* there are no more than 256 tables, so no size check here */
if ( FT_REALLOC( face->ttf_data, 12 + 16 * num_tables,
face->ttf_size + 1 ) )
goto Fail;
@@ -778,6 +810,17 @@
error = FT_THROW( Invalid_File_Format );
goto Fail;
}
+
+ /* we certainly need more than 4 bytes per glyph */
+ if ( loader->num_glyphs > ( limit - parser->root.cursor ) >> 2 )
+ {
+ FT_TRACE0(( "t42_parse_charstrings: adjusting number of glyphs"
+ " (from %d to %d)\n",
+ loader->num_glyphs,
+ ( limit - parser->root.cursor ) >> 2 ));
+ loader->num_glyphs = ( limit - parser->root.cursor ) >> 2;
+ }
+
}
else if ( *parser->root.cursor == '<' )
{
@@ -824,6 +867,15 @@
/* initialize tables */
+ /* contrary to Type1, we disallow multiple CharStrings arrays */
+ if ( swap_table->init )
+ {
+ FT_ERROR(( "t42_parse_charstrings:"
+ " only one CharStrings array allowed\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Fail;
+ }
+
error = psaux->ps_table_funcs->init( code_table,
loader->num_glyphs,
memory );
@@ -847,8 +899,13 @@
for (;;)
{
- /* The format is simple: */
- /* `/glyphname' + index [+ def] */
+ /* We support two formats. */
+ /* */
+ /* `/glyphname' + index [+ `def'] */
+ /* `(glyphname)' [+ `cvn'] + index [+ `def'] */
+ /* */
+ /* The latter format gets created by the */
+ /* LilyPond typesetting program. */
T1_Skip_Spaces( parser );
@@ -876,12 +933,13 @@
if ( parser->root.error )
return;
- if ( *cur == '/' )
+ if ( *cur == '/' || *cur == '(' )
{
FT_UInt len;
+ FT_Bool have_literal = FT_BOOL( *cur == '(' );
- if ( cur + 2 >= limit )
+ if ( cur + ( have_literal ? 3 : 2 ) >= limit )
{
FT_ERROR(( "t42_parse_charstrings: out of bounds\n" ));
error = FT_THROW( Invalid_File_Format );
@@ -890,6 +948,8 @@
cur++; /* skip `/' */
len = (FT_UInt)( parser->root.cursor - cur );
+ if ( have_literal )
+ len--;
error = T1_Add_Table( name_table, n, cur, len + 1 );
if ( error )
@@ -909,6 +969,9 @@
T1_Skip_Spaces( parser );
+ if ( have_literal )
+ T1_Skip_PS_Token( parser );
+
cur = parser->root.cursor;
(void)T1_ToInt( parser );
@@ -1205,7 +1268,7 @@
{
FT_UNUSED( face );
- FT_MEM_ZERO( loader, sizeof ( *loader ) );
+ FT_ZERO( loader );
loader->num_glyphs = 0;
loader->num_chars = 0;
diff --git a/src/type42/t42parse.h b/src/type42/t42parse.h
index 8ed2fde..f35d23d 100644
--- a/src/type42/t42parse.h
+++ b/src/type42/t42parse.h
@@ -4,7 +4,7 @@
/* */
/* Type 42 font parser (specification). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T42PARSE_H__
-#define __T42PARSE_H__
+#ifndef T42PARSE_H_
+#define T42PARSE_H_
#include "t42objs.h"
@@ -85,7 +85,7 @@
FT_END_HEADER
-#endif /* __T42PARSE_H__ */
+#endif /* T42PARSE_H_ */
/* END */
diff --git a/src/type42/t42types.h b/src/type42/t42types.h
index 01286af..d0aa2de 100644
--- a/src/type42/t42types.h
+++ b/src/type42/t42types.h
@@ -4,7 +4,7 @@
/* */
/* Type 42 font data types (specification only). */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __T42TYPES_H__
-#define __T42TYPES_H__
+#ifndef T42TYPES_H_
+#define T42TYPES_H_
#include <ft2build.h>
@@ -51,7 +51,7 @@
FT_END_HEADER
-#endif /* __T42TYPES_H__ */
+#endif /* T42TYPES_H_ */
/* END */
diff --git a/src/type42/type42.c b/src/type42/type42.c
index 3332b7b..6a89cfb 100644
--- a/src/type42/type42.c
+++ b/src/type42/type42.c
@@ -4,7 +4,7 @@
/* */
/* FreeType Type 42 driver component. */
/* */
-/* Copyright 2002-2015 by */
+/* Copyright 2002-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -15,11 +15,13 @@
/* */
/***************************************************************************/
-#define FT_MAKE_OPTION_SINGLE_OBJECT
+#define FT_MAKE_OPTION_SINGLE_OBJECT
#include <ft2build.h>
+
+#include "t42drivr.c"
#include "t42objs.c"
#include "t42parse.c"
-#include "t42drivr.c"
+
/* END */
diff --git a/src/winfonts/Jamfile b/src/winfonts/Jamfile
index 86ee668..4385e3b 100644
--- a/src/winfonts/Jamfile
+++ b/src/winfonts/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/winfonts Jamfile
#
-# Copyright 2001-2015 by
+# Copyright 2001-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/winfonts/fnterrs.h b/src/winfonts/fnterrs.h
index 0bf4d09..3a86af5 100644
--- a/src/winfonts/fnterrs.h
+++ b/src/winfonts/fnterrs.h
@@ -4,7 +4,7 @@
/* */
/* Win FNT/FON error codes (specification only). */
/* */
-/* Copyright 2001-2015 by */
+/* Copyright 2001-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,12 +23,12 @@
/* */
/*************************************************************************/
-#ifndef __FNTERRS_H__
-#define __FNTERRS_H__
+#ifndef FNTERRS_H_
+#define FNTERRS_H_
#include FT_MODULE_ERRORS_H
-#undef __FTERRORS_H__
+#undef FTERRORS_H_
#undef FT_ERR_PREFIX
#define FT_ERR_PREFIX FNT_Err_
@@ -36,7 +36,7 @@
#include FT_ERRORS_H
-#endif /* __FNTERRS_H__ */
+#endif /* FNTERRS_H_ */
/* END */
diff --git a/src/winfonts/module.mk b/src/winfonts/module.mk
index 8ba6d75..13f9077 100644
--- a/src/winfonts/module.mk
+++ b/src/winfonts/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/winfonts/rules.mk b/src/winfonts/rules.mk
index 4535f54..d694d1a 100644
--- a/src/winfonts/rules.mk
+++ b/src/winfonts/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2015 by
+# Copyright 1996-2018 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/winfonts/winfnt.c b/src/winfonts/winfnt.c
index 06f1861..36bd314 100644
--- a/src/winfonts/winfnt.c
+++ b/src/winfonts/winfnt.c
@@ -4,7 +4,7 @@
/* */
/* FreeType font driver for Windows FNT/FON files */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* Copyright 2003 Huw D M Davies for Codeweavers */
/* Copyright 2007 Dmitry Timoshkov for Codeweavers */
@@ -269,16 +269,19 @@
static FT_Error
fnt_face_get_dll_font( FNT_Face face,
- FT_Int face_index )
+ FT_Int face_instance_index )
{
FT_Error error;
FT_Stream stream = FT_FACE( face )->stream;
FT_Memory memory = FT_FACE( face )->memory;
WinMZ_HeaderRec mz_header;
+ FT_Long face_index;
face->font = NULL;
+ face_index = FT_ABS( face_instance_index ) & 0xFFFF;
+
/* does it begin with an MZ header? */
if ( FT_STREAM_SEEK( 0 ) ||
FT_STREAM_READ_FIELDS( winmz_header_fields, &mz_header ) )
@@ -317,6 +320,21 @@
size_shift = FT_GET_USHORT_LE();
+ /* Microsoft's specification of the executable-file header format */
+ /* for `New Executable' (NE) doesn't give a limit for the */
+ /* alignment shift count; however, in 1985, the year of the */
+ /* specification release, only 32bit values were supported, thus */
+ /* anything larger than 16 doesn't make sense in general, given */
+ /* that file offsets are 16bit values, shifted by the alignment */
+ /* shift count */
+ if ( size_shift > 16 )
+ {
+ FT_TRACE2(( "invalid alignment shift count for resource data\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+
for (;;)
{
FT_UShort type_id, count;
@@ -359,13 +377,14 @@
face->root.num_faces = font_count;
+ if ( face_instance_index < 0 )
+ goto Exit;
+
if ( face_index >= font_count )
{
error = FT_THROW( Invalid_Argument );
goto Exit;
}
- else if ( face_index < 0 )
- goto Exit;
if ( FT_NEW( face->font ) )
goto Exit;
@@ -542,7 +561,7 @@
error = fnt_font_load( face->font, stream );
if ( error )
{
- FT_TRACE2(( "font #%lu load error %d\n",
+ FT_TRACE2(( "font #%lu load error 0x%x\n",
dir_entry2.name, error ));
goto Fail;
}
@@ -689,13 +708,14 @@
static FT_Error
FNT_Face_Init( FT_Stream stream,
FT_Face fntface, /* FNT_Face */
- FT_Int face_index,
+ FT_Int face_instance_index,
FT_Int num_params,
FT_Parameter* params )
{
FNT_Face face = (FNT_Face)fntface;
FT_Error error;
FT_Memory memory = FT_FACE_MEMORY( face );
+ FT_Int face_index;
FT_UNUSED( num_params );
FT_UNUSED( params );
@@ -703,9 +723,11 @@
FT_TRACE2(( "Windows FNT driver\n" ));
+ face_index = FT_ABS( face_instance_index ) & 0xFFFF;
+
/* try to load font from a DLL */
- error = fnt_face_get_dll_font( face, face_index );
- if ( !error && face_index < 0 )
+ error = fnt_face_get_dll_font( face, face_instance_index );
+ if ( !error && face_instance_index < 0 )
goto Exit;
if ( FT_ERR_EQ( error, Unknown_File_Format ) )
@@ -726,16 +748,25 @@
if ( !error )
{
+ if ( face_instance_index < 0 )
+ goto Exit;
+
if ( face_index > 0 )
error = FT_THROW( Invalid_Argument );
- else if ( face_index < 0 )
- goto Exit;
}
}
if ( error )
goto Fail;
+ /* sanity check */
+ if ( !face->font->header.pixel_height )
+ {
+ FT_TRACE2(( "invalid pixel height\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Fail;
+ }
+
/* we now need to fill the root FT_Face fields */
/* with relevant information */
{
@@ -828,10 +859,6 @@
NULL );
if ( error )
goto Fail;
-
- /* Select default charmap */
- if ( root->num_charmaps )
- root->charmap = root->charmaps[0];
}
/* set up remaining flags */
@@ -969,8 +996,6 @@
FT_ULong offset;
FT_Bool new_format;
- FT_UNUSED( load_flags );
-
if ( !face )
{
@@ -1024,46 +1049,9 @@
goto Exit;
}
- /* jump to glyph data */
- p = font->fnt_frame + /* font->header.bits_offset */ + offset;
+ bitmap->rows = font->header.pixel_height;
+ bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
- /* allocate and build bitmap */
- {
- FT_Memory memory = FT_FACE_MEMORY( slot->face );
- FT_UInt pitch = ( bitmap->width + 7 ) >> 3;
- FT_Byte* column;
- FT_Byte* write;
-
-
- bitmap->pitch = (int)pitch;
- bitmap->rows = font->header.pixel_height;
- bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
-
- if ( offset + pitch * bitmap->rows > font->header.file_size )
- {
- FT_TRACE2(( "invalid bitmap width\n" ));
- error = FT_THROW( Invalid_File_Format );
- goto Exit;
- }
-
- /* note: since glyphs are stored in columns and not in rows we */
- /* can't use ft_glyphslot_set_bitmap */
- if ( FT_ALLOC_MULT( bitmap->buffer, pitch, bitmap->rows ) )
- goto Exit;
-
- column = (FT_Byte*)bitmap->buffer;
-
- for ( ; pitch > 0; pitch--, column++ )
- {
- FT_Byte* limit = p + bitmap->rows;
-
-
- for ( write = column; p < limit; p++, write += bitmap->pitch )
- *write = *p;
- }
- }
-
- slot->internal->flags = FT_GLYPH_OWN_BITMAP;
slot->bitmap_left = 0;
slot->bitmap_top = font->header.ascent;
slot->format = FT_GLYPH_FORMAT_BITMAP;
@@ -1078,6 +1066,48 @@
ft_synthesize_vertical_metrics( &slot->metrics,
(FT_Pos)( bitmap->rows << 6 ) );
+ if ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY )
+ goto Exit;
+
+ /* jump to glyph data */
+ p = font->fnt_frame + /* font->header.bits_offset */ + offset;
+
+ /* allocate and build bitmap */
+ {
+ FT_Memory memory = FT_FACE_MEMORY( slot->face );
+ FT_UInt pitch = ( bitmap->width + 7 ) >> 3;
+ FT_Byte* column;
+ FT_Byte* write;
+
+
+ bitmap->pitch = (int)pitch;
+ if ( !pitch ||
+ offset + pitch * bitmap->rows > font->header.file_size )
+ {
+ FT_TRACE2(( "invalid bitmap width\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
+
+ /* note: since glyphs are stored in columns and not in rows we */
+ /* can't use ft_glyphslot_set_bitmap */
+ if ( FT_ALLOC_MULT( bitmap->buffer, bitmap->rows, pitch ) )
+ goto Exit;
+
+ column = (FT_Byte*)bitmap->buffer;
+
+ for ( ; pitch > 0; pitch--, column++ )
+ {
+ FT_Byte* limit = p + bitmap->rows;
+
+
+ for ( write = column; p < limit; p++, write += bitmap->pitch )
+ *write = *p;
+ }
+
+ slot->internal->flags = FT_GLYPH_OWN_BITMAP;
+ }
+
Exit:
return error;
}
@@ -1098,7 +1128,7 @@
static const FT_Service_WinFntRec winfnt_service_rec =
{
- winfnt_get_header
+ winfnt_get_header /* get_header */
};
/*
@@ -1138,32 +1168,32 @@
0x10000L,
0x20000L,
- 0,
+ NULL, /* module-specific interface */
- 0, /* FT_Module_Constructor */
- 0, /* FT_Module_Destructor */
- winfnt_get_service
+ NULL, /* FT_Module_Constructor module_init */
+ NULL, /* FT_Module_Destructor module_done */
+ winfnt_get_service /* FT_Module_Requester get_interface */
},
sizeof ( FNT_FaceRec ),
sizeof ( FT_SizeRec ),
sizeof ( FT_GlyphSlotRec ),
- FNT_Face_Init,
- FNT_Face_Done,
- 0, /* FT_Size_InitFunc */
- 0, /* FT_Size_DoneFunc */
- 0, /* FT_Slot_InitFunc */
- 0, /* FT_Slot_DoneFunc */
+ FNT_Face_Init, /* FT_Face_InitFunc init_face */
+ FNT_Face_Done, /* FT_Face_DoneFunc done_face */
+ NULL, /* FT_Size_InitFunc init_size */
+ NULL, /* FT_Size_DoneFunc done_size */
+ NULL, /* FT_Slot_InitFunc init_slot */
+ NULL, /* FT_Slot_DoneFunc done_slot */
- FNT_Load_Glyph,
+ FNT_Load_Glyph, /* FT_Slot_LoadFunc load_glyph */
- 0, /* FT_Face_GetKerningFunc */
- 0, /* FT_Face_AttachFunc */
- 0, /* FT_Face_GetAdvancesFunc */
+ NULL, /* FT_Face_GetKerningFunc get_kerning */
+ NULL, /* FT_Face_AttachFunc attach_file */
+ NULL, /* FT_Face_GetAdvancesFunc get_advances */
- FNT_Size_Request,
- FNT_Size_Select
+ FNT_Size_Request, /* FT_Size_RequestFunc request_size */
+ FNT_Size_Select /* FT_Size_SelectFunc select_size */
};
diff --git a/src/winfonts/winfnt.h b/src/winfonts/winfnt.h
index a39d26f..4885c9d 100644
--- a/src/winfonts/winfnt.h
+++ b/src/winfonts/winfnt.h
@@ -4,7 +4,7 @@
/* */
/* FreeType font driver for Windows FNT/FON files */
/* */
-/* Copyright 1996-2015 by */
+/* Copyright 1996-2018 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* Copyright 2007 Dmitry Timoshkov for Codeweavers */
/* */
@@ -17,8 +17,8 @@
/***************************************************************************/
-#ifndef __WINFNT_H__
-#define __WINFNT_H__
+#ifndef WINFNT_H_
+#define WINFNT_H_
#include <ft2build.h>
@@ -165,7 +165,7 @@
FT_END_HEADER
-#endif /* __WINFNT_H__ */
+#endif /* WINFNT_H_ */
/* END */
diff --git a/vms_make.com b/vms_make.com
index 73522bf..7b8a49b 100644
--- a/vms_make.com
+++ b/vms_make.com
@@ -1,6 +1,6 @@
-$! make Freetype2 under OpenVMS
+$! make FreeType 2 under OpenVMS
$!
-$! Copyright 2003-2015 by
+$! Copyright 2003-2018 by
$! David Turner, Robert Wilhelm, and Werner Lemberg.
$!
$! This file is part of the FreeType project, and may only be used, modified,
@@ -10,7 +10,7 @@
$! fully.
$!
$!
-$! External libraries (like Freetype, XPM, etc.) are supported via the
+$! External libraries (like FreeType, XPM, etc.) are supported via the
$! config file VMSLIB.DAT. Please check the sample file, which is part of this
$! distribution, for the information you need to provide
$!
@@ -26,12 +26,12 @@
$! zinser@zinser.no-ip.info (preferred) or
$! zinser@sysdev.deutsche-boerse.com (work)
$!
-$! Make procedure history for Freetype2
+$! Make procedure history for FreeType 2
$!
$!------------------------------------------------------------------------------
$! Version history
$! 0.01 20040401 First version to receive a number
-$! 0.02 20041030 Add error handling, Freetype 2.1.9
+$! 0.02 20041030 Add error handling, FreeType 2.1.9
$!
$ on error then goto err_exit
$ true = 1
@@ -128,7 +128,7 @@
$ write sys$output "Error reading config file vmslib.dat"
$ goto err_exit
$FT2_ERR:
-$ write sys$output "Could not locate Freetype 2 include files"
+$ write sys$output "Could not locate FreeType 2 include files"
$ goto err_exit
$ERR_EXIT:
$ set message/facil/ident/sever/text
@@ -356,8 +356,8 @@
CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.builds.vms],[--.include],[--.src.base])
OBJS=ftbase.obj,ftinit.obj,ftglyph.obj,ftdebug.obj,ftbdf.obj,ftmm.obj,\
- fttype1.obj,ftfntfmt.obj,ftpfr.obj,ftstroke.obj,ftwinfnt.obj,ftbbox.obj,\
- ftbitmap.obj,ftlcdfil.obj,ftgasp.obj
+ fttype1.obj,ftpfr.obj,ftstroke.obj,ftwinfnt.obj,ftbbox.obj,\
+ ftbitmap.obj,ftgasp.obj
all : $(OBJS)
library [--.lib]freetype.olb $(OBJS)
@@ -1070,7 +1070,7 @@
$ type/out=vmslib.dat sys$input
!
! This is a simple driver file with information used by vms_make.com to
-! check if external libraries (like t1lib and freetype) are available on
+! check if external libraries (like t1lib and FreeType) are available on
! the system.
!
! Layout of the file:
@@ -1090,13 +1090,13 @@
! might look like. They are site specific and the locations of the
! library and include files need almost certainly to be changed.
!
-! Location: All of the libaries can be found at the following addresses
+! Location: All of the libraries can be found at the following addresses
!
! ZLIB: http://zinser.no-ip.info/vms/sw/zlib.htmlx
!
ZLIB # sys$library:libz.olb # sys$library: # zlib.h # FT_CONFIG_OPTION_SYSTEM_ZLIB
$ write sys$output "New driver file vmslib.dat created."
-$ write sys$output "Please customize libary locations for your site"
+$ write sys$output "Please customize library locations for your site"
$ write sys$output "and afterwards re-execute ''myproc'"
$ goto err_exit
$ endif
@@ -1148,7 +1148,7 @@
$ write optf libloc , lqual
$ if (f$trnlnm("topt") .nes. "") then write topt libloc , lqual
$!
-$! Nasty hack to get the freetype includes to work
+$! Nasty hack to get the FreeType includes to work
$!
$ ft2def = false
$ if ((libname .eqs. "FREETYPE") .and. -