mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-29 04:13:32 +00:00
[FREETYPE]
* Sync to 2.5.0. Brought to you by zehnvor. [FTFD] * Add version information to build. svn path=/trunk/; revision=60227
This commit is contained in:
@@ -28,6 +28,7 @@ list(APPEND SOURCE
|
||||
src/base/ftwinfnt.c
|
||||
src/base/ftxf86.c
|
||||
src/bdf/bdf.c
|
||||
src/bzip2/ftbzip2.c
|
||||
src/cache/ftcache.c
|
||||
src/cff/cff.c
|
||||
src/cid/type1cid.c
|
||||
|
||||
+5447
-63
File diff suppressed because it is too large
Load Diff
-2613
File diff suppressed because it is too large
Load Diff
-9439
File diff suppressed because it is too large
Load Diff
-2837
File diff suppressed because it is too large
Load Diff
-15896
File diff suppressed because it is too large
Load Diff
-203
@@ -1,203 +0,0 @@
|
||||
# FreeType 2 top Jamfile.
|
||||
#
|
||||
# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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.
|
||||
|
||||
|
||||
# The HDRMACRO is already defined in FTJam and is used to add
|
||||
# the content of certain macros to the list of included header
|
||||
# files.
|
||||
#
|
||||
# We can compile FreeType 2 with classic Jam however thanks to
|
||||
# the following code
|
||||
#
|
||||
if ! $(JAM_TOOLSET)
|
||||
{
|
||||
rule HDRMACRO
|
||||
{
|
||||
# nothing
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# We need to invoke a SubDir rule if the FT2 source directory top is not the
|
||||
# current directory. This allows us to build FreeType 2 as part of a larger
|
||||
# project easily.
|
||||
#
|
||||
if $(FT2_TOP) != $(DOT)
|
||||
{
|
||||
SubDir FT2_TOP ;
|
||||
}
|
||||
|
||||
|
||||
# The following macros define the include directory, the source directory,
|
||||
# and the final library name (without library extensions). They can be
|
||||
# replaced by other definitions when the library is compiled as part of
|
||||
# a larger project.
|
||||
#
|
||||
|
||||
# Name of FreeType include directory during compilation.
|
||||
# This is relative to FT2_TOP.
|
||||
#
|
||||
FT2_INCLUDE_DIR ?= include ;
|
||||
|
||||
# Name of FreeType source directory during compilation.
|
||||
# This is relative to FT2_TOP.
|
||||
#
|
||||
FT2_SRC_DIR ?= src ;
|
||||
|
||||
# Name of final library, without extension.
|
||||
#
|
||||
FT2_LIB ?= $(LIBPREFIX)freetype ;
|
||||
|
||||
|
||||
# Define FT2_BUILD_INCLUDE to point to your build-specific directory.
|
||||
# This is prepended to FT2_INCLUDE_DIR. It can be used to specify
|
||||
# the location of a custom <ft2build.h> which will point to custom
|
||||
# versions of `ftmodule.h' and `ftoption.h', for example.
|
||||
#
|
||||
FT2_BUILD_INCLUDE ?= ;
|
||||
|
||||
# The list of modules to compile on any given build of the library.
|
||||
# By default, this will contain _all_ modules defined in FT2_SRC_DIR.
|
||||
#
|
||||
# IMPORTANT: You'll need to change the content of `ftmodule.h' as well
|
||||
# if you modify this list or provide your own.
|
||||
#
|
||||
FT2_COMPONENTS ?= autofit # auto-fitter
|
||||
base # base component (public APIs)
|
||||
bdf # BDF font driver
|
||||
cache # cache sub-system
|
||||
cff # CFF/CEF font driver
|
||||
cid # PostScript CID-keyed font driver
|
||||
gzip # support for gzip-compressed files
|
||||
lzw # support for LZW-compressed files
|
||||
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
|
||||
truetype # TrueType font driver
|
||||
type1 # PostScript Type 1 font driver
|
||||
type42 # PostScript Type 42 (embedded TrueType) driver
|
||||
winfonts # Windows FON/FNT font driver
|
||||
;
|
||||
|
||||
|
||||
# Don't touch.
|
||||
#
|
||||
FT2_INCLUDE = $(FT2_BUILD_INCLUDE)
|
||||
[ FT2_SubDir $(FT2_INCLUDE_DIR) ] ;
|
||||
|
||||
FT2_SRC = [ FT2_SubDir $(FT2_SRC_DIR) ] ;
|
||||
|
||||
# Location of API Reference Documentation
|
||||
#
|
||||
if $(DOC_DIR)
|
||||
{
|
||||
DOC_DIR = $(DOCDIR:T) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
DOC_DIR = docs/reference ;
|
||||
}
|
||||
|
||||
|
||||
# Only used by FreeType developers.
|
||||
#
|
||||
if $(DEBUG_HINTER)
|
||||
{
|
||||
CCFLAGS += -DDEBUG_HINTER ;
|
||||
}
|
||||
|
||||
|
||||
# We need `freetype2/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 ;
|
||||
|
||||
# Uncomment the following line if you want to build individual source files
|
||||
# for each FreeType 2 module. This is only useful during development, and
|
||||
# is better defined as an environment variable anyway!
|
||||
#
|
||||
# FT2_MULTI = true ;
|
||||
|
||||
|
||||
# The file <freetype/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.
|
||||
#
|
||||
HDRMACRO [ FT2_SubDir include freetype config ftheader.h ] ;
|
||||
HDRMACRO [ FT2_SubDir include freetype internal internal.h ] ;
|
||||
|
||||
|
||||
# Now include the Jamfile in `freetype2/src', used to drive the compilation
|
||||
# of each FreeType 2 component and/or module.
|
||||
#
|
||||
SubInclude FT2_TOP $(FT2_SRC_DIR) ;
|
||||
|
||||
# Handle the generation of the `ftexport.sym' file which contain the list
|
||||
# of exported symbols. This can be used on Unix by libtool.
|
||||
#
|
||||
SubInclude FT2_TOP $(FT2_SRC_DIR) tools ;
|
||||
|
||||
rule GenExportSymbols
|
||||
{
|
||||
local apinames = apinames$(SUFEXE) ;
|
||||
local headers = [ Glob $(2) : *.h ] ;
|
||||
|
||||
LOCATE on $(1) = $(ALL_LOCATE_TARGET) ;
|
||||
|
||||
APINAMES on $(1) = apinames$(SUFEXE) ;
|
||||
|
||||
Depends $(1) : $(apinames) $(headers) ;
|
||||
GenExportSymbols1 $(1) : $(headers) ;
|
||||
Clean clean : $(1) ;
|
||||
}
|
||||
|
||||
actions GenExportSymbols1 bind APINAMES
|
||||
{
|
||||
$(APINAMES) $(2) > $(1)
|
||||
}
|
||||
|
||||
GenExportSymbols ftexport.sym : include/freetype include/freetype/cache ;
|
||||
|
||||
# Test files (hinter debugging). Only used by FreeType developers.
|
||||
#
|
||||
if $(DEBUG_HINTER)
|
||||
{
|
||||
SubInclude FT2_TOP tests ;
|
||||
}
|
||||
|
||||
rule RefDoc
|
||||
{
|
||||
Depends $1 : all ;
|
||||
NotFile $1 ;
|
||||
Always $1 ;
|
||||
}
|
||||
|
||||
actions RefDoc
|
||||
{
|
||||
python $(FT2_SRC)/tools/docmaker/docmaker.py --prefix=ft2 --title=FreeType-2.4.4 --output=$(DOC_DIR) $(FT2_INCLUDE)/freetype/*.h $(FT2_INCLUDE)/freetype/config/*.h
|
||||
}
|
||||
|
||||
RefDoc refdoc ;
|
||||
|
||||
|
||||
# end of top Jamfile
|
||||
-71
@@ -1,71 +0,0 @@
|
||||
# FreeType 2 JamRules.
|
||||
#
|
||||
# Copyright 2001, 2002, 2003 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 contains the Jam rules needed to build the FreeType 2 library.
|
||||
# It is shared by all Jamfiles and is included only once in the build
|
||||
# process.
|
||||
#
|
||||
|
||||
|
||||
# Call SubDirHdrs on a list of directories.
|
||||
#
|
||||
rule AddSubDirHdrs
|
||||
{
|
||||
local x ;
|
||||
|
||||
for x in $(<)
|
||||
{
|
||||
SubDirHdrs $(x) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Determine prefix of library file. We must use "libxxxxx" on Unix systems,
|
||||
# while all other simply use the real name.
|
||||
#
|
||||
if $(UNIX)
|
||||
{
|
||||
LIBPREFIX ?= lib ;
|
||||
}
|
||||
else
|
||||
{
|
||||
LIBPREFIX ?= "" ;
|
||||
}
|
||||
|
||||
# FT2_TOP contains the location of the FreeType source directory. You can
|
||||
# set it to a specific value if you want to compile the library as part of a
|
||||
# larger project.
|
||||
#
|
||||
FT2_TOP ?= $(DOT) ;
|
||||
|
||||
# Define a new rule used to declare a sub directory of the Nirvana source
|
||||
# tree.
|
||||
#
|
||||
rule FT2_SubDir
|
||||
{
|
||||
if $(FT2_TOP) = $(DOT)
|
||||
{
|
||||
return [ FDirName $(<) ] ;
|
||||
}
|
||||
else
|
||||
{
|
||||
return [ FDirName $(FT2_TOP) $(<) ] ;
|
||||
}
|
||||
}
|
||||
|
||||
# We also set ALL_LOCATE_TARGET in order to place all object and library
|
||||
# files in "objs".
|
||||
#
|
||||
ALL_LOCATE_TARGET ?= [ FT2_SubDir objs ] ;
|
||||
|
||||
|
||||
# end of Jamrules
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
#
|
||||
# FreeType 2 build system -- top-level Makefile
|
||||
#
|
||||
|
||||
|
||||
# Copyright 1996-2000, 2002, 2006 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.
|
||||
|
||||
|
||||
# Project names
|
||||
#
|
||||
PROJECT := freetype
|
||||
PROJECT_TITLE := FreeType
|
||||
|
||||
# The variable TOP_DIR holds the path to the topmost directory in the project
|
||||
# engine source hierarchy. If it is not defined, default it to `.'.
|
||||
#
|
||||
TOP_DIR ?= .
|
||||
|
||||
# The variable OBJ_DIR gives the location where object files and the
|
||||
# FreeType library are built.
|
||||
#
|
||||
OBJ_DIR ?= $(TOP_DIR)/objs
|
||||
|
||||
|
||||
include $(TOP_DIR)/builds/toplevel.mk
|
||||
|
||||
# EOF
|
||||
Vendored
+36
-17
@@ -1,21 +1,19 @@
|
||||
Special notes to Unix users
|
||||
===========================
|
||||
|
||||
Please read the file `docs/UPGRADE.UNIX'. It contains important
|
||||
information regarding the installation of FreeType on Unix systems,
|
||||
especially GNU based operating systems like GNU/Linux.
|
||||
|
||||
FreeType 2's library is called `libfreetype', FreeType 1's library
|
||||
is called `libttf'. They are *not* compatible!
|
||||
|
||||
|
||||
FreeType 2.4.4
|
||||
FreeType 2.5.0
|
||||
==============
|
||||
|
||||
Homepage: http://www.freetype.org
|
||||
|
||||
FreeType is a freely available software library to render fonts.
|
||||
|
||||
It is written in C, designed to be small, efficient, highly
|
||||
customizable, and portable while capable of producing high-quality
|
||||
output (glyph images) of most vector and bitmap font formats.
|
||||
|
||||
Please read the docs/CHANGES file, it contains IMPORTANT
|
||||
INFORMATION.
|
||||
|
||||
Read the files `docs/INSTALL' for installation instructions.
|
||||
Read the files `docs/INSTALL*' for installation instructions; see
|
||||
the file `docs/LICENSE.TXT' for the available licenses.
|
||||
|
||||
The FreeType 2 API reference is located in `docs/reference'; use the
|
||||
file `ft2-doc.html' as the top entry point. Additional
|
||||
@@ -26,9 +24,30 @@
|
||||
|
||||
and download one of the following files.
|
||||
|
||||
freetype-doc-2.4.4.tar.bz2
|
||||
freetype-doc-2.4.4.tar.gz
|
||||
ftdoc244.zip
|
||||
freetype-doc-2.5.0.tar.bz2
|
||||
freetype-doc-2.5.0.tar.gz
|
||||
ftdoc250.zip
|
||||
|
||||
To view the documentation online, go to
|
||||
|
||||
http://www.freetype.org/freetype2/documentation.html
|
||||
|
||||
|
||||
Mailing Lists
|
||||
=============
|
||||
|
||||
The preferred way of communication with the FreeType team is using
|
||||
e-mail lists.
|
||||
|
||||
general use and discussion: [email protected]
|
||||
engine internals, porting, etc.: [email protected]
|
||||
announcements: [email protected]
|
||||
|
||||
The lists are moderated; see
|
||||
|
||||
http://www.freetype.org/contact.html
|
||||
|
||||
how to subscribe.
|
||||
|
||||
|
||||
Bugs
|
||||
@@ -51,7 +70,7 @@
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Copyright 2006, 2007, 2008, 2009, 2010 by
|
||||
Copyright 2006-2013 by
|
||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
|
||||
This file is part of the FreeType project, and may only be used,
|
||||
|
||||
-70
@@ -1,70 +0,0 @@
|
||||
CREDITS
|
||||
|
||||
The code in this tree is based (it is actually an exact copy with some
|
||||
ReactOS specific extra files) on the FreeType library, version 2.3.0
|
||||
It was written and is being maintained by the FreeType team. The projects
|
||||
website is http://www.freetype.org.
|
||||
|
||||
|
||||
NOTES
|
||||
|
||||
Please note that there are two Makefiles in the freetype directory:
|
||||
- Makefile.freetype which is the original Makefile from the FreeType
|
||||
distribution
|
||||
- Makefile which is the ReactOS specific Makefile. It will use the
|
||||
original Makefile.freetype when needed.
|
||||
Normally you will just use Makefile and not worry about Makefile.freetype.
|
||||
There will also be 2 FreeType libraries, lib/freetype/objs/libfreetype.a
|
||||
and dk/nkm/lib/freetype.a. The second one is the import library for
|
||||
freetype.dll and is the one that is used in the rest of ReactOS.
|
||||
lib/freetype/objs/libfreetype.a is a static library which is used to
|
||||
create the DLL.
|
||||
|
||||
|
||||
PORTING A NEW VERSION
|
||||
|
||||
Please note that the procedure below is a one-time only procedure, to be
|
||||
performed by whoever imports a new FreeType version into the ReactOS
|
||||
source tree. Once the new version has been committed to CVS all other
|
||||
developers can just use the normal build procedure.
|
||||
|
||||
First, save the old version:
|
||||
|
||||
move lib\freetype lib\freetype.old
|
||||
|
||||
Unpack the FreeType distribution and copy the files to lib/freetype
|
||||
(note: without the version number which is present in the pathnames in
|
||||
the distribution archive).
|
||||
Setup the FreeType build by copying the correct configuration file:
|
||||
|
||||
copy lib\freetype\builds\win32\w32-mingw32.mk lib\freetype\config.mk
|
||||
|
||||
Copy the ReactOS specific files from the old directory to the new:
|
||||
|
||||
move lib\freetype\Makefile lib\freetype\Makefile.freetype
|
||||
mkdir lib\freetype\i386
|
||||
copy lib\freetype.old\rosglue.c lib\freetype
|
||||
copy lib\freetype.old\i386\setjmplongjmp.s lib\freetype\i386
|
||||
copy lib\freetype.old\freetype.rc lib\freetype
|
||||
copy lib\freetype.old\Makefile lib\freetype
|
||||
copy lib\freetype.old\README.ROS lib\freetype
|
||||
copy lib\freetype.old\Doxyfile lib\freetype
|
||||
copy lib\freetype.old\.cvsignore lib\freetype
|
||||
copy lib\freetype.old\objs\.cvsignore lib\freetype\objs
|
||||
copy lib\freetype.old\i386\.cvsignore lib\freetype\i386
|
||||
|
||||
Next you need to create the freetype.def file. Since this depends on the
|
||||
"gawk" command, you'll need to have MSYS installed, which is not one of
|
||||
the normally required packages to build ReactOS. You can get MSYS from the
|
||||
MinGW site at http://sourceforge.net/projects/mingw. Once you have MSYS
|
||||
installed you can create the new freetype.def file:
|
||||
|
||||
make freetype_def
|
||||
|
||||
Well, that's all there is to it. You can delete the old version in
|
||||
lib\freetype.old. Please adjust the version number in the heading of this
|
||||
file, so it is obvious to everyone which FreeType version we're using.
|
||||
After testing, you can commit the new/changed files to CVS. ALthough files
|
||||
config.mk and freetype.def are generated, they should be included in CVS.
|
||||
|
||||
$Id: README.ROS 25663 2007-01-31 06:11:48Z greatlrd $
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
The git archive doesn't contain pre-built configuration scripts for
|
||||
UNIXish platforms. To generate them say
|
||||
|
||||
sh autogen.sh
|
||||
|
||||
which in turn depends on the following packages:
|
||||
|
||||
automake (1.10.1)
|
||||
libtool (2.2.4)
|
||||
autoconf (2.62)
|
||||
|
||||
The versions given in parentheses are known to work. Newer versions
|
||||
should work too, of course. Note that autogen.sh also sets up proper
|
||||
file permissions for the `configure' and auxiliary scripts.
|
||||
|
||||
The autogen.sh script now checks the version of above three packages
|
||||
whether they match the numbers above. Otherwise it will complain and
|
||||
suggest either upgrading or using an environment variable to point to
|
||||
a more recent version of the required tool(s).
|
||||
|
||||
Note that `aclocal' is provided by the `automake' package on Linux,
|
||||
and that `libtoolize' is called `glibtoolize' on Darwin (OS X).
|
||||
|
||||
|
||||
For static builds which don't use platform specific optimizations, no
|
||||
configure script is necessary at all; saying
|
||||
|
||||
make setup ansi
|
||||
make
|
||||
|
||||
should work on all platforms which have GNU make (or makepp).
|
||||
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Copyright 2005, 2006, 2007, 2008, 2009, 2010 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.git ---
|
||||
+7
-4
@@ -55,7 +55,7 @@ compare_to_minimum_version ()
|
||||
if test $MAJOR1 -lt $MAJOR2; then
|
||||
echo 0
|
||||
return
|
||||
else
|
||||
else
|
||||
if test $MAJOR1 -gt $MAJOR2; then
|
||||
echo 1
|
||||
return
|
||||
@@ -67,7 +67,7 @@ compare_to_minimum_version ()
|
||||
if test $MINOR1 -lt $MINOR2; then
|
||||
echo 0
|
||||
return
|
||||
else
|
||||
else
|
||||
if test $MINOR1 -gt $MINOR2; then
|
||||
echo 1
|
||||
return
|
||||
@@ -118,9 +118,12 @@ fi
|
||||
|
||||
# On MacOS X, the GNU libtool is named `glibtool'.
|
||||
HOSTOS=`uname`
|
||||
LIBTOOLIZE=libtoolize
|
||||
if test "$HOSTOS"x = Darwinx; then
|
||||
if test "$LIBTOOLIZE"x != x; then
|
||||
:
|
||||
elif test "$HOSTOS"x = Darwinx; then
|
||||
LIBTOOLIZE=glibtoolize
|
||||
else
|
||||
LIBTOOLIZE=libtoolize
|
||||
fi
|
||||
|
||||
if test "$ACLOCAL"x = x; then
|
||||
|
||||
+35
-25
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010 by
|
||||
# Copyright 2002-2006, 2008-2010, 2013 by
|
||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#
|
||||
# This file is part of the FreeType project, and may only be used, modified,
|
||||
@@ -15,19 +15,29 @@
|
||||
|
||||
rm -f config.mk builds/unix/unix-def.mk builds/unix/unix-cc.mk
|
||||
|
||||
# respect GNUMAKE environment variable for backwards compatibility
|
||||
if test "x$GNUMAKE" = x; then
|
||||
GNUMAKE=make
|
||||
if test "x$MAKE" = x; then
|
||||
if test "x`make -v 2>/dev/null | egrep 'GNU|makepp'`" = x; then
|
||||
MAKE=gmake
|
||||
else
|
||||
MAKE=make
|
||||
fi
|
||||
fi
|
||||
else
|
||||
MAKE=$GNUMAKE
|
||||
fi
|
||||
|
||||
if test -z "`$GNUMAKE -v 2>/dev/null | grep GNU`"; then
|
||||
if test -z "`$GNUMAKE -v 2>/dev/null | grep makepp`"; then
|
||||
echo "GNU make (>= 3.80) or makepp (>= 1.19) is required to build FreeType2." >&2
|
||||
echo "Please try" >&2
|
||||
echo " \`GNUMAKE=<GNU make command name> $0'." >&2
|
||||
echo "or >&2"
|
||||
echo " \`GNUMAKE=\"makepp --norc-substitution\" $0'." >&2
|
||||
exit 1
|
||||
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 "Please try" >&2
|
||||
echo >&2
|
||||
echo " MAKE=<GNU make command name> $0" >&2
|
||||
echo >&2
|
||||
echo "or" >&2
|
||||
echo >&2
|
||||
echo " MAKE=\"makepp --norc-substitution\" $0" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get `dirname' functionality. This is taken and adapted from autoconf's
|
||||
@@ -92,19 +102,19 @@ if test $inode_src -ne $inode_dst; then
|
||||
cp $abs_ft2_dir/modules.cfg $abs_curr_dir
|
||||
fi
|
||||
echo "Generating \`Makefile'"
|
||||
echo "TOP_DIR := $abs_ft2_dir" > Makefile
|
||||
echo "OBJ_DIR := $abs_curr_dir" >> Makefile
|
||||
echo "OBJ_BUILD := \$(OBJ_DIR)" >> Makefile
|
||||
echo "DOC_DIR := \$(OBJ_DIR)/reference" >> Makefile
|
||||
echo "FT_LIBTOOL_DIR := \$(OBJ_DIR)" >> Makefile
|
||||
echo "ifndef FT2DEMOS" >> Makefile
|
||||
echo " include \$(TOP_DIR)/Makefile" >> Makefile
|
||||
echo "else" >> Makefile
|
||||
echo " TOP_DIR_2 := \$(TOP_DIR)/../ft2demos" >> Makefile
|
||||
echo " PROJECT := freetype" >> Makefile
|
||||
echo " CONFIG_MK := \$(OBJ_DIR)/config.mk" >> Makefile
|
||||
echo " include \$(TOP_DIR_2)/Makefile" >> Makefile
|
||||
echo "endif" >> Makefile
|
||||
echo "TOP_DIR := $abs_ft2_dir" > Makefile
|
||||
echo "OBJ_DIR := $abs_curr_dir" >> Makefile
|
||||
echo "OBJ_BUILD := \$(OBJ_DIR)" >> Makefile
|
||||
echo "DOC_DIR := \$(OBJ_DIR)/reference" >> Makefile
|
||||
echo "FT_LIBTOOL_DIR := \$(OBJ_DIR)" >> Makefile
|
||||
echo "ifndef FT2DEMOS" >> Makefile
|
||||
echo " include \$(TOP_DIR)/Makefile" >> Makefile
|
||||
echo "else" >> Makefile
|
||||
echo " TOP_DIR_2 := \$(TOP_DIR)/../ft2demos" >> Makefile
|
||||
echo " PROJECT := freetype" >> Makefile
|
||||
echo " CONFIG_MK := \$(OBJ_DIR)/config.mk" >> Makefile
|
||||
echo " include \$(TOP_DIR_2)/Makefile" >> Makefile
|
||||
echo "endif" >> Makefile
|
||||
fi
|
||||
|
||||
# call make
|
||||
@@ -120,6 +130,6 @@ case $# in
|
||||
esac
|
||||
done ;;
|
||||
esac
|
||||
CFG=$CFG $GNUMAKE setup unix
|
||||
CFG=$CFG $MAKE setup unix
|
||||
|
||||
# eof
|
||||
|
||||
-733
@@ -1,733 +0,0 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftoption.h (for development) */
|
||||
/* */
|
||||
/* User-selectable configuration macros (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, */
|
||||
/* 2010 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 __FTOPTION_H__
|
||||
#define __FTOPTION_H__
|
||||
|
||||
|
||||
#include <ft2build.h>
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* USER-SELECTABLE CONFIGURATION MACROS */
|
||||
/* */
|
||||
/* This file contains the default configuration macro definitions for */
|
||||
/* a standard build of the FreeType library. There are three ways to */
|
||||
/* use this file to build project-specific versions of the library: */
|
||||
/* */
|
||||
/* - You can modify this file by hand, but this is not recommended in */
|
||||
/* cases where you would like to build several versions of the */
|
||||
/* library from a single source directory. */
|
||||
/* */
|
||||
/* - You can put a copy of this file in your build directory, more */
|
||||
/* 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 */
|
||||
/* that for your own projects. */
|
||||
/* */
|
||||
/* - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it */
|
||||
/* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */
|
||||
/* locate this file during the build. For example, */
|
||||
/* */
|
||||
/* #define FT_CONFIG_OPTIONS_H <myftoptions.h> */
|
||||
/* #include <freetype/config/ftheader.h> */
|
||||
/* */
|
||||
/* will use `$BUILD/myftoptions.h' instead of this file for macro */
|
||||
/* definitions. */
|
||||
/* */
|
||||
/* 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 <freetype/config/ftmodule.h>. */
|
||||
/* */
|
||||
/* We highly recommend using the third method whenever possible. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* 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. */
|
||||
/* */
|
||||
/* 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. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Many compilers provide a non-ANSI 64-bit data type that can be used */
|
||||
/* by FreeType to speed up some computations. However, this will create */
|
||||
/* some problems when compiling the library in strict ANSI mode. */
|
||||
/* */
|
||||
/* For this reason, the use of 64-bit integers is normally disabled when */
|
||||
/* the __STDC__ macro is defined. You can however disable this by */
|
||||
/* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */
|
||||
/* */
|
||||
/* For most compilers, this will only create compilation warnings when */
|
||||
/* building the library. */
|
||||
/* */
|
||||
/* ObNote: The compiler-specific 64-bit integers are detected in the */
|
||||
/* file `ftconfig.h' either statically or through the */
|
||||
/* `configure' script on supported platforms. */
|
||||
/* */
|
||||
#undef FT_CONFIG_OPTION_FORCE_INT64
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* If this macro is defined, do not try to use an assembler version of */
|
||||
/* performance-critical functions (e.g. FT_MulFix). You should only do */
|
||||
/* that to verify that the assembler function works properly, or to */
|
||||
/* execute benchmark tests of the various implementations. */
|
||||
/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* If this macro is defined, try to use an inlined assembler version of */
|
||||
/* the `FT_MulFix' function, which is a `hotspot' when loading and */
|
||||
/* hinting glyphs, and which should be executed as fast as possible. */
|
||||
/* */
|
||||
/* Note that if your compiler or CPU is not supported, this will default */
|
||||
/* to the standard and portable implementation found in `ftcalc.c'. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_INLINE_MULFIX
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* LZW-compressed file support. */
|
||||
/* */
|
||||
/* FreeType now handles font files that have been compressed with the */
|
||||
/* `compress' program. This is mostly used to parse many of the PCF */
|
||||
/* files that come with various X11 distributions. The implementation */
|
||||
/* uses NetBSD's `zopen' to partially uncompress the file on the fly */
|
||||
/* (see src/lzw/ftgzip.c). */
|
||||
/* */
|
||||
/* Define this macro if you want to enable this `feature'. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_USE_LZW
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Gzip-compressed file support. */
|
||||
/* */
|
||||
/* FreeType now handles font files that have been compressed with the */
|
||||
/* `gzip' program. This is mostly used to parse many of the PCF files */
|
||||
/* that come with XFree86. The implementation uses `zlib' to */
|
||||
/* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */
|
||||
/* */
|
||||
/* Define this macro if you want to enable this `feature'. See also */
|
||||
/* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_USE_ZLIB
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* ZLib library selection */
|
||||
/* */
|
||||
/* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */
|
||||
/* It allows FreeType's `ftgzip' component to link to the system's */
|
||||
/* installation of the ZLib library. This is useful on systems like */
|
||||
/* Unix or VMS where it generally is already available. */
|
||||
/* */
|
||||
/* If you let it undefined, the component will use its own copy */
|
||||
/* of the zlib sources instead. These have been modified to be */
|
||||
/* included directly within the component and *not* export external */
|
||||
/* function names. This allows you to link any program with FreeType */
|
||||
/* _and_ ZLib without linking conflicts. */
|
||||
/* */
|
||||
/* Do not #undef this macro here since the build system might define */
|
||||
/* it for certain configurations only. */
|
||||
/* */
|
||||
/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* 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 */
|
||||
/* module is in charge of converting a glyph name string into a */
|
||||
/* Unicode value, or return a Macintosh standard glyph name for the */
|
||||
/* use with the TrueType `post' table. */
|
||||
/* */
|
||||
/* Undefine this macro if you do not want `psnames' compiled in your */
|
||||
/* build of FreeType. This has the following effects: */
|
||||
/* */
|
||||
/* - The TrueType driver will provide its own set of glyph names, */
|
||||
/* if you build it to support postscript names in the TrueType */
|
||||
/* `post' table. */
|
||||
/* */
|
||||
/* - The Type 1 driver will not be able to synthesize a Unicode */
|
||||
/* charmap out of the glyphs found in the fonts. */
|
||||
/* */
|
||||
/* You would normally undefine this configuration macro when building */
|
||||
/* a version of FreeType that doesn't contain a Type 1 or CFF driver. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Postscript Names to Unicode Values support */
|
||||
/* */
|
||||
/* By default, FreeType 2 is built with the `PSNames' module compiled */
|
||||
/* in. Among other things, the module is used to convert a glyph name */
|
||||
/* into a Unicode value. This is especially useful in order to */
|
||||
/* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */
|
||||
/* through a big table named the `Adobe Glyph List' (AGL). */
|
||||
/* */
|
||||
/* Undefine this macro if you do not want the Adobe Glyph List */
|
||||
/* compiled in your `PSNames' module. The Type 1 driver will not be */
|
||||
/* able to synthesize a Unicode charmap out of the glyphs found in the */
|
||||
/* fonts. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Support for Mac fonts */
|
||||
/* */
|
||||
/* Define this macro if you want support for outline fonts in Mac */
|
||||
/* format (mac dfont, mac resource, macbinary containing a mac */
|
||||
/* resource) on non-Mac platforms. */
|
||||
/* */
|
||||
/* Note that the `FOND' resource isn't checked. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_MAC_FONTS
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Guessing methods to access embedded resource forks */
|
||||
/* */
|
||||
/* Enable extra Mac fonts support on non-Mac platforms (e.g. */
|
||||
/* GNU/Linux). */
|
||||
/* */
|
||||
/* Resource forks which include fonts data are stored sometimes in */
|
||||
/* locations which users or developers don't expected. In some cases, */
|
||||
/* resource forks start with some offset from the head of a file. In */
|
||||
/* other cases, the actual resource fork is stored in file different */
|
||||
/* from what the user specifies. If this option is activated, */
|
||||
/* FreeType tries to guess whether such offsets or different file */
|
||||
/* names must be used. */
|
||||
/* */
|
||||
/* Note that normal, direct access of resource forks is controlled via */
|
||||
/* the FT_CONFIG_OPTION_MAC_FONTS option. */
|
||||
/* */
|
||||
#ifdef FT_CONFIG_OPTION_MAC_FONTS
|
||||
#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Allow the use of FT_Incremental_Interface to load typefaces that */
|
||||
/* contain no glyph data, but supply it via a callback function. */
|
||||
/* This is required by clients supporting document formats which */
|
||||
/* supply font data incrementally as the document is parsed, such */
|
||||
/* as the Ghostscript interpreter for the PostScript language. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_INCREMENTAL
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* The size in bytes of the render pool used by the scan-line converter */
|
||||
/* to do all of its work. */
|
||||
/* */
|
||||
/* This must be greater than 4KByte if you use FreeType to rasterize */
|
||||
/* glyphs; otherwise, you may set it to zero to avoid unnecessary */
|
||||
/* allocation of the render pool. */
|
||||
/* */
|
||||
#define FT_RENDER_POOL_SIZE 16384L
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* FT_MAX_MODULES */
|
||||
/* */
|
||||
/* The maximum number of modules that can be registered in a single */
|
||||
/* FreeType library object. 32 is the default. */
|
||||
/* */
|
||||
#define FT_MAX_MODULES 32
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Debug level */
|
||||
/* */
|
||||
/* FreeType can be compiled in debug or trace mode. In debug mode, */
|
||||
/* errors are reported through the `ftdebug' component. In trace */
|
||||
/* mode, additional messages are sent to the standard output during */
|
||||
/* execution. */
|
||||
/* */
|
||||
/* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */
|
||||
/* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */
|
||||
/* */
|
||||
/* Don't define any of these macros to compile in `release' mode! */
|
||||
/* */
|
||||
/* Do not #undef these macros here since the build system might define */
|
||||
/* them for certain configurations only. */
|
||||
/* */
|
||||
#define FT_DEBUG_LEVEL_ERROR
|
||||
#define FT_DEBUG_LEVEL_TRACE
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Memory Debugging */
|
||||
/* */
|
||||
/* FreeType now comes with an integrated memory debugger that is */
|
||||
/* capable of detecting simple errors like memory leaks or double */
|
||||
/* deletes. To compile it within your build of the library, you */
|
||||
/* should define FT_DEBUG_MEMORY here. */
|
||||
/* */
|
||||
/* Note that the memory debugger is only activated at runtime when */
|
||||
/* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
|
||||
/* */
|
||||
/* Do not #undef this macro here since the build system might define */
|
||||
/* it for certain configurations only. */
|
||||
/* */
|
||||
#define FT_DEBUG_MEMORY
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Module errors */
|
||||
/* */
|
||||
/* If this macro is set (which is _not_ the default), the higher byte */
|
||||
/* of an error code gives the module in which the error has occurred, */
|
||||
/* while the lower byte is the real error code. */
|
||||
/* */
|
||||
/* Setting this macro makes sense for debugging purposes only, since */
|
||||
/* it would break source compatibility of certain programs that use */
|
||||
/* FreeType 2. */
|
||||
/* */
|
||||
/* More details can be found in the files ftmoderr.h and fterrors.h. */
|
||||
/* */
|
||||
#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Position Independent Code */
|
||||
/* */
|
||||
/* If this macro is set (which is _not_ the default), FreeType2 will */
|
||||
/* avoid creating constants that require address fixups. Instead the */
|
||||
/* constants will be moved into a struct and additional intialization */
|
||||
/* code will be used. */
|
||||
/* */
|
||||
/* Setting this macro is needed for systems that prohibit address */
|
||||
/* fixups, such as BREW. */
|
||||
/* */
|
||||
/* #define FT_CONFIG_OPTION_PIC */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** S F N T D R I V E R C O N F I G U R A T I O N ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */
|
||||
/* embedded bitmaps in all formats using the SFNT module (namely */
|
||||
/* TrueType & OpenType). */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */
|
||||
/* load and enumerate the glyph Postscript names in a TrueType or */
|
||||
/* OpenType file. */
|
||||
/* */
|
||||
/* Note that when you do not compile the `PSNames' module by undefining */
|
||||
/* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */
|
||||
/* contain additional code used to read the PS Names table from a font. */
|
||||
/* */
|
||||
/* (By default, the module uses `PSNames' to extract glyph names.) */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */
|
||||
/* access the internal name table in a SFNT-based format like TrueType */
|
||||
/* or OpenType. The name table contains various strings used to */
|
||||
/* describe the font, like family name, copyright, version, etc. It */
|
||||
/* does not contain any glyph name though. */
|
||||
/* */
|
||||
/* Accessing SFNT names is done through the functions declared in */
|
||||
/* `freetype/ftsnames.h'. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_SFNT_NAMES
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* TrueType CMap support */
|
||||
/* */
|
||||
/* Here you can fine-tune which TrueType CMap table format shall be */
|
||||
/* supported. */
|
||||
#define TT_CONFIG_CMAP_FORMAT_0
|
||||
#define TT_CONFIG_CMAP_FORMAT_2
|
||||
#define TT_CONFIG_CMAP_FORMAT_4
|
||||
#define TT_CONFIG_CMAP_FORMAT_6
|
||||
#define TT_CONFIG_CMAP_FORMAT_8
|
||||
#define TT_CONFIG_CMAP_FORMAT_10
|
||||
#define TT_CONFIG_CMAP_FORMAT_12
|
||||
#define TT_CONFIG_CMAP_FORMAT_13
|
||||
#define TT_CONFIG_CMAP_FORMAT_14
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
|
||||
/* a bytecode interpreter in the TrueType driver. */
|
||||
/* */
|
||||
/* By undefining this, you will only compile the code necessary to load */
|
||||
/* TrueType glyphs without hinting. */
|
||||
/* */
|
||||
/* Do not #undef this macro here, since the build system might */
|
||||
/* define it for certain configurations only. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* 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. */
|
||||
/* */
|
||||
/* 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 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. */
|
||||
/* */
|
||||
/* - 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_INTERPRETER_SWITCH to compile the TrueType */
|
||||
/* bytecode interpreter with a huge switch statement, rather than a call */
|
||||
/* table. This results in smaller and faster code for a number of */
|
||||
/* architectures. */
|
||||
/* */
|
||||
/* Note however that on some compiler/processor combinations, undefining */
|
||||
/* this macro will generate faster, though larger, code. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
|
||||
/* TrueType glyph loader to use Apple's definition of how to handle */
|
||||
/* component offsets in composite glyphs. */
|
||||
/* */
|
||||
/* Apple and MS disagree on the default behavior of component offsets */
|
||||
/* in composites. Apple says that they should be scaled by the scaling */
|
||||
/* factors in the transformation matrix (roughly, it's more complex) */
|
||||
/* while MS says they should not. OpenType defines two bits in the */
|
||||
/* composite flags array which can be used to disambiguate, but old */
|
||||
/* fonts will not have them. */
|
||||
/* */
|
||||
/* http://partners.adobe.com/asn/developer/opentype/glyf.html */
|
||||
/* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
|
||||
/* */
|
||||
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
|
||||
/* support for Apple's distortable font technology (fvar, gvar, cvar, */
|
||||
/* and avar tables). This has many similarities to Type 1 Multiple */
|
||||
/* Masters support. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define TT_CONFIG_OPTION_BDF if you want to include support for */
|
||||
/* an embedded `BDF ' table within SFNT-based bitmap formats. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_BDF
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* T1_MAX_DICT_DEPTH is the maximal depth of nest dictionaries and */
|
||||
/* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
|
||||
/* required. */
|
||||
/* */
|
||||
#define T1_MAX_DICT_DEPTH 5
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
|
||||
/* calls during glyph loading. */
|
||||
/* */
|
||||
#define T1_MAX_SUBRS_CALLS 16
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */
|
||||
/* minimum of 16 is required. */
|
||||
/* */
|
||||
/* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */
|
||||
/* */
|
||||
#define T1_MAX_CHARSTRINGS_OPERANDS 256
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define this configuration macro if you want to prevent the */
|
||||
/* compilation of `t1afm', which is in charge of reading Type 1 AFM */
|
||||
/* files into an existing face. Note that if set, the T1 driver will be */
|
||||
/* unable to produce kerning distances. */
|
||||
/* */
|
||||
#undef T1_CONFIG_OPTION_NO_AFM
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define this configuration macro if you want to prevent the */
|
||||
/* compilation of the Multiple Masters font support in the Type 1 */
|
||||
/* driver. */
|
||||
/* */
|
||||
#undef T1_CONFIG_OPTION_NO_MM_SUPPORT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** 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 ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Compile autofit module with CJK (Chinese, Japanese, Korean) script */
|
||||
/* support. */
|
||||
/* */
|
||||
#define AF_CONFIG_OPTION_CJK
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Compile autofit module with Indic script support. */
|
||||
/* */
|
||||
#define AF_CONFIG_OPTION_INDIC
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
/*
|
||||
* Define this variable if you want to keep the layout of internal
|
||||
* structures that was used prior to FreeType 2.2. This also compiles in
|
||||
* a few obsolete functions to avoid linking problems on typical Unix
|
||||
* distributions.
|
||||
*
|
||||
* For embedded systems or building a new distribution from scratch, it
|
||||
* is recommended to disable the macro since it reduces the library's code
|
||||
* size and activates a few memory-saving optimizations as well.
|
||||
*/
|
||||
/* #define FT_CONFIG_OPTION_OLD_INTERNALS xxx */
|
||||
|
||||
|
||||
/*
|
||||
* To detect legacy cache-lookup call from a rogue client (<= 2.1.7),
|
||||
* we restrict the number of charmaps in a font. The current API of
|
||||
* FTC_CMapCache_Lookup() takes cmap_index & charcode, but old API
|
||||
* takes charcode only. To determine the passed value is for cmap_index
|
||||
* or charcode, the possible cmap_index is restricted not to exceed
|
||||
* the minimum possible charcode by a rogue client. It is also very
|
||||
* unlikely that a rogue client is interested in Unicode values 0 to 15.
|
||||
*
|
||||
* NOTE: The original threshold was 4 deduced from popular number of
|
||||
* cmap subtables in UCS-4 TrueType fonts, but now it is not
|
||||
* irregular for OpenType fonts to have more than 4 subtables,
|
||||
* because variation selector subtables are available for Apple
|
||||
* and Microsoft platforms.
|
||||
*/
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
#define FT_MAX_CHARMAP_CACHEABLE 15
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* This macro is defined if either unpatented or 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
|
||||
#endif
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTOPTION_H__ */
|
||||
|
||||
|
||||
/* END */
|
||||
+2
-2
@@ -3,6 +3,6 @@
|
||||
#define REACTOS_STR_INTERNAL_NAME "freetype\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "freetype.dll\0"
|
||||
#define REACTOS_STR_COMPANY_NAME "ReactOS Development Team/FreeType Team\0"
|
||||
#define REACTOS_STR_LEGAL_COPYRIGHT "Copyright 1998-2007 ReactOS Team\0"
|
||||
#define REACTOS_STR_ORIGINAL_COPYRIGHT "Copyright 1996-2007 FreeType Team\0"
|
||||
#define REACTOS_STR_LEGAL_COPYRIGHT "Copyright 1998-2011 ReactOS Team\0"
|
||||
#define REACTOS_STR_ORIGINAL_COPYRIGHT "Copyright 1996-2013 FreeType Team\0"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* ANSI-specific configuration file (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007, 2008, 2010 by */
|
||||
/* Copyright 1996-2004, 2006-2008, 2010-2011, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -95,10 +95,6 @@ FT_BEGIN_HEADER
|
||||
#endif
|
||||
|
||||
|
||||
/* Preferred alignment of data */
|
||||
#define FT_ALIGNMENT 8
|
||||
|
||||
|
||||
/* FT_UNUSED is a macro used to indicate that a given parameter is not */
|
||||
/* used -- this is only used to get rid of unpleasant compiler warnings */
|
||||
#ifndef FT_UNUSED
|
||||
@@ -124,15 +120,17 @@ FT_BEGIN_HEADER
|
||||
/* This is the only necessary change, so it is defined here instead */
|
||||
/* providing a new configuration file. */
|
||||
/* */
|
||||
#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
|
||||
( defined( __MWERKS__ ) && defined( macintosh ) )
|
||||
#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
|
||||
/* no Carbon frameworks for 64bit 10.4.x */
|
||||
/* AvailabilityMacros.h is available since Mac OS X 10.2, */
|
||||
/* so guess the system version by maximum errno before inclusion */
|
||||
#include <errno.h>
|
||||
#ifdef ECANCELED /* defined since 10.2 */
|
||||
#include "AvailabilityMacros.h"
|
||||
#endif
|
||||
#if defined( __LP64__ ) && \
|
||||
( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
|
||||
#define DARWIN_NO_CARBON 1
|
||||
#else
|
||||
#define FT_MACINTOSH 1
|
||||
#undef FT_MACINTOSH
|
||||
#endif
|
||||
|
||||
#elif defined( __SC__ ) || defined( __MRC__ )
|
||||
@@ -202,6 +200,30 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
typedef unsigned XXX FT_UInt32;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* FT_Int64 */
|
||||
/* */
|
||||
/* A typedef for a 64bit signed integer type. The size depends on */
|
||||
/* the configuration. Only defined if there is real 64bit support; */
|
||||
/* otherwise, it gets emulated with a structure (if necessary). */
|
||||
/* */
|
||||
typedef signed XXX FT_Int64;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* FT_UInt64 */
|
||||
/* */
|
||||
/* A typedef for a 64bit unsigned integer type. The size depends on */
|
||||
/* the configuration. Only defined if there is real 64bit support; */
|
||||
/* otherwise, it gets emulated with a structure (if necessary). */
|
||||
/* */
|
||||
typedef unsigned XXX FT_UInt64;
|
||||
|
||||
/* */
|
||||
|
||||
#endif
|
||||
@@ -241,13 +263,15 @@ FT_BEGIN_HEADER
|
||||
|
||||
/* FT_LONG64 must be defined if a 64-bit type is available */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long
|
||||
#define FT_INT64 long
|
||||
#define FT_UINT64 unsigned long
|
||||
|
||||
#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
|
||||
|
||||
/* this compiler provides the __int64 type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 __int64
|
||||
#define FT_INT64 __int64
|
||||
#define FT_UINT64 unsigned __int64
|
||||
|
||||
#elif defined( __BORLANDC__ ) /* Borland C++ */
|
||||
|
||||
@@ -256,7 +280,8 @@ FT_BEGIN_HEADER
|
||||
|
||||
/* this compiler provides the __int64 type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 __int64
|
||||
#define FT_INT64 __int64
|
||||
#define FT_UINT64 unsigned __int64
|
||||
|
||||
#elif defined( __WATCOMC__ ) /* Watcom C++ */
|
||||
|
||||
@@ -265,13 +290,15 @@ FT_BEGIN_HEADER
|
||||
#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
|
||||
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long int
|
||||
#define FT_INT64 long long int
|
||||
#define FT_UINT64 unsigned long long int
|
||||
|
||||
#elif defined( __GNUC__ )
|
||||
|
||||
/* GCC provides the `long long' type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long int
|
||||
#define FT_INT64 long long int
|
||||
#define FT_UINT64 unsigned long long int
|
||||
|
||||
#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
|
||||
|
||||
@@ -295,6 +322,11 @@ FT_BEGIN_HEADER
|
||||
|
||||
#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
|
||||
|
||||
#ifdef FT_LONG64
|
||||
typedef FT_INT64 FT_Int64;
|
||||
typedef FT_UINT64 FT_UInt64;
|
||||
#endif
|
||||
|
||||
|
||||
#define FT_BEGIN_STMNT do {
|
||||
#define FT_END_STMNT } while ( 0 )
|
||||
@@ -348,16 +380,17 @@ FT_BEGIN_HEADER
|
||||
register FT_Int32 t, t2;
|
||||
|
||||
|
||||
asm __volatile__ (
|
||||
"smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */
|
||||
"mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */
|
||||
"add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */
|
||||
"adds %1, %1, %0\n\t" /* %1 += %0 */
|
||||
"adc %2, %2, #0\n\t" /* %2 += carry */
|
||||
"mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */
|
||||
"orr %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */
|
||||
__asm__ __volatile__ (
|
||||
"smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */
|
||||
"mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */
|
||||
"add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */
|
||||
"adds %1, %1, %0\n\t" /* %1 += %0 */
|
||||
"adc %2, %2, #0\n\t" /* %2 += carry */
|
||||
"mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */
|
||||
"orr %0, %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */
|
||||
: "=r"(a), "=&r"(t2), "=&r"(t)
|
||||
: "r"(a), "r"(b) );
|
||||
: "r"(a), "r"(b)
|
||||
: "cc" );
|
||||
return a;
|
||||
}
|
||||
|
||||
@@ -395,6 +428,43 @@ FT_BEGIN_HEADER
|
||||
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
|
||||
#ifdef _MSC_VER /* Visual C++ */
|
||||
|
||||
#ifdef _M_IX86
|
||||
|
||||
#define FT_MULFIX_ASSEMBLER FT_MulFix_i386
|
||||
|
||||
/* documentation is in freetype.h */
|
||||
|
||||
static __inline FT_Int32
|
||||
FT_MulFix_i386( FT_Int32 a,
|
||||
FT_Int32 b )
|
||||
{
|
||||
register FT_Int32 result;
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax, a
|
||||
mov edx, b
|
||||
imul edx
|
||||
mov ecx, edx
|
||||
sar ecx, 31
|
||||
add ecx, 8000h
|
||||
add eax, ecx
|
||||
adc edx, 0
|
||||
shr eax, 16
|
||||
shl edx, 16
|
||||
add eax, edx
|
||||
mov result, eax
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
#endif /* _M_IX86 */
|
||||
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Build macros of the FreeType 2 library. */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by */
|
||||
/* Copyright 1996-2008, 2010, 2012, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -315,6 +315,45 @@
|
||||
#define FT_RENDER_H <freetype/ftrender.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_AUTOHINTER_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing
|
||||
* structures and macros related to the auto-hinting module.
|
||||
*
|
||||
*/
|
||||
#define FT_AUTOHINTER_H <freetype/ftautoh.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_CFF_DRIVER_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing
|
||||
* structures and macros related to the CFF driver module.
|
||||
*
|
||||
*/
|
||||
#define FT_CFF_DRIVER_H <freetype/ftcffdrv.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_TRUETYPE_DRIVER_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing
|
||||
* structures and macros related to the TrueType driver module.
|
||||
*
|
||||
*/
|
||||
#define FT_TRUETYPE_DRIVER_H <freetype/ftttdrv.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
@@ -424,6 +463,19 @@
|
||||
#define FT_LZW_H <freetype/ftlzw.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
* FT_BZIP2_H
|
||||
*
|
||||
* @description:
|
||||
* A macro used in #include statements to name the file containing the
|
||||
* definitions of an API which supports bzip2-compressed files.
|
||||
*
|
||||
*/
|
||||
#define FT_BZIP2_H <freetype/ftbzip2.h>
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @macro:
|
||||
|
||||
+135
-35
@@ -4,8 +4,7 @@
|
||||
/* */
|
||||
/* User-selectable configuration macros (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, */
|
||||
/* 2010 by */
|
||||
/* Copyright 1996-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -188,6 +187,47 @@ FT_BEGIN_HEADER
|
||||
/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Bzip2-compressed file support. */
|
||||
/* */
|
||||
/* FreeType now handles font files that have been compressed with the */
|
||||
/* `bzip2' program. This is mostly used to parse many of the PCF */
|
||||
/* files that come with XFree86. The implementation uses `libbz2' to */
|
||||
/* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */
|
||||
/* Contrary to gzip, bzip2 currently is not included and need to use */
|
||||
/* the system available bzip2 implementation. */
|
||||
/* */
|
||||
/* Define this macro if you want to enable this `feature'. */
|
||||
/* */
|
||||
/* #define FT_CONFIG_OPTION_USE_BZIP2 */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* 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. */
|
||||
/* This requires help from the external libpng library. Uncompressed */
|
||||
/* color bitmaps do not need any external libraries and will be */
|
||||
/* supported regardless of this configuration. */
|
||||
/* */
|
||||
/* Define this macro if you want to enable this `feature'. */
|
||||
/* */
|
||||
/* #define FT_CONFIG_OPTION_USE_PNG */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* DLL export compilation */
|
||||
@@ -283,7 +323,7 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* Note that the `FOND' resource isn't checked. */
|
||||
/* */
|
||||
#define FT_CONFIG_OPTION_MAC_FONTS
|
||||
/*#define FT_CONFIG_OPTION_MAC_FONTS */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -363,6 +403,39 @@ FT_BEGIN_HEADER
|
||||
/* #define FT_DEBUG_LEVEL_TRACE */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Autofitter debugging */
|
||||
/* */
|
||||
/* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */
|
||||
/* control the autofitter behaviour for debugging purposes with global */
|
||||
/* boolean variables (consequently, you should *never* enable this */
|
||||
/* while compiling in `release' mode): */
|
||||
/* */
|
||||
/* _af_debug_disable_horz_hints */
|
||||
/* _af_debug_disable_vert_hints */
|
||||
/* _af_debug_disable_blue_hints */
|
||||
/* */
|
||||
/* Additionally, the following functions provide dumps of various */
|
||||
/* internal autofit structures to stdout (using `printf'): */
|
||||
/* */
|
||||
/* af_glyph_hints_dump_points */
|
||||
/* af_glyph_hints_dump_segments */
|
||||
/* af_glyph_hints_dump_edges */
|
||||
/* */
|
||||
/* As an argument, they use another global variable: */
|
||||
/* */
|
||||
/* _af_debug_hints */
|
||||
/* */
|
||||
/* Please have a look at the `ftgrid' demo program to see how those */
|
||||
/* variables and macros should be used. */
|
||||
/* */
|
||||
/* Do not #undef these macros here since the build system might define */
|
||||
/* them for certain configurations only. */
|
||||
/* */
|
||||
/* #define FT_DEBUG_AUTOFIT */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Memory Debugging */
|
||||
@@ -499,6 +572,28 @@ FT_BEGIN_HEADER
|
||||
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* 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. */
|
||||
/* */
|
||||
/* 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: */
|
||||
/* */
|
||||
/* http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
|
||||
/* */
|
||||
/* By undefining this, you only compile the code necessary to hint */
|
||||
/* TrueType glyphs with native TT hinting. */
|
||||
/* */
|
||||
/* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be */
|
||||
/* defined. */
|
||||
/* */
|
||||
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
|
||||
@@ -575,7 +670,7 @@ FT_BEGIN_HEADER
|
||||
/* composite flags array which can be used to disambiguate, but old */
|
||||
/* fonts will not have them. */
|
||||
/* */
|
||||
/* http://partners.adobe.com/asn/developer/opentype/glyf.html */
|
||||
/* http://www.microsoft.com/typography/otspec/glyf.htm */
|
||||
/* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
|
||||
/* */
|
||||
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
|
||||
@@ -610,7 +705,7 @@ FT_BEGIN_HEADER
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* T1_MAX_DICT_DEPTH is the maximal depth of nest dictionaries and */
|
||||
/* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and */
|
||||
/* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
|
||||
/* required. */
|
||||
/* */
|
||||
@@ -654,6 +749,25 @@ FT_BEGIN_HEADER
|
||||
#undef T1_CONFIG_OPTION_NO_MM_SUPPORT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
/**** C F F D R I V E R C O N F I G U R A T I O N ****/
|
||||
/**** ****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF */
|
||||
/* engine gets compiled into FreeType. If defined, it is possible to */
|
||||
/* switch between the two engines using the `hinting-engine' property of */
|
||||
/* the cff driver module. */
|
||||
/* */
|
||||
/* #define CFF_CONFIG_OPTION_OLD_ENGINE */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/**** ****/
|
||||
@@ -676,41 +790,27 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
#define AF_CONFIG_OPTION_INDIC
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Compile autofit module with warp hinting. The idea of the warping */
|
||||
/* code is to slightly scale and shift a glyph within a single dimension */
|
||||
/* so that as much of its segments are aligned (more or less) on the */
|
||||
/* grid. To find out the optimal scaling and shifting value, various */
|
||||
/* parameter combinations are tried and scored. */
|
||||
/* */
|
||||
/* This experimental option is only active if the render mode is */
|
||||
/* FT_RENDER_MODE_LIGHT. */
|
||||
/* */
|
||||
/* #define AF_CONFIG_OPTION_USE_WARPER */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
/*
|
||||
* Define this variable if you want to keep the layout of internal
|
||||
* structures that was used prior to FreeType 2.2. This also compiles in
|
||||
* a few obsolete functions to avoid linking problems on typical Unix
|
||||
* distributions.
|
||||
*
|
||||
* For embedded systems or building a new distribution from scratch, it
|
||||
* is recommended to disable the macro since it reduces the library's code
|
||||
* size and activates a few memory-saving optimizations as well.
|
||||
* This macro is obsolete. Support has been removed in FreeType
|
||||
* version 2.5.
|
||||
*/
|
||||
#define FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
|
||||
/*
|
||||
* To detect legacy cache-lookup call from a rogue client (<= 2.1.7),
|
||||
* we restrict the number of charmaps in a font. The current API of
|
||||
* FTC_CMapCache_Lookup() takes cmap_index & charcode, but old API
|
||||
* takes charcode only. To determine the passed value is for cmap_index
|
||||
* or charcode, the possible cmap_index is restricted not to exceed
|
||||
* the minimum possible charcode by a rogue client. It is also very
|
||||
* unlikely that a rogue client is interested in Unicode values 0 to 15.
|
||||
*
|
||||
* NOTE: The original threshold was 4 deduced from popular number of
|
||||
* cmap subtables in UCS-4 TrueType fonts, but now it is not
|
||||
* irregular for OpenType fonts to have more than 4 subtables,
|
||||
* because variation selector subtables are available for Apple
|
||||
* and Microsoft platforms.
|
||||
*/
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
#define FT_MAX_CHARMAP_CACHEABLE 15
|
||||
#endif
|
||||
/* #define FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/* ANSI-specific library and header configuration file (specification */
|
||||
/* only). */
|
||||
/* */
|
||||
/* Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2009 by */
|
||||
/* Copyright 2002-2007, 2009, 2011-2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -59,11 +59,12 @@
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
#define FT_CHAR_BIT CHAR_BIT
|
||||
#define FT_INT_MAX INT_MAX
|
||||
#define FT_INT_MIN INT_MIN
|
||||
#define FT_UINT_MAX UINT_MAX
|
||||
#define FT_ULONG_MAX ULONG_MAX
|
||||
#define FT_CHAR_BIT CHAR_BIT
|
||||
#define FT_USHORT_MAX USHRT_MAX
|
||||
#define FT_INT_MAX INT_MAX
|
||||
#define FT_INT_MIN INT_MIN
|
||||
#define FT_UINT_MAX UINT_MAX
|
||||
#define FT_ULONG_MAX ULONG_MAX
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
@@ -158,7 +159,7 @@
|
||||
/* on certain platforms */
|
||||
|
||||
#define ft_longjmp longjmp
|
||||
#define ft_setjmp( b ) setjmp( *(jmp_buf*) &(b) ) /* same thing here */
|
||||
#define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */
|
||||
|
||||
|
||||
/* the following is only used for debugging purposes, i.e., if */
|
||||
|
||||
+165
-72
@@ -4,8 +4,7 @@
|
||||
/* */
|
||||
/* FreeType high-level API and common types (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, */
|
||||
/* 2010 by */
|
||||
/* Copyright 1996-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -17,6 +16,10 @@
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __FREETYPE_H__
|
||||
#define __FREETYPE_H__
|
||||
|
||||
|
||||
#ifndef FT_FREETYPE_H
|
||||
#error "`ft2build.h' hasn't been included yet!"
|
||||
#error "Please always use macros to include FreeType header files."
|
||||
@@ -26,14 +29,10 @@
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __FREETYPE_H__
|
||||
#define __FREETYPE_H__
|
||||
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_CONFIG_CONFIG_H
|
||||
#include FT_ERRORS_H
|
||||
#include FT_TYPES_H
|
||||
#include FT_ERRORS_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
@@ -227,15 +226,21 @@ FT_BEGIN_HEADER
|
||||
/* Left side bearing for vertical layout. */
|
||||
/* */
|
||||
/* vertBearingY :: */
|
||||
/* Top side bearing for vertical layout. */
|
||||
/* Top side bearing for vertical layout. Larger positive values */
|
||||
/* mean further below the vertical glyph origin. */
|
||||
/* */
|
||||
/* vertAdvance :: */
|
||||
/* Advance height for vertical layout. */
|
||||
/* Advance height for vertical layout. Positive values mean the */
|
||||
/* glyph has a positive advance downward. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* If not disabled with @FT_LOAD_NO_HINTING, the values represent */
|
||||
/* dimensions of the hinted glyph (in case hinting is applicable). */
|
||||
/* */
|
||||
/* Stroking a glyph with an outside border does not increase */
|
||||
/* `horiAdvance' or `vertAdvance'; you have to manually adjust these */
|
||||
/* values to account for the added width and height. */
|
||||
/* */
|
||||
typedef struct FT_Glyph_Metrics_
|
||||
{
|
||||
FT_Pos width;
|
||||
@@ -324,12 +329,14 @@ FT_BEGIN_HEADER
|
||||
/* It also embeds a memory manager (see @FT_Memory), as well as a */
|
||||
/* scan-line converter object (see @FT_Raster). */
|
||||
/* */
|
||||
/* For multi-threading applications each thread should have its own */
|
||||
/* FT_Library object. */
|
||||
/* In multi-threaded applications, make sure that the same FT_Library */
|
||||
/* object or any of its children doesn't get accessed in parallel. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* Library objects are normally created by @FT_Init_FreeType, and */
|
||||
/* destroyed with @FT_Done_FreeType. */
|
||||
/* destroyed with @FT_Done_FreeType. If you need reference-counting */
|
||||
/* (cf. @FT_Reference_Library), use @FT_New_Library and */
|
||||
/* @FT_Done_Library. */
|
||||
/* */
|
||||
typedef struct FT_LibraryRec_ *FT_Library;
|
||||
|
||||
@@ -843,8 +850,8 @@ FT_BEGIN_HEADER
|
||||
/* expressed in font units (see */
|
||||
/* `units_per_EM'). The box is large enough */
|
||||
/* to contain any glyph from the font. Thus, */
|
||||
/* `bbox.yMax' can be seen as the `maximal */
|
||||
/* ascender', and `bbox.yMin' as the `minimal */
|
||||
/* `bbox.yMax' can be seen as the `maximum */
|
||||
/* ascender', and `bbox.yMin' as the `minimum */
|
||||
/* descender'. Only relevant for scalable */
|
||||
/* formats. */
|
||||
/* */
|
||||
@@ -870,19 +877,22 @@ FT_BEGIN_HEADER
|
||||
/* usually negative. Only relevant for */
|
||||
/* scalable formats. */
|
||||
/* */
|
||||
/* height :: The height is the vertical distance */
|
||||
/* height :: This value is the vertical distance */
|
||||
/* between two consecutive baselines, */
|
||||
/* expressed in font units. It is always */
|
||||
/* positive. Only relevant for scalable */
|
||||
/* formats. */
|
||||
/* */
|
||||
/* max_advance_width :: The maximal advance width, in font units, */
|
||||
/* If you want the global glyph height, use */
|
||||
/* `ascender - descender'. */
|
||||
/* */
|
||||
/* max_advance_width :: The maximum advance width, in font units, */
|
||||
/* for all glyphs in this face. This can be */
|
||||
/* used to make word wrapping computations */
|
||||
/* faster. Only relevant for scalable */
|
||||
/* formats. */
|
||||
/* */
|
||||
/* max_advance_height :: The maximal advance height, in font units, */
|
||||
/* max_advance_height :: The maximum advance height, in font units, */
|
||||
/* for all glyphs in this face. This is only */
|
||||
/* relevant for vertical layouts, and is set */
|
||||
/* to `height' for fonts that do not provide */
|
||||
@@ -957,8 +967,8 @@ FT_BEGIN_HEADER
|
||||
|
||||
FT_ListRec sizes_list;
|
||||
|
||||
FT_Generic autohint;
|
||||
void* extensions;
|
||||
FT_Generic autohint; /* face-specific auto-hinter data */
|
||||
void* extensions; /* unused */
|
||||
|
||||
FT_Face_Internal internal;
|
||||
|
||||
@@ -1058,12 +1068,12 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* It is not possible to autohint such fonts using */
|
||||
/* @FT_LOAD_FORCE_AUTOHINT; it will also ignore */
|
||||
/* @FT_LOAD_NO_HINTING. You have to set both FT_LOAD_NO_HINTING */
|
||||
/* @FT_LOAD_NO_HINTING. You have to set both @FT_LOAD_NO_HINTING */
|
||||
/* and @FT_LOAD_NO_AUTOHINT to really disable hinting; however, you */
|
||||
/* probably never want this except for demonstration purposes. */
|
||||
/* */
|
||||
/* Currently, there are six TrueType fonts in the list of tricky */
|
||||
/* fonts; they are hard-coded in file `ttobjs.c'. */
|
||||
/* Currently, there are about a dozen TrueType fonts in the list of */
|
||||
/* tricky fonts; they are hard-coded in file `ttobjs.c'. */
|
||||
/* */
|
||||
#define FT_FACE_FLAG_SCALABLE ( 1L << 0 )
|
||||
#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 )
|
||||
@@ -1104,8 +1114,8 @@ FT_BEGIN_HEADER
|
||||
* FT_HAS_VERTICAL( face )
|
||||
*
|
||||
* @description:
|
||||
* A macro that returns true whenever a face object contains vertical
|
||||
* metrics.
|
||||
* A macro that returns true whenever a face object contains real
|
||||
* vertical metrics (and not only synthesized ones).
|
||||
*
|
||||
*/
|
||||
#define FT_HAS_VERTICAL( face ) \
|
||||
@@ -1337,7 +1347,7 @@ FT_BEGIN_HEADER
|
||||
/* height :: The height in 26.6 fractional pixels. See */
|
||||
/* @FT_FaceRec for the details. */
|
||||
/* */
|
||||
/* max_advance :: The maximal advance width in 26.6 fractional */
|
||||
/* max_advance :: The maximum advance width in 26.6 fractional */
|
||||
/* pixels. See @FT_FaceRec for the details. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
@@ -1667,6 +1677,12 @@ FT_BEGIN_HEADER
|
||||
/* use @FT_New_Library instead, followed by a call to */
|
||||
/* @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module). */
|
||||
/* */
|
||||
/* For multi-threading applications each thread should have its own */
|
||||
/* FT_Library object. */
|
||||
/* */
|
||||
/* If you need reference-counting (cf. @FT_Reference_Library), use */
|
||||
/* @FT_New_Library and @FT_Done_Library. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Init_FreeType( FT_Library *alibrary );
|
||||
|
||||
@@ -1861,6 +1877,10 @@ FT_BEGIN_HEADER
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0~means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* Use @FT_Done_Face to destroy the created @FT_Face object (along */
|
||||
/* with its slot and sizes). */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_New_Face( FT_Library library,
|
||||
const char* filepathname,
|
||||
@@ -1952,6 +1972,10 @@ FT_BEGIN_HEADER
|
||||
/* Each new face object created with this function also owns a */
|
||||
/* default @FT_Size object, accessible as `face->size'. */
|
||||
/* */
|
||||
/* One @FT_Library instance can have multiple face objects, this is, */
|
||||
/* @FT_Open_Face and its siblings can be called multiple times using */
|
||||
/* the same `library' argument. */
|
||||
/* */
|
||||
/* See the discussion of reference counters in the description of */
|
||||
/* @FT_Reference_Face. */
|
||||
/* */
|
||||
@@ -2106,8 +2130,8 @@ FT_BEGIN_HEADER
|
||||
/* used to determine both scaling values. */
|
||||
/* */
|
||||
/* 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 */
|
||||
/* 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. */
|
||||
/* */
|
||||
/* FT_SIZE_REQUEST_TYPE_BBOX :: */
|
||||
@@ -2219,6 +2243,12 @@ FT_BEGIN_HEADER
|
||||
/* particular bitmap strike. Use @FT_Select_Size instead in that */
|
||||
/* case. */
|
||||
/* */
|
||||
/* The relation between the requested size and the resulting glyph */
|
||||
/* 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' */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Request_Size( FT_Face face,
|
||||
FT_Size_Request req );
|
||||
@@ -2288,6 +2318,11 @@ FT_BEGIN_HEADER
|
||||
/* <Return> */
|
||||
/* 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 */
|
||||
/* understand how requested sizes relate to actual sizes. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Set_Pixel_Sizes( FT_Face face,
|
||||
FT_UInt pixel_width,
|
||||
@@ -2401,14 +2436,20 @@ FT_BEGIN_HEADER
|
||||
* behaviour to more specific and useful cases.
|
||||
*
|
||||
* FT_LOAD_NO_SCALE ::
|
||||
* Don't scale the outline glyph loaded, but keep it in font units.
|
||||
* Don't scale the loaded outline glyph but keep it in font units.
|
||||
*
|
||||
* This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and
|
||||
* unsets @FT_LOAD_RENDER.
|
||||
*
|
||||
* If the font is `tricky' (see @FT_FACE_FLAG_TRICKY for more), using
|
||||
* FT_LOAD_NO_SCALE usually yields meaningless outlines because the
|
||||
* subglyphs must be scaled and positioned with hinting instructions.
|
||||
* This can be solved by loading the font without FT_LOAD_NO_SCALE and
|
||||
* setting the character size to `font->units_per_EM'.
|
||||
*
|
||||
* FT_LOAD_NO_HINTING ::
|
||||
* Disable hinting. This generally generates `blurrier' bitmap glyph
|
||||
* when the glyph is rendered in any of the anti-aliased modes. See
|
||||
* Disable hinting. This generally generates `blurrier' bitmap glyphs
|
||||
* when the glyph are rendered in any of the anti-aliased modes. See
|
||||
* also the note below.
|
||||
*
|
||||
* This flag is implied by @FT_LOAD_NO_SCALE.
|
||||
@@ -2427,8 +2468,14 @@ FT_BEGIN_HEADER
|
||||
* @FT_LOAD_NO_SCALE always sets this flag.
|
||||
*
|
||||
* FT_LOAD_VERTICAL_LAYOUT ::
|
||||
* Load the glyph for vertical text layout. _Don't_ use it as it is
|
||||
* problematic currently.
|
||||
* Load the glyph for vertical text layout. In particular, the
|
||||
* `advance' value in the @FT_GlyphSlotRec structure is set to the
|
||||
* `vertAdvance' value of the `metrics' field.
|
||||
*
|
||||
* In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use
|
||||
* this flag currently. Reason is that in this case vertical metrics
|
||||
* get synthesized, and those values are not always consistent across
|
||||
* various font formats.
|
||||
*
|
||||
* FT_LOAD_FORCE_AUTOHINT ::
|
||||
* Indicates that the auto-hinter is preferred over the font's native
|
||||
@@ -2444,14 +2491,13 @@ FT_BEGIN_HEADER
|
||||
* during glyph loading. This is mostly used to detect broken glyphs
|
||||
* in fonts. By default, FreeType tries to handle broken fonts also.
|
||||
*
|
||||
* FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ::
|
||||
* Indicates that the font driver should ignore the global advance
|
||||
* width defined in the font. By default, that value is used as the
|
||||
* advance width for all glyphs when the face has
|
||||
* @FT_FACE_FLAG_FIXED_WIDTH set.
|
||||
* In particular, errors from the TrueType bytecode engine are not
|
||||
* passed to the application if this flag is not set; this might
|
||||
* result in partially hinted or distorted glyphs in case a glyph's
|
||||
* bytecode is buggy.
|
||||
*
|
||||
* This flag exists for historical reasons (to support buggy CJK
|
||||
* fonts).
|
||||
* FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ::
|
||||
* Ignored. Deprecated.
|
||||
*
|
||||
* FT_LOAD_NO_RECURSE ::
|
||||
* This flag is only used internally. It merely indicates that the
|
||||
@@ -2486,6 +2532,14 @@ FT_BEGIN_HEADER
|
||||
* FT_LOAD_NO_AUTOHINT ::
|
||||
* Disable 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
|
||||
* @FT_PIXEL_MODE_GRAY format.
|
||||
*
|
||||
* @note:
|
||||
* By default, hinting is enabled and the font's native hinter (see
|
||||
* @FT_FACE_FLAG_HINTER) is preferred over the auto-hinter. You can
|
||||
@@ -2500,28 +2554,37 @@ FT_BEGIN_HEADER
|
||||
* Besides deciding which hinter to use, you can also decide which
|
||||
* hinting algorithm to use. See @FT_LOAD_TARGET_XXX for details.
|
||||
*
|
||||
* Note that the auto-hinter needs a valid Unicode cmap (either a native
|
||||
* one or synthesized by FreeType) for producing correct results. If a
|
||||
* font provides an incorrect mapping (for example, assigning the
|
||||
* character code U+005A, LATIN CAPITAL LETTER Z, to a glyph depicting a
|
||||
* mathematical integral sign), the auto-hinter might produce useless
|
||||
* results.
|
||||
*
|
||||
*/
|
||||
#define FT_LOAD_DEFAULT 0x0
|
||||
#define FT_LOAD_NO_SCALE 0x1
|
||||
#define FT_LOAD_NO_HINTING 0x2
|
||||
#define FT_LOAD_RENDER 0x4
|
||||
#define FT_LOAD_NO_BITMAP 0x8
|
||||
#define FT_LOAD_VERTICAL_LAYOUT 0x10
|
||||
#define FT_LOAD_FORCE_AUTOHINT 0x20
|
||||
#define FT_LOAD_CROP_BITMAP 0x40
|
||||
#define FT_LOAD_PEDANTIC 0x80
|
||||
#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH 0x200
|
||||
#define FT_LOAD_NO_RECURSE 0x400
|
||||
#define FT_LOAD_IGNORE_TRANSFORM 0x800
|
||||
#define FT_LOAD_MONOCHROME 0x1000
|
||||
#define FT_LOAD_LINEAR_DESIGN 0x2000
|
||||
#define FT_LOAD_NO_AUTOHINT 0x8000U
|
||||
#define FT_LOAD_NO_SCALE ( 1L << 0 )
|
||||
#define FT_LOAD_NO_HINTING ( 1L << 1 )
|
||||
#define FT_LOAD_RENDER ( 1L << 2 )
|
||||
#define FT_LOAD_NO_BITMAP ( 1L << 3 )
|
||||
#define FT_LOAD_VERTICAL_LAYOUT ( 1L << 4 )
|
||||
#define FT_LOAD_FORCE_AUTOHINT ( 1L << 5 )
|
||||
#define FT_LOAD_CROP_BITMAP ( 1L << 6 )
|
||||
#define FT_LOAD_PEDANTIC ( 1L << 7 )
|
||||
#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ( 1L << 9 )
|
||||
#define FT_LOAD_NO_RECURSE ( 1L << 10 )
|
||||
#define FT_LOAD_IGNORE_TRANSFORM ( 1L << 11 )
|
||||
#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_' */
|
||||
#define FT_LOAD_COLOR ( 1L << 20 )
|
||||
|
||||
/* */
|
||||
|
||||
/* used internally only by certain font drivers! */
|
||||
#define FT_LOAD_ADVANCE_ONLY 0x100
|
||||
#define FT_LOAD_SBITS_ONLY 0x4000
|
||||
#define FT_LOAD_ADVANCE_ONLY ( 1L << 8 )
|
||||
#define FT_LOAD_SBITS_ONLY ( 1L << 14 )
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
@@ -2573,7 +2636,8 @@ FT_BEGIN_HEADER
|
||||
*
|
||||
* If @FT_LOAD_RENDER is also set, the glyph is rendered in the
|
||||
* corresponding mode (i.e., the mode which matches the used algorithm
|
||||
* best) unless @FT_LOAD_MONOCHROME is set.
|
||||
* best). An exeption is FT_LOAD_TARGET_MONO since it implies
|
||||
* @FT_LOAD_MONOCHROME.
|
||||
*
|
||||
* You can use a hinting algorithm that doesn't correspond to the same
|
||||
* rendering mode. As an example, it is possible to use the `light'
|
||||
@@ -2874,14 +2938,26 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* point_size :: The point size in 16.16 fractional points. */
|
||||
/* */
|
||||
/* degree :: The degree of tightness. */
|
||||
/* degree :: The degree of tightness. Increasingly negative */
|
||||
/* values represent tighter track kerning, while */
|
||||
/* increasingly positive values represent looser track */
|
||||
/* kerning. Value zero means no track kerning. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* akerning :: The kerning in 16.16 fractional points. */
|
||||
/* akerning :: The kerning in 16.16 fractional points, to be */
|
||||
/* uniformly applied between all glyphs. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0~means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* Currently, only the Type~1 font driver supports track kerning, */
|
||||
/* using data from AFM files (if attached with @FT_Attach_File or */
|
||||
/* @FT_Attach_Stream). */
|
||||
/* */
|
||||
/* Only very few AFM files come with track kerning data; please refer */
|
||||
/* to the Adobe's AFM specification for more details. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Get_Track_Kerning( FT_Face face,
|
||||
FT_Fixed point_size,
|
||||
@@ -2903,7 +2979,7 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* glyph_index :: The glyph index. */
|
||||
/* */
|
||||
/* buffer_max :: The maximal number of bytes available in the */
|
||||
/* buffer_max :: The maximum number of bytes available in the */
|
||||
/* buffer. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
@@ -2921,6 +2997,10 @@ FT_BEGIN_HEADER
|
||||
/* The glyph name is truncated to fit within the buffer if it is too */
|
||||
/* long. The returned string is always zero-terminated. */
|
||||
/* */
|
||||
/* Be aware that FreeType reorders glyph indices internally so that */
|
||||
/* glyph index~0 always corresponds to the `missing glyph' (called */
|
||||
/* `.notdef'). */
|
||||
/* */
|
||||
/* This function is not compiled within the library if the config */
|
||||
/* macro `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is defined in */
|
||||
/* `include/freetype/config/ftoptions.h'. */
|
||||
@@ -3058,9 +3138,15 @@ FT_BEGIN_HEADER
|
||||
/* <Note> */
|
||||
/* If you use FreeType to manipulate the contents of font files */
|
||||
/* directly, be aware that the glyph index returned by this function */
|
||||
/* doesn't always correspond to the internal indices used within */
|
||||
/* the file. This is done to ensure that value~0 always corresponds */
|
||||
/* to the `missing glyph'. */
|
||||
/* doesn't always correspond to the internal indices used within the */
|
||||
/* file. This is done to ensure that value~0 always corresponds to */
|
||||
/* the `missing glyph'. If the first glyph is not named `.notdef', */
|
||||
/* then for Type~1 and Type~42 fonts, `.notdef' will be moved into */
|
||||
/* the glyph ID~0 position, and whatever was there will be moved to */
|
||||
/* the position `.notdef' had. For Type~1 fonts, if there is no */
|
||||
/* `.notdef' glyph at all, then one will be created at index~0 and */
|
||||
/* whatever was there will be moved to the last index -- Type~42 */
|
||||
/* fonts are considered invalid under this condition. */
|
||||
/* */
|
||||
FT_EXPORT( FT_UInt )
|
||||
FT_Get_Char_Index( FT_Face face,
|
||||
@@ -3331,6 +3417,9 @@ FT_BEGIN_HEADER
|
||||
/* in the @PS_FontInfoRec structure which is only guaranteed to */
|
||||
/* return the correct results for Type~1 fonts. */
|
||||
/* */
|
||||
/* <Since> */
|
||||
/* 2.3.8 */
|
||||
/* */
|
||||
FT_EXPORT( FT_UShort )
|
||||
FT_Get_FSType_Flags( FT_Face face );
|
||||
|
||||
@@ -3357,9 +3446,13 @@ FT_BEGIN_HEADER
|
||||
/* code range for CJK characters. */
|
||||
/* */
|
||||
/* An IVS is registered and unique; for further details please refer */
|
||||
/* to Unicode Technical Report #37, the Ideographic Variation */
|
||||
/* Database. To date (October 2007), the character with the most */
|
||||
/* variants is U+908A, having 8~such IVS. */
|
||||
/* to Unicode Technical Standard #37, the Ideographic Variation */
|
||||
/* Database: */
|
||||
/* */
|
||||
/* http://www.unicode.org/reports/tr37/ */
|
||||
/* */
|
||||
/* To date (November 2012), the character with the most variants is */
|
||||
/* U+9089, having 31 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 */
|
||||
@@ -3588,7 +3681,7 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A very simple function used to perform the computation `(a*b)/c' */
|
||||
/* with maximal accuracy (it uses a 64-bit intermediate integer */
|
||||
/* with maximum accuracy (it uses a 64-bit intermediate integer */
|
||||
/* whenever necessary). */
|
||||
/* */
|
||||
/* This function isn't necessarily as fast as some processor specific */
|
||||
@@ -3623,8 +3716,8 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A very simple function used to perform the computation */
|
||||
/* `(a*b)/0x10000' with maximal accuracy. Most of the time this is */
|
||||
/* used to multiply a given value by a 16.16 fixed float factor. */
|
||||
/* `(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. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* a :: The first multiplier. */
|
||||
@@ -3668,8 +3761,8 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A very simple function used to perform the computation */
|
||||
/* `(a*0x10000)/b' with maximal accuracy. Most of the time, this is */
|
||||
/* used to divide a given value by a 16.16 fixed float factor. */
|
||||
/* `(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. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* a :: The first multiplier. */
|
||||
@@ -3807,8 +3900,8 @@ FT_BEGIN_HEADER
|
||||
*
|
||||
*/
|
||||
#define FREETYPE_MAJOR 2
|
||||
#define FREETYPE_MINOR 4
|
||||
#define FREETYPE_PATCH 4
|
||||
#define FREETYPE_MINOR 5
|
||||
#define FREETYPE_PATCH 0
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
+12
-9
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Quick computation of advance widths (specification only). */
|
||||
/* */
|
||||
/* Copyright 2008 by */
|
||||
/* Copyright 2008, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -82,8 +82,7 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Retrieve the advance value of a given glyph outline in an */
|
||||
/* @FT_Face. By default, the unhinted advance is returned in font */
|
||||
/* units. */
|
||||
/* @FT_Face. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: The source @FT_Face handle. */
|
||||
@@ -94,8 +93,9 @@ FT_BEGIN_HEADER
|
||||
/* calling @FT_Load_Glyph, used to determine what kind */
|
||||
/* of advances you need. */
|
||||
/* <Output> */
|
||||
/* padvance :: The advance value, in either font units or 16.16 */
|
||||
/* format. */
|
||||
/* padvance :: The advance value. If scaling is performed (based on */
|
||||
/* the value of `load_flags'), the advance value is in */
|
||||
/* 16.16 format. Otherwise, it is in font units. */
|
||||
/* */
|
||||
/* If @FT_LOAD_VERTICAL_LAYOUT is set, this is the */
|
||||
/* vertical advance corresponding to a vertical layout. */
|
||||
@@ -127,8 +127,7 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Retrieve the advance values of several glyph outlines in an */
|
||||
/* @FT_Face. By default, the unhinted advances are returned in font */
|
||||
/* units. */
|
||||
/* @FT_Face. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: The source @FT_Face handle. */
|
||||
@@ -141,8 +140,12 @@ FT_BEGIN_HEADER
|
||||
/* calling @FT_Load_Glyph. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* padvance :: The advances, in either font units or 16.16 format. */
|
||||
/* This array must contain at least `count' elements. */
|
||||
/* padvance :: The advance values. This array, to be provided by the */
|
||||
/* caller, must contain at least `count' elements. */
|
||||
/* */
|
||||
/* If scaling is performed (based on the value of */
|
||||
/* `load_flags'), the advance values are in 16.16 format. */
|
||||
/* Otherwise, they are in font units. */
|
||||
/* */
|
||||
/* If @FT_LOAD_VERTICAL_LAYOUT is set, these are the */
|
||||
/* vertical advances corresponding to a vertical layout. */
|
||||
|
||||
@@ -0,0 +1,357 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftautoh.h */
|
||||
/* */
|
||||
/* FreeType API for controlling the auto-hinter (specification only). */
|
||||
/* */
|
||||
/* Copyright 2012, 2013 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 which 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 glyph 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;
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __FTAUTOH_H__ */
|
||||
|
||||
|
||||
/* END */
|
||||
+9
-1
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType exact bbox computation (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2003, 2007 by */
|
||||
/* Copyright 1996-2001, 2003, 2007, 2011 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -73,6 +73,14 @@ FT_BEGIN_HEADER
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0~means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* If the font is tricky and the glyph has been loaded with */
|
||||
/* @FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get */
|
||||
/* reasonable values for the BBox it is necessary to load the glyph */
|
||||
/* at a large ppem value (so that the hinting instructions can */
|
||||
/* properly shift and scale the subglyphs), then extracting the BBox */
|
||||
/* which can be eventually converted back to font units. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Outline_Get_BBox( FT_Outline* outline,
|
||||
FT_BBox *abbox );
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType utility functions for bitmaps (specification). */
|
||||
/* */
|
||||
/* Copyright 2004, 2005, 2006, 2008 by */
|
||||
/* Copyright 2004-2006, 2008, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -135,9 +135,9 @@ FT_BEGIN_HEADER
|
||||
/* FT_Bitmap_Convert */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, or 8bpp to a */
|
||||
/* bitmap object with depth 8bpp, making the number of used bytes per */
|
||||
/* line (a.k.a. the `pitch') a multiple of `alignment'. */
|
||||
/* Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp */
|
||||
/* to a bitmap object with depth 8bpp, making the number of used */
|
||||
/* bytes line (a.k.a. the `pitch') a multiple of `alignment'. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* library :: A handle to a library object. */
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftbzip2.h */
|
||||
/* */
|
||||
/* Bzip2-compressed stream support. */
|
||||
/* */
|
||||
/* Copyright 2010 by */
|
||||
/* Joel Klinghed. */
|
||||
/* */
|
||||
/* 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 __FTBZIP2_H__
|
||||
#define __FTBZIP2_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> */
|
||||
/* bzip2 */
|
||||
/* */
|
||||
/* <Title> */
|
||||
/* BZIP2 Streams */
|
||||
/* */
|
||||
/* <Abstract> */
|
||||
/* Using bzip2-compressed font files. */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* This section contains the declaration of Bzip2-specific functions. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/************************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stream_OpenBzip2
|
||||
*
|
||||
* @description:
|
||||
* Open a new stream to parse bzip2-compressed font files. This is
|
||||
* mainly used to support the compressed `*.pcf.bz2' fonts that come
|
||||
* with XFree86.
|
||||
*
|
||||
* @input:
|
||||
* stream ::
|
||||
* The target embedding stream.
|
||||
*
|
||||
* source ::
|
||||
* The source stream.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0~means success.
|
||||
*
|
||||
* @note:
|
||||
* The source stream must be opened _before_ calling this function.
|
||||
*
|
||||
* Calling the internal function `FT_Stream_Close' on the new stream will
|
||||
* *not* call `FT_Stream_Close' on the source stream. None of the stream
|
||||
* objects will be released to the heap.
|
||||
*
|
||||
* The stream implementation is very basic and resets the decompression
|
||||
* process each time seeking backwards is needed within the stream.
|
||||
*
|
||||
* In certain builds of the library, bzip2 compression recognition is
|
||||
* automatically handled when calling @FT_New_Face or @FT_Open_Face.
|
||||
* This means that if no font driver is capable of handling the raw
|
||||
* compressed file, the library will try to open a bzip2 compressed stream
|
||||
* from it and re-open the face with it.
|
||||
*
|
||||
* This function may return `FT_Err_Unimplemented_Feature' if your build
|
||||
* of FreeType was not compiled with bzip2 support.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Stream_OpenBzip2( FT_Stream stream,
|
||||
FT_Stream source );
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __FTBZIP2_H__ */
|
||||
|
||||
|
||||
/* END */
|
||||
+3
-86
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType Cache subsystem (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 by */
|
||||
/* Copyright 1996-2008, 2010, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -214,17 +214,6 @@ FT_BEGIN_HEADER
|
||||
|
||||
/* */
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
/* these macros are incompatible with LLP64, should not be used */
|
||||
|
||||
#define FT_POINTER_TO_ULONG( p ) ( (FT_ULong)(FT_Pointer)(p) )
|
||||
|
||||
#define FTC_FACE_ID_HASH( i ) \
|
||||
((FT_UInt32)(( FT_POINTER_TO_ULONG( i ) >> 3 ) ^ \
|
||||
( FT_POINTER_TO_ULONG( i ) << 7 ) ) )
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
@@ -381,7 +370,7 @@ FT_BEGIN_HEADER
|
||||
/* should never try to discard it yourself. */
|
||||
/* */
|
||||
/* The @FT_Face object doesn't necessarily have a current size object */
|
||||
/* (i.e., face->size can be 0). If you need a specific `font size', */
|
||||
/* (i.e., face->size can be~0). If you need a specific `font size', */
|
||||
/* use @FTC_Manager_LookupSize instead. */
|
||||
/* */
|
||||
/* Never change the face's transformation matrix (i.e., never call */
|
||||
@@ -705,17 +694,6 @@ FT_BEGIN_HEADER
|
||||
(d1)->width == (d2)->width && \
|
||||
(d1)->flags == (d2)->flags )
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
/* this macro is incompatible with LLP64, should not be used */
|
||||
|
||||
#define FTC_IMAGE_TYPE_HASH( d ) \
|
||||
(FT_UFast)( FTC_FACE_ID_HASH( (d)->face_id ) ^ \
|
||||
( (d)->width << 8 ) ^ (d)->height ^ \
|
||||
( (d)->flags << 4 ) )
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
@@ -723,7 +701,7 @@ FT_BEGIN_HEADER
|
||||
/* FTC_ImageCache */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A handle to an glyph image cache object. They are designed to */
|
||||
/* A handle to a glyph image cache object. They are designed to */
|
||||
/* hold many distinct glyph images while not exceeding a certain */
|
||||
/* memory threshold. */
|
||||
/* */
|
||||
@@ -1069,67 +1047,6 @@ FT_BEGIN_HEADER
|
||||
FTC_Node *anode );
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
/*@***********************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FTC_FontRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A simple structure used to describe a given `font' to the cache */
|
||||
/* manager. Note that a `font' is the combination of a given face */
|
||||
/* with a given character size. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* face_id :: The ID of the face to use. */
|
||||
/* */
|
||||
/* pix_width :: The character width in integer pixels. */
|
||||
/* */
|
||||
/* pix_height :: The character height in integer pixels. */
|
||||
/* */
|
||||
typedef struct FTC_FontRec_
|
||||
{
|
||||
FTC_FaceID face_id;
|
||||
FT_UShort pix_width;
|
||||
FT_UShort pix_height;
|
||||
|
||||
} FTC_FontRec;
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
#define FTC_FONT_COMPARE( f1, f2 ) \
|
||||
( (f1)->face_id == (f2)->face_id && \
|
||||
(f1)->pix_width == (f2)->pix_width && \
|
||||
(f1)->pix_height == (f2)->pix_height )
|
||||
|
||||
/* this macro is incompatible with LLP64, should not be used */
|
||||
#define FTC_FONT_HASH( f ) \
|
||||
(FT_UInt32)( FTC_FACE_ID_HASH((f)->face_id) ^ \
|
||||
((f)->pix_width << 8) ^ \
|
||||
((f)->pix_height) )
|
||||
|
||||
typedef FTC_FontRec* FTC_Font;
|
||||
|
||||
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_Manager_Lookup_Face( FTC_Manager manager,
|
||||
FTC_FaceID face_id,
|
||||
FT_Face *aface );
|
||||
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_Manager_Lookup_Size( FTC_Manager manager,
|
||||
FTC_Font font,
|
||||
FT_Face *aface,
|
||||
FT_Size *asize );
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
@@ -0,0 +1,151 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftcffdrv.h */
|
||||
/* */
|
||||
/* FreeType API for controlling the CFF driver (specification only). */
|
||||
/* */
|
||||
/* Copyright 2013 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 following lists the available properties
|
||||
* together with the necessary macros and structures.
|
||||
*
|
||||
* The CFF driver's module name is `cff'.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* @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_Face face;
|
||||
* 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. 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_Face face;
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTCFFDRV_H__ */
|
||||
|
||||
|
||||
/* END */
|
||||
@@ -64,6 +64,22 @@
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* <Chapter> */
|
||||
/* module_specific */
|
||||
/* */
|
||||
/* <Title> */
|
||||
/* Controlling FreeType Modules */
|
||||
/* */
|
||||
/* <Sections> */
|
||||
/* auto_hinter */
|
||||
/* cff_driver */
|
||||
/* tt_driver */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* <Chapter> */
|
||||
@@ -98,6 +114,7 @@
|
||||
/* module_management */
|
||||
/* gzip */
|
||||
/* lzw */
|
||||
/* bzip2 */
|
||||
/* lcd_filtering */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType error codes (specification). */
|
||||
/* */
|
||||
/* Copyright 2002, 2004, 2006, 2007, 2010 by */
|
||||
/* Copyright 2002, 2004, 2006, 2007, 2010-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -54,6 +54,10 @@
|
||||
"broken offset within table" )
|
||||
FT_ERRORDEF_( Array_Too_Large, 0x0A, \
|
||||
"array allocation size too large" )
|
||||
FT_ERRORDEF_( Missing_Module, 0x0B, \
|
||||
"missing module" )
|
||||
FT_ERRORDEF_( Missing_Property, 0x0C, \
|
||||
"missing property" )
|
||||
|
||||
/* glyph/character errors */
|
||||
|
||||
@@ -213,7 +217,8 @@
|
||||
"ignore" )
|
||||
FT_ERRORDEF_( No_Unicode_Glyph_Name, 0xA3, \
|
||||
"no Unicode glyph name found" )
|
||||
|
||||
FT_ERRORDEF_( Glyph_Too_Big, 0xA4, \
|
||||
"glyph to big for hinting" )
|
||||
|
||||
/* BDF errors */
|
||||
|
||||
|
||||
+7
-15
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType error code handling (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2004, 2007 by */
|
||||
/* Copyright 1996-2002, 2004, 2007, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -28,9 +28,8 @@
|
||||
/* 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). You can then use the macro */
|
||||
/* FT_ERROR_BASE macro to extract the generic error code from an */
|
||||
/* FT_Error value. */
|
||||
/* with standard builds of FreeType 2). See the file `ftmoderr.h' for */
|
||||
/* more details. */
|
||||
/* */
|
||||
/* */
|
||||
/* II - Error Message strings */
|
||||
@@ -101,12 +100,6 @@
|
||||
|
||||
#undef FT_NEED_EXTERN_C
|
||||
|
||||
#undef FT_ERR_XCAT
|
||||
#undef FT_ERR_CAT
|
||||
|
||||
#define FT_ERR_XCAT( x, y ) x ## y
|
||||
#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
|
||||
|
||||
|
||||
/* FT_ERR_PREFIX is used as a prefix for error identifiers. */
|
||||
/* By default, we use `FT_Err_'. */
|
||||
@@ -150,11 +143,11 @@
|
||||
|
||||
|
||||
/* this macro is used to define an error */
|
||||
#define FT_ERRORDEF_( e, v, s ) \
|
||||
#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 ) \
|
||||
#define FT_NOERRORDEF_( e, v, s ) \
|
||||
FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s )
|
||||
|
||||
|
||||
@@ -192,11 +185,10 @@
|
||||
#undef FT_NOERRORDEF_
|
||||
|
||||
#undef FT_NEED_EXTERN_C
|
||||
#undef FT_ERR_CONCAT
|
||||
#undef FT_ERR_BASE
|
||||
|
||||
/* FT_KEEP_ERR_PREFIX is needed for ftvalid.h */
|
||||
#ifndef FT_KEEP_ERR_PREFIX
|
||||
/* FT_ERR_PREFIX is needed internally */
|
||||
#ifndef FT2_BUILD_LIBRARY
|
||||
#undef FT_ERR_PREFIX
|
||||
#endif
|
||||
|
||||
|
||||
+11
-3
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Access of TrueType's `gasp' table (specification). */
|
||||
/* */
|
||||
/* Copyright 2007, 2008 by */
|
||||
/* Copyright 2007, 2008, 2011 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -63,18 +63,26 @@
|
||||
*
|
||||
* FT_GASP_DO_GRIDFIT ::
|
||||
* Grid-fitting and hinting should be performed at the specified ppem.
|
||||
* This *really* means TrueType bytecode interpretation.
|
||||
* This *really* means TrueType bytecode interpretation. If this bit
|
||||
* is not set, no hinting gets applied.
|
||||
*
|
||||
* FT_GASP_DO_GRAY ::
|
||||
* Anti-aliased rendering should be performed at the specified ppem.
|
||||
* If not set, do monochrome rendering.
|
||||
*
|
||||
* FT_GASP_SYMMETRIC_SMOOTHING ::
|
||||
* Smoothing along multiple axes must be used with ClearType.
|
||||
* If set, smoothing along multiple axes must be used with ClearType.
|
||||
*
|
||||
* FT_GASP_SYMMETRIC_GRIDFIT ::
|
||||
* Grid-fitting must be used with ClearType's symmetric smoothing.
|
||||
*
|
||||
* @note:
|
||||
* The bit-flags `FT_GASP_DO_GRIDFIT' and `FT_GASP_DO_GRAY' are to be
|
||||
* used for standard font rasterization only. Independently of that,
|
||||
* `FT_GASP_SYMMETRIC_SMOOTHING' and `FT_GASP_SYMMETRIC_GRIDFIT' are to
|
||||
* be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT' and
|
||||
* `FT_GASP_DO_GRAY' are consequently ignored).
|
||||
*
|
||||
* `ClearType' is Microsoft's implementation of LCD rendering, partly
|
||||
* protected by patents.
|
||||
*
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType convenience functions to handle glyphs (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2006, 2008, 2009 by */
|
||||
/* Copyright 1996-2003, 2006, 2008, 2009, 2011 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -94,7 +94,7 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* The root glyph structure contains a given glyph image plus its */
|
||||
/* advance width in 16.16 fixed float format. */
|
||||
/* advance width in 16.16 fixed-point format. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* library :: A handle to the FreeType library object. */
|
||||
@@ -384,6 +384,13 @@ FT_BEGIN_HEADER
|
||||
/* units in 26.6 pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS */
|
||||
/* is another name for this constant. */
|
||||
/* */
|
||||
/* If the font is tricky and the glyph has been loaded with */
|
||||
/* @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get */
|
||||
/* reasonable values for the CBox it is necessary to load the glyph */
|
||||
/* at a large ppem value (so that the hinting instructions can */
|
||||
/* properly shift and scale the subglyphs), then extracting the CBox */
|
||||
/* which can be eventually converted back to font units. */
|
||||
/* */
|
||||
/* Note that the maximum coordinates are exclusive, which means that */
|
||||
/* one can compute the width and height of the glyph image (be it in */
|
||||
/* integer or 26.6 pixels) as: */
|
||||
|
||||
+12
-3
@@ -5,8 +5,7 @@
|
||||
/* FreeType glyph image formats and default raster interface */
|
||||
/* (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, */
|
||||
/* 2010 by */
|
||||
/* Copyright 1996-2010, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -54,7 +53,7 @@ FT_BEGIN_HEADER
|
||||
/* <Description> */
|
||||
/* The type FT_Pos is used to store vectorial coordinates. Depending */
|
||||
/* on the context, these can represent distances in integer font */
|
||||
/* units, or 16.16, or 26.6 fixed float pixel coordinates. */
|
||||
/* units, or 16.16, or 26.6 fixed-point pixel coordinates. */
|
||||
/* */
|
||||
typedef signed long FT_Pos;
|
||||
|
||||
@@ -169,6 +168,15 @@ FT_BEGIN_HEADER
|
||||
/* times taller than the original glyph image. See also */
|
||||
/* @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. */
|
||||
/* */
|
||||
typedef enum FT_Pixel_Mode_
|
||||
{
|
||||
FT_PIXEL_MODE_NONE = 0,
|
||||
@@ -178,6 +186,7 @@ FT_BEGIN_HEADER
|
||||
FT_PIXEL_MODE_GRAY4,
|
||||
FT_PIXEL_MODE_LCD,
|
||||
FT_PIXEL_MODE_LCD_V,
|
||||
FT_PIXEL_MODE_BGRA,
|
||||
|
||||
FT_PIXEL_MODE_MAX /* do not remove */
|
||||
|
||||
|
||||
@@ -53,6 +53,44 @@ FT_BEGIN_HEADER
|
||||
* *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.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
+163
-5
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType modules public interface (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2006, 2008, 2009, 2010 by */
|
||||
/* Copyright 1996-2003, 2006, 2008-2010, 2012, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -42,11 +42,38 @@ FT_BEGIN_HEADER
|
||||
/* Module Management */
|
||||
/* */
|
||||
/* <Abstract> */
|
||||
/* How to add, upgrade, and remove modules from FreeType. */
|
||||
/* How to add, upgrade, remove, and control modules from FreeType. */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* The definitions below are used to manage modules within FreeType. */
|
||||
/* Modules can be added, upgraded, and removed at runtime. */
|
||||
/* Additionally, some module properties can be controlled also. */
|
||||
/* */
|
||||
/* Here is a list of possible values of the `module_name' field in */
|
||||
/* the @FT_Module_Class structure. */
|
||||
/* */
|
||||
/* { */
|
||||
/* autofitter */
|
||||
/* bdf */
|
||||
/* cff */
|
||||
/* gxvalid */
|
||||
/* otvalid */
|
||||
/* pcf */
|
||||
/* pfr */
|
||||
/* psaux */
|
||||
/* pshinter */
|
||||
/* psnames */
|
||||
/* raster1, raster5 */
|
||||
/* sfnt */
|
||||
/* smooth, smooth-lcd, smooth-lcdv */
|
||||
/* truetype */
|
||||
/* type1 */
|
||||
/* type42 */
|
||||
/* t1cid */
|
||||
/* winfonts */
|
||||
/* } */
|
||||
/* */
|
||||
/* Note that the FreeType Cache sub-system is not a FreeType module. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
@@ -118,7 +145,7 @@ FT_BEGIN_HEADER
|
||||
/* A function used to query a given module for a specific interface. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* module :: The module to finalize. */
|
||||
/* module :: The module to be searched. */
|
||||
/* */
|
||||
/* name :: The name of the interface in the module. */
|
||||
/* */
|
||||
@@ -249,6 +276,137 @@ FT_BEGIN_HEADER
|
||||
FT_Module module );
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Property_Set
|
||||
*
|
||||
* @description:
|
||||
* Set a property for a given module.
|
||||
*
|
||||
* @input:
|
||||
* library ::
|
||||
* A handle to the library the module is part of.
|
||||
*
|
||||
* module_name ::
|
||||
* The module name.
|
||||
*
|
||||
* property_name ::
|
||||
* The property name. Properties are described in the `Synopsis'
|
||||
* subsection of the module's documentation.
|
||||
*
|
||||
* Note that only a few modules have properties.
|
||||
*
|
||||
* value ::
|
||||
* A generic pointer to a variable or structure which 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.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0~means success.
|
||||
*
|
||||
* @note:
|
||||
* If `module_name' isn't a valid module name, or `property_name'
|
||||
* doesn't specify a valid property, or if `value' doesn't represent a
|
||||
* valid value for the given property, an error is returned.
|
||||
*
|
||||
* The following example sets property `bar' (a simple integer) in
|
||||
* module `foo' to value~1.
|
||||
*
|
||||
* {
|
||||
* FT_UInt bar;
|
||||
*
|
||||
*
|
||||
* bar = 1;
|
||||
* FT_Property_Set( library, "foo", "bar", &bar );
|
||||
* }
|
||||
*
|
||||
* Note that the FreeType Cache sub-system doesn't recognize module
|
||||
* property changes. To avoid glyph lookup confusion within the cache
|
||||
* you should call @FTC_Manager_Reset to completely flush the cache if
|
||||
* a module property gets changed after @FTC_Manager_New has been
|
||||
* called.
|
||||
*
|
||||
* It is not possible to set properties of the FreeType Cache
|
||||
* sub-system itself with FT_Property_Set; use @FTC_Property_Set
|
||||
* instead.
|
||||
*
|
||||
* @since:
|
||||
* 2.4.11
|
||||
*
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Property_Set( FT_Library library,
|
||||
const FT_String* module_name,
|
||||
const FT_String* property_name,
|
||||
const void* value );
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Property_Get
|
||||
*
|
||||
* @description:
|
||||
* Get a module's property value.
|
||||
*
|
||||
* @input:
|
||||
* library ::
|
||||
* A handle to the library the module is part of.
|
||||
*
|
||||
* module_name ::
|
||||
* The module name.
|
||||
*
|
||||
* property_name ::
|
||||
* The property name. Properties are described in the `Synopsis'
|
||||
* subsection of the module's documentation.
|
||||
*
|
||||
* @inout:
|
||||
* value ::
|
||||
* A generic pointer to a variable or structure which 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.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0~means success.
|
||||
*
|
||||
* @note:
|
||||
* If `module_name' isn't a valid module name, or `property_name'
|
||||
* doesn't specify a valid property, or if `value' doesn't represent a
|
||||
* valid value for the given property, an error is returned.
|
||||
*
|
||||
* The following example gets property `baz' (a range) in module `foo'.
|
||||
*
|
||||
* {
|
||||
* typedef range_
|
||||
* {
|
||||
* FT_Int32 min;
|
||||
* FT_Int32 max;
|
||||
*
|
||||
* } range;
|
||||
*
|
||||
* range baz;
|
||||
*
|
||||
*
|
||||
* FT_Property_Get( library, "foo", "baz", &baz );
|
||||
* }
|
||||
*
|
||||
* It is not possible to retrieve properties of the FreeType Cache
|
||||
* sub-system with FT_Property_Get; use @FTC_Property_Get instead.
|
||||
*
|
||||
* @since:
|
||||
* 2.4.11
|
||||
*
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Property_Get( FT_Library library,
|
||||
const FT_String* module_name,
|
||||
const FT_String* property_name,
|
||||
void* value );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
@@ -430,13 +588,13 @@ FT_BEGIN_HEADER
|
||||
* scale glyph components with bytecode instructions. It produces
|
||||
* bad output for most other fonts.
|
||||
*
|
||||
* FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
|
||||
* FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
|
||||
* The library implements a bytecode interpreter that covers
|
||||
* the full instruction set of the TrueType virtual machine (this
|
||||
* was governed by patents until May 2010, hence the name).
|
||||
*
|
||||
* @since:
|
||||
* 2.2
|
||||
* 2.2
|
||||
*
|
||||
*/
|
||||
typedef enum FT_TrueTypeEngineType_
|
||||
|
||||
+70
-31
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType module error offsets (specification). */
|
||||
/* */
|
||||
/* Copyright 2001, 2002, 2003, 2004, 2005 by */
|
||||
/* Copyright 2001-2005, 2010, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -18,17 +18,57 @@
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* This file is used to define the FreeType module error offsets. */
|
||||
/* This file is used to define the FreeType module error codes. */
|
||||
/* */
|
||||
/* The lower byte gives the error code, the higher byte gives the */
|
||||
/* module. The base module has error offset 0. For example, the error */
|
||||
/* `FT_Err_Invalid_File_Format' has value 0x003, the error */
|
||||
/* `TT_Err_Invalid_File_Format' has value 0x1103, the error */
|
||||
/* `T1_Err_Invalid_File_Format' has value 0x1203, etc. */
|
||||
/* If the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in `ftoption.h' is */
|
||||
/* set, the lower byte of an error value identifies the error code as */
|
||||
/* usual. In addition, the higher byte identifies the module. For */
|
||||
/* example, the error `FT_Err_Invalid_File_Format' has value 0x0003, the */
|
||||
/* error `TT_Err_Invalid_File_Format' has value 0x1303, the error */
|
||||
/* `T1_Err_Invalid_File_Format' has value 0x1403, etc. */
|
||||
/* */
|
||||
/* Note that `FT_Err_Ok', `TT_Err_Ok', etc. are always equal to zero, */
|
||||
/* including the high byte. */
|
||||
/* */
|
||||
/* If FT_CONFIG_OPTION_USE_MODULE_ERRORS isn't set, the higher byte of */
|
||||
/* an error value is set to zero. */
|
||||
/* */
|
||||
/* To hide the various `XXX_Err_' prefixes in the source code, FreeType */
|
||||
/* provides some macros in `fttypes.h'. */
|
||||
/* */
|
||||
/* FT_ERR( err ) */
|
||||
/* Add current error module prefix (as defined with the */
|
||||
/* `FT_ERR_PREFIX' macro) to `err'. For example, in the BDF module */
|
||||
/* the line */
|
||||
/* */
|
||||
/* error = FT_ERR( Invalid_Outline ); */
|
||||
/* */
|
||||
/* expands to */
|
||||
/* */
|
||||
/* error = BDF_Err_Invalid_Outline; */
|
||||
/* */
|
||||
/* For simplicity, you can always use `FT_Err_Ok' directly instead */
|
||||
/* of `FT_ERR( Ok )'. */
|
||||
/* */
|
||||
/* FT_ERR_EQ( errcode, err ) */
|
||||
/* FT_ERR_NEQ( errcode, err ) */
|
||||
/* Compare error code `errcode' with the error `err' for equality */
|
||||
/* and inequality, respectively. Example: */
|
||||
/* */
|
||||
/* if ( FT_ERR_EQ( error, Invalid_Outline ) ) */
|
||||
/* ... */
|
||||
/* */
|
||||
/* Using this macro you don't have to think about error prefixes. */
|
||||
/* Of course, if module errors are not active, the above example is */
|
||||
/* the same as */
|
||||
/* */
|
||||
/* if ( error == FT_Err_Invalid_Outline ) */
|
||||
/* ... */
|
||||
/* */
|
||||
/* FT_ERROR_BASE( errcode ) */
|
||||
/* FT_ERROR_MODULE( errcode ) */
|
||||
/* Get base error and module error code, respectively. */
|
||||
/* */
|
||||
/* Undefine the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in ftoption.h */
|
||||
/* to make the higher byte always zero (disabling the module error */
|
||||
/* mechanism). */
|
||||
/* */
|
||||
/* It can also be used to create a module error message table easily */
|
||||
/* with something like */
|
||||
@@ -48,9 +88,6 @@
|
||||
/* #include FT_MODULE_ERRORS_H */
|
||||
/* } */
|
||||
/* */
|
||||
/* To use such a table, all errors must be ANDed with 0xFF00 to remove */
|
||||
/* the error code. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
@@ -105,24 +142,26 @@
|
||||
FT_MODERRDEF( Base, 0x000, "base module" )
|
||||
FT_MODERRDEF( Autofit, 0x100, "autofitter module" )
|
||||
FT_MODERRDEF( BDF, 0x200, "BDF module" )
|
||||
FT_MODERRDEF( Cache, 0x300, "cache module" )
|
||||
FT_MODERRDEF( CFF, 0x400, "CFF module" )
|
||||
FT_MODERRDEF( CID, 0x500, "CID module" )
|
||||
FT_MODERRDEF( Gzip, 0x600, "Gzip module" )
|
||||
FT_MODERRDEF( LZW, 0x700, "LZW module" )
|
||||
FT_MODERRDEF( OTvalid, 0x800, "OpenType validation module" )
|
||||
FT_MODERRDEF( PCF, 0x900, "PCF module" )
|
||||
FT_MODERRDEF( PFR, 0xA00, "PFR module" )
|
||||
FT_MODERRDEF( PSaux, 0xB00, "PS auxiliary module" )
|
||||
FT_MODERRDEF( PShinter, 0xC00, "PS hinter module" )
|
||||
FT_MODERRDEF( PSnames, 0xD00, "PS names module" )
|
||||
FT_MODERRDEF( Raster, 0xE00, "raster module" )
|
||||
FT_MODERRDEF( SFNT, 0xF00, "SFNT module" )
|
||||
FT_MODERRDEF( Smooth, 0x1000, "smooth raster module" )
|
||||
FT_MODERRDEF( TrueType, 0x1100, "TrueType module" )
|
||||
FT_MODERRDEF( Type1, 0x1200, "Type 1 module" )
|
||||
FT_MODERRDEF( Type42, 0x1300, "Type 42 module" )
|
||||
FT_MODERRDEF( Winfonts, 0x1400, "Windows FON/FNT module" )
|
||||
FT_MODERRDEF( Bzip2, 0x300, "Bzip2 module" )
|
||||
FT_MODERRDEF( Cache, 0x400, "cache module" )
|
||||
FT_MODERRDEF( CFF, 0x500, "CFF module" )
|
||||
FT_MODERRDEF( CID, 0x600, "CID module" )
|
||||
FT_MODERRDEF( Gzip, 0x700, "Gzip module" )
|
||||
FT_MODERRDEF( LZW, 0x800, "LZW module" )
|
||||
FT_MODERRDEF( OTvalid, 0x900, "OpenType validation module" )
|
||||
FT_MODERRDEF( PCF, 0xA00, "PCF module" )
|
||||
FT_MODERRDEF( PFR, 0xB00, "PFR module" )
|
||||
FT_MODERRDEF( PSaux, 0xC00, "PS auxiliary module" )
|
||||
FT_MODERRDEF( PShinter, 0xD00, "PS hinter module" )
|
||||
FT_MODERRDEF( PSnames, 0xE00, "PS names module" )
|
||||
FT_MODERRDEF( Raster, 0xF00, "raster module" )
|
||||
FT_MODERRDEF( SFNT, 0x1000, "SFNT module" )
|
||||
FT_MODERRDEF( Smooth, 0x1100, "smooth raster module" )
|
||||
FT_MODERRDEF( TrueType, 0x1200, "TrueType module" )
|
||||
FT_MODERRDEF( Type1, 0x1300, "Type 1 module" )
|
||||
FT_MODERRDEF( Type42, 0x1400, "Type 42 module" )
|
||||
FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" )
|
||||
FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" )
|
||||
|
||||
|
||||
#ifdef FT_MODERR_END_LIST
|
||||
|
||||
+27
-4
@@ -5,7 +5,7 @@
|
||||
/* Support for the FT_Outline type used to store glyph shapes of */
|
||||
/* most scalable font formats (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 by */
|
||||
/* Copyright 1996-2003, 2005-2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -59,6 +59,7 @@ FT_BEGIN_HEADER
|
||||
/* FT_Outline_Translate */
|
||||
/* FT_Outline_Transform */
|
||||
/* FT_Outline_Embolden */
|
||||
/* FT_Outline_EmboldenXY */
|
||||
/* FT_Outline_Reverse */
|
||||
/* FT_Outline_Check */
|
||||
/* */
|
||||
@@ -124,9 +125,11 @@ FT_BEGIN_HEADER
|
||||
/* outline will *not* necessarily be *freed*, when */
|
||||
/* destroying the library, by @FT_Done_FreeType. */
|
||||
/* */
|
||||
/* numPoints :: The maximal number of points within the outline. */
|
||||
/* numPoints :: The maximum number of points within the outline. */
|
||||
/* Must be smaller than or equal to 0xFFFF (65535). */
|
||||
/* */
|
||||
/* numContours :: The maximal number of contours within the outline. */
|
||||
/* numContours :: The maximum number of contours within the outline. */
|
||||
/* This value must be in the range 0 to `numPoints'. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* anoutline :: A handle to the new outline. */
|
||||
@@ -227,6 +230,9 @@ FT_BEGIN_HEADER
|
||||
/* <Output> */
|
||||
/* acbox :: The outline's control box. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* See @FT_Glyph_Get_CBox for a discussion of tricky fonts. */
|
||||
/* */
|
||||
FT_EXPORT( void )
|
||||
FT_Outline_Get_CBox( const FT_Outline* outline,
|
||||
FT_BBox *acbox );
|
||||
@@ -332,7 +338,7 @@ FT_BEGIN_HEADER
|
||||
/* handled incorrectly. */
|
||||
/* */
|
||||
/* If you need `better' metrics values you should call */
|
||||
/* @FT_Outline_Get_CBox ot @FT_Outline_Get_BBox. */
|
||||
/* @FT_Outline_Get_CBox or @FT_Outline_Get_BBox. */
|
||||
/* */
|
||||
/* Example call: */
|
||||
/* */
|
||||
@@ -347,6 +353,23 @@ FT_BEGIN_HEADER
|
||||
FT_Pos strength );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Outline_EmboldenXY */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Embolden an outline. The new outline will be `xstrength' pixels */
|
||||
/* wider and `ystrength' pixels higher. Otherwise, it is similar to */
|
||||
/* @FT_Outline_Embolden, which uses the same strength in both */
|
||||
/* directions. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Outline_EmboldenXY( FT_Outline* outline,
|
||||
FT_Pos xstrength,
|
||||
FT_Pos ystrength );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
|
||||
@@ -212,6 +212,14 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* This doesn't change the current renderer for other formats. */
|
||||
/* */
|
||||
/* Currently, only the B/W renderer, if compiled with */
|
||||
/* FT_RASTER_OPTION_ANTI_ALIASING (providing a 5-levels */
|
||||
/* anti-aliasing mode; this option must be set directly in */
|
||||
/* `ftraster.c' and is undefined by default) accepts a single tag */
|
||||
/* `pal5' to set its gray palette as a character string with */
|
||||
/* 5~elements. Consequently, the third and fourth argument are zero */
|
||||
/* normally. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Set_Renderer( FT_Library library,
|
||||
FT_Renderer renderer,
|
||||
|
||||
+47
-12
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType path stroker (specification). */
|
||||
/* */
|
||||
/* Copyright 2002, 2003, 2004, 2005, 2006, 2008, 2009 by */
|
||||
/* Copyright 2002-2006, 2008, 2009, 2011-2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -75,20 +75,44 @@ FT_BEGIN_HEADER
|
||||
* to join two lines smoothly.
|
||||
*
|
||||
* FT_STROKER_LINEJOIN_BEVEL ::
|
||||
* Used to render beveled line joins; i.e., the two joining lines
|
||||
* are extended until they intersect.
|
||||
* Used to render beveled line joins. The outer corner of
|
||||
* the joined lines is filled by enclosing the triangular
|
||||
* region of the corner with a straight line between the
|
||||
* outer corners of each stroke.
|
||||
*
|
||||
* FT_STROKER_LINEJOIN_MITER_FIXED ::
|
||||
* Used to render mitered line joins, with fixed bevels if the
|
||||
* miter limit is exceeded. The outer edges of the strokes
|
||||
* for the two segments are extended until they meet at an
|
||||
* angle. If the segments meet at too sharp an angle (such
|
||||
* that the miter would extend from the intersection of the
|
||||
* segments a distance greater than the product of the miter
|
||||
* limit value and the border radius), then a bevel join (see
|
||||
* above) is used instead. This prevents long spikes being
|
||||
* created. FT_STROKER_LINEJOIN_MITER_FIXED generates a miter
|
||||
* line join as used in PostScript and PDF.
|
||||
*
|
||||
* FT_STROKER_LINEJOIN_MITER_VARIABLE ::
|
||||
* FT_STROKER_LINEJOIN_MITER ::
|
||||
* Same as beveled rendering, except that an additional line
|
||||
* break is added if the angle between the two joining lines
|
||||
* is too closed (this is useful to avoid unpleasant spikes
|
||||
* in beveled rendering).
|
||||
* Used to render mitered line joins, with variable bevels if
|
||||
* the miter limit is exceeded. The intersection of the
|
||||
* strokes is clipped at a line perpendicular to the bisector
|
||||
* of the angle between the strokes, at the distance from the
|
||||
* intersection of the segments equal to the product of the
|
||||
* miter limit value and the border radius. This prevents
|
||||
* long spikes being created.
|
||||
* 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.
|
||||
*/
|
||||
typedef enum FT_Stroker_LineJoin_
|
||||
{
|
||||
FT_STROKER_LINEJOIN_ROUND = 0,
|
||||
FT_STROKER_LINEJOIN_BEVEL,
|
||||
FT_STROKER_LINEJOIN_MITER
|
||||
FT_STROKER_LINEJOIN_ROUND = 0,
|
||||
FT_STROKER_LINEJOIN_BEVEL = 1,
|
||||
FT_STROKER_LINEJOIN_MITER_VARIABLE = 2,
|
||||
FT_STROKER_LINEJOIN_MITER = FT_STROKER_LINEJOIN_MITER_VARIABLE,
|
||||
FT_STROKER_LINEJOIN_MITER_FIXED = 3
|
||||
|
||||
} FT_Stroker_LineJoin;
|
||||
|
||||
@@ -245,8 +269,9 @@ FT_BEGIN_HEADER
|
||||
* The line join style.
|
||||
*
|
||||
* miter_limit ::
|
||||
* The miter limit for the FT_STROKER_LINEJOIN_MITER style,
|
||||
* expressed as 16.16 fixed point value.
|
||||
* The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and
|
||||
* FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles,
|
||||
* expressed as 16.16 fixed-point value.
|
||||
*
|
||||
* @note:
|
||||
* The radius is expressed in the same units as the outline
|
||||
@@ -657,6 +682,11 @@ FT_BEGIN_HEADER
|
||||
*
|
||||
* @note:
|
||||
* The source glyph is untouched in case of error.
|
||||
*
|
||||
* Adding stroke may yield a significantly wider and taller glyph
|
||||
* depending on how large of a radius was used to stroke the glyph. You
|
||||
* may need to manually adjust horizontal and vertical advance amounts
|
||||
* to account for this added size.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Glyph_Stroke( FT_Glyph *pglyph,
|
||||
@@ -694,6 +724,11 @@ FT_BEGIN_HEADER
|
||||
*
|
||||
* @note:
|
||||
* The source glyph is untouched in case of error.
|
||||
*
|
||||
* Adding stroke may yield a significantly wider and taller glyph
|
||||
* depending on how large of a radius was used to stroke the glyph. You
|
||||
* may need to manually adjust horizontal and vertical advance amounts
|
||||
* to account for this added size.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Glyph_StrokeBorder( FT_Glyph *pglyph,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/* FreeType synthesizing code for emboldening and slanting */
|
||||
/* (specification). */
|
||||
/* */
|
||||
/* Copyright 2000-2001, 2003, 2006, 2008 by */
|
||||
/* Copyright 2000-2001, 2003, 2006, 2008, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -61,8 +61,9 @@ FT_BEGIN_HEADER
|
||||
/* taste). This function is actually a convenience function, providing */
|
||||
/* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden. */
|
||||
/* */
|
||||
/* For emboldened outlines the metrics are estimates only; if you need */
|
||||
/* precise values you should call @FT_Outline_Get_CBox. */
|
||||
/* For emboldened outlines the height, width, and advance metrics are */
|
||||
/* increased by the strength of the emboldening. You can also call */
|
||||
/* @FT_Outline_Get_CBox to get precise values. */
|
||||
FT_EXPORT( void )
|
||||
FT_GlyphSlot_Embolden( FT_GlyphSlot slot );
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType trigonometric functions (specification). */
|
||||
/* */
|
||||
/* Copyright 2001, 2003, 2005, 2007 by */
|
||||
/* Copyright 2001, 2003, 2005, 2007, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -46,7 +46,7 @@ FT_BEGIN_HEADER
|
||||
*
|
||||
* @description:
|
||||
* This type is used to model angle values in FreeType. Note that the
|
||||
* angle is a 16.16 fixed float value expressed in degrees.
|
||||
* angle is a 16.16 fixed-point value expressed in degrees.
|
||||
*
|
||||
*/
|
||||
typedef FT_Fixed FT_Angle;
|
||||
@@ -106,7 +106,7 @@ FT_BEGIN_HEADER
|
||||
* FT_Sin
|
||||
*
|
||||
* @description:
|
||||
* Return the sinus of a given angle in fixed point format.
|
||||
* Return the sinus of a given angle in fixed-point format.
|
||||
*
|
||||
* @input:
|
||||
* angle ::
|
||||
@@ -130,7 +130,7 @@ FT_BEGIN_HEADER
|
||||
* FT_Cos
|
||||
*
|
||||
* @description:
|
||||
* Return the cosinus of a given angle in fixed point format.
|
||||
* Return the cosinus of a given angle in fixed-point format.
|
||||
*
|
||||
* @input:
|
||||
* angle ::
|
||||
@@ -154,7 +154,7 @@ FT_BEGIN_HEADER
|
||||
* FT_Tan
|
||||
*
|
||||
* @description:
|
||||
* Return the tangent of a given angle in fixed point format.
|
||||
* Return the tangent of a given angle in fixed-point format.
|
||||
*
|
||||
* @input:
|
||||
* angle ::
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftttdrv.h */
|
||||
/* */
|
||||
/* FreeType API for controlling the TrueType driver */
|
||||
/* (specification only). */
|
||||
/* */
|
||||
/* Copyright 2013 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 which represent 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. 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.
|
||||
*
|
||||
*/
|
||||
#define TT_INTERPRETER_VERSION_35 35
|
||||
#define TT_INTERPRETER_VERSION_38 38
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTTTDRV_H__ */
|
||||
|
||||
|
||||
/* END */
|
||||
+20
-10
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType simple types definitions (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2004, 2006, 2007, 2008 by */
|
||||
/* Copyright 1996-2002, 2004, 2006-2009, 2012, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -255,7 +255,7 @@ FT_BEGIN_HEADER
|
||||
/* FT_F2Dot14 */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A signed 2.14 fixed float type used for unit vectors. */
|
||||
/* A signed 2.14 fixed-point type used for unit vectors. */
|
||||
/* */
|
||||
typedef signed short FT_F2Dot14;
|
||||
|
||||
@@ -266,7 +266,7 @@ FT_BEGIN_HEADER
|
||||
/* FT_F26Dot6 */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A signed 26.6 fixed float type used for vectorial pixel */
|
||||
/* A signed 26.6 fixed-point type used for vectorial pixel */
|
||||
/* coordinates. */
|
||||
/* */
|
||||
typedef signed long FT_F26Dot6;
|
||||
@@ -278,7 +278,7 @@ FT_BEGIN_HEADER
|
||||
/* FT_Fixed */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* This type is used to store 16.16 fixed float values, like scaling */
|
||||
/* This type is used to store 16.16 fixed-point values, like scaling */
|
||||
/* values or matrix coefficients. */
|
||||
/* */
|
||||
typedef signed long FT_Fixed;
|
||||
@@ -362,7 +362,7 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A simple structure used to store a 2x2 matrix. Coefficients are */
|
||||
/* in 16.16 fixed float format. The computation performed is: */
|
||||
/* in 16.16 fixed-point format. The computation performed is: */
|
||||
/* */
|
||||
/* { */
|
||||
/* x' = x*xx + y*xy */
|
||||
@@ -434,7 +434,7 @@ FT_BEGIN_HEADER
|
||||
/* variety of FreeType core objects. For example, a text layout API */
|
||||
/* might want to associate a glyph cache to a given size object. */
|
||||
/* */
|
||||
/* Most FreeType object contains a `generic' field, of type */
|
||||
/* Some FreeType object contains a `generic' field, of type */
|
||||
/* FT_Generic, which usage is left to client applications and font */
|
||||
/* servers. */
|
||||
/* */
|
||||
@@ -571,14 +571,24 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
|
||||
#define FT_IS_EMPTY( list ) ( (list).head == 0 )
|
||||
#define FT_BOOL( x ) ( (FT_Bool)( x ) )
|
||||
|
||||
/* concatenate C tokens */
|
||||
#define FT_ERR_XCAT( x, y ) x ## y
|
||||
#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
|
||||
|
||||
/* see `ftmoderr.h' for descriptions of the following macros */
|
||||
|
||||
#define FT_ERR( e ) FT_ERR_CAT( FT_ERR_PREFIX, e )
|
||||
|
||||
/* return base error code (without module-specific prefix) */
|
||||
#define FT_ERROR_BASE( x ) ( (x) & 0xFF )
|
||||
|
||||
/* return module error code */
|
||||
#define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U )
|
||||
|
||||
#define FT_BOOL( x ) ( (FT_Bool)( x ) )
|
||||
#define FT_ERR_EQ( x, e ) \
|
||||
( FT_ERROR_BASE( x ) == FT_ERROR_BASE( FT_ERR( e ) ) )
|
||||
#define FT_ERR_NEQ( x, e ) \
|
||||
( FT_ERROR_BASE( x ) != FT_ERROR_BASE( FT_ERR( e ) ) )
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* High-level `autohint' module-specific interface (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2007 by */
|
||||
/* Copyright 1996-2002, 2007, 2009, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -86,20 +86,20 @@ FT_BEGIN_HEADER
|
||||
/* FT_AutoHinter_GlobalGetFunc */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Retrieves the global hints computed for a given face object the */
|
||||
/* Retrieve the global hints computed for a given face object. The */
|
||||
/* resulting data is dissociated from the face and will survive a */
|
||||
/* call to FT_Done_Face(). It must be discarded through the API */
|
||||
/* FT_AutoHinter_GlobalDoneFunc(). */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* hinter :: A handle to the source auto-hinter. */
|
||||
/* hinter :: A handle to the source auto-hinter. */
|
||||
/* */
|
||||
/* face :: A handle to the source face object. */
|
||||
/* face :: A handle to the source face object. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* global_hints :: A typeless pointer to the global hints. */
|
||||
/* global_hints :: A typeless pointer to the global hints. */
|
||||
/* */
|
||||
/* global_len :: The size in bytes of the global hints. */
|
||||
/* global_len :: The size in bytes of the global hints. */
|
||||
/* */
|
||||
typedef void
|
||||
(*FT_AutoHinter_GlobalGetFunc)( FT_AutoHinter hinter,
|
||||
@@ -114,7 +114,7 @@ FT_BEGIN_HEADER
|
||||
/* FT_AutoHinter_GlobalDoneFunc */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Discards the global hints retrieved through */
|
||||
/* Discard the global hints retrieved through */
|
||||
/* FT_AutoHinter_GlobalGetFunc(). This is the only way these hints */
|
||||
/* are freed from memory. */
|
||||
/* */
|
||||
@@ -168,8 +168,8 @@ FT_BEGIN_HEADER
|
||||
/* This function is capable of loading composite glyphs by hinting */
|
||||
/* each sub-glyph independently (which improves quality). */
|
||||
/* */
|
||||
/* It will call the font driver with FT_Load_Glyph(), with */
|
||||
/* FT_LOAD_NO_SCALE set. */
|
||||
/* It will call the font driver with @FT_Load_Glyph, with */
|
||||
/* @FT_LOAD_NO_SCALE set. */
|
||||
/* */
|
||||
typedef FT_Error
|
||||
(*FT_AutoHinter_GlyphLoadFunc)( FT_AutoHinter hinter,
|
||||
@@ -182,46 +182,59 @@ FT_BEGIN_HEADER
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FT_AutoHinter_ServiceRec */
|
||||
/* FT_AutoHinter_InterfaceRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* The auto-hinter module's interface. */
|
||||
/* */
|
||||
typedef struct FT_AutoHinter_ServiceRec_
|
||||
typedef struct FT_AutoHinter_InterfaceRec_
|
||||
{
|
||||
FT_AutoHinter_GlobalResetFunc reset_face;
|
||||
FT_AutoHinter_GlobalGetFunc get_global_hints;
|
||||
FT_AutoHinter_GlobalDoneFunc done_global_hints;
|
||||
FT_AutoHinter_GlyphLoadFunc load_glyph;
|
||||
|
||||
} FT_AutoHinter_ServiceRec, *FT_AutoHinter_Service;
|
||||
} FT_AutoHinter_InterfaceRec, *FT_AutoHinter_Interface;
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_AUTOHINTER_SERVICE(class_, reset_face_, get_global_hints_, \
|
||||
done_global_hints_, load_glyph_) \
|
||||
FT_CALLBACK_TABLE_DEF \
|
||||
const FT_AutoHinter_ServiceRec class_ = \
|
||||
{ \
|
||||
reset_face_, get_global_hints_, done_global_hints_, load_glyph_ \
|
||||
#define FT_DEFINE_AUTOHINTER_INTERFACE( \
|
||||
class_, \
|
||||
reset_face_, \
|
||||
get_global_hints_, \
|
||||
done_global_hints_, \
|
||||
load_glyph_ ) \
|
||||
FT_CALLBACK_TABLE_DEF \
|
||||
const FT_AutoHinter_InterfaceRec class_ = \
|
||||
{ \
|
||||
reset_face_, \
|
||||
get_global_hints_, \
|
||||
done_global_hints_, \
|
||||
load_glyph_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_AUTOHINTER_SERVICE(class_, reset_face_, get_global_hints_, \
|
||||
done_global_hints_, load_glyph_) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Library library, \
|
||||
FT_AutoHinter_ServiceRec* clazz) \
|
||||
{ \
|
||||
FT_UNUSED(library); \
|
||||
clazz->reset_face = reset_face_; \
|
||||
clazz->get_global_hints = get_global_hints_; \
|
||||
clazz->done_global_hints = done_global_hints_; \
|
||||
clazz->load_glyph = load_glyph_; \
|
||||
}
|
||||
#define FT_DEFINE_AUTOHINTER_INTERFACE( \
|
||||
class_, \
|
||||
reset_face_, \
|
||||
get_global_hints_, \
|
||||
done_global_hints_, \
|
||||
load_glyph_ ) \
|
||||
void \
|
||||
FT_Init_Class_ ## class_( FT_Library library, \
|
||||
FT_AutoHinter_InterfaceRec* clazz ) \
|
||||
{ \
|
||||
FT_UNUSED( library ); \
|
||||
\
|
||||
clazz->reset_face = reset_face_; \
|
||||
clazz->get_global_hints = get_global_hints_; \
|
||||
clazz->done_global_hints = done_global_hints_; \
|
||||
clazz->load_glyph = load_glyph_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Arithmetic computations (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009 by */
|
||||
/* Copyright 1996-2006, 2008, 2009, 2012-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -33,7 +33,7 @@ FT_BEGIN_HEADER
|
||||
/* FT_FixedSqrt */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Computes the square root of a 16.16 fixed point value. */
|
||||
/* Computes the square root of a 16.16 fixed-point value. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* x :: The value to compute the root for. */
|
||||
@@ -48,29 +48,6 @@ FT_BEGIN_HEADER
|
||||
FT_SqrtFixed( FT_Int32 x );
|
||||
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Sqrt32 */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Computes the square root of an Int32 integer (which will be */
|
||||
/* handled as an unsigned long value). */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* x :: The value to compute the root for. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* The result of `sqrt(x)'. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Int32 )
|
||||
FT_Sqrt32( FT_Int32 x );
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* FT_MulDiv() and FT_MulFix() are declared in freetype.h. */
|
||||
@@ -78,8 +55,6 @@ FT_BEGIN_HEADER
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
#ifdef TT_USE_BYTECODE_INTERPRETER
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
@@ -87,7 +62,7 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A very simple function used to perform the computation `(a*b)/c' */
|
||||
/* (without rounding) with maximal accuracy (it uses a 64-bit */
|
||||
/* (without rounding) with maximum accuracy (it uses a 64-bit */
|
||||
/* intermediate integer whenever necessary). */
|
||||
/* */
|
||||
/* This function isn't necessarily as fast as some processor specific */
|
||||
@@ -108,8 +83,6 @@ FT_BEGIN_HEADER
|
||||
FT_Long b,
|
||||
FT_Long c );
|
||||
|
||||
#endif /* TT_USE_BYTECODE_INTERPRETER */
|
||||
|
||||
|
||||
/*
|
||||
* A variant of FT_Matrix_Multiply which scales its result afterwards.
|
||||
@@ -129,7 +102,6 @@ FT_BEGIN_HEADER
|
||||
* A variant of FT_Vector_Transform. See comments for
|
||||
* FT_Matrix_Multiply_Scaled.
|
||||
*/
|
||||
|
||||
FT_BASE( void )
|
||||
FT_Vector_Transform_Scaled( FT_Vector* vector,
|
||||
const FT_Matrix* matrix,
|
||||
@@ -160,6 +132,22 @@ FT_BEGIN_HEADER
|
||||
FT_Pos out_y );
|
||||
|
||||
|
||||
/*
|
||||
* Return the most significant bit index.
|
||||
*/
|
||||
FT_BASE( FT_Int )
|
||||
FT_MSB( FT_UInt32 z );
|
||||
|
||||
|
||||
/*
|
||||
* Return sqrt(x*x+y*y), which is the same as `FT_Vector_Length' but uses
|
||||
* two fixed-point arguments instead.
|
||||
*/
|
||||
FT_BASE( FT_Fixed )
|
||||
FT_Hypot( FT_Fixed x,
|
||||
FT_Fixed y );
|
||||
|
||||
|
||||
#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 )
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Debugging and logging component (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2004, 2006, 2007, 2008, 2009 by */
|
||||
/* Copyright 1996-2002, 2004, 2006-2009, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -185,7 +185,8 @@ FT_BEGIN_HEADER
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Define the FT_ASSERT macro. */
|
||||
/* Define the FT_ASSERT and FT_THROW macros. The call to `FT_Throw' */
|
||||
/* makes it possible to easily set a breakpoint at this function. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
@@ -199,10 +200,18 @@ FT_BEGIN_HEADER
|
||||
__LINE__, __FILE__ ); \
|
||||
} while ( 0 )
|
||||
|
||||
#define FT_THROW( e ) \
|
||||
( FT_Throw( FT_ERR_CAT( FT_ERR_PREFIX, e ), \
|
||||
__LINE__, \
|
||||
__FILE__ ) | \
|
||||
FT_ERR_CAT( FT_ERR_PREFIX, e ) )
|
||||
|
||||
#else /* !FT_DEBUG_LEVEL_ERROR */
|
||||
|
||||
#define FT_ASSERT( condition ) do { } while ( 0 )
|
||||
|
||||
#define FT_THROW( e ) FT_ERR_CAT( FT_ERR_PREFIX, e )
|
||||
|
||||
#endif /* !FT_DEBUG_LEVEL_ERROR */
|
||||
|
||||
|
||||
@@ -226,22 +235,18 @@ FT_BEGIN_HEADER
|
||||
FT_Panic( const char* fmt,
|
||||
... );
|
||||
|
||||
/* report file name and line number of an error */
|
||||
FT_BASE( int )
|
||||
FT_Throw( FT_Error error,
|
||||
int line,
|
||||
const char* file );
|
||||
|
||||
#endif /* FT_DEBUG_LEVEL_ERROR */
|
||||
|
||||
|
||||
FT_BASE( void )
|
||||
ft_debug_init( void );
|
||||
|
||||
|
||||
#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. */
|
||||
#pragma warning( disable : 4127 )
|
||||
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __FTDEBUG_H__ */
|
||||
|
||||
+198
-211
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType font driver interface (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2006, 2008 by */
|
||||
/* Copyright 1996-2003, 2006, 2008, 2011-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -60,22 +60,6 @@ FT_BEGIN_HEADER
|
||||
(*FT_Size_SelectFunc)( FT_Size size,
|
||||
FT_ULong size_index );
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Size_ResetPointsFunc)( FT_Size size,
|
||||
FT_F26Dot6 char_width,
|
||||
FT_F26Dot6 char_height,
|
||||
FT_UInt horz_resolution,
|
||||
FT_UInt vert_resolution );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Size_ResetPixelsFunc)( FT_Size size,
|
||||
FT_UInt pixel_width,
|
||||
FT_UInt pixel_height );
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Slot_LoadFunc)( FT_GlyphSlot slot,
|
||||
FT_Size size,
|
||||
@@ -162,10 +146,9 @@ FT_BEGIN_HEADER
|
||||
/* starting at `first'. The `vertical' flag must */
|
||||
/* be set to get vertical advance heights. The */
|
||||
/* `advances' buffer is caller-allocated. */
|
||||
/* Currently not implemented. The idea of this */
|
||||
/* function is to be able to perform */
|
||||
/* device-independent text layout without loading */
|
||||
/* a single glyph image. */
|
||||
/* The idea of this function is to be able to */
|
||||
/* perform device-independent text layout without */
|
||||
/* loading a single glyph image. */
|
||||
/* */
|
||||
/* request_size :: A handle to a function used to request the new */
|
||||
/* character size. Can be set to 0 if the */
|
||||
@@ -182,72 +165,42 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
typedef struct FT_Driver_ClassRec_
|
||||
{
|
||||
FT_Module_Class root;
|
||||
FT_Module_Class root;
|
||||
|
||||
FT_Long face_object_size;
|
||||
FT_Long size_object_size;
|
||||
FT_Long slot_object_size;
|
||||
FT_Long face_object_size;
|
||||
FT_Long size_object_size;
|
||||
FT_Long slot_object_size;
|
||||
|
||||
FT_Face_InitFunc init_face;
|
||||
FT_Face_DoneFunc done_face;
|
||||
FT_Face_InitFunc init_face;
|
||||
FT_Face_DoneFunc done_face;
|
||||
|
||||
FT_Size_InitFunc init_size;
|
||||
FT_Size_DoneFunc done_size;
|
||||
FT_Size_InitFunc init_size;
|
||||
FT_Size_DoneFunc done_size;
|
||||
|
||||
FT_Slot_InitFunc init_slot;
|
||||
FT_Slot_DoneFunc done_slot;
|
||||
FT_Slot_InitFunc init_slot;
|
||||
FT_Slot_DoneFunc done_slot;
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
FT_Slot_LoadFunc load_glyph;
|
||||
|
||||
FT_Size_ResetPointsFunc set_char_sizes;
|
||||
FT_Size_ResetPixelsFunc set_pixel_sizes;
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
FT_Slot_LoadFunc load_glyph;
|
||||
|
||||
FT_Face_GetKerningFunc get_kerning;
|
||||
FT_Face_AttachFunc attach_file;
|
||||
FT_Face_GetAdvancesFunc get_advances;
|
||||
FT_Face_GetKerningFunc get_kerning;
|
||||
FT_Face_AttachFunc attach_file;
|
||||
FT_Face_GetAdvancesFunc get_advances;
|
||||
|
||||
/* since version 2.2 */
|
||||
FT_Size_RequestFunc request_size;
|
||||
FT_Size_SelectFunc select_size;
|
||||
FT_Size_RequestFunc request_size;
|
||||
FT_Size_SelectFunc select_size;
|
||||
|
||||
} FT_Driver_ClassRec, *FT_Driver_Class;
|
||||
|
||||
|
||||
/*
|
||||
* The following functions are used as stubs for `set_char_sizes' and
|
||||
* `set_pixel_sizes'; the code uses `request_size' and `select_size'
|
||||
* functions instead.
|
||||
*
|
||||
* Implementation is in `src/base/ftobjs.c'.
|
||||
*/
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
FT_BASE( FT_Error )
|
||||
ft_stub_set_char_sizes( FT_Size size,
|
||||
FT_F26Dot6 width,
|
||||
FT_F26Dot6 height,
|
||||
FT_UInt horz_res,
|
||||
FT_UInt vert_res );
|
||||
|
||||
FT_BASE( FT_Error )
|
||||
ft_stub_set_pixel_sizes( FT_Size size,
|
||||
FT_UInt width,
|
||||
FT_UInt height );
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Macro> */
|
||||
/* FT_DECLARE_DRIVER */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Used to create a forward declaration of a */
|
||||
/* FT_Driver_ClassRec stract instance. */
|
||||
/* Used to create a forward declaration of an FT_Driver_ClassRec */
|
||||
/* struct instance. */
|
||||
/* */
|
||||
/* <Macro> */
|
||||
/* FT_DEFINE_DRIVER */
|
||||
@@ -255,161 +208,195 @@ FT_BEGIN_HEADER
|
||||
/* <Description> */
|
||||
/* Used to initialize an instance of FT_Driver_ClassRec struct. */
|
||||
/* */
|
||||
/* When FT_CONFIG_OPTION_PIC is defined a Create funtion will need */
|
||||
/* to called with a pointer where the allocated stracture 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 */
|
||||
/* a mechanism to call these functions for the default modules */
|
||||
/* described in ftmodule.h */
|
||||
/* When FT_CONFIG_OPTION_PIC is defined a `create' function has 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. */
|
||||
/* */
|
||||
/* Notice that the created Create and Destroy functions call */
|
||||
/* pic_init and pic_free function to allow you to manually allocate */
|
||||
/* and initialize any additional global data, like module specific */
|
||||
/* `fcinit.c' (ft_create_default_module_classes) already contains a */
|
||||
/* mechanism to call these functions for the default modules */
|
||||
/* described in `ftmodule.h'. */
|
||||
/* */
|
||||
/* Notice that the created `create' and `destroy' functions call */
|
||||
/* `pic_init' and `pic_free' to allow you to manually allocate and */
|
||||
/* initialize any additional global data, like a module specific */
|
||||
/* interface, and put them in the global pic container defined in */
|
||||
/* ftpic.h. if you don't need them just implement the functions as */
|
||||
/* empty to resolve the link error. */
|
||||
/* `ftpic.h'. If you don't need them just implement the functions as */
|
||||
/* empty to resolve the link error. Also the `pic_init' and */
|
||||
/* `pic_free' functions should be declared in `pic.h', to be referred */
|
||||
/* by driver definition calling `FT_DEFINE_DRIVER' in following. */
|
||||
/* */
|
||||
/* 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). */
|
||||
/* allocated in the global scope (or the scope where the macro is */
|
||||
/* used). */
|
||||
/* */
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
#define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_) \
|
||||
a_, b_,
|
||||
#else
|
||||
#define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_)
|
||||
#endif
|
||||
|
||||
#define FT_DECLARE_DRIVER(class_) \
|
||||
#define FT_DECLARE_DRIVER( class_ ) \
|
||||
FT_CALLBACK_TABLE \
|
||||
const FT_Driver_ClassRec class_;
|
||||
const FT_Driver_ClassRec class_;
|
||||
|
||||
#define FT_DEFINE_DRIVER(class_, \
|
||||
flags_, size_, name_, version_, requires_, \
|
||||
interface_, init_, done_, get_interface_, \
|
||||
face_object_size_, size_object_size_, \
|
||||
slot_object_size_, init_face_, done_face_, \
|
||||
init_size_, done_size_, init_slot_, done_slot_, \
|
||||
old_set_char_sizes_, old_set_pixel_sizes_, \
|
||||
load_glyph_, get_kerning_, attach_file_, \
|
||||
get_advances_, request_size_, select_size_ ) \
|
||||
FT_CALLBACK_TABLE_DEF \
|
||||
const FT_Driver_ClassRec class_ = \
|
||||
{ \
|
||||
FT_DEFINE_ROOT_MODULE(flags_,size_,name_,version_,requires_,interface_, \
|
||||
init_,done_,get_interface_) \
|
||||
\
|
||||
face_object_size_, \
|
||||
size_object_size_, \
|
||||
slot_object_size_, \
|
||||
\
|
||||
init_face_, \
|
||||
done_face_, \
|
||||
\
|
||||
init_size_, \
|
||||
done_size_, \
|
||||
\
|
||||
init_slot_, \
|
||||
done_slot_, \
|
||||
\
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNALS(old_set_char_sizes_, old_set_pixel_sizes_) \
|
||||
\
|
||||
load_glyph_, \
|
||||
\
|
||||
get_kerning_, \
|
||||
attach_file_, \
|
||||
get_advances_, \
|
||||
\
|
||||
request_size_, \
|
||||
select_size_ \
|
||||
#define FT_DEFINE_DRIVER( \
|
||||
class_, \
|
||||
flags_, \
|
||||
size_, \
|
||||
name_, \
|
||||
version_, \
|
||||
requires_, \
|
||||
interface_, \
|
||||
init_, \
|
||||
done_, \
|
||||
get_interface_, \
|
||||
face_object_size_, \
|
||||
size_object_size_, \
|
||||
slot_object_size_, \
|
||||
init_face_, \
|
||||
done_face_, \
|
||||
init_size_, \
|
||||
done_size_, \
|
||||
init_slot_, \
|
||||
done_slot_, \
|
||||
load_glyph_, \
|
||||
get_kerning_, \
|
||||
attach_file_, \
|
||||
get_advances_, \
|
||||
request_size_, \
|
||||
select_size_ ) \
|
||||
FT_CALLBACK_TABLE_DEF \
|
||||
const FT_Driver_ClassRec class_ = \
|
||||
{ \
|
||||
FT_DEFINE_ROOT_MODULE( flags_, \
|
||||
size_, \
|
||||
name_, \
|
||||
version_, \
|
||||
requires_, \
|
||||
interface_, \
|
||||
init_, \
|
||||
done_, \
|
||||
get_interface_ ) \
|
||||
\
|
||||
face_object_size_, \
|
||||
size_object_size_, \
|
||||
slot_object_size_, \
|
||||
\
|
||||
init_face_, \
|
||||
done_face_, \
|
||||
\
|
||||
init_size_, \
|
||||
done_size_, \
|
||||
\
|
||||
init_slot_, \
|
||||
done_slot_, \
|
||||
\
|
||||
load_glyph_, \
|
||||
\
|
||||
get_kerning_, \
|
||||
attach_file_, \
|
||||
get_advances_, \
|
||||
\
|
||||
request_size_, \
|
||||
select_size_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
#define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_) \
|
||||
clazz->set_char_sizes = a_; \
|
||||
clazz->set_pixel_sizes = b_;
|
||||
#else
|
||||
#define FT_DEFINE_DRIVERS_OLD_INTERNALS(a_,b_)
|
||||
#endif
|
||||
#define FT_DECLARE_DRIVER( class_ ) FT_DECLARE_MODULE( class_ )
|
||||
|
||||
#define FT_DECLARE_DRIVER(class_) FT_DECLARE_MODULE(class_)
|
||||
|
||||
#define FT_DEFINE_DRIVER(class_, \
|
||||
flags_, size_, name_, version_, requires_, \
|
||||
interface_, init_, done_, get_interface_, \
|
||||
face_object_size_, size_object_size_, \
|
||||
slot_object_size_, init_face_, done_face_, \
|
||||
init_size_, done_size_, init_slot_, done_slot_, \
|
||||
old_set_char_sizes_, old_set_pixel_sizes_, \
|
||||
load_glyph_, get_kerning_, attach_file_, \
|
||||
get_advances_, request_size_, select_size_ ) \
|
||||
void class_##_pic_free( FT_Library library ); \
|
||||
FT_Error class_##_pic_init( FT_Library library ); \
|
||||
\
|
||||
void \
|
||||
FT_Destroy_Class_##class_( FT_Library library, \
|
||||
FT_Module_Class* clazz ) \
|
||||
{ \
|
||||
FT_Memory memory = library->memory; \
|
||||
FT_Driver_Class dclazz = (FT_Driver_Class)clazz; \
|
||||
class_##_pic_free( library ); \
|
||||
if ( dclazz ) \
|
||||
FT_FREE( dclazz ); \
|
||||
} \
|
||||
\
|
||||
FT_Error \
|
||||
FT_Create_Class_##class_( FT_Library library, \
|
||||
FT_Module_Class** output_class ) \
|
||||
{ \
|
||||
FT_Driver_Class clazz; \
|
||||
FT_Error error; \
|
||||
FT_Memory memory = library->memory; \
|
||||
\
|
||||
if ( FT_ALLOC( clazz, sizeof(*clazz) ) ) \
|
||||
return error; \
|
||||
\
|
||||
error = class_##_pic_init( library ); \
|
||||
if(error) \
|
||||
{ \
|
||||
FT_FREE( clazz ); \
|
||||
return error; \
|
||||
} \
|
||||
\
|
||||
FT_DEFINE_ROOT_MODULE(flags_,size_,name_,version_,requires_,interface_, \
|
||||
init_,done_,get_interface_) \
|
||||
\
|
||||
clazz->face_object_size = face_object_size_; \
|
||||
clazz->size_object_size = size_object_size_; \
|
||||
clazz->slot_object_size = slot_object_size_; \
|
||||
\
|
||||
clazz->init_face = init_face_; \
|
||||
clazz->done_face = done_face_; \
|
||||
\
|
||||
clazz->init_size = init_size_; \
|
||||
clazz->done_size = done_size_; \
|
||||
\
|
||||
clazz->init_slot = init_slot_; \
|
||||
clazz->done_slot = done_slot_; \
|
||||
\
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNALS(old_set_char_sizes_, old_set_pixel_sizes_) \
|
||||
\
|
||||
clazz->load_glyph = load_glyph_; \
|
||||
\
|
||||
clazz->get_kerning = get_kerning_; \
|
||||
clazz->attach_file = attach_file_; \
|
||||
clazz->get_advances = get_advances_; \
|
||||
\
|
||||
clazz->request_size = request_size_; \
|
||||
clazz->select_size = select_size_; \
|
||||
\
|
||||
*output_class = (FT_Module_Class*)clazz; \
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
#define FT_DEFINE_DRIVER( \
|
||||
class_, \
|
||||
flags_, \
|
||||
size_, \
|
||||
name_, \
|
||||
version_, \
|
||||
requires_, \
|
||||
interface_, \
|
||||
init_, \
|
||||
done_, \
|
||||
get_interface_, \
|
||||
face_object_size_, \
|
||||
size_object_size_, \
|
||||
slot_object_size_, \
|
||||
init_face_, \
|
||||
done_face_, \
|
||||
init_size_, \
|
||||
done_size_, \
|
||||
init_slot_, \
|
||||
done_slot_, \
|
||||
load_glyph_, \
|
||||
get_kerning_, \
|
||||
attach_file_, \
|
||||
get_advances_, \
|
||||
request_size_, \
|
||||
select_size_ ) \
|
||||
void \
|
||||
FT_Destroy_Class_ ## class_( FT_Library library, \
|
||||
FT_Module_Class* clazz ) \
|
||||
{ \
|
||||
FT_Memory memory = library->memory; \
|
||||
FT_Driver_Class dclazz = (FT_Driver_Class)clazz; \
|
||||
\
|
||||
\
|
||||
class_ ## _pic_free( library ); \
|
||||
if ( dclazz ) \
|
||||
FT_FREE( dclazz ); \
|
||||
} \
|
||||
\
|
||||
\
|
||||
FT_Error \
|
||||
FT_Create_Class_ ## class_( FT_Library library, \
|
||||
FT_Module_Class** output_class ) \
|
||||
{ \
|
||||
FT_Driver_Class clazz = NULL; \
|
||||
FT_Error error; \
|
||||
FT_Memory memory = library->memory; \
|
||||
\
|
||||
\
|
||||
if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) ) \
|
||||
return error; \
|
||||
\
|
||||
error = class_ ## _pic_init( library ); \
|
||||
if ( error ) \
|
||||
{ \
|
||||
FT_FREE( clazz ); \
|
||||
return error; \
|
||||
} \
|
||||
\
|
||||
FT_DEFINE_ROOT_MODULE( flags_, \
|
||||
size_, \
|
||||
name_, \
|
||||
version_, \
|
||||
requires_, \
|
||||
interface_, \
|
||||
init_, \
|
||||
done_, \
|
||||
get_interface_ ) \
|
||||
\
|
||||
clazz->face_object_size = face_object_size_; \
|
||||
clazz->size_object_size = size_object_size_; \
|
||||
clazz->slot_object_size = slot_object_size_; \
|
||||
\
|
||||
clazz->init_face = init_face_; \
|
||||
clazz->done_face = done_face_; \
|
||||
\
|
||||
clazz->init_size = init_size_; \
|
||||
clazz->done_size = done_size_; \
|
||||
\
|
||||
clazz->init_slot = init_slot_; \
|
||||
clazz->done_slot = done_slot_; \
|
||||
\
|
||||
clazz->load_glyph = load_glyph_; \
|
||||
\
|
||||
clazz->get_kerning = get_kerning_; \
|
||||
clazz->attach_file = attach_file_; \
|
||||
clazz->get_advances = get_advances_; \
|
||||
\
|
||||
clazz->request_size = request_size_; \
|
||||
clazz->select_size = select_size_; \
|
||||
\
|
||||
*output_class = (FT_Module_Class*)clazz; \
|
||||
\
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType memory management macros (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007, 2010 by */
|
||||
/* Copyright 1996-2002, 2004-2007, 2010, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -141,8 +141,10 @@ FT_BEGIN_HEADER
|
||||
const void* P );
|
||||
|
||||
|
||||
#define FT_MEM_ALLOC( ptr, size ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_alloc( memory, (size), &error ) )
|
||||
#define FT_MEM_ALLOC( ptr, size ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_alloc( memory, \
|
||||
(FT_Long)(size), \
|
||||
&error ) )
|
||||
|
||||
#define FT_MEM_FREE( ptr ) \
|
||||
FT_BEGIN_STMNT \
|
||||
@@ -154,45 +156,60 @@ FT_BEGIN_HEADER
|
||||
FT_MEM_ALLOC( ptr, sizeof ( *(ptr) ) )
|
||||
|
||||
#define FT_MEM_REALLOC( ptr, cursz, newsz ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, 1, \
|
||||
(cursz), (newsz), \
|
||||
(ptr), &error ) )
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \
|
||||
1, \
|
||||
(FT_Long)(cursz), \
|
||||
(FT_Long)(newsz), \
|
||||
(ptr), \
|
||||
&error ) )
|
||||
|
||||
#define FT_MEM_QALLOC( ptr, size ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qalloc( memory, (size), &error ) )
|
||||
#define FT_MEM_QALLOC( ptr, size ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qalloc( memory, \
|
||||
(FT_Long)(size), \
|
||||
&error ) )
|
||||
|
||||
#define FT_MEM_QNEW( ptr ) \
|
||||
FT_MEM_QALLOC( ptr, sizeof ( *(ptr) ) )
|
||||
|
||||
#define FT_MEM_QREALLOC( ptr, cursz, newsz ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, 1, \
|
||||
(cursz), (newsz), \
|
||||
(ptr), &error ) )
|
||||
#define FT_MEM_QREALLOC( ptr, cursz, newsz ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
|
||||
1, \
|
||||
(FT_Long)(cursz), \
|
||||
(FT_Long)(newsz), \
|
||||
(ptr), \
|
||||
&error ) )
|
||||
|
||||
#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \
|
||||
(cursz), (newsz), \
|
||||
(ptr), &error ) )
|
||||
#define FT_MEM_ALLOC_MULT( ptr, count, item_size ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \
|
||||
(FT_Long)(item_size), \
|
||||
0, \
|
||||
(FT_Long)(count), \
|
||||
NULL, \
|
||||
&error ) )
|
||||
|
||||
#define FT_MEM_ALLOC_MULT( ptr, count, item_size ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, (item_size), \
|
||||
0, (count), \
|
||||
NULL, &error ) )
|
||||
#define FT_MEM_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \
|
||||
(FT_Long)(itmsz), \
|
||||
(FT_Long)(oldcnt), \
|
||||
(FT_Long)(newcnt), \
|
||||
(ptr), \
|
||||
&error ) )
|
||||
|
||||
#define FT_MEM_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, (itmsz), \
|
||||
(oldcnt), (newcnt), \
|
||||
(ptr), &error ) )
|
||||
#define FT_MEM_QALLOC_MULT( ptr, count, item_size ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
|
||||
(FT_Long)(item_size), \
|
||||
0, \
|
||||
(FT_Long)(count), \
|
||||
NULL, \
|
||||
&error ) )
|
||||
|
||||
#define FT_MEM_QALLOC_MULT( ptr, count, item_size ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, (item_size), \
|
||||
0, (count), \
|
||||
NULL, &error ) )
|
||||
|
||||
#define FT_MEM_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, (itmsz), \
|
||||
(oldcnt), (newcnt), \
|
||||
(ptr), &error ) )
|
||||
#define FT_MEM_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
|
||||
(FT_Long)(itmsz), \
|
||||
(FT_Long)(oldcnt), \
|
||||
(FT_Long)(newcnt), \
|
||||
(ptr), \
|
||||
&error ) )
|
||||
|
||||
|
||||
#define FT_MEM_SET_ERROR( cond ) ( (cond), error != 0 )
|
||||
@@ -236,26 +253,37 @@ FT_BEGIN_HEADER
|
||||
/* _typed_ in order to automatically compute array element sizes. */
|
||||
/* */
|
||||
|
||||
#define FT_MEM_NEW_ARRAY( ptr, count ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, sizeof ( *(ptr) ), \
|
||||
0, (count), \
|
||||
NULL, &error ) )
|
||||
#define FT_MEM_NEW_ARRAY( ptr, count ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \
|
||||
sizeof ( *(ptr) ), \
|
||||
0, \
|
||||
(FT_Long)(count), \
|
||||
NULL, \
|
||||
&error ) )
|
||||
|
||||
#define FT_MEM_RENEW_ARRAY( ptr, cursz, newsz ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, sizeof ( *(ptr) ), \
|
||||
(cursz), (newsz), \
|
||||
(ptr), &error ) )
|
||||
#define FT_MEM_RENEW_ARRAY( ptr, cursz, newsz ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, \
|
||||
sizeof ( *(ptr) ), \
|
||||
(FT_Long)(cursz), \
|
||||
(FT_Long)(newsz), \
|
||||
(ptr), \
|
||||
&error ) )
|
||||
|
||||
#define FT_MEM_QNEW_ARRAY( ptr, count ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \
|
||||
0, (count), \
|
||||
NULL, &error ) )
|
||||
|
||||
#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \
|
||||
(cursz), (newsz), \
|
||||
(ptr), &error ) )
|
||||
#define FT_MEM_QNEW_ARRAY( ptr, count ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
|
||||
sizeof ( *(ptr) ), \
|
||||
0, \
|
||||
(FT_Long)(count), \
|
||||
NULL, \
|
||||
&error ) )
|
||||
|
||||
#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz ) \
|
||||
FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, \
|
||||
sizeof ( *(ptr) ), \
|
||||
(FT_Long)(cursz), \
|
||||
(FT_Long)(newsz), \
|
||||
(ptr), \
|
||||
&error ) )
|
||||
|
||||
#define FT_ALLOC( ptr, size ) \
|
||||
FT_MEM_SET_ERROR( FT_MEM_ALLOC( ptr, size ) )
|
||||
@@ -303,37 +331,6 @@ FT_BEGIN_HEADER
|
||||
FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) )
|
||||
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
FT_BASE( FT_Error )
|
||||
FT_Alloc( FT_Memory memory,
|
||||
FT_Long size,
|
||||
void* *P );
|
||||
|
||||
FT_BASE( FT_Error )
|
||||
FT_QAlloc( FT_Memory memory,
|
||||
FT_Long size,
|
||||
void* *p );
|
||||
|
||||
FT_BASE( FT_Error )
|
||||
FT_Realloc( FT_Memory memory,
|
||||
FT_Long current,
|
||||
FT_Long size,
|
||||
void* *P );
|
||||
|
||||
FT_BASE( FT_Error )
|
||||
FT_QRealloc( FT_Memory memory,
|
||||
FT_Long current,
|
||||
FT_Long size,
|
||||
void* *p );
|
||||
|
||||
FT_BASE( void )
|
||||
FT_Free( FT_Memory memory,
|
||||
void* *P );
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
|
||||
FT_BASE( FT_Pointer )
|
||||
ft_mem_strdup( FT_Memory memory,
|
||||
const char* str,
|
||||
@@ -345,6 +342,7 @@ FT_BEGIN_HEADER
|
||||
FT_ULong size,
|
||||
FT_Error *p_error );
|
||||
|
||||
|
||||
#define FT_MEM_STRDUP( dst, str ) \
|
||||
(dst) = (char*)ft_mem_strdup( memory, (const char*)(str), &error )
|
||||
|
||||
|
||||
+493
-352
File diff suppressed because it is too large
Load Diff
+19
-15
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType position independent code services (declaration). */
|
||||
/* */
|
||||
/* Copyright 2009 by */
|
||||
/* Copyright 2009, 2012 by */
|
||||
/* Oran Agra and Mickey Gabel. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -26,34 +26,38 @@
|
||||
#ifndef __FTPIC_H__
|
||||
#define __FTPIC_H__
|
||||
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_PIC
|
||||
|
||||
typedef struct FT_PIC_Container_
|
||||
typedef struct FT_PIC_Container_
|
||||
{
|
||||
/* pic containers for base */
|
||||
void* base;
|
||||
void* base;
|
||||
|
||||
/* pic containers for modules */
|
||||
void* autofit;
|
||||
void* cff;
|
||||
void* pshinter;
|
||||
void* psnames;
|
||||
void* raster;
|
||||
void* sfnt;
|
||||
void* smooth;
|
||||
void* truetype;
|
||||
void* autofit;
|
||||
void* cff;
|
||||
void* pshinter;
|
||||
void* psnames;
|
||||
void* raster;
|
||||
void* sfnt;
|
||||
void* smooth;
|
||||
void* truetype;
|
||||
|
||||
} FT_PIC_Container;
|
||||
|
||||
/* Initialize the various function tables, structs, etc. stored in the container. */
|
||||
|
||||
/* Initialize the various function tables, structs, etc. */
|
||||
/* stored in the container. */
|
||||
FT_BASE( FT_Error )
|
||||
ft_pic_container_init( FT_Library library );
|
||||
ft_pic_container_init( FT_Library library );
|
||||
|
||||
|
||||
/* Destroy the contents of the container. */
|
||||
FT_BASE( void )
|
||||
ft_pic_container_destroy( FT_Library library );
|
||||
ft_pic_container_destroy( FT_Library library );
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Embedded resource forks accessor (specification). */
|
||||
/* */
|
||||
/* Copyright 2004, 2006, 2007 by */
|
||||
/* Copyright 2004, 2006, 2007, 2012 by */
|
||||
/* Masatake YAMATO and Redhat K.K. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -48,6 +48,68 @@ FT_BEGIN_HEADER
|
||||
|
||||
} FT_RFork_Ref;
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
|
||||
typedef FT_Error
|
||||
(*ft_raccess_guess_func)( FT_Library library,
|
||||
FT_Stream stream,
|
||||
char *base_file_name,
|
||||
char **result_file_name,
|
||||
FT_Long *result_offset );
|
||||
|
||||
typedef enum FT_RFork_Rule_ {
|
||||
FT_RFork_Rule_invalid = -2,
|
||||
FT_RFork_Rule_uknown, /* -1 */
|
||||
FT_RFork_Rule_apple_double,
|
||||
FT_RFork_Rule_apple_single,
|
||||
FT_RFork_Rule_darwin_ufs_export,
|
||||
FT_RFork_Rule_darwin_newvfs,
|
||||
FT_RFork_Rule_darwin_hfsplus,
|
||||
FT_RFork_Rule_vfat,
|
||||
FT_RFork_Rule_linux_cap,
|
||||
FT_RFork_Rule_linux_double,
|
||||
FT_RFork_Rule_linux_netatalk
|
||||
} FT_RFork_Rule;
|
||||
|
||||
/* For fast translation between rule index and rule type,
|
||||
* the macros FT_RFORK_xxx should be kept consistent with
|
||||
* the raccess_guess_funcs table
|
||||
*/
|
||||
typedef struct ft_raccess_guess_rec_ {
|
||||
ft_raccess_guess_func func;
|
||||
FT_RFork_Rule type;
|
||||
} ft_raccess_guess_rec;
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
/* this array is a storage in non-PIC mode, so ; is needed in END */
|
||||
#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \
|
||||
const type name[] = {
|
||||
#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \
|
||||
{ raccess_guess_ ## func_suffix, \
|
||||
FT_RFork_Rule_ ## type_suffix },
|
||||
#define CONST_FT_RFORK_RULE_ARRAY_END };
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* this array is a function in PIC mode, so no ; is needed in END */
|
||||
#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \
|
||||
void \
|
||||
FT_Init_ ## name( type* storage ) \
|
||||
{ \
|
||||
type* local = storage; \
|
||||
\
|
||||
\
|
||||
int i = 0;
|
||||
#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \
|
||||
local[i].func = raccess_guess_ ## func_suffix; \
|
||||
local[i].type = FT_RFork_Rule_ ## type_suffix; \
|
||||
i++;
|
||||
#define CONST_FT_RFORK_RULE_ARRAY_END }
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
|
||||
+425
-282
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType services (specification only). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005, 2006, 2007 by */
|
||||
/* Copyright 2003-2007, 2009, 2012, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -34,14 +34,6 @@
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
#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 */
|
||||
#pragma warning( disable : 4127 )
|
||||
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
/*
|
||||
* @macro:
|
||||
* FT_FACE_FIND_SERVICE
|
||||
@@ -92,6 +84,7 @@ FT_BEGIN_HEADER
|
||||
|
||||
#endif /* !C++ */
|
||||
|
||||
|
||||
/*
|
||||
* @macro:
|
||||
* FT_FACE_FIND_GLOBAL_SERVICE
|
||||
@@ -163,298 +156,445 @@ FT_BEGIN_HEADER
|
||||
|
||||
typedef const FT_ServiceDescRec* FT_ServiceDesc;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Macro> */
|
||||
/* FT_DEFINE_SERVICEDESCREC1 .. FT_DEFINE_SERVICEDESCREC6 */
|
||||
/* FT_DEFINE_SERVICEDESCREC1 */
|
||||
/* FT_DEFINE_SERVICEDESCREC2 */
|
||||
/* FT_DEFINE_SERVICEDESCREC3 */
|
||||
/* FT_DEFINE_SERVICEDESCREC4 */
|
||||
/* FT_DEFINE_SERVICEDESCREC5 */
|
||||
/* FT_DEFINE_SERVICEDESCREC6 */
|
||||
/* FT_DEFINE_SERVICEDESCREC7 */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Used to initialize an array of FT_ServiceDescRec structs. */
|
||||
/* Used to initialize an array of FT_ServiceDescRec structures. */
|
||||
/* */
|
||||
/* When FT_CONFIG_OPTION_PIC is defined a Create funtion will need */
|
||||
/* to called with a pointer where the allocated array is returned. */
|
||||
/* And when it is no longer needed a Destroy function needs */
|
||||
/* to be called to release that allocation. */
|
||||
/* When FT_CONFIG_OPTION_PIC is defined a `create' function needs to */
|
||||
/* be called with a pointer to return an allocated array. As soon as */
|
||||
/* it is no longer needed, a `destroy' function needs to be called to */
|
||||
/* release that allocation. */
|
||||
/* */
|
||||
/* These functions should be manyally called from the pic_init and */
|
||||
/* pic_free functions of your module (see FT_DEFINE_MODULE) */
|
||||
/* These functions should be manually called from the `pic_init' and */
|
||||
/* `pic_free' functions of your module (see FT_DEFINE_MODULE). */
|
||||
/* */
|
||||
/* When FT_CONFIG_OPTION_PIC is not defined the array will be */
|
||||
/* allocated in the global scope (or the scope where the macro */
|
||||
/* is used). */
|
||||
/* allocated in the global scope (or the scope where the macro is */
|
||||
/* used). */
|
||||
/* */
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC1(class_, serv_id_1, serv_data_1) \
|
||||
static const FT_ServiceDescRec class_[] = \
|
||||
{ \
|
||||
{serv_id_1, serv_data_1}, \
|
||||
{NULL, NULL} \
|
||||
};
|
||||
#define FT_DEFINE_SERVICEDESCREC2(class_, serv_id_1, serv_data_1, \
|
||||
serv_id_2, serv_data_2) \
|
||||
static const FT_ServiceDescRec class_[] = \
|
||||
{ \
|
||||
{serv_id_1, serv_data_1}, \
|
||||
{serv_id_2, serv_data_2}, \
|
||||
{NULL, NULL} \
|
||||
};
|
||||
#define FT_DEFINE_SERVICEDESCREC3(class_, serv_id_1, serv_data_1, \
|
||||
serv_id_2, serv_data_2, serv_id_3, serv_data_3) \
|
||||
static const FT_ServiceDescRec class_[] = \
|
||||
{ \
|
||||
{serv_id_1, serv_data_1}, \
|
||||
{serv_id_2, serv_data_2}, \
|
||||
{serv_id_3, serv_data_3}, \
|
||||
{NULL, NULL} \
|
||||
};
|
||||
#define FT_DEFINE_SERVICEDESCREC4(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) \
|
||||
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}, \
|
||||
{NULL, NULL} \
|
||||
};
|
||||
#define FT_DEFINE_SERVICEDESCREC5(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) \
|
||||
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}, \
|
||||
{NULL, NULL} \
|
||||
};
|
||||
#define FT_DEFINE_SERVICEDESCREC6(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) \
|
||||
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}, \
|
||||
{NULL, NULL} \
|
||||
#define FT_DEFINE_SERVICEDESCREC1( class_, \
|
||||
serv_id_1, serv_data_1 ) \
|
||||
static const FT_ServiceDescRec class_[] = \
|
||||
{ \
|
||||
{ serv_id_1, serv_data_1 }, \
|
||||
{ NULL, NULL } \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#define FT_DEFINE_SERVICEDESCREC2( class_, \
|
||||
serv_id_1, serv_data_1, \
|
||||
serv_id_2, serv_data_2 ) \
|
||||
static const FT_ServiceDescRec class_[] = \
|
||||
{ \
|
||||
{ serv_id_1, serv_data_1 }, \
|
||||
{ serv_id_2, serv_data_2 }, \
|
||||
{ NULL, NULL } \
|
||||
};
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC1(class_, serv_id_1, serv_data_1) \
|
||||
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; \
|
||||
FT_Error error; \
|
||||
FT_Memory memory = library->memory; \
|
||||
\
|
||||
if ( FT_ALLOC( clazz, sizeof(*clazz)*2 ) ) \
|
||||
return error; \
|
||||
clazz[0].serv_id = serv_id_1; \
|
||||
clazz[0].serv_data = serv_data_1; \
|
||||
clazz[1].serv_id = NULL; \
|
||||
clazz[1].serv_data = NULL; \
|
||||
*output_class = clazz; \
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
#define FT_DEFINE_SERVICEDESCREC3( class_, \
|
||||
serv_id_1, serv_data_1, \
|
||||
serv_id_2, serv_data_2, \
|
||||
serv_id_3, serv_data_3 ) \
|
||||
static const FT_ServiceDescRec class_[] = \
|
||||
{ \
|
||||
{ serv_id_1, serv_data_1 }, \
|
||||
{ serv_id_2, serv_data_2 }, \
|
||||
{ serv_id_3, serv_data_3 }, \
|
||||
{ NULL, NULL } \
|
||||
};
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC2(class_, serv_id_1, serv_data_1, \
|
||||
serv_id_2, serv_data_2) \
|
||||
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; \
|
||||
FT_Error error; \
|
||||
FT_Memory memory = library->memory; \
|
||||
\
|
||||
if ( FT_ALLOC( clazz, sizeof(*clazz)*3 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[2].serv_data = NULL; \
|
||||
*output_class = clazz; \
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
#define FT_DEFINE_SERVICEDESCREC4( 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 ) \
|
||||
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 }, \
|
||||
{ NULL, NULL } \
|
||||
};
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC3(class_, serv_id_1, serv_data_1, \
|
||||
serv_id_2, serv_data_2, serv_id_3, serv_data_3) \
|
||||
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; \
|
||||
FT_Error error; \
|
||||
FT_Memory memory = library->memory; \
|
||||
\
|
||||
if ( FT_ALLOC( clazz, sizeof(*clazz)*4 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[3].serv_data = NULL; \
|
||||
*output_class = clazz; \
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
#define FT_DEFINE_SERVICEDESCREC5( 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 ) \
|
||||
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 }, \
|
||||
{ NULL, NULL } \
|
||||
};
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC4(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) \
|
||||
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; \
|
||||
FT_Error error; \
|
||||
FT_Memory memory = library->memory; \
|
||||
\
|
||||
if ( FT_ALLOC( clazz, sizeof(*clazz)*5 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[4].serv_data = NULL; \
|
||||
*output_class = clazz; \
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
#define FT_DEFINE_SERVICEDESCREC6( 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 ) \
|
||||
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 }, \
|
||||
{ NULL, NULL } \
|
||||
};
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC5(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) \
|
||||
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; \
|
||||
FT_Error error; \
|
||||
FT_Memory memory = library->memory; \
|
||||
\
|
||||
if ( FT_ALLOC( clazz, sizeof(*clazz)*6 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[5].serv_data = NULL; \
|
||||
*output_class = clazz; \
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
#define FT_DEFINE_SERVICEDESCREC7( 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 ) \
|
||||
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 }, \
|
||||
{ NULL, NULL } \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC1( class_, \
|
||||
serv_id_1, serv_data_1 ) \
|
||||
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 ) * 2 ) ) \
|
||||
return error; \
|
||||
\
|
||||
clazz[0].serv_id = serv_id_1; \
|
||||
clazz[0].serv_data = serv_data_1; \
|
||||
clazz[1].serv_id = NULL; \
|
||||
clazz[1].serv_data = NULL; \
|
||||
\
|
||||
*output_class = clazz; \
|
||||
\
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC2( class_, \
|
||||
serv_id_1, serv_data_1, \
|
||||
serv_id_2, serv_data_2 ) \
|
||||
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 ) * 3 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[2].serv_data = NULL; \
|
||||
\
|
||||
*output_class = clazz; \
|
||||
\
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC3( class_, \
|
||||
serv_id_1, serv_data_1, \
|
||||
serv_id_2, serv_data_2, \
|
||||
serv_id_3, serv_data_3 ) \
|
||||
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 ) * 4 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[3].serv_data = NULL; \
|
||||
\
|
||||
*output_class = clazz; \
|
||||
\
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC4( 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 ) \
|
||||
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 ) * 5 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[4].serv_data = NULL; \
|
||||
\
|
||||
*output_class = clazz; \
|
||||
\
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC5( 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 ) \
|
||||
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 ) * 6 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[5].serv_data = NULL; \
|
||||
\
|
||||
*output_class = clazz; \
|
||||
\
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC6( 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 ) \
|
||||
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 ) * 7 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[6].serv_data = NULL; \
|
||||
\
|
||||
*output_class = clazz; \
|
||||
\
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC7( 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 ) \
|
||||
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 ) * 8 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[7].serv_data = NULL; \
|
||||
\
|
||||
*output_class = clazz; \
|
||||
\
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICEDESCREC6(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) \
|
||||
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; \
|
||||
FT_Error error; \
|
||||
FT_Memory memory = library->memory; \
|
||||
\
|
||||
if ( FT_ALLOC( clazz, sizeof(*clazz)*7 ) ) \
|
||||
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 = NULL; \
|
||||
clazz[6].serv_data = NULL; \
|
||||
*output_class = clazz; \
|
||||
return FT_Err_Ok; \
|
||||
}
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/*
|
||||
* Parse a list of FT_ServiceDescRec descriptors and look for
|
||||
@@ -505,7 +645,9 @@ FT_BEGIN_HEADER
|
||||
/*
|
||||
* A magic number used within the services cache.
|
||||
*/
|
||||
#define FT_SERVICE_UNAVAILABLE ((FT_Pointer)-2) /* magic number */
|
||||
|
||||
/* ensure that value `1' has the same width as a pointer */
|
||||
#define FT_SERVICE_UNAVAILABLE ((FT_Pointer)~(FT_PtrDist)1)
|
||||
|
||||
|
||||
/*
|
||||
@@ -603,6 +745,7 @@ FT_BEGIN_HEADER
|
||||
#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_TT_CMAP_H <freetype/internal/services/svttcmap.h>
|
||||
|
||||
+98
-101
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Stream handling (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2004, 2005, 2006 by */
|
||||
/* Copyright 1996-2002, 2004-2006, 2011, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -154,67 +154,60 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
|
||||
#define FT_BYTE_( p, i ) ( ((const FT_Byte*)(p))[(i)] )
|
||||
#define FT_INT8_( p, i ) ( ((const FT_Char*)(p))[(i)] )
|
||||
|
||||
#define FT_INT16( x ) ( (FT_Int16)(x) )
|
||||
#define FT_UINT16( x ) ( (FT_UInt16)(x) )
|
||||
#define FT_INT32( x ) ( (FT_Int32)(x) )
|
||||
#define FT_UINT32( x ) ( (FT_UInt32)(x) )
|
||||
|
||||
#define FT_BYTE_I16( p, i, s ) ( FT_INT16( FT_BYTE_( p, i ) ) << (s) )
|
||||
|
||||
#define FT_BYTE_U16( p, i, s ) ( FT_UINT16( FT_BYTE_( p, i ) ) << (s) )
|
||||
#define FT_BYTE_I32( p, i, s ) ( FT_INT32( FT_BYTE_( p, i ) ) << (s) )
|
||||
#define FT_BYTE_U32( p, i, s ) ( FT_UINT32( FT_BYTE_( p, i ) ) << (s) )
|
||||
|
||||
#define FT_INT8_I16( p, i, s ) ( FT_INT16( FT_INT8_( p, i ) ) << (s) )
|
||||
#define FT_INT8_U16( p, i, s ) ( FT_UINT16( FT_INT8_( p, i ) ) << (s) )
|
||||
#define FT_INT8_I32( p, i, s ) ( FT_INT32( FT_INT8_( p, i ) ) << (s) )
|
||||
#define FT_INT8_U32( p, i, s ) ( FT_UINT32( FT_INT8_( p, i ) ) << (s) )
|
||||
|
||||
|
||||
#define FT_PEEK_SHORT( p ) FT_INT16( FT_INT8_I16( p, 0, 8) | \
|
||||
FT_BYTE_I16( 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 ) )
|
||||
|
||||
#define FT_PEEK_LONG( p ) FT_INT32( FT_INT8_I32( p, 0, 24 ) | \
|
||||
FT_BYTE_I32( p, 1, 16 ) | \
|
||||
FT_BYTE_I32( p, 2, 8 ) | \
|
||||
FT_BYTE_I32( p, 3, 0 ) )
|
||||
#define FT_PEEK_LONG( p ) FT_INT32( FT_BYTE_U32( p, 0, 24 ) | \
|
||||
FT_BYTE_U32( p, 1, 16 ) | \
|
||||
FT_BYTE_U32( p, 2, 8 ) | \
|
||||
FT_BYTE_U32( p, 3, 0 ) )
|
||||
|
||||
#define FT_PEEK_ULONG( p ) FT_UINT32( FT_BYTE_U32( p, 0, 24 ) | \
|
||||
FT_BYTE_U32( p, 1, 16 ) | \
|
||||
FT_BYTE_U32( p, 2, 8 ) | \
|
||||
FT_BYTE_U32( p, 3, 0 ) )
|
||||
|
||||
#define FT_PEEK_OFF3( p ) FT_INT32( FT_INT8_I32( p, 0, 16 ) | \
|
||||
FT_BYTE_I32( p, 1, 8 ) | \
|
||||
FT_BYTE_I32( p, 2, 0 ) )
|
||||
#define FT_PEEK_OFF3( p ) FT_INT32( FT_BYTE_U32( p, 0, 16 ) | \
|
||||
FT_BYTE_U32( p, 1, 8 ) | \
|
||||
FT_BYTE_U32( p, 2, 0 ) )
|
||||
|
||||
#define FT_PEEK_UOFF3( p ) FT_UINT32( FT_BYTE_U32( p, 0, 16 ) | \
|
||||
FT_BYTE_U32( p, 1, 8 ) | \
|
||||
FT_BYTE_U32( p, 2, 0 ) )
|
||||
|
||||
#define FT_PEEK_SHORT_LE( p ) FT_INT16( FT_INT8_I16( p, 1, 8 ) | \
|
||||
FT_BYTE_I16( p, 0, 0 ) )
|
||||
#define FT_PEEK_SHORT_LE( p ) FT_INT16( FT_BYTE_U16( p, 1, 8 ) | \
|
||||
FT_BYTE_U16( p, 0, 0 ) )
|
||||
|
||||
#define FT_PEEK_USHORT_LE( p ) FT_UINT16( FT_BYTE_U16( p, 1, 8 ) | \
|
||||
FT_BYTE_U16( p, 0, 0 ) )
|
||||
|
||||
#define FT_PEEK_LONG_LE( p ) FT_INT32( FT_INT8_I32( p, 3, 24 ) | \
|
||||
FT_BYTE_I32( p, 2, 16 ) | \
|
||||
FT_BYTE_I32( p, 1, 8 ) | \
|
||||
FT_BYTE_I32( p, 0, 0 ) )
|
||||
#define FT_PEEK_LONG_LE( p ) FT_INT32( FT_BYTE_U32( p, 3, 24 ) | \
|
||||
FT_BYTE_U32( p, 2, 16 ) | \
|
||||
FT_BYTE_U32( p, 1, 8 ) | \
|
||||
FT_BYTE_U32( p, 0, 0 ) )
|
||||
|
||||
#define FT_PEEK_ULONG_LE( p ) FT_UINT32( FT_BYTE_U32( p, 3, 24 ) | \
|
||||
FT_BYTE_U32( p, 2, 16 ) | \
|
||||
FT_BYTE_U32( p, 1, 8 ) | \
|
||||
FT_BYTE_U32( p, 0, 0 ) )
|
||||
|
||||
#define FT_PEEK_OFF3_LE( p ) FT_INT32( FT_INT8_I32( p, 2, 16 ) | \
|
||||
FT_BYTE_I32( p, 1, 8 ) | \
|
||||
FT_BYTE_I32( p, 0, 0 ) )
|
||||
#define FT_PEEK_OFF3_LE( p ) FT_INT32( FT_BYTE_U32( p, 2, 16 ) | \
|
||||
FT_BYTE_U32( p, 1, 8 ) | \
|
||||
FT_BYTE_U32( p, 0, 0 ) )
|
||||
|
||||
#define FT_PEEK_UOFF3_LE( p ) FT_UINT32( FT_BYTE_U32( p, 2, 16 ) | \
|
||||
FT_BYTE_U32( p, 1, 8 ) | \
|
||||
@@ -292,18 +285,18 @@ FT_BEGIN_HEADER
|
||||
|
||||
#define FT_GET_CHAR() FT_GET_MACRO( FT_Stream_GetChar, FT_Char )
|
||||
#define FT_GET_BYTE() FT_GET_MACRO( FT_Stream_GetChar, FT_Byte )
|
||||
#define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetShort, FT_Short )
|
||||
#define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetShort, FT_UShort )
|
||||
#define FT_GET_OFF3() FT_GET_MACRO( FT_Stream_GetOffset, FT_Long )
|
||||
#define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetOffset, FT_ULong )
|
||||
#define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetLong, FT_Long )
|
||||
#define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetLong, FT_ULong )
|
||||
#define FT_GET_TAG4() FT_GET_MACRO( FT_Stream_GetLong, FT_ULong )
|
||||
#define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_Short )
|
||||
#define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_UShort )
|
||||
#define FT_GET_OFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_Long )
|
||||
#define FT_GET_UOFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_ULong )
|
||||
#define FT_GET_LONG() FT_GET_MACRO( FT_Stream_GetULong, FT_Long )
|
||||
#define FT_GET_ULONG() FT_GET_MACRO( FT_Stream_GetULong, FT_ULong )
|
||||
#define FT_GET_TAG4() FT_GET_MACRO( FT_Stream_GetULong, FT_ULong )
|
||||
|
||||
#define FT_GET_SHORT_LE() FT_GET_MACRO( FT_Stream_GetShortLE, FT_Short )
|
||||
#define FT_GET_USHORT_LE() FT_GET_MACRO( FT_Stream_GetShortLE, FT_UShort )
|
||||
#define FT_GET_LONG_LE() FT_GET_MACRO( FT_Stream_GetLongLE, FT_Long )
|
||||
#define FT_GET_ULONG_LE() FT_GET_MACRO( FT_Stream_GetLongLE, FT_ULong )
|
||||
#define FT_GET_SHORT_LE() FT_GET_MACRO( FT_Stream_GetUShortLE, FT_Short )
|
||||
#define FT_GET_USHORT_LE() FT_GET_MACRO( FT_Stream_GetUShortLE, FT_UShort )
|
||||
#define FT_GET_LONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_Long )
|
||||
#define FT_GET_ULONG_LE() FT_GET_MACRO( FT_Stream_GetULongLE, FT_ULong )
|
||||
#endif
|
||||
|
||||
#define FT_READ_MACRO( func, type, var ) \
|
||||
@@ -312,17 +305,17 @@ FT_BEGIN_HEADER
|
||||
|
||||
#define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Byte, var )
|
||||
#define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Char, var )
|
||||
#define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadShort, FT_Short, var )
|
||||
#define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadShort, FT_UShort, var )
|
||||
#define FT_READ_OFF3( var ) FT_READ_MACRO( FT_Stream_ReadOffset, FT_Long, var )
|
||||
#define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadOffset, FT_ULong, var )
|
||||
#define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadLong, FT_Long, var )
|
||||
#define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadLong, FT_ULong, var )
|
||||
#define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_Short, var )
|
||||
#define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_UShort, var )
|
||||
#define FT_READ_OFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_Long, var )
|
||||
#define FT_READ_UOFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_ULong, var )
|
||||
#define FT_READ_LONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_Long, var )
|
||||
#define FT_READ_ULONG( var ) FT_READ_MACRO( FT_Stream_ReadULong, FT_ULong, var )
|
||||
|
||||
#define FT_READ_SHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadShortLE, FT_Short, var )
|
||||
#define FT_READ_USHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadShortLE, FT_UShort, var )
|
||||
#define FT_READ_LONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadLongLE, FT_Long, var )
|
||||
#define FT_READ_ULONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadLongLE, FT_ULong, var )
|
||||
#define FT_READ_SHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_Short, var )
|
||||
#define FT_READ_USHORT_LE( var ) FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_UShort, var )
|
||||
#define FT_READ_LONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadULongLE, FT_Long, var )
|
||||
#define FT_READ_ULONG_LE( var ) FT_READ_MACRO( FT_Stream_ReadULongLE, FT_ULong, var )
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
|
||||
@@ -431,25 +424,25 @@ FT_BEGIN_HEADER
|
||||
FT_BASE( FT_Char )
|
||||
FT_Stream_GetChar( FT_Stream stream );
|
||||
|
||||
/* read a 16-bit big-endian integer from an entered frame */
|
||||
FT_BASE( FT_Short )
|
||||
FT_Stream_GetShort( FT_Stream stream );
|
||||
/* read a 16-bit big-endian unsigned integer from an entered frame */
|
||||
FT_BASE( FT_UShort )
|
||||
FT_Stream_GetUShort( FT_Stream stream );
|
||||
|
||||
/* read a 24-bit big-endian integer from an entered frame */
|
||||
FT_BASE( FT_Long )
|
||||
FT_Stream_GetOffset( FT_Stream stream );
|
||||
/* read a 24-bit big-endian unsigned integer from an entered frame */
|
||||
FT_BASE( FT_ULong )
|
||||
FT_Stream_GetUOffset( FT_Stream stream );
|
||||
|
||||
/* read a 32-bit big-endian integer from an entered frame */
|
||||
FT_BASE( FT_Long )
|
||||
FT_Stream_GetLong( FT_Stream stream );
|
||||
/* read a 32-bit big-endian unsigned integer from an entered frame */
|
||||
FT_BASE( FT_ULong )
|
||||
FT_Stream_GetULong( FT_Stream stream );
|
||||
|
||||
/* read a 16-bit little-endian integer from an entered frame */
|
||||
FT_BASE( FT_Short )
|
||||
FT_Stream_GetShortLE( FT_Stream stream );
|
||||
/* read a 16-bit little-endian unsigned integer from an entered frame */
|
||||
FT_BASE( FT_UShort )
|
||||
FT_Stream_GetUShortLE( FT_Stream stream );
|
||||
|
||||
/* read a 32-bit little-endian integer from an entered frame */
|
||||
FT_BASE( FT_Long )
|
||||
FT_Stream_GetLongLE( FT_Stream stream );
|
||||
/* read a 32-bit little-endian unsigned integer from an entered frame */
|
||||
FT_BASE( FT_ULong )
|
||||
FT_Stream_GetULongLE( FT_Stream stream );
|
||||
|
||||
|
||||
/* read a byte from a stream */
|
||||
@@ -457,30 +450,30 @@ FT_BEGIN_HEADER
|
||||
FT_Stream_ReadChar( FT_Stream stream,
|
||||
FT_Error* error );
|
||||
|
||||
/* read a 16-bit big-endian integer from a stream */
|
||||
FT_BASE( FT_Short )
|
||||
FT_Stream_ReadShort( FT_Stream stream,
|
||||
FT_Error* error );
|
||||
|
||||
/* read a 24-bit big-endian integer from a stream */
|
||||
FT_BASE( FT_Long )
|
||||
FT_Stream_ReadOffset( FT_Stream stream,
|
||||
/* read a 16-bit big-endian unsigned integer from a stream */
|
||||
FT_BASE( FT_UShort )
|
||||
FT_Stream_ReadUShort( FT_Stream stream,
|
||||
FT_Error* error );
|
||||
|
||||
/* read a 32-bit big-endian integer from a stream */
|
||||
FT_BASE( FT_Long )
|
||||
FT_Stream_ReadLong( FT_Stream stream,
|
||||
FT_Error* error );
|
||||
|
||||
/* read a 16-bit little-endian integer from a stream */
|
||||
FT_BASE( FT_Short )
|
||||
FT_Stream_ReadShortLE( FT_Stream stream,
|
||||
/* read a 24-bit big-endian unsigned integer from a stream */
|
||||
FT_BASE( FT_ULong )
|
||||
FT_Stream_ReadUOffset( FT_Stream stream,
|
||||
FT_Error* error );
|
||||
|
||||
/* read a 32-bit little-endian integer from a stream */
|
||||
FT_BASE( FT_Long )
|
||||
FT_Stream_ReadLongLE( FT_Stream stream,
|
||||
FT_Error* error );
|
||||
/* read a 32-bit big-endian integer from a stream */
|
||||
FT_BASE( FT_ULong )
|
||||
FT_Stream_ReadULong( FT_Stream stream,
|
||||
FT_Error* error );
|
||||
|
||||
/* read a 16-bit little-endian unsigned integer from a stream */
|
||||
FT_BASE( FT_UShort )
|
||||
FT_Stream_ReadUShortLE( FT_Stream stream,
|
||||
FT_Error* error );
|
||||
|
||||
/* read a 32-bit little-endian unsigned integer from a stream */
|
||||
FT_BASE( FT_ULong )
|
||||
FT_Stream_ReadULongLE( FT_Stream stream,
|
||||
FT_Error* error );
|
||||
|
||||
/* Read a structure from a stream. The structure must be described */
|
||||
/* by an array of FT_Frame_Field records. */
|
||||
@@ -493,37 +486,41 @@ FT_BEGIN_HEADER
|
||||
#define FT_STREAM_POS() \
|
||||
FT_Stream_Pos( stream )
|
||||
|
||||
#define FT_STREAM_SEEK( position ) \
|
||||
FT_SET_ERROR( FT_Stream_Seek( stream, position ) )
|
||||
#define FT_STREAM_SEEK( position ) \
|
||||
FT_SET_ERROR( FT_Stream_Seek( stream, \
|
||||
(FT_ULong)(position) ) )
|
||||
|
||||
#define FT_STREAM_SKIP( distance ) \
|
||||
FT_SET_ERROR( FT_Stream_Skip( stream, distance ) )
|
||||
#define FT_STREAM_SKIP( distance ) \
|
||||
FT_SET_ERROR( FT_Stream_Skip( stream, \
|
||||
(FT_Long)(distance) ) )
|
||||
|
||||
#define FT_STREAM_READ( buffer, count ) \
|
||||
FT_SET_ERROR( FT_Stream_Read( stream, \
|
||||
(FT_Byte*)buffer, \
|
||||
count ) )
|
||||
#define FT_STREAM_READ( buffer, count ) \
|
||||
FT_SET_ERROR( FT_Stream_Read( stream, \
|
||||
(FT_Byte*)(buffer), \
|
||||
(FT_ULong)(count) ) )
|
||||
|
||||
#define FT_STREAM_READ_AT( position, buffer, count ) \
|
||||
FT_SET_ERROR( FT_Stream_ReadAt( stream, \
|
||||
position, \
|
||||
(FT_Byte*)buffer, \
|
||||
count ) )
|
||||
#define FT_STREAM_READ_AT( position, buffer, count ) \
|
||||
FT_SET_ERROR( FT_Stream_ReadAt( stream, \
|
||||
(FT_ULong)(position), \
|
||||
(FT_Byte*)buffer, \
|
||||
(FT_ULong)(count) ) )
|
||||
|
||||
#define FT_STREAM_READ_FIELDS( fields, object ) \
|
||||
FT_SET_ERROR( FT_Stream_ReadFields( stream, fields, object ) )
|
||||
|
||||
|
||||
#define FT_FRAME_ENTER( size ) \
|
||||
FT_SET_ERROR( \
|
||||
FT_DEBUG_INNER( FT_Stream_EnterFrame( stream, size ) ) )
|
||||
#define FT_FRAME_ENTER( size ) \
|
||||
FT_SET_ERROR( \
|
||||
FT_DEBUG_INNER( FT_Stream_EnterFrame( stream, \
|
||||
(FT_ULong)(size) ) ) )
|
||||
|
||||
#define FT_FRAME_EXIT() \
|
||||
#define FT_FRAME_EXIT() \
|
||||
FT_DEBUG_INNER( FT_Stream_ExitFrame( stream ) )
|
||||
|
||||
#define FT_FRAME_EXTRACT( size, bytes ) \
|
||||
FT_SET_ERROR( \
|
||||
FT_DEBUG_INNER( FT_Stream_ExtractFrame( stream, size, \
|
||||
FT_DEBUG_INNER( FT_Stream_ExtractFrame( stream, \
|
||||
(FT_ULong)(size), \
|
||||
(FT_Byte**)&(bytes) ) ) )
|
||||
|
||||
#define FT_FRAME_RELEASE( bytes ) \
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Tracing handling (specification only). */
|
||||
/* */
|
||||
/* Copyright 2002, 2004, 2005, 2006, 2007 by */
|
||||
/* Copyright 2002, 2004-2007, 2009, 2011-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -38,6 +38,7 @@ FT_TRACE_DEF( smooth ) /* anti-aliasing raster (ftgrays.c) */
|
||||
FT_TRACE_DEF( mm ) /* MM interface (ftmm.c) */
|
||||
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) */
|
||||
|
||||
/* Cache sub-system */
|
||||
FT_TRACE_DEF( cache ) /* cache sub-system (ftcache.c, etc.) */
|
||||
@@ -73,6 +74,7 @@ FT_TRACE_DEF( t1parse )
|
||||
/* PostScript helper module `psaux' */
|
||||
FT_TRACE_DEF( t1decode )
|
||||
FT_TRACE_DEF( psobjs )
|
||||
FT_TRACE_DEF( psconv )
|
||||
|
||||
/* PostScript hinting module `pshinter' */
|
||||
FT_TRACE_DEF( pshrec )
|
||||
@@ -86,6 +88,10 @@ FT_TRACE_DEF( cffload )
|
||||
FT_TRACE_DEF( cffobjs )
|
||||
FT_TRACE_DEF( cffparse )
|
||||
|
||||
FT_TRACE_DEF( cf2blues )
|
||||
FT_TRACE_DEF( cf2hints )
|
||||
FT_TRACE_DEF( cf2interp )
|
||||
|
||||
/* Type 42 driver component */
|
||||
FT_TRACE_DEF( t42 )
|
||||
|
||||
@@ -135,5 +141,12 @@ FT_TRACE_DEF( gxvtrak )
|
||||
FT_TRACE_DEF( gxvprop )
|
||||
FT_TRACE_DEF( gxvlcar )
|
||||
|
||||
/* autofit components */
|
||||
FT_TRACE_DEF( afmodule )
|
||||
FT_TRACE_DEF( afhints )
|
||||
FT_TRACE_DEF( afcjk )
|
||||
FT_TRACE_DEF( aflatin )
|
||||
FT_TRACE_DEF( aflatin2 )
|
||||
FT_TRACE_DEF( afwarp )
|
||||
|
||||
/* END */
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* FreeType validation support (specification). */
|
||||
/* */
|
||||
/* Copyright 2004 by */
|
||||
/* Copyright 2004, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -76,6 +76,14 @@ FT_BEGIN_HEADER
|
||||
} FT_ValidationLevel;
|
||||
|
||||
|
||||
#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */
|
||||
/* We disable the warning `structure was padded due to */
|
||||
/* __declspec(align())' in order to compile cleanly with */
|
||||
/* the maximum level of warnings. */
|
||||
#pragma warning( push )
|
||||
#pragma warning( disable : 4324 )
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
/* validator structure */
|
||||
typedef struct FT_ValidatorRec_
|
||||
{
|
||||
@@ -88,8 +96,11 @@ FT_BEGIN_HEADER
|
||||
|
||||
} FT_ValidatorRec;
|
||||
|
||||
#if defined( _MSC_VER )
|
||||
#pragma warning( pop )
|
||||
#endif
|
||||
|
||||
#define FT_VALIDATOR( x ) ((FT_Validator)( x ))
|
||||
#define FT_VALIDATOR( x ) ( (FT_Validator)( x ) )
|
||||
|
||||
|
||||
FT_BASE( void )
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Internal header files (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004 by */
|
||||
/* Copyright 1996-2004, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -48,4 +48,16 @@
|
||||
#define FT_INTERNAL_AUTOHINT_H <freetype/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 */
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
/* pcftypes.h
|
||||
|
||||
FreeType font driver for pcf fonts
|
||||
|
||||
Copyright (C) 2000, 2001, 2002 by
|
||||
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
|
||||
AUTHORS OR COPYRIGHT HOLDERS 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.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __PCFTYPES_H__
|
||||
#define __PCFTYPES_H__
|
||||
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
typedef struct PCF_Public_FaceRec_
|
||||
{
|
||||
FT_FaceRec root;
|
||||
FT_StreamRec gzip_stream;
|
||||
FT_Stream gzip_source;
|
||||
|
||||
char* charset_encoding;
|
||||
char* charset_registry;
|
||||
|
||||
} PCF_Public_FaceRec, *PCF_Public_Face;
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __PCFTYPES_H__ */
|
||||
|
||||
|
||||
/* END */
|
||||
@@ -5,7 +5,7 @@
|
||||
/* Auxiliary functions and data structures related to PostScript fonts */
|
||||
/* (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008, 2009 by */
|
||||
/* Copyright 1996-2004, 2006, 2008, 2009, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -101,6 +101,9 @@ FT_BEGIN_HEADER
|
||||
/* capacity :: The current size of the heap block. Increments by */
|
||||
/* 1kByte chunks. */
|
||||
/* */
|
||||
/* init :: Set to 0xDEADBEEF if `elements' and `lengths' have */
|
||||
/* been allocated. */
|
||||
/* */
|
||||
/* max_elems :: The maximum number of elements in table. */
|
||||
/* */
|
||||
/* num_elems :: The current number of elements in table. */
|
||||
@@ -183,6 +186,7 @@ FT_BEGIN_HEADER
|
||||
T1_FIELD_TYPE_STRING,
|
||||
T1_FIELD_TYPE_KEY,
|
||||
T1_FIELD_TYPE_BBOX,
|
||||
T1_FIELD_TYPE_MM_BBOX,
|
||||
T1_FIELD_TYPE_INTEGER_ARRAY,
|
||||
T1_FIELD_TYPE_FIXED_ARRAY,
|
||||
T1_FIELD_TYPE_CALLBACK,
|
||||
@@ -225,7 +229,7 @@ FT_BEGIN_HEADER
|
||||
T1_Field_ParseFunc reader;
|
||||
FT_UInt offset; /* offset of field in object */
|
||||
FT_Byte size; /* size of field in bytes */
|
||||
FT_UInt array_max; /* maximal number of elements for */
|
||||
FT_UInt array_max; /* maximum number of elements for */
|
||||
/* array */
|
||||
FT_UInt count_offset; /* offset of element count for */
|
||||
/* arrays; must not be zero if in */
|
||||
@@ -531,7 +535,7 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* max_points :: maximum points in builder outline */
|
||||
/* */
|
||||
/* max_contours :: Maximal number of contours in builder outline. */
|
||||
/* max_contours :: Maximum number of contours in builder outline. */
|
||||
/* */
|
||||
/* pos_x :: The horizontal translation (if composite glyph). */
|
||||
/* */
|
||||
|
||||
@@ -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, 2002, 2003, 2005, 2006, 2007, 2009 by */
|
||||
/* Copyright 2001-2003, 2005-2007, 2009, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -679,30 +679,40 @@ FT_BEGIN_HEADER
|
||||
|
||||
typedef PSHinter_Interface* PSHinter_Service;
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_PSHINTER_INTERFACE(class_, get_globals_funcs_, \
|
||||
get_t1_funcs_, get_t2_funcs_) \
|
||||
static const PSHinter_Interface class_ = \
|
||||
{ \
|
||||
get_globals_funcs_, get_t1_funcs_, get_t2_funcs_ \
|
||||
#define FT_DEFINE_PSHINTER_INTERFACE( \
|
||||
class_, \
|
||||
get_globals_funcs_, \
|
||||
get_t1_funcs_, \
|
||||
get_t2_funcs_ ) \
|
||||
static const PSHinter_Interface class_ = \
|
||||
{ \
|
||||
get_globals_funcs_, \
|
||||
get_t1_funcs_, \
|
||||
get_t2_funcs_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_PSHINTER_INTERFACE(class_, get_globals_funcs_, \
|
||||
get_t1_funcs_, get_t2_funcs_) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Library library, \
|
||||
PSHinter_Interface* clazz) \
|
||||
{ \
|
||||
FT_UNUSED(library); \
|
||||
clazz->get_globals_funcs = get_globals_funcs_; \
|
||||
clazz->get_t1_funcs = get_t1_funcs_; \
|
||||
clazz->get_t2_funcs = get_t2_funcs_; \
|
||||
}
|
||||
#define FT_DEFINE_PSHINTER_INTERFACE( \
|
||||
class_, \
|
||||
get_globals_funcs_, \
|
||||
get_t1_funcs_, \
|
||||
get_t2_funcs_ ) \
|
||||
void \
|
||||
FT_Init_Class_ ## class_( FT_Library library, \
|
||||
PSHinter_Interface* clazz ) \
|
||||
{ \
|
||||
FT_UNUSED( library ); \
|
||||
\
|
||||
clazz->get_globals_funcs = get_globals_funcs_; \
|
||||
clazz->get_t1_funcs = get_t1_funcs_; \
|
||||
clazz->get_t2_funcs = get_t2_funcs_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType BDF services (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* Copyright 2003, 2009, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -45,25 +45,30 @@ FT_BEGIN_HEADER
|
||||
FT_BDF_GetPropertyFunc get_property;
|
||||
};
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICE_BDFRec(class_, get_charset_id_, get_property_) \
|
||||
static const FT_Service_BDFRec class_ = \
|
||||
#define FT_DEFINE_SERVICE_BDFRec( class_, \
|
||||
get_charset_id_, \
|
||||
get_property_ ) \
|
||||
static const FT_Service_BDFRec class_ = \
|
||||
{ \
|
||||
get_charset_id_, get_property_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICE_BDFRec(class_, get_charset_id_, get_property_) \
|
||||
#define FT_DEFINE_SERVICE_BDFRec( class_, \
|
||||
get_charset_id_, \
|
||||
get_property_ ) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Service_BDFRec* clazz ) \
|
||||
FT_Init_Class_ ## class_( FT_Service_BDFRec* clazz ) \
|
||||
{ \
|
||||
clazz->get_charset_id = get_charset_id_; \
|
||||
clazz->get_property = get_property_; \
|
||||
}
|
||||
clazz->get_property = get_property_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType CID font services (specification). */
|
||||
/* */
|
||||
/* Copyright 2007, 2009 by Derek Clegg, Michael Toftdal. */
|
||||
/* Copyright 2007, 2009, 2012 by Derek Clegg, Michael Toftdal. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
@@ -46,30 +46,36 @@ FT_BEGIN_HEADER
|
||||
FT_CID_GetCIDFromGlyphIndexFunc get_cid_from_glyph_index;
|
||||
};
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICE_CIDREC(class_, get_ros_, \
|
||||
get_is_cid_, get_cid_from_glyph_index_ ) \
|
||||
static const FT_Service_CIDRec class_ = \
|
||||
{ \
|
||||
get_ros_, get_is_cid_, get_cid_from_glyph_index_ \
|
||||
#define FT_DEFINE_SERVICE_CIDREC( class_, \
|
||||
get_ros_, \
|
||||
get_is_cid_, \
|
||||
get_cid_from_glyph_index_ ) \
|
||||
static const FT_Service_CIDRec class_ = \
|
||||
{ \
|
||||
get_ros_, get_is_cid_, get_cid_from_glyph_index_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICE_CIDREC(class_, get_ros_, \
|
||||
get_is_cid_, get_cid_from_glyph_index_ ) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Library library, \
|
||||
FT_Service_CIDRec* clazz) \
|
||||
{ \
|
||||
FT_UNUSED(library); \
|
||||
clazz->get_ros = get_ros_; \
|
||||
clazz->get_is_cid = get_is_cid_; \
|
||||
clazz->get_cid_from_glyph_index = get_cid_from_glyph_index_; \
|
||||
}
|
||||
#define FT_DEFINE_SERVICE_CIDREC( class_, \
|
||||
get_ros_, \
|
||||
get_is_cid_, \
|
||||
get_cid_from_glyph_index_ ) \
|
||||
void \
|
||||
FT_Init_Class_ ## class_( FT_Library library, \
|
||||
FT_Service_CIDRec* clazz ) \
|
||||
{ \
|
||||
FT_UNUSED( library ); \
|
||||
\
|
||||
clazz->get_ros = get_ros_; \
|
||||
clazz->get_is_cid = get_is_cid_; \
|
||||
clazz->get_cid_from_glyph_index = get_cid_from_glyph_index_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
+17
-11
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType glyph dictionary services (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* Copyright 2003, 2009, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -51,27 +51,33 @@ FT_BEGIN_HEADER
|
||||
FT_GlyphDict_NameIndexFunc name_index; /* optional */
|
||||
};
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICE_GLYPHDICTREC(class_, get_name_, name_index_) \
|
||||
static const FT_Service_GlyphDictRec class_ = \
|
||||
#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \
|
||||
get_name_, \
|
||||
name_index_) \
|
||||
static const FT_Service_GlyphDictRec class_ = \
|
||||
{ \
|
||||
get_name_, name_index_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICE_GLYPHDICTREC(class_, get_name_, name_index_) \
|
||||
#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_, \
|
||||
get_name_, \
|
||||
name_index_) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Library library, \
|
||||
FT_Service_GlyphDictRec* clazz) \
|
||||
FT_Init_Class_ ## class_( FT_Library library, \
|
||||
FT_Service_GlyphDictRec* clazz ) \
|
||||
{ \
|
||||
FT_UNUSED(library); \
|
||||
clazz->get_name = get_name_; \
|
||||
FT_UNUSED( library ); \
|
||||
\
|
||||
clazz->get_name = get_name_; \
|
||||
clazz->name_index = name_index_; \
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType Multiple Masters and GX var services (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004 by */
|
||||
/* Copyright 2003, 2004, 2009, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -68,30 +68,39 @@ FT_BEGIN_HEADER
|
||||
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_ \
|
||||
#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 */
|
||||
#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_; \
|
||||
}
|
||||
#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 */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
+17
-15
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType PostScript name services (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2007 by */
|
||||
/* Copyright 2003, 2007, 2009, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -46,26 +46,28 @@ FT_BEGIN_HEADER
|
||||
FT_PsName_GetFunc get_ps_font_name;
|
||||
};
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICE_PSFONTNAMEREC(class_, get_ps_font_name_) \
|
||||
static const FT_Service_PsFontNameRec class_ = \
|
||||
{ \
|
||||
get_ps_font_name_ \
|
||||
#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \
|
||||
static const FT_Service_PsFontNameRec class_ = \
|
||||
{ \
|
||||
get_ps_font_name_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICE_PSFONTNAMEREC(class_, get_ps_font_name_) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Library library, \
|
||||
FT_Service_PsFontNameRec* clazz) \
|
||||
{ \
|
||||
FT_UNUSED(library); \
|
||||
clazz->get_ps_font_name = get_ps_font_name_; \
|
||||
}
|
||||
#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \
|
||||
void \
|
||||
FT_Init_Class_ ## class_( FT_Library library, \
|
||||
FT_Service_PsFontNameRec* clazz ) \
|
||||
{ \
|
||||
FT_UNUSED( library ); \
|
||||
\
|
||||
clazz->get_ps_font_name = get_ps_font_name_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* svprop.h */
|
||||
/* */
|
||||
/* The FreeType property service (specification). */
|
||||
/* */
|
||||
/* Copyright 2012 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 __SVPROP_H__
|
||||
#define __SVPROP_H__
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#define FT_SERVICE_ID_PROPERTIES "properties"
|
||||
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Properties_SetFunc)( FT_Module module,
|
||||
const char* property_name,
|
||||
const void* value );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Properties_GetFunc)( FT_Module module,
|
||||
const char* property_name,
|
||||
void* value );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( Properties )
|
||||
{
|
||||
FT_Properties_SetFunc set_property;
|
||||
FT_Properties_GetFunc get_property;
|
||||
};
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICE_PROPERTIESREC( class_, \
|
||||
set_property_, \
|
||||
get_property_ ) \
|
||||
static const FT_Service_PropertiesRec class_ = \
|
||||
{ \
|
||||
set_property_, \
|
||||
get_property_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICE_PROPERTIESREC( class_, \
|
||||
set_property_, \
|
||||
get_property_ ) \
|
||||
void \
|
||||
FT_Init_Class_ ## class_( FT_Service_PropertiesRec* clazz ) \
|
||||
{ \
|
||||
clazz->set_property = set_property_; \
|
||||
clazz->get_property = get_property_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __SVPROP_H__ */
|
||||
|
||||
|
||||
/* END */
|
||||
+41
-28
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType PostScript charmap service (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2006 by */
|
||||
/* Copyright 2003, 2006, 2009, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -120,37 +120,50 @@ FT_BEGIN_HEADER
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICE_PSCMAPSREC(class_, unicode_value_, unicodes_init_, \
|
||||
unicodes_char_index_, unicodes_char_next_, macintosh_name_, \
|
||||
adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_) \
|
||||
static const FT_Service_PsCMapsRec class_ = \
|
||||
{ \
|
||||
unicode_value_, unicodes_init_, \
|
||||
unicodes_char_index_, unicodes_char_next_, macintosh_name_, \
|
||||
adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_ \
|
||||
#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \
|
||||
unicode_value_, \
|
||||
unicodes_init_, \
|
||||
unicodes_char_index_, \
|
||||
unicodes_char_next_, \
|
||||
macintosh_name_, \
|
||||
adobe_std_strings_, \
|
||||
adobe_std_encoding_, \
|
||||
adobe_expert_encoding_ ) \
|
||||
static const FT_Service_PsCMapsRec class_ = \
|
||||
{ \
|
||||
unicode_value_, unicodes_init_, \
|
||||
unicodes_char_index_, unicodes_char_next_, macintosh_name_, \
|
||||
adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICE_PSCMAPSREC(class_, unicode_value_, unicodes_init_, \
|
||||
unicodes_char_index_, unicodes_char_next_, macintosh_name_, \
|
||||
adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Library library, \
|
||||
FT_Service_PsCMapsRec* clazz) \
|
||||
{ \
|
||||
FT_UNUSED(library); \
|
||||
clazz->unicode_value = unicode_value_; \
|
||||
clazz->unicodes_init = unicodes_init_; \
|
||||
clazz->unicodes_char_index = unicodes_char_index_; \
|
||||
clazz->unicodes_char_next = unicodes_char_next_; \
|
||||
clazz->macintosh_name = macintosh_name_; \
|
||||
clazz->adobe_std_strings = adobe_std_strings_; \
|
||||
clazz->adobe_std_encoding = adobe_std_encoding_; \
|
||||
clazz->adobe_expert_encoding = adobe_expert_encoding_; \
|
||||
}
|
||||
#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \
|
||||
unicode_value_, \
|
||||
unicodes_init_, \
|
||||
unicodes_char_index_, \
|
||||
unicodes_char_next_, \
|
||||
macintosh_name_, \
|
||||
adobe_std_strings_, \
|
||||
adobe_std_encoding_, \
|
||||
adobe_expert_encoding_ ) \
|
||||
void \
|
||||
FT_Init_Class_ ## class_( FT_Library library, \
|
||||
FT_Service_PsCMapsRec* clazz ) \
|
||||
{ \
|
||||
FT_UNUSED( library ); \
|
||||
\
|
||||
clazz->unicode_value = unicode_value_; \
|
||||
clazz->unicodes_init = unicodes_init_; \
|
||||
clazz->unicodes_char_index = unicodes_char_index_; \
|
||||
clazz->unicodes_char_next = unicodes_char_next_; \
|
||||
clazz->macintosh_name = macintosh_name_; \
|
||||
clazz->adobe_std_strings = adobe_std_strings_; \
|
||||
clazz->adobe_std_encoding = adobe_std_encoding_; \
|
||||
clazz->adobe_expert_encoding = adobe_expert_encoding_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
+36
-17
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType PostScript info service (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2009 by */
|
||||
/* Copyright 2003, 2004, 2009, 2011, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -38,12 +38,19 @@ FT_BEGIN_HEADER
|
||||
PS_FontExtraRec* afont_extra );
|
||||
|
||||
typedef FT_Int
|
||||
(*PS_HasGlyphNamesFunc)( FT_Face face );
|
||||
(*PS_HasGlyphNamesFunc)( FT_Face face );
|
||||
|
||||
typedef FT_Error
|
||||
(*PS_GetFontPrivateFunc)( FT_Face face,
|
||||
PS_PrivateRec* afont_private );
|
||||
|
||||
typedef FT_Long
|
||||
(*PS_GetFontValueFunc)( FT_Face face,
|
||||
PS_Dict_Keys key,
|
||||
FT_UInt idx,
|
||||
void *value,
|
||||
FT_Long value_len );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( PsInfo )
|
||||
{
|
||||
@@ -51,34 +58,46 @@ FT_BEGIN_HEADER
|
||||
PS_GetFontExtraFunc ps_get_font_extra;
|
||||
PS_HasGlyphNamesFunc ps_has_glyph_names;
|
||||
PS_GetFontPrivateFunc ps_get_font_private;
|
||||
PS_GetFontValueFunc ps_get_font_value;
|
||||
};
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICE_PSINFOREC(class_, get_font_info_, \
|
||||
ps_get_font_extra_, has_glyph_names_, get_font_private_) \
|
||||
static const FT_Service_PsInfoRec class_ = \
|
||||
#define FT_DEFINE_SERVICE_PSINFOREC( class_, \
|
||||
get_font_info_, \
|
||||
ps_get_font_extra_, \
|
||||
has_glyph_names_, \
|
||||
get_font_private_, \
|
||||
get_font_value_ ) \
|
||||
static const FT_Service_PsInfoRec class_ = \
|
||||
{ \
|
||||
get_font_info_, ps_get_font_extra_, has_glyph_names_, \
|
||||
get_font_private_ \
|
||||
get_font_private_, get_font_value_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICE_PSINFOREC(class_, get_font_info_, \
|
||||
ps_get_font_extra_, has_glyph_names_, get_font_private_) \
|
||||
#define FT_DEFINE_SERVICE_PSINFOREC( class_, \
|
||||
get_font_info_, \
|
||||
ps_get_font_extra_, \
|
||||
has_glyph_names_, \
|
||||
get_font_private_, \
|
||||
get_font_value_ ) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Library library, \
|
||||
FT_Service_PsInfoRec* clazz) \
|
||||
FT_Init_Class_ ## class_( FT_Library library, \
|
||||
FT_Service_PsInfoRec* clazz ) \
|
||||
{ \
|
||||
FT_UNUSED(library); \
|
||||
clazz->ps_get_font_info = get_font_info_; \
|
||||
clazz->ps_get_font_extra = ps_get_font_extra_; \
|
||||
clazz->ps_has_glyph_names = has_glyph_names_; \
|
||||
FT_UNUSED( library ); \
|
||||
\
|
||||
clazz->ps_get_font_info = get_font_info_; \
|
||||
clazz->ps_get_font_extra = ps_get_font_extra_; \
|
||||
clazz->ps_has_glyph_names = has_glyph_names_; \
|
||||
clazz->ps_get_font_private = get_font_private_; \
|
||||
}
|
||||
clazz->ps_get_font_value = get_font_value_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
+16
-15
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType SFNT table loading service (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004 by */
|
||||
/* Copyright 2003, 2004, 2009, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -69,26 +69,27 @@ FT_BEGIN_HEADER
|
||||
FT_SFNT_TableInfoFunc table_info;
|
||||
};
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICE_SFNT_TABLEREC(class_, load_, get_, info_) \
|
||||
static const FT_Service_SFNT_TableRec class_ = \
|
||||
{ \
|
||||
load_, get_, info_ \
|
||||
#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \
|
||||
static const FT_Service_SFNT_TableRec class_ = \
|
||||
{ \
|
||||
load_, get_, info_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICE_SFNT_TABLEREC(class_, load_, get_, info_) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Service_SFNT_TableRec* clazz ) \
|
||||
{ \
|
||||
clazz->load_table = load_; \
|
||||
clazz->get_table = get_; \
|
||||
clazz->table_info = info_; \
|
||||
}
|
||||
#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \
|
||||
void \
|
||||
FT_Init_Class_ ## class_( FT_Service_SFNT_TableRec* clazz ) \
|
||||
{ \
|
||||
clazz->load_table = load_; \
|
||||
clazz->get_table = get_; \
|
||||
clazz->table_info = info_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
+19
-18
@@ -7,7 +7,7 @@
|
||||
/* Copyright 2003 by */
|
||||
/* Masatake YAMATO, Redhat K.K. */
|
||||
/* */
|
||||
/* Copyright 2003, 2008 by */
|
||||
/* Copyright 2003, 2008, 2009, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -31,7 +31,7 @@
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#define FT_SERVICE_ID_TT_CMAP "tt-cmaps"
|
||||
#define FT_SERVICE_ID_TT_CMAP "tt-cmaps"
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
@@ -58,8 +58,8 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
typedef struct TT_CMapInfo_
|
||||
{
|
||||
FT_ULong language;
|
||||
FT_Long format;
|
||||
FT_ULong language;
|
||||
FT_Long format;
|
||||
|
||||
} TT_CMapInfo;
|
||||
|
||||
@@ -76,24 +76,25 @@ FT_BEGIN_HEADER
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICE_TTCMAPSREC(class_, get_cmap_info_) \
|
||||
static const FT_Service_TTCMapsRec class_ = \
|
||||
{ \
|
||||
get_cmap_info_ \
|
||||
#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ ) \
|
||||
static const FT_Service_TTCMapsRec class_ = \
|
||||
{ \
|
||||
get_cmap_info_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICE_TTCMAPSREC(class_, get_cmap_info_) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Library library, \
|
||||
FT_Service_TTCMapsRec* clazz) \
|
||||
{ \
|
||||
FT_UNUSED(library); \
|
||||
clazz->get_cmap_info = get_cmap_info_; \
|
||||
}
|
||||
#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ ) \
|
||||
void \
|
||||
FT_Init_Class_ ## class_( FT_Library library, \
|
||||
FT_Service_TTCMapsRec* clazz ) \
|
||||
{ \
|
||||
FT_UNUSED( library ); \
|
||||
\
|
||||
clazz->get_cmap_info = get_cmap_info_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
+10
-9
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* The FreeType TrueType glyph service. */
|
||||
/* */
|
||||
/* Copyright 2007 by David Turner. */
|
||||
/* Copyright 2007, 2009, 2012 by David Turner. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
@@ -24,7 +24,7 @@
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#define FT_SERVICE_ID_TT_GLYF "tt-glyf"
|
||||
#define FT_SERVICE_ID_TT_GLYF "tt-glyf"
|
||||
|
||||
|
||||
typedef FT_ULong
|
||||
@@ -37,24 +37,25 @@ FT_BEGIN_HEADER
|
||||
TT_Glyf_GetLocationFunc get_location;
|
||||
};
|
||||
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#define FT_DEFINE_SERVICE_TTGLYFREC(class_, get_location_ ) \
|
||||
static const FT_Service_TTGlyfRec class_ = \
|
||||
#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ ) \
|
||||
static const FT_Service_TTGlyfRec class_ = \
|
||||
{ \
|
||||
get_location_ \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#define FT_DEFINE_SERVICE_TTGLYFREC(class_, get_location_ ) \
|
||||
#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ ) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Service_TTGlyfRec* clazz ) \
|
||||
FT_Init_Class_ ## class_( FT_Service_TTGlyfRec* clazz ) \
|
||||
{ \
|
||||
clazz->get_location = get_location_; \
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
+134
-324
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* High-level `sfnt' driver interface (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by */
|
||||
/* Copyright 1996-2006, 2009, 2012-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -125,77 +125,6 @@ FT_BEGIN_HEADER
|
||||
(*TT_Done_Face_Func)( TT_Face face );
|
||||
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
/* TT_Load_SFNT_HeaderRec_Func */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Loads the header of a SFNT font file. Supports collections. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: A handle to the target face object. */
|
||||
/* */
|
||||
/* stream :: The input stream. */
|
||||
/* */
|
||||
/* face_index :: The index of the TrueType font, if we are opening a */
|
||||
/* collection. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* sfnt :: The SFNT header. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The stream cursor must be at the font file's origin. */
|
||||
/* */
|
||||
/* This function recognizes fonts embedded in a `TrueType */
|
||||
/* collection'. */
|
||||
/* */
|
||||
/* This function checks that the header is valid by looking at the */
|
||||
/* values of `search_range', `entry_selector', and `range_shift'. */
|
||||
/* */
|
||||
typedef FT_Error
|
||||
(*TT_Load_SFNT_HeaderRec_Func)( TT_Face face,
|
||||
FT_Stream stream,
|
||||
FT_Long face_index,
|
||||
SFNT_Header sfnt );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
/* TT_Load_Directory_Func */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Loads the table directory into a face object. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: A handle to the target face object. */
|
||||
/* */
|
||||
/* stream :: The input stream. */
|
||||
/* */
|
||||
/* sfnt :: The SFNT header. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The stream cursor must be on the first byte after the 4-byte font */
|
||||
/* format tag. This is the case just after a call to */
|
||||
/* TT_Load_Format_Tag(). */
|
||||
/* */
|
||||
typedef FT_Error
|
||||
(*TT_Load_Directory_Func)( TT_Face face,
|
||||
FT_Stream stream,
|
||||
SFNT_Header sfnt );
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
@@ -363,88 +292,6 @@ FT_BEGIN_HEADER
|
||||
TT_SBit_MetricsRec *ametrics );
|
||||
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
/* TT_Set_SBit_Strike_OldFunc */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Select an sbit strike for a given size request. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: The target face object. */
|
||||
/* */
|
||||
/* req :: The size request. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* astrike_index :: The index of the sbit strike. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. Returns an error if no */
|
||||
/* sbit strike exists for the selected ppem values. */
|
||||
/* */
|
||||
typedef FT_Error
|
||||
(*TT_Set_SBit_Strike_OldFunc)( TT_Face face,
|
||||
FT_UInt x_ppem,
|
||||
FT_UInt y_ppem,
|
||||
FT_ULong* astrike_index );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
/* TT_CharMap_Load_Func */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Loads a given TrueType character map into memory. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: A handle to the parent face object. */
|
||||
/* */
|
||||
/* stream :: A handle to the current stream object. */
|
||||
/* */
|
||||
/* <InOut> */
|
||||
/* cmap :: A pointer to a cmap object. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The function assumes that the stream is already in use (i.e., */
|
||||
/* opened). In case of error, all partially allocated tables are */
|
||||
/* released. */
|
||||
/* */
|
||||
typedef FT_Error
|
||||
(*TT_CharMap_Load_Func)( TT_Face face,
|
||||
void* cmap,
|
||||
FT_Stream input );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
/* TT_CharMap_Free_Func */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Destroys a character mapping table. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: A handle to the parent face object. */
|
||||
/* */
|
||||
/* cmap :: A handle to a cmap object. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
typedef FT_Error
|
||||
(*TT_CharMap_Free_Func)( TT_Face face,
|
||||
void* cmap );
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
@@ -657,11 +504,6 @@ FT_BEGIN_HEADER
|
||||
|
||||
TT_Load_Any_Func load_any;
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
TT_Load_SFNT_HeaderRec_Func load_sfnt_header;
|
||||
TT_Load_Directory_Func load_directory;
|
||||
#endif
|
||||
|
||||
/* these functions are called by `load_face' but they can also */
|
||||
/* be called from external modules, if there is a need to do so */
|
||||
TT_Load_Table_Func load_head;
|
||||
@@ -674,12 +516,6 @@ FT_BEGIN_HEADER
|
||||
TT_Load_Table_Func load_name;
|
||||
TT_Free_Table_Func free_name;
|
||||
|
||||
/* optional tables */
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
TT_Load_Table_Func load_hdmx_stub;
|
||||
TT_Free_Table_Func free_hdmx_stub;
|
||||
#endif
|
||||
|
||||
/* this field was called `load_kerning' up to version 2.1.10 */
|
||||
TT_Load_Table_Func load_kern;
|
||||
|
||||
@@ -690,43 +526,12 @@ FT_BEGIN_HEADER
|
||||
/* version 2.1.10 */
|
||||
TT_Load_Table_Func load_bhed;
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
/* see `ttsbit.h' */
|
||||
TT_Set_SBit_Strike_OldFunc set_sbit_strike_stub;
|
||||
TT_Load_Table_Func load_sbits_stub;
|
||||
|
||||
/*
|
||||
* The following two fields appeared in version 2.1.8, and were placed
|
||||
* between `load_sbits' and `load_sbit_image'. We support them as a
|
||||
* special exception since they are used by Xfont library within the
|
||||
* X.Org xserver, and because the probability that other rogue clients
|
||||
* use the other version 2.1.7 fields below is _extremely_ low.
|
||||
*
|
||||
* Note that this forces us to disable an interesting memory-saving
|
||||
* optimization though...
|
||||
*/
|
||||
|
||||
TT_Find_SBit_Image_Func find_sbit_image;
|
||||
TT_Load_SBit_Metrics_Func load_sbit_metrics;
|
||||
|
||||
#endif
|
||||
|
||||
TT_Load_SBit_Image_Func load_sbit_image;
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
TT_Free_Table_Func free_sbits_stub;
|
||||
#endif
|
||||
|
||||
/* see `ttpost.h' */
|
||||
TT_Get_PS_Name_Func get_psname;
|
||||
TT_Free_Table_Func free_psnames;
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
TT_CharMap_Load_Func load_charmap_stub;
|
||||
TT_CharMap_Free_Func free_charmap_stub;
|
||||
#endif
|
||||
|
||||
/* starting here, the structure differs from version 2.1.7 */
|
||||
|
||||
/* this field was introduced in version 2.1.8, named `get_psname' */
|
||||
@@ -755,139 +560,144 @@ FT_BEGIN_HEADER
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
#define FT_DEFINE_DRIVERS_OLD_INTERNAL(a) \
|
||||
a,
|
||||
#else
|
||||
#define FT_DEFINE_DRIVERS_OLD_INTERNAL(a)
|
||||
#endif
|
||||
#define FT_INTERNAL(a) \
|
||||
a,
|
||||
|
||||
#define FT_DEFINE_SFNT_INTERFACE(class_, \
|
||||
goto_table_, init_face_, load_face_, done_face_, get_interface_, \
|
||||
load_any_, load_sfnt_header_, load_directory_, load_head_, \
|
||||
load_hhea_, load_cmap_, load_maxp_, load_os2_, load_post_, \
|
||||
load_name_, free_name_, load_hdmx_stub_, free_hdmx_stub_, \
|
||||
load_kern_, load_gasp_, load_pclt_, load_bhed_, \
|
||||
set_sbit_strike_stub_, load_sbits_stub_, find_sbit_image_, \
|
||||
load_sbit_metrics_, load_sbit_image_, free_sbits_stub_, \
|
||||
get_psname_, free_psnames_, load_charmap_stub_, free_charmap_stub_, \
|
||||
get_kerning_, load_font_dir_, load_hmtx_, load_eblc_, free_eblc_, \
|
||||
set_sbit_strike_, load_strike_metrics_, get_metrics_ ) \
|
||||
static const SFNT_Interface class_ = \
|
||||
{ \
|
||||
FT_INTERNAL(goto_table_) \
|
||||
FT_INTERNAL(init_face_) \
|
||||
FT_INTERNAL(load_face_) \
|
||||
FT_INTERNAL(done_face_) \
|
||||
FT_INTERNAL(get_interface_) \
|
||||
FT_INTERNAL(load_any_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sfnt_header_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_directory_) \
|
||||
FT_INTERNAL(load_head_) \
|
||||
FT_INTERNAL(load_hhea_) \
|
||||
FT_INTERNAL(load_cmap_) \
|
||||
FT_INTERNAL(load_maxp_) \
|
||||
FT_INTERNAL(load_os2_) \
|
||||
FT_INTERNAL(load_post_) \
|
||||
FT_INTERNAL(load_name_) \
|
||||
FT_INTERNAL(free_name_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_hdmx_stub_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(free_hdmx_stub_) \
|
||||
FT_INTERNAL(load_kern_) \
|
||||
FT_INTERNAL(load_gasp_) \
|
||||
FT_INTERNAL(load_pclt_) \
|
||||
FT_INTERNAL(load_bhed_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(set_sbit_strike_stub_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbits_stub_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(find_sbit_image_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbit_metrics_) \
|
||||
FT_INTERNAL(load_sbit_image_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(free_sbits_stub_) \
|
||||
FT_INTERNAL(get_psname_) \
|
||||
FT_INTERNAL(free_psnames_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_charmap_stub_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(free_charmap_stub_) \
|
||||
FT_INTERNAL(get_kerning_) \
|
||||
FT_INTERNAL(load_font_dir_) \
|
||||
FT_INTERNAL(load_hmtx_) \
|
||||
FT_INTERNAL(load_eblc_) \
|
||||
FT_INTERNAL(free_eblc_) \
|
||||
FT_INTERNAL(set_sbit_strike_) \
|
||||
FT_INTERNAL(load_strike_metrics_) \
|
||||
FT_INTERNAL(get_metrics_) \
|
||||
#define FT_DEFINE_SFNT_INTERFACE( \
|
||||
class_, \
|
||||
goto_table_, \
|
||||
init_face_, \
|
||||
load_face_, \
|
||||
done_face_, \
|
||||
get_interface_, \
|
||||
load_any_, \
|
||||
load_head_, \
|
||||
load_hhea_, \
|
||||
load_cmap_, \
|
||||
load_maxp_, \
|
||||
load_os2_, \
|
||||
load_post_, \
|
||||
load_name_, \
|
||||
free_name_, \
|
||||
load_kern_, \
|
||||
load_gasp_, \
|
||||
load_pclt_, \
|
||||
load_bhed_, \
|
||||
load_sbit_image_, \
|
||||
get_psname_, \
|
||||
free_psnames_, \
|
||||
get_kerning_, \
|
||||
load_font_dir_, \
|
||||
load_hmtx_, \
|
||||
load_eblc_, \
|
||||
free_eblc_, \
|
||||
set_sbit_strike_, \
|
||||
load_strike_metrics_, \
|
||||
get_metrics_ ) \
|
||||
static const SFNT_Interface class_ = \
|
||||
{ \
|
||||
goto_table_, \
|
||||
init_face_, \
|
||||
load_face_, \
|
||||
done_face_, \
|
||||
get_interface_, \
|
||||
load_any_, \
|
||||
load_head_, \
|
||||
load_hhea_, \
|
||||
load_cmap_, \
|
||||
load_maxp_, \
|
||||
load_os2_, \
|
||||
load_post_, \
|
||||
load_name_, \
|
||||
free_name_, \
|
||||
load_kern_, \
|
||||
load_gasp_, \
|
||||
load_pclt_, \
|
||||
load_bhed_, \
|
||||
load_sbit_image_, \
|
||||
get_psname_, \
|
||||
free_psnames_, \
|
||||
get_kerning_, \
|
||||
load_font_dir_, \
|
||||
load_hmtx_, \
|
||||
load_eblc_, \
|
||||
free_eblc_, \
|
||||
set_sbit_strike_, \
|
||||
load_strike_metrics_, \
|
||||
get_metrics_, \
|
||||
};
|
||||
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
#else /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
#define FT_DEFINE_DRIVERS_OLD_INTERNAL(a, a_) \
|
||||
clazz->a = a_;
|
||||
#else
|
||||
#define FT_DEFINE_DRIVERS_OLD_INTERNAL(a, a_)
|
||||
#endif
|
||||
#define FT_INTERNAL(a, a_) \
|
||||
clazz->a = a_;
|
||||
#define FT_INTERNAL( a, a_ ) \
|
||||
clazz->a = a_;
|
||||
|
||||
#define FT_DEFINE_SFNT_INTERFACE(class_, \
|
||||
goto_table_, init_face_, load_face_, done_face_, get_interface_, \
|
||||
load_any_, load_sfnt_header_, load_directory_, load_head_, \
|
||||
load_hhea_, load_cmap_, load_maxp_, load_os2_, load_post_, \
|
||||
load_name_, free_name_, load_hdmx_stub_, free_hdmx_stub_, \
|
||||
load_kern_, load_gasp_, load_pclt_, load_bhed_, \
|
||||
set_sbit_strike_stub_, load_sbits_stub_, find_sbit_image_, \
|
||||
load_sbit_metrics_, load_sbit_image_, free_sbits_stub_, \
|
||||
get_psname_, free_psnames_, load_charmap_stub_, free_charmap_stub_, \
|
||||
get_kerning_, load_font_dir_, load_hmtx_, load_eblc_, free_eblc_, \
|
||||
set_sbit_strike_, load_strike_metrics_, get_metrics_ ) \
|
||||
void \
|
||||
FT_Init_Class_##class_( FT_Library library, SFNT_Interface* clazz ) \
|
||||
{ \
|
||||
FT_UNUSED(library); \
|
||||
FT_INTERNAL(goto_table,goto_table_) \
|
||||
FT_INTERNAL(init_face,init_face_) \
|
||||
FT_INTERNAL(load_face,load_face_) \
|
||||
FT_INTERNAL(done_face,done_face_) \
|
||||
FT_INTERNAL(get_interface,get_interface_) \
|
||||
FT_INTERNAL(load_any,load_any_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sfnt_header,load_sfnt_header_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_directory,load_directory_) \
|
||||
FT_INTERNAL(load_head,load_head_) \
|
||||
FT_INTERNAL(load_hhea,load_hhea_) \
|
||||
FT_INTERNAL(load_cmap,load_cmap_) \
|
||||
FT_INTERNAL(load_maxp,load_maxp_) \
|
||||
FT_INTERNAL(load_os2,load_os2_) \
|
||||
FT_INTERNAL(load_post,load_post_) \
|
||||
FT_INTERNAL(load_name,load_name_) \
|
||||
FT_INTERNAL(free_name,free_name_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_hdmx_stub,load_hdmx_stub_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(free_hdmx_stub,free_hdmx_stub_) \
|
||||
FT_INTERNAL(load_kern,load_kern_) \
|
||||
FT_INTERNAL(load_gasp,load_gasp_) \
|
||||
FT_INTERNAL(load_pclt,load_pclt_) \
|
||||
FT_INTERNAL(load_bhed,load_bhed_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(set_sbit_strike_stub,set_sbit_strike_stub_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbits_stub,load_sbits_stub_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(find_sbit_image,find_sbit_image_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_sbit_metrics,load_sbit_metrics_) \
|
||||
FT_INTERNAL(load_sbit_image,load_sbit_image_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(free_sbits_stub,free_sbits_stub_) \
|
||||
FT_INTERNAL(get_psname,get_psname_) \
|
||||
FT_INTERNAL(free_psnames,free_psnames_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(load_charmap_stub,load_charmap_stub_) \
|
||||
FT_DEFINE_DRIVERS_OLD_INTERNAL(free_charmap_stub,free_charmap_stub_) \
|
||||
FT_INTERNAL(get_kerning,get_kerning_) \
|
||||
FT_INTERNAL(load_font_dir,load_font_dir_) \
|
||||
FT_INTERNAL(load_hmtx,load_hmtx_) \
|
||||
FT_INTERNAL(load_eblc,load_eblc_) \
|
||||
FT_INTERNAL(free_eblc,free_eblc_) \
|
||||
FT_INTERNAL(set_sbit_strike,set_sbit_strike_) \
|
||||
FT_INTERNAL(load_strike_metrics,load_strike_metrics_) \
|
||||
FT_INTERNAL(get_metrics,get_metrics_) \
|
||||
}
|
||||
#define FT_DEFINE_SFNT_INTERFACE( \
|
||||
class_, \
|
||||
goto_table_, \
|
||||
init_face_, \
|
||||
load_face_, \
|
||||
done_face_, \
|
||||
get_interface_, \
|
||||
load_any_, \
|
||||
load_head_, \
|
||||
load_hhea_, \
|
||||
load_cmap_, \
|
||||
load_maxp_, \
|
||||
load_os2_, \
|
||||
load_post_, \
|
||||
load_name_, \
|
||||
free_name_, \
|
||||
load_kern_, \
|
||||
load_gasp_, \
|
||||
load_pclt_, \
|
||||
load_bhed_, \
|
||||
load_sbit_image_, \
|
||||
get_psname_, \
|
||||
free_psnames_, \
|
||||
get_kerning_, \
|
||||
load_font_dir_, \
|
||||
load_hmtx_, \
|
||||
load_eblc_, \
|
||||
free_eblc_, \
|
||||
set_sbit_strike_, \
|
||||
load_strike_metrics_, \
|
||||
get_metrics_ ) \
|
||||
void \
|
||||
FT_Init_Class_ ## class_( FT_Library library, \
|
||||
SFNT_Interface* clazz ) \
|
||||
{ \
|
||||
FT_UNUSED( library ); \
|
||||
\
|
||||
clazz->goto_table = goto_table_; \
|
||||
clazz->init_face = init_face_; \
|
||||
clazz->load_face = load_face_; \
|
||||
clazz->done_face = done_face_; \
|
||||
clazz->get_interface = get_interface_; \
|
||||
clazz->load_any = load_any_; \
|
||||
clazz->load_head = load_head_; \
|
||||
clazz->load_hhea = load_hhea_; \
|
||||
clazz->load_cmap = load_cmap_; \
|
||||
clazz->load_maxp = load_maxp_; \
|
||||
clazz->load_os2 = load_os2_; \
|
||||
clazz->load_post = load_post_; \
|
||||
clazz->load_name = load_name_; \
|
||||
clazz->free_name = free_name_; \
|
||||
clazz->load_kern = load_kern_; \
|
||||
clazz->load_gasp = load_gasp_; \
|
||||
clazz->load_pclt = load_pclt_; \
|
||||
clazz->load_bhed = load_bhed_; \
|
||||
clazz->load_sbit_image = load_sbit_image_; \
|
||||
clazz->get_psname = get_psname_; \
|
||||
clazz->free_psnames = free_psnames_; \
|
||||
clazz->get_kerning = get_kerning_; \
|
||||
clazz->load_font_dir = load_font_dir_; \
|
||||
clazz->load_hmtx = load_hmtx_; \
|
||||
clazz->load_eblc = load_eblc_; \
|
||||
clazz->free_eblc = free_eblc_; \
|
||||
clazz->set_sbit_strike = set_sbit_strike_; \
|
||||
clazz->load_strike_metrics = load_strike_metrics_; \
|
||||
clazz->get_metrics = get_metrics_; \
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/* Basic Type1/Type2 type definitions and interface (specification */
|
||||
/* only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008, 2009 by */
|
||||
/* Copyright 1996-2004, 2006, 2008, 2009, 2011, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -78,17 +78,6 @@ FT_BEGIN_HEADER
|
||||
} T1_EncodingRec, *T1_Encoding;
|
||||
|
||||
|
||||
typedef enum T1_EncodingType_
|
||||
{
|
||||
T1_ENCODING_TYPE_NONE = 0,
|
||||
T1_ENCODING_TYPE_ARRAY,
|
||||
T1_ENCODING_TYPE_STANDARD,
|
||||
T1_ENCODING_TYPE_ISOLATIN1,
|
||||
T1_ENCODING_TYPE_EXPERT
|
||||
|
||||
} T1_EncodingType;
|
||||
|
||||
|
||||
/* used to hold extra data of PS_FontInfoRec that
|
||||
* cannot be stored in the publicly defined structure.
|
||||
*
|
||||
@@ -216,10 +205,6 @@ FT_BEGIN_HEADER
|
||||
FT_CharMapRec charmaprecs[2];
|
||||
FT_CharMap charmaps[2];
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
PS_Unicodes unicode_map;
|
||||
#endif
|
||||
|
||||
/* support for Multiple Masters fonts */
|
||||
PS_Blend blend;
|
||||
|
||||
|
||||
+10
-113
@@ -5,7 +5,7 @@
|
||||
/* Basic SFNT/TrueType type definitions and interface (specification */
|
||||
/* only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007, 2008 by */
|
||||
/* Copyright 1996-2002, 2004-2008, 2012-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -311,87 +311,6 @@ FT_BEGIN_HEADER
|
||||
} TT_GaspRec;
|
||||
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* TT_HdmxEntryRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A small structure used to model the pre-computed widths of a given */
|
||||
/* size. They are found in the `hdmx' table. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* ppem :: The pixels per EM value at which these metrics apply. */
|
||||
/* */
|
||||
/* max_width :: The maximum advance width for this metric. */
|
||||
/* */
|
||||
/* widths :: An array of widths. Note: These are 8-bit bytes. */
|
||||
/* */
|
||||
typedef struct TT_HdmxEntryRec_
|
||||
{
|
||||
FT_Byte ppem;
|
||||
FT_Byte max_width;
|
||||
FT_Byte* widths;
|
||||
|
||||
} TT_HdmxEntryRec, *TT_HdmxEntry;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* TT_HdmxRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A structure used to model the `hdmx' table, which contains */
|
||||
/* pre-computed widths for a set of given sizes/dimensions. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* version :: The version number. */
|
||||
/* */
|
||||
/* num_records :: The number of hdmx records. */
|
||||
/* */
|
||||
/* records :: An array of hdmx records. */
|
||||
/* */
|
||||
typedef struct TT_HdmxRec_
|
||||
{
|
||||
FT_UShort version;
|
||||
FT_Short num_records;
|
||||
TT_HdmxEntry records;
|
||||
|
||||
} TT_HdmxRec, *TT_Hdmx;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* TT_Kern0_PairRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A structure used to model a kerning pair for the kerning table */
|
||||
/* format 0. The engine now loads this table if it finds one in the */
|
||||
/* font file. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* left :: The index of the left glyph in pair. */
|
||||
/* */
|
||||
/* right :: The index of the right glyph in pair. */
|
||||
/* */
|
||||
/* value :: The kerning distance. A positive value spaces the */
|
||||
/* glyphs, a negative one makes them closer. */
|
||||
/* */
|
||||
typedef struct TT_Kern0_PairRec_
|
||||
{
|
||||
FT_UShort left; /* index of left glyph in pair */
|
||||
FT_UShort right; /* index of right glyph in pair */
|
||||
FT_FWord value; /* kerning value */
|
||||
|
||||
} TT_Kern0_PairRec, *TT_Kern0_Pair;
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
@@ -1269,9 +1188,6 @@ FT_BEGIN_HEADER
|
||||
TT_HoriHeader horizontal; /* TrueType horizontal header */
|
||||
|
||||
TT_MaxProfile max_profile;
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
FT_ULong max_components; /* stubbed to 0 */
|
||||
#endif
|
||||
|
||||
FT_Bool vertical_info;
|
||||
TT_VertHeader vertical; /* TT Vertical header, if present */
|
||||
@@ -1308,11 +1224,6 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/***********************************************************************/
|
||||
|
||||
/* horizontal device metrics */
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
TT_HdmxRec hdmx;
|
||||
#endif
|
||||
|
||||
/* grid-fitting and scaling table */
|
||||
TT_GaspRec gasp; /* the `gasp' table */
|
||||
|
||||
@@ -1320,11 +1231,6 @@ FT_BEGIN_HEADER
|
||||
TT_PCLT pclt;
|
||||
|
||||
/* embedded bitmaps support */
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
FT_ULong num_sbit_strikes;
|
||||
TT_SBit_Strike sbit_strikes;
|
||||
#endif
|
||||
|
||||
FT_ULong num_sbit_scales;
|
||||
TT_SBit_Scale sbit_scales;
|
||||
|
||||
@@ -1338,12 +1244,6 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/***********************************************************************/
|
||||
|
||||
/* the glyph locations */
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
FT_UShort num_locations_stub;
|
||||
FT_Long* glyph_locations_stub;
|
||||
#endif
|
||||
|
||||
/* the font program, if any */
|
||||
FT_ULong font_program_size;
|
||||
FT_Byte* font_program;
|
||||
@@ -1356,13 +1256,6 @@ FT_BEGIN_HEADER
|
||||
FT_ULong cvt_size;
|
||||
FT_Short* cvt;
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
|
||||
/* the format 0 kerning table, if any */
|
||||
FT_Int num_kern_pairs;
|
||||
FT_Int kern_table_index;
|
||||
TT_Kern0_Pair kern_pairs;
|
||||
#endif
|
||||
|
||||
/* A pointer to the bytecode interpreter to use. This is also */
|
||||
/* used to hook the debugger for the `ttdebug' utility. */
|
||||
TT_Interpreter interpreter;
|
||||
@@ -1383,11 +1276,8 @@ FT_BEGIN_HEADER
|
||||
|
||||
const char* postscript_name;
|
||||
|
||||
/* since version 2.1.8, but was originally placed after */
|
||||
/* `glyph_locations_stub' */
|
||||
FT_ULong glyf_len;
|
||||
|
||||
/* since version 2.1.8, but was originally placed before `extra' */
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
FT_Bool doblend;
|
||||
GX_Blend blend;
|
||||
@@ -1401,7 +1291,7 @@ FT_BEGIN_HEADER
|
||||
FT_Byte* vert_metrics;
|
||||
FT_ULong vert_metrics_size;
|
||||
|
||||
FT_ULong num_locations; /* in broken TTF, gid > 0xFFFF */
|
||||
FT_ULong num_locations; /* in broken TTF, gid > 0xFFFF */
|
||||
FT_Byte* glyph_locations;
|
||||
|
||||
FT_Byte* hdmx_table;
|
||||
@@ -1428,6 +1318,13 @@ FT_BEGIN_HEADER
|
||||
FT_ULong horz_metrics_offset;
|
||||
FT_ULong vert_metrics_offset;
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
|
||||
/* 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 */
|
||||
|
||||
} TT_FaceRec;
|
||||
|
||||
|
||||
@@ -1443,7 +1340,7 @@ FT_BEGIN_HEADER
|
||||
/* <Fields> */
|
||||
/* memory :: A handle to the memory manager. */
|
||||
/* */
|
||||
/* max_points :: The maximal size in points of the zone. */
|
||||
/* max_points :: The maximum size in points of the zone. */
|
||||
/* */
|
||||
/* max_contours :: Max size in links contours of the zone. */
|
||||
/* */
|
||||
|
||||
+160
-2
@@ -5,7 +5,7 @@
|
||||
/* Basic Type 1/Type 2 tables definitions and interface (specification */
|
||||
/* only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008, 2009 by */
|
||||
/* Copyright 1996-2004, 2006, 2008, 2009, 2011 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -493,8 +493,166 @@ FT_BEGIN_HEADER
|
||||
FT_Get_PS_Font_Private( FT_Face face,
|
||||
PS_Private afont_private );
|
||||
|
||||
/* */
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Enum> */
|
||||
/* T1_EncodingType */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* An enumeration describing the `Encoding' entry in a Type 1 */
|
||||
/* dictionary. */
|
||||
/* */
|
||||
typedef enum T1_EncodingType_
|
||||
{
|
||||
T1_ENCODING_TYPE_NONE = 0,
|
||||
T1_ENCODING_TYPE_ARRAY,
|
||||
T1_ENCODING_TYPE_STANDARD,
|
||||
T1_ENCODING_TYPE_ISOLATIN1,
|
||||
T1_ENCODING_TYPE_EXPERT
|
||||
|
||||
} T1_EncodingType;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Enum> */
|
||||
/* PS_Dict_Keys */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* An enumeration used in calls to @FT_Get_PS_Font_Value to identify */
|
||||
/* the Type~1 dictionary entry to retrieve. */
|
||||
/* */
|
||||
typedef enum PS_Dict_Keys_
|
||||
{
|
||||
/* conventionally in the font dictionary */
|
||||
PS_DICT_FONT_TYPE, /* FT_Byte */
|
||||
PS_DICT_FONT_MATRIX, /* FT_Fixed */
|
||||
PS_DICT_FONT_BBOX, /* FT_Fixed */
|
||||
PS_DICT_PAINT_TYPE, /* FT_Byte */
|
||||
PS_DICT_FONT_NAME, /* FT_String* */
|
||||
PS_DICT_UNIQUE_ID, /* FT_Int */
|
||||
PS_DICT_NUM_CHAR_STRINGS, /* FT_Int */
|
||||
PS_DICT_CHAR_STRING_KEY, /* FT_String* */
|
||||
PS_DICT_CHAR_STRING, /* FT_String* */
|
||||
PS_DICT_ENCODING_TYPE, /* T1_EncodingType */
|
||||
PS_DICT_ENCODING_ENTRY, /* FT_String* */
|
||||
|
||||
/* conventionally in the font Private dictionary */
|
||||
PS_DICT_NUM_SUBRS, /* FT_Int */
|
||||
PS_DICT_SUBR, /* FT_String* */
|
||||
PS_DICT_STD_HW, /* FT_UShort */
|
||||
PS_DICT_STD_VW, /* FT_UShort */
|
||||
PS_DICT_NUM_BLUE_VALUES, /* FT_Byte */
|
||||
PS_DICT_BLUE_VALUE, /* FT_Short */
|
||||
PS_DICT_BLUE_FUZZ, /* FT_Int */
|
||||
PS_DICT_NUM_OTHER_BLUES, /* FT_Byte */
|
||||
PS_DICT_OTHER_BLUE, /* FT_Short */
|
||||
PS_DICT_NUM_FAMILY_BLUES, /* FT_Byte */
|
||||
PS_DICT_FAMILY_BLUE, /* FT_Short */
|
||||
PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte */
|
||||
PS_DICT_FAMILY_OTHER_BLUE, /* FT_Short */
|
||||
PS_DICT_BLUE_SCALE, /* FT_Fixed */
|
||||
PS_DICT_BLUE_SHIFT, /* FT_Int */
|
||||
PS_DICT_NUM_STEM_SNAP_H, /* FT_Byte */
|
||||
PS_DICT_STEM_SNAP_H, /* FT_Short */
|
||||
PS_DICT_NUM_STEM_SNAP_V, /* FT_Byte */
|
||||
PS_DICT_STEM_SNAP_V, /* FT_Short */
|
||||
PS_DICT_FORCE_BOLD, /* FT_Bool */
|
||||
PS_DICT_RND_STEM_UP, /* FT_Bool */
|
||||
PS_DICT_MIN_FEATURE, /* FT_Short */
|
||||
PS_DICT_LEN_IV, /* FT_Int */
|
||||
PS_DICT_PASSWORD, /* FT_Long */
|
||||
PS_DICT_LANGUAGE_GROUP, /* FT_Long */
|
||||
|
||||
/* conventionally in the font FontInfo dictionary */
|
||||
PS_DICT_VERSION, /* FT_String* */
|
||||
PS_DICT_NOTICE, /* FT_String* */
|
||||
PS_DICT_FULL_NAME, /* FT_String* */
|
||||
PS_DICT_FAMILY_NAME, /* FT_String* */
|
||||
PS_DICT_WEIGHT, /* FT_String* */
|
||||
PS_DICT_IS_FIXED_PITCH, /* FT_Bool */
|
||||
PS_DICT_UNDERLINE_POSITION, /* FT_Short */
|
||||
PS_DICT_UNDERLINE_THICKNESS, /* FT_UShort */
|
||||
PS_DICT_FS_TYPE, /* FT_UShort */
|
||||
PS_DICT_ITALIC_ANGLE, /* FT_Long */
|
||||
|
||||
PS_DICT_MAX = PS_DICT_ITALIC_ANGLE
|
||||
|
||||
} PS_Dict_Keys;
|
||||
|
||||
|
||||
/************************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Get_PS_Font_Value
|
||||
*
|
||||
* @description:
|
||||
* Retrieve the value for the supplied key from a PostScript font.
|
||||
*
|
||||
* @input:
|
||||
* face ::
|
||||
* PostScript face handle.
|
||||
*
|
||||
* key ::
|
||||
* An enumeration value representing the dictionary key to retrieve.
|
||||
*
|
||||
* idx ::
|
||||
* For array values, this specifies the index to be returned.
|
||||
*
|
||||
* value ::
|
||||
* A pointer to memory into which to write the value.
|
||||
*
|
||||
* valen_len ::
|
||||
* The size, in bytes, of the memory supplied for the value.
|
||||
*
|
||||
* @output:
|
||||
* value ::
|
||||
* The value matching the above key, if it exists.
|
||||
*
|
||||
* @return:
|
||||
* The amount of memory (in bytes) required to hold the requested
|
||||
* value (if it exists, -1 otherwise).
|
||||
*
|
||||
* @note:
|
||||
* The values returned are not pointers into the internal structures of
|
||||
* the face, but are `fresh' copies, so that the memory containing them
|
||||
* belongs to the calling application. This also enforces the
|
||||
* `read-only' nature of these values, i.e., this function cannot be
|
||||
* used to manipulate the face.
|
||||
*
|
||||
* `value' is a void pointer because the values returned can be of
|
||||
* various types.
|
||||
*
|
||||
* If either `value' is NULL or `value_len' is too small, just the
|
||||
* required memory size for the requested entry is returned.
|
||||
*
|
||||
* The `idx' parameter is used, not only to retrieve elements of, for
|
||||
* example, the FontMatrix or FontBBox, but also to retrieve name keys
|
||||
* from the CharStrings dictionary, and the charstrings themselves. It
|
||||
* is ignored for atomic values.
|
||||
*
|
||||
* PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000. To
|
||||
* get the value as in the font stream, you need to divide by
|
||||
* 65536000.0 (to remove the FT_Fixed scale, and the x1000 scale).
|
||||
*
|
||||
* IMPORTANT: Only key/value pairs read by the FreeType interpreter can
|
||||
* be retrieved. So, for example, PostScript procedures such as NP,
|
||||
* ND, and RD are not available. Arbitrary keys are, obviously, not be
|
||||
* available either.
|
||||
*
|
||||
* If the font's format is not PostScript-based, this function returns
|
||||
* the `FT_Err_Invalid_Argument' error code.
|
||||
*
|
||||
*/
|
||||
FT_EXPORT( FT_Long )
|
||||
FT_Get_PS_Font_Value( FT_Face face,
|
||||
PS_Dict_Keys key,
|
||||
FT_UInt idx,
|
||||
void *value,
|
||||
FT_Long value_len );
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
+5
-15
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* TrueType name ID definitions (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2002, 2003, 2004, 2006, 2007, 2008 by */
|
||||
/* Copyright 1996-2004, 2006-2008, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -316,11 +316,12 @@ FT_BEGIN_HEADER
|
||||
/* */
|
||||
/* 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. */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* http://fonts.apple.com/TTRefMan/RM06/Chap6name.html */
|
||||
/* https://developer.apple.com/fonts/TTRefMan/RM06/Chap6name.html */
|
||||
/* */
|
||||
#define TT_MAC_LANGID_ENGLISH 0
|
||||
#define TT_MAC_LANGID_FRENCH 1
|
||||
@@ -461,21 +462,10 @@ FT_BEGIN_HEADER
|
||||
/* of the TTF `name' table if the `platform' identifier code is */
|
||||
/* TT_PLATFORM_MICROSOFT. */
|
||||
/* */
|
||||
/* The canonical source for the MS assigned LCID's (seems to) be at */
|
||||
/* The canonical source for the MS assigned LCIDs is */
|
||||
/* */
|
||||
/* http://www.microsoft.com/globaldev/reference/lcid-all.mspx */
|
||||
/* */
|
||||
/* It used to be at various places, among them */
|
||||
/* */
|
||||
/* http://www.microsoft.com/typography/OTSPEC/lcid-cp.txt */
|
||||
/* http://www.microsoft.com/globaldev/reference/loclanghome.asp */
|
||||
/* http://support.microsoft.com/support/kb/articles/Q224/8/04.ASP */
|
||||
/* http://msdn.microsoft.com/library/en-us/passport25/ */
|
||||
/* NET_Passport_VBScript_Documentation/Single_Sign_In/ */
|
||||
/* Advanced_Single_Sign_In/Localization_and_LCIDs.asp */
|
||||
/* */
|
||||
/* Hopefully, it seems now that the Globaldev site prevails... */
|
||||
/* (updated by Antoine, 2004-02-17) */
|
||||
|
||||
#define TT_MS_LANGID_ARABIC_GENERAL 0x0001
|
||||
#define TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401
|
||||
|
||||
+23
-5
@@ -5,7 +5,7 @@
|
||||
/* Basic SFNT/TrueType tables definitions and interface */
|
||||
/* (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2008, 2009, 2010 by */
|
||||
/* Copyright 1996-2005, 2008-2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -600,6 +600,16 @@ FT_BEGIN_HEADER
|
||||
/* by the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for */
|
||||
/* a list. */
|
||||
/* */
|
||||
/* Here an example how to access the `vhea' table: */
|
||||
/* */
|
||||
/* { */
|
||||
/* TT_VertHeader* vert_header; */
|
||||
/* */
|
||||
/* */
|
||||
/* vert_header = */
|
||||
/* (TT_VertHeader*)FT_Get_Sfnt_Table( face, ft_sfnt_vhea ); */
|
||||
/* } */
|
||||
/* */
|
||||
FT_EXPORT( void* )
|
||||
FT_Get_Sfnt_Table( FT_Face face,
|
||||
FT_Sfnt_Tag tag );
|
||||
@@ -687,18 +697,23 @@ FT_BEGIN_HEADER
|
||||
* The index of an SFNT table. The function returns
|
||||
* FT_Err_Table_Missing for an invalid value.
|
||||
*
|
||||
* @output:
|
||||
* @inout:
|
||||
* tag ::
|
||||
* The name tag of the SFNT table.
|
||||
* 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.
|
||||
* The length of the SFNT table (or the number of SFNT tables, depending
|
||||
* on `tag').
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0~means success.
|
||||
*
|
||||
* @note:
|
||||
* SFNT tables with length zero are treated as missing.
|
||||
* While parsing fonts, FreeType handles SFNT tables with length zero as
|
||||
* missing.
|
||||
*
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
@@ -725,6 +740,9 @@ FT_BEGIN_HEADER
|
||||
/* The language ID of `charmap'. If `charmap' doesn't belong to a */
|
||||
/* TrueType/sfnt face, just return~0 as the default value. */
|
||||
/* */
|
||||
/* For a format~14 cmap (to access Unicode IVS), the return value is */
|
||||
/* 0xFFFFFFFF. */
|
||||
/* */
|
||||
FT_EXPORT( FT_ULong )
|
||||
FT_Get_CMap_Language_ID( FT_CharMap charmap );
|
||||
|
||||
|
||||
+3
-1
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Tags for TrueType and OpenType tables (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2004, 2005, 2007, 2008 by */
|
||||
/* Copyright 1996-2001, 2004, 2005, 2007, 2008, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -40,6 +40,8 @@ FT_BEGIN_HEADER
|
||||
#define TTAG_bhed FT_MAKE_TAG( 'b', 'h', 'e', 'd' )
|
||||
#define TTAG_bloc FT_MAKE_TAG( 'b', 'l', 'o', 'c' )
|
||||
#define TTAG_bsln FT_MAKE_TAG( 'b', 's', 'l', 'n' )
|
||||
#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_CID FT_MAKE_TAG( 'C', 'I', 'D', ' ' )
|
||||
#define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' )
|
||||
|
||||
+7
-2
@@ -1,6 +1,6 @@
|
||||
# modules.cfg
|
||||
#
|
||||
# Copyright 2005, 2006, 2007, 2009 by
|
||||
# Copyright 2005-2007, 2009-2011 by
|
||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
#
|
||||
# This file is part of the FreeType project, and may only be used, modified,
|
||||
@@ -54,7 +54,7 @@ FONT_MODULES += pfr
|
||||
|
||||
# PostScript Type 42 font driver.
|
||||
#
|
||||
# This driver needs the `truetype' module.
|
||||
# This driver needs the `truetype' and `psaux' modules.
|
||||
FONT_MODULES += type42
|
||||
|
||||
# Windows FONT/FNT font driver. See optional extension ftwinfnt.c below
|
||||
@@ -122,6 +122,11 @@ AUX_MODULES += gzip
|
||||
# See include/freetype/ftlzw.h for the API.
|
||||
AUX_MODULES += lzw
|
||||
|
||||
# Support for streams compressed with bzip2 (files with suffix .bz2).
|
||||
#
|
||||
# See include/freetype/ftbzip2.h for the API.
|
||||
AUX_MODULES += bzip2
|
||||
|
||||
# OpenType table validation. Needs ftotval.c below.
|
||||
#
|
||||
# AUX_MODULES += otvalid
|
||||
|
||||
-2
@@ -1,2 +0,0 @@
|
||||
This directory contains all the object files created when building the
|
||||
library.
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
# FreeType 2 src Jamfile
|
||||
#
|
||||
# Copyright 2001, 2002 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.
|
||||
|
||||
SubDir FT2_TOP $(FT2_SRC_DIR) ;
|
||||
|
||||
# The file <freetype/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) ;
|
||||
}
|
||||
|
||||
# end of src Jamfile
|
||||
@@ -1,39 +0,0 @@
|
||||
# FreeType 2 src/autofit Jamfile
|
||||
#
|
||||
# Copyright 2003, 2004, 2005, 2006, 2007, 2009 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.
|
||||
|
||||
SubDir FT2_TOP src autofit ;
|
||||
|
||||
{
|
||||
local _sources ;
|
||||
|
||||
# define FT2_AUTOFIT2 to enable experimental latin hinter replacement
|
||||
if $(FT2_AUTOFIT2)
|
||||
{
|
||||
DEFINES += FT_OPTION_AUTOFIT2 ;
|
||||
}
|
||||
if $(FT2_MULTI)
|
||||
{
|
||||
_sources = afangles afglobal afhints aflatin afcjk afindic afloader afmodule afdummy afwarp afpic ;
|
||||
|
||||
if $(FT2_AUTOFIT2)
|
||||
{
|
||||
_sources += aflatin2 ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_sources = autofit ;
|
||||
}
|
||||
|
||||
Library $(FT2_LIB) : $(_sources).c ;
|
||||
}
|
||||
|
||||
# end of src/autofit Jamfile
|
||||
+60
-7
@@ -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, 2004, 2005, 2006 by */
|
||||
/* Copyright 2003-2006, 2011-2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -77,7 +77,7 @@
|
||||
return 1 - 2 * ( delta < 0 );
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* 0 */
|
||||
|
||||
|
||||
/*
|
||||
@@ -255,7 +255,7 @@
|
||||
{
|
||||
for ( j = i; j > 0; j-- )
|
||||
{
|
||||
if ( table[j] > table[j - 1] )
|
||||
if ( table[j] >= table[j - 1] )
|
||||
break;
|
||||
|
||||
swap = table[j];
|
||||
@@ -267,18 +267,26 @@
|
||||
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_sort_widths( FT_UInt count,
|
||||
AF_Width table )
|
||||
af_sort_and_quantize_widths( FT_UInt* count,
|
||||
AF_Width table,
|
||||
FT_Pos threshold )
|
||||
{
|
||||
FT_UInt i, j;
|
||||
FT_UInt cur_idx;
|
||||
FT_Pos cur_val;
|
||||
FT_Pos sum;
|
||||
AF_WidthRec swap;
|
||||
|
||||
|
||||
for ( i = 1; i < count; i++ )
|
||||
if ( *count == 1 )
|
||||
return;
|
||||
|
||||
/* sort */
|
||||
for ( i = 1; i < *count; i++ )
|
||||
{
|
||||
for ( j = i; j > 0; j-- )
|
||||
{
|
||||
if ( table[j].org > table[j - 1].org )
|
||||
if ( table[j].org >= table[j - 1].org )
|
||||
break;
|
||||
|
||||
swap = table[j];
|
||||
@@ -286,6 +294,51 @@
|
||||
table[j - 1] = swap;
|
||||
}
|
||||
}
|
||||
|
||||
cur_idx = 0;
|
||||
cur_val = table[cur_idx].org;
|
||||
|
||||
/* compute and use mean values for clusters not larger than */
|
||||
/* `threshold'; this is very primitive and might not yield */
|
||||
/* the best result, but normally, using reference character */
|
||||
/* `o', `*count' is 2, so the code below is fully sufficient */
|
||||
for ( i = 1; i < *count; i++ )
|
||||
{
|
||||
if ( table[i].org - cur_val > threshold ||
|
||||
i == *count - 1 )
|
||||
{
|
||||
sum = 0;
|
||||
|
||||
/* fix loop for end of array */
|
||||
if ( table[i].org - cur_val <= threshold &&
|
||||
i == *count - 1 )
|
||||
i++;
|
||||
|
||||
for ( j = cur_idx; j < i; j++ )
|
||||
{
|
||||
sum += table[j].org;
|
||||
table[j].org = 0;
|
||||
}
|
||||
table[cur_idx].org = sum / j;
|
||||
|
||||
if ( i < *count - 1 )
|
||||
{
|
||||
cur_idx = i + 1;
|
||||
cur_val = table[cur_idx].org;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cur_idx = 1;
|
||||
|
||||
/* compress array to remove zero values */
|
||||
for ( i = 1; i < *count; i++ )
|
||||
{
|
||||
if ( table[i].org )
|
||||
table[cur_idx++] = table[i];
|
||||
}
|
||||
|
||||
*count = cur_idx;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+814
-51
File diff suppressed because it is too large
Load Diff
+96
-11
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Auto-fitter hinting routines for CJK script (specification). */
|
||||
/* */
|
||||
/* Copyright 2006, 2007 by */
|
||||
/* Copyright 2006, 2007, 2011, 2012 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 @@
|
||||
#define __AFCJK_H__
|
||||
|
||||
#include "afhints.h"
|
||||
#include "aflatin.h"
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
@@ -27,25 +28,109 @@ FT_BEGIN_HEADER
|
||||
|
||||
/* the CJK-specific script class */
|
||||
|
||||
AF_DECLARE_SCRIPT_CLASS(af_cjk_script_class)
|
||||
AF_DECLARE_SCRIPT_CLASS( af_cjk_script_class )
|
||||
|
||||
/* CJK (global) metrics management */
|
||||
|
||||
/*
|
||||
* CJK glyphs tend to fill the square. So we have both vertical and
|
||||
* horizontal blue zones. But some glyphs have flat bounding strokes that
|
||||
* leave some space between neighbour glyphs.
|
||||
*/
|
||||
enum
|
||||
{
|
||||
AF_CJK_BLUE_TOP,
|
||||
AF_CJK_BLUE_BOTTOM,
|
||||
AF_CJK_BLUE_LEFT,
|
||||
AF_CJK_BLUE_RIGHT,
|
||||
|
||||
AF_CJK_BLUE_MAX
|
||||
};
|
||||
|
||||
|
||||
#define AF_CJK_MAX_WIDTHS 16
|
||||
#define AF_CJK_MAX_BLUES AF_CJK_BLUE_MAX
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
AF_CJK_BLUE_ACTIVE = 1 << 0,
|
||||
AF_CJK_BLUE_IS_TOP = 1 << 1,
|
||||
AF_CJK_BLUE_IS_RIGHT = 1 << 2,
|
||||
AF_CJK_BLUE_ADJUSTMENT = 1 << 3, /* used for scale adjustment */
|
||||
/* optimization */
|
||||
AF_CJK_BLUE_FLAG_MAX
|
||||
};
|
||||
|
||||
|
||||
typedef struct AF_CJKBlueRec_
|
||||
{
|
||||
AF_WidthRec ref;
|
||||
AF_WidthRec shoot; /* undershoot */
|
||||
FT_UInt flags;
|
||||
|
||||
} AF_CJKBlueRec, *AF_CJKBlue;
|
||||
|
||||
|
||||
typedef struct AF_CJKAxisRec_
|
||||
{
|
||||
FT_Fixed scale;
|
||||
FT_Pos delta;
|
||||
|
||||
FT_UInt width_count;
|
||||
AF_WidthRec widths[AF_CJK_MAX_WIDTHS];
|
||||
FT_Pos edge_distance_threshold;
|
||||
FT_Pos standard_width;
|
||||
FT_Bool extra_light;
|
||||
|
||||
/* used for horizontal metrics too for CJK */
|
||||
FT_Bool control_overshoot;
|
||||
FT_UInt blue_count;
|
||||
AF_CJKBlueRec blues[AF_CJK_BLUE_MAX];
|
||||
|
||||
FT_Fixed org_scale;
|
||||
FT_Pos org_delta;
|
||||
|
||||
} AF_CJKAxisRec, *AF_CJKAxis;
|
||||
|
||||
|
||||
typedef struct AF_CJKMetricsRec_
|
||||
{
|
||||
AF_ScriptMetricsRec root;
|
||||
FT_UInt units_per_em;
|
||||
AF_CJKAxisRec axis[AF_DIMENSION_MAX];
|
||||
|
||||
} AF_CJKMetricsRec, *AF_CJKMetrics;
|
||||
|
||||
|
||||
#ifdef AF_CONFIG_OPTION_CJK
|
||||
FT_LOCAL( FT_Error )
|
||||
af_cjk_metrics_init( AF_LatinMetrics metrics,
|
||||
FT_Face face );
|
||||
af_cjk_metrics_init( AF_CJKMetrics metrics,
|
||||
FT_Face face );
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_cjk_metrics_scale( AF_LatinMetrics metrics,
|
||||
AF_Scaler scaler );
|
||||
af_cjk_metrics_scale( AF_CJKMetrics metrics,
|
||||
AF_Scaler scaler );
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
af_cjk_hints_init( AF_GlyphHints hints,
|
||||
AF_LatinMetrics metrics );
|
||||
af_cjk_hints_init( AF_GlyphHints hints,
|
||||
AF_CJKMetrics metrics );
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
af_cjk_hints_apply( AF_GlyphHints hints,
|
||||
FT_Outline* outline,
|
||||
AF_LatinMetrics metrics );
|
||||
af_cjk_hints_apply( AF_GlyphHints hints,
|
||||
FT_Outline* outline,
|
||||
AF_CJKMetrics metrics );
|
||||
|
||||
/* shared; called from afindic.c */
|
||||
FT_LOCAL( void )
|
||||
af_cjk_metrics_check_digits( AF_CJKMetrics metrics,
|
||||
FT_Face face );
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_cjk_metrics_init_widths( AF_CJKMetrics metrics,
|
||||
FT_Face face );
|
||||
#endif /* AF_CONFIG_OPTION_CJK */
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
+8
-6
@@ -5,7 +5,7 @@
|
||||
/* Auto-fitter dummy routines to be used if no hinting should be */
|
||||
/* performed (body). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005 by */
|
||||
/* Copyright 2003-2005, 2011, 2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#include "afdummy.h"
|
||||
#include "afhints.h"
|
||||
#include "aferrors.h"
|
||||
|
||||
|
||||
static FT_Error
|
||||
@@ -27,7 +28,7 @@
|
||||
{
|
||||
af_glyph_hints_rescale( hints,
|
||||
metrics );
|
||||
return 0;
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,15 +39,16 @@
|
||||
FT_UNUSED( hints );
|
||||
FT_UNUSED( outline );
|
||||
|
||||
return 0;
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
|
||||
|
||||
AF_DEFINE_SCRIPT_CLASS(af_dummy_script_class,
|
||||
AF_SCRIPT_NONE,
|
||||
AF_DEFINE_SCRIPT_CLASS( af_dummy_script_class,
|
||||
AF_SCRIPT_DUMMY,
|
||||
NULL,
|
||||
0,
|
||||
|
||||
sizeof( AF_ScriptMetricsRec ),
|
||||
sizeof ( AF_ScriptMetricsRec ),
|
||||
|
||||
(AF_Script_InitMetricsFunc) NULL,
|
||||
(AF_Script_ScaleMetricsFunc)NULL,
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@
|
||||
/* Auto-fitter dummy routines to be used if no hinting should be */
|
||||
/* performed (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005 by */
|
||||
/* Copyright 2003-2005, 2011 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -29,7 +29,7 @@ FT_BEGIN_HEADER
|
||||
* be performed. This is the default for non-latin glyphs!
|
||||
*/
|
||||
|
||||
AF_DECLARE_SCRIPT_CLASS(af_dummy_script_class)
|
||||
AF_DECLARE_SCRIPT_CLASS( af_dummy_script_class )
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
+2
-1
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Autofitter error codes (specification only). */
|
||||
/* */
|
||||
/* Copyright 2005 by */
|
||||
/* Copyright 2005, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#undef __FTERRORS_H__
|
||||
|
||||
#undef FT_ERR_PREFIX
|
||||
#define FT_ERR_PREFIX AF_Err_
|
||||
#define FT_ERR_BASE FT_Mod_Err_Autofit
|
||||
|
||||
|
||||
+44
-63
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Auto-fitter routines to compute global hinting values (body). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by */
|
||||
/* Copyright 2003-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -31,8 +31,8 @@
|
||||
|
||||
#ifndef FT_CONFIG_OPTION_PIC
|
||||
|
||||
/* when updating this table, don't forget to update
|
||||
AF_SCRIPT_CLASSES_COUNT and autofit_module_class_pic_init */
|
||||
/* when updating this table, don't forget to update */
|
||||
/* AF_SCRIPT_CLASSES_COUNT and autofit_module_class_pic_init */
|
||||
|
||||
/* populate this list when you add new scripts */
|
||||
static AF_ScriptClass const af_script_classes[] =
|
||||
@@ -43,34 +43,11 @@
|
||||
#endif
|
||||
&af_latin_script_class,
|
||||
&af_cjk_script_class,
|
||||
&af_indic_script_class,
|
||||
&af_indic_script_class,
|
||||
NULL /* do not remove */
|
||||
};
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_PIC */
|
||||
|
||||
/* index of default script in `af_script_classes' */
|
||||
#define AF_SCRIPT_LIST_DEFAULT 2
|
||||
/* a bit mask indicating an uncovered glyph */
|
||||
#define AF_SCRIPT_LIST_NONE 0x7F
|
||||
/* if this flag is set, we have an ASCII digit */
|
||||
#define AF_DIGIT 0x80
|
||||
|
||||
|
||||
/*
|
||||
* Note that glyph_scripts[] is used to map each glyph into
|
||||
* an index into the `af_script_classes' array.
|
||||
*
|
||||
*/
|
||||
typedef struct AF_FaceGlobalsRec_
|
||||
{
|
||||
FT_Face face;
|
||||
FT_Long glyph_count; /* same as face->num_glyphs */
|
||||
FT_Byte* glyph_scripts;
|
||||
|
||||
AF_ScriptMetrics metrics[AF_SCRIPT_MAX];
|
||||
|
||||
} AF_FaceGlobalsRec;
|
||||
#endif /* !FT_CONFIG_OPTION_PIC */
|
||||
|
||||
|
||||
/* Compute the script index of each glyph within a given face. */
|
||||
@@ -78,26 +55,27 @@
|
||||
static FT_Error
|
||||
af_face_globals_compute_script_coverage( AF_FaceGlobals globals )
|
||||
{
|
||||
FT_Error error = AF_Err_Ok;
|
||||
FT_Error error;
|
||||
FT_Face face = globals->face;
|
||||
FT_CharMap old_charmap = face->charmap;
|
||||
FT_Byte* gscripts = globals->glyph_scripts;
|
||||
FT_UInt ss, i;
|
||||
FT_UInt ss;
|
||||
FT_UInt i;
|
||||
|
||||
|
||||
/* the value 255 means `uncovered glyph' */
|
||||
/* the value AF_SCRIPT_NONE means `uncovered glyph' */
|
||||
FT_MEM_SET( globals->glyph_scripts,
|
||||
AF_SCRIPT_LIST_NONE,
|
||||
AF_SCRIPT_NONE,
|
||||
globals->glyph_count );
|
||||
|
||||
error = FT_Select_Charmap( face, FT_ENCODING_UNICODE );
|
||||
if ( error )
|
||||
{
|
||||
/*
|
||||
* Ignore this error; we simply use the default script.
|
||||
* Ignore this error; we simply use the fallback script.
|
||||
* XXX: Shouldn't we rather disable hinting?
|
||||
*/
|
||||
error = AF_Err_Ok;
|
||||
error = FT_Err_Ok;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
@@ -112,7 +90,7 @@
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Scan all unicode points in the range and set the corresponding
|
||||
* Scan all Unicode points in the range and set the corresponding
|
||||
* glyph script index.
|
||||
*/
|
||||
for ( range = clazz->script_uni_ranges; range->first != 0; range++ )
|
||||
@@ -125,10 +103,8 @@
|
||||
|
||||
if ( gindex != 0 &&
|
||||
gindex < (FT_ULong)globals->glyph_count &&
|
||||
gscripts[gindex] == AF_SCRIPT_LIST_NONE )
|
||||
{
|
||||
gscripts[gindex] == AF_SCRIPT_NONE )
|
||||
gscripts[gindex] = (FT_Byte)ss;
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
@@ -138,10 +114,8 @@
|
||||
break;
|
||||
|
||||
if ( gindex < (FT_ULong)globals->glyph_count &&
|
||||
gscripts[gindex] == AF_SCRIPT_LIST_NONE )
|
||||
{
|
||||
gscripts[gindex] == AF_SCRIPT_NONE )
|
||||
gscripts[gindex] = (FT_Byte)ss;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -158,19 +132,20 @@
|
||||
|
||||
Exit:
|
||||
/*
|
||||
* By default, all uncovered glyphs are set to the latin script.
|
||||
* By default, all uncovered glyphs are set to the fallback script.
|
||||
* XXX: Shouldn't we disable hinting or do something similar?
|
||||
*/
|
||||
if ( globals->module->fallback_script != AF_SCRIPT_NONE )
|
||||
{
|
||||
FT_Long nn;
|
||||
|
||||
|
||||
for ( nn = 0; nn < globals->glyph_count; nn++ )
|
||||
{
|
||||
if ( ( gscripts[nn] & ~AF_DIGIT ) == AF_SCRIPT_LIST_NONE )
|
||||
if ( ( gscripts[nn] & ~AF_DIGIT ) == AF_SCRIPT_NONE )
|
||||
{
|
||||
gscripts[nn] &= ~AF_SCRIPT_LIST_NONE;
|
||||
gscripts[nn] |= AF_SCRIPT_LIST_DEFAULT;
|
||||
gscripts[nn] &= ~AF_SCRIPT_NONE;
|
||||
gscripts[nn] |= globals->module->fallback_script;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -182,7 +157,8 @@
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_face_globals_new( FT_Face face,
|
||||
AF_FaceGlobals *aglobals )
|
||||
AF_FaceGlobals *aglobals,
|
||||
AF_Module module )
|
||||
{
|
||||
FT_Error error;
|
||||
FT_Memory memory;
|
||||
@@ -191,21 +167,25 @@
|
||||
|
||||
memory = face->memory;
|
||||
|
||||
if ( !FT_ALLOC( globals, sizeof ( *globals ) +
|
||||
face->num_glyphs * sizeof ( FT_Byte ) ) )
|
||||
{
|
||||
globals->face = face;
|
||||
globals->glyph_count = face->num_glyphs;
|
||||
globals->glyph_scripts = (FT_Byte*)( globals + 1 );
|
||||
if ( FT_ALLOC( globals, sizeof ( *globals ) +
|
||||
face->num_glyphs * sizeof ( FT_Byte ) ) )
|
||||
goto Exit;
|
||||
|
||||
error = af_face_globals_compute_script_coverage( globals );
|
||||
if ( error )
|
||||
{
|
||||
af_face_globals_free( globals );
|
||||
globals = NULL;
|
||||
}
|
||||
globals->face = face;
|
||||
globals->glyph_count = face->num_glyphs;
|
||||
globals->glyph_scripts = (FT_Byte*)( globals + 1 );
|
||||
globals->module = module;
|
||||
|
||||
error = af_face_globals_compute_script_coverage( globals );
|
||||
if ( error )
|
||||
{
|
||||
af_face_globals_free( globals );
|
||||
globals = NULL;
|
||||
}
|
||||
|
||||
globals->increase_x_height = AF_PROP_INCREASE_X_HEIGHT_MAX;
|
||||
|
||||
Exit:
|
||||
*aglobals = globals;
|
||||
return error;
|
||||
}
|
||||
@@ -257,18 +237,18 @@
|
||||
FT_UInt script = options & 15;
|
||||
const FT_Offset script_max = sizeof ( AF_SCRIPT_CLASSES_GET ) /
|
||||
sizeof ( AF_SCRIPT_CLASSES_GET[0] );
|
||||
FT_Error error = AF_Err_Ok;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
|
||||
|
||||
if ( gindex >= (FT_ULong)globals->glyph_count )
|
||||
{
|
||||
error = AF_Err_Invalid_Argument;
|
||||
error = FT_THROW( Invalid_Argument );
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
gidx = script;
|
||||
if ( gidx == 0 || gidx + 1 >= script_max )
|
||||
gidx = globals->glyph_scripts[gindex] & AF_SCRIPT_LIST_NONE;
|
||||
gidx = globals->glyph_scripts[gindex] & AF_SCRIPT_NONE;
|
||||
|
||||
clazz = AF_SCRIPT_CLASSES_GET[gidx];
|
||||
if ( script == 0 )
|
||||
@@ -277,14 +257,15 @@
|
||||
metrics = globals->metrics[clazz->script];
|
||||
if ( metrics == NULL )
|
||||
{
|
||||
/* create the global metrics object when needed */
|
||||
/* create the global metrics object if necessary */
|
||||
FT_Memory memory = globals->face->memory;
|
||||
|
||||
|
||||
if ( FT_ALLOC( metrics, clazz->script_metrics_size ) )
|
||||
goto Exit;
|
||||
|
||||
metrics->clazz = clazz;
|
||||
metrics->clazz = clazz;
|
||||
metrics->globals = globals;
|
||||
|
||||
if ( clazz->script_metrics_init )
|
||||
{
|
||||
|
||||
+45
-7
@@ -5,7 +5,7 @@
|
||||
/* Auto-fitter routines to compute global hinting values */
|
||||
/* (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005, 2007, 2009 by */
|
||||
/* Copyright 2003-2005, 2007, 2009, 2011-2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -17,16 +17,34 @@
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __AF_GLOBAL_H__
|
||||
#define __AF_GLOBAL_H__
|
||||
#ifndef __AFGLOBAL_H__
|
||||
#define __AFGLOBAL_H__
|
||||
|
||||
|
||||
#include "aftypes.h"
|
||||
#include "afmodule.h"
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*
|
||||
* Default values and flags for both autofitter globals (found in
|
||||
* AF_ModuleRec) and face globals (in AF_FaceGlobalsRec).
|
||||
*/
|
||||
|
||||
/* index of fallback script in `af_script_classes' */
|
||||
#define AF_SCRIPT_FALLBACK 2
|
||||
/* a bit mask indicating an uncovered glyph */
|
||||
#define AF_SCRIPT_NONE 0x7F
|
||||
/* if this flag is set, we have an ASCII digit */
|
||||
#define AF_DIGIT 0x80
|
||||
|
||||
/* `increase-x-height' property */
|
||||
#define AF_PROP_INCREASE_X_HEIGHT_MIN 6
|
||||
#define AF_PROP_INCREASE_X_HEIGHT_MAX 0
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
/************************************************************************/
|
||||
/***** *****/
|
||||
@@ -36,16 +54,36 @@ FT_BEGIN_HEADER
|
||||
/************************************************************************/
|
||||
|
||||
|
||||
/*
|
||||
* Note that glyph_scripts[] is used to map each glyph into
|
||||
* an index into the `af_script_classes' array.
|
||||
*
|
||||
*/
|
||||
typedef struct AF_FaceGlobalsRec_
|
||||
{
|
||||
FT_Face face;
|
||||
FT_Long glyph_count; /* same as face->num_glyphs */
|
||||
FT_Byte* glyph_scripts;
|
||||
|
||||
/* per-face auto-hinter properties */
|
||||
FT_UInt increase_x_height;
|
||||
|
||||
AF_ScriptMetrics metrics[AF_SCRIPT_MAX];
|
||||
|
||||
AF_Module module; /* to access global properties */
|
||||
|
||||
} AF_FaceGlobalsRec;
|
||||
|
||||
|
||||
/*
|
||||
* model the global hints data for a given face, decomposed into
|
||||
* script-specific items
|
||||
*/
|
||||
typedef struct AF_FaceGlobalsRec_* AF_FaceGlobals;
|
||||
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
af_face_globals_new( FT_Face face,
|
||||
AF_FaceGlobals *aglobals );
|
||||
AF_FaceGlobals *aglobals,
|
||||
AF_Module module );
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
af_face_globals_get_metrics( AF_FaceGlobals globals,
|
||||
@@ -65,7 +103,7 @@ FT_BEGIN_HEADER
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __AF_GLOBALS_H__ */
|
||||
#endif /* __AFGLOBAL_H__ */
|
||||
|
||||
|
||||
/* END */
|
||||
|
||||
+298
-119
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Auto-fitter hinting routines (body). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005, 2006, 2007, 2009, 2010 by */
|
||||
/* Copyright 2003-2007, 2009-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -19,14 +19,27 @@
|
||||
#include "afhints.h"
|
||||
#include "aferrors.h"
|
||||
#include FT_INTERNAL_CALC_H
|
||||
#include FT_INTERNAL_DEBUG_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_afhints
|
||||
|
||||
|
||||
/* Get new segment for given axis. */
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_axis_hints_new_segment( AF_AxisHints axis,
|
||||
FT_Memory memory,
|
||||
AF_Segment *asegment )
|
||||
{
|
||||
FT_Error error = AF_Err_Ok;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
AF_Segment segment = NULL;
|
||||
|
||||
|
||||
@@ -39,7 +52,7 @@
|
||||
|
||||
if ( old_max >= big_max )
|
||||
{
|
||||
error = AF_Err_Out_Of_Memory;
|
||||
error = FT_THROW( Out_Of_Memory );
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
@@ -61,14 +74,16 @@
|
||||
}
|
||||
|
||||
|
||||
/* Get new edge for given axis, direction, and position. */
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
af_axis_hints_new_edge( AF_AxisHints axis,
|
||||
FT_Int fpos,
|
||||
AF_Direction dir,
|
||||
FT_Memory memory,
|
||||
AF_Edge *aedge )
|
||||
AF_Edge *anedge )
|
||||
{
|
||||
FT_Error error = AF_Err_Ok;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
AF_Edge edge = NULL;
|
||||
AF_Edge edges;
|
||||
|
||||
@@ -82,7 +97,7 @@
|
||||
|
||||
if ( old_max >= big_max )
|
||||
{
|
||||
error = AF_Err_Out_Of_Memory;
|
||||
error = FT_THROW( Out_Of_Memory );
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
@@ -120,12 +135,12 @@
|
||||
edge->dir = (FT_Char)dir;
|
||||
|
||||
Exit:
|
||||
*aedge = edge;
|
||||
*anedge = edge;
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
#ifdef AF_DEBUG
|
||||
#ifdef FT_DEBUG_AUTOFIT
|
||||
|
||||
#include FT_CONFIG_STANDARD_LIBRARY_H
|
||||
|
||||
@@ -160,6 +175,9 @@
|
||||
#define AF_INDEX_NUM( ptr, base ) ( (ptr) ? ( (ptr) - (base) ) : -1 )
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void
|
||||
af_glyph_hints_dump_points( AF_GlyphHints hints )
|
||||
{
|
||||
@@ -168,30 +186,31 @@
|
||||
AF_Point point;
|
||||
|
||||
|
||||
printf( "Table of points:\n" );
|
||||
printf( " [ index | xorg | yorg | xscale | yscale "
|
||||
"| xfit | yfit | flags ]\n" );
|
||||
FT_TRACE7(( "Table of points:\n"
|
||||
" [ index | xorg | yorg | xscale | yscale"
|
||||
" | xfit | yfit | flags ]\n" ));
|
||||
|
||||
for ( point = points; point < limit; point++ )
|
||||
{
|
||||
printf( " [ %5d | %5d | %5d | %-5.2f | %-5.2f "
|
||||
"| %-5.2f | %-5.2f | %c%c%c%c%c%c ]\n",
|
||||
point - points,
|
||||
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->flags & AF_FLAG_INFLECTION ) ? 'i' : ' ',
|
||||
( point->flags & AF_FLAG_EXTREMA_X ) ? '<' : ' ',
|
||||
( point->flags & AF_FLAG_EXTREMA_Y ) ? 'v' : ' ',
|
||||
( point->flags & AF_FLAG_ROUND_X ) ? '(' : ' ',
|
||||
( point->flags & AF_FLAG_ROUND_Y ) ? 'u' : ' ');
|
||||
}
|
||||
printf( "\n" );
|
||||
FT_TRACE7(( " [ %5d | %5d | %5d | %6.2f | %6.2f"
|
||||
" | %5.2f | %5.2f | %c%c%c%c%c%c ]\n",
|
||||
point - points,
|
||||
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->flags & AF_FLAG_INFLECTION ) ? 'i' : ' ',
|
||||
( point->flags & AF_FLAG_EXTREMA_X ) ? '<' : ' ',
|
||||
( point->flags & AF_FLAG_EXTREMA_Y ) ? 'v' : ' ',
|
||||
( point->flags & AF_FLAG_ROUND_X ) ? '(' : ' ',
|
||||
( point->flags & AF_FLAG_ROUND_Y ) ? 'u' : ' '));
|
||||
FT_TRACE7(( "\n" ));
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static const char*
|
||||
@@ -216,13 +235,17 @@
|
||||
if ( pos == 0 )
|
||||
return "normal";
|
||||
|
||||
temp[pos] = 0;
|
||||
temp[pos] = '\0';
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
|
||||
/* A function to dump the array of linked segments. */
|
||||
/* Dump the array of linked segments. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void
|
||||
af_glyph_hints_dump_segments( AF_GlyphHints hints )
|
||||
{
|
||||
@@ -232,34 +255,116 @@
|
||||
for ( dimension = 1; dimension >= 0; dimension-- )
|
||||
{
|
||||
AF_AxisHints axis = &hints->axis[dimension];
|
||||
AF_Point points = hints->points;
|
||||
AF_Edge edges = axis->edges;
|
||||
AF_Segment segments = axis->segments;
|
||||
AF_Segment limit = segments + axis->num_segments;
|
||||
AF_Segment seg;
|
||||
|
||||
|
||||
printf ( "Table of %s segments:\n",
|
||||
dimension == AF_DIMENSION_HORZ ? "vertical" : "horizontal" );
|
||||
printf ( " [ index | pos | dir | link | serif |"
|
||||
" height | extra | flags ]\n" );
|
||||
FT_TRACE7(( "Table of %s segments:\n",
|
||||
dimension == AF_DIMENSION_HORZ ? "vertical"
|
||||
: "horizontal" ));
|
||||
if ( axis->num_segments )
|
||||
FT_TRACE7(( " [ index | pos | dir | from"
|
||||
" | to | link | serif | edge"
|
||||
" | height | extra | flags ]\n" ));
|
||||
else
|
||||
FT_TRACE7(( " (none)\n" ));
|
||||
|
||||
for ( seg = segments; seg < limit; seg++ )
|
||||
{
|
||||
printf ( " [ %5d | %5.2g | %5s | %4d | %5d | %5d | %5d | %s ]\n",
|
||||
seg - segments,
|
||||
dimension == AF_DIMENSION_HORZ ? (int)seg->first->ox / 64.0
|
||||
: (int)seg->first->oy / 64.0,
|
||||
af_dir_str( (AF_Direction)seg->dir ),
|
||||
AF_INDEX_NUM( seg->link, segments ),
|
||||
AF_INDEX_NUM( seg->serif, segments ),
|
||||
seg->height,
|
||||
seg->height - ( seg->max_coord - seg->min_coord ),
|
||||
af_edge_flags_to_string( seg->flags ) );
|
||||
}
|
||||
printf( "\n" );
|
||||
FT_TRACE7(( " [ %5d | %5.2g | %5s | %4d"
|
||||
" | %4d | %4d | %5d | %4d"
|
||||
" | %6d | %5d | %11s ]\n",
|
||||
seg - segments,
|
||||
dimension == AF_DIMENSION_HORZ
|
||||
? (int)seg->first->ox / 64.0
|
||||
: (int)seg->first->oy / 64.0,
|
||||
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 ),
|
||||
seg->height,
|
||||
seg->height - ( seg->max_coord - seg->min_coord ),
|
||||
af_edge_flags_to_string( (AF_Edge_Flags)seg->flags ) ));
|
||||
FT_TRACE7(( "\n" ));
|
||||
}
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Fetch number of segments. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
FT_Error
|
||||
af_glyph_hints_get_num_segments( AF_GlyphHints hints,
|
||||
FT_Int dimension,
|
||||
FT_Int* num_segments )
|
||||
{
|
||||
AF_Dimension dim;
|
||||
AF_AxisHints axis;
|
||||
|
||||
|
||||
dim = ( dimension == 0 ) ? AF_DIMENSION_HORZ : AF_DIMENSION_VERT;
|
||||
|
||||
axis = &hints->axis[dim];
|
||||
*num_segments = axis->num_segments;
|
||||
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Fetch offset of segments into user supplied offset array. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
FT_Error
|
||||
af_glyph_hints_get_segment_offset( AF_GlyphHints hints,
|
||||
FT_Int dimension,
|
||||
FT_Int idx,
|
||||
FT_Pos* offset )
|
||||
{
|
||||
AF_Dimension dim;
|
||||
AF_AxisHints axis;
|
||||
AF_Segment seg;
|
||||
|
||||
|
||||
if ( !offset )
|
||||
return FT_THROW( Invalid_Argument );
|
||||
|
||||
dim = ( dimension == 0 ) ? AF_DIMENSION_HORZ : AF_DIMENSION_VERT;
|
||||
|
||||
axis = &hints->axis[dim];
|
||||
|
||||
if ( idx < 0 || idx >= axis->num_segments )
|
||||
return FT_THROW( Invalid_Argument );
|
||||
|
||||
seg = &axis->segments[idx];
|
||||
*offset = ( dim == AF_DIMENSION_HORZ ) ? seg->first->ox
|
||||
: seg->first->oy;
|
||||
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Dump the array of linked edges. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void
|
||||
af_glyph_hints_dump_edges( AF_GlyphHints hints )
|
||||
{
|
||||
@@ -276,35 +381,44 @@
|
||||
|
||||
/*
|
||||
* note: AF_DIMENSION_HORZ corresponds to _vertical_ edges
|
||||
* since they have constant a X coordinate.
|
||||
* since they have a constant X coordinate.
|
||||
*/
|
||||
printf ( "Table of %s edges:\n",
|
||||
dimension == AF_DIMENSION_HORZ ? "vertical" : "horizontal" );
|
||||
printf ( " [ index | pos | dir | link |"
|
||||
" serif | blue | opos | pos | flags ]\n" );
|
||||
FT_TRACE7(( "Table of %s edges:\n",
|
||||
dimension == AF_DIMENSION_HORZ ? "vertical"
|
||||
: "horizontal" ));
|
||||
if ( axis->num_edges )
|
||||
FT_TRACE7(( " [ index | pos | dir | link"
|
||||
" | serif | blue | opos | pos | flags ]\n" ));
|
||||
else
|
||||
FT_TRACE7(( " (none)\n" ));
|
||||
|
||||
for ( edge = edges; edge < limit; edge++ )
|
||||
{
|
||||
printf ( " [ %5d | %5.2g | %5s | %4d |"
|
||||
" %5d | %c | %5.2f | %5.2f | %s ]\n",
|
||||
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 ),
|
||||
edge->blue_edge ? 'y' : 'n',
|
||||
edge->opos / 64.0,
|
||||
edge->pos / 64.0,
|
||||
af_edge_flags_to_string( edge->flags ) );
|
||||
}
|
||||
printf( "\n" );
|
||||
FT_TRACE7(( " [ %5d | %5.2g | %5s | %4d"
|
||||
" | %5d | %c | %5.2f | %5.2f | %11s ]\n",
|
||||
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 ),
|
||||
edge->blue_edge ? 'y' : 'n',
|
||||
edge->opos / 64.0,
|
||||
edge->pos / 64.0,
|
||||
af_edge_flags_to_string( (AF_Edge_Flags)edge->flags ) ));
|
||||
FT_TRACE7(( "\n" ));
|
||||
}
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#else /* !AF_DEBUG */
|
||||
#else /* !FT_DEBUG_AUTOFIT */
|
||||
|
||||
/* these empty stubs are only used to link the `ftgrid' test program */
|
||||
/* when debugging is disabled */
|
||||
/* if debugging is disabled */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void
|
||||
af_glyph_hints_dump_points( AF_GlyphHints hints )
|
||||
@@ -320,16 +434,49 @@
|
||||
}
|
||||
|
||||
|
||||
FT_Error
|
||||
af_glyph_hints_get_num_segments( AF_GlyphHints hints,
|
||||
FT_Int dimension,
|
||||
FT_Int* num_segments )
|
||||
{
|
||||
FT_UNUSED( hints );
|
||||
FT_UNUSED( dimension );
|
||||
FT_UNUSED( num_segments );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
FT_Error
|
||||
af_glyph_hints_get_segment_offset( AF_GlyphHints hints,
|
||||
FT_Int dimension,
|
||||
FT_Int idx,
|
||||
FT_Pos* offset )
|
||||
{
|
||||
FT_UNUSED( hints );
|
||||
FT_UNUSED( dimension );
|
||||
FT_UNUSED( idx );
|
||||
FT_UNUSED( offset );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
af_glyph_hints_dump_edges( AF_GlyphHints hints )
|
||||
{
|
||||
FT_UNUSED( hints );
|
||||
}
|
||||
|
||||
#endif /* !AF_DEBUG */
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !FT_DEBUG_AUTOFIT */
|
||||
|
||||
|
||||
/* compute the direction value of a given vector */
|
||||
/* Compute the direction value of a given vector. */
|
||||
|
||||
FT_LOCAL_DEF( AF_Direction )
|
||||
af_direction_compute( FT_Pos dx,
|
||||
FT_Pos dy )
|
||||
@@ -369,6 +516,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* return no direction if arm lengths differ too much */
|
||||
/* (value 14 is heuristic, corresponding to approx. 4.1 degrees) */
|
||||
ss *= 14;
|
||||
if ( FT_ABS( ll ) <= FT_ABS( ss ) )
|
||||
dir = AF_DIR_NONE;
|
||||
@@ -389,43 +538,45 @@
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_done( AF_GlyphHints hints )
|
||||
{
|
||||
if ( hints && hints->memory )
|
||||
FT_Memory memory = hints->memory;
|
||||
int dim;
|
||||
|
||||
|
||||
if ( !( hints && hints->memory ) )
|
||||
return;
|
||||
|
||||
/*
|
||||
* note that we don't need to free the segment and edge
|
||||
* buffers since they are really within the hints->points array
|
||||
*/
|
||||
for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
|
||||
{
|
||||
FT_Memory memory = hints->memory;
|
||||
int dim;
|
||||
AF_AxisHints axis = &hints->axis[dim];
|
||||
|
||||
|
||||
/*
|
||||
* note that we don't need to free the segment and edge
|
||||
* buffers, since they are really within the hints->points array
|
||||
*/
|
||||
for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
|
||||
{
|
||||
AF_AxisHints axis = &hints->axis[dim];
|
||||
axis->num_segments = 0;
|
||||
axis->max_segments = 0;
|
||||
FT_FREE( axis->segments );
|
||||
|
||||
|
||||
axis->num_segments = 0;
|
||||
axis->max_segments = 0;
|
||||
FT_FREE( axis->segments );
|
||||
|
||||
axis->num_edges = 0;
|
||||
axis->max_edges = 0;
|
||||
FT_FREE( axis->edges );
|
||||
}
|
||||
|
||||
FT_FREE( hints->contours );
|
||||
hints->max_contours = 0;
|
||||
hints->num_contours = 0;
|
||||
|
||||
FT_FREE( hints->points );
|
||||
hints->num_points = 0;
|
||||
hints->max_points = 0;
|
||||
|
||||
hints->memory = NULL;
|
||||
axis->num_edges = 0;
|
||||
axis->max_edges = 0;
|
||||
FT_FREE( axis->edges );
|
||||
}
|
||||
|
||||
FT_FREE( hints->contours );
|
||||
hints->max_contours = 0;
|
||||
hints->num_contours = 0;
|
||||
|
||||
FT_FREE( hints->points );
|
||||
hints->num_points = 0;
|
||||
hints->max_points = 0;
|
||||
|
||||
hints->memory = NULL;
|
||||
}
|
||||
|
||||
|
||||
/* Reset metrics. */
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_rescale( AF_GlyphHints hints,
|
||||
AF_ScriptMetrics metrics )
|
||||
@@ -435,11 +586,14 @@
|
||||
}
|
||||
|
||||
|
||||
/* Recompute all AF_Point in AF_GlyphHints from the definitions */
|
||||
/* in a source outline. */
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_glyph_hints_reload( AF_GlyphHints hints,
|
||||
FT_Outline* outline )
|
||||
{
|
||||
FT_Error error = AF_Err_Ok;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
AF_Point points;
|
||||
FT_UInt old_max, new_max;
|
||||
FT_Fixed x_scale = hints->x_scale;
|
||||
@@ -457,12 +611,12 @@
|
||||
hints->axis[1].num_segments = 0;
|
||||
hints->axis[1].num_edges = 0;
|
||||
|
||||
/* first of all, reallocate the contours array when necessary */
|
||||
/* first of all, reallocate the contours array if necessary */
|
||||
new_max = (FT_UInt)outline->n_contours;
|
||||
old_max = hints->max_contours;
|
||||
if ( new_max > old_max )
|
||||
{
|
||||
new_max = ( new_max + 3 ) & ~3;
|
||||
new_max = ( new_max + 3 ) & ~3; /* round up to a multiple of 4 */
|
||||
|
||||
if ( FT_RENEW_ARRAY( hints->contours, old_max, new_max ) )
|
||||
goto Exit;
|
||||
@@ -479,7 +633,7 @@
|
||||
old_max = hints->max_points;
|
||||
if ( new_max > old_max )
|
||||
{
|
||||
new_max = ( new_max + 2 + 7 ) & ~7;
|
||||
new_max = ( new_max + 2 + 7 ) & ~7; /* round up to a multiple of 8 */
|
||||
|
||||
if ( FT_RENEW_ARRAY( hints->points, old_max, new_max ) )
|
||||
goto Exit;
|
||||
@@ -545,7 +699,7 @@
|
||||
point->flags = AF_FLAG_CUBIC;
|
||||
break;
|
||||
default:
|
||||
point->flags = 0;
|
||||
point->flags = AF_FLAG_NONE;
|
||||
}
|
||||
|
||||
point->prev = prev;
|
||||
@@ -563,7 +717,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* set-up the contours array */
|
||||
/* set up the contours array */
|
||||
{
|
||||
AF_Point* contour = hints->contours;
|
||||
AF_Point* contour_limit = contour + hints->num_contours;
|
||||
@@ -611,7 +765,9 @@
|
||||
in_dir = af_direction_compute( out_x, out_y );
|
||||
point->out_dir = (FT_Char)in_dir;
|
||||
|
||||
if ( point->flags & ( AF_FLAG_CONIC | AF_FLAG_CUBIC ) )
|
||||
/* check for weak points */
|
||||
|
||||
if ( point->flags & AF_FLAG_CONTROL )
|
||||
{
|
||||
Is_Weak_Point:
|
||||
point->flags |= AF_FLAG_WEAK_INTERPOLATION;
|
||||
@@ -639,6 +795,8 @@
|
||||
}
|
||||
|
||||
|
||||
/* Store the hinted outline in an FT_Outline structure. */
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_save( AF_GlyphHints hints,
|
||||
FT_Outline* outline )
|
||||
@@ -671,6 +829,9 @@
|
||||
****************************************************************/
|
||||
|
||||
|
||||
/* Align all points of an edge to the same coordinate value, */
|
||||
/* either horizontally or vertically. */
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_align_edge_points( AF_GlyphHints hints,
|
||||
AF_Dimension dim )
|
||||
@@ -704,7 +865,6 @@
|
||||
break;
|
||||
|
||||
point = point->next;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -744,8 +904,8 @@
|
||||
****************************************************************/
|
||||
|
||||
|
||||
/* hint the strong points -- this is equivalent to the TrueType `IP' */
|
||||
/* hinting instruction */
|
||||
/* Hint the strong points -- this is equivalent to the TrueType `IP' */
|
||||
/* hinting instruction. */
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_align_strong_points( AF_GlyphHints hints,
|
||||
@@ -827,11 +987,12 @@
|
||||
max = edge_limit - edges;
|
||||
|
||||
#if 1
|
||||
/* for small edge counts, a linear search is better */
|
||||
/* for a small number of edges, a linear search is better */
|
||||
if ( max <= 8 )
|
||||
{
|
||||
FT_PtrDist nn;
|
||||
|
||||
|
||||
for ( nn = 0; nn < max; nn++ )
|
||||
if ( edges[nn].fpos >= u )
|
||||
break;
|
||||
@@ -863,6 +1024,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* point is not on an edge */
|
||||
{
|
||||
AF_Edge before = edges + min - 1;
|
||||
AF_Edge after = edges + min + 0;
|
||||
@@ -898,6 +1060,10 @@
|
||||
****************************************************************/
|
||||
|
||||
|
||||
/* Shift the original coordinates of all points between `p1' and */
|
||||
/* `p2' to get hinted coordinates, using the same difference as */
|
||||
/* given by `ref'. */
|
||||
|
||||
static void
|
||||
af_iup_shift( AF_Point p1,
|
||||
AF_Point p2,
|
||||
@@ -906,6 +1072,7 @@
|
||||
AF_Point p;
|
||||
FT_Pos delta = ref->u - ref->v;
|
||||
|
||||
|
||||
if ( delta == 0 )
|
||||
return;
|
||||
|
||||
@@ -917,6 +1084,13 @@
|
||||
}
|
||||
|
||||
|
||||
/* Interpolate the original coordinates of all points between `p1' and */
|
||||
/* `p2' to get hinted coordinates, using `ref1' and `ref2' as the */
|
||||
/* reference points. The `u' and `v' members are the current and */
|
||||
/* original coordinate values, respectively. */
|
||||
/* */
|
||||
/* Details can be found in the TrueType bytecode specification. */
|
||||
|
||||
static void
|
||||
af_iup_interp( AF_Point p1,
|
||||
AF_Point p2,
|
||||
@@ -985,6 +1159,9 @@
|
||||
}
|
||||
|
||||
|
||||
/* Hint the weak points -- this is equivalent to the TrueType `IUP' */
|
||||
/* hinting instruction. */
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_align_weak_points( AF_GlyphHints hints,
|
||||
AF_Dimension dim )
|
||||
@@ -1050,17 +1227,18 @@
|
||||
|
||||
for (;;)
|
||||
{
|
||||
FT_ASSERT( point <= end_point &&
|
||||
FT_ASSERT( point <= end_point &&
|
||||
( point->flags & touch_flag ) != 0 );
|
||||
|
||||
/* skip any touched neighbhours */
|
||||
while ( point < end_point && ( point[1].flags & touch_flag ) != 0 )
|
||||
/* skip any touched neighbours */
|
||||
while ( point < end_point &&
|
||||
( point[1].flags & touch_flag ) != 0 )
|
||||
point++;
|
||||
|
||||
last_touched = point;
|
||||
|
||||
/* find the next touched point, if any */
|
||||
point ++;
|
||||
point++;
|
||||
for (;;)
|
||||
{
|
||||
if ( point > end_point )
|
||||
@@ -1080,9 +1258,8 @@
|
||||
EndContour:
|
||||
/* special case: only one point was touched */
|
||||
if ( last_touched == first_touched )
|
||||
{
|
||||
af_iup_shift( first_point, end_point, first_touched );
|
||||
}
|
||||
|
||||
else /* interpolate the last part */
|
||||
{
|
||||
if ( last_touched < end_point )
|
||||
@@ -1112,7 +1289,9 @@
|
||||
}
|
||||
|
||||
|
||||
#ifdef AF_USE_WARPER
|
||||
#ifdef AF_CONFIG_OPTION_USE_WARPER
|
||||
|
||||
/* Apply (small) warp scale and warp delta for given dimension. */
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_scale_dim( AF_GlyphHints hints,
|
||||
@@ -1137,6 +1316,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* AF_USE_WARPER */
|
||||
#endif /* AF_CONFIG_OPTION_USE_WARPER */
|
||||
|
||||
/* END */
|
||||
|
||||
+181
-46
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Auto-fitter hinting routines (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2010 by */
|
||||
/* Copyright 2003-2008, 2010-2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -25,10 +25,10 @@
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/*
|
||||
* The definition of outline glyph hints. These are shared by all
|
||||
* script analysis routines (until now).
|
||||
*/
|
||||
/*
|
||||
* The definition of outline glyph hints. These are shared by all
|
||||
* script analysis routines (until now).
|
||||
*/
|
||||
|
||||
typedef enum AF_Dimension_
|
||||
{
|
||||
@@ -55,6 +55,151 @@ FT_BEGIN_HEADER
|
||||
} AF_Direction;
|
||||
|
||||
|
||||
/*
|
||||
* The following explanations are mostly taken from the article
|
||||
*
|
||||
* Real-Time Grid Fitting of Typographic Outlines
|
||||
*
|
||||
* by David Turner and Werner Lemberg
|
||||
*
|
||||
* http://www.tug.org/TUGboat/Articles/tb24-3/lemberg.pdf
|
||||
*
|
||||
*
|
||||
* Segments
|
||||
*
|
||||
* `af_{cjk,latin,...}_hints_compute_segments' are the functions to
|
||||
* find segments in an outline. A segment is a series of consecutive
|
||||
* points that are approximately aligned along a coordinate axis. The
|
||||
* analysis to do so is specific to a script.
|
||||
*
|
||||
* A segment must have at least two points, except in the case of
|
||||
* `fake' segments that are generated to hint metrics appropriately,
|
||||
* and which consist of a single point.
|
||||
*
|
||||
*
|
||||
* Edges
|
||||
*
|
||||
* As soon as segments are defined, the auto-hinter groups them into
|
||||
* edges. An edge corresponds to a single position on the main
|
||||
* dimension that collects one or more segments (allowing for a small
|
||||
* threshold).
|
||||
*
|
||||
* The auto-hinter first tries to grid fit edges, then to align
|
||||
* segments on the edges unless it detects that they form a serif.
|
||||
*
|
||||
* `af_{cjk,latin,...}_hints_compute_edges' are the functions to find
|
||||
* edges; they are specific to a script.
|
||||
*
|
||||
*
|
||||
* A H
|
||||
* | |
|
||||
* | |
|
||||
* | |
|
||||
* | |
|
||||
* C | | F
|
||||
* +------<-----+ +-----<------+
|
||||
* | B G |
|
||||
* | |
|
||||
* | |
|
||||
* +--------------->------------------+
|
||||
* D E
|
||||
*
|
||||
*
|
||||
* Stems
|
||||
*
|
||||
* Segments need to be `linked' to other ones in order to detect stems.
|
||||
* A stem is made of two segments that face each other in opposite
|
||||
* directions and that are sufficiently close to each other. Using
|
||||
* vocabulary from the TrueType specification, stem segments form a
|
||||
* `black distance'.
|
||||
*
|
||||
* In the above ASCII drawing, the horizontal segments are BC, DE, and
|
||||
* FG; the vertical segments are AB, CD, EF, and GH.
|
||||
*
|
||||
* Each segment has at most one `best' candidate to form a black
|
||||
* distance, or no candidate at all. Notice that two distinct segments
|
||||
* can have the same candidate, which frequently means a serif.
|
||||
*
|
||||
* A stem is recognized by the following condition:
|
||||
*
|
||||
* best segment_1 = segment_2 && best segment_2 = segment_1
|
||||
*
|
||||
* The best candidate is stored in field `link' in structure
|
||||
* `AF_Segment'.
|
||||
*
|
||||
* Stems are detected by `af_{cjk,latin,...}_hint_edges'.
|
||||
*
|
||||
* In the above ASCII drawing, the best candidate for both AB and CD is
|
||||
* GH, while the best candidate for GH is AB. Similarly, the best
|
||||
* candidate for EF and GH is AB, while the best candidate for AB is
|
||||
* GH.
|
||||
*
|
||||
*
|
||||
* Serifs
|
||||
*
|
||||
* On the opposite, a serif has
|
||||
*
|
||||
* best segment_1 = segment_2 && best segment_2 != segment_1
|
||||
*
|
||||
* where segment_1 corresponds to the serif segment (CD and EF in the
|
||||
* above ASCII drawing).
|
||||
*
|
||||
* The best candidate is stored in field `serif' in structure
|
||||
* `AF_Segment' (and `link' is set to NULL).
|
||||
*
|
||||
* Serifs are detected by `af_{cjk,latin,...}_hint_edges'.
|
||||
*
|
||||
*
|
||||
* Touched points
|
||||
*
|
||||
* A point is called `touched' if it has been processed somehow by the
|
||||
* auto-hinter. It basically means that it shouldn't be moved again
|
||||
* (or moved only under certain constraints to preserve the already
|
||||
* applied processing).
|
||||
*
|
||||
*
|
||||
* Flat and round segments
|
||||
*
|
||||
* Segments are `round' or `flat', depending on the series of points
|
||||
* that define them. A segment is round if the next and previous point
|
||||
* of an extremum (which can be either a single point or sequence of
|
||||
* points) are both conic or cubic control points. Otherwise, a
|
||||
* segment with an extremum is flat.
|
||||
*
|
||||
*
|
||||
* Strong Points
|
||||
*
|
||||
* Experience has shown that points which are not part of an edge need
|
||||
* to be interpolated linearly between their two closest edges, even if
|
||||
* these are not part of the contour of those particular points.
|
||||
* Typical candidates for this are
|
||||
*
|
||||
* - angle points (i.e., points where the `in' and `out' direction
|
||||
* differ greatly)
|
||||
*
|
||||
* - inflection points (i.e., where the `in' and `out' angles are the
|
||||
* same, but the curvature changes sign)
|
||||
*
|
||||
* `af_glyph_hints_align_strong_points' is the function which takes
|
||||
* care of such situations; it is equivalent to the TrueType `IP'
|
||||
* hinting instruction.
|
||||
*
|
||||
*
|
||||
* Weak Points
|
||||
*
|
||||
* Other points in the outline must be interpolated using the
|
||||
* coordinates of their previous and next unfitted contour neighbours.
|
||||
* These are called `weak points' and are touched by the function
|
||||
* `af_glyph_hints_align_weak_points', equivalent to the TrueType `IUP'
|
||||
* hinting instruction. Typical candidates are control points and
|
||||
* points on the contour without a major direction.
|
||||
*
|
||||
* The major effect is to reduce possible distortion caused by
|
||||
* alignment of edges and strong points, thus weak points are processed
|
||||
* after strong points.
|
||||
*/
|
||||
|
||||
|
||||
/* point hint flags */
|
||||
typedef enum AF_Flags_
|
||||
{
|
||||
@@ -109,7 +254,7 @@ FT_BEGIN_HEADER
|
||||
FT_Char out_dir; /* direction of outwards vector */
|
||||
|
||||
FT_Pos ox, oy; /* original, scaled position */
|
||||
FT_Short fx, fy; /* original, unscaled position (font units) */
|
||||
FT_Short fx, fy; /* original, unscaled position (in font units) */
|
||||
FT_Pos x, y; /* current position */
|
||||
FT_Pos u, v; /* current (x,y) or (y,x) depending on context */
|
||||
|
||||
@@ -137,50 +282,48 @@ FT_BEGIN_HEADER
|
||||
FT_Pos score; /* used during stem matching */
|
||||
FT_Pos len; /* used during stem matching */
|
||||
|
||||
AF_Point first; /* first point in edge segment */
|
||||
AF_Point last; /* last point in edge segment */
|
||||
AF_Point* contour; /* ptr to first point of segment's contour */
|
||||
AF_Point first; /* first point in edge segment */
|
||||
AF_Point last; /* last point in edge segment */
|
||||
|
||||
} AF_SegmentRec;
|
||||
|
||||
|
||||
typedef struct AF_EdgeRec_
|
||||
{
|
||||
FT_Short fpos; /* original, unscaled position (font units) */
|
||||
FT_Pos opos; /* original, scaled position */
|
||||
FT_Pos pos; /* current position */
|
||||
FT_Short fpos; /* original, unscaled position (in font units) */
|
||||
FT_Pos opos; /* original, scaled position */
|
||||
FT_Pos pos; /* current position */
|
||||
|
||||
FT_Byte flags; /* edge flags */
|
||||
FT_Char dir; /* edge direction */
|
||||
FT_Fixed scale; /* used to speed up interpolation between edges */
|
||||
AF_Width blue_edge; /* non-NULL if this is a blue edge */
|
||||
|
||||
AF_Edge link;
|
||||
AF_Edge serif;
|
||||
FT_Short num_linked;
|
||||
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 */
|
||||
|
||||
FT_Int score;
|
||||
|
||||
AF_Segment first;
|
||||
AF_Segment last;
|
||||
AF_Segment first; /* first segment in edge */
|
||||
AF_Segment last; /* last segment in edge */
|
||||
|
||||
} AF_EdgeRec;
|
||||
|
||||
|
||||
typedef struct AF_AxisHintsRec_
|
||||
{
|
||||
FT_Int num_segments;
|
||||
FT_Int max_segments;
|
||||
AF_Segment segments;
|
||||
FT_Int num_segments; /* number of used segments */
|
||||
FT_Int max_segments; /* number of allocated segments */
|
||||
AF_Segment segments; /* segments array */
|
||||
#ifdef AF_SORT_SEGMENTS
|
||||
FT_Int mid_segments;
|
||||
#endif
|
||||
|
||||
FT_Int num_edges;
|
||||
FT_Int max_edges;
|
||||
AF_Edge edges;
|
||||
FT_Int num_edges; /* number of used edges */
|
||||
FT_Int max_edges; /* number of allocated edges */
|
||||
AF_Edge edges; /* edges array */
|
||||
|
||||
AF_Direction major_dir;
|
||||
AF_Direction major_dir; /* either vertical or horizontal */
|
||||
|
||||
} AF_AxisHintsRec, *AF_AxisHints;
|
||||
|
||||
@@ -195,15 +338,13 @@ FT_BEGIN_HEADER
|
||||
FT_Fixed y_scale;
|
||||
FT_Pos y_delta;
|
||||
|
||||
FT_Pos edge_distance_threshold;
|
||||
FT_Int max_points; /* number of allocated points */
|
||||
FT_Int num_points; /* number of used points */
|
||||
AF_Point points; /* points array */
|
||||
|
||||
FT_Int max_points;
|
||||
FT_Int num_points;
|
||||
AF_Point points;
|
||||
|
||||
FT_Int max_contours;
|
||||
FT_Int num_contours;
|
||||
AF_Point* contours;
|
||||
FT_Int max_contours; /* number of allocated contours */
|
||||
FT_Int num_contours; /* number of used contours */
|
||||
AF_Point* contours; /* contours array */
|
||||
|
||||
AF_AxisHintsRec axis[AF_DIMENSION_MAX];
|
||||
|
||||
@@ -214,7 +355,7 @@ FT_BEGIN_HEADER
|
||||
|
||||
FT_Pos xmin_delta; /* used for warping */
|
||||
FT_Pos xmax_delta;
|
||||
|
||||
|
||||
} AF_GlyphHintsRec;
|
||||
|
||||
|
||||
@@ -222,7 +363,7 @@ FT_BEGIN_HEADER
|
||||
#define AF_HINTS_TEST_OTHER( h, f ) ( (h)->other_flags & (f) )
|
||||
|
||||
|
||||
#ifdef AF_DEBUG
|
||||
#ifdef FT_DEBUG_AUTOFIT
|
||||
|
||||
#define AF_HINTS_DO_HORIZONTAL( h ) \
|
||||
( !_af_debug_disable_horz_hints && \
|
||||
@@ -237,7 +378,7 @@ FT_BEGIN_HEADER
|
||||
|
||||
#define AF_HINTS_DO_BLUES( h ) ( !_af_debug_disable_blue_hints )
|
||||
|
||||
#else /* !AF_DEBUG */
|
||||
#else /* !FT_DEBUG_AUTOFIT */
|
||||
|
||||
#define AF_HINTS_DO_HORIZONTAL( h ) \
|
||||
!AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_HORIZONTAL )
|
||||
@@ -250,7 +391,7 @@ FT_BEGIN_HEADER
|
||||
|
||||
#define AF_HINTS_DO_BLUES( h ) 1
|
||||
|
||||
#endif /* !AF_DEBUG */
|
||||
#endif /* !FT_DEBUG_AUTOFIT */
|
||||
|
||||
|
||||
FT_LOCAL( AF_Direction )
|
||||
@@ -274,12 +415,6 @@ FT_BEGIN_HEADER
|
||||
af_glyph_hints_init( AF_GlyphHints hints,
|
||||
FT_Memory memory );
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* recompute all AF_Point in a AF_GlyphHints from the definitions
|
||||
* in a source outline
|
||||
*/
|
||||
FT_LOCAL( void )
|
||||
af_glyph_hints_rescale( AF_GlyphHints hints,
|
||||
AF_ScriptMetrics metrics );
|
||||
@@ -304,7 +439,7 @@ FT_BEGIN_HEADER
|
||||
af_glyph_hints_align_weak_points( AF_GlyphHints hints,
|
||||
AF_Dimension dim );
|
||||
|
||||
#ifdef AF_USE_WARPER
|
||||
#ifdef AF_CONFIG_OPTION_USE_WARPER
|
||||
FT_LOCAL( void )
|
||||
af_glyph_hints_scale_dim( AF_GlyphHints hints,
|
||||
AF_Dimension dim,
|
||||
|
||||
+44
-17
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Auto-fitter hinting routines for Indic scripts (body). */
|
||||
/* */
|
||||
/* Copyright 2007 by */
|
||||
/* Copyright 2007, 2011-2013 by */
|
||||
/* Rahul Bhalerao <[email protected]>, <[email protected]>. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -27,23 +27,42 @@
|
||||
#include "afcjk.h"
|
||||
|
||||
|
||||
#ifdef AF_USE_WARPER
|
||||
#ifdef AF_CONFIG_OPTION_USE_WARPER
|
||||
#include "afwarp.h"
|
||||
#endif
|
||||
|
||||
|
||||
static FT_Error
|
||||
af_indic_metrics_init( AF_LatinMetrics metrics,
|
||||
FT_Face face )
|
||||
af_indic_metrics_init( AF_CJKMetrics metrics,
|
||||
FT_Face face )
|
||||
{
|
||||
/* use CJK routines */
|
||||
return af_cjk_metrics_init( metrics, face );
|
||||
/* skip blue zone init in CJK routines */
|
||||
FT_CharMap oldmap = face->charmap;
|
||||
|
||||
|
||||
metrics->units_per_em = face->units_per_EM;
|
||||
|
||||
if ( FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
|
||||
face->charmap = NULL;
|
||||
else
|
||||
{
|
||||
af_cjk_metrics_init_widths( metrics, face );
|
||||
#if 0
|
||||
/* either need indic specific blue_chars[] or just skip blue zones */
|
||||
af_cjk_metrics_init_blues( metrics, face, af_cjk_blue_chars );
|
||||
#endif
|
||||
af_cjk_metrics_check_digits( metrics, face );
|
||||
}
|
||||
|
||||
FT_Set_Charmap( face, oldmap );
|
||||
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
af_indic_metrics_scale( AF_LatinMetrics metrics,
|
||||
AF_Scaler scaler )
|
||||
af_indic_metrics_scale( AF_CJKMetrics metrics,
|
||||
AF_Scaler scaler )
|
||||
{
|
||||
/* use CJK routines */
|
||||
af_cjk_metrics_scale( metrics, scaler );
|
||||
@@ -51,8 +70,8 @@
|
||||
|
||||
|
||||
static FT_Error
|
||||
af_indic_hints_init( AF_GlyphHints hints,
|
||||
AF_LatinMetrics metrics )
|
||||
af_indic_hints_init( AF_GlyphHints hints,
|
||||
AF_CJKMetrics metrics )
|
||||
{
|
||||
/* use CJK routines */
|
||||
return af_cjk_hints_init( hints, metrics );
|
||||
@@ -60,9 +79,9 @@
|
||||
|
||||
|
||||
static FT_Error
|
||||
af_indic_hints_apply( AF_GlyphHints hints,
|
||||
FT_Outline* outline,
|
||||
AF_LatinMetrics metrics)
|
||||
af_indic_hints_apply( AF_GlyphHints hints,
|
||||
FT_Outline* outline,
|
||||
AF_CJKMetrics metrics )
|
||||
{
|
||||
/* use CJK routines */
|
||||
return af_cjk_hints_apply( hints, outline, metrics );
|
||||
@@ -84,15 +103,22 @@
|
||||
AF_UNIRANGE_REC( 0x0100UL, 0xFFFFUL ), /* why this? */
|
||||
#endif
|
||||
AF_UNIRANGE_REC( 0x0900UL, 0x0DFFUL), /* Indic Range */
|
||||
AF_UNIRANGE_REC( 0x0F00UL, 0x0FFFUL), /* Tibetan */
|
||||
AF_UNIRANGE_REC( 0x1900UL, 0x194FUL), /* Limbu */
|
||||
AF_UNIRANGE_REC( 0x1B80UL, 0x1BBFUL), /* Sundanese */
|
||||
AF_UNIRANGE_REC( 0x1C80UL, 0x1CDFUL), /* Meetei Mayak */
|
||||
AF_UNIRANGE_REC( 0xA800UL, 0xA82FUL), /* Syloti Nagri */
|
||||
AF_UNIRANGE_REC( 0x11800UL, 0x118DFUL), /* Sharada */
|
||||
AF_UNIRANGE_REC( 0UL, 0UL)
|
||||
};
|
||||
|
||||
|
||||
AF_DEFINE_SCRIPT_CLASS(af_indic_script_class,
|
||||
AF_DEFINE_SCRIPT_CLASS( af_indic_script_class,
|
||||
AF_SCRIPT_INDIC,
|
||||
af_indic_uniranges,
|
||||
'o', /* XXX */
|
||||
|
||||
sizeof( AF_LatinMetricsRec ),
|
||||
sizeof ( AF_CJKMetricsRec ),
|
||||
|
||||
(AF_Script_InitMetricsFunc) af_indic_metrics_init,
|
||||
(AF_Script_ScaleMetricsFunc)af_indic_metrics_scale,
|
||||
@@ -110,11 +136,12 @@
|
||||
};
|
||||
|
||||
|
||||
AF_DEFINE_SCRIPT_CLASS(af_indic_script_class,
|
||||
AF_DEFINE_SCRIPT_CLASS( af_indic_script_class,
|
||||
AF_SCRIPT_INDIC,
|
||||
af_indic_uniranges,
|
||||
0,
|
||||
|
||||
sizeof( AF_LatinMetricsRec ),
|
||||
sizeof ( AF_CJKMetricsRec ),
|
||||
|
||||
(AF_Script_InitMetricsFunc) NULL,
|
||||
(AF_Script_ScaleMetricsFunc)NULL,
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Auto-fitter hinting routines for Indic scripts (specification). */
|
||||
/* */
|
||||
/* Copyright 2007 by */
|
||||
/* Copyright 2007, 2012 by */
|
||||
/* Rahul Bhalerao <[email protected]>, <[email protected]>. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -27,7 +27,7 @@ FT_BEGIN_HEADER
|
||||
|
||||
/* the Indic-specific script class */
|
||||
|
||||
AF_DECLARE_SCRIPT_CLASS(af_indic_script_class)
|
||||
AF_DECLARE_SCRIPT_CLASS( af_indic_script_class )
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
+519
-257
File diff suppressed because it is too large
Load Diff
+16
-26
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Auto-fitter hinting routines for latin script (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005, 2006, 2007, 2009 by */
|
||||
/* Copyright 2003-2007, 2009, 2011-2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -27,11 +27,11 @@ FT_BEGIN_HEADER
|
||||
|
||||
/* the latin-specific script class */
|
||||
|
||||
AF_DECLARE_SCRIPT_CLASS(af_latin_script_class)
|
||||
AF_DECLARE_SCRIPT_CLASS( af_latin_script_class )
|
||||
|
||||
|
||||
/* constants are given with units_per_em == 2048 in mind */
|
||||
#define AF_LATIN_CONSTANT( metrics, c ) \
|
||||
/* constants are given with units_per_em == 2048 in mind */
|
||||
#define AF_LATIN_CONSTANT( metrics, c ) \
|
||||
( ( (c) * (FT_Long)( (AF_LatinMetrics)(metrics) )->units_per_em ) / 2048 )
|
||||
|
||||
|
||||
@@ -76,10 +76,10 @@ FT_BEGIN_HEADER
|
||||
|
||||
enum
|
||||
{
|
||||
AF_LATIN_BLUE_ACTIVE = 1 << 0,
|
||||
AF_LATIN_BLUE_TOP = 1 << 1,
|
||||
AF_LATIN_BLUE_ADJUSTMENT = 1 << 2, /* used for scale adjustment */
|
||||
/* optimization */
|
||||
AF_LATIN_BLUE_ACTIVE = 1 << 0, /* set if zone height is <= 3/4px */
|
||||
AF_LATIN_BLUE_TOP = 1 << 1, /* result of AF_LATIN_IS_TOP_BLUE */
|
||||
AF_LATIN_BLUE_ADJUSTMENT = 1 << 2, /* used for scale adjustment */
|
||||
/* optimization */
|
||||
AF_LATIN_BLUE_FLAG_MAX
|
||||
};
|
||||
|
||||
@@ -98,14 +98,13 @@ FT_BEGIN_HEADER
|
||||
FT_Fixed scale;
|
||||
FT_Pos delta;
|
||||
|
||||
FT_UInt width_count;
|
||||
AF_WidthRec widths[AF_LATIN_MAX_WIDTHS];
|
||||
FT_Pos edge_distance_threshold;
|
||||
FT_Pos standard_width;
|
||||
FT_Bool extra_light;
|
||||
FT_UInt width_count; /* number of used widths */
|
||||
AF_WidthRec widths[AF_LATIN_MAX_WIDTHS]; /* widths array */
|
||||
FT_Pos edge_distance_threshold; /* used for creating edges */
|
||||
FT_Pos standard_width; /* the default stem thickness */
|
||||
FT_Bool extra_light; /* is standard width very light? */
|
||||
|
||||
/* ignored for horizontal metrics */
|
||||
FT_Bool control_overshoot;
|
||||
FT_UInt blue_count;
|
||||
AF_LatinBlueRec blues[AF_LATIN_BLUE_MAX];
|
||||
|
||||
@@ -134,8 +133,7 @@ FT_BEGIN_HEADER
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_latin_metrics_init_widths( AF_LatinMetrics metrics,
|
||||
FT_Face face,
|
||||
FT_ULong charcode );
|
||||
FT_Face face );
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_latin_metrics_check_digits( AF_LatinMetrics metrics,
|
||||
@@ -175,25 +173,17 @@ FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*
|
||||
* This shouldn't normally be exported. However, other scripts might
|
||||
* like to use this function as-is.
|
||||
* The next functions shouldn't normally be exported. However, other
|
||||
* scripts might like to use these functions as-is.
|
||||
*/
|
||||
FT_LOCAL( FT_Error )
|
||||
af_latin_hints_compute_segments( AF_GlyphHints hints,
|
||||
AF_Dimension dim );
|
||||
|
||||
/*
|
||||
* This shouldn't normally be exported. However, other scripts might
|
||||
* want to use this function as-is.
|
||||
*/
|
||||
FT_LOCAL( void )
|
||||
af_latin_hints_link_segments( AF_GlyphHints hints,
|
||||
AF_Dimension dim );
|
||||
|
||||
/*
|
||||
* This shouldn't normally be exported. However, other scripts might
|
||||
* want to use this function as-is.
|
||||
*/
|
||||
FT_LOCAL( FT_Error )
|
||||
af_latin_hints_compute_edges( AF_GlyphHints hints,
|
||||
AF_Dimension dim );
|
||||
|
||||
+223
-162
@@ -1,10 +1,10 @@
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* aflatin.c */
|
||||
/* aflatin2.c */
|
||||
/* */
|
||||
/* Auto-fitter hinting routines for latin script (body). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by */
|
||||
/* Copyright 2003-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -18,18 +18,30 @@
|
||||
|
||||
#include FT_ADVANCES_H
|
||||
|
||||
#include "afglobal.h"
|
||||
#include "aflatin.h"
|
||||
#include "aflatin2.h"
|
||||
#include "aferrors.h"
|
||||
|
||||
|
||||
#ifdef AF_USE_WARPER
|
||||
#ifdef AF_CONFIG_OPTION_USE_WARPER
|
||||
#include "afwarp.h"
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* 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_aflatin2
|
||||
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_latin2_hints_compute_segments( AF_GlyphHints hints,
|
||||
AF_Dimension dim );
|
||||
AF_Dimension dim );
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_latin2_hints_link_segments( AF_GlyphHints hints,
|
||||
@@ -45,8 +57,7 @@
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_latin2_metrics_init_widths( AF_LatinMetrics metrics,
|
||||
FT_Face face,
|
||||
FT_ULong charcode )
|
||||
FT_Face face )
|
||||
{
|
||||
/* scan the array of segments in each direction */
|
||||
AF_GlyphHintsRec hints[1];
|
||||
@@ -65,7 +76,8 @@
|
||||
AF_Scaler scaler = &dummy->root.scaler;
|
||||
|
||||
|
||||
glyph_index = FT_Get_Char_Index( face, charcode );
|
||||
glyph_index = FT_Get_Char_Index( face,
|
||||
metrics->root.clazz->standard_char );
|
||||
if ( glyph_index == 0 )
|
||||
goto Exit;
|
||||
|
||||
@@ -122,7 +134,7 @@
|
||||
dist = -dist;
|
||||
|
||||
if ( num_widths < AF_LATIN_MAX_WIDTHS )
|
||||
axis->widths[ num_widths++ ].org = dist;
|
||||
axis->widths[num_widths++].org = dist;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,7 +168,8 @@
|
||||
#define AF_LATIN_MAX_TEST_CHARACTERS 12
|
||||
|
||||
|
||||
static const char af_latin2_blue_chars[AF_LATIN_MAX_BLUES][AF_LATIN_MAX_TEST_CHARACTERS+1] =
|
||||
static const char af_latin2_blue_chars[AF_LATIN_MAX_BLUES]
|
||||
[AF_LATIN_MAX_TEST_CHARACTERS+1] =
|
||||
{
|
||||
"THEZOCQS",
|
||||
"HEZLOCUS",
|
||||
@@ -169,7 +182,7 @@
|
||||
|
||||
static void
|
||||
af_latin2_metrics_init_blues( AF_LatinMetrics metrics,
|
||||
FT_Face face )
|
||||
FT_Face face )
|
||||
{
|
||||
FT_Pos flats [AF_LATIN_MAX_TEST_CHARACTERS];
|
||||
FT_Pos rounds[AF_LATIN_MAX_TEST_CHARACTERS];
|
||||
@@ -182,12 +195,12 @@
|
||||
FT_GlyphSlot glyph = face->glyph;
|
||||
|
||||
|
||||
/* we compute the blues simply by loading each character from the */
|
||||
/* we compute the blues simply by loading each character from the */
|
||||
/* 'af_latin2_blue_chars[blues]' string, then compute its top-most or */
|
||||
/* bottom-most points (depending on `AF_IS_TOP_BLUE') */
|
||||
/* bottom-most points (depending on `AF_IS_TOP_BLUE') */
|
||||
|
||||
AF_LOG(( "blue zones computation\n" ));
|
||||
AF_LOG(( "------------------------------------------------\n" ));
|
||||
FT_TRACE5(( "blue zones computation\n"
|
||||
"======================\n\n" ));
|
||||
|
||||
for ( bb = 0; bb < AF_LATIN_BLUE_MAX; bb++ )
|
||||
{
|
||||
@@ -197,7 +210,7 @@
|
||||
FT_Pos* blue_shoot;
|
||||
|
||||
|
||||
AF_LOG(( "blue %3d: ", bb ));
|
||||
FT_TRACE5(( "blue zone %d:\n", bb ));
|
||||
|
||||
num_flats = 0;
|
||||
num_rounds = 0;
|
||||
@@ -210,8 +223,6 @@
|
||||
FT_Bool round;
|
||||
|
||||
|
||||
AF_LOG(( "'%c'", *p ));
|
||||
|
||||
/* load the character in the face -- skip unknown or empty ones */
|
||||
glyph_index = FT_Get_Char_Index( face, (FT_UInt)*p );
|
||||
if ( glyph_index == 0 )
|
||||
@@ -273,13 +284,14 @@
|
||||
best_last = last;
|
||||
}
|
||||
}
|
||||
AF_LOG(( "%5d", best_y ));
|
||||
FT_TRACE5(( " %c %d", *p, best_y ));
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
{
|
||||
FT_Pos best_x = points[best_point].x;
|
||||
FT_Int start, end, prev, next;
|
||||
FT_Pos dist;
|
||||
|
||||
@@ -290,13 +302,16 @@
|
||||
|
||||
do
|
||||
{
|
||||
prev = start-1;
|
||||
prev = start - 1;
|
||||
if ( prev < best_first )
|
||||
prev = best_last;
|
||||
|
||||
dist = points[prev].y - best_y;
|
||||
if ( dist < -5 || dist > 5 )
|
||||
break;
|
||||
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;
|
||||
|
||||
start = prev;
|
||||
|
||||
@@ -304,13 +319,14 @@
|
||||
|
||||
do
|
||||
{
|
||||
next = end+1;
|
||||
next = end + 1;
|
||||
if ( next > best_last )
|
||||
next = best_first;
|
||||
|
||||
dist = points[next].y - best_y;
|
||||
if ( dist < -5 || dist > 5 )
|
||||
break;
|
||||
dist = FT_ABS( points[next].y - best_y );
|
||||
if ( dist > 5 )
|
||||
if ( FT_ABS( points[next].x - best_x ) <= 20 * dist )
|
||||
break;
|
||||
|
||||
end = next;
|
||||
|
||||
@@ -321,7 +337,7 @@
|
||||
FT_CURVE_TAG( glyph->outline.tags[start] ) != FT_CURVE_TAG_ON ||
|
||||
FT_CURVE_TAG( glyph->outline.tags[ end ] ) != FT_CURVE_TAG_ON );
|
||||
|
||||
AF_LOG(( "%c ", round ? 'r' : 'f' ));
|
||||
FT_TRACE5(( " (%s)\n", round ? "round" : "flat" ));
|
||||
}
|
||||
|
||||
if ( round )
|
||||
@@ -330,15 +346,13 @@
|
||||
flats[num_flats++] = best_y;
|
||||
}
|
||||
|
||||
AF_LOG(( "\n" ));
|
||||
|
||||
if ( num_flats == 0 && num_rounds == 0 )
|
||||
{
|
||||
/*
|
||||
* we couldn't find a single glyph to compute this blue zone,
|
||||
* we will simply ignore it then
|
||||
*/
|
||||
AF_LOG(( "empty\n" ));
|
||||
FT_TRACE5(( " empty\n" ));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -381,7 +395,13 @@
|
||||
|
||||
|
||||
if ( AF_LATIN_IS_TOP_BLUE( bb ) ^ over_ref )
|
||||
*blue_shoot = *blue_ref = ( shoot + ref ) / 2;
|
||||
{
|
||||
*blue_ref =
|
||||
*blue_shoot = ( shoot + ref ) / 2;
|
||||
|
||||
FT_TRACE5(( " [overshoot smaller than reference,"
|
||||
" taking mean value]\n" ));
|
||||
}
|
||||
}
|
||||
|
||||
blue->flags = 0;
|
||||
@@ -396,7 +416,9 @@
|
||||
if ( bb == AF_LATIN_BLUE_SMALL_TOP )
|
||||
blue->flags |= AF_LATIN_BLUE_ADJUSTMENT;
|
||||
|
||||
AF_LOG(( "-- ref = %ld, shoot = %ld\n", *blue_ref, *blue_shoot ));
|
||||
FT_TRACE5(( " -> reference = %ld\n"
|
||||
" overshoot = %ld\n",
|
||||
*blue_ref, *blue_shoot ));
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -451,9 +473,9 @@
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_latin2_metrics_init( AF_LatinMetrics metrics,
|
||||
FT_Face face )
|
||||
FT_Face face )
|
||||
{
|
||||
FT_Error error = AF_Err_Ok;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
FT_CharMap oldmap = face->charmap;
|
||||
FT_UInt ee;
|
||||
|
||||
@@ -479,21 +501,20 @@
|
||||
|
||||
if ( !error )
|
||||
{
|
||||
/* For now, compute the standard width and height from the `o'. */
|
||||
af_latin2_metrics_init_widths( metrics, face, 'o' );
|
||||
af_latin2_metrics_init_widths( metrics, face );
|
||||
af_latin2_metrics_init_blues( metrics, face );
|
||||
af_latin2_metrics_check_digits( metrics, face );
|
||||
}
|
||||
|
||||
FT_Set_Charmap( face, oldmap );
|
||||
return AF_Err_Ok;
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
af_latin2_metrics_scale_dim( AF_LatinMetrics metrics,
|
||||
AF_Scaler scaler,
|
||||
AF_Dimension dim )
|
||||
AF_Scaler scaler,
|
||||
AF_Dimension dim )
|
||||
{
|
||||
FT_Fixed scale;
|
||||
FT_Pos delta;
|
||||
@@ -541,14 +562,35 @@
|
||||
|
||||
if ( blue )
|
||||
{
|
||||
FT_Pos scaled = FT_MulFix( blue->shoot.org, scaler->y_scale );
|
||||
FT_Pos fitted = ( scaled + 40 ) & ~63;
|
||||
FT_Pos scaled;
|
||||
FT_Pos threshold;
|
||||
FT_Pos fitted;
|
||||
FT_UInt limit;
|
||||
FT_UInt ppem;
|
||||
|
||||
|
||||
scaled = FT_MulFix( blue->shoot.org, scaler->y_scale );
|
||||
ppem = metrics->root.scaler.face->size->metrics.x_ppem;
|
||||
limit = metrics->root.globals->increase_x_height;
|
||||
threshold = 40;
|
||||
|
||||
/* if the `increase-x-height' property is active, */
|
||||
/* we round up much more often */
|
||||
if ( limit &&
|
||||
ppem <= limit &&
|
||||
ppem >= AF_PROP_INCREASE_X_HEIGHT_MIN )
|
||||
threshold = 52;
|
||||
|
||||
fitted = ( scaled + threshold ) & ~63;
|
||||
|
||||
#if 1
|
||||
if ( scaled != fitted )
|
||||
{
|
||||
scale = FT_MulDiv( scale, fitted, scaled );
|
||||
AF_LOG(( "== scaled x-top = %.2g fitted = %.2g, scaling = %.4g\n", scaled/64.0, fitted/64.0, (fitted*1.0)/scaled ));
|
||||
FT_TRACE5(( "== scaled x-top = %.2g"
|
||||
" fitted = %.2g, scaling = %.4g\n",
|
||||
scaled / 64.0, fitted / 64.0,
|
||||
( fitted * 1.0 ) / scaled ));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -579,7 +621,7 @@
|
||||
}
|
||||
|
||||
/* an extra-light axis corresponds to a standard width that is */
|
||||
/* smaller than 0.75 pixels */
|
||||
/* smaller than 5/8 pixels */
|
||||
axis->extra_light =
|
||||
(FT_Bool)( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
|
||||
|
||||
@@ -624,9 +666,11 @@
|
||||
blue->ref.fit = FT_PIX_ROUND( blue->ref.cur );
|
||||
blue->shoot.fit = blue->ref.fit + delta2;
|
||||
|
||||
AF_LOG(( ">> activating blue zone %d: ref.cur=%.2g ref.fit=%.2g shoot.cur=%.2g shoot.fit=%.2g\n",
|
||||
nn, blue->ref.cur/64.0, blue->ref.fit/64.0,
|
||||
blue->shoot.cur/64.0, blue->shoot.fit/64.0 ));
|
||||
FT_TRACE5(( ">> activating blue zone %d:"
|
||||
" ref.cur=%.2g ref.fit=%.2g"
|
||||
" shoot.cur=%.2g shoot.fit=%.2g\n",
|
||||
nn, blue->ref.cur / 64.0, blue->ref.fit / 64.0,
|
||||
blue->shoot.cur / 64.0, blue->shoot.fit / 64.0 ));
|
||||
|
||||
blue->flags |= AF_LATIN_BLUE_ACTIVE;
|
||||
}
|
||||
@@ -637,10 +681,11 @@
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_latin2_metrics_scale( AF_LatinMetrics metrics,
|
||||
AF_Scaler scaler )
|
||||
AF_Scaler scaler )
|
||||
{
|
||||
metrics->root.scaler.render_mode = scaler->render_mode;
|
||||
metrics->root.scaler.face = scaler->face;
|
||||
metrics->root.scaler.flags = scaler->flags;
|
||||
|
||||
af_latin2_metrics_scale_dim( metrics, scaler, AF_DIMENSION_HORZ );
|
||||
af_latin2_metrics_scale_dim( metrics, scaler, AF_DIMENSION_VERT );
|
||||
@@ -659,11 +704,11 @@
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_latin2_hints_compute_segments( AF_GlyphHints hints,
|
||||
AF_Dimension dim )
|
||||
AF_Dimension dim )
|
||||
{
|
||||
AF_AxisHints axis = &hints->axis[dim];
|
||||
FT_Memory memory = hints->memory;
|
||||
FT_Error error = AF_Err_Ok;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
AF_Segment segment = NULL;
|
||||
AF_SegmentRec seg0;
|
||||
AF_Point* contour = hints->contours;
|
||||
@@ -779,18 +824,17 @@
|
||||
segment->dir = first->out_dir;
|
||||
segment->first = first;
|
||||
segment->last = point;
|
||||
segment->contour = contour;
|
||||
segment->pos = (FT_Short)(( min_u + max_u ) >> 1);
|
||||
segment->pos = (FT_Short)( ( min_u + max_u ) >> 1 );
|
||||
segment->min_coord = (FT_Short) min_v;
|
||||
segment->max_coord = (FT_Short) max_v;
|
||||
segment->height = (FT_Short)(max_v - min_v);
|
||||
segment->height = (FT_Short)( max_v - min_v );
|
||||
|
||||
/* a segment is round if it doesn't have successive */
|
||||
/* on-curve points. */
|
||||
{
|
||||
AF_Point pt = first;
|
||||
AF_Point last = point;
|
||||
AF_Flags f0 = (AF_Flags)(pt->flags & AF_FLAG_CONTROL);
|
||||
AF_Flags f0 = (AF_Flags)( pt->flags & AF_FLAG_CONTROL );
|
||||
AF_Flags f1;
|
||||
|
||||
|
||||
@@ -799,7 +843,7 @@
|
||||
for ( ; pt != last; f0 = f1 )
|
||||
{
|
||||
pt = pt->next;
|
||||
f1 = (AF_Flags)(pt->flags & AF_FLAG_CONTROL);
|
||||
f1 = (AF_Flags)( pt->flags & AF_FLAG_CONTROL );
|
||||
|
||||
if ( !f0 && !f1 )
|
||||
break;
|
||||
@@ -816,7 +860,7 @@
|
||||
break;
|
||||
|
||||
/* jump to the start of the next segment, if any */
|
||||
while ( FT_ABS(point->out_dir) != major_dir )
|
||||
while ( FT_ABS( point->out_dir ) != major_dir )
|
||||
{
|
||||
point = point->next;
|
||||
|
||||
@@ -884,16 +928,17 @@
|
||||
FT_UInt count = axis->num_segments;
|
||||
FT_UInt ii, jj;
|
||||
|
||||
for (ii = 0; ii < count; ii++)
|
||||
for ( ii = 0; ii < count; ii++ )
|
||||
{
|
||||
if ( segments[ii].dir > 0 )
|
||||
{
|
||||
for (jj = ii+1; jj < count; jj++)
|
||||
for ( jj = ii + 1; jj < count; jj++ )
|
||||
{
|
||||
if ( segments[jj].dir < 0 )
|
||||
{
|
||||
AF_SegmentRec tmp;
|
||||
|
||||
|
||||
tmp = segments[ii];
|
||||
segments[ii] = segments[jj];
|
||||
segments[jj] = tmp;
|
||||
@@ -917,7 +962,7 @@
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_latin2_hints_link_segments( AF_GlyphHints hints,
|
||||
AF_Dimension dim )
|
||||
AF_Dimension dim )
|
||||
{
|
||||
AF_AxisHints axis = &hints->axis[dim];
|
||||
AF_Segment segments = axis->segments;
|
||||
@@ -1017,10 +1062,10 @@
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_latin2_hints_compute_edges( AF_GlyphHints hints,
|
||||
AF_Dimension dim )
|
||||
AF_Dimension dim )
|
||||
{
|
||||
AF_AxisHints axis = &hints->axis[dim];
|
||||
FT_Error error = AF_Err_Ok;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
FT_Memory memory = hints->memory;
|
||||
AF_LatinAxis laxis = &((AF_LatinMetrics)hints->metrics)->axis[dim];
|
||||
|
||||
@@ -1054,7 +1099,7 @@
|
||||
if ( dim == AF_DIMENSION_HORZ )
|
||||
{
|
||||
if ( laxis->width_count > 0 )
|
||||
segment_length_threshold = (laxis->standard_width * 10 ) >> 4;
|
||||
segment_length_threshold = ( laxis->standard_width * 10 ) >> 4;
|
||||
else
|
||||
segment_length_threshold = FT_DivFix( 64, hints->y_scale );
|
||||
}
|
||||
@@ -1100,10 +1145,11 @@
|
||||
{
|
||||
FT_Pos dist = seg->serif->pos - seg->pos;
|
||||
|
||||
if (dist < 0)
|
||||
|
||||
if ( dist < 0 )
|
||||
dist = -dist;
|
||||
|
||||
if (dist >= laxis->standard_width >> 1)
|
||||
if ( dist >= laxis->standard_width >> 1 )
|
||||
{
|
||||
/* unlink this serif, it is too distant from its reference stem */
|
||||
seg->serif = NULL;
|
||||
@@ -1137,7 +1183,8 @@
|
||||
|
||||
/* insert a new edge in the list and */
|
||||
/* sort according to the position */
|
||||
error = af_axis_hints_new_edge( axis, seg->pos, seg->dir, memory, &edge );
|
||||
error = af_axis_hints_new_edge( axis, seg->pos, seg->dir,
|
||||
memory, &edge );
|
||||
if ( error )
|
||||
goto Exit;
|
||||
|
||||
@@ -1205,8 +1252,10 @@
|
||||
{
|
||||
FT_Int is_round = 0; /* does it contain round segments? */
|
||||
FT_Int is_straight = 0; /* does it contain straight segments? */
|
||||
#if 0
|
||||
FT_Pos ups = 0; /* number of upwards segments */
|
||||
FT_Pos downs = 0; /* number of downwards segments */
|
||||
#endif
|
||||
|
||||
|
||||
seg = edge->first;
|
||||
@@ -1222,11 +1271,13 @@
|
||||
else
|
||||
is_straight++;
|
||||
|
||||
#if 0
|
||||
/* check for segment direction */
|
||||
if ( seg->dir == up_dir )
|
||||
ups += seg->max_coord-seg->min_coord;
|
||||
else
|
||||
downs += seg->max_coord-seg->min_coord;
|
||||
#endif
|
||||
|
||||
/* check for links -- if seg->serif is set, then seg->link must */
|
||||
/* be ignored */
|
||||
@@ -1318,7 +1369,7 @@
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_latin2_hints_detect_features( AF_GlyphHints hints,
|
||||
AF_Dimension dim )
|
||||
AF_Dimension dim )
|
||||
{
|
||||
FT_Error error;
|
||||
|
||||
@@ -1336,12 +1387,12 @@
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_latin2_hints_compute_blue_edges( AF_GlyphHints hints,
|
||||
AF_LatinMetrics metrics )
|
||||
AF_LatinMetrics metrics )
|
||||
{
|
||||
AF_AxisHints axis = &hints->axis[ AF_DIMENSION_VERT ];
|
||||
AF_AxisHints axis = &hints->axis[AF_DIMENSION_VERT];
|
||||
AF_Edge edge = axis->edges;
|
||||
AF_Edge edge_limit = edge + axis->num_edges;
|
||||
AF_LatinAxis latin = &metrics->axis[ AF_DIMENSION_VERT ];
|
||||
AF_LatinAxis latin = &metrics->axis[AF_DIMENSION_VERT];
|
||||
FT_Fixed scale = latin->scale;
|
||||
FT_Pos best_dist0; /* initial threshold */
|
||||
|
||||
@@ -1396,7 +1447,7 @@
|
||||
compare = &blue->ref;
|
||||
|
||||
dist = edge->fpos - compare->org;
|
||||
if (dist < 0)
|
||||
if ( dist < 0 )
|
||||
dist = -dist;
|
||||
|
||||
dist = FT_MulFix( dist, scale );
|
||||
@@ -1442,7 +1493,7 @@
|
||||
|
||||
static FT_Error
|
||||
af_latin2_hints_init( AF_GlyphHints hints,
|
||||
AF_LatinMetrics metrics )
|
||||
AF_LatinMetrics metrics )
|
||||
{
|
||||
FT_Render_Mode mode;
|
||||
FT_UInt32 scaler_flags, other_flags;
|
||||
@@ -1463,7 +1514,7 @@
|
||||
/* compute flags depending on render mode, etc. */
|
||||
mode = metrics->root.scaler.render_mode;
|
||||
|
||||
#if 0 /* #ifdef AF_USE_WARPER */
|
||||
#if 0 /* #ifdef AF_CONFIG_OPTION_USE_WARPER */
|
||||
if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
|
||||
{
|
||||
metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
|
||||
@@ -1500,8 +1551,8 @@
|
||||
* In `light' hinting 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 ||
|
||||
( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
|
||||
scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
|
||||
|
||||
hints->scaler_flags = scaler_flags;
|
||||
@@ -1524,8 +1575,8 @@
|
||||
|
||||
static FT_Pos
|
||||
af_latin2_snap_width( AF_Width widths,
|
||||
FT_Int count,
|
||||
FT_Pos width )
|
||||
FT_Int count,
|
||||
FT_Pos width )
|
||||
{
|
||||
int n;
|
||||
FT_Pos best = 64 + 32 + 2;
|
||||
@@ -1571,10 +1622,10 @@
|
||||
|
||||
static FT_Pos
|
||||
af_latin2_compute_stem_width( AF_GlyphHints hints,
|
||||
AF_Dimension dim,
|
||||
FT_Pos width,
|
||||
AF_Edge_Flags base_flags,
|
||||
AF_Edge_Flags stem_flags )
|
||||
AF_Dimension dim,
|
||||
FT_Pos width,
|
||||
AF_Edge_Flags base_flags,
|
||||
AF_Edge_Flags stem_flags )
|
||||
{
|
||||
AF_LatinMetrics metrics = (AF_LatinMetrics) hints->metrics;
|
||||
AF_LatinAxis axis = & metrics->axis[dim];
|
||||
@@ -1582,8 +1633,8 @@
|
||||
FT_Int sign = 0;
|
||||
FT_Int vertical = ( dim == AF_DIMENSION_VERT );
|
||||
|
||||
FT_UNUSED( base_flags );
|
||||
|
||||
FT_UNUSED(base_flags);
|
||||
|
||||
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) ||
|
||||
axis->extra_light )
|
||||
@@ -1713,7 +1764,7 @@
|
||||
if ( delta < 0 )
|
||||
delta = -delta;
|
||||
|
||||
if (delta >= 16)
|
||||
if ( delta >= 16 )
|
||||
{
|
||||
dist = org_dist;
|
||||
if ( dist < 48 )
|
||||
@@ -1739,9 +1790,9 @@
|
||||
|
||||
static void
|
||||
af_latin2_align_linked_edge( AF_GlyphHints hints,
|
||||
AF_Dimension dim,
|
||||
AF_Edge base_edge,
|
||||
AF_Edge stem_edge )
|
||||
AF_Dimension dim,
|
||||
AF_Edge base_edge,
|
||||
AF_Edge stem_edge )
|
||||
{
|
||||
FT_Pos dist = stem_edge->opos - base_edge->opos;
|
||||
|
||||
@@ -1753,21 +1804,21 @@
|
||||
|
||||
stem_edge->pos = base_edge->pos + fitted_width;
|
||||
|
||||
AF_LOG(( "LINK: edge %d (opos=%.2f) linked to (%.2f), "
|
||||
"dist was %.2f, now %.2f\n",
|
||||
stem_edge-hints->axis[dim].edges, stem_edge->opos / 64.0,
|
||||
stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
|
||||
FT_TRACE5(( "LINK: edge %d (opos=%.2f) linked to (%.2f), "
|
||||
"dist was %.2f, now %.2f\n",
|
||||
stem_edge-hints->axis[dim].edges, stem_edge->opos / 64.0,
|
||||
stem_edge->pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
af_latin2_align_serif_edge( AF_GlyphHints hints,
|
||||
AF_Edge base,
|
||||
AF_Edge serif )
|
||||
AF_Edge base,
|
||||
AF_Edge serif )
|
||||
{
|
||||
FT_UNUSED( hints );
|
||||
|
||||
serif->pos = base->pos + (serif->opos - base->opos);
|
||||
serif->pos = base->pos + ( serif->opos - base->opos );
|
||||
}
|
||||
|
||||
|
||||
@@ -1784,7 +1835,7 @@
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_latin2_hint_edges( AF_GlyphHints hints,
|
||||
AF_Dimension dim )
|
||||
AF_Dimension dim )
|
||||
{
|
||||
AF_AxisHints axis = &hints->axis[dim];
|
||||
AF_Edge edges = axis->edges;
|
||||
@@ -1796,7 +1847,8 @@
|
||||
|
||||
|
||||
|
||||
AF_LOG(( "==== hinting %s edges =====\n", dim == AF_DIMENSION_HORZ ? "vertical" : "horizontal" ));
|
||||
FT_TRACE5(( "==== hinting %s edges =====\n",
|
||||
dim == AF_DIMENSION_HORZ ? "vertical" : "horizontal" ));
|
||||
|
||||
/* we begin by aligning all stems relative to the blue zone */
|
||||
/* if needed -- that's only for horizontal edges */
|
||||
@@ -1830,10 +1882,10 @@
|
||||
if ( !edge1 )
|
||||
continue;
|
||||
|
||||
AF_LOG(( "BLUE: edge %d (opos=%.2f) snapped to (%.2f), "
|
||||
"was (%.2f)\n",
|
||||
edge1-edges, edge1->opos / 64.0, blue->fit / 64.0,
|
||||
edge1->pos / 64.0 ));
|
||||
FT_TRACE5(( "BLUE: edge %d (opos=%.2f) snapped to (%.2f), "
|
||||
"was (%.2f)\n",
|
||||
edge1-edges, edge1->opos / 64.0, blue->fit / 64.0,
|
||||
edge1->pos / 64.0 ));
|
||||
|
||||
edge1->pos = blue->fit;
|
||||
edge1->flags |= AF_EDGE_DONE;
|
||||
@@ -1848,9 +1900,10 @@
|
||||
{
|
||||
anchor = edge;
|
||||
|
||||
anchor_drift = (anchor->pos - anchor->opos);
|
||||
if (edge2)
|
||||
anchor_drift = (anchor_drift + (edge2->pos - edge2->opos)) >> 1;
|
||||
anchor_drift = ( anchor->pos - anchor->opos );
|
||||
if ( edge2 )
|
||||
anchor_drift = ( anchor_drift +
|
||||
( edge2->pos - edge2->opos ) ) >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1878,7 +1931,7 @@
|
||||
/* this should not happen, but it's better to be safe */
|
||||
if ( edge2->blue_edge )
|
||||
{
|
||||
AF_LOG(( "ASSERTION FAILED for edge %d\n", edge2-edges ));
|
||||
FT_TRACE5(( "ASSERTION FAILED for edge %d\n", edge2-edges ));
|
||||
|
||||
af_latin2_align_linked_edge( hints, dim, edge2, edge );
|
||||
edge->flags |= AF_EDGE_DONE;
|
||||
@@ -1929,11 +1982,11 @@
|
||||
else
|
||||
edge->pos = FT_PIX_ROUND( edge->opos );
|
||||
|
||||
AF_LOG(( "ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f) "
|
||||
"snapped to (%.2f) (%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0,
|
||||
edge2-edges, edge2->opos / 64.0,
|
||||
edge->pos / 64.0, edge2->pos / 64.0 ));
|
||||
FT_TRACE5(( "ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)"
|
||||
" snapped to (%.2f) (%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0,
|
||||
edge2-edges, edge2->opos / 64.0,
|
||||
edge->pos / 64.0, edge2->pos / 64.0 ));
|
||||
anchor = edge;
|
||||
|
||||
edge->flags |= AF_EDGE_DONE;
|
||||
@@ -1942,10 +1995,10 @@
|
||||
|
||||
edge2->flags |= AF_EDGE_DONE;
|
||||
|
||||
anchor_drift = ( (anchor->pos - anchor->opos) +
|
||||
(edge2->pos - edge2->opos)) >> 1;
|
||||
anchor_drift = ( ( anchor->pos - anchor->opos ) +
|
||||
( edge2->pos - edge2->opos ) ) >> 1;
|
||||
|
||||
AF_LOG(( "DRIFT: %.2f\n", anchor_drift/64.0 ));
|
||||
FT_TRACE5(( "DRIFT: %.2f\n", anchor_drift/64.0 ));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1962,15 +2015,16 @@
|
||||
(AF_Edge_Flags)edge->flags,
|
||||
(AF_Edge_Flags)edge2->flags );
|
||||
|
||||
org_left = org_pos + ((org_len - cur_len) >> 1);
|
||||
org_right = org_pos + ((org_len + cur_len) >> 1);
|
||||
org_left = org_pos + ( ( org_len - cur_len ) >> 1 );
|
||||
org_right = org_pos + ( ( org_len + cur_len ) >> 1 );
|
||||
|
||||
AF_LOG(( "ALIGN: left=%.2f right=%.2f ", org_left/64.0, org_right/64.0 ));
|
||||
FT_TRACE5(( "ALIGN: left=%.2f right=%.2f ",
|
||||
org_left / 64.0, org_right / 64.0 ));
|
||||
cur_center = org_center;
|
||||
|
||||
if ( edge2->flags & AF_EDGE_DONE )
|
||||
{
|
||||
AF_LOG(( "\n" ));
|
||||
FT_TRACE5(( "\n" ));
|
||||
edge->pos = edge2->pos - cur_len;
|
||||
}
|
||||
else
|
||||
@@ -1985,18 +2039,18 @@
|
||||
/* note: don't even try to fit tiny stems */
|
||||
if ( cur_len < 32 )
|
||||
{
|
||||
AF_LOG(( "tiny stem\n" ));
|
||||
FT_TRACE5(( "tiny stem\n" ));
|
||||
goto AlignStem;
|
||||
}
|
||||
|
||||
/* if the span is within a single pixel, don't touch it */
|
||||
if ( FT_PIX_FLOOR(org_left) == FT_PIX_CEIL(org_right) )
|
||||
if ( FT_PIX_FLOOR( org_left ) == FT_PIX_CEIL( org_right ) )
|
||||
{
|
||||
AF_LOG(( "single pixel stem\n" ));
|
||||
FT_TRACE5(( "single pixel stem\n" ));
|
||||
goto AlignStem;
|
||||
}
|
||||
|
||||
if (cur_len <= 96)
|
||||
if ( cur_len <= 96 )
|
||||
{
|
||||
/* we want to avoid the absolute worst case which is
|
||||
* when the left and right edges of the span each represent
|
||||
@@ -2004,43 +2058,43 @@
|
||||
* to 25/75%, since this is much more pleasant to the eye with
|
||||
* very acceptable distortion
|
||||
*/
|
||||
FT_Pos frac_left = (org_left) & 63;
|
||||
FT_Pos frac_right = (org_right) & 63;
|
||||
FT_Pos frac_left = org_left & 63;
|
||||
FT_Pos frac_right = org_right & 63;
|
||||
|
||||
if ( frac_left >= 22 && frac_left <= 42 &&
|
||||
frac_right >= 22 && frac_right <= 42 )
|
||||
{
|
||||
org = frac_left;
|
||||
fit = (org <= 32) ? 16 : 48;
|
||||
delta = FT_ABS(fit - org);
|
||||
fit = ( org <= 32 ) ? 16 : 48;
|
||||
delta = FT_ABS( fit - org );
|
||||
displacements[count] = fit - org;
|
||||
scores[count++] = delta;
|
||||
AF_LOG(( "dispA=%.2f (%d) ", (fit - org)/64.0, delta ));
|
||||
FT_TRACE5(( "dispA=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
|
||||
|
||||
org = frac_right;
|
||||
fit = (org <= 32) ? 16 : 48;
|
||||
delta = FT_ABS(fit - org);
|
||||
fit = ( org <= 32 ) ? 16 : 48;
|
||||
delta = FT_ABS( fit - org );
|
||||
displacements[count] = fit - org;
|
||||
scores[count++] = delta;
|
||||
AF_LOG(( "dispB=%.2f (%d) ", (fit - org)/64.0, delta ));
|
||||
FT_TRACE5(( "dispB=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
|
||||
}
|
||||
}
|
||||
|
||||
/* snapping the left edge to the grid */
|
||||
org = org_left;
|
||||
fit = FT_PIX_ROUND(org);
|
||||
delta = FT_ABS(fit - org);
|
||||
fit = FT_PIX_ROUND( org );
|
||||
delta = FT_ABS( fit - org );
|
||||
displacements[count] = fit - org;
|
||||
scores[count++] = delta;
|
||||
AF_LOG(( "dispC=%.2f (%d) ", (fit - org)/64.0, delta ));
|
||||
FT_TRACE5(( "dispC=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
|
||||
|
||||
/* snapping the right edge to the grid */
|
||||
org = org_right;
|
||||
fit = FT_PIX_ROUND(org);
|
||||
delta = FT_ABS(fit - org);
|
||||
fit = FT_PIX_ROUND( org );
|
||||
delta = FT_ABS( fit - org );
|
||||
displacements[count] = fit - org;
|
||||
scores[count++] = delta;
|
||||
AF_LOG(( "dispD=%.2f (%d) ", (fit - org)/64.0, delta ));
|
||||
FT_TRACE5(( "dispD=%.2f (%d) ", ( fit - org ) / 64.0, delta ));
|
||||
|
||||
/* now find the best displacement */
|
||||
{
|
||||
@@ -2048,9 +2102,9 @@
|
||||
FT_Pos best_disp = displacements[0];
|
||||
FT_UInt nn;
|
||||
|
||||
for (nn = 1; nn < count; nn++)
|
||||
for ( nn = 1; nn < count; nn++ )
|
||||
{
|
||||
if (scores[nn] < best_score)
|
||||
if ( scores[nn] < best_score )
|
||||
{
|
||||
best_score = scores[nn];
|
||||
best_disp = displacements[nn];
|
||||
@@ -2059,27 +2113,28 @@
|
||||
|
||||
cur_center = org_center + best_disp;
|
||||
}
|
||||
AF_LOG(( "\n" ));
|
||||
FT_TRACE5(( "\n" ));
|
||||
}
|
||||
|
||||
AlignStem:
|
||||
edge->pos = cur_center - (cur_len >> 1);
|
||||
edge->pos = cur_center - ( cur_len >> 1 );
|
||||
edge2->pos = edge->pos + cur_len;
|
||||
|
||||
AF_LOG(( "STEM1: %d (opos=%.2f) to %d (opos=%.2f) "
|
||||
"snapped to (%.2f) and (%.2f), org_len = %.2f cur_len=%.2f\n",
|
||||
edge-edges, edge->opos / 64.0,
|
||||
edge2-edges, edge2->opos / 64.0,
|
||||
edge->pos / 64.0, edge2->pos / 64.0,
|
||||
org_len / 64.0, cur_len / 64.0 ));
|
||||
FT_TRACE5(( "STEM1: %d (opos=%.2f) to %d (opos=%.2f)"
|
||||
" snapped to (%.2f) and (%.2f),"
|
||||
" org_len=%.2f cur_len=%.2f\n",
|
||||
edge-edges, edge->opos / 64.0,
|
||||
edge2-edges, edge2->opos / 64.0,
|
||||
edge->pos / 64.0, edge2->pos / 64.0,
|
||||
org_len / 64.0, cur_len / 64.0 ));
|
||||
|
||||
edge->flags |= AF_EDGE_DONE;
|
||||
edge2->flags |= AF_EDGE_DONE;
|
||||
|
||||
if ( edge > edges && edge->pos < edge[-1].pos )
|
||||
{
|
||||
AF_LOG(( "BOUND: %d (pos=%.2f) to (%.2f)\n",
|
||||
edge-edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
|
||||
FT_TRACE5(( "BOUND: %d (pos=%.2f) to (%.2f)\n",
|
||||
edge-edges, edge->pos / 64.0, edge[-1].pos / 64.0 ));
|
||||
edge->pos = edge[-1].pos;
|
||||
}
|
||||
}
|
||||
@@ -2179,16 +2234,17 @@
|
||||
if ( delta < 64 + 16 )
|
||||
{
|
||||
af_latin2_align_serif_edge( hints, edge->serif, edge );
|
||||
AF_LOG(( "SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f) "
|
||||
"aligned to (%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0,
|
||||
edge->serif - edges, edge->serif->opos / 64.0,
|
||||
edge->pos / 64.0 ));
|
||||
FT_TRACE5(( "SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)"
|
||||
" aligned to (%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0,
|
||||
edge->serif - edges, edge->serif->opos / 64.0,
|
||||
edge->pos / 64.0 ));
|
||||
}
|
||||
else if ( !anchor )
|
||||
{
|
||||
AF_LOG(( "SERIF_ANCHOR: edge %d (opos=%.2f) snapped to (%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
|
||||
FT_TRACE5(( "SERIF_ANCHOR: edge %d (opos=%.2f)"
|
||||
" snapped to (%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
|
||||
edge->pos = FT_PIX_ROUND( edge->opos );
|
||||
anchor = edge;
|
||||
}
|
||||
@@ -2215,15 +2271,19 @@
|
||||
FT_MulDiv( edge->opos - before->opos,
|
||||
after->pos - before->pos,
|
||||
after->opos - before->opos );
|
||||
AF_LOG(( "SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f) from %d (opos=%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0, edge->pos / 64.0, before - edges, before->opos / 64.0 ));
|
||||
FT_TRACE5(( "SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f)"
|
||||
" from %d (opos=%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0, edge->pos / 64.0,
|
||||
before - edges, before->opos / 64.0 ));
|
||||
}
|
||||
else
|
||||
{
|
||||
edge->pos = anchor->pos + (( edge->opos - anchor->opos + 16) & ~31);
|
||||
edge->pos = anchor->pos +
|
||||
( ( edge->opos - anchor->opos + 16 ) & ~31 );
|
||||
|
||||
AF_LOG(( "SERIF_LINK2: edge %d (opos=%.2f) snapped to (%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
|
||||
FT_TRACE5(( "SERIF_LINK2: edge %d (opos=%.2f)"
|
||||
" snapped to (%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2243,8 +2303,8 @@
|
||||
|
||||
static FT_Error
|
||||
af_latin2_hints_apply( AF_GlyphHints hints,
|
||||
FT_Outline* outline,
|
||||
AF_LatinMetrics metrics )
|
||||
FT_Outline* outline,
|
||||
AF_LatinMetrics metrics )
|
||||
{
|
||||
FT_Error error;
|
||||
int dim;
|
||||
@@ -2255,7 +2315,7 @@
|
||||
goto Exit;
|
||||
|
||||
/* analyze glyph outline */
|
||||
#ifdef AF_USE_WARPER
|
||||
#ifdef AF_CONFIG_OPTION_USE_WARPER
|
||||
if ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ||
|
||||
AF_HINTS_DO_HORIZONTAL( hints ) )
|
||||
#else
|
||||
@@ -2279,7 +2339,7 @@
|
||||
/* grid-fit the outline */
|
||||
for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
|
||||
{
|
||||
#ifdef AF_USE_WARPER
|
||||
#ifdef AF_CONFIG_OPTION_USE_WARPER
|
||||
if ( ( dim == AF_DIMENSION_HORZ &&
|
||||
metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ) )
|
||||
{
|
||||
@@ -2321,17 +2381,18 @@
|
||||
|
||||
static const AF_Script_UniRangeRec af_latin2_uniranges[] =
|
||||
{
|
||||
AF_UNIRANGE_REC( 32UL, 127UL ), /* XXX: TODO: Add new Unicode ranges here! */
|
||||
AF_UNIRANGE_REC( 32UL, 127UL ), /* TODO: Add new Unicode ranges here! */
|
||||
AF_UNIRANGE_REC( 160UL, 255UL ),
|
||||
AF_UNIRANGE_REC( 0UL, 0UL )
|
||||
};
|
||||
|
||||
|
||||
AF_DEFINE_SCRIPT_CLASS(af_latin2_script_class,
|
||||
AF_DEFINE_SCRIPT_CLASS( af_latin2_script_class,
|
||||
AF_SCRIPT_LATIN2,
|
||||
af_latin2_uniranges,
|
||||
'o',
|
||||
|
||||
sizeof( AF_LatinMetricsRec ),
|
||||
sizeof ( AF_LatinMetricsRec ),
|
||||
|
||||
(AF_Script_InitMetricsFunc) af_latin2_metrics_init,
|
||||
(AF_Script_ScaleMetricsFunc)af_latin2_metrics_scale,
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Auto-fitter hinting routines for latin script (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005, 2006, 2007 by */
|
||||
/* Copyright 2003-2007, 2012 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -27,7 +27,7 @@ FT_BEGIN_HEADER
|
||||
|
||||
/* the latin-specific script class */
|
||||
|
||||
AF_DECLARE_SCRIPT_CLASS(af_latin2_script_class)
|
||||
AF_DECLARE_SCRIPT_CLASS( af_latin2_script_class )
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
+61
-39
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Auto-fitter glyph loading routines (body). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 by */
|
||||
/* Copyright 2003-2009, 2011-2013 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
@@ -16,31 +16,40 @@
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#include "afglobal.h"
|
||||
#include "afloader.h"
|
||||
#include "afhints.h"
|
||||
#include "afglobal.h"
|
||||
#include "aferrors.h"
|
||||
#include "afmodule.h"
|
||||
|
||||
|
||||
/* Initialize glyph loader. */
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_loader_init( AF_Loader loader,
|
||||
FT_Memory memory )
|
||||
af_loader_init( AF_Module module )
|
||||
{
|
||||
AF_Loader loader = module->loader;
|
||||
FT_Memory memory = module->root.library->memory;
|
||||
|
||||
|
||||
FT_ZERO( loader );
|
||||
|
||||
af_glyph_hints_init( &loader->hints, memory );
|
||||
#ifdef AF_DEBUG
|
||||
#ifdef FT_DEBUG_AUTOFIT
|
||||
_af_debug_hints = &loader->hints;
|
||||
#endif
|
||||
return FT_GlyphLoader_New( memory, &loader->gloader );
|
||||
}
|
||||
|
||||
|
||||
/* Reset glyph loader and compute globals if necessary. */
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_loader_reset( AF_Loader loader,
|
||||
af_loader_reset( AF_Module module,
|
||||
FT_Face face )
|
||||
{
|
||||
FT_Error error = AF_Err_Ok;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
AF_Loader loader = module->loader;
|
||||
|
||||
|
||||
loader->face = face;
|
||||
@@ -50,7 +59,7 @@
|
||||
|
||||
if ( loader->globals == NULL )
|
||||
{
|
||||
error = af_face_globals_new( face, &loader->globals );
|
||||
error = af_face_globals_new( face, &loader->globals, module );
|
||||
if ( !error )
|
||||
{
|
||||
face->autohint.data =
|
||||
@@ -64,15 +73,20 @@
|
||||
}
|
||||
|
||||
|
||||
/* Finalize glyph loader. */
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_loader_done( AF_Loader loader )
|
||||
af_loader_done( AF_Module module )
|
||||
{
|
||||
AF_Loader loader = module->loader;
|
||||
|
||||
|
||||
af_glyph_hints_done( &loader->hints );
|
||||
|
||||
loader->face = NULL;
|
||||
loader->globals = NULL;
|
||||
|
||||
#ifdef AF_DEBUG
|
||||
#ifdef FT_DEBUG_AUTOFIT
|
||||
_af_debug_hints = NULL;
|
||||
#endif
|
||||
FT_GlyphLoader_Done( loader->gloader );
|
||||
@@ -80,6 +94,10 @@
|
||||
}
|
||||
|
||||
|
||||
/* Load a single glyph component. This routine calls itself */
|
||||
/* recursively, if necessary, and does the main work of */
|
||||
/* `af_loader_load_glyph.' */
|
||||
|
||||
static FT_Error
|
||||
af_loader_load_g( AF_Loader loader,
|
||||
AF_Scaler scaler,
|
||||
@@ -94,9 +112,11 @@
|
||||
AF_GlyphHints hints = &loader->hints;
|
||||
FT_GlyphSlot slot = face->glyph;
|
||||
FT_Slot_Internal internal = slot->internal;
|
||||
FT_Int32 flags;
|
||||
|
||||
|
||||
error = FT_Load_Glyph( face, glyph_index, load_flags );
|
||||
flags = load_flags | FT_LOAD_LINEAR_DESIGN;
|
||||
error = FT_Load_Glyph( face, glyph_index, flags );
|
||||
if ( error )
|
||||
goto Exit;
|
||||
|
||||
@@ -114,10 +134,6 @@
|
||||
FT_Vector_Transform( &loader->trans_delta, &inverse );
|
||||
}
|
||||
|
||||
/* set linear metrics */
|
||||
slot->linearHoriAdvance = slot->metrics.horiAdvance;
|
||||
slot->linearVertAdvance = slot->metrics.vertAdvance;
|
||||
|
||||
switch ( slot->format )
|
||||
{
|
||||
case FT_GLYPH_FORMAT_OUTLINE:
|
||||
@@ -127,8 +143,8 @@
|
||||
loader->trans_delta.x,
|
||||
loader->trans_delta.y );
|
||||
|
||||
/* copy the outline points in the loader's current */
|
||||
/* extra points which is used to keep original glyph coordinates */
|
||||
/* copy the outline points in the loader's current */
|
||||
/* extra points which are used to keep original glyph coordinates */
|
||||
error = FT_GLYPHLOADER_CHECK_POINTS( gloader,
|
||||
slot->outline.n_points + 4,
|
||||
slot->outline.n_contours );
|
||||
@@ -169,8 +185,8 @@
|
||||
&gloader->current.outline,
|
||||
metrics );
|
||||
|
||||
/* we now need to hint the metrics according to the change in */
|
||||
/* width/positioning that occurred during the hinting process */
|
||||
/* 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 )
|
||||
{
|
||||
FT_Pos old_rsb, old_lsb, new_lsb;
|
||||
@@ -265,7 +281,7 @@
|
||||
gloader->current.num_subglyphs = num_subglyphs;
|
||||
num_base_subgs = gloader->base.num_subglyphs;
|
||||
|
||||
/* now, read each subglyph independently */
|
||||
/* now read each subglyph independently */
|
||||
for ( nn = 0; nn < num_subglyphs; nn++ )
|
||||
{
|
||||
FT_Vector pp1, pp2;
|
||||
@@ -305,7 +321,7 @@
|
||||
num_points = gloader->base.outline.n_points;
|
||||
num_new_points = num_points - num_base_points;
|
||||
|
||||
/* now perform the transform required for this subglyph */
|
||||
/* now perform the transformation required for this subglyph */
|
||||
|
||||
if ( subglyph->flags & ( FT_SUBGLYPH_FLAG_SCALE |
|
||||
FT_SUBGLYPH_FLAG_XY_SCALE |
|
||||
@@ -333,14 +349,14 @@
|
||||
if ( start_point + k >= num_base_points ||
|
||||
l >= (FT_UInt)num_new_points )
|
||||
{
|
||||
error = AF_Err_Invalid_Composite;
|
||||
error = FT_THROW( Invalid_Composite );
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
l += num_base_points;
|
||||
|
||||
/* for now, only use the current point coordinates; */
|
||||
/* we may consider another approach in the near future */
|
||||
/* for now, only use the current point coordinates; */
|
||||
/* we eventually may consider another approach */
|
||||
p1 = gloader->base.outline.points + start_point + k;
|
||||
p2 = gloader->base.outline.points + start_point + l;
|
||||
|
||||
@@ -371,7 +387,7 @@
|
||||
|
||||
default:
|
||||
/* we don't support other formats (yet?) */
|
||||
error = AF_Err_Unimplemented_Feature;
|
||||
error = FT_THROW( Unimplemented_Feature );
|
||||
}
|
||||
|
||||
Hint_Metrics:
|
||||
@@ -423,9 +439,10 @@
|
||||
slot->metrics.horiAdvance = FT_MulFix( slot->metrics.horiAdvance,
|
||||
x_scale );
|
||||
#else
|
||||
if ( FT_IS_FIXED_WIDTH( slot->face ) ||
|
||||
( af_face_globals_is_digit( loader->globals, glyph_index ) &&
|
||||
metrics->digits_have_same_width ) )
|
||||
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 ) ) )
|
||||
{
|
||||
slot->metrics.horiAdvance = FT_MulFix( slot->metrics.horiAdvance,
|
||||
metrics->scaler.x_scale );
|
||||
@@ -444,7 +461,7 @@
|
||||
#endif
|
||||
|
||||
slot->metrics.vertAdvance = FT_MulFix( slot->metrics.vertAdvance,
|
||||
metrics->scaler.y_scale );
|
||||
metrics->scaler.y_scale );
|
||||
|
||||
slot->metrics.horiAdvance = FT_PIX_ROUND( slot->metrics.horiAdvance );
|
||||
slot->metrics.vertAdvance = FT_PIX_ROUND( slot->metrics.vertAdvance );
|
||||
@@ -455,32 +472,37 @@
|
||||
if ( error )
|
||||
goto Exit;
|
||||
|
||||
slot->outline = internal->loader->base.outline;
|
||||
/* 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;
|
||||
|
||||
slot->format = FT_GLYPH_FORMAT_OUTLINE;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_HINTER
|
||||
af_debug_hinter = hinter;
|
||||
#endif
|
||||
|
||||
Exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
/* Load a glyph. */
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_loader_load_glyph( AF_Loader loader,
|
||||
af_loader_load_glyph( AF_Module module,
|
||||
FT_Face face,
|
||||
FT_UInt gindex,
|
||||
FT_UInt32 load_flags )
|
||||
FT_Int32 load_flags )
|
||||
{
|
||||
FT_Error error;
|
||||
FT_Size size = face->size;
|
||||
FT_Size size = face->size;
|
||||
AF_Loader loader = module->loader;
|
||||
AF_ScalerRec scaler;
|
||||
|
||||
|
||||
if ( !size )
|
||||
return AF_Err_Invalid_Argument;
|
||||
return FT_THROW( Invalid_Argument );
|
||||
|
||||
FT_ZERO( &scaler );
|
||||
|
||||
@@ -493,7 +515,7 @@
|
||||
scaler.render_mode = FT_LOAD_TARGET_MODE( load_flags );
|
||||
scaler.flags = 0; /* XXX: fix this */
|
||||
|
||||
error = af_loader_reset( loader, face );
|
||||
error = af_loader_reset( module, face );
|
||||
if ( !error )
|
||||
{
|
||||
AF_ScriptMetrics metrics;
|
||||
|
||||
+26
-14
@@ -4,7 +4,7 @@
|
||||
/* */
|
||||
/* Auto-fitter glyph loading routines (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005 by */
|
||||
/* Copyright 2003-2005, 2011-2012 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 __AF_LOADER_H__
|
||||
#define __AF_LOADER_H__
|
||||
#ifndef __AFLOADER_H__
|
||||
#define __AFLOADER_H__
|
||||
|
||||
#include "afhints.h"
|
||||
#include "afglobal.h"
|
||||
@@ -25,11 +25,24 @@
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
typedef struct AF_LoaderRec_
|
||||
typedef struct AF_ModuleRec_* AF_Module;
|
||||
|
||||
/*
|
||||
* The autofitter module's (global) data structure to communicate with
|
||||
* actual fonts. If necessary, `local' data like the current face, the
|
||||
* current face's auto-hint data, or the current glyph's parameters
|
||||
* relevant to auto-hinting are `swapped in'. Cf. functions like
|
||||
* `af_loader_reset' and `af_loader_load_g'.
|
||||
*/
|
||||
|
||||
typedef struct AF_LoaderRec_
|
||||
{
|
||||
FT_Face face; /* current face */
|
||||
AF_FaceGlobals globals; /* current face globals */
|
||||
FT_GlyphLoader gloader; /* glyph loader */
|
||||
/* current face data */
|
||||
FT_Face face;
|
||||
AF_FaceGlobals globals;
|
||||
|
||||
/* current glyph data */
|
||||
FT_GlyphLoader gloader;
|
||||
AF_GlyphHintsRec hints;
|
||||
AF_ScriptMetrics metrics;
|
||||
FT_Bool transformed;
|
||||
@@ -43,31 +56,30 @@ FT_BEGIN_HEADER
|
||||
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
af_loader_init( AF_Loader loader,
|
||||
FT_Memory memory );
|
||||
af_loader_init( AF_Module module );
|
||||
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
af_loader_reset( AF_Loader loader,
|
||||
af_loader_reset( AF_Module module,
|
||||
FT_Face face );
|
||||
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_loader_done( AF_Loader loader );
|
||||
af_loader_done( AF_Module module );
|
||||
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
af_loader_load_glyph( AF_Loader loader,
|
||||
af_loader_load_glyph( AF_Module module,
|
||||
FT_Face face,
|
||||
FT_UInt gindex,
|
||||
FT_UInt32 load_flags );
|
||||
FT_Int32 load_flags );
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __AF_LOADER_H__ */
|
||||
#endif /* __AFLOADER_H__ */
|
||||
|
||||
|
||||
/* END */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user