浏览代码

Initial version of vcpkg-based build

Chlumsky 2 年之前
父节点
当前提交
496b656d8a
共有 100 个文件被更改,包括 190 次插入41251 次删除
  1. 0 4
      .gitattributes
  2. 2 4
      .gitignore
  3. 64 21
      CMakeLists.txt
  4. 二进制
      Msdfgen.aps
  5. 二进制
      Msdfgen.rc
  6. 0 52
      Msdfgen.sln
  7. 0 537
      Msdfgen.vcxproj
  8. 0 229
      Msdfgen.vcxproj.filters
  9. 0 1
      bin/example.bat
  10. 2 2
      ext/resolve-shape-geometry.cpp
  11. 108 1
      ext/save-png.cpp
  12. 0 169
      freetype/FTL.TXT
  13. 0 571
      freetype/include/freetype/config/ftconfig.h
  14. 0 804
      freetype/include/freetype/config/ftheader.h
  15. 0 32
      freetype/include/freetype/config/ftmodule.h
  16. 0 977
      freetype/include/freetype/config/ftoption.h
  17. 0 175
      freetype/include/freetype/config/ftstdlib.h
  18. 0 4657
      freetype/include/freetype/freetype.h
  19. 0 187
      freetype/include/freetype/ftadvanc.h
  20. 0 101
      freetype/include/freetype/ftbbox.h
  21. 0 210
      freetype/include/freetype/ftbdf.h
  22. 0 240
      freetype/include/freetype/ftbitmap.h
  23. 0 102
      freetype/include/freetype/ftbzip2.h
  24. 0 1042
      freetype/include/freetype/ftcache.h
  25. 0 139
      freetype/include/freetype/ftchapters.h
  26. 0 168
      freetype/include/freetype/ftcid.h
  27. 0 1225
      freetype/include/freetype/ftdriver.h
  28. 0 280
      freetype/include/freetype/fterrdef.h
  29. 0 226
      freetype/include/freetype/fterrors.h
  30. 0 95
      freetype/include/freetype/ftfntfmt.h
  31. 0 142
      freetype/include/freetype/ftgasp.h
  32. 0 614
      freetype/include/freetype/ftglyph.h
  33. 0 357
      freetype/include/freetype/ftgxval.h
  34. 0 151
      freetype/include/freetype/ftgzip.h
  35. 0 1205
      freetype/include/freetype/ftimage.h
  36. 0 343
      freetype/include/freetype/ftincrem.h
  37. 0 309
      freetype/include/freetype/ftlcdfil.h
  38. 0 276
      freetype/include/freetype/ftlist.h
  39. 0 99
      freetype/include/freetype/ftlzw.h
  40. 0 275
      freetype/include/freetype/ftmac.h
  41. 0 638
      freetype/include/freetype/ftmm.h
  42. 0 711
      freetype/include/freetype/ftmodapi.h
  43. 0 194
      freetype/include/freetype/ftmoderr.h
  44. 0 204
      freetype/include/freetype/ftotval.h
  45. 0 582
      freetype/include/freetype/ftoutln.h
  46. 0 205
      freetype/include/freetype/ftparams.h
  47. 0 172
      freetype/include/freetype/ftpfr.h
  48. 0 233
      freetype/include/freetype/ftrender.h
  49. 0 159
      freetype/include/freetype/ftsizes.h
  50. 0 253
      freetype/include/freetype/ftsnames.h
  51. 0 785
      freetype/include/freetype/ftstroke.h
  52. 0 84
      freetype/include/freetype/ftsynth.h
  53. 0 355
      freetype/include/freetype/ftsystem.h
  54. 0 350
      freetype/include/freetype/fttrigon.h
  55. 0 602
      freetype/include/freetype/fttypes.h
  56. 0 275
      freetype/include/freetype/ftwinfnt.h
  57. 0 770
      freetype/include/freetype/t1tables.h
  58. 0 1236
      freetype/include/freetype/ttnameid.h
  59. 0 846
      freetype/include/freetype/tttables.h
  60. 0 121
      freetype/include/freetype/tttags.h
  61. 0 42
      freetype/include/ft2build.h
  62. 二进制
      freetype/win32/freetype.lib
  63. 二进制
      freetype/win64/freetype.lib
  64. 0 1930
      include/lodepng.h
  65. 0 2309
      include/tinyxml2.h
  66. 0 5992
      lib/lodepng.cpp
  67. 0 2837
      lib/tinyxml2.cpp
  68. 8 4
      main.cpp
  69. 3 3
      msdfgen-ext.h
  70. 3 5
      msdfgen.h
  71. 二进制
      resource.h
  72. 0 29
      skia/LICENSE
  73. 0 40
      skia/include/android/SkAndroidFrameworkUtils.h
  74. 0 154
      skia/include/android/SkAnimatedImage.h
  75. 0 29
      skia/include/android/SkBRDAllocator.h
  76. 0 92
      skia/include/android/SkBitmapRegionDecoder.h
  77. 0 42
      skia/include/atlastext/SkAtlasTextContext.h
  78. 0 35
      skia/include/atlastext/SkAtlasTextFont.h
  79. 0 72
      skia/include/atlastext/SkAtlasTextRenderer.h
  80. 0 100
      skia/include/atlastext/SkAtlasTextTarget.h
  81. 0 159
      skia/include/c/sk_canvas.h
  82. 0 25
      skia/include/c/sk_colorspace.h
  83. 0 70
      skia/include/c/sk_data.h
  84. 0 71
      skia/include/c/sk_image.h
  85. 0 62
      skia/include/c/sk_imageinfo.h
  86. 0 47
      skia/include/c/sk_maskfilter.h
  87. 0 49
      skia/include/c/sk_matrix.h
  88. 0 145
      skia/include/c/sk_paint.h
  89. 0 84
      skia/include/c/sk_path.h
  90. 0 70
      skia/include/c/sk_picture.h
  91. 0 143
      skia/include/c/sk_shader.h
  92. 0 73
      skia/include/c/sk_surface.h
  93. 0 256
      skia/include/c/sk_types.h
  94. 0 287
      skia/include/codec/SkAndroidCodec.h
  95. 0 921
      skia/include/codec/SkCodec.h
  96. 0 43
      skia/include/codec/SkCodecAnimation.h
  97. 0 23
      skia/include/codec/SkEncodedOrigin.h
  98. 0 130
      skia/include/config/SkUserConfig.h
  99. 0 50
      skia/include/core/SkAnnotation.h
  100. 0 31
      skia/include/core/SkBBHFactory.h

+ 0 - 4
.gitattributes

@@ -1,5 +1 @@
 * text=auto
-include/** linguist-vendored
-lib/** linguist-vendored
-freetype/** linguist-vendored
-skia/** linguist-vendored

+ 2 - 4
.gitignore

@@ -1,3 +1,4 @@
+/build/
 /Debug/
 /Release/
 /Release OpenMP/
@@ -22,9 +23,6 @@
 output.png
 render.png
 out/
-build/
-build_xcode/
-skia/win32/
-skia/win64/
+/build_xcode/
 /cmake-gen.bat
 /line-ending-check.bat

+ 64 - 21
CMakeLists.txt

@@ -3,29 +3,50 @@ cmake_minimum_required(VERSION 3.15)
 
 option(MSDFGEN_CORE_ONLY "Only build the core library with no dependencies" OFF)
 option(MSDFGEN_BUILD_STANDALONE "Build the msdfgen standalone executable" ON)
+option(MSDFGEN_USE_VCPKG "Use vcpkg package manager to link project dependencies" ON)
 option(MSDFGEN_USE_OPENMP "Build with OpenMP support for multithreaded code" OFF)
 option(MSDFGEN_USE_CPP11 "Build with C++11 enabled" ON)
-option(MSDFGEN_USE_SKIA "Build with the Skia library" OFF)
-option(MSDFGEN_INSTALL "Generate installation target" ON)
+option(MSDFGEN_USE_SKIA "Build with the Skia library" ON)
+option(MSDFGEN_INSTALL "Generate installation target" OFF)
 
 if(MSDFGEN_CORE_ONLY AND MSDFGEN_BUILD_STANDALONE)
     message(WARNING "Option MSDFGEN_CORE_ONLY ignored - extensions are required for standalone executable")
     set(MSDFGEN_CORE_ONLY OFF)
 endif()
+if(MSDFGEN_CORE_ONLY AND MSDFGEN_USE_VCPKG)
+    message(STATUS "Option MSDFGEN_USE_VCPKG ignored due to MSDFGEN_CORE_ONLY - core has no dependencies")
+    set(MSDFGEN_USE_VCPKG OFF)
+endif()
 
-project(msdfgen VERSION 1.9 LANGUAGES CXX)
-
-if(NOT CMAKE_MSVC_RUNTIME_LIBRARY)
-    set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
-    get_directory_property(MSDFGEN_HAS_PARENT PARENT_DIRECTORY)
-    if(MSDFGEN_HAS_PARENT)
-        set(CMAKE_MSVC_RUNTIME_LIBRARY ${CMAKE_MSVC_RUNTIME_LIBRARY} PARENT_SCOPE)
+if(MSDFGEN_USE_VCPKG)
+    # Make sure that vcpkg toolchain file is set
+    if(NOT CMAKE_TOOLCHAIN_FILE)
+        if(DEFINED ENV{VCPKG_ROOT})
+            set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
+        else()
+            message(SEND_ERROR "Vcpkg toolchain not configured. Either set VCPKG_ROOT environment variable or pass -DCMAKE_TOOLCHAIN_FILE=VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake to cmake")
+        endif()
+    endif()
+    # Default to statically linked vcpkg triplet on Windows
+    if(WIN32 AND NOT VCPKG_TARGET_TRIPLET)
+        if(${CMAKE_GENERATOR_PLATFORM} MATCHES "64$")
+            set(VCPKG_TARGET_TRIPLET "x64-windows-static")
+        elseif(${CMAKE_GENERATOR_PLATFORM} MATCHES "32$" OR ${CMAKE_GENERATOR_PLATFORM} STREQUAL "x86")
+            set(VCPKG_TARGET_TRIPLET "x86-windows-static")
+        else()
+            message(WARNING "Vcpkg triplet not explicitly specified and could not be deduced. Recommend using -DVCPKG_TARGET_TRIPLET=x86-windows-static or similar")
+        endif()
     endif()
 endif()
 
-if(NOT TARGET Freetype::Freetype)
-    find_package(Freetype REQUIRED)
-endif()
+
+set(MSDFGEN_VERSION_MAJOR 1)
+set(MSDFGEN_VERSION_MINOR 10)
+set(MSDFGEN_VERSION_REVISION 0)
+set(MSDFGEN_VERSION 1.10)
+string(TIMESTAMP MSDFGEN_COPYRIGHT_YEAR "%Y")
+
+project(msdfgen VERSION ${MSDFGEN_VERSION} LANGUAGES CXX)
 
 file(GLOB_RECURSE MSDFGEN_CORE_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "core/*.h" "core/*.hpp")
 file(GLOB_RECURSE MSDFGEN_CORE_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "core/*.cpp")
@@ -36,7 +57,14 @@ file(GLOB_RECURSE MSDFGEN_EXT_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "ext/
 add_library(msdfgen-core "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen.h" ${MSDFGEN_CORE_HEADERS} ${MSDFGEN_CORE_SOURCES})
 add_library(msdfgen::msdfgen-core ALIAS msdfgen-core)
 set_target_properties(msdfgen-core PROPERTIES PUBLIC_HEADER "${MSDFGEN_CORE_HEADERS}")
-#set_property(TARGET msdfgen-core PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+set_property(TARGET msdfgen-core PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+target_compile_definitions(msdfgen-core PUBLIC
+    MSDFGEN_VERSION=${MSDFGEN_VERSION}
+    MSDFGEN_VERSION_MAJOR=${MSDFGEN_VERSION_MAJOR}
+    MSDFGEN_VERSION_MINOR=${MSDFGEN_VERSION_MINOR}
+    MSDFGEN_VERSION_REVISION=${MSDFGEN_VERSION_REVISION}
+    MSDFGEN_COPYRIGHT_YEAR=${MSDFGEN_COPYRIGHT_YEAR}
+)
 target_include_directories(msdfgen-core INTERFACE
     $<INSTALL_INTERFACE:include/msdfgen>
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
@@ -57,10 +85,22 @@ endif()
 
 # Extensions library
 if(NOT MSDFGEN_CORE_ONLY)
+    if(NOT TARGET Freetype::Freetype)
+        find_package(Freetype REQUIRED)
+    endif()
+    if(NOT TARGET tinyxml2::tinyxml2)
+        find_package(tinyxml2 REQUIRED)
+    endif()
+    if(NOT TARGET PNG::PNG)
+        find_package(PNG REQUIRED)
+    endif()
+
     add_library(msdfgen-ext "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen-ext.h" ${MSDFGEN_EXT_HEADERS} ${MSDFGEN_EXT_SOURCES})
     add_library(msdfgen::msdfgen-ext ALIAS msdfgen-ext)
     set_target_properties(msdfgen-ext PROPERTIES PUBLIC_HEADER "${MSDFGEN_EXT_HEADERS}")
-    target_link_libraries(msdfgen-ext PUBLIC msdfgen::msdfgen-core Freetype::Freetype)
+    set_property(TARGET msdfgen-ext PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+    target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_USE_LIBPNG)
+    target_link_libraries(msdfgen-ext PRIVATE msdfgen::msdfgen-core Freetype::Freetype tinyxml2::tinyxml2 PNG::PNG)
     target_include_directories(msdfgen-ext
         PUBLIC
             $<INSTALL_INTERFACE:include/msdfgen>
@@ -71,14 +111,16 @@ if(NOT MSDFGEN_CORE_ONLY)
     set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT msdfgen-ext)
 
     if(MSDFGEN_USE_SKIA)
-        find_package(Skia REQUIRED)
+        if(NOT TARGET skia)
+            find_package(skia REQUIRED)
+        endif()
         target_compile_definitions(msdfgen-ext PUBLIC MSDFGEN_USE_SKIA)
-        target_link_libraries(msdfgen-ext PUBLIC Skia::Skia)
+        target_link_libraries(msdfgen-ext PRIVATE skia)
     endif()
 
-    add_library(msdfgen-all INTERFACE)
-    add_library(msdfgen::msdfgen ALIAS msdfgen-all)
-    target_link_libraries(msdfgen-all INTERFACE msdfgen::msdfgen-core msdfgen::msdfgen-ext)
+    add_library(msdfgen-full INTERFACE)
+    add_library(msdfgen::msdfgen ALIAS msdfgen-full)
+    target_link_libraries(msdfgen-full INTERFACE msdfgen::msdfgen-core msdfgen::msdfgen-ext)
 endif()
 
 # Standalone executable
@@ -89,7 +131,8 @@ if(MSDFGEN_BUILD_STANDALONE)
     endif()
     add_executable(msdfgen ${MSDFGEN_STANDALONE_SOURCES})
     target_compile_definitions(msdfgen PUBLIC MSDFGEN_STANDALONE)
-    target_link_libraries(msdfgen PUBLIC msdfgen::msdfgen)
+    set_property(TARGET msdfgen PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
+    target_link_libraries(msdfgen PRIVATE msdfgen::msdfgen)
     set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT msdfgen)
 endif()
 
@@ -138,7 +181,7 @@ if(MSDFGEN_INSTALL)
             PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/msdfgen/ext
         )
         install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen-ext.h" DESTINATION include/msdfgen)
-        install(TARGETS msdfgen-all EXPORT msdfgenTargets)
+        install(TARGETS msdfgen-full EXPORT msdfgenTargets)
     endif()
 
     export(EXPORT msdfgenTargets NAMESPACE msdfgen:: FILE "${CMAKE_CURRENT_BINARY_DIR}/msdfgenTargets.cmake")

二进制
Msdfgen.aps


二进制
Msdfgen.rc


+ 0 - 52
Msdfgen.sln

@@ -1,52 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msdfgen", "msdfgen.vcxproj", "{84BE2D91-F071-4151-BE12-61460464C494}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug Library|x64 = Debug Library|x64
-		Debug Library|x86 = Debug Library|x86
-		Debug|x64 = Debug|x64
-		Debug|x86 = Debug|x86
-		Release Library OpenMP|x64 = Release Library OpenMP|x64
-		Release Library OpenMP|x86 = Release Library OpenMP|x86
-		Release Library|x64 = Release Library|x64
-		Release Library|x86 = Release Library|x86
-		Release OpenMP|x64 = Release OpenMP|x64
-		Release OpenMP|x86 = Release OpenMP|x86
-		Release|x64 = Release|x64
-		Release|x86 = Release|x86
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{84BE2D91-F071-4151-BE12-61460464C494}.Debug Library|x64.ActiveCfg = Debug Library|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Debug Library|x64.Build.0 = Debug Library|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Debug Library|x86.ActiveCfg = Debug Library|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Debug Library|x86.Build.0 = Debug Library|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Debug|x64.ActiveCfg = Debug|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Debug|x64.Build.0 = Debug|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Debug|x86.ActiveCfg = Debug|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Debug|x86.Build.0 = Debug|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release Library OpenMP|x64.ActiveCfg = Release Library OpenMP|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release Library OpenMP|x64.Build.0 = Release Library OpenMP|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release Library OpenMP|x86.ActiveCfg = Release Library OpenMP|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release Library OpenMP|x86.Build.0 = Release Library OpenMP|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release Library|x64.ActiveCfg = Release Library|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release Library|x64.Build.0 = Release Library|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release Library|x86.ActiveCfg = Release Library|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release Library|x86.Build.0 = Release Library|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release OpenMP|x64.Build.0 = Release OpenMP|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release OpenMP|x86.ActiveCfg = Release OpenMP|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release OpenMP|x86.Build.0 = Release OpenMP|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release|x64.ActiveCfg = Release|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release|x64.Build.0 = Release|x64
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release|x86.ActiveCfg = Release|Win32
-		{84BE2D91-F071-4151-BE12-61460464C494}.Release|x86.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal

+ 0 - 537
Msdfgen.vcxproj

@@ -1,537 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Library|Win32">
-      <Configuration>Debug Library</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug Library|x64">
-      <Configuration>Debug Library</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Library OpenMP|Win32">
-      <Configuration>Release Library OpenMP</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Library OpenMP|x64">
-      <Configuration>Release Library OpenMP</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Library|Win32">
-      <Configuration>Release Library</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Library|x64">
-      <Configuration>Release Library</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release OpenMP|Win32">
-      <Configuration>Release OpenMP</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release OpenMP|x64">
-      <Configuration>Release OpenMP</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{84BE2D91-F071-4151-BE12-61460464C494}</ProjectGuid>
-    <RootNamespace>msdfgen</RootNamespace>
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Library OpenMP|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Library OpenMP|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v140</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="Shared">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Library OpenMP|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Library OpenMP|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>bin\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|Win32'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>bin\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Library OpenMP|Win32'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|x64'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>$(Platform)\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Library OpenMP|x64'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>$(Platform)\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>$(Platform)\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>$(Platform)\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|x64'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>$(Platform)\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|x64'">
-    <TargetName>msdfgen</TargetName>
-    <OutDir>$(Platform)\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;MSDFGEN_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>freetype;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-    </Link>
-    <Lib>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-    </Lib>
-    <ProjectReference />
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <SDLCheck>true</SDLCheck>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;MSDFGEN_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-    </ClCompile>
-    <Lib>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;MSDFGEN_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>No</GenerateDebugInformation>
-      <AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;MSDFGEN_USE_OPENMP;MSDFGEN_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <OpenMPSupport>true</OpenMPSupport>
-    </ClCompile>
-    <Link>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>No</GenerateDebugInformation>
-      <AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>No</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library OpenMP|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;MSDFGEN_USE_OPENMP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <OpenMPSupport>true</OpenMPSupport>
-    </ClCompile>
-    <Link>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>No</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;MSDFGEN_STANDALONE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release OpenMP|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;MSDFGEN_STANDALONE;MSDFGEN_USE_OPENMP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <OpenMPSupport>true</OpenMPSupport>
-    </ClCompile>
-    <Link>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <AdditionalDependencies>freetype.lib;skia.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-    <Lib>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Library OpenMP|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-      <AdditionalIncludeDirectories>include;freetype/include;skia/include;skia/include/core;skia/include/config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>MSDFGEN_USE_CPP11;MSDFGEN_USE_SKIA;MSDFGEN_USE_OPENMP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <OpenMPSupport>true</OpenMPSupport>
-    </ClCompile>
-    <Link>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-    <Lib>
-      <AdditionalLibraryDirectories>freetype/win$(PlatformArchitecture);skia/win$(PlatformArchitecture)/release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="core\arithmetics.hpp" />
-    <ClInclude Include="core\bitmap-interpolation.hpp" />
-    <ClInclude Include="core\Bitmap.h" />
-    <ClInclude Include="core\Bitmap.hpp" />
-    <ClInclude Include="core\BitmapRef.hpp" />
-    <ClInclude Include="core\contour-combiners.h" />
-    <ClInclude Include="core\Contour.h" />
-    <ClInclude Include="core\edge-coloring.h" />
-    <ClInclude Include="core\edge-segments.h" />
-    <ClInclude Include="core\edge-selectors.h" />
-    <ClInclude Include="core\EdgeColor.h" />
-    <ClInclude Include="core\EdgeHolder.h" />
-    <ClInclude Include="core\equation-solver.h" />
-    <ClInclude Include="core\generator-config.h" />
-    <ClInclude Include="core\msdf-error-correction.h" />
-    <ClInclude Include="core\MSDFErrorCorrection.h" />
-    <ClInclude Include="core\Projection.h" />
-    <ClInclude Include="core\sdf-error-estimation.h" />
-    <ClInclude Include="core\pixel-conversion.hpp" />
-    <ClInclude Include="core\rasterization.h" />
-    <ClInclude Include="core\render-sdf.h" />
-    <ClInclude Include="core\save-bmp.h" />
-    <ClInclude Include="core\save-tiff.h" />
-    <ClInclude Include="core\Scanline.h" />
-    <ClInclude Include="core\shape-description.h" />
-    <ClInclude Include="core\Shape.h" />
-    <ClInclude Include="core\ShapeDistanceFinder.h" />
-    <ClInclude Include="core\ShapeDistanceFinder.hpp" />
-    <ClInclude Include="core\SignedDistance.h" />
-    <ClInclude Include="core\Vector2.h" />
-    <ClInclude Include="ext\import-font.h" />
-    <ClInclude Include="ext\import-svg.h" />
-    <ClInclude Include="ext\resolve-shape-geometry.h" />
-    <ClInclude Include="ext\save-png.h" />
-    <ClInclude Include="msdfgen-ext.h" />
-    <ClInclude Include="msdfgen.h" />
-    <ClInclude Include="resource.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="core\contour-combiners.cpp" />
-    <ClCompile Include="core\Contour.cpp" />
-    <ClCompile Include="core\edge-coloring.cpp" />
-    <ClCompile Include="core\edge-segments.cpp" />
-    <ClCompile Include="core\edge-selectors.cpp" />
-    <ClCompile Include="core\EdgeHolder.cpp" />
-    <ClCompile Include="core\equation-solver.cpp" />
-    <ClCompile Include="core\msdf-error-correction.cpp" />
-    <ClCompile Include="core\MSDFErrorCorrection.cpp" />
-    <ClCompile Include="core\Projection.cpp" />
-    <ClCompile Include="core\sdf-error-estimation.cpp" />
-    <ClCompile Include="core\rasterization.cpp" />
-    <ClCompile Include="core\render-sdf.cpp" />
-    <ClCompile Include="core\save-bmp.cpp" />
-    <ClCompile Include="core\save-tiff.cpp" />
-    <ClCompile Include="core\Scanline.cpp" />
-    <ClCompile Include="core\shape-description.cpp" />
-    <ClCompile Include="core\Shape.cpp" />
-    <ClCompile Include="core\SignedDistance.cpp" />
-    <ClCompile Include="core\Vector2.cpp" />
-    <ClCompile Include="ext\import-font.cpp" />
-    <ClCompile Include="ext\import-svg.cpp" />
-    <ClCompile Include="ext\resolve-shape-geometry.cpp" />
-    <ClCompile Include="ext\save-png.cpp" />
-    <ClCompile Include="lib\lodepng.cpp" />
-    <ClCompile Include="lib\tinyxml2.cpp" />
-    <ClCompile Include="main.cpp" />
-    <ClCompile Include="core\msdfgen.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="msdfgen.rc" />
-  </ItemGroup>
-  <ItemGroup>
-    <Image Include="icon.ico" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>

+ 0 - 229
Msdfgen.vcxproj.filters

@@ -1,229 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Resource Files">
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
-    </Filter>
-    <Filter Include="Core">
-      <UniqueIdentifier>{110bf5de-0605-40a4-92b4-68ca012d572f}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Extensions">
-      <UniqueIdentifier>{8abe3d60-6507-4ee1-8d4f-eab2c43a3220}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Standalone">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Source Dependencies">
-      <UniqueIdentifier>{42db228a-5d46-439c-ad30-7595a74d635f}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="core\arithmetics.hpp">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\Bitmap.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\Contour.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\EdgeColor.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\edge-coloring.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\EdgeHolder.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\edge-segments.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\equation-solver.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="msdfgen.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\render-sdf.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\save-bmp.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\Shape.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\shape-description.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\Vector2.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\SignedDistance.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="msdfgen-ext.h">
-      <Filter>Extensions</Filter>
-    </ClInclude>
-    <ClInclude Include="ext\save-png.h">
-      <Filter>Extensions</Filter>
-    </ClInclude>
-    <ClInclude Include="ext\import-svg.h">
-      <Filter>Extensions</Filter>
-    </ClInclude>
-    <ClInclude Include="ext\import-font.h">
-      <Filter>Extensions</Filter>
-    </ClInclude>
-    <ClInclude Include="resource.h" />
-    <ClInclude Include="core\Scanline.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\contour-combiners.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\edge-selectors.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\rasterization.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\BitmapRef.hpp">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\Bitmap.hpp">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\pixel-conversion.hpp">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\save-tiff.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\bitmap-interpolation.hpp">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\ShapeDistanceFinder.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\ShapeDistanceFinder.hpp">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\sdf-error-estimation.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\msdf-error-correction.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="ext\resolve-shape-geometry.h">
-      <Filter>Extensions</Filter>
-    </ClInclude>
-    <ClInclude Include="core\Projection.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\generator-config.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-    <ClInclude Include="core\MSDFErrorCorrection.h">
-      <Filter>Core</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="main.cpp">
-      <Filter>Standalone</Filter>
-    </ClCompile>
-    <ClCompile Include="core\Contour.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\edge-coloring.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\EdgeHolder.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\edge-segments.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\equation-solver.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="ext\import-font.cpp">
-      <Filter>Extensions</Filter>
-    </ClCompile>
-    <ClCompile Include="ext\import-svg.cpp">
-      <Filter>Extensions</Filter>
-    </ClCompile>
-    <ClCompile Include="core\render-sdf.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\save-bmp.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="ext\save-png.cpp">
-      <Filter>Extensions</Filter>
-    </ClCompile>
-    <ClCompile Include="core\Shape.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\shape-description.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\SignedDistance.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\Vector2.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\lodepng.cpp">
-      <Filter>Source Dependencies</Filter>
-    </ClCompile>
-    <ClCompile Include="lib\tinyxml2.cpp">
-      <Filter>Source Dependencies</Filter>
-    </ClCompile>
-    <ClCompile Include="core\msdfgen.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\Scanline.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\contour-combiners.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\edge-selectors.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\rasterization.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\save-tiff.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\sdf-error-estimation.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\msdf-error-correction.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="ext\resolve-shape-geometry.cpp">
-      <Filter>Extensions</Filter>
-    </ClCompile>
-    <ClCompile Include="core\Projection.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-    <ClCompile Include="core\MSDFErrorCorrection.cpp">
-      <Filter>Core</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="msdfgen.rc">
-      <Filter>Resource Files</Filter>
-    </ResourceCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <Image Include="icon.ico">
-      <Filter>Resource Files</Filter>
-    </Image>
-  </ItemGroup>
-</Project>

+ 0 - 1
bin/example.bat

@@ -1 +0,0 @@
-msdfgen.exe -defineshape "{ 1471,0; 1149,0; 1021,333; 435,333; 314,0; 0,0; 571,1466; 884,1466; # }{ 926,580; 724,1124; 526,580; # }" -size 16 16 -autoframe -testrender render.png 1024 1024

+ 2 - 2
ext/resolve-shape-geometry.cpp

@@ -3,8 +3,8 @@
 
 #ifdef MSDFGEN_USE_SKIA
 
-#include <core/SkPath.h>
-#include <pathops/SkPathOps.h>
+#include <skia/core/SkPath.h>
+#include <skia/pathops/SkPathOps.h>
 #include "../core/Vector2.h"
 #include "../core/edge-segments.h"
 #include "../core/Contour.h"

+ 108 - 1
ext/save-png.cpp

@@ -1,10 +1,115 @@
 
 #include "save-png.h"
 
+#include <cstdlib>
+#include <cstdio>
 #include <cstring>
-#include <lodepng.h>
+#include <vector>
 #include "../core/pixel-conversion.hpp"
 
+#ifdef MSDFGEN_USE_LIBPNG
+
+#include <png.h>
+
+namespace msdfgen {
+
+class PngGuard {
+    png_structp png;
+    png_infop info;
+    FILE *file;
+
+public:
+    inline PngGuard(png_structp png, png_infop info) : png(png), info(info), file(NULL) { }
+    inline ~PngGuard() {
+        png_destroy_write_struct(&png, &info);
+        fclose(file);
+    }
+    inline void setFile(FILE *file) {
+        this->file = file;
+    }
+
+};
+
+static void pngIgnoreError(png_structp, png_const_charp) { }
+
+static void pngWrite(png_structp png, png_bytep data, png_size_t length) {
+    if (fwrite(data, 1, length, reinterpret_cast<FILE *>(png_get_io_ptr(png))) != length)
+        png_error(png, "File write error");
+}
+
+static void pngFlush(png_structp png) {
+    fflush(reinterpret_cast<FILE *>(png_get_io_ptr(png)));
+}
+
+static bool pngSave(const byte *pixels, int width, int height, int channels, int colorType, const char *filename) {
+    if (!(pixels && width && height))
+        return false;
+    png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, &pngIgnoreError, &pngIgnoreError);
+    if (!png)
+        return false;
+    png_infop info = png_create_info_struct(png);
+    PngGuard guard(png, info);
+    if (!info)
+        return false;
+    FILE *file = fopen(filename, "wb");
+    if (!file)
+        return false;
+    guard.setFile(file);
+    std::vector<const byte *> rows(height);
+    for (int y = 0; y < height; ++y)
+        rows[y] = pixels+channels*width*(height-y-1);
+    if (setjmp(png_jmpbuf(png)))
+        return false;
+    png_set_write_fn(png, file, &pngWrite, &pngFlush);
+    png_set_IHDR(png, info, width, height, 8, colorType, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
+    png_set_compression_level(png, 9);
+    png_set_rows(png, info, const_cast<png_bytepp>(&rows[0]));
+    png_write_png(png, info, PNG_TRANSFORM_IDENTITY, NULL);
+    return true;
+}
+
+static bool pngSave(const float *pixels, int width, int height, int channels, int colorType, const char *filename) {
+    if (!(pixels && width && height))
+        return false;
+    int subpixels = channels*width*height;
+    std::vector<byte> bytePixels(subpixels);
+    for (int i = 0; i < subpixels; ++i)
+        bytePixels[i] = pixelFloatToByte(pixels[i]);
+    return pngSave(&bytePixels[0], width, height, channels, colorType, filename);
+}
+
+bool savePng(const BitmapConstRef<byte, 1> &bitmap, const char *filename) {
+    return pngSave(bitmap.pixels, bitmap.width, bitmap.height, 1, PNG_COLOR_TYPE_GRAY, filename);
+}
+
+bool savePng(const BitmapConstRef<byte, 3> &bitmap, const char *filename) {
+    return pngSave(bitmap.pixels, bitmap.width, bitmap.height, 3, PNG_COLOR_TYPE_RGB, filename);
+}
+
+bool savePng(const BitmapConstRef<byte, 4> &bitmap, const char *filename) {
+    return pngSave(bitmap.pixels, bitmap.width, bitmap.height, 4, PNG_COLOR_TYPE_RGB_ALPHA, filename);
+}
+
+bool savePng(const BitmapConstRef<float, 1> &bitmap, const char *filename) {
+    return pngSave(bitmap.pixels, bitmap.width, bitmap.height, 1, PNG_COLOR_TYPE_GRAY, filename);
+}
+
+bool savePng(const BitmapConstRef<float, 3> &bitmap, const char *filename) {
+    return pngSave(bitmap.pixels, bitmap.width, bitmap.height, 3, PNG_COLOR_TYPE_RGB, filename);
+}
+
+bool savePng(const BitmapConstRef<float, 4> &bitmap, const char *filename) {
+    return pngSave(bitmap.pixels, bitmap.width, bitmap.height, 4, PNG_COLOR_TYPE_RGB_ALPHA, filename);
+}
+
+}
+
+#endif
+
+#ifdef MSDFGEN_USE_LODEPNG
+
+#include <lodepng.h>
+
 namespace msdfgen {
 
 bool savePng(const BitmapConstRef<byte, 1> &bitmap, const char *filename) {
@@ -63,3 +168,5 @@ bool savePng(const BitmapConstRef<float, 4> &bitmap, const char *filename) {
 }
 
 }
+
+#endif

+ 0 - 169
freetype/FTL.TXT

@@ -1,169 +0,0 @@
-                    The FreeType Project LICENSE
-                    ----------------------------
-
-                            2006-Jan-27
-
-                    Copyright 1996-2002, 2006 by
-          David Turner, Robert Wilhelm, and Werner Lemberg
-
-
-
-Introduction
-============
-
-  The FreeType  Project is distributed in  several archive packages;
-  some of them may contain, in addition to the FreeType font engine,
-  various tools and  contributions which rely on, or  relate to, the
-  FreeType Project.
-
-  This  license applies  to all  files found  in such  packages, and
-  which do not  fall under their own explicit  license.  The license
-  affects  thus  the  FreeType   font  engine,  the  test  programs,
-  documentation and makefiles, at the very least.
-
-  This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
-  (Independent JPEG  Group) licenses, which  all encourage inclusion
-  and  use of  free  software in  commercial  and freeware  products
-  alike.  As a consequence, its main points are that:
-
-    o We don't promise that this software works. However, we will be
-      interested in any kind of bug reports. (`as is' distribution)
-
-    o You can  use this software for whatever you  want, in parts or
-      full form, without having to pay us. (`royalty-free' usage)
-
-    o You may not pretend that  you wrote this software.  If you use
-      it, or  only parts of it,  in a program,  you must acknowledge
-      somewhere  in  your  documentation  that  you  have  used  the
-      FreeType code. (`credits')
-
-  We  specifically  permit  and  encourage  the  inclusion  of  this
-  software, with  or without modifications,  in commercial products.
-  We  disclaim  all warranties  covering  The  FreeType Project  and
-  assume no liability related to The FreeType Project.
-
-
-  Finally,  many  people  asked  us  for  a  preferred  form  for  a
-  credit/disclaimer to use in compliance with this license.  We thus
-  encourage you to use the following text:
-
-   """
-    Portions of this software are copyright © <year> The FreeType
-    Project (www.freetype.org).  All rights reserved.
-   """
-
-  Please replace <year> with the value from the FreeType version you
-  actually use.
-
-
-Legal Terms
-===========
-
-0. Definitions
---------------
-
-  Throughout this license,  the terms `package', `FreeType Project',
-  and  `FreeType  archive' refer  to  the  set  of files  originally
-  distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
-  Werner Lemberg) as the `FreeType Project', be they named as alpha,
-  beta or final release.
-
-  `You' refers to  the licensee, or person using  the project, where
-  `using' is a generic term including compiling the project's source
-  code as  well as linking it  to form a  `program' or `executable'.
-  This  program is  referred to  as  `a program  using the  FreeType
-  engine'.
-
-  This  license applies  to all  files distributed  in  the original
-  FreeType  Project,   including  all  source   code,  binaries  and
-  documentation,  unless  otherwise  stated   in  the  file  in  its
-  original, unmodified form as  distributed in the original archive.
-  If you are  unsure whether or not a particular  file is covered by
-  this license, you must contact us to verify this.
-
-  The FreeType  Project is copyright (C) 1996-2000  by David Turner,
-  Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
-  specified below.
-
-1. No Warranty
---------------
-
-  THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
-  KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
-  WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
-  PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
-  BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
-  USE, OF THE FREETYPE PROJECT.
-
-2. Redistribution
------------------
-
-  This  license  grants  a  worldwide, royalty-free,  perpetual  and
-  irrevocable right  and license to use,  execute, perform, compile,
-  display,  copy,   create  derivative  works   of,  distribute  and
-  sublicense the  FreeType Project (in  both source and  object code
-  forms)  and  derivative works  thereof  for  any  purpose; and  to
-  authorize others  to exercise  some or all  of the  rights granted
-  herein, subject to the following conditions:
-
-    o Redistribution of  source code  must retain this  license file
-      (`FTL.TXT') unaltered; any  additions, deletions or changes to
-      the original  files must be clearly  indicated in accompanying
-      documentation.   The  copyright   notices  of  the  unaltered,
-      original  files must  be  preserved in  all  copies of  source
-      files.
-
-    o Redistribution in binary form must provide a  disclaimer  that
-      states  that  the software is based in part of the work of the
-      FreeType Team,  in  the  distribution  documentation.  We also
-      encourage you to put an URL to the FreeType web page  in  your
-      documentation, though this isn't mandatory.
-
-  These conditions  apply to any  software derived from or  based on
-  the FreeType Project,  not just the unmodified files.   If you use
-  our work, you  must acknowledge us.  However, no  fee need be paid
-  to us.
-
-3. Advertising
---------------
-
-  Neither the  FreeType authors and  contributors nor you  shall use
-  the name of the  other for commercial, advertising, or promotional
-  purposes without specific prior written permission.
-
-  We suggest,  but do not require, that  you use one or  more of the
-  following phrases to refer  to this software in your documentation
-  or advertising  materials: `FreeType Project',  `FreeType Engine',
-  `FreeType library', or `FreeType Distribution'.
-
-  As  you have  not signed  this license,  you are  not  required to
-  accept  it.   However,  as  the FreeType  Project  is  copyrighted
-  material, only  this license, or  another one contracted  with the
-  authors, grants you  the right to use, distribute,  and modify it.
-  Therefore,  by  using,  distributing,  or modifying  the  FreeType
-  Project, you indicate that you understand and accept all the terms
-  of this license.
-
-4. Contacts
------------
-
-  There are two mailing lists related to FreeType:
-
-    o [email protected]
-
-      Discusses general use and applications of FreeType, as well as
-      future and  wanted additions to the  library and distribution.
-      If  you are looking  for support,  start in  this list  if you
-      haven't found anything to help you in the documentation.
-
-    o [email protected]
-
-      Discusses bugs,  as well  as engine internals,  design issues,
-      specific licenses, porting, etc.
-
-  Our home page can be found at
-
-    http://www.freetype.org
-
-
---- end of FTL.TXT ---

+ 0 - 571
freetype/include/freetype/config/ftconfig.h

@@ -1,571 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftconfig.h                                                             */
-/*                                                                         */
-/*    ANSI-specific configuration file (specification only).               */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* This header file contains a number of macro definitions that are used */
-  /* by the rest of the engine.  Most of the macros here are automatically */
-  /* determined at compile time, and you should not need to change it to   */
-  /* port FreeType, except to compile the library with a non-ANSI          */
-  /* compiler.                                                             */
-  /*                                                                       */
-  /* Note however that if some specific modifications are needed, we       */
-  /* advise you to place a modified copy in your build directory.          */
-  /*                                                                       */
-  /* The build directory is usually `builds/<system>', and contains        */
-  /* system-specific files that are always included first when building    */
-  /* the library.                                                          */
-  /*                                                                       */
-  /* This ANSI version should stay in `include/config/'.                   */
-  /*                                                                       */
-  /*************************************************************************/
-
-#ifndef FTCONFIG_H_
-#define FTCONFIG_H_
-
-#include <ft2build.h>
-#include FT_CONFIG_OPTIONS_H
-#include FT_CONFIG_STANDARD_LIBRARY_H
-
-
-FT_BEGIN_HEADER
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /*               PLATFORM-SPECIFIC CONFIGURATION MACROS                  */
-  /*                                                                       */
-  /* These macros can be toggled to suit a specific system.  The current   */
-  /* ones are defaults used to compile FreeType in an ANSI C environment   */
-  /* (16bit compilers are also supported).  Copy this file to your own     */
-  /* `builds/<system>' directory, and edit it to port the engine.          */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /* There are systems (like the Texas Instruments 'C54x) where a `char' */
-  /* has 16 bits.  ANSI C says that sizeof(char) is always 1.  Since an  */
-  /* `int' has 16 bits also for this system, sizeof(int) gives 1 which   */
-  /* is probably unexpected.                                             */
-  /*                                                                     */
-  /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a      */
-  /* `char' type.                                                        */
-
-#ifndef FT_CHAR_BIT
-#define FT_CHAR_BIT  CHAR_BIT
-#endif
-
-
-  /* The size of an `int' type.  */
-#if                                 FT_UINT_MAX == 0xFFFFUL
-#define FT_SIZEOF_INT  ( 16 / FT_CHAR_BIT )
-#elif                               FT_UINT_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_INT  ( 32 / FT_CHAR_BIT )
-#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_INT  ( 64 / FT_CHAR_BIT )
-#else
-#error "Unsupported size of `int' type!"
-#endif
-
-  /* The size of a `long' type.  A five-byte `long' (as used e.g. on the */
-  /* DM642) is recognized but avoided.                                   */
-#if                                  FT_ULONG_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_LONG  ( 32 / FT_CHAR_BIT )
-#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
-#define FT_SIZEOF_LONG  ( 32 / FT_CHAR_BIT )
-#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_LONG  ( 64 / FT_CHAR_BIT )
-#else
-#error "Unsupported size of `long' type!"
-#endif
-
-
-  /* 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
-#define FT_UNUSED( arg )  ( (arg) = (arg) )
-#endif
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /*                     AUTOMATIC CONFIGURATION MACROS                    */
-  /*                                                                       */
-  /* These macros are computed from the ones defined above.  Don't touch   */
-  /* their definition, unless you know precisely what you are doing.  No   */
-  /* porter should need to mess with them.                                 */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Mac support                                                           */
-  /*                                                                       */
-  /*   This is the only necessary change, so it is defined here instead    */
-  /*   providing a new configuration file.                                 */
-  /*                                                                       */
-#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 )
-#undef FT_MACINTOSH
-#endif
-
-#elif defined( __SC__ ) || defined( __MRC__ )
-  /* Classic MacOS compilers */
-#include "ConditionalMacros.h"
-#if TARGET_OS_MAC
-#define FT_MACINTOSH 1
-#endif
-
-#endif
-
-
-  /* Fix compiler warning with sgi compiler */
-#if defined( __sgi ) && !defined( __GNUC__ )
-#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
-#pragma set woff 3505
-#endif
-#endif
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    basic_types                                                        */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Int16                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for a 16bit signed integer type.                         */
-  /*                                                                       */
-  typedef signed short  FT_Int16;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UInt16                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for a 16bit unsigned integer type.                       */
-  /*                                                                       */
-  typedef unsigned short  FT_UInt16;
-
-  /* */
-
-
-  /* this #if 0 ... #endif clause is for documentation purposes */
-#if 0
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Int32                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for a 32bit signed integer type.  The size depends on    */
-  /*    the configuration.                                                 */
-  /*                                                                       */
-  typedef signed XXX  FT_Int32;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UInt32                                                          */
-  /*                                                                       */
-  /*    A typedef for a 32bit unsigned integer type.  The size depends on  */
-  /*    the configuration.                                                 */
-  /*                                                                       */
-  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
-
-#if FT_SIZEOF_INT == ( 32 / FT_CHAR_BIT )
-
-  typedef signed int      FT_Int32;
-  typedef unsigned int    FT_UInt32;
-
-#elif FT_SIZEOF_LONG == ( 32 / FT_CHAR_BIT )
-
-  typedef signed long     FT_Int32;
-  typedef unsigned long   FT_UInt32;
-
-#else
-#error "no 32bit type found -- please check your configuration files"
-#endif
-
-
-  /* look up an integer type that is at least 32 bits */
-#if FT_SIZEOF_INT >= ( 32 / FT_CHAR_BIT )
-
-  typedef int            FT_Fast;
-  typedef unsigned int   FT_UFast;
-
-#elif FT_SIZEOF_LONG >= ( 32 / FT_CHAR_BIT )
-
-  typedef long           FT_Fast;
-  typedef unsigned long  FT_UFast;
-
-#endif
-
-
-  /* determine whether we have a 64-bit int type for platforms without */
-  /* Autoconf                                                          */
-#if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT )
-
-  /* FT_LONG64 must be defined if a 64-bit type is available */
-#define FT_LONG64
-#define FT_INT64   long
-#define FT_UINT64  unsigned long
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* A 64-bit data type may create compilation problems if you compile     */
-  /* in strict ANSI mode.  To avoid them, we disable other 64-bit data     */
-  /* types if __STDC__ is defined.  You can however ignore this rule       */
-  /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro.     */
-  /*                                                                       */
-#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
-
-#if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
-
-#define FT_LONG64
-#define FT_INT64   long long int
-#define FT_UINT64  unsigned long long int
-
-#elif defined( _MSC_VER ) && _MSC_VER >= 900  /* Visual C++ (and Intel C++) */
-
-  /* this compiler provides the __int64 type */
-#define FT_LONG64
-#define FT_INT64   __int64
-#define FT_UINT64  unsigned __int64
-
-#elif defined( __BORLANDC__ )  /* Borland C++ */
-
-  /* XXXX: We should probably check the value of __BORLANDC__ in order */
-  /*       to test the compiler version.                               */
-
-  /* this compiler provides the __int64 type */
-#define FT_LONG64
-#define FT_INT64   __int64
-#define FT_UINT64  unsigned __int64
-
-#elif defined( __WATCOMC__ )   /* Watcom C++ */
-
-  /* Watcom doesn't provide 64-bit data types */
-
-#elif defined( __MWERKS__ )    /* Metrowerks CodeWarrior */
-
-#define FT_LONG64
-#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_UINT64  unsigned long long int
-
-#endif /* __STDC_VERSION__ >= 199901L */
-
-#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
-
-#ifdef FT_LONG64
-  typedef FT_INT64   FT_Int64;
-  typedef FT_UINT64  FT_UInt64;
-#endif
-
-
-#ifdef _WIN64
-  /* only 64bit Windows uses the LLP64 data model, i.e., */
-  /* 32bit integers, 64bit pointers                      */
-#define FT_UINT_TO_POINTER( x ) (void*)(unsigned __int64)(x)
-#else
-#define FT_UINT_TO_POINTER( x ) (void*)(unsigned long)(x)
-#endif
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* miscellaneous                                                         */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-#define FT_BEGIN_STMNT  do {
-#define FT_END_STMNT    } while ( 0 )
-#define FT_DUMMY_STMNT  FT_BEGIN_STMNT FT_END_STMNT
-
-
-  /* typeof condition taken from gnulib's `intprops.h' header file */
-#if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 )                       || \
-      ( defined( __IBMC__ ) && __IBMC__ >= 1210 &&                      \
-        defined( __IBM__TYPEOF__ ) )                                 || \
-      ( defined( __SUNPRO_C ) && __SUNPRO_C >= 0x5110 && !__STDC__ ) )
-#define FT_TYPEOF( type )  ( __typeof__ ( type ) )
-#else
-#define FT_TYPEOF( type )  /* empty */
-#endif
-
-
-  /* Use FT_LOCAL and FT_LOCAL_DEF to declare and define, respectively, */
-  /* a function that gets used only within the scope of a module.       */
-  /* Normally, both the header and source code files for such a         */
-  /* function are within a single module directory.                     */
-  /*                                                                    */
-  /* Intra-module arrays should be tagged with FT_LOCAL_ARRAY and       */
-  /* FT_LOCAL_ARRAY_DEF.                                                */
-  /*                                                                    */
-#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
-
-#define FT_LOCAL( x )      static  x
-#define FT_LOCAL_DEF( x )  static  x
-
-#else
-
-#ifdef __cplusplus
-#define FT_LOCAL( x )      extern "C"  x
-#define FT_LOCAL_DEF( x )  extern "C"  x
-#else
-#define FT_LOCAL( x )      extern  x
-#define FT_LOCAL_DEF( x )  x
-#endif
-
-#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
-
-#define FT_LOCAL_ARRAY( x )      extern const  x
-#define FT_LOCAL_ARRAY_DEF( x )  const  x
-
-
-  /* Use FT_BASE and FT_BASE_DEF to declare and define, respectively, */
-  /* functions that are used in more than a single module.  In the    */
-  /* current setup this implies that the declaration is in a header   */
-  /* file in the `include/freetype/internal' directory, and the       */
-  /* function body is in a file in `src/base'.                        */
-  /*                                                                  */
-#ifndef FT_BASE
-
-#ifdef __cplusplus
-#define FT_BASE( x )  extern "C"  x
-#else
-#define FT_BASE( x )  extern  x
-#endif
-
-#endif /* !FT_BASE */
-
-
-#ifndef FT_BASE_DEF
-
-#ifdef __cplusplus
-#define FT_BASE_DEF( x )  x
-#else
-#define FT_BASE_DEF( x )  x
-#endif
-
-#endif /* !FT_BASE_DEF */
-
-
-  /*   When compiling FreeType as a DLL or DSO with hidden visibility      */
-  /*   some systems/compilers need a special attribute in front OR after   */
-  /*   the return type of function declarations.                           */
-  /*                                                                       */
-  /*   Two macros are used within the FreeType source code to define       */
-  /*   exported library functions: FT_EXPORT and FT_EXPORT_DEF.            */
-  /*                                                                       */
-  /*     FT_EXPORT( return_type )                                          */
-  /*                                                                       */
-  /*       is used in a function declaration, as in                        */
-  /*                                                                       */
-  /*         FT_EXPORT( FT_Error )                                         */
-  /*         FT_Init_FreeType( FT_Library*  alibrary );                    */
-  /*                                                                       */
-  /*                                                                       */
-  /*     FT_EXPORT_DEF( return_type )                                      */
-  /*                                                                       */
-  /*       is used in a function definition, as in                         */
-  /*                                                                       */
-  /*         FT_EXPORT_DEF( FT_Error )                                     */
-  /*         FT_Init_FreeType( FT_Library*  alibrary )                     */
-  /*         {                                                             */
-  /*           ... some code ...                                           */
-  /*           return FT_Err_Ok;                                           */
-  /*         }                                                             */
-  /*                                                                       */
-  /*   You can provide your own implementation of FT_EXPORT and            */
-  /*   FT_EXPORT_DEF here if you want.                                     */
-  /*                                                                       */
-  /*   To export a variable, use FT_EXPORT_VAR.                            */
-  /*                                                                       */
-#ifndef FT_EXPORT
-
-#ifdef FT2_BUILD_LIBRARY
-
-#if defined( _WIN32 ) && ( defined( _DLL ) || defined( DLL_EXPORT ) )
-#define FT_EXPORT( x )  __declspec( dllexport )  x
-#elif defined( __GNUC__ ) && __GNUC__ >= 4
-#define FT_EXPORT( x )  __attribute__(( visibility( "default" ) ))  x
-#elif defined( __cplusplus )
-#define FT_EXPORT( x )  extern "C"  x
-#else
-#define FT_EXPORT( x )  extern  x
-#endif
-
-#else
-
-#if defined( FT2_DLLIMPORT )
-#define FT_EXPORT( x )  __declspec( dllimport )  x
-#elif defined( __cplusplus )
-#define FT_EXPORT( x )  extern "C"  x
-#else
-#define FT_EXPORT( x )  extern  x
-#endif
-
-#endif
-
-#endif /* !FT_EXPORT */
-
-
-#ifndef FT_EXPORT_DEF
-
-#ifdef __cplusplus
-#define FT_EXPORT_DEF( x )  extern "C"  x
-#else
-#define FT_EXPORT_DEF( x )  extern  x
-#endif
-
-#endif /* !FT_EXPORT_DEF */
-
-
-#ifndef FT_EXPORT_VAR
-
-#ifdef __cplusplus
-#define FT_EXPORT_VAR( x )  extern "C"  x
-#else
-#define FT_EXPORT_VAR( x )  extern  x
-#endif
-
-#endif /* !FT_EXPORT_VAR */
-
-
-  /* The following macros are needed to compile the library with a   */
-  /* C++ compiler and with 16bit compilers.                          */
-  /*                                                                 */
-
-  /* This is special.  Within C++, you must specify `extern "C"' for */
-  /* functions which are used via function pointers, and you also    */
-  /* must do that for structures which contain function pointers to  */
-  /* assure C linkage -- it's not possible to have (local) anonymous */
-  /* functions which are accessed by (global) function pointers.     */
-  /*                                                                 */
-  /*                                                                 */
-  /* FT_CALLBACK_DEF is used to _define_ a callback function,        */
-  /* located in the same source code file as the structure that uses */
-  /* it.                                                             */
-  /*                                                                 */
-  /* FT_BASE_CALLBACK and FT_BASE_CALLBACK_DEF are used to declare   */
-  /* and define a callback function, respectively, in a similar way  */
-  /* as FT_BASE and FT_BASE_DEF work.                                */
-  /*                                                                 */
-  /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
-  /* contains pointers to callback functions.                        */
-  /*                                                                 */
-  /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable   */
-  /* that contains pointers to callback functions.                   */
-  /*                                                                 */
-  /*                                                                 */
-  /* Some 16bit compilers have to redefine these macros to insert    */
-  /* the infamous `_cdecl' or `__fastcall' declarations.             */
-  /*                                                                 */
-#ifndef FT_CALLBACK_DEF
-#ifdef __cplusplus
-#define FT_CALLBACK_DEF( x )  extern "C"  x
-#else
-#define FT_CALLBACK_DEF( x )  static  x
-#endif
-#endif /* FT_CALLBACK_DEF */
-
-#ifndef FT_BASE_CALLBACK
-#ifdef __cplusplus
-#define FT_BASE_CALLBACK( x )      extern "C"  x
-#define FT_BASE_CALLBACK_DEF( x )  extern "C"  x
-#else
-#define FT_BASE_CALLBACK( x )      extern  x
-#define FT_BASE_CALLBACK_DEF( x )  x
-#endif
-#endif /* FT_BASE_CALLBACK */
-
-#ifndef FT_CALLBACK_TABLE
-#ifdef __cplusplus
-#define FT_CALLBACK_TABLE      extern "C"
-#define FT_CALLBACK_TABLE_DEF  extern "C"
-#else
-#define FT_CALLBACK_TABLE      extern
-#define FT_CALLBACK_TABLE_DEF  /* nothing */
-#endif
-#endif /* FT_CALLBACK_TABLE */
-
-
-FT_END_HEADER
-
-
-#endif /* FTCONFIG_H_ */
-
-
-/* END */

+ 0 - 804
freetype/include/freetype/config/ftheader.h

@@ -1,804 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftheader.h                                                             */
-/*                                                                         */
-/*    Build macros of the FreeType 2 library.                              */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-#ifndef FTHEADER_H_
-#define FTHEADER_H_
-
-
-  /*@***********************************************************************/
-  /*                                                                       */
-  /* <Macro>                                                               */
-  /*    FT_BEGIN_HEADER                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This macro is used in association with @FT_END_HEADER in header    */
-  /*    files to ensure that the declarations within are properly          */
-  /*    encapsulated in an `extern "C" { .. }' block when included from a  */
-  /*    C++ compiler.                                                      */
-  /*                                                                       */
-#ifdef __cplusplus
-#define FT_BEGIN_HEADER  extern "C" {
-#else
-#define FT_BEGIN_HEADER  /* nothing */
-#endif
-
-
-  /*@***********************************************************************/
-  /*                                                                       */
-  /* <Macro>                                                               */
-  /*    FT_END_HEADER                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This macro is used in association with @FT_BEGIN_HEADER in header  */
-  /*    files to ensure that the declarations within are properly          */
-  /*    encapsulated in an `extern "C" { .. }' block when included from a  */
-  /*    C++ compiler.                                                      */
-  /*                                                                       */
-#ifdef __cplusplus
-#define FT_END_HEADER  }
-#else
-#define FT_END_HEADER  /* nothing */
-#endif
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Aliases for the FreeType 2 public and configuration files.            */
-  /*                                                                       */
-  /*************************************************************************/
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    header_file_macros                                                 */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Header File Macros                                                 */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Macro definitions used to #include specific header files.          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The following macros are defined to the name of specific           */
-  /*    FreeType~2 header files.  They can be used directly in #include    */
-  /*    statements as in:                                                  */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      #include FT_FREETYPE_H                                           */
-  /*      #include FT_MULTIPLE_MASTERS_H                                   */
-  /*      #include FT_GLYPH_H                                              */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    There are several reasons why we are now using macros to name      */
-  /*    public header files.  The first one is that such macros are not    */
-  /*    limited to the infamous 8.3~naming rule required by DOS (and       */
-  /*    `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h').   */
-  /*                                                                       */
-  /*    The second reason is that it allows for more flexibility in the    */
-  /*    way FreeType~2 is installed on a given system.                     */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /* configuration files */
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_CONFIG_CONFIG_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing
-   *   FreeType~2 configuration data.
-   *
-   */
-#ifndef FT_CONFIG_CONFIG_H
-#define FT_CONFIG_CONFIG_H  <freetype/config/ftconfig.h>
-#endif
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_CONFIG_STANDARD_LIBRARY_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing
-   *   FreeType~2 interface to the standard C library functions.
-   *
-   */
-#ifndef FT_CONFIG_STANDARD_LIBRARY_H
-#define FT_CONFIG_STANDARD_LIBRARY_H  <freetype/config/ftstdlib.h>
-#endif
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_CONFIG_OPTIONS_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing
-   *   FreeType~2 project-specific configuration options.
-   *
-   */
-#ifndef FT_CONFIG_OPTIONS_H
-#define FT_CONFIG_OPTIONS_H  <freetype/config/ftoption.h>
-#endif
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_CONFIG_MODULES_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   list of FreeType~2 modules that are statically linked to new library
-   *   instances in @FT_Init_FreeType.
-   *
-   */
-#ifndef FT_CONFIG_MODULES_H
-#define FT_CONFIG_MODULES_H  <freetype/config/ftmodule.h>
-#endif
-
-  /* */
-
-  /* public headers */
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_FREETYPE_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   base FreeType~2 API.
-   *
-   */
-#define FT_FREETYPE_H  <freetype/freetype.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_ERRORS_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   list of FreeType~2 error codes (and messages).
-   *
-   *   It is included by @FT_FREETYPE_H.
-   *
-   */
-#define FT_ERRORS_H  <freetype/fterrors.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_MODULE_ERRORS_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   list of FreeType~2 module error offsets (and messages).
-   *
-   */
-#define FT_MODULE_ERRORS_H  <freetype/ftmoderr.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_SYSTEM_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 interface to low-level operations (i.e., memory management
-   *   and stream i/o).
-   *
-   *   It is included by @FT_FREETYPE_H.
-   *
-   */
-#define FT_SYSTEM_H  <freetype/ftsystem.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_IMAGE_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing type
-   *   definitions related to glyph images (i.e., bitmaps, outlines,
-   *   scan-converter parameters).
-   *
-   *   It is included by @FT_FREETYPE_H.
-   *
-   */
-#define FT_IMAGE_H  <freetype/ftimage.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_TYPES_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   basic data types defined by FreeType~2.
-   *
-   *   It is included by @FT_FREETYPE_H.
-   *
-   */
-#define FT_TYPES_H  <freetype/fttypes.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_LIST_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   list management API of FreeType~2.
-   *
-   *   (Most applications will never need to include this file.)
-   *
-   */
-#define FT_LIST_H  <freetype/ftlist.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_OUTLINE_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   scalable outline management API of FreeType~2.
-   *
-   */
-#define FT_OUTLINE_H  <freetype/ftoutln.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_SIZES_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   API which manages multiple @FT_Size objects per face.
-   *
-   */
-#define FT_SIZES_H  <freetype/ftsizes.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_MODULE_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   module management API of FreeType~2.
-   *
-   */
-#define FT_MODULE_H  <freetype/ftmodapi.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_RENDER_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   renderer module management API of FreeType~2.
-   *
-   */
-#define FT_RENDER_H  <freetype/ftrender.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_DRIVER_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing
-   *   structures and macros related to the driver modules.
-   *
-   */
-#define FT_DRIVER_H  <freetype/ftdriver.h>
-
-
-  /*************************************************************************
-   *
-   * @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.
-   *
-   *   Deprecated since version 2.9; use @FT_DRIVER_H instead.
-   *
-   */
-#define FT_AUTOHINTER_H  FT_DRIVER_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.
-   *
-   *   Deprecated since version 2.9; use @FT_DRIVER_H instead.
-   *
-   */
-#define FT_CFF_DRIVER_H  FT_DRIVER_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.
-   *
-   *   Deprecated since version 2.9; use @FT_DRIVER_H instead.
-   *
-   */
-#define FT_TRUETYPE_DRIVER_H  FT_DRIVER_H
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_PCF_DRIVER_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing
-   *   structures and macros related to the PCF driver module.
-   *
-   *   Deprecated since version 2.9; use @FT_DRIVER_H instead.
-   *
-   */
-#define FT_PCF_DRIVER_H  FT_DRIVER_H
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_TYPE1_TABLES_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   types and API specific to the Type~1 format.
-   *
-   */
-#define FT_TYPE1_TABLES_H  <freetype/t1tables.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_TRUETYPE_IDS_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   enumeration values which identify name strings, languages, encodings,
-   *   etc.  This file really contains a _large_ set of constant macro
-   *   definitions, taken from the TrueType and OpenType specifications.
-   *
-   */
-#define FT_TRUETYPE_IDS_H  <freetype/ttnameid.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_TRUETYPE_TABLES_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   types and API specific to the TrueType (as well as OpenType) format.
-   *
-   */
-#define FT_TRUETYPE_TABLES_H  <freetype/tttables.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_TRUETYPE_TAGS_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   definitions of TrueType four-byte `tags' which identify blocks in
-   *   SFNT-based font formats (i.e., TrueType and OpenType).
-   *
-   */
-#define FT_TRUETYPE_TAGS_H  <freetype/tttags.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_BDF_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   definitions of an API which accesses BDF-specific strings from a
-   *   face.
-   *
-   */
-#define FT_BDF_H  <freetype/ftbdf.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_CID_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   definitions of an API which access CID font information from a
-   *   face.
-   *
-   */
-#define FT_CID_H  <freetype/ftcid.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_GZIP_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   definitions of an API which supports gzip-compressed files.
-   *
-   */
-#define FT_GZIP_H  <freetype/ftgzip.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_LZW_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   definitions of an API which supports LZW-compressed files.
-   *
-   */
-#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:
-   *   FT_WINFONTS_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   definitions of an API which supports Windows FNT files.
-   *
-   */
-#define FT_WINFONTS_H   <freetype/ftwinfnt.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_GLYPH_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   API of the optional glyph management component.
-   *
-   */
-#define FT_GLYPH_H  <freetype/ftglyph.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_BITMAP_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   API of the optional bitmap conversion component.
-   *
-   */
-#define FT_BITMAP_H  <freetype/ftbitmap.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_BBOX_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   API of the optional exact bounding box computation routines.
-   *
-   */
-#define FT_BBOX_H  <freetype/ftbbox.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_CACHE_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   API of the optional FreeType~2 cache sub-system.
-   *
-   */
-#define FT_CACHE_H  <freetype/ftcache.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_MAC_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   Macintosh-specific FreeType~2 API.  The latter is used to access
-   *   fonts embedded in resource forks.
-   *
-   *   This header file must be explicitly included by client applications
-   *   compiled on the Mac (note that the base API still works though).
-   *
-   */
-#define FT_MAC_H  <freetype/ftmac.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_MULTIPLE_MASTERS_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   optional multiple-masters management API of FreeType~2.
-   *
-   */
-#define FT_MULTIPLE_MASTERS_H  <freetype/ftmm.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_SFNT_NAMES_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   optional FreeType~2 API which accesses embedded `name' strings in
-   *   SFNT-based font formats (i.e., TrueType and OpenType).
-   *
-   */
-#define FT_SFNT_NAMES_H  <freetype/ftsnames.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_OPENTYPE_VALIDATE_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   optional FreeType~2 API which validates OpenType tables (BASE, GDEF,
-   *   GPOS, GSUB, JSTF).
-   *
-   */
-#define FT_OPENTYPE_VALIDATE_H  <freetype/ftotval.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_GX_VALIDATE_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   optional FreeType~2 API which validates TrueTypeGX/AAT tables (feat,
-   *   mort, morx, bsln, just, kern, opbd, trak, prop).
-   *
-   */
-#define FT_GX_VALIDATE_H  <freetype/ftgxval.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_PFR_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 API which accesses PFR-specific data.
-   *
-   */
-#define FT_PFR_H  <freetype/ftpfr.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_STROKER_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 API which provides functions to stroke outline paths.
-   */
-#define FT_STROKER_H  <freetype/ftstroke.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_SYNTHESIS_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 API which performs artificial obliquing and emboldening.
-   */
-#define FT_SYNTHESIS_H  <freetype/ftsynth.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_FONT_FORMATS_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 API which provides functions specific to font formats.
-   */
-#define FT_FONT_FORMATS_H  <freetype/ftfntfmt.h>
-
-  /* deprecated */
-#define FT_XFREE86_H  FT_FONT_FORMATS_H
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_TRIGONOMETRY_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 API which performs trigonometric computations (e.g.,
-   *   cosines and arc tangents).
-   */
-#define FT_TRIGONOMETRY_H  <freetype/fttrigon.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_LCD_FILTER_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 API which performs color filtering for subpixel rendering.
-   */
-#define FT_LCD_FILTER_H  <freetype/ftlcdfil.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_INCREMENTAL_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 API which performs incremental glyph loading.
-   */
-#define FT_INCREMENTAL_H  <freetype/ftincrem.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_GASP_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 API which returns entries from the TrueType GASP table.
-   */
-#define FT_GASP_H  <freetype/ftgasp.h>
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_ADVANCES_H
-   *
-   * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 API which returns individual and ranged glyph advances.
-   */
-#define FT_ADVANCES_H  <freetype/ftadvanc.h>
-
-
-  /* */
-
-  /* These header files don't need to be included by the user. */
-#define FT_ERROR_DEFINITIONS_H  <freetype/fterrdef.h>
-#define FT_PARAMETER_TAGS_H     <freetype/ftparams.h>
-
-  /* Deprecated macros. */
-#define FT_UNPATENTED_HINTING_H   <freetype/ftparams.h>
-#define FT_TRUETYPE_UNPATENTED_H  <freetype/ftparams.h>
-
-  /* FT_CACHE_H is the only header file needed for the cache subsystem. */
-#define FT_CACHE_IMAGE_H          FT_CACHE_H
-#define FT_CACHE_SMALL_BITMAPS_H  FT_CACHE_H
-#define FT_CACHE_CHARMAP_H        FT_CACHE_H
-
-  /* The internals of the cache sub-system are no longer exposed.  We */
-  /* default to FT_CACHE_H at the moment just in case, but we know of */
-  /* no rogue client that uses them.                                  */
-  /*                                                                  */
-#define FT_CACHE_MANAGER_H           FT_CACHE_H
-#define FT_CACHE_INTERNAL_MRU_H      FT_CACHE_H
-#define FT_CACHE_INTERNAL_MANAGER_H  FT_CACHE_H
-#define FT_CACHE_INTERNAL_CACHE_H    FT_CACHE_H
-#define FT_CACHE_INTERNAL_GLYPH_H    FT_CACHE_H
-#define FT_CACHE_INTERNAL_IMAGE_H    FT_CACHE_H
-#define FT_CACHE_INTERNAL_SBITS_H    FT_CACHE_H
-
-
-  /*
-   * Include internal headers definitions from <internal/...>
-   * only when building the library.
-   */
-#ifdef FT2_BUILD_LIBRARY
-#define  FT_INTERNAL_INTERNAL_H  <freetype/internal/internal.h>
-#include FT_INTERNAL_INTERNAL_H
-#endif /* FT2_BUILD_LIBRARY */
-
-
-#endif /* FTHEADER_H_ */
-
-
-/* END */

+ 0 - 32
freetype/include/freetype/config/ftmodule.h

@@ -1,32 +0,0 @@
-/*
- *  This file registers the FreeType modules compiled into the library.
- *
- *  If you use GNU make, this file IS NOT USED!  Instead, it is created in
- *  the objects directory (normally `<topdir>/objs/') based on information
- *  from `<topdir>/modules.cfg'.
- *
- *  Please read `docs/INSTALL.ANY' and `docs/CUSTOMIZE' how to compile
- *  FreeType without GNU make.
- *
- */
-
-FT_USE_MODULE( FT_Module_Class, autofit_module_class )
-FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, cff_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
-FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
-FT_USE_MODULE( FT_Module_Class, psaux_module_class )
-FT_USE_MODULE( FT_Module_Class, psnames_module_class )
-FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
-FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class )
-FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class )
-FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
-
-/* EOF */

+ 0 - 977
freetype/include/freetype/config/ftoption.h

@@ -1,977 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftoption.h                                                             */
-/*                                                                         */
-/*    User-selectable configuration macros (specification only).           */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#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 ****/
-  /****                                                                 ****/
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*#***********************************************************************/
-  /*                                                                       */
-  /* If you enable this configuration option, FreeType recognizes an       */
-  /* environment variable called `FREETYPE_PROPERTIES', which can be used  */
-  /* to control the various font drivers and modules.  The controllable    */
-  /* properties are listed in the section @properties.                     */
-  /*                                                                       */
-  /* You have to undefine this configuration option on platforms that lack */
-  /* the concept of environment variables (and thus don't have the         */
-  /* `getenv' function), for example Windows CE.                           */
-  /*                                                                       */
-  /* `FREETYPE_PROPERTIES' has the following syntax form (broken here into */
-  /* multiple lines for better readability).                               */
-  /*                                                                       */
-  /* {                                                                     */
-  /*   <optional whitespace>                                               */
-  /*   <module-name1> ':'                                                  */
-  /*   <property-name1> '=' <property-value1>                              */
-  /*   <whitespace>                                                        */
-  /*   <module-name2> ':'                                                  */
-  /*   <property-name2> '=' <property-value2>                              */
-  /*   ...                                                                 */
-  /* }                                                                     */
-  /*                                                                       */
-  /* Example:                                                              */
-  /*                                                                       */
-  /*   FREETYPE_PROPERTIES=truetype:interpreter-version=35 \               */
-  /*                       cff:no-stem-darkening=1 \                       */
-  /*                       autofitter:warping=1                            */
-  /*                                                                       */
-#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Uncomment the line below if you want to activate LCD rendering        */
-  /* technology similar to ClearType in this build of the library.  This   */
-  /* technology triples the resolution in the direction color subpixels.   */
-  /* To mitigate color fringes inherent to this technology, you also need  */
-  /* to explicitly set up LCD filtering.                                   */
-  /*                                                                       */
-  /* Note that this feature is covered by several Microsoft patents        */
-  /* and should not be activated in any default build of the library.      */
-  /* When this macro is not defined, FreeType offers alternative LCD       */
-  /* rendering technology that produces excellent output without LCD       */
-  /* filtering.                                                            */
-  /*                                                                       */
-/* #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.                                 */
-  /*                                                                       */
-  /*   If you use a build system like cmake or the `configure' script,     */
-  /*   options set by those programs have precendence, overwriting the     */
-  /*   value here with the configured one.                                 */
-  /*                                                                       */
-/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* 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'.             */
-  /*                                                                       */
-  /*   If you use a build system like cmake or the `configure' script,     */
-  /*   options set by those programs have precendence, overwriting the     */
-  /*   value here with the configured one.                                 */
-  /*                                                                       */
-/* #define FT_CONFIG_OPTION_USE_BZIP2 */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* 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'.             */
-  /*                                                                       */
-  /*   If you use a build system like cmake or the `configure' script,     */
-  /*   options set by those programs have precendence, overwriting the     */
-  /*   value here with the configured one.                                 */
-  /*                                                                       */
-/* #define FT_CONFIG_OPTION_USE_PNG */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* HarfBuzz support.                                                     */
-  /*                                                                       */
-  /*   FreeType uses the HarfBuzz library to improve auto-hinting of       */
-  /*   OpenType fonts.  If available, many glyphs not directly addressable */
-  /*   by a font's character map will be hinted also.                      */
-  /*                                                                       */
-  /*   Define this macro if you want to enable this `feature'.             */
-  /*                                                                       */
-  /*   If you use a build system like cmake or the `configure' script,     */
-  /*   options set by those programs have precendence, overwriting the     */
-  /*   value here with the configured one.                                 */
-  /*                                                                       */
-/* #define FT_CONFIG_OPTION_USE_HARFBUZZ */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* 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, but will not synthesize a missing Unicode charmap.  */
-  /*                                                                       */
-  /*   - The Type 1 driver will not be able to synthesize a Unicode        */
-  /*     charmap out of the glyphs found in the fonts.                     */
-  /*                                                                       */
-  /*   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.                                                */
-  /*                                                                       */
-#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 */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* 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                                         */
-  /*     af_glyph_hints_get_num_segments                                   */
-  /*     af_glyph_hints_get_segment_offset                                 */
-  /*                                                                       */
-  /*   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                                                      */
-  /*                                                                       */
-  /*   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.  [Note that standard compilers like gcc or    */
-  /*   clang handle PIC generation automatically; you don't have to set    */
-  /*   FT_CONFIG_OPTION_PIC, which is only necessary for very special      */
-  /*   compilers.]                                                         */
-  /*                                                                       */
-  /*   Note that FT_CONFIG_OPTION_PIC support is not available for all     */
-  /*   modules (see `modules.cfg' for a complete list).  For building with */
-  /*   FT_CONFIG_OPTION_PIC support, do the following.                     */
-  /*                                                                       */
-  /*     0. Clone the repository.                                          */
-  /*     1. Define FT_CONFIG_OPTION_PIC.                                   */
-  /*     2. Remove all subdirectories in `src' that don't have             */
-  /*        FT_CONFIG_OPTION_PIC support.                                  */
-  /*     3. Comment out the corresponding modules in `modules.cfg'.        */
-  /*     4. Compile.                                                       */
-  /*                                                                       */
-/* #define FT_CONFIG_OPTION_PIC */
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /****                                                                 ****/
-  /****        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        */
-  /* `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
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile       */
-  /* subpixel hinting support into the TrueType driver.  This modifies the */
-  /* TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is   */
-  /* requested.                                                            */
-  /*                                                                       */
-  /* In particular, it modifies the bytecode interpreter to interpret (or  */
-  /* not) instructions in a certain way so that all TrueType fonts look    */
-  /* like they do in a Windows ClearType (DirectWrite) environment.  See   */
-  /* [1] for a technical overview on what this means.  See `ttinterp.h'    */
-  /* for more details on the LEAN option.                                  */
-  /*                                                                       */
-  /* There are three possible values.                                      */
-  /*                                                                       */
-  /* Value 1:                                                              */
-  /*    This value is associated with the `Infinality' moniker,            */
-  /*    contributed by an individual nicknamed Infinality with the goal of */
-  /*    making TrueType fonts render better than on Windows.  A high       */
-  /*    amount of configurability and flexibility, down to rules for       */
-  /*    single glyphs in fonts, but also very slow.  Its experimental and  */
-  /*    slow nature and the original developer losing interest meant that  */
-  /*    this option was never enabled in default builds.                   */
-  /*                                                                       */
-  /*    The corresponding interpreter version is v38.                      */
-  /*                                                                       */
-  /* Value 2:                                                              */
-  /*    The new default mode for the TrueType driver.  The Infinality code */
-  /*    base was stripped to the bare minimum and all configurability      */
-  /*    removed in the name of speed and simplicity.  The configurability  */
-  /*    was mainly aimed at legacy fonts like Arial, Times New Roman, or   */
-  /*    Courier.  Legacy fonts are fonts that modify vertical stems to     */
-  /*    achieve clean black-and-white bitmaps.  The new mode focuses on    */
-  /*    applying a minimal set of rules to all fonts indiscriminately so   */
-  /*    that modern and web fonts render well while legacy fonts render    */
-  /*    okay.                                                              */
-  /*                                                                       */
-  /*    The corresponding interpreter version is v40.                      */
-  /*                                                                       */
-  /* Value 3:                                                              */
-  /*    Compile both, making both v38 and v40 available (the latter is the */
-  /*    default).                                                          */
-  /*                                                                       */
-  /* By undefining these, you get rendering behavior like on Windows       */
-  /* without ClearType, i.e., Windows XP without ClearType enabled and     */
-  /* Win9x (interpreter version v35).  Or not, depending on how much       */
-  /* hinting blood and testing tears the font designer put into a given    */
-  /* font.  If you define one or both subpixel hinting options, you can    */
-  /* switch between between v35 and the ones you define (using             */
-  /* `FT_Property_Set').                                                   */
-  /*                                                                       */
-  /* This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be      */
-  /* defined.                                                              */
-  /*                                                                       */
-  /* [1] https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
-  /*                                                                       */
-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING  1         */
-#define TT_CONFIG_OPTION_SUBPIXEL_HINTING  2
-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING  ( 1 | 2 ) */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* 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.                                             */
-  /*                                                                       */
-  /*   https://www.microsoft.com/typography/otspec/glyf.htm                */
-  /*   https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */
-  /*                                                                       */
-#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* 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
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum     */
-  /* number of bytecode instructions executed for a single run of the      */
-  /* bytecode interpreter, needed to prevent infinite loops.  You don't    */
-  /* want to change this except for very special situations (e.g., making  */
-  /* a library fuzzer spend less time to handle broken fonts).             */
-  /*                                                                       */
-  /* It is not expected that this value is ever modified by a configuring  */
-  /* script; instead, it gets surrounded with #ifndef ... #endif so that   */
-  /* the value can be set as a preprocessor option on the compiler's       */
-  /* command line.                                                         */
-  /*                                                                       */
-#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
-#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES  1000000L
-#endif
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /****                                                                 ****/
-  /****      T Y P E 1   D R I V E R    C O N F I G U R A T I O N       ****/
-  /****                                                                 ****/
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* 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.                                                             */
-  /*                                                                       */
-#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
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* T1_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe Type 1     */
-  /* engine gets compiled into FreeType.  If defined, it is possible to    */
-  /* switch between the two engines using the `hinting-engine' property of */
-  /* the type1 driver module.                                              */
-  /*                                                                       */
-/* #define T1_CONFIG_OPTION_OLD_ENGINE */
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /****                                                                 ****/
-  /****         C F F   D R I V E R    C O N F I G U R A T I O N        ****/
-  /****                                                                 ****/
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is      */
-  /* possible to set up the default values of the four control points that */
-  /* define the stem darkening behaviour of the (new) CFF engine.  For     */
-  /* more details please read the documentation of the                     */
-  /* `darkening-parameters' property (file `ftdriver.h'), which allows the */
-  /* control at run-time.                                                  */
-  /*                                                                       */
-  /* Do *not* undefine these macros!                                       */
-  /*                                                                       */
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1   500
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1   400
-
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2  1000
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2   275
-
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3  1667
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3   275
-
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4  2333
-#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4     0
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* 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 */
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /****                                                                 ****/
-  /****         P C F   D R I V E R    C O N F I G U R A T I O N        ****/
-  /****                                                                 ****/
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* There are many PCF fonts just called `Fixed' which look completely    */
-  /* different, and which have nothing to do with each other.  When        */
-  /* selecting `Fixed' in KDE or Gnome one gets results that appear rather */
-  /* random, the style changes often if one changes the size and one       */
-  /* cannot select some fonts at all.  This option makes the PCF module    */
-  /* prepend the foundry name (plus a space) to the family name.           */
-  /*                                                                       */
-  /* We also check whether we have `wide' characters; all put together, we */
-  /* get family names like `Sony Fixed' or `Misc Fixed Wide'.              */
-  /*                                                                       */
-  /* If this option is activated, it can be controlled with the            */
-  /* `no-long-family-names' property of the pcf driver module.             */
-  /*                                                                       */
-/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /****                                                                 ****/
-  /****    A U T O F I T   M O D U L E    C O N F I G U R A T I O N     ****/
-  /****                                                                 ****/
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Compile autofit module with CJK (Chinese, Japanese, Korean) script    */
-  /* support.                                                              */
-  /*                                                                       */
-#define AF_CONFIG_OPTION_CJK
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Compile autofit module with fallback Indic script support, covering   */
-  /* some scripts that the `latin' submodule of the autofit module doesn't */
-  /* (yet) handle.                                                         */
-  /*                                                                       */
-#define AF_CONFIG_OPTION_INDIC
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* 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 active only if the rendering mode is      */
-  /* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the      */
-  /* `warping' property of the auto-hinter (see file `ftdriver.h' for more */
-  /* information; by default it is switched off).                          */
-  /*                                                                       */
-#define AF_CONFIG_OPTION_USE_WARPER
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Use TrueType-like size metrics for `light' auto-hinting.              */
-  /*                                                                       */
-  /* It is strongly recommended to avoid this option, which exists only to */
-  /* help some legacy applications retain its appearance and behaviour     */
-  /* with respect to auto-hinted TrueType fonts.                           */
-  /*                                                                       */
-  /* The very reason this option exists at all are GNU/Linux distributions */
-  /* like Fedora that did not un-patch the following change (which was     */
-  /* present in FreeType between versions 2.4.6 and 2.7.1, inclusive).     */
-  /*                                                                       */
-  /*   2011-07-16  Steven Chu  <[email protected]>                    */
-  /*                                                                       */
-  /*     [truetype] Fix metrics on size request for scalable fonts.        */
-  /*                                                                       */
-  /* This problematic commit is now reverted (more or less).               */
-  /*                                                                       */
-/* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */
-
-  /* */
-
-
-  /*
-   * This macro is obsolete.  Support has been removed in FreeType
-   * version 2.5.
-   */
-/* #define FT_CONFIG_OPTION_OLD_INTERNALS */
-
-
-  /*
-   * This macro is defined if native TrueType hinting is requested by the
-   * definitions above.
-   */
-#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
-#define  TT_USE_BYTECODE_INTERPRETER
-
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
-#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 1
-#define  TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
-#endif
-
-#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 2
-#define  TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
-#endif
-#endif
-#endif
-
-
-  /*
-   * Check CFF darkening parameters.  The checks are the same as in function
-   * `cff_property_set' in file `cffdrivr.c'.
-   */
-#if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0   || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0   || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0   || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0   || \
-                                                      \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0   || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0   || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0   || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0   || \
-                                                      \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 >        \
-      CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2     || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 >        \
-      CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3     || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 >        \
-      CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4     || \
-                                                      \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \
-    CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500
-#error "Invalid CFF darkening parameters!"
-#endif
-
-FT_END_HEADER
-
-
-#endif /* FTOPTION_H_ */
-
-
-/* END */

+ 0 - 175
freetype/include/freetype/config/ftstdlib.h

@@ -1,175 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftstdlib.h                                                             */
-/*                                                                         */
-/*    ANSI-specific library and header configuration file (specification   */
-/*    only).                                                               */
-/*                                                                         */
-/*  Copyright 2002-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* This file is used to group all #includes to the ANSI C library that   */
-  /* FreeType normally requires.  It also defines macros to rename the     */
-  /* standard functions within the FreeType source code.                   */
-  /*                                                                       */
-  /* Load a file which defines FTSTDLIB_H_ before this one to override it. */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-#ifndef FTSTDLIB_H_
-#define FTSTDLIB_H_
-
-
-#include <stddef.h>
-
-#define ft_ptrdiff_t  ptrdiff_t
-
-
-  /**********************************************************************/
-  /*                                                                    */
-  /*                           integer limits                           */
-  /*                                                                    */
-  /* UINT_MAX and ULONG_MAX are used to automatically compute the size  */
-  /* of `int' and `long' in bytes at compile-time.  So far, this works  */
-  /* for all platforms the library has been tested on.                  */
-  /*                                                                    */
-  /* Note that on the extremely rare platforms that do not provide      */
-  /* integer types that are _exactly_ 16 and 32 bits wide (e.g. some    */
-  /* old Crays where `int' is 36 bits), we do not make any guarantee    */
-  /* about the correct behaviour of FT2 with all fonts.                 */
-  /*                                                                    */
-  /* In these case, `ftconfig.h' will refuse to compile anyway with a   */
-  /* message like `couldn't find 32-bit type' or something similar.     */
-  /*                                                                    */
-  /**********************************************************************/
-
-
-#include <limits.h>
-
-#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_LONG_MIN    LONG_MIN
-#define FT_LONG_MAX    LONG_MAX
-#define FT_ULONG_MAX   ULONG_MAX
-
-
-  /**********************************************************************/
-  /*                                                                    */
-  /*                 character and string processing                    */
-  /*                                                                    */
-  /**********************************************************************/
-
-
-#include <string.h>
-
-#define ft_memchr   memchr
-#define ft_memcmp   memcmp
-#define ft_memcpy   memcpy
-#define ft_memmove  memmove
-#define ft_memset   memset
-#define ft_strcat   strcat
-#define ft_strcmp   strcmp
-#define ft_strcpy   strcpy
-#define ft_strlen   strlen
-#define ft_strncmp  strncmp
-#define ft_strncpy  strncpy
-#define ft_strrchr  strrchr
-#define ft_strstr   strstr
-
-
-  /**********************************************************************/
-  /*                                                                    */
-  /*                           file handling                            */
-  /*                                                                    */
-  /**********************************************************************/
-
-
-#include <stdio.h>
-
-#define FT_FILE     FILE
-#define ft_fclose   fclose
-#define ft_fopen    fopen
-#define ft_fread    fread
-#define ft_fseek    fseek
-#define ft_ftell    ftell
-#define ft_sprintf  sprintf
-
-
-  /**********************************************************************/
-  /*                                                                    */
-  /*                             sorting                                */
-  /*                                                                    */
-  /**********************************************************************/
-
-
-#include <stdlib.h>
-
-#define ft_qsort  qsort
-
-
-  /**********************************************************************/
-  /*                                                                    */
-  /*                        memory allocation                           */
-  /*                                                                    */
-  /**********************************************************************/
-
-
-#define ft_scalloc   calloc
-#define ft_sfree     free
-#define ft_smalloc   malloc
-#define ft_srealloc  realloc
-
-
-  /**********************************************************************/
-  /*                                                                    */
-  /*                          miscellaneous                             */
-  /*                                                                    */
-  /**********************************************************************/
-
-
-#define ft_strtol  strtol
-#define ft_getenv  getenv
-
-
-  /**********************************************************************/
-  /*                                                                    */
-  /*                         execution control                          */
-  /*                                                                    */
-  /**********************************************************************/
-
-
-#include <setjmp.h>
-
-#define ft_jmp_buf     jmp_buf  /* note: this cannot be a typedef since */
-                                /*       jmp_buf is defined as a macro  */
-                                /*       on certain platforms           */
-
-#define ft_longjmp     longjmp
-#define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */
-
-
-  /* the following is only used for debugging purposes, i.e., if */
-  /* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined    */
-
-#include <stdarg.h>
-
-
-#endif /* FTSTDLIB_H_ */
-
-
-/* END */

+ 0 - 4657
freetype/include/freetype/freetype.h

@@ -1,4657 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  freetype.h                                                             */
-/*                                                                         */
-/*    FreeType high-level API and common types (specification only).       */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#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."
-#error "Example:"
-#error "  #include <ft2build.h>"
-#error "  #include FT_FREETYPE_H"
-#endif
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_TYPES_H
-#include FT_ERRORS_H
-
-
-FT_BEGIN_HEADER
-
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    header_inclusion                                                   */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    FreeType's header inclusion scheme                                 */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    How client applications should include FreeType header files.      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    To be as flexible as possible (and for historical reasons),        */
-  /*    FreeType uses a very special inclusion scheme to load header       */
-  /*    files, for example                                                 */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      #include <ft2build.h>                                            */
-  /*                                                                       */
-  /*      #include FT_FREETYPE_H                                           */
-  /*      #include FT_OUTLINE_H                                            */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    A compiler and its preprocessor only needs an include path to find */
-  /*    the file `ft2build.h'; the exact locations and names of the other  */
-  /*    FreeType header files are hidden by preprocessor macro names,      */
-  /*    loaded by `ft2build.h'.  The API documentation always gives the    */
-  /*    header macro name needed for a particular function.                */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    user_allocation                                                    */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    User allocation                                                    */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    How client applications should allocate FreeType data structures.  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    FreeType assumes that structures allocated by the user and passed  */
-  /*    as arguments are zeroed out except for the actual data.  In other  */
-  /*    words, it is recommended to use `calloc' (or variants of it)       */
-  /*    instead of `malloc' for allocation.                                */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*                                                                       */
-  /*                        B A S I C   T Y P E S                          */
-  /*                                                                       */
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    base_interface                                                     */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Base Interface                                                     */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    The FreeType~2 base font interface.                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section describes the most important public high-level API    */
-  /*    functions of FreeType~2.                                           */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    FT_Library                                                         */
-  /*    FT_Face                                                            */
-  /*    FT_Size                                                            */
-  /*    FT_GlyphSlot                                                       */
-  /*    FT_CharMap                                                         */
-  /*    FT_Encoding                                                        */
-  /*    FT_ENC_TAG                                                         */
-  /*                                                                       */
-  /*    FT_FaceRec                                                         */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_SCALABLE                                              */
-  /*    FT_FACE_FLAG_FIXED_SIZES                                           */
-  /*    FT_FACE_FLAG_FIXED_WIDTH                                           */
-  /*    FT_FACE_FLAG_HORIZONTAL                                            */
-  /*    FT_FACE_FLAG_VERTICAL                                              */
-  /*    FT_FACE_FLAG_COLOR                                                 */
-  /*    FT_FACE_FLAG_SFNT                                                  */
-  /*    FT_FACE_FLAG_CID_KEYED                                             */
-  /*    FT_FACE_FLAG_TRICKY                                                */
-  /*    FT_FACE_FLAG_KERNING                                               */
-  /*    FT_FACE_FLAG_MULTIPLE_MASTERS                                      */
-  /*    FT_FACE_FLAG_VARIATION                                             */
-  /*    FT_FACE_FLAG_GLYPH_NAMES                                           */
-  /*    FT_FACE_FLAG_EXTERNAL_STREAM                                       */
-  /*    FT_FACE_FLAG_HINTER                                                */
-  /*                                                                       */
-  /*    FT_HAS_HORIZONTAL                                                  */
-  /*    FT_HAS_VERTICAL                                                    */
-  /*    FT_HAS_KERNING                                                     */
-  /*    FT_HAS_FIXED_SIZES                                                 */
-  /*    FT_HAS_GLYPH_NAMES                                                 */
-  /*    FT_HAS_COLOR                                                       */
-  /*    FT_HAS_MULTIPLE_MASTERS                                            */
-  /*                                                                       */
-  /*    FT_IS_SFNT                                                         */
-  /*    FT_IS_SCALABLE                                                     */
-  /*    FT_IS_FIXED_WIDTH                                                  */
-  /*    FT_IS_CID_KEYED                                                    */
-  /*    FT_IS_TRICKY                                                       */
-  /*    FT_IS_NAMED_INSTANCE                                               */
-  /*    FT_IS_VARIATION                                                    */
-  /*                                                                       */
-  /*    FT_STYLE_FLAG_BOLD                                                 */
-  /*    FT_STYLE_FLAG_ITALIC                                               */
-  /*                                                                       */
-  /*    FT_SizeRec                                                         */
-  /*    FT_Size_Metrics                                                    */
-  /*                                                                       */
-  /*    FT_GlyphSlotRec                                                    */
-  /*    FT_Glyph_Metrics                                                   */
-  /*    FT_SubGlyph                                                        */
-  /*                                                                       */
-  /*    FT_Bitmap_Size                                                     */
-  /*                                                                       */
-  /*    FT_Init_FreeType                                                   */
-  /*    FT_Done_FreeType                                                   */
-  /*                                                                       */
-  /*    FT_New_Face                                                        */
-  /*    FT_Done_Face                                                       */
-  /*    FT_Reference_Face                                                  */
-  /*    FT_New_Memory_Face                                                 */
-  /*    FT_Face_Properties                                                 */
-  /*    FT_Open_Face                                                       */
-  /*    FT_Open_Args                                                       */
-  /*    FT_Parameter                                                       */
-  /*    FT_Attach_File                                                     */
-  /*    FT_Attach_Stream                                                   */
-  /*                                                                       */
-  /*    FT_Set_Char_Size                                                   */
-  /*    FT_Set_Pixel_Sizes                                                 */
-  /*    FT_Request_Size                                                    */
-  /*    FT_Select_Size                                                     */
-  /*    FT_Size_Request_Type                                               */
-  /*    FT_Size_RequestRec                                                 */
-  /*    FT_Size_Request                                                    */
-  /*    FT_Set_Transform                                                   */
-  /*    FT_Load_Glyph                                                      */
-  /*    FT_Get_Char_Index                                                  */
-  /*    FT_Get_First_Char                                                  */
-  /*    FT_Get_Next_Char                                                   */
-  /*    FT_Get_Name_Index                                                  */
-  /*    FT_Load_Char                                                       */
-  /*                                                                       */
-  /*    FT_OPEN_MEMORY                                                     */
-  /*    FT_OPEN_STREAM                                                     */
-  /*    FT_OPEN_PATHNAME                                                   */
-  /*    FT_OPEN_DRIVER                                                     */
-  /*    FT_OPEN_PARAMS                                                     */
-  /*                                                                       */
-  /*    FT_LOAD_DEFAULT                                                    */
-  /*    FT_LOAD_RENDER                                                     */
-  /*    FT_LOAD_MONOCHROME                                                 */
-  /*    FT_LOAD_LINEAR_DESIGN                                              */
-  /*    FT_LOAD_NO_SCALE                                                   */
-  /*    FT_LOAD_NO_HINTING                                                 */
-  /*    FT_LOAD_NO_BITMAP                                                  */
-  /*    FT_LOAD_NO_AUTOHINT                                                */
-  /*    FT_LOAD_COLOR                                                      */
-  /*                                                                       */
-  /*    FT_LOAD_VERTICAL_LAYOUT                                            */
-  /*    FT_LOAD_IGNORE_TRANSFORM                                           */
-  /*    FT_LOAD_FORCE_AUTOHINT                                             */
-  /*    FT_LOAD_NO_RECURSE                                                 */
-  /*    FT_LOAD_PEDANTIC                                                   */
-  /*                                                                       */
-  /*    FT_LOAD_TARGET_NORMAL                                              */
-  /*    FT_LOAD_TARGET_LIGHT                                               */
-  /*    FT_LOAD_TARGET_MONO                                                */
-  /*    FT_LOAD_TARGET_LCD                                                 */
-  /*    FT_LOAD_TARGET_LCD_V                                               */
-  /*                                                                       */
-  /*    FT_LOAD_TARGET_MODE                                                */
-  /*                                                                       */
-  /*    FT_Render_Glyph                                                    */
-  /*    FT_Render_Mode                                                     */
-  /*    FT_Get_Kerning                                                     */
-  /*    FT_Kerning_Mode                                                    */
-  /*    FT_Get_Track_Kerning                                               */
-  /*    FT_Get_Glyph_Name                                                  */
-  /*    FT_Get_Postscript_Name                                             */
-  /*                                                                       */
-  /*    FT_CharMapRec                                                      */
-  /*    FT_Select_Charmap                                                  */
-  /*    FT_Set_Charmap                                                     */
-  /*    FT_Get_Charmap_Index                                               */
-  /*                                                                       */
-  /*    FT_Get_FSType_Flags                                                */
-  /*    FT_Get_SubGlyph_Info                                               */
-  /*                                                                       */
-  /*    FT_Face_Internal                                                   */
-  /*    FT_Size_Internal                                                   */
-  /*    FT_Slot_Internal                                                   */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_XXX                                                   */
-  /*    FT_STYLE_FLAG_XXX                                                  */
-  /*    FT_OPEN_XXX                                                        */
-  /*    FT_LOAD_XXX                                                        */
-  /*    FT_LOAD_TARGET_XXX                                                 */
-  /*    FT_SUBGLYPH_FLAG_XXX                                               */
-  /*    FT_FSTYPE_XXX                                                      */
-  /*                                                                       */
-  /*    FT_HAS_FAST_GLYPHS                                                 */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Glyph_Metrics                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model the metrics of a single glyph.  The values    */
-  /*    are expressed in 26.6 fractional pixel format; if the flag         */
-  /*    @FT_LOAD_NO_SCALE has been used while loading the glyph, values    */
-  /*    are expressed in font units instead.                               */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    width ::                                                           */
-  /*      The glyph's width.                                               */
-  /*                                                                       */
-  /*    height ::                                                          */
-  /*      The glyph's height.                                              */
-  /*                                                                       */
-  /*    horiBearingX ::                                                    */
-  /*      Left side bearing for horizontal layout.                         */
-  /*                                                                       */
-  /*    horiBearingY ::                                                    */
-  /*      Top side bearing for horizontal layout.                          */
-  /*                                                                       */
-  /*    horiAdvance ::                                                     */
-  /*      Advance width for horizontal layout.                             */
-  /*                                                                       */
-  /*    vertBearingX ::                                                    */
-  /*      Left side bearing for vertical layout.                           */
-  /*                                                                       */
-  /*    vertBearingY ::                                                    */
-  /*      Top side bearing for vertical layout.  Larger positive values    */
-  /*      mean further below the vertical glyph origin.                    */
-  /*                                                                       */
-  /*    vertAdvance ::                                                     */
-  /*      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.                  */
-  /*                                                                       */
-  /*    FreeType doesn't use the `VORG' table data for CFF fonts because   */
-  /*    it doesn't have an interface to quickly retrieve the glyph height. */
-  /*    The y~coordinate of the vertical origin can be simply computed as  */
-  /*    `vertBearingY + height' after loading a glyph.                     */
-  /*                                                                       */
-  typedef struct  FT_Glyph_Metrics_
-  {
-    FT_Pos  width;
-    FT_Pos  height;
-
-    FT_Pos  horiBearingX;
-    FT_Pos  horiBearingY;
-    FT_Pos  horiAdvance;
-
-    FT_Pos  vertBearingX;
-    FT_Pos  vertBearingY;
-    FT_Pos  vertAdvance;
-
-  } FT_Glyph_Metrics;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Bitmap_Size                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This structure models the metrics of a bitmap strike (i.e., a set  */
-  /*    of glyphs for a given point size and resolution) in a bitmap font. */
-  /*    It is used for the `available_sizes' field of @FT_Face.            */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    height :: The vertical distance, in pixels, between two            */
-  /*              consecutive baselines.  It is always positive.           */
-  /*                                                                       */
-  /*    width  :: The average width, in pixels, of all glyphs in the       */
-  /*              strike.                                                  */
-  /*                                                                       */
-  /*    size   :: The nominal size of the strike in 26.6 fractional        */
-  /*              points.  This field is not very useful.                  */
-  /*                                                                       */
-  /*    x_ppem :: The horizontal ppem (nominal width) in 26.6 fractional   */
-  /*              pixels.                                                  */
-  /*                                                                       */
-  /*    y_ppem :: The vertical ppem (nominal height) in 26.6 fractional    */
-  /*              pixels.                                                  */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Windows FNT:                                                       */
-  /*      The nominal size given in a FNT font is not reliable.  If the    */
-  /*      driver finds it incorrect, it sets `size' to some calculated     */
-  /*      values, and `x_ppem' and `y_ppem' to the pixel width and height  */
-  /*      given in the font, respectively.                                 */
-  /*                                                                       */
-  /*    TrueType embedded bitmaps:                                         */
-  /*      `size', `width', and `height' values are not contained in the    */
-  /*      bitmap strike itself.  They are computed from the global font    */
-  /*      parameters.                                                      */
-  /*                                                                       */
-  typedef struct  FT_Bitmap_Size_
-  {
-    FT_Short  height;
-    FT_Short  width;
-
-    FT_Pos    size;
-
-    FT_Pos    x_ppem;
-    FT_Pos    y_ppem;
-
-  } FT_Bitmap_Size;
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*                                                                       */
-  /*                     O B J E C T   C L A S S E S                       */
-  /*                                                                       */
-  /*************************************************************************/
-  /*************************************************************************/
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Library                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a FreeType library instance.  Each `library' is        */
-  /*    completely independent from the others; it is the `root' of a set  */
-  /*    of objects like fonts, faces, sizes, etc.                          */
-  /*                                                                       */
-  /*    It also embeds a memory manager (see @FT_Memory), as well as a     */
-  /*    scan-line converter object (see @FT_Raster).                       */
-  /*                                                                       */
-  /*    In multi-threaded applications it is easiest to use one            */
-  /*    `FT_Library' object per thread.  In case this is too cumbersome,   */
-  /*    a single `FT_Library' object across threads is possible also       */
-  /*    (since FreeType version 2.5.6), as long as a mutex lock is used    */
-  /*    around @FT_New_Face and @FT_Done_Face.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Library objects are normally created by @FT_Init_FreeType, and     */
-  /*    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;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    module_management                                                  */
-  /*                                                                       */
-  /*************************************************************************/
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Module                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a given FreeType module object.  A module can be a     */
-  /*    font driver, a renderer, or anything else that provides services   */
-  /*    to the former.                                                     */
-  /*                                                                       */
-  typedef struct FT_ModuleRec_*  FT_Module;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Driver                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a given FreeType font driver object.  A font driver    */
-  /*    is a module capable of creating faces from font files.             */
-  /*                                                                       */
-  typedef struct FT_DriverRec_*  FT_Driver;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Renderer                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a given FreeType renderer.  A renderer is a module in  */
-  /*    charge of converting a glyph's outline image to a bitmap.  It      */
-  /*    supports a single glyph image format, and one or more target       */
-  /*    surface depths.                                                    */
-  /*                                                                       */
-  typedef struct FT_RendererRec_*  FT_Renderer;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    base_interface                                                     */
-  /*                                                                       */
-  /*************************************************************************/
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Face                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a typographic face object.  A face object models a     */
-  /*    given typeface, in a given style.                                  */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    A face object also owns a single @FT_GlyphSlot object, as well     */
-  /*    as one or more @FT_Size objects.                                   */
-  /*                                                                       */
-  /*    Use @FT_New_Face or @FT_Open_Face to create a new face object from */
-  /*    a given filepath or a custom input stream.                         */
-  /*                                                                       */
-  /*    Use @FT_Done_Face to destroy it (along with its slot and sizes).   */
-  /*                                                                       */
-  /*    An `FT_Face' object can only be safely used from one thread at a   */
-  /*    time.  Similarly, creation and destruction of `FT_Face' with the   */
-  /*    same @FT_Library object can only be done from one thread at a      */
-  /*    time.  On the other hand, functions like @FT_Load_Glyph and its    */
-  /*    siblings are thread-safe and do not need the lock to be held as    */
-  /*    long as the same `FT_Face' object is not used from multiple        */
-  /*    threads at the same time.                                          */
-  /*                                                                       */
-  /* <Also>                                                                */
-  /*    See @FT_FaceRec for the publicly accessible fields of a given face */
-  /*    object.                                                            */
-  /*                                                                       */
-  typedef struct FT_FaceRec_*  FT_Face;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Size                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to an object that models a face scaled to a given         */
-  /*    character size.                                                    */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    An @FT_Face has one _active_ @FT_Size object that is used by       */
-  /*    functions like @FT_Load_Glyph to determine the scaling             */
-  /*    transformation that in turn is used to load and hint glyphs and    */
-  /*    metrics.                                                           */
-  /*                                                                       */
-  /*    You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes,                */
-  /*    @FT_Request_Size or even @FT_Select_Size to change the content     */
-  /*    (i.e., the scaling values) of the active @FT_Size.                 */
-  /*                                                                       */
-  /*    You can use @FT_New_Size to create additional size objects for a   */
-  /*    given @FT_Face, but they won't be used by other functions until    */
-  /*    you activate it through @FT_Activate_Size.  Only one size can be   */
-  /*    activated at any given time per face.                              */
-  /*                                                                       */
-  /* <Also>                                                                */
-  /*    See @FT_SizeRec for the publicly accessible fields of a given size */
-  /*    object.                                                            */
-  /*                                                                       */
-  typedef struct FT_SizeRec_*  FT_Size;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_GlyphSlot                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a given `glyph slot'.  A slot is a container that can  */
-  /*    hold any of the glyphs contained in its parent face.               */
-  /*                                                                       */
-  /*    In other words, each time you call @FT_Load_Glyph or               */
-  /*    @FT_Load_Char, the slot's content is erased by the new glyph data, */
-  /*    i.e., the glyph's metrics, its image (bitmap or outline), and      */
-  /*    other control information.                                         */
-  /*                                                                       */
-  /* <Also>                                                                */
-  /*    See @FT_GlyphSlotRec for the publicly accessible glyph fields.     */
-  /*                                                                       */
-  typedef struct FT_GlyphSlotRec_*  FT_GlyphSlot;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_CharMap                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a character map (usually abbreviated to `charmap').  A */
-  /*    charmap is used to translate character codes in a given encoding   */
-  /*    into glyph indexes for its parent's face.  Some font formats may   */
-  /*    provide several charmaps per font.                                 */
-  /*                                                                       */
-  /*    Each face object owns zero or more charmaps, but only one of them  */
-  /*    can be `active', providing the data used by @FT_Get_Char_Index or  */
-  /*    @FT_Load_Char.                                                     */
-  /*                                                                       */
-  /*    The list of available charmaps in a face is available through the  */
-  /*    `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec.   */
-  /*                                                                       */
-  /*    The currently active charmap is available as `face->charmap'.      */
-  /*    You should call @FT_Set_Charmap to change it.                      */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    When a new face is created (either through @FT_New_Face or         */
-  /*    @FT_Open_Face), the library looks for a Unicode charmap within     */
-  /*    the list and automatically activates it.  If there is no Unicode   */
-  /*    charmap, FreeType doesn't set an `active' charmap.                 */
-  /*                                                                       */
-  /* <Also>                                                                */
-  /*    See @FT_CharMapRec for the publicly accessible fields of a given   */
-  /*    character map.                                                     */
-  /*                                                                       */
-  typedef struct FT_CharMapRec_*  FT_CharMap;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Macro>                                                               */
-  /*    FT_ENC_TAG                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This macro converts four-letter tags into an unsigned long.  It is */
-  /*    used to define `encoding' identifiers (see @FT_Encoding).          */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Since many 16-bit compilers don't like 32-bit enumerations, you    */
-  /*    should redefine this macro in case of problems to something like   */
-  /*    this:                                                              */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      #define FT_ENC_TAG( value, a, b, c, d )  value                   */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    to get a simple enumeration without assigning special numbers.     */
-  /*                                                                       */
-
-#ifndef FT_ENC_TAG
-#define FT_ENC_TAG( value, a, b, c, d )         \
-          value = ( ( (FT_UInt32)(a) << 24 ) |  \
-                    ( (FT_UInt32)(b) << 16 ) |  \
-                    ( (FT_UInt32)(c) <<  8 ) |  \
-                      (FT_UInt32)(d)         )
-
-#endif /* FT_ENC_TAG */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_Encoding                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An enumeration to specify character sets supported by charmaps.    */
-  /*    Used in the @FT_Select_Charmap API function.                       */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Despite the name, this enumeration lists specific character        */
-  /*    repertories (i.e., charsets), and not text encoding methods (e.g., */
-  /*    UTF-8, UTF-16, etc.).                                              */
-  /*                                                                       */
-  /*    Other encodings might be defined in the future.                    */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_ENCODING_NONE ::                                                */
-  /*      The encoding value~0 is reserved.                                */
-  /*                                                                       */
-  /*    FT_ENCODING_UNICODE ::                                             */
-  /*      The Unicode character set.  This value covers all versions of    */
-  /*      the Unicode repertoire, including ASCII and Latin-1.  Most fonts */
-  /*      include a Unicode charmap, but not all of them.                  */
-  /*                                                                       */
-  /*      For example, if you want to access Unicode value U+1F028 (and    */
-  /*      the font contains it), use value 0x1F028 as the input value for  */
-  /*      @FT_Get_Char_Index.                                              */
-  /*                                                                       */
-  /*    FT_ENCODING_MS_SYMBOL ::                                           */
-  /*      Microsoft Symbol encoding, used to encode mathematical symbols   */
-  /*      and wingdings.  For more information, see                        */
-  /*      `https://www.microsoft.com/typography/otspec/recom.htm',         */
-  /*      `http://www.kostis.net/charsets/symbol.htm', and                 */
-  /*      `http://www.kostis.net/charsets/wingding.htm'.                   */
-  /*                                                                       */
-  /*      This encoding uses character codes from the PUA (Private Unicode */
-  /*      Area) in the range U+F020-U+F0FF.                                */
-  /*                                                                       */
-  /*    FT_ENCODING_SJIS ::                                                */
-  /*      Shift JIS encoding for Japanese.  More info at                   */
-  /*      `https://en.wikipedia.org/wiki/Shift_JIS'.  See note on          */
-  /*      multi-byte encodings below.                                      */
-  /*                                                                       */
-  /*    FT_ENCODING_PRC ::                                                 */
-  /*      Corresponds to encoding systems mainly for Simplified Chinese as */
-  /*      used in People's Republic of China (PRC).  The encoding layout   */
-  /*      is based on GB~2312 and its supersets GBK and GB~18030.          */
-  /*                                                                       */
-  /*    FT_ENCODING_BIG5 ::                                                */
-  /*      Corresponds to an encoding system for Traditional Chinese as     */
-  /*      used in Taiwan and Hong Kong.                                    */
-  /*                                                                       */
-  /*    FT_ENCODING_WANSUNG ::                                             */
-  /*      Corresponds to the Korean encoding system known as Extended      */
-  /*      Wansung (MS Windows code page 949).                              */
-  /*      For more information see                                         */
-  /*      `https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt'. */
-  /*                                                                       */
-  /*    FT_ENCODING_JOHAB ::                                               */
-  /*      The Korean standard character set (KS~C 5601-1992), which        */
-  /*      corresponds to MS Windows code page 1361.  This character set    */
-  /*      includes all possible Hangul character combinations.             */
-  /*                                                                       */
-  /*    FT_ENCODING_ADOBE_LATIN_1 ::                                       */
-  /*      Corresponds to a Latin-1 encoding as defined in a Type~1         */
-  /*      PostScript font.  It is limited to 256 character codes.          */
-  /*                                                                       */
-  /*    FT_ENCODING_ADOBE_STANDARD ::                                      */
-  /*      Adobe Standard encoding, as found in Type~1, CFF, and            */
-  /*      OpenType/CFF fonts.  It is limited to 256 character codes.       */
-  /*                                                                       */
-  /*    FT_ENCODING_ADOBE_EXPERT ::                                        */
-  /*      Adobe Expert encoding, as found in Type~1, CFF, and OpenType/CFF */
-  /*      fonts.  It is limited to 256 character codes.                    */
-  /*                                                                       */
-  /*    FT_ENCODING_ADOBE_CUSTOM ::                                        */
-  /*      Corresponds to a custom encoding, as found in Type~1, CFF, and   */
-  /*      OpenType/CFF fonts.  It is limited to 256 character codes.       */
-  /*                                                                       */
-  /*    FT_ENCODING_APPLE_ROMAN ::                                         */
-  /*      Apple roman encoding.  Many TrueType and OpenType fonts contain  */
-  /*      a charmap for this 8-bit encoding, since older versions of Mac   */
-  /*      OS are able to use it.                                           */
-  /*                                                                       */
-  /*    FT_ENCODING_OLD_LATIN_2 ::                                         */
-  /*      This value is deprecated and was neither used nor reported by    */
-  /*      FreeType.  Don't use or test for it.                             */
-  /*                                                                       */
-  /*    FT_ENCODING_MS_SJIS ::                                             */
-  /*      Same as FT_ENCODING_SJIS.  Deprecated.                           */
-  /*                                                                       */
-  /*    FT_ENCODING_MS_GB2312 ::                                           */
-  /*      Same as FT_ENCODING_PRC.  Deprecated.                            */
-  /*                                                                       */
-  /*    FT_ENCODING_MS_BIG5 ::                                             */
-  /*      Same as FT_ENCODING_BIG5.  Deprecated.                           */
-  /*                                                                       */
-  /*    FT_ENCODING_MS_WANSUNG ::                                          */
-  /*      Same as FT_ENCODING_WANSUNG.  Deprecated.                        */
-  /*                                                                       */
-  /*    FT_ENCODING_MS_JOHAB ::                                            */
-  /*      Same as FT_ENCODING_JOHAB.  Deprecated.                          */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    By default, FreeType enables a Unicode charmap and tags it with    */
-  /*    FT_ENCODING_UNICODE when it is either provided or can be generated */
-  /*    from PostScript glyph name dictionaries in the font file.          */
-  /*    All other encodings are considered legacy and tagged only if       */
-  /*    explicitly defined in the font file.  Otherwise, FT_ENCODING_NONE  */
-  /*    is used.                                                           */
-  /*                                                                       */
-  /*    FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap  */
-  /*    is neither Unicode nor ISO-8859-1 (otherwise it is set to          */
-  /*    FT_ENCODING_UNICODE).  Use @FT_Get_BDF_Charset_ID to find out      */
-  /*    which encoding is really present.  If, for example, the            */
-  /*    `cs_registry' field is `KOI8' and the `cs_encoding' field is `R',  */
-  /*    the font is encoded in KOI8-R.                                     */
-  /*                                                                       */
-  /*    FT_ENCODING_NONE is always set (with a single exception) by the    */
-  /*    winfonts driver.  Use @FT_Get_WinFNT_Header and examine the        */
-  /*    `charset' field of the @FT_WinFNT_HeaderRec structure to find out  */
-  /*    which encoding is really present.  For example,                    */
-  /*    @FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for       */
-  /*    Russian).                                                          */
-  /*                                                                       */
-  /*    FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH */
-  /*    and `encoding_id' is not `TT_MAC_ID_ROMAN' (otherwise it is set to */
-  /*    FT_ENCODING_APPLE_ROMAN).                                          */
-  /*                                                                       */
-  /*    If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function       */
-  /*    @FT_Get_CMap_Language_ID to query the Mac language ID that may     */
-  /*    be needed to be able to distinguish Apple encoding variants.  See  */
-  /*                                                                       */
-  /*      https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt */
-  /*                                                                       */
-  /*    to get an idea how to do that.  Basically, if the language ID      */
-  /*    is~0, don't use it, otherwise subtract 1 from the language ID.     */
-  /*    Then examine `encoding_id'.  If, for example, `encoding_id' is     */
-  /*    `TT_MAC_ID_ROMAN' and the language ID (minus~1) is                 */
-  /*    `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman.        */
-  /*    `TT_MAC_ID_ARABIC' with `TT_MAC_LANGID_FARSI' means the Farsi      */
-  /*    variant the Arabic encoding.                                       */
-  /*                                                                       */
-  typedef enum  FT_Encoding_
-  {
-    FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ),
-
-    FT_ENC_TAG( FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b' ),
-    FT_ENC_TAG( FT_ENCODING_UNICODE,   'u', 'n', 'i', 'c' ),
-
-    FT_ENC_TAG( FT_ENCODING_SJIS,    's', 'j', 'i', 's' ),
-    FT_ENC_TAG( FT_ENCODING_PRC,     'g', 'b', ' ', ' ' ),
-    FT_ENC_TAG( FT_ENCODING_BIG5,    'b', 'i', 'g', '5' ),
-    FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ),
-    FT_ENC_TAG( FT_ENCODING_JOHAB,   'j', 'o', 'h', 'a' ),
-
-    /* for backward compatibility */
-    FT_ENCODING_GB2312     = FT_ENCODING_PRC,
-    FT_ENCODING_MS_SJIS    = FT_ENCODING_SJIS,
-    FT_ENCODING_MS_GB2312  = FT_ENCODING_PRC,
-    FT_ENCODING_MS_BIG5    = FT_ENCODING_BIG5,
-    FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG,
-    FT_ENCODING_MS_JOHAB   = FT_ENCODING_JOHAB,
-
-    FT_ENC_TAG( FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B' ),
-    FT_ENC_TAG( FT_ENCODING_ADOBE_EXPERT,   'A', 'D', 'B', 'E' ),
-    FT_ENC_TAG( FT_ENCODING_ADOBE_CUSTOM,   'A', 'D', 'B', 'C' ),
-    FT_ENC_TAG( FT_ENCODING_ADOBE_LATIN_1,  'l', 'a', 't', '1' ),
-
-    FT_ENC_TAG( FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2' ),
-
-    FT_ENC_TAG( FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n' )
-
-  } FT_Encoding;
-
-
-  /* these constants are deprecated; use the corresponding `FT_Encoding' */
-  /* values instead                                                      */
-#define ft_encoding_none            FT_ENCODING_NONE
-#define ft_encoding_unicode         FT_ENCODING_UNICODE
-#define ft_encoding_symbol          FT_ENCODING_MS_SYMBOL
-#define ft_encoding_latin_1         FT_ENCODING_ADOBE_LATIN_1
-#define ft_encoding_latin_2         FT_ENCODING_OLD_LATIN_2
-#define ft_encoding_sjis            FT_ENCODING_SJIS
-#define ft_encoding_gb2312          FT_ENCODING_PRC
-#define ft_encoding_big5            FT_ENCODING_BIG5
-#define ft_encoding_wansung         FT_ENCODING_WANSUNG
-#define ft_encoding_johab           FT_ENCODING_JOHAB
-
-#define ft_encoding_adobe_standard  FT_ENCODING_ADOBE_STANDARD
-#define ft_encoding_adobe_expert    FT_ENCODING_ADOBE_EXPERT
-#define ft_encoding_adobe_custom    FT_ENCODING_ADOBE_CUSTOM
-#define ft_encoding_apple_roman     FT_ENCODING_APPLE_ROMAN
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_CharMapRec                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The base charmap structure.                                        */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    face        :: A handle to the parent face object.                 */
-  /*                                                                       */
-  /*    encoding    :: An @FT_Encoding tag identifying the charmap.  Use   */
-  /*                   this with @FT_Select_Charmap.                       */
-  /*                                                                       */
-  /*    platform_id :: An ID number describing the platform for the        */
-  /*                   following encoding ID.  This comes directly from    */
-  /*                   the TrueType specification and gets emulated for    */
-  /*                   other formats.                                      */
-  /*                                                                       */
-  /*    encoding_id :: A platform specific encoding number.  This also     */
-  /*                   comes from the TrueType specification and gets      */
-  /*                   emulated similarly.                                 */
-  /*                                                                       */
-  typedef struct  FT_CharMapRec_
-  {
-    FT_Face      face;
-    FT_Encoding  encoding;
-    FT_UShort    platform_id;
-    FT_UShort    encoding_id;
-
-  } FT_CharMapRec;
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*                                                                       */
-  /*                 B A S E   O B J E C T   C L A S S E S                 */
-  /*                                                                       */
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Face_Internal                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An opaque handle to an `FT_Face_InternalRec' structure that models */
-  /*    the private data of a given @FT_Face object.                       */
-  /*                                                                       */
-  /*    This structure might change between releases of FreeType~2 and is  */
-  /*    not generally available to client applications.                    */
-  /*                                                                       */
-  typedef struct FT_Face_InternalRec_*  FT_Face_Internal;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_FaceRec                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    FreeType root face class structure.  A face object models a        */
-  /*    typeface in a font file.                                           */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    num_faces           :: The number of faces in the font file.  Some */
-  /*                           font formats can have multiple faces in     */
-  /*                           a single font file.                         */
-  /*                                                                       */
-  /*    face_index          :: This field holds two different values.      */
-  /*                           Bits 0-15 are the index of the face in the  */
-  /*                           font file (starting with value~0).  They    */
-  /*                           are set to~0 if there is only one face in   */
-  /*                           the font file.                              */
-  /*                                                                       */
-  /*                           [Since 2.6.1] Bits 16-30 are relevant to GX */
-  /*                           and OpenType variation fonts only, holding  */
-  /*                           the named instance index for the current    */
-  /*                           face index (starting with value~1; value~0  */
-  /*                           indicates font access without a named       */
-  /*                           instance).  For non-variation fonts, bits   */
-  /*                           16-30 are ignored.  If we have the third    */
-  /*                           named instance of face~4, say, `face_index' */
-  /*                           is set to 0x00030004.                       */
-  /*                                                                       */
-  /*                           Bit 31 is always zero (this is,             */
-  /*                           `face_index' is always a positive value).   */
-  /*                                                                       */
-  /*                           [Since 2.9] Changing the design coordinates */
-  /*                           with @FT_Set_Var_Design_Coordinates or      */
-  /*                           @FT_Set_Var_Blend_Coordinates does not      */
-  /*                           influence the named instance index value    */
-  /*                           (only @FT_Set_Named_Instance does that).    */
-  /*                                                                       */
-  /*    face_flags          :: A set of bit flags that give important      */
-  /*                           information about the face; see             */
-  /*                           @FT_FACE_FLAG_XXX for the details.          */
-  /*                                                                       */
-  /*    style_flags         :: The lower 16~bits contain a set of bit      */
-  /*                           flags indicating the style of the face; see */
-  /*                           @FT_STYLE_FLAG_XXX for the details.         */
-  /*                                                                       */
-  /*                           [Since 2.6.1] Bits 16-30 hold the number    */
-  /*                           of named instances available for the        */
-  /*                           current face if we have a GX or OpenType    */
-  /*                           variation (sub)font.  Bit 31 is always zero */
-  /*                           (this is, `style_flags' is always a         */
-  /*                           positive value).  Note that a variation     */
-  /*                           font has always at least one named          */
-  /*                           instance, namely the default instance.      */
-  /*                                                                       */
-  /*    num_glyphs          :: The number of glyphs in the face.  If the   */
-  /*                           face is scalable and has sbits (see         */
-  /*                           `num_fixed_sizes'), it is set to the number */
-  /*                           of outline glyphs.                          */
-  /*                                                                       */
-  /*                           For CID-keyed fonts (not in an SFNT         */
-  /*                           wrapper) this value gives the highest CID   */
-  /*                           used in the font.                           */
-  /*                                                                       */
-  /*    family_name         :: The face's family name.  This is an ASCII   */
-  /*                           string, usually in English, that describes  */
-  /*                           the typeface's family (like `Times New      */
-  /*                           Roman', `Bodoni', `Garamond', etc).  This   */
-  /*                           is a least common denominator used to list  */
-  /*                           fonts.  Some formats (TrueType & OpenType)  */
-  /*                           provide localized and Unicode versions of   */
-  /*                           this string.  Applications should use the   */
-  /*                           format specific interface to access them.   */
-  /*                           Can be NULL (e.g., in fonts embedded in a   */
-  /*                           PDF file).                                  */
-  /*                                                                       */
-  /*                           In case the font doesn't provide a specific */
-  /*                           family name entry, FreeType tries to        */
-  /*                           synthesize one, deriving it from other name */
-  /*                           entries.                                    */
-  /*                                                                       */
-  /*    style_name          :: The face's style name.  This is an ASCII    */
-  /*                           string, usually in English, that describes  */
-  /*                           the typeface's style (like `Italic',        */
-  /*                           `Bold', `Condensed', etc).  Not all font    */
-  /*                           formats provide a style name, so this field */
-  /*                           is optional, and can be set to NULL.  As    */
-  /*                           for `family_name', some formats provide     */
-  /*                           localized and Unicode versions of this      */
-  /*                           string.  Applications should use the format */
-  /*                           specific interface to access them.          */
-  /*                                                                       */
-  /*    num_fixed_sizes     :: The number of bitmap strikes in the face.   */
-  /*                           Even if the face is scalable, there might   */
-  /*                           still be bitmap strikes, which are called   */
-  /*                           `sbits' in that case.                       */
-  /*                                                                       */
-  /*    available_sizes     :: An array of @FT_Bitmap_Size for all bitmap  */
-  /*                           strikes in the face.  It is set to NULL if  */
-  /*                           there is no bitmap strike.                  */
-  /*                                                                       */
-  /*                           Note that FreeType tries to sanitize the    */
-  /*                           strike data since they are sometimes sloppy */
-  /*                           or incorrect, but this can easily fail.     */
-  /*                                                                       */
-  /*    num_charmaps        :: The number of charmaps in the face.         */
-  /*                                                                       */
-  /*    charmaps            :: An array of the charmaps of the face.       */
-  /*                                                                       */
-  /*    generic             :: A field reserved for client uses.  See the  */
-  /*                           @FT_Generic type description.               */
-  /*                                                                       */
-  /*    bbox                :: The font bounding box.  Coordinates are     */
-  /*                           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 `maximum     */
-  /*                           ascender', and `bbox.yMin' as the `minimum  */
-  /*                           descender'.  Only relevant for scalable     */
-  /*                           formats.                                    */
-  /*                                                                       */
-  /*                           Note that the bounding box might be off by  */
-  /*                           (at least) one pixel for hinted fonts.  See */
-  /*                           @FT_Size_Metrics for further discussion.    */
-  /*                                                                       */
-  /*    units_per_EM        :: The number of font units per EM square for  */
-  /*                           this face.  This is typically 2048 for      */
-  /*                           TrueType fonts, and 1000 for Type~1 fonts.  */
-  /*                           Only relevant for scalable formats.         */
-  /*                                                                       */
-  /*    ascender            :: The typographic ascender of the face,       */
-  /*                           expressed in font units.  For font formats  */
-  /*                           not having this information, it is set to   */
-  /*                           `bbox.yMax'.  Only relevant for scalable    */
-  /*                           formats.                                    */
-  /*                                                                       */
-  /*    descender           :: The typographic descender of the face,      */
-  /*                           expressed in font units.  For font formats  */
-  /*                           not having this information, it is set to   */
-  /*                           `bbox.yMin'.  Note that this field is       */
-  /*                           negative for values below the baseline.     */
-  /*                           Only relevant for scalable formats.         */
-  /*                                                                       */
-  /*    height              :: This value is the vertical distance         */
-  /*                           between two consecutive baselines,          */
-  /*                           expressed in font units.  It is always      */
-  /*                           positive.  Only relevant for scalable       */
-  /*                           formats.                                    */
-  /*                                                                       */
-  /*                           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 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   */
-  /*                           vertical metrics.  Only relevant for        */
-  /*                           scalable formats.                           */
-  /*                                                                       */
-  /*    underline_position  :: The position, in font units, of the         */
-  /*                           underline line for this face.  It is the    */
-  /*                           center of the underlining stem.  Only       */
-  /*                           relevant for scalable formats.              */
-  /*                                                                       */
-  /*    underline_thickness :: The thickness, in font units, of the        */
-  /*                           underline for this face.  Only relevant for */
-  /*                           scalable formats.                           */
-  /*                                                                       */
-  /*    glyph               :: The face's associated glyph slot(s).        */
-  /*                                                                       */
-  /*    size                :: The current active size for this face.      */
-  /*                                                                       */
-  /*    charmap             :: The current active charmap for this face.   */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Fields may be changed after a call to @FT_Attach_File or           */
-  /*    @FT_Attach_Stream.                                                 */
-  /*                                                                       */
-  /*    For an OpenType variation font, the values of the following fields */
-  /*    can change after a call to @FT_Set_Var_Design_Coordinates (and     */
-  /*    friends) if the font contains an `MVAR' table: `ascender',         */
-  /*    `descender', `height', `underline_position', and                   */
-  /*    `underline_thickness'.                                             */
-  /*                                                                       */
-  /*    Especially for TrueType fonts see also the documentation for       */
-  /*    @FT_Size_Metrics.                                                  */
-  /*                                                                       */
-  typedef struct  FT_FaceRec_
-  {
-    FT_Long           num_faces;
-    FT_Long           face_index;
-
-    FT_Long           face_flags;
-    FT_Long           style_flags;
-
-    FT_Long           num_glyphs;
-
-    FT_String*        family_name;
-    FT_String*        style_name;
-
-    FT_Int            num_fixed_sizes;
-    FT_Bitmap_Size*   available_sizes;
-
-    FT_Int            num_charmaps;
-    FT_CharMap*       charmaps;
-
-    FT_Generic        generic;
-
-    /*# The following member variables (down to `underline_thickness') */
-    /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size    */
-    /*# for bitmap fonts.                                              */
-    FT_BBox           bbox;
-
-    FT_UShort         units_per_EM;
-    FT_Short          ascender;
-    FT_Short          descender;
-    FT_Short          height;
-
-    FT_Short          max_advance_width;
-    FT_Short          max_advance_height;
-
-    FT_Short          underline_position;
-    FT_Short          underline_thickness;
-
-    FT_GlyphSlot      glyph;
-    FT_Size           size;
-    FT_CharMap        charmap;
-
-    /*@private begin */
-
-    FT_Driver         driver;
-    FT_Memory         memory;
-    FT_Stream         stream;
-
-    FT_ListRec        sizes_list;
-
-    FT_Generic        autohint;   /* face-specific auto-hinter data */
-    void*             extensions; /* unused                         */
-
-    FT_Face_Internal  internal;
-
-    /*@private end */
-
-  } FT_FaceRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_FACE_FLAG_XXX                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A list of bit flags used in the `face_flags' field of the          */
-  /*    @FT_FaceRec structure.  They inform client applications of         */
-  /*    properties of the corresponding face.                              */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_FACE_FLAG_SCALABLE ::                                           */
-  /*      The face contains outline glyphs.  Note that a face can contain  */
-  /*      bitmap strikes also, i.e., a face can have both this flag and    */
-  /*      @FT_FACE_FLAG_FIXED_SIZES set.                                   */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_FIXED_SIZES ::                                        */
-  /*      The face contains bitmap strikes.  See also the                  */
-  /*      `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec.   */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_FIXED_WIDTH ::                                        */
-  /*      The face contains fixed-width characters (like Courier, Lucida,  */
-  /*      MonoType, etc.).                                                 */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_SFNT ::                                               */
-  /*      The face uses the SFNT storage scheme.  For now, this means      */
-  /*      TrueType and OpenType.                                           */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_HORIZONTAL ::                                         */
-  /*      The face contains horizontal glyph metrics.  This should be set  */
-  /*      for all common formats.                                          */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_VERTICAL ::                                           */
-  /*      The face contains vertical glyph metrics.  This is only          */
-  /*      available in some formats, not all of them.                      */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_KERNING ::                                            */
-  /*      The face contains kerning information.  If set, the kerning      */
-  /*      distance can be retrieved using the function @FT_Get_Kerning.    */
-  /*      Otherwise the function always return the vector (0,0).  Note     */
-  /*      that FreeType doesn't handle kerning data from the SFNT `GPOS'   */
-  /*      table (as present in many OpenType fonts).                       */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_FAST_GLYPHS ::                                        */
-  /*      THIS FLAG IS DEPRECATED.  DO NOT USE OR TEST IT.                 */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_MULTIPLE_MASTERS ::                                   */
-  /*      The face contains multiple masters and is capable of             */
-  /*      interpolating between them.  Supported formats are Adobe MM,     */
-  /*      TrueType GX, and OpenType variation fonts.                       */
-  /*                                                                       */
-  /*      See section @multiple_masters for API details.                   */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_GLYPH_NAMES ::                                        */
-  /*      The face contains glyph names, which can be retrieved using      */
-  /*      @FT_Get_Glyph_Name.  Note that some TrueType fonts contain       */
-  /*      broken glyph name tables.  Use the function                      */
-  /*      @FT_Has_PS_Glyph_Names when needed.                              */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_EXTERNAL_STREAM ::                                    */
-  /*      Used internally by FreeType to indicate that a face's stream was */
-  /*      provided by the client application and should not be destroyed   */
-  /*      when @FT_Done_Face is called.  Don't read or test this flag.     */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_HINTER ::                                             */
-  /*      The font driver has a hinting machine of its own.  For example,  */
-  /*      with TrueType fonts, it makes sense to use data from the SFNT    */
-  /*      `gasp' table only if the native TrueType hinting engine (with    */
-  /*      the bytecode interpreter) is available and active.               */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_CID_KEYED ::                                          */
-  /*      The face is CID-keyed.  In that case, the face is not accessed   */
-  /*      by glyph indices but by CID values.  For subsetted CID-keyed     */
-  /*      fonts this has the consequence that not all index values are a   */
-  /*      valid argument to @FT_Load_Glyph.  Only the CID values for which */
-  /*      corresponding glyphs in the subsetted font exist make            */
-  /*      `FT_Load_Glyph' return successfully; in all other cases you get  */
-  /*      an `FT_Err_Invalid_Argument' error.                              */
-  /*                                                                       */
-  /*      Note that CID-keyed fonts that are in an SFNT wrapper (this is,  */
-  /*      all OpenType/CFF fonts) don't have this flag set since the       */
-  /*      glyphs are accessed in the normal way (using contiguous          */
-  /*      indices); the `CID-ness' isn't visible to the application.       */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_TRICKY ::                                             */
-  /*      The face is `tricky', this is, it always needs the font format's */
-  /*      native hinting engine to get a reasonable result.  A typical     */
-  /*      example is the old Chinese font `mingli.ttf' (but not            */
-  /*      `mingliu.ttc') that uses TrueType bytecode instructions to move  */
-  /*      and scale all of its subglyphs.                                  */
-  /*                                                                       */
-  /*      It is not possible to auto-hint such fonts using                 */
-  /*      @FT_LOAD_FORCE_AUTOHINT; it will also ignore                     */
-  /*      @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 about a dozen TrueType fonts in the list of */
-  /*      tricky fonts; they are hard-coded in file `ttobjs.c'.            */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_COLOR ::                                              */
-  /*      [Since 2.5.1] The face has color glyph tables.  To access color  */
-  /*      glyphs use @FT_LOAD_COLOR.                                       */
-  /*                                                                       */
-  /*    FT_FACE_FLAG_VARIATION ::                                          */
-  /*      [Since 2.9] Set if the current face (or named instance) has been */
-  /*      altered with @FT_Set_MM_Design_Coordinates,                      */
-  /*      @FT_Set_Var_Design_Coordinates, or                               */
-  /*      @FT_Set_Var_Blend_Coordinates.  This flag is unset by a call to  */
-  /*      @FT_Set_Named_Instance.                                          */
-  /*                                                                       */
-#define FT_FACE_FLAG_SCALABLE          ( 1L <<  0 )
-#define FT_FACE_FLAG_FIXED_SIZES       ( 1L <<  1 )
-#define FT_FACE_FLAG_FIXED_WIDTH       ( 1L <<  2 )
-#define FT_FACE_FLAG_SFNT              ( 1L <<  3 )
-#define FT_FACE_FLAG_HORIZONTAL        ( 1L <<  4 )
-#define FT_FACE_FLAG_VERTICAL          ( 1L <<  5 )
-#define FT_FACE_FLAG_KERNING           ( 1L <<  6 )
-#define FT_FACE_FLAG_FAST_GLYPHS       ( 1L <<  7 )
-#define FT_FACE_FLAG_MULTIPLE_MASTERS  ( 1L <<  8 )
-#define FT_FACE_FLAG_GLYPH_NAMES       ( 1L <<  9 )
-#define FT_FACE_FLAG_EXTERNAL_STREAM   ( 1L << 10 )
-#define FT_FACE_FLAG_HINTER            ( 1L << 11 )
-#define FT_FACE_FLAG_CID_KEYED         ( 1L << 12 )
-#define FT_FACE_FLAG_TRICKY            ( 1L << 13 )
-#define FT_FACE_FLAG_COLOR             ( 1L << 14 )
-#define FT_FACE_FLAG_VARIATION         ( 1L << 15 )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_HAS_HORIZONTAL( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains
-   *   horizontal metrics (this is true for all font formats though).
-   *
-   * @also:
-   *   @FT_HAS_VERTICAL can be used to check for vertical metrics.
-   *
-   */
-#define FT_HAS_HORIZONTAL( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_HAS_VERTICAL( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains real
-   *   vertical metrics (and not only synthesized ones).
-   *
-   */
-#define FT_HAS_VERTICAL( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_VERTICAL )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_HAS_KERNING( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains kerning
-   *   data that can be accessed with @FT_Get_Kerning.
-   *
-   */
-#define FT_HAS_KERNING( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_KERNING )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_IS_SCALABLE( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains a scalable
-   *   font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF,
-   *   and PFR font formats).
-   *
-   */
-#define FT_IS_SCALABLE( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_SCALABLE )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_IS_SFNT( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains a font
-   *   whose format is based on the SFNT storage scheme.  This usually
-   *   means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded
-   *   bitmap fonts.
-   *
-   *   If this macro is true, all functions defined in @FT_SFNT_NAMES_H and
-   *   @FT_TRUETYPE_TABLES_H are available.
-   *
-   */
-#define FT_IS_SFNT( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_SFNT )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_IS_FIXED_WIDTH( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains a font face
-   *   that contains fixed-width (or `monospace', `fixed-pitch', etc.)
-   *   glyphs.
-   *
-   */
-#define FT_IS_FIXED_WIDTH( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_HAS_FIXED_SIZES( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains some
-   *   embedded bitmaps.  See the `available_sizes' field of the
-   *   @FT_FaceRec structure.
-   *
-   */
-#define FT_HAS_FIXED_SIZES( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_HAS_FAST_GLYPHS( face )
-   *
-   * @description:
-   *   Deprecated.
-   *
-   */
-#define FT_HAS_FAST_GLYPHS( face )  0
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_HAS_GLYPH_NAMES( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains some glyph
-   *   names that can be accessed through @FT_Get_Glyph_Name.
-   *
-   */
-#define FT_HAS_GLYPH_NAMES( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_HAS_MULTIPLE_MASTERS( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains some
-   *   multiple masters.  The functions provided by @FT_MULTIPLE_MASTERS_H
-   *   are then available to choose the exact design you want.
-   *
-   */
-#define FT_HAS_MULTIPLE_MASTERS( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_IS_NAMED_INSTANCE( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object is a named instance
-   *   of a GX or OpenType variation font.
-   *
-   *   [Since 2.9] Changing the design coordinates with
-   *   @FT_Set_Var_Design_Coordinates or @FT_Set_Var_Blend_Coordinates does
-   *   not influence the return value of this macro (only
-   *   @FT_Set_Named_Instance does that).
-   *
-   * @since:
-   *   2.7
-   *
-   */
-#define FT_IS_NAMED_INSTANCE( face ) \
-          ( (face)->face_index & 0x7FFF0000L )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_IS_VARIATION( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object has been altered
-   *   by @FT_Set_MM_Design_Coordinates, @FT_Set_Var_Design_Coordinates, or
-   *   @FT_Set_Var_Blend_Coordinates.
-   *
-   * @since:
-   *   2.9
-   *
-   */
-#define FT_IS_VARIATION( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_VARIATION )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_IS_CID_KEYED( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains a CID-keyed
-   *   font.  See the discussion of @FT_FACE_FLAG_CID_KEYED for more
-   *   details.
-   *
-   *   If this macro is true, all functions defined in @FT_CID_H are
-   *   available.
-   *
-   */
-#define FT_IS_CID_KEYED( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_CID_KEYED )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_IS_TRICKY( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face represents a `tricky' font.
-   *   See the discussion of @FT_FACE_FLAG_TRICKY for more details.
-   *
-   */
-#define FT_IS_TRICKY( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_TRICKY )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_HAS_COLOR( face )
-   *
-   * @description:
-   *   A macro that returns true whenever a face object contains
-   *   tables for color glyphs.
-   *
-   * @since:
-   *   2.5.1
-   *
-   */
-#define FT_HAS_COLOR( face ) \
-          ( (face)->face_flags & FT_FACE_FLAG_COLOR )
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Const>                                                               */
-  /*    FT_STYLE_FLAG_XXX                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A list of bit flags to indicate the style of a given face.  These  */
-  /*    are used in the `style_flags' field of @FT_FaceRec.                */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_STYLE_FLAG_ITALIC ::                                            */
-  /*      The face style is italic or oblique.                             */
-  /*                                                                       */
-  /*    FT_STYLE_FLAG_BOLD ::                                              */
-  /*      The face is bold.                                                */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The style information as provided by FreeType is very basic.  More */
-  /*    details are beyond the scope and should be done on a higher level  */
-  /*    (for example, by analyzing various fields of the `OS/2' table in   */
-  /*    SFNT based fonts).                                                 */
-  /*                                                                       */
-#define FT_STYLE_FLAG_ITALIC  ( 1 << 0 )
-#define FT_STYLE_FLAG_BOLD    ( 1 << 1 )
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Size_Internal                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An opaque handle to an `FT_Size_InternalRec' structure, used to    */
-  /*    model private data of a given @FT_Size object.                     */
-  /*                                                                       */
-  typedef struct FT_Size_InternalRec_*  FT_Size_Internal;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Size_Metrics                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The size metrics structure gives the metrics of a size object.     */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    x_ppem       :: The width of the scaled EM square in pixels, hence */
-  /*                    the term `ppem' (pixels per EM).  It is also       */
-  /*                    referred to as `nominal width'.                    */
-  /*                                                                       */
-  /*    y_ppem       :: The height of the scaled EM square in pixels,      */
-  /*                    hence the term `ppem' (pixels per EM).  It is also */
-  /*                    referred to as `nominal height'.                   */
-  /*                                                                       */
-  /*    x_scale      :: A 16.16 fractional scaling value to convert        */
-  /*                    horizontal metrics from font units to 26.6         */
-  /*                    fractional pixels.  Only relevant for scalable     */
-  /*                    font formats.                                      */
-  /*                                                                       */
-  /*    y_scale      :: A 16.16 fractional scaling value to convert        */
-  /*                    vertical metrics from font units to 26.6           */
-  /*                    fractional pixels.  Only relevant for scalable     */
-  /*                    font formats.                                      */
-  /*                                                                       */
-  /*    ascender     :: The ascender in 26.6 fractional pixels, rounded up */
-  /*                    to an integer value.  See @FT_FaceRec for the      */
-  /*                    details.                                           */
-  /*                                                                       */
-  /*    descender    :: The descender in 26.6 fractional pixels, rounded   */
-  /*                    down to an integer value.  See @FT_FaceRec for the */
-  /*                    details.                                           */
-  /*                                                                       */
-  /*    height       :: The height in 26.6 fractional pixels, rounded to   */
-  /*                    an integer value.  See @FT_FaceRec for the         */
-  /*                    details.                                           */
-  /*                                                                       */
-  /*    max_advance  :: The maximum advance width in 26.6 fractional       */
-  /*                    pixels, rounded to an integer value.  See          */
-  /*                    @FT_FaceRec for the details.                       */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The scaling values, if relevant, are determined first during a     */
-  /*    size changing operation.  The remaining fields are then set by the */
-  /*    driver.  For scalable formats, they are usually set to scaled      */
-  /*    values of the corresponding fields in @FT_FaceRec.  Some values    */
-  /*    like ascender or descender are rounded for historical reasons;     */
-  /*    more precise values (for outline fonts) can be derived by scaling  */
-  /*    the corresponding @FT_FaceRec values manually, with code similar   */
-  /*    to the following.                                                  */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      scaled_ascender = FT_MulFix( face->ascender,                     */
-  /*                                   size_metrics->y_scale );            */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    Note that due to glyph hinting and the selected rendering mode     */
-  /*    these values are usually not exact; consequently, they must be     */
-  /*    treated as unreliable with an error margin of at least one pixel!  */
-  /*                                                                       */
-  /*    Indeed, the only way to get the exact metrics is to render _all_   */
-  /*    glyphs.  As this would be a definite performance hit, it is up to  */
-  /*    client applications to perform such computations.                  */
-  /*                                                                       */
-  /*    The `FT_Size_Metrics' structure is valid for bitmap fonts also.    */
-  /*                                                                       */
-  /*                                                                       */
-  /*    *TrueType* *fonts* *with* *native* *bytecode* *hinting*            */
-  /*                                                                       */
-  /*    All applications that handle TrueType fonts with native hinting    */
-  /*    must be aware that TTFs expect different rounding of vertical font */
-  /*    dimensions.  The application has to cater for this, especially if  */
-  /*    it wants to rely on a TTF's vertical data (for example, to         */
-  /*    properly align box characters vertically).                         */
-  /*                                                                       */
-  /*    Only the application knows _in_ _advance_ that it is going to use  */
-  /*    native hinting for TTFs!  FreeType, on the other hand, selects the */
-  /*    hinting mode not at the time of creating an @FT_Size object but    */
-  /*    much later, namely while calling @FT_Load_Glyph.                   */
-  /*                                                                       */
-  /*    Here is some pseudo code that illustrates a possible solution.     */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      font_format = FT_Get_Font_Format( face );                        */
-  /*                                                                       */
-  /*      if ( !strcmp( font_format, "TrueType" ) &&                       */
-  /*           do_native_bytecode_hinting         )                        */
-  /*      {                                                                */
-  /*        ascender  = ROUND( FT_MulFix( face->ascender,                  */
-  /*                                      size_metrics->y_scale ) );       */
-  /*        descender = ROUND( FT_MulFix( face->descender,                 */
-  /*                                      size_metrics->y_scale ) );       */
-  /*      }                                                                */
-  /*      else                                                             */
-  /*      {                                                                */
-  /*        ascender  = size_metrics->ascender;                            */
-  /*        descender = size_metrics->descender;                           */
-  /*      }                                                                */
-  /*                                                                       */
-  /*      height      = size_metrics->height;                              */
-  /*      max_advance = size_metrics->max_advance;                         */
-  /*    }                                                                  */
-  /*                                                                       */
-  typedef struct  FT_Size_Metrics_
-  {
-    FT_UShort  x_ppem;      /* horizontal pixels per EM               */
-    FT_UShort  y_ppem;      /* vertical pixels per EM                 */
-
-    FT_Fixed   x_scale;     /* scaling values used to convert font    */
-    FT_Fixed   y_scale;     /* units to 26.6 fractional pixels        */
-
-    FT_Pos     ascender;    /* ascender in 26.6 frac. pixels          */
-    FT_Pos     descender;   /* descender in 26.6 frac. pixels         */
-    FT_Pos     height;      /* text height in 26.6 frac. pixels       */
-    FT_Pos     max_advance; /* max horizontal advance, in 26.6 pixels */
-
-  } FT_Size_Metrics;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_SizeRec                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    FreeType root size class structure.  A size object models a face   */
-  /*    object at a given size.                                            */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    face    :: Handle to the parent face object.                       */
-  /*                                                                       */
-  /*    generic :: A typeless pointer, unused by the FreeType library or   */
-  /*               any of its drivers.  It can be used by client           */
-  /*               applications to link their own data to each size        */
-  /*               object.                                                 */
-  /*                                                                       */
-  /*    metrics :: Metrics for this size object.  This field is read-only. */
-  /*                                                                       */
-  typedef struct  FT_SizeRec_
-  {
-    FT_Face           face;      /* parent face object              */
-    FT_Generic        generic;   /* generic pointer for client uses */
-    FT_Size_Metrics   metrics;   /* size metrics                    */
-    FT_Size_Internal  internal;
-
-  } FT_SizeRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_SubGlyph                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The subglyph structure is an internal object used to describe      */
-  /*    subglyphs (for example, in the case of composites).                */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The subglyph implementation is not part of the high-level API,     */
-  /*    hence the forward structure declaration.                           */
-  /*                                                                       */
-  /*    You can however retrieve subglyph information with                 */
-  /*    @FT_Get_SubGlyph_Info.                                             */
-  /*                                                                       */
-  typedef struct FT_SubGlyphRec_*  FT_SubGlyph;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Slot_Internal                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An opaque handle to an `FT_Slot_InternalRec' structure, used to    */
-  /*    model private data of a given @FT_GlyphSlot object.                */
-  /*                                                                       */
-  typedef struct FT_Slot_InternalRec_*  FT_Slot_Internal;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_GlyphSlotRec                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    FreeType root glyph slot class structure.  A glyph slot is a       */
-  /*    container where individual glyphs can be loaded, be they in        */
-  /*    outline or bitmap format.                                          */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    library           :: A handle to the FreeType library instance     */
-  /*                         this slot belongs to.                         */
-  /*                                                                       */
-  /*    face              :: A handle to the parent face object.           */
-  /*                                                                       */
-  /*    next              :: In some cases (like some font tools), several */
-  /*                         glyph slots per face object can be a good     */
-  /*                         thing.  As this is rare, the glyph slots are  */
-  /*                         listed through a direct, single-linked list   */
-  /*                         using its `next' field.                       */
-  /*                                                                       */
-  /*    generic           :: A typeless pointer unused by the FreeType     */
-  /*                         library or any of its drivers.  It can be     */
-  /*                         used by client applications to link their own */
-  /*                         data to each glyph slot object.               */
-  /*                                                                       */
-  /*    metrics           :: The metrics of the last loaded glyph in the   */
-  /*                         slot.  The returned values depend on the last */
-  /*                         load flags (see the @FT_Load_Glyph API        */
-  /*                         function) and can be expressed either in 26.6 */
-  /*                         fractional pixels or font units.              */
-  /*                                                                       */
-  /*                         Note that even when the glyph image is        */
-  /*                         transformed, the metrics are not.             */
-  /*                                                                       */
-  /*    linearHoriAdvance :: The advance width of the unhinted glyph.      */
-  /*                         Its value is expressed in 16.16 fractional    */
-  /*                         pixels, unless @FT_LOAD_LINEAR_DESIGN is set  */
-  /*                         when loading the glyph.  This field can be    */
-  /*                         important to perform correct WYSIWYG layout.  */
-  /*                         Only relevant for outline glyphs.             */
-  /*                                                                       */
-  /*    linearVertAdvance :: The advance height of the unhinted glyph.     */
-  /*                         Its value is expressed in 16.16 fractional    */
-  /*                         pixels, unless @FT_LOAD_LINEAR_DESIGN is set  */
-  /*                         when loading the glyph.  This field can be    */
-  /*                         important to perform correct WYSIWYG layout.  */
-  /*                         Only relevant for outline glyphs.             */
-  /*                                                                       */
-  /*    advance           :: This shorthand is, depending on               */
-  /*                         @FT_LOAD_IGNORE_TRANSFORM, the transformed    */
-  /*                         (hinted) advance width for the glyph, in 26.6 */
-  /*                         fractional pixel format.  As specified with   */
-  /*                         @FT_LOAD_VERTICAL_LAYOUT, it uses either the  */
-  /*                         `horiAdvance' or the `vertAdvance' value of   */
-  /*                         `metrics' field.                              */
-  /*                                                                       */
-  /*    format            :: This field indicates the format of the image  */
-  /*                         contained in the glyph slot.  Typically       */
-  /*                         @FT_GLYPH_FORMAT_BITMAP,                      */
-  /*                         @FT_GLYPH_FORMAT_OUTLINE, or                  */
-  /*                         @FT_GLYPH_FORMAT_COMPOSITE, but other values  */
-  /*                         are possible.                                 */
-  /*                                                                       */
-  /*    bitmap            :: This field is used as a bitmap descriptor.    */
-  /*                         Note that the address and content of the      */
-  /*                         bitmap buffer can change between calls of     */
-  /*                         @FT_Load_Glyph and a few other functions.     */
-  /*                                                                       */
-  /*    bitmap_left       :: The bitmap's left bearing expressed in        */
-  /*                         integer pixels.                               */
-  /*                                                                       */
-  /*    bitmap_top        :: The bitmap's top bearing expressed in integer */
-  /*                         pixels.  This is the distance from the        */
-  /*                         baseline to the top-most glyph scanline,      */
-  /*                         upwards y~coordinates being *positive*.       */
-  /*                                                                       */
-  /*    outline           :: The outline descriptor for the current glyph  */
-  /*                         image if its format is                        */
-  /*                         @FT_GLYPH_FORMAT_OUTLINE.  Once a glyph is    */
-  /*                         loaded, `outline' can be transformed,         */
-  /*                         distorted, emboldened, etc.  However, it must */
-  /*                         not be freed.                                 */
-  /*                                                                       */
-  /*    num_subglyphs     :: The number of subglyphs in a composite glyph. */
-  /*                         This field is only valid for the composite    */
-  /*                         glyph format that should normally only be     */
-  /*                         loaded with the @FT_LOAD_NO_RECURSE flag.     */
-  /*                                                                       */
-  /*    subglyphs         :: An array of subglyph descriptors for          */
-  /*                         composite glyphs.  There are `num_subglyphs'  */
-  /*                         elements in there.  Currently internal to     */
-  /*                         FreeType.                                     */
-  /*                                                                       */
-  /*    control_data      :: Certain font drivers can also return the      */
-  /*                         control data for a given glyph image (e.g.    */
-  /*                         TrueType bytecode, Type~1 charstrings, etc.). */
-  /*                         This field is a pointer to such data; it is   */
-  /*                         currently internal to FreeType.               */
-  /*                                                                       */
-  /*    control_len       :: This is the length in bytes of the control    */
-  /*                         data.  Currently internal to FreeType.        */
-  /*                                                                       */
-  /*    other             :: Reserved.                                     */
-  /*                                                                       */
-  /*    lsb_delta         :: The difference between hinted and unhinted    */
-  /*                         left side bearing while auto-hinting is       */
-  /*                         active.  Zero otherwise.                      */
-  /*                                                                       */
-  /*    rsb_delta         :: The difference between hinted and unhinted    */
-  /*                         right side bearing while auto-hinting is      */
-  /*                         active.  Zero otherwise.                      */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    If @FT_Load_Glyph is called with default flags (see                */
-  /*    @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in   */
-  /*    its native format (e.g., an outline glyph for TrueType and Type~1  */
-  /*    formats).  [Since 2.9] The prospective bitmap metrics are          */
-  /*    calculated according to @FT_LOAD_TARGET_XXX and other flags even   */
-  /*    for the outline glyph, even if @FT_LOAD_RENDER is not set.         */
-  /*                                                                       */
-  /*    This image can later be converted into a bitmap by calling         */
-  /*    @FT_Render_Glyph.  This function searches the current renderer for */
-  /*    the native image's format, then invokes it.                        */
-  /*                                                                       */
-  /*    The renderer is in charge of transforming the native image through */
-  /*    the slot's face transformation fields, then converting it into a   */
-  /*    bitmap that is returned in `slot->bitmap'.                         */
-  /*                                                                       */
-  /*    Note that `slot->bitmap_left' and `slot->bitmap_top' are also used */
-  /*    to specify the position of the bitmap relative to the current pen  */
-  /*    position (e.g., coordinates (0,0) on the baseline).  Of course,    */
-  /*    `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP.         */
-  /*                                                                       */
-  /*    Here is a small pseudo code fragment that shows how to use         */
-  /*    `lsb_delta' and `rsb_delta' to do fractional positioning of        */
-  /*    glyphs:                                                            */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      FT_GlyphSlot  slot     = face->glyph;                            */
-  /*      FT_Pos        origin_x = 0;                                      */
-  /*                                                                       */
-  /*                                                                       */
-  /*      for all glyphs do                                                */
-  /*        <load glyph with `FT_Load_Glyph'>                              */
-  /*                                                                       */
-  /*        FT_Outline_Translate( slot->outline, origin_x & 63, 0 );       */
-  /*                                                                       */
-  /*        <save glyph image, or render glyph, or ...>                    */
-  /*                                                                       */
-  /*        <compute kern between current and next glyph                   */
-  /*         and add it to `origin_x'>                                     */
-  /*                                                                       */
-  /*        origin_x += slot->advance.x;                                   */
-  /*        origin_x += slot->rsb_delta - slot->lsb_delta;                 */
-  /*      endfor                                                           */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    Here is another small pseudo code fragment that shows how to use   */
-  /*    `lsb_delta' and `rsb_delta' to improve integer positioning of      */
-  /*    glyphs:                                                            */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      FT_GlyphSlot  slot           = face->glyph;                      */
-  /*      FT_Pos        origin_x       = 0;                                */
-  /*      FT_Pos        prev_rsb_delta = 0;                                */
-  /*                                                                       */
-  /*                                                                       */
-  /*      for all glyphs do                                                */
-  /*        <compute kern between current and previous glyph               */
-  /*         and add it to `origin_x'>                                     */
-  /*                                                                       */
-  /*        <load glyph with `FT_Load_Glyph'>                              */
-  /*                                                                       */
-  /*        if ( prev_rsb_delta - slot->lsb_delta >  32 )                  */
-  /*          origin_x -= 64;                                              */
-  /*        else if ( prev_rsb_delta - slot->lsb_delta < -31 )             */
-  /*          origin_x += 64;                                              */
-  /*                                                                       */
-  /*        prev_rsb_delta = slot->rsb_delta;                              */
-  /*                                                                       */
-  /*        <save glyph image, or render glyph, or ...>                    */
-  /*                                                                       */
-  /*        origin_x += slot->advance.x;                                   */
-  /*      endfor                                                           */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    If you use strong auto-hinting, you *must* apply these delta       */
-  /*    values!  Otherwise you will experience far too large inter-glyph   */
-  /*    spacing at small rendering sizes in most cases.  Note that it      */
-  /*    doesn't harm to use the above code for other hinting modes also,   */
-  /*    since the delta values are zero then.                              */
-  /*                                                                       */
-  typedef struct  FT_GlyphSlotRec_
-  {
-    FT_Library        library;
-    FT_Face           face;
-    FT_GlyphSlot      next;
-    FT_UInt           reserved;       /* retained for binary compatibility */
-    FT_Generic        generic;
-
-    FT_Glyph_Metrics  metrics;
-    FT_Fixed          linearHoriAdvance;
-    FT_Fixed          linearVertAdvance;
-    FT_Vector         advance;
-
-    FT_Glyph_Format   format;
-
-    FT_Bitmap         bitmap;
-    FT_Int            bitmap_left;
-    FT_Int            bitmap_top;
-
-    FT_Outline        outline;
-
-    FT_UInt           num_subglyphs;
-    FT_SubGlyph       subglyphs;
-
-    void*             control_data;
-    long              control_len;
-
-    FT_Pos            lsb_delta;
-    FT_Pos            rsb_delta;
-
-    void*             other;
-
-    FT_Slot_Internal  internal;
-
-  } FT_GlyphSlotRec;
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*                                                                       */
-  /*                         F U N C T I O N S                             */
-  /*                                                                       */
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Init_FreeType                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Initialize a new FreeType library object.  The set of modules      */
-  /*    that are registered by this function is determined at build time.  */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    alibrary :: A handle to a new library object.                      */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    In case you want to provide your own memory allocating routines,   */
-  /*    use @FT_New_Library instead, followed by a call to                 */
-  /*    @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module)   */
-  /*    and @FT_Set_Default_Properties.                                    */
-  /*                                                                       */
-  /*    See the documentation of @FT_Library and @FT_Face for              */
-  /*    multi-threading issues.                                            */
-  /*                                                                       */
-  /*    If you need reference-counting (cf. @FT_Reference_Library), use    */
-  /*    @FT_New_Library and @FT_Done_Library.                              */
-  /*                                                                       */
-  /*    If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is   */
-  /*    set, this function reads the `FREETYPE_PROPERTIES' environment     */
-  /*    variable to control driver properties.  See section @properties    */
-  /*    for more.                                                          */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Init_FreeType( FT_Library  *alibrary );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Done_FreeType                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Destroy a given FreeType library object and all of its children,   */
-  /*    including resources, drivers, faces, sizes, etc.                   */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A handle to the target library object.                  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Done_FreeType( FT_Library  library );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_OPEN_XXX                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A list of bit field constants used within the `flags' field of the */
-  /*    @FT_Open_Args structure.                                           */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_OPEN_MEMORY   :: This is a memory-based stream.                 */
-  /*                                                                       */
-  /*    FT_OPEN_STREAM   :: Copy the stream from the `stream' field.       */
-  /*                                                                       */
-  /*    FT_OPEN_PATHNAME :: Create a new input stream from a C~path        */
-  /*                        name.                                          */
-  /*                                                                       */
-  /*    FT_OPEN_DRIVER   :: Use the `driver' field.                        */
-  /*                                                                       */
-  /*    FT_OPEN_PARAMS   :: Use the `num_params' and `params' fields.      */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The `FT_OPEN_MEMORY', `FT_OPEN_STREAM', and `FT_OPEN_PATHNAME'     */
-  /*    flags are mutually exclusive.                                      */
-  /*                                                                       */
-#define FT_OPEN_MEMORY    0x1
-#define FT_OPEN_STREAM    0x2
-#define FT_OPEN_PATHNAME  0x4
-#define FT_OPEN_DRIVER    0x8
-#define FT_OPEN_PARAMS    0x10
-
-
-  /* these constants are deprecated; use the corresponding `FT_OPEN_XXX' */
-  /* values instead                                                      */
-#define ft_open_memory    FT_OPEN_MEMORY
-#define ft_open_stream    FT_OPEN_STREAM
-#define ft_open_pathname  FT_OPEN_PATHNAME
-#define ft_open_driver    FT_OPEN_DRIVER
-#define ft_open_params    FT_OPEN_PARAMS
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Parameter                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A simple structure to pass more or less generic parameters to      */
-  /*    @FT_Open_Face and @FT_Face_Properties.                             */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    tag  :: A four-byte identification tag.                            */
-  /*                                                                       */
-  /*    data :: A pointer to the parameter data.                           */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The ID and function of parameters are driver-specific.  See        */
-  /*    section @parameter_tags for more information.                      */
-  /*                                                                       */
-  typedef struct  FT_Parameter_
-  {
-    FT_ULong    tag;
-    FT_Pointer  data;
-
-  } FT_Parameter;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Open_Args                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to indicate how to open a new font file or stream.  A  */
-  /*    pointer to such a structure can be used as a parameter for the     */
-  /*    functions @FT_Open_Face and @FT_Attach_Stream.                     */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    flags       :: A set of bit flags indicating how to use the        */
-  /*                   structure.                                          */
-  /*                                                                       */
-  /*    memory_base :: The first byte of the file in memory.               */
-  /*                                                                       */
-  /*    memory_size :: The size in bytes of the file in memory.            */
-  /*                                                                       */
-  /*    pathname    :: A pointer to an 8-bit file pathname.                */
-  /*                                                                       */
-  /*    stream      :: A handle to a source stream object.                 */
-  /*                                                                       */
-  /*    driver      :: This field is exclusively used by @FT_Open_Face;    */
-  /*                   it simply specifies the font driver to use for      */
-  /*                   opening the face.  If set to NULL, FreeType tries   */
-  /*                   to load the face with each one of the drivers in    */
-  /*                   its list.                                           */
-  /*                                                                       */
-  /*    num_params  :: The number of extra parameters.                     */
-  /*                                                                       */
-  /*    params      :: Extra parameters passed to the font driver when     */
-  /*                   opening a new face.                                 */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The stream type is determined by the contents of `flags' that      */
-  /*    are tested in the following order by @FT_Open_Face:                */
-  /*                                                                       */
-  /*    If the @FT_OPEN_MEMORY bit is set, assume that this is a           */
-  /*    memory file of `memory_size' bytes, located at `memory_address'.   */
-  /*    The data are not copied, and the client is responsible for         */
-  /*    releasing and destroying them _after_ the corresponding call to    */
-  /*    @FT_Done_Face.                                                     */
-  /*                                                                       */
-  /*    Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a        */
-  /*    custom input stream `stream' is used.                              */
-  /*                                                                       */
-  /*    Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this   */
-  /*    is a normal file and use `pathname' to open it.                    */
-  /*                                                                       */
-  /*    If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to     */
-  /*    open the file with the driver whose handler is in `driver'.        */
-  /*                                                                       */
-  /*    If the @FT_OPEN_PARAMS bit is set, the parameters given by         */
-  /*    `num_params' and `params' is used.  They are ignored otherwise.    */
-  /*                                                                       */
-  /*    Ideally, both the `pathname' and `params' fields should be tagged  */
-  /*    as `const'; this is missing for API backward compatibility.  In    */
-  /*    other words, applications should treat them as read-only.          */
-  /*                                                                       */
-  typedef struct  FT_Open_Args_
-  {
-    FT_UInt         flags;
-    const FT_Byte*  memory_base;
-    FT_Long         memory_size;
-    FT_String*      pathname;
-    FT_Stream       stream;
-    FT_Module       driver;
-    FT_Int          num_params;
-    FT_Parameter*   params;
-
-  } FT_Open_Args;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_New_Face                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Call @FT_Open_Face to open a font by its pathname.                 */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library    :: A handle to the library resource.                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    pathname   :: A path to the font file.                             */
-  /*                                                                       */
-  /*    face_index :: See @FT_Open_Face for a detailed description of this */
-  /*                  parameter.                                           */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    aface      :: A handle to a new face object.  If `face_index' is   */
-  /*                  greater than or equal to zero, it must be non-NULL.  */
-  /*                                                                       */
-  /* <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,
-               FT_Long      face_index,
-               FT_Face     *aface );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_New_Memory_Face                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Call @FT_Open_Face to open a font that has been loaded into        */
-  /*    memory.                                                            */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library    :: A handle to the library resource.                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    file_base  :: A pointer to the beginning of the font data.         */
-  /*                                                                       */
-  /*    file_size  :: The size of the memory chunk used by the font data.  */
-  /*                                                                       */
-  /*    face_index :: See @FT_Open_Face for a detailed description of this */
-  /*                  parameter.                                           */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    aface      :: A handle to a new face object.  If `face_index' is   */
-  /*                  greater than or equal to zero, it must be non-NULL.  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    You must not deallocate the memory before calling @FT_Done_Face.   */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_New_Memory_Face( FT_Library      library,
-                      const FT_Byte*  file_base,
-                      FT_Long         file_size,
-                      FT_Long         face_index,
-                      FT_Face        *aface );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Open_Face                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Create a face object from a given resource described by            */
-  /*    @FT_Open_Args.                                                     */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library    :: A handle to the library resource.                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    args       :: A pointer to an `FT_Open_Args' structure that must   */
-  /*                  be filled by the caller.                             */
-  /*                                                                       */
-  /*    face_index :: This field holds two different values.  Bits 0-15    */
-  /*                  are the index of the face in the font file (starting */
-  /*                  with value~0).  Set it to~0 if there is only one     */
-  /*                  face in the font file.                               */
-  /*                                                                       */
-  /*                  [Since 2.6.1] Bits 16-30 are relevant to GX and      */
-  /*                  OpenType variation fonts only, specifying the named  */
-  /*                  instance index for the current face index (starting  */
-  /*                  with value~1; value~0 makes FreeType ignore named    */
-  /*                  instances).  For non-variation fonts, bits 16-30 are */
-  /*                  ignored.  Assuming that you want to access the third */
-  /*                  named instance in face~4, `face_index' should be set */
-  /*                  to 0x00030004.  If you want to access face~4 without */
-  /*                  variation handling, simply set `face_index' to       */
-  /*                  value~4.                                             */
-  /*                                                                       */
-  /*                  `FT_Open_Face' and its siblings can be used to       */
-  /*                  quickly check whether the font format of a given     */
-  /*                  font resource is supported by FreeType.  In general, */
-  /*                  if the `face_index' argument is negative, the        */
-  /*                  function's return value is~0 if the font format is   */
-  /*                  recognized, or non-zero otherwise.  The function     */
-  /*                  allocates a more or less empty face handle in        */
-  /*                  `*aface' (if `aface' isn't NULL); the only two       */
-  /*                  useful fields in this special case are               */
-  /*                  `face->num_faces' and `face->style_flags'.  For any  */
-  /*                  negative value of `face_index', `face->num_faces'    */
-  /*                  gives the number of faces within the font file.  For */
-  /*                  the negative value `-(N+1)' (with `N' a non-negative */
-  /*                  16-bit value), bits 16-30 in `face->style_flags'     */
-  /*                  give the number of named instances in face `N' if we */
-  /*                  have a variation font (or zero otherwise).  After    */
-  /*                  examination, the returned @FT_Face structure should  */
-  /*                  be deallocated with a call to @FT_Done_Face.         */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    aface      :: A handle to a new face object.  If `face_index' is   */
-  /*                  greater than or equal to zero, it must be non-NULL.  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Unlike FreeType 1.x, this function automatically creates a glyph   */
-  /*    slot for the face object that can be accessed directly through     */
-  /*    `face->glyph'.                                                     */
-  /*                                                                       */
-  /*    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.                                                */
-  /*                                                                       */
-  /*    To loop over all faces, use code similar to the following snippet  */
-  /*    (omitting the error handling).                                     */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      ...                                                              */
-  /*      FT_Face  face;                                                   */
-  /*      FT_Long  i, num_faces;                                           */
-  /*                                                                       */
-  /*                                                                       */
-  /*      error = FT_Open_Face( library, args, -1, &face );                */
-  /*      if ( error ) { ... }                                             */
-  /*                                                                       */
-  /*      num_faces = face->num_faces;                                     */
-  /*      FT_Done_Face( face );                                            */
-  /*                                                                       */
-  /*      for ( i = 0; i < num_faces; i++ )                                */
-  /*      {                                                                */
-  /*        ...                                                            */
-  /*        error = FT_Open_Face( library, args, i, &face );               */
-  /*        ...                                                            */
-  /*        FT_Done_Face( face );                                          */
-  /*        ...                                                            */
-  /*      }                                                                */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    To loop over all valid values for `face_index', use something      */
-  /*    similar to the following snippet, again without error handling.    */
-  /*    The code accesses all faces immediately (thus only a single call   */
-  /*    of `FT_Open_Face' within the do-loop), with and without named      */
-  /*    instances.                                                         */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      ...                                                              */
-  /*      FT_Face  face;                                                   */
-  /*                                                                       */
-  /*      FT_Long  num_faces     = 0;                                      */
-  /*      FT_Long  num_instances = 0;                                      */
-  /*                                                                       */
-  /*      FT_Long  face_idx     = 0;                                       */
-  /*      FT_Long  instance_idx = 0;                                       */
-  /*                                                                       */
-  /*                                                                       */
-  /*      do                                                               */
-  /*      {                                                                */
-  /*        FT_Long  id = ( instance_idx << 16 ) + face_idx;               */
-  /*                                                                       */
-  /*                                                                       */
-  /*        error = FT_Open_Face( library, args, id, &face );              */
-  /*        if ( error ) { ... }                                           */
-  /*                                                                       */
-  /*        num_faces     = face->num_faces;                               */
-  /*        num_instances = face->style_flags >> 16;                       */
-  /*                                                                       */
-  /*        ...                                                            */
-  /*                                                                       */
-  /*        FT_Done_Face( face );                                          */
-  /*                                                                       */
-  /*        if ( instance_idx < num_instances )                            */
-  /*          instance_idx++;                                              */
-  /*        else                                                           */
-  /*        {                                                              */
-  /*          face_idx++;                                                  */
-  /*          instance_idx = 0;                                            */
-  /*        }                                                              */
-  /*                                                                       */
-  /*      } while ( face_idx < num_faces )                                 */
-  /*    }                                                                  */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Open_Face( FT_Library           library,
-                const FT_Open_Args*  args,
-                FT_Long              face_index,
-                FT_Face             *aface );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Attach_File                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Call @FT_Attach_Stream to attach a file.                           */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face         :: The target face object.                            */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    filepathname :: The pathname.                                      */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Attach_File( FT_Face      face,
-                  const char*  filepathname );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Attach_Stream                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    `Attach' data to a face object.  Normally, this is used to read    */
-  /*    additional information for the face object.  For example, you can  */
-  /*    attach an AFM file that comes with a Type~1 font to get the        */
-  /*    kerning values and other metrics.                                  */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face       :: The target face object.                              */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    parameters :: A pointer to @FT_Open_Args that must be filled by    */
-  /*                  the caller.                                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The meaning of the `attach' (i.e., what really happens when the    */
-  /*    new file is read) is not fixed by FreeType itself.  It really      */
-  /*    depends on the font format (and thus the font driver).             */
-  /*                                                                       */
-  /*    Client applications are expected to know what they are doing       */
-  /*    when invoking this function.  Most drivers simply do not implement */
-  /*    file or stream attachments.                                        */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Attach_Stream( FT_Face        face,
-                    FT_Open_Args*  parameters );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Reference_Face                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A counter gets initialized to~1 at the time an @FT_Face structure  */
-  /*    is created.  This function increments the counter.  @FT_Done_Face  */
-  /*    then only destroys a face if the counter is~1, otherwise it simply */
-  /*    decrements the counter.                                            */
-  /*                                                                       */
-  /*    This function helps in managing life-cycles of structures that     */
-  /*    reference @FT_Face objects.                                        */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face :: A handle to a target face object.                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.4.2                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Reference_Face( FT_Face  face );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Done_Face                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Discard a given face object, as well as all of its child slots and */
-  /*    sizes.                                                             */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face :: A handle to a target face object.                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    See the discussion of reference counters in the description of     */
-  /*    @FT_Reference_Face.                                                */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Done_Face( FT_Face  face );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Select_Size                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Select a bitmap strike.  To be more precise, this function sets    */
-  /*    the scaling factors of the active @FT_Size object in a face so     */
-  /*    that bitmaps from this particular strike are taken by              */
-  /*    @FT_Load_Glyph and friends.                                        */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face         :: A handle to a target face object.                  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    strike_index :: The index of the bitmap strike in the              */
-  /*                    `available_sizes' field of @FT_FaceRec structure.  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    For bitmaps embedded in outline fonts it is common that only a     */
-  /*    subset of the available glyphs at a given ppem value is available. */
-  /*    FreeType silently uses outlines if there is no bitmap for a given  */
-  /*    glyph index.                                                       */
-  /*                                                                       */
-  /*    For GX and OpenType variation fonts, a bitmap strike makes sense   */
-  /*    only if the default instance is active (this is, no glyph          */
-  /*    variation takes place); otherwise, FreeType simply ignores bitmap  */
-  /*    strikes.  The same is true for all named instances that are        */
-  /*    different from the default instance.                               */
-  /*                                                                       */
-  /*    Don't use this function if you are using the FreeType cache API.   */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Select_Size( FT_Face  face,
-                  FT_Int   strike_index );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_Size_Request_Type                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An enumeration type that lists the supported size request types,   */
-  /*    i.e., what input size (in font units) maps to the requested output */
-  /*    size (in pixels, as computed from the arguments of                 */
-  /*    @FT_Size_Request).                                                 */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_SIZE_REQUEST_TYPE_NOMINAL ::                                    */
-  /*      The nominal size.  The `units_per_EM' field of @FT_FaceRec is    */
-  /*      used to determine both scaling values.                           */
-  /*                                                                       */
-  /*      This is the standard scaling found in most applications.  In     */
-  /*      particular, use this size request type for TrueType fonts if     */
-  /*      they provide optical scaling or something similar.  Note,        */
-  /*      however, that `units_per_EM' is a rather abstract value which    */
-  /*      bears no relation to the actual size of the glyphs in a font.    */
-  /*                                                                       */
-  /*    FT_SIZE_REQUEST_TYPE_REAL_DIM ::                                   */
-  /*      The real dimension.  The sum of the `ascender' and (minus of)    */
-  /*      the `descender' fields of @FT_FaceRec is used to determine both  */
-  /*      scaling values.                                                  */
-  /*                                                                       */
-  /*    FT_SIZE_REQUEST_TYPE_BBOX ::                                       */
-  /*      The font bounding box.  The width and height of the `bbox' field */
-  /*      of @FT_FaceRec are used to determine the horizontal and vertical */
-  /*      scaling value, respectively.                                     */
-  /*                                                                       */
-  /*    FT_SIZE_REQUEST_TYPE_CELL ::                                       */
-  /*      The `max_advance_width' field of @FT_FaceRec is used to          */
-  /*      determine the horizontal scaling value; the vertical scaling     */
-  /*      value is determined the same way as                              */
-  /*      @FT_SIZE_REQUEST_TYPE_REAL_DIM does.  Finally, both scaling      */
-  /*      values are set to the smaller one.  This type is useful if you   */
-  /*      want to specify the font size for, say, a window of a given      */
-  /*      dimension and 80x24 cells.                                       */
-  /*                                                                       */
-  /*    FT_SIZE_REQUEST_TYPE_SCALES ::                                     */
-  /*      Specify the scaling values directly.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The above descriptions only apply to scalable formats.  For bitmap */
-  /*    formats, the behaviour is up to the driver.                        */
-  /*                                                                       */
-  /*    See the note section of @FT_Size_Metrics if you wonder how size    */
-  /*    requesting relates to scaling values.                              */
-  /*                                                                       */
-  typedef enum  FT_Size_Request_Type_
-  {
-    FT_SIZE_REQUEST_TYPE_NOMINAL,
-    FT_SIZE_REQUEST_TYPE_REAL_DIM,
-    FT_SIZE_REQUEST_TYPE_BBOX,
-    FT_SIZE_REQUEST_TYPE_CELL,
-    FT_SIZE_REQUEST_TYPE_SCALES,
-
-    FT_SIZE_REQUEST_TYPE_MAX
-
-  } FT_Size_Request_Type;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Size_RequestRec                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model a size request.                               */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    type           :: See @FT_Size_Request_Type.                       */
-  /*                                                                       */
-  /*    width          :: The desired width, given as a 26.6 fractional    */
-  /*                      point value (with 72pt = 1in).                   */
-  /*                                                                       */
-  /*    height         :: The desired height, given as a 26.6 fractional   */
-  /*                      point value (with 72pt = 1in).                   */
-  /*                                                                       */
-  /*    horiResolution :: The horizontal resolution (dpi, i.e., pixels per */
-  /*                      inch).  If set to zero, `width' is treated as a  */
-  /*                      26.6 fractional *pixel* value, which gets        */
-  /*                      internally rounded to an integer.                */
-  /*                                                                       */
-  /*    vertResolution :: The vertical resolution (dpi, i.e., pixels per   */
-  /*                      inch).  If set to zero, `height' is treated as a */
-  /*                      26.6 fractional *pixel* value, which gets        */
-  /*                      internally rounded to an integer.                */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    If `width' is zero, the horizontal scaling value is set equal      */
-  /*    to the vertical scaling value, and vice versa.                     */
-  /*                                                                       */
-  /*    If `type' is FT_SIZE_REQUEST_TYPE_SCALES, `width' and `height' are */
-  /*    interpreted directly as 16.16 fractional scaling values, without   */
-  /*    any further modification, and both `horiResolution' and            */
-  /*    `vertResolution' are ignored.                                      */
-  /*                                                                       */
-  typedef struct  FT_Size_RequestRec_
-  {
-    FT_Size_Request_Type  type;
-    FT_Long               width;
-    FT_Long               height;
-    FT_UInt               horiResolution;
-    FT_UInt               vertResolution;
-
-  } FT_Size_RequestRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Size_Request                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a size request structure.                              */
-  /*                                                                       */
-  typedef struct FT_Size_RequestRec_  *FT_Size_Request;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Request_Size                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Resize the scale of the active @FT_Size object in a face.          */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face :: A handle to a target face object.                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    req  :: A pointer to a @FT_Size_RequestRec.                        */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Although drivers may select the bitmap strike matching the         */
-  /*    request, you should not rely on this if you intend to select a     */
-  /*    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        */
-  /*    `https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'.    */
-  /*                                                                       */
-  /*    Contrary to @FT_Set_Char_Size, this function doesn't have special  */
-  /*    code to normalize zero-valued widths, heights, or resolutions      */
-  /*    (which lead to errors in most cases).                              */
-  /*                                                                       */
-  /*    Don't use this function if you are using the FreeType cache API.   */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Request_Size( FT_Face          face,
-                   FT_Size_Request  req );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_Char_Size                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Call @FT_Request_Size to request the nominal size (in points).     */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face            :: A handle to a target face object.               */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    char_width      :: The nominal width, in 26.6 fractional points.   */
-  /*                                                                       */
-  /*    char_height     :: The nominal height, in 26.6 fractional points.  */
-  /*                                                                       */
-  /*    horz_resolution :: The horizontal resolution in dpi.               */
-  /*                                                                       */
-  /*    vert_resolution :: The vertical resolution in dpi.                 */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    While this function allows fractional points as input values, the  */
-  /*    resulting ppem value for the given resolution is always rounded to */
-  /*    the nearest integer.                                               */
-  /*                                                                       */
-  /*    If either the character width or height is zero, it is set equal   */
-  /*    to the other value.                                                */
-  /*                                                                       */
-  /*    If either the horizontal or vertical resolution is zero, it is set */
-  /*    equal to the other value.                                          */
-  /*                                                                       */
-  /*    A character width or height smaller than 1pt is set to 1pt; if     */
-  /*    both resolution values are zero, they are set to 72dpi.            */
-  /*                                                                       */
-  /*    Don't use this function if you are using the FreeType cache API.   */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Set_Char_Size( FT_Face     face,
-                    FT_F26Dot6  char_width,
-                    FT_F26Dot6  char_height,
-                    FT_UInt     horz_resolution,
-                    FT_UInt     vert_resolution );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_Pixel_Sizes                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Call @FT_Request_Size to request the nominal size (in pixels).     */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face         :: A handle to the target face object.                */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    pixel_width  :: The nominal width, in pixels.                      */
-  /*                                                                       */
-  /*    pixel_height :: The nominal height, in pixels.                     */
-  /*                                                                       */
-  /* <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.             */
-  /*                                                                       */
-  /*    Don't use this function if you are using the FreeType cache API.   */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Set_Pixel_Sizes( FT_Face  face,
-                      FT_UInt  pixel_width,
-                      FT_UInt  pixel_height );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Load_Glyph                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Load a glyph into the glyph slot of a face object.                 */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face        :: A handle to the target face object where the glyph  */
-  /*                   is loaded.                                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    glyph_index :: The index of the glyph in the font file.  For       */
-  /*                   CID-keyed fonts (either in PS or in CFF format)     */
-  /*                   this argument specifies the CID value.              */
-  /*                                                                       */
-  /*    load_flags  :: A flag indicating what to load for this glyph.  The */
-  /*                   @FT_LOAD_XXX constants can be used to control the   */
-  /*                   glyph loading process (e.g., whether the outline    */
-  /*                   should be scaled, whether to load bitmaps or not,   */
-  /*                   whether to hint the outline, etc).                  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The loaded glyph may be transformed.  See @FT_Set_Transform for    */
-  /*    the details.                                                       */
-  /*                                                                       */
-  /*    For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument' is        */
-  /*    returned for invalid CID values (this is, for CID values that      */
-  /*    don't have a corresponding glyph in the font).  See the discussion */
-  /*    of the @FT_FACE_FLAG_CID_KEYED flag for more details.              */
-  /*                                                                       */
-  /*    If you receive `FT_Err_Glyph_Too_Big', try getting the glyph       */
-  /*    outline at EM size, then scale it manually and fill it as a        */
-  /*    graphics operation.                                                */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Load_Glyph( FT_Face   face,
-                 FT_UInt   glyph_index,
-                 FT_Int32  load_flags );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Load_Char                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Load a glyph into the glyph slot of a face object, accessed by its */
-  /*    character code.                                                    */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face        :: A handle to a target face object where the glyph    */
-  /*                   is loaded.                                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    char_code   :: The glyph's character code, according to the        */
-  /*                   current charmap used in the face.                   */
-  /*                                                                       */
-  /*    load_flags  :: A flag indicating what to load for this glyph.  The */
-  /*                   @FT_LOAD_XXX constants can be used to control the   */
-  /*                   glyph loading process (e.g., whether the outline    */
-  /*                   should be scaled, whether to load bitmaps or not,   */
-  /*                   whether to hint the outline, etc).                  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph.  */
-  /*                                                                       */
-  /*    Many fonts contain glyphs that can't be loaded by this function    */
-  /*    since its glyph indices are not listed in any of the font's        */
-  /*    charmaps.                                                          */
-  /*                                                                       */
-  /*    If no active cmap is set up (i.e., `face->charmap' is zero), the   */
-  /*    call to @FT_Get_Char_Index is omitted, and the function behaves    */
-  /*    identically to @FT_Load_Glyph.                                     */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Load_Char( FT_Face   face,
-                FT_ULong  char_code,
-                FT_Int32  load_flags );
-
-
-  /*************************************************************************
-   *
-   * @enum:
-   *   FT_LOAD_XXX
-   *
-   * @description:
-   *   A list of bit field constants for @FT_Load_Glyph to indicate what
-   *   kind of operations to perform during glyph loading.
-   *
-   * @values:
-   *   FT_LOAD_DEFAULT ::
-   *     Corresponding to~0, this value is used as the default glyph load
-   *     operation.  In this case, the following happens:
-   *
-   *     1. FreeType looks for a bitmap for the glyph corresponding to the
-   *        face's current size.  If one is found, the function returns.
-   *        The bitmap data can be accessed from the glyph slot (see note
-   *        below).
-   *
-   *     2. If no embedded bitmap is searched for or found, FreeType looks
-   *        for a scalable outline.  If one is found, it is loaded from
-   *        the font file, scaled to device pixels, then `hinted' to the
-   *        pixel grid in order to optimize it.  The outline data can be
-   *        accessed from the glyph slot (see note below).
-   *
-   *     Note that by default the glyph loader doesn't render outlines into
-   *     bitmaps.  The following flags are used to modify this default
-   *     behaviour to more specific and useful cases.
-   *
-   *   FT_LOAD_NO_SCALE ::
-   *     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 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.
-   *
-   *   FT_LOAD_RENDER ::
-   *     Call @FT_Render_Glyph after the glyph is loaded.  By default, the
-   *     glyph is rendered in @FT_RENDER_MODE_NORMAL mode.  This can be
-   *     overridden by @FT_LOAD_TARGET_XXX or @FT_LOAD_MONOCHROME.
-   *
-   *     This flag is unset by @FT_LOAD_NO_SCALE.
-   *
-   *   FT_LOAD_NO_BITMAP ::
-   *     Ignore bitmap strikes when loading.  Bitmap-only fonts ignore this
-   *     flag.
-   *
-   *     @FT_LOAD_NO_SCALE always sets this flag.
-   *
-   *   FT_LOAD_VERTICAL_LAYOUT ::
-   *     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 ::
-   *     Prefer the auto-hinter over the font's native hinter.  See also
-   *     the note below.
-   *
-   *   FT_LOAD_PEDANTIC ::
-   *     Make the font driver perform pedantic verifications during glyph
-   *     loading.  This is mostly used to detect broken glyphs in fonts.
-   *     By default, FreeType tries to handle broken fonts also.
-   *
-   *     In particular, errors from the TrueType bytecode engine are not
-   *     passed to the application if this flag is not set; this might
-   *     result in partially hinted or distorted glyphs in case a glyph's
-   *     bytecode is buggy.
-   *
-   *   FT_LOAD_NO_RECURSE ::
-   *     Don't load composite glyphs recursively.  Instead, the font
-   *     driver should set the `num_subglyph' and `subglyphs' values of
-   *     the glyph slot accordingly, and set `glyph->format' to
-   *     @FT_GLYPH_FORMAT_COMPOSITE.  The description of subglyphs can
-   *     then be accessed with @FT_Get_SubGlyph_Info.
-   *
-   *     This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM.
-   *
-   *   FT_LOAD_IGNORE_TRANSFORM ::
-   *     Ignore the transform matrix set by @FT_Set_Transform.
-   *
-   *   FT_LOAD_MONOCHROME ::
-   *     This flag is used with @FT_LOAD_RENDER to indicate that you want to
-   *     render an outline glyph to a 1-bit monochrome bitmap glyph, with
-   *     8~pixels packed into each byte of the bitmap data.
-   *
-   *     Note that this has no effect on the hinting algorithm used.  You
-   *     should rather use @FT_LOAD_TARGET_MONO so that the
-   *     monochrome-optimized hinting algorithm is used.
-   *
-   *   FT_LOAD_LINEAR_DESIGN ::
-   *     Keep  `linearHoriAdvance' and `linearVertAdvance' fields of
-   *     @FT_GlyphSlotRec in font units.  See @FT_GlyphSlotRec for
-   *     details.
-   *
-   *   FT_LOAD_NO_AUTOHINT ::
-   *     Disable the auto-hinter.  See also the note below.
-   *
-   *   FT_LOAD_COLOR ::
-   *     [Since 2.5] Load embedded color bitmap images.  The resulting color
-   *     bitmaps, if available, will have the @FT_PIXEL_MODE_BGRA format.
-   *     If the flag is not set and color bitmaps are found, they are
-   *     converted to 256-level gray bitmaps transparently, using the
-   *     @FT_PIXEL_MODE_GRAY format.
-   *
-   *   FT_LOAD_COMPUTE_METRICS ::
-   *     [Since 2.6.1] Compute glyph metrics from the glyph data, without
-   *     the use of bundled metrics tables (for example, the `hdmx' table in
-   *     TrueType fonts).  This flag is mainly used by font validating or
-   *     font editing applications, which need to ignore, verify, or edit
-   *     those tables.
-   *
-   *     Currently, this flag is only implemented for TrueType fonts.
-   *
-   *   FT_LOAD_BITMAP_METRICS_ONLY ::
-   *     [Since 2.7.1] Request loading of the metrics and bitmap image
-   *     information of a (possibly embedded) bitmap glyph without
-   *     allocating or copying the bitmap image data itself.  No effect if
-   *     the target glyph is not a bitmap image.
-   *
-   *     This flag unsets @FT_LOAD_RENDER.
-   *
-   *   FT_LOAD_CROP_BITMAP ::
-   *     Ignored.  Deprecated.
-   *
-   *   FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ::
-   *     Ignored.  Deprecated.
-   *
-   * @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
-   *   disable hinting by setting @FT_LOAD_NO_HINTING or change the
-   *   precedence by setting @FT_LOAD_FORCE_AUTOHINT.  You can also set
-   *   @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be
-   *   used at all.
-   *
-   *   See the description of @FT_FACE_FLAG_TRICKY for a special exception
-   *   (affecting only a handful of Asian fonts).
-   *
-   *   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                     ( 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 )
-#define FT_LOAD_COMPUTE_METRICS              ( 1L << 21 )
-#define FT_LOAD_BITMAP_METRICS_ONLY          ( 1L << 22 )
-
-  /* */
-
-  /* used internally only by certain font drivers */
-#define FT_LOAD_ADVANCE_ONLY                 ( 1L << 8 )
-#define FT_LOAD_SBITS_ONLY                   ( 1L << 14 )
-
-
-  /**************************************************************************
-   *
-   * @enum:
-   *   FT_LOAD_TARGET_XXX
-   *
-   * @description:
-   *   A list of values to select a specific hinting algorithm for the
-   *   hinter.  You should OR one of these values to your `load_flags'
-   *   when calling @FT_Load_Glyph.
-   *
-   *   Note that a font's native hinters may ignore the hinting algorithm
-   *   you have specified (e.g., the TrueType bytecode interpreter).  You
-   *   can set @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is
-   *   used.
-   *
-   * @values:
-   *   FT_LOAD_TARGET_NORMAL ::
-   *     The default hinting algorithm, optimized for standard gray-level
-   *     rendering.  For monochrome output, use @FT_LOAD_TARGET_MONO
-   *     instead.
-   *
-   *   FT_LOAD_TARGET_LIGHT ::
-   *     A lighter hinting algorithm for gray-level modes.  Many generated
-   *     glyphs are fuzzier but better resemble their original shape.  This
-   *     is achieved by snapping glyphs to the pixel grid only vertically
-   *     (Y-axis), as is done by FreeType's new CFF engine or Microsoft's
-   *     ClearType font renderer.  This preserves inter-glyph spacing in
-   *     horizontal text.  The snapping is done either by the native font
-   *     driver, if the driver itself and the font support it, or by the
-   *     auto-hinter.
-   *
-   *     Advance widths are rounded to integer values; however, using the
-   *     `lsb_delta' and `rsb_delta' fields of @FT_GlyphSlotRec, it is
-   *     possible to get fractional advance widths for subpixel positioning
-   *     (which is recommended to use).
-   *
-   *     If configuration option AF_CONFIG_OPTION_TT_SIZE_METRICS is active,
-   *     TrueType-like metrics are used to make this mode behave similarly
-   *     as in unpatched FreeType versions between 2.4.6 and 2.7.1
-   *     (inclusive).
-   *
-   *   FT_LOAD_TARGET_MONO ::
-   *     Strong hinting algorithm that should only be used for monochrome
-   *     output.  The result is probably unpleasant if the glyph is rendered
-   *     in non-monochrome modes.
-   *
-   *   FT_LOAD_TARGET_LCD ::
-   *     A variant of @FT_LOAD_TARGET_LIGHT optimized for horizontally
-   *     decimated LCD displays.
-   *
-   *   FT_LOAD_TARGET_LCD_V ::
-   *     A variant of @FT_LOAD_TARGET_NORMAL optimized for vertically
-   *     decimated LCD displays.
-   *
-   * @note:
-   *   You should use only _one_ of the FT_LOAD_TARGET_XXX values in your
-   *   `load_flags'.  They can't be ORed.
-   *
-   *   If @FT_LOAD_RENDER is also set, the glyph is rendered in the
-   *   corresponding mode (i.e., the mode that matches the used algorithm
-   *   best).  An exception is FT_LOAD_TARGET_MONO since it implies
-   *   @FT_LOAD_MONOCHROME.
-   *
-   *   You can use a hinting algorithm that doesn't correspond to the same
-   *   rendering mode.  As an example, it is possible to use the `light'
-   *   hinting algorithm and have the results rendered in horizontal LCD
-   *   pixel mode, with code like
-   *
-   *     {
-   *       FT_Load_Glyph( face, glyph_index,
-   *                      load_flags | FT_LOAD_TARGET_LIGHT );
-   *
-   *       FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD );
-   *     }
-   *
-   *   In general, you should stick with one rendering mode.  For example,
-   *   switching between @FT_LOAD_TARGET_NORMAL and @FT_LOAD_TARGET_MONO
-   *   enforces a lot of recomputation for TrueType fonts, which is slow.
-   *   Another reason is caching: Selecting a different mode usually causes
-   *   changes in both the outlines and the rasterized bitmaps; it is thus
-   *   necessary to empty the cache after a mode switch to avoid false hits.
-   *
-   */
-#define FT_LOAD_TARGET_( x )   ( (FT_Int32)( (x) & 15 ) << 16 )
-
-#define FT_LOAD_TARGET_NORMAL  FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL )
-#define FT_LOAD_TARGET_LIGHT   FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT  )
-#define FT_LOAD_TARGET_MONO    FT_LOAD_TARGET_( FT_RENDER_MODE_MONO   )
-#define FT_LOAD_TARGET_LCD     FT_LOAD_TARGET_( FT_RENDER_MODE_LCD    )
-#define FT_LOAD_TARGET_LCD_V   FT_LOAD_TARGET_( FT_RENDER_MODE_LCD_V  )
-
-
-  /**************************************************************************
-   *
-   * @macro:
-   *   FT_LOAD_TARGET_MODE
-   *
-   * @description:
-   *   Return the @FT_Render_Mode corresponding to a given
-   *   @FT_LOAD_TARGET_XXX value.
-   *
-   */
-#define FT_LOAD_TARGET_MODE( x )  ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) )
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_Transform                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Set the transformation that is applied to glyph images when they   */
-  /*    are loaded into a glyph slot through @FT_Load_Glyph.               */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face   :: A handle to the source face object.                      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    matrix :: A pointer to the transformation's 2x2 matrix.  Use NULL  */
-  /*              for the identity matrix.                                 */
-  /*    delta  :: A pointer to the translation vector.  Use NULL for the   */
-  /*              null vector.                                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The transformation is only applied to scalable image formats after */
-  /*    the glyph has been loaded.  It means that hinting is unaltered by  */
-  /*    the transformation and is performed on the character size given in */
-  /*    the last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes.         */
-  /*                                                                       */
-  /*    Note that this also transforms the `face.glyph.advance' field, but */
-  /*    *not* the values in `face.glyph.metrics'.                          */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Set_Transform( FT_Face     face,
-                    FT_Matrix*  matrix,
-                    FT_Vector*  delta );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_Render_Mode                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Render modes supported by FreeType~2.  Each mode corresponds to a  */
-  /*    specific type of scanline conversion performed on the outline.     */
-  /*                                                                       */
-  /*    For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode'     */
-  /*    field in the @FT_GlyphSlotRec structure gives the format of the    */
-  /*    returned bitmap.                                                   */
-  /*                                                                       */
-  /*    All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity,   */
-  /*    indicating pixel coverage.  Use linear alpha blending and gamma    */
-  /*    correction to correctly render non-monochrome glyph bitmaps onto a */
-  /*    surface; see @FT_Render_Glyph.                                     */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_RENDER_MODE_NORMAL ::                                           */
-  /*      Default render mode; it corresponds to 8-bit anti-aliased        */
-  /*      bitmaps.                                                         */
-  /*                                                                       */
-  /*    FT_RENDER_MODE_LIGHT ::                                            */
-  /*      This is equivalent to @FT_RENDER_MODE_NORMAL.  It is only        */
-  /*      defined as a separate value because render modes are also used   */
-  /*      indirectly to define hinting algorithm selectors.  See           */
-  /*      @FT_LOAD_TARGET_XXX for details.                                 */
-  /*                                                                       */
-  /*    FT_RENDER_MODE_MONO ::                                             */
-  /*      This mode corresponds to 1-bit bitmaps (with 2~levels of         */
-  /*      opacity).                                                        */
-  /*                                                                       */
-  /*    FT_RENDER_MODE_LCD ::                                              */
-  /*      This mode corresponds to horizontal RGB and BGR subpixel         */
-  /*      displays like LCD screens.  It produces 8-bit bitmaps that are   */
-  /*      3~times the width of the original glyph outline in pixels, and   */
-  /*      which use the @FT_PIXEL_MODE_LCD mode.                           */
-  /*                                                                       */
-  /*    FT_RENDER_MODE_LCD_V ::                                            */
-  /*      This mode corresponds to vertical RGB and BGR subpixel displays  */
-  /*      (like PDA screens, rotated LCD displays, etc.).  It produces     */
-  /*      8-bit bitmaps that are 3~times the height of the original        */
-  /*      glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode.   */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Should you define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your      */
-  /*    `ftoption.h', which enables patented ClearType-style rendering,    */
-  /*    the LCD-optimized glyph bitmaps should be filtered to reduce color */
-  /*    fringes inherent to this technology.  You can either set up LCD    */
-  /*    filtering with @FT_Library_SetLcdFilter or @FT_Face_Properties,    */
-  /*    or do the filtering yourself.  The default FreeType LCD rendering  */
-  /*    technology does not require filtering.                             */
-  /*                                                                       */
-  /*    The selected render mode only affects vector glyphs of a font.     */
-  /*    Embedded bitmaps often have a different pixel mode like            */
-  /*    @FT_PIXEL_MODE_MONO.  You can use @FT_Bitmap_Convert to transform  */
-  /*    them into 8-bit pixmaps.                                           */
-  /*                                                                       */
-  typedef enum  FT_Render_Mode_
-  {
-    FT_RENDER_MODE_NORMAL = 0,
-    FT_RENDER_MODE_LIGHT,
-    FT_RENDER_MODE_MONO,
-    FT_RENDER_MODE_LCD,
-    FT_RENDER_MODE_LCD_V,
-
-    FT_RENDER_MODE_MAX
-
-  } FT_Render_Mode;
-
-
-  /* these constants are deprecated; use the corresponding */
-  /* `FT_Render_Mode' values instead                       */
-#define ft_render_mode_normal  FT_RENDER_MODE_NORMAL
-#define ft_render_mode_mono    FT_RENDER_MODE_MONO
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Render_Glyph                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Convert a given glyph image to a bitmap.  It does so by inspecting */
-  /*    the glyph image format, finding the relevant renderer, and         */
-  /*    invoking it.                                                       */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    slot        :: A handle to the glyph slot containing the image to  */
-  /*                   convert.                                            */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    render_mode :: The render mode used to render the glyph image into */
-  /*                   a bitmap.  See @FT_Render_Mode for a list of        */
-  /*                   possible values.                                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    To get meaningful results, font scaling values must be set with    */
-  /*    functions like @FT_Set_Char_Size before calling `FT_Render_Glyph'. */
-  /*                                                                       */
-  /*    When FreeType outputs a bitmap of a glyph, it really outputs an    */
-  /*    alpha coverage map.  If a pixel is completely covered by a         */
-  /*    filled-in outline, the bitmap contains 0xFF at that pixel, meaning */
-  /*    that 0xFF/0xFF fraction of that pixel is covered, meaning the      */
-  /*    pixel is 100% black (or 0% bright).  If a pixel is only 50%        */
-  /*    covered (value 0x80), the pixel is made 50% black (50% bright or a */
-  /*    middle shade of grey).  0% covered means 0% black (100% bright or  */
-  /*    white).                                                            */
-  /*                                                                       */
-  /*    On high-DPI screens like on smartphones and tablets, the pixels    */
-  /*    are so small that their chance of being completely covered and     */
-  /*    therefore completely black are fairly good.  On the low-DPI        */
-  /*    screens, however, the situation is different.  The pixels are too  */
-  /*    large for most of the details of a glyph and shades of gray are    */
-  /*    the norm rather than the exception.                                */
-  /*                                                                       */
-  /*    This is relevant because all our screens have a second problem:    */
-  /*    they are not linear.  1~+~1 is not~2.  Twice the value does not    */
-  /*    result in twice the brightness.  When a pixel is only 50% covered, */
-  /*    the coverage map says 50% black, and this translates to a pixel    */
-  /*    value of 128 when you use 8~bits per channel (0-255).  However,    */
-  /*    this does not translate to 50% brightness for that pixel on our    */
-  /*    sRGB and gamma~2.2 screens.  Due to their non-linearity, they      */
-  /*    dwell longer in the darks and only a pixel value of about 186      */
-  /*    results in 50% brightness -- 128 ends up too dark on both bright   */
-  /*    and dark backgrounds.  The net result is that dark text looks      */
-  /*    burnt-out, pixely and blotchy on bright background, bright text    */
-  /*    too frail on dark backgrounds, and colored text on colored         */
-  /*    background (for example, red on green) seems to have dark halos or */
-  /*    `dirt' around it.  The situation is especially ugly for diagonal   */
-  /*    stems like in `w' glyph shapes where the quality of FreeType's     */
-  /*    anti-aliasing depends on the correct display of grays.  On         */
-  /*    high-DPI screens where smaller, fully black pixels reign supreme,  */
-  /*    this doesn't matter, but on our low-DPI screens with all the gray  */
-  /*    shades, it does.  0% and 100% brightness are the same things in    */
-  /*    linear and non-linear space, just all the shades in-between        */
-  /*    aren't.                                                            */
-  /*                                                                       */
-  /*    The blending function for placing text over a background is        */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      dst = alpha * src + (1 - alpha) * dst    ,                       */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    which is known as the OVER operator.                               */
-  /*                                                                       */
-  /*    To correctly composite an antialiased pixel of a glyph onto a      */
-  /*    surface,                                                           */
-  /*                                                                       */
-  /*    1. take the foreground and background colors (e.g., in sRGB space) */
-  /*       and apply gamma to get them in a linear space,                  */
-  /*                                                                       */
-  /*    2. use OVER to blend the two linear colors using the glyph pixel   */
-  /*       as the alpha value (remember, the glyph bitmap is an alpha      */
-  /*       coverage bitmap), and                                           */
-  /*                                                                       */
-  /*    3. apply inverse gamma to the blended pixel and write it back to   */
-  /*       the image.                                                      */
-  /*                                                                       */
-  /*    Internal testing at Adobe found that a target inverse gamma of~1.8 */
-  /*    for step~3 gives good results across a wide range of displays with */
-  /*    an sRGB gamma curve or a similar one.                              */
-  /*                                                                       */
-  /*    This process can cost performance.  There is an approximation that */
-  /*    does not need to know about the background color; see              */
-  /*    https://bel.fi/alankila/lcd/ and                                   */
-  /*    https://bel.fi/alankila/lcd/alpcor.html for details.               */
-  /*                                                                       */
-  /*    *ATTENTION*: Linear blending is even more important when dealing   */
-  /*    with subpixel-rendered glyphs to prevent color-fringing!  A        */
-  /*    subpixel-rendered glyph must first be filtered with a filter that  */
-  /*    gives equal weight to the three color primaries and does not       */
-  /*    exceed a sum of 0x100, see section @lcd_filtering.  Then the       */
-  /*    only difference to gray linear blending is that subpixel-rendered  */
-  /*    linear blending is done 3~times per pixel: red foreground subpixel */
-  /*    to red background subpixel and so on for green and blue.           */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Render_Glyph( FT_GlyphSlot    slot,
-                   FT_Render_Mode  render_mode );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_Kerning_Mode                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An enumeration to specify the format of kerning values returned by */
-  /*    @FT_Get_Kerning.                                                   */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_KERNING_DEFAULT  :: Return grid-fitted kerning distances in     */
-  /*                           26.6 fractional pixels.                     */
-  /*                                                                       */
-  /*    FT_KERNING_UNFITTED :: Return un-grid-fitted kerning distances in  */
-  /*                           26.6 fractional pixels.                     */
-  /*                                                                       */
-  /*    FT_KERNING_UNSCALED :: Return the kerning vector in original font  */
-  /*                           units.                                      */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    FT_KERNING_DEFAULT returns full pixel values; it also makes        */
-  /*    FreeType heuristically scale down kerning distances at small ppem  */
-  /*    values so that they don't become too big.                          */
-  /*                                                                       */
-  /*    Both FT_KERNING_DEFAULT and FT_KERNING_UNFITTED use the current    */
-  /*    horizontal scaling factor (as set e.g. with @FT_Set_Char_Size) to  */
-  /*    convert font units to pixels.                                      */
-  /*                                                                       */
-  typedef enum  FT_Kerning_Mode_
-  {
-    FT_KERNING_DEFAULT = 0,
-    FT_KERNING_UNFITTED,
-    FT_KERNING_UNSCALED
-
-  } FT_Kerning_Mode;
-
-
-  /* these constants are deprecated; use the corresponding */
-  /* `FT_Kerning_Mode' values instead                      */
-#define ft_kerning_default   FT_KERNING_DEFAULT
-#define ft_kerning_unfitted  FT_KERNING_UNFITTED
-#define ft_kerning_unscaled  FT_KERNING_UNSCALED
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Kerning                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return the kerning vector between two glyphs of the same face.     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face        :: A handle to a source face object.                   */
-  /*                                                                       */
-  /*    left_glyph  :: The index of the left glyph in the kern pair.       */
-  /*                                                                       */
-  /*    right_glyph :: The index of the right glyph in the kern pair.      */
-  /*                                                                       */
-  /*    kern_mode   :: See @FT_Kerning_Mode for more information.          */
-  /*                   Determines the scale and dimension of the returned  */
-  /*                   kerning vector.                                     */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    akerning    :: The kerning vector.  This is either in font units,  */
-  /*                   fractional pixels (26.6 format), or pixels for      */
-  /*                   scalable formats, and in pixels for fixed-sizes     */
-  /*                   formats.                                            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Only horizontal layouts (left-to-right & right-to-left) are        */
-  /*    supported by this method.  Other layouts, or more sophisticated    */
-  /*    kernings, are out of the scope of this API function -- they can be */
-  /*    implemented through format-specific interfaces.                    */
-  /*                                                                       */
-  /*    Kerning for OpenType fonts implemented in a `GPOS' table is not    */
-  /*    supported; use @FT_HAS_KERNING to find out whether a font has data */
-  /*    that can be extracted with `FT_Get_Kerning'.                       */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Kerning( FT_Face     face,
-                  FT_UInt     left_glyph,
-                  FT_UInt     right_glyph,
-                  FT_UInt     kern_mode,
-                  FT_Vector  *akerning );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Track_Kerning                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return the track kerning for a given face object at a given size.  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face       :: A handle to a source face object.                    */
-  /*                                                                       */
-  /*    point_size :: The point size in 16.16 fractional points.           */
-  /*                                                                       */
-  /*    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, 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 Adobe's AFM specification for more details.                     */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Track_Kerning( FT_Face    face,
-                        FT_Fixed   point_size,
-                        FT_Int     degree,
-                        FT_Fixed*  akerning );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Glyph_Name                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve the ASCII name of a given glyph in a face.  This only     */
-  /*    works for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1.   */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face        :: A handle to a source face object.                   */
-  /*                                                                       */
-  /*    glyph_index :: The glyph index.                                    */
-  /*                                                                       */
-  /*    buffer_max  :: The maximum number of bytes available in the        */
-  /*                   buffer.                                             */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    buffer      :: A pointer to a target buffer where the name is      */
-  /*                   copied to.                                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    An error is returned if the face doesn't provide glyph names or if */
-  /*    the glyph index is invalid.  In all cases of failure, the first    */
-  /*    byte of `buffer' is set to~0 to indicate an empty name.            */
-  /*                                                                       */
-  /*    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 always returns an error if the config macro          */
-  /*    `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is not defined in `ftoption.h'.  */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Glyph_Name( FT_Face     face,
-                     FT_UInt     glyph_index,
-                     FT_Pointer  buffer,
-                     FT_UInt     buffer_max );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Postscript_Name                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve the ASCII PostScript name of a given face, if available.  */
-  /*    This only works with PostScript, TrueType, and OpenType fonts.     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face :: A handle to the source face object.                        */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    A pointer to the face's PostScript name.  NULL if unavailable.     */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The returned pointer is owned by the face and is destroyed with    */
-  /*    it.                                                                */
-  /*                                                                       */
-  /*    For variation fonts, this string changes if you select a different */
-  /*    instance, and you have to call `FT_Get_PostScript_Name' again to   */
-  /*    retrieve it.  FreeType follows Adobe TechNote #5902, `Generating   */
-  /*    PostScript Names for Fonts Using OpenType Font Variations'.        */
-  /*                                                                       */
-  /*      https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html */
-  /*                                                                       */
-  /*    [Since 2.9] Special PostScript names for named instances are only  */
-  /*    returned if the named instance is set with @FT_Set_Named_Instance  */
-  /*    (and the font has corresponding entries in its `fvar' table).  If  */
-  /*    @FT_IS_VARIATION returns true, the algorithmically derived         */
-  /*    PostScript name is provided, not looking up special entries for    */
-  /*    named instances.                                                   */
-  /*                                                                       */
-  FT_EXPORT( const char* )
-  FT_Get_Postscript_Name( FT_Face  face );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Select_Charmap                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Select a given charmap by its encoding tag (as listed in           */
-  /*    `freetype.h').                                                     */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face     :: A handle to the source face object.                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    encoding :: A handle to the selected encoding.                     */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function returns an error if no charmap in the face           */
-  /*    corresponds to the encoding queried here.                          */
-  /*                                                                       */
-  /*    Because many fonts contain more than a single cmap for Unicode     */
-  /*    encoding, this function has some special code to select the one    */
-  /*    that covers Unicode best (`best' in the sense that a UCS-4 cmap is */
-  /*    preferred to a UCS-2 cmap).  It is thus preferable to              */
-  /*    @FT_Set_Charmap in this case.                                      */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Select_Charmap( FT_Face      face,
-                     FT_Encoding  encoding );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_Charmap                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Select a given charmap for character code to glyph index mapping.  */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face    :: A handle to the source face object.                     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    charmap :: A handle to the selected charmap.                       */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function returns an error if the charmap is not part of       */
-  /*    the face (i.e., if it is not listed in the `face->charmaps'        */
-  /*    table).                                                            */
-  /*                                                                       */
-  /*    It also fails if an OpenType type~14 charmap is selected (which    */
-  /*    doesn't map character codes to glyph indices at all).              */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Set_Charmap( FT_Face     face,
-                  FT_CharMap  charmap );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Get_Charmap_Index
-   *
-   * @description:
-   *   Retrieve index of a given charmap.
-   *
-   * @input:
-   *   charmap ::
-   *     A handle to a charmap.
-   *
-   * @return:
-   *   The index into the array of character maps within the face to which
-   *   `charmap' belongs.  If an error occurs, -1 is returned.
-   *
-   */
-  FT_EXPORT( FT_Int )
-  FT_Get_Charmap_Index( FT_CharMap  charmap );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Char_Index                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return the glyph index of a given character code.  This function   */
-  /*    uses the currently selected charmap to do the mapping.             */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face     :: A handle to the source face object.                    */
-  /*                                                                       */
-  /*    charcode :: The character code.                                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The glyph index.  0~means `undefined character code'.              */
-  /*                                                                       */
-  /* <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'.  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,
-                     FT_ULong  charcode );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_First_Char                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return the first character code in the current charmap of a given  */
-  /*    face, together with its corresponding glyph index.                 */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face    :: A handle to the source face object.                     */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    agindex :: Glyph index of first character code.  0~if charmap is   */
-  /*               empty.                                                  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The charmap's first character code.                                */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    You should use this function together with @FT_Get_Next_Char to    */
-  /*    parse all character codes available in a given charmap.  The code  */
-  /*    should look like this:                                             */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      FT_ULong  charcode;                                              */
-  /*      FT_UInt   gindex;                                                */
-  /*                                                                       */
-  /*                                                                       */
-  /*      charcode = FT_Get_First_Char( face, &gindex );                   */
-  /*      while ( gindex != 0 )                                            */
-  /*      {                                                                */
-  /*        ... do something with (charcode,gindex) pair ...               */
-  /*                                                                       */
-  /*        charcode = FT_Get_Next_Char( face, charcode, &gindex );        */
-  /*      }                                                                */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    Be aware that character codes can have values up to 0xFFFFFFFF;    */
-  /*    this might happen for non-Unicode or malformed cmaps.  However,    */
-  /*    even with regular Unicode encoding, so-called `last resort fonts'  */
-  /*    (using SFNT cmap format 13, see function @FT_Get_CMap_Format)      */
-  /*    normally have entries for all Unicode characters up to 0x1FFFFF,   */
-  /*    which can cause *a lot* of iterations.                             */
-  /*                                                                       */
-  /*    Note that `*agindex' is set to~0 if the charmap is empty.  The     */
-  /*    result itself can be~0 in two cases: if the charmap is empty or    */
-  /*    if the value~0 is the first valid character code.                  */
-  /*                                                                       */
-  FT_EXPORT( FT_ULong )
-  FT_Get_First_Char( FT_Face   face,
-                     FT_UInt  *agindex );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Next_Char                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return the next character code in the current charmap of a given   */
-  /*    face following the value `char_code', as well as the corresponding */
-  /*    glyph index.                                                       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face      :: A handle to the source face object.                   */
-  /*                                                                       */
-  /*    char_code :: The starting character code.                          */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    agindex   :: Glyph index of next character code.  0~if charmap     */
-  /*                 is empty.                                             */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The charmap's next character code.                                 */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    You should use this function with @FT_Get_First_Char to walk       */
-  /*    over all character codes available in a given charmap.  See the    */
-  /*    note for that function for a simple code example.                  */
-  /*                                                                       */
-  /*    Note that `*agindex' is set to~0 when there are no more codes in   */
-  /*    the charmap.                                                       */
-  /*                                                                       */
-  FT_EXPORT( FT_ULong )
-  FT_Get_Next_Char( FT_Face    face,
-                    FT_ULong   char_code,
-                    FT_UInt   *agindex );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Face_Properties
-   *
-   * @description:
-   *   Set or override certain (library or module-wide) properties on a
-   *   face-by-face basis.  Useful for finer-grained control and avoiding
-   *   locks on shared structures (threads can modify their own faces as
-   *   they see fit).
-   *
-   *   Contrary to @FT_Property_Set, this function uses @FT_Parameter so
-   *   that you can pass multiple properties to the target face in one call.
-   *   Note that only a subset of the available properties can be
-   *   controlled.
-   *
-   *   * @FT_PARAM_TAG_STEM_DARKENING (stem darkening, corresponding to the
-   *     property `no-stem-darkening' provided by the `autofit', `cff',
-   *     `type1', and `t1cid' modules; see @no-stem-darkening).
-   *
-   *   * @FT_PARAM_TAG_LCD_FILTER_WEIGHTS (LCD filter weights, corresponding
-   *     to function @FT_Library_SetLcdFilterWeights).
-   *
-   *   * @FT_PARAM_TAG_RANDOM_SEED (seed value for the CFF, Type~1, and CID
-   *     `random' operator, corresponding to the `random-seed' property
-   *     provided by the `cff', `type1', and `t1cid' modules; see
-   *     @random-seed).
-   *
-   *   Pass NULL as `data' in @FT_Parameter for a given tag to reset the
-   *   option and use the library or module default again.
-   *
-   * @input:
-   *   face ::
-   *     A handle to the source face object.
-   *
-   *   num_properties ::
-   *     The number of properties that follow.
-   *
-   *   properties ::
-   *     A handle to an @FT_Parameter array with `num_properties' elements.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   Here an example that sets three properties.  You must define
-   *   FT_CONFIG_OPTION_SUBPIXEL_RENDERING to make the LCD filter examples
-   *   work.
-   *
-   *   {
-   *     FT_Parameter         property1;
-   *     FT_Bool              darken_stems = 1;
-   *
-   *     FT_Parameter         property2;
-   *     FT_LcdFiveTapFilter  custom_weight =
-   *                            { 0x11, 0x44, 0x56, 0x44, 0x11 };
-   *
-   *     FT_Parameter         property3;
-   *     FT_Int32             random_seed = 314159265;
-   *
-   *     FT_Parameter         properties[3] = { property1,
-   *                                            property2,
-   *                                            property3 };
-   *
-   *
-   *     property1.tag  = FT_PARAM_TAG_STEM_DARKENING;
-   *     property1.data = &darken_stems;
-   *
-   *     property2.tag  = FT_PARAM_TAG_LCD_FILTER_WEIGHTS;
-   *     property2.data = custom_weight;
-   *
-   *     property3.tag  = FT_PARAM_TAG_RANDOM_SEED;
-   *     property3.data = &random_seed;
-   *
-   *     FT_Face_Properties( face, 3, properties );
-   *   }
-   *
-   *   The next example resets a single property to its default value.
-   *
-   *   {
-   *     FT_Parameter  property;
-   *
-   *
-   *     property.tag  = FT_PARAM_TAG_LCD_FILTER_WEIGHTS;
-   *     property.data = NULL;
-   *
-   *     FT_Face_Properties( face, 1, &property );
-   *   }
-   *
-   * @since:
-   *   2.8
-   *
-   */
-  FT_EXPORT( FT_Error )
-  FT_Face_Properties( FT_Face        face,
-                      FT_UInt        num_properties,
-                      FT_Parameter*  properties );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Name_Index                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return the glyph index of a given glyph name.                      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face       :: A handle to the source face object.                  */
-  /*                                                                       */
-  /*    glyph_name :: The glyph name.                                      */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The glyph index.  0~means `undefined character code'.              */
-  /*                                                                       */
-  FT_EXPORT( FT_UInt )
-  FT_Get_Name_Index( FT_Face     face,
-                     FT_String*  glyph_name );
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_SUBGLYPH_FLAG_XXX
-   *
-   * @description:
-   *   A list of constants describing subglyphs.  Please refer to the
-   *   `glyf' table description in the OpenType specification for the
-   *   meaning of the various flags (which get synthesized for
-   *   non-OpenType subglyphs).
-   *
-   * @values:
-   *   FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS ::
-   *   FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES ::
-   *   FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID ::
-   *   FT_SUBGLYPH_FLAG_SCALE ::
-   *   FT_SUBGLYPH_FLAG_XY_SCALE ::
-   *   FT_SUBGLYPH_FLAG_2X2 ::
-   *   FT_SUBGLYPH_FLAG_USE_MY_METRICS ::
-   *
-   */
-#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS          1
-#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES      2
-#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID        4
-#define FT_SUBGLYPH_FLAG_SCALE                   8
-#define FT_SUBGLYPH_FLAG_XY_SCALE             0x40
-#define FT_SUBGLYPH_FLAG_2X2                  0x80
-#define FT_SUBGLYPH_FLAG_USE_MY_METRICS      0x200
-
-
-  /*************************************************************************
-   *
-   * @func:
-   *   FT_Get_SubGlyph_Info
-   *
-   * @description:
-   *   Retrieve a description of a given subglyph.  Only use it if
-   *   `glyph->format' is @FT_GLYPH_FORMAT_COMPOSITE; an error is
-   *   returned otherwise.
-   *
-   * @input:
-   *   glyph ::
-   *     The source glyph slot.
-   *
-   *   sub_index ::
-   *     The index of the subglyph.  Must be less than
-   *     `glyph->num_subglyphs'.
-   *
-   * @output:
-   *   p_index ::
-   *     The glyph index of the subglyph.
-   *
-   *   p_flags ::
-   *     The subglyph flags, see @FT_SUBGLYPH_FLAG_XXX.
-   *
-   *   p_arg1 ::
-   *     The subglyph's first argument (if any).
-   *
-   *   p_arg2 ::
-   *     The subglyph's second argument (if any).
-   *
-   *   p_transform ::
-   *     The subglyph transformation (if any).
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   The values of `*p_arg1', `*p_arg2', and `*p_transform' must be
-   *   interpreted depending on the flags returned in `*p_flags'.  See the
-   *   OpenType specification for details.
-   *
-   */
-  FT_EXPORT( FT_Error )
-  FT_Get_SubGlyph_Info( FT_GlyphSlot  glyph,
-                        FT_UInt       sub_index,
-                        FT_Int       *p_index,
-                        FT_UInt      *p_flags,
-                        FT_Int       *p_arg1,
-                        FT_Int       *p_arg2,
-                        FT_Matrix    *p_transform );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_FSTYPE_XXX                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A list of bit flags used in the `fsType' field of the OS/2 table   */
-  /*    in a TrueType or OpenType font and the `FSType' entry in a         */
-  /*    PostScript font.  These bit flags are returned by                  */
-  /*    @FT_Get_FSType_Flags; they inform client applications of embedding */
-  /*    and subsetting restrictions associated with a font.                */
-  /*                                                                       */
-  /*    See                                                                */
-  /*    https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf */
-  /*    for more details.                                                  */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_FSTYPE_INSTALLABLE_EMBEDDING ::                                 */
-  /*      Fonts with no fsType bit set may be embedded and permanently     */
-  /*      installed on the remote system by an application.                */
-  /*                                                                       */
-  /*    FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING ::                          */
-  /*      Fonts that have only this bit set must not be modified, embedded */
-  /*      or exchanged in any manner without first obtaining permission of */
-  /*      the font software copyright owner.                               */
-  /*                                                                       */
-  /*    FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING ::                           */
-  /*      The font may be embedded and temporarily loaded on the remote    */
-  /*      system.  Documents containing Preview & Print fonts must be      */
-  /*      opened `read-only'; no edits can be applied to the document.     */
-  /*                                                                       */
-  /*    FT_FSTYPE_EDITABLE_EMBEDDING ::                                    */
-  /*      The font may be embedded but must only be installed temporarily  */
-  /*      on other systems.  In contrast to Preview & Print fonts,         */
-  /*      documents containing editable fonts may be opened for reading,   */
-  /*      editing is permitted, and changes may be saved.                  */
-  /*                                                                       */
-  /*    FT_FSTYPE_NO_SUBSETTING ::                                         */
-  /*      The font may not be subsetted prior to embedding.                */
-  /*                                                                       */
-  /*    FT_FSTYPE_BITMAP_EMBEDDING_ONLY ::                                 */
-  /*      Only bitmaps contained in the font may be embedded; no outline   */
-  /*      data may be embedded.  If there are no bitmaps available in the  */
-  /*      font, then the font is unembeddable.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The flags are ORed together, thus more than a single value can be  */
-  /*    returned.                                                          */
-  /*                                                                       */
-  /*    While the `fsType' flags can indicate that a font may be embedded, */
-  /*    a license with the font vendor may be separately required to use   */
-  /*    the font in this way.                                              */
-  /*                                                                       */
-#define FT_FSTYPE_INSTALLABLE_EMBEDDING         0x0000
-#define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING  0x0002
-#define FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING   0x0004
-#define FT_FSTYPE_EDITABLE_EMBEDDING            0x0008
-#define FT_FSTYPE_NO_SUBSETTING                 0x0100
-#define FT_FSTYPE_BITMAP_EMBEDDING_ONLY         0x0200
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_FSType_Flags                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return the `fsType' flags for a font.                              */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face :: A handle to the source face object.                        */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The `fsType' flags, see @FT_FSTYPE_XXX.                            */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Use this function rather than directly reading the `fs_type' field */
-  /*    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 );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    glyph_variants                                                     */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Unicode Variation Sequences                                        */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    The FreeType~2 interface to Unicode Variation Sequences (UVS),     */
-  /*    using the SFNT cmap format~14.                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Many characters, especially for CJK scripts, have variant forms.   */
-  /*    They are a sort of grey area somewhere between being totally       */
-  /*    irrelevant and semantically distinct; for this reason, the Unicode */
-  /*    consortium decided to introduce Variation Sequences (VS),          */
-  /*    consisting of a Unicode base character and a variation selector    */
-  /*    instead of further extending the already huge number of            */
-  /*    characters.                                                        */
-  /*                                                                       */
-  /*    Unicode maintains two different sets, namely `Standardized         */
-  /*    Variation Sequences' and registered `Ideographic Variation         */
-  /*    Sequences' (IVS), collected in the `Ideographic Variation          */
-  /*    Database' (IVD).                                                   */
-  /*                                                                       */
-  /*      https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt */
-  /*      https://unicode.org/reports/tr37/                                */
-  /*      https://unicode.org/ivd/                                         */
-  /*                                                                       */
-  /*    To date (January 2017), the character with the most ideographic    */
-  /*    variations is U+9089, having 32 such IVS.                          */
-  /*                                                                       */
-  /*    Three Mongolian Variation Selectors have the values U+180B-U+180D; */
-  /*    256 generic Variation Selectors are encoded in the ranges          */
-  /*    U+FE00-U+FE0F and U+E0100-U+E01EF.  IVS currently use Variation    */
-  /*    Selectors from the range U+E0100-U+E01EF only.                     */
-  /*                                                                       */
-  /*    A VS consists of the base character value followed by a single     */
-  /*    Variation Selector.  For example, to get the first variation of    */
-  /*    U+9089, you have to write the character sequence `U+9089 U+E0100'. */
-  /*                                                                       */
-  /*    Adobe and MS decided to support both standardized and ideographic  */
-  /*    VS with a new cmap subtable (format~14).  It is an odd subtable    */
-  /*    because it is not a mapping of input code points to glyphs, but    */
-  /*    contains lists of all variations supported by the font.            */
-  /*                                                                       */
-  /*    A variation may be either `default' or `non-default' for a given   */
-  /*    font.  A default variation is the one you will get for that code   */
-  /*    point if you look it up in the standard Unicode cmap.  A           */
-  /*    non-default variation is a different glyph.                        */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Face_GetCharVariantIndex                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return the glyph index of a given character code as modified by    */
-  /*    the variation selector.                                            */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face ::                                                            */
-  /*      A handle to the source face object.                              */
-  /*                                                                       */
-  /*    charcode ::                                                        */
-  /*      The character code point in Unicode.                             */
-  /*                                                                       */
-  /*    variantSelector ::                                                 */
-  /*      The Unicode code point of the variation selector.                */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The glyph index.  0~means either `undefined character code', or    */
-  /*    `undefined selector code', or `no variation selector cmap          */
-  /*    subtable', or `current CharMap is not Unicode'.                    */
-  /*                                                                       */
-  /* <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'.                                            */
-  /*                                                                       */
-  /*    This function is only meaningful if                                */
-  /*      a) the font has a variation selector cmap sub table,             */
-  /*    and                                                                */
-  /*      b) the current charmap has a Unicode encoding.                   */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.3.6                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_UInt )
-  FT_Face_GetCharVariantIndex( FT_Face   face,
-                               FT_ULong  charcode,
-                               FT_ULong  variantSelector );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Face_GetCharVariantIsDefault                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Check whether this variation of this Unicode character is the one  */
-  /*    to be found in the `cmap'.                                         */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face ::                                                            */
-  /*      A handle to the source face object.                              */
-  /*                                                                       */
-  /*    charcode ::                                                        */
-  /*      The character codepoint in Unicode.                              */
-  /*                                                                       */
-  /*    variantSelector ::                                                 */
-  /*      The Unicode codepoint of the variation selector.                 */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    1~if found in the standard (Unicode) cmap, 0~if found in the       */
-  /*    variation selector cmap, or -1 if it is not a variation.           */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function is only meaningful if the font has a variation       */
-  /*    selector cmap subtable.                                            */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.3.6                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_Int )
-  FT_Face_GetCharVariantIsDefault( FT_Face   face,
-                                   FT_ULong  charcode,
-                                   FT_ULong  variantSelector );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Face_GetVariantSelectors                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return a zero-terminated list of Unicode variation selectors found */
-  /*    in the font.                                                       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face ::                                                            */
-  /*      A handle to the source face object.                              */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    A pointer to an array of selector code points, or NULL if there is */
-  /*    no valid variation selector cmap subtable.                         */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The last item in the array is~0; the array is owned by the         */
-  /*    @FT_Face object but can be overwritten or released on the next     */
-  /*    call to a FreeType function.                                       */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.3.6                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_UInt32* )
-  FT_Face_GetVariantSelectors( FT_Face  face );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Face_GetVariantsOfChar                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return a zero-terminated list of Unicode variation selectors found */
-  /*    for the specified character code.                                  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face ::                                                            */
-  /*      A handle to the source face object.                              */
-  /*                                                                       */
-  /*    charcode ::                                                        */
-  /*      The character codepoint in Unicode.                              */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    A pointer to an array of variation selector code points that are   */
-  /*    active for the given character, or NULL if the corresponding list  */
-  /*    is empty.                                                          */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The last item in the array is~0; the array is owned by the         */
-  /*    @FT_Face object but can be overwritten or released on the next     */
-  /*    call to a FreeType function.                                       */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.3.6                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_UInt32* )
-  FT_Face_GetVariantsOfChar( FT_Face   face,
-                             FT_ULong  charcode );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Face_GetCharsOfVariant                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return a zero-terminated list of Unicode character codes found for */
-  /*    the specified variation selector.                                  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face ::                                                            */
-  /*      A handle to the source face object.                              */
-  /*                                                                       */
-  /*    variantSelector ::                                                 */
-  /*      The variation selector code point in Unicode.                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    A list of all the code points that are specified by this selector  */
-  /*    (both default and non-default codes are returned) or NULL if there */
-  /*    is no valid cmap or the variation selector is invalid.             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The last item in the array is~0; the array is owned by the         */
-  /*    @FT_Face object but can be overwritten or released on the next     */
-  /*    call to a FreeType function.                                       */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.3.6                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_UInt32* )
-  FT_Face_GetCharsOfVariant( FT_Face   face,
-                             FT_ULong  variantSelector );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    computations                                                       */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Computations                                                       */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Crunching fixed numbers and vectors.                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains various functions used to perform            */
-  /*    computations on 16.16 fixed-float numbers or 2d vectors.           */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    FT_MulDiv                                                          */
-  /*    FT_MulFix                                                          */
-  /*    FT_DivFix                                                          */
-  /*    FT_RoundFix                                                        */
-  /*    FT_CeilFix                                                         */
-  /*    FT_FloorFix                                                        */
-  /*    FT_Vector_Transform                                                */
-  /*    FT_Matrix_Multiply                                                 */
-  /*    FT_Matrix_Invert                                                   */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_MulDiv                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Compute `(a*b)/c' with maximum accuracy, using a 64-bit            */
-  /*    intermediate integer whenever necessary.                           */
-  /*                                                                       */
-  /*    This function isn't necessarily as fast as some processor specific */
-  /*    operations, but is at least completely portable.                   */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    a :: The first multiplier.                                         */
-  /*                                                                       */
-  /*    b :: The second multiplier.                                        */
-  /*                                                                       */
-  /*    c :: The divisor.                                                  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The result of `(a*b)/c'.  This function never traps when trying to */
-  /*    divide by zero; it simply returns `MaxInt' or `MinInt' depending   */
-  /*    on the signs of `a' and `b'.                                       */
-  /*                                                                       */
-  FT_EXPORT( FT_Long )
-  FT_MulDiv( FT_Long  a,
-             FT_Long  b,
-             FT_Long  c );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_MulFix                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Compute `(a*b)/0x10000' with maximum accuracy.  Its main use is to */
-  /*    multiply a given value by a 16.16 fixed-point factor.              */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    a :: The first multiplier.                                         */
-  /*                                                                       */
-  /*    b :: The second multiplier.  Use a 16.16 factor here whenever      */
-  /*         possible (see note below).                                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The result of `(a*b)/0x10000'.                                     */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function has been optimized for the case where the absolute   */
-  /*    value of `a' is less than 2048, and `b' is a 16.16 scaling factor. */
-  /*    As this happens mainly when scaling from notional units to         */
-  /*    fractional pixels in FreeType, it resulted in noticeable speed     */
-  /*    improvements between versions 2.x and 1.x.                         */
-  /*                                                                       */
-  /*    As a conclusion, always try to place a 16.16 factor as the         */
-  /*    _second_ argument of this function; this can make a great          */
-  /*    difference.                                                        */
-  /*                                                                       */
-  FT_EXPORT( FT_Long )
-  FT_MulFix( FT_Long  a,
-             FT_Long  b );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_DivFix                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Compute `(a*0x10000)/b' with maximum accuracy.  Its main use is to */
-  /*    divide a given value by a 16.16 fixed-point factor.                */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    a :: The numerator.                                                */
-  /*                                                                       */
-  /*    b :: The denominator.  Use a 16.16 factor here.                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The result of `(a*0x10000)/b'.                                     */
-  /*                                                                       */
-  FT_EXPORT( FT_Long )
-  FT_DivFix( FT_Long  a,
-             FT_Long  b );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_RoundFix                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Round a 16.16 fixed number.                                        */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    a :: The number to be rounded.                                     */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    `a' rounded to the nearest 16.16 fixed integer, halfway cases away */
-  /*    from zero.                                                         */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The function uses wrap-around arithmetic.                          */
-  /*                                                                       */
-  FT_EXPORT( FT_Fixed )
-  FT_RoundFix( FT_Fixed  a );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_CeilFix                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Compute the smallest following integer of a 16.16 fixed number.    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    a :: The number for which the ceiling function is to be computed.  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    `a' rounded towards plus infinity.                                 */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The function uses wrap-around arithmetic.                          */
-  /*                                                                       */
-  FT_EXPORT( FT_Fixed )
-  FT_CeilFix( FT_Fixed  a );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_FloorFix                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Compute the largest previous integer of a 16.16 fixed number.      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    a :: The number for which the floor function is to be computed.    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    `a' rounded towards minus infinity.                                */
-  /*                                                                       */
-  FT_EXPORT( FT_Fixed )
-  FT_FloorFix( FT_Fixed  a );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Vector_Transform                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Transform a single vector through a 2x2 matrix.                    */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    vector :: The target vector to transform.                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    matrix :: A pointer to the source 2x2 matrix.                      */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The result is undefined if either `vector' or `matrix' is invalid. */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Vector_Transform( FT_Vector*        vec,
-                       const FT_Matrix*  matrix );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    version                                                            */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    FreeType Version                                                   */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Functions and macros related to FreeType versions.                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Note that those functions and macros are of limited use because    */
-  /*    even a new release of FreeType with only documentation changes     */
-  /*    increases the version number.                                      */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    FT_Library_Version                                                 */
-  /*                                                                       */
-  /*    FREETYPE_MAJOR                                                     */
-  /*    FREETYPE_MINOR                                                     */
-  /*    FREETYPE_PATCH                                                     */
-  /*                                                                       */
-  /*    FT_Face_CheckTrueTypePatents                                       */
-  /*    FT_Face_SetUnpatentedHinting                                       */
-  /*                                                                       */
-  /*    FREETYPE_XXX                                                       */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************
-   *
-   * @enum:
-   *   FREETYPE_XXX
-   *
-   * @description:
-   *   These three macros identify the FreeType source code version.
-   *   Use @FT_Library_Version to access them at runtime.
-   *
-   * @values:
-   *   FREETYPE_MAJOR :: The major version number.
-   *   FREETYPE_MINOR :: The minor version number.
-   *   FREETYPE_PATCH :: The patch level.
-   *
-   * @note:
-   *   The version number of FreeType if built as a dynamic link library
-   *   with the `libtool' package is _not_ controlled by these three
-   *   macros.
-   *
-   */
-#define FREETYPE_MAJOR  2
-#define FREETYPE_MINOR  9
-#define FREETYPE_PATCH  1
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Library_Version                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return the version of the FreeType library being used.  This is    */
-  /*    useful when dynamically linking to the library, since one cannot   */
-  /*    use the macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and               */
-  /*    @FREETYPE_PATCH.                                                   */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A source library handle.                                */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    amajor  :: The major version number.                               */
-  /*                                                                       */
-  /*    aminor  :: The minor version number.                               */
-  /*                                                                       */
-  /*    apatch  :: The patch version number.                               */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The reason why this function takes a `library' argument is because */
-  /*    certain programs implement library initialization in a custom way  */
-  /*    that doesn't use @FT_Init_FreeType.                                */
-  /*                                                                       */
-  /*    In such cases, the library version might not be available before   */
-  /*    the library object has been created.                               */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Library_Version( FT_Library   library,
-                      FT_Int      *amajor,
-                      FT_Int      *aminor,
-                      FT_Int      *apatch );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Face_CheckTrueTypePatents                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Deprecated, does nothing.                                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face :: A face handle.                                             */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    Always returns false.                                              */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Since May 2010, TrueType hinting is no longer patented.            */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.3.5                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_Bool )
-  FT_Face_CheckTrueTypePatents( FT_Face  face );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Face_SetUnpatentedHinting                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Deprecated, does nothing.                                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face  :: A face handle.                                            */
-  /*                                                                       */
-  /*    value :: New boolean setting.                                      */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    Always returns false.                                              */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Since May 2010, TrueType hinting is no longer patented.            */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.3.5                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_Bool )
-  FT_Face_SetUnpatentedHinting( FT_Face  face,
-                                FT_Bool  value );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FREETYPE_H_ */
-
-
-/* END */

+ 0 - 187
freetype/include/freetype/ftadvanc.h

@@ -1,187 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftadvanc.h                                                             */
-/*                                                                         */
-/*    Quick computation of advance widths (specification only).            */
-/*                                                                         */
-/*  Copyright 2008-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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 FTADVANC_H_
-#define FTADVANC_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:
-   *   quick_advance
-   *
-   * @title:
-   *   Quick retrieval of advance values
-   *
-   * @abstract:
-   *   Retrieve horizontal and vertical advance values without processing
-   *   glyph outlines, if possible.
-   *
-   * @description:
-   *   This section contains functions to quickly extract advance values
-   *   without handling glyph outlines, if possible.
-   *
-   * @order:
-   *   FT_Get_Advance
-   *   FT_Get_Advances
-   *
-   */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Const>                                                               */
-  /*    FT_ADVANCE_FLAG_FAST_ONLY                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A bit-flag to be OR-ed with the `flags' parameter of the           */
-  /*    @FT_Get_Advance and @FT_Get_Advances functions.                    */
-  /*                                                                       */
-  /*    If set, it indicates that you want these functions to fail if the  */
-  /*    corresponding hinting mode or font driver doesn't allow for very   */
-  /*    quick advance computation.                                         */
-  /*                                                                       */
-  /*    Typically, glyphs that are either unscaled, unhinted, bitmapped,   */
-  /*    or light-hinted can have their advance width computed very         */
-  /*    quickly.                                                           */
-  /*                                                                       */
-  /*    Normal and bytecode hinted modes that require loading, scaling,    */
-  /*    and hinting of the glyph outline, are extremely slow by            */
-  /*    comparison.                                                        */
-  /*                                                                       */
-#define FT_ADVANCE_FLAG_FAST_ONLY  0x20000000L
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Advance                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve the advance value of a given glyph outline in an          */
-  /*    @FT_Face.                                                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face       :: The source @FT_Face handle.                          */
-  /*                                                                       */
-  /*    gindex     :: The glyph index.                                     */
-  /*                                                                       */
-  /*    load_flags :: A set of bit flags similar to those used when        */
-  /*                  calling @FT_Load_Glyph, used to determine what kind  */
-  /*                  of advances you need.                                */
-  /* <Output>                                                              */
-  /*    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.   */
-  /*                Otherwise, it is the horizontal advance in a           */
-  /*                horizontal layout.                                     */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0 means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and   */
-  /*    if the corresponding font backend doesn't have a quick way to      */
-  /*    retrieve the advances.                                             */
-  /*                                                                       */
-  /*    A scaled advance is returned in 16.16 format but isn't transformed */
-  /*    by the affine transformation specified by @FT_Set_Transform.       */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Advance( FT_Face    face,
-                  FT_UInt    gindex,
-                  FT_Int32   load_flags,
-                  FT_Fixed  *padvance );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Advances                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve the advance values of several glyph outlines in an        */
-  /*    @FT_Face.                                                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face        :: The source @FT_Face handle.                         */
-  /*                                                                       */
-  /*    start       :: The first glyph index.                              */
-  /*                                                                       */
-  /*    count       :: The number of advance values you want to retrieve.  */
-  /*                                                                       */
-  /*    load_flags  :: A set of bit flags similar to those used when       */
-  /*                   calling @FT_Load_Glyph.                             */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    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.  */
-  /*                Otherwise, they are the horizontal advances in a       */
-  /*                horizontal layout.                                     */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0 means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and   */
-  /*    if the corresponding font backend doesn't have a quick way to      */
-  /*    retrieve the advances.                                             */
-  /*                                                                       */
-  /*    Scaled advances are returned in 16.16 format but aren't            */
-  /*    transformed by the affine transformation specified by              */
-  /*    @FT_Set_Transform.                                                 */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Advances( FT_Face    face,
-                   FT_UInt    start,
-                   FT_UInt    count,
-                   FT_Int32   load_flags,
-                   FT_Fixed  *padvances );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTADVANC_H_ */
-
-
-/* END */

+ 0 - 101
freetype/include/freetype/ftbbox.h

@@ -1,101 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftbbox.h                                                               */
-/*                                                                         */
-/*    FreeType exact bbox computation (specification).                     */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* This component has a _single_ role: to compute exact outline bounding */
-  /* boxes.                                                                */
-  /*                                                                       */
-  /* It is separated from the rest of the engine for various technical     */
-  /* reasons.  It may well be integrated in `ftoutln' later.               */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-#ifndef FTBBOX_H_
-#define FTBBOX_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>                                                             */
-  /*    outline_processing                                                 */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Get_BBox                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Compute the exact bounding box of an outline.  This is slower      */
-  /*    than computing the control box.  However, it uses an advanced      */
-  /*    algorithm that returns _very_ quickly when the two boxes           */
-  /*    coincide.  Otherwise, the outline Bezier arcs are traversed to     */
-  /*    extract their extrema.                                             */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    outline :: A pointer to the source outline.                        */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    abbox   :: The outline's exact bounding box.                       */
-  /*                                                                       */
-  /* <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 );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTBBOX_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8    */
-/* End:             */

+ 0 - 210
freetype/include/freetype/ftbdf.h

@@ -1,210 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftbdf.h                                                                */
-/*                                                                         */
-/*    FreeType API for accessing BDF-specific strings (specification).     */
-/*                                                                         */
-/*  Copyright 2002-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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 FTBDF_H_
-#define FTBDF_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>                                                             */
-  /*    bdf_fonts                                                          */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    BDF and PCF Files                                                  */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    BDF and PCF specific API.                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains the declaration of functions specific to BDF */
-  /*    and PCF fonts.                                                     */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /**********************************************************************
-   *
-   * @enum:
-   *    BDF_PropertyType
-   *
-   * @description:
-   *    A list of BDF property types.
-   *
-   * @values:
-   *    BDF_PROPERTY_TYPE_NONE ::
-   *      Value~0 is used to indicate a missing property.
-   *
-   *    BDF_PROPERTY_TYPE_ATOM ::
-   *      Property is a string atom.
-   *
-   *    BDF_PROPERTY_TYPE_INTEGER ::
-   *      Property is a 32-bit signed integer.
-   *
-   *    BDF_PROPERTY_TYPE_CARDINAL ::
-   *      Property is a 32-bit unsigned integer.
-   */
-  typedef enum  BDF_PropertyType_
-  {
-    BDF_PROPERTY_TYPE_NONE     = 0,
-    BDF_PROPERTY_TYPE_ATOM     = 1,
-    BDF_PROPERTY_TYPE_INTEGER  = 2,
-    BDF_PROPERTY_TYPE_CARDINAL = 3
-
-  } BDF_PropertyType;
-
-
-  /**********************************************************************
-   *
-   * @type:
-   *    BDF_Property
-   *
-   * @description:
-   *    A handle to a @BDF_PropertyRec structure to model a given
-   *    BDF/PCF property.
-   */
-  typedef struct BDF_PropertyRec_*  BDF_Property;
-
-
- /**********************************************************************
-  *
-  * @struct:
-  *    BDF_PropertyRec
-  *
-  * @description:
-  *    This structure models a given BDF/PCF property.
-  *
-  * @fields:
-  *    type ::
-  *      The property type.
-  *
-  *    u.atom ::
-  *      The atom string, if type is @BDF_PROPERTY_TYPE_ATOM.  May be
-  *      NULL, indicating an empty string.
-  *
-  *    u.integer ::
-  *      A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER.
-  *
-  *    u.cardinal ::
-  *      An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL.
-  */
-  typedef struct  BDF_PropertyRec_
-  {
-    BDF_PropertyType  type;
-    union {
-      const char*     atom;
-      FT_Int32        integer;
-      FT_UInt32       cardinal;
-
-    } u;
-
-  } BDF_PropertyRec;
-
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_Get_BDF_Charset_ID
-  *
-  * @description:
-  *    Retrieve a BDF font character set identity, according to
-  *    the BDF specification.
-  *
-  * @input:
-  *    face ::
-  *       A handle to the input face.
-  *
-  * @output:
-  *    acharset_encoding ::
-  *       Charset encoding, as a C~string, owned by the face.
-  *
-  *    acharset_registry ::
-  *       Charset registry, as a C~string, owned by the face.
-  *
-  * @return:
-  *   FreeType error code.  0~means success.
-  *
-  * @note:
-  *   This function only works with BDF faces, returning an error otherwise.
-  */
-  FT_EXPORT( FT_Error )
-  FT_Get_BDF_Charset_ID( FT_Face       face,
-                         const char*  *acharset_encoding,
-                         const char*  *acharset_registry );
-
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_Get_BDF_Property
-  *
-  * @description:
-  *    Retrieve a BDF property from a BDF or PCF font file.
-  *
-  * @input:
-  *    face :: A handle to the input face.
-  *
-  *    name :: The property name.
-  *
-  * @output:
-  *    aproperty :: The property.
-  *
-  * @return:
-  *   FreeType error code.  0~means success.
-  *
-  * @note:
-  *   This function works with BDF _and_ PCF fonts.  It returns an error
-  *   otherwise.  It also returns an error if the property is not in the
-  *   font.
-  *
-  *   A `property' is a either key-value pair within the STARTPROPERTIES
-  *   ... ENDPROPERTIES block of a BDF font or a key-value pair from the
-  *   `info->props' array within a `FontRec' structure of a PCF font.
-  *
-  *   Integer properties are always stored as `signed' within PCF fonts;
-  *   consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value
-  *   for BDF fonts only.
-  *
-  *   In case of error, `aproperty->type' is always set to
-  *   @BDF_PROPERTY_TYPE_NONE.
-  */
-  FT_EXPORT( FT_Error )
-  FT_Get_BDF_Property( FT_Face           face,
-                       const char*       prop_name,
-                       BDF_PropertyRec  *aproperty );
-
-  /* */
-
-FT_END_HEADER
-
-#endif /* FTBDF_H_ */
-
-
-/* END */

+ 0 - 240
freetype/include/freetype/ftbitmap.h

@@ -1,240 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftbitmap.h                                                             */
-/*                                                                         */
-/*    FreeType utility functions for bitmaps (specification).              */
-/*                                                                         */
-/*  Copyright 2004-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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 FTBITMAP_H_
-#define FTBITMAP_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>                                                             */
-  /*    bitmap_handling                                                    */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Bitmap Handling                                                    */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Handling FT_Bitmap objects.                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains functions for handling @FT_Bitmap objects.   */
-  /*    Note that none of the functions changes the bitmap's `flow' (as    */
-  /*    indicated by the sign of the `pitch' field in `FT_Bitmap').        */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Bitmap_Init                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Initialize a pointer to an @FT_Bitmap structure.                   */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    abitmap :: A pointer to the bitmap structure.                      */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    A deprecated name for the same function is `FT_Bitmap_New'.        */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Bitmap_Init( FT_Bitmap  *abitmap );
-
-
-  /* deprecated */
-  FT_EXPORT( void )
-  FT_Bitmap_New( FT_Bitmap  *abitmap );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Bitmap_Copy                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Copy a bitmap into another one.                                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A handle to a library object.                           */
-  /*                                                                       */
-  /*    source  :: A handle to the source bitmap.                          */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    target  :: A handle to the target bitmap.                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Bitmap_Copy( FT_Library        library,
-                  const FT_Bitmap  *source,
-                  FT_Bitmap        *target );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Bitmap_Embolden                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Embolden a bitmap.  The new bitmap will be about `xStrength'       */
-  /*    pixels wider and `yStrength' pixels higher.  The left and bottom   */
-  /*    borders are kept unchanged.                                        */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library   :: A handle to a library object.                         */
-  /*                                                                       */
-  /*    xStrength :: How strong the glyph is emboldened horizontally.      */
-  /*                 Expressed in 26.6 pixel format.                       */
-  /*                                                                       */
-  /*    yStrength :: How strong the glyph is emboldened vertically.        */
-  /*                 Expressed in 26.6 pixel format.                       */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    bitmap    :: A handle to the target bitmap.                        */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The current implementation restricts `xStrength' to be less than   */
-  /*    or equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO.      */
-  /*                                                                       */
-  /*    If you want to embolden the bitmap owned by a @FT_GlyphSlotRec,    */
-  /*    you should call @FT_GlyphSlot_Own_Bitmap on the slot first.        */
-  /*                                                                       */
-  /*    Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format    */
-  /*    are converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp).          */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Bitmap_Embolden( FT_Library  library,
-                      FT_Bitmap*  bitmap,
-                      FT_Pos      xStrength,
-                      FT_Pos      yStrength );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Bitmap_Convert                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    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.                         */
-  /*                                                                       */
-  /*    source    :: The source bitmap.                                    */
-  /*                                                                       */
-  /*    alignment :: The pitch of the bitmap is a multiple of this         */
-  /*                 parameter.  Common values are 1, 2, or 4.             */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    target    :: The target bitmap.                                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    It is possible to call @FT_Bitmap_Convert multiple times without   */
-  /*    calling @FT_Bitmap_Done (the memory is simply reallocated).        */
-  /*                                                                       */
-  /*    Use @FT_Bitmap_Done to finally remove the bitmap object.           */
-  /*                                                                       */
-  /*    The `library' argument is taken to have access to FreeType's       */
-  /*    memory handling functions.                                         */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Bitmap_Convert( FT_Library        library,
-                     const FT_Bitmap  *source,
-                     FT_Bitmap        *target,
-                     FT_Int            alignment );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_GlyphSlot_Own_Bitmap                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Make sure that a glyph slot owns `slot->bitmap'.                   */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    slot :: The glyph slot.                                            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function is to be used in combination with                    */
-  /*    @FT_Bitmap_Embolden.                                               */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot  slot );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Bitmap_Done                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Destroy a bitmap object initialized with @FT_Bitmap_Init.          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A handle to a library object.                           */
-  /*                                                                       */
-  /*    bitmap  :: The bitmap object to be freed.                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The `library' argument is taken to have access to FreeType's       */
-  /*    memory handling functions.                                         */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Bitmap_Done( FT_Library  library,
-                  FT_Bitmap  *bitmap );
-
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTBITMAP_H_ */
-
-
-/* END */

+ 0 - 102
freetype/include/freetype/ftbzip2.h

@@ -1,102 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftbzip2.h                                                              */
-/*                                                                         */
-/*    Bzip2-compressed stream support.                                     */
-/*                                                                         */
-/*  Copyright 2010-2018 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 */

+ 0 - 1042
freetype/include/freetype/ftcache.h

@@ -1,1042 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftcache.h                                                              */
-/*                                                                         */
-/*    FreeType Cache subsystem (specification).                            */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTCACHE_H_
-#define FTCACHE_H_
-
-
-#include <ft2build.h>
-#include FT_GLYPH_H
-
-
-FT_BEGIN_HEADER
-
-
-  /*************************************************************************
-   *
-   * <Section>
-   *    cache_subsystem
-   *
-   * <Title>
-   *    Cache Sub-System
-   *
-   * <Abstract>
-   *    How to cache face, size, and glyph data with FreeType~2.
-   *
-   * <Description>
-   *   This section describes the FreeType~2 cache sub-system, which is used
-   *   to limit the number of concurrently opened @FT_Face and @FT_Size
-   *   objects, as well as caching information like character maps and glyph
-   *   images while limiting their maximum memory usage.
-   *
-   *   Note that all types and functions begin with the `FTC_' prefix.
-   *
-   *   The cache is highly portable and thus doesn't know anything about the
-   *   fonts installed on your system, or how to access them.  This implies
-   *   the following scheme:
-   *
-   *   First, available or installed font faces are uniquely identified by
-   *   @FTC_FaceID values, provided to the cache by the client.  Note that
-   *   the cache only stores and compares these values, and doesn't try to
-   *   interpret them in any way.
-   *
-   *   Second, the cache calls, only when needed, a client-provided function
-   *   to convert an @FTC_FaceID into a new @FT_Face object.  The latter is
-   *   then completely managed by the cache, including its termination
-   *   through @FT_Done_Face.  To monitor termination of face objects, the
-   *   finalizer callback in the `generic' field of the @FT_Face object can
-   *   be used, which might also be used to store the @FTC_FaceID of the
-   *   face.
-   *
-   *   Clients are free to map face IDs to anything else.  The most simple
-   *   usage is to associate them to a (pathname,face_index) pair that is
-   *   used to call @FT_New_Face.  However, more complex schemes are also
-   *   possible.
-   *
-   *   Note that for the cache to work correctly, the face ID values must be
-   *   *persistent*, which means that the contents they point to should not
-   *   change at runtime, or that their value should not become invalid.
-   *
-   *   If this is unavoidable (e.g., when a font is uninstalled at runtime),
-   *   you should call @FTC_Manager_RemoveFaceID as soon as possible, to let
-   *   the cache get rid of any references to the old @FTC_FaceID it may
-   *   keep internally.  Failure to do so will lead to incorrect behaviour
-   *   or even crashes.
-   *
-   *   To use the cache, start with calling @FTC_Manager_New to create a new
-   *   @FTC_Manager object, which models a single cache instance.  You can
-   *   then look up @FT_Face and @FT_Size objects with
-   *   @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively.
-   *
-   *   If you want to use the charmap caching, call @FTC_CMapCache_New, then
-   *   later use @FTC_CMapCache_Lookup to perform the equivalent of
-   *   @FT_Get_Char_Index, only much faster.
-   *
-   *   If you want to use the @FT_Glyph caching, call @FTC_ImageCache, then
-   *   later use @FTC_ImageCache_Lookup to retrieve the corresponding
-   *   @FT_Glyph objects from the cache.
-   *
-   *   If you need lots of small bitmaps, it is much more memory efficient
-   *   to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup.  This
-   *   returns @FTC_SBitRec structures, which are used to store small
-   *   bitmaps directly.  (A small bitmap is one whose metrics and
-   *   dimensions all fit into 8-bit integers).
-   *
-   *   We hope to also provide a kerning cache in the near future.
-   *
-   *
-   * <Order>
-   *   FTC_Manager
-   *   FTC_FaceID
-   *   FTC_Face_Requester
-   *
-   *   FTC_Manager_New
-   *   FTC_Manager_Reset
-   *   FTC_Manager_Done
-   *   FTC_Manager_LookupFace
-   *   FTC_Manager_LookupSize
-   *   FTC_Manager_RemoveFaceID
-   *
-   *   FTC_Node
-   *   FTC_Node_Unref
-   *
-   *   FTC_ImageCache
-   *   FTC_ImageCache_New
-   *   FTC_ImageCache_Lookup
-   *
-   *   FTC_SBit
-   *   FTC_SBitCache
-   *   FTC_SBitCache_New
-   *   FTC_SBitCache_Lookup
-   *
-   *   FTC_CMapCache
-   *   FTC_CMapCache_New
-   *   FTC_CMapCache_Lookup
-   *
-   *************************************************************************/
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*****                                                               *****/
-  /*****                    BASIC TYPE DEFINITIONS                     *****/
-  /*****                                                               *****/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************
-   *
-   * @type: FTC_FaceID
-   *
-   * @description:
-   *   An opaque pointer type that is used to identity face objects.  The
-   *   contents of such objects is application-dependent.
-   *
-   *   These pointers are typically used to point to a user-defined
-   *   structure containing a font file path, and face index.
-   *
-   * @note:
-   *   Never use NULL as a valid @FTC_FaceID.
-   *
-   *   Face IDs are passed by the client to the cache manager that calls,
-   *   when needed, the @FTC_Face_Requester to translate them into new
-   *   @FT_Face objects.
-   *
-   *   If the content of a given face ID changes at runtime, or if the value
-   *   becomes invalid (e.g., when uninstalling a font), you should
-   *   immediately call @FTC_Manager_RemoveFaceID before any other cache
-   *   function.
-   *
-   *   Failure to do so will result in incorrect behaviour or even
-   *   memory leaks and crashes.
-   */
-  typedef FT_Pointer  FTC_FaceID;
-
-
-  /************************************************************************
-   *
-   * @functype:
-   *   FTC_Face_Requester
-   *
-   * @description:
-   *   A callback function provided by client applications.  It is used by
-   *   the cache manager to translate a given @FTC_FaceID into a new valid
-   *   @FT_Face object, on demand.
-   *
-   * <Input>
-   *   face_id ::
-   *     The face ID to resolve.
-   *
-   *   library ::
-   *     A handle to a FreeType library object.
-   *
-   *   req_data ::
-   *     Application-provided request data (see note below).
-   *
-   * <Output>
-   *   aface ::
-   *     A new @FT_Face handle.
-   *
-   * <Return>
-   *   FreeType error code.  0~means success.
-   *
-   * <Note>
-   *   The third parameter `req_data' is the same as the one passed by the
-   *   client when @FTC_Manager_New is called.
-   *
-   *   The face requester should not perform funny things on the returned
-   *   face object, like creating a new @FT_Size for it, or setting a
-   *   transformation through @FT_Set_Transform!
-   */
-  typedef FT_Error
-  (*FTC_Face_Requester)( FTC_FaceID  face_id,
-                         FT_Library  library,
-                         FT_Pointer  req_data,
-                         FT_Face*    aface );
-
-  /* */
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*****                                                               *****/
-  /*****                      CACHE MANAGER OBJECT                     *****/
-  /*****                                                               *****/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FTC_Manager                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This object corresponds to one instance of the cache-subsystem.    */
-  /*    It is used to cache one or more @FT_Face objects, along with       */
-  /*    corresponding @FT_Size objects.                                    */
-  /*                                                                       */
-  /*    The manager intentionally limits the total number of opened        */
-  /*    @FT_Face and @FT_Size objects to control memory usage.  See the    */
-  /*    `max_faces' and `max_sizes' parameters of @FTC_Manager_New.        */
-  /*                                                                       */
-  /*    The manager is also used to cache `nodes' of various types while   */
-  /*    limiting their total memory usage.                                 */
-  /*                                                                       */
-  /*    All limitations are enforced by keeping lists of managed objects   */
-  /*    in most-recently-used order, and flushing old nodes to make room   */
-  /*    for new ones.                                                      */
-  /*                                                                       */
-  typedef struct FTC_ManagerRec_*  FTC_Manager;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FTC_Node                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An opaque handle to a cache node object.  Each cache node is       */
-  /*    reference-counted.  A node with a count of~0 might be flushed      */
-  /*    out of a full cache whenever a lookup request is performed.        */
-  /*                                                                       */
-  /*    If you look up nodes, you have the ability to `acquire' them,      */
-  /*    i.e., to increment their reference count.  This will prevent the   */
-  /*    node from being flushed out of the cache until you explicitly      */
-  /*    `release' it (see @FTC_Node_Unref).                                */
-  /*                                                                       */
-  /*    See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup.         */
-  /*                                                                       */
-  typedef struct FTC_NodeRec_*  FTC_Node;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_Manager_New                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Create a new cache manager.                                        */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library   :: The parent FreeType library handle to use.            */
-  /*                                                                       */
-  /*    max_faces :: Maximum number of opened @FT_Face objects managed by  */
-  /*                 this cache instance.  Use~0 for defaults.             */
-  /*                                                                       */
-  /*    max_sizes :: Maximum number of opened @FT_Size objects managed by  */
-  /*                 this cache instance.  Use~0 for defaults.             */
-  /*                                                                       */
-  /*    max_bytes :: Maximum number of bytes to use for cached data nodes. */
-  /*                 Use~0 for defaults.  Note that this value does not    */
-  /*                 account for managed @FT_Face and @FT_Size objects.    */
-  /*                                                                       */
-  /*    requester :: An application-provided callback used to translate    */
-  /*                 face IDs into real @FT_Face objects.                  */
-  /*                                                                       */
-  /*    req_data  :: A generic pointer that is passed to the requester     */
-  /*                 each time it is called (see @FTC_Face_Requester).     */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    amanager  :: A handle to a new manager object.  0~in case of       */
-  /*                 failure.                                              */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FTC_Manager_New( FT_Library          library,
-                   FT_UInt             max_faces,
-                   FT_UInt             max_sizes,
-                   FT_ULong            max_bytes,
-                   FTC_Face_Requester  requester,
-                   FT_Pointer          req_data,
-                   FTC_Manager        *amanager );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_Manager_Reset                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Empty a given cache manager.  This simply gets rid of all the      */
-  /*    currently cached @FT_Face and @FT_Size objects within the manager. */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    manager :: A handle to the manager.                                */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FTC_Manager_Reset( FTC_Manager  manager );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_Manager_Done                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Destroy a given manager after emptying it.                         */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    manager :: A handle to the target cache manager object.            */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FTC_Manager_Done( FTC_Manager  manager );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_Manager_LookupFace                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve the @FT_Face object that corresponds to a given face ID   */
-  /*    through a cache manager.                                           */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    manager :: A handle to the cache manager.                          */
-  /*                                                                       */
-  /*    face_id :: The ID of the face object.                              */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    aface   :: A handle to the face object.                            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The returned @FT_Face object is always owned by the manager.  You  */
-  /*    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',  */
-  /*    use @FTC_Manager_LookupSize instead.                               */
-  /*                                                                       */
-  /*    Never change the face's transformation matrix (i.e., never call    */
-  /*    the @FT_Set_Transform function) on a returned face!  If you need   */
-  /*    to transform glyphs, do it yourself after glyph loading.           */
-  /*                                                                       */
-  /*    When you perform a lookup, out-of-memory errors are detected       */
-  /*    _within_ the lookup and force incremental flushes of the cache     */
-  /*    until enough memory is released for the lookup to succeed.         */
-  /*                                                                       */
-  /*    If a lookup fails with `FT_Err_Out_Of_Memory' the cache has        */
-  /*    already been completely flushed, and still no memory was available */
-  /*    for the operation.                                                 */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FTC_Manager_LookupFace( FTC_Manager  manager,
-                          FTC_FaceID   face_id,
-                          FT_Face     *aface );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FTC_ScalerRec                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to describe a given character size in either      */
-  /*    pixels or points to the cache manager.  See                        */
-  /*    @FTC_Manager_LookupSize.                                           */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    face_id :: The source face ID.                                     */
-  /*                                                                       */
-  /*    width   :: The character width.                                    */
-  /*                                                                       */
-  /*    height  :: The character height.                                   */
-  /*                                                                       */
-  /*    pixel   :: A Boolean.  If 1, the `width' and `height' fields are   */
-  /*               interpreted as integer pixel character sizes.           */
-  /*               Otherwise, they are expressed as 1/64th of points.      */
-  /*                                                                       */
-  /*    x_res   :: Only used when `pixel' is value~0 to indicate the       */
-  /*               horizontal resolution in dpi.                           */
-  /*                                                                       */
-  /*    y_res   :: Only used when `pixel' is value~0 to indicate the       */
-  /*               vertical resolution in dpi.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This type is mainly used to retrieve @FT_Size objects through the  */
-  /*    cache manager.                                                     */
-  /*                                                                       */
-  typedef struct  FTC_ScalerRec_
-  {
-    FTC_FaceID  face_id;
-    FT_UInt     width;
-    FT_UInt     height;
-    FT_Int      pixel;
-    FT_UInt     x_res;
-    FT_UInt     y_res;
-
-  } FTC_ScalerRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FTC_Scaler                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to an @FTC_ScalerRec structure.                           */
-  /*                                                                       */
-  typedef struct FTC_ScalerRec_*  FTC_Scaler;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_Manager_LookupSize                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve the @FT_Size object that corresponds to a given           */
-  /*    @FTC_ScalerRec pointer through a cache manager.                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    manager :: A handle to the cache manager.                          */
-  /*                                                                       */
-  /*    scaler  :: A scaler handle.                                        */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    asize   :: A handle to the size object.                            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The returned @FT_Size object is always owned by the manager.  You  */
-  /*    should never try to discard it by yourself.                        */
-  /*                                                                       */
-  /*    You can access the parent @FT_Face object simply as `size->face'   */
-  /*    if you need it.  Note that this object is also owned by the        */
-  /*    manager.                                                           */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    When you perform a lookup, out-of-memory errors are detected       */
-  /*    _within_ the lookup and force incremental flushes of the cache     */
-  /*    until enough memory is released for the lookup to succeed.         */
-  /*                                                                       */
-  /*    If a lookup fails with `FT_Err_Out_Of_Memory' the cache has        */
-  /*    already been completely flushed, and still no memory is available  */
-  /*    for the operation.                                                 */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FTC_Manager_LookupSize( FTC_Manager  manager,
-                          FTC_Scaler   scaler,
-                          FT_Size     *asize );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_Node_Unref                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Decrement a cache node's internal reference count.  When the count */
-  /*    reaches 0, it is not destroyed but becomes eligible for subsequent */
-  /*    cache flushes.                                                     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    node    :: The cache node handle.                                  */
-  /*                                                                       */
-  /*    manager :: The cache manager handle.                               */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FTC_Node_Unref( FTC_Node     node,
-                  FTC_Manager  manager );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FTC_Manager_RemoveFaceID
-   *
-   * @description:
-   *   A special function used to indicate to the cache manager that
-   *   a given @FTC_FaceID is no longer valid, either because its
-   *   content changed, or because it was deallocated or uninstalled.
-   *
-   * @input:
-   *   manager ::
-   *     The cache manager handle.
-   *
-   *   face_id ::
-   *     The @FTC_FaceID to be removed.
-   *
-   * @note:
-   *   This function flushes all nodes from the cache corresponding to this
-   *   `face_id', with the exception of nodes with a non-null reference
-   *   count.
-   *
-   *   Such nodes are however modified internally so as to never appear
-   *   in later lookups with the same `face_id' value, and to be immediately
-   *   destroyed when released by all their users.
-   *
-   */
-  FT_EXPORT( void )
-  FTC_Manager_RemoveFaceID( FTC_Manager  manager,
-                            FTC_FaceID   face_id );
-
-
-  /*************************************************************************
-   *
-   * @type:
-   *   FTC_CMapCache
-   *
-   * @description:
-   *   An opaque handle used to model a charmap cache.  This cache is to
-   *   hold character codes -> glyph indices mappings.
-   *
-   */
-  typedef struct FTC_CMapCacheRec_*  FTC_CMapCache;
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FTC_CMapCache_New
-   *
-   * @description:
-   *   Create a new charmap cache.
-   *
-   * @input:
-   *   manager ::
-   *     A handle to the cache manager.
-   *
-   * @output:
-   *   acache ::
-   *     A new cache handle.  NULL in case of error.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   Like all other caches, this one will be destroyed with the cache
-   *   manager.
-   *
-   */
-  FT_EXPORT( FT_Error )
-  FTC_CMapCache_New( FTC_Manager     manager,
-                     FTC_CMapCache  *acache );
-
-
-  /************************************************************************
-   *
-   * @function:
-   *   FTC_CMapCache_Lookup
-   *
-   * @description:
-   *   Translate a character code into a glyph index, using the charmap
-   *   cache.
-   *
-   * @input:
-   *   cache ::
-   *     A charmap cache handle.
-   *
-   *   face_id ::
-   *     The source face ID.
-   *
-   *   cmap_index ::
-   *     The index of the charmap in the source face.  Any negative value
-   *     means to use the cache @FT_Face's default charmap.
-   *
-   *   char_code ::
-   *     The character code (in the corresponding charmap).
-   *
-   * @return:
-   *    Glyph index.  0~means `no glyph'.
-   *
-   */
-  FT_EXPORT( FT_UInt )
-  FTC_CMapCache_Lookup( FTC_CMapCache  cache,
-                        FTC_FaceID     face_id,
-                        FT_Int         cmap_index,
-                        FT_UInt32      char_code );
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*****                                                               *****/
-  /*****                       IMAGE CACHE OBJECT                      *****/
-  /*****                                                               *****/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************
-   *
-   * @struct:
-   *   FTC_ImageTypeRec
-   *
-   * @description:
-   *   A structure used to model the type of images in a glyph cache.
-   *
-   * @fields:
-   *   face_id ::
-   *     The face ID.
-   *
-   *   width ::
-   *     The width in pixels.
-   *
-   *   height ::
-   *     The height in pixels.
-   *
-   *   flags ::
-   *     The load flags, as in @FT_Load_Glyph.
-   *
-   */
-  typedef struct  FTC_ImageTypeRec_
-  {
-    FTC_FaceID  face_id;
-    FT_UInt     width;
-    FT_UInt     height;
-    FT_Int32    flags;
-
-  } FTC_ImageTypeRec;
-
-
-  /*************************************************************************
-   *
-   * @type:
-   *   FTC_ImageType
-   *
-   * @description:
-   *   A handle to an @FTC_ImageTypeRec structure.
-   *
-   */
-  typedef struct FTC_ImageTypeRec_*  FTC_ImageType;
-
-
-  /* */
-
-
-#define FTC_IMAGE_TYPE_COMPARE( d1, d2 )      \
-          ( (d1)->face_id == (d2)->face_id && \
-            (d1)->width   == (d2)->width   && \
-            (d1)->flags   == (d2)->flags   )
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FTC_ImageCache                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a glyph image cache object.  They are designed to      */
-  /*    hold many distinct glyph images while not exceeding a certain      */
-  /*    memory threshold.                                                  */
-  /*                                                                       */
-  typedef struct FTC_ImageCacheRec_*  FTC_ImageCache;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_ImageCache_New                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Create a new glyph image cache.                                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    manager :: The parent manager for the image cache.                 */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    acache  :: A handle to the new glyph image cache object.           */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FTC_ImageCache_New( FTC_Manager      manager,
-                      FTC_ImageCache  *acache );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_ImageCache_Lookup                                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve a given glyph image from a glyph image cache.             */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    cache  :: A handle to the source glyph image cache.                */
-  /*                                                                       */
-  /*    type   :: A pointer to a glyph image type descriptor.              */
-  /*                                                                       */
-  /*    gindex :: The glyph index to retrieve.                             */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    aglyph :: The corresponding @FT_Glyph object.  0~in case of        */
-  /*              failure.                                                 */
-  /*                                                                       */
-  /*    anode  :: Used to return the address of the corresponding cache    */
-  /*              node after incrementing its reference count (see note    */
-  /*              below).                                                  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The returned glyph is owned and managed by the glyph image cache.  */
-  /*    Never try to transform or discard it manually!  You can however    */
-  /*    create a copy with @FT_Glyph_Copy and modify the new one.          */
-  /*                                                                       */
-  /*    If `anode' is _not_ NULL, it receives the address of the cache     */
-  /*    node containing the glyph image, after increasing its reference    */
-  /*    count.  This ensures that the node (as well as the @FT_Glyph) will */
-  /*    always be kept in the cache until you call @FTC_Node_Unref to      */
-  /*    `release' it.                                                      */
-  /*                                                                       */
-  /*    If `anode' is NULL, the cache node is left unchanged, which means  */
-  /*    that the @FT_Glyph could be flushed out of the cache on the next   */
-  /*    call to one of the caching sub-system APIs.  Don't assume that it  */
-  /*    is persistent!                                                     */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FTC_ImageCache_Lookup( FTC_ImageCache  cache,
-                         FTC_ImageType   type,
-                         FT_UInt         gindex,
-                         FT_Glyph       *aglyph,
-                         FTC_Node       *anode );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_ImageCache_LookupScaler                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec    */
-  /*    to specify the face ID and its size.                               */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    cache      :: A handle to the source glyph image cache.            */
-  /*                                                                       */
-  /*    scaler     :: A pointer to a scaler descriptor.                    */
-  /*                                                                       */
-  /*    load_flags :: The corresponding load flags.                        */
-  /*                                                                       */
-  /*    gindex     :: The glyph index to retrieve.                         */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    aglyph     :: The corresponding @FT_Glyph object.  0~in case of    */
-  /*                  failure.                                             */
-  /*                                                                       */
-  /*    anode      :: Used to return the address of the corresponding      */
-  /*                  cache node after incrementing its reference count    */
-  /*                  (see note below).                                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The returned glyph is owned and managed by the glyph image cache.  */
-  /*    Never try to transform or discard it manually!  You can however    */
-  /*    create a copy with @FT_Glyph_Copy and modify the new one.          */
-  /*                                                                       */
-  /*    If `anode' is _not_ NULL, it receives the address of the cache     */
-  /*    node containing the glyph image, after increasing its reference    */
-  /*    count.  This ensures that the node (as well as the @FT_Glyph) will */
-  /*    always be kept in the cache until you call @FTC_Node_Unref to      */
-  /*    `release' it.                                                      */
-  /*                                                                       */
-  /*    If `anode' is NULL, the cache node is left unchanged, which means  */
-  /*    that the @FT_Glyph could be flushed out of the cache on the next   */
-  /*    call to one of the caching sub-system APIs.  Don't assume that it  */
-  /*    is persistent!                                                     */
-  /*                                                                       */
-  /*    Calls to @FT_Set_Char_Size and friends have no effect on cached    */
-  /*    glyphs; you should always use the FreeType cache API instead.      */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FTC_ImageCache_LookupScaler( FTC_ImageCache  cache,
-                               FTC_Scaler      scaler,
-                               FT_ULong        load_flags,
-                               FT_UInt         gindex,
-                               FT_Glyph       *aglyph,
-                               FTC_Node       *anode );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FTC_SBit                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a small bitmap descriptor.  See the @FTC_SBitRec       */
-  /*    structure for details.                                             */
-  /*                                                                       */
-  typedef struct FTC_SBitRec_*  FTC_SBit;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FTC_SBitRec                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A very compact structure used to describe a small glyph bitmap.    */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    width     :: The bitmap width in pixels.                           */
-  /*                                                                       */
-  /*    height    :: The bitmap height in pixels.                          */
-  /*                                                                       */
-  /*    left      :: The horizontal distance from the pen position to the  */
-  /*                 left bitmap border (a.k.a. `left side bearing', or    */
-  /*                 `lsb').                                               */
-  /*                                                                       */
-  /*    top       :: The vertical distance from the pen position (on the   */
-  /*                 baseline) to the upper bitmap border (a.k.a. `top     */
-  /*                 side bearing').  The distance is positive for upwards */
-  /*                 y~coordinates.                                        */
-  /*                                                                       */
-  /*    format    :: The format of the glyph bitmap (monochrome or gray).  */
-  /*                                                                       */
-  /*    max_grays :: Maximum gray level value (in the range 1 to~255).     */
-  /*                                                                       */
-  /*    pitch     :: The number of bytes per bitmap line.  May be positive */
-  /*                 or negative.                                          */
-  /*                                                                       */
-  /*    xadvance  :: The horizontal advance width in pixels.               */
-  /*                                                                       */
-  /*    yadvance  :: The vertical advance height in pixels.                */
-  /*                                                                       */
-  /*    buffer    :: A pointer to the bitmap pixels.                       */
-  /*                                                                       */
-  typedef struct  FTC_SBitRec_
-  {
-    FT_Byte   width;
-    FT_Byte   height;
-    FT_Char   left;
-    FT_Char   top;
-
-    FT_Byte   format;
-    FT_Byte   max_grays;
-    FT_Short  pitch;
-    FT_Char   xadvance;
-    FT_Char   yadvance;
-
-    FT_Byte*  buffer;
-
-  } FTC_SBitRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FTC_SBitCache                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a small bitmap cache.  These are special cache objects */
-  /*    used to store small glyph bitmaps (and anti-aliased pixmaps) in a  */
-  /*    much more efficient way than the traditional glyph image cache     */
-  /*    implemented by @FTC_ImageCache.                                    */
-  /*                                                                       */
-  typedef struct FTC_SBitCacheRec_*  FTC_SBitCache;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_SBitCache_New                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Create a new cache to store small glyph bitmaps.                   */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    manager :: A handle to the source cache manager.                   */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    acache  :: A handle to the new sbit cache.  NULL in case of error. */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FTC_SBitCache_New( FTC_Manager     manager,
-                     FTC_SBitCache  *acache );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_SBitCache_Lookup                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Look up a given small glyph bitmap in a given sbit cache and       */
-  /*    `lock' it to prevent its flushing from the cache until needed.     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    cache  :: A handle to the source sbit cache.                       */
-  /*                                                                       */
-  /*    type   :: A pointer to the glyph image type descriptor.            */
-  /*                                                                       */
-  /*    gindex :: The glyph index.                                         */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    sbit   :: A handle to a small bitmap descriptor.                   */
-  /*                                                                       */
-  /*    anode  :: Used to return the address of the corresponding cache    */
-  /*              node after incrementing its reference count (see note    */
-  /*              below).                                                  */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The small bitmap descriptor and its bit buffer are owned by the    */
-  /*    cache and should never be freed by the application.  They might    */
-  /*    as well disappear from memory on the next cache lookup, so don't   */
-  /*    treat them as persistent data.                                     */
-  /*                                                                       */
-  /*    The descriptor's `buffer' field is set to~0 to indicate a missing  */
-  /*    glyph bitmap.                                                      */
-  /*                                                                       */
-  /*    If `anode' is _not_ NULL, it receives the address of the cache     */
-  /*    node containing the bitmap, after increasing its reference count.  */
-  /*    This ensures that the node (as well as the image) will always be   */
-  /*    kept in the cache until you call @FTC_Node_Unref to `release' it.  */
-  /*                                                                       */
-  /*    If `anode' is NULL, the cache node is left unchanged, which means  */
-  /*    that the bitmap could be flushed out of the cache on the next      */
-  /*    call to one of the caching sub-system APIs.  Don't assume that it  */
-  /*    is persistent!                                                     */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FTC_SBitCache_Lookup( FTC_SBitCache    cache,
-                        FTC_ImageType    type,
-                        FT_UInt          gindex,
-                        FTC_SBit        *sbit,
-                        FTC_Node        *anode );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FTC_SBitCache_LookupScaler                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec     */
-  /*    to specify the face ID and its size.                               */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    cache      :: A handle to the source sbit cache.                   */
-  /*                                                                       */
-  /*    scaler     :: A pointer to the scaler descriptor.                  */
-  /*                                                                       */
-  /*    load_flags :: The corresponding load flags.                        */
-  /*                                                                       */
-  /*    gindex     :: The glyph index.                                     */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    sbit       :: A handle to a small bitmap descriptor.               */
-  /*                                                                       */
-  /*    anode      :: Used to return the address of the corresponding      */
-  /*                  cache node after incrementing its reference count    */
-  /*                  (see note below).                                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The small bitmap descriptor and its bit buffer are owned by the    */
-  /*    cache and should never be freed by the application.  They might    */
-  /*    as well disappear from memory on the next cache lookup, so don't   */
-  /*    treat them as persistent data.                                     */
-  /*                                                                       */
-  /*    The descriptor's `buffer' field is set to~0 to indicate a missing  */
-  /*    glyph bitmap.                                                      */
-  /*                                                                       */
-  /*    If `anode' is _not_ NULL, it receives the address of the cache     */
-  /*    node containing the bitmap, after increasing its reference count.  */
-  /*    This ensures that the node (as well as the image) will always be   */
-  /*    kept in the cache until you call @FTC_Node_Unref to `release' it.  */
-  /*                                                                       */
-  /*    If `anode' is NULL, the cache node is left unchanged, which means  */
-  /*    that the bitmap could be flushed out of the cache on the next      */
-  /*    call to one of the caching sub-system APIs.  Don't assume that it  */
-  /*    is persistent!                                                     */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FTC_SBitCache_LookupScaler( FTC_SBitCache  cache,
-                              FTC_Scaler     scaler,
-                              FT_ULong       load_flags,
-                              FT_UInt        gindex,
-                              FTC_SBit      *sbit,
-                              FTC_Node      *anode );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTCACHE_H_ */
-
-
-/* END */

+ 0 - 139
freetype/include/freetype/ftchapters.h

@@ -1,139 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/* This file defines the structure of the FreeType reference.              */
-/* It is used by the python script that generates the HTML files.          */
-/*                                                                         */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/*                                                                         */
-/* <Chapter>                                                               */
-/*    general_remarks                                                      */
-/*                                                                         */
-/* <Title>                                                                 */
-/*    General Remarks                                                      */
-/*                                                                         */
-/* <Sections>                                                              */
-/*    header_inclusion                                                     */
-/*    user_allocation                                                      */
-/*                                                                         */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/*                                                                         */
-/* <Chapter>                                                               */
-/*    core_api                                                             */
-/*                                                                         */
-/* <Title>                                                                 */
-/*    Core API                                                             */
-/*                                                                         */
-/* <Sections>                                                              */
-/*    version                                                              */
-/*    basic_types                                                          */
-/*    base_interface                                                       */
-/*    glyph_variants                                                       */
-/*    glyph_management                                                     */
-/*    mac_specific                                                         */
-/*    sizes_management                                                     */
-/*    header_file_macros                                                   */
-/*                                                                         */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/*                                                                         */
-/* <Chapter>                                                               */
-/*    format_specific                                                      */
-/*                                                                         */
-/* <Title>                                                                 */
-/*    Format-Specific API                                                  */
-/*                                                                         */
-/* <Sections>                                                              */
-/*    multiple_masters                                                     */
-/*    truetype_tables                                                      */
-/*    type1_tables                                                         */
-/*    sfnt_names                                                           */
-/*    bdf_fonts                                                            */
-/*    cid_fonts                                                            */
-/*    pfr_fonts                                                            */
-/*    winfnt_fonts                                                         */
-/*    font_formats                                                         */
-/*    gasp_table                                                           */
-/*                                                                         */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/*                                                                         */
-/* <Chapter>                                                               */
-/*    module_specific                                                      */
-/*                                                                         */
-/* <Title>                                                                 */
-/*    Controlling FreeType Modules                                         */
-/*                                                                         */
-/* <Sections>                                                              */
-/*    auto_hinter                                                          */
-/*    cff_driver                                                           */
-/*    t1_cid_driver                                                        */
-/*    tt_driver                                                            */
-/*    pcf_driver                                                           */
-/*    properties                                                           */
-/*    parameter_tags                                                       */
-/*                                                                         */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/*                                                                         */
-/* <Chapter>                                                               */
-/*    cache_subsystem                                                      */
-/*                                                                         */
-/* <Title>                                                                 */
-/*    Cache Sub-System                                                     */
-/*                                                                         */
-/* <Sections>                                                              */
-/*    cache_subsystem                                                      */
-/*                                                                         */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/*                                                                         */
-/* <Chapter>                                                               */
-/*    support_api                                                          */
-/*                                                                         */
-/* <Title>                                                                 */
-/*    Support API                                                          */
-/*                                                                         */
-/* <Sections>                                                              */
-/*    computations                                                         */
-/*    list_processing                                                      */
-/*    outline_processing                                                   */
-/*    quick_advance                                                        */
-/*    bitmap_handling                                                      */
-/*    raster                                                               */
-/*    glyph_stroker                                                        */
-/*    system_interface                                                     */
-/*    module_management                                                    */
-/*    gzip                                                                 */
-/*    lzw                                                                  */
-/*    bzip2                                                                */
-/*    lcd_filtering                                                        */
-/*                                                                         */
-/***************************************************************************/
-
-/***************************************************************************/
-/*                                                                         */
-/* <Chapter>                                                               */
-/*    error_codes                                                          */
-/*                                                                         */
-/* <Title>                                                                 */
-/*    Error Codes                                                          */
-/*                                                                         */
-/* <Sections>                                                              */
-/*    error_enumerations                                                   */
-/*    error_code_values                                                    */
-/*                                                                         */
-/***************************************************************************/

+ 0 - 168
freetype/include/freetype/ftcid.h

@@ -1,168 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftcid.h                                                                */
-/*                                                                         */
-/*    FreeType API for accessing CID font information (specification).     */
-/*                                                                         */
-/*  Copyright 2007-2018 by                                                 */
-/*  Dereg Clegg and 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      */
-/*  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 FTCID_H_
-#define FTCID_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>                                                             */
-  /*    cid_fonts                                                          */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    CID Fonts                                                          */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    CID-keyed font specific API.                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains the declaration of CID-keyed font specific   */
-  /*    functions.                                                         */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /**********************************************************************
-   *
-   * @function:
-   *    FT_Get_CID_Registry_Ordering_Supplement
-   *
-   * @description:
-   *    Retrieve the Registry/Ordering/Supplement triple (also known as the
-   *    "R/O/S") from a CID-keyed font.
-   *
-   * @input:
-   *    face ::
-   *       A handle to the input face.
-   *
-   * @output:
-   *    registry ::
-   *       The registry, as a C~string, owned by the face.
-   *
-   *    ordering ::
-   *       The ordering, as a C~string, owned by the face.
-   *
-   *    supplement ::
-   *       The supplement.
-   *
-   * @return:
-   *    FreeType error code.  0~means success.
-   *
-   * @note:
-   *    This function only works with CID faces, returning an error
-   *    otherwise.
-   *
-   * @since:
-   *    2.3.6
-   */
-  FT_EXPORT( FT_Error )
-  FT_Get_CID_Registry_Ordering_Supplement( FT_Face       face,
-                                           const char*  *registry,
-                                           const char*  *ordering,
-                                           FT_Int       *supplement );
-
-
-  /**********************************************************************
-   *
-   * @function:
-   *    FT_Get_CID_Is_Internally_CID_Keyed
-   *
-   * @description:
-   *    Retrieve the type of the input face, CID keyed or not.  In
-   *    contrast to the @FT_IS_CID_KEYED macro this function returns
-   *    successfully also for CID-keyed fonts in an SFNT wrapper.
-   *
-   * @input:
-   *    face ::
-   *       A handle to the input face.
-   *
-   * @output:
-   *    is_cid ::
-   *       The type of the face as an @FT_Bool.
-   *
-   * @return:
-   *    FreeType error code.  0~means success.
-   *
-   * @note:
-   *    This function only works with CID faces and OpenType fonts,
-   *    returning an error otherwise.
-   *
-   * @since:
-   *    2.3.9
-   */
-  FT_EXPORT( FT_Error )
-  FT_Get_CID_Is_Internally_CID_Keyed( FT_Face   face,
-                                      FT_Bool  *is_cid );
-
-
-  /**********************************************************************
-   *
-   * @function:
-   *    FT_Get_CID_From_Glyph_Index
-   *
-   * @description:
-   *    Retrieve the CID of the input glyph index.
-   *
-   * @input:
-   *    face ::
-   *       A handle to the input face.
-   *
-   *    glyph_index ::
-   *       The input glyph index.
-   *
-   * @output:
-   *    cid ::
-   *       The CID as an @FT_UInt.
-   *
-   * @return:
-   *    FreeType error code.  0~means success.
-   *
-   * @note:
-   *    This function only works with CID faces and OpenType fonts,
-   *    returning an error otherwise.
-   *
-   * @since:
-   *    2.3.9
-   */
-  FT_EXPORT( FT_Error )
-  FT_Get_CID_From_Glyph_Index( FT_Face   face,
-                               FT_UInt   glyph_index,
-                               FT_UInt  *cid );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTCID_H_ */
-
-
-/* END */

+ 0 - 1225
freetype/include/freetype/ftdriver.h

@@ -1,1225 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftdriver.h                                                             */
-/*                                                                         */
-/*    FreeType API for controlling driver modules (specification only).    */
-/*                                                                         */
-/*  Copyright 2017-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTDRIVER_H_
-#define FTDRIVER_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_PARAMETER_TAGS_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
-  /**************************************************************************
-   *
-   * @section:
-   *   auto_hinter
-   *
-   * @title:
-   *   The auto-hinter
-   *
-   * @abstract:
-   *   Controlling the auto-hinting module.
-   *
-   * @description:
-   *   While FreeType's auto-hinter doesn't expose API functions by itself,
-   *   it is possible to control its behaviour with @FT_Property_Set and
-   *   @FT_Property_Get.  The following lists the available properties
-   *   together with the necessary macros and structures.
-   *
-   *   Note that the auto-hinter's module name is `autofitter' for
-   *   historical reasons.
-   *
-   *   Available properties are @increase-x-height, @no-stem-darkening
-   *   (experimental), @darkening-parameters (experimental), @warping
-   *   (experimental), @glyph-to-script-map (experimental), @fallback-script
-   *   (experimental), and @default-script (experimental), as documented in
-   *   the @properties section.
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @section:
-   *   cff_driver
-   *
-   * @title:
-   *   The CFF driver
-   *
-   * @abstract:
-   *   Controlling the CFF driver module.
-   *
-   * @description:
-   *   While FreeType's CFF driver doesn't expose API functions by itself,
-   *   it is possible to control its behaviour with @FT_Property_Set and
-   *   @FT_Property_Get.
-   *
-   *   The CFF driver's module name is `cff'.
-   *
-   *   Available properties are @hinting-engine, @no-stem-darkening,
-   *   @darkening-parameters, and @random-seed, as documented in the
-   *   @properties section.
-   *
-   *
-   *   *Hinting* *and* *antialiasing* *principles* *of* *the* *new* *engine*
-   *
-   *   The rasterizer is positioning horizontal features (e.g., ascender
-   *   height & x-height, or crossbars) on the pixel grid and minimizing the
-   *   amount of antialiasing applied to them, while placing vertical
-   *   features (vertical stems) on the pixel grid without hinting, thus
-   *   representing the stem position and weight accurately.  Sometimes the
-   *   vertical stems may be only partially black.  In this context,
-   *   `antialiasing' means that stems are not positioned exactly on pixel
-   *   borders, causing a fuzzy appearance.
-   *
-   *   There are two principles behind this approach.
-   *
-   *   1) No hinting in the horizontal direction: Unlike `superhinted'
-   *   TrueType, which changes glyph widths to accommodate regular
-   *   inter-glyph spacing, Adobe's approach is `faithful to the design' in
-   *   representing both the glyph width and the inter-glyph spacing
-   *   designed for the font.  This makes the screen display as close as it
-   *   can be to the result one would get with infinite resolution, while
-   *   preserving what is considered the key characteristics of each glyph.
-   *   Note that the distances between unhinted and grid-fitted positions at
-   *   small sizes are comparable to kerning values and thus would be
-   *   noticeable (and distracting) while reading if hinting were applied.
-   *
-   *   One of the reasons to not hint horizontally is antialiasing for LCD
-   *   screens: The pixel geometry of modern displays supplies three
-   *   vertical subpixels as the eye moves horizontally across each visible
-   *   pixel.  On devices where we can be certain this characteristic is
-   *   present a rasterizer can take advantage of the subpixels to add
-   *   increments of weight.  In Western writing systems this turns out to
-   *   be the more critical direction anyway; the weights and spacing of
-   *   vertical stems (see above) are central to Armenian, Cyrillic, Greek,
-   *   and Latin type designs.  Even when the rasterizer uses greyscale
-   *   antialiasing instead of color (a necessary compromise when one
-   *   doesn't know the screen characteristics), the unhinted vertical
-   *   features preserve the design's weight and spacing much better than
-   *   aliased type would.
-   *
-   *   2) Alignment in the vertical direction: Weights and spacing along the
-   *   y~axis are less critical; what is much more important is the visual
-   *   alignment of related features (like cap-height and x-height).  The
-   *   sense of alignment for these is enhanced by the sharpness of grid-fit
-   *   edges, while the cruder vertical resolution (full pixels instead of
-   *   1/3 pixels) is less of a problem.
-   *
-   *   On the technical side, horizontal alignment zones for ascender,
-   *   x-height, and other important height values (traditionally called
-   *   `blue zones') as defined in the font are positioned independently,
-   *   each being rounded to the nearest pixel edge, taking care of
-   *   overshoot suppression at small sizes, stem darkening, and scaling.
-   *
-   *   Hstems (this is, hint values defined in the font to help align
-   *   horizontal features) that fall within a blue zone are said to be
-   *   `captured' and are aligned to that zone.  Uncaptured stems are moved
-   *   in one of four ways, top edge up or down, bottom edge up or down.
-   *   Unless there are conflicting hstems, the smallest movement is taken
-   *   to minimize distortion.
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @section:
-   *   pcf_driver
-   *
-   * @title:
-   *   The PCF driver
-   *
-   * @abstract:
-   *   Controlling the PCF driver module.
-   *
-   * @description:
-   *   While FreeType's PCF driver doesn't expose API functions by itself,
-   *   it is possible to control its behaviour with @FT_Property_Set and
-   *   @FT_Property_Get.  Right now, there is a single property
-   *   @no-long-family-names available if FreeType is compiled with
-   *   PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.
-   *
-   *   The PCF driver's module name is `pcf'.
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @section:
-   *   t1_cid_driver
-   *
-   * @title:
-   *   The Type 1 and CID drivers
-   *
-   * @abstract:
-   *   Controlling the Type~1 and CID driver modules.
-   *
-   * @description:
-   *   It is possible to control the behaviour of FreeType's Type~1 and
-   *   Type~1 CID drivers with @FT_Property_Set and @FT_Property_Get.
-   *
-   *   Behind the scenes, both drivers use the Adobe CFF engine for hinting;
-   *   however, the used properties must be specified separately.
-   *
-   *   The Type~1 driver's module name is `type1'; the CID driver's module
-   *   name is `t1cid'.
-   *
-   *   Available properties are @hinting-engine, @no-stem-darkening,
-   *   @darkening-parameters, and @random-seed, as documented in the
-   *   @properties section.
-   *
-   *   Please see the @cff_driver section for more details on the new
-   *   hinting engine.
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @section:
-   *   tt_driver
-   *
-   * @title:
-   *   The TrueType driver
-   *
-   * @abstract:
-   *   Controlling the TrueType driver module.
-   *
-   * @description:
-   *   While FreeType's TrueType driver doesn't expose API functions by
-   *   itself, it is possible to control its behaviour with @FT_Property_Set
-   *   and @FT_Property_Get.  The following lists the available properties
-   *   together with the necessary macros and structures.
-   *
-   *   The TrueType driver's module name is `truetype'.
-   *
-   *   A single property @interpreter-version is available, as documented in
-   *   the @properties section.
-   *
-   *   We start with a list of definitions, kindly provided by Greg
-   *   Hitchcock.
-   *
-   *   _Bi-Level_ _Rendering_
-   *
-   *   Monochromatic rendering, exclusively used in the early days of
-   *   TrueType by both Apple and Microsoft.  Microsoft's GDI interface
-   *   supported hinting of the right-side bearing point, such that the
-   *   advance width could be non-linear.  Most often this was done to
-   *   achieve some level of glyph symmetry.  To enable reasonable
-   *   performance (e.g., not having to run hinting on all glyphs just to
-   *   get the widths) there was a bit in the head table indicating if the
-   *   side bearing was hinted, and additional tables, `hdmx' and `LTSH', to
-   *   cache hinting widths across multiple sizes and device aspect ratios.
-   *
-   *   _Font_ _Smoothing_
-   *
-   *   Microsoft's GDI implementation of anti-aliasing.  Not traditional
-   *   anti-aliasing as the outlines were hinted before the sampling.  The
-   *   widths matched the bi-level rendering.
-   *
-   *   _ClearType_ _Rendering_
-   *
-   *   Technique that uses physical subpixels to improve rendering on LCD
-   *   (and other) displays.  Because of the higher resolution, many methods
-   *   of improving symmetry in glyphs through hinting the right-side
-   *   bearing were no longer necessary.  This lead to what GDI calls
-   *   `natural widths' ClearType, see
-   *   http://www.beatstamm.com/typography/RTRCh4.htm#Sec21.  Since hinting
-   *   has extra resolution, most non-linearity went away, but it is still
-   *   possible for hints to change the advance widths in this mode.
-   *
-   *   _ClearType_ _Compatible_ _Widths_
-   *
-   *   One of the earliest challenges with ClearType was allowing the
-   *   implementation in GDI to be selected without requiring all UI and
-   *   documents to reflow.  To address this, a compatible method of
-   *   rendering ClearType was added where the font hints are executed once
-   *   to determine the width in bi-level rendering, and then re-run in
-   *   ClearType, with the difference in widths being absorbed in the font
-   *   hints for ClearType (mostly in the white space of hints); see
-   *   http://www.beatstamm.com/typography/RTRCh4.htm#Sec20.  Somewhat by
-   *   definition, compatible width ClearType allows for non-linear widths,
-   *   but only when the bi-level version has non-linear widths.
-   *
-   *   _ClearType_ _Subpixel_ _Positioning_
-   *
-   *   One of the nice benefits of ClearType is the ability to more crisply
-   *   display fractional widths; unfortunately, the GDI model of integer
-   *   bitmaps did not support this.  However, the WPF and Direct Write
-   *   frameworks do support fractional widths.  DWrite calls this `natural
-   *   mode', not to be confused with GDI's `natural widths'.  Subpixel
-   *   positioning, in the current implementation of Direct Write,
-   *   unfortunately does not support hinted advance widths, see
-   *   http://www.beatstamm.com/typography/RTRCh4.htm#Sec22.  Note that the
-   *   TrueType interpreter fully allows the advance width to be adjusted in
-   *   this mode, just the DWrite client will ignore those changes.
-   *
-   *   _ClearType_ _Backward_ _Compatibility_
-   *
-   *   This is a set of exceptions made in the TrueType interpreter to
-   *   minimize hinting techniques that were problematic with the extra
-   *   resolution of ClearType; see
-   *   http://www.beatstamm.com/typography/RTRCh4.htm#Sec1 and
-   *   https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx.
-   *   This technique is not to be confused with ClearType compatible
-   *   widths.  ClearType backward compatibility has no direct impact on
-   *   changing advance widths, but there might be an indirect impact on
-   *   disabling some deltas.  This could be worked around in backward
-   *   compatibility mode.
-   *
-   *   _Native_ _ClearType_ _Mode_
-   *
-   *   (Not to be confused with `natural widths'.)  This mode removes all
-   *   the exceptions in the TrueType interpreter when running with
-   *   ClearType.  Any issues on widths would still apply, though.
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @section:
-   *   properties
-   *
-   * @title:
-   *   Driver properties
-   *
-   * @abstract:
-   *   Controlling driver modules.
-   *
-   * @description:
-   *   Driver modules can be controlled by setting and unsetting properties,
-   *   using the functions @FT_Property_Set and @FT_Property_Get.  This
-   *   section documents the available properties, together with auxiliary
-   *   macros and structures.
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @enum:
-   *   FT_HINTING_XXX
-   *
-   * @description:
-   *   A list of constants used for the @hinting-engine property to
-   *   select the hinting engine for CFF, Type~1, and CID fonts.
-   *
-   * @values:
-   *   FT_HINTING_FREETYPE ::
-   *     Use the old FreeType hinting engine.
-   *
-   *   FT_HINTING_ADOBE ::
-   *     Use the hinting engine contributed by Adobe.
-   *
-   * @since:
-   *   2.9
-   *
-   */
-#define FT_HINTING_FREETYPE  0
-#define FT_HINTING_ADOBE     1
-
-  /* these constants (introduced in 2.4.12) are deprecated */
-#define FT_CFF_HINTING_FREETYPE  FT_HINTING_FREETYPE
-#define FT_CFF_HINTING_ADOBE     FT_HINTING_ADOBE
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   hinting-engine
-   *
-   * @description:
-   *   Thanks to Adobe, which contributed a new hinting (and parsing)
-   *   engine, an application can select between `freetype' and `adobe' if
-   *   compiled with CFF_CONFIG_OPTION_OLD_ENGINE.  If this configuration
-   *   macro isn't defined, `hinting-engine' does nothing.
-   *
-   *   The same holds for the Type~1 and CID modules if compiled with
-   *   T1_CONFIG_OPTION_OLD_ENGINE.
-   *
-   *   For the `cff' module, the default engine is `freetype' if
-   *   CFF_CONFIG_OPTION_OLD_ENGINE is defined, and `adobe' otherwise.
-   *
-   *   For both the `type1' and `t1cid' modules, the default engine is
-   *   `freetype' if T1_CONFIG_OPTION_OLD_ENGINE is defined, and `adobe'
-   *   otherwise.
-   *
-   *   The following example code demonstrates how to select Adobe's hinting
-   *   engine for the `cff' module (omitting the error handling).
-   *
-   *   {
-   *     FT_Library  library;
-   *     FT_UInt     hinting_engine = FT_CFF_HINTING_ADOBE;
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *
-   *     FT_Property_Set( library, "cff",
-   *                               "hinting-engine", &hinting_engine );
-   *   }
-   *
-   * @note:
-   *   This property can be used with @FT_Property_Get also.
-   *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable (using values `adobe' or `freetype').
-   *
-   * @since:
-   *   2.4.12 (for `cff' module)
-   *
-   *   2.9 (for `type1' and `t1cid' modules)
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   no-stem-darkening
-   *
-   * @description:
-   *   All glyphs that pass through the auto-hinter will be emboldened
-   *   unless this property is set to TRUE.  The same is true for the CFF,
-   *   Type~1, and CID font modules if the `Adobe' engine is selected (which
-   *   is the default).
-   *
-   *   Stem darkening emboldens glyphs at smaller sizes to make them more
-   *   readable on common low-DPI screens when using linear alpha blending
-   *   and gamma correction, see @FT_Render_Glyph.  When not using linear
-   *   alpha blending and gamma correction, glyphs will appear heavy and
-   *   fuzzy!
-   *
-   *   Gamma correction essentially lightens fonts since shades of grey are
-   *   shifted to higher pixel values (=~higher brightness) to match the
-   *   original intention to the reality of our screens.  The side-effect is
-   *   that glyphs `thin out'.  Mac OS~X and Adobe's proprietary font
-   *   rendering library implement a counter-measure: stem darkening at
-   *   smaller sizes where shades of gray dominate.  By emboldening a glyph
-   *   slightly in relation to its pixel size, individual pixels get higher
-   *   coverage of filled-in outlines and are therefore `blacker'.  This
-   *   counteracts the `thinning out' of glyphs, making text remain readable
-   *   at smaller sizes.
-   *
-   *   By default, the Adobe engines for CFF, Type~1, and CID fonts darken
-   *   stems at smaller sizes, regardless of hinting, to enhance contrast. 
-   *   Setting this property, stem darkening gets switched off.
-   *
-   *   For the auto-hinter, stem-darkening is experimental currently and
-   *   thus switched off by default (this is, `no-stem-darkening' is set to
-   *   TRUE by default).  Total consistency with the CFF driver is not
-   *   achieved right now because the emboldening method differs and glyphs
-   *   must be scaled down on the Y-axis to keep outline points inside their
-   *   precomputed blue zones.  The smaller the size (especially 9ppem and
-   *   down), the higher the loss of emboldening versus the CFF driver.
-   *
-   *   Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is
-   *   set.
-   *
-   *   {
-   *     FT_Library  library;
-   *     FT_Bool     no_stem_darkening = TRUE;
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *
-   *     FT_Property_Set( library, "cff",
-   *                               "no-stem-darkening", &no_stem_darkening );
-   *   }
-   *
-   * @note:
-   *   This property can be used with @FT_Property_Get also.
-   *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable (using values 1 and 0 for `on' and `off', respectively).
-   *   It can also be set per face using @FT_Face_Properties with
-   *   @FT_PARAM_TAG_STEM_DARKENING.
-   *
-   * @since:
-   *   2.4.12 (for `cff' module)
-   *
-   *   2.6.2 (for `autofitter' module)
-   *
-   *   2.9 (for `type1' and `t1cid' modules)
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   darkening-parameters
-   *
-   * @description:
-   *   By default, the Adobe hinting engine, as used by the CFF, Type~1, and
-   *   CID font drivers, darkens stems as follows (if the
-   *   `no-stem-darkening' property isn't set):
-   *
-   *   {
-   *     stem width <= 0.5px:   darkening amount = 0.4px
-   *     stem width  = 1px:     darkening amount = 0.275px
-   *     stem width  = 1.667px: darkening amount = 0.275px
-   *     stem width >= 2.333px: darkening amount = 0px
-   *   }
-   *
-   *   and piecewise linear in-between.  At configuration time, these four
-   *   control points can be set with the macro
-   *   `CFF_CONFIG_OPTION_DARKENING_PARAMETERS'; the CFF, Type~1, and CID
-   *   drivers share these values.  At runtime, the control points can be
-   *   changed using the `darkening-parameters' property, as the following
-   *   example demonstrates for the Type~1 driver.
-   *
-   *   {
-   *     FT_Library  library;
-   *     FT_Int      darken_params[8] = {  500, 300,   // x1, y1
-   *                                      1000, 200,   // x2, y2
-   *                                      1500, 100,   // x3, y3
-   *                                      2000,   0 }; // x4, y4
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *
-   *     FT_Property_Set( library, "type1",
-   *                               "darkening-parameters", darken_params );
-   *   }
-   *
-   *   The x~values give the stem width, and the y~values the darkening
-   *   amount.  The unit is 1000th of pixels.  All coordinate values must be
-   *   positive; the x~values must be monotonically increasing; the
-   *   y~values must be monotonically decreasing and smaller than or
-   *   equal to 500 (corresponding to half a pixel); the slope of each
-   *   linear piece must be shallower than -1 (e.g., -.4).
-   *
-   *   The auto-hinter provides this property, too, as an experimental
-   *   feature.  See @no-stem-darkening for more.
-   *
-   * @note:
-   *   This property can be used with @FT_Property_Get also.
-   *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable, using eight comma-separated integers without spaces.  Here
-   *   the above example, using `\' to break the line for readability.
-   *
-   *   {
-   *     FREETYPE_PROPERTIES=\
-   *     type1:darkening-parameters=500,300,1000,200,1500,100,2000,0
-   *   }
-   *
-   * @since:
-   *   2.5.1 (for `cff' module)
-   *
-   *   2.6.2 (for `autofitter' module)
-   *
-   *   2.9 (for `type1' and `t1cid' modules)
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   random-seed
-   *
-   * @description:
-   *   By default, the seed value for the CFF `random' operator and the
-   *   similar `0 28 callothersubr pop' command for the Type~1 and CID
-   *   drivers is set to a random value.  However, mainly for debugging
-   *   purposes, it is often necessary to use a known value as a seed so
-   *   that the pseudo-random number sequences generated by `random' are
-   *   repeatable.
-   *
-   *   The `random-seed' property does that.  Its argument is a signed 32bit
-   *   integer; if the value is zero or negative, the seed given by the
-   *   `intitialRandomSeed' private DICT operator in a CFF file gets used
-   *   (or a default value if there is no such operator).  If the value is
-   *   positive, use it instead of `initialRandomSeed', which is
-   *   consequently ignored.
-   *
-   * @note:
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable.  It can also be set per face using @FT_Face_Properties with
-   *   @FT_PARAM_TAG_RANDOM_SEED.
-   *
-   * @since:
-   *   2.8 (for `cff' module)
-   *
-   *   2.9 (for `type1' and `t1cid' modules)
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   no-long-family-names
-   *
-   * @description:
-   *   If PCF_CONFIG_OPTION_LONG_FAMILY_NAMES is active while compiling
-   *   FreeType, the PCF driver constructs long family names.
-   *
-   *   There are many PCF fonts just called `Fixed' which look completely
-   *   different, and which have nothing to do with each other.  When
-   *   selecting `Fixed' in KDE or Gnome one gets results that appear rather
-   *   random, the style changes often if one changes the size and one
-   *   cannot select some fonts at all.  The improve this situation, the PCF
-   *   module prepends the foundry name (plus a space) to the family name.
-   *   It also checks whether there are `wide' characters; all put together,
-   *   family names like `Sony Fixed' or `Misc Fixed Wide' are constructed.
-   *
-   *   If `no-long-family-names' is set, this feature gets switched off.
-   *
-   *   {
-   *     FT_Library  library;
-   *     FT_Bool     no_long_family_names = TRUE;
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *
-   *     FT_Property_Set( library, "pcf",
-   *                               "no-long-family-names",
-   *                               &no_long_family_names );
-   *   }
-   *
-   * @note:
-   *   This property can be used with @FT_Property_Get also.
-   *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable (using values 1 and 0 for `on' and `off', respectively).
-   *
-   * @since:
-   *   2.8
-   */
-
-
-  /**************************************************************************
-   *
-   * @enum:
-   *   TT_INTERPRETER_VERSION_XXX
-   *
-   * @description:
-   *   A list of constants used for the @interpreter-version property to
-   *   select the hinting engine for Truetype fonts.
-   *
-   *   The numeric value in the constant names represents the version
-   *   number as returned by the `GETINFO' bytecode instruction.
-   *
-   * @values:
-   *   TT_INTERPRETER_VERSION_35 ::
-   *     Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in
-   *     Windows~98; only grayscale and B/W rasterizing is supported.
-   *
-   *   TT_INTERPRETER_VERSION_38 ::
-   *     Version~38 corresponds to MS rasterizer v.1.9; it is roughly
-   *     equivalent to the hinting provided by DirectWrite ClearType (as can
-   *     be found, for example, in the Internet Explorer~9 running on
-   *     Windows~7).  It is used in FreeType to select the `Infinality'
-   *     subpixel hinting code.  The code may be removed in a future
-   *     version.
-   *
-   *   TT_INTERPRETER_VERSION_40 ::
-   *     Version~40 corresponds to MS rasterizer v.2.1; it is roughly
-   *     equivalent to the hinting provided by DirectWrite ClearType (as can
-   *     be found, for example, in Microsoft's Edge Browser on Windows~10).
-   *     It is used in FreeType to select the `minimal' subpixel hinting
-   *     code, a stripped-down and higher performance version of the
-   *     `Infinality' code.
-   *
-   * @note:
-   *   This property controls the behaviour of the bytecode interpreter
-   *   and thus how outlines get hinted.  It does *not* control how glyph
-   *   get rasterized!  In particular, it does not control subpixel color
-   *   filtering.
-   *
-   *   If FreeType has not been compiled with the configuration option
-   *   TT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 or~40 causes
-   *   an `FT_Err_Unimplemented_Feature' error.
-   *
-   *   Depending on the graphics framework, Microsoft uses different
-   *   bytecode and rendering engines.  As a consequence, the version
-   *   numbers returned by a call to the `GETINFO' bytecode instruction are
-   *   more convoluted than desired.
-   *
-   *   Here are two tables that try to shed some light on the possible
-   *   values for the MS rasterizer engine, together with the additional
-   *   features introduced by it.
-   *
-   *   {
-   *     GETINFO framework               version feature
-   *     -------------------------------------------------------------------
-   *         3   GDI (Win 3.1),            v1.0  16-bit, first version
-   *             TrueImage
-   *        33   GDI (Win NT 3.1),         v1.5  32-bit
-   *             HP Laserjet
-   *        34   GDI (Win 95)              v1.6  font smoothing,
-   *                                             new SCANTYPE opcode
-   *        35   GDI (Win 98/2000)         v1.7  (UN)SCALED_COMPONENT_OFFSET
-   *                                               bits in composite glyphs
-   *        36   MGDI (Win CE 2)           v1.6+ classic ClearType
-   *        37   GDI (XP and later),       v1.8  ClearType
-   *             GDI+ old (before Vista)
-   *        38   GDI+ old (Vista, Win 7),  v1.9  subpixel ClearType,
-   *             WPF                             Y-direction ClearType,
-   *                                             additional error checking
-   *        39   DWrite (before Win 8)     v2.0  subpixel ClearType flags
-   *                                               in GETINFO opcode,
-   *                                             bug fixes
-   *        40   GDI+ (after Win 7),       v2.1  Y-direction ClearType flag
-   *             DWrite (Win 8)                    in GETINFO opcode,
-   *                                             Gray ClearType
-   *   }
-   *
-   *   The `version' field gives a rough orientation only, since some
-   *   applications provided certain features much earlier (as an example,
-   *   Microsoft Reader used subpixel and Y-direction ClearType already in
-   *   Windows 2000).  Similarly, updates to a given framework might include
-   *   improved hinting support.
-   *
-   *   {
-   *      version   sampling          rendering        comment
-   *               x        y       x           y
-   *     --------------------------------------------------------------
-   *       v1.0   normal  normal  B/W           B/W    bi-level
-   *       v1.6   high    high    gray          gray   grayscale
-   *       v1.8   high    normal  color-filter  B/W    (GDI) ClearType
-   *       v1.9   high    high    color-filter  gray   Color ClearType
-   *       v2.1   high    normal  gray          B/W    Gray ClearType
-   *       v2.1   high    high    gray          gray   Gray ClearType
-   *   }
-   *
-   *   Color and Gray ClearType are the two available variants of
-   *   `Y-direction ClearType', meaning grayscale rasterization along the
-   *   Y-direction; the name used in the TrueType specification for this
-   *   feature is `symmetric smoothing'.  `Classic ClearType' is the
-   *   original algorithm used before introducing a modified version in
-   *   Win~XP.  Another name for v1.6's grayscale rendering is `font
-   *   smoothing', and `Color ClearType' is sometimes also called `DWrite
-   *   ClearType'.  To differentiate between today's Color ClearType and the
-   *   earlier ClearType variant with B/W rendering along the vertical axis,
-   *   the latter is sometimes called `GDI ClearType'.
-   *
-   *   `Normal' and `high' sampling describe the (virtual) resolution to
-   *   access the rasterized outline after the hinting process.  `Normal'
-   *   means 1 sample per grid line (i.e., B/W).  In the current Microsoft
-   *   implementation, `high' means an extra virtual resolution of 16x16 (or
-   *   16x1) grid lines per pixel for bytecode instructions like `MIRP'.
-   *   After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid
-   *   lines for color filtering if Color ClearType is activated.
-   *
-   *   Note that `Gray ClearType' is essentially the same as v1.6's
-   *   grayscale rendering.  However, the GETINFO instruction handles it
-   *   differently: v1.6 returns bit~12 (hinting for grayscale), while v2.1
-   *   returns bits~13 (hinting for ClearType), 18 (symmetrical smoothing),
-   *   and~19 (Gray ClearType).  Also, this mode respects bits 2 and~3 for
-   *   the version~1 gasp table exclusively (like Color ClearType), while
-   *   v1.6 only respects the values of version~0 (bits 0 and~1).
-   *
-   *   Keep in mind that the features of the above interpreter versions
-   *   might not map exactly to FreeType features or behavior because it is
-   *   a fundamentally different library with different internals.
-   *
-   */
-#define TT_INTERPRETER_VERSION_35  35
-#define TT_INTERPRETER_VERSION_38  38
-#define TT_INTERPRETER_VERSION_40  40
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   interpreter-version
-   *
-   * @description:
-   *   Currently, three versions are available, two representing the
-   *   bytecode interpreter with subpixel hinting support (old `Infinality'
-   *   code and new stripped-down and higher performance `minimal' code) and
-   *   one without, respectively.  The default is subpixel support if
-   *   TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel support
-   *   otherwise (since it isn't available then).
-   *
-   *   If subpixel hinting is on, many TrueType bytecode instructions behave
-   *   differently compared to B/W or grayscale rendering (except if `native
-   *   ClearType' is selected by the font).  Microsoft's main idea is to
-   *   render at a much increased horizontal resolution, then sampling down
-   *   the created output to subpixel precision.  However, many older fonts
-   *   are not suited to this and must be specially taken care of by
-   *   applying (hardcoded) tweaks in Microsoft's interpreter.
-   *
-   *   Details on subpixel hinting and some of the necessary tweaks can be
-   *   found in Greg Hitchcock's whitepaper at
-   *   `https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
-   *   Note that FreeType currently doesn't really `subpixel hint' (6x1, 6x2,
-   *   or 6x5 supersampling) like discussed in the paper.  Depending on the
-   *   chosen interpreter, it simply ignores instructions on vertical stems
-   *   to arrive at very similar results.
-   *
-   *   The following example code demonstrates how to deactivate subpixel
-   *   hinting (omitting the error handling).
-   *
-   *   {
-   *     FT_Library  library;
-   *     FT_Face     face;
-   *     FT_UInt     interpreter_version = TT_INTERPRETER_VERSION_35;
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *
-   *     FT_Property_Set( library, "truetype",
-   *                               "interpreter-version",
-   *                               &interpreter_version );
-   *   }
-   *
-   * @note:
-   *   This property can be used with @FT_Property_Get also.
-   *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable (using values `35', `38', or `40').
-   *
-   * @since:
-   *   2.5
-   */
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   glyph-to-script-map
-   *
-   * @description:
-   *   *Experimental* *only*
-   *
-   *   The auto-hinter provides various script modules to hint glyphs.
-   *   Examples of supported scripts are Latin or CJK.  Before a glyph is
-   *   auto-hinted, the Unicode character map of the font gets examined, and
-   *   the script is then determined based on Unicode character ranges, see
-   *   below.
-   *
-   *   OpenType fonts, however, often provide much more glyphs than
-   *   character codes (small caps, superscripts, ligatures, swashes, etc.),
-   *   to be controlled by so-called `features'.  Handling OpenType features
-   *   can be quite complicated and thus needs a separate library on top of
-   *   FreeType.
-   *
-   *   The mapping between glyph indices and scripts (in the auto-hinter
-   *   sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an
-   *   array with `num_glyphs' elements, as found in the font's @FT_Face
-   *   structure.  The `glyph-to-script-map' property returns a pointer to
-   *   this array, which can be modified as needed.  Note that the
-   *   modification should happen before the first glyph gets processed by
-   *   the auto-hinter so that the global analysis of the font shapes
-   *   actually uses the modified mapping.
-   *
-   *   The following example code demonstrates how to access it (omitting
-   *   the error handling).
-   *
-   *   {
-   *     FT_Library                library;
-   *     FT_Face                   face;
-   *     FT_Prop_GlyphToScriptMap  prop;
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *     FT_New_Face( library, "foo.ttf", 0, &face );
-   *
-   *     prop.face = face;
-   *
-   *     FT_Property_Get( library, "autofitter",
-   *                               "glyph-to-script-map", &prop );
-   *
-   *     // adjust `prop.map' as needed right here
-   *
-   *     FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
-   *   }
-   *
-   * @since:
-   *   2.4.11
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @enum:
-   *   FT_AUTOHINTER_SCRIPT_XXX
-   *
-   * @description:
-   *   *Experimental* *only*
-   *
-   *   A list of constants used for the @glyph-to-script-map property to
-   *   specify the script submodule the auto-hinter should use for hinting a
-   *   particular glyph.
-   *
-   * @values:
-   *   FT_AUTOHINTER_SCRIPT_NONE ::
-   *     Don't auto-hint this glyph.
-   *
-   *   FT_AUTOHINTER_SCRIPT_LATIN ::
-   *     Apply the latin auto-hinter.  For the auto-hinter, `latin' is a
-   *     very broad term, including Cyrillic and Greek also since characters
-   *     from those scripts share the same design constraints.
-   *
-   *     By default, characters from the following Unicode ranges are
-   *     assigned to this submodule.
-   *
-   *     {
-   *       U+0020 - U+007F  // Basic Latin (no control characters)
-   *       U+00A0 - U+00FF  // Latin-1 Supplement (no control characters)
-   *       U+0100 - U+017F  // Latin Extended-A
-   *       U+0180 - U+024F  // Latin Extended-B
-   *       U+0250 - U+02AF  // IPA Extensions
-   *       U+02B0 - U+02FF  // Spacing Modifier Letters
-   *       U+0300 - U+036F  // Combining Diacritical Marks
-   *       U+0370 - U+03FF  // Greek and Coptic
-   *       U+0400 - U+04FF  // Cyrillic
-   *       U+0500 - U+052F  // Cyrillic Supplement
-   *       U+1D00 - U+1D7F  // Phonetic Extensions
-   *       U+1D80 - U+1DBF  // Phonetic Extensions Supplement
-   *       U+1DC0 - U+1DFF  // Combining Diacritical Marks Supplement
-   *       U+1E00 - U+1EFF  // Latin Extended Additional
-   *       U+1F00 - U+1FFF  // Greek Extended
-   *       U+2000 - U+206F  // General Punctuation
-   *       U+2070 - U+209F  // Superscripts and Subscripts
-   *       U+20A0 - U+20CF  // Currency Symbols
-   *       U+2150 - U+218F  // Number Forms
-   *       U+2460 - U+24FF  // Enclosed Alphanumerics
-   *       U+2C60 - U+2C7F  // Latin Extended-C
-   *       U+2DE0 - U+2DFF  // Cyrillic Extended-A
-   *       U+2E00 - U+2E7F  // Supplemental Punctuation
-   *       U+A640 - U+A69F  // Cyrillic Extended-B
-   *       U+A720 - U+A7FF  // Latin Extended-D
-   *       U+FB00 - U+FB06  // Alphab. Present. Forms (Latin Ligatures)
-   *      U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
-   *      U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
-   *     }
-   *
-   *   FT_AUTOHINTER_SCRIPT_CJK ::
-   *     Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
-   *     Vietnamese, and some other scripts.
-   *
-   *     By default, characters from the following Unicode ranges are
-   *     assigned to this submodule.
-   *
-   *     {
-   *       U+1100 - U+11FF  // Hangul Jamo
-   *       U+2E80 - U+2EFF  // CJK Radicals Supplement
-   *       U+2F00 - U+2FDF  // Kangxi Radicals
-   *       U+2FF0 - U+2FFF  // Ideographic Description Characters
-   *       U+3000 - U+303F  // CJK Symbols and Punctuation
-   *       U+3040 - U+309F  // Hiragana
-   *       U+30A0 - U+30FF  // Katakana
-   *       U+3100 - U+312F  // Bopomofo
-   *       U+3130 - U+318F  // Hangul Compatibility Jamo
-   *       U+3190 - U+319F  // Kanbun
-   *       U+31A0 - U+31BF  // Bopomofo Extended
-   *       U+31C0 - U+31EF  // CJK Strokes
-   *       U+31F0 - U+31FF  // Katakana Phonetic Extensions
-   *       U+3200 - U+32FF  // Enclosed CJK Letters and Months
-   *       U+3300 - U+33FF  // CJK Compatibility
-   *       U+3400 - U+4DBF  // CJK Unified Ideographs Extension A
-   *       U+4DC0 - U+4DFF  // Yijing Hexagram Symbols
-   *       U+4E00 - U+9FFF  // CJK Unified Ideographs
-   *       U+A960 - U+A97F  // Hangul Jamo Extended-A
-   *       U+AC00 - U+D7AF  // Hangul Syllables
-   *       U+D7B0 - U+D7FF  // Hangul Jamo Extended-B
-   *       U+F900 - U+FAFF  // CJK Compatibility Ideographs
-   *       U+FE10 - U+FE1F  // Vertical forms
-   *       U+FE30 - U+FE4F  // CJK Compatibility Forms
-   *       U+FF00 - U+FFEF  // Halfwidth and Fullwidth Forms
-   *      U+1B000 - U+1B0FF // Kana Supplement
-   *      U+1D300 - U+1D35F // Tai Xuan Hing Symbols
-   *      U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
-   *      U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
-   *      U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
-   *      U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
-   *      U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
-   *     }
-   *
-   *   FT_AUTOHINTER_SCRIPT_INDIC ::
-   *     Apply the indic auto-hinter, covering all major scripts from the
-   *     Indian sub-continent and some other related scripts like Thai, Lao,
-   *     or Tibetan.
-   *
-   *     By default, characters from the following Unicode ranges are
-   *     assigned to this submodule.
-   *
-   *     {
-   *       U+0900 - U+0DFF  // Indic Range
-   *       U+0F00 - U+0FFF  // Tibetan
-   *       U+1900 - U+194F  // Limbu
-   *       U+1B80 - U+1BBF  // Sundanese
-   *       U+A800 - U+A82F  // Syloti Nagri
-   *       U+ABC0 - U+ABFF  // Meetei Mayek
-   *      U+11800 - U+118DF // Sharada
-   *     }
-   *
-   *     Note that currently Indic support is rudimentary only, missing blue
-   *     zone support.
-   *
-   * @since:
-   *   2.4.11
-   *
-   */
-#define FT_AUTOHINTER_SCRIPT_NONE   0
-#define FT_AUTOHINTER_SCRIPT_LATIN  1
-#define FT_AUTOHINTER_SCRIPT_CJK    2
-#define FT_AUTOHINTER_SCRIPT_INDIC  3
-
-
-  /**************************************************************************
-   *
-   * @struct:
-   *   FT_Prop_GlyphToScriptMap
-   *
-   * @description:
-   *   *Experimental* *only*
-   *
-   *   The data exchange structure for the @glyph-to-script-map property.
-   *
-   * @since:
-   *   2.4.11
-   *
-   */
-  typedef struct  FT_Prop_GlyphToScriptMap_
-  {
-    FT_Face     face;
-    FT_UShort*  map;
-
-  } FT_Prop_GlyphToScriptMap;
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   fallback-script
-   *
-   * @description:
-   *   *Experimental* *only*
-   *
-   *   If no auto-hinter script module can be assigned to a glyph, a
-   *   fallback script gets assigned to it (see also the
-   *   @glyph-to-script-map property).  By default, this is
-   *   @FT_AUTOHINTER_SCRIPT_CJK.  Using the `fallback-script' property,
-   *   this fallback value can be changed.
-   *
-   *   {
-   *     FT_Library  library;
-   *     FT_UInt     fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *
-   *     FT_Property_Set( library, "autofitter",
-   *                               "fallback-script", &fallback_script );
-   *   }
-   *
-   * @note:
-   *   This property can be used with @FT_Property_Get also.
-   *
-   *   It's important to use the right timing for changing this value: The
-   *   creation of the glyph-to-script map that eventually uses the
-   *   fallback script value gets triggered either by setting or reading a
-   *   face-specific property like @glyph-to-script-map, or by auto-hinting
-   *   any glyph from that face.  In particular, if you have already created
-   *   an @FT_Face structure but not loaded any glyph (using the
-   *   auto-hinter), a change of the fallback script will affect this face.
-   *
-   * @since:
-   *   2.4.11
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   default-script
-   *
-   * @description:
-   *   *Experimental* *only*
-   *
-   *   If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make
-   *   the HarfBuzz library access OpenType features for getting better
-   *   glyph coverages, this property sets the (auto-fitter) script to be
-   *   used for the default (OpenType) script data of a font's GSUB table.
-   *   Features for the default script are intended for all scripts not
-   *   explicitly handled in GSUB; an example is a `dlig' feature,
-   *   containing the combination of the characters `T', `E', and `L' to
-   *   form a `TEL' ligature.
-   *
-   *   By default, this is @FT_AUTOHINTER_SCRIPT_LATIN.  Using the
-   *   `default-script' property, this default value can be changed.
-   *
-   *   {
-   *     FT_Library  library;
-   *     FT_UInt     default_script = FT_AUTOHINTER_SCRIPT_NONE;
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *
-   *     FT_Property_Set( library, "autofitter",
-   *                               "default-script", &default_script );
-   *   }
-   *
-   * @note:
-   *   This property can be used with @FT_Property_Get also.
-   *
-   *   It's important to use the right timing for changing this value: The
-   *   creation of the glyph-to-script map that eventually uses the
-   *   default script value gets triggered either by setting or reading a
-   *   face-specific property like @glyph-to-script-map, or by auto-hinting
-   *   any glyph from that face.  In particular, if you have already created
-   *   an @FT_Face structure but not loaded any glyph (using the
-   *   auto-hinter), a change of the default script will affect this face.
-   *
-   * @since:
-   *   2.5.3
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   increase-x-height
-   *
-   * @description:
-   *   For ppem values in the range 6~<= ppem <= `increase-x-height', round
-   *   up the font's x~height much more often than normally.  If the value
-   *   is set to~0, which is the default, this feature is switched off.  Use
-   *   this property to improve the legibility of small font sizes if
-   *   necessary.
-   *
-   *   {
-   *     FT_Library               library;
-   *     FT_Face                  face;
-   *     FT_Prop_IncreaseXHeight  prop;
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *     FT_New_Face( library, "foo.ttf", 0, &face );
-   *     FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
-   *
-   *     prop.face  = face;
-   *     prop.limit = 14;
-   *
-   *     FT_Property_Set( library, "autofitter",
-   *                               "increase-x-height", &prop );
-   *   }
-   *
-   * @note:
-   *   This property can be used with @FT_Property_Get also.
-   *
-   *   Set this value right after calling @FT_Set_Char_Size, but before
-   *   loading any glyph (using the auto-hinter).
-   *
-   * @since:
-   *   2.4.11
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   * @struct:
-   *   FT_Prop_IncreaseXHeight
-   *
-   * @description:
-   *   The data exchange structure for the @increase-x-height property.
-   *
-   */
-  typedef struct  FT_Prop_IncreaseXHeight_
-  {
-    FT_Face  face;
-    FT_UInt  limit;
-
-  } FT_Prop_IncreaseXHeight;
-
-
-  /**************************************************************************
-   *
-   * @property:
-   *   warping
-   *
-   * @description:
-   *   *Experimental* *only*
-   *
-   *   If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to
-   *   activate the warp hinting code in the auto-hinter, this property
-   *   switches warping on and off.
-   *
-   *   Warping only works in `normal' auto-hinting mode replacing it.
-   *   The idea of the code is to slightly scale and shift a glyph along
-   *   the non-hinted dimension (which is usually the horizontal axis) so
-   *   that as much of its segments are aligned (more or less) to the grid.
-   *   To find out a glyph's optimal scaling and shifting value, various
-   *   parameter combinations are tried and scored.
-   *
-   *   By default, warping is off.  The example below shows how to switch on
-   *   warping (omitting the error handling).
-   *
-   *   {
-   *     FT_Library  library;
-   *     FT_Bool     warping = 1;
-   *
-   *
-   *     FT_Init_FreeType( &library );
-   *
-   *     FT_Property_Set( library, "autofitter",
-   *                               "warping", &warping );
-   *   }
-   *
-   * @note:
-   *   This property can be used with @FT_Property_Get also.
-   *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable (using values 1 and 0 for `on' and `off', respectively).
-   *
-   *   The warping code can also change advance widths.  Have a look at the
-   *   `lsb_delta' and `rsb_delta' fields in the @FT_GlyphSlotRec structure
-   *   for details on improving inter-glyph distances while rendering.
-   *
-   *   Since warping is a global property of the auto-hinter it is best to
-   *   change its value before rendering any face.  Otherwise, you should
-   *   reload all faces that get auto-hinted in `normal' hinting mode.
-   *
-   * @since:
-   *   2.6
-   *
-   */
-
-
- /* */
-
-
-FT_END_HEADER
-
-
-#endif /* FTDRIVER_H_ */
-
-
-/* END */

+ 0 - 280
freetype/include/freetype/fterrdef.h

@@ -1,280 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  fterrdef.h                                                             */
-/*                                                                         */
-/*    FreeType error codes (specification).                                */
-/*                                                                         */
-/*  Copyright 2002-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*   error_code_values                                                   */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*   Error Code Values                                                   */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*   All possible error codes returned by FreeType functions.            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*   The list below is taken verbatim from the file `fterrdef.h'         */
-  /*   (loaded automatically by including `FT_FREETYPE_H').  The first     */
-  /*   argument of the `FT_ERROR_DEF_' macro is the error label; by        */
-  /*   default, the prefix `FT_Err_' gets added so that you get error      */
-  /*   names like `FT_Err_Cannot_Open_Resource'.  The second argument is   */
-  /*   the error code, and the last argument an error string, which is not */
-  /*   used by FreeType.                                                   */
-  /*                                                                       */
-  /*   Within your application you should *only* use error names and       */
-  /*   *never* its numeric values!  The latter might (and actually do)     */
-  /*   change in forthcoming FreeType versions.                            */
-  /*                                                                       */
-  /*   Macro `FT_NOERRORDEF_' defines `FT_Err_Ok', which is always zero.   */
-  /*   See the `Error Enumerations' subsection how to automatically        */
-  /*   generate a list of error strings.                                   */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_Err_XXX                                                         */
-  /*                                                                       */
-  /*************************************************************************/
-
-  /* generic errors */
-
-  FT_NOERRORDEF_( Ok,                                        0x00,
-                  "no error" )
-
-  FT_ERRORDEF_( Cannot_Open_Resource,                        0x01,
-                "cannot open resource" )
-  FT_ERRORDEF_( Unknown_File_Format,                         0x02,
-                "unknown file format" )
-  FT_ERRORDEF_( Invalid_File_Format,                         0x03,
-                "broken file" )
-  FT_ERRORDEF_( Invalid_Version,                             0x04,
-                "invalid FreeType version" )
-  FT_ERRORDEF_( Lower_Module_Version,                        0x05,
-                "module version is too low" )
-  FT_ERRORDEF_( Invalid_Argument,                            0x06,
-                "invalid argument" )
-  FT_ERRORDEF_( Unimplemented_Feature,                       0x07,
-                "unimplemented feature" )
-  FT_ERRORDEF_( Invalid_Table,                               0x08,
-                "broken table" )
-  FT_ERRORDEF_( Invalid_Offset,                              0x09,
-                "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 */
-
-  FT_ERRORDEF_( Invalid_Glyph_Index,                         0x10,
-                "invalid glyph index" )
-  FT_ERRORDEF_( Invalid_Character_Code,                      0x11,
-                "invalid character code" )
-  FT_ERRORDEF_( Invalid_Glyph_Format,                        0x12,
-                "unsupported glyph image format" )
-  FT_ERRORDEF_( Cannot_Render_Glyph,                         0x13,
-                "cannot render this glyph format" )
-  FT_ERRORDEF_( Invalid_Outline,                             0x14,
-                "invalid outline" )
-  FT_ERRORDEF_( Invalid_Composite,                           0x15,
-                "invalid composite glyph" )
-  FT_ERRORDEF_( Too_Many_Hints,                              0x16,
-                "too many hints" )
-  FT_ERRORDEF_( Invalid_Pixel_Size,                          0x17,
-                "invalid pixel size" )
-
-  /* handle errors */
-
-  FT_ERRORDEF_( Invalid_Handle,                              0x20,
-                "invalid object handle" )
-  FT_ERRORDEF_( Invalid_Library_Handle,                      0x21,
-                "invalid library handle" )
-  FT_ERRORDEF_( Invalid_Driver_Handle,                       0x22,
-                "invalid module handle" )
-  FT_ERRORDEF_( Invalid_Face_Handle,                         0x23,
-                "invalid face handle" )
-  FT_ERRORDEF_( Invalid_Size_Handle,                         0x24,
-                "invalid size handle" )
-  FT_ERRORDEF_( Invalid_Slot_Handle,                         0x25,
-                "invalid glyph slot handle" )
-  FT_ERRORDEF_( Invalid_CharMap_Handle,                      0x26,
-                "invalid charmap handle" )
-  FT_ERRORDEF_( Invalid_Cache_Handle,                        0x27,
-                "invalid cache manager handle" )
-  FT_ERRORDEF_( Invalid_Stream_Handle,                       0x28,
-                "invalid stream handle" )
-
-  /* driver errors */
-
-  FT_ERRORDEF_( Too_Many_Drivers,                            0x30,
-                "too many modules" )
-  FT_ERRORDEF_( Too_Many_Extensions,                         0x31,
-                "too many extensions" )
-
-  /* memory errors */
-
-  FT_ERRORDEF_( Out_Of_Memory,                               0x40,
-                "out of memory" )
-  FT_ERRORDEF_( Unlisted_Object,                             0x41,
-                "unlisted object" )
-
-  /* stream errors */
-
-  FT_ERRORDEF_( Cannot_Open_Stream,                          0x51,
-                "cannot open stream" )
-  FT_ERRORDEF_( Invalid_Stream_Seek,                         0x52,
-                "invalid stream seek" )
-  FT_ERRORDEF_( Invalid_Stream_Skip,                         0x53,
-                "invalid stream skip" )
-  FT_ERRORDEF_( Invalid_Stream_Read,                         0x54,
-                "invalid stream read" )
-  FT_ERRORDEF_( Invalid_Stream_Operation,                    0x55,
-                "invalid stream operation" )
-  FT_ERRORDEF_( Invalid_Frame_Operation,                     0x56,
-                "invalid frame operation" )
-  FT_ERRORDEF_( Nested_Frame_Access,                         0x57,
-                "nested frame access" )
-  FT_ERRORDEF_( Invalid_Frame_Read,                          0x58,
-                "invalid frame read" )
-
-  /* raster errors */
-
-  FT_ERRORDEF_( Raster_Uninitialized,                        0x60,
-                "raster uninitialized" )
-  FT_ERRORDEF_( Raster_Corrupted,                            0x61,
-                "raster corrupted" )
-  FT_ERRORDEF_( Raster_Overflow,                             0x62,
-                "raster overflow" )
-  FT_ERRORDEF_( Raster_Negative_Height,                      0x63,
-                "negative height while rastering" )
-
-  /* cache errors */
-
-  FT_ERRORDEF_( Too_Many_Caches,                             0x70,
-                "too many registered caches" )
-
-  /* TrueType and SFNT errors */
-
-  FT_ERRORDEF_( Invalid_Opcode,                              0x80,
-                "invalid opcode" )
-  FT_ERRORDEF_( Too_Few_Arguments,                           0x81,
-                "too few arguments" )
-  FT_ERRORDEF_( Stack_Overflow,                              0x82,
-                "stack overflow" )
-  FT_ERRORDEF_( Code_Overflow,                               0x83,
-                "code overflow" )
-  FT_ERRORDEF_( Bad_Argument,                                0x84,
-                "bad argument" )
-  FT_ERRORDEF_( Divide_By_Zero,                              0x85,
-                "division by zero" )
-  FT_ERRORDEF_( Invalid_Reference,                           0x86,
-                "invalid reference" )
-  FT_ERRORDEF_( Debug_OpCode,                                0x87,
-                "found debug opcode" )
-  FT_ERRORDEF_( ENDF_In_Exec_Stream,                         0x88,
-                "found ENDF opcode in execution stream" )
-  FT_ERRORDEF_( Nested_DEFS,                                 0x89,
-                "nested DEFS" )
-  FT_ERRORDEF_( Invalid_CodeRange,                           0x8A,
-                "invalid code range" )
-  FT_ERRORDEF_( Execution_Too_Long,                          0x8B,
-                "execution context too long" )
-  FT_ERRORDEF_( Too_Many_Function_Defs,                      0x8C,
-                "too many function definitions" )
-  FT_ERRORDEF_( Too_Many_Instruction_Defs,                   0x8D,
-                "too many instruction definitions" )
-  FT_ERRORDEF_( Table_Missing,                               0x8E,
-                "SFNT font table missing" )
-  FT_ERRORDEF_( Horiz_Header_Missing,                        0x8F,
-                "horizontal header (hhea) table missing" )
-  FT_ERRORDEF_( Locations_Missing,                           0x90,
-                "locations (loca) table missing" )
-  FT_ERRORDEF_( Name_Table_Missing,                          0x91,
-                "name table missing" )
-  FT_ERRORDEF_( CMap_Table_Missing,                          0x92,
-                "character map (cmap) table missing" )
-  FT_ERRORDEF_( Hmtx_Table_Missing,                          0x93,
-                "horizontal metrics (hmtx) table missing" )
-  FT_ERRORDEF_( Post_Table_Missing,                          0x94,
-                "PostScript (post) table missing" )
-  FT_ERRORDEF_( Invalid_Horiz_Metrics,                       0x95,
-                "invalid horizontal metrics" )
-  FT_ERRORDEF_( Invalid_CharMap_Format,                      0x96,
-                "invalid character map (cmap) format" )
-  FT_ERRORDEF_( Invalid_PPem,                                0x97,
-                "invalid ppem value" )
-  FT_ERRORDEF_( Invalid_Vert_Metrics,                        0x98,
-                "invalid vertical metrics" )
-  FT_ERRORDEF_( Could_Not_Find_Context,                      0x99,
-                "could not find context" )
-  FT_ERRORDEF_( Invalid_Post_Table_Format,                   0x9A,
-                "invalid PostScript (post) table format" )
-  FT_ERRORDEF_( Invalid_Post_Table,                          0x9B,
-                "invalid PostScript (post) table" )
-  FT_ERRORDEF_( DEF_In_Glyf_Bytecode,                        0x9C,
-                "found FDEF or IDEF opcode in glyf bytecode" )
-  FT_ERRORDEF_( Missing_Bitmap,                              0x9D,
-                "missing bitmap in strike" )
-
-  /* CFF, CID, and Type 1 errors */
-
-  FT_ERRORDEF_( Syntax_Error,                                0xA0,
-                "opcode syntax error" )
-  FT_ERRORDEF_( Stack_Underflow,                             0xA1,
-                "argument stack underflow" )
-  FT_ERRORDEF_( Ignore,                                      0xA2,
-                "ignore" )
-  FT_ERRORDEF_( No_Unicode_Glyph_Name,                       0xA3,
-                "no Unicode glyph name found" )
-  FT_ERRORDEF_( Glyph_Too_Big,                               0xA4,
-                "glyph too big for hinting" )
-
-  /* BDF errors */
-
-  FT_ERRORDEF_( Missing_Startfont_Field,                     0xB0,
-                "`STARTFONT' field missing" )
-  FT_ERRORDEF_( Missing_Font_Field,                          0xB1,
-                "`FONT' field missing" )
-  FT_ERRORDEF_( Missing_Size_Field,                          0xB2,
-                "`SIZE' field missing" )
-  FT_ERRORDEF_( Missing_Fontboundingbox_Field,               0xB3,
-                "`FONTBOUNDINGBOX' field missing" )
-  FT_ERRORDEF_( Missing_Chars_Field,                         0xB4,
-                "`CHARS' field missing" )
-  FT_ERRORDEF_( Missing_Startchar_Field,                     0xB5,
-                "`STARTCHAR' field missing" )
-  FT_ERRORDEF_( Missing_Encoding_Field,                      0xB6,
-                "`ENCODING' field missing" )
-  FT_ERRORDEF_( Missing_Bbx_Field,                           0xB7,
-                "`BBX' field missing" )
-  FT_ERRORDEF_( Bbx_Too_Big,                                 0xB8,
-                "`BBX' too big" )
-  FT_ERRORDEF_( Corrupted_Font_Header,                       0xB9,
-                "Font header corrupted or missing fields" )
-  FT_ERRORDEF_( Corrupted_Font_Glyphs,                       0xBA,
-                "Font glyphs corrupted or missing fields" )
-
-  /* */
-
-
-/* END */

+ 0 - 226
freetype/include/freetype/fterrors.h

@@ -1,226 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  fterrors.h                                                             */
-/*                                                                         */
-/*    FreeType error code handling (specification).                        */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*   error_enumerations                                                  */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*   Error Enumerations                                                  */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*   How to handle errors and error strings.                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*   The header file `fterrors.h' (which is automatically included by    */
-  /*   `freetype.h' defines the handling of FreeType's enumeration         */
-  /*   constants.  It can also be used to generate error message strings   */
-  /*   with a small macro trick explained below.                           */
-  /*                                                                       */
-  /*   *Error* *Formats*                                                   */
-  /*                                                                       */
-  /*   The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be   */
-  /*   defined in `ftoption.h' in order to make the higher byte indicate   */
-  /*   the module where the error has happened (this is not compatible     */
-  /*   with standard builds of FreeType~2, however).  See the file         */
-  /*   `ftmoderr.h' for more details.                                      */
-  /*                                                                       */
-  /*   *Error* *Message* *Strings*                                         */
-  /*                                                                       */
-  /*   Error definitions are set up with special macros that allow client  */
-  /*   applications to build a table of error message strings.  The        */
-  /*   strings are not included in a normal build of FreeType~2 to save    */
-  /*   space (most client applications do not use them).                   */
-  /*                                                                       */
-  /*   To do so, you have to define the following macros before including  */
-  /*   this file.                                                          */
-  /*                                                                       */
-  /*   {                                                                   */
-  /*     FT_ERROR_START_LIST                                               */
-  /*   }                                                                   */
-  /*                                                                       */
-  /*   This macro is called before anything else to define the start of    */
-  /*   the error list.  It is followed by several FT_ERROR_DEF calls.      */
-  /*                                                                       */
-  /*   {                                                                   */
-  /*     FT_ERROR_DEF( e, v, s )                                           */
-  /*   }                                                                   */
-  /*                                                                       */
-  /*   This macro is called to define one single error.  `e' is the error  */
-  /*   code identifier (e.g., `Invalid_Argument'), `v' is the error's      */
-  /*   numerical value, and `s' is the corresponding error string.         */
-  /*                                                                       */
-  /*   {                                                                   */
-  /*     FT_ERROR_END_LIST                                                 */
-  /*   }                                                                   */
-  /*                                                                       */
-  /*   This macro ends the list.                                           */
-  /*                                                                       */
-  /*   Additionally, you have to undefine `FTERRORS_H_' before #including  */
-  /*   this file.                                                          */
-  /*                                                                       */
-  /*   Here is a simple example.                                           */
-  /*                                                                       */
-  /*   {                                                                   */
-  /*     #undef FTERRORS_H_                                                */
-  /*     #define FT_ERRORDEF( e, v, s )  { e, s },                         */
-  /*     #define FT_ERROR_START_LIST     {                                 */
-  /*     #define FT_ERROR_END_LIST       { 0, NULL } };                    */
-  /*                                                                       */
-  /*     const struct                                                      */
-  /*     {                                                                 */
-  /*       int          err_code;                                          */
-  /*       const char*  err_msg;                                           */
-  /*     } ft_errors[] =                                                   */
-  /*                                                                       */
-  /*     #include FT_ERRORS_H                                              */
-  /*   }                                                                   */
-  /*                                                                       */
-  /*   Note that `FT_Err_Ok' is _not_ defined with `FT_ERRORDEF' but with  */
-  /*   `FT_NOERRORDEF'; it is always zero.                                 */
-  /*                                                                       */
-  /*************************************************************************/
-
-  /* */
-
-  /* In previous FreeType versions we used `__FTERRORS_H__'.  However, */
-  /* using two successive underscores in a non-system symbol name      */
-  /* violates the C (and C++) standard, so it was changed to the       */
-  /* current form.  In spite of this, we have to make                  */
-  /*                                                                   */
-  /*   #undefine __FTERRORS_H__                                        */
-  /*                                                                   */
-  /* work for backward compatibility.                                  */
-  /*                                                                   */
-#if !( defined( FTERRORS_H_ ) && defined ( __FTERRORS_H__ ) )
-#define FTERRORS_H_
-#define __FTERRORS_H__
-
-
-  /* include module base error codes */
-#include FT_MODULE_ERRORS_H
-
-
-  /*******************************************************************/
-  /*******************************************************************/
-  /*****                                                         *****/
-  /*****                       SETUP MACROS                      *****/
-  /*****                                                         *****/
-  /*******************************************************************/
-  /*******************************************************************/
-
-
-#undef  FT_NEED_EXTERN_C
-
-
-  /* FT_ERR_PREFIX is used as a prefix for error identifiers. */
-  /* By default, we use `FT_Err_'.                            */
-  /*                                                          */
-#ifndef FT_ERR_PREFIX
-#define FT_ERR_PREFIX  FT_Err_
-#endif
-
-
-  /* FT_ERR_BASE is used as the base for module-specific errors. */
-  /*                                                             */
-#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
-
-#ifndef FT_ERR_BASE
-#define FT_ERR_BASE  FT_Mod_Err_Base
-#endif
-
-#else
-
-#undef FT_ERR_BASE
-#define FT_ERR_BASE  0
-
-#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */
-
-
-  /* If FT_ERRORDEF is not defined, we need to define a simple */
-  /* enumeration type.                                         */
-  /*                                                           */
-#ifndef FT_ERRORDEF
-
-#define FT_ERRORDEF( e, v, s )  e = v,
-#define FT_ERROR_START_LIST     enum {
-#define FT_ERROR_END_LIST       FT_ERR_CAT( FT_ERR_PREFIX, Max ) };
-
-#ifdef __cplusplus
-#define FT_NEED_EXTERN_C
-  extern "C" {
-#endif
-
-#endif /* !FT_ERRORDEF */
-
-
-  /* this macro is used to define an error */
-#define FT_ERRORDEF_( e, v, s )                                             \
-          FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s )
-
-  /* this is only used for <module>_Err_Ok, which must be 0! */
-#define FT_NOERRORDEF_( e, v, s )                             \
-          FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s )
-
-
-#ifdef FT_ERROR_START_LIST
-  FT_ERROR_START_LIST
-#endif
-
-
-  /* now include the error codes */
-#include FT_ERROR_DEFINITIONS_H
-
-
-#ifdef FT_ERROR_END_LIST
-  FT_ERROR_END_LIST
-#endif
-
-
-  /*******************************************************************/
-  /*******************************************************************/
-  /*****                                                         *****/
-  /*****                      SIMPLE CLEANUP                     *****/
-  /*****                                                         *****/
-  /*******************************************************************/
-  /*******************************************************************/
-
-#ifdef FT_NEED_EXTERN_C
-  }
-#endif
-
-#undef FT_ERROR_START_LIST
-#undef FT_ERROR_END_LIST
-
-#undef FT_ERRORDEF
-#undef FT_ERRORDEF_
-#undef FT_NOERRORDEF_
-
-#undef FT_NEED_EXTERN_C
-#undef FT_ERR_BASE
-
-  /* FT_ERR_PREFIX is needed internally */
-#ifndef FT2_BUILD_LIBRARY
-#undef FT_ERR_PREFIX
-#endif
-
-#endif /* !(FTERRORS_H_ && __FTERRORS_H__) */
-
-
-/* END */

+ 0 - 95
freetype/include/freetype/ftfntfmt.h

@@ -1,95 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftfntfmt.h                                                             */
-/*                                                                         */
-/*    Support functions for font formats.                                  */
-/*                                                                         */
-/*  Copyright 2002-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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 FTFNTFMT_H_
-#define FTFNTFMT_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>                                                             */
-  /*   font_formats                                                        */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*   Font Formats                                                        */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*   Getting the font format.                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*   The single function in this section can be used to get the font     */
-  /*   format.  Note that this information is not needed normally;         */
-  /*   however, there are special cases (like in PDF devices) where it is  */
-  /*   important to differentiate, in spite of FreeType's uniform API.     */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*   FT_Get_Font_Format                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*   Return a string describing the format of a given face.  Possible    */
-  /*   values are `TrueType', `Type~1', `BDF', `PCF', `Type~42',           */
-  /*   `CID~Type~1', `CFF', `PFR', and `Windows~FNT'.                      */
-  /*                                                                       */
-  /*   The return value is suitable to be used as an X11 FONT_PROPERTY.    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*   face ::                                                             */
-  /*     Input face handle.                                                */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*   Font format string.  NULL in case of error.                         */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*   A deprecated name for the same function is                          */
-  /*   `FT_Get_X11_Font_Format'.                                           */
-  /*                                                                       */
-  FT_EXPORT( const char* )
-  FT_Get_Font_Format( FT_Face  face );
-
-
-  /* deprecated */
-  FT_EXPORT( const char* )
-  FT_Get_X11_Font_Format( FT_Face  face );
-
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTFNTFMT_H_ */
-
-
-/* END */

+ 0 - 142
freetype/include/freetype/ftgasp.h

@@ -1,142 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftgasp.h                                                               */
-/*                                                                         */
-/*    Access of TrueType's `gasp' table (specification).                   */
-/*                                                                         */
-/*  Copyright 2007-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTGASP_H_
-#define FTGASP_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:
-   *   gasp_table
-   *
-   * @title:
-   *   Gasp Table
-   *
-   * @abstract:
-   *   Retrieving TrueType `gasp' table entries.
-   *
-   * @description:
-   *   The function @FT_Get_Gasp can be used to query a TrueType or OpenType
-   *   font for specific entries in its `gasp' table, if any.  This is
-   *   mainly useful when implementing native TrueType hinting with the
-   *   bytecode interpreter to duplicate the Windows text rendering results.
-   */
-
-  /*************************************************************************
-   *
-   * @enum:
-   *   FT_GASP_XXX
-   *
-   * @description:
-   *   A list of values and/or bit-flags returned by the @FT_Get_Gasp
-   *   function.
-   *
-   * @values:
-   *   FT_GASP_NO_TABLE ::
-   *     This special value means that there is no GASP table in this face.
-   *     It is up to the client to decide what to do.
-   *
-   *   FT_GASP_DO_GRIDFIT ::
-   *     Grid-fitting and hinting should be performed at the specified ppem.
-   *     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 ::
-   *     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.
-   *
-   * @since:
-   *   2.3.0
-   */
-#define FT_GASP_NO_TABLE               -1
-#define FT_GASP_DO_GRIDFIT           0x01
-#define FT_GASP_DO_GRAY              0x02
-#define FT_GASP_SYMMETRIC_GRIDFIT    0x04
-#define FT_GASP_SYMMETRIC_SMOOTHING  0x08
-
-
-  /*************************************************************************
-   *
-   * @func:
-   *   FT_Get_Gasp
-   *
-   * @description:
-   *   For a TrueType or OpenType font file, return the rasterizer behaviour
-   *   flags from the font's `gasp' table corresponding to a given
-   *   character pixel size.
-   *
-   * @input:
-   *   face :: The source face handle.
-   *
-   *   ppem :: The vertical character pixel size.
-   *
-   * @return:
-   *   Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no
-   *   `gasp' table in the face.
-   *
-   * @note:
-   *   If you want to use the MM functionality of OpenType variation fonts
-   *   (i.e., using @FT_Set_Var_Design_Coordinates and friends), call this
-   *   function *after* setting an instance since the return values can
-   *   change.
-   *
-   * @since:
-   *   2.3.0
-   */
-  FT_EXPORT( FT_Int )
-  FT_Get_Gasp( FT_Face  face,
-               FT_UInt  ppem );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTGASP_H_ */
-
-
-/* END */

+ 0 - 614
freetype/include/freetype/ftglyph.h

@@ -1,614 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftglyph.h                                                              */
-/*                                                                         */
-/*    FreeType convenience functions to handle glyphs (specification).     */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* This file contains the definition of several convenience functions    */
-  /* that can be used by client applications to easily retrieve glyph      */
-  /* bitmaps and outlines from a given face.                               */
-  /*                                                                       */
-  /* These functions should be optional if you are writing a font server   */
-  /* or text layout engine on top of FreeType.  However, they are pretty   */
-  /* handy for many other simple uses of the library.                      */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-#ifndef FTGLYPH_H_
-#define FTGLYPH_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>                                                             */
-  /*    glyph_management                                                   */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Glyph Management                                                   */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Generic interface to manage individual glyph data.                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains definitions used to manage glyph data        */
-  /*    through generic FT_Glyph objects.  Each of them can contain a      */
-  /*    bitmap, a vector outline, or even images in other formats.         */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /* forward declaration to a private type */
-  typedef struct FT_Glyph_Class_  FT_Glyph_Class;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Glyph                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Handle to an object used to model generic glyph images.  It is a   */
-  /*    pointer to the @FT_GlyphRec structure and can contain a glyph      */
-  /*    bitmap or pointer.                                                 */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Glyph objects are not owned by the library.  You must thus release */
-  /*    them manually (through @FT_Done_Glyph) _before_ calling            */
-  /*    @FT_Done_FreeType.                                                 */
-  /*                                                                       */
-  typedef struct FT_GlyphRec_*  FT_Glyph;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_GlyphRec                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The root glyph structure contains a given glyph image plus its     */
-  /*    advance width in 16.16 fixed-point format.                         */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    library :: A handle to the FreeType library object.                */
-  /*                                                                       */
-  /*    clazz   :: A pointer to the glyph's class.  Private.               */
-  /*                                                                       */
-  /*    format  :: The format of the glyph's image.                        */
-  /*                                                                       */
-  /*    advance :: A 16.16 vector that gives the glyph's advance width.    */
-  /*                                                                       */
-  typedef struct  FT_GlyphRec_
-  {
-    FT_Library             library;
-    const FT_Glyph_Class*  clazz;
-    FT_Glyph_Format        format;
-    FT_Vector              advance;
-
-  } FT_GlyphRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_BitmapGlyph                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to an object used to model a bitmap glyph image.  This is */
-  /*    a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec.     */
-  /*                                                                       */
-  typedef struct FT_BitmapGlyphRec_*  FT_BitmapGlyph;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_BitmapGlyphRec                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used for bitmap glyph images.  This really is a        */
-  /*    `sub-class' of @FT_GlyphRec.                                       */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    root   :: The root @FT_Glyph fields.                               */
-  /*                                                                       */
-  /*    left   :: The left-side bearing, i.e., the horizontal distance     */
-  /*              from the current pen position to the left border of the  */
-  /*              glyph bitmap.                                            */
-  /*                                                                       */
-  /*    top    :: The top-side bearing, i.e., the vertical distance from   */
-  /*              the current pen position to the top border of the glyph  */
-  /*              bitmap.  This distance is positive for upwards~y!        */
-  /*                                                                       */
-  /*    bitmap :: A descriptor for the bitmap.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have       */
-  /*    `glyph->format == FT_GLYPH_FORMAT_BITMAP'.  This lets you access   */
-  /*    the bitmap's contents easily.                                      */
-  /*                                                                       */
-  /*    The corresponding pixel buffer is always owned by @FT_BitmapGlyph  */
-  /*    and is thus created and destroyed with it.                         */
-  /*                                                                       */
-  typedef struct  FT_BitmapGlyphRec_
-  {
-    FT_GlyphRec  root;
-    FT_Int       left;
-    FT_Int       top;
-    FT_Bitmap    bitmap;
-
-  } FT_BitmapGlyphRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_OutlineGlyph                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to an object used to model an outline glyph image.  This  */
-  /*    is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. */
-  /*                                                                       */
-  typedef struct FT_OutlineGlyphRec_*  FT_OutlineGlyph;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_OutlineGlyphRec                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used for outline (vectorial) glyph images.  This       */
-  /*    really is a `sub-class' of @FT_GlyphRec.                           */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    root    :: The root @FT_Glyph fields.                              */
-  /*                                                                       */
-  /*    outline :: A descriptor for the outline.                           */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have      */
-  /*    `glyph->format == FT_GLYPH_FORMAT_OUTLINE'.  This lets you access  */
-  /*    the outline's content easily.                                      */
-  /*                                                                       */
-  /*    As the outline is extracted from a glyph slot, its coordinates are */
-  /*    expressed normally in 26.6 pixels, unless the flag                 */
-  /*    @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char(). */
-  /*                                                                       */
-  /*    The outline's tables are always owned by the object and are        */
-  /*    destroyed with it.                                                 */
-  /*                                                                       */
-  typedef struct  FT_OutlineGlyphRec_
-  {
-    FT_GlyphRec  root;
-    FT_Outline   outline;
-
-  } FT_OutlineGlyphRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Glyph                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function used to extract a glyph image from a slot.  Note that   */
-  /*    the created @FT_Glyph object must be released with @FT_Done_Glyph. */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    slot   :: A handle to the source glyph slot.                       */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    aglyph :: A handle to the glyph object.                            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Because `*aglyph->advance.x' and '*aglyph->advance.y' are 16.16    */
-  /*    fixed-point numbers, `slot->advance.x' and `slot->advance.y'       */
-  /*    (which are in 26.6 fixed-point format) must be in the range        */
-  /*    ]-32768;32768[.                                                    */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Glyph( FT_GlyphSlot  slot,
-                FT_Glyph     *aglyph );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Glyph_Copy                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function used to copy a glyph image.  Note that the created      */
-  /*    @FT_Glyph object must be released with @FT_Done_Glyph.             */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    source :: A handle to the source glyph object.                     */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    target :: A handle to the target glyph object.  0~in case of       */
-  /*              error.                                                   */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Glyph_Copy( FT_Glyph   source,
-                 FT_Glyph  *target );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Glyph_Transform                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Transform a glyph image if its format is scalable.                 */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    glyph  :: A handle to the target glyph object.                     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    matrix :: A pointer to a 2x2 matrix to apply.                      */
-  /*                                                                       */
-  /*    delta  :: A pointer to a 2d vector to apply.  Coordinates are      */
-  /*              expressed in 1/64th of a pixel.                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code (if not 0, the glyph format is not scalable).  */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The 2x2 transformation matrix is also applied to the glyph's       */
-  /*    advance vector.                                                    */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Glyph_Transform( FT_Glyph    glyph,
-                      FT_Matrix*  matrix,
-                      FT_Vector*  delta );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_Glyph_BBox_Mode                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The mode how the values of @FT_Glyph_Get_CBox are returned.        */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_GLYPH_BBOX_UNSCALED ::                                          */
-  /*      Return unscaled font units.                                      */
-  /*                                                                       */
-  /*    FT_GLYPH_BBOX_SUBPIXELS ::                                         */
-  /*      Return unfitted 26.6 coordinates.                                */
-  /*                                                                       */
-  /*    FT_GLYPH_BBOX_GRIDFIT ::                                           */
-  /*      Return grid-fitted 26.6 coordinates.                             */
-  /*                                                                       */
-  /*    FT_GLYPH_BBOX_TRUNCATE ::                                          */
-  /*      Return coordinates in integer pixels.                            */
-  /*                                                                       */
-  /*    FT_GLYPH_BBOX_PIXELS ::                                            */
-  /*      Return grid-fitted pixel coordinates.                            */
-  /*                                                                       */
-  typedef enum  FT_Glyph_BBox_Mode_
-  {
-    FT_GLYPH_BBOX_UNSCALED  = 0,
-    FT_GLYPH_BBOX_SUBPIXELS = 0,
-    FT_GLYPH_BBOX_GRIDFIT   = 1,
-    FT_GLYPH_BBOX_TRUNCATE  = 2,
-    FT_GLYPH_BBOX_PIXELS    = 3
-
-  } FT_Glyph_BBox_Mode;
-
-
-  /* these constants are deprecated; use the corresponding */
-  /* `FT_Glyph_BBox_Mode' values instead                   */
-#define ft_glyph_bbox_unscaled   FT_GLYPH_BBOX_UNSCALED
-#define ft_glyph_bbox_subpixels  FT_GLYPH_BBOX_SUBPIXELS
-#define ft_glyph_bbox_gridfit    FT_GLYPH_BBOX_GRIDFIT
-#define ft_glyph_bbox_truncate   FT_GLYPH_BBOX_TRUNCATE
-#define ft_glyph_bbox_pixels     FT_GLYPH_BBOX_PIXELS
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Glyph_Get_CBox                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return a glyph's `control box'.  The control box encloses all the  */
-  /*    outline's points, including Bezier control points.  Though it      */
-  /*    coincides with the exact bounding box for most glyphs, it can be   */
-  /*    slightly larger in some situations (like when rotating an outline  */
-  /*    that contains Bezier outside arcs).                                */
-  /*                                                                       */
-  /*    Computing the control box is very fast, while getting the bounding */
-  /*    box can take much more time as it needs to walk over all segments  */
-  /*    and arcs in the outline.  To get the latter, you can use the       */
-  /*    `ftbbox' component, which is dedicated to this single task.        */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    glyph :: A handle to the source glyph object.                      */
-  /*                                                                       */
-  /*    mode  :: The mode that indicates how to interpret the returned     */
-  /*             bounding box values.                                      */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    acbox :: The glyph coordinate bounding box.  Coordinates are       */
-  /*             expressed in 1/64th of pixels if it is grid-fitted.       */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Coordinates are relative to the glyph origin, using the y~upwards  */
-  /*    convention.                                                        */
-  /*                                                                       */
-  /*    If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode'   */
-  /*    must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font        */
-  /*    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:                                        */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      width  = bbox.xMax - bbox.xMin;                                  */
-  /*      height = bbox.yMax - bbox.yMin;                                  */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    Note also that for 26.6 coordinates, if `bbox_mode' is set to      */
-  /*    @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted,  */
-  /*    which corresponds to:                                              */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      bbox.xMin = FLOOR(bbox.xMin);                                    */
-  /*      bbox.yMin = FLOOR(bbox.yMin);                                    */
-  /*      bbox.xMax = CEILING(bbox.xMax);                                  */
-  /*      bbox.yMax = CEILING(bbox.yMax);                                  */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    To get the bbox in pixel coordinates, set `bbox_mode' to           */
-  /*    @FT_GLYPH_BBOX_TRUNCATE.                                           */
-  /*                                                                       */
-  /*    To get the bbox in grid-fitted pixel coordinates, set `bbox_mode'  */
-  /*    to @FT_GLYPH_BBOX_PIXELS.                                          */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Glyph_Get_CBox( FT_Glyph  glyph,
-                     FT_UInt   bbox_mode,
-                     FT_BBox  *acbox );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Glyph_To_Bitmap                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Convert a given glyph object to a bitmap glyph object.             */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    the_glyph   :: A pointer to a handle to the target glyph.          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    render_mode :: An enumeration that describes how the data is       */
-  /*                   rendered.                                           */
-  /*                                                                       */
-  /*    origin      :: A pointer to a vector used to translate the glyph   */
-  /*                   image before rendering.  Can be~0 (if no            */
-  /*                   translation).  The origin is expressed in           */
-  /*                   26.6 pixels.                                        */
-  /*                                                                       */
-  /*    destroy     :: A boolean that indicates that the original glyph    */
-  /*                   image should be destroyed by this function.  It is  */
-  /*                   never destroyed in case of error.                   */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function does nothing if the glyph format isn't scalable.     */
-  /*                                                                       */
-  /*    The glyph image is translated with the `origin' vector before      */
-  /*    rendering.                                                         */
-  /*                                                                       */
-  /*    The first parameter is a pointer to an @FT_Glyph handle, that will */
-  /*    be _replaced_ by this function (with newly allocated data).        */
-  /*    Typically, you would use (omitting error handling):                */
-  /*                                                                       */
-  /*                                                                       */
-  /*      {                                                                */
-  /*        FT_Glyph        glyph;                                         */
-  /*        FT_BitmapGlyph  glyph_bitmap;                                  */
-  /*                                                                       */
-  /*                                                                       */
-  /*        // load glyph                                                  */
-  /*        error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT );    */
-  /*                                                                       */
-  /*        // extract glyph image                                         */
-  /*        error = FT_Get_Glyph( face->glyph, &glyph );                   */
-  /*                                                                       */
-  /*        // convert to a bitmap (default render mode + destroying old)  */
-  /*        if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )                 */
-  /*        {                                                              */
-  /*          error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL,   */
-  /*                                      0, 1 );                          */
-  /*          if ( error ) // `glyph' unchanged                            */
-  /*            ...                                                        */
-  /*        }                                                              */
-  /*                                                                       */
-  /*        // access bitmap content by typecasting                        */
-  /*        glyph_bitmap = (FT_BitmapGlyph)glyph;                          */
-  /*                                                                       */
-  /*        // do funny stuff with it, like blitting/drawing               */
-  /*        ...                                                            */
-  /*                                                                       */
-  /*        // discard glyph image (bitmap or not)                         */
-  /*        FT_Done_Glyph( glyph );                                        */
-  /*      }                                                                */
-  /*                                                                       */
-  /*                                                                       */
-  /*    Here another example, again without error handling:                */
-  /*                                                                       */
-  /*                                                                       */
-  /*      {                                                                */
-  /*        FT_Glyph  glyphs[MAX_GLYPHS]                                   */
-  /*                                                                       */
-  /*                                                                       */
-  /*        ...                                                            */
-  /*                                                                       */
-  /*        for ( idx = 0; i < MAX_GLYPHS; i++ )                           */
-  /*          error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) ||       */
-  /*                  FT_Get_Glyph ( face->glyph, &glyph[idx] );           */
-  /*                                                                       */
-  /*        ...                                                            */
-  /*                                                                       */
-  /*        for ( idx = 0; i < MAX_GLYPHS; i++ )                           */
-  /*        {                                                              */
-  /*          FT_Glyph  bitmap = glyphs[idx];                              */
-  /*                                                                       */
-  /*                                                                       */
-  /*          ...                                                          */
-  /*                                                                       */
-  /*          // after this call, `bitmap' no longer points into           */
-  /*          // the `glyphs' array (and the old value isn't destroyed)    */
-  /*          FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 );    */
-  /*                                                                       */
-  /*          ...                                                          */
-  /*                                                                       */
-  /*          FT_Done_Glyph( bitmap );                                     */
-  /*        }                                                              */
-  /*                                                                       */
-  /*        ...                                                            */
-  /*                                                                       */
-  /*        for ( idx = 0; i < MAX_GLYPHS; i++ )                           */
-  /*          FT_Done_Glyph( glyphs[idx] );                                */
-  /*      }                                                                */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Glyph_To_Bitmap( FT_Glyph*       the_glyph,
-                      FT_Render_Mode  render_mode,
-                      FT_Vector*      origin,
-                      FT_Bool         destroy );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Done_Glyph                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Destroy a given glyph.                                             */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    glyph :: A handle to the target glyph object.                      */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Done_Glyph( FT_Glyph  glyph );
-
-  /* */
-
-
-  /* other helpful functions */
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    computations                                                       */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Matrix_Multiply                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Perform the matrix operation `b = a*b'.                            */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    a :: A pointer to matrix `a'.                                      */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    b :: A pointer to matrix `b'.                                      */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The result is undefined if either `a' or `b' is zero.              */
-  /*                                                                       */
-  /*    Since the function uses wrap-around arithmetic, results become     */
-  /*    meaningless if the arguments are very large.                       */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Matrix_Multiply( const FT_Matrix*  a,
-                      FT_Matrix*        b );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Matrix_Invert                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Invert a 2x2 matrix.  Return an error if it can't be inverted.     */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    matrix :: A pointer to the target matrix.  Remains untouched in    */
-  /*              case of error.                                           */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Matrix_Invert( FT_Matrix*  matrix );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTGLYPH_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8    */
-/* End:             */

+ 0 - 357
freetype/include/freetype/ftgxval.h

@@ -1,357 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftgxval.h                                                              */
-/*                                                                         */
-/*    FreeType API for validating TrueTypeGX/AAT tables (specification).   */
-/*                                                                         */
-/*  Copyright 2004-2018 by                                                 */
-/*  Masatake YAMATO, Redhat K.K,                                           */
-/*  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.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-/***************************************************************************/
-/*                                                                         */
-/* gxvalid is derived from both gxlayout module and otvalid module.        */
-/* Development of gxlayout is supported by the Information-technology      */
-/* Promotion Agency(IPA), Japan.                                           */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTGXVAL_H_
-#define FTGXVAL_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>                                                             */
-  /*    gx_validation                                                      */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    TrueTypeGX/AAT Validation                                          */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    An API to validate TrueTypeGX/AAT tables.                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains the declaration of functions to validate     */
-  /*    some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd,  */
-  /*    trak, prop, lcar).                                                 */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    FT_TrueTypeGX_Validate                                             */
-  /*    FT_TrueTypeGX_Free                                                 */
-  /*                                                                       */
-  /*    FT_ClassicKern_Validate                                            */
-  /*    FT_ClassicKern_Free                                                */
-  /*                                                                       */
-  /*    FT_VALIDATE_GX_LENGTH                                              */
-  /*    FT_VALIDATE_GXXXX                                                  */
-  /*    FT_VALIDATE_CKERNXXX                                               */
-  /*                                                                       */
-  /*************************************************************************/
-
-  /*************************************************************************/
-  /*                                                                       */
-  /*                                                                       */
-  /* Warning: Use FT_VALIDATE_XXX to validate a table.                     */
-  /*          Following definitions are for gxvalid developers.            */
-  /*                                                                       */
-  /*                                                                       */
-  /*************************************************************************/
-
-#define FT_VALIDATE_feat_INDEX     0
-#define FT_VALIDATE_mort_INDEX     1
-#define FT_VALIDATE_morx_INDEX     2
-#define FT_VALIDATE_bsln_INDEX     3
-#define FT_VALIDATE_just_INDEX     4
-#define FT_VALIDATE_kern_INDEX     5
-#define FT_VALIDATE_opbd_INDEX     6
-#define FT_VALIDATE_trak_INDEX     7
-#define FT_VALIDATE_prop_INDEX     8
-#define FT_VALIDATE_lcar_INDEX     9
-#define FT_VALIDATE_GX_LAST_INDEX  FT_VALIDATE_lcar_INDEX
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_VALIDATE_GX_LENGTH
-   *
-   * @description:
-   *   The number of tables checked in this module.  Use it as a parameter
-   *   for the `table-length' argument of function @FT_TrueTypeGX_Validate.
-   */
-#define FT_VALIDATE_GX_LENGTH  ( FT_VALIDATE_GX_LAST_INDEX + 1 )
-
-  /* */
-
-  /* Up to 0x1000 is used by otvalid.
-     Ox2xxx is reserved for feature OT extension. */
-#define FT_VALIDATE_GX_START  0x4000
-#define FT_VALIDATE_GX_BITFIELD( tag ) \
-          ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
-
-
- /**********************************************************************
-  *
-  * @enum:
-  *    FT_VALIDATE_GXXXX
-  *
-  * @description:
-  *    A list of bit-field constants used with @FT_TrueTypeGX_Validate to
-  *    indicate which TrueTypeGX/AAT Type tables should be validated.
-  *
-  * @values:
-  *    FT_VALIDATE_feat ::
-  *      Validate `feat' table.
-  *
-  *    FT_VALIDATE_mort ::
-  *      Validate `mort' table.
-  *
-  *    FT_VALIDATE_morx ::
-  *      Validate `morx' table.
-  *
-  *    FT_VALIDATE_bsln ::
-  *      Validate `bsln' table.
-  *
-  *    FT_VALIDATE_just ::
-  *      Validate `just' table.
-  *
-  *    FT_VALIDATE_kern ::
-  *      Validate `kern' table.
-  *
-  *    FT_VALIDATE_opbd ::
-  *      Validate `opbd' table.
-  *
-  *    FT_VALIDATE_trak ::
-  *      Validate `trak' table.
-  *
-  *    FT_VALIDATE_prop ::
-  *      Validate `prop' table.
-  *
-  *    FT_VALIDATE_lcar ::
-  *      Validate `lcar' table.
-  *
-  *    FT_VALIDATE_GX ::
-  *      Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern,
-  *      opbd, trak, prop and lcar).
-  *
-  */
-
-#define FT_VALIDATE_feat  FT_VALIDATE_GX_BITFIELD( feat )
-#define FT_VALIDATE_mort  FT_VALIDATE_GX_BITFIELD( mort )
-#define FT_VALIDATE_morx  FT_VALIDATE_GX_BITFIELD( morx )
-#define FT_VALIDATE_bsln  FT_VALIDATE_GX_BITFIELD( bsln )
-#define FT_VALIDATE_just  FT_VALIDATE_GX_BITFIELD( just )
-#define FT_VALIDATE_kern  FT_VALIDATE_GX_BITFIELD( kern )
-#define FT_VALIDATE_opbd  FT_VALIDATE_GX_BITFIELD( opbd )
-#define FT_VALIDATE_trak  FT_VALIDATE_GX_BITFIELD( trak )
-#define FT_VALIDATE_prop  FT_VALIDATE_GX_BITFIELD( prop )
-#define FT_VALIDATE_lcar  FT_VALIDATE_GX_BITFIELD( lcar )
-
-#define FT_VALIDATE_GX  ( FT_VALIDATE_feat | \
-                          FT_VALIDATE_mort | \
-                          FT_VALIDATE_morx | \
-                          FT_VALIDATE_bsln | \
-                          FT_VALIDATE_just | \
-                          FT_VALIDATE_kern | \
-                          FT_VALIDATE_opbd | \
-                          FT_VALIDATE_trak | \
-                          FT_VALIDATE_prop | \
-                          FT_VALIDATE_lcar )
-
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_TrueTypeGX_Validate
-  *
-  * @description:
-  *    Validate various TrueTypeGX tables to assure that all offsets and
-  *    indices are valid.  The idea is that a higher-level library that
-  *    actually does the text layout can access those tables without
-  *    error checking (which can be quite time consuming).
-  *
-  * @input:
-  *    face ::
-  *       A handle to the input face.
-  *
-  *    validation_flags ::
-  *       A bit field that specifies the tables to be validated.  See
-  *       @FT_VALIDATE_GXXXX for possible values.
-  *
-  *    table_length ::
-  *       The size of the `tables' array.  Normally, @FT_VALIDATE_GX_LENGTH
-  *       should be passed.
-  *
-  * @output:
-  *    tables ::
-  *       The array where all validated sfnt tables are stored.
-  *       The array itself must be allocated by a client.
-  *
-  * @return:
-  *   FreeType error code.  0~means success.
-  *
-  * @note:
-  *   This function only works with TrueTypeGX fonts, returning an error
-  *   otherwise.
-  *
-  *   After use, the application should deallocate the buffers pointed to by
-  *   each `tables' element, by calling @FT_TrueTypeGX_Free.  A NULL value
-  *   indicates that the table either doesn't exist in the font, the
-  *   application hasn't asked for validation, or the validator doesn't have
-  *   the ability to validate the sfnt table.
-  */
-  FT_EXPORT( FT_Error )
-  FT_TrueTypeGX_Validate( FT_Face   face,
-                          FT_UInt   validation_flags,
-                          FT_Bytes  tables[FT_VALIDATE_GX_LENGTH],
-                          FT_UInt   table_length );
-
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_TrueTypeGX_Free
-  *
-  * @description:
-  *    Free the buffer allocated by TrueTypeGX validator.
-  *
-  * @input:
-  *    face ::
-  *       A handle to the input face.
-  *
-  *    table ::
-  *       The pointer to the buffer allocated by
-  *       @FT_TrueTypeGX_Validate.
-  *
-  * @note:
-  *   This function must be used to free the buffer allocated by
-  *   @FT_TrueTypeGX_Validate only.
-  */
-  FT_EXPORT( void )
-  FT_TrueTypeGX_Free( FT_Face   face,
-                      FT_Bytes  table );
-
-
- /**********************************************************************
-  *
-  * @enum:
-  *    FT_VALIDATE_CKERNXXX
-  *
-  * @description:
-  *    A list of bit-field constants used with @FT_ClassicKern_Validate
-  *    to indicate the classic kern dialect or dialects.  If the selected
-  *    type doesn't fit, @FT_ClassicKern_Validate regards the table as
-  *    invalid.
-  *
-  * @values:
-  *    FT_VALIDATE_MS ::
-  *      Handle the `kern' table as a classic Microsoft kern table.
-  *
-  *    FT_VALIDATE_APPLE ::
-  *      Handle the `kern' table as a classic Apple kern table.
-  *
-  *    FT_VALIDATE_CKERN ::
-  *      Handle the `kern' as either classic Apple or Microsoft kern table.
-  */
-#define FT_VALIDATE_MS     ( FT_VALIDATE_GX_START << 0 )
-#define FT_VALIDATE_APPLE  ( FT_VALIDATE_GX_START << 1 )
-
-#define FT_VALIDATE_CKERN  ( FT_VALIDATE_MS | FT_VALIDATE_APPLE )
-
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_ClassicKern_Validate
-  *
-  * @description:
-  *    Validate classic (16-bit format) kern table to assure that the offsets
-  *    and indices are valid.  The idea is that a higher-level library that
-  *    actually does the text layout can access those tables without error
-  *    checking (which can be quite time consuming).
-  *
-  *    The `kern' table validator in @FT_TrueTypeGX_Validate deals with both
-  *    the new 32-bit format and the classic 16-bit format, while
-  *    FT_ClassicKern_Validate only supports the classic 16-bit format.
-  *
-  * @input:
-  *    face ::
-  *       A handle to the input face.
-  *
-  *    validation_flags ::
-  *       A bit field that specifies the dialect to be validated.  See
-  *       @FT_VALIDATE_CKERNXXX for possible values.
-  *
-  * @output:
-  *    ckern_table ::
-  *       A pointer to the kern table.
-  *
-  * @return:
-  *   FreeType error code.  0~means success.
-  *
-  * @note:
-  *   After use, the application should deallocate the buffers pointed to by
-  *   `ckern_table', by calling @FT_ClassicKern_Free.  A NULL value
-  *   indicates that the table doesn't exist in the font.
-  */
-  FT_EXPORT( FT_Error )
-  FT_ClassicKern_Validate( FT_Face    face,
-                           FT_UInt    validation_flags,
-                           FT_Bytes  *ckern_table );
-
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_ClassicKern_Free
-  *
-  * @description:
-  *    Free the buffer allocated by classic Kern validator.
-  *
-  * @input:
-  *    face ::
-  *       A handle to the input face.
-  *
-  *    table ::
-  *       The pointer to the buffer that is allocated by
-  *       @FT_ClassicKern_Validate.
-  *
-  * @note:
-  *   This function must be used to free the buffer allocated by
-  *   @FT_ClassicKern_Validate only.
-  */
-  FT_EXPORT( void )
-  FT_ClassicKern_Free( FT_Face   face,
-                       FT_Bytes  table );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTGXVAL_H_ */
-
-
-/* END */

+ 0 - 151
freetype/include/freetype/ftgzip.h

@@ -1,151 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftgzip.h                                                               */
-/*                                                                         */
-/*    Gzip-compressed stream support.                                      */
-/*                                                                         */
-/*  Copyright 2002-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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 FTGZIP_H_
-#define FTGZIP_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>                                                             */
-  /*    gzip                                                               */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    GZIP Streams                                                       */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Using gzip-compressed font files.                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains the declaration of Gzip-specific functions.  */
-  /*                                                                       */
-  /*************************************************************************/
-
-
- /************************************************************************
-  *
-  * @function:
-  *   FT_Stream_OpenGzip
-  *
-  * @description:
-  *   Open a new stream to parse gzip-compressed font files.  This is
-  *   mainly used to support the compressed `*.pcf.gz' 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, gzip 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 gzipped 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 zlib support.
-  */
-  FT_EXPORT( FT_Error )
-  FT_Stream_OpenGzip( FT_Stream  stream,
-                      FT_Stream  source );
-
-
- /************************************************************************
-  *
-  * @function:
-  *   FT_Gzip_Uncompress
-  *
-  * @description:
-  *   Decompress a zipped input buffer into an output buffer.  This function
-  *   is modeled after zlib's `uncompress' function.
-  *
-  * @input:
-  *   memory ::
-  *     A FreeType memory handle.
-  *
-  *   input ::
-  *     The input buffer.
-  *
-  *   input_len ::
-  *     The length of the input buffer.
-  *
-  * @output:
-  *   output::
-  *     The output buffer.
-  *
-  * @inout:
-  *   output_len ::
-  *     Before calling the function, this is the total size of the output
-  *     buffer, which must be large enough to hold the entire uncompressed
-  *     data (so the size of the uncompressed data must be known in
-  *     advance).  After calling the function, `output_len' is the size of
-  *     the used data in `output'.
-  *
-  * @return:
-  *   FreeType error code.  0~means success.
-  *
-  * @note:
-  *   This function may return `FT_Err_Unimplemented_Feature' if your build
-  *   of FreeType was not compiled with zlib support.
-  *
-  * @since:
-  *   2.5.1
-  */
-  FT_EXPORT( FT_Error )
-  FT_Gzip_Uncompress( FT_Memory       memory,
-                      FT_Byte*        output,
-                      FT_ULong*       output_len,
-                      const FT_Byte*  input,
-                      FT_ULong        input_len );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTGZIP_H_ */
-
-
-/* END */

+ 0 - 1205
freetype/include/freetype/ftimage.h

@@ -1,1205 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftimage.h                                                              */
-/*                                                                         */
-/*    FreeType glyph image formats and default raster interface            */
-/*    (specification).                                                     */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Note: A `raster' is simply a scan-line converter, used to render      */
-  /*       FT_Outlines into FT_Bitmaps.                                    */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-#ifndef FTIMAGE_H_
-#define FTIMAGE_H_
-
-
-  /* STANDALONE_ is from ftgrays.c */
-#ifndef STANDALONE_
-#include <ft2build.h>
-#endif
-
-
-FT_BEGIN_HEADER
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    basic_types                                                        */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Pos                                                             */
-  /*                                                                       */
-  /* <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-point pixel coordinates.            */
-  /*                                                                       */
-  typedef signed long  FT_Pos;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Vector                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A simple structure used to store a 2D vector; coordinates are of   */
-  /*    the FT_Pos type.                                                   */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    x :: The horizontal coordinate.                                    */
-  /*    y :: The vertical coordinate.                                      */
-  /*                                                                       */
-  typedef struct  FT_Vector_
-  {
-    FT_Pos  x;
-    FT_Pos  y;
-
-  } FT_Vector;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_BBox                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to hold an outline's bounding box, i.e., the      */
-  /*    coordinates of its extrema in the horizontal and vertical          */
-  /*    directions.                                                        */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    xMin :: The horizontal minimum (left-most).                        */
-  /*                                                                       */
-  /*    yMin :: The vertical minimum (bottom-most).                        */
-  /*                                                                       */
-  /*    xMax :: The horizontal maximum (right-most).                       */
-  /*                                                                       */
-  /*    yMax :: The vertical maximum (top-most).                           */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The bounding box is specified with the coordinates of the lower    */
-  /*    left and the upper right corner.  In PostScript, those values are  */
-  /*    often called (llx,lly) and (urx,ury), respectively.                */
-  /*                                                                       */
-  /*    If `yMin' is negative, this value gives the glyph's descender.     */
-  /*    Otherwise, the glyph doesn't descend below the baseline.           */
-  /*    Similarly, if `ymax' is positive, this value gives the glyph's     */
-  /*    ascender.                                                          */
-  /*                                                                       */
-  /*    `xMin' gives the horizontal distance from the glyph's origin to    */
-  /*    the left edge of the glyph's bounding box.  If `xMin' is negative, */
-  /*    the glyph extends to the left of the origin.                       */
-  /*                                                                       */
-  typedef struct  FT_BBox_
-  {
-    FT_Pos  xMin, yMin;
-    FT_Pos  xMax, yMax;
-
-  } FT_BBox;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_Pixel_Mode                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An enumeration type used to describe the format of pixels in a     */
-  /*    given bitmap.  Note that additional formats may be added in the    */
-  /*    future.                                                            */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_PIXEL_MODE_NONE ::                                              */
-  /*      Value~0 is reserved.                                             */
-  /*                                                                       */
-  /*    FT_PIXEL_MODE_MONO ::                                              */
-  /*      A monochrome bitmap, using 1~bit per pixel.  Note that pixels    */
-  /*      are stored in most-significant order (MSB), which means that     */
-  /*      the left-most pixel in a byte has value 128.                     */
-  /*                                                                       */
-  /*    FT_PIXEL_MODE_GRAY ::                                              */
-  /*      An 8-bit bitmap, generally used to represent anti-aliased glyph  */
-  /*      images.  Each pixel is stored in one byte.  Note that the number */
-  /*      of `gray' levels is stored in the `num_grays' field of the       */
-  /*      @FT_Bitmap structure (it generally is 256).                      */
-  /*                                                                       */
-  /*    FT_PIXEL_MODE_GRAY2 ::                                             */
-  /*      A 2-bit per pixel bitmap, used to represent embedded             */
-  /*      anti-aliased bitmaps in font files according to the OpenType     */
-  /*      specification.  We haven't found a single font using this        */
-  /*      format, however.                                                 */
-  /*                                                                       */
-  /*    FT_PIXEL_MODE_GRAY4 ::                                             */
-  /*      A 4-bit per pixel bitmap, representing embedded anti-aliased     */
-  /*      bitmaps in font files according to the OpenType specification.   */
-  /*      We haven't found a single font using this format, however.       */
-  /*                                                                       */
-  /*    FT_PIXEL_MODE_LCD ::                                               */
-  /*      An 8-bit bitmap, representing RGB or BGR decimated glyph images  */
-  /*      used for display on LCD displays; the bitmap is three times      */
-  /*      wider than the original glyph image.  See also                   */
-  /*      @FT_RENDER_MODE_LCD.                                             */
-  /*                                                                       */
-  /*    FT_PIXEL_MODE_LCD_V ::                                             */
-  /*      An 8-bit bitmap, representing RGB or BGR decimated glyph images  */
-  /*      used for display on rotated LCD displays; the bitmap is three    */
-  /*      times taller than the original glyph image.  See also            */
-  /*      @FT_RENDER_MODE_LCD_V.                                           */
-  /*                                                                       */
-  /*    FT_PIXEL_MODE_BGRA ::                                              */
-  /*      [Since 2.5] An image with four 8-bit channels per pixel,         */
-  /*      representing a color image (such as emoticons) with alpha        */
-  /*      channel.  For each pixel, the format is BGRA, which means, the   */
-  /*      blue channel comes first in memory.  The color channels are      */
-  /*      pre-multiplied and in the sRGB colorspace.  For example, full    */
-  /*      red at half-translucent opacity will be represented as           */
-  /*      `00,00,80,80', not `00,00,FF,80'.  See also @FT_LOAD_COLOR.      */
-  /*                                                                       */
-  typedef enum  FT_Pixel_Mode_
-  {
-    FT_PIXEL_MODE_NONE = 0,
-    FT_PIXEL_MODE_MONO,
-    FT_PIXEL_MODE_GRAY,
-    FT_PIXEL_MODE_GRAY2,
-    FT_PIXEL_MODE_GRAY4,
-    FT_PIXEL_MODE_LCD,
-    FT_PIXEL_MODE_LCD_V,
-    FT_PIXEL_MODE_BGRA,
-
-    FT_PIXEL_MODE_MAX      /* do not remove */
-
-  } FT_Pixel_Mode;
-
-
-  /* these constants are deprecated; use the corresponding `FT_Pixel_Mode' */
-  /* values instead.                                                       */
-#define ft_pixel_mode_none   FT_PIXEL_MODE_NONE
-#define ft_pixel_mode_mono   FT_PIXEL_MODE_MONO
-#define ft_pixel_mode_grays  FT_PIXEL_MODE_GRAY
-#define ft_pixel_mode_pal2   FT_PIXEL_MODE_GRAY2
-#define ft_pixel_mode_pal4   FT_PIXEL_MODE_GRAY4
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Bitmap                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to describe a bitmap or pixmap to the raster.     */
-  /*    Note that we now manage pixmaps of various depths through the      */
-  /*    `pixel_mode' field.                                                */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    rows         :: The number of bitmap rows.                         */
-  /*                                                                       */
-  /*    width        :: The number of pixels in bitmap row.                */
-  /*                                                                       */
-  /*    pitch        :: The pitch's absolute value is the number of bytes  */
-  /*                    taken by one bitmap row, including padding.        */
-  /*                    However, the pitch is positive when the bitmap has */
-  /*                    a `down' flow, and negative when it has an `up'    */
-  /*                    flow.  In all cases, the pitch is an offset to add */
-  /*                    to a bitmap pointer in order to go down one row.   */
-  /*                                                                       */
-  /*                    Note that `padding' means the alignment of a       */
-  /*                    bitmap to a byte border, and FreeType functions    */
-  /*                    normally align to the smallest possible integer    */
-  /*                    value.                                             */
-  /*                                                                       */
-  /*                    For the B/W rasterizer, `pitch' is always an even  */
-  /*                    number.                                            */
-  /*                                                                       */
-  /*                    To change the pitch of a bitmap (say, to make it a */
-  /*                    multiple of 4), use @FT_Bitmap_Convert.            */
-  /*                    Alternatively, you might use callback functions to */
-  /*                    directly render to the application's surface; see  */
-  /*                    the file `example2.cpp' in the tutorial for a      */
-  /*                    demonstration.                                     */
-  /*                                                                       */
-  /*    buffer       :: A typeless pointer to the bitmap buffer.  This     */
-  /*                    value should be aligned on 32-bit boundaries in    */
-  /*                    most cases.                                        */
-  /*                                                                       */
-  /*    num_grays    :: This field is only used with                       */
-  /*                    @FT_PIXEL_MODE_GRAY; it gives the number of gray   */
-  /*                    levels used in the bitmap.                         */
-  /*                                                                       */
-  /*    pixel_mode   :: The pixel mode, i.e., how pixel bits are stored.   */
-  /*                    See @FT_Pixel_Mode for possible values.            */
-  /*                                                                       */
-  /*    palette_mode :: This field is intended for paletted pixel modes;   */
-  /*                    it indicates how the palette is stored.  Not       */
-  /*                    used currently.                                    */
-  /*                                                                       */
-  /*    palette      :: A typeless pointer to the bitmap palette; this     */
-  /*                    field is intended for paletted pixel modes.  Not   */
-  /*                    used currently.                                    */
-  /*                                                                       */
-  typedef struct  FT_Bitmap_
-  {
-    unsigned int    rows;
-    unsigned int    width;
-    int             pitch;
-    unsigned char*  buffer;
-    unsigned short  num_grays;
-    unsigned char   pixel_mode;
-    unsigned char   palette_mode;
-    void*           palette;
-
-  } FT_Bitmap;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    outline_processing                                                 */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Outline                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This structure is used to describe an outline to the scan-line     */
-  /*    converter.                                                         */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    n_contours :: The number of contours in the outline.               */
-  /*                                                                       */
-  /*    n_points   :: The number of points in the outline.                 */
-  /*                                                                       */
-  /*    points     :: A pointer to an array of `n_points' @FT_Vector       */
-  /*                  elements, giving the outline's point coordinates.    */
-  /*                                                                       */
-  /*    tags       :: A pointer to an array of `n_points' chars, giving    */
-  /*                  each outline point's type.                           */
-  /*                                                                       */
-  /*                  If bit~0 is unset, the point is `off' the curve,     */
-  /*                  i.e., a Bezier control point, while it is `on' if    */
-  /*                  set.                                                 */
-  /*                                                                       */
-  /*                  Bit~1 is meaningful for `off' points only.  If set,  */
-  /*                  it indicates a third-order Bezier arc control point; */
-  /*                  and a second-order control point if unset.           */
-  /*                                                                       */
-  /*                  If bit~2 is set, bits 5-7 contain the drop-out mode  */
-  /*                  (as defined in the OpenType specification; the value */
-  /*                  is the same as the argument to the SCANMODE          */
-  /*                  instruction).                                        */
-  /*                                                                       */
-  /*                  Bits 3 and~4 are reserved for internal purposes.     */
-  /*                                                                       */
-  /*    contours   :: An array of `n_contours' shorts, giving the end      */
-  /*                  point of each contour within the outline.  For       */
-  /*                  example, the first contour is defined by the points  */
-  /*                  `0' to `contours[0]', the second one is defined by   */
-  /*                  the points `contours[0]+1' to `contours[1]', etc.    */
-  /*                                                                       */
-  /*    flags      :: A set of bit flags used to characterize the outline  */
-  /*                  and give hints to the scan-converter and hinter on   */
-  /*                  how to convert/grid-fit it.  See @FT_OUTLINE_XXX.    */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The B/W rasterizer only checks bit~2 in the `tags' array for the   */
-  /*    first point of each contour.  The drop-out mode as given with      */
-  /*    @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and       */
-  /*    @FT_OUTLINE_INCLUDE_STUBS in `flags' is then overridden.           */
-  /*                                                                       */
-  typedef struct  FT_Outline_
-  {
-    short       n_contours;      /* number of contours in glyph        */
-    short       n_points;        /* number of points in the glyph      */
-
-    FT_Vector*  points;          /* the outline's points               */
-    char*       tags;            /* the points flags                   */
-    short*      contours;        /* the contour end points             */
-
-    int         flags;           /* outline masks                      */
-
-  } FT_Outline;
-
-  /* */
-
-  /* Following limits must be consistent with */
-  /* FT_Outline.{n_contours,n_points}         */
-#define FT_OUTLINE_CONTOURS_MAX  SHRT_MAX
-#define FT_OUTLINE_POINTS_MAX    SHRT_MAX
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_OUTLINE_XXX                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A list of bit-field constants use for the flags in an outline's    */
-  /*    `flags' field.                                                     */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_OUTLINE_NONE ::                                                 */
-  /*      Value~0 is reserved.                                             */
-  /*                                                                       */
-  /*    FT_OUTLINE_OWNER ::                                                */
-  /*      If set, this flag indicates that the outline's field arrays      */
-  /*      (i.e., `points', `flags', and `contours') are `owned' by the     */
-  /*      outline object, and should thus be freed when it is destroyed.   */
-  /*                                                                       */
-  /*    FT_OUTLINE_EVEN_ODD_FILL ::                                        */
-  /*      By default, outlines are filled using the non-zero winding rule. */
-  /*      If set to 1, the outline will be filled using the even-odd fill  */
-  /*      rule (only works with the smooth rasterizer).                    */
-  /*                                                                       */
-  /*    FT_OUTLINE_REVERSE_FILL ::                                         */
-  /*      By default, outside contours of an outline are oriented in       */
-  /*      clock-wise direction, as defined in the TrueType specification.  */
-  /*      This flag is set if the outline uses the opposite direction      */
-  /*      (typically for Type~1 fonts).  This flag is ignored by the scan  */
-  /*      converter.                                                       */
-  /*                                                                       */
-  /*    FT_OUTLINE_IGNORE_DROPOUTS ::                                      */
-  /*      By default, the scan converter will try to detect drop-outs in   */
-  /*      an outline and correct the glyph bitmap to ensure consistent     */
-  /*      shape continuity.  If set, this flag hints the scan-line         */
-  /*      converter to ignore such cases.  See below for more information. */
-  /*                                                                       */
-  /*    FT_OUTLINE_SMART_DROPOUTS ::                                       */
-  /*      Select smart dropout control.  If unset, use simple dropout      */
-  /*      control.  Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set.  See    */
-  /*      below for more information.                                      */
-  /*                                                                       */
-  /*    FT_OUTLINE_INCLUDE_STUBS ::                                        */
-  /*      If set, turn pixels on for `stubs', otherwise exclude them.      */
-  /*      Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set.  See below for    */
-  /*      more information.                                                */
-  /*                                                                       */
-  /*    FT_OUTLINE_HIGH_PRECISION ::                                       */
-  /*      This flag indicates that the scan-line converter should try to   */
-  /*      convert this outline to bitmaps with the highest possible        */
-  /*      quality.  It is typically set for small character sizes.  Note   */
-  /*      that this is only a hint that might be completely ignored by a   */
-  /*      given scan-converter.                                            */
-  /*                                                                       */
-  /*    FT_OUTLINE_SINGLE_PASS ::                                          */
-  /*      This flag is set to force a given scan-converter to only use a   */
-  /*      single pass over the outline to render a bitmap glyph image.     */
-  /*      Normally, it is set for very large character sizes.  It is only  */
-  /*      a hint that might be completely ignored by a given               */
-  /*      scan-converter.                                                  */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, */
-  /*    and @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth            */
-  /*    rasterizer.                                                        */
-  /*                                                                       */
-  /*    There exists a second mechanism to pass the drop-out mode to the   */
-  /*    B/W rasterizer; see the `tags' field in @FT_Outline.               */
-  /*                                                                       */
-  /*    Please refer to the description of the `SCANTYPE' instruction in   */
-  /*    the OpenType specification (in file `ttinst1.doc') how simple      */
-  /*    drop-outs, smart drop-outs, and stubs are defined.                 */
-  /*                                                                       */
-#define FT_OUTLINE_NONE             0x0
-#define FT_OUTLINE_OWNER            0x1
-#define FT_OUTLINE_EVEN_ODD_FILL    0x2
-#define FT_OUTLINE_REVERSE_FILL     0x4
-#define FT_OUTLINE_IGNORE_DROPOUTS  0x8
-#define FT_OUTLINE_SMART_DROPOUTS   0x10
-#define FT_OUTLINE_INCLUDE_STUBS    0x20
-
-#define FT_OUTLINE_HIGH_PRECISION   0x100
-#define FT_OUTLINE_SINGLE_PASS      0x200
-
-
-  /* these constants are deprecated; use the corresponding */
-  /* `FT_OUTLINE_XXX' values instead                       */
-#define ft_outline_none             FT_OUTLINE_NONE
-#define ft_outline_owner            FT_OUTLINE_OWNER
-#define ft_outline_even_odd_fill    FT_OUTLINE_EVEN_ODD_FILL
-#define ft_outline_reverse_fill     FT_OUTLINE_REVERSE_FILL
-#define ft_outline_ignore_dropouts  FT_OUTLINE_IGNORE_DROPOUTS
-#define ft_outline_high_precision   FT_OUTLINE_HIGH_PRECISION
-#define ft_outline_single_pass      FT_OUTLINE_SINGLE_PASS
-
-  /* */
-
-#define FT_CURVE_TAG( flag )  ( flag & 3 )
-
-#define FT_CURVE_TAG_ON            1
-#define FT_CURVE_TAG_CONIC         0
-#define FT_CURVE_TAG_CUBIC         2
-
-#define FT_CURVE_TAG_HAS_SCANMODE  4
-
-#define FT_CURVE_TAG_TOUCH_X       8  /* reserved for the TrueType hinter */
-#define FT_CURVE_TAG_TOUCH_Y      16  /* reserved for the TrueType hinter */
-
-#define FT_CURVE_TAG_TOUCH_BOTH    ( FT_CURVE_TAG_TOUCH_X | \
-                                     FT_CURVE_TAG_TOUCH_Y )
-
-#define FT_Curve_Tag_On       FT_CURVE_TAG_ON
-#define FT_Curve_Tag_Conic    FT_CURVE_TAG_CONIC
-#define FT_Curve_Tag_Cubic    FT_CURVE_TAG_CUBIC
-#define FT_Curve_Tag_Touch_X  FT_CURVE_TAG_TOUCH_X
-#define FT_Curve_Tag_Touch_Y  FT_CURVE_TAG_TOUCH_Y
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Outline_MoveToFunc                                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function pointer type used to describe the signature of a `move  */
-  /*    to' function during outline walking/decomposition.                 */
-  /*                                                                       */
-  /*    A `move to' is emitted to start a new contour in an outline.       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    to   :: A pointer to the target point of the `move to'.            */
-  /*                                                                       */
-  /*    user :: A typeless pointer, which is passed from the caller of the */
-  /*            decomposition function.                                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    Error code.  0~means success.                                      */
-  /*                                                                       */
-  typedef int
-  (*FT_Outline_MoveToFunc)( const FT_Vector*  to,
-                            void*             user );
-
-#define FT_Outline_MoveTo_Func  FT_Outline_MoveToFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Outline_LineToFunc                                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function pointer type used to describe the signature of a `line  */
-  /*    to' function during outline walking/decomposition.                 */
-  /*                                                                       */
-  /*    A `line to' is emitted to indicate a segment in the outline.       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    to   :: A pointer to the target point of the `line to'.            */
-  /*                                                                       */
-  /*    user :: A typeless pointer, which is passed from the caller of the */
-  /*            decomposition function.                                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    Error code.  0~means success.                                      */
-  /*                                                                       */
-  typedef int
-  (*FT_Outline_LineToFunc)( const FT_Vector*  to,
-                            void*             user );
-
-#define FT_Outline_LineTo_Func  FT_Outline_LineToFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Outline_ConicToFunc                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function pointer type used to describe the signature of a `conic */
-  /*    to' function during outline walking or decomposition.              */
-  /*                                                                       */
-  /*    A `conic to' is emitted to indicate a second-order Bezier arc in   */
-  /*    the outline.                                                       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    control :: An intermediate control point between the last position */
-  /*               and the new target in `to'.                             */
-  /*                                                                       */
-  /*    to      :: A pointer to the target end point of the conic arc.     */
-  /*                                                                       */
-  /*    user    :: A typeless pointer, which is passed from the caller of  */
-  /*               the decomposition function.                             */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    Error code.  0~means success.                                      */
-  /*                                                                       */
-  typedef int
-  (*FT_Outline_ConicToFunc)( const FT_Vector*  control,
-                             const FT_Vector*  to,
-                             void*             user );
-
-#define FT_Outline_ConicTo_Func  FT_Outline_ConicToFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Outline_CubicToFunc                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function pointer type used to describe the signature of a `cubic */
-  /*    to' function during outline walking or decomposition.              */
-  /*                                                                       */
-  /*    A `cubic to' is emitted to indicate a third-order Bezier arc.      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    control1 :: A pointer to the first Bezier control point.           */
-  /*                                                                       */
-  /*    control2 :: A pointer to the second Bezier control point.          */
-  /*                                                                       */
-  /*    to       :: A pointer to the target end point.                     */
-  /*                                                                       */
-  /*    user     :: A typeless pointer, which is passed from the caller of */
-  /*                the decomposition function.                            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    Error code.  0~means success.                                      */
-  /*                                                                       */
-  typedef int
-  (*FT_Outline_CubicToFunc)( const FT_Vector*  control1,
-                             const FT_Vector*  control2,
-                             const FT_Vector*  to,
-                             void*             user );
-
-#define FT_Outline_CubicTo_Func  FT_Outline_CubicToFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Outline_Funcs                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to hold various function pointers used during outline  */
-  /*    decomposition in order to emit segments, conic, and cubic Beziers. */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    move_to  :: The `move to' emitter.                                 */
-  /*                                                                       */
-  /*    line_to  :: The segment emitter.                                   */
-  /*                                                                       */
-  /*    conic_to :: The second-order Bezier arc emitter.                   */
-  /*                                                                       */
-  /*    cubic_to :: The third-order Bezier arc emitter.                    */
-  /*                                                                       */
-  /*    shift    :: The shift that is applied to coordinates before they   */
-  /*                are sent to the emitter.                               */
-  /*                                                                       */
-  /*    delta    :: The delta that is applied to coordinates before they   */
-  /*                are sent to the emitter, but after the shift.          */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The point coordinates sent to the emitters are the transformed     */
-  /*    version of the original coordinates (this is important for high    */
-  /*    accuracy during scan-conversion).  The transformation is simple:   */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      x' = (x << shift) - delta                                        */
-  /*      y' = (y << shift) - delta                                        */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    Set the values of `shift' and `delta' to~0 to get the original     */
-  /*    point coordinates.                                                 */
-  /*                                                                       */
-  typedef struct  FT_Outline_Funcs_
-  {
-    FT_Outline_MoveToFunc   move_to;
-    FT_Outline_LineToFunc   line_to;
-    FT_Outline_ConicToFunc  conic_to;
-    FT_Outline_CubicToFunc  cubic_to;
-
-    int                     shift;
-    FT_Pos                  delta;
-
-  } FT_Outline_Funcs;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    basic_types                                                        */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Macro>                                                               */
-  /*    FT_IMAGE_TAG                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This macro converts four-letter tags to an unsigned long type.     */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Since many 16-bit compilers don't like 32-bit enumerations, you    */
-  /*    should redefine this macro in case of problems to something like   */
-  /*    this:                                                              */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 )  value         */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    to get a simple enumeration without assigning special numbers.     */
-  /*                                                                       */
-#ifndef FT_IMAGE_TAG
-#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 )  \
-          value = ( ( (unsigned long)_x1 << 24 ) | \
-                    ( (unsigned long)_x2 << 16 ) | \
-                    ( (unsigned long)_x3 << 8  ) | \
-                      (unsigned long)_x4         )
-#endif /* FT_IMAGE_TAG */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_Glyph_Format                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An enumeration type used to describe the format of a given glyph   */
-  /*    image.  Note that this version of FreeType only supports two image */
-  /*    formats, even though future font drivers will be able to register  */
-  /*    their own format.                                                  */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_GLYPH_FORMAT_NONE ::                                            */
-  /*      The value~0 is reserved.                                         */
-  /*                                                                       */
-  /*    FT_GLYPH_FORMAT_COMPOSITE ::                                       */
-  /*      The glyph image is a composite of several other images.  This    */
-  /*      format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to   */
-  /*      report compound glyphs (like accented characters).               */
-  /*                                                                       */
-  /*    FT_GLYPH_FORMAT_BITMAP ::                                          */
-  /*      The glyph image is a bitmap, and can be described as an          */
-  /*      @FT_Bitmap.  You generally need to access the `bitmap' field of  */
-  /*      the @FT_GlyphSlotRec structure to read it.                       */
-  /*                                                                       */
-  /*    FT_GLYPH_FORMAT_OUTLINE ::                                         */
-  /*      The glyph image is a vectorial outline made of line segments     */
-  /*      and Bezier arcs; it can be described as an @FT_Outline; you      */
-  /*      generally want to access the `outline' field of the              */
-  /*      @FT_GlyphSlotRec structure to read it.                           */
-  /*                                                                       */
-  /*    FT_GLYPH_FORMAT_PLOTTER ::                                         */
-  /*      The glyph image is a vectorial path with no inside and outside   */
-  /*      contours.  Some Type~1 fonts, like those in the Hershey family,  */
-  /*      contain glyphs in this format.  These are described as           */
-  /*      @FT_Outline, but FreeType isn't currently capable of rendering   */
-  /*      them correctly.                                                  */
-  /*                                                                       */
-  typedef enum  FT_Glyph_Format_
-  {
-    FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ),
-
-    FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ),
-    FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP,    'b', 'i', 't', 's' ),
-    FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE,   'o', 'u', 't', 'l' ),
-    FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER,   'p', 'l', 'o', 't' )
-
-  } FT_Glyph_Format;
-
-
-  /* these constants are deprecated; use the corresponding */
-  /* `FT_Glyph_Format' values instead.                     */
-#define ft_glyph_format_none       FT_GLYPH_FORMAT_NONE
-#define ft_glyph_format_composite  FT_GLYPH_FORMAT_COMPOSITE
-#define ft_glyph_format_bitmap     FT_GLYPH_FORMAT_BITMAP
-#define ft_glyph_format_outline    FT_GLYPH_FORMAT_OUTLINE
-#define ft_glyph_format_plotter    FT_GLYPH_FORMAT_PLOTTER
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*****                                                               *****/
-  /*****            R A S T E R   D E F I N I T I O N S                *****/
-  /*****                                                               *****/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* A raster is a scan converter, in charge of rendering an outline into  */
-  /* a bitmap.  This section contains the public API for rasters.          */
-  /*                                                                       */
-  /* Note that in FreeType 2, all rasters are now encapsulated within      */
-  /* specific modules called `renderers'.  See `ftrender.h' for more       */
-  /* details on renderers.                                                 */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    raster                                                             */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Scanline Converter                                                 */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    How vectorial outlines are converted into bitmaps and pixmaps.     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains technical definitions.                       */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    FT_Raster                                                          */
-  /*    FT_Span                                                            */
-  /*    FT_SpanFunc                                                        */
-  /*                                                                       */
-  /*    FT_Raster_Params                                                   */
-  /*    FT_RASTER_FLAG_XXX                                                 */
-  /*                                                                       */
-  /*    FT_Raster_NewFunc                                                  */
-  /*    FT_Raster_DoneFunc                                                 */
-  /*    FT_Raster_ResetFunc                                                */
-  /*    FT_Raster_SetModeFunc                                              */
-  /*    FT_Raster_RenderFunc                                               */
-  /*    FT_Raster_Funcs                                                    */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Raster                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An opaque handle (pointer) to a raster object.  Each object can be */
-  /*    used independently to convert an outline into a bitmap or pixmap.  */
-  /*                                                                       */
-  typedef struct FT_RasterRec_*  FT_Raster;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Span                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to model a single span of gray pixels when        */
-  /*    rendering an anti-aliased bitmap.                                  */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    x        :: The span's horizontal start position.                  */
-  /*                                                                       */
-  /*    len      :: The span's length in pixels.                           */
-  /*                                                                       */
-  /*    coverage :: The span color/coverage, ranging from 0 (background)   */
-  /*                to 255 (foreground).                                   */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This structure is used by the span drawing callback type named     */
-  /*    @FT_SpanFunc that takes the y~coordinate of the span as a          */
-  /*    parameter.                                                         */
-  /*                                                                       */
-  /*    The coverage value is always between 0 and 255.  If you want less  */
-  /*    gray values, the callback function has to reduce them.             */
-  /*                                                                       */
-  typedef struct  FT_Span_
-  {
-    short           x;
-    unsigned short  len;
-    unsigned char   coverage;
-
-  } FT_Span;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_SpanFunc                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function used as a call-back by the anti-aliased renderer in     */
-  /*    order to let client applications draw themselves the gray pixel    */
-  /*    spans on each scan line.                                           */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    y     :: The scanline's y~coordinate.                              */
-  /*                                                                       */
-  /*    count :: The number of spans to draw on this scanline.             */
-  /*                                                                       */
-  /*    spans :: A table of `count' spans to draw on the scanline.         */
-  /*                                                                       */
-  /*    user  :: User-supplied data that is passed to the callback.        */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This callback allows client applications to directly render the    */
-  /*    gray spans of the anti-aliased bitmap to any kind of surfaces.     */
-  /*                                                                       */
-  /*    This can be used to write anti-aliased outlines directly to a      */
-  /*    given background bitmap, and even perform translucency.            */
-  /*                                                                       */
-  typedef void
-  (*FT_SpanFunc)( int             y,
-                  int             count,
-                  const FT_Span*  spans,
-                  void*           user );
-
-#define FT_Raster_Span_Func  FT_SpanFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Raster_BitTest_Func                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Deprecated, unimplemented.                                         */
-  /*                                                                       */
-  typedef int
-  (*FT_Raster_BitTest_Func)( int    y,
-                             int    x,
-                             void*  user );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Raster_BitSet_Func                                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Deprecated, unimplemented.                                         */
-  /*                                                                       */
-  typedef void
-  (*FT_Raster_BitSet_Func)( int    y,
-                            int    x,
-                            void*  user );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_RASTER_FLAG_XXX                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A list of bit flag constants as used in the `flags' field of a     */
-  /*    @FT_Raster_Params structure.                                       */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_RASTER_FLAG_DEFAULT :: This value is 0.                         */
-  /*                                                                       */
-  /*    FT_RASTER_FLAG_AA      :: This flag is set to indicate that an     */
-  /*                              anti-aliased glyph image should be       */
-  /*                              generated.  Otherwise, it will be        */
-  /*                              monochrome (1-bit).                      */
-  /*                                                                       */
-  /*    FT_RASTER_FLAG_DIRECT  :: This flag is set to indicate direct      */
-  /*                              rendering.  In this mode, client         */
-  /*                              applications must provide their own span */
-  /*                              callback.  This lets them directly       */
-  /*                              draw or compose over an existing bitmap. */
-  /*                              If this bit is not set, the target       */
-  /*                              pixmap's buffer _must_ be zeroed before  */
-  /*                              rendering.                               */
-  /*                                                                       */
-  /*                              Direct rendering is only possible with   */
-  /*                              anti-aliased glyphs.                     */
-  /*                                                                       */
-  /*    FT_RASTER_FLAG_CLIP    :: This flag is only used in direct         */
-  /*                              rendering mode.  If set, the output will */
-  /*                              be clipped to a box specified in the     */
-  /*                              `clip_box' field of the                  */
-  /*                              @FT_Raster_Params structure.             */
-  /*                                                                       */
-  /*                              Note that by default, the glyph bitmap   */
-  /*                              is clipped to the target pixmap, except  */
-  /*                              in direct rendering mode where all spans */
-  /*                              are generated if no clipping box is set. */
-  /*                                                                       */
-#define FT_RASTER_FLAG_DEFAULT  0x0
-#define FT_RASTER_FLAG_AA       0x1
-#define FT_RASTER_FLAG_DIRECT   0x2
-#define FT_RASTER_FLAG_CLIP     0x4
-
-  /* these constants are deprecated; use the corresponding */
-  /* `FT_RASTER_FLAG_XXX' values instead                   */
-#define ft_raster_flag_default  FT_RASTER_FLAG_DEFAULT
-#define ft_raster_flag_aa       FT_RASTER_FLAG_AA
-#define ft_raster_flag_direct   FT_RASTER_FLAG_DIRECT
-#define ft_raster_flag_clip     FT_RASTER_FLAG_CLIP
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Raster_Params                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to hold the arguments used by a raster's render        */
-  /*    function.                                                          */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    target      :: The target bitmap.                                  */
-  /*                                                                       */
-  /*    source      :: A pointer to the source glyph image (e.g., an       */
-  /*                   @FT_Outline).                                       */
-  /*                                                                       */
-  /*    flags       :: The rendering flags.                                */
-  /*                                                                       */
-  /*    gray_spans  :: The gray span drawing callback.                     */
-  /*                                                                       */
-  /*    black_spans :: Unused.                                             */
-  /*                                                                       */
-  /*    bit_test    :: Unused.                                             */
-  /*                                                                       */
-  /*    bit_set     :: Unused.                                             */
-  /*                                                                       */
-  /*    user        :: User-supplied data that is passed to each drawing   */
-  /*                   callback.                                           */
-  /*                                                                       */
-  /*    clip_box    :: An optional clipping box.  It is only used in       */
-  /*                   direct rendering mode.  Note that coordinates here  */
-  /*                   should be expressed in _integer_ pixels (and not in */
-  /*                   26.6 fixed-point units).                            */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA    */
-  /*    bit flag is set in the `flags' field, otherwise a monochrome       */
-  /*    bitmap is generated.                                               */
-  /*                                                                       */
-  /*    If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the      */
-  /*    raster will call the `gray_spans' callback to draw gray pixel      */
-  /*    spans.  This allows direct composition over a pre-existing bitmap  */
-  /*    through user-provided callbacks to perform the span drawing and    */
-  /*    composition.    Not supported by the monochrome rasterizer.        */
-  /*                                                                       */
-  typedef struct  FT_Raster_Params_
-  {
-    const FT_Bitmap*        target;
-    const void*             source;
-    int                     flags;
-    FT_SpanFunc             gray_spans;
-    FT_SpanFunc             black_spans;  /* unused */
-    FT_Raster_BitTest_Func  bit_test;     /* unused */
-    FT_Raster_BitSet_Func   bit_set;      /* unused */
-    void*                   user;
-    FT_BBox                 clip_box;
-
-  } FT_Raster_Params;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Raster_NewFunc                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function used to create a new raster object.                     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    memory :: A handle to the memory allocator.                        */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    raster :: A handle to the new raster object.                       */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    Error code.  0~means success.                                      */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The `memory' parameter is a typeless pointer in order to avoid     */
-  /*    un-wanted dependencies on the rest of the FreeType code.  In       */
-  /*    practice, it is an @FT_Memory object, i.e., a handle to the        */
-  /*    standard FreeType memory allocator.  However, this field can be    */
-  /*    completely ignored by a given raster implementation.               */
-  /*                                                                       */
-  typedef int
-  (*FT_Raster_NewFunc)( void*       memory,
-                        FT_Raster*  raster );
-
-#define FT_Raster_New_Func  FT_Raster_NewFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Raster_DoneFunc                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function used to destroy a given raster object.                  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    raster :: A handle to the raster object.                           */
-  /*                                                                       */
-  typedef void
-  (*FT_Raster_DoneFunc)( FT_Raster  raster );
-
-#define FT_Raster_Done_Func  FT_Raster_DoneFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Raster_ResetFunc                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    FreeType used to provide an area of memory called the `render      */
-  /*    pool' available to all registered rasterizers.  This was not       */
-  /*    thread safe, however, and now FreeType never allocates this pool.  */
-  /*                                                                       */
-  /*    This function is called after a new raster object is created.      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    raster    :: A handle to the new raster object.                    */
-  /*                                                                       */
-  /*    pool_base :: Previously, the address in memory of the render pool. */
-  /*                 Set this to NULL.                                     */
-  /*                                                                       */
-  /*    pool_size :: Previously, the size in bytes of the render pool.     */
-  /*                 Set this to 0.                                        */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Rasterizers should rely on dynamic or stack allocation if they     */
-  /*    want to (a handle to the memory allocator is passed to the         */
-  /*    rasterizer constructor).                                           */
-  /*                                                                       */
-  typedef void
-  (*FT_Raster_ResetFunc)( FT_Raster       raster,
-                          unsigned char*  pool_base,
-                          unsigned long   pool_size );
-
-#define FT_Raster_Reset_Func  FT_Raster_ResetFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Raster_SetModeFunc                                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This function is a generic facility to change modes or attributes  */
-  /*    in a given raster.  This can be used for debugging purposes, or    */
-  /*    simply to allow implementation-specific `features' in a given      */
-  /*    raster module.                                                     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    raster :: A handle to the new raster object.                       */
-  /*                                                                       */
-  /*    mode   :: A 4-byte tag used to name the mode or property.          */
-  /*                                                                       */
-  /*    args   :: A pointer to the new mode/property to use.               */
-  /*                                                                       */
-  typedef int
-  (*FT_Raster_SetModeFunc)( FT_Raster      raster,
-                            unsigned long  mode,
-                            void*          args );
-
-#define FT_Raster_Set_Mode_Func  FT_Raster_SetModeFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Raster_RenderFunc                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Invoke a given raster to scan-convert a given glyph image into a   */
-  /*    target bitmap.                                                     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    raster :: A handle to the raster object.                           */
-  /*                                                                       */
-  /*    params :: A pointer to an @FT_Raster_Params structure used to      */
-  /*              store the rendering parameters.                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    Error code.  0~means success.                                      */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The exact format of the source image depends on the raster's glyph */
-  /*    format defined in its @FT_Raster_Funcs structure.  It can be an    */
-  /*    @FT_Outline or anything else in order to support a large array of  */
-  /*    glyph formats.                                                     */
-  /*                                                                       */
-  /*    Note also that the render function can fail and return a           */
-  /*    `FT_Err_Unimplemented_Feature' error code if the raster used does  */
-  /*    not support direct composition.                                    */
-  /*                                                                       */
-  /*    XXX: For now, the standard raster doesn't support direct           */
-  /*         composition but this should change for the final release (see */
-  /*         the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c'    */
-  /*         for examples of distinct implementations that support direct  */
-  /*         composition).                                                 */
-  /*                                                                       */
-  typedef int
-  (*FT_Raster_RenderFunc)( FT_Raster                raster,
-                           const FT_Raster_Params*  params );
-
-#define FT_Raster_Render_Func  FT_Raster_RenderFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Raster_Funcs                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*   A structure used to describe a given raster class to the library.   */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    glyph_format  :: The supported glyph format for this raster.       */
-  /*                                                                       */
-  /*    raster_new    :: The raster constructor.                           */
-  /*                                                                       */
-  /*    raster_reset  :: Used to reset the render pool within the raster.  */
-  /*                                                                       */
-  /*    raster_render :: A function to render a glyph into a given bitmap. */
-  /*                                                                       */
-  /*    raster_done   :: The raster destructor.                            */
-  /*                                                                       */
-  typedef struct  FT_Raster_Funcs_
-  {
-    FT_Glyph_Format        glyph_format;
-
-    FT_Raster_NewFunc      raster_new;
-    FT_Raster_ResetFunc    raster_reset;
-    FT_Raster_SetModeFunc  raster_set_mode;
-    FT_Raster_RenderFunc   raster_render;
-    FT_Raster_DoneFunc     raster_done;
-
-  } FT_Raster_Funcs;
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTIMAGE_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8    */
-/* End:             */

+ 0 - 343
freetype/include/freetype/ftincrem.h

@@ -1,343 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftincrem.h                                                             */
-/*                                                                         */
-/*    FreeType incremental loading (specification).                        */
-/*                                                                         */
-/*  Copyright 2002-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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 FTINCREM_H_
-#define FTINCREM_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_PARAMETER_TAGS_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#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:
-   *    incremental
-   *
-   * @title:
-   *    Incremental Loading
-   *
-   * @abstract:
-   *    Custom Glyph Loading.
-   *
-   * @description:
-   *   This section contains various functions used to perform so-called
-   *   `incremental' glyph loading.  This is a mode where all glyphs loaded
-   *   from a given @FT_Face are provided by the client application.
-   *
-   *   Apart from that, all other tables are loaded normally from the font
-   *   file.  This mode is useful when FreeType is used within another
-   *   engine, e.g., a PostScript Imaging Processor.
-   *
-   *   To enable this mode, you must use @FT_Open_Face, passing an
-   *   @FT_Parameter with the @FT_PARAM_TAG_INCREMENTAL tag and an
-   *   @FT_Incremental_Interface value.  See the comments for
-   *   @FT_Incremental_InterfaceRec for an example.
-   *
-   */
-
-
-  /***************************************************************************
-   *
-   * @type:
-   *   FT_Incremental
-   *
-   * @description:
-   *   An opaque type describing a user-provided object used to implement
-   *   `incremental' glyph loading within FreeType.  This is used to support
-   *   embedded fonts in certain environments (e.g., PostScript interpreters),
-   *   where the glyph data isn't in the font file, or must be overridden by
-   *   different values.
-   *
-   * @note:
-   *   It is up to client applications to create and implement @FT_Incremental
-   *   objects, as long as they provide implementations for the methods
-   *   @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc
-   *   and @FT_Incremental_GetGlyphMetricsFunc.
-   *
-   *   See the description of @FT_Incremental_InterfaceRec to understand how
-   *   to use incremental objects with FreeType.
-   *
-   */
-  typedef struct FT_IncrementalRec_*  FT_Incremental;
-
-
-  /***************************************************************************
-   *
-   * @struct:
-   *   FT_Incremental_MetricsRec
-   *
-   * @description:
-   *   A small structure used to contain the basic glyph metrics returned
-   *   by the @FT_Incremental_GetGlyphMetricsFunc method.
-   *
-   * @fields:
-   *   bearing_x ::
-   *     Left bearing, in font units.
-   *
-   *   bearing_y ::
-   *     Top bearing, in font units.
-   *
-   *   advance ::
-   *     Horizontal component of glyph advance, in font units.
-   *
-   *   advance_v ::
-   *     Vertical component of glyph advance, in font units.
-   *
-   * @note:
-   *   These correspond to horizontal or vertical metrics depending on the
-   *   value of the `vertical' argument to the function
-   *   @FT_Incremental_GetGlyphMetricsFunc.
-   *
-   */
-  typedef struct  FT_Incremental_MetricsRec_
-  {
-    FT_Long  bearing_x;
-    FT_Long  bearing_y;
-    FT_Long  advance;
-    FT_Long  advance_v;     /* since 2.3.12 */
-
-  } FT_Incremental_MetricsRec;
-
-
-  /***************************************************************************
-   *
-   * @struct:
-   *   FT_Incremental_Metrics
-   *
-   * @description:
-   *   A handle to an @FT_Incremental_MetricsRec structure.
-   *
-   */
-   typedef struct FT_Incremental_MetricsRec_*  FT_Incremental_Metrics;
-
-
-  /***************************************************************************
-   *
-   * @type:
-   *   FT_Incremental_GetGlyphDataFunc
-   *
-   * @description:
-   *   A function called by FreeType to access a given glyph's data bytes
-   *   during @FT_Load_Glyph or @FT_Load_Char if incremental loading is
-   *   enabled.
-   *
-   *   Note that the format of the glyph's data bytes depends on the font
-   *   file format.  For TrueType, it must correspond to the raw bytes within
-   *   the `glyf' table.  For PostScript formats, it must correspond to the
-   *   *unencrypted* charstring bytes, without any `lenIV' header.  It is
-   *   undefined for any other format.
-   *
-   * @input:
-   *   incremental ::
-   *     Handle to an opaque @FT_Incremental handle provided by the client
-   *     application.
-   *
-   *   glyph_index ::
-   *     Index of relevant glyph.
-   *
-   * @output:
-   *   adata ::
-   *     A structure describing the returned glyph data bytes (which will be
-   *     accessed as a read-only byte block).
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   If this function returns successfully the method
-   *   @FT_Incremental_FreeGlyphDataFunc will be called later to release
-   *   the data bytes.
-   *
-   *   Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for
-   *   compound glyphs.
-   *
-   */
-  typedef FT_Error
-  (*FT_Incremental_GetGlyphDataFunc)( FT_Incremental  incremental,
-                                      FT_UInt         glyph_index,
-                                      FT_Data*        adata );
-
-
-  /***************************************************************************
-   *
-   * @type:
-   *   FT_Incremental_FreeGlyphDataFunc
-   *
-   * @description:
-   *   A function used to release the glyph data bytes returned by a
-   *   successful call to @FT_Incremental_GetGlyphDataFunc.
-   *
-   * @input:
-   *   incremental ::
-   *     A handle to an opaque @FT_Incremental handle provided by the client
-   *     application.
-   *
-   *   data ::
-   *     A structure describing the glyph data bytes (which will be accessed
-   *     as a read-only byte block).
-   *
-   */
-  typedef void
-  (*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental  incremental,
-                                       FT_Data*        data );
-
-
-  /***************************************************************************
-   *
-   * @type:
-   *   FT_Incremental_GetGlyphMetricsFunc
-   *
-   * @description:
-   *   A function used to retrieve the basic metrics of a given glyph index
-   *   before accessing its data.  This is necessary because, in certain
-   *   formats like TrueType, the metrics are stored in a different place from
-   *   the glyph images proper.
-   *
-   * @input:
-   *   incremental ::
-   *     A handle to an opaque @FT_Incremental handle provided by the client
-   *     application.
-   *
-   *   glyph_index ::
-   *     Index of relevant glyph.
-   *
-   *   vertical ::
-   *     If true, return vertical metrics.
-   *
-   *   ametrics ::
-   *     This parameter is used for both input and output.
-   *     The original glyph metrics, if any, in font units.  If metrics are
-   *     not available all the values must be set to zero.
-   *
-   * @output:
-   *   ametrics ::
-   *     The replacement glyph metrics in font units.
-   *
-   */
-  typedef FT_Error
-  (*FT_Incremental_GetGlyphMetricsFunc)
-                      ( FT_Incremental              incremental,
-                        FT_UInt                     glyph_index,
-                        FT_Bool                     vertical,
-                        FT_Incremental_MetricsRec  *ametrics );
-
-
-  /**************************************************************************
-   *
-   * @struct:
-   *   FT_Incremental_FuncsRec
-   *
-   * @description:
-   *   A table of functions for accessing fonts that load data
-   *   incrementally.  Used in @FT_Incremental_InterfaceRec.
-   *
-   * @fields:
-   *   get_glyph_data ::
-   *     The function to get glyph data.  Must not be null.
-   *
-   *   free_glyph_data ::
-   *     The function to release glyph data.  Must not be null.
-   *
-   *   get_glyph_metrics ::
-   *     The function to get glyph metrics.  May be null if the font does
-   *     not provide overriding glyph metrics.
-   *
-   */
-  typedef struct  FT_Incremental_FuncsRec_
-  {
-    FT_Incremental_GetGlyphDataFunc     get_glyph_data;
-    FT_Incremental_FreeGlyphDataFunc    free_glyph_data;
-    FT_Incremental_GetGlyphMetricsFunc  get_glyph_metrics;
-
-  } FT_Incremental_FuncsRec;
-
-
-  /***************************************************************************
-   *
-   * @struct:
-   *   FT_Incremental_InterfaceRec
-   *
-   * @description:
-   *   A structure to be used with @FT_Open_Face to indicate that the user
-   *   wants to support incremental glyph loading.  You should use it with
-   *   @FT_PARAM_TAG_INCREMENTAL as in the following example:
-   *
-   *     {
-   *       FT_Incremental_InterfaceRec  inc_int;
-   *       FT_Parameter                 parameter;
-   *       FT_Open_Args                 open_args;
-   *
-   *
-   *       // set up incremental descriptor
-   *       inc_int.funcs  = my_funcs;
-   *       inc_int.object = my_object;
-   *
-   *       // set up optional parameter
-   *       parameter.tag  = FT_PARAM_TAG_INCREMENTAL;
-   *       parameter.data = &inc_int;
-   *
-   *       // set up FT_Open_Args structure
-   *       open_args.flags      = FT_OPEN_PATHNAME | FT_OPEN_PARAMS;
-   *       open_args.pathname   = my_font_pathname;
-   *       open_args.num_params = 1;
-   *       open_args.params     = &parameter; // we use one optional argument
-   *
-   *       // open the font
-   *       error = FT_Open_Face( library, &open_args, index, &face );
-   *       ...
-   *     }
-   *
-   */
-  typedef struct  FT_Incremental_InterfaceRec_
-  {
-    const FT_Incremental_FuncsRec*  funcs;
-    FT_Incremental                  object;
-
-  } FT_Incremental_InterfaceRec;
-
-
-  /***************************************************************************
-   *
-   * @type:
-   *   FT_Incremental_Interface
-   *
-   * @description:
-   *   A pointer to an @FT_Incremental_InterfaceRec structure.
-   *
-   */
-  typedef FT_Incremental_InterfaceRec*   FT_Incremental_Interface;
-
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTINCREM_H_ */
-
-
-/* END */

+ 0 - 309
freetype/include/freetype/ftlcdfil.h

@@ -1,309 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftlcdfil.h                                                             */
-/*                                                                         */
-/*    FreeType API for color filtering of subpixel bitmap glyphs           */
-/*    (specification).                                                     */
-/*                                                                         */
-/*  Copyright 2006-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTLCDFIL_H_
-#define FTLCDFIL_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_PARAMETER_TAGS_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-  /***************************************************************************
-   *
-   * @section:
-   *   lcd_filtering
-   *
-   * @title:
-   *   LCD Filtering
-   *
-   * @abstract:
-   *   Reduce color fringes of subpixel-rendered bitmaps.
-   *
-   * @description:
-   *   Should you #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your
-   *   `ftoption.h', which enables patented ClearType-style rendering,
-   *   the LCD-optimized glyph bitmaps should be filtered to reduce color
-   *   fringes inherent to this technology.  The default FreeType LCD
-   *   rendering uses different technology, and API described below,
-   *   although available, does nothing.
-   *
-   *   ClearType-style LCD rendering exploits the color-striped structure of
-   *   LCD pixels, increasing the available resolution in the direction of
-   *   the stripe (usually horizontal RGB) by a factor of~3.  Since these
-   *   subpixels are color pixels, using them unfiltered creates severe
-   *   color fringes.  Use the @FT_Library_SetLcdFilter API to specify a
-   *   low-pass filter, which is then applied to subpixel-rendered bitmaps
-   *   generated through @FT_Render_Glyph.  The filter sacrifices some of
-   *   the higher resolution to reduce color fringes, making the glyph image
-   *   slightly blurrier.  Positional improvements will remain.
-   *
-   *   A filter should have two properties:
-   *
-   *   1) It should be normalized, meaning the sum of the 5~components
-   *      should be 256 (0x100).  It is possible to go above or under this
-   *      target sum, however: going under means tossing out contrast, going
-   *      over means invoking clamping and thereby non-linearities that
-   *      increase contrast somewhat at the expense of greater distortion
-   *      and color-fringing.  Contrast is better enhanced through stem
-   *      darkening.
-   *
-   *   2) It should be color-balanced, meaning a filter `{~a, b, c, b, a~}'
-   *      where a~+ b~=~c.  It distributes the computed coverage for one
-   *      subpixel to all subpixels equally, sacrificing some won resolution
-   *      but drastically reducing color-fringing.  Positioning improvements
-   *      remain!  Note that color-fringing can only really be minimized
-   *      when using a color-balanced filter and alpha-blending the glyph
-   *      onto a surface in linear space; see @FT_Render_Glyph.
-   *
-   *   Regarding the form, a filter can be a `boxy' filter or a `beveled'
-   *   filter.  Boxy filters are sharper but are less forgiving of non-ideal
-   *   gamma curves of a screen (viewing angles!), beveled filters are
-   *   fuzzier but more tolerant.
-   *
-   *   Examples:
-   *
-   *   - [0x10 0x40 0x70 0x40 0x10] is beveled and neither balanced nor
-   *     normalized.
-   *
-   *   - [0x1A 0x33 0x4D 0x33 0x1A] is beveled and balanced but not
-   *     normalized.
-   *
-   *   - [0x19 0x33 0x66 0x4c 0x19] is beveled and normalized but not
-   *     balanced.
-   *
-   *   - [0x00 0x4c 0x66 0x4c 0x00] is boxily beveled and normalized but not
-   *     balanced.
-   *
-   *   - [0x00 0x55 0x56 0x55 0x00] is boxy, normalized, and almost
-   *     balanced.
-   *
-   *   - [0x08 0x4D 0x56 0x4D 0x08] is beveled, normalized and, almost
-   *     balanced.
-   *
-   *   The filter affects glyph bitmaps rendered through @FT_Render_Glyph,
-   *   @FT_Load_Glyph, and @FT_Load_Char.  It does _not_ affect the output
-   *   of @FT_Outline_Render and @FT_Outline_Get_Bitmap.
-   *
-   *   If this feature is activated, the dimensions of LCD glyph bitmaps are
-   *   either wider or taller than the dimensions of the corresponding
-   *   outline with regard to the pixel grid.  For example, for
-   *   @FT_RENDER_MODE_LCD, the filter adds 3~subpixels to the left, and
-   *   3~subpixels to the right.  The bitmap offset values are adjusted
-   *   accordingly, so clients shouldn't need to modify their layout and
-   *   glyph positioning code when enabling the filter.
-   *
-   *   It is important to understand that linear alpha blending and gamma
-   *   correction is critical for correctly rendering glyphs onto surfaces
-   *   without artifacts and even more critical when subpixel rendering is
-   *   involved.
-   *
-   *   Each of the 3~alpha values (subpixels) is independently used to blend
-   *   one color channel.  That is, red alpha blends the red channel of the
-   *   text color with the red channel of the background pixel.  The
-   *   distribution of density values by the color-balanced filter assumes
-   *   alpha blending is done in linear space; only then color artifacts
-   *   cancel out.
-   */
-
-
-  /****************************************************************************
-   *
-   * @enum:
-   *   FT_LcdFilter
-   *
-   * @description:
-   *   A list of values to identify various types of LCD filters.
-   *
-   * @values:
-   *   FT_LCD_FILTER_NONE ::
-   *     Do not perform filtering.  When used with subpixel rendering, this
-   *     results in sometimes severe color fringes.
-   *
-   *   FT_LCD_FILTER_DEFAULT ::
-   *     The default filter reduces color fringes considerably, at the cost
-   *     of a slight blurriness in the output.
-   *
-   *     It is a beveled, normalized, and color-balanced five-tap filter
-   *     that is more forgiving to screens with non-ideal gamma curves and
-   *     viewing angles.  Note that while color-fringing is reduced, it can
-   *     only be minimized by using linear alpha blending and gamma
-   *     correction to render glyphs onto surfaces.  The default filter
-   *     weights are [0x08 0x4D 0x56 0x4D 0x08].
-   *
-   *   FT_LCD_FILTER_LIGHT ::
-   *     The light filter is a variant that is sharper at the cost of
-   *     slightly more color fringes than the default one.
-   *
-   *     It is a boxy, normalized, and color-balanced three-tap filter that
-   *     is less forgiving to screens with non-ideal gamma curves and
-   *     viewing angles.  This filter works best when the rendering system
-   *     uses linear alpha blending and gamma correction to render glyphs
-   *     onto surfaces.  The light filter weights are
-   *     [0x00 0x55 0x56 0x55 0x00].
-   *
-   *   FT_LCD_FILTER_LEGACY ::
-   *     This filter corresponds to the original libXft color filter.  It
-   *     provides high contrast output but can exhibit really bad color
-   *     fringes if glyphs are not extremely well hinted to the pixel grid.
-   *     In other words, it only works well if the TrueType bytecode
-   *     interpreter is enabled *and* high-quality hinted fonts are used.
-   *
-   *     This filter is only provided for comparison purposes, and might be
-   *     disabled or stay unsupported in the future.
-   *
-   *   FT_LCD_FILTER_LEGACY1 ::
-   *     For historical reasons, the FontConfig library returns a different
-   *     enumeration value for legacy LCD filtering.  To make code work that
-   *     (incorrectly) forwards FontConfig's enumeration value to
-   *     @FT_Library_SetLcdFilter without proper mapping, it is thus easiest
-   *     to have another enumeration value, which is completely equal to
-   *     `FT_LCD_FILTER_LEGACY'.
-   *
-   * @since:
-   *   2.3.0 (`FT_LCD_FILTER_LEGACY1' since 2.6.2)
-   */
-  typedef enum  FT_LcdFilter_
-  {
-    FT_LCD_FILTER_NONE    = 0,
-    FT_LCD_FILTER_DEFAULT = 1,
-    FT_LCD_FILTER_LIGHT   = 2,
-    FT_LCD_FILTER_LEGACY1 = 3,
-    FT_LCD_FILTER_LEGACY  = 16,
-
-    FT_LCD_FILTER_MAX   /* do not remove */
-
-  } FT_LcdFilter;
-
-
-  /**************************************************************************
-   *
-   * @func:
-   *   FT_Library_SetLcdFilter
-   *
-   * @description:
-   *   This function is used to apply color filtering to LCD decimated
-   *   bitmaps, like the ones used when calling @FT_Render_Glyph with
-   *   @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V.
-   *
-   * @input:
-   *   library ::
-   *     A handle to the target library instance.
-   *
-   *   filter ::
-   *     The filter type.
-   *
-   *     You can use @FT_LCD_FILTER_NONE here to disable this feature, or
-   *     @FT_LCD_FILTER_DEFAULT to use a default filter that should work
-   *     well on most LCD screens.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   This feature is always disabled by default.  Clients must make an
-   *   explicit call to this function with a `filter' value other than
-   *   @FT_LCD_FILTER_NONE in order to enable it.
-   *
-   *   Due to *PATENTS* covering subpixel rendering, this function doesn't
-   *   do anything except returning `FT_Err_Unimplemented_Feature' if the
-   *   configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
-   *   defined in your build of the library, which should correspond to all
-   *   default builds of FreeType.
-   *
-   * @since:
-   *   2.3.0
-   */
-  FT_EXPORT( FT_Error )
-  FT_Library_SetLcdFilter( FT_Library    library,
-                           FT_LcdFilter  filter );
-
-
-  /**************************************************************************
-   *
-   * @func:
-   *   FT_Library_SetLcdFilterWeights
-   *
-   * @description:
-   *   This function can be used to enable LCD filter with custom weights,
-   *   instead of using presets in @FT_Library_SetLcdFilter.
-   *
-   * @input:
-   *   library ::
-   *     A handle to the target library instance.
-   *
-   *   weights ::
-   *     A pointer to an array; the function copies the first five bytes and
-   *     uses them to specify the filter weights.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   Due to *PATENTS* covering subpixel rendering, this function doesn't
-   *   do anything except returning `FT_Err_Unimplemented_Feature' if the
-   *   configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
-   *   defined in your build of the library, which should correspond to all
-   *   default builds of FreeType.
-   *
-   *   LCD filter weights can also be set per face using @FT_Face_Properties
-   *   with @FT_PARAM_TAG_LCD_FILTER_WEIGHTS.
-   *
-   * @since:
-   *   2.4.0
-   */
-  FT_EXPORT( FT_Error )
-  FT_Library_SetLcdFilterWeights( FT_Library      library,
-                                  unsigned char  *weights );
-
-
-  /*
-   * @type:
-   *   FT_LcdFiveTapFilter
-   *
-   * @description:
-   *   A typedef for passing the five LCD filter weights to
-   *   @FT_Face_Properties within an @FT_Parameter structure.
-   *
-   * @since:
-   *   2.8
-   *
-   */
-#define FT_LCD_FILTER_FIVE_TAPS  5
-
-  typedef FT_Byte  FT_LcdFiveTapFilter[FT_LCD_FILTER_FIVE_TAPS];
-
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTLCDFIL_H_ */
-
-
-/* END */

+ 0 - 276
freetype/include/freetype/ftlist.h

@@ -1,276 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftlist.h                                                               */
-/*                                                                         */
-/*    Generic list support for FreeType (specification).                   */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /*  This file implements functions relative to list processing.  Its     */
-  /*  data structures are defined in `freetype.h'.                         */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-#ifndef FTLIST_H_
-#define FTLIST_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>                                                             */
-  /*    list_processing                                                    */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    List Processing                                                    */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Simple management of lists.                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains various definitions related to list          */
-  /*    processing using doubly-linked nodes.                              */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    FT_List                                                            */
-  /*    FT_ListNode                                                        */
-  /*    FT_ListRec                                                         */
-  /*    FT_ListNodeRec                                                     */
-  /*                                                                       */
-  /*    FT_List_Add                                                        */
-  /*    FT_List_Insert                                                     */
-  /*    FT_List_Find                                                       */
-  /*    FT_List_Remove                                                     */
-  /*    FT_List_Up                                                         */
-  /*    FT_List_Iterate                                                    */
-  /*    FT_List_Iterator                                                   */
-  /*    FT_List_Finalize                                                   */
-  /*    FT_List_Destructor                                                 */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_List_Find                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Find the list node for a given listed object.                      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    list :: A pointer to the parent list.                              */
-  /*    data :: The address of the listed object.                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    List node.  NULL if it wasn't found.                               */
-  /*                                                                       */
-  FT_EXPORT( FT_ListNode )
-  FT_List_Find( FT_List  list,
-                void*    data );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_List_Add                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Append an element to the end of a list.                            */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    list :: A pointer to the parent list.                              */
-  /*    node :: The node to append.                                        */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_List_Add( FT_List      list,
-               FT_ListNode  node );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_List_Insert                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Insert an element at the head of a list.                           */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    list :: A pointer to parent list.                                  */
-  /*    node :: The node to insert.                                        */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_List_Insert( FT_List      list,
-                  FT_ListNode  node );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_List_Remove                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Remove a node from a list.  This function doesn't check whether    */
-  /*    the node is in the list!                                           */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    node :: The node to remove.                                        */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    list :: A pointer to the parent list.                              */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_List_Remove( FT_List      list,
-                  FT_ListNode  node );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_List_Up                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Move a node to the head/top of a list.  Used to maintain LRU       */
-  /*    lists.                                                             */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    list :: A pointer to the parent list.                              */
-  /*    node :: The node to move.                                          */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_List_Up( FT_List      list,
-              FT_ListNode  node );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_List_Iterator                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An FT_List iterator function that is called during a list parse    */
-  /*    by @FT_List_Iterate.                                               */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    node :: The current iteration list node.                           */
-  /*                                                                       */
-  /*    user :: A typeless pointer passed to @FT_List_Iterate.             */
-  /*            Can be used to point to the iteration's state.             */
-  /*                                                                       */
-  typedef FT_Error
-  (*FT_List_Iterator)( FT_ListNode  node,
-                       void*        user );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_List_Iterate                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Parse a list and calls a given iterator function on each element.  */
-  /*    Note that parsing is stopped as soon as one of the iterator calls  */
-  /*    returns a non-zero value.                                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    list     :: A handle to the list.                                  */
-  /*    iterator :: An iterator function, called on each node of the list. */
-  /*    user     :: A user-supplied field that is passed as the second     */
-  /*                argument to the iterator.                              */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The result (a FreeType error code) of the last iterator call.      */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_List_Iterate( FT_List           list,
-                   FT_List_Iterator  iterator,
-                   void*             user );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_List_Destructor                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An @FT_List iterator function that is called during a list         */
-  /*    finalization by @FT_List_Finalize to destroy all elements in a     */
-  /*    given list.                                                        */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    system :: The current system object.                               */
-  /*                                                                       */
-  /*    data   :: The current object to destroy.                           */
-  /*                                                                       */
-  /*    user   :: A typeless pointer passed to @FT_List_Iterate.  It can   */
-  /*              be used to point to the iteration's state.               */
-  /*                                                                       */
-  typedef void
-  (*FT_List_Destructor)( FT_Memory  memory,
-                         void*      data,
-                         void*      user );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_List_Finalize                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Destroy all elements in the list as well as the list itself.       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    list    :: A handle to the list.                                   */
-  /*                                                                       */
-  /*    destroy :: A list destructor that will be applied to each element  */
-  /*               of the list.  Set this to NULL if not needed.           */
-  /*                                                                       */
-  /*    memory  :: The current memory object that handles deallocation.    */
-  /*                                                                       */
-  /*    user    :: A user-supplied field that is passed as the last        */
-  /*               argument to the destructor.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function expects that all nodes added by @FT_List_Add or      */
-  /*    @FT_List_Insert have been dynamically allocated.                   */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_List_Finalize( FT_List             list,
-                    FT_List_Destructor  destroy,
-                    FT_Memory           memory,
-                    void*               user );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTLIST_H_ */
-
-
-/* END */

+ 0 - 99
freetype/include/freetype/ftlzw.h

@@ -1,99 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftlzw.h                                                                */
-/*                                                                         */
-/*    LZW-compressed stream support.                                       */
-/*                                                                         */
-/*  Copyright 2004-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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 FTLZW_H_
-#define FTLZW_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>                                                             */
-  /*    lzw                                                                */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    LZW Streams                                                        */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Using LZW-compressed font files.                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains the declaration of LZW-specific functions.   */
-  /*                                                                       */
-  /*************************************************************************/
-
- /************************************************************************
-  *
-  * @function:
-  *   FT_Stream_OpenLZW
-  *
-  * @description:
-  *   Open a new stream to parse LZW-compressed font files.  This is
-  *   mainly used to support the compressed `*.pcf.Z' 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, LZW 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 LZW 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 LZW support.
-  */
-  FT_EXPORT( FT_Error )
-  FT_Stream_OpenLZW( FT_Stream  stream,
-                     FT_Stream  source );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTLZW_H_ */
-
-
-/* END */

+ 0 - 275
freetype/include/freetype/ftmac.h

@@ -1,275 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftmac.h                                                                */
-/*                                                                         */
-/*    Additional Mac-specific API.                                         */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.     */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  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.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/*                                                                         */
-/* NOTE: Include this file after FT_FREETYPE_H and after any               */
-/*       Mac-specific headers (because this header uses Mac types such as  */
-/*       Handle, FSSpec, FSRef, etc.)                                      */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTMAC_H_
-#define FTMAC_H_
-
-
-#include <ft2build.h>
-
-
-FT_BEGIN_HEADER
-
-
-  /* gcc-3.1 and later can warn about functions tagged as deprecated */
-#ifndef FT_DEPRECATED_ATTRIBUTE
-#if defined( __GNUC__ )                                     && \
-    ( ( __GNUC__ >= 4 )                                  ||    \
-      ( ( __GNUC__ == 3 ) && ( __GNUC_MINOR__ >= 1 ) ) )
-#define FT_DEPRECATED_ATTRIBUTE  __attribute__(( deprecated ))
-#else
-#define FT_DEPRECATED_ATTRIBUTE
-#endif
-#endif
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    mac_specific                                                       */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Mac Specific Interface                                             */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Only available on the Macintosh.                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The following definitions are only available if FreeType is        */
-  /*    compiled on a Macintosh.                                           */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_New_Face_From_FOND                                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Create a new face object from a FOND resource.                     */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library    :: A handle to the library resource.                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    fond       :: A FOND resource.                                     */
-  /*                                                                       */
-  /*    face_index :: Only supported for the -1 `sanity check' special     */
-  /*                  case.                                                */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    aface      :: A handle to a new face object.                       */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Notes>                                                               */
-  /*    This function can be used to create @FT_Face objects from fonts    */
-  /*    that are installed in the system as follows.                       */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      fond = GetResource( 'FOND', fontName );                          */
-  /*      error = FT_New_Face_From_FOND( library, fond, 0, &face );        */
-  /*    }                                                                  */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_New_Face_From_FOND( FT_Library  library,
-                         Handle      fond,
-                         FT_Long     face_index,
-                         FT_Face    *aface )
-                       FT_DEPRECATED_ATTRIBUTE;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_GetFile_From_Mac_Name                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return an FSSpec for the disk file containing the named font.      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    fontName   :: Mac OS name of the font (e.g., Times New Roman       */
-  /*                  Bold).                                               */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    pathSpec   :: FSSpec to the file.  For passing to                  */
-  /*                  @FT_New_Face_From_FSSpec.                            */
-  /*                                                                       */
-  /*    face_index :: Index of the face.  For passing to                   */
-  /*                  @FT_New_Face_From_FSSpec.                            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_GetFile_From_Mac_Name( const char*  fontName,
-                            FSSpec*      pathSpec,
-                            FT_Long*     face_index )
-                          FT_DEPRECATED_ATTRIBUTE;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_GetFile_From_Mac_ATS_Name                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return an FSSpec for the disk file containing the named font.      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    fontName   :: Mac OS name of the font in ATS framework.            */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    pathSpec   :: FSSpec to the file. For passing to                   */
-  /*                  @FT_New_Face_From_FSSpec.                            */
-  /*                                                                       */
-  /*    face_index :: Index of the face. For passing to                    */
-  /*                  @FT_New_Face_From_FSSpec.                            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_GetFile_From_Mac_ATS_Name( const char*  fontName,
-                                FSSpec*      pathSpec,
-                                FT_Long*     face_index )
-                              FT_DEPRECATED_ATTRIBUTE;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_GetFilePath_From_Mac_ATS_Name                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return a pathname of the disk file and face index for given font   */
-  /*    name that is handled by ATS framework.                             */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    fontName    :: Mac OS name of the font in ATS framework.           */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    path        :: Buffer to store pathname of the file.  For passing  */
-  /*                   to @FT_New_Face.  The client must allocate this     */
-  /*                   buffer before calling this function.                */
-  /*                                                                       */
-  /*    maxPathSize :: Lengths of the buffer `path' that client allocated. */
-  /*                                                                       */
-  /*    face_index  :: Index of the face.  For passing to @FT_New_Face.    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_GetFilePath_From_Mac_ATS_Name( const char*  fontName,
-                                    UInt8*       path,
-                                    UInt32       maxPathSize,
-                                    FT_Long*     face_index )
-                                  FT_DEPRECATED_ATTRIBUTE;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_New_Face_From_FSSpec                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Create a new face object from a given resource and typeface index  */
-  /*    using an FSSpec to the font file.                                  */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library    :: A handle to the library resource.                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    spec       :: FSSpec to the font file.                             */
-  /*                                                                       */
-  /*    face_index :: The index of the face within the resource.  The      */
-  /*                  first face has index~0.                              */
-  /* <Output>                                                              */
-  /*    aface      :: A handle to a new face object.                       */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    @FT_New_Face_From_FSSpec is identical to @FT_New_Face except       */
-  /*    it accepts an FSSpec instead of a path.                            */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_New_Face_From_FSSpec( FT_Library     library,
-                           const FSSpec  *spec,
-                           FT_Long        face_index,
-                           FT_Face       *aface )
-                         FT_DEPRECATED_ATTRIBUTE;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_New_Face_From_FSRef                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Create a new face object from a given resource and typeface index  */
-  /*    using an FSRef to the font file.                                   */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library    :: A handle to the library resource.                    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    spec       :: FSRef to the font file.                              */
-  /*                                                                       */
-  /*    face_index :: The index of the face within the resource.  The      */
-  /*                  first face has index~0.                              */
-  /* <Output>                                                              */
-  /*    aface      :: A handle to a new face object.                       */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    @FT_New_Face_From_FSRef is identical to @FT_New_Face except        */
-  /*    it accepts an FSRef instead of a path.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_New_Face_From_FSRef( FT_Library    library,
-                          const FSRef  *ref,
-                          FT_Long       face_index,
-                          FT_Face      *aface )
-                        FT_DEPRECATED_ATTRIBUTE;
-
-  /* */
-
-
-FT_END_HEADER
-
-
-#endif /* FTMAC_H_ */
-
-
-/* END */

+ 0 - 638
freetype/include/freetype/ftmm.h

@@ -1,638 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftmm.h                                                                 */
-/*                                                                         */
-/*    FreeType Multiple Master font interface (specification).             */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTMM_H_
-#define FTMM_H_
-
-
-#include <ft2build.h>
-#include FT_TYPE1_TABLES_H
-
-
-FT_BEGIN_HEADER
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    multiple_masters                                                   */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Multiple Masters                                                   */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    How to manage Multiple Masters fonts.                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The following types and functions are used to manage Multiple      */
-  /*    Master fonts, i.e., the selection of specific design instances by  */
-  /*    setting design axis coordinates.                                   */
-  /*                                                                       */
-  /*    Besides Adobe MM fonts, the interface supports Apple's TrueType GX */
-  /*    and OpenType variation fonts.  Some of the routines only work with */
-  /*    Adobe MM fonts, others will work with all three types.  They are   */
-  /*    similar enough that a consistent interface makes sense.            */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_MM_Axis                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model a given axis in design space for Multiple     */
-  /*    Masters fonts.                                                     */
-  /*                                                                       */
-  /*    This structure can't be used for TrueType GX or OpenType variation */
-  /*    fonts.                                                             */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    name    :: The axis's name.                                        */
-  /*                                                                       */
-  /*    minimum :: The axis's minimum design coordinate.                   */
-  /*                                                                       */
-  /*    maximum :: The axis's maximum design coordinate.                   */
-  /*                                                                       */
-  typedef struct  FT_MM_Axis_
-  {
-    FT_String*  name;
-    FT_Long     minimum;
-    FT_Long     maximum;
-
-  } FT_MM_Axis;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Multi_Master                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model the axes and space of a Multiple Masters      */
-  /*    font.                                                              */
-  /*                                                                       */
-  /*    This structure can't be used for TrueType GX or OpenType variation */
-  /*    fonts.                                                             */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    num_axis    :: Number of axes.  Cannot exceed~4.                   */
-  /*                                                                       */
-  /*    num_designs :: Number of designs; should be normally 2^num_axis    */
-  /*                   even though the Type~1 specification strangely      */
-  /*                   allows for intermediate designs to be present.      */
-  /*                   This number cannot exceed~16.                       */
-  /*                                                                       */
-  /*    axis        :: A table of axis descriptors.                        */
-  /*                                                                       */
-  typedef struct  FT_Multi_Master_
-  {
-    FT_UInt     num_axis;
-    FT_UInt     num_designs;
-    FT_MM_Axis  axis[T1_MAX_MM_AXIS];
-
-  } FT_Multi_Master;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Var_Axis                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model a given axis in design space for Multiple     */
-  /*    Masters, TrueType GX, and OpenType variation fonts.                */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    name    :: The axis's name.                                        */
-  /*               Not always meaningful for TrueType GX or OpenType       */
-  /*               variation fonts.                                        */
-  /*                                                                       */
-  /*    minimum :: The axis's minimum design coordinate.                   */
-  /*                                                                       */
-  /*    def     :: The axis's default design coordinate.                   */
-  /*               FreeType computes meaningful default values for Adobe   */
-  /*               MM fonts.                                               */
-  /*                                                                       */
-  /*    maximum :: The axis's maximum design coordinate.                   */
-  /*                                                                       */
-  /*    tag     :: The axis's tag (the equivalent to `name' for TrueType   */
-  /*               GX and OpenType variation fonts).  FreeType provides    */
-  /*               default values for Adobe MM fonts if possible.          */
-  /*                                                                       */
-  /*    strid   :: The axis name entry in the font's `name' table.  This   */
-  /*               is another (and often better) version of the `name'     */
-  /*               field for TrueType GX or OpenType variation fonts.  Not */
-  /*               meaningful for Adobe MM fonts.                          */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The fields `minimum', `def', and `maximum' are 16.16 fractional    */
-  /*    values for TrueType GX and OpenType variation fonts.  For Adobe MM */
-  /*    fonts, the values are integers.                                    */
-  /*                                                                       */
-  typedef struct  FT_Var_Axis_
-  {
-    FT_String*  name;
-
-    FT_Fixed    minimum;
-    FT_Fixed    def;
-    FT_Fixed    maximum;
-
-    FT_ULong    tag;
-    FT_UInt     strid;
-
-  } FT_Var_Axis;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Var_Named_Style                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model a named instance in a TrueType GX or OpenType */
-  /*    variation font.                                                    */
-  /*                                                                       */
-  /*    This structure can't be used for Adobe MM fonts.                   */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    coords :: The design coordinates for this instance.                */
-  /*              This is an array with one entry for each axis.           */
-  /*                                                                       */
-  /*    strid  :: The entry in `name' table identifying this instance.     */
-  /*                                                                       */
-  /*    psid   :: The entry in `name' table identifying a PostScript name  */
-  /*              for this instance.  Value 0xFFFF indicates a missing     */
-  /*              entry.                                                   */
-  /*                                                                       */
-  typedef struct  FT_Var_Named_Style_
-  {
-    FT_Fixed*  coords;
-    FT_UInt    strid;
-    FT_UInt    psid;   /* since 2.7.1 */
-
-  } FT_Var_Named_Style;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_MM_Var                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model the axes and space of an Adobe MM, TrueType   */
-  /*    GX, or OpenType variation font.                                    */
-  /*                                                                       */
-  /*    Some fields are specific to one format and not to the others.      */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    num_axis        :: The number of axes.  The maximum value is~4 for */
-  /*                       Adobe MM fonts; no limit in TrueType GX or      */
-  /*                       OpenType variation fonts.                       */
-  /*                                                                       */
-  /*    num_designs     :: The number of designs; should be normally       */
-  /*                       2^num_axis for Adobe MM fonts.  Not meaningful  */
-  /*                       for TrueType GX or OpenType variation fonts     */
-  /*                       (where every glyph could have a different       */
-  /*                       number of designs).                             */
-  /*                                                                       */
-  /*    num_namedstyles :: The number of named styles; a `named style' is  */
-  /*                       a tuple of design coordinates that has a string */
-  /*                       ID (in the `name' table) associated with it.    */
-  /*                       The font can tell the user that, for example,   */
-  /*                       [Weight=1.5,Width=1.1] is `Bold'.  Another name */
-  /*                       for `named style' is `named instance'.          */
-  /*                                                                       */
-  /*                       For Adobe Multiple Masters fonts, this value is */
-  /*                       always zero because the format does not support */
-  /*                       named styles.                                   */
-  /*                                                                       */
-  /*    axis            :: An axis descriptor table.                       */
-  /*                       TrueType GX and OpenType variation fonts        */
-  /*                       contain slightly more data than Adobe MM fonts. */
-  /*                       Memory management of this pointer is done       */
-  /*                       internally by FreeType.                         */
-  /*                                                                       */
-  /*    namedstyle      :: A named style (instance) table.                 */
-  /*                       Only meaningful for TrueType GX and OpenType    */
-  /*                       variation fonts.  Memory management of this     */
-  /*                       pointer is done internally by FreeType.         */
-  /*                                                                       */
-  typedef struct  FT_MM_Var_
-  {
-    FT_UInt              num_axis;
-    FT_UInt              num_designs;
-    FT_UInt              num_namedstyles;
-    FT_Var_Axis*         axis;
-    FT_Var_Named_Style*  namedstyle;
-
-  } FT_MM_Var;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Multi_Master                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve a variation descriptor of a given Adobe MM font.          */
-  /*                                                                       */
-  /*    This function can't be used with TrueType GX or OpenType variation */
-  /*    fonts.                                                             */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face    :: A handle to the source face.                            */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    amaster :: The Multiple Masters descriptor.                        */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Multi_Master( FT_Face           face,
-                       FT_Multi_Master  *amaster );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_MM_Var                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve a variation descriptor for a given font.                  */
-  /*                                                                       */
-  /*    This function works with all supported variation formats.          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face    :: A handle to the source face.                            */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    amaster :: The variation descriptor.                               */
-  /*               Allocates a data structure, which the user must         */
-  /*               deallocate with a call to @FT_Done_MM_Var after use.    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_MM_Var( FT_Face      face,
-                 FT_MM_Var*  *amaster );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Done_MM_Var                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Free the memory allocated by @FT_Get_MM_Var.                       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A handle of the face's parent library object that was   */
-  /*               used in the call to @FT_Get_MM_Var to create `amaster'. */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Done_MM_Var( FT_Library   library,
-                  FT_MM_Var   *amaster );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_MM_Design_Coordinates                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    For Adobe MM fonts, choose an interpolated font design through     */
-  /*    design coordinates.                                                */
-  /*                                                                       */
-  /*    This function can't be used with TrueType GX or OpenType variation */
-  /*    fonts.                                                             */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face       :: A handle to the source face.                         */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    num_coords :: The number of available design coordinates.  If it   */
-  /*                  is larger than the number of axes, ignore the excess */
-  /*                  values.  If it is smaller than the number of axes,   */
-  /*                  use default values for the remaining axes.           */
-  /*                                                                       */
-  /*    coords     :: An array of design coordinates.                      */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    [Since 2.8.1] To reset all axes to the default values, call the    */
-  /*    function with `num_coords' set to zero and `coords' set to NULL.   */
-  /*                                                                       */
-  /*    [Since 2.9] If `num_coords' is larger than zero, this function     */
-  /*    sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags'    */
-  /*    field (i.e., @FT_IS_VARIATION will return true).  If `num_coords'  */
-  /*    is zero, this bit flag gets unset.                                 */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Set_MM_Design_Coordinates( FT_Face   face,
-                                FT_UInt   num_coords,
-                                FT_Long*  coords );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_Var_Design_Coordinates                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Choose an interpolated font design through design coordinates.     */
-  /*                                                                       */
-  /*    This function works with all supported variation formats.          */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face       :: A handle to the source face.                         */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    num_coords :: The number of available design coordinates.  If it   */
-  /*                  is larger than the number of axes, ignore the excess */
-  /*                  values.  If it is smaller than the number of axes,   */
-  /*                  use default values for the remaining axes.           */
-  /*                                                                       */
-  /*    coords     :: An array of design coordinates.                      */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    [Since 2.8.1] To reset all axes to the default values, call the    */
-  /*    function with `num_coords' set to zero and `coords' set to NULL.   */
-  /*    [Since 2.9] `Default values' means the currently selected named    */
-  /*    instance (or the base font if no named instance is selected).      */
-  /*                                                                       */
-  /*    [Since 2.9] If `num_coords' is larger than zero, this function     */
-  /*    sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags'    */
-  /*    field (i.e., @FT_IS_VARIATION will return true).  If `num_coords'  */
-  /*    is zero, this bit flag gets unset.                                 */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Set_Var_Design_Coordinates( FT_Face    face,
-                                 FT_UInt    num_coords,
-                                 FT_Fixed*  coords );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Var_Design_Coordinates                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Get the design coordinates of the currently selected interpolated  */
-  /*    font.                                                              */
-  /*                                                                       */
-  /*    This function works with all supported variation formats.          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face       :: A handle to the source face.                         */
-  /*                                                                       */
-  /*    num_coords :: The number of design coordinates to retrieve.  If it */
-  /*                  is larger than the number of axes, set the excess    */
-  /*                  values to~0.                                         */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    coords     :: The design coordinates array.                        */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.7.1                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Var_Design_Coordinates( FT_Face    face,
-                                 FT_UInt    num_coords,
-                                 FT_Fixed*  coords );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_MM_Blend_Coordinates                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Choose an interpolated font design through normalized blend        */
-  /*    coordinates.                                                       */
-  /*                                                                       */
-  /*    This function works with all supported variation formats.          */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    face       :: A handle to the source face.                         */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    num_coords :: The number of available design coordinates.  If it   */
-  /*                  is larger than the number of axes, ignore the excess */
-  /*                  values.  If it is smaller than the number of axes,   */
-  /*                  use default values for the remaining axes.           */
-  /*                                                                       */
-  /*    coords     :: The design coordinates array (each element must be   */
-  /*                  between 0 and 1.0 for Adobe MM fonts, and between    */
-  /*                  -1.0 and 1.0 for TrueType GX and OpenType variation  */
-  /*                  fonts).                                              */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    [Since 2.8.1] To reset all axes to the default values, call the    */
-  /*    function with `num_coords' set to zero and `coords' set to NULL.   */
-  /*    [Since 2.9] `Default values' means the currently selected named    */
-  /*    instance (or the base font if no named instance is selected).      */
-  /*                                                                       */
-  /*    [Since 2.9] If `num_coords' is larger than zero, this function     */
-  /*    sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags'    */
-  /*    field (i.e., @FT_IS_VARIATION will return true).  If `num_coords'  */
-  /*    is zero, this bit flag gets unset.                                 */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Set_MM_Blend_Coordinates( FT_Face    face,
-                               FT_UInt    num_coords,
-                               FT_Fixed*  coords );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_MM_Blend_Coordinates                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Get the normalized blend coordinates of the currently selected     */
-  /*    interpolated font.                                                 */
-  /*                                                                       */
-  /*    This function works with all supported variation formats.          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face       :: A handle to the source face.                         */
-  /*                                                                       */
-  /*    num_coords :: The number of normalized blend coordinates to        */
-  /*                  retrieve.  If it is larger than the number of axes,  */
-  /*                  set the excess values to~0.5 for Adobe MM fonts, and */
-  /*                  to~0 for TrueType GX and OpenType variation fonts.   */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    coords     :: The normalized blend coordinates array.              */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.7.1                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_MM_Blend_Coordinates( FT_Face    face,
-                               FT_UInt    num_coords,
-                               FT_Fixed*  coords );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_Var_Blend_Coordinates                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This is another name of @FT_Set_MM_Blend_Coordinates.              */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Set_Var_Blend_Coordinates( FT_Face    face,
-                                FT_UInt    num_coords,
-                                FT_Fixed*  coords );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Var_Blend_Coordinates                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This is another name of @FT_Get_MM_Blend_Coordinates.              */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.7.1                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Var_Blend_Coordinates( FT_Face    face,
-                                FT_UInt    num_coords,
-                                FT_Fixed*  coords );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_VAR_AXIS_FLAG_XXX                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A list of bit flags used in the return value of                    */
-  /*    @FT_Get_Var_Axis_Flags.                                            */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_VAR_AXIS_FLAG_HIDDEN ::                                         */
-  /*      The variation axis should not be exposed to user interfaces.     */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.8.1                                                              */
-  /*                                                                       */
-#define FT_VAR_AXIS_FLAG_HIDDEN  1
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Var_Axis_Flags                                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Get the `flags' field of an OpenType Variation Axis Record.        */
-  /*                                                                       */
-  /*    Not meaningful for Adobe MM fonts (`*flags' is always zero).       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    master     :: The variation descriptor.                            */
-  /*                                                                       */
-  /*    axis_index :: The index of the requested variation axis.           */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    flags      :: The `flags' field.  See @FT_VAR_AXIS_FLAG_XXX for    */
-  /*                  possible values.                                     */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.8.1                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Var_Axis_Flags( FT_MM_Var*  master,
-                         FT_UInt     axis_index,
-                         FT_UInt*    flags );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_Named_Instance                                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Set or change the current named instance.                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face           :: A handle to the source face.                     */
-  /*                                                                       */
-  /*    instance_index :: The index of the requested instance, starting    */
-  /*                      with value 1.  If set to value 0, FreeType       */
-  /*                      switches to font access without a named          */
-  /*                      instance.                                        */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The function uses the value of `instance_index' to set bits 16-30  */
-  /*    of the face's `face_index' field.  It also resets any variation    */
-  /*    applied to the font, and the @FT_FACE_FLAG_VARIATION bit of the    */
-  /*    face's `face_flags' field gets reset to zero (i.e.,                */
-  /*    @FT_IS_VARIATION will return false).                               */
-  /*                                                                       */
-  /*    For Adobe MM fonts (which don't have named instances) this         */
-  /*    function simply resets the current face to the default instance.   */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.9                                                                */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Set_Named_Instance( FT_Face  face,
-                         FT_UInt  instance_index );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTMM_H_ */
-
-
-/* END */

+ 0 - 711
freetype/include/freetype/ftmodapi.h

@@ -1,711 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftmodapi.h                                                             */
-/*                                                                         */
-/*    FreeType modules public interface (specification).                   */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTMODAPI_H_
-#define FTMODAPI_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>                                                             */
-  /*    module_management                                                  */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Module Management                                                  */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    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                                                          */
-  /*      sfnt                                                             */
-  /*      smooth, smooth-lcd, smooth-lcdv                                  */
-  /*      truetype                                                         */
-  /*      type1                                                            */
-  /*      type42                                                           */
-  /*      t1cid                                                            */
-  /*      winfonts                                                         */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    Note that the FreeType Cache sub-system is not a FreeType module.  */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    FT_Module                                                          */
-  /*    FT_Module_Constructor                                              */
-  /*    FT_Module_Destructor                                               */
-  /*    FT_Module_Requester                                                */
-  /*    FT_Module_Class                                                    */
-  /*                                                                       */
-  /*    FT_Add_Module                                                      */
-  /*    FT_Get_Module                                                      */
-  /*    FT_Remove_Module                                                   */
-  /*    FT_Add_Default_Modules                                             */
-  /*                                                                       */
-  /*    FT_Property_Set                                                    */
-  /*    FT_Property_Get                                                    */
-  /*    FT_Set_Default_Properties                                          */
-  /*                                                                       */
-  /*    FT_New_Library                                                     */
-  /*    FT_Done_Library                                                    */
-  /*    FT_Reference_Library                                               */
-  /*                                                                       */
-  /*    FT_Renderer                                                        */
-  /*    FT_Renderer_Class                                                  */
-  /*                                                                       */
-  /*    FT_Get_Renderer                                                    */
-  /*    FT_Set_Renderer                                                    */
-  /*                                                                       */
-  /*    FT_Set_Debug_Hook                                                  */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /* module bit flags */
-#define FT_MODULE_FONT_DRIVER         1  /* this module is a font driver  */
-#define FT_MODULE_RENDERER            2  /* this module is a renderer     */
-#define FT_MODULE_HINTER              4  /* this module is a glyph hinter */
-#define FT_MODULE_STYLER              8  /* this module is a styler       */
-
-#define FT_MODULE_DRIVER_SCALABLE      0x100  /* the driver supports      */
-                                              /* scalable fonts           */
-#define FT_MODULE_DRIVER_NO_OUTLINES   0x200  /* the driver does not      */
-                                              /* support vector outlines  */
-#define FT_MODULE_DRIVER_HAS_HINTER    0x400  /* the driver provides its  */
-                                              /* own hinter               */
-#define FT_MODULE_DRIVER_HINTS_LIGHTLY 0x800  /* the driver's hinter      */
-                                              /* produces LIGHT hints     */
-
-
-  /* deprecated values */
-#define ft_module_font_driver         FT_MODULE_FONT_DRIVER
-#define ft_module_renderer            FT_MODULE_RENDERER
-#define ft_module_hinter              FT_MODULE_HINTER
-#define ft_module_styler              FT_MODULE_STYLER
-
-#define ft_module_driver_scalable       FT_MODULE_DRIVER_SCALABLE
-#define ft_module_driver_no_outlines    FT_MODULE_DRIVER_NO_OUTLINES
-#define ft_module_driver_has_hinter     FT_MODULE_DRIVER_HAS_HINTER
-#define ft_module_driver_hints_lightly  FT_MODULE_DRIVER_HINTS_LIGHTLY
-
-
-  typedef FT_Pointer  FT_Module_Interface;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Module_Constructor                                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function used to initialize (not create) a new module object.    */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    module :: The module to initialize.                                */
-  /*                                                                       */
-  typedef FT_Error
-  (*FT_Module_Constructor)( FT_Module  module );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Module_Destructor                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function used to finalize (not destroy) a given module object.   */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    module :: The module to finalize.                                  */
-  /*                                                                       */
-  typedef void
-  (*FT_Module_Destructor)( FT_Module  module );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Module_Requester                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A function used to query a given module for a specific interface.  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    module :: The module to be searched.                               */
-  /*                                                                       */
-  /*    name ::   The name of the interface in the module.                 */
-  /*                                                                       */
-  typedef FT_Module_Interface
-  (*FT_Module_Requester)( FT_Module    module,
-                          const char*  name );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Module_Class                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The module class descriptor.                                       */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    module_flags    :: Bit flags describing the module.                */
-  /*                                                                       */
-  /*    module_size     :: The size of one module object/instance in       */
-  /*                       bytes.                                          */
-  /*                                                                       */
-  /*    module_name     :: The name of the module.                         */
-  /*                                                                       */
-  /*    module_version  :: The version, as a 16.16 fixed number            */
-  /*                       (major.minor).                                  */
-  /*                                                                       */
-  /*    module_requires :: The version of FreeType this module requires,   */
-  /*                       as a 16.16 fixed number (major.minor).  Starts  */
-  /*                       at version 2.0, i.e., 0x20000.                  */
-  /*                                                                       */
-  /*    module_init     :: The initializing function.                      */
-  /*                                                                       */
-  /*    module_done     :: The finalizing function.                        */
-  /*                                                                       */
-  /*    get_interface   :: The interface requesting function.              */
-  /*                                                                       */
-  typedef struct  FT_Module_Class_
-  {
-    FT_ULong               module_flags;
-    FT_Long                module_size;
-    const FT_String*       module_name;
-    FT_Fixed               module_version;
-    FT_Fixed               module_requires;
-
-    const void*            module_interface;
-
-    FT_Module_Constructor  module_init;
-    FT_Module_Destructor   module_done;
-    FT_Module_Requester    get_interface;
-
-  } FT_Module_Class;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Add_Module                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Add a new module to a given library instance.                      */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library :: A handle to the library object.                         */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    clazz   :: A pointer to class descriptor for the module.           */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    An error will be returned if a module already exists by that name, */
-  /*    or if the module requires a version of FreeType that is too great. */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Add_Module( FT_Library              library,
-                 const FT_Module_Class*  clazz );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Module                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Find a module by its name.                                         */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library     :: A handle to the library object.                     */
-  /*                                                                       */
-  /*    module_name :: The module's name (as an ASCII string).             */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    A module handle.  0~if none was found.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    FreeType's internal modules aren't documented very well, and you   */
-  /*    should look up the source code for details.                        */
-  /*                                                                       */
-  FT_EXPORT( FT_Module )
-  FT_Get_Module( FT_Library   library,
-                 const char*  module_name );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Remove_Module                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Remove a given module from a library instance.                     */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library :: A handle to a library object.                           */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    module  :: A handle to a module object.                            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The module object is destroyed by the function in case of success. */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Remove_Module( FT_Library  library,
-                    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 section
-   *       @properties.
-   *
-   *       Note that only a few modules have properties.
-   *
-   *    value ::
-   *       A generic pointer to a variable or structure that gives the new
-   *       value of the property.  The exact definition of `value' is
-   *       dependent on the property; see section @properties.
-   *
-   * @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 section
-   *       @properties.
-   *
-   * @inout:
-   *    value ::
-   *       A generic pointer to a variable or structure that gives the
-   *       value of the property.  The exact definition of `value' is
-   *       dependent on the property; see section @properties.
-   *
-   * @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>                                                            */
-  /*    FT_Set_Default_Properties                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is   */
-  /*    set, this function reads the `FREETYPE_PROPERTIES' environment     */
-  /*    variable to control driver properties.  See section @properties    */
-  /*    for more.                                                          */
-  /*                                                                       */
-  /*    If the compilation option is not set, this function does nothing.  */
-  /*                                                                       */
-  /*    `FREETYPE_PROPERTIES' has the following syntax form (broken here   */
-  /*    into multiple lines for better readability).                       */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      <optional whitespace>                                            */
-  /*      <module-name1> ':'                                               */
-  /*      <property-name1> '=' <property-value1>                           */
-  /*      <whitespace>                                                     */
-  /*      <module-name2> ':'                                               */
-  /*      <property-name2> '=' <property-value2>                           */
-  /*      ...                                                              */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    Example:                                                           */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      FREETYPE_PROPERTIES=truetype:interpreter-version=35 \            */
-  /*                          cff:no-stem-darkening=1 \                    */
-  /*                          autofitter:warping=1                         */
-  /*    }                                                                  */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library :: A handle to a new library object.                       */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.8                                                                */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Set_Default_Properties( FT_Library  library );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Reference_Library                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A counter gets initialized to~1 at the time an @FT_Library         */
-  /*    structure is created.  This function increments the counter.       */
-  /*    @FT_Done_Library then only destroys a library if the counter is~1, */
-  /*    otherwise it simply decrements the counter.                        */
-  /*                                                                       */
-  /*    This function helps in managing life-cycles of structures that     */
-  /*    reference @FT_Library objects.                                     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A handle to a target library object.                    */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.4.2                                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Reference_Library( FT_Library  library );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_New_Library                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This function is used to create a new FreeType library instance    */
-  /*    from a given memory object.  It is thus possible to use libraries  */
-  /*    with distinct memory allocators within the same program.  Note,    */
-  /*    however, that the used @FT_Memory structure is expected to remain  */
-  /*    valid for the life of the @FT_Library object.                      */
-  /*                                                                       */
-  /*    Normally, you would call this function (followed by a call to      */
-  /*    @FT_Add_Default_Modules or a series of calls to @FT_Add_Module,    */
-  /*    and a call to @FT_Set_Default_Properties) instead of               */
-  /*    @FT_Init_FreeType to initialize the FreeType library.              */
-  /*                                                                       */
-  /*    Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a      */
-  /*    library instance.                                                  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    memory   :: A handle to the original memory object.                */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    alibrary :: A pointer to handle of a new library object.           */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    See the discussion of reference counters in the description of     */
-  /*    @FT_Reference_Library.                                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_New_Library( FT_Memory    memory,
-                  FT_Library  *alibrary );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Done_Library                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Discard a given library object.  This closes all drivers and       */
-  /*    discards all resource objects.                                     */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A handle to the target library.                         */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    See the discussion of reference counters in the description of     */
-  /*    @FT_Reference_Library.                                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Done_Library( FT_Library  library );
-
-  /* */
-
-  typedef void
-  (*FT_DebugHook_Func)( void*  arg );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_Debug_Hook                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Set a debug hook function for debugging the interpreter of a font  */
-  /*    format.                                                            */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library    :: A handle to the library object.                      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    hook_index :: The index of the debug hook.  You should use the     */
-  /*                  values defined in `ftobjs.h', e.g.,                  */
-  /*                  `FT_DEBUG_HOOK_TRUETYPE'.                            */
-  /*                                                                       */
-  /*    debug_hook :: The function used to debug the interpreter.          */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Currently, four debug hook slots are available, but only two (for  */
-  /*    the TrueType and the Type~1 interpreter) are defined.              */
-  /*                                                                       */
-  /*    Since the internal headers of FreeType are no longer installed,    */
-  /*    the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly.      */
-  /*    This is a bug and will be fixed in a forthcoming release.          */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Set_Debug_Hook( FT_Library         library,
-                     FT_UInt            hook_index,
-                     FT_DebugHook_Func  debug_hook );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Add_Default_Modules                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Add the set of default drivers to a given library object.          */
-  /*    This is only useful when you create a library object with          */
-  /*    @FT_New_Library (usually to plug a custom memory manager).         */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library :: A handle to a new library object.                       */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Add_Default_Modules( FT_Library  library );
-
-
-
-  /**************************************************************************
-   *
-   * @section:
-   *   truetype_engine
-   *
-   * @title:
-   *   The TrueType Engine
-   *
-   * @abstract:
-   *   TrueType bytecode support.
-   *
-   * @description:
-   *   This section contains a function used to query the level of TrueType
-   *   bytecode support compiled in this version of the library.
-   *
-   */
-
-
-  /**************************************************************************
-   *
-   *  @enum:
-   *     FT_TrueTypeEngineType
-   *
-   *  @description:
-   *     A list of values describing which kind of TrueType bytecode
-   *     engine is implemented in a given FT_Library instance.  It is used
-   *     by the @FT_Get_TrueType_Engine_Type function.
-   *
-   *  @values:
-   *     FT_TRUETYPE_ENGINE_TYPE_NONE ::
-   *       The library doesn't implement any kind of bytecode interpreter.
-   *
-   *     FT_TRUETYPE_ENGINE_TYPE_UNPATENTED ::
-   *       Deprecated and removed.
-   *
-   *     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
-   *
-   */
-  typedef enum  FT_TrueTypeEngineType_
-  {
-    FT_TRUETYPE_ENGINE_TYPE_NONE = 0,
-    FT_TRUETYPE_ENGINE_TYPE_UNPATENTED,
-    FT_TRUETYPE_ENGINE_TYPE_PATENTED
-
-  } FT_TrueTypeEngineType;
-
-
-  /**************************************************************************
-   *
-   *  @func:
-   *     FT_Get_TrueType_Engine_Type
-   *
-   *  @description:
-   *     Return an @FT_TrueTypeEngineType value to indicate which level of
-   *     the TrueType virtual machine a given library instance supports.
-   *
-   *  @input:
-   *     library ::
-   *       A library instance.
-   *
-   *  @return:
-   *     A value indicating which level is supported.
-   *
-   *  @since:
-   *     2.2
-   *
-   */
-  FT_EXPORT( FT_TrueTypeEngineType )
-  FT_Get_TrueType_Engine_Type( FT_Library  library );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTMODAPI_H_ */
-
-
-/* END */

+ 0 - 194
freetype/include/freetype/ftmoderr.h

@@ -1,194 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftmoderr.h                                                             */
-/*                                                                         */
-/*    FreeType module error offsets (specification).                       */
-/*                                                                         */
-/*  Copyright 2001-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* This file is used to define the FreeType module error codes.          */
-  /*                                                                       */
-  /* 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.               */
-  /*                                                                       */
-  /*                                                                       */
-  /* It can also be used to create a module error message table easily     */
-  /* with something like                                                   */
-  /*                                                                       */
-  /*   {                                                                   */
-  /*     #undef FTMODERR_H_                                                */
-  /*     #define FT_MODERRDEF( e, v, s )  { FT_Mod_Err_ ## e, s },         */
-  /*     #define FT_MODERR_START_LIST     {                                */
-  /*     #define FT_MODERR_END_LIST       { 0, 0 } };                      */
-  /*                                                                       */
-  /*     const struct                                                      */
-  /*     {                                                                 */
-  /*       int          mod_err_offset;                                    */
-  /*       const char*  mod_err_msg                                        */
-  /*     } ft_mod_errors[] =                                               */
-  /*                                                                       */
-  /*     #include FT_MODULE_ERRORS_H                                       */
-  /*   }                                                                   */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-#ifndef FTMODERR_H_
-#define FTMODERR_H_
-
-
-  /*******************************************************************/
-  /*******************************************************************/
-  /*****                                                         *****/
-  /*****                       SETUP MACROS                      *****/
-  /*****                                                         *****/
-  /*******************************************************************/
-  /*******************************************************************/
-
-
-#undef  FT_NEED_EXTERN_C
-
-#ifndef FT_MODERRDEF
-
-#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
-#define FT_MODERRDEF( e, v, s )  FT_Mod_Err_ ## e = v,
-#else
-#define FT_MODERRDEF( e, v, s )  FT_Mod_Err_ ## e = 0,
-#endif
-
-#define FT_MODERR_START_LIST  enum {
-#define FT_MODERR_END_LIST    FT_Mod_Err_Max };
-
-#ifdef __cplusplus
-#define FT_NEED_EXTERN_C
-  extern "C" {
-#endif
-
-#endif /* !FT_MODERRDEF */
-
-
-  /*******************************************************************/
-  /*******************************************************************/
-  /*****                                                         *****/
-  /*****               LIST MODULE ERROR BASES                   *****/
-  /*****                                                         *****/
-  /*******************************************************************/
-  /*******************************************************************/
-
-
-#ifdef FT_MODERR_START_LIST
-  FT_MODERR_START_LIST
-#endif
-
-
-  FT_MODERRDEF( Base,      0x000, "base module" )
-  FT_MODERRDEF( Autofit,   0x100, "autofitter module" )
-  FT_MODERRDEF( BDF,       0x200, "BDF 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
-  FT_MODERR_END_LIST
-#endif
-
-
-  /*******************************************************************/
-  /*******************************************************************/
-  /*****                                                         *****/
-  /*****                      CLEANUP                            *****/
-  /*****                                                         *****/
-  /*******************************************************************/
-  /*******************************************************************/
-
-
-#ifdef FT_NEED_EXTERN_C
-  }
-#endif
-
-#undef FT_MODERR_START_LIST
-#undef FT_MODERR_END_LIST
-#undef FT_MODERRDEF
-#undef FT_NEED_EXTERN_C
-
-
-#endif /* FTMODERR_H_ */
-
-
-/* END */

+ 0 - 204
freetype/include/freetype/ftotval.h

@@ -1,204 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftotval.h                                                              */
-/*                                                                         */
-/*    FreeType API for validating OpenType tables (specification).         */
-/*                                                                         */
-/*  Copyright 2004-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-/***************************************************************************/
-/*                                                                         */
-/*                                                                         */
-/* Warning: This module might be moved to a different library in the       */
-/*          future to avoid a tight dependency between FreeType and the    */
-/*          OpenType specification.                                        */
-/*                                                                         */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTOTVAL_H_
-#define FTOTVAL_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>                                                             */
-  /*    ot_validation                                                      */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    OpenType Validation                                                */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    An API to validate OpenType tables.                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains the declaration of functions to validate     */
-  /*    some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).         */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    FT_OpenType_Validate                                               */
-  /*    FT_OpenType_Free                                                   */
-  /*                                                                       */
-  /*    FT_VALIDATE_OTXXX                                                  */
-  /*                                                                       */
-  /*************************************************************************/
-
-
- /**********************************************************************
-  *
-  * @enum:
-  *    FT_VALIDATE_OTXXX
-  *
-  * @description:
-  *    A list of bit-field constants used with @FT_OpenType_Validate to
-  *    indicate which OpenType tables should be validated.
-  *
-  * @values:
-  *    FT_VALIDATE_BASE ::
-  *      Validate BASE table.
-  *
-  *    FT_VALIDATE_GDEF ::
-  *      Validate GDEF table.
-  *
-  *    FT_VALIDATE_GPOS ::
-  *      Validate GPOS table.
-  *
-  *    FT_VALIDATE_GSUB ::
-  *      Validate GSUB table.
-  *
-  *    FT_VALIDATE_JSTF ::
-  *      Validate JSTF table.
-  *
-  *    FT_VALIDATE_MATH ::
-  *      Validate MATH table.
-  *
-  *    FT_VALIDATE_OT ::
-  *      Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
-  *
-  */
-#define FT_VALIDATE_BASE  0x0100
-#define FT_VALIDATE_GDEF  0x0200
-#define FT_VALIDATE_GPOS  0x0400
-#define FT_VALIDATE_GSUB  0x0800
-#define FT_VALIDATE_JSTF  0x1000
-#define FT_VALIDATE_MATH  0x2000
-
-#define FT_VALIDATE_OT  ( FT_VALIDATE_BASE | \
-                          FT_VALIDATE_GDEF | \
-                          FT_VALIDATE_GPOS | \
-                          FT_VALIDATE_GSUB | \
-                          FT_VALIDATE_JSTF | \
-                          FT_VALIDATE_MATH )
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_OpenType_Validate
-  *
-  * @description:
-  *    Validate various OpenType tables to assure that all offsets and
-  *    indices are valid.  The idea is that a higher-level library that
-  *    actually does the text layout can access those tables without
-  *    error checking (which can be quite time consuming).
-  *
-  * @input:
-  *    face ::
-  *       A handle to the input face.
-  *
-  *    validation_flags ::
-  *       A bit field that specifies the tables to be validated.  See
-  *       @FT_VALIDATE_OTXXX for possible values.
-  *
-  * @output:
-  *    BASE_table ::
-  *       A pointer to the BASE table.
-  *
-  *    GDEF_table ::
-  *       A pointer to the GDEF table.
-  *
-  *    GPOS_table ::
-  *       A pointer to the GPOS table.
-  *
-  *    GSUB_table ::
-  *       A pointer to the GSUB table.
-  *
-  *    JSTF_table ::
-  *       A pointer to the JSTF table.
-  *
-  * @return:
-  *   FreeType error code.  0~means success.
-  *
-  * @note:
-  *   This function only works with OpenType fonts, returning an error
-  *   otherwise.
-  *
-  *   After use, the application should deallocate the five tables with
-  *   @FT_OpenType_Free.  A NULL value indicates that the table either
-  *   doesn't exist in the font, or the application hasn't asked for
-  *   validation.
-  */
-  FT_EXPORT( FT_Error )
-  FT_OpenType_Validate( FT_Face    face,
-                        FT_UInt    validation_flags,
-                        FT_Bytes  *BASE_table,
-                        FT_Bytes  *GDEF_table,
-                        FT_Bytes  *GPOS_table,
-                        FT_Bytes  *GSUB_table,
-                        FT_Bytes  *JSTF_table );
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_OpenType_Free
-  *
-  * @description:
-  *    Free the buffer allocated by OpenType validator.
-  *
-  * @input:
-  *    face ::
-  *       A handle to the input face.
-  *
-  *    table ::
-  *       The pointer to the buffer that is allocated by
-  *       @FT_OpenType_Validate.
-  *
-  * @note:
-  *   This function must be used to free the buffer allocated by
-  *   @FT_OpenType_Validate only.
-  */
-  FT_EXPORT( void )
-  FT_OpenType_Free( FT_Face   face,
-                    FT_Bytes  table );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTOTVAL_H_ */
-
-
-/* END */

+ 0 - 582
freetype/include/freetype/ftoutln.h

@@ -1,582 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftoutln.h                                                              */
-/*                                                                         */
-/*    Support for the FT_Outline type used to store glyph shapes of        */
-/*    most scalable font formats (specification).                          */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTOUTLN_H_
-#define FTOUTLN_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>                                                             */
-  /*    outline_processing                                                 */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Outline Processing                                                 */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Functions to create, transform, and render vectorial glyph images. */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains routines used to create and destroy scalable */
-  /*    glyph images known as `outlines'.  These can also be measured,     */
-  /*    transformed, and converted into bitmaps and pixmaps.               */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    FT_Outline                                                         */
-  /*    FT_Outline_New                                                     */
-  /*    FT_Outline_Done                                                    */
-  /*    FT_Outline_Copy                                                    */
-  /*    FT_Outline_Translate                                               */
-  /*    FT_Outline_Transform                                               */
-  /*    FT_Outline_Embolden                                                */
-  /*    FT_Outline_EmboldenXY                                              */
-  /*    FT_Outline_Reverse                                                 */
-  /*    FT_Outline_Check                                                   */
-  /*                                                                       */
-  /*    FT_Outline_Get_CBox                                                */
-  /*    FT_Outline_Get_BBox                                                */
-  /*                                                                       */
-  /*    FT_Outline_Get_Bitmap                                              */
-  /*    FT_Outline_Render                                                  */
-  /*    FT_Outline_Decompose                                               */
-  /*    FT_Outline_Funcs                                                   */
-  /*    FT_Outline_MoveToFunc                                              */
-  /*    FT_Outline_LineToFunc                                              */
-  /*    FT_Outline_ConicToFunc                                             */
-  /*    FT_Outline_CubicToFunc                                             */
-  /*                                                                       */
-  /*    FT_Orientation                                                     */
-  /*    FT_Outline_Get_Orientation                                         */
-  /*                                                                       */
-  /*    FT_OUTLINE_XXX                                                     */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Decompose                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Walk over an outline's structure to decompose it into individual   */
-  /*    segments and Bezier arcs.  This function also emits `move to'      */
-  /*    operations to indicate the start of new contours in the outline.   */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    outline        :: A pointer to the source target.                  */
-  /*                                                                       */
-  /*    func_interface :: A table of `emitters', i.e., function pointers   */
-  /*                      called during decomposition to indicate path     */
-  /*                      operations.                                      */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    user           :: A typeless pointer that is passed to each        */
-  /*                      emitter during the decomposition.  It can be     */
-  /*                      used to store the state during the               */
-  /*                      decomposition.                                   */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    A contour that contains a single point only is represented by a    */
-  /*    `move to' operation followed by `line to' to the same point.  In   */
-  /*    most cases, it is best to filter this out before using the         */
-  /*    outline for stroking purposes (otherwise it would result in a      */
-  /*    visible dot when round caps are used).                             */
-  /*                                                                       */
-  /*    Similarly, the function returns success for an empty outline also  */
-  /*    (doing nothing, this is, not calling any emitter); if necessary,   */
-  /*    you should filter this out, too.                                   */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Outline_Decompose( FT_Outline*              outline,
-                        const FT_Outline_Funcs*  func_interface,
-                        void*                    user );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_New                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Create a new outline of a given size.                              */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library     :: A handle to the library object from where the       */
-  /*                   outline is allocated.  Note however that the new    */
-  /*                   outline will *not* necessarily be *freed*, when     */
-  /*                   destroying the library, by @FT_Done_FreeType.       */
-  /*                                                                       */
-  /*    numPoints   :: The maximum number of points within the outline.    */
-  /*                   Must be smaller than or equal to 0xFFFF (65535).    */
-  /*                                                                       */
-  /*    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.                        */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The reason why this function takes a `library' parameter is simply */
-  /*    to use the library's memory allocator.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Outline_New( FT_Library   library,
-                  FT_UInt      numPoints,
-                  FT_Int       numContours,
-                  FT_Outline  *anoutline );
-
-
-  FT_EXPORT( FT_Error )
-  FT_Outline_New_Internal( FT_Memory    memory,
-                           FT_UInt      numPoints,
-                           FT_Int       numContours,
-                           FT_Outline  *anoutline );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Done                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Destroy an outline created with @FT_Outline_New.                   */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A handle of the library object used to allocate the     */
-  /*               outline.                                                */
-  /*                                                                       */
-  /*    outline :: A pointer to the outline object to be discarded.        */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    If the outline's `owner' field is not set, only the outline        */
-  /*    descriptor will be released.                                       */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Outline_Done( FT_Library   library,
-                   FT_Outline*  outline );
-
-
-  FT_EXPORT( FT_Error )
-  FT_Outline_Done_Internal( FT_Memory    memory,
-                            FT_Outline*  outline );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Check                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Check the contents of an outline descriptor.                       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    outline :: A handle to a source outline.                           */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    An empty outline, or an outline with a single point only is also   */
-  /*    valid.                                                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Outline_Check( FT_Outline*  outline );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Get_CBox                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return an outline's `control box'.  The control box encloses all   */
-  /*    the outline's points, including Bezier control points.  Though it  */
-  /*    coincides with the exact bounding box for most glyphs, it can be   */
-  /*    slightly larger in some situations (like when rotating an outline  */
-  /*    that contains Bezier outside arcs).                                */
-  /*                                                                       */
-  /*    Computing the control box is very fast, while getting the bounding */
-  /*    box can take much more time as it needs to walk over all segments  */
-  /*    and arcs in the outline.  To get the latter, you can use the       */
-  /*    `ftbbox' component, which is dedicated to this single task.        */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    outline :: A pointer to the source outline descriptor.             */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    acbox   :: The outline's control box.                              */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    See @FT_Glyph_Get_CBox for a discussion of tricky fonts.           */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Outline_Get_CBox( const FT_Outline*  outline,
-                       FT_BBox           *acbox );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Translate                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Apply a simple translation to the points of an outline.            */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    outline :: A pointer to the target outline descriptor.             */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    xOffset :: The horizontal offset.                                  */
-  /*                                                                       */
-  /*    yOffset :: The vertical offset.                                    */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Outline_Translate( const FT_Outline*  outline,
-                        FT_Pos             xOffset,
-                        FT_Pos             yOffset );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Copy                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Copy an outline into another one.  Both objects must have the      */
-  /*    same sizes (number of points & number of contours) when this       */
-  /*    function is called.                                                */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    source :: A handle to the source outline.                          */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    target :: A handle to the target outline.                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Outline_Copy( const FT_Outline*  source,
-                   FT_Outline        *target );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Transform                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Apply a simple 2x2 matrix to all of an outline's points.  Useful   */
-  /*    for applying rotations, slanting, flipping, etc.                   */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    outline :: A pointer to the target outline descriptor.             */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    matrix  :: A pointer to the transformation matrix.                 */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    You can use @FT_Outline_Translate if you need to translate the     */
-  /*    outline's points.                                                  */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Outline_Transform( const FT_Outline*  outline,
-                        const FT_Matrix*   matrix );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Embolden                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Embolden an outline.  The new outline will be at most 4~times      */
-  /*    `strength' pixels wider and higher.  You may think of the left and */
-  /*    bottom borders as unchanged.                                       */
-  /*                                                                       */
-  /*    Negative `strength' values to reduce the outline thickness are     */
-  /*    possible also.                                                     */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    outline  :: A handle to the target outline.                        */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    strength :: How strong the glyph is emboldened.  Expressed in      */
-  /*                26.6 pixel format.                                     */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The used algorithm to increase or decrease the thickness of the    */
-  /*    glyph doesn't change the number of points; this means that certain */
-  /*    situations like acute angles or intersections are sometimes        */
-  /*    handled incorrectly.                                               */
-  /*                                                                       */
-  /*    If you need `better' metrics values you should call                */
-  /*    @FT_Outline_Get_CBox or @FT_Outline_Get_BBox.                      */
-  /*                                                                       */
-  /*    Example call:                                                      */
-  /*                                                                       */
-  /*    {                                                                  */
-  /*      FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );                   */
-  /*      if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )            */
-  /*        FT_Outline_Embolden( &face->glyph->outline, strength );        */
-  /*    }                                                                  */
-  /*                                                                       */
-  /*    To get meaningful results, font scaling values must be set with    */
-  /*    functions like @FT_Set_Char_Size before calling FT_Render_Glyph.   */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Outline_Embolden( FT_Outline*  outline,
-                       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.                                                        */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.4.10                                                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Outline_EmboldenXY( FT_Outline*  outline,
-                         FT_Pos       xstrength,
-                         FT_Pos       ystrength );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Reverse                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Reverse the drawing direction of an outline.  This is used to      */
-  /*    ensure consistent fill conventions for mirrored glyphs.            */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    outline :: A pointer to the target outline descriptor.             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in     */
-  /*    the outline's `flags' field.                                       */
-  /*                                                                       */
-  /*    It shouldn't be used by a normal client application, unless it     */
-  /*    knows what it is doing.                                            */
-  /*                                                                       */
-  FT_EXPORT( void )
-  FT_Outline_Reverse( FT_Outline*  outline );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Get_Bitmap                                              */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Render an outline within a bitmap.  The outline's image is simply  */
-  /*    OR-ed to the target bitmap.                                        */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A handle to a FreeType library object.                  */
-  /*                                                                       */
-  /*    outline :: A pointer to the source outline descriptor.             */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    abitmap :: A pointer to the target bitmap descriptor.              */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This function does NOT CREATE the bitmap, it only renders an       */
-  /*    outline image within the one you pass to it!  Consequently, the    */
-  /*    various fields in `abitmap' should be set accordingly.             */
-  /*                                                                       */
-  /*    It will use the raster corresponding to the default glyph format.  */
-  /*                                                                       */
-  /*    The value of the `num_grays' field in `abitmap' is ignored.  If    */
-  /*    you select the gray-level rasterizer, and you want less than 256   */
-  /*    gray levels, you have to use @FT_Outline_Render directly.          */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Outline_Get_Bitmap( FT_Library        library,
-                         FT_Outline*       outline,
-                         const FT_Bitmap  *abitmap );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Outline_Render                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Render an outline within a bitmap using the current scan-convert.  */
-  /*    This function uses an @FT_Raster_Params structure as an argument,  */
-  /*    allowing advanced features like direct composition, translucency,  */
-  /*    etc.                                                               */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A handle to a FreeType library object.                  */
-  /*                                                                       */
-  /*    outline :: A pointer to the source outline descriptor.             */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    params  :: A pointer to an @FT_Raster_Params structure used to     */
-  /*               describe the rendering operation.                       */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    You should know what you are doing and how @FT_Raster_Params works */
-  /*    to use this function.                                              */
-  /*                                                                       */
-  /*    The field `params.source' will be set to `outline' before the scan */
-  /*    converter is called, which means that the value you give to it is  */
-  /*    actually ignored.                                                  */
-  /*                                                                       */
-  /*    The gray-level rasterizer always uses 256 gray levels.  If you     */
-  /*    want less gray levels, you have to provide your own span callback. */
-  /*    See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the   */
-  /*    @FT_Raster_Params structure for more details.                      */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Outline_Render( FT_Library         library,
-                     FT_Outline*        outline,
-                     FT_Raster_Params*  params );
-
-
- /**************************************************************************
-  *
-  * @enum:
-  *   FT_Orientation
-  *
-  * @description:
-  *   A list of values used to describe an outline's contour orientation.
-  *
-  *   The TrueType and PostScript specifications use different conventions
-  *   to determine whether outline contours should be filled or unfilled.
-  *
-  * @values:
-  *   FT_ORIENTATION_TRUETYPE ::
-  *     According to the TrueType specification, clockwise contours must
-  *     be filled, and counter-clockwise ones must be unfilled.
-  *
-  *   FT_ORIENTATION_POSTSCRIPT ::
-  *     According to the PostScript specification, counter-clockwise contours
-  *     must be filled, and clockwise ones must be unfilled.
-  *
-  *   FT_ORIENTATION_FILL_RIGHT ::
-  *     This is identical to @FT_ORIENTATION_TRUETYPE, but is used to
-  *     remember that in TrueType, everything that is to the right of
-  *     the drawing direction of a contour must be filled.
-  *
-  *   FT_ORIENTATION_FILL_LEFT ::
-  *     This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to
-  *     remember that in PostScript, everything that is to the left of
-  *     the drawing direction of a contour must be filled.
-  *
-  *   FT_ORIENTATION_NONE ::
-  *     The orientation cannot be determined.  That is, different parts of
-  *     the glyph have different orientation.
-  *
-  */
-  typedef enum  FT_Orientation_
-  {
-    FT_ORIENTATION_TRUETYPE   = 0,
-    FT_ORIENTATION_POSTSCRIPT = 1,
-    FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE,
-    FT_ORIENTATION_FILL_LEFT  = FT_ORIENTATION_POSTSCRIPT,
-    FT_ORIENTATION_NONE
-
-  } FT_Orientation;
-
-
- /**************************************************************************
-  *
-  * @function:
-  *   FT_Outline_Get_Orientation
-  *
-  * @description:
-  *   This function analyzes a glyph outline and tries to compute its
-  *   fill orientation (see @FT_Orientation).  This is done by integrating
-  *   the total area covered by the outline. The positive integral
-  *   corresponds to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT
-  *   is returned. The negative integral corresponds to the counter-clockwise
-  *   orientation and @FT_ORIENTATION_TRUETYPE is returned.
-  *
-  *   Note that this will return @FT_ORIENTATION_TRUETYPE for empty
-  *   outlines.
-  *
-  * @input:
-  *   outline ::
-  *     A handle to the source outline.
-  *
-  * @return:
-  *   The orientation.
-  *
-  */
-  FT_EXPORT( FT_Orientation )
-  FT_Outline_Get_Orientation( FT_Outline*  outline );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTOUTLN_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8    */
-/* End:             */

+ 0 - 205
freetype/include/freetype/ftparams.h

@@ -1,205 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftparams.h                                                             */
-/*                                                                         */
-/*    FreeType API for possible FT_Parameter tags (specification only).    */
-/*                                                                         */
-/*  Copyright 2017-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTPARAMS_H_
-#define FTPARAMS_H_
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
-  /**************************************************************************
-   *
-   * @section:
-   *   parameter_tags
-   *
-   * @title:
-   *   Parameter Tags
-   *
-   * @abstract:
-   *   Macros for driver property and font loading parameter tags.
-   *
-   * @description:
-   *   This section contains macros for the @FT_Parameter structure that are
-   *   used with various functions to activate some special functionality or
-   *   different behaviour of various components of FreeType.
-   *
-   */
-
-
-  /***************************************************************************
-   *
-   * @constant:
-   *   FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
-   *
-   * @description:
-   *   A tag for @FT_Parameter to make @FT_Open_Face ignore typographic
-   *   family names in the `name' table (introduced in OpenType version
-   *   1.4).  Use this for backward compatibility with legacy systems that
-   *   have a four-faces-per-family restriction.
-   *
-   * @since:
-   *   2.8
-   *
-   */
-#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY \
-          FT_MAKE_TAG( 'i', 'g', 'p', 'f' )
-
-
-  /* this constant is deprecated */
-#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY \
-          FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
-
-
-  /***************************************************************************
-   *
-   * @constant:
-   *   FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
-   *
-   * @description:
-   *   A tag for @FT_Parameter to make @FT_Open_Face ignore typographic
-   *   subfamily names in the `name' table (introduced in OpenType version
-   *   1.4).  Use this for backward compatibility with legacy systems that
-   *   have a four-faces-per-family restriction.
-   *
-   * @since:
-   *   2.8
-   *
-   */
-#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY \
-          FT_MAKE_TAG( 'i', 'g', 'p', 's' )
-
-
-  /* this constant is deprecated */
-#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY \
-          FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
-
-
-  /***************************************************************************
-   *
-   * @constant:
-   *   FT_PARAM_TAG_INCREMENTAL
-   *
-   * @description:
-   *   An @FT_Parameter tag to be used with @FT_Open_Face to indicate
-   *   incremental glyph loading.
-   *
-   */
-#define FT_PARAM_TAG_INCREMENTAL \
-          FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
-
-
-  /**************************************************************************
-   *
-   * @constant:
-   *   FT_PARAM_TAG_LCD_FILTER_WEIGHTS
-   *
-   * @description:
-   *   An @FT_Parameter tag to be used with @FT_Face_Properties.  The
-   *   corresponding argument specifies the five LCD filter weights for a
-   *   given face (if using @FT_LOAD_TARGET_LCD, for example), overriding
-   *   the global default values or the values set up with
-   *   @FT_Library_SetLcdFilterWeights.
-   *
-   * @since:
-   *   2.8
-   *
-   */
-#define FT_PARAM_TAG_LCD_FILTER_WEIGHTS \
-          FT_MAKE_TAG( 'l', 'c', 'd', 'f' )
-
-
-  /**************************************************************************
-   *
-   * @constant:
-   *   FT_PARAM_TAG_RANDOM_SEED
-   *
-   * @description:
-   *   An @FT_Parameter tag to be used with @FT_Face_Properties.  The
-   *   corresponding 32bit signed integer argument overrides the font
-   *   driver's random seed value with a face-specific one; see
-   *   @random-seed.
-   *
-   * @since:
-   *   2.8
-   *
-   */
-#define FT_PARAM_TAG_RANDOM_SEED \
-          FT_MAKE_TAG( 's', 'e', 'e', 'd' )
-
-
-  /**************************************************************************
-   *
-   * @constant:
-   *   FT_PARAM_TAG_STEM_DARKENING
-   *
-   * @description:
-   *   An @FT_Parameter tag to be used with @FT_Face_Properties.  The
-   *   corresponding Boolean argument specifies whether to apply stem
-   *   darkening, overriding the global default values or the values set up
-   *   with @FT_Property_Set (see @no-stem-darkening).
-   *
-   *   This is a passive setting that only takes effect if the font driver
-   *   or autohinter honors it, which the CFF, Type~1, and CID drivers
-   *   always do, but the autohinter only in `light' hinting mode (as of
-   *   version 2.9).
-   *
-   * @since:
-   *   2.8
-   *
-   */
-#define FT_PARAM_TAG_STEM_DARKENING \
-          FT_MAKE_TAG( 'd', 'a', 'r', 'k' )
-
-
- /***************************************************************************
-  *
-  * @constant:
-  *   FT_PARAM_TAG_UNPATENTED_HINTING
-  *
-  * @description:
-  *   Deprecated, no effect.
-  *
-  *   Previously: A constant used as the tag of an @FT_Parameter structure to
-  *   indicate that unpatented methods only should be used by the TrueType
-  *   bytecode interpreter for a typeface opened by @FT_Open_Face.
-  *
-  */
-#define FT_PARAM_TAG_UNPATENTED_HINTING \
-          FT_MAKE_TAG( 'u', 'n', 'p', 'a' )
-
-
-  /* */
-
-
-FT_END_HEADER
-
-
-#endif /* FTPARAMS_H_ */
-
-
-/* END */

+ 0 - 172
freetype/include/freetype/ftpfr.h

@@ -1,172 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftpfr.h                                                                */
-/*                                                                         */
-/*    FreeType API for accessing PFR-specific data (specification only).   */
-/*                                                                         */
-/*  Copyright 2002-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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 FTPFR_H_
-#define FTPFR_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>                                                             */
-  /*    pfr_fonts                                                          */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    PFR Fonts                                                          */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    PFR/TrueDoc specific API.                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains the declaration of PFR-specific functions.   */
-  /*                                                                       */
-  /*************************************************************************/
-
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_Get_PFR_Metrics
-  *
-  * @description:
-  *    Return the outline and metrics resolutions of a given PFR face.
-  *
-  * @input:
-  *    face :: Handle to the input face.  It can be a non-PFR face.
-  *
-  * @output:
-  *    aoutline_resolution ::
-  *      Outline resolution.  This is equivalent to `face->units_per_EM'
-  *      for non-PFR fonts.  Optional (parameter can be NULL).
-  *
-  *    ametrics_resolution ::
-  *      Metrics resolution.  This is equivalent to `outline_resolution'
-  *      for non-PFR fonts.  Optional (parameter can be NULL).
-  *
-  *    ametrics_x_scale ::
-  *      A 16.16 fixed-point number used to scale distance expressed
-  *      in metrics units to device subpixels.  This is equivalent to
-  *      `face->size->x_scale', but for metrics only.  Optional (parameter
-  *      can be NULL).
-  *
-  *    ametrics_y_scale ::
-  *      Same as `ametrics_x_scale' but for the vertical direction.
-  *      optional (parameter can be NULL).
-  *
-  * @return:
-  *    FreeType error code.  0~means success.
-  *
-  * @note:
-  *   If the input face is not a PFR, this function will return an error.
-  *   However, in all cases, it will return valid values.
-  */
-  FT_EXPORT( FT_Error )
-  FT_Get_PFR_Metrics( FT_Face    face,
-                      FT_UInt   *aoutline_resolution,
-                      FT_UInt   *ametrics_resolution,
-                      FT_Fixed  *ametrics_x_scale,
-                      FT_Fixed  *ametrics_y_scale );
-
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_Get_PFR_Kerning
-  *
-  * @description:
-  *    Return the kerning pair corresponding to two glyphs in a PFR face.
-  *    The distance is expressed in metrics units, unlike the result of
-  *    @FT_Get_Kerning.
-  *
-  * @input:
-  *    face  :: A handle to the input face.
-  *
-  *    left  :: Index of the left glyph.
-  *
-  *    right :: Index of the right glyph.
-  *
-  * @output:
-  *    avector :: A kerning vector.
-  *
-  * @return:
-  *    FreeType error code.  0~means success.
-  *
-  * @note:
-  *    This function always return distances in original PFR metrics
-  *    units.  This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED
-  *    mode, which always returns distances converted to outline units.
-  *
-  *    You can use the value of the `x_scale' and `y_scale' parameters
-  *    returned by @FT_Get_PFR_Metrics to scale these to device subpixels.
-  */
-  FT_EXPORT( FT_Error )
-  FT_Get_PFR_Kerning( FT_Face     face,
-                      FT_UInt     left,
-                      FT_UInt     right,
-                      FT_Vector  *avector );
-
-
- /**********************************************************************
-  *
-  * @function:
-  *    FT_Get_PFR_Advance
-  *
-  * @description:
-  *    Return a given glyph advance, expressed in original metrics units,
-  *    from a PFR font.
-  *
-  * @input:
-  *    face   :: A handle to the input face.
-  *
-  *    gindex :: The glyph index.
-  *
-  * @output:
-  *    aadvance :: The glyph advance in metrics units.
-  *
-  * @return:
-  *    FreeType error code.  0~means success.
-  *
-  * @note:
-  *    You can use the `x_scale' or `y_scale' results of @FT_Get_PFR_Metrics
-  *    to convert the advance to device subpixels (i.e., 1/64th of pixels).
-  */
-  FT_EXPORT( FT_Error )
-  FT_Get_PFR_Advance( FT_Face   face,
-                      FT_UInt   gindex,
-                      FT_Pos   *aadvance );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTPFR_H_ */
-
-
-/* END */

+ 0 - 233
freetype/include/freetype/ftrender.h

@@ -1,233 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftrender.h                                                             */
-/*                                                                         */
-/*    FreeType renderer modules public interface (specification).          */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTRENDER_H_
-#define FTRENDER_H_
-
-
-#include <ft2build.h>
-#include FT_MODULE_H
-#include FT_GLYPH_H
-
-
-FT_BEGIN_HEADER
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    module_management                                                  */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /* create a new glyph object */
-  typedef FT_Error
-  (*FT_Glyph_InitFunc)( FT_Glyph      glyph,
-                        FT_GlyphSlot  slot );
-
-  /* destroys a given glyph object */
-  typedef void
-  (*FT_Glyph_DoneFunc)( FT_Glyph  glyph );
-
-  typedef void
-  (*FT_Glyph_TransformFunc)( FT_Glyph          glyph,
-                             const FT_Matrix*  matrix,
-                             const FT_Vector*  delta );
-
-  typedef void
-  (*FT_Glyph_GetBBoxFunc)( FT_Glyph  glyph,
-                           FT_BBox*  abbox );
-
-  typedef FT_Error
-  (*FT_Glyph_CopyFunc)( FT_Glyph   source,
-                        FT_Glyph   target );
-
-  typedef FT_Error
-  (*FT_Glyph_PrepareFunc)( FT_Glyph      glyph,
-                           FT_GlyphSlot  slot );
-
-/* deprecated */
-#define FT_Glyph_Init_Func       FT_Glyph_InitFunc
-#define FT_Glyph_Done_Func       FT_Glyph_DoneFunc
-#define FT_Glyph_Transform_Func  FT_Glyph_TransformFunc
-#define FT_Glyph_BBox_Func       FT_Glyph_GetBBoxFunc
-#define FT_Glyph_Copy_Func       FT_Glyph_CopyFunc
-#define FT_Glyph_Prepare_Func    FT_Glyph_PrepareFunc
-
-
-  struct  FT_Glyph_Class_
-  {
-    FT_Long                 glyph_size;
-    FT_Glyph_Format         glyph_format;
-
-    FT_Glyph_InitFunc       glyph_init;
-    FT_Glyph_DoneFunc       glyph_done;
-    FT_Glyph_CopyFunc       glyph_copy;
-    FT_Glyph_TransformFunc  glyph_transform;
-    FT_Glyph_GetBBoxFunc    glyph_bbox;
-    FT_Glyph_PrepareFunc    glyph_prepare;
-  };
-
-
-  typedef FT_Error
-  (*FT_Renderer_RenderFunc)( FT_Renderer       renderer,
-                             FT_GlyphSlot      slot,
-                             FT_Render_Mode    mode,
-                             const FT_Vector*  origin );
-
-  typedef FT_Error
-  (*FT_Renderer_TransformFunc)( FT_Renderer       renderer,
-                                FT_GlyphSlot      slot,
-                                const FT_Matrix*  matrix,
-                                const FT_Vector*  delta );
-
-
-  typedef void
-  (*FT_Renderer_GetCBoxFunc)( FT_Renderer   renderer,
-                              FT_GlyphSlot  slot,
-                              FT_BBox*      cbox );
-
-
-  typedef FT_Error
-  (*FT_Renderer_SetModeFunc)( FT_Renderer  renderer,
-                              FT_ULong     mode_tag,
-                              FT_Pointer   mode_ptr );
-
-/* deprecated identifiers */
-#define FTRenderer_render  FT_Renderer_RenderFunc
-#define FTRenderer_transform  FT_Renderer_TransformFunc
-#define FTRenderer_getCBox  FT_Renderer_GetCBoxFunc
-#define FTRenderer_setMode  FT_Renderer_SetModeFunc
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Renderer_Class                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The renderer module class descriptor.                              */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    root            :: The root @FT_Module_Class fields.               */
-  /*                                                                       */
-  /*    glyph_format    :: The glyph image format this renderer handles.   */
-  /*                                                                       */
-  /*    render_glyph    :: A method used to render the image that is in a  */
-  /*                       given glyph slot into a bitmap.                 */
-  /*                                                                       */
-  /*    transform_glyph :: A method used to transform the image that is in */
-  /*                       a given glyph slot.                             */
-  /*                                                                       */
-  /*    get_glyph_cbox  :: A method used to access the glyph's cbox.       */
-  /*                                                                       */
-  /*    set_mode        :: A method used to pass additional parameters.    */
-  /*                                                                       */
-  /*    raster_class    :: For @FT_GLYPH_FORMAT_OUTLINE renderers only.    */
-  /*                       This is a pointer to its raster's class.        */
-  /*                                                                       */
-  typedef struct  FT_Renderer_Class_
-  {
-    FT_Module_Class            root;
-
-    FT_Glyph_Format            glyph_format;
-
-    FT_Renderer_RenderFunc     render_glyph;
-    FT_Renderer_TransformFunc  transform_glyph;
-    FT_Renderer_GetCBoxFunc    get_glyph_cbox;
-    FT_Renderer_SetModeFunc    set_mode;
-
-    FT_Raster_Funcs*           raster_class;
-
-  } FT_Renderer_Class;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Renderer                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve the current renderer for a given glyph format.            */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    library :: A handle to the library object.                         */
-  /*                                                                       */
-  /*    format  :: The glyph format.                                       */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    A renderer handle.  0~if none found.                               */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    An error will be returned if a module already exists by that name, */
-  /*    or if the module requires a version of FreeType that is too great. */
-  /*                                                                       */
-  /*    To add a new renderer, simply use @FT_Add_Module.  To retrieve a   */
-  /*    renderer by its name, use @FT_Get_Module.                          */
-  /*                                                                       */
-  FT_EXPORT( FT_Renderer )
-  FT_Get_Renderer( FT_Library       library,
-                   FT_Glyph_Format  format );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Set_Renderer                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Set the current renderer to use, and set additional mode.          */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    library    :: A handle to the library object.                      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    renderer   :: A handle to the renderer object.                     */
-  /*                                                                       */
-  /*    num_params :: The number of additional parameters.                 */
-  /*                                                                       */
-  /*    parameters :: Additional parameters.                               */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    In case of success, the renderer will be used to convert glyph     */
-  /*    images in the renderer's known format into bitmaps.                */
-  /*                                                                       */
-  /*    This doesn't change the current renderer for other formats.        */
-  /*                                                                       */
-  /*    Currently, no FreeType renderer module uses `parameters'; you      */
-  /*    should thus always pass NULL as the value.                         */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Set_Renderer( FT_Library     library,
-                   FT_Renderer    renderer,
-                   FT_UInt        num_params,
-                   FT_Parameter*  parameters );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTRENDER_H_ */
-
-
-/* END */

+ 0 - 159
freetype/include/freetype/ftsizes.h

@@ -1,159 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftsizes.h                                                              */
-/*                                                                         */
-/*    FreeType size objects management (specification).                    */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Typical application would normally not need to use these functions.   */
-  /* However, they have been placed in a public API for the rare cases     */
-  /* where they are needed.                                                */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-#ifndef FTSIZES_H_
-#define FTSIZES_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>                                                             */
-  /*    sizes_management                                                   */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Size Management                                                    */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Managing multiple sizes per face.                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    When creating a new face object (e.g., with @FT_New_Face), an      */
-  /*    @FT_Size object is automatically created and used to store all     */
-  /*    pixel-size dependent information, available in the `face->size'    */
-  /*    field.                                                             */
-  /*                                                                       */
-  /*    It is however possible to create more sizes for a given face,      */
-  /*    mostly in order to manage several character pixel sizes of the     */
-  /*    same font family and style.  See @FT_New_Size and @FT_Done_Size.   */
-  /*                                                                       */
-  /*    Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only           */
-  /*    modify the contents of the current `active' size; you thus need    */
-  /*    to use @FT_Activate_Size to change it.                             */
-  /*                                                                       */
-  /*    99% of applications won't need the functions provided here,        */
-  /*    especially if they use the caching sub-system, so be cautious      */
-  /*    when using these.                                                  */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_New_Size                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Create a new size object from a given face object.                 */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face :: A handle to a parent face object.                          */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    asize :: A handle to a new size object.                            */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    You need to call @FT_Activate_Size in order to select the new size */
-  /*    for upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size,      */
-  /*    @FT_Load_Glyph, @FT_Load_Char, etc.                                */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_New_Size( FT_Face   face,
-               FT_Size*  size );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Done_Size                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Discard a given size object.  Note that @FT_Done_Face              */
-  /*    automatically discards all size objects allocated with             */
-  /*    @FT_New_Size.                                                      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    size :: A handle to a target size object.                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Done_Size( FT_Size  size );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Activate_Size                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Even though it is possible to create several size objects for a    */
-  /*    given face (see @FT_New_Size for details), functions like          */
-  /*    @FT_Load_Glyph or @FT_Load_Char only use the one that has been     */
-  /*    activated last to determine the `current character pixel size'.    */
-  /*                                                                       */
-  /*    This function can be used to `activate' a previously created size  */
-  /*    object.                                                            */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    size :: A handle to a target size object.                          */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    If `face' is the size's parent face object, this function changes  */
-  /*    the value of `face->size' to the input size handle.                */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Activate_Size( FT_Size  size );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTSIZES_H_ */
-
-
-/* END */

+ 0 - 253
freetype/include/freetype/ftsnames.h

@@ -1,253 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftsnames.h                                                             */
-/*                                                                         */
-/*    Simple interface to access SFNT `name' tables (which are used        */
-/*    to hold font names, copyright info, notices, etc.) (specification).  */
-/*                                                                         */
-/*    This is _not_ used to retrieve glyph names!                          */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTSNAMES_H_
-#define FTSNAMES_H_
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_PARAMETER_TAGS_H
-
-#ifdef FREETYPE_H
-#error "freetype.h of FreeType 1 has been loaded!"
-#error "Please fix the directory search order for header files"
-#error "so that freetype.h of FreeType 2 is found first."
-#endif
-
-
-FT_BEGIN_HEADER
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    sfnt_names                                                         */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    SFNT Names                                                         */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Access the names embedded in TrueType and OpenType files.          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The TrueType and OpenType specifications allow the inclusion of    */
-  /*    a special names table (`name') in font files.  This table contains */
-  /*    textual (and internationalized) information regarding the font,    */
-  /*    like family name, copyright, version, etc.                         */
-  /*                                                                       */
-  /*    The definitions below are used to access them if available.        */
-  /*                                                                       */
-  /*    Note that this has nothing to do with glyph names!                 */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_SfntName                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to model an SFNT `name' table entry.              */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    platform_id :: The platform ID for `string'.                       */
-  /*                   See @TT_PLATFORM_XXX for possible values.           */
-  /*                                                                       */
-  /*    encoding_id :: The encoding ID for `string'.                       */
-  /*                   See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX,               */
-  /*                   @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX */
-  /*                   for possible values.                                */
-  /*                                                                       */
-  /*    language_id :: The language ID for `string'.                       */
-  /*                   See @TT_MAC_LANGID_XXX and @TT_MS_LANGID_XXX for    */
-  /*                   possible values.                                    */
-  /*                                                                       */
-  /*                   Registered OpenType values for `language_id' are    */
-  /*                   always smaller than 0x8000; values equal or larger  */
-  /*                   than 0x8000 usually indicate a language tag string  */
-  /*                   (introduced in OpenType version 1.6).  Use function */
-  /*                   @FT_Get_Sfnt_LangTag with `language_id' as its      */
-  /*                   argument to retrieve the associated language tag.   */
-  /*                                                                       */
-  /*    name_id     :: An identifier for `string'.                         */
-  /*                   See @TT_NAME_ID_XXX for possible values.            */
-  /*                                                                       */
-  /*    string      :: The `name' string.  Note that its format differs    */
-  /*                   depending on the (platform,encoding) pair, being    */
-  /*                   either a string of bytes (without a terminating     */
-  /*                   NULL byte) or containing UTF-16BE entities.         */
-  /*                                                                       */
-  /*    string_len  :: The length of `string' in bytes.                    */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Please refer to the TrueType or OpenType specification for more    */
-  /*    details.                                                           */
-  /*                                                                       */
-  typedef struct  FT_SfntName_
-  {
-    FT_UShort  platform_id;
-    FT_UShort  encoding_id;
-    FT_UShort  language_id;
-    FT_UShort  name_id;
-
-    FT_Byte*   string;      /* this string is *not* null-terminated! */
-    FT_UInt    string_len;  /* in bytes                              */
-
-  } FT_SfntName;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Sfnt_Name_Count                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve the number of name strings in the SFNT `name' table.      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face :: A handle to the source face.                               */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The number of strings in the `name' table.                         */
-  /*                                                                       */
-  FT_EXPORT( FT_UInt )
-  FT_Get_Sfnt_Name_Count( FT_Face  face );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Sfnt_Name                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve a string of the SFNT `name' table for a given index.      */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face  :: A handle to the source face.                              */
-  /*                                                                       */
-  /*    idx   :: The index of the `name' string.                           */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    aname :: The indexed @FT_SfntName structure.                       */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The `string' array returned in the `aname' structure is not        */
-  /*    null-terminated.  Note that you don't have to deallocate `string'  */
-  /*    by yourself; FreeType takes care of it if you call @FT_Done_Face.  */
-  /*                                                                       */
-  /*    Use @FT_Get_Sfnt_Name_Count to get the total number of available   */
-  /*    `name' table entries, then do a loop until you get the right       */
-  /*    platform, encoding, and name ID.                                   */
-  /*                                                                       */
-  /*    `name' table format~1 entries can use language tags also, see      */
-  /*    @FT_Get_Sfnt_LangTag.                                              */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Sfnt_Name( FT_Face       face,
-                    FT_UInt       idx,
-                    FT_SfntName  *aname );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_SfntLangTag                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model a language tag entry from an SFNT `name'      */
-  /*    table.                                                             */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    string      :: The language tag string, encoded in UTF-16BE        */
-  /*                   (without trailing NULL bytes).                      */
-  /*                                                                       */
-  /*    string_len  :: The length of `string' in *bytes*.                  */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    Please refer to the TrueType or OpenType specification for more    */
-  /*    details.                                                           */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.8                                                                */
-  /*                                                                       */
-  typedef struct  FT_SfntLangTag_
-  {
-    FT_Byte*  string;      /* this string is *not* null-terminated! */
-    FT_UInt   string_len;  /* in bytes                              */
-
-  } FT_SfntLangTag;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Sfnt_LangTag                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Retrieve the language tag associated with a language ID of an SFNT */
-  /*    `name' table entry.                                                */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face     :: A handle to the source face.                           */
-  /*                                                                       */
-  /*    langID   :: The language ID, as returned by @FT_Get_Sfnt_Name.     */
-  /*                This is always a value larger than 0x8000.             */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    alangTag :: The language tag associated with the `name' table      */
-  /*                entry's language ID.                                   */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0~means success.                             */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The `string' array returned in the `alangTag' structure is not     */
-  /*    null-terminated.  Note that you don't have to deallocate `string'  */
-  /*    by yourself; FreeType takes care of it if you call @FT_Done_Face.  */
-  /*                                                                       */
-  /*    Only `name' table format~1 supports language tags.  For format~0   */
-  /*    tables, this function always returns FT_Err_Invalid_Table.  For    */
-  /*    invalid format~1 language ID values, FT_Err_Invalid_Argument is    */
-  /*    returned.                                                          */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.8                                                                */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Get_Sfnt_LangTag( FT_Face          face,
-                       FT_UInt          langID,
-                       FT_SfntLangTag  *alangTag );
-
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTSNAMES_H_ */
-
-
-/* END */

+ 0 - 785
freetype/include/freetype/ftstroke.h

@@ -1,785 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftstroke.h                                                             */
-/*                                                                         */
-/*    FreeType path stroker (specification).                               */
-/*                                                                         */
-/*  Copyright 2002-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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 FTSTROKE_H_
-#define FTSTROKE_H_
-
-#include <ft2build.h>
-#include FT_OUTLINE_H
-#include FT_GLYPH_H
-
-
-FT_BEGIN_HEADER
-
-
- /************************************************************************
-  *
-  * @section:
-  *    glyph_stroker
-  *
-  * @title:
-  *    Glyph Stroker
-  *
-  * @abstract:
-  *    Generating bordered and stroked glyphs.
-  *
-  * @description:
-  *    This component generates stroked outlines of a given vectorial
-  *    glyph.  It also allows you to retrieve the `outside' and/or the
-  *    `inside' borders of the stroke.
-  *
-  *    This can be useful to generate `bordered' glyph, i.e., glyphs
-  *    displayed with a coloured (and anti-aliased) border around their
-  *    shape.
-  *
-  * @order:
-  *    FT_Stroker
-  *
-  *    FT_Stroker_LineJoin
-  *    FT_Stroker_LineCap
-  *    FT_StrokerBorder
-  *
-  *    FT_Outline_GetInsideBorder
-  *    FT_Outline_GetOutsideBorder
-  *
-  *    FT_Glyph_Stroke
-  *    FT_Glyph_StrokeBorder
-  *
-  *    FT_Stroker_New
-  *    FT_Stroker_Set
-  *    FT_Stroker_Rewind
-  *    FT_Stroker_ParseOutline
-  *    FT_Stroker_Done
-  *
-  *    FT_Stroker_BeginSubPath
-  *    FT_Stroker_EndSubPath
-  *
-  *    FT_Stroker_LineTo
-  *    FT_Stroker_ConicTo
-  *    FT_Stroker_CubicTo
-  *
-  *    FT_Stroker_GetBorderCounts
-  *    FT_Stroker_ExportBorder
-  *    FT_Stroker_GetCounts
-  *    FT_Stroker_Export
-  *
-  */
-
-
- /**************************************************************
-  *
-  * @type:
-  *   FT_Stroker
-  *
-  * @description:
-  *   Opaque handle to a path stroker object.
-  */
-  typedef struct FT_StrokerRec_*  FT_Stroker;
-
-
-  /**************************************************************
-   *
-   * @enum:
-   *   FT_Stroker_LineJoin
-   *
-   * @description:
-   *   These values determine how two joining lines are rendered
-   *   in a stroker.
-   *
-   * @values:
-   *   FT_STROKER_LINEJOIN_ROUND ::
-   *     Used to render rounded line joins.  Circular arcs are used
-   *     to join two lines smoothly.
-   *
-   *   FT_STROKER_LINEJOIN_BEVEL ::
-   *     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 ::
-   *     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
-   *     backward compatibility.
-   */
-  typedef enum  FT_Stroker_LineJoin_
-  {
-    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;
-
-
-  /**************************************************************
-   *
-   * @enum:
-   *   FT_Stroker_LineCap
-   *
-   * @description:
-   *   These values determine how the end of opened sub-paths are
-   *   rendered in a stroke.
-   *
-   * @values:
-   *   FT_STROKER_LINECAP_BUTT ::
-   *     The end of lines is rendered as a full stop on the last
-   *     point itself.
-   *
-   *   FT_STROKER_LINECAP_ROUND ::
-   *     The end of lines is rendered as a half-circle around the
-   *     last point.
-   *
-   *   FT_STROKER_LINECAP_SQUARE ::
-   *     The end of lines is rendered as a square around the
-   *     last point.
-   */
-  typedef enum  FT_Stroker_LineCap_
-  {
-    FT_STROKER_LINECAP_BUTT = 0,
-    FT_STROKER_LINECAP_ROUND,
-    FT_STROKER_LINECAP_SQUARE
-
-  } FT_Stroker_LineCap;
-
-
-  /**************************************************************
-   *
-   * @enum:
-   *   FT_StrokerBorder
-   *
-   * @description:
-   *   These values are used to select a given stroke border
-   *   in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder.
-   *
-   * @values:
-   *   FT_STROKER_BORDER_LEFT ::
-   *     Select the left border, relative to the drawing direction.
-   *
-   *   FT_STROKER_BORDER_RIGHT ::
-   *     Select the right border, relative to the drawing direction.
-   *
-   * @note:
-   *   Applications are generally interested in the `inside' and `outside'
-   *   borders.  However, there is no direct mapping between these and the
-   *   `left' and `right' ones, since this really depends on the glyph's
-   *   drawing orientation, which varies between font formats.
-   *
-   *   You can however use @FT_Outline_GetInsideBorder and
-   *   @FT_Outline_GetOutsideBorder to get these.
-   */
-  typedef enum  FT_StrokerBorder_
-  {
-    FT_STROKER_BORDER_LEFT = 0,
-    FT_STROKER_BORDER_RIGHT
-
-  } FT_StrokerBorder;
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Outline_GetInsideBorder
-   *
-   * @description:
-   *   Retrieve the @FT_StrokerBorder value corresponding to the
-   *   `inside' borders of a given outline.
-   *
-   * @input:
-   *   outline ::
-   *     The source outline handle.
-   *
-   * @return:
-   *   The border index.  @FT_STROKER_BORDER_RIGHT for empty or invalid
-   *   outlines.
-   */
-  FT_EXPORT( FT_StrokerBorder )
-  FT_Outline_GetInsideBorder( FT_Outline*  outline );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Outline_GetOutsideBorder
-   *
-   * @description:
-   *   Retrieve the @FT_StrokerBorder value corresponding to the
-   *   `outside' borders of a given outline.
-   *
-   * @input:
-   *   outline ::
-   *     The source outline handle.
-   *
-   * @return:
-   *   The border index.  @FT_STROKER_BORDER_LEFT for empty or invalid
-   *   outlines.
-   */
-  FT_EXPORT( FT_StrokerBorder )
-  FT_Outline_GetOutsideBorder( FT_Outline*  outline );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_New
-   *
-   * @description:
-   *   Create a new stroker object.
-   *
-   * @input:
-   *   library ::
-   *     FreeType library handle.
-   *
-   * @output:
-   *   astroker ::
-   *     A new stroker object handle.  NULL in case of error.
-   *
-   * @return:
-   *    FreeType error code.  0~means success.
-   */
-  FT_EXPORT( FT_Error )
-  FT_Stroker_New( FT_Library   library,
-                  FT_Stroker  *astroker );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_Set
-   *
-   * @description:
-   *   Reset a stroker object's attributes.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   *   radius ::
-   *     The border radius.
-   *
-   *   line_cap ::
-   *     The line cap style.
-   *
-   *   line_join ::
-   *     The line join style.
-   *
-   *   miter_limit ::
-   *     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
-   *   coordinates.
-   *
-   *   This function calls @FT_Stroker_Rewind automatically.
-   */
-  FT_EXPORT( void )
-  FT_Stroker_Set( FT_Stroker           stroker,
-                  FT_Fixed             radius,
-                  FT_Stroker_LineCap   line_cap,
-                  FT_Stroker_LineJoin  line_join,
-                  FT_Fixed             miter_limit );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_Rewind
-   *
-   * @description:
-   *   Reset a stroker object without changing its attributes.
-   *   You should call this function before beginning a new
-   *   series of calls to @FT_Stroker_BeginSubPath or
-   *   @FT_Stroker_EndSubPath.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   */
-  FT_EXPORT( void )
-  FT_Stroker_Rewind( FT_Stroker  stroker );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_ParseOutline
-   *
-   * @description:
-   *   A convenience function used to parse a whole outline with
-   *   the stroker.  The resulting outline(s) can be retrieved
-   *   later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   *   outline ::
-   *     The source outline.
-   *
-   *   opened ::
-   *     A boolean.  If~1, the outline is treated as an open path instead
-   *     of a closed one.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   If `opened' is~0 (the default), the outline is treated as a closed
-   *   path, and the stroker generates two distinct `border' outlines.
-   *
-   *   If `opened' is~1, the outline is processed as an open path, and the
-   *   stroker generates a single `stroke' outline.
-   *
-   *   This function calls @FT_Stroker_Rewind automatically.
-   */
-  FT_EXPORT( FT_Error )
-  FT_Stroker_ParseOutline( FT_Stroker   stroker,
-                           FT_Outline*  outline,
-                           FT_Bool      opened );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_BeginSubPath
-   *
-   * @description:
-   *   Start a new sub-path in the stroker.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   *   to ::
-   *     A pointer to the start vector.
-   *
-   *   open ::
-   *     A boolean.  If~1, the sub-path is treated as an open one.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   This function is useful when you need to stroke a path that is
-   *   not stored as an @FT_Outline object.
-   */
-  FT_EXPORT( FT_Error )
-  FT_Stroker_BeginSubPath( FT_Stroker  stroker,
-                           FT_Vector*  to,
-                           FT_Bool     open );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_EndSubPath
-   *
-   * @description:
-   *   Close the current sub-path in the stroker.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   You should call this function after @FT_Stroker_BeginSubPath.
-   *   If the subpath was not `opened', this function `draws' a
-   *   single line segment to the start position when needed.
-   */
-  FT_EXPORT( FT_Error )
-  FT_Stroker_EndSubPath( FT_Stroker  stroker );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_LineTo
-   *
-   * @description:
-   *   `Draw' a single line segment in the stroker's current sub-path,
-   *   from the last position.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   *   to ::
-   *     A pointer to the destination point.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   You should call this function between @FT_Stroker_BeginSubPath and
-   *   @FT_Stroker_EndSubPath.
-   */
-  FT_EXPORT( FT_Error )
-  FT_Stroker_LineTo( FT_Stroker  stroker,
-                     FT_Vector*  to );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_ConicTo
-   *
-   * @description:
-   *   `Draw' a single quadratic Bezier in the stroker's current sub-path,
-   *   from the last position.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   *   control ::
-   *     A pointer to a Bezier control point.
-   *
-   *   to ::
-   *     A pointer to the destination point.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   You should call this function between @FT_Stroker_BeginSubPath and
-   *   @FT_Stroker_EndSubPath.
-   */
-  FT_EXPORT( FT_Error )
-  FT_Stroker_ConicTo( FT_Stroker  stroker,
-                      FT_Vector*  control,
-                      FT_Vector*  to );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_CubicTo
-   *
-   * @description:
-   *   `Draw' a single cubic Bezier in the stroker's current sub-path,
-   *   from the last position.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   *   control1 ::
-   *     A pointer to the first Bezier control point.
-   *
-   *   control2 ::
-   *     A pointer to second Bezier control point.
-   *
-   *   to ::
-   *     A pointer to the destination point.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   You should call this function between @FT_Stroker_BeginSubPath and
-   *   @FT_Stroker_EndSubPath.
-   */
-  FT_EXPORT( FT_Error )
-  FT_Stroker_CubicTo( FT_Stroker  stroker,
-                      FT_Vector*  control1,
-                      FT_Vector*  control2,
-                      FT_Vector*  to );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_GetBorderCounts
-   *
-   * @description:
-   *   Call this function once you have finished parsing your paths
-   *   with the stroker.  It returns the number of points and
-   *   contours necessary to export one of the `border' or `stroke'
-   *   outlines generated by the stroker.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   *   border ::
-   *     The border index.
-   *
-   * @output:
-   *   anum_points ::
-   *     The number of points.
-   *
-   *   anum_contours ::
-   *     The number of contours.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   When an outline, or a sub-path, is `closed', the stroker generates
-   *   two independent `border' outlines, named `left' and `right'.
-   *
-   *   When the outline, or a sub-path, is `opened', the stroker merges
-   *   the `border' outlines with caps.  The `left' border receives all
-   *   points, while the `right' border becomes empty.
-   *
-   *   Use the function @FT_Stroker_GetCounts instead if you want to
-   *   retrieve the counts associated to both borders.
-   */
-  FT_EXPORT( FT_Error )
-  FT_Stroker_GetBorderCounts( FT_Stroker        stroker,
-                              FT_StrokerBorder  border,
-                              FT_UInt          *anum_points,
-                              FT_UInt          *anum_contours );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_ExportBorder
-   *
-   * @description:
-   *   Call this function after @FT_Stroker_GetBorderCounts to
-   *   export the corresponding border to your own @FT_Outline
-   *   structure.
-   *
-   *   Note that this function appends the border points and
-   *   contours to your outline, but does not try to resize its
-   *   arrays.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   *   border ::
-   *     The border index.
-   *
-   *   outline ::
-   *     The target outline handle.
-   *
-   * @note:
-   *   Always call this function after @FT_Stroker_GetBorderCounts to
-   *   get sure that there is enough room in your @FT_Outline object to
-   *   receive all new data.
-   *
-   *   When an outline, or a sub-path, is `closed', the stroker generates
-   *   two independent `border' outlines, named `left' and `right'.
-   *
-   *   When the outline, or a sub-path, is `opened', the stroker merges
-   *   the `border' outlines with caps.  The `left' border receives all
-   *   points, while the `right' border becomes empty.
-   *
-   *   Use the function @FT_Stroker_Export instead if you want to
-   *   retrieve all borders at once.
-   */
-  FT_EXPORT( void )
-  FT_Stroker_ExportBorder( FT_Stroker        stroker,
-                           FT_StrokerBorder  border,
-                           FT_Outline*       outline );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_GetCounts
-   *
-   * @description:
-   *   Call this function once you have finished parsing your paths
-   *   with the stroker.  It returns the number of points and
-   *   contours necessary to export all points/borders from the stroked
-   *   outline/path.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   * @output:
-   *   anum_points ::
-   *     The number of points.
-   *
-   *   anum_contours ::
-   *     The number of contours.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   */
-  FT_EXPORT( FT_Error )
-  FT_Stroker_GetCounts( FT_Stroker  stroker,
-                        FT_UInt    *anum_points,
-                        FT_UInt    *anum_contours );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_Export
-   *
-   * @description:
-   *   Call this function after @FT_Stroker_GetBorderCounts to
-   *   export all borders to your own @FT_Outline structure.
-   *
-   *   Note that this function appends the border points and
-   *   contours to your outline, but does not try to resize its
-   *   arrays.
-   *
-   * @input:
-   *   stroker ::
-   *     The target stroker handle.
-   *
-   *   outline ::
-   *     The target outline handle.
-   */
-  FT_EXPORT( void )
-  FT_Stroker_Export( FT_Stroker   stroker,
-                     FT_Outline*  outline );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Stroker_Done
-   *
-   * @description:
-   *   Destroy a stroker object.
-   *
-   * @input:
-   *   stroker ::
-   *     A stroker handle.  Can be NULL.
-   */
-  FT_EXPORT( void )
-  FT_Stroker_Done( FT_Stroker  stroker );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Glyph_Stroke
-   *
-   * @description:
-   *   Stroke a given outline glyph object with a given stroker.
-   *
-   * @inout:
-   *   pglyph ::
-   *     Source glyph handle on input, new glyph handle on output.
-   *
-   * @input:
-   *   stroker ::
-   *     A stroker handle.
-   *
-   *   destroy ::
-   *     A Boolean.  If~1, the source glyph object is destroyed
-   *     on success.
-   *
-   * @return:
-   *    FreeType error code.  0~means success.
-   *
-   * @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,
-                   FT_Stroker   stroker,
-                   FT_Bool      destroy );
-
-
-  /**************************************************************
-   *
-   * @function:
-   *   FT_Glyph_StrokeBorder
-   *
-   * @description:
-   *   Stroke a given outline glyph object with a given stroker, but
-   *   only return either its inside or outside border.
-   *
-   * @inout:
-   *   pglyph ::
-   *     Source glyph handle on input, new glyph handle on output.
-   *
-   * @input:
-   *   stroker ::
-   *     A stroker handle.
-   *
-   *   inside ::
-   *     A Boolean.  If~1, return the inside border, otherwise
-   *     the outside border.
-   *
-   *   destroy ::
-   *     A Boolean.  If~1, the source glyph object is destroyed
-   *     on success.
-   *
-   * @return:
-   *    FreeType error code.  0~means success.
-   *
-   * @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,
-                         FT_Stroker   stroker,
-                         FT_Bool      inside,
-                         FT_Bool      destroy );
-
-  /* */
-
-FT_END_HEADER
-
-#endif /* FTSTROKE_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8    */
-/* End:             */

+ 0 - 84
freetype/include/freetype/ftsynth.h

@@ -1,84 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftsynth.h                                                              */
-/*                                                                         */
-/*    FreeType synthesizing code for emboldening and slanting              */
-/*    (specification).                                                     */
-/*                                                                         */
-/*  Copyright 2000-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*********                                                       *********/
-  /*********        WARNING, THIS IS ALPHA CODE!  THIS API         *********/
-  /*********    IS DUE TO CHANGE UNTIL STRICTLY NOTIFIED BY THE    *********/
-  /*********            FREETYPE DEVELOPMENT TEAM                  *********/
-  /*********                                                       *********/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /* Main reason for not lifting the functions in this module to a  */
-  /* `standard' API is that the used parameters for emboldening and */
-  /* slanting are not configurable.  Consider the functions as a    */
-  /* code resource that should be copied into the application and   */
-  /* adapted to the particular needs.                               */
-
-
-#ifndef FTSYNTH_H_
-#define FTSYNTH_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
-
-  /* Embolden a glyph by a `reasonable' value (which is highly a matter of */
-  /* taste).  This function is actually a convenience function, providing  */
-  /* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden.           */
-  /*                                                                       */
-  /* For emboldened outlines the height, width, and advance metrics are    */
-  /* increased by the strength of the emboldening -- this even affects     */
-  /* mono-width fonts!                                                     */
-  /*                                                                       */
-  /* You can also call @FT_Outline_Get_CBox to get precise values.         */
-  FT_EXPORT( void )
-  FT_GlyphSlot_Embolden( FT_GlyphSlot  slot );
-
-  /* Slant an outline glyph to the right by about 12 degrees. */
-  FT_EXPORT( void )
-  FT_GlyphSlot_Oblique( FT_GlyphSlot  slot );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTSYNTH_H_ */
-
-
-/* END */

+ 0 - 355
freetype/include/freetype/ftsystem.h

@@ -1,355 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftsystem.h                                                             */
-/*                                                                         */
-/*    FreeType low-level system interface definition (specification).      */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTSYSTEM_H_
-#define FTSYSTEM_H_
-
-
-#include <ft2build.h>
-
-
-FT_BEGIN_HEADER
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*   system_interface                                                    */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*   System Interface                                                    */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*   How FreeType manages memory and i/o.                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*   This section contains various definitions related to memory         */
-  /*   management and i/o access.  You need to understand this             */
-  /*   information if you want to use a custom memory manager or you own   */
-  /*   i/o streams.                                                        */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /*                  M E M O R Y   M A N A G E M E N T                    */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************
-   *
-   * @type:
-   *   FT_Memory
-   *
-   * @description:
-   *   A handle to a given memory manager object, defined with an
-   *   @FT_MemoryRec structure.
-   *
-   */
-  typedef struct FT_MemoryRec_*  FT_Memory;
-
-
-  /*************************************************************************
-   *
-   * @functype:
-   *   FT_Alloc_Func
-   *
-   * @description:
-   *   A function used to allocate `size' bytes from `memory'.
-   *
-   * @input:
-   *   memory ::
-   *     A handle to the source memory manager.
-   *
-   *   size ::
-   *     The size in bytes to allocate.
-   *
-   * @return:
-   *   Address of new memory block.  0~in case of failure.
-   *
-   */
-  typedef void*
-  (*FT_Alloc_Func)( FT_Memory  memory,
-                    long       size );
-
-
-  /*************************************************************************
-   *
-   * @functype:
-   *   FT_Free_Func
-   *
-   * @description:
-   *   A function used to release a given block of memory.
-   *
-   * @input:
-   *   memory ::
-   *     A handle to the source memory manager.
-   *
-   *   block ::
-   *     The address of the target memory block.
-   *
-   */
-  typedef void
-  (*FT_Free_Func)( FT_Memory  memory,
-                   void*      block );
-
-
-  /*************************************************************************
-   *
-   * @functype:
-   *   FT_Realloc_Func
-   *
-   * @description:
-   *   A function used to re-allocate a given block of memory.
-   *
-   * @input:
-   *   memory ::
-   *     A handle to the source memory manager.
-   *
-   *   cur_size ::
-   *     The block's current size in bytes.
-   *
-   *   new_size ::
-   *     The block's requested new size.
-   *
-   *   block ::
-   *     The block's current address.
-   *
-   * @return:
-   *   New block address.  0~in case of memory shortage.
-   *
-   * @note:
-   *   In case of error, the old block must still be available.
-   *
-   */
-  typedef void*
-  (*FT_Realloc_Func)( FT_Memory  memory,
-                      long       cur_size,
-                      long       new_size,
-                      void*      block );
-
-
-  /*************************************************************************
-   *
-   * @struct:
-   *   FT_MemoryRec
-   *
-   * @description:
-   *   A structure used to describe a given memory manager to FreeType~2.
-   *
-   * @fields:
-   *   user ::
-   *     A generic typeless pointer for user data.
-   *
-   *   alloc ::
-   *     A pointer type to an allocation function.
-   *
-   *   free ::
-   *     A pointer type to an memory freeing function.
-   *
-   *   realloc ::
-   *     A pointer type to a reallocation function.
-   *
-   */
-  struct  FT_MemoryRec_
-  {
-    void*            user;
-    FT_Alloc_Func    alloc;
-    FT_Free_Func     free;
-    FT_Realloc_Func  realloc;
-  };
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /*                       I / O   M A N A G E M E N T                     */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************
-   *
-   * @type:
-   *   FT_Stream
-   *
-   * @description:
-   *   A handle to an input stream.
-   *
-   * @also:
-   *   See @FT_StreamRec for the publicly accessible fields of a given
-   *   stream object.
-   *
-   */
-  typedef struct FT_StreamRec_*  FT_Stream;
-
-
-  /*************************************************************************
-   *
-   * @struct:
-   *   FT_StreamDesc
-   *
-   * @description:
-   *   A union type used to store either a long or a pointer.  This is used
-   *   to store a file descriptor or a `FILE*' in an input stream.
-   *
-   */
-  typedef union  FT_StreamDesc_
-  {
-    long   value;
-    void*  pointer;
-
-  } FT_StreamDesc;
-
-
-  /*************************************************************************
-   *
-   * @functype:
-   *   FT_Stream_IoFunc
-   *
-   * @description:
-   *   A function used to seek and read data from a given input stream.
-   *
-   * @input:
-   *   stream ::
-   *     A handle to the source stream.
-   *
-   *   offset ::
-   *     The offset of read in stream (always from start).
-   *
-   *   buffer ::
-   *     The address of the read buffer.
-   *
-   *   count ::
-   *     The number of bytes to read from the stream.
-   *
-   * @return:
-   *   The number of bytes effectively read by the stream.
-   *
-   * @note:
-   *   This function might be called to perform a seek or skip operation
-   *   with a `count' of~0.  A non-zero return value then indicates an
-   *   error.
-   *
-   */
-  typedef unsigned long
-  (*FT_Stream_IoFunc)( FT_Stream       stream,
-                       unsigned long   offset,
-                       unsigned char*  buffer,
-                       unsigned long   count );
-
-
-  /*************************************************************************
-   *
-   * @functype:
-   *   FT_Stream_CloseFunc
-   *
-   * @description:
-   *   A function used to close a given input stream.
-   *
-   * @input:
-   *  stream ::
-   *     A handle to the target stream.
-   *
-   */
-  typedef void
-  (*FT_Stream_CloseFunc)( FT_Stream  stream );
-
-
-  /*************************************************************************
-   *
-   * @struct:
-   *   FT_StreamRec
-   *
-   * @description:
-   *   A structure used to describe an input stream.
-   *
-   * @input:
-   *   base ::
-   *     For memory-based streams, this is the address of the first stream
-   *     byte in memory.  This field should always be set to NULL for
-   *     disk-based streams.
-   *
-   *   size ::
-   *     The stream size in bytes.
-   *
-   *     In case of compressed streams where the size is unknown before
-   *     actually doing the decompression, the value is set to 0x7FFFFFFF.
-   *     (Note that this size value can occur for normal streams also; it is
-   *     thus just a hint.)
-   *
-   *   pos ::
-   *     The current position within the stream.
-   *
-   *   descriptor ::
-   *     This field is a union that can hold an integer or a pointer.  It is
-   *     used by stream implementations to store file descriptors or `FILE*'
-   *     pointers.
-   *
-   *   pathname ::
-   *     This field is completely ignored by FreeType.  However, it is often
-   *     useful during debugging to use it to store the stream's filename
-   *     (where available).
-   *
-   *   read ::
-   *     The stream's input function.
-   *
-   *   close ::
-   *     The stream's close function.
-   *
-   *   memory ::
-   *     The memory manager to use to preload frames.  This is set
-   *     internally by FreeType and shouldn't be touched by stream
-   *     implementations.
-   *
-   *   cursor ::
-   *     This field is set and used internally by FreeType when parsing
-   *     frames.
-   *
-   *   limit ::
-   *     This field is set and used internally by FreeType when parsing
-   *     frames.
-   *
-   */
-  typedef struct  FT_StreamRec_
-  {
-    unsigned char*       base;
-    unsigned long        size;
-    unsigned long        pos;
-
-    FT_StreamDesc        descriptor;
-    FT_StreamDesc        pathname;
-    FT_Stream_IoFunc     read;
-    FT_Stream_CloseFunc  close;
-
-    FT_Memory            memory;
-    unsigned char*       cursor;
-    unsigned char*       limit;
-
-  } FT_StreamRec;
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTSYSTEM_H_ */
-
-
-/* END */

+ 0 - 350
freetype/include/freetype/fttrigon.h

@@ -1,350 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  fttrigon.h                                                             */
-/*                                                                         */
-/*    FreeType trigonometric functions (specification).                    */
-/*                                                                         */
-/*  Copyright 2001-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, 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 FTTRIGON_H_
-#define FTTRIGON_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>                                                             */
-  /*   computations                                                        */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************
-   *
-   * @type:
-   *   FT_Angle
-   *
-   * @description:
-   *   This type is used to model angle values in FreeType.  Note that the
-   *   angle is a 16.16 fixed-point value expressed in degrees.
-   *
-   */
-  typedef FT_Fixed  FT_Angle;
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_ANGLE_PI
-   *
-   * @description:
-   *   The angle pi expressed in @FT_Angle units.
-   *
-   */
-#define FT_ANGLE_PI  ( 180L << 16 )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_ANGLE_2PI
-   *
-   * @description:
-   *   The angle 2*pi expressed in @FT_Angle units.
-   *
-   */
-#define FT_ANGLE_2PI  ( FT_ANGLE_PI * 2 )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_ANGLE_PI2
-   *
-   * @description:
-   *   The angle pi/2 expressed in @FT_Angle units.
-   *
-   */
-#define FT_ANGLE_PI2  ( FT_ANGLE_PI / 2 )
-
-
-  /*************************************************************************
-   *
-   * @macro:
-   *   FT_ANGLE_PI4
-   *
-   * @description:
-   *   The angle pi/4 expressed in @FT_Angle units.
-   *
-   */
-#define FT_ANGLE_PI4  ( FT_ANGLE_PI / 4 )
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Sin
-   *
-   * @description:
-   *   Return the sinus of a given angle in fixed-point format.
-   *
-   * @input:
-   *   angle ::
-   *     The input angle.
-   *
-   * @return:
-   *   The sinus value.
-   *
-   * @note:
-   *   If you need both the sinus and cosinus for a given angle, use the
-   *   function @FT_Vector_Unit.
-   *
-   */
-  FT_EXPORT( FT_Fixed )
-  FT_Sin( FT_Angle  angle );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Cos
-   *
-   * @description:
-   *   Return the cosinus of a given angle in fixed-point format.
-   *
-   * @input:
-   *   angle ::
-   *     The input angle.
-   *
-   * @return:
-   *   The cosinus value.
-   *
-   * @note:
-   *   If you need both the sinus and cosinus for a given angle, use the
-   *   function @FT_Vector_Unit.
-   *
-   */
-  FT_EXPORT( FT_Fixed )
-  FT_Cos( FT_Angle  angle );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Tan
-   *
-   * @description:
-   *   Return the tangent of a given angle in fixed-point format.
-   *
-   * @input:
-   *   angle ::
-   *     The input angle.
-   *
-   * @return:
-   *   The tangent value.
-   *
-   */
-  FT_EXPORT( FT_Fixed )
-  FT_Tan( FT_Angle  angle );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Atan2
-   *
-   * @description:
-   *   Return the arc-tangent corresponding to a given vector (x,y) in
-   *   the 2d plane.
-   *
-   * @input:
-   *   x ::
-   *     The horizontal vector coordinate.
-   *
-   *   y ::
-   *     The vertical vector coordinate.
-   *
-   * @return:
-   *   The arc-tangent value (i.e. angle).
-   *
-   */
-  FT_EXPORT( FT_Angle )
-  FT_Atan2( FT_Fixed  x,
-            FT_Fixed  y );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Angle_Diff
-   *
-   * @description:
-   *   Return the difference between two angles.  The result is always
-   *   constrained to the ]-PI..PI] interval.
-   *
-   * @input:
-   *   angle1 ::
-   *     First angle.
-   *
-   *   angle2 ::
-   *     Second angle.
-   *
-   * @return:
-   *   Constrained value of `value2-value1'.
-   *
-   */
-  FT_EXPORT( FT_Angle )
-  FT_Angle_Diff( FT_Angle  angle1,
-                 FT_Angle  angle2 );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Vector_Unit
-   *
-   * @description:
-   *   Return the unit vector corresponding to a given angle.  After the
-   *   call, the value of `vec.x' will be `cos(angle)', and the value of
-   *   `vec.y' will be `sin(angle)'.
-   *
-   *   This function is useful to retrieve both the sinus and cosinus of a
-   *   given angle quickly.
-   *
-   * @output:
-   *   vec ::
-   *     The address of target vector.
-   *
-   * @input:
-   *   angle ::
-   *     The input angle.
-   *
-   */
-  FT_EXPORT( void )
-  FT_Vector_Unit( FT_Vector*  vec,
-                  FT_Angle    angle );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Vector_Rotate
-   *
-   * @description:
-   *   Rotate a vector by a given angle.
-   *
-   * @inout:
-   *   vec ::
-   *     The address of target vector.
-   *
-   * @input:
-   *   angle ::
-   *     The input angle.
-   *
-   */
-  FT_EXPORT( void )
-  FT_Vector_Rotate( FT_Vector*  vec,
-                    FT_Angle    angle );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Vector_Length
-   *
-   * @description:
-   *   Return the length of a given vector.
-   *
-   * @input:
-   *   vec ::
-   *     The address of target vector.
-   *
-   * @return:
-   *   The vector length, expressed in the same units that the original
-   *   vector coordinates.
-   *
-   */
-  FT_EXPORT( FT_Fixed )
-  FT_Vector_Length( FT_Vector*  vec );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Vector_Polarize
-   *
-   * @description:
-   *   Compute both the length and angle of a given vector.
-   *
-   * @input:
-   *   vec ::
-   *     The address of source vector.
-   *
-   * @output:
-   *   length ::
-   *     The vector length.
-   *
-   *   angle ::
-   *     The vector angle.
-   *
-   */
-  FT_EXPORT( void )
-  FT_Vector_Polarize( FT_Vector*  vec,
-                      FT_Fixed   *length,
-                      FT_Angle   *angle );
-
-
-  /*************************************************************************
-   *
-   * @function:
-   *   FT_Vector_From_Polar
-   *
-   * @description:
-   *   Compute vector coordinates from a length and angle.
-   *
-   * @output:
-   *   vec ::
-   *     The address of source vector.
-   *
-   * @input:
-   *   length ::
-   *     The vector length.
-   *
-   *   angle ::
-   *     The vector angle.
-   *
-   */
-  FT_EXPORT( void )
-  FT_Vector_From_Polar( FT_Vector*  vec,
-                        FT_Fixed    length,
-                        FT_Angle    angle );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTTRIGON_H_ */
-
-
-/* END */

+ 0 - 602
freetype/include/freetype/fttypes.h

@@ -1,602 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  fttypes.h                                                              */
-/*                                                                         */
-/*    FreeType simple types definitions (specification only).              */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTTYPES_H_
-#define FTTYPES_H_
-
-
-#include <ft2build.h>
-#include FT_CONFIG_CONFIG_H
-#include FT_SYSTEM_H
-#include FT_IMAGE_H
-
-#include <stddef.h>
-
-
-FT_BEGIN_HEADER
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    basic_types                                                        */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Basic Data Types                                                   */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    The basic data types defined by the library.                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains the basic data types defined by FreeType~2,  */
-  /*    ranging from simple scalar types to bitmap descriptors.  More      */
-  /*    font-specific structures are defined in a different section.       */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    FT_Byte                                                            */
-  /*    FT_Bytes                                                           */
-  /*    FT_Char                                                            */
-  /*    FT_Int                                                             */
-  /*    FT_UInt                                                            */
-  /*    FT_Int16                                                           */
-  /*    FT_UInt16                                                          */
-  /*    FT_Int32                                                           */
-  /*    FT_UInt32                                                          */
-  /*    FT_Int64                                                           */
-  /*    FT_UInt64                                                          */
-  /*    FT_Short                                                           */
-  /*    FT_UShort                                                          */
-  /*    FT_Long                                                            */
-  /*    FT_ULong                                                           */
-  /*    FT_Bool                                                            */
-  /*    FT_Offset                                                          */
-  /*    FT_PtrDist                                                         */
-  /*    FT_String                                                          */
-  /*    FT_Tag                                                             */
-  /*    FT_Error                                                           */
-  /*    FT_Fixed                                                           */
-  /*    FT_Pointer                                                         */
-  /*    FT_Pos                                                             */
-  /*    FT_Vector                                                          */
-  /*    FT_BBox                                                            */
-  /*    FT_Matrix                                                          */
-  /*    FT_FWord                                                           */
-  /*    FT_UFWord                                                          */
-  /*    FT_F2Dot14                                                         */
-  /*    FT_UnitVector                                                      */
-  /*    FT_F26Dot6                                                         */
-  /*    FT_Data                                                            */
-  /*                                                                       */
-  /*    FT_MAKE_TAG                                                        */
-  /*                                                                       */
-  /*    FT_Generic                                                         */
-  /*    FT_Generic_Finalizer                                               */
-  /*                                                                       */
-  /*    FT_Bitmap                                                          */
-  /*    FT_Pixel_Mode                                                      */
-  /*    FT_Palette_Mode                                                    */
-  /*    FT_Glyph_Format                                                    */
-  /*    FT_IMAGE_TAG                                                       */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Bool                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef of unsigned char, used for simple booleans.  As usual,   */
-  /*    values 1 and~0 represent true and false, respectively.             */
-  /*                                                                       */
-  typedef unsigned char  FT_Bool;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_FWord                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A signed 16-bit integer used to store a distance in original font  */
-  /*    units.                                                             */
-  /*                                                                       */
-  typedef signed short  FT_FWord;   /* distance in FUnits */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UFWord                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An unsigned 16-bit integer used to store a distance in original    */
-  /*    font units.                                                        */
-  /*                                                                       */
-  typedef unsigned short  FT_UFWord;  /* unsigned distance */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Char                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A simple typedef for the _signed_ char type.                       */
-  /*                                                                       */
-  typedef signed char  FT_Char;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Byte                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A simple typedef for the _unsigned_ char type.                     */
-  /*                                                                       */
-  typedef unsigned char  FT_Byte;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Bytes                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for constant memory areas.                               */
-  /*                                                                       */
-  typedef const FT_Byte*  FT_Bytes;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Tag                                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for 32-bit tags (as used in the SFNT format).            */
-  /*                                                                       */
-  typedef FT_UInt32  FT_Tag;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_String                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A simple typedef for the char type, usually used for strings.      */
-  /*                                                                       */
-  typedef char  FT_String;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Short                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for signed short.                                        */
-  /*                                                                       */
-  typedef signed short  FT_Short;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UShort                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for unsigned short.                                      */
-  /*                                                                       */
-  typedef unsigned short  FT_UShort;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Int                                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for the int type.                                        */
-  /*                                                                       */
-  typedef signed int  FT_Int;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UInt                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for the unsigned int type.                               */
-  /*                                                                       */
-  typedef unsigned int  FT_UInt;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Long                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for signed long.                                         */
-  /*                                                                       */
-  typedef signed long  FT_Long;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_ULong                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for unsigned long.                                       */
-  /*                                                                       */
-  typedef unsigned long  FT_ULong;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_F2Dot14                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A signed 2.14 fixed-point type used for unit vectors.              */
-  /*                                                                       */
-  typedef signed short  FT_F2Dot14;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_F26Dot6                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A signed 26.6 fixed-point type used for vectorial pixel            */
-  /*    coordinates.                                                       */
-  /*                                                                       */
-  typedef signed long  FT_F26Dot6;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Fixed                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This type is used to store 16.16 fixed-point values, like scaling  */
-  /*    values or matrix coefficients.                                     */
-  /*                                                                       */
-  typedef signed long  FT_Fixed;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Error                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The FreeType error code type.  A value of~0 is always interpreted  */
-  /*    as a successful operation.                                         */
-  /*                                                                       */
-  typedef int  FT_Error;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Pointer                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A simple typedef for a typeless pointer.                           */
-  /*                                                                       */
-  typedef void*  FT_Pointer;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Offset                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This is equivalent to the ANSI~C `size_t' type, i.e., the largest  */
-  /*    _unsigned_ integer type used to express a file size or position,   */
-  /*    or a memory block size.                                            */
-  /*                                                                       */
-  typedef size_t  FT_Offset;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_PtrDist                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This is equivalent to the ANSI~C `ptrdiff_t' type, i.e., the       */
-  /*    largest _signed_ integer type used to express the distance         */
-  /*    between two pointers.                                              */
-  /*                                                                       */
-  typedef ft_ptrdiff_t  FT_PtrDist;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_UnitVector                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A simple structure used to store a 2D vector unit vector.  Uses    */
-  /*    FT_F2Dot14 types.                                                  */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    x :: Horizontal coordinate.                                        */
-  /*                                                                       */
-  /*    y :: Vertical coordinate.                                          */
-  /*                                                                       */
-  typedef struct  FT_UnitVector_
-  {
-    FT_F2Dot14  x;
-    FT_F2Dot14  y;
-
-  } FT_UnitVector;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Matrix                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A simple structure used to store a 2x2 matrix.  Coefficients are   */
-  /*    in 16.16 fixed-point format.  The computation performed is:        */
-  /*                                                                       */
-  /*       {                                                               */
-  /*          x' = x*xx + y*xy                                             */
-  /*          y' = x*yx + y*yy                                             */
-  /*       }                                                               */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    xx :: Matrix coefficient.                                          */
-  /*                                                                       */
-  /*    xy :: Matrix coefficient.                                          */
-  /*                                                                       */
-  /*    yx :: Matrix coefficient.                                          */
-  /*                                                                       */
-  /*    yy :: Matrix coefficient.                                          */
-  /*                                                                       */
-  typedef struct  FT_Matrix_
-  {
-    FT_Fixed  xx, xy;
-    FT_Fixed  yx, yy;
-
-  } FT_Matrix;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Data                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Read-only binary data represented as a pointer and a length.       */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    pointer :: The data.                                               */
-  /*                                                                       */
-  /*    length  :: The length of the data in bytes.                        */
-  /*                                                                       */
-  typedef struct  FT_Data_
-  {
-    const FT_Byte*  pointer;
-    FT_Int          length;
-
-  } FT_Data;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <FuncType>                                                            */
-  /*    FT_Generic_Finalizer                                               */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Describe a function used to destroy the `client' data of any       */
-  /*    FreeType object.  See the description of the @FT_Generic type for  */
-  /*    details of usage.                                                  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    The address of the FreeType object that is under finalization.     */
-  /*    Its client data is accessed through its `generic' field.           */
-  /*                                                                       */
-  typedef void  (*FT_Generic_Finalizer)( void*  object );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_Generic                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Client applications often need to associate their own data to a    */
-  /*    variety of FreeType core objects.  For example, a text layout API  */
-  /*    might want to associate a glyph cache to a given size object.      */
-  /*                                                                       */
-  /*    Some FreeType object contains a `generic' field, of type           */
-  /*    FT_Generic, which usage is left to client applications and font    */
-  /*    servers.                                                           */
-  /*                                                                       */
-  /*    It can be used to store a pointer to client-specific data, as well */
-  /*    as the address of a `finalizer' function, which will be called by  */
-  /*    FreeType when the object is destroyed (for example, the previous   */
-  /*    client example would put the address of the glyph cache destructor */
-  /*    in the `finalizer' field).                                         */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    data      :: A typeless pointer to any client-specified data. This */
-  /*                 field is completely ignored by the FreeType library.  */
-  /*                                                                       */
-  /*    finalizer :: A pointer to a `generic finalizer' function, which    */
-  /*                 will be called when the object is destroyed.  If this */
-  /*                 field is set to NULL, no code will be called.         */
-  /*                                                                       */
-  typedef struct  FT_Generic_
-  {
-    void*                 data;
-    FT_Generic_Finalizer  finalizer;
-
-  } FT_Generic;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Macro>                                                               */
-  /*    FT_MAKE_TAG                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This macro converts four-letter tags that are used to label        */
-  /*    TrueType tables into an unsigned long, to be used within FreeType. */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The produced values *must* be 32-bit integers.  Don't redefine     */
-  /*    this macro.                                                        */
-  /*                                                                       */
-#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
-          (FT_Tag)                        \
-          ( ( (FT_ULong)_x1 << 24 ) |     \
-            ( (FT_ULong)_x2 << 16 ) |     \
-            ( (FT_ULong)_x3 <<  8 ) |     \
-              (FT_ULong)_x4         )
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*                                                                       */
-  /*                    L I S T   M A N A G E M E N T                      */
-  /*                                                                       */
-  /*************************************************************************/
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    list_processing                                                    */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_ListNode                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*     Many elements and objects in FreeType are listed through an       */
-  /*     @FT_List record (see @FT_ListRec).  As its name suggests, an      */
-  /*     FT_ListNode is a handle to a single list element.                 */
-  /*                                                                       */
-  typedef struct FT_ListNodeRec_*  FT_ListNode;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_List                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a list record (see @FT_ListRec).                       */
-  /*                                                                       */
-  typedef struct FT_ListRec_*  FT_List;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_ListNodeRec                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to hold a single list element.                    */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    prev :: The previous element in the list.  NULL if first.          */
-  /*                                                                       */
-  /*    next :: The next element in the list.  NULL if last.               */
-  /*                                                                       */
-  /*    data :: A typeless pointer to the listed object.                   */
-  /*                                                                       */
-  typedef struct  FT_ListNodeRec_
-  {
-    FT_ListNode  prev;
-    FT_ListNode  next;
-    void*        data;
-
-  } FT_ListNodeRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_ListRec                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to hold a simple doubly-linked list.  These are   */
-  /*    used in many parts of FreeType.                                    */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    head :: The head (first element) of doubly-linked list.            */
-  /*                                                                       */
-  /*    tail :: The tail (last element) of doubly-linked list.             */
-  /*                                                                       */
-  typedef struct  FT_ListRec_
-  {
-    FT_ListNode  head;
-    FT_ListNode  tail;
-
-  } FT_ListRec;
-
-  /* */
-
-
-#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 )
-
-#define FT_ERROR_BASE( x )    ( (x) & 0xFF )
-#define FT_ERROR_MODULE( x )  ( (x) & 0xFF00U )
-
-#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
-
-#endif /* FTTYPES_H_ */
-
-
-/* END */

+ 0 - 275
freetype/include/freetype/ftwinfnt.h

@@ -1,275 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftwinfnt.h                                                             */
-/*                                                                         */
-/*    FreeType API for accessing Windows fnt-specific data.                */
-/*                                                                         */
-/*  Copyright 2003-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef FTWINFNT_H_
-#define FTWINFNT_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>                                                             */
-  /*    winfnt_fonts                                                       */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Window FNT Files                                                   */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Windows FNT specific API.                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains the declaration of Windows FNT specific      */
-  /*    functions.                                                         */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************
-   *
-   * @enum:
-   *   FT_WinFNT_ID_XXX
-   *
-   * @description:
-   *   A list of valid values for the `charset' byte in
-   *   @FT_WinFNT_HeaderRec.  Exact mapping tables for the various cpXXXX
-   *   encodings (except for cp1361) can be found at
-   *   ftp://ftp.unicode.org/Public in the MAPPINGS/VENDORS/MICSFT/WINDOWS
-   *   subdirectory.  cp1361 is roughly a superset of
-   *   MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.
-   *
-   * @values:
-   *   FT_WinFNT_ID_DEFAULT ::
-   *     This is used for font enumeration and font creation as a
-   *     `don't care' value.  Valid font files don't contain this value.
-   *     When querying for information about the character set of the font
-   *     that is currently selected into a specified device context, this
-   *     return value (of the related Windows API) simply denotes failure.
-   *
-   *   FT_WinFNT_ID_SYMBOL ::
-   *     There is no known mapping table available.
-   *
-   *   FT_WinFNT_ID_MAC ::
-   *     Mac Roman encoding.
-   *
-   *   FT_WinFNT_ID_OEM ::
-   *     From Michael Poettgen <[email protected]>:
-   *
-   *       The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM
-   *       is used for the charset of vector fonts, like `modern.fon',
-   *       `roman.fon', and `script.fon' on Windows.
-   *
-   *       The `CreateFont' documentation says: The FT_WinFNT_ID_OEM value
-   *       specifies a character set that is operating-system dependent.
-   *
-   *       The `IFIMETRICS' documentation from the `Windows Driver
-   *       Development Kit' says: This font supports an OEM-specific
-   *       character set.  The OEM character set is system dependent.
-   *
-   *       In general OEM, as opposed to ANSI (i.e., cp1252), denotes the
-   *       second default codepage that most international versions of
-   *       Windows have.  It is one of the OEM codepages from
-   *
-   *         https://msdn.microsoft.com/en-us/goglobal/bb964655,
-   *
-   *       and is used for the `DOS boxes', to support legacy applications.
-   *       A German Windows version for example usually uses ANSI codepage
-   *       1252 and OEM codepage 850.
-   *
-   *   FT_WinFNT_ID_CP874 ::
-   *     A superset of Thai TIS 620 and ISO 8859-11.
-   *
-   *   FT_WinFNT_ID_CP932 ::
-   *     A superset of Japanese Shift-JIS (with minor deviations).
-   *
-   *   FT_WinFNT_ID_CP936 ::
-   *     A superset of simplified Chinese GB 2312-1980 (with different
-   *     ordering and minor deviations).
-   *
-   *   FT_WinFNT_ID_CP949 ::
-   *     A superset of Korean Hangul KS~C 5601-1987 (with different
-   *     ordering and minor deviations).
-   *
-   *   FT_WinFNT_ID_CP950 ::
-   *     A superset of traditional Chinese Big~5 ETen (with different
-   *     ordering and minor deviations).
-   *
-   *   FT_WinFNT_ID_CP1250 ::
-   *     A superset of East European ISO 8859-2 (with slightly different
-   *     ordering).
-   *
-   *   FT_WinFNT_ID_CP1251 ::
-   *     A superset of Russian ISO 8859-5 (with different ordering).
-   *
-   *   FT_WinFNT_ID_CP1252 ::
-   *     ANSI encoding.  A superset of ISO 8859-1.
-   *
-   *   FT_WinFNT_ID_CP1253 ::
-   *     A superset of Greek ISO 8859-7 (with minor modifications).
-   *
-   *   FT_WinFNT_ID_CP1254 ::
-   *     A superset of Turkish ISO 8859-9.
-   *
-   *   FT_WinFNT_ID_CP1255 ::
-   *     A superset of Hebrew ISO 8859-8 (with some modifications).
-   *
-   *   FT_WinFNT_ID_CP1256 ::
-   *     A superset of Arabic ISO 8859-6 (with different ordering).
-   *
-   *   FT_WinFNT_ID_CP1257 ::
-   *     A superset of Baltic ISO 8859-13 (with some deviations).
-   *
-   *   FT_WinFNT_ID_CP1258 ::
-   *     For Vietnamese.  This encoding doesn't cover all necessary
-   *     characters.
-   *
-   *   FT_WinFNT_ID_CP1361 ::
-   *     Korean (Johab).
-   */
-
-#define FT_WinFNT_ID_CP1252    0
-#define FT_WinFNT_ID_DEFAULT   1
-#define FT_WinFNT_ID_SYMBOL    2
-#define FT_WinFNT_ID_MAC      77
-#define FT_WinFNT_ID_CP932   128
-#define FT_WinFNT_ID_CP949   129
-#define FT_WinFNT_ID_CP1361  130
-#define FT_WinFNT_ID_CP936   134
-#define FT_WinFNT_ID_CP950   136
-#define FT_WinFNT_ID_CP1253  161
-#define FT_WinFNT_ID_CP1254  162
-#define FT_WinFNT_ID_CP1258  163
-#define FT_WinFNT_ID_CP1255  177
-#define FT_WinFNT_ID_CP1256  178
-#define FT_WinFNT_ID_CP1257  186
-#define FT_WinFNT_ID_CP1251  204
-#define FT_WinFNT_ID_CP874   222
-#define FT_WinFNT_ID_CP1250  238
-#define FT_WinFNT_ID_OEM     255
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_WinFNT_HeaderRec                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Windows FNT Header info.                                           */
-  /*                                                                       */
-  typedef struct  FT_WinFNT_HeaderRec_
-  {
-    FT_UShort  version;
-    FT_ULong   file_size;
-    FT_Byte    copyright[60];
-    FT_UShort  file_type;
-    FT_UShort  nominal_point_size;
-    FT_UShort  vertical_resolution;
-    FT_UShort  horizontal_resolution;
-    FT_UShort  ascent;
-    FT_UShort  internal_leading;
-    FT_UShort  external_leading;
-    FT_Byte    italic;
-    FT_Byte    underline;
-    FT_Byte    strike_out;
-    FT_UShort  weight;
-    FT_Byte    charset;
-    FT_UShort  pixel_width;
-    FT_UShort  pixel_height;
-    FT_Byte    pitch_and_family;
-    FT_UShort  avg_width;
-    FT_UShort  max_width;
-    FT_Byte    first_char;
-    FT_Byte    last_char;
-    FT_Byte    default_char;
-    FT_Byte    break_char;
-    FT_UShort  bytes_per_row;
-    FT_ULong   device_offset;
-    FT_ULong   face_name_offset;
-    FT_ULong   bits_pointer;
-    FT_ULong   bits_offset;
-    FT_Byte    reserved;
-    FT_ULong   flags;
-    FT_UShort  A_space;
-    FT_UShort  B_space;
-    FT_UShort  C_space;
-    FT_UShort  color_table_offset;
-    FT_ULong   reserved1[4];
-
-  } FT_WinFNT_HeaderRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    FT_WinFNT_Header                                                   */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to an @FT_WinFNT_HeaderRec structure.                     */
-  /*                                                                       */
-  typedef struct FT_WinFNT_HeaderRec_*  FT_WinFNT_Header;
-
-
-  /**********************************************************************
-   *
-   * @function:
-   *    FT_Get_WinFNT_Header
-   *
-   * @description:
-   *    Retrieve a Windows FNT font info header.
-   *
-   * @input:
-   *    face    :: A handle to the input face.
-   *
-   * @output:
-   *    aheader :: The WinFNT header.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   This function only works with Windows FNT faces, returning an error
-   *   otherwise.
-   */
-  FT_EXPORT( FT_Error )
-  FT_Get_WinFNT_Header( FT_Face               face,
-                        FT_WinFNT_HeaderRec  *aheader );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* FTWINFNT_H_ */
-
-
-/* END */
-
-
-/* Local Variables: */
-/* coding: utf-8    */
-/* End:             */

+ 0 - 770
freetype/include/freetype/t1tables.h

@@ -1,770 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  t1tables.h                                                             */
-/*                                                                         */
-/*    Basic Type 1/Type 2 tables definitions and interface (specification  */
-/*    only).                                                               */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef T1TABLES_H_
-#define T1TABLES_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>                                                             */
-  /*    type1_tables                                                       */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    Type 1 Tables                                                      */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    Type~1 (PostScript) specific font tables.                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains the definition of Type 1-specific tables,    */
-  /*    including structures related to other PostScript font formats.     */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    PS_FontInfoRec                                                     */
-  /*    PS_FontInfo                                                        */
-  /*    PS_PrivateRec                                                      */
-  /*    PS_Private                                                         */
-  /*                                                                       */
-  /*    CID_FaceDictRec                                                    */
-  /*    CID_FaceDict                                                       */
-  /*    CID_FaceInfoRec                                                    */
-  /*    CID_FaceInfo                                                       */
-  /*                                                                       */
-  /*    FT_Has_PS_Glyph_Names                                              */
-  /*    FT_Get_PS_Font_Info                                                */
-  /*    FT_Get_PS_Font_Private                                             */
-  /*    FT_Get_PS_Font_Value                                               */
-  /*                                                                       */
-  /*    T1_Blend_Flags                                                     */
-  /*    T1_EncodingType                                                    */
-  /*    PS_Dict_Keys                                                       */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */
-  /* structures in order to support Multiple Master fonts.               */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    PS_FontInfoRec                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to model a Type~1 or Type~2 FontInfo dictionary.  */
-  /*    Note that for Multiple Master fonts, each instance has its own     */
-  /*    FontInfo dictionary.                                               */
-  /*                                                                       */
-  typedef struct  PS_FontInfoRec_
-  {
-    FT_String*  version;
-    FT_String*  notice;
-    FT_String*  full_name;
-    FT_String*  family_name;
-    FT_String*  weight;
-    FT_Long     italic_angle;
-    FT_Bool     is_fixed_pitch;
-    FT_Short    underline_position;
-    FT_UShort   underline_thickness;
-
-  } PS_FontInfoRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    PS_FontInfo                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a @PS_FontInfoRec structure.                           */
-  /*                                                                       */
-  typedef struct PS_FontInfoRec_*  PS_FontInfo;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    T1_FontInfo                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This type is equivalent to @PS_FontInfoRec.  It is deprecated but  */
-  /*    kept to maintain source compatibility between various versions of  */
-  /*    FreeType.                                                          */
-  /*                                                                       */
-  typedef PS_FontInfoRec  T1_FontInfo;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    PS_PrivateRec                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to model a Type~1 or Type~2 private dictionary.   */
-  /*    Note that for Multiple Master fonts, each instance has its own     */
-  /*    Private dictionary.                                                */
-  /*                                                                       */
-  typedef struct  PS_PrivateRec_
-  {
-    FT_Int     unique_id;
-    FT_Int     lenIV;
-
-    FT_Byte    num_blue_values;
-    FT_Byte    num_other_blues;
-    FT_Byte    num_family_blues;
-    FT_Byte    num_family_other_blues;
-
-    FT_Short   blue_values[14];
-    FT_Short   other_blues[10];
-
-    FT_Short   family_blues      [14];
-    FT_Short   family_other_blues[10];
-
-    FT_Fixed   blue_scale;
-    FT_Int     blue_shift;
-    FT_Int     blue_fuzz;
-
-    FT_UShort  standard_width[1];
-    FT_UShort  standard_height[1];
-
-    FT_Byte    num_snap_widths;
-    FT_Byte    num_snap_heights;
-    FT_Bool    force_bold;
-    FT_Bool    round_stem_up;
-
-    FT_Short   snap_widths [13];  /* including std width  */
-    FT_Short   snap_heights[13];  /* including std height */
-
-    FT_Fixed   expansion_factor;
-
-    FT_Long    language_group;
-    FT_Long    password;
-
-    FT_Short   min_feature[2];
-
-  } PS_PrivateRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    PS_Private                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a @PS_PrivateRec structure.                            */
-  /*                                                                       */
-  typedef struct PS_PrivateRec_*  PS_Private;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    T1_Private                                                         */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*   This type is equivalent to @PS_PrivateRec.  It is deprecated but    */
-  /*   kept to maintain source compatibility between various versions of   */
-  /*   FreeType.                                                           */
-  /*                                                                       */
-  typedef PS_PrivateRec  T1_Private;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    T1_Blend_Flags                                                     */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A set of flags used to indicate which fields are present in a      */
-  /*    given blend dictionary (font info or private).  Used to support    */
-  /*    Multiple Masters fonts.                                            */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    T1_BLEND_UNDERLINE_POSITION ::                                     */
-  /*    T1_BLEND_UNDERLINE_THICKNESS ::                                    */
-  /*    T1_BLEND_ITALIC_ANGLE ::                                           */
-  /*    T1_BLEND_BLUE_VALUES ::                                            */
-  /*    T1_BLEND_OTHER_BLUES ::                                            */
-  /*    T1_BLEND_STANDARD_WIDTH ::                                         */
-  /*    T1_BLEND_STANDARD_HEIGHT ::                                        */
-  /*    T1_BLEND_STEM_SNAP_WIDTHS ::                                       */
-  /*    T1_BLEND_STEM_SNAP_HEIGHTS ::                                      */
-  /*    T1_BLEND_BLUE_SCALE ::                                             */
-  /*    T1_BLEND_BLUE_SHIFT ::                                             */
-  /*    T1_BLEND_FAMILY_BLUES ::                                           */
-  /*    T1_BLEND_FAMILY_OTHER_BLUES ::                                     */
-  /*    T1_BLEND_FORCE_BOLD ::                                             */
-  /*                                                                       */
-  typedef enum  T1_Blend_Flags_
-  {
-    /* required fields in a FontInfo blend dictionary */
-    T1_BLEND_UNDERLINE_POSITION = 0,
-    T1_BLEND_UNDERLINE_THICKNESS,
-    T1_BLEND_ITALIC_ANGLE,
-
-    /* required fields in a Private blend dictionary */
-    T1_BLEND_BLUE_VALUES,
-    T1_BLEND_OTHER_BLUES,
-    T1_BLEND_STANDARD_WIDTH,
-    T1_BLEND_STANDARD_HEIGHT,
-    T1_BLEND_STEM_SNAP_WIDTHS,
-    T1_BLEND_STEM_SNAP_HEIGHTS,
-    T1_BLEND_BLUE_SCALE,
-    T1_BLEND_BLUE_SHIFT,
-    T1_BLEND_FAMILY_BLUES,
-    T1_BLEND_FAMILY_OTHER_BLUES,
-    T1_BLEND_FORCE_BOLD,
-
-    T1_BLEND_MAX    /* do not remove */
-
-  } T1_Blend_Flags;
-
-
-  /* these constants are deprecated; use the corresponding */
-  /* `T1_Blend_Flags' values instead                       */
-#define t1_blend_underline_position   T1_BLEND_UNDERLINE_POSITION
-#define t1_blend_underline_thickness  T1_BLEND_UNDERLINE_THICKNESS
-#define t1_blend_italic_angle         T1_BLEND_ITALIC_ANGLE
-#define t1_blend_blue_values          T1_BLEND_BLUE_VALUES
-#define t1_blend_other_blues          T1_BLEND_OTHER_BLUES
-#define t1_blend_standard_widths      T1_BLEND_STANDARD_WIDTH
-#define t1_blend_standard_height      T1_BLEND_STANDARD_HEIGHT
-#define t1_blend_stem_snap_widths     T1_BLEND_STEM_SNAP_WIDTHS
-#define t1_blend_stem_snap_heights    T1_BLEND_STEM_SNAP_HEIGHTS
-#define t1_blend_blue_scale           T1_BLEND_BLUE_SCALE
-#define t1_blend_blue_shift           T1_BLEND_BLUE_SHIFT
-#define t1_blend_family_blues         T1_BLEND_FAMILY_BLUES
-#define t1_blend_family_other_blues   T1_BLEND_FAMILY_OTHER_BLUES
-#define t1_blend_force_bold           T1_BLEND_FORCE_BOLD
-#define t1_blend_max                  T1_BLEND_MAX
-
-  /* */
-
-
-  /* maximum number of Multiple Masters designs, as defined in the spec */
-#define T1_MAX_MM_DESIGNS     16
-
-  /* maximum number of Multiple Masters axes, as defined in the spec */
-#define T1_MAX_MM_AXIS        4
-
-  /* maximum number of elements in a design map */
-#define T1_MAX_MM_MAP_POINTS  20
-
-
-  /* this structure is used to store the BlendDesignMap entry for an axis */
-  typedef struct  PS_DesignMap_
-  {
-    FT_Byte    num_points;
-    FT_Long*   design_points;
-    FT_Fixed*  blend_points;
-
-  } PS_DesignMapRec, *PS_DesignMap;
-
-  /* backward compatible definition */
-  typedef PS_DesignMapRec  T1_DesignMap;
-
-
-  typedef struct  PS_BlendRec_
-  {
-    FT_UInt          num_designs;
-    FT_UInt          num_axis;
-
-    FT_String*       axis_names[T1_MAX_MM_AXIS];
-    FT_Fixed*        design_pos[T1_MAX_MM_DESIGNS];
-    PS_DesignMapRec  design_map[T1_MAX_MM_AXIS];
-
-    FT_Fixed*        weight_vector;
-    FT_Fixed*        default_weight_vector;
-
-    PS_FontInfo      font_infos[T1_MAX_MM_DESIGNS + 1];
-    PS_Private       privates  [T1_MAX_MM_DESIGNS + 1];
-
-    FT_ULong         blend_bitflags;
-
-    FT_BBox*         bboxes    [T1_MAX_MM_DESIGNS + 1];
-
-    /* since 2.3.0 */
-
-    /* undocumented, optional: the default design instance;   */
-    /* corresponds to default_weight_vector --                */
-    /* num_default_design_vector == 0 means it is not present */
-    /* in the font and associated metrics files               */
-    FT_UInt          default_design_vector[T1_MAX_MM_DESIGNS];
-    FT_UInt          num_default_design_vector;
-
-  } PS_BlendRec, *PS_Blend;
-
-
-  /* backward compatible definition */
-  typedef PS_BlendRec  T1_Blend;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    CID_FaceDictRec                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to represent data in a CID top-level dictionary.  */
-  /*                                                                       */
-  typedef struct  CID_FaceDictRec_
-  {
-    PS_PrivateRec  private_dict;
-
-    FT_UInt        len_buildchar;
-    FT_Fixed       forcebold_threshold;
-    FT_Pos         stroke_width;
-    FT_Fixed       expansion_factor;
-
-    FT_Byte        paint_type;
-    FT_Byte        font_type;
-    FT_Matrix      font_matrix;
-    FT_Vector      font_offset;
-
-    FT_UInt        num_subrs;
-    FT_ULong       subrmap_offset;
-    FT_Int         sd_bytes;
-
-  } CID_FaceDictRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    CID_FaceDict                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a @CID_FaceDictRec structure.                          */
-  /*                                                                       */
-  typedef struct CID_FaceDictRec_*  CID_FaceDict;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    CID_FontDict                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This type is equivalent to @CID_FaceDictRec.  It is deprecated but */
-  /*    kept to maintain source compatibility between various versions of  */
-  /*    FreeType.                                                          */
-  /*                                                                       */
-  typedef CID_FaceDictRec  CID_FontDict;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    CID_FaceInfoRec                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to represent CID Face information.                */
-  /*                                                                       */
-  typedef struct  CID_FaceInfoRec_
-  {
-    FT_String*      cid_font_name;
-    FT_Fixed        cid_version;
-    FT_Int          cid_font_type;
-
-    FT_String*      registry;
-    FT_String*      ordering;
-    FT_Int          supplement;
-
-    PS_FontInfoRec  font_info;
-    FT_BBox         font_bbox;
-    FT_ULong        uid_base;
-
-    FT_Int          num_xuid;
-    FT_ULong        xuid[16];
-
-    FT_ULong        cidmap_offset;
-    FT_Int          fd_bytes;
-    FT_Int          gd_bytes;
-    FT_ULong        cid_count;
-
-    FT_Int          num_dicts;
-    CID_FaceDict    font_dicts;
-
-    FT_ULong        data_offset;
-
-  } CID_FaceInfoRec;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    CID_FaceInfo                                                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A handle to a @CID_FaceInfoRec structure.                          */
-  /*                                                                       */
-  typedef struct CID_FaceInfoRec_*  CID_FaceInfo;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    CID_Info                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*   This type is equivalent to @CID_FaceInfoRec.  It is deprecated but  */
-  /*   kept to maintain source compatibility between various versions of   */
-  /*   FreeType.                                                           */
-  /*                                                                       */
-  typedef CID_FaceInfoRec  CID_Info;
-
-
-  /************************************************************************
-   *
-   * @function:
-   *    FT_Has_PS_Glyph_Names
-   *
-   * @description:
-   *    Return true if a given face provides reliable PostScript glyph
-   *    names.  This is similar to using the @FT_HAS_GLYPH_NAMES macro,
-   *    except that certain fonts (mostly TrueType) contain incorrect
-   *    glyph name tables.
-   *
-   *    When this function returns true, the caller is sure that the glyph
-   *    names returned by @FT_Get_Glyph_Name are reliable.
-   *
-   * @input:
-   *    face ::
-   *       face handle
-   *
-   * @return:
-   *    Boolean.  True if glyph names are reliable.
-   *
-   */
-  FT_EXPORT( FT_Int )
-  FT_Has_PS_Glyph_Names( FT_Face  face );
-
-
-  /************************************************************************
-   *
-   * @function:
-   *    FT_Get_PS_Font_Info
-   *
-   * @description:
-   *    Retrieve the @PS_FontInfoRec structure corresponding to a given
-   *    PostScript font.
-   *
-   * @input:
-   *    face ::
-   *       PostScript face handle.
-   *
-   * @output:
-   *    afont_info ::
-   *       Output font info structure pointer.
-   *
-   * @return:
-   *    FreeType error code.  0~means success.
-   *
-   * @note:
-   *    String pointers within the @PS_FontInfoRec structure are owned by
-   *    the face and don't need to be freed by the caller.  Missing entries
-   *    in the font's FontInfo dictionary are represented by NULL pointers.
-   *
-   *    If the font's format is not PostScript-based, this function will
-   *    return the `FT_Err_Invalid_Argument' error code.
-   *
-   */
-  FT_EXPORT( FT_Error )
-  FT_Get_PS_Font_Info( FT_Face      face,
-                       PS_FontInfo  afont_info );
-
-
-  /************************************************************************
-   *
-   * @function:
-   *    FT_Get_PS_Font_Private
-   *
-   * @description:
-   *    Retrieve the @PS_PrivateRec structure corresponding to a given
-   *    PostScript font.
-   *
-   * @input:
-   *    face ::
-   *       PostScript face handle.
-   *
-   * @output:
-   *    afont_private ::
-   *       Output private dictionary structure pointer.
-   *
-   * @return:
-   *    FreeType error code.  0~means success.
-   *
-   * @note:
-   *    The string pointers within the @PS_PrivateRec structure are owned by
-   *    the face and don't need to be freed by the caller.
-   *
-   *    If the font's format is not PostScript-based, this function returns
-   *    the `FT_Err_Invalid_Argument' error code.
-   *
-   */
-  FT_EXPORT( FT_Error )
-  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.                                                        */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    T1_ENCODING_TYPE_NONE ::                                           */
-  /*    T1_ENCODING_TYPE_ARRAY ::                                          */
-  /*    T1_ENCODING_TYPE_STANDARD ::                                       */
-  /*    T1_ENCODING_TYPE_ISOLATIN1 ::                                      */
-  /*    T1_ENCODING_TYPE_EXPERT ::                                         */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.4.8                                                              */
-  /*                                                                       */
-  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.                           */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    PS_DICT_FONT_TYPE ::                                               */
-  /*    PS_DICT_FONT_MATRIX ::                                             */
-  /*    PS_DICT_FONT_BBOX ::                                               */
-  /*    PS_DICT_PAINT_TYPE ::                                              */
-  /*    PS_DICT_FONT_NAME ::                                               */
-  /*    PS_DICT_UNIQUE_ID ::                                               */
-  /*    PS_DICT_NUM_CHAR_STRINGS ::                                        */
-  /*    PS_DICT_CHAR_STRING_KEY ::                                         */
-  /*    PS_DICT_CHAR_STRING ::                                             */
-  /*    PS_DICT_ENCODING_TYPE ::                                           */
-  /*    PS_DICT_ENCODING_ENTRY ::                                          */
-  /*    PS_DICT_NUM_SUBRS ::                                               */
-  /*    PS_DICT_SUBR ::                                                    */
-  /*    PS_DICT_STD_HW ::                                                  */
-  /*    PS_DICT_STD_VW ::                                                  */
-  /*    PS_DICT_NUM_BLUE_VALUES ::                                         */
-  /*    PS_DICT_BLUE_VALUE ::                                              */
-  /*    PS_DICT_BLUE_FUZZ ::                                               */
-  /*    PS_DICT_NUM_OTHER_BLUES ::                                         */
-  /*    PS_DICT_OTHER_BLUE ::                                              */
-  /*    PS_DICT_NUM_FAMILY_BLUES ::                                        */
-  /*    PS_DICT_FAMILY_BLUE ::                                             */
-  /*    PS_DICT_NUM_FAMILY_OTHER_BLUES ::                                  */
-  /*    PS_DICT_FAMILY_OTHER_BLUE ::                                       */
-  /*    PS_DICT_BLUE_SCALE ::                                              */
-  /*    PS_DICT_BLUE_SHIFT ::                                              */
-  /*    PS_DICT_NUM_STEM_SNAP_H ::                                         */
-  /*    PS_DICT_STEM_SNAP_H ::                                             */
-  /*    PS_DICT_NUM_STEM_SNAP_V ::                                         */
-  /*    PS_DICT_STEM_SNAP_V ::                                             */
-  /*    PS_DICT_FORCE_BOLD ::                                              */
-  /*    PS_DICT_RND_STEM_UP ::                                             */
-  /*    PS_DICT_MIN_FEATURE ::                                             */
-  /*    PS_DICT_LEN_IV ::                                                  */
-  /*    PS_DICT_PASSWORD ::                                                */
-  /*    PS_DICT_LANGUAGE_GROUP ::                                          */
-  /*    PS_DICT_VERSION ::                                                 */
-  /*    PS_DICT_NOTICE ::                                                  */
-  /*    PS_DICT_FULL_NAME ::                                               */
-  /*    PS_DICT_FAMILY_NAME ::                                             */
-  /*    PS_DICT_WEIGHT ::                                                  */
-  /*    PS_DICT_IS_FIXED_PITCH ::                                          */
-  /*    PS_DICT_UNDERLINE_POSITION ::                                      */
-  /*    PS_DICT_UNDERLINE_THICKNESS ::                                     */
-  /*    PS_DICT_FS_TYPE ::                                                 */
-  /*    PS_DICT_ITALIC_ANGLE ::                                            */
-  /*                                                                       */
-  /* <Since>                                                               */
-  /*    2.4.8                                                              */
-  /*                                                                       */
-  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.
-   *
-   * @since:
-   *    2.4.8
-   *
-   */
-  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
-
-#endif /* T1TABLES_H_ */
-
-
-/* END */

+ 0 - 1236
freetype/include/freetype/ttnameid.h

@@ -1,1236 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ttnameid.h                                                             */
-/*                                                                         */
-/*    TrueType name ID definitions (specification only).                   */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef TTNAMEID_H_
-#define TTNAMEID_H_
-
-
-#include <ft2build.h>
-
-
-FT_BEGIN_HEADER
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    truetype_tables                                                    */
-  /*                                                                       */
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* Possible values for the `platform' identifier code in the name        */
-  /* records of an SFNT `name' table.                                      */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /***********************************************************************
-   *
-   * @enum:
-   *   TT_PLATFORM_XXX
-   *
-   * @description:
-   *   A list of valid values for the `platform_id' identifier code in
-   *   @FT_CharMapRec and @FT_SfntName structures.
-   *
-   * @values:
-   *   TT_PLATFORM_APPLE_UNICODE ::
-   *     Used by Apple to indicate a Unicode character map and/or name entry.
-   *     See @TT_APPLE_ID_XXX for corresponding `encoding_id' values.  Note
-   *     that name entries in this format are coded as big-endian UCS-2
-   *     character codes _only_.
-   *
-   *   TT_PLATFORM_MACINTOSH ::
-   *     Used by Apple to indicate a MacOS-specific charmap and/or name entry.
-   *     See @TT_MAC_ID_XXX for corresponding `encoding_id' values.  Note that
-   *     most TrueType fonts contain an Apple roman charmap to be usable on
-   *     MacOS systems (even if they contain a Microsoft charmap as well).
-   *
-   *   TT_PLATFORM_ISO ::
-   *     This value was used to specify ISO/IEC 10646 charmaps.  It is however
-   *     now deprecated.  See @TT_ISO_ID_XXX for a list of corresponding
-   *     `encoding_id' values.
-   *
-   *   TT_PLATFORM_MICROSOFT ::
-   *     Used by Microsoft to indicate Windows-specific charmaps.  See
-   *     @TT_MS_ID_XXX for a list of corresponding `encoding_id' values.
-   *     Note that most fonts contain a Unicode charmap using
-   *     (TT_PLATFORM_MICROSOFT, @TT_MS_ID_UNICODE_CS).
-   *
-   *   TT_PLATFORM_CUSTOM ::
-   *     Used to indicate application-specific charmaps.
-   *
-   *   TT_PLATFORM_ADOBE ::
-   *     This value isn't part of any font format specification, but is used
-   *     by FreeType to report Adobe-specific charmaps in an @FT_CharMapRec
-   *     structure.  See @TT_ADOBE_ID_XXX.
-   */
-
-#define TT_PLATFORM_APPLE_UNICODE  0
-#define TT_PLATFORM_MACINTOSH      1
-#define TT_PLATFORM_ISO            2 /* deprecated */
-#define TT_PLATFORM_MICROSOFT      3
-#define TT_PLATFORM_CUSTOM         4
-#define TT_PLATFORM_ADOBE          7 /* artificial */
-
-
-  /***********************************************************************
-   *
-   * @enum:
-   *   TT_APPLE_ID_XXX
-   *
-   * @description:
-   *   A list of valid values for the `encoding_id' for
-   *   @TT_PLATFORM_APPLE_UNICODE charmaps and name entries.
-   *
-   * @values:
-   *   TT_APPLE_ID_DEFAULT ::
-   *     Unicode version 1.0.
-   *
-   *   TT_APPLE_ID_UNICODE_1_1 ::
-   *     Unicode 1.1; specifies Hangul characters starting at U+34xx.
-   *
-   *   TT_APPLE_ID_ISO_10646 ::
-   *     Deprecated (identical to preceding).
-   *
-   *   TT_APPLE_ID_UNICODE_2_0 ::
-   *     Unicode 2.0 and beyond (UTF-16 BMP only).
-   *
-   *   TT_APPLE_ID_UNICODE_32 ::
-   *     Unicode 3.1 and beyond, using UTF-32.
-   *
-   *   TT_APPLE_ID_VARIANT_SELECTOR ::
-   *     From Adobe, not Apple.  Not a normal cmap.  Specifies variations
-   *     on a real cmap.
-   *
-   *   TT_APPLE_ID_FULL_UNICODE ::
-   *     Used for fallback fonts that provide complete Unicode coverage with
-   *     a type~13 cmap.
-   */
-
-#define TT_APPLE_ID_DEFAULT           0 /* Unicode 1.0                   */
-#define TT_APPLE_ID_UNICODE_1_1       1 /* specify Hangul at U+34xx      */
-#define TT_APPLE_ID_ISO_10646         2 /* deprecated                    */
-#define TT_APPLE_ID_UNICODE_2_0       3 /* or later                      */
-#define TT_APPLE_ID_UNICODE_32        4 /* 2.0 or later, full repertoire */
-#define TT_APPLE_ID_VARIANT_SELECTOR  5 /* variation selector data       */
-#define TT_APPLE_ID_FULL_UNICODE      6 /* used with type 13 cmaps       */
-
-
-  /***********************************************************************
-   *
-   * @enum:
-   *   TT_MAC_ID_XXX
-   *
-   * @description:
-   *   A list of valid values for the `encoding_id' for
-   *   @TT_PLATFORM_MACINTOSH charmaps and name entries.
-   */
-
-#define TT_MAC_ID_ROMAN                 0
-#define TT_MAC_ID_JAPANESE              1
-#define TT_MAC_ID_TRADITIONAL_CHINESE   2
-#define TT_MAC_ID_KOREAN                3
-#define TT_MAC_ID_ARABIC                4
-#define TT_MAC_ID_HEBREW                5
-#define TT_MAC_ID_GREEK                 6
-#define TT_MAC_ID_RUSSIAN               7
-#define TT_MAC_ID_RSYMBOL               8
-#define TT_MAC_ID_DEVANAGARI            9
-#define TT_MAC_ID_GURMUKHI             10
-#define TT_MAC_ID_GUJARATI             11
-#define TT_MAC_ID_ORIYA                12
-#define TT_MAC_ID_BENGALI              13
-#define TT_MAC_ID_TAMIL                14
-#define TT_MAC_ID_TELUGU               15
-#define TT_MAC_ID_KANNADA              16
-#define TT_MAC_ID_MALAYALAM            17
-#define TT_MAC_ID_SINHALESE            18
-#define TT_MAC_ID_BURMESE              19
-#define TT_MAC_ID_KHMER                20
-#define TT_MAC_ID_THAI                 21
-#define TT_MAC_ID_LAOTIAN              22
-#define TT_MAC_ID_GEORGIAN             23
-#define TT_MAC_ID_ARMENIAN             24
-#define TT_MAC_ID_MALDIVIAN            25
-#define TT_MAC_ID_SIMPLIFIED_CHINESE   25
-#define TT_MAC_ID_TIBETAN              26
-#define TT_MAC_ID_MONGOLIAN            27
-#define TT_MAC_ID_GEEZ                 28
-#define TT_MAC_ID_SLAVIC               29
-#define TT_MAC_ID_VIETNAMESE           30
-#define TT_MAC_ID_SINDHI               31
-#define TT_MAC_ID_UNINTERP             32
-
-
-  /***********************************************************************
-   *
-   * @enum:
-   *   TT_ISO_ID_XXX
-   *
-   * @description:
-   *   A list of valid values for the `encoding_id' for
-   *   @TT_PLATFORM_ISO charmaps and name entries.
-   *
-   *   Their use is now deprecated.
-   *
-   * @values:
-   *   TT_ISO_ID_7BIT_ASCII ::
-   *     ASCII.
-   *   TT_ISO_ID_10646 ::
-   *     ISO/10646.
-   *   TT_ISO_ID_8859_1 ::
-   *     Also known as Latin-1.
-   */
-
-#define TT_ISO_ID_7BIT_ASCII  0
-#define TT_ISO_ID_10646       1
-#define TT_ISO_ID_8859_1      2
-
-
-  /***********************************************************************
-   *
-   * @enum:
-   *   TT_MS_ID_XXX
-   *
-   * @description:
-   *   A list of valid values for the `encoding_id' for
-   *   @TT_PLATFORM_MICROSOFT charmaps and name entries.
-   *
-   * @values:
-   *   TT_MS_ID_SYMBOL_CS ::
-   *     Microsoft symbol encoding.  See @FT_ENCODING_MS_SYMBOL.
-   *
-   *   TT_MS_ID_UNICODE_CS ::
-   *     Microsoft WGL4 charmap, matching Unicode.  See
-   *     @FT_ENCODING_UNICODE.
-   *
-   *   TT_MS_ID_SJIS ::
-   *     Shift JIS Japanese encoding.  See @FT_ENCODING_SJIS.
-   *
-   *   TT_MS_ID_PRC ::
-   *     Chinese encodings as used in the People's Republic of China (PRC).
-   *     This means the encodings GB~2312 and its supersets GBK and
-   *     GB~18030.  See @FT_ENCODING_PRC.
-   *
-   *   TT_MS_ID_BIG_5 ::
-   *     Traditional Chinese as used in Taiwan and Hong Kong.  See
-   *     @FT_ENCODING_BIG5.
-   *
-   *   TT_MS_ID_WANSUNG ::
-   *     Korean Extended Wansung encoding.  See @FT_ENCODING_WANSUNG.
-   *
-   *   TT_MS_ID_JOHAB ::
-   *     Korean Johab encoding.  See @FT_ENCODING_JOHAB.
-   *
-   *   TT_MS_ID_UCS_4 ::
-   *     UCS-4 or UTF-32 charmaps.  This has been added to the OpenType
-   *     specification version 1.4 (mid-2001).
-   */
-
-#define TT_MS_ID_SYMBOL_CS    0
-#define TT_MS_ID_UNICODE_CS   1
-#define TT_MS_ID_SJIS         2
-#define TT_MS_ID_PRC          3
-#define TT_MS_ID_BIG_5        4
-#define TT_MS_ID_WANSUNG      5
-#define TT_MS_ID_JOHAB        6
-#define TT_MS_ID_UCS_4       10
-
-  /* this value is deprecated */
-#define TT_MS_ID_GB2312  TT_MS_ID_PRC
-
-
-  /***********************************************************************
-   *
-   * @enum:
-   *   TT_ADOBE_ID_XXX
-   *
-   * @description:
-   *   A list of valid values for the `encoding_id' for
-   *   @TT_PLATFORM_ADOBE charmaps.  This is a FreeType-specific extension!
-   *
-   * @values:
-   *   TT_ADOBE_ID_STANDARD ::
-   *     Adobe standard encoding.
-   *   TT_ADOBE_ID_EXPERT ::
-   *     Adobe expert encoding.
-   *   TT_ADOBE_ID_CUSTOM ::
-   *     Adobe custom encoding.
-   *   TT_ADOBE_ID_LATIN_1 ::
-   *     Adobe Latin~1 encoding.
-   */
-
-#define TT_ADOBE_ID_STANDARD  0
-#define TT_ADOBE_ID_EXPERT    1
-#define TT_ADOBE_ID_CUSTOM    2
-#define TT_ADOBE_ID_LATIN_1   3
-
-
-  /***********************************************************************
-   *
-   * @enum:
-   *   TT_MAC_LANGID_XXX
-   *
-   * @description:
-   *   Possible values of the language identifier field in the name records
-   *   of the SFNT `name' table if the `platform' identifier code is
-   *   @TT_PLATFORM_MACINTOSH.  These values are also used as return values
-   *   for function @FT_Get_CMap_Language_ID.
-   *
-   *   The canonical source for Apple's IDs is
-   *
-   *     https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html
-   */
-
-#define TT_MAC_LANGID_ENGLISH                       0
-#define TT_MAC_LANGID_FRENCH                        1
-#define TT_MAC_LANGID_GERMAN                        2
-#define TT_MAC_LANGID_ITALIAN                       3
-#define TT_MAC_LANGID_DUTCH                         4
-#define TT_MAC_LANGID_SWEDISH                       5
-#define TT_MAC_LANGID_SPANISH                       6
-#define TT_MAC_LANGID_DANISH                        7
-#define TT_MAC_LANGID_PORTUGUESE                    8
-#define TT_MAC_LANGID_NORWEGIAN                     9
-#define TT_MAC_LANGID_HEBREW                       10
-#define TT_MAC_LANGID_JAPANESE                     11
-#define TT_MAC_LANGID_ARABIC                       12
-#define TT_MAC_LANGID_FINNISH                      13
-#define TT_MAC_LANGID_GREEK                        14
-#define TT_MAC_LANGID_ICELANDIC                    15
-#define TT_MAC_LANGID_MALTESE                      16
-#define TT_MAC_LANGID_TURKISH                      17
-#define TT_MAC_LANGID_CROATIAN                     18
-#define TT_MAC_LANGID_CHINESE_TRADITIONAL          19
-#define TT_MAC_LANGID_URDU                         20
-#define TT_MAC_LANGID_HINDI                        21
-#define TT_MAC_LANGID_THAI                         22
-#define TT_MAC_LANGID_KOREAN                       23
-#define TT_MAC_LANGID_LITHUANIAN                   24
-#define TT_MAC_LANGID_POLISH                       25
-#define TT_MAC_LANGID_HUNGARIAN                    26
-#define TT_MAC_LANGID_ESTONIAN                     27
-#define TT_MAC_LANGID_LETTISH                      28
-#define TT_MAC_LANGID_SAAMISK                      29
-#define TT_MAC_LANGID_FAEROESE                     30
-#define TT_MAC_LANGID_FARSI                        31
-#define TT_MAC_LANGID_RUSSIAN                      32
-#define TT_MAC_LANGID_CHINESE_SIMPLIFIED           33
-#define TT_MAC_LANGID_FLEMISH                      34
-#define TT_MAC_LANGID_IRISH                        35
-#define TT_MAC_LANGID_ALBANIAN                     36
-#define TT_MAC_LANGID_ROMANIAN                     37
-#define TT_MAC_LANGID_CZECH                        38
-#define TT_MAC_LANGID_SLOVAK                       39
-#define TT_MAC_LANGID_SLOVENIAN                    40
-#define TT_MAC_LANGID_YIDDISH                      41
-#define TT_MAC_LANGID_SERBIAN                      42
-#define TT_MAC_LANGID_MACEDONIAN                   43
-#define TT_MAC_LANGID_BULGARIAN                    44
-#define TT_MAC_LANGID_UKRAINIAN                    45
-#define TT_MAC_LANGID_BYELORUSSIAN                 46
-#define TT_MAC_LANGID_UZBEK                        47
-#define TT_MAC_LANGID_KAZAKH                       48
-#define TT_MAC_LANGID_AZERBAIJANI                  49
-#define TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT  49
-#define TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT    50
-#define TT_MAC_LANGID_ARMENIAN                     51
-#define TT_MAC_LANGID_GEORGIAN                     52
-#define TT_MAC_LANGID_MOLDAVIAN                    53
-#define TT_MAC_LANGID_KIRGHIZ                      54
-#define TT_MAC_LANGID_TAJIKI                       55
-#define TT_MAC_LANGID_TURKMEN                      56
-#define TT_MAC_LANGID_MONGOLIAN                    57
-#define TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT   57
-#define TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT    58
-#define TT_MAC_LANGID_PASHTO                       59
-#define TT_MAC_LANGID_KURDISH                      60
-#define TT_MAC_LANGID_KASHMIRI                     61
-#define TT_MAC_LANGID_SINDHI                       62
-#define TT_MAC_LANGID_TIBETAN                      63
-#define TT_MAC_LANGID_NEPALI                       64
-#define TT_MAC_LANGID_SANSKRIT                     65
-#define TT_MAC_LANGID_MARATHI                      66
-#define TT_MAC_LANGID_BENGALI                      67
-#define TT_MAC_LANGID_ASSAMESE                     68
-#define TT_MAC_LANGID_GUJARATI                     69
-#define TT_MAC_LANGID_PUNJABI                      70
-#define TT_MAC_LANGID_ORIYA                        71
-#define TT_MAC_LANGID_MALAYALAM                    72
-#define TT_MAC_LANGID_KANNADA                      73
-#define TT_MAC_LANGID_TAMIL                        74
-#define TT_MAC_LANGID_TELUGU                       75
-#define TT_MAC_LANGID_SINHALESE                    76
-#define TT_MAC_LANGID_BURMESE                      77
-#define TT_MAC_LANGID_KHMER                        78
-#define TT_MAC_LANGID_LAO                          79
-#define TT_MAC_LANGID_VIETNAMESE                   80
-#define TT_MAC_LANGID_INDONESIAN                   81
-#define TT_MAC_LANGID_TAGALOG                      82
-#define TT_MAC_LANGID_MALAY_ROMAN_SCRIPT           83
-#define TT_MAC_LANGID_MALAY_ARABIC_SCRIPT          84
-#define TT_MAC_LANGID_AMHARIC                      85
-#define TT_MAC_LANGID_TIGRINYA                     86
-#define TT_MAC_LANGID_GALLA                        87
-#define TT_MAC_LANGID_SOMALI                       88
-#define TT_MAC_LANGID_SWAHILI                      89
-#define TT_MAC_LANGID_RUANDA                       90
-#define TT_MAC_LANGID_RUNDI                        91
-#define TT_MAC_LANGID_CHEWA                        92
-#define TT_MAC_LANGID_MALAGASY                     93
-#define TT_MAC_LANGID_ESPERANTO                    94
-#define TT_MAC_LANGID_WELSH                       128
-#define TT_MAC_LANGID_BASQUE                      129
-#define TT_MAC_LANGID_CATALAN                     130
-#define TT_MAC_LANGID_LATIN                       131
-#define TT_MAC_LANGID_QUECHUA                     132
-#define TT_MAC_LANGID_GUARANI                     133
-#define TT_MAC_LANGID_AYMARA                      134
-#define TT_MAC_LANGID_TATAR                       135
-#define TT_MAC_LANGID_UIGHUR                      136
-#define TT_MAC_LANGID_DZONGKHA                    137
-#define TT_MAC_LANGID_JAVANESE                    138
-#define TT_MAC_LANGID_SUNDANESE                   139
-
-  /* The following codes are new as of 2000-03-10 */
-#define TT_MAC_LANGID_GALICIAN                    140
-#define TT_MAC_LANGID_AFRIKAANS                   141
-#define TT_MAC_LANGID_BRETON                      142
-#define TT_MAC_LANGID_INUKTITUT                   143
-#define TT_MAC_LANGID_SCOTTISH_GAELIC             144
-#define TT_MAC_LANGID_MANX_GAELIC                 145
-#define TT_MAC_LANGID_IRISH_GAELIC                146
-#define TT_MAC_LANGID_TONGAN                      147
-#define TT_MAC_LANGID_GREEK_POLYTONIC             148
-#define TT_MAC_LANGID_GREELANDIC                  149
-#define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT    150
-
-
-  /***********************************************************************
-   *
-   * @enum:
-   *   TT_MS_LANGID_XXX
-   *
-   * @description:
-   *   Possible values of the language identifier field in the name records
-   *   of the SFNT `name' table if the `platform' identifier code is
-   *   @TT_PLATFORM_MICROSOFT.  These values are also used as return values
-   *   for function @FT_Get_CMap_Language_ID.
-   *
-   *   The canonical source for Microsoft's IDs is
-   *
-   *     https://www.microsoft.com/globaldev/reference/lcid-all.mspx ,
-   *
-   *   however, we only provide macros for language identifiers present in
-   *   the OpenType specification: Microsoft has abandoned the concept of
-   *   LCIDs (language code identifiers), and format~1 of the `name' table
-   *   provides a better mechanism for languages not covered here.
-   *
-   *   More legacy values not listed in the reference can be found in the
-   *   @FT_TRUETYPE_IDS_H header file.
-   */
-
-#define TT_MS_LANGID_ARABIC_SAUDI_ARABIA               0x0401
-#define TT_MS_LANGID_ARABIC_IRAQ                       0x0801
-#define TT_MS_LANGID_ARABIC_EGYPT                      0x0C01
-#define TT_MS_LANGID_ARABIC_LIBYA                      0x1001
-#define TT_MS_LANGID_ARABIC_ALGERIA                    0x1401
-#define TT_MS_LANGID_ARABIC_MOROCCO                    0x1801
-#define TT_MS_LANGID_ARABIC_TUNISIA                    0x1C01
-#define TT_MS_LANGID_ARABIC_OMAN                       0x2001
-#define TT_MS_LANGID_ARABIC_YEMEN                      0x2401
-#define TT_MS_LANGID_ARABIC_SYRIA                      0x2801
-#define TT_MS_LANGID_ARABIC_JORDAN                     0x2C01
-#define TT_MS_LANGID_ARABIC_LEBANON                    0x3001
-#define TT_MS_LANGID_ARABIC_KUWAIT                     0x3401
-#define TT_MS_LANGID_ARABIC_UAE                        0x3801
-#define TT_MS_LANGID_ARABIC_BAHRAIN                    0x3C01
-#define TT_MS_LANGID_ARABIC_QATAR                      0x4001
-#define TT_MS_LANGID_BULGARIAN_BULGARIA                0x0402
-#define TT_MS_LANGID_CATALAN_CATALAN                   0x0403
-#define TT_MS_LANGID_CHINESE_TAIWAN                    0x0404
-#define TT_MS_LANGID_CHINESE_PRC                       0x0804
-#define TT_MS_LANGID_CHINESE_HONG_KONG                 0x0C04
-#define TT_MS_LANGID_CHINESE_SINGAPORE                 0x1004
-#define TT_MS_LANGID_CHINESE_MACAO                     0x1404
-#define TT_MS_LANGID_CZECH_CZECH_REPUBLIC              0x0405
-#define TT_MS_LANGID_DANISH_DENMARK                    0x0406
-#define TT_MS_LANGID_GERMAN_GERMANY                    0x0407
-#define TT_MS_LANGID_GERMAN_SWITZERLAND                0x0807
-#define TT_MS_LANGID_GERMAN_AUSTRIA                    0x0C07
-#define TT_MS_LANGID_GERMAN_LUXEMBOURG                 0x1007
-#define TT_MS_LANGID_GERMAN_LIECHTENSTEIN              0x1407
-#define TT_MS_LANGID_GREEK_GREECE                      0x0408
-#define TT_MS_LANGID_ENGLISH_UNITED_STATES             0x0409
-#define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM            0x0809
-#define TT_MS_LANGID_ENGLISH_AUSTRALIA                 0x0C09
-#define TT_MS_LANGID_ENGLISH_CANADA                    0x1009
-#define TT_MS_LANGID_ENGLISH_NEW_ZEALAND               0x1409
-#define TT_MS_LANGID_ENGLISH_IRELAND                   0x1809
-#define TT_MS_LANGID_ENGLISH_SOUTH_AFRICA              0x1C09
-#define TT_MS_LANGID_ENGLISH_JAMAICA                   0x2009
-#define TT_MS_LANGID_ENGLISH_CARIBBEAN                 0x2409
-#define TT_MS_LANGID_ENGLISH_BELIZE                    0x2809
-#define TT_MS_LANGID_ENGLISH_TRINIDAD                  0x2C09
-#define TT_MS_LANGID_ENGLISH_ZIMBABWE                  0x3009
-#define TT_MS_LANGID_ENGLISH_PHILIPPINES               0x3409
-#define TT_MS_LANGID_ENGLISH_INDIA                     0x4009
-#define TT_MS_LANGID_ENGLISH_MALAYSIA                  0x4409
-#define TT_MS_LANGID_ENGLISH_SINGAPORE                 0x4809
-#define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT    0x040A
-#define TT_MS_LANGID_SPANISH_MEXICO                    0x080A
-#define TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT         0x0C0A
-#define TT_MS_LANGID_SPANISH_GUATEMALA                 0x100A
-#define TT_MS_LANGID_SPANISH_COSTA_RICA                0x140A
-#define TT_MS_LANGID_SPANISH_PANAMA                    0x180A
-#define TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC        0x1C0A
-#define TT_MS_LANGID_SPANISH_VENEZUELA                 0x200A
-#define TT_MS_LANGID_SPANISH_COLOMBIA                  0x240A
-#define TT_MS_LANGID_SPANISH_PERU                      0x280A
-#define TT_MS_LANGID_SPANISH_ARGENTINA                 0x2C0A
-#define TT_MS_LANGID_SPANISH_ECUADOR                   0x300A
-#define TT_MS_LANGID_SPANISH_CHILE                     0x340A
-#define TT_MS_LANGID_SPANISH_URUGUAY                   0x380A
-#define TT_MS_LANGID_SPANISH_PARAGUAY                  0x3C0A
-#define TT_MS_LANGID_SPANISH_BOLIVIA                   0x400A
-#define TT_MS_LANGID_SPANISH_EL_SALVADOR               0x440A
-#define TT_MS_LANGID_SPANISH_HONDURAS                  0x480A
-#define TT_MS_LANGID_SPANISH_NICARAGUA                 0x4C0A
-#define TT_MS_LANGID_SPANISH_PUERTO_RICO               0x500A
-#define TT_MS_LANGID_SPANISH_UNITED_STATES             0x540A
-#define TT_MS_LANGID_FINNISH_FINLAND                   0x040B
-#define TT_MS_LANGID_FRENCH_FRANCE                     0x040C
-#define TT_MS_LANGID_FRENCH_BELGIUM                    0x080C
-#define TT_MS_LANGID_FRENCH_CANADA                     0x0C0C
-#define TT_MS_LANGID_FRENCH_SWITZERLAND                0x100C
-#define TT_MS_LANGID_FRENCH_LUXEMBOURG                 0x140C
-#define TT_MS_LANGID_FRENCH_MONACO                     0x180C
-#define TT_MS_LANGID_HEBREW_ISRAEL                     0x040D
-#define TT_MS_LANGID_HUNGARIAN_HUNGARY                 0x040E
-#define TT_MS_LANGID_ICELANDIC_ICELAND                 0x040F
-#define TT_MS_LANGID_ITALIAN_ITALY                     0x0410
-#define TT_MS_LANGID_ITALIAN_SWITZERLAND               0x0810
-#define TT_MS_LANGID_JAPANESE_JAPAN                    0x0411
-#define TT_MS_LANGID_KOREAN_KOREA                      0x0412
-#define TT_MS_LANGID_DUTCH_NETHERLANDS                 0x0413
-#define TT_MS_LANGID_DUTCH_BELGIUM                     0x0813
-#define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL           0x0414
-#define TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK          0x0814
-#define TT_MS_LANGID_POLISH_POLAND                     0x0415
-#define TT_MS_LANGID_PORTUGUESE_BRAZIL                 0x0416
-#define TT_MS_LANGID_PORTUGUESE_PORTUGAL               0x0816
-#define TT_MS_LANGID_ROMANSH_SWITZERLAND               0x0417
-#define TT_MS_LANGID_ROMANIAN_ROMANIA                  0x0418
-#define TT_MS_LANGID_RUSSIAN_RUSSIA                    0x0419
-#define TT_MS_LANGID_CROATIAN_CROATIA                  0x041A
-#define TT_MS_LANGID_SERBIAN_SERBIA_LATIN              0x081A
-#define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC           0x0C1A
-#define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA       0x101A
-#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA        0x141A
-#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN         0x181A
-#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC      0x1C1A
-#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC      0x201A
-#define TT_MS_LANGID_SLOVAK_SLOVAKIA                   0x041B
-#define TT_MS_LANGID_ALBANIAN_ALBANIA                  0x041C
-#define TT_MS_LANGID_SWEDISH_SWEDEN                    0x041D
-#define TT_MS_LANGID_SWEDISH_FINLAND                   0x081D
-#define TT_MS_LANGID_THAI_THAILAND                     0x041E
-#define TT_MS_LANGID_TURKISH_TURKEY                    0x041F
-#define TT_MS_LANGID_URDU_PAKISTAN                     0x0420
-#define TT_MS_LANGID_INDONESIAN_INDONESIA              0x0421
-#define TT_MS_LANGID_UKRAINIAN_UKRAINE                 0x0422
-#define TT_MS_LANGID_BELARUSIAN_BELARUS                0x0423
-#define TT_MS_LANGID_SLOVENIAN_SLOVENIA                0x0424
-#define TT_MS_LANGID_ESTONIAN_ESTONIA                  0x0425
-#define TT_MS_LANGID_LATVIAN_LATVIA                    0x0426
-#define TT_MS_LANGID_LITHUANIAN_LITHUANIA              0x0427
-#define TT_MS_LANGID_TAJIK_TAJIKISTAN                  0x0428
-#define TT_MS_LANGID_VIETNAMESE_VIET_NAM               0x042A
-#define TT_MS_LANGID_ARMENIAN_ARMENIA                  0x042B
-#define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN            0x042C
-#define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC         0x082C
-#define TT_MS_LANGID_BASQUE_BASQUE                     0x042D
-#define TT_MS_LANGID_UPPER_SORBIAN_GERMANY             0x042E
-#define TT_MS_LANGID_LOWER_SORBIAN_GERMANY             0x082E
-#define TT_MS_LANGID_MACEDONIAN_MACEDONIA              0x042F
-#define TT_MS_LANGID_SETSWANA_SOUTH_AFRICA             0x0432
-#define TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA             0x0434
-#define TT_MS_LANGID_ISIZULU_SOUTH_AFRICA              0x0435
-#define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA            0x0436
-#define TT_MS_LANGID_GEORGIAN_GEORGIA                  0x0437
-#define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS           0x0438
-#define TT_MS_LANGID_HINDI_INDIA                       0x0439
-#define TT_MS_LANGID_MALTESE_MALTA                     0x043A
-#define TT_MS_LANGID_SAMI_NORTHERN_NORWAY              0x043B
-#define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN              0x083B
-#define TT_MS_LANGID_SAMI_NORTHERN_FINLAND             0x0C3B
-#define TT_MS_LANGID_SAMI_LULE_NORWAY                  0x103B
-#define TT_MS_LANGID_SAMI_LULE_SWEDEN                  0x143B
-#define TT_MS_LANGID_SAMI_SOUTHERN_NORWAY              0x183B
-#define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN              0x1C3B
-#define TT_MS_LANGID_SAMI_SKOLT_FINLAND                0x203B
-#define TT_MS_LANGID_SAMI_INARI_FINLAND                0x243B
-#define TT_MS_LANGID_IRISH_IRELAND                     0x083C
-#define TT_MS_LANGID_MALAY_MALAYSIA                    0x043E
-#define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM           0x083E
-#define TT_MS_LANGID_KAZAKH_KAZAKHSTAN                 0x043F
-#define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic*/   0x0440
-#define TT_MS_LANGID_KISWAHILI_KENYA                   0x0441
-#define TT_MS_LANGID_TURKMEN_TURKMENISTAN              0x0442
-#define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN            0x0443
-#define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC         0x0843
-#define TT_MS_LANGID_TATAR_RUSSIA                      0x0444
-#define TT_MS_LANGID_BENGALI_INDIA                     0x0445
-#define TT_MS_LANGID_BENGALI_BANGLADESH                0x0845
-#define TT_MS_LANGID_PUNJABI_INDIA                     0x0446
-#define TT_MS_LANGID_GUJARATI_INDIA                    0x0447
-#define TT_MS_LANGID_ODIA_INDIA                        0x0448
-#define TT_MS_LANGID_TAMIL_INDIA                       0x0449
-#define TT_MS_LANGID_TELUGU_INDIA                      0x044A
-#define TT_MS_LANGID_KANNADA_INDIA                     0x044B
-#define TT_MS_LANGID_MALAYALAM_INDIA                   0x044C
-#define TT_MS_LANGID_ASSAMESE_INDIA                    0x044D
-#define TT_MS_LANGID_MARATHI_INDIA                     0x044E
-#define TT_MS_LANGID_SANSKRIT_INDIA                    0x044F
-#define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450
-#define TT_MS_LANGID_MONGOLIAN_PRC                     0x0850
-#define TT_MS_LANGID_TIBETAN_PRC                       0x0451
-#define TT_MS_LANGID_WELSH_UNITED_KINGDOM              0x0452
-#define TT_MS_LANGID_KHMER_CAMBODIA                    0x0453
-#define TT_MS_LANGID_LAO_LAOS                          0x0454
-#define TT_MS_LANGID_GALICIAN_GALICIAN                 0x0456
-#define TT_MS_LANGID_KONKANI_INDIA                     0x0457
-#define TT_MS_LANGID_SYRIAC_SYRIA                      0x045A
-#define TT_MS_LANGID_SINHALA_SRI_LANKA                 0x045B
-#define TT_MS_LANGID_INUKTITUT_CANADA                  0x045D
-#define TT_MS_LANGID_INUKTITUT_CANADA_LATIN            0x085D
-#define TT_MS_LANGID_AMHARIC_ETHIOPIA                  0x045E
-#define TT_MS_LANGID_TAMAZIGHT_ALGERIA                 0x085F
-#define TT_MS_LANGID_NEPALI_NEPAL                      0x0461
-#define TT_MS_LANGID_FRISIAN_NETHERLANDS               0x0462
-#define TT_MS_LANGID_PASHTO_AFGHANISTAN                0x0463
-#define TT_MS_LANGID_FILIPINO_PHILIPPINES              0x0464
-#define TT_MS_LANGID_DHIVEHI_MALDIVES                  0x0465
-#define TT_MS_LANGID_HAUSA_NIGERIA                     0x0468
-#define TT_MS_LANGID_YORUBA_NIGERIA                    0x046A
-#define TT_MS_LANGID_QUECHUA_BOLIVIA                   0x046B
-#define TT_MS_LANGID_QUECHUA_ECUADOR                   0x086B
-#define TT_MS_LANGID_QUECHUA_PERU                      0x0C6B
-#define TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA     0x046C
-#define TT_MS_LANGID_BASHKIR_RUSSIA                    0x046D
-#define TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG          0x046E
-#define TT_MS_LANGID_GREENLANDIC_GREENLAND             0x046F
-#define TT_MS_LANGID_IGBO_NIGERIA                      0x0470
-#define TT_MS_LANGID_YI_PRC                            0x0478
-#define TT_MS_LANGID_MAPUDUNGUN_CHILE                  0x047A
-#define TT_MS_LANGID_MOHAWK_MOHAWK                     0x047C
-#define TT_MS_LANGID_BRETON_FRANCE                     0x047E
-#define TT_MS_LANGID_UIGHUR_PRC                        0x0480
-#define TT_MS_LANGID_MAORI_NEW_ZEALAND                 0x0481
-#define TT_MS_LANGID_OCCITAN_FRANCE                    0x0482
-#define TT_MS_LANGID_CORSICAN_FRANCE                   0x0483
-#define TT_MS_LANGID_ALSATIAN_FRANCE                   0x0484
-#define TT_MS_LANGID_YAKUT_RUSSIA                      0x0485
-#define TT_MS_LANGID_KICHE_GUATEMALA                   0x0486
-#define TT_MS_LANGID_KINYARWANDA_RWANDA                0x0487
-#define TT_MS_LANGID_WOLOF_SENEGAL                     0x0488
-#define TT_MS_LANGID_DARI_AFGHANISTAN                  0x048C
-
-  /* */
-
-
-  /* legacy macro definitions not present in OpenType 1.8.1 */
-#define TT_MS_LANGID_ARABIC_GENERAL                    0x0001
-#define TT_MS_LANGID_CATALAN_SPAIN \
-          TT_MS_LANGID_CATALAN_CATALAN
-#define TT_MS_LANGID_CHINESE_GENERAL                   0x0004
-#define TT_MS_LANGID_CHINESE_MACAU \
-          TT_MS_LANGID_CHINESE_MACAO
-#define TT_MS_LANGID_GERMAN_LIECHTENSTEI \
-          TT_MS_LANGID_GERMAN_LIECHTENSTEIN
-#define TT_MS_LANGID_ENGLISH_GENERAL                   0x0009
-#define TT_MS_LANGID_ENGLISH_INDONESIA                 0x3809
-#define TT_MS_LANGID_ENGLISH_HONG_KONG                 0x3C09
-#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT \
-          TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT
-#define TT_MS_LANGID_SPANISH_LATIN_AMERICA             0xE40AU
-#define TT_MS_LANGID_FRENCH_WEST_INDIES                0x1C0C
-#define TT_MS_LANGID_FRENCH_REUNION                    0x200C
-#define TT_MS_LANGID_FRENCH_CONGO                      0x240C
-  /* which was formerly: */
-#define TT_MS_LANGID_FRENCH_ZAIRE \
-          TT_MS_LANGID_FRENCH_CONGO
-#define TT_MS_LANGID_FRENCH_SENEGAL                    0x280C
-#define TT_MS_LANGID_FRENCH_CAMEROON                   0x2C0C
-#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE              0x300C
-#define TT_MS_LANGID_FRENCH_MALI                       0x340C
-#define TT_MS_LANGID_FRENCH_MOROCCO                    0x380C
-#define TT_MS_LANGID_FRENCH_HAITI                      0x3C0C
-#define TT_MS_LANGID_FRENCH_NORTH_AFRICA               0xE40CU
-#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA \
-          TT_MS_LANGID_KOREAN_KOREA
-#define TT_MS_LANGID_KOREAN_JOHAB_KOREA                0x0812
-#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND \
-          TT_MS_LANGID_ROMANSH_SWITZERLAND
-#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA                0x0818
-#define TT_MS_LANGID_RUSSIAN_MOLDAVIA                  0x0819
-#define TT_MS_LANGID_URDU_INDIA                        0x0820
-#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA      0x0827
-#define TT_MS_LANGID_SLOVENE_SLOVENIA \
-          TT_MS_LANGID_SLOVENIAN_SLOVENIA
-#define TT_MS_LANGID_FARSI_IRAN                        0x0429
-#define TT_MS_LANGID_BASQUE_SPAIN \
-          TT_MS_LANGID_BASQUE_BASQUE
-#define TT_MS_LANGID_SORBIAN_GERMANY \
-          TT_MS_LANGID_UPPER_SORBIAN_GERMANY
-#define TT_MS_LANGID_SUTU_SOUTH_AFRICA                 0x0430
-#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA               0x0431
-#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA \
-          TT_MS_LANGID_SETSWANA_SOUTH_AFRICA
-#define TT_MS_LANGID_VENDA_SOUTH_AFRICA                0x0433
-#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA \
-          TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA
-#define TT_MS_LANGID_ZULU_SOUTH_AFRICA \
-          TT_MS_LANGID_ISIZULU_SOUTH_AFRICA
-#define TT_MS_LANGID_SAAMI_LAPONIA                     0x043B
-  /* the next two values are incorrectly inverted */
-#define TT_MS_LANGID_IRISH_GAELIC_IRELAND              0x043C
-#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM    0x083C
-#define TT_MS_LANGID_YIDDISH_GERMANY                   0x043D
-#define TT_MS_LANGID_KAZAK_KAZAKSTAN \
-          TT_MS_LANGID_KAZAKH_KAZAKHSTAN
-#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \
-          TT_MS_LANGID_KYRGYZ_KYRGYZSTAN
-#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN \
-          TT_MS_LANGID_KYRGYZ_KYRGYZSTAN
-#define TT_MS_LANGID_SWAHILI_KENYA \
-          TT_MS_LANGID_KISWAHILI_KENYA
-#define TT_MS_LANGID_TATAR_TATARSTAN \
-          TT_MS_LANGID_TATAR_RUSSIA
-#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN           0x0846
-#define TT_MS_LANGID_ORIYA_INDIA \
-          TT_MS_LANGID_ODIA_INDIA
-#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN \
-          TT_MS_LANGID_MONGOLIAN_PRC
-#define TT_MS_LANGID_TIBETAN_CHINA \
-          TT_MS_LANGID_TIBETAN_PRC
-#define TT_MS_LANGID_DZONGHKA_BHUTAN                   0x0851
-#define TT_MS_LANGID_TIBETAN_BHUTAN \
-          TT_MS_LANGID_DZONGHKA_BHUTAN
-#define TT_MS_LANGID_WELSH_WALES \
-          TT_MS_LANGID_WELSH_UNITED_KINGDOM
-#define TT_MS_LANGID_BURMESE_MYANMAR                   0x0455
-#define TT_MS_LANGID_GALICIAN_SPAIN \
-          TT_MS_LANGID_GALICIAN_GALICIAN
-#define TT_MS_LANGID_MANIPURI_INDIA  /* Bengali */     0x0458
-#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */         0x0459
-#define TT_MS_LANGID_SINDHI_PAKISTAN                   0x0859
-#define TT_MS_LANGID_SINHALESE_SRI_LANKA \
-          TT_MS_LANGID_SINHALA_SRI_LANKA
-#define TT_MS_LANGID_CHEROKEE_UNITED_STATES            0x045C
-#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */    0x045F
-#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN \
-          TT_MS_LANGID_TAMAZIGHT_ALGERIA
-#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */    0x0460
-#define TT_MS_LANGID_KASHMIRI_SASIA                    0x0860
-#define TT_MS_LANGID_KASHMIRI_INDIA \
-          TT_MS_LANGID_KASHMIRI_SASIA
-#define TT_MS_LANGID_NEPALI_INDIA                      0x0861
-#define TT_MS_LANGID_DIVEHI_MALDIVES \
-          TT_MS_LANGID_DHIVEHI_MALDIVES
-#define TT_MS_LANGID_EDO_NIGERIA                       0x0466
-#define TT_MS_LANGID_FULFULDE_NIGERIA                  0x0467
-#define TT_MS_LANGID_IBIBIO_NIGERIA                    0x0469
-#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA \
-          TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA
-#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \
-          TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA
-#define TT_MS_LANGID_KANURI_NIGERIA                    0x0471
-#define TT_MS_LANGID_OROMO_ETHIOPIA                    0x0472
-#define TT_MS_LANGID_TIGRIGNA_ETHIOPIA                 0x0473
-#define TT_MS_LANGID_TIGRIGNA_ERYTHREA                 0x0873
-#define TT_MS_LANGID_TIGRIGNA_ERYTREA \
-          TT_MS_LANGID_TIGRIGNA_ERYTHREA
-#define TT_MS_LANGID_GUARANI_PARAGUAY                  0x0474
-#define TT_MS_LANGID_HAWAIIAN_UNITED_STATES            0x0475
-#define TT_MS_LANGID_LATIN                             0x0476
-#define TT_MS_LANGID_SOMALI_SOMALIA                    0x0477
-#define TT_MS_LANGID_YI_CHINA \
-          TT_MS_LANGID_YI_PRC
-#define TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES   0x0479
-#define TT_MS_LANGID_UIGHUR_CHINA \
-          TT_MS_LANGID_UIGHUR_PRC
-
-
-  /***********************************************************************
-   *
-   * @enum:
-   *   TT_NAME_ID_XXX
-   *
-   * @description:
-   *   Possible values of the `name' identifier field in the name records of
-   *   an SFNT `name' table.  These values are platform independent.
-   */
-
-#define TT_NAME_ID_COPYRIGHT              0
-#define TT_NAME_ID_FONT_FAMILY            1
-#define TT_NAME_ID_FONT_SUBFAMILY         2
-#define TT_NAME_ID_UNIQUE_ID              3
-#define TT_NAME_ID_FULL_NAME              4
-#define TT_NAME_ID_VERSION_STRING         5
-#define TT_NAME_ID_PS_NAME                6
-#define TT_NAME_ID_TRADEMARK              7
-
-  /* the following values are from the OpenType spec */
-#define TT_NAME_ID_MANUFACTURER           8
-#define TT_NAME_ID_DESIGNER               9
-#define TT_NAME_ID_DESCRIPTION            10
-#define TT_NAME_ID_VENDOR_URL             11
-#define TT_NAME_ID_DESIGNER_URL           12
-#define TT_NAME_ID_LICENSE                13
-#define TT_NAME_ID_LICENSE_URL            14
-  /* number 15 is reserved */
-#define TT_NAME_ID_TYPOGRAPHIC_FAMILY     16
-#define TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY  17
-#define TT_NAME_ID_MAC_FULL_NAME          18
-
-  /* The following code is new as of 2000-01-21 */
-#define TT_NAME_ID_SAMPLE_TEXT            19
-
-  /* This is new in OpenType 1.3 */
-#define TT_NAME_ID_CID_FINDFONT_NAME      20
-
-  /* This is new in OpenType 1.5 */
-#define TT_NAME_ID_WWS_FAMILY             21
-#define TT_NAME_ID_WWS_SUBFAMILY          22
-
-  /* This is new in OpenType 1.7 */
-#define TT_NAME_ID_LIGHT_BACKGROUND       23
-#define TT_NAME_ID_DARK_BACKGROUND        24
-
-  /* This is new in OpenType 1.8 */
-#define TT_NAME_ID_VARIATIONS_PREFIX      25
-
-  /* these two values are deprecated */
-#define TT_NAME_ID_PREFERRED_FAMILY     TT_NAME_ID_TYPOGRAPHIC_FAMILY
-#define TT_NAME_ID_PREFERRED_SUBFAMILY  TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
-
-
-  /***********************************************************************
-   *
-   * @enum:
-   *   TT_UCR_XXX
-   *
-   * @description:
-   *   Possible bit mask values for the `ulUnicodeRangeX' fields in an SFNT
-   *   `OS/2' table.
-   */
-
-  /* ulUnicodeRange1 */
-  /* --------------- */
-
-  /* Bit  0   Basic Latin */
-#define TT_UCR_BASIC_LATIN                     (1L <<  0) /* U+0020-U+007E */
-  /* Bit  1   C1 Controls and Latin-1 Supplement */
-#define TT_UCR_LATIN1_SUPPLEMENT               (1L <<  1) /* U+0080-U+00FF */
-  /* Bit  2   Latin Extended-A */
-#define TT_UCR_LATIN_EXTENDED_A                (1L <<  2) /* U+0100-U+017F */
-  /* Bit  3   Latin Extended-B */
-#define TT_UCR_LATIN_EXTENDED_B                (1L <<  3) /* U+0180-U+024F */
-  /* Bit  4   IPA Extensions                 */
-  /*          Phonetic Extensions            */
-  /*          Phonetic Extensions Supplement */
-#define TT_UCR_IPA_EXTENSIONS                  (1L <<  4) /* U+0250-U+02AF */
-                                                          /* U+1D00-U+1D7F */
-                                                          /* U+1D80-U+1DBF */
-  /* Bit  5   Spacing Modifier Letters */
-  /*          Modifier Tone Letters    */
-#define TT_UCR_SPACING_MODIFIER                (1L <<  5) /* U+02B0-U+02FF */
-                                                          /* U+A700-U+A71F */
-  /* Bit  6   Combining Diacritical Marks            */
-  /*          Combining Diacritical Marks Supplement */
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS     (1L <<  6) /* U+0300-U+036F */
-                                                          /* U+1DC0-U+1DFF */
-  /* Bit  7   Greek and Coptic */
-#define TT_UCR_GREEK                           (1L <<  7) /* U+0370-U+03FF */
-  /* Bit  8   Coptic */
-#define TT_UCR_COPTIC                          (1L <<  8) /* U+2C80-U+2CFF */
-  /* Bit  9   Cyrillic            */
-  /*          Cyrillic Supplement */
-  /*          Cyrillic Extended-A */
-  /*          Cyrillic Extended-B */
-#define TT_UCR_CYRILLIC                        (1L <<  9) /* U+0400-U+04FF */
-                                                          /* U+0500-U+052F */
-                                                          /* U+2DE0-U+2DFF */
-                                                          /* U+A640-U+A69F */
-  /* Bit 10   Armenian */
-#define TT_UCR_ARMENIAN                        (1L << 10) /* U+0530-U+058F */
-  /* Bit 11   Hebrew */
-#define TT_UCR_HEBREW                          (1L << 11) /* U+0590-U+05FF */
-  /* Bit 12   Vai */
-#define TT_UCR_VAI                             (1L << 12) /* U+A500-U+A63F */
-  /* Bit 13   Arabic            */
-  /*          Arabic Supplement */
-#define TT_UCR_ARABIC                          (1L << 13) /* U+0600-U+06FF */
-                                                          /* U+0750-U+077F */
-  /* Bit 14   NKo */
-#define TT_UCR_NKO                             (1L << 14) /* U+07C0-U+07FF */
-  /* Bit 15   Devanagari */
-#define TT_UCR_DEVANAGARI                      (1L << 15) /* U+0900-U+097F */
-  /* Bit 16   Bengali */
-#define TT_UCR_BENGALI                         (1L << 16) /* U+0980-U+09FF */
-  /* Bit 17   Gurmukhi */
-#define TT_UCR_GURMUKHI                        (1L << 17) /* U+0A00-U+0A7F */
-  /* Bit 18   Gujarati */
-#define TT_UCR_GUJARATI                        (1L << 18) /* U+0A80-U+0AFF */
-  /* Bit 19   Oriya */
-#define TT_UCR_ORIYA                           (1L << 19) /* U+0B00-U+0B7F */
-  /* Bit 20   Tamil */
-#define TT_UCR_TAMIL                           (1L << 20) /* U+0B80-U+0BFF */
-  /* Bit 21   Telugu */
-#define TT_UCR_TELUGU                          (1L << 21) /* U+0C00-U+0C7F */
-  /* Bit 22   Kannada */
-#define TT_UCR_KANNADA                         (1L << 22) /* U+0C80-U+0CFF */
-  /* Bit 23   Malayalam */
-#define TT_UCR_MALAYALAM                       (1L << 23) /* U+0D00-U+0D7F */
-  /* Bit 24   Thai */
-#define TT_UCR_THAI                            (1L << 24) /* U+0E00-U+0E7F */
-  /* Bit 25   Lao */
-#define TT_UCR_LAO                             (1L << 25) /* U+0E80-U+0EFF */
-  /* Bit 26   Georgian            */
-  /*          Georgian Supplement */
-#define TT_UCR_GEORGIAN                        (1L << 26) /* U+10A0-U+10FF */
-                                                          /* U+2D00-U+2D2F */
-  /* Bit 27   Balinese */
-#define TT_UCR_BALINESE                        (1L << 27) /* U+1B00-U+1B7F */
-  /* Bit 28   Hangul Jamo */
-#define TT_UCR_HANGUL_JAMO                     (1L << 28) /* U+1100-U+11FF */
-  /* Bit 29   Latin Extended Additional */
-  /*          Latin Extended-C          */
-  /*          Latin Extended-D          */
-#define TT_UCR_LATIN_EXTENDED_ADDITIONAL       (1L << 29) /* U+1E00-U+1EFF */
-                                                          /* U+2C60-U+2C7F */
-                                                          /* U+A720-U+A7FF */
-  /* Bit 30   Greek Extended */
-#define TT_UCR_GREEK_EXTENDED                  (1L << 30) /* U+1F00-U+1FFF */
-  /* Bit 31   General Punctuation      */
-  /*          Supplemental Punctuation */
-#define TT_UCR_GENERAL_PUNCTUATION             (1L << 31) /* U+2000-U+206F */
-                                                          /* U+2E00-U+2E7F */
-
-  /* ulUnicodeRange2 */
-  /* --------------- */
-
-  /* Bit 32   Superscripts And Subscripts */
-#define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS         (1L <<  0) /* U+2070-U+209F */
-  /* Bit 33   Currency Symbols */
-#define TT_UCR_CURRENCY_SYMBOLS                (1L <<  1) /* U+20A0-U+20CF */
-  /* Bit 34   Combining Diacritical Marks For Symbols */
-#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \
-                                               (1L <<  2) /* U+20D0-U+20FF */
-  /* Bit 35   Letterlike Symbols */
-#define TT_UCR_LETTERLIKE_SYMBOLS              (1L <<  3) /* U+2100-U+214F */
-  /* Bit 36   Number Forms */
-#define TT_UCR_NUMBER_FORMS                    (1L <<  4) /* U+2150-U+218F */
-  /* Bit 37   Arrows                           */
-  /*          Supplemental Arrows-A            */
-  /*          Supplemental Arrows-B            */
-  /*          Miscellaneous Symbols and Arrows */
-#define TT_UCR_ARROWS                          (1L <<  5) /* U+2190-U+21FF */
-                                                          /* U+27F0-U+27FF */
-                                                          /* U+2900-U+297F */
-                                                          /* U+2B00-U+2BFF */
-  /* Bit 38   Mathematical Operators               */
-  /*          Supplemental Mathematical Operators  */
-  /*          Miscellaneous Mathematical Symbols-A */
-  /*          Miscellaneous Mathematical Symbols-B */
-#define TT_UCR_MATHEMATICAL_OPERATORS          (1L <<  6) /* U+2200-U+22FF */
-                                                          /* U+2A00-U+2AFF */
-                                                          /* U+27C0-U+27EF */
-                                                          /* U+2980-U+29FF */
-  /* Bit 39 Miscellaneous Technical */
-#define TT_UCR_MISCELLANEOUS_TECHNICAL         (1L <<  7) /* U+2300-U+23FF */
-  /* Bit 40   Control Pictures */
-#define TT_UCR_CONTROL_PICTURES                (1L <<  8) /* U+2400-U+243F */
-  /* Bit 41   Optical Character Recognition */
-#define TT_UCR_OCR                             (1L <<  9) /* U+2440-U+245F */
-  /* Bit 42   Enclosed Alphanumerics */
-#define TT_UCR_ENCLOSED_ALPHANUMERICS          (1L << 10) /* U+2460-U+24FF */
-  /* Bit 43   Box Drawing */
-#define TT_UCR_BOX_DRAWING                     (1L << 11) /* U+2500-U+257F */
-  /* Bit 44   Block Elements */
-#define TT_UCR_BLOCK_ELEMENTS                  (1L << 12) /* U+2580-U+259F */
-  /* Bit 45   Geometric Shapes */
-#define TT_UCR_GEOMETRIC_SHAPES                (1L << 13) /* U+25A0-U+25FF */
-  /* Bit 46   Miscellaneous Symbols */
-#define TT_UCR_MISCELLANEOUS_SYMBOLS           (1L << 14) /* U+2600-U+26FF */
-  /* Bit 47   Dingbats */
-#define TT_UCR_DINGBATS                        (1L << 15) /* U+2700-U+27BF */
-  /* Bit 48   CJK Symbols and Punctuation */
-#define TT_UCR_CJK_SYMBOLS                     (1L << 16) /* U+3000-U+303F */
-  /* Bit 49   Hiragana */
-#define TT_UCR_HIRAGANA                        (1L << 17) /* U+3040-U+309F */
-  /* Bit 50   Katakana                     */
-  /*          Katakana Phonetic Extensions */
-#define TT_UCR_KATAKANA                        (1L << 18) /* U+30A0-U+30FF */
-                                                          /* U+31F0-U+31FF */
-  /* Bit 51   Bopomofo          */
-  /*          Bopomofo Extended */
-#define TT_UCR_BOPOMOFO                        (1L << 19) /* U+3100-U+312F */
-                                                          /* U+31A0-U+31BF */
-  /* Bit 52   Hangul Compatibility Jamo */
-#define TT_UCR_HANGUL_COMPATIBILITY_JAMO       (1L << 20) /* U+3130-U+318F */
-  /* Bit 53   Phags-Pa */
-#define TT_UCR_CJK_MISC                        (1L << 21) /* U+A840-U+A87F */
-#define TT_UCR_KANBUN  TT_UCR_CJK_MISC /* deprecated */
-#define TT_UCR_PHAGSPA
-  /* Bit 54   Enclosed CJK Letters and Months */
-#define TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS     (1L << 22) /* U+3200-U+32FF */
-  /* Bit 55   CJK Compatibility */
-#define TT_UCR_CJK_COMPATIBILITY               (1L << 23) /* U+3300-U+33FF */
-  /* Bit 56   Hangul Syllables */
-#define TT_UCR_HANGUL                          (1L << 24) /* U+AC00-U+D7A3 */
-  /* Bit 57   High Surrogates              */
-  /*          High Private Use Surrogates  */
-  /*          Low Surrogates               */
-
-  /* According to OpenType specs v.1.3+,   */
-  /* setting bit 57 implies that there is  */
-  /* at least one codepoint beyond the     */
-  /* Basic Multilingual Plane that is      */
-  /* supported by this font.  So it really */
-  /* means >= U+10000.                     */
-#define TT_UCR_SURROGATES                      (1L << 25) /* U+D800-U+DB7F */
-                                                          /* U+DB80-U+DBFF */
-                                                          /* U+DC00-U+DFFF */
-#define TT_UCR_NON_PLANE_0  TT_UCR_SURROGATES
-  /* Bit 58  Phoenician */
-#define TT_UCR_PHOENICIAN                      (1L << 26) /*U+10900-U+1091F*/
-  /* Bit 59   CJK Unified Ideographs             */
-  /*          CJK Radicals Supplement            */
-  /*          Kangxi Radicals                    */
-  /*          Ideographic Description Characters */
-  /*          CJK Unified Ideographs Extension A */
-  /*          CJK Unified Ideographs Extension B */
-  /*          Kanbun                             */
-#define TT_UCR_CJK_UNIFIED_IDEOGRAPHS          (1L << 27) /* U+4E00-U+9FFF */
-                                                          /* U+2E80-U+2EFF */
-                                                          /* U+2F00-U+2FDF */
-                                                          /* U+2FF0-U+2FFF */
-                                                          /* U+3400-U+4DB5 */
-                                                          /*U+20000-U+2A6DF*/
-                                                          /* U+3190-U+319F */
-  /* Bit 60   Private Use */
-#define TT_UCR_PRIVATE_USE                     (1L << 28) /* U+E000-U+F8FF */
-  /* Bit 61   CJK Strokes                             */
-  /*          CJK Compatibility Ideographs            */
-  /*          CJK Compatibility Ideographs Supplement */
-#define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS    (1L << 29) /* U+31C0-U+31EF */
-                                                          /* U+F900-U+FAFF */
-                                                          /*U+2F800-U+2FA1F*/
-  /* Bit 62   Alphabetic Presentation Forms */
-#define TT_UCR_ALPHABETIC_PRESENTATION_FORMS   (1L << 30) /* U+FB00-U+FB4F */
-  /* Bit 63   Arabic Presentation Forms-A */
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_A     (1L << 31) /* U+FB50-U+FDFF */
-
-  /* ulUnicodeRange3 */
-  /* --------------- */
-
-  /* Bit 64   Combining Half Marks */
-#define TT_UCR_COMBINING_HALF_MARKS            (1L <<  0) /* U+FE20-U+FE2F */
-  /* Bit 65   Vertical forms          */
-  /*          CJK Compatibility Forms */
-#define TT_UCR_CJK_COMPATIBILITY_FORMS         (1L <<  1) /* U+FE10-U+FE1F */
-                                                          /* U+FE30-U+FE4F */
-  /* Bit 66   Small Form Variants */
-#define TT_UCR_SMALL_FORM_VARIANTS             (1L <<  2) /* U+FE50-U+FE6F */
-  /* Bit 67   Arabic Presentation Forms-B */
-#define TT_UCR_ARABIC_PRESENTATION_FORMS_B     (1L <<  3) /* U+FE70-U+FEFE */
-  /* Bit 68   Halfwidth and Fullwidth Forms */
-#define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS       (1L <<  4) /* U+FF00-U+FFEF */
-  /* Bit 69   Specials */
-#define TT_UCR_SPECIALS                        (1L <<  5) /* U+FFF0-U+FFFD */
-  /* Bit 70   Tibetan */
-#define TT_UCR_TIBETAN                         (1L <<  6) /* U+0F00-U+0FFF */
-  /* Bit 71   Syriac */
-#define TT_UCR_SYRIAC                          (1L <<  7) /* U+0700-U+074F */
-  /* Bit 72   Thaana */
-#define TT_UCR_THAANA                          (1L <<  8) /* U+0780-U+07BF */
-  /* Bit 73   Sinhala */
-#define TT_UCR_SINHALA                         (1L <<  9) /* U+0D80-U+0DFF */
-  /* Bit 74   Myanmar */
-#define TT_UCR_MYANMAR                         (1L << 10) /* U+1000-U+109F */
-  /* Bit 75   Ethiopic            */
-  /*          Ethiopic Supplement */
-  /*          Ethiopic Extended   */
-#define TT_UCR_ETHIOPIC                        (1L << 11) /* U+1200-U+137F */
-                                                          /* U+1380-U+139F */
-                                                          /* U+2D80-U+2DDF */
-  /* Bit 76   Cherokee */
-#define TT_UCR_CHEROKEE                        (1L << 12) /* U+13A0-U+13FF */
-  /* Bit 77   Unified Canadian Aboriginal Syllabics */
-#define TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS   (1L << 13) /* U+1400-U+167F */
-  /* Bit 78   Ogham */
-#define TT_UCR_OGHAM                           (1L << 14) /* U+1680-U+169F */
-  /* Bit 79   Runic */
-#define TT_UCR_RUNIC                           (1L << 15) /* U+16A0-U+16FF */
-  /* Bit 80   Khmer         */
-  /*          Khmer Symbols */
-#define TT_UCR_KHMER                           (1L << 16) /* U+1780-U+17FF */
-                                                          /* U+19E0-U+19FF */
-  /* Bit 81   Mongolian */
-#define TT_UCR_MONGOLIAN                       (1L << 17) /* U+1800-U+18AF */
-  /* Bit 82   Braille Patterns */
-#define TT_UCR_BRAILLE                         (1L << 18) /* U+2800-U+28FF */
-  /* Bit 83   Yi Syllables */
-  /*          Yi Radicals  */
-#define TT_UCR_YI                              (1L << 19) /* U+A000-U+A48F */
-                                                          /* U+A490-U+A4CF */
-  /* Bit 84   Tagalog  */
-  /*          Hanunoo  */
-  /*          Buhid    */
-  /*          Tagbanwa */
-#define TT_UCR_PHILIPPINE                      (1L << 20) /* U+1700-U+171F */
-                                                          /* U+1720-U+173F */
-                                                          /* U+1740-U+175F */
-                                                          /* U+1760-U+177F */
-  /* Bit 85   Old Italic */
-#define TT_UCR_OLD_ITALIC                      (1L << 21) /*U+10300-U+1032F*/
-  /* Bit 86   Gothic */
-#define TT_UCR_GOTHIC                          (1L << 22) /*U+10330-U+1034F*/
-  /* Bit 87   Deseret */
-#define TT_UCR_DESERET                         (1L << 23) /*U+10400-U+1044F*/
-  /* Bit 88   Byzantine Musical Symbols      */
-  /*          Musical Symbols                */
-  /*          Ancient Greek Musical Notation */
-#define TT_UCR_MUSICAL_SYMBOLS                 (1L << 24) /*U+1D000-U+1D0FF*/
-                                                          /*U+1D100-U+1D1FF*/
-                                                          /*U+1D200-U+1D24F*/
-  /* Bit 89   Mathematical Alphanumeric Symbols */
-#define TT_UCR_MATH_ALPHANUMERIC_SYMBOLS       (1L << 25) /*U+1D400-U+1D7FF*/
-  /* Bit 90   Private Use (plane 15) */
-  /*          Private Use (plane 16) */
-#define TT_UCR_PRIVATE_USE_SUPPLEMENTARY       (1L << 26) /*U+F0000-U+FFFFD*/
-                                                        /*U+100000-U+10FFFD*/
-  /* Bit 91   Variation Selectors            */
-  /*          Variation Selectors Supplement */
-#define TT_UCR_VARIATION_SELECTORS             (1L << 27) /* U+FE00-U+FE0F */
-                                                          /*U+E0100-U+E01EF*/
-  /* Bit 92   Tags */
-#define TT_UCR_TAGS                            (1L << 28) /*U+E0000-U+E007F*/
-  /* Bit 93   Limbu */
-#define TT_UCR_LIMBU                           (1L << 29) /* U+1900-U+194F */
-  /* Bit 94   Tai Le */
-#define TT_UCR_TAI_LE                          (1L << 30) /* U+1950-U+197F */
-  /* Bit 95   New Tai Lue */
-#define TT_UCR_NEW_TAI_LUE                     (1L << 31) /* U+1980-U+19DF */
-
-  /* ulUnicodeRange4 */
-  /* --------------- */
-
-  /* Bit 96   Buginese */
-#define TT_UCR_BUGINESE                        (1L <<  0) /* U+1A00-U+1A1F */
-  /* Bit 97   Glagolitic */
-#define TT_UCR_GLAGOLITIC                      (1L <<  1) /* U+2C00-U+2C5F */
-  /* Bit 98   Tifinagh */
-#define TT_UCR_TIFINAGH                        (1L <<  2) /* U+2D30-U+2D7F */
-  /* Bit 99   Yijing Hexagram Symbols */
-#define TT_UCR_YIJING                          (1L <<  3) /* U+4DC0-U+4DFF */
-  /* Bit 100  Syloti Nagri */
-#define TT_UCR_SYLOTI_NAGRI                    (1L <<  4) /* U+A800-U+A82F */
-  /* Bit 101  Linear B Syllabary */
-  /*          Linear B Ideograms */
-  /*          Aegean Numbers     */
-#define TT_UCR_LINEAR_B                        (1L <<  5) /*U+10000-U+1007F*/
-                                                          /*U+10080-U+100FF*/
-                                                          /*U+10100-U+1013F*/
-  /* Bit 102  Ancient Greek Numbers */
-#define TT_UCR_ANCIENT_GREEK_NUMBERS           (1L <<  6) /*U+10140-U+1018F*/
-  /* Bit 103  Ugaritic */
-#define TT_UCR_UGARITIC                        (1L <<  7) /*U+10380-U+1039F*/
-  /* Bit 104  Old Persian */
-#define TT_UCR_OLD_PERSIAN                     (1L <<  8) /*U+103A0-U+103DF*/
-  /* Bit 105  Shavian */
-#define TT_UCR_SHAVIAN                         (1L <<  9) /*U+10450-U+1047F*/
-  /* Bit 106  Osmanya */
-#define TT_UCR_OSMANYA                         (1L << 10) /*U+10480-U+104AF*/
-  /* Bit 107  Cypriot Syllabary */
-#define TT_UCR_CYPRIOT_SYLLABARY               (1L << 11) /*U+10800-U+1083F*/
-  /* Bit 108  Kharoshthi */
-#define TT_UCR_KHAROSHTHI                      (1L << 12) /*U+10A00-U+10A5F*/
-  /* Bit 109  Tai Xuan Jing Symbols */
-#define TT_UCR_TAI_XUAN_JING                   (1L << 13) /*U+1D300-U+1D35F*/
-  /* Bit 110  Cuneiform                         */
-  /*          Cuneiform Numbers and Punctuation */
-#define TT_UCR_CUNEIFORM                       (1L << 14) /*U+12000-U+123FF*/
-                                                          /*U+12400-U+1247F*/
-  /* Bit 111  Counting Rod Numerals */
-#define TT_UCR_COUNTING_ROD_NUMERALS           (1L << 15) /*U+1D360-U+1D37F*/
-  /* Bit 112  Sundanese */
-#define TT_UCR_SUNDANESE                       (1L << 16) /* U+1B80-U+1BBF */
-  /* Bit 113  Lepcha */
-#define TT_UCR_LEPCHA                          (1L << 17) /* U+1C00-U+1C4F */
-  /* Bit 114  Ol Chiki */
-#define TT_UCR_OL_CHIKI                        (1L << 18) /* U+1C50-U+1C7F */
-  /* Bit 115  Saurashtra */
-#define TT_UCR_SAURASHTRA                      (1L << 19) /* U+A880-U+A8DF */
-  /* Bit 116  Kayah Li */
-#define TT_UCR_KAYAH_LI                        (1L << 20) /* U+A900-U+A92F */
-  /* Bit 117  Rejang */
-#define TT_UCR_REJANG                          (1L << 21) /* U+A930-U+A95F */
-  /* Bit 118  Cham */
-#define TT_UCR_CHAM                            (1L << 22) /* U+AA00-U+AA5F */
-  /* Bit 119  Ancient Symbols */
-#define TT_UCR_ANCIENT_SYMBOLS                 (1L << 23) /*U+10190-U+101CF*/
-  /* Bit 120  Phaistos Disc */
-#define TT_UCR_PHAISTOS_DISC                   (1L << 24) /*U+101D0-U+101FF*/
-  /* Bit 121  Carian */
-  /*          Lycian */
-  /*          Lydian */
-#define TT_UCR_OLD_ANATOLIAN                   (1L << 25) /*U+102A0-U+102DF*/
-                                                          /*U+10280-U+1029F*/
-                                                          /*U+10920-U+1093F*/
-  /* Bit 122  Domino Tiles  */
-  /*          Mahjong Tiles */
-#define TT_UCR_GAME_TILES                      (1L << 26) /*U+1F030-U+1F09F*/
-                                                          /*U+1F000-U+1F02F*/
-  /* Bit 123-127 Reserved for process-internal usage */
-
-  /* */
-
-  /* for backward compatibility with older FreeType versions */
-#define TT_UCR_ARABIC_PRESENTATION_A         \
-          TT_UCR_ARABIC_PRESENTATION_FORMS_A
-#define TT_UCR_ARABIC_PRESENTATION_B         \
-          TT_UCR_ARABIC_PRESENTATION_FORMS_B
-
-#define TT_UCR_COMBINING_DIACRITICS          \
-          TT_UCR_COMBINING_DIACRITICAL_MARKS
-#define TT_UCR_COMBINING_DIACRITICS_SYMB          \
-          TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB
-
-
-FT_END_HEADER
-
-#endif /* TTNAMEID_H_ */
-
-
-/* END */

+ 0 - 846
freetype/include/freetype/tttables.h

@@ -1,846 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  tttables.h                                                             */
-/*                                                                         */
-/*    Basic SFNT/TrueType tables definitions and interface                 */
-/*    (specification only).                                                */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef TTTABLES_H_
-#define TTTABLES_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>                                                             */
-  /*    truetype_tables                                                    */
-  /*                                                                       */
-  /* <Title>                                                               */
-  /*    TrueType Tables                                                    */
-  /*                                                                       */
-  /* <Abstract>                                                            */
-  /*    TrueType specific table types and functions.                       */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    This section contains definitions of some basic tables specific to */
-  /*    TrueType and OpenType as well as some routines used to access and  */
-  /*    process them.                                                      */
-  /*                                                                       */
-  /* <Order>                                                               */
-  /*    TT_Header                                                          */
-  /*    TT_HoriHeader                                                      */
-  /*    TT_VertHeader                                                      */
-  /*    TT_OS2                                                             */
-  /*    TT_Postscript                                                      */
-  /*    TT_PCLT                                                            */
-  /*    TT_MaxProfile                                                      */
-  /*                                                                       */
-  /*    FT_Sfnt_Tag                                                        */
-  /*    FT_Get_Sfnt_Table                                                  */
-  /*    FT_Load_Sfnt_Table                                                 */
-  /*    FT_Sfnt_Table_Info                                                 */
-  /*                                                                       */
-  /*    FT_Get_CMap_Language_ID                                            */
-  /*    FT_Get_CMap_Format                                                 */
-  /*                                                                       */
-  /*    FT_PARAM_TAG_UNPATENTED_HINTING                                    */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    TT_Header                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model a TrueType font header table.  All fields     */
-  /*    follow the OpenType specification.                                 */
-  /*                                                                       */
-  typedef struct  TT_Header_
-  {
-    FT_Fixed   Table_Version;
-    FT_Fixed   Font_Revision;
-
-    FT_Long    CheckSum_Adjust;
-    FT_Long    Magic_Number;
-
-    FT_UShort  Flags;
-    FT_UShort  Units_Per_EM;
-
-    FT_Long    Created [2];
-    FT_Long    Modified[2];
-
-    FT_Short   xMin;
-    FT_Short   yMin;
-    FT_Short   xMax;
-    FT_Short   yMax;
-
-    FT_UShort  Mac_Style;
-    FT_UShort  Lowest_Rec_PPEM;
-
-    FT_Short   Font_Direction;
-    FT_Short   Index_To_Loc_Format;
-    FT_Short   Glyph_Data_Format;
-
-  } TT_Header;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    TT_HoriHeader                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model a TrueType horizontal header, the `hhea'      */
-  /*    table, as well as the corresponding horizontal metrics table,      */
-  /*    `hmtx'.                                                            */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    Version                :: The table version.                       */
-  /*                                                                       */
-  /*    Ascender               :: The font's ascender, i.e., the distance  */
-  /*                              from the baseline to the top-most of all */
-  /*                              glyph points found in the font.          */
-  /*                                                                       */
-  /*                              This value is invalid in many fonts, as  */
-  /*                              it is usually set by the font designer,  */
-  /*                              and often reflects only a portion of the */
-  /*                              glyphs found in the font (maybe ASCII).  */
-  /*                                                                       */
-  /*                              You should use the `sTypoAscender' field */
-  /*                              of the `OS/2' table instead if you want  */
-  /*                              the correct one.                         */
-  /*                                                                       */
-  /*    Descender              :: The font's descender, i.e., the distance */
-  /*                              from the baseline to the bottom-most of  */
-  /*                              all glyph points found in the font.  It  */
-  /*                              is negative.                             */
-  /*                                                                       */
-  /*                              This value is invalid in many fonts, as  */
-  /*                              it is usually set by the font designer,  */
-  /*                              and often reflects only a portion of the */
-  /*                              glyphs found in the font (maybe ASCII).  */
-  /*                                                                       */
-  /*                              You should use the `sTypoDescender'      */
-  /*                              field of the `OS/2' table instead if you */
-  /*                              want the correct one.                    */
-  /*                                                                       */
-  /*    Line_Gap               :: The font's line gap, i.e., the distance  */
-  /*                              to add to the ascender and descender to  */
-  /*                              get the BTB, i.e., the                   */
-  /*                              baseline-to-baseline distance for the    */
-  /*                              font.                                    */
-  /*                                                                       */
-  /*    advance_Width_Max      :: This field is the maximum of all advance */
-  /*                              widths found in the font.  It can be     */
-  /*                              used to compute the maximum width of an  */
-  /*                              arbitrary string of text.                */
-  /*                                                                       */
-  /*    min_Left_Side_Bearing  :: The minimum left side bearing of all     */
-  /*                              glyphs within the font.                  */
-  /*                                                                       */
-  /*    min_Right_Side_Bearing :: The minimum right side bearing of all    */
-  /*                              glyphs within the font.                  */
-  /*                                                                       */
-  /*    xMax_Extent            :: The maximum horizontal extent (i.e., the */
-  /*                              `width' of a glyph's bounding box) for   */
-  /*                              all glyphs in the font.                  */
-  /*                                                                       */
-  /*    caret_Slope_Rise       :: The rise coefficient of the cursor's     */
-  /*                              slope of the cursor (slope=rise/run).    */
-  /*                                                                       */
-  /*    caret_Slope_Run        :: The run coefficient of the cursor's      */
-  /*                              slope.                                   */
-  /*                                                                       */
-  /*    caret_Offset           :: The cursor's offset for slanted fonts.   */
-  /*                                                                       */
-  /*    Reserved               :: 8~reserved bytes.                        */
-  /*                                                                       */
-  /*    metric_Data_Format     :: Always~0.                                */
-  /*                                                                       */
-  /*    number_Of_HMetrics     :: Number of HMetrics entries in the `hmtx' */
-  /*                              table -- this value can be smaller than  */
-  /*                              the total number of glyphs in the font.  */
-  /*                                                                       */
-  /*    long_metrics           :: A pointer into the `hmtx' table.         */
-  /*                                                                       */
-  /*    short_metrics          :: A pointer into the `hmtx' table.         */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    For an OpenType variation font, the values of the following fields */
-  /*    can change after a call to @FT_Set_Var_Design_Coordinates (and     */
-  /*    friends) if the font contains an `MVAR' table: `caret_Slope_Rise', */
-  /*    `caret_Slope_Run', and `caret_Offset'.                             */
-  /*                                                                       */
-  typedef struct  TT_HoriHeader_
-  {
-    FT_Fixed   Version;
-    FT_Short   Ascender;
-    FT_Short   Descender;
-    FT_Short   Line_Gap;
-
-    FT_UShort  advance_Width_Max;      /* advance width maximum */
-
-    FT_Short   min_Left_Side_Bearing;  /* minimum left-sb       */
-    FT_Short   min_Right_Side_Bearing; /* minimum right-sb      */
-    FT_Short   xMax_Extent;            /* xmax extents          */
-    FT_Short   caret_Slope_Rise;
-    FT_Short   caret_Slope_Run;
-    FT_Short   caret_Offset;
-
-    FT_Short   Reserved[4];
-
-    FT_Short   metric_Data_Format;
-    FT_UShort  number_Of_HMetrics;
-
-    /* The following fields are not defined by the OpenType specification */
-    /* but they are used to connect the metrics header to the relevant    */
-    /* `hmtx' table.                                                      */
-
-    void*      long_metrics;
-    void*      short_metrics;
-
-  } TT_HoriHeader;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    TT_VertHeader                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure used to model a TrueType vertical header, the `vhea'   */
-  /*    table, as well as the corresponding vertical metrics table,        */
-  /*    `vmtx'.                                                            */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    Version                 :: The table version.                      */
-  /*                                                                       */
-  /*    Ascender                :: The font's ascender, i.e., the distance */
-  /*                               from the baseline to the top-most of    */
-  /*                               all glyph points found in the font.     */
-  /*                                                                       */
-  /*                               This value is invalid in many fonts, as */
-  /*                               it is usually set by the font designer, */
-  /*                               and often reflects only a portion of    */
-  /*                               the glyphs found in the font (maybe     */
-  /*                               ASCII).                                 */
-  /*                                                                       */
-  /*                               You should use the `sTypoAscender'      */
-  /*                               field of the `OS/2' table instead if    */
-  /*                               you want the correct one.               */
-  /*                                                                       */
-  /*    Descender               :: The font's descender, i.e., the         */
-  /*                               distance from the baseline to the       */
-  /*                               bottom-most of all glyph points found   */
-  /*                               in the font.  It is negative.           */
-  /*                                                                       */
-  /*                               This value is invalid in many fonts, as */
-  /*                               it is usually set by the font designer, */
-  /*                               and often reflects only a portion of    */
-  /*                               the glyphs found in the font (maybe     */
-  /*                               ASCII).                                 */
-  /*                                                                       */
-  /*                               You should use the `sTypoDescender'     */
-  /*                               field of the `OS/2' table instead if    */
-  /*                               you want the correct one.               */
-  /*                                                                       */
-  /*    Line_Gap                :: The font's line gap, i.e., the distance */
-  /*                               to add to the ascender and descender to */
-  /*                               get the BTB, i.e., the                  */
-  /*                               baseline-to-baseline distance for the   */
-  /*                               font.                                   */
-  /*                                                                       */
-  /*    advance_Height_Max      :: This field is the maximum of all        */
-  /*                               advance heights found in the font.  It  */
-  /*                               can be used to compute the maximum      */
-  /*                               height of an arbitrary string of text.  */
-  /*                                                                       */
-  /*    min_Top_Side_Bearing    :: The minimum top side bearing of all     */
-  /*                               glyphs within the font.                 */
-  /*                                                                       */
-  /*    min_Bottom_Side_Bearing :: The minimum bottom side bearing of all  */
-  /*                               glyphs within the font.                 */
-  /*                                                                       */
-  /*    yMax_Extent             :: The maximum vertical extent (i.e., the  */
-  /*                               `height' of a glyph's bounding box) for */
-  /*                               all glyphs in the font.                 */
-  /*                                                                       */
-  /*    caret_Slope_Rise        :: The rise coefficient of the cursor's    */
-  /*                               slope of the cursor (slope=rise/run).   */
-  /*                                                                       */
-  /*    caret_Slope_Run         :: The run coefficient of the cursor's     */
-  /*                               slope.                                  */
-  /*                                                                       */
-  /*    caret_Offset            :: The cursor's offset for slanted fonts.  */
-  /*                                                                       */
-  /*    Reserved                :: 8~reserved bytes.                       */
-  /*                                                                       */
-  /*    metric_Data_Format      :: Always~0.                               */
-  /*                                                                       */
-  /*    number_Of_VMetrics      :: Number of VMetrics entries in the       */
-  /*                               `vmtx' table -- this value can be       */
-  /*                               smaller than the total number of glyphs */
-  /*                               in the font.                            */
-  /*                                                                       */
-  /*    long_metrics            :: A pointer into the `vmtx' table.        */
-  /*                                                                       */
-  /*    short_metrics           :: A pointer into the `vmtx' table.        */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    For an OpenType variation font, the values of the following fields */
-  /*    can change after a call to @FT_Set_Var_Design_Coordinates (and     */
-  /*    friends) if the font contains an `MVAR' table: `Ascender',         */
-  /*    `Descender', `Line_Gap', `caret_Slope_Rise', `caret_Slope_Run',    */
-  /*    and `caret_Offset'.                                                */
-  /*                                                                       */
-  typedef struct  TT_VertHeader_
-  {
-    FT_Fixed   Version;
-    FT_Short   Ascender;
-    FT_Short   Descender;
-    FT_Short   Line_Gap;
-
-    FT_UShort  advance_Height_Max;      /* advance height maximum */
-
-    FT_Short   min_Top_Side_Bearing;    /* minimum top-sb          */
-    FT_Short   min_Bottom_Side_Bearing; /* minimum bottom-sb       */
-    FT_Short   yMax_Extent;             /* ymax extents            */
-    FT_Short   caret_Slope_Rise;
-    FT_Short   caret_Slope_Run;
-    FT_Short   caret_Offset;
-
-    FT_Short   Reserved[4];
-
-    FT_Short   metric_Data_Format;
-    FT_UShort  number_Of_VMetrics;
-
-    /* The following fields are not defined by the OpenType specification */
-    /* but they are used to connect the metrics header to the relevant    */
-    /* `vmtx' table.                                                      */
-
-    void*      long_metrics;
-    void*      short_metrics;
-
-  } TT_VertHeader;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    TT_OS2                                                             */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model a TrueType `OS/2' table.  All fields comply   */
-  /*    to the OpenType specification.                                     */
-  /*                                                                       */
-  /*    Note that we now support old Mac fonts that do not include an      */
-  /*    `OS/2' table.  In this case, the `version' field is always set to  */
-  /*    0xFFFF.                                                            */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    For an OpenType variation font, the values of the following fields */
-  /*    can change after a call to @FT_Set_Var_Design_Coordinates (and     */
-  /*    friends) if the font contains an `MVAR' table: `sCapHeight',       */
-  /*    `sTypoAscender', `sTypoDescender', `sTypoLineGap', `sxHeight',     */
-  /*    `usWinAscent', `usWinDescent', `yStrikeoutPosition',               */
-  /*    `yStrikeoutSize', `ySubscriptXOffset', `ySubScriptXSize',          */
-  /*    `ySubscriptYOffset', `ySubscriptYSize', `ySuperscriptXOffset',     */
-  /*    `ySuperscriptXSize', `ySuperscriptYOffset', and                    */
-  /*    `ySuperscriptYSize'.                                               */
-  /*                                                                       */
-  /*    Possible values for bits in the `ulUnicodeRangeX' fields are given */
-  /*    by the @TT_UCR_XXX macros.                                         */
-  /*                                                                       */
-
-  typedef struct  TT_OS2_
-  {
-    FT_UShort  version;                /* 0x0001 - more or 0xFFFF */
-    FT_Short   xAvgCharWidth;
-    FT_UShort  usWeightClass;
-    FT_UShort  usWidthClass;
-    FT_UShort  fsType;
-    FT_Short   ySubscriptXSize;
-    FT_Short   ySubscriptYSize;
-    FT_Short   ySubscriptXOffset;
-    FT_Short   ySubscriptYOffset;
-    FT_Short   ySuperscriptXSize;
-    FT_Short   ySuperscriptYSize;
-    FT_Short   ySuperscriptXOffset;
-    FT_Short   ySuperscriptYOffset;
-    FT_Short   yStrikeoutSize;
-    FT_Short   yStrikeoutPosition;
-    FT_Short   sFamilyClass;
-
-    FT_Byte    panose[10];
-
-    FT_ULong   ulUnicodeRange1;        /* Bits 0-31   */
-    FT_ULong   ulUnicodeRange2;        /* Bits 32-63  */
-    FT_ULong   ulUnicodeRange3;        /* Bits 64-95  */
-    FT_ULong   ulUnicodeRange4;        /* Bits 96-127 */
-
-    FT_Char    achVendID[4];
-
-    FT_UShort  fsSelection;
-    FT_UShort  usFirstCharIndex;
-    FT_UShort  usLastCharIndex;
-    FT_Short   sTypoAscender;
-    FT_Short   sTypoDescender;
-    FT_Short   sTypoLineGap;
-    FT_UShort  usWinAscent;
-    FT_UShort  usWinDescent;
-
-    /* only version 1 and higher: */
-
-    FT_ULong   ulCodePageRange1;       /* Bits 0-31   */
-    FT_ULong   ulCodePageRange2;       /* Bits 32-63  */
-
-    /* only version 2 and higher: */
-
-    FT_Short   sxHeight;
-    FT_Short   sCapHeight;
-    FT_UShort  usDefaultChar;
-    FT_UShort  usBreakChar;
-    FT_UShort  usMaxContext;
-
-    /* only version 5 and higher: */
-
-    FT_UShort  usLowerOpticalPointSize;       /* in twips (1/20th points) */
-    FT_UShort  usUpperOpticalPointSize;       /* in twips (1/20th points) */
-
-  } TT_OS2;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    TT_Postscript                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model a TrueType `post' table.  All fields comply   */
-  /*    to the OpenType specification.  This structure does not reference  */
-  /*    a font's PostScript glyph names; use @FT_Get_Glyph_Name to         */
-  /*    retrieve them.                                                     */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    For an OpenType variation font, the values of the following fields */
-  /*    can change after a call to @FT_Set_Var_Design_Coordinates (and     */
-  /*    friends) if the font contains an `MVAR' table: `underlinePosition' */
-  /*    and `underlineThickness'.                                          */
-  /*                                                                       */
-  typedef struct  TT_Postscript_
-  {
-    FT_Fixed  FormatType;
-    FT_Fixed  italicAngle;
-    FT_Short  underlinePosition;
-    FT_Short  underlineThickness;
-    FT_ULong  isFixedPitch;
-    FT_ULong  minMemType42;
-    FT_ULong  maxMemType42;
-    FT_ULong  minMemType1;
-    FT_ULong  maxMemType1;
-
-    /* Glyph names follow in the `post' table, but we don't */
-    /* load them by default.                                */
-
-  } TT_Postscript;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    TT_PCLT                                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A structure to model a TrueType `PCLT' table.  All fields comply   */
-  /*    to the OpenType specification.                                     */
-  /*                                                                       */
-  typedef struct  TT_PCLT_
-  {
-    FT_Fixed   Version;
-    FT_ULong   FontNumber;
-    FT_UShort  Pitch;
-    FT_UShort  xHeight;
-    FT_UShort  Style;
-    FT_UShort  TypeFamily;
-    FT_UShort  CapHeight;
-    FT_UShort  SymbolSet;
-    FT_Char    TypeFace[16];
-    FT_Char    CharacterComplement[8];
-    FT_Char    FileName[6];
-    FT_Char    StrokeWeight;
-    FT_Char    WidthType;
-    FT_Byte    SerifStyle;
-    FT_Byte    Reserved;
-
-  } TT_PCLT;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Struct>                                                              */
-  /*    TT_MaxProfile                                                      */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    The maximum profile (`maxp') table contains many max values, which */
-  /*    can be used to pre-allocate arrays for speeding up glyph loading   */
-  /*    and hinting.                                                       */
-  /*                                                                       */
-  /* <Fields>                                                              */
-  /*    version               :: The version number.                       */
-  /*                                                                       */
-  /*    numGlyphs             :: The number of glyphs in this TrueType     */
-  /*                             font.                                     */
-  /*                                                                       */
-  /*    maxPoints             :: The maximum number of points in a         */
-  /*                             non-composite TrueType glyph.  See also   */
-  /*                             `maxCompositePoints'.                     */
-  /*                                                                       */
-  /*    maxContours           :: The maximum number of contours in a       */
-  /*                             non-composite TrueType glyph.  See also   */
-  /*                             `maxCompositeContours'.                   */
-  /*                                                                       */
-  /*    maxCompositePoints    :: The maximum number of points in a         */
-  /*                             composite TrueType glyph.  See also       */
-  /*                             `maxPoints'.                              */
-  /*                                                                       */
-  /*    maxCompositeContours  :: The maximum number of contours in a       */
-  /*                             composite TrueType glyph.  See also       */
-  /*                             `maxContours'.                            */
-  /*                                                                       */
-  /*    maxZones              :: The maximum number of zones used for      */
-  /*                             glyph hinting.                            */
-  /*                                                                       */
-  /*    maxTwilightPoints     :: The maximum number of points in the       */
-  /*                             twilight zone used for glyph hinting.     */
-  /*                                                                       */
-  /*    maxStorage            :: The maximum number of elements in the     */
-  /*                             storage area used for glyph hinting.      */
-  /*                                                                       */
-  /*    maxFunctionDefs       :: The maximum number of function            */
-  /*                             definitions in the TrueType bytecode for  */
-  /*                             this font.                                */
-  /*                                                                       */
-  /*    maxInstructionDefs    :: The maximum number of instruction         */
-  /*                             definitions in the TrueType bytecode for  */
-  /*                             this font.                                */
-  /*                                                                       */
-  /*    maxStackElements      :: The maximum number of stack elements used */
-  /*                             during bytecode interpretation.           */
-  /*                                                                       */
-  /*    maxSizeOfInstructions :: The maximum number of TrueType opcodes    */
-  /*                             used for glyph hinting.                   */
-  /*                                                                       */
-  /*    maxComponentElements  :: The maximum number of simple (i.e., non-  */
-  /*                             composite) glyphs in a composite glyph.   */
-  /*                                                                       */
-  /*    maxComponentDepth     :: The maximum nesting depth of composite    */
-  /*                             glyphs.                                   */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    This structure is only used during font loading.                   */
-  /*                                                                       */
-  typedef struct  TT_MaxProfile_
-  {
-    FT_Fixed   version;
-    FT_UShort  numGlyphs;
-    FT_UShort  maxPoints;
-    FT_UShort  maxContours;
-    FT_UShort  maxCompositePoints;
-    FT_UShort  maxCompositeContours;
-    FT_UShort  maxZones;
-    FT_UShort  maxTwilightPoints;
-    FT_UShort  maxStorage;
-    FT_UShort  maxFunctionDefs;
-    FT_UShort  maxInstructionDefs;
-    FT_UShort  maxStackElements;
-    FT_UShort  maxSizeOfInstructions;
-    FT_UShort  maxComponentElements;
-    FT_UShort  maxComponentDepth;
-
-  } TT_MaxProfile;
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Enum>                                                                */
-  /*    FT_Sfnt_Tag                                                        */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    An enumeration to specify indices of SFNT tables loaded and parsed */
-  /*    by FreeType during initialization of an SFNT font.  Used in the    */
-  /*    @FT_Get_Sfnt_Table API function.                                   */
-  /*                                                                       */
-  /* <Values>                                                              */
-  /*    FT_SFNT_HEAD :: To access the font's @TT_Header structure.         */
-  /*                                                                       */
-  /*    FT_SFNT_MAXP :: To access the font's @TT_MaxProfile structure.     */
-  /*                                                                       */
-  /*    FT_SFNT_OS2  :: To access the font's @TT_OS2 structure.            */
-  /*                                                                       */
-  /*    FT_SFNT_HHEA :: To access the font's @TT_HoriHeader structure.     */
-  /*                                                                       */
-  /*    FT_SFNT_VHEA :: To access the font's @TT_VertHeader structure.     */
-  /*                                                                       */
-  /*    FT_SFNT_POST :: To access the font's @TT_Postscript structure.     */
-  /*                                                                       */
-  /*    FT_SFNT_PCLT :: To access the font's @TT_PCLT structure.           */
-  /*                                                                       */
-  typedef enum  FT_Sfnt_Tag_
-  {
-    FT_SFNT_HEAD,
-    FT_SFNT_MAXP,
-    FT_SFNT_OS2,
-    FT_SFNT_HHEA,
-    FT_SFNT_VHEA,
-    FT_SFNT_POST,
-    FT_SFNT_PCLT,
-
-    FT_SFNT_MAX
-
-  } FT_Sfnt_Tag;
-
-  /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag' */
-  /* values instead                                                      */
-#define ft_sfnt_head  FT_SFNT_HEAD
-#define ft_sfnt_maxp  FT_SFNT_MAXP
-#define ft_sfnt_os2   FT_SFNT_OS2
-#define ft_sfnt_hhea  FT_SFNT_HHEA
-#define ft_sfnt_vhea  FT_SFNT_VHEA
-#define ft_sfnt_post  FT_SFNT_POST
-#define ft_sfnt_pclt  FT_SFNT_PCLT
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_Sfnt_Table                                                  */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return a pointer to a given SFNT table stored within a face.       */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face :: A handle to the source.                                    */
-  /*                                                                       */
-  /*    tag  :: The index of the SFNT table.                               */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    A type-less pointer to the table.  This will be NULL in case of    */
-  /*    error, or if the corresponding table was not found *OR* loaded     */
-  /*    from the file.                                                     */
-  /*                                                                       */
-  /*    Use a typecast according to `tag' to access the structure          */
-  /*    elements.                                                          */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The table is owned by the face object and disappears with it.      */
-  /*                                                                       */
-  /*    This function is only useful to access SFNT tables that are loaded */
-  /*    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 );
-
-
-  /**************************************************************************
-   *
-   * @function:
-   *   FT_Load_Sfnt_Table
-   *
-   * @description:
-   *   Load any SFNT font table into client memory.
-   *
-   * @input:
-   *   face ::
-   *     A handle to the source face.
-   *
-   *   tag ::
-   *     The four-byte tag of the table to load.  Use value~0 if you want
-   *     to access the whole font file.  Otherwise, you can use one of the
-   *     definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new
-   *     one with @FT_MAKE_TAG.
-   *
-   *   offset ::
-   *     The starting offset in the table (or file if tag~==~0).
-   *
-   * @output:
-   *   buffer ::
-   *     The target buffer address.  The client must ensure that the memory
-   *     array is big enough to hold the data.
-   *
-   * @inout:
-   *   length ::
-   *     If the `length' parameter is NULL, try to load the whole table.
-   *     Return an error code if it fails.
-   *
-   *     Else, if `*length' is~0, exit immediately while returning the
-   *     table's (or file) full size in it.
-   *
-   *     Else the number of bytes to read from the table or file, from the
-   *     starting offset.
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   If you need to determine the table's length you should first call this
-   *   function with `*length' set to~0, as in the following example:
-   *
-   *     {
-   *       FT_ULong  length = 0;
-   *
-   *
-   *       error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length );
-   *       if ( error ) { ... table does not exist ... }
-   *
-   *       buffer = malloc( length );
-   *       if ( buffer == NULL ) { ... not enough memory ... }
-   *
-   *       error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length );
-   *       if ( error ) { ... could not load table ... }
-   *     }
-   *
-   *   Note that structures like @TT_Header or @TT_OS2 can't be used with
-   *   this function; they are limited to @FT_Get_Sfnt_Table.  Reason is that
-   *   those structures depend on the processor architecture, with varying
-   *   size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian).
-   *
-   */
-  FT_EXPORT( FT_Error )
-  FT_Load_Sfnt_Table( FT_Face    face,
-                      FT_ULong   tag,
-                      FT_Long    offset,
-                      FT_Byte*   buffer,
-                      FT_ULong*  length );
-
-
-  /**************************************************************************
-   *
-   * @function:
-   *   FT_Sfnt_Table_Info
-   *
-   * @description:
-   *   Return information on an SFNT table.
-   *
-   * @input:
-   *   face ::
-   *     A handle to the source face.
-   *
-   *   table_index ::
-   *     The index of an SFNT table.  The function returns
-   *     FT_Err_Table_Missing for an invalid value.
-   *
-   * @inout:
-   *   tag ::
-   *     The name tag of the SFNT table.  If the value is NULL, `table_index'
-   *     is ignored, and `length' returns the number of SFNT tables in the
-   *     font.
-   *
-   * @output:
-   *   length ::
-   *     The length of the SFNT table (or the number of SFNT tables, depending
-   *     on `tag').
-   *
-   * @return:
-   *   FreeType error code.  0~means success.
-   *
-   * @note:
-   *   While parsing fonts, FreeType handles SFNT tables with length zero as
-   *   missing.
-   *
-   */
-  FT_EXPORT( FT_Error )
-  FT_Sfnt_Table_Info( FT_Face    face,
-                      FT_UInt    table_index,
-                      FT_ULong  *tag,
-                      FT_ULong  *length );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_CMap_Language_ID                                            */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return cmap language ID as specified in the OpenType standard.     */
-  /*    Definitions of language ID values are in file @FT_TRUETYPE_IDS_H.  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    charmap ::                                                         */
-  /*      The target charmap.                                              */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The language ID of `charmap'.  If `charmap' doesn't belong to an   */
-  /*    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 );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    FT_Get_CMap_Format                                                 */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Return the format of an SFNT `cmap' table.                         */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    charmap ::                                                         */
-  /*      The target charmap.                                              */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    The format of `charmap'.  If `charmap' doesn't belong to an SFNT   */
-  /*    face, return -1.                                                   */
-  /*                                                                       */
-  FT_EXPORT( FT_Long )
-  FT_Get_CMap_Format( FT_CharMap  charmap );
-
-  /* */
-
-
-FT_END_HEADER
-
-#endif /* TTTABLES_H_ */
-
-
-/* END */

+ 0 - 121
freetype/include/freetype/tttags.h

@@ -1,121 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  tttags.h                                                               */
-/*                                                                         */
-/*    Tags for TrueType and OpenType tables (specification only).          */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-#ifndef TTAGS_H_
-#define TTAGS_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
-
-
-#define TTAG_avar  FT_MAKE_TAG( 'a', 'v', 'a', 'r' )
-#define TTAG_BASE  FT_MAKE_TAG( 'B', 'A', 'S', 'E' )
-#define TTAG_bdat  FT_MAKE_TAG( 'b', 'd', 'a', 't' )
-#define TTAG_BDF   FT_MAKE_TAG( 'B', 'D', 'F', ' ' )
-#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_CFF2  FT_MAKE_TAG( 'C', 'F', 'F', '2' )
-#define TTAG_CID   FT_MAKE_TAG( 'C', 'I', 'D', ' ' )
-#define TTAG_cmap  FT_MAKE_TAG( 'c', 'm', 'a', 'p' )
-#define TTAG_cvar  FT_MAKE_TAG( 'c', 'v', 'a', 'r' )
-#define TTAG_cvt   FT_MAKE_TAG( 'c', 'v', 't', ' ' )
-#define TTAG_DSIG  FT_MAKE_TAG( 'D', 'S', 'I', 'G' )
-#define TTAG_EBDT  FT_MAKE_TAG( 'E', 'B', 'D', 'T' )
-#define TTAG_EBLC  FT_MAKE_TAG( 'E', 'B', 'L', 'C' )
-#define TTAG_EBSC  FT_MAKE_TAG( 'E', 'B', 'S', 'C' )
-#define TTAG_feat  FT_MAKE_TAG( 'f', 'e', 'a', 't' )
-#define TTAG_FOND  FT_MAKE_TAG( 'F', 'O', 'N', 'D' )
-#define TTAG_fpgm  FT_MAKE_TAG( 'f', 'p', 'g', 'm' )
-#define TTAG_fvar  FT_MAKE_TAG( 'f', 'v', 'a', 'r' )
-#define TTAG_gasp  FT_MAKE_TAG( 'g', 'a', 's', 'p' )
-#define TTAG_GDEF  FT_MAKE_TAG( 'G', 'D', 'E', 'F' )
-#define TTAG_glyf  FT_MAKE_TAG( 'g', 'l', 'y', 'f' )
-#define TTAG_GPOS  FT_MAKE_TAG( 'G', 'P', 'O', 'S' )
-#define TTAG_GSUB  FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
-#define TTAG_gvar  FT_MAKE_TAG( 'g', 'v', 'a', 'r' )
-#define TTAG_HVAR  FT_MAKE_TAG( 'H', 'V', 'A', 'R' )
-#define TTAG_hdmx  FT_MAKE_TAG( 'h', 'd', 'm', 'x' )
-#define TTAG_head  FT_MAKE_TAG( 'h', 'e', 'a', 'd' )
-#define TTAG_hhea  FT_MAKE_TAG( 'h', 'h', 'e', 'a' )
-#define TTAG_hmtx  FT_MAKE_TAG( 'h', 'm', 't', 'x' )
-#define TTAG_JSTF  FT_MAKE_TAG( 'J', 'S', 'T', 'F' )
-#define TTAG_just  FT_MAKE_TAG( 'j', 'u', 's', 't' )
-#define TTAG_kern  FT_MAKE_TAG( 'k', 'e', 'r', 'n' )
-#define TTAG_lcar  FT_MAKE_TAG( 'l', 'c', 'a', 'r' )
-#define TTAG_loca  FT_MAKE_TAG( 'l', 'o', 'c', 'a' )
-#define TTAG_LTSH  FT_MAKE_TAG( 'L', 'T', 'S', 'H' )
-#define TTAG_LWFN  FT_MAKE_TAG( 'L', 'W', 'F', 'N' )
-#define TTAG_MATH  FT_MAKE_TAG( 'M', 'A', 'T', 'H' )
-#define TTAG_maxp  FT_MAKE_TAG( 'm', 'a', 'x', 'p' )
-#define TTAG_META  FT_MAKE_TAG( 'M', 'E', 'T', 'A' )
-#define TTAG_MMFX  FT_MAKE_TAG( 'M', 'M', 'F', 'X' )
-#define TTAG_MMSD  FT_MAKE_TAG( 'M', 'M', 'S', 'D' )
-#define TTAG_mort  FT_MAKE_TAG( 'm', 'o', 'r', 't' )
-#define TTAG_morx  FT_MAKE_TAG( 'm', 'o', 'r', 'x' )
-#define TTAG_MVAR  FT_MAKE_TAG( 'M', 'V', 'A', 'R' )
-#define TTAG_name  FT_MAKE_TAG( 'n', 'a', 'm', 'e' )
-#define TTAG_opbd  FT_MAKE_TAG( 'o', 'p', 'b', 'd' )
-#define TTAG_OS2   FT_MAKE_TAG( 'O', 'S', '/', '2' )
-#define TTAG_OTTO  FT_MAKE_TAG( 'O', 'T', 'T', 'O' )
-#define TTAG_PCLT  FT_MAKE_TAG( 'P', 'C', 'L', 'T' )
-#define TTAG_POST  FT_MAKE_TAG( 'P', 'O', 'S', 'T' )
-#define TTAG_post  FT_MAKE_TAG( 'p', 'o', 's', 't' )
-#define TTAG_prep  FT_MAKE_TAG( 'p', 'r', 'e', 'p' )
-#define TTAG_prop  FT_MAKE_TAG( 'p', 'r', 'o', 'p' )
-#define TTAG_sbix  FT_MAKE_TAG( 's', 'b', 'i', 'x' )
-#define TTAG_sfnt  FT_MAKE_TAG( 's', 'f', 'n', 't' )
-#define TTAG_SING  FT_MAKE_TAG( 'S', 'I', 'N', 'G' )
-#define TTAG_trak  FT_MAKE_TAG( 't', 'r', 'a', 'k' )
-#define TTAG_true  FT_MAKE_TAG( 't', 'r', 'u', 'e' )
-#define TTAG_ttc   FT_MAKE_TAG( 't', 't', 'c', ' ' )
-#define TTAG_ttcf  FT_MAKE_TAG( 't', 't', 'c', 'f' )
-#define TTAG_TYP1  FT_MAKE_TAG( 'T', 'Y', 'P', '1' )
-#define TTAG_typ1  FT_MAKE_TAG( 't', 'y', 'p', '1' )
-#define TTAG_VDMX  FT_MAKE_TAG( 'V', 'D', 'M', 'X' )
-#define TTAG_vhea  FT_MAKE_TAG( 'v', 'h', 'e', 'a' )
-#define TTAG_vmtx  FT_MAKE_TAG( 'v', 'm', 't', 'x' )
-#define TTAG_VVAR  FT_MAKE_TAG( 'V', 'V', 'A', 'R' )
-#define TTAG_wOFF  FT_MAKE_TAG( 'w', 'O', 'F', 'F' )
-
-/* used by "Keyboard.dfont" on legacy Mac OS X */
-#define TTAG_0xA5kbd  FT_MAKE_TAG( 0xA5, 'k', 'b', 'd' )
-
-/* used by "LastResort.dfont" on legacy Mac OS X */
-#define TTAG_0xA5lst  FT_MAKE_TAG( 0xA5, 'l', 's', 't' )
-
-
-FT_END_HEADER
-
-#endif /* TTAGS_H_ */
-
-
-/* END */

+ 0 - 42
freetype/include/ft2build.h

@@ -1,42 +0,0 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ft2build.h                                                             */
-/*                                                                         */
-/*    FreeType 2 build and setup macros.                                   */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* This is the `entry point' for FreeType header file inclusions.  It is */
-  /* the only header file which should be included directly; all other     */
-  /* FreeType header files should be accessed with macro names (after      */
-  /* including `ft2build.h').                                              */
-  /*                                                                       */
-  /* A typical example is                                                  */
-  /*                                                                       */
-  /*   #include <ft2build.h>                                               */
-  /*   #include FT_FREETYPE_H                                              */
-  /*                                                                       */
-  /*************************************************************************/
-
-
-#ifndef FT2BUILD_H_
-#define FT2BUILD_H_
-
-#include <freetype/config/ftheader.h>
-
-#endif /* FT2BUILD_H_ */
-
-
-/* END */

二进制
freetype/win32/freetype.lib


二进制
freetype/win64/freetype.lib


+ 0 - 1930
include/lodepng.h

@@ -1,1930 +0,0 @@
-/*
-LodePNG version 20190210
-
-Copyright (c) 2005-2019 Lode Vandevenne
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-    1. The origin of this software must not be misrepresented; you must not
-    claim that you wrote the original software. If you use this software
-    in a product, an acknowledgment in the product documentation would be
-    appreciated but is not required.
-
-    2. Altered source versions must be plainly marked as such, and must not be
-    misrepresented as being the original software.
-
-    3. This notice may not be removed or altered from any source
-    distribution.
-*/
-
-#ifndef LODEPNG_H
-#define LODEPNG_H
-
-#include <string.h> /*for size_t*/
-
-extern const char* LODEPNG_VERSION_STRING;
-
-/*
-The following #defines are used to create code sections. They can be disabled
-to disable code sections, which can give faster compile time and smaller binary.
-The "NO_COMPILE" defines are designed to be used to pass as defines to the
-compiler command to disable them without modifying this header, e.g.
--DLODEPNG_NO_COMPILE_ZLIB for gcc.
-In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to
-allow implementing a custom lodepng_crc32.
-*/
-/*deflate & zlib. If disabled, you must specify alternative zlib functions in
-the custom_zlib field of the compress and decompress settings*/
-#ifndef LODEPNG_NO_COMPILE_ZLIB
-#define LODEPNG_COMPILE_ZLIB
-#endif
-
-/*png encoder and png decoder*/
-#ifndef LODEPNG_NO_COMPILE_PNG
-#define LODEPNG_COMPILE_PNG
-#endif
-
-/*deflate&zlib decoder and png decoder*/
-#ifndef LODEPNG_NO_COMPILE_DECODER
-#define LODEPNG_COMPILE_DECODER
-#endif
-
-/*deflate&zlib encoder and png encoder*/
-#ifndef LODEPNG_NO_COMPILE_ENCODER
-#define LODEPNG_COMPILE_ENCODER
-#endif
-
-/*the optional built in harddisk file loading and saving functions*/
-#ifndef LODEPNG_NO_COMPILE_DISK
-#define LODEPNG_COMPILE_DISK
-#endif
-
-/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/
-#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
-#define LODEPNG_COMPILE_ANCILLARY_CHUNKS
-#endif
-
-/*ability to convert error numerical codes to English text string*/
-#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT
-#define LODEPNG_COMPILE_ERROR_TEXT
-#endif
-
-/*Compile the default allocators (C's free, malloc and realloc). If you disable this,
-you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your
-source files with custom allocators.*/
-#ifndef LODEPNG_NO_COMPILE_ALLOCATORS
-#define LODEPNG_COMPILE_ALLOCATORS
-#endif
-
-/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/
-#ifdef __cplusplus
-#ifndef LODEPNG_NO_COMPILE_CPP
-#define LODEPNG_COMPILE_CPP
-#endif
-#endif
-
-#ifdef LODEPNG_COMPILE_CPP
-#include <vector>
-#include <string>
-#endif /*LODEPNG_COMPILE_CPP*/
-
-#ifdef LODEPNG_COMPILE_PNG
-/*The PNG color types (also used for raw).*/
-typedef enum LodePNGColorType {
-  LCT_GREY = 0, /*grayscale: 1,2,4,8,16 bit*/
-  LCT_RGB = 2, /*RGB: 8,16 bit*/
-  LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/
-  LCT_GREY_ALPHA = 4, /*grayscale with alpha: 8,16 bit*/
-  LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/
-} LodePNGColorType;
-
-#ifdef LODEPNG_COMPILE_DECODER
-/*
-Converts PNG data in memory to raw pixel data.
-out: Output parameter. Pointer to buffer that will contain the raw pixel data.
-     After decoding, its size is w * h * (bytes per pixel) bytes larger than
-     initially. Bytes per pixel depends on colortype and bitdepth.
-     Must be freed after usage with free(*out).
-     Note: for 16-bit per channel colors, uses big endian format like PNG does.
-w: Output parameter. Pointer to width of pixel data.
-h: Output parameter. Pointer to height of pixel data.
-in: Memory buffer with the PNG file.
-insize: size of the in buffer.
-colortype: the desired color type for the raw output image. See explanation on PNG color types.
-bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types.
-Return value: LodePNG error code (0 means no error).
-*/
-unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h,
-                               const unsigned char* in, size_t insize,
-                               LodePNGColorType colortype, unsigned bitdepth);
-
-/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/
-unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,
-                          const unsigned char* in, size_t insize);
-
-/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/
-unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,
-                          const unsigned char* in, size_t insize);
-
-#ifdef LODEPNG_COMPILE_DISK
-/*
-Load PNG from disk, from file with given name.
-Same as the other decode functions, but instead takes a filename as input.
-*/
-unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h,
-                             const char* filename,
-                             LodePNGColorType colortype, unsigned bitdepth);
-
-/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/
-unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h,
-                               const char* filename);
-
-/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/
-unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h,
-                               const char* filename);
-#endif /*LODEPNG_COMPILE_DISK*/
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/*
-Converts raw pixel data into a PNG image in memory. The colortype and bitdepth
-  of the output PNG image cannot be chosen, they are automatically determined
-  by the colortype, bitdepth and content of the input pixel data.
-  Note: for 16-bit per channel colors, needs big endian format like PNG does.
-out: Output parameter. Pointer to buffer that will contain the PNG image data.
-     Must be freed after usage with free(*out).
-outsize: Output parameter. Pointer to the size in bytes of the out buffer.
-image: The raw pixel data to encode. The size of this buffer should be
-       w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth.
-w: width of the raw pixel data in pixels.
-h: height of the raw pixel data in pixels.
-colortype: the color type of the raw input image. See explanation on PNG color types.
-bitdepth: the bit depth of the raw input image. See explanation on PNG color types.
-Return value: LodePNG error code (0 means no error).
-*/
-unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize,
-                               const unsigned char* image, unsigned w, unsigned h,
-                               LodePNGColorType colortype, unsigned bitdepth);
-
-/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/
-unsigned lodepng_encode32(unsigned char** out, size_t* outsize,
-                          const unsigned char* image, unsigned w, unsigned h);
-
-/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/
-unsigned lodepng_encode24(unsigned char** out, size_t* outsize,
-                          const unsigned char* image, unsigned w, unsigned h);
-
-#ifdef LODEPNG_COMPILE_DISK
-/*
-Converts raw pixel data into a PNG file on disk.
-Same as the other encode functions, but instead takes a filename as output.
-NOTE: This overwrites existing files without warning!
-*/
-unsigned lodepng_encode_file(const char* filename,
-                             const unsigned char* image, unsigned w, unsigned h,
-                             LodePNGColorType colortype, unsigned bitdepth);
-
-/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/
-unsigned lodepng_encode32_file(const char* filename,
-                               const unsigned char* image, unsigned w, unsigned h);
-
-/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/
-unsigned lodepng_encode24_file(const char* filename,
-                               const unsigned char* image, unsigned w, unsigned h);
-#endif /*LODEPNG_COMPILE_DISK*/
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-
-#ifdef LODEPNG_COMPILE_CPP
-namespace lodepng {
-#ifdef LODEPNG_COMPILE_DECODER
-/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype
-is the format to output the pixels to. Default is RGBA 8-bit per channel.*/
-unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
-                const unsigned char* in, size_t insize,
-                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
-unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
-                const std::vector<unsigned char>& in,
-                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
-#ifdef LODEPNG_COMPILE_DISK
-/*
-Converts PNG file from disk to raw pixel data in memory.
-Same as the other decode functions, but instead takes a filename as input.
-*/
-unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
-                const std::string& filename,
-                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
-#endif /* LODEPNG_COMPILE_DISK */
-#endif /* LODEPNG_COMPILE_DECODER */
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype
-is that of the raw input data. The output PNG color type will be auto chosen.*/
-unsigned encode(std::vector<unsigned char>& out,
-                const unsigned char* in, unsigned w, unsigned h,
-                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
-unsigned encode(std::vector<unsigned char>& out,
-                const std::vector<unsigned char>& in, unsigned w, unsigned h,
-                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
-#ifdef LODEPNG_COMPILE_DISK
-/*
-Converts 32-bit RGBA raw pixel data into a PNG file on disk.
-Same as the other encode functions, but instead takes a filename as output.
-NOTE: This overwrites existing files without warning!
-*/
-unsigned encode(const std::string& filename,
-                const unsigned char* in, unsigned w, unsigned h,
-                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
-unsigned encode(const std::string& filename,
-                const std::vector<unsigned char>& in, unsigned w, unsigned h,
-                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
-#endif /* LODEPNG_COMPILE_DISK */
-#endif /* LODEPNG_COMPILE_ENCODER */
-} /* namespace lodepng */
-#endif /*LODEPNG_COMPILE_CPP*/
-#endif /*LODEPNG_COMPILE_PNG*/
-
-#ifdef LODEPNG_COMPILE_ERROR_TEXT
-/*Returns an English description of the numerical error code.*/
-const char* lodepng_error_text(unsigned code);
-#endif /*LODEPNG_COMPILE_ERROR_TEXT*/
-
-#ifdef LODEPNG_COMPILE_DECODER
-/*Settings for zlib decompression*/
-typedef struct LodePNGDecompressSettings LodePNGDecompressSettings;
-struct LodePNGDecompressSettings {
-  /* Check LodePNGDecoderSettings for more ignorable errors such as ignore_crc */
-  unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/
-
-  /*use custom zlib decoder instead of built in one (default: null)*/
-  unsigned (*custom_zlib)(unsigned char**, size_t*,
-                          const unsigned char*, size_t,
-                          const LodePNGDecompressSettings*);
-  /*use custom deflate decoder instead of built in one (default: null)
-  if custom_zlib is used, custom_deflate is ignored since only the built in
-  zlib function will call custom_deflate*/
-  unsigned (*custom_inflate)(unsigned char**, size_t*,
-                             const unsigned char*, size_t,
-                             const LodePNGDecompressSettings*);
-
-  const void* custom_context; /*optional custom settings for custom functions*/
-};
-
-extern const LodePNGDecompressSettings lodepng_default_decompress_settings;
-void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings);
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/*
-Settings for zlib compression. Tweaking these settings tweaks the balance
-between speed and compression ratio.
-*/
-typedef struct LodePNGCompressSettings LodePNGCompressSettings;
-struct LodePNGCompressSettings /*deflate = compress*/ {
-  /*LZ77 related settings*/
-  unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/
-  unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/
-  unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/
-  unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/
-  unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/
-  unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/
-
-  /*use custom zlib encoder instead of built in one (default: null)*/
-  unsigned (*custom_zlib)(unsigned char**, size_t*,
-                          const unsigned char*, size_t,
-                          const LodePNGCompressSettings*);
-  /*use custom deflate encoder instead of built in one (default: null)
-  if custom_zlib is used, custom_deflate is ignored since only the built in
-  zlib function will call custom_deflate*/
-  unsigned (*custom_deflate)(unsigned char**, size_t*,
-                             const unsigned char*, size_t,
-                             const LodePNGCompressSettings*);
-
-  const void* custom_context; /*optional custom settings for custom functions*/
-};
-
-extern const LodePNGCompressSettings lodepng_default_compress_settings;
-void lodepng_compress_settings_init(LodePNGCompressSettings* settings);
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#ifdef LODEPNG_COMPILE_PNG
-/*
-Color mode of an image. Contains all information required to decode the pixel
-bits to RGBA colors. This information is the same as used in the PNG file
-format, and is used both for PNG and raw image data in LodePNG.
-*/
-typedef struct LodePNGColorMode {
-  /*header (IHDR)*/
-  LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/
-  unsigned bitdepth;  /*bits per sample, see PNG standard or documentation further in this header file*/
-
-  /*
-  palette (PLTE and tRNS)
-
-  Dynamically allocated with the colors of the palette, including alpha.
-  When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use
-  lodepng_palette_clear, then for each color use lodepng_palette_add.
-  If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette.
-
-  When decoding, by default you can ignore this palette, since LodePNG already
-  fills the palette colors in the pixels of the raw RGBA output.
-
-  The palette is only supported for color type 3.
-  */
-  unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/
-  size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/
-
-  /*
-  transparent color key (tRNS)
-
-  This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit.
-  For grayscale PNGs, r, g and b will all 3 be set to the same.
-
-  When decoding, by default you can ignore this information, since LodePNG sets
-  pixels with this key to transparent already in the raw RGBA output.
-
-  The color key is only supported for color types 0 and 2.
-  */
-  unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/
-  unsigned key_r;       /*red/grayscale component of color key*/
-  unsigned key_g;       /*green component of color key*/
-  unsigned key_b;       /*blue component of color key*/
-} LodePNGColorMode;
-
-/*init, cleanup and copy functions to use with this struct*/
-void lodepng_color_mode_init(LodePNGColorMode* info);
-void lodepng_color_mode_cleanup(LodePNGColorMode* info);
-/*return value is error code (0 means no error)*/
-unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source);
-/* Makes a temporary LodePNGColorMode that does not need cleanup (no palette) */
-LodePNGColorMode lodepng_color_mode_make(LodePNGColorType colortype, unsigned bitdepth);
-
-void lodepng_palette_clear(LodePNGColorMode* info);
-/*add 1 color to the palette*/
-unsigned lodepng_palette_add(LodePNGColorMode* info,
-                             unsigned char r, unsigned char g, unsigned char b, unsigned char a);
-
-/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/
-unsigned lodepng_get_bpp(const LodePNGColorMode* info);
-/*get the amount of color channels used, based on colortype in the struct.
-If a palette is used, it counts as 1 channel.*/
-unsigned lodepng_get_channels(const LodePNGColorMode* info);
-/*is it a grayscale type? (only colortype 0 or 4)*/
-unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info);
-/*has it got an alpha channel? (only colortype 2 or 6)*/
-unsigned lodepng_is_alpha_type(const LodePNGColorMode* info);
-/*has it got a palette? (only colortype 3)*/
-unsigned lodepng_is_palette_type(const LodePNGColorMode* info);
-/*only returns true if there is a palette and there is a value in the palette with alpha < 255.
-Loops through the palette to check this.*/
-unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info);
-/*
-Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image.
-Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels).
-Returns false if the image can only have opaque pixels.
-In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values,
-or if "key_defined" is true.
-*/
-unsigned lodepng_can_have_alpha(const LodePNGColorMode* info);
-/*Returns the byte size of a raw image buffer with given width, height and color mode*/
-size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color);
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-/*The information of a Time chunk in PNG.*/
-typedef struct LodePNGTime {
-  unsigned year;    /*2 bytes used (0-65535)*/
-  unsigned month;   /*1-12*/
-  unsigned day;     /*1-31*/
-  unsigned hour;    /*0-23*/
-  unsigned minute;  /*0-59*/
-  unsigned second;  /*0-60 (to allow for leap seconds)*/
-} LodePNGTime;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-/*Information about the PNG image, except pixels, width and height.*/
-typedef struct LodePNGInfo {
-  /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/
-  unsigned compression_method;/*compression method of the original file. Always 0.*/
-  unsigned filter_method;     /*filter method of the original file*/
-  unsigned interlace_method;  /*interlace method of the original file: 0=none, 1=Adam7*/
-  LodePNGColorMode color;     /*color type and bits, palette and transparency of the PNG file*/
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  /*
-  Suggested background color chunk (bKGD)
-
-  This uses the same color mode and bit depth as the PNG (except no alpha channel),
-  with values truncated to the bit depth in the unsigned integer.
-
-  For grayscale and palette PNGs, the value is stored in background_r. The values
-  in background_g and background_b are then unused.
-
-  So when decoding, you may get these in a different color mode than the one you requested
-  for the raw pixels.
-
-  When encoding with auto_convert, you must use the color model defined in info_png.color for
-  these values. The encoder normally ignores info_png.color when auto_convert is on, but will
-  use it to interpret these values (and convert copies of them to its chosen color model).
-
-  When encoding, avoid setting this to an expensive color, such as a non-gray value
-  when the image is gray, or the compression will be worse since it will be forced to
-  write the PNG with a more expensive color mode (when auto_convert is on).
-
-  The decoder does not use this background color to edit the color of pixels. This is a
-  completely optional metadata feature.
-  */
-  unsigned background_defined; /*is a suggested background color given?*/
-  unsigned background_r;       /*red/gray/palette component of suggested background color*/
-  unsigned background_g;       /*green component of suggested background color*/
-  unsigned background_b;       /*blue component of suggested background color*/
-
-  /*
-  non-international text chunks (tEXt and zTXt)
-
-  The char** arrays each contain num strings. The actual messages are in
-  text_strings, while text_keys are keywords that give a short description what
-  the actual text represents, e.g. Title, Author, Description, or anything else.
-
-  All the string fields below including keys, names and language tags are null terminated.
-  The PNG specification uses null characters for the keys, names and tags, and forbids null
-  characters to appear in the main text which is why we can use null termination everywhere here.
-
-  A keyword is minimum 1 character and maximum 79 characters long. It's
-  discouraged to use a single line length longer than 79 characters for texts.
-
-  Don't allocate these text buffers yourself. Use the init/cleanup functions
-  correctly and use lodepng_add_text and lodepng_clear_text.
-  */
-  size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/
-  char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/
-  char** text_strings; /*the actual text*/
-
-  /*
-  international text chunks (iTXt)
-  Similar to the non-international text chunks, but with additional strings
-  "langtags" and "transkeys".
-  */
-  size_t itext_num; /*the amount of international texts in this PNG*/
-  char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/
-  char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/
-  char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/
-  char** itext_strings; /*the actual international text - UTF-8 string*/
-
-  /*time chunk (tIME)*/
-  unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/
-  LodePNGTime time;
-
-  /*phys chunk (pHYs)*/
-  unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/
-  unsigned phys_x; /*pixels per unit in x direction*/
-  unsigned phys_y; /*pixels per unit in y direction*/
-  unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/
-
-  /*
-  Color profile related chunks: gAMA, cHRM, sRGB, iCPP
-
-  LodePNG does not apply any color conversions on pixels in the encoder or decoder and does not interpret these color
-  profile values. It merely passes on the information. If you wish to use color profiles and convert colors, please
-  use these values with a color management library.
-
-  See the PNG, ICC and sRGB specifications for more information about the meaning of these values.
-  */
-
-  /* gAMA chunk: optional, overridden by sRGB or iCCP if those are present. */
-  unsigned gama_defined; /* Whether a gAMA chunk is present (0 = not present, 1 = present). */
-  unsigned gama_gamma;   /* Gamma exponent times 100000 */
-
-  /* cHRM chunk: optional, overridden by sRGB or iCCP if those are present. */
-  unsigned chrm_defined; /* Whether a cHRM chunk is present (0 = not present, 1 = present). */
-  unsigned chrm_white_x; /* White Point x times 100000 */
-  unsigned chrm_white_y; /* White Point y times 100000 */
-  unsigned chrm_red_x;   /* Red x times 100000 */
-  unsigned chrm_red_y;   /* Red y times 100000 */
-  unsigned chrm_green_x; /* Green x times 100000 */
-  unsigned chrm_green_y; /* Green y times 100000 */
-  unsigned chrm_blue_x;  /* Blue x times 100000 */
-  unsigned chrm_blue_y;  /* Blue y times 100000 */
-
-  /*
-  sRGB chunk: optional. May not appear at the same time as iCCP.
-  If gAMA is also present gAMA must contain value 45455.
-  If cHRM is also present cHRM must contain respectively 31270,32900,64000,33000,30000,60000,15000,6000.
-  */
-  unsigned srgb_defined; /* Whether an sRGB chunk is present (0 = not present, 1 = present). */
-  unsigned srgb_intent;  /* Rendering intent: 0=perceptual, 1=rel. colorimetric, 2=saturation, 3=abs. colorimetric */
-
-  /*
-  iCCP chunk: optional. May not appear at the same time as sRGB.
-
-  LodePNG does not parse or use the ICC profile (except its color space header field for an edge case), a
-  separate library to handle the ICC data (not included in LodePNG) format is needed to use it for color
-  management and conversions.
-
-  For encoding, if iCCP is present, gAMA and cHRM are recommended to be added as well with values that match the ICC
-  profile as closely as possible, if you wish to do this you should provide the correct values for gAMA and cHRM and
-  enable their '_defined' flags since LodePNG will not automatically compute them from the ICC profile.
-
-  For encoding, the ICC profile is required by the PNG specification to be an "RGB" profile for non-gray
-  PNG color types and a "GRAY" profile for gray PNG color types. If you disable auto_convert, you must ensure
-  the ICC profile type matches your requested color type, else the encoder gives an error. If auto_convert is
-  enabled (the default), and the ICC profile is not a good match for the pixel data, this will result in an encoder
-  error if the pixel data has non-gray pixels for a GRAY profile, or a silent less-optimal compression of the pixel
-  data if the pixels could be encoded as grayscale but the ICC profile is RGB.
-
-  To avoid this do not set an ICC profile in the image unless there is a good reason for it, and when doing so
-  make sure you compute it carefully to avoid the above problems.
-  */
-  unsigned iccp_defined;      /* Whether an iCCP chunk is present (0 = not present, 1 = present). */
-  char* iccp_name;            /* Null terminated string with profile name, 1-79 bytes */
-  /*
-  The ICC profile in iccp_profile_size bytes.
-  Don't allocate this buffer yourself. Use the init/cleanup functions
-  correctly and use lodepng_set_icc and lodepng_clear_icc.
-  */
-  unsigned char* iccp_profile;
-  unsigned iccp_profile_size; /* The size of iccp_profile in bytes */
-
-  /* End of color profile related chunks */
-
-
-  /*
-  unknown chunks: chunks not known by LodePNG, passed on byte for byte.
-
-  There are 3 buffers, one for each position in the PNG where unknown chunks can appear.
-  Each buffer contains all unknown chunks for that position consecutively.
-  The 3 positions are:
-  0: between IHDR and PLTE, 1: between PLTE and IDAT, 2: between IDAT and IEND.
-
-  For encoding, do not store critical chunks or known chunks that are enabled with a "_defined" flag
-  above in here, since the encoder will blindly follow this and could then encode an invalid PNG file
-  (such as one with two IHDR chunks or the disallowed combination of sRGB with iCCP). But do use
-  this if you wish to store an ancillary chunk that is not supported by LodePNG (such as sPLT or hIST),
-  or any non-standard PNG chunk.
-
-  Do not allocate or traverse this data yourself. Use the chunk traversing functions declared
-  later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct.
-  */
-  unsigned char* unknown_chunks_data[3];
-  size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-} LodePNGInfo;
-
-/*init, cleanup and copy functions to use with this struct*/
-void lodepng_info_init(LodePNGInfo* info);
-void lodepng_info_cleanup(LodePNGInfo* info);
-/*return value is error code (0 means no error)*/
-unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source);
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/
-void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/
-
-unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,
-                           const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/
-void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/
-
-/*replaces if exists*/
-unsigned lodepng_set_icc(LodePNGInfo* info, const char* name, const unsigned char* profile, unsigned profile_size);
-void lodepng_clear_icc(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-/*
-Converts raw buffer from one color type to another color type, based on
-LodePNGColorMode structs to describe the input and output color type.
-See the reference manual at the end of this header file to see which color conversions are supported.
-return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported)
-The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel
-of the output color type (lodepng_get_bpp).
-For < 8 bpp images, there should not be padding bits at the end of scanlines.
-For 16-bit per channel colors, uses big endian format like PNG does.
-Return value is LodePNG error code
-*/
-unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
-                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
-                         unsigned w, unsigned h);
-
-#ifdef LODEPNG_COMPILE_DECODER
-/*
-Settings for the decoder. This contains settings for the PNG and the Zlib
-decoder, but not the Info settings from the Info structs.
-*/
-typedef struct LodePNGDecoderSettings {
-  LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/
-
-  /* Check LodePNGDecompressSettings for more ignorable errors such as ignore_adler32 */
-  unsigned ignore_crc; /*ignore CRC checksums*/
-  unsigned ignore_critical; /*ignore unknown critical chunks*/
-  unsigned ignore_end; /*ignore issues at end of file if possible (missing IEND chunk, too large chunk, ...)*/
-  /* TODO: make a system involving warnings with levels and a strict mode instead. Other potentially recoverable
-     errors: srgb rendering intent value, size of content of ancillary chunks, more than 79 characters for some
-     strings, placement/combination rules for ancillary chunks, crc of unknown chunks, allowed characters
-     in string keys, etc... */
-
-  unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/
-  /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/
-  unsigned remember_unknown_chunks;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-} LodePNGDecoderSettings;
-
-void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings);
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/
-typedef enum LodePNGFilterStrategy {
-  /*every filter at zero*/
-  LFS_ZERO,
-  /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/
-  LFS_MINSUM,
-  /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending
-  on the image, this is better or worse than minsum.*/
-  LFS_ENTROPY,
-  /*
-  Brute-force-search PNG filters by compressing each filter for each scanline.
-  Experimental, very slow, and only rarely gives better compression than MINSUM.
-  */
-  LFS_BRUTE_FORCE,
-  /*use predefined_filters buffer: you specify the filter type for each scanline*/
-  LFS_PREDEFINED
-} LodePNGFilterStrategy;
-
-/*Gives characteristics about the integer RGBA colors of the image (count, alpha channel usage, bit depth, ...),
-which helps decide which color model to use for encoding.
-Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.
-NOTE: This is not related to the ICC color profile, search "iccp_profile" instead to find the ICC/chromacity/...
-fields in this header file.*/
-typedef struct LodePNGColorProfile {
-  unsigned colored; /*not grayscale*/
-  unsigned key; /*image is not opaque and color key is possible instead of full alpha*/
-  unsigned short key_r; /*key values, always as 16-bit, in 8-bit case the byte is duplicated, e.g. 65535 means 255*/
-  unsigned short key_g;
-  unsigned short key_b;
-  unsigned alpha; /*image is not opaque and alpha channel or alpha palette required*/
-  unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/
-  unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/
-  unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for grayscale only. 16 if 16-bit per channel required.*/
-  size_t numpixels;
-} LodePNGColorProfile;
-
-void lodepng_color_profile_init(LodePNGColorProfile* profile);
-
-/*Get a LodePNGColorProfile of the image. The profile must already have been inited.
-NOTE: This is not related to the ICC color profile, search "iccp_profile" instead to find the ICC/chromacity/...
-fields in this header file.*/
-unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
-                                   const unsigned char* image, unsigned w, unsigned h,
-                                   const LodePNGColorMode* mode_in);
-/*The function LodePNG uses internally to decide the PNG color with auto_convert.
-Chooses an optimal color model, e.g. gray if only gray pixels, palette if < 256 colors, ...*/
-unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
-                                   const unsigned char* image, unsigned w, unsigned h,
-                                   const LodePNGColorMode* mode_in);
-
-/*Settings for the encoder.*/
-typedef struct LodePNGEncoderSettings {
-  LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/
-
-  unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/
-
-  /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than
-  8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to
-  completely follow the official PNG heuristic, filter_palette_zero must be true and
-  filter_strategy must be LFS_MINSUM*/
-  unsigned filter_palette_zero;
-  /*Which filter strategy to use when not using zeroes due to filter_palette_zero.
-  Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/
-  LodePNGFilterStrategy filter_strategy;
-  /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with
-  the same length as the amount of scanlines in the image, and each value must <= 5. You
-  have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero
-  must be set to 0 to ensure this is also used on palette or low bitdepth images.*/
-  const unsigned char* predefined_filters;
-
-  /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette).
-  If colortype is 3, PLTE is _always_ created.*/
-  unsigned force_palette;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  /*add LodePNG identifier and version as a text chunk, for debugging*/
-  unsigned add_id;
-  /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/
-  unsigned text_compression;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-} LodePNGEncoderSettings;
-
-void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings);
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-
-#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)
-/*The settings, state and information for extended encoding and decoding.*/
-typedef struct LodePNGState {
-#ifdef LODEPNG_COMPILE_DECODER
-  LodePNGDecoderSettings decoder; /*the decoding settings*/
-#endif /*LODEPNG_COMPILE_DECODER*/
-#ifdef LODEPNG_COMPILE_ENCODER
-  LodePNGEncoderSettings encoder; /*the encoding settings*/
-#endif /*LODEPNG_COMPILE_ENCODER*/
-  LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/
-  LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/
-  unsigned error;
-#ifdef LODEPNG_COMPILE_CPP
-  /* For the lodepng::State subclass. */
-  virtual ~LodePNGState(){}
-#endif
-} LodePNGState;
-
-/*init, cleanup and copy functions to use with this struct*/
-void lodepng_state_init(LodePNGState* state);
-void lodepng_state_cleanup(LodePNGState* state);
-void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source);
-#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */
-
-#ifdef LODEPNG_COMPILE_DECODER
-/*
-Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and
-getting much more information about the PNG image and color mode.
-*/
-unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
-                        LodePNGState* state,
-                        const unsigned char* in, size_t insize);
-
-/*
-Read the PNG header, but not the actual data. This returns only the information
-that is in the IHDR chunk of the PNG, such as width, height and color type. The
-information is placed in the info_png field of the LodePNGState.
-*/
-unsigned lodepng_inspect(unsigned* w, unsigned* h,
-                         LodePNGState* state,
-                         const unsigned char* in, size_t insize);
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-/*
-Reads one metadata chunk (other than IHDR) of the PNG file and outputs what it
-read in the state. Returns error code on failure.
-Use lodepng_inspect first with a new state, then e.g. lodepng_chunk_find_const
-to find the desired chunk type, and if non null use lodepng_inspect_chunk (with
-chunk_pointer - start_of_file as pos).
-Supports most metadata chunks from the PNG standard (gAMA, bKGD, tEXt, ...).
-Ignores unsupported, unknown, non-metadata or IHDR chunks (without error).
-Requirements: &in[pos] must point to start of a chunk, must use regular
-lodepng_inspect first since format of most other chunks depends on IHDR, and if
-there is a PLTE chunk, that one must be inspected before tRNS or bKGD.
-*/
-unsigned lodepng_inspect_chunk(LodePNGState* state, size_t pos,
-                               const unsigned char* in, size_t insize);
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/
-unsigned lodepng_encode(unsigned char** out, size_t* outsize,
-                        const unsigned char* image, unsigned w, unsigned h,
-                        LodePNGState* state);
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-/*
-The lodepng_chunk functions are normally not needed, except to traverse the
-unknown chunks stored in the LodePNGInfo struct, or add new ones to it.
-It also allows traversing the chunks of an encoded PNG file yourself.
-
-The chunk pointer always points to the beginning of the chunk itself, that is
-the first byte of the 4 length bytes.
-
-In the PNG file format, chunks have the following format:
--4 bytes length: length of the data of the chunk in bytes (chunk itself is 12 bytes longer)
--4 bytes chunk type (ASCII a-z,A-Z only, see below)
--length bytes of data (may be 0 bytes if length was 0)
--4 bytes of CRC, computed on chunk name + data
-
-The first chunk starts at the 8th byte of the PNG file, the entire rest of the file
-exists out of concatenated chunks with the above format.
-
-PNG standard chunk ASCII naming conventions:
--First byte: uppercase = critical, lowercase = ancillary
--Second byte: uppercase = public, lowercase = private
--Third byte: must be uppercase
--Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy
-*/
-
-/*
-Gets the length of the data of the chunk. Total chunk length has 12 bytes more.
-There must be at least 4 bytes to read from. If the result value is too large,
-it may be corrupt data.
-*/
-unsigned lodepng_chunk_length(const unsigned char* chunk);
-
-/*puts the 4-byte type in null terminated string*/
-void lodepng_chunk_type(char type[5], const unsigned char* chunk);
-
-/*check if the type is the given type*/
-unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type);
-
-/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/
-unsigned char lodepng_chunk_ancillary(const unsigned char* chunk);
-
-/*0: public, 1: private (see PNG standard)*/
-unsigned char lodepng_chunk_private(const unsigned char* chunk);
-
-/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/
-unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk);
-
-/*get pointer to the data of the chunk, where the input points to the header of the chunk*/
-unsigned char* lodepng_chunk_data(unsigned char* chunk);
-const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk);
-
-/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/
-unsigned lodepng_chunk_check_crc(const unsigned char* chunk);
-
-/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/
-void lodepng_chunk_generate_crc(unsigned char* chunk);
-
-/*
-Iterate to next chunks, allows iterating through all chunks of the PNG file.
-Input must be at the beginning of a chunk (result of a previous lodepng_chunk_next call,
-or the 8th byte of a PNG file which always has the first chunk), or alternatively may
-point to the first byte of the PNG file (which is not a chunk but the magic header, the
-function will then skip over it and return the first real chunk).
-Expects at least 8 readable bytes of memory in the input pointer.
-Will output pointer to the start of the next chunk or the end of the file if there
-is no more chunk after this. Start this process at the 8th byte of the PNG file.
-In a non-corrupt PNG file, the last chunk should have name "IEND".
-*/
-unsigned char* lodepng_chunk_next(unsigned char* chunk);
-const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk);
-
-/*Finds the first chunk with the given type in the range [chunk, end), or returns NULL if not found.*/
-unsigned char* lodepng_chunk_find(unsigned char* chunk, const unsigned char* end, const char type[5]);
-const unsigned char* lodepng_chunk_find_const(const unsigned char* chunk, const unsigned char* end, const char type[5]);
-
-/*
-Appends chunk to the data in out. The given chunk should already have its chunk header.
-The out variable and outlength are updated to reflect the new reallocated buffer.
-Returns error code (0 if it went ok)
-*/
-unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk);
-
-/*
-Appends new chunk to out. The chunk to append is given by giving its length, type
-and data separately. The type is a 4-letter string.
-The out variable and outlength are updated to reflect the new reallocated buffer.
-Returne error code (0 if it went ok)
-*/
-unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
-                              const char* type, const unsigned char* data);
-
-
-/*Calculate CRC32 of buffer*/
-unsigned lodepng_crc32(const unsigned char* buf, size_t len);
-#endif /*LODEPNG_COMPILE_PNG*/
-
-
-#ifdef LODEPNG_COMPILE_ZLIB
-/*
-This zlib part can be used independently to zlib compress and decompress a
-buffer. It cannot be used to create gzip files however, and it only supports the
-part of zlib that is required for PNG, it does not support dictionaries.
-*/
-
-#ifdef LODEPNG_COMPILE_DECODER
-/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/
-unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
-                         const unsigned char* in, size_t insize,
-                         const LodePNGDecompressSettings* settings);
-
-/*
-Decompresses Zlib data. Reallocates the out buffer and appends the data. The
-data must be according to the zlib specification.
-Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
-buffer and *outsize its size in bytes. out must be freed by user after usage.
-*/
-unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize,
-                                 const unsigned char* in, size_t insize,
-                                 const LodePNGDecompressSettings* settings);
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/*
-Compresses data with Zlib. Reallocates the out buffer and appends the data.
-Zlib adds a small header and trailer around the deflate data.
-The data is output in the format of the zlib specification.
-Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
-buffer and *outsize its size in bytes. out must be freed by user after usage.
-*/
-unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize,
-                               const unsigned char* in, size_t insize,
-                               const LodePNGCompressSettings* settings);
-
-/*
-Find length-limited Huffman code for given frequencies. This function is in the
-public interface only for tests, it's used internally by lodepng_deflate.
-*/
-unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,
-                                      size_t numcodes, unsigned maxbitlen);
-
-/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/
-unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
-                         const unsigned char* in, size_t insize,
-                         const LodePNGCompressSettings* settings);
-
-#endif /*LODEPNG_COMPILE_ENCODER*/
-#endif /*LODEPNG_COMPILE_ZLIB*/
-
-#ifdef LODEPNG_COMPILE_DISK
-/*
-Load a file from disk into buffer. The function allocates the out buffer, and
-after usage you should free it.
-out: output parameter, contains pointer to loaded buffer.
-outsize: output parameter, size of the allocated out buffer
-filename: the path to the file to load
-return value: error code (0 means ok)
-*/
-unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename);
-
-/*
-Save a file from buffer to disk. Warning, if it exists, this function overwrites
-the file without warning!
-buffer: the buffer to write
-buffersize: size of the buffer to write
-filename: the path to the file to save to
-return value: error code (0 means ok)
-*/
-unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename);
-#endif /*LODEPNG_COMPILE_DISK*/
-
-#ifdef LODEPNG_COMPILE_CPP
-/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */
-namespace lodepng {
-#ifdef LODEPNG_COMPILE_PNG
-class State : public LodePNGState {
-  public:
-    State();
-    State(const State& other);
-    virtual ~State();
-    State& operator=(const State& other);
-};
-
-#ifdef LODEPNG_COMPILE_DECODER
-/* Same as other lodepng::decode, but using a State for more settings and information. */
-unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
-                State& state,
-                const unsigned char* in, size_t insize);
-unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
-                State& state,
-                const std::vector<unsigned char>& in);
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/* Same as other lodepng::encode, but using a State for more settings and information. */
-unsigned encode(std::vector<unsigned char>& out,
-                const unsigned char* in, unsigned w, unsigned h,
-                State& state);
-unsigned encode(std::vector<unsigned char>& out,
-                const std::vector<unsigned char>& in, unsigned w, unsigned h,
-                State& state);
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#ifdef LODEPNG_COMPILE_DISK
-/*
-Load a file from disk into an std::vector.
-return value: error code (0 means ok)
-*/
-unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename);
-
-/*
-Save the binary data in an std::vector to a file on disk. The file is overwritten
-without warning.
-*/
-unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename);
-#endif /* LODEPNG_COMPILE_DISK */
-#endif /* LODEPNG_COMPILE_PNG */
-
-#ifdef LODEPNG_COMPILE_ZLIB
-#ifdef LODEPNG_COMPILE_DECODER
-/* Zlib-decompress an unsigned char buffer */
-unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
-                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
-
-/* Zlib-decompress an std::vector */
-unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
-                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
-#endif /* LODEPNG_COMPILE_DECODER */
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/* Zlib-compress an unsigned char buffer */
-unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
-                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
-
-/* Zlib-compress an std::vector */
-unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
-                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
-#endif /* LODEPNG_COMPILE_ENCODER */
-#endif /* LODEPNG_COMPILE_ZLIB */
-} /* namespace lodepng */
-#endif /*LODEPNG_COMPILE_CPP*/
-
-/*
-TODO:
-[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often
-[.] check compatibility with various compilers  - done but needs to be redone for every newer version
-[X] converting color to 16-bit per channel types
-[X] support color profile chunk types (but never let them touch RGB values by default)
-[ ] support all public PNG chunk types (almost done except sBIT, sPLT and hIST)
-[ ] make sure encoder generates no chunks with size > (2^31)-1
-[ ] partial decoding (stream processing)
-[X] let the "isFullyOpaque" function check color keys and transparent palettes too
-[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl"
-[ ] allow treating some errors like warnings, when image is recoverable (e.g. 69, 57, 58)
-[ ] make warnings like: oob palette, checksum fail, data after iend, wrong/unknown crit chunk, no null terminator in text, ...
-[ ] error messages with line numbers (and version)
-[ ] errors in state instead of as return code?
-[ ] new errors/warnings like suspiciously big decompressed ztxt or iccp chunk
-[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes
-[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...
-[ ] allow user to give data (void*) to custom allocator
-[ ] provide alternatives for C library functions not present on some platforms (memcpy, ...)
-[ ] rename "grey" to "gray" everywhere since "color" also uses US spelling (keep "grey" copies for backwards compatibility)
-*/
-
-#endif /*LODEPNG_H inclusion guard*/
-
-/*
-LodePNG Documentation
----------------------
-
-0. table of contents
---------------------
-
-  1. about
-   1.1. supported features
-   1.2. features not supported
-  2. C and C++ version
-  3. security
-  4. decoding
-  5. encoding
-  6. color conversions
-    6.1. PNG color types
-    6.2. color conversions
-    6.3. padding bits
-    6.4. A note about 16-bits per channel and endianness
-  7. error values
-  8. chunks and PNG editing
-  9. compiler support
-  10. examples
-   10.1. decoder C++ example
-   10.2. decoder C example
-  11. state settings reference
-  12. changes
-  13. contact information
-
-
-1. about
---------
-
-PNG is a file format to store raster images losslessly with good compression,
-supporting different color types and alpha channel.
-
-LodePNG is a PNG codec according to the Portable Network Graphics (PNG)
-Specification (Second Edition) - W3C Recommendation 10 November 2003.
-
-The specifications used are:
-
-*) Portable Network Graphics (PNG) Specification (Second Edition):
-     http://www.w3.org/TR/2003/REC-PNG-20031110
-*) RFC 1950 ZLIB Compressed Data Format version 3.3:
-     http://www.gzip.org/zlib/rfc-zlib.html
-*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3:
-     http://www.gzip.org/zlib/rfc-deflate.html
-
-The most recent version of LodePNG can currently be found at
-http://lodev.org/lodepng/
-
-LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds
-extra functionality.
-
-LodePNG exists out of two files:
--lodepng.h: the header file for both C and C++
--lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage
-
-If you want to start using LodePNG right away without reading this doc, get the
-examples from the LodePNG website to see how to use it in code, or check the
-smaller examples in chapter 13 here.
-
-LodePNG is simple but only supports the basic requirements. To achieve
-simplicity, the following design choices were made: There are no dependencies
-on any external library. There are functions to decode and encode a PNG with
-a single function call, and extended versions of these functions taking a
-LodePNGState struct allowing to specify or get more information. By default
-the colors of the raw image are always RGB or RGBA, no matter what color type
-the PNG file uses. To read and write files, there are simple functions to
-convert the files to/from buffers in memory.
-
-This all makes LodePNG suitable for loading textures in games, demos and small
-programs, ... It's less suitable for full fledged image editors, loading PNGs
-over network (it requires all the image data to be available before decoding can
-begin), life-critical systems, ...
-
-1.1. supported features
------------------------
-
-The following features are supported by the decoder:
-
-*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image,
-   or the same color type as the PNG
-*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image
-*) Adam7 interlace and deinterlace for any color type
-*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk
-*) support for alpha channels, including RGBA color model, translucent palettes and color keying
-*) zlib decompression (inflate)
-*) zlib compression (deflate)
-*) CRC32 and ADLER32 checksums
-*) colorimetric color profile conversions: currently experimentally available in lodepng_util.cpp only,
-   plus alternatively ability to pass on chroma/gamma/ICC profile information to other color management system.
-*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks.
-*) the following chunks are supported by both encoder and decoder:
-    IHDR: header information
-    PLTE: color palette
-    IDAT: pixel data
-    IEND: the final chunk
-    tRNS: transparency for palettized images
-    tEXt: textual information
-    zTXt: compressed textual information
-    iTXt: international textual information
-    bKGD: suggested background color
-    pHYs: physical dimensions
-    tIME: modification time
-    cHRM: RGB chromaticities
-    gAMA: RGB gamma correction
-    iCCP: ICC color profile
-    sRGB: rendering intent
-
-1.2. features not supported
----------------------------
-
-The following features are _not_ supported:
-
-*) some features needed to make a conformant PNG-Editor might be still missing.
-*) partial loading/stream processing. All data must be available and is processed in one call.
-*) The following public chunks are not (yet) supported but treated as unknown chunks by LodePNG:
-    sBIT
-    hIST
-    sPLT
-
-
-2. C and C++ version
---------------------
-
-The C version uses buffers allocated with alloc that you need to free()
-yourself. You need to use init and cleanup functions for each struct whenever
-using a struct from the C version to avoid exploits and memory leaks.
-
-The C++ version has extra functions with std::vectors in the interface and the
-lodepng::State class which is a LodePNGState with constructor and destructor.
-
-These files work without modification for both C and C++ compilers because all
-the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers
-ignore it, and the C code is made to compile both with strict ISO C90 and C++.
-
-To use the C++ version, you need to rename the source file to lodepng.cpp
-(instead of lodepng.c), and compile it with a C++ compiler.
-
-To use the C version, you need to rename the source file to lodepng.c (instead
-of lodepng.cpp), and compile it with a C compiler.
-
-
-3. Security
------------
-
-Even if carefully designed, it's always possible that LodePNG contains possible
-exploits. If you discover one, please let me know, and it will be fixed.
-
-When using LodePNG, care has to be taken with the C version of LodePNG, as well
-as the C-style structs when working with C++. The following conventions are used
-for all C-style structs:
-
--if a struct has a corresponding init function, always call the init function when making a new one
--if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks
--if a struct has a corresponding copy function, use the copy function instead of "=".
- The destination must also be inited already.
-
-
-4. Decoding
------------
-
-Decoding converts a PNG compressed image to a raw pixel buffer.
-
-Most documentation on using the decoder is at its declarations in the header
-above. For C, simple decoding can be done with functions such as
-lodepng_decode32, and more advanced decoding can be done with the struct
-LodePNGState and lodepng_decode. For C++, all decoding can be done with the
-various lodepng::decode functions, and lodepng::State can be used for advanced
-features.
-
-When using the LodePNGState, it uses the following fields for decoding:
-*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here
-*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get
-*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use
-
-LodePNGInfo info_png
---------------------
-
-After decoding, this contains extra information of the PNG image, except the actual
-pixels, width and height because these are already gotten directly from the decoder
-functions.
-
-It contains for example the original color type of the PNG image, text comments,
-suggested background color, etc... More details about the LodePNGInfo struct are
-at its declaration documentation.
-
-LodePNGColorMode info_raw
--------------------------
-
-When decoding, here you can specify which color type you want
-the resulting raw image to be. If this is different from the colortype of the
-PNG, then the decoder will automatically convert the result. This conversion
-always works, except if you want it to convert a color PNG to grayscale or to
-a palette with missing colors.
-
-By default, 32-bit color is used for the result.
-
-LodePNGDecoderSettings decoder
-------------------------------
-
-The settings can be used to ignore the errors created by invalid CRC and Adler32
-chunks, and to disable the decoding of tEXt chunks.
-
-There's also a setting color_convert, true by default. If false, no conversion
-is done, the resulting data will be as it was in the PNG (after decompression)
-and you'll have to puzzle the colors of the pixels together yourself using the
-color type information in the LodePNGInfo.
-
-
-5. Encoding
------------
-
-Encoding converts a raw pixel buffer to a PNG compressed image.
-
-Most documentation on using the encoder is at its declarations in the header
-above. For C, simple encoding can be done with functions such as
-lodepng_encode32, and more advanced decoding can be done with the struct
-LodePNGState and lodepng_encode. For C++, all encoding can be done with the
-various lodepng::encode functions, and lodepng::State can be used for advanced
-features.
-
-Like the decoder, the encoder can also give errors. However it gives less errors
-since the encoder input is trusted, the decoder input (a PNG image that could
-be forged by anyone) is not trusted.
-
-When using the LodePNGState, it uses the following fields for encoding:
-*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be.
-*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has
-*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use
-
-LodePNGInfo info_png
---------------------
-
-When encoding, you use this the opposite way as when decoding: for encoding,
-you fill in the values you want the PNG to have before encoding. By default it's
-not needed to specify a color type for the PNG since it's automatically chosen,
-but it's possible to choose it yourself given the right settings.
-
-The encoder will not always exactly match the LodePNGInfo struct you give,
-it tries as close as possible. Some things are ignored by the encoder. The
-encoder uses, for example, the following settings from it when applicable:
-colortype and bitdepth, text chunks, time chunk, the color key, the palette, the
-background color, the interlace method, unknown chunks, ...
-
-When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk.
-If the palette contains any colors for which the alpha channel is not 255 (so
-there are translucent colors in the palette), it'll add a tRNS chunk.
-
-LodePNGColorMode info_raw
--------------------------
-
-You specify the color type of the raw image that you give to the input here,
-including a possible transparent color key and palette you happen to be using in
-your raw image data.
-
-By default, 32-bit color is assumed, meaning your input has to be in RGBA
-format with 4 bytes (unsigned chars) per pixel.
-
-LodePNGEncoderSettings encoder
-------------------------------
-
-The following settings are supported (some are in sub-structs):
-*) auto_convert: when this option is enabled, the encoder will
-automatically choose the smallest possible color mode (including color key) that
-can encode the colors of all pixels without information loss.
-*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree,
-   2 = dynamic huffman tree (best compression). Should be 2 for proper
-   compression.
-*) use_lz77: whether or not to use LZ77 for compressed block types. Should be
-   true for proper compression.
-*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value
-   2048 by default, but can be set to 32768 for better, but slow, compression.
-*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE
-   chunk if force_palette is true. This can used as suggested palette to convert
-   to by viewers that don't support more than 256 colors (if those still exist)
-*) add_id: add text chunk "Encoder: LodePNG <version>" to the image.
-*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks.
-  zTXt chunks use zlib compression on the text. This gives a smaller result on
-  large texts but a larger result on small texts (such as a single program name).
-  It's all tEXt or all zTXt though, there's no separate setting per text yet.
-
-
-6. color conversions
---------------------
-
-An important thing to note about LodePNG, is that the color type of the PNG, and
-the color type of the raw image, are completely independent. By default, when
-you decode a PNG, you get the result as a raw image in the color type you want,
-no matter whether the PNG was encoded with a palette, grayscale or RGBA color.
-And if you encode an image, by default LodePNG will automatically choose the PNG
-color type that gives good compression based on the values of colors and amount
-of colors in the image. It can be configured to let you control it instead as
-well, though.
-
-To be able to do this, LodePNG does conversions from one color mode to another.
-It can convert from almost any color type to any other color type, except the
-following conversions: RGB to grayscale is not supported, and converting to a
-palette when the palette doesn't have a required color is not supported. This is
-not supported on purpose: this is information loss which requires a color
-reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to gray
-is easy, but there are multiple ways if you want to give some channels more
-weight).
-
-By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB
-color, no matter what color type the PNG has. And by default when encoding,
-LodePNG automatically picks the best color model for the output PNG, and expects
-the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control
-the color format of the images yourself, you can skip this chapter.
-
-6.1. PNG color types
---------------------
-
-A PNG image can have many color types, ranging from 1-bit color to 64-bit color,
-as well as palettized color modes. After the zlib decompression and unfiltering
-in the PNG image is done, the raw pixel data will have that color type and thus
-a certain amount of bits per pixel. If you want the output raw image after
-decoding to have another color type, a conversion is done by LodePNG.
-
-The PNG specification gives the following color types:
-
-0: grayscale, bit depths 1, 2, 4, 8, 16
-2: RGB, bit depths 8 and 16
-3: palette, bit depths 1, 2, 4 and 8
-4: grayscale with alpha, bit depths 8 and 16
-6: RGBA, bit depths 8 and 16
-
-Bit depth is the amount of bits per pixel per color channel. So the total amount
-of bits per pixel is: amount of channels * bitdepth.
-
-6.2. color conversions
-----------------------
-
-As explained in the sections about the encoder and decoder, you can specify
-color types and bit depths in info_png and info_raw to change the default
-behaviour.
-
-If, when decoding, you want the raw image to be something else than the default,
-you need to set the color type and bit depth you want in the LodePNGColorMode,
-or the parameters colortype and bitdepth of the simple decoding function.
-
-If, when encoding, you use another color type than the default in the raw input
-image, you need to specify its color type and bit depth in the LodePNGColorMode
-of the raw image, or use the parameters colortype and bitdepth of the simple
-encoding function.
-
-If, when encoding, you don't want LodePNG to choose the output PNG color type
-but control it yourself, you need to set auto_convert in the encoder settings
-to false, and specify the color type you want in the LodePNGInfo of the
-encoder (including palette: it can generate a palette if auto_convert is true,
-otherwise not).
-
-If the input and output color type differ (whether user chosen or auto chosen),
-LodePNG will do a color conversion, which follows the rules below, and may
-sometimes result in an error.
-
-To avoid some confusion:
--the decoder converts from PNG to raw image
--the encoder converts from raw image to PNG
--the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image
--the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG
--when encoding, the color type in LodePNGInfo is ignored if auto_convert
- is enabled, it is automatically generated instead
--when decoding, the color type in LodePNGInfo is set by the decoder to that of the original
- PNG image, but it can be ignored since the raw image has the color type you requested instead
--if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion
- between the color types is done if the color types are supported. If it is not
- supported, an error is returned. If the types are the same, no conversion is done.
--even though some conversions aren't supported, LodePNG supports loading PNGs from any
- colortype and saving PNGs to any colortype, sometimes it just requires preparing
- the raw image correctly before encoding.
--both encoder and decoder use the same color converter.
-
-The function lodepng_convert does the color conversion. It is available in the
-interface but normally isn't needed since the encoder and decoder already call
-it.
-
-Non supported color conversions:
--color to grayscale when non-gray pixels are present: no error is thrown, but
-the result will look ugly because only the red channel is taken (it assumes all
-three channels are the same in this case so ignores green and blue). The reason
-no error is given is to allow converting from three-channel grayscale images to
-one-channel even if there are numerical imprecisions.
--anything to palette when the palette does not have an exact match for a from-color
-in it: in this case an error is thrown
-
-Supported color conversions:
--anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA
--any gray or gray+alpha, to gray or gray+alpha
--anything to a palette, as long as the palette has the requested colors in it
--removing alpha channel
--higher to smaller bitdepth, and vice versa
-
-If you want no color conversion to be done (e.g. for speed or control):
--In the encoder, you can make it save a PNG with any color type by giving the
-raw color mode and LodePNGInfo the same color mode, and setting auto_convert to
-false.
--In the decoder, you can make it store the pixel data in the same color type
-as the PNG has, by setting the color_convert setting to false. Settings in
-info_raw are then ignored.
-
-6.3. padding bits
------------------
-
-In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines
-have a bit amount that isn't a multiple of 8, then padding bits are used so that each
-scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output.
-The raw input image you give to the encoder, and the raw output image you get from the decoder
-will NOT have these padding bits, e.g. in the case of a 1-bit image with a width
-of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte,
-not the first bit of a new byte.
-
-6.4. A note about 16-bits per channel and endianness
-----------------------------------------------------
-
-LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like
-for any other color format. The 16-bit values are stored in big endian (most
-significant byte first) in these arrays. This is the opposite order of the
-little endian used by x86 CPU's.
-
-LodePNG always uses big endian because the PNG file format does so internally.
-Conversions to other formats than PNG uses internally are not supported by
-LodePNG on purpose, there are myriads of formats, including endianness of 16-bit
-colors, the order in which you store R, G, B and A, and so on. Supporting and
-converting to/from all that is outside the scope of LodePNG.
-
-This may mean that, depending on your use case, you may want to convert the big
-endian output of LodePNG to little endian with a for loop. This is certainly not
-always needed, many applications and libraries support big endian 16-bit colors
-anyway, but it means you cannot simply cast the unsigned char* buffer to an
-unsigned short* buffer on x86 CPUs.
-
-
-7. error values
----------------
-
-All functions in LodePNG that return an error code, return 0 if everything went
-OK, or a non-zero code if there was an error.
-
-The meaning of the LodePNG error values can be retrieved with the function
-lodepng_error_text: given the numerical error code, it returns a description
-of the error in English as a string.
-
-Check the implementation of lodepng_error_text to see the meaning of each code.
-
-
-8. chunks and PNG editing
--------------------------
-
-If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG
-editor that should follow the rules about handling of unknown chunks, or if your
-program is able to read other types of chunks than the ones handled by LodePNG,
-then that's possible with the chunk functions of LodePNG.
-
-A PNG chunk has the following layout:
-
-4 bytes length
-4 bytes type name
-length bytes data
-4 bytes CRC
-
-8.1. iterating through chunks
------------------------------
-
-If you have a buffer containing the PNG image data, then the first chunk (the
-IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the
-signature of the PNG and are not part of a chunk. But if you start at byte 8
-then you have a chunk, and can check the following things of it.
-
-NOTE: none of these functions check for memory buffer boundaries. To avoid
-exploits, always make sure the buffer contains all the data of the chunks.
-When using lodepng_chunk_next, make sure the returned value is within the
-allocated memory.
-
-unsigned lodepng_chunk_length(const unsigned char* chunk):
-
-Get the length of the chunk's data. The total chunk length is this length + 12.
-
-void lodepng_chunk_type(char type[5], const unsigned char* chunk):
-unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type):
-
-Get the type of the chunk or compare if it's a certain type
-
-unsigned char lodepng_chunk_critical(const unsigned char* chunk):
-unsigned char lodepng_chunk_private(const unsigned char* chunk):
-unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk):
-
-Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are).
-Check if the chunk is private (public chunks are part of the standard, private ones not).
-Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical
-chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your
-program doesn't handle that type of unknown chunk.
-
-unsigned char* lodepng_chunk_data(unsigned char* chunk):
-const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk):
-
-Get a pointer to the start of the data of the chunk.
-
-unsigned lodepng_chunk_check_crc(const unsigned char* chunk):
-void lodepng_chunk_generate_crc(unsigned char* chunk):
-
-Check if the crc is correct or generate a correct one.
-
-unsigned char* lodepng_chunk_next(unsigned char* chunk):
-const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk):
-
-Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these
-functions do no boundary checking of the allocated data whatsoever, so make sure there is enough
-data available in the buffer to be able to go to the next chunk.
-
-unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk):
-unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
-                              const char* type, const unsigned char* data):
-
-These functions are used to create new chunks that are appended to the data in *out that has
-length *outlength. The append function appends an existing chunk to the new data. The create
-function creates a new chunk with the given parameters and appends it. Type is the 4-letter
-name of the chunk.
-
-8.2. chunks in info_png
------------------------
-
-The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3
-buffers (each with size) to contain 3 types of unknown chunks:
-the ones that come before the PLTE chunk, the ones that come between the PLTE
-and the IDAT chunks, and the ones that come after the IDAT chunks.
-It's necessary to make the distionction between these 3 cases because the PNG
-standard forces to keep the ordering of unknown chunks compared to the critical
-chunks, but does not force any other ordering rules.
-
-info_png.unknown_chunks_data[0] is the chunks before PLTE
-info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT
-info_png.unknown_chunks_data[2] is the chunks after IDAT
-
-The chunks in these 3 buffers can be iterated through and read by using the same
-way described in the previous subchapter.
-
-When using the decoder to decode a PNG, you can make it store all unknown chunks
-if you set the option settings.remember_unknown_chunks to 1. By default, this
-option is off (0).
-
-The encoder will always encode unknown chunks that are stored in the info_png.
-If you need it to add a particular chunk that isn't known by LodePNG, you can
-use lodepng_chunk_append or lodepng_chunk_create to the chunk data in
-info_png.unknown_chunks_data[x].
-
-Chunks that are known by LodePNG should not be added in that way. E.g. to make
-LodePNG add a bKGD chunk, set background_defined to true and add the correct
-parameters there instead.
-
-
-9. compiler support
--------------------
-
-No libraries other than the current standard C library are needed to compile
-LodePNG. For the C++ version, only the standard C++ library is needed on top.
-Add the files lodepng.c(pp) and lodepng.h to your project, include
-lodepng.h where needed, and your program can read/write PNG files.
-
-It is compatible with C90 and up, and C++03 and up.
-
-If performance is important, use optimization when compiling! For both the
-encoder and decoder, this makes a large difference.
-
-Make sure that LodePNG is compiled with the same compiler of the same version
-and with the same settings as the rest of the program, or the interfaces with
-std::vectors and std::strings in C++ can be incompatible.
-
-CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.
-
-*) gcc and g++
-
-LodePNG is developed in gcc so this compiler is natively supported. It gives no
-warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++
-version 4.7.1 on Linux, 32-bit and 64-bit.
-
-*) Clang
-
-Fully supported and warning-free.
-
-*) Mingw
-
-The Mingw compiler (a port of gcc for Windows) should be fully supported by
-LodePNG.
-
-*) Visual Studio and Visual C++ Express Edition
-
-LodePNG should be warning-free with warning level W4. Two warnings were disabled
-with pragmas though: warning 4244 about implicit conversions, and warning 4996
-where it wants to use a non-standard function fopen_s instead of the standard C
-fopen.
-
-Visual Studio may want "stdafx.h" files to be included in each source file and
-give an error "unexpected end of file while looking for precompiled header".
-This is not standard C++ and will not be added to the stock LodePNG. You can
-disable it for lodepng.cpp only by right clicking it, Properties, C/C++,
-Precompiled Headers, and set it to Not Using Precompiled Headers there.
-
-NOTE: Modern versions of VS should be fully supported, but old versions, e.g.
-VS6, are not guaranteed to work.
-
-*) Compilers on Macintosh
-
-LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for
-C and C++.
-
-*) Other Compilers
-
-If you encounter problems on any compilers, feel free to let me know and I may
-try to fix it if the compiler is modern and standards complient.
-
-
-10. examples
-------------
-
-This decoder example shows the most basic usage of LodePNG. More complex
-examples can be found on the LodePNG website.
-
-10.1. decoder C++ example
--------------------------
-
-#include "lodepng.h"
-#include <iostream>
-
-int main(int argc, char *argv[]) {
-  const char* filename = argc > 1 ? argv[1] : "test.png";
-
-  //load and decode
-  std::vector<unsigned char> image;
-  unsigned width, height;
-  unsigned error = lodepng::decode(image, width, height, filename);
-
-  //if there's an error, display it
-  if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;
-
-  //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ...
-}
-
-10.2. decoder C example
------------------------
-
-#include "lodepng.h"
-
-int main(int argc, char *argv[]) {
-  unsigned error;
-  unsigned char* image;
-  size_t width, height;
-  const char* filename = argc > 1 ? argv[1] : "test.png";
-
-  error = lodepng_decode32_file(&image, &width, &height, filename);
-
-  if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error));
-
-  / * use image here * /
-
-  free(image);
-  return 0;
-}
-
-11. state settings reference
-----------------------------
-
-A quick reference of some settings to set on the LodePNGState
-
-For decoding:
-
-state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums
-state.decoder.zlibsettings.custom_...: use custom inflate function
-state.decoder.ignore_crc: ignore CRC checksums
-state.decoder.ignore_critical: ignore unknown critical chunks
-state.decoder.ignore_end: ignore missing IEND chunk. May fail if this corruption causes other errors
-state.decoder.color_convert: convert internal PNG color to chosen one
-state.decoder.read_text_chunks: whether to read in text metadata chunks
-state.decoder.remember_unknown_chunks: whether to read in unknown chunks
-state.info_raw.colortype: desired color type for decoded image
-state.info_raw.bitdepth: desired bit depth for decoded image
-state.info_raw....: more color settings, see struct LodePNGColorMode
-state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo
-
-For encoding:
-
-state.encoder.zlibsettings.btype: disable compression by setting it to 0
-state.encoder.zlibsettings.use_lz77: use LZ77 in compression
-state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize
-state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match
-state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching
-state.encoder.zlibsettings.lazymatching: try one more LZ77 matching
-state.encoder.zlibsettings.custom_...: use custom deflate function
-state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png
-state.encoder.filter_palette_zero: PNG filter strategy for palette
-state.encoder.filter_strategy: PNG filter strategy to encode with
-state.encoder.force_palette: add palette even if not encoding to one
-state.encoder.add_id: add LodePNG identifier and version as a text chunk
-state.encoder.text_compression: use compressed text chunks for metadata
-state.info_raw.colortype: color type of raw input image you provide
-state.info_raw.bitdepth: bit depth of raw input image you provide
-state.info_raw: more color settings, see struct LodePNGColorMode
-state.info_png.color.colortype: desired color type if auto_convert is false
-state.info_png.color.bitdepth: desired bit depth if auto_convert is false
-state.info_png.color....: more color settings, see struct LodePNGColorMode
-state.info_png....: more PNG related settings, see struct LodePNGInfo
-
-
-12. changes
------------
-
-The version number of LodePNG is the date of the change given in the format
-yyyymmdd.
-
-Some changes aren't backwards compatible. Those are indicated with a (!)
-symbol.
-
-*) 30 dec 2018: code style changes only: removed newlines before opening braces.
-*) 10 sep 2018: added way to inspect metadata chunks without full decoding.
-*) 19 aug 2018 (!): fixed color mode bKGD is encoded with and made it use
-   palette index in case of palette.
-*) 10 aug 2018 (!): added support for gAMA, cHRM, sRGB and iCCP chunks. This
-   change is backwards compatible unless you relied on unknown_chunks for those.
-*) 11 jun 2018: less restrictive check for pixel size integer overflow
-*) 14 jan 2018: allow optionally ignoring a few more recoverable errors
-*) 17 sep 2017: fix memory leak for some encoder input error cases
-*) 27 nov 2016: grey+alpha auto color model detection bugfix
-*) 18 apr 2016: Changed qsort to custom stable sort (for platforms w/o qsort).
-*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within
-   the limits of pure C90).
-*) 08 dec 2015: Made load_file function return error if file can't be opened.
-*) 24 okt 2015: Bugfix with decoding to palette output.
-*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding.
-*) 23 aug 2014: Reduced needless memory usage of decoder.
-*) 28 jun 2014: Removed fix_png setting, always support palette OOB for
-    simplicity. Made ColorProfile public.
-*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization.
-*) 22 dec 2013: Power of two windowsize required for optimization.
-*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key.
-*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png).
-*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_"
-    prefix for the custom allocators and made it possible with a new #define to
-    use custom ones in your project without needing to change lodepng's code.
-*) 28 jan 2013: Bugfix with color key.
-*) 27 okt 2012: Tweaks in text chunk keyword length error handling.
-*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode.
-    (no palette). Better deflate tree encoding. New compression tweak settings.
-    Faster color conversions while decoding. Some internal cleanups.
-*) 23 sep 2012: Reduced warnings in Visual Studio a little bit.
-*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions
-    and made it work with function pointers instead.
-*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc
-    and free functions and toggle #defines from compiler flags. Small fixes.
-*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible.
-*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed
-    redundant C++ codec classes. Reduced amount of structs. Everything changed,
-    but it is cleaner now imho and functionality remains the same. Also fixed
-    several bugs and shrunk the implementation code. Made new samples.
-*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best
-    PNG color model and bit depth, based on the amount and type of colors of the
-    raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.
-*) 9 okt 2011: simpler hash chain implementation for the encoder.
-*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching.
-*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking.
-    A bug with the PNG filtertype heuristic was fixed, so that it chooses much
-    better ones (it's quite significant). A setting to do an experimental, slow,
-    brute force search for PNG filter types is added.
-*) 17 aug 2011 (!): changed some C zlib related function names.
-*) 16 aug 2011: made the code less wide (max 120 characters per line).
-*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors.
-*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled.
-*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman
-    to optimize long sequences of zeros.
-*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and
-    LodePNG_InfoColor_canHaveAlpha functions for convenience.
-*) 7 nov 2010: added LodePNG_error_text function to get error code description.
-*) 30 okt 2010: made decoding slightly faster
-*) 26 okt 2010: (!) changed some C function and struct names (more consistent).
-     Reorganized the documentation and the declaration order in the header.
-*) 08 aug 2010: only changed some comments and external samples.
-*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version.
-*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers.
-*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could
-    read by ignoring the problem but windows apps couldn't.
-*) 06 jun 2008: added more error checks for out of memory cases.
-*) 26 apr 2008: added a few more checks here and there to ensure more safety.
-*) 06 mar 2008: crash with encoding of strings fixed
-*) 02 feb 2008: support for international text chunks added (iTXt)
-*) 23 jan 2008: small cleanups, and #defines to divide code in sections
-*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor.
-*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder.
-*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added
-    Also various fixes, such as in the deflate and the padding bits code.
-*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved
-    filtering code of encoder.
-*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A
-    C++ wrapper around this provides an interface almost identical to before.
-    Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code
-    are together in these files but it works both for C and C++ compilers.
-*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks
-*) 30 aug 2007: bug fixed which makes this Borland C++ compatible
-*) 09 aug 2007: some VS2005 warnings removed again
-*) 21 jul 2007: deflate code placed in new namespace separate from zlib code
-*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images
-*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing
-    invalid std::vector element [0] fixed, and level 3 and 4 warnings removed
-*) 02 jun 2007: made the encoder add a tag with version by default
-*) 27 may 2007: zlib and png code separated (but still in the same file),
-    simple encoder/decoder functions added for more simple usage cases
-*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69),
-    moved some examples from here to lodepng_examples.cpp
-*) 12 may 2007: palette decoding bug fixed
-*) 24 apr 2007: changed the license from BSD to the zlib license
-*) 11 mar 2007: very simple addition: ability to encode bKGD chunks.
-*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding
-    palettized PNG images. Plus little interface change with palette and texts.
-*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes.
-    Fixed a bug where the end code of a block had length 0 in the Huffman tree.
-*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented
-    and supported by the encoder, resulting in smaller PNGs at the output.
-*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone.
-*) 24 jan 2007: gave encoder an error interface. Added color conversion from any
-    greyscale type to 8-bit greyscale with or without alpha.
-*) 21 jan 2007: (!) Totally changed the interface. It allows more color types
-    to convert to and is more uniform. See the manual for how it works now.
-*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days:
-    encode/decode custom tEXt chunks, separate classes for zlib & deflate, and
-    at last made the decoder give errors for incorrect Adler32 or Crc.
-*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel.
-*) 29 dec 2006: Added support for encoding images without alpha channel, and
-    cleaned out code as well as making certain parts faster.
-*) 28 dec 2006: Added "Settings" to the encoder.
-*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now.
-    Removed some code duplication in the decoder. Fixed little bug in an example.
-*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter.
-    Fixed a bug of the decoder with 16-bit per color.
-*) 15 okt 2006: Changed documentation structure
-*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the
-    given image buffer, however for now it's not compressed.
-*) 08 sep 2006: (!) Changed to interface with a Decoder class
-*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different
-    way. Renamed decodePNG to decodePNGGeneric.
-*) 29 jul 2006: (!) Changed the interface: image info is now returned as a
-    struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy.
-*) 28 jul 2006: Cleaned the code and added new error checks.
-    Corrected terminology "deflate" into "inflate".
-*) 23 jun 2006: Added SDL example in the documentation in the header, this
-    example allows easy debugging by displaying the PNG and its transparency.
-*) 22 jun 2006: (!) Changed way to obtain error value. Added
-    loadFile function for convenience. Made decodePNG32 faster.
-*) 21 jun 2006: (!) Changed type of info vector to unsigned.
-    Changed position of palette in info vector. Fixed an important bug that
-    happened on PNGs with an uncompressed block.
-*) 16 jun 2006: Internally changed unsigned into unsigned where
-    needed, and performed some optimizations.
-*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them
-    in LodePNG namespace. Changed the order of the parameters. Rewrote the
-    documentation in the header. Renamed files to lodepng.cpp and lodepng.h
-*) 22 apr 2006: Optimized and improved some code
-*) 07 sep 2005: (!) Changed to std::vector interface
-*) 12 aug 2005: Initial release (C++, decoder only)
-
-
-13. contact information
------------------------
-
-Feel free to contact me with suggestions, problems, comments, ... concerning
-LodePNG. If you encounter a PNG image that doesn't work properly with this
-decoder, feel free to send it and I'll use it to find and fix the problem.
-
-My email address is (puzzle the account and domain together with an @ symbol):
-Domain: gmail dot com.
-Account: lode dot vandevenne.
-
-
-Copyright (c) 2005-2019 Lode Vandevenne
-*/

+ 0 - 2309
include/tinyxml2.h

@@ -1,2309 +0,0 @@
-/*
-Original code by Lee Thomason (www.grinninglizard.com)
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any
-damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any
-purpose, including commercial applications, and to alter it and
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must
-not claim that you wrote the original software. If you use this
-software in a product, an acknowledgment in the product documentation
-would be appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and
-must not be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source
-distribution.
-*/
-
-#ifndef TINYXML2_INCLUDED
-#define TINYXML2_INCLUDED
-
-#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__)
-#   include <ctype.h>
-#   include <limits.h>
-#   include <stdio.h>
-#   include <stdlib.h>
-#   include <string.h>
-#	if defined(__PS3__)
-#		include <stddef.h>
-#	endif
-#else
-#   include <cctype>
-#   include <climits>
-#   include <cstdio>
-#   include <cstdlib>
-#   include <cstring>
-#endif
-#include <stdint.h>
-
-/*
-   TODO: intern strings instead of allocation.
-*/
-/*
-	gcc:
-        g++ -Wall -DTINYXML2_DEBUG tinyxml2.cpp xmltest.cpp -o gccxmltest.exe
-
-    Formatting, Artistic Style:
-        AStyle.exe --style=1tbs --indent-switches --break-closing-brackets --indent-preprocessor tinyxml2.cpp tinyxml2.h
-*/
-
-#if defined( _DEBUG ) || defined (__DEBUG__)
-#   ifndef TINYXML2_DEBUG
-#       define TINYXML2_DEBUG
-#   endif
-#endif
-
-#ifdef _MSC_VER
-#   pragma warning(push)
-#   pragma warning(disable: 4251)
-#endif
-
-#ifdef _WIN32
-#   ifdef TINYXML2_EXPORT
-#       define TINYXML2_LIB __declspec(dllexport)
-#   elif defined(TINYXML2_IMPORT)
-#       define TINYXML2_LIB __declspec(dllimport)
-#   else
-#       define TINYXML2_LIB
-#   endif
-#elif __GNUC__ >= 4
-#   define TINYXML2_LIB __attribute__((visibility("default")))
-#else
-#   define TINYXML2_LIB
-#endif
-
-
-#if defined(TINYXML2_DEBUG)
-#   if defined(_MSC_VER)
-#       // "(void)0," is for suppressing C4127 warning in "assert(false)", "assert(true)" and the like
-#       define TIXMLASSERT( x )           if ( !((void)0,(x))) { __debugbreak(); }
-#   elif defined (ANDROID_NDK)
-#       include <android/log.h>
-#       define TIXMLASSERT( x )           if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); }
-#   else
-#       include <assert.h>
-#       define TIXMLASSERT                assert
-#   endif
-#else
-#   define TIXMLASSERT( x )               {}
-#endif
-
-
-/* Versioning, past 1.0.14:
-	http://semver.org/
-*/
-static const int TIXML2_MAJOR_VERSION = 7;
-static const int TIXML2_MINOR_VERSION = 0;
-static const int TIXML2_PATCH_VERSION = 1;
-
-#define TINYXML2_MAJOR_VERSION 7
-#define TINYXML2_MINOR_VERSION 0
-#define TINYXML2_PATCH_VERSION 1
-
-// A fixed element depth limit is problematic. There needs to be a
-// limit to avoid a stack overflow. However, that limit varies per
-// system, and the capacity of the stack. On the other hand, it's a trivial
-// attack that can result from ill, malicious, or even correctly formed XML,
-// so there needs to be a limit in place.
-static const int TINYXML2_MAX_ELEMENT_DEPTH = 100;
-
-namespace tinyxml2
-{
-class XMLDocument;
-class XMLElement;
-class XMLAttribute;
-class XMLComment;
-class XMLText;
-class XMLDeclaration;
-class XMLUnknown;
-class XMLPrinter;
-
-/*
-	A class that wraps strings. Normally stores the start and end
-	pointers into the XML file itself, and will apply normalization
-	and entity translation if actually read. Can also store (and memory
-	manage) a traditional char[]
-
-    Isn't clear why TINYXML2_LIB is needed; but seems to fix #719
-*/
-class TINYXML2_LIB StrPair
-{
-public:
-    enum {
-        NEEDS_ENTITY_PROCESSING			= 0x01,
-        NEEDS_NEWLINE_NORMALIZATION		= 0x02,
-        NEEDS_WHITESPACE_COLLAPSING     = 0x04,
-
-        TEXT_ELEMENT		            = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
-        TEXT_ELEMENT_LEAVE_ENTITIES		= NEEDS_NEWLINE_NORMALIZATION,
-        ATTRIBUTE_NAME		            = 0,
-        ATTRIBUTE_VALUE		            = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
-        ATTRIBUTE_VALUE_LEAVE_ENTITIES  = NEEDS_NEWLINE_NORMALIZATION,
-        COMMENT							= NEEDS_NEWLINE_NORMALIZATION
-    };
-
-    StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {}
-    ~StrPair();
-
-    void Set( char* start, char* end, int flags ) {
-        TIXMLASSERT( start );
-        TIXMLASSERT( end );
-        Reset();
-        _start  = start;
-        _end    = end;
-        _flags  = flags | NEEDS_FLUSH;
-    }
-
-    const char* GetStr();
-
-    bool Empty() const {
-        return _start == _end;
-    }
-
-    void SetInternedStr( const char* str ) {
-        Reset();
-        _start = const_cast<char*>(str);
-    }
-
-    void SetStr( const char* str, int flags=0 );
-
-    char* ParseText( char* in, const char* endTag, int strFlags, int* curLineNumPtr );
-    char* ParseName( char* in );
-
-    void TransferTo( StrPair* other );
-	void Reset();
-
-private:
-    void CollapseWhitespace();
-
-    enum {
-        NEEDS_FLUSH = 0x100,
-        NEEDS_DELETE = 0x200
-    };
-
-    int     _flags;
-    char*   _start;
-    char*   _end;
-
-    StrPair( const StrPair& other );	// not supported
-    void operator=( const StrPair& other );	// not supported, use TransferTo()
-};
-
-
-/*
-	A dynamic array of Plain Old Data. Doesn't support constructors, etc.
-	Has a small initial memory pool, so that low or no usage will not
-	cause a call to new/delete
-*/
-template <class T, int INITIAL_SIZE>
-class DynArray
-{
-public:
-    DynArray() :
-        _mem( _pool ),
-        _allocated( INITIAL_SIZE ),
-        _size( 0 )
-    {
-    }
-
-    ~DynArray() {
-        if ( _mem != _pool ) {
-            delete [] _mem;
-        }
-    }
-
-    void Clear() {
-        _size = 0;
-    }
-
-    void Push( T t ) {
-        TIXMLASSERT( _size < INT_MAX );
-        EnsureCapacity( _size+1 );
-        _mem[_size] = t;
-        ++_size;
-    }
-
-    T* PushArr( int count ) {
-        TIXMLASSERT( count >= 0 );
-        TIXMLASSERT( _size <= INT_MAX - count );
-        EnsureCapacity( _size+count );
-        T* ret = &_mem[_size];
-        _size += count;
-        return ret;
-    }
-
-    T Pop() {
-        TIXMLASSERT( _size > 0 );
-        --_size;
-        return _mem[_size];
-    }
-
-    void PopArr( int count ) {
-        TIXMLASSERT( _size >= count );
-        _size -= count;
-    }
-
-    bool Empty() const					{
-        return _size == 0;
-    }
-
-    T& operator[](int i)				{
-        TIXMLASSERT( i>= 0 && i < _size );
-        return _mem[i];
-    }
-
-    const T& operator[](int i) const	{
-        TIXMLASSERT( i>= 0 && i < _size );
-        return _mem[i];
-    }
-
-    const T& PeekTop() const            {
-        TIXMLASSERT( _size > 0 );
-        return _mem[ _size - 1];
-    }
-
-    int Size() const					{
-        TIXMLASSERT( _size >= 0 );
-        return _size;
-    }
-
-    int Capacity() const				{
-        TIXMLASSERT( _allocated >= INITIAL_SIZE );
-        return _allocated;
-    }
-
-	void SwapRemove(int i) {
-		TIXMLASSERT(i >= 0 && i < _size);
-		TIXMLASSERT(_size > 0);
-		_mem[i] = _mem[_size - 1];
-		--_size;
-	}
-
-    const T* Mem() const				{
-        TIXMLASSERT( _mem );
-        return _mem;
-    }
-
-    T* Mem() {
-        TIXMLASSERT( _mem );
-        return _mem;
-    }
-
-private:
-    DynArray( const DynArray& ); // not supported
-    void operator=( const DynArray& ); // not supported
-
-    void EnsureCapacity( int cap ) {
-        TIXMLASSERT( cap > 0 );
-        if ( cap > _allocated ) {
-            TIXMLASSERT( cap <= INT_MAX / 2 );
-            int newAllocated = cap * 2;
-            T* newMem = new T[newAllocated];
-            TIXMLASSERT( newAllocated >= _size );
-            memcpy( newMem, _mem, sizeof(T)*_size );	// warning: not using constructors, only works for PODs
-            if ( _mem != _pool ) {
-                delete [] _mem;
-            }
-            _mem = newMem;
-            _allocated = newAllocated;
-        }
-    }
-
-    T*  _mem;
-    T   _pool[INITIAL_SIZE];
-    int _allocated;		// objects allocated
-    int _size;			// number objects in use
-};
-
-
-/*
-	Parent virtual class of a pool for fast allocation
-	and deallocation of objects.
-*/
-class MemPool
-{
-public:
-    MemPool() {}
-    virtual ~MemPool() {}
-
-    virtual int ItemSize() const = 0;
-    virtual void* Alloc() = 0;
-    virtual void Free( void* ) = 0;
-    virtual void SetTracked() = 0;
-};
-
-
-/*
-	Template child class to create pools of the correct type.
-*/
-template< int ITEM_SIZE >
-class MemPoolT : public MemPool
-{
-public:
-    MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0)	{}
-    ~MemPoolT() {
-        MemPoolT< ITEM_SIZE >::Clear();
-    }
-
-    void Clear() {
-        // Delete the blocks.
-        while( !_blockPtrs.Empty()) {
-            Block* lastBlock = _blockPtrs.Pop();
-            delete lastBlock;
-        }
-        _root = 0;
-        _currentAllocs = 0;
-        _nAllocs = 0;
-        _maxAllocs = 0;
-        _nUntracked = 0;
-    }
-
-    virtual int ItemSize() const	{
-        return ITEM_SIZE;
-    }
-    int CurrentAllocs() const		{
-        return _currentAllocs;
-    }
-
-    virtual void* Alloc() {
-        if ( !_root ) {
-            // Need a new block.
-            Block* block = new Block();
-            _blockPtrs.Push( block );
-
-            Item* blockItems = block->items;
-            for( int i = 0; i < ITEMS_PER_BLOCK - 1; ++i ) {
-                blockItems[i].next = &(blockItems[i + 1]);
-            }
-            blockItems[ITEMS_PER_BLOCK - 1].next = 0;
-            _root = blockItems;
-        }
-        Item* const result = _root;
-        TIXMLASSERT( result != 0 );
-        _root = _root->next;
-
-        ++_currentAllocs;
-        if ( _currentAllocs > _maxAllocs ) {
-            _maxAllocs = _currentAllocs;
-        }
-        ++_nAllocs;
-        ++_nUntracked;
-        return result;
-    }
-
-    virtual void Free( void* mem ) {
-        if ( !mem ) {
-            return;
-        }
-        --_currentAllocs;
-        Item* item = static_cast<Item*>( mem );
-#ifdef TINYXML2_DEBUG
-        memset( item, 0xfe, sizeof( *item ) );
-#endif
-        item->next = _root;
-        _root = item;
-    }
-    void Trace( const char* name ) {
-        printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n",
-                name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs,
-                ITEM_SIZE, _nAllocs, _blockPtrs.Size() );
-    }
-
-    void SetTracked() {
-        --_nUntracked;
-    }
-
-    int Untracked() const {
-        return _nUntracked;
-    }
-
-	// This number is perf sensitive. 4k seems like a good tradeoff on my machine.
-	// The test file is large, 170k.
-	// Release:		VS2010 gcc(no opt)
-	//		1k:		4000
-	//		2k:		4000
-	//		4k:		3900	21000
-	//		16k:	5200
-	//		32k:	4300
-	//		64k:	4000	21000
-    // Declared public because some compilers do not accept to use ITEMS_PER_BLOCK
-    // in private part if ITEMS_PER_BLOCK is private
-    enum { ITEMS_PER_BLOCK = (4 * 1024) / ITEM_SIZE };
-
-private:
-    MemPoolT( const MemPoolT& ); // not supported
-    void operator=( const MemPoolT& ); // not supported
-
-    union Item {
-        Item*   next;
-        char    itemData[ITEM_SIZE];
-    };
-    struct Block {
-        Item items[ITEMS_PER_BLOCK];
-    };
-    DynArray< Block*, 10 > _blockPtrs;
-    Item* _root;
-
-    int _currentAllocs;
-    int _nAllocs;
-    int _maxAllocs;
-    int _nUntracked;
-};
-
-
-
-/**
-	Implements the interface to the "Visitor pattern" (see the Accept() method.)
-	If you call the Accept() method, it requires being passed a XMLVisitor
-	class to handle callbacks. For nodes that contain other nodes (Document, Element)
-	you will get called with a VisitEnter/VisitExit pair. Nodes that are always leafs
-	are simply called with Visit().
-
-	If you return 'true' from a Visit method, recursive parsing will continue. If you return
-	false, <b>no children of this node or its siblings</b> will be visited.
-
-	All flavors of Visit methods have a default implementation that returns 'true' (continue
-	visiting). You need to only override methods that are interesting to you.
-
-	Generally Accept() is called on the XMLDocument, although all nodes support visiting.
-
-	You should never change the document from a callback.
-
-	@sa XMLNode::Accept()
-*/
-class TINYXML2_LIB XMLVisitor
-{
-public:
-    virtual ~XMLVisitor() {}
-
-    /// Visit a document.
-    virtual bool VisitEnter( const XMLDocument& /*doc*/ )			{
-        return true;
-    }
-    /// Visit a document.
-    virtual bool VisitExit( const XMLDocument& /*doc*/ )			{
-        return true;
-    }
-
-    /// Visit an element.
-    virtual bool VisitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ )	{
-        return true;
-    }
-    /// Visit an element.
-    virtual bool VisitExit( const XMLElement& /*element*/ )			{
-        return true;
-    }
-
-    /// Visit a declaration.
-    virtual bool Visit( const XMLDeclaration& /*declaration*/ )		{
-        return true;
-    }
-    /// Visit a text node.
-    virtual bool Visit( const XMLText& /*text*/ )					{
-        return true;
-    }
-    /// Visit a comment node.
-    virtual bool Visit( const XMLComment& /*comment*/ )				{
-        return true;
-    }
-    /// Visit an unknown node.
-    virtual bool Visit( const XMLUnknown& /*unknown*/ )				{
-        return true;
-    }
-};
-
-// WARNING: must match XMLDocument::_errorNames[]
-enum XMLError {
-    XML_SUCCESS = 0,
-    XML_NO_ATTRIBUTE,
-    XML_WRONG_ATTRIBUTE_TYPE,
-    XML_ERROR_FILE_NOT_FOUND,
-    XML_ERROR_FILE_COULD_NOT_BE_OPENED,
-    XML_ERROR_FILE_READ_ERROR,
-    XML_ERROR_PARSING_ELEMENT,
-    XML_ERROR_PARSING_ATTRIBUTE,
-    XML_ERROR_PARSING_TEXT,
-    XML_ERROR_PARSING_CDATA,
-    XML_ERROR_PARSING_COMMENT,
-    XML_ERROR_PARSING_DECLARATION,
-    XML_ERROR_PARSING_UNKNOWN,
-    XML_ERROR_EMPTY_DOCUMENT,
-    XML_ERROR_MISMATCHED_ELEMENT,
-    XML_ERROR_PARSING,
-    XML_CAN_NOT_CONVERT_TEXT,
-    XML_NO_TEXT_NODE,
-	XML_ELEMENT_DEPTH_EXCEEDED,
-
-	XML_ERROR_COUNT
-};
-
-
-/*
-	Utility functionality.
-*/
-class TINYXML2_LIB XMLUtil
-{
-public:
-    static const char* SkipWhiteSpace( const char* p, int* curLineNumPtr )	{
-        TIXMLASSERT( p );
-
-        while( IsWhiteSpace(*p) ) {
-            if (curLineNumPtr && *p == '\n') {
-                ++(*curLineNumPtr);
-            }
-            ++p;
-        }
-        TIXMLASSERT( p );
-        return p;
-    }
-    static char* SkipWhiteSpace( char* p, int* curLineNumPtr )				{
-        return const_cast<char*>( SkipWhiteSpace( const_cast<const char*>(p), curLineNumPtr ) );
-    }
-
-    // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't
-    // correct, but simple, and usually works.
-    static bool IsWhiteSpace( char p )					{
-        return !IsUTF8Continuation(p) && isspace( static_cast<unsigned char>(p) );
-    }
-
-    inline static bool IsNameStartChar( unsigned char ch ) {
-        if ( ch >= 128 ) {
-            // This is a heuristic guess in attempt to not implement Unicode-aware isalpha()
-            return true;
-        }
-        if ( isalpha( ch ) ) {
-            return true;
-        }
-        return ch == ':' || ch == '_';
-    }
-
-    inline static bool IsNameChar( unsigned char ch ) {
-        return IsNameStartChar( ch )
-               || isdigit( ch )
-               || ch == '.'
-               || ch == '-';
-    }
-
-    inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX )  {
-        if ( p == q ) {
-            return true;
-        }
-        TIXMLASSERT( p );
-        TIXMLASSERT( q );
-        TIXMLASSERT( nChar >= 0 );
-        return strncmp( p, q, nChar ) == 0;
-    }
-
-    inline static bool IsUTF8Continuation( char p ) {
-        return ( p & 0x80 ) != 0;
-    }
-
-    static const char* ReadBOM( const char* p, bool* hasBOM );
-    // p is the starting location,
-    // the UTF-8 value of the entity will be placed in value, and length filled in.
-    static const char* GetCharacterRef( const char* p, char* value, int* length );
-    static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length );
-
-    // converts primitive types to strings
-    static void ToStr( int v, char* buffer, int bufferSize );
-    static void ToStr( unsigned v, char* buffer, int bufferSize );
-    static void ToStr( bool v, char* buffer, int bufferSize );
-    static void ToStr( float v, char* buffer, int bufferSize );
-    static void ToStr( double v, char* buffer, int bufferSize );
-	static void ToStr(int64_t v, char* buffer, int bufferSize);
-
-    // converts strings to primitive types
-    static bool	ToInt( const char* str, int* value );
-    static bool ToUnsigned( const char* str, unsigned* value );
-    static bool	ToBool( const char* str, bool* value );
-    static bool	ToFloat( const char* str, float* value );
-    static bool ToDouble( const char* str, double* value );
-	static bool ToInt64(const char* str, int64_t* value);
-
-	// Changes what is serialized for a boolean value.
-	// Default to "true" and "false". Shouldn't be changed
-	// unless you have a special testing or compatibility need.
-	// Be careful: static, global, & not thread safe.
-	// Be sure to set static const memory as parameters.
-	static void SetBoolSerialization(const char* writeTrue, const char* writeFalse);
-
-private:
-	static const char* writeBoolTrue;
-	static const char* writeBoolFalse;
-};
-
-
-/** XMLNode is a base class for every object that is in the
-	XML Document Object Model (DOM), except XMLAttributes.
-	Nodes have siblings, a parent, and children which can
-	be navigated. A node is always in a XMLDocument.
-	The type of a XMLNode can be queried, and it can
-	be cast to its more defined type.
-
-	A XMLDocument allocates memory for all its Nodes.
-	When the XMLDocument gets deleted, all its Nodes
-	will also be deleted.
-
-	@verbatim
-	A Document can contain:	Element	(container or leaf)
-							Comment (leaf)
-							Unknown (leaf)
-							Declaration( leaf )
-
-	An Element can contain:	Element (container or leaf)
-							Text	(leaf)
-							Attributes (not on tree)
-							Comment (leaf)
-							Unknown (leaf)
-
-	@endverbatim
-*/
-class TINYXML2_LIB XMLNode
-{
-    friend class XMLDocument;
-    friend class XMLElement;
-public:
-
-    /// Get the XMLDocument that owns this XMLNode.
-    const XMLDocument* GetDocument() const	{
-        TIXMLASSERT( _document );
-        return _document;
-    }
-    /// Get the XMLDocument that owns this XMLNode.
-    XMLDocument* GetDocument()				{
-        TIXMLASSERT( _document );
-        return _document;
-    }
-
-    /// Safely cast to an Element, or null.
-    virtual XMLElement*		ToElement()		{
-        return 0;
-    }
-    /// Safely cast to Text, or null.
-    virtual XMLText*		ToText()		{
-        return 0;
-    }
-    /// Safely cast to a Comment, or null.
-    virtual XMLComment*		ToComment()		{
-        return 0;
-    }
-    /// Safely cast to a Document, or null.
-    virtual XMLDocument*	ToDocument()	{
-        return 0;
-    }
-    /// Safely cast to a Declaration, or null.
-    virtual XMLDeclaration*	ToDeclaration()	{
-        return 0;
-    }
-    /// Safely cast to an Unknown, or null.
-    virtual XMLUnknown*		ToUnknown()		{
-        return 0;
-    }
-
-    virtual const XMLElement*		ToElement() const		{
-        return 0;
-    }
-    virtual const XMLText*			ToText() const			{
-        return 0;
-    }
-    virtual const XMLComment*		ToComment() const		{
-        return 0;
-    }
-    virtual const XMLDocument*		ToDocument() const		{
-        return 0;
-    }
-    virtual const XMLDeclaration*	ToDeclaration() const	{
-        return 0;
-    }
-    virtual const XMLUnknown*		ToUnknown() const		{
-        return 0;
-    }
-
-    /** The meaning of 'value' changes for the specific type.
-    	@verbatim
-    	Document:	empty (NULL is returned, not an empty string)
-    	Element:	name of the element
-    	Comment:	the comment text
-    	Unknown:	the tag contents
-    	Text:		the text string
-    	@endverbatim
-    */
-    const char* Value() const;
-
-    /** Set the Value of an XML node.
-    	@sa Value()
-    */
-    void SetValue( const char* val, bool staticMem=false );
-
-    /// Gets the line number the node is in, if the document was parsed from a file.
-    int GetLineNum() const { return _parseLineNum; }
-
-    /// Get the parent of this node on the DOM.
-    const XMLNode*	Parent() const			{
-        return _parent;
-    }
-
-    XMLNode* Parent()						{
-        return _parent;
-    }
-
-    /// Returns true if this node has no children.
-    bool NoChildren() const					{
-        return !_firstChild;
-    }
-
-    /// Get the first child node, or null if none exists.
-    const XMLNode*  FirstChild() const		{
-        return _firstChild;
-    }
-
-    XMLNode*		FirstChild()			{
-        return _firstChild;
-    }
-
-    /** Get the first child element, or optionally the first child
-        element with the specified name.
-    */
-    const XMLElement* FirstChildElement( const char* name = 0 ) const;
-
-    XMLElement* FirstChildElement( const char* name = 0 )	{
-        return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->FirstChildElement( name ));
-    }
-
-    /// Get the last child node, or null if none exists.
-    const XMLNode*	LastChild() const						{
-        return _lastChild;
-    }
-
-    XMLNode*		LastChild()								{
-        return _lastChild;
-    }
-
-    /** Get the last child element or optionally the last child
-        element with the specified name.
-    */
-    const XMLElement* LastChildElement( const char* name = 0 ) const;
-
-    XMLElement* LastChildElement( const char* name = 0 )	{
-        return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->LastChildElement(name) );
-    }
-
-    /// Get the previous (left) sibling node of this node.
-    const XMLNode*	PreviousSibling() const					{
-        return _prev;
-    }
-
-    XMLNode*	PreviousSibling()							{
-        return _prev;
-    }
-
-    /// Get the previous (left) sibling element of this node, with an optionally supplied name.
-    const XMLElement*	PreviousSiblingElement( const char* name = 0 ) const ;
-
-    XMLElement*	PreviousSiblingElement( const char* name = 0 ) {
-        return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->PreviousSiblingElement( name ) );
-    }
-
-    /// Get the next (right) sibling node of this node.
-    const XMLNode*	NextSibling() const						{
-        return _next;
-    }
-
-    XMLNode*	NextSibling()								{
-        return _next;
-    }
-
-    /// Get the next (right) sibling element of this node, with an optionally supplied name.
-    const XMLElement*	NextSiblingElement( const char* name = 0 ) const;
-
-    XMLElement*	NextSiblingElement( const char* name = 0 )	{
-        return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->NextSiblingElement( name ) );
-    }
-
-    /**
-    	Add a child node as the last (right) child.
-		If the child node is already part of the document,
-		it is moved from its old location to the new location.
-		Returns the addThis argument or 0 if the node does not
-		belong to the same document.
-    */
-    XMLNode* InsertEndChild( XMLNode* addThis );
-
-    XMLNode* LinkEndChild( XMLNode* addThis )	{
-        return InsertEndChild( addThis );
-    }
-    /**
-    	Add a child node as the first (left) child.
-		If the child node is already part of the document,
-		it is moved from its old location to the new location.
-		Returns the addThis argument or 0 if the node does not
-		belong to the same document.
-    */
-    XMLNode* InsertFirstChild( XMLNode* addThis );
-    /**
-    	Add a node after the specified child node.
-		If the child node is already part of the document,
-		it is moved from its old location to the new location.
-		Returns the addThis argument or 0 if the afterThis node
-		is not a child of this node, or if the node does not
-		belong to the same document.
-    */
-    XMLNode* InsertAfterChild( XMLNode* afterThis, XMLNode* addThis );
-
-    /**
-    	Delete all the children of this node.
-    */
-    void DeleteChildren();
-
-    /**
-    	Delete a child of this node.
-    */
-    void DeleteChild( XMLNode* node );
-
-    /**
-    	Make a copy of this node, but not its children.
-    	You may pass in a Document pointer that will be
-    	the owner of the new Node. If the 'document' is
-    	null, then the node returned will be allocated
-    	from the current Document. (this->GetDocument())
-
-    	Note: if called on a XMLDocument, this will return null.
-    */
-    virtual XMLNode* ShallowClone( XMLDocument* document ) const = 0;
-
-	/**
-		Make a copy of this node and all its children.
-
-		If the 'target' is null, then the nodes will
-		be allocated in the current document. If 'target'
-        is specified, the memory will be allocated is the
-        specified XMLDocument.
-
-		NOTE: This is probably not the correct tool to
-		copy a document, since XMLDocuments can have multiple
-		top level XMLNodes. You probably want to use
-        XMLDocument::DeepCopy()
-	*/
-	XMLNode* DeepClone( XMLDocument* target ) const;
-
-    /**
-    	Test if 2 nodes are the same, but don't test children.
-    	The 2 nodes do not need to be in the same Document.
-
-    	Note: if called on a XMLDocument, this will return false.
-    */
-    virtual bool ShallowEqual( const XMLNode* compare ) const = 0;
-
-    /** Accept a hierarchical visit of the nodes in the TinyXML-2 DOM. Every node in the
-    	XML tree will be conditionally visited and the host will be called back
-    	via the XMLVisitor interface.
-
-    	This is essentially a SAX interface for TinyXML-2. (Note however it doesn't re-parse
-    	the XML for the callbacks, so the performance of TinyXML-2 is unchanged by using this
-    	interface versus any other.)
-
-    	The interface has been based on ideas from:
-
-    	- http://www.saxproject.org/
-    	- http://c2.com/cgi/wiki?HierarchicalVisitorPattern
-
-    	Which are both good references for "visiting".
-
-    	An example of using Accept():
-    	@verbatim
-    	XMLPrinter printer;
-    	tinyxmlDoc.Accept( &printer );
-    	const char* xmlcstr = printer.CStr();
-    	@endverbatim
-    */
-    virtual bool Accept( XMLVisitor* visitor ) const = 0;
-
-	/**
-		Set user data into the XMLNode. TinyXML-2 in
-		no way processes or interprets user data.
-		It is initially 0.
-	*/
-	void SetUserData(void* userData)	{ _userData = userData; }
-
-	/**
-		Get user data set into the XMLNode. TinyXML-2 in
-		no way processes or interprets user data.
-		It is initially 0.
-	*/
-	void* GetUserData() const			{ return _userData; }
-
-protected:
-    explicit XMLNode( XMLDocument* );
-    virtual ~XMLNode();
-
-    virtual char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
-
-    XMLDocument*	_document;
-    XMLNode*		_parent;
-    mutable StrPair	_value;
-    int             _parseLineNum;
-
-    XMLNode*		_firstChild;
-    XMLNode*		_lastChild;
-
-    XMLNode*		_prev;
-    XMLNode*		_next;
-
-	void*			_userData;
-
-private:
-    MemPool*		_memPool;
-    void Unlink( XMLNode* child );
-    static void DeleteNode( XMLNode* node );
-    void InsertChildPreamble( XMLNode* insertThis ) const;
-    const XMLElement* ToElementWithName( const char* name ) const;
-
-    XMLNode( const XMLNode& );	// not supported
-    XMLNode& operator=( const XMLNode& );	// not supported
-};
-
-
-/** XML text.
-
-	Note that a text node can have child element nodes, for example:
-	@verbatim
-	<root>This is <b>bold</b></root>
-	@endverbatim
-
-	A text node can have 2 ways to output the next. "normal" output
-	and CDATA. It will default to the mode it was parsed from the XML file and
-	you generally want to leave it alone, but you can change the output mode with
-	SetCData() and query it with CData().
-*/
-class TINYXML2_LIB XMLText : public XMLNode
-{
-    friend class XMLDocument;
-public:
-    virtual bool Accept( XMLVisitor* visitor ) const;
-
-    virtual XMLText* ToText()			{
-        return this;
-    }
-    virtual const XMLText* ToText() const	{
-        return this;
-    }
-
-    /// Declare whether this should be CDATA or standard text.
-    void SetCData( bool isCData )			{
-        _isCData = isCData;
-    }
-    /// Returns true if this is a CDATA text element.
-    bool CData() const						{
-        return _isCData;
-    }
-
-    virtual XMLNode* ShallowClone( XMLDocument* document ) const;
-    virtual bool ShallowEqual( const XMLNode* compare ) const;
-
-protected:
-    explicit XMLText( XMLDocument* doc )	: XMLNode( doc ), _isCData( false )	{}
-    virtual ~XMLText()												{}
-
-    char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
-
-private:
-    bool _isCData;
-
-    XMLText( const XMLText& );	// not supported
-    XMLText& operator=( const XMLText& );	// not supported
-};
-
-
-/** An XML Comment. */
-class TINYXML2_LIB XMLComment : public XMLNode
-{
-    friend class XMLDocument;
-public:
-    virtual XMLComment*	ToComment()					{
-        return this;
-    }
-    virtual const XMLComment* ToComment() const		{
-        return this;
-    }
-
-    virtual bool Accept( XMLVisitor* visitor ) const;
-
-    virtual XMLNode* ShallowClone( XMLDocument* document ) const;
-    virtual bool ShallowEqual( const XMLNode* compare ) const;
-
-protected:
-    explicit XMLComment( XMLDocument* doc );
-    virtual ~XMLComment();
-
-    char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr);
-
-private:
-    XMLComment( const XMLComment& );	// not supported
-    XMLComment& operator=( const XMLComment& );	// not supported
-};
-
-
-/** In correct XML the declaration is the first entry in the file.
-	@verbatim
-		<?xml version="1.0" standalone="yes"?>
-	@endverbatim
-
-	TinyXML-2 will happily read or write files without a declaration,
-	however.
-
-	The text of the declaration isn't interpreted. It is parsed
-	and written as a string.
-*/
-class TINYXML2_LIB XMLDeclaration : public XMLNode
-{
-    friend class XMLDocument;
-public:
-    virtual XMLDeclaration*	ToDeclaration()					{
-        return this;
-    }
-    virtual const XMLDeclaration* ToDeclaration() const		{
-        return this;
-    }
-
-    virtual bool Accept( XMLVisitor* visitor ) const;
-
-    virtual XMLNode* ShallowClone( XMLDocument* document ) const;
-    virtual bool ShallowEqual( const XMLNode* compare ) const;
-
-protected:
-    explicit XMLDeclaration( XMLDocument* doc );
-    virtual ~XMLDeclaration();
-
-    char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
-
-private:
-    XMLDeclaration( const XMLDeclaration& );	// not supported
-    XMLDeclaration& operator=( const XMLDeclaration& );	// not supported
-};
-
-
-/** Any tag that TinyXML-2 doesn't recognize is saved as an
-	unknown. It is a tag of text, but should not be modified.
-	It will be written back to the XML, unchanged, when the file
-	is saved.
-
-	DTD tags get thrown into XMLUnknowns.
-*/
-class TINYXML2_LIB XMLUnknown : public XMLNode
-{
-    friend class XMLDocument;
-public:
-    virtual XMLUnknown*	ToUnknown()					{
-        return this;
-    }
-    virtual const XMLUnknown* ToUnknown() const		{
-        return this;
-    }
-
-    virtual bool Accept( XMLVisitor* visitor ) const;
-
-    virtual XMLNode* ShallowClone( XMLDocument* document ) const;
-    virtual bool ShallowEqual( const XMLNode* compare ) const;
-
-protected:
-    explicit XMLUnknown( XMLDocument* doc );
-    virtual ~XMLUnknown();
-
-    char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
-
-private:
-    XMLUnknown( const XMLUnknown& );	// not supported
-    XMLUnknown& operator=( const XMLUnknown& );	// not supported
-};
-
-
-
-/** An attribute is a name-value pair. Elements have an arbitrary
-	number of attributes, each with a unique name.
-
-	@note The attributes are not XMLNodes. You may only query the
-	Next() attribute in a list.
-*/
-class TINYXML2_LIB XMLAttribute
-{
-    friend class XMLElement;
-public:
-    /// The name of the attribute.
-    const char* Name() const;
-
-    /// The value of the attribute.
-    const char* Value() const;
-
-    /// Gets the line number the attribute is in, if the document was parsed from a file.
-    int GetLineNum() const { return _parseLineNum; }
-
-    /// The next attribute in the list.
-    const XMLAttribute* Next() const {
-        return _next;
-    }
-
-    /** IntValue interprets the attribute as an integer, and returns the value.
-        If the value isn't an integer, 0 will be returned. There is no error checking;
-    	use QueryIntValue() if you need error checking.
-    */
-	int	IntValue() const {
-		int i = 0;
-		QueryIntValue(&i);
-		return i;
-	}
-
-	int64_t Int64Value() const {
-		int64_t i = 0;
-		QueryInt64Value(&i);
-		return i;
-	}
-
-    /// Query as an unsigned integer. See IntValue()
-    unsigned UnsignedValue() const			{
-        unsigned i=0;
-        QueryUnsignedValue( &i );
-        return i;
-    }
-    /// Query as a boolean. See IntValue()
-    bool	 BoolValue() const				{
-        bool b=false;
-        QueryBoolValue( &b );
-        return b;
-    }
-    /// Query as a double. See IntValue()
-    double 	 DoubleValue() const			{
-        double d=0;
-        QueryDoubleValue( &d );
-        return d;
-    }
-    /// Query as a float. See IntValue()
-    float	 FloatValue() const				{
-        float f=0;
-        QueryFloatValue( &f );
-        return f;
-    }
-
-    /** QueryIntValue interprets the attribute as an integer, and returns the value
-    	in the provided parameter. The function will return XML_SUCCESS on success,
-    	and XML_WRONG_ATTRIBUTE_TYPE if the conversion is not successful.
-    */
-    XMLError QueryIntValue( int* value ) const;
-    /// See QueryIntValue
-    XMLError QueryUnsignedValue( unsigned int* value ) const;
-	/// See QueryIntValue
-	XMLError QueryInt64Value(int64_t* value) const;
-	/// See QueryIntValue
-    XMLError QueryBoolValue( bool* value ) const;
-    /// See QueryIntValue
-    XMLError QueryDoubleValue( double* value ) const;
-    /// See QueryIntValue
-    XMLError QueryFloatValue( float* value ) const;
-
-    /// Set the attribute to a string value.
-    void SetAttribute( const char* value );
-    /// Set the attribute to value.
-    void SetAttribute( int value );
-    /// Set the attribute to value.
-    void SetAttribute( unsigned value );
-	/// Set the attribute to value.
-	void SetAttribute(int64_t value);
-	/// Set the attribute to value.
-    void SetAttribute( bool value );
-    /// Set the attribute to value.
-    void SetAttribute( double value );
-    /// Set the attribute to value.
-    void SetAttribute( float value );
-
-private:
-    enum { BUF_SIZE = 200 };
-
-    XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {}
-    virtual ~XMLAttribute()	{}
-
-    XMLAttribute( const XMLAttribute& );	// not supported
-    void operator=( const XMLAttribute& );	// not supported
-    void SetName( const char* name );
-
-    char* ParseDeep( char* p, bool processEntities, int* curLineNumPtr );
-
-    mutable StrPair _name;
-    mutable StrPair _value;
-    int             _parseLineNum;
-    XMLAttribute*   _next;
-    MemPool*        _memPool;
-};
-
-
-/** The element is a container class. It has a value, the element name,
-	and can contain other elements, text, comments, and unknowns.
-	Elements also contain an arbitrary number of attributes.
-*/
-class TINYXML2_LIB XMLElement : public XMLNode
-{
-    friend class XMLDocument;
-public:
-    /// Get the name of an element (which is the Value() of the node.)
-    const char* Name() const		{
-        return Value();
-    }
-    /// Set the name of the element.
-    void SetName( const char* str, bool staticMem=false )	{
-        SetValue( str, staticMem );
-    }
-
-    virtual XMLElement* ToElement()				{
-        return this;
-    }
-    virtual const XMLElement* ToElement() const {
-        return this;
-    }
-    virtual bool Accept( XMLVisitor* visitor ) const;
-
-    /** Given an attribute name, Attribute() returns the value
-    	for the attribute of that name, or null if none
-    	exists. For example:
-
-    	@verbatim
-    	const char* value = ele->Attribute( "foo" );
-    	@endverbatim
-
-    	The 'value' parameter is normally null. However, if specified,
-    	the attribute will only be returned if the 'name' and 'value'
-    	match. This allow you to write code:
-
-    	@verbatim
-    	if ( ele->Attribute( "foo", "bar" ) ) callFooIsBar();
-    	@endverbatim
-
-    	rather than:
-    	@verbatim
-    	if ( ele->Attribute( "foo" ) ) {
-    		if ( strcmp( ele->Attribute( "foo" ), "bar" ) == 0 ) callFooIsBar();
-    	}
-    	@endverbatim
-    */
-    const char* Attribute( const char* name, const char* value=0 ) const;
-
-    /** Given an attribute name, IntAttribute() returns the value
-    	of the attribute interpreted as an integer. The default
-        value will be returned if the attribute isn't present,
-        or if there is an error. (For a method with error
-    	checking, see QueryIntAttribute()).
-    */
-	int IntAttribute(const char* name, int defaultValue = 0) const;
-    /// See IntAttribute()
-	unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const;
-	/// See IntAttribute()
-	int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const;
-	/// See IntAttribute()
-	bool BoolAttribute(const char* name, bool defaultValue = false) const;
-    /// See IntAttribute()
-	double DoubleAttribute(const char* name, double defaultValue = 0) const;
-    /// See IntAttribute()
-	float FloatAttribute(const char* name, float defaultValue = 0) const;
-
-    /** Given an attribute name, QueryIntAttribute() returns
-    	XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion
-    	can't be performed, or XML_NO_ATTRIBUTE if the attribute
-    	doesn't exist. If successful, the result of the conversion
-    	will be written to 'value'. If not successful, nothing will
-    	be written to 'value'. This allows you to provide default
-    	value:
-
-    	@verbatim
-    	int value = 10;
-    	QueryIntAttribute( "foo", &value );		// if "foo" isn't found, value will still be 10
-    	@endverbatim
-    */
-    XMLError QueryIntAttribute( const char* name, int* value ) const				{
-        const XMLAttribute* a = FindAttribute( name );
-        if ( !a ) {
-            return XML_NO_ATTRIBUTE;
-        }
-        return a->QueryIntValue( value );
-    }
-
-	/// See QueryIntAttribute()
-    XMLError QueryUnsignedAttribute( const char* name, unsigned int* value ) const	{
-        const XMLAttribute* a = FindAttribute( name );
-        if ( !a ) {
-            return XML_NO_ATTRIBUTE;
-        }
-        return a->QueryUnsignedValue( value );
-    }
-
-	/// See QueryIntAttribute()
-	XMLError QueryInt64Attribute(const char* name, int64_t* value) const {
-		const XMLAttribute* a = FindAttribute(name);
-		if (!a) {
-			return XML_NO_ATTRIBUTE;
-		}
-		return a->QueryInt64Value(value);
-	}
-
-	/// See QueryIntAttribute()
-    XMLError QueryBoolAttribute( const char* name, bool* value ) const				{
-        const XMLAttribute* a = FindAttribute( name );
-        if ( !a ) {
-            return XML_NO_ATTRIBUTE;
-        }
-        return a->QueryBoolValue( value );
-    }
-    /// See QueryIntAttribute()
-    XMLError QueryDoubleAttribute( const char* name, double* value ) const			{
-        const XMLAttribute* a = FindAttribute( name );
-        if ( !a ) {
-            return XML_NO_ATTRIBUTE;
-        }
-        return a->QueryDoubleValue( value );
-    }
-    /// See QueryIntAttribute()
-    XMLError QueryFloatAttribute( const char* name, float* value ) const			{
-        const XMLAttribute* a = FindAttribute( name );
-        if ( !a ) {
-            return XML_NO_ATTRIBUTE;
-        }
-        return a->QueryFloatValue( value );
-    }
-
-	/// See QueryIntAttribute()
-	XMLError QueryStringAttribute(const char* name, const char** value) const {
-		const XMLAttribute* a = FindAttribute(name);
-		if (!a) {
-			return XML_NO_ATTRIBUTE;
-		}
-		*value = a->Value();
-		return XML_SUCCESS;
-	}
-
-
-
-    /** Given an attribute name, QueryAttribute() returns
-    	XML_SUCCESS, XML_WRONG_ATTRIBUTE_TYPE if the conversion
-    	can't be performed, or XML_NO_ATTRIBUTE if the attribute
-    	doesn't exist. It is overloaded for the primitive types,
-		and is a generally more convenient replacement of
-		QueryIntAttribute() and related functions.
-
-		If successful, the result of the conversion
-    	will be written to 'value'. If not successful, nothing will
-    	be written to 'value'. This allows you to provide default
-    	value:
-
-    	@verbatim
-    	int value = 10;
-    	QueryAttribute( "foo", &value );		// if "foo" isn't found, value will still be 10
-    	@endverbatim
-    */
-	XMLError QueryAttribute( const char* name, int* value ) const {
-		return QueryIntAttribute( name, value );
-	}
-
-	XMLError QueryAttribute( const char* name, unsigned int* value ) const {
-		return QueryUnsignedAttribute( name, value );
-	}
-
-	XMLError QueryAttribute(const char* name, int64_t* value) const {
-		return QueryInt64Attribute(name, value);
-	}
-
-	XMLError QueryAttribute( const char* name, bool* value ) const {
-		return QueryBoolAttribute( name, value );
-	}
-
-	XMLError QueryAttribute( const char* name, double* value ) const {
-		return QueryDoubleAttribute( name, value );
-	}
-
-	XMLError QueryAttribute( const char* name, float* value ) const {
-		return QueryFloatAttribute( name, value );
-	}
-
-	/// Sets the named attribute to value.
-    void SetAttribute( const char* name, const char* value )	{
-        XMLAttribute* a = FindOrCreateAttribute( name );
-        a->SetAttribute( value );
-    }
-    /// Sets the named attribute to value.
-    void SetAttribute( const char* name, int value )			{
-        XMLAttribute* a = FindOrCreateAttribute( name );
-        a->SetAttribute( value );
-    }
-    /// Sets the named attribute to value.
-    void SetAttribute( const char* name, unsigned value )		{
-        XMLAttribute* a = FindOrCreateAttribute( name );
-        a->SetAttribute( value );
-    }
-
-	/// Sets the named attribute to value.
-	void SetAttribute(const char* name, int64_t value) {
-		XMLAttribute* a = FindOrCreateAttribute(name);
-		a->SetAttribute(value);
-	}
-
-	/// Sets the named attribute to value.
-    void SetAttribute( const char* name, bool value )			{
-        XMLAttribute* a = FindOrCreateAttribute( name );
-        a->SetAttribute( value );
-    }
-    /// Sets the named attribute to value.
-    void SetAttribute( const char* name, double value )		{
-        XMLAttribute* a = FindOrCreateAttribute( name );
-        a->SetAttribute( value );
-    }
-    /// Sets the named attribute to value.
-    void SetAttribute( const char* name, float value )		{
-        XMLAttribute* a = FindOrCreateAttribute( name );
-        a->SetAttribute( value );
-    }
-
-    /**
-    	Delete an attribute.
-    */
-    void DeleteAttribute( const char* name );
-
-    /// Return the first attribute in the list.
-    const XMLAttribute* FirstAttribute() const {
-        return _rootAttribute;
-    }
-    /// Query a specific attribute in the list.
-    const XMLAttribute* FindAttribute( const char* name ) const;
-
-    /** Convenience function for easy access to the text inside an element. Although easy
-    	and concise, GetText() is limited compared to getting the XMLText child
-    	and accessing it directly.
-
-    	If the first child of 'this' is a XMLText, the GetText()
-    	returns the character string of the Text node, else null is returned.
-
-    	This is a convenient method for getting the text of simple contained text:
-    	@verbatim
-    	<foo>This is text</foo>
-    		const char* str = fooElement->GetText();
-    	@endverbatim
-
-    	'str' will be a pointer to "This is text".
-
-    	Note that this function can be misleading. If the element foo was created from
-    	this XML:
-    	@verbatim
-    		<foo><b>This is text</b></foo>
-    	@endverbatim
-
-    	then the value of str would be null. The first child node isn't a text node, it is
-    	another element. From this XML:
-    	@verbatim
-    		<foo>This is <b>text</b></foo>
-    	@endverbatim
-    	GetText() will return "This is ".
-    */
-    const char* GetText() const;
-
-    /** Convenience function for easy access to the text inside an element. Although easy
-    	and concise, SetText() is limited compared to creating an XMLText child
-    	and mutating it directly.
-
-    	If the first child of 'this' is a XMLText, SetText() sets its value to
-		the given string, otherwise it will create a first child that is an XMLText.
-
-    	This is a convenient method for setting the text of simple contained text:
-    	@verbatim
-    	<foo>This is text</foo>
-    		fooElement->SetText( "Hullaballoo!" );
-     	<foo>Hullaballoo!</foo>
-		@endverbatim
-
-    	Note that this function can be misleading. If the element foo was created from
-    	this XML:
-    	@verbatim
-    		<foo><b>This is text</b></foo>
-    	@endverbatim
-
-    	then it will not change "This is text", but rather prefix it with a text element:
-    	@verbatim
-    		<foo>Hullaballoo!<b>This is text</b></foo>
-    	@endverbatim
-
-		For this XML:
-    	@verbatim
-    		<foo />
-    	@endverbatim
-    	SetText() will generate
-    	@verbatim
-    		<foo>Hullaballoo!</foo>
-    	@endverbatim
-    */
-	void SetText( const char* inText );
-    /// Convenience method for setting text inside an element. See SetText() for important limitations.
-    void SetText( int value );
-    /// Convenience method for setting text inside an element. See SetText() for important limitations.
-    void SetText( unsigned value );
-	/// Convenience method for setting text inside an element. See SetText() for important limitations.
-	void SetText(int64_t value);
-	/// Convenience method for setting text inside an element. See SetText() for important limitations.
-    void SetText( bool value );
-    /// Convenience method for setting text inside an element. See SetText() for important limitations.
-    void SetText( double value );
-    /// Convenience method for setting text inside an element. See SetText() for important limitations.
-    void SetText( float value );
-
-    /**
-    	Convenience method to query the value of a child text node. This is probably best
-    	shown by example. Given you have a document is this form:
-    	@verbatim
-    		<point>
-    			<x>1</x>
-    			<y>1.4</y>
-    		</point>
-    	@endverbatim
-
-    	The QueryIntText() and similar functions provide a safe and easier way to get to the
-    	"value" of x and y.
-
-    	@verbatim
-    		int x = 0;
-    		float y = 0;	// types of x and y are contrived for example
-    		const XMLElement* xElement = pointElement->FirstChildElement( "x" );
-    		const XMLElement* yElement = pointElement->FirstChildElement( "y" );
-    		xElement->QueryIntText( &x );
-    		yElement->QueryFloatText( &y );
-    	@endverbatim
-
-    	@returns XML_SUCCESS (0) on success, XML_CAN_NOT_CONVERT_TEXT if the text cannot be converted
-    			 to the requested type, and XML_NO_TEXT_NODE if there is no child text to query.
-
-    */
-    XMLError QueryIntText( int* ival ) const;
-    /// See QueryIntText()
-    XMLError QueryUnsignedText( unsigned* uval ) const;
-	/// See QueryIntText()
-	XMLError QueryInt64Text(int64_t* uval) const;
-	/// See QueryIntText()
-    XMLError QueryBoolText( bool* bval ) const;
-    /// See QueryIntText()
-    XMLError QueryDoubleText( double* dval ) const;
-    /// See QueryIntText()
-    XMLError QueryFloatText( float* fval ) const;
-
-	int IntText(int defaultValue = 0) const;
-
-	/// See QueryIntText()
-	unsigned UnsignedText(unsigned defaultValue = 0) const;
-	/// See QueryIntText()
-	int64_t Int64Text(int64_t defaultValue = 0) const;
-	/// See QueryIntText()
-	bool BoolText(bool defaultValue = false) const;
-	/// See QueryIntText()
-	double DoubleText(double defaultValue = 0) const;
-	/// See QueryIntText()
-	float FloatText(float defaultValue = 0) const;
-
-    // internal:
-    enum ElementClosingType {
-        OPEN,		// <foo>
-        CLOSED,		// <foo/>
-        CLOSING		// </foo>
-    };
-    ElementClosingType ClosingType() const {
-        return _closingType;
-    }
-    virtual XMLNode* ShallowClone( XMLDocument* document ) const;
-    virtual bool ShallowEqual( const XMLNode* compare ) const;
-
-protected:
-    char* ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr );
-
-private:
-    XMLElement( XMLDocument* doc );
-    virtual ~XMLElement();
-    XMLElement( const XMLElement& );	// not supported
-    void operator=( const XMLElement& );	// not supported
-
-    XMLAttribute* FindOrCreateAttribute( const char* name );
-    char* ParseAttributes( char* p, int* curLineNumPtr );
-    static void DeleteAttribute( XMLAttribute* attribute );
-    XMLAttribute* CreateAttribute();
-
-    enum { BUF_SIZE = 200 };
-    ElementClosingType _closingType;
-    // The attribute list is ordered; there is no 'lastAttribute'
-    // because the list needs to be scanned for dupes before adding
-    // a new attribute.
-    XMLAttribute* _rootAttribute;
-};
-
-
-enum Whitespace {
-    PRESERVE_WHITESPACE,
-    COLLAPSE_WHITESPACE
-};
-
-
-/** A Document binds together all the functionality.
-	It can be saved, loaded, and printed to the screen.
-	All Nodes are connected and allocated to a Document.
-	If the Document is deleted, all its Nodes are also deleted.
-*/
-class TINYXML2_LIB XMLDocument : public XMLNode
-{
-    friend class XMLElement;
-    // Gives access to SetError and Push/PopDepth, but over-access for everything else.
-    // Wishing C++ had "internal" scope.
-    friend class XMLNode;
-    friend class XMLText;
-    friend class XMLComment;
-    friend class XMLDeclaration;
-    friend class XMLUnknown;
-public:
-    /// constructor
-    XMLDocument( bool processEntities = true, Whitespace whitespaceMode = PRESERVE_WHITESPACE );
-    ~XMLDocument();
-
-    virtual XMLDocument* ToDocument()				{
-        TIXMLASSERT( this == _document );
-        return this;
-    }
-    virtual const XMLDocument* ToDocument() const	{
-        TIXMLASSERT( this == _document );
-        return this;
-    }
-
-    /**
-    	Parse an XML file from a character string.
-    	Returns XML_SUCCESS (0) on success, or
-    	an errorID.
-
-    	You may optionally pass in the 'nBytes', which is
-    	the number of bytes which will be parsed. If not
-    	specified, TinyXML-2 will assume 'xml' points to a
-    	null terminated string.
-    */
-    XMLError Parse( const char* xml, size_t nBytes=(size_t)(-1) );
-
-    /**
-    	Load an XML file from disk.
-    	Returns XML_SUCCESS (0) on success, or
-    	an errorID.
-    */
-    XMLError LoadFile( const char* filename );
-
-    /**
-    	Load an XML file from disk. You are responsible
-    	for providing and closing the FILE*.
-
-        NOTE: The file should be opened as binary ("rb")
-        not text in order for TinyXML-2 to correctly
-        do newline normalization.
-
-    	Returns XML_SUCCESS (0) on success, or
-    	an errorID.
-    */
-    XMLError LoadFile( FILE* );
-
-    /**
-    	Save the XML file to disk.
-    	Returns XML_SUCCESS (0) on success, or
-    	an errorID.
-    */
-    XMLError SaveFile( const char* filename, bool compact = false );
-
-    /**
-    	Save the XML file to disk. You are responsible
-    	for providing and closing the FILE*.
-
-    	Returns XML_SUCCESS (0) on success, or
-    	an errorID.
-    */
-    XMLError SaveFile( FILE* fp, bool compact = false );
-
-    bool ProcessEntities() const		{
-        return _processEntities;
-    }
-    Whitespace WhitespaceMode() const	{
-        return _whitespaceMode;
-    }
-
-    /**
-    	Returns true if this document has a leading Byte Order Mark of UTF8.
-    */
-    bool HasBOM() const {
-        return _writeBOM;
-    }
-    /** Sets whether to write the BOM when writing the file.
-    */
-    void SetBOM( bool useBOM ) {
-        _writeBOM = useBOM;
-    }
-
-    /** Return the root element of DOM. Equivalent to FirstChildElement().
-        To get the first node, use FirstChild().
-    */
-    XMLElement* RootElement()				{
-        return FirstChildElement();
-    }
-    const XMLElement* RootElement() const	{
-        return FirstChildElement();
-    }
-
-    /** Print the Document. If the Printer is not provided, it will
-        print to stdout. If you provide Printer, this can print to a file:
-    	@verbatim
-    	XMLPrinter printer( fp );
-    	doc.Print( &printer );
-    	@endverbatim
-
-    	Or you can use a printer to print to memory:
-    	@verbatim
-    	XMLPrinter printer;
-    	doc.Print( &printer );
-    	// printer.CStr() has a const char* to the XML
-    	@endverbatim
-    */
-    void Print( XMLPrinter* streamer=0 ) const;
-    virtual bool Accept( XMLVisitor* visitor ) const;
-
-    /**
-    	Create a new Element associated with
-    	this Document. The memory for the Element
-    	is managed by the Document.
-    */
-    XMLElement* NewElement( const char* name );
-    /**
-    	Create a new Comment associated with
-    	this Document. The memory for the Comment
-    	is managed by the Document.
-    */
-    XMLComment* NewComment( const char* comment );
-    /**
-    	Create a new Text associated with
-    	this Document. The memory for the Text
-    	is managed by the Document.
-    */
-    XMLText* NewText( const char* text );
-    /**
-    	Create a new Declaration associated with
-    	this Document. The memory for the object
-    	is managed by the Document.
-
-    	If the 'text' param is null, the standard
-    	declaration is used.:
-    	@verbatim
-    		<?xml version="1.0" encoding="UTF-8"?>
-    	@endverbatim
-    */
-    XMLDeclaration* NewDeclaration( const char* text=0 );
-    /**
-    	Create a new Unknown associated with
-    	this Document. The memory for the object
-    	is managed by the Document.
-    */
-    XMLUnknown* NewUnknown( const char* text );
-
-    /**
-    	Delete a node associated with this document.
-    	It will be unlinked from the DOM.
-    */
-    void DeleteNode( XMLNode* node );
-
-    void ClearError() {
-        SetError(XML_SUCCESS, 0, 0);
-    }
-
-    /// Return true if there was an error parsing the document.
-    bool Error() const {
-        return _errorID != XML_SUCCESS;
-    }
-    /// Return the errorID.
-    XMLError  ErrorID() const {
-        return _errorID;
-    }
-	const char* ErrorName() const;
-    static const char* ErrorIDToName(XMLError errorID);
-
-    /** Returns a "long form" error description. A hopefully helpful
-        diagnostic with location, line number, and/or additional info.
-    */
-	const char* ErrorStr() const;
-
-    /// A (trivial) utility function that prints the ErrorStr() to stdout.
-    void PrintError() const;
-
-    /// Return the line where the error occurred, or zero if unknown.
-    int ErrorLineNum() const
-    {
-        return _errorLineNum;
-    }
-
-    /// Clear the document, resetting it to the initial state.
-    void Clear();
-
-	/**
-		Copies this document to a target document.
-		The target will be completely cleared before the copy.
-		If you want to copy a sub-tree, see XMLNode::DeepClone().
-
-		NOTE: that the 'target' must be non-null.
-	*/
-	void DeepCopy(XMLDocument* target) const;
-
-	// internal
-    char* Identify( char* p, XMLNode** node );
-
-	// internal
-	void MarkInUse(XMLNode*);
-
-    virtual XMLNode* ShallowClone( XMLDocument* /*document*/ ) const	{
-        return 0;
-    }
-    virtual bool ShallowEqual( const XMLNode* /*compare*/ ) const	{
-        return false;
-    }
-
-private:
-    XMLDocument( const XMLDocument& );	// not supported
-    void operator=( const XMLDocument& );	// not supported
-
-    bool			_writeBOM;
-    bool			_processEntities;
-    XMLError		_errorID;
-    Whitespace		_whitespaceMode;
-    mutable StrPair	_errorStr;
-    int             _errorLineNum;
-    char*			_charBuffer;
-    int				_parseCurLineNum;
-	int				_parsingDepth;
-	// Memory tracking does add some overhead.
-	// However, the code assumes that you don't
-	// have a bunch of unlinked nodes around.
-	// Therefore it takes less memory to track
-	// in the document vs. a linked list in the XMLNode,
-	// and the performance is the same.
-	DynArray<XMLNode*, 10> _unlinked;
-
-    MemPoolT< sizeof(XMLElement) >	 _elementPool;
-    MemPoolT< sizeof(XMLAttribute) > _attributePool;
-    MemPoolT< sizeof(XMLText) >		 _textPool;
-    MemPoolT< sizeof(XMLComment) >	 _commentPool;
-
-	static const char* _errorNames[XML_ERROR_COUNT];
-
-    void Parse();
-
-    void SetError( XMLError error, int lineNum, const char* format, ... );
-
-	// Something of an obvious security hole, once it was discovered.
-	// Either an ill-formed XML or an excessively deep one can overflow
-	// the stack. Track stack depth, and error out if needed.
-	class DepthTracker {
-	public:
-		explicit DepthTracker(XMLDocument * document) {
-			this->_document = document;
-			document->PushDepth();
-		}
-		~DepthTracker() {
-			_document->PopDepth();
-		}
-	private:
-		XMLDocument * _document;
-	};
-	void PushDepth();
-	void PopDepth();
-
-    template<class NodeType, int PoolElementSize>
-    NodeType* CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool );
-};
-
-template<class NodeType, int PoolElementSize>
-inline NodeType* XMLDocument::CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool )
-{
-    TIXMLASSERT( sizeof( NodeType ) == PoolElementSize );
-    TIXMLASSERT( sizeof( NodeType ) == pool.ItemSize() );
-    NodeType* returnNode = new (pool.Alloc()) NodeType( this );
-    TIXMLASSERT( returnNode );
-    returnNode->_memPool = &pool;
-
-	_unlinked.Push(returnNode);
-    return returnNode;
-}
-
-/**
-	A XMLHandle is a class that wraps a node pointer with null checks; this is
-	an incredibly useful thing. Note that XMLHandle is not part of the TinyXML-2
-	DOM structure. It is a separate utility class.
-
-	Take an example:
-	@verbatim
-	<Document>
-		<Element attributeA = "valueA">
-			<Child attributeB = "value1" />
-			<Child attributeB = "value2" />
-		</Element>
-	</Document>
-	@endverbatim
-
-	Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very
-	easy to write a *lot* of code that looks like:
-
-	@verbatim
-	XMLElement* root = document.FirstChildElement( "Document" );
-	if ( root )
-	{
-		XMLElement* element = root->FirstChildElement( "Element" );
-		if ( element )
-		{
-			XMLElement* child = element->FirstChildElement( "Child" );
-			if ( child )
-			{
-				XMLElement* child2 = child->NextSiblingElement( "Child" );
-				if ( child2 )
-				{
-					// Finally do something useful.
-	@endverbatim
-
-	And that doesn't even cover "else" cases. XMLHandle addresses the verbosity
-	of such code. A XMLHandle checks for null pointers so it is perfectly safe
-	and correct to use:
-
-	@verbatim
-	XMLHandle docHandle( &document );
-	XMLElement* child2 = docHandle.FirstChildElement( "Document" ).FirstChildElement( "Element" ).FirstChildElement().NextSiblingElement();
-	if ( child2 )
-	{
-		// do something useful
-	@endverbatim
-
-	Which is MUCH more concise and useful.
-
-	It is also safe to copy handles - internally they are nothing more than node pointers.
-	@verbatim
-	XMLHandle handleCopy = handle;
-	@endverbatim
-
-	See also XMLConstHandle, which is the same as XMLHandle, but operates on const objects.
-*/
-class TINYXML2_LIB XMLHandle
-{
-public:
-    /// Create a handle from any node (at any depth of the tree.) This can be a null pointer.
-    explicit XMLHandle( XMLNode* node ) : _node( node ) {
-    }
-    /// Create a handle from a node.
-    explicit XMLHandle( XMLNode& node ) : _node( &node ) {
-    }
-    /// Copy constructor
-    XMLHandle( const XMLHandle& ref ) : _node( ref._node ) {
-    }
-    /// Assignment
-    XMLHandle& operator=( const XMLHandle& ref )							{
-        _node = ref._node;
-        return *this;
-    }
-
-    /// Get the first child of this handle.
-    XMLHandle FirstChild() 													{
-        return XMLHandle( _node ? _node->FirstChild() : 0 );
-    }
-    /// Get the first child element of this handle.
-    XMLHandle FirstChildElement( const char* name = 0 )						{
-        return XMLHandle( _node ? _node->FirstChildElement( name ) : 0 );
-    }
-    /// Get the last child of this handle.
-    XMLHandle LastChild()													{
-        return XMLHandle( _node ? _node->LastChild() : 0 );
-    }
-    /// Get the last child element of this handle.
-    XMLHandle LastChildElement( const char* name = 0 )						{
-        return XMLHandle( _node ? _node->LastChildElement( name ) : 0 );
-    }
-    /// Get the previous sibling of this handle.
-    XMLHandle PreviousSibling()												{
-        return XMLHandle( _node ? _node->PreviousSibling() : 0 );
-    }
-    /// Get the previous sibling element of this handle.
-    XMLHandle PreviousSiblingElement( const char* name = 0 )				{
-        return XMLHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
-    }
-    /// Get the next sibling of this handle.
-    XMLHandle NextSibling()													{
-        return XMLHandle( _node ? _node->NextSibling() : 0 );
-    }
-    /// Get the next sibling element of this handle.
-    XMLHandle NextSiblingElement( const char* name = 0 )					{
-        return XMLHandle( _node ? _node->NextSiblingElement( name ) : 0 );
-    }
-
-    /// Safe cast to XMLNode. This can return null.
-    XMLNode* ToNode()							{
-        return _node;
-    }
-    /// Safe cast to XMLElement. This can return null.
-    XMLElement* ToElement() 					{
-        return ( _node ? _node->ToElement() : 0 );
-    }
-    /// Safe cast to XMLText. This can return null.
-    XMLText* ToText() 							{
-        return ( _node ? _node->ToText() : 0 );
-    }
-    /// Safe cast to XMLUnknown. This can return null.
-    XMLUnknown* ToUnknown() 					{
-        return ( _node ? _node->ToUnknown() : 0 );
-    }
-    /// Safe cast to XMLDeclaration. This can return null.
-    XMLDeclaration* ToDeclaration() 			{
-        return ( _node ? _node->ToDeclaration() : 0 );
-    }
-
-private:
-    XMLNode* _node;
-};
-
-
-/**
-	A variant of the XMLHandle class for working with const XMLNodes and Documents. It is the
-	same in all regards, except for the 'const' qualifiers. See XMLHandle for API.
-*/
-class TINYXML2_LIB XMLConstHandle
-{
-public:
-    explicit XMLConstHandle( const XMLNode* node ) : _node( node ) {
-    }
-    explicit XMLConstHandle( const XMLNode& node ) : _node( &node ) {
-    }
-    XMLConstHandle( const XMLConstHandle& ref ) : _node( ref._node ) {
-    }
-
-    XMLConstHandle& operator=( const XMLConstHandle& ref )							{
-        _node = ref._node;
-        return *this;
-    }
-
-    const XMLConstHandle FirstChild() const											{
-        return XMLConstHandle( _node ? _node->FirstChild() : 0 );
-    }
-    const XMLConstHandle FirstChildElement( const char* name = 0 ) const				{
-        return XMLConstHandle( _node ? _node->FirstChildElement( name ) : 0 );
-    }
-    const XMLConstHandle LastChild()	const										{
-        return XMLConstHandle( _node ? _node->LastChild() : 0 );
-    }
-    const XMLConstHandle LastChildElement( const char* name = 0 ) const				{
-        return XMLConstHandle( _node ? _node->LastChildElement( name ) : 0 );
-    }
-    const XMLConstHandle PreviousSibling() const									{
-        return XMLConstHandle( _node ? _node->PreviousSibling() : 0 );
-    }
-    const XMLConstHandle PreviousSiblingElement( const char* name = 0 ) const		{
-        return XMLConstHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
-    }
-    const XMLConstHandle NextSibling() const										{
-        return XMLConstHandle( _node ? _node->NextSibling() : 0 );
-    }
-    const XMLConstHandle NextSiblingElement( const char* name = 0 ) const			{
-        return XMLConstHandle( _node ? _node->NextSiblingElement( name ) : 0 );
-    }
-
-
-    const XMLNode* ToNode() const				{
-        return _node;
-    }
-    const XMLElement* ToElement() const			{
-        return ( _node ? _node->ToElement() : 0 );
-    }
-    const XMLText* ToText() const				{
-        return ( _node ? _node->ToText() : 0 );
-    }
-    const XMLUnknown* ToUnknown() const			{
-        return ( _node ? _node->ToUnknown() : 0 );
-    }
-    const XMLDeclaration* ToDeclaration() const	{
-        return ( _node ? _node->ToDeclaration() : 0 );
-    }
-
-private:
-    const XMLNode* _node;
-};
-
-
-/**
-	Printing functionality. The XMLPrinter gives you more
-	options than the XMLDocument::Print() method.
-
-	It can:
-	-# Print to memory.
-	-# Print to a file you provide.
-	-# Print XML without a XMLDocument.
-
-	Print to Memory
-
-	@verbatim
-	XMLPrinter printer;
-	doc.Print( &printer );
-	SomeFunction( printer.CStr() );
-	@endverbatim
-
-	Print to a File
-
-	You provide the file pointer.
-	@verbatim
-	XMLPrinter printer( fp );
-	doc.Print( &printer );
-	@endverbatim
-
-	Print without a XMLDocument
-
-	When loading, an XML parser is very useful. However, sometimes
-	when saving, it just gets in the way. The code is often set up
-	for streaming, and constructing the DOM is just overhead.
-
-	The Printer supports the streaming case. The following code
-	prints out a trivially simple XML file without ever creating
-	an XML document.
-
-	@verbatim
-	XMLPrinter printer( fp );
-	printer.OpenElement( "foo" );
-	printer.PushAttribute( "foo", "bar" );
-	printer.CloseElement();
-	@endverbatim
-*/
-class TINYXML2_LIB XMLPrinter : public XMLVisitor
-{
-public:
-    /** Construct the printer. If the FILE* is specified,
-    	this will print to the FILE. Else it will print
-    	to memory, and the result is available in CStr().
-    	If 'compact' is set to true, then output is created
-    	with only required whitespace and newlines.
-    */
-    XMLPrinter( FILE* file=0, bool compact = false, int depth = 0 );
-    virtual ~XMLPrinter()	{}
-
-    /** If streaming, write the BOM and declaration. */
-    void PushHeader( bool writeBOM, bool writeDeclaration );
-    /** If streaming, start writing an element.
-        The element must be closed with CloseElement()
-    */
-    void OpenElement( const char* name, bool compactMode=false );
-    /// If streaming, add an attribute to an open element.
-    void PushAttribute( const char* name, const char* value );
-    void PushAttribute( const char* name, int value );
-    void PushAttribute( const char* name, unsigned value );
-	void PushAttribute(const char* name, int64_t value);
-	void PushAttribute( const char* name, bool value );
-    void PushAttribute( const char* name, double value );
-    /// If streaming, close the Element.
-    virtual void CloseElement( bool compactMode=false );
-
-    /// Add a text node.
-    void PushText( const char* text, bool cdata=false );
-    /// Add a text node from an integer.
-    void PushText( int value );
-    /// Add a text node from an unsigned.
-    void PushText( unsigned value );
-	/// Add a text node from an unsigned.
-	void PushText(int64_t value);
-	/// Add a text node from a bool.
-    void PushText( bool value );
-    /// Add a text node from a float.
-    void PushText( float value );
-    /// Add a text node from a double.
-    void PushText( double value );
-
-    /// Add a comment
-    void PushComment( const char* comment );
-
-    void PushDeclaration( const char* value );
-    void PushUnknown( const char* value );
-
-    virtual bool VisitEnter( const XMLDocument& /*doc*/ );
-    virtual bool VisitExit( const XMLDocument& /*doc*/ )			{
-        return true;
-    }
-
-    virtual bool VisitEnter( const XMLElement& element, const XMLAttribute* attribute );
-    virtual bool VisitExit( const XMLElement& element );
-
-    virtual bool Visit( const XMLText& text );
-    virtual bool Visit( const XMLComment& comment );
-    virtual bool Visit( const XMLDeclaration& declaration );
-    virtual bool Visit( const XMLUnknown& unknown );
-
-    /**
-    	If in print to memory mode, return a pointer to
-    	the XML file in memory.
-    */
-    const char* CStr() const {
-        return _buffer.Mem();
-    }
-    /**
-    	If in print to memory mode, return the size
-    	of the XML file in memory. (Note the size returned
-    	includes the terminating null.)
-    */
-    int CStrSize() const {
-        return _buffer.Size();
-    }
-    /**
-    	If in print to memory mode, reset the buffer to the
-    	beginning.
-    */
-    void ClearBuffer() {
-        _buffer.Clear();
-        _buffer.Push(0);
-		_firstElement = true;
-    }
-
-protected:
-	virtual bool CompactMode( const XMLElement& )	{ return _compactMode; }
-
-	/** Prints out the space before an element. You may override to change
-	    the space and tabs used. A PrintSpace() override should call Print().
-	*/
-    virtual void PrintSpace( int depth );
-    void Print( const char* format, ... );
-    void Write( const char* data, size_t size );
-    inline void Write( const char* data )           { Write( data, strlen( data ) ); }
-    void Putc( char ch );
-
-    void SealElementIfJustOpened();
-    bool _elementJustOpened;
-    DynArray< const char*, 10 > _stack;
-
-private:
-    void PrintString( const char*, bool restrictedEntitySet );	// prints out, after detecting entities.
-
-    bool _firstElement;
-    FILE* _fp;
-    int _depth;
-    int _textDepth;
-    bool _processEntities;
-	bool _compactMode;
-
-    enum {
-        ENTITY_RANGE = 64,
-        BUF_SIZE = 200
-    };
-    bool _entityFlag[ENTITY_RANGE];
-    bool _restrictedEntityFlag[ENTITY_RANGE];
-
-    DynArray< char, 20 > _buffer;
-
-    // Prohibit cloning, intentionally not implemented
-    XMLPrinter( const XMLPrinter& );
-    XMLPrinter& operator=( const XMLPrinter& );
-};
-
-
-}	// tinyxml2
-
-#if defined(_MSC_VER)
-#   pragma warning(pop)
-#endif
-
-#endif // TINYXML2_INCLUDED

+ 0 - 5992
lib/lodepng.cpp

@@ -1,5992 +0,0 @@
-/*
-LodePNG version 20190210
-
-Copyright (c) 2005-2019 Lode Vandevenne
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-    1. The origin of this software must not be misrepresented; you must not
-    claim that you wrote the original software. If you use this software
-    in a product, an acknowledgment in the product documentation would be
-    appreciated but is not required.
-
-    2. Altered source versions must be plainly marked as such, and must not be
-    misrepresented as being the original software.
-
-    3. This notice may not be removed or altered from any source
-    distribution.
-*/
-
-/*
-The manual and changelog are in the header file "lodepng.h"
-Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C.
-*/
-
-#include "lodepng.h"
-
-#include <limits.h> /* LONG_MAX */
-#include <stdio.h> /* file handling */
-#include <stdlib.h> /* allocations */
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1310) /*Visual Studio: A few warning types are not desired here.*/
-#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/
-#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/
-#endif /*_MSC_VER */
-
-const char* LODEPNG_VERSION_STRING = "20190210";
-
-/*
-This source file is built up in the following large parts. The code sections
-with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way.
--Tools for C and common code for PNG and Zlib
--C Code for Zlib (huffman, deflate, ...)
--C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...)
--The C++ wrapper around all of the above
-*/
-
-/*The malloc, realloc and free functions defined here with "lodepng_" in front
-of the name, so that you can easily change them to others related to your
-platform if needed. Everything else in the code calls these. Pass
--DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out
-#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and
-define them in your own project's source files without needing to change
-lodepng source code. Don't forget to remove "static" if you copypaste them
-from here.*/
-
-#ifdef LODEPNG_COMPILE_ALLOCATORS
-static void* lodepng_malloc(size_t size) {
-#ifdef LODEPNG_MAX_ALLOC
-  if(size > LODEPNG_MAX_ALLOC) return 0;
-#endif
-  return malloc(size);
-}
-
-static void* lodepng_realloc(void* ptr, size_t new_size) {
-#ifdef LODEPNG_MAX_ALLOC
-  if(new_size > LODEPNG_MAX_ALLOC) return 0;
-#endif
-  return realloc(ptr, new_size);
-}
-
-static void lodepng_free(void* ptr) {
-  free(ptr);
-}
-#else /*LODEPNG_COMPILE_ALLOCATORS*/
-void* lodepng_malloc(size_t size);
-void* lodepng_realloc(void* ptr, size_t new_size);
-void lodepng_free(void* ptr);
-#endif /*LODEPNG_COMPILE_ALLOCATORS*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* // Tools for C, and common code for PNG and Zlib.                       // */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#define LODEPNG_MAX(a, b) (((a) > (b)) ? (a) : (b))
-#define LODEPNG_MIN(a, b) (((a) < (b)) ? (a) : (b))
-
-/*
-Often in case of an error a value is assigned to a variable and then it breaks
-out of a loop (to go to the cleanup phase of a function). This macro does that.
-It makes the error handling code shorter and more readable.
-
-Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83);
-*/
-#define CERROR_BREAK(errorvar, code){\
-  errorvar = code;\
-  break;\
-}
-
-/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/
-#define ERROR_BREAK(code) CERROR_BREAK(error, code)
-
-/*Set error var to the error code, and return it.*/
-#define CERROR_RETURN_ERROR(errorvar, code){\
-  errorvar = code;\
-  return code;\
-}
-
-/*Try the code, if it returns error, also return the error.*/
-#define CERROR_TRY_RETURN(call){\
-  unsigned error = call;\
-  if(error) return error;\
-}
-
-/*Set error var to the error code, and return from the void function.*/
-#define CERROR_RETURN(errorvar, code){\
-  errorvar = code;\
-  return;\
-}
-
-/*
-About uivector, ucvector and string:
--All of them wrap dynamic arrays or text strings in a similar way.
--LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version.
--The string tools are made to avoid problems with compilers that declare things like strncat as deprecated.
--They're not used in the interface, only internally in this file as static functions.
--As with many other structs in this file, the init and cleanup functions serve as ctor and dtor.
-*/
-
-#ifdef LODEPNG_COMPILE_ZLIB
-/*dynamic vector of unsigned ints*/
-typedef struct uivector {
-  unsigned* data;
-  size_t size; /*size in number of unsigned longs*/
-  size_t allocsize; /*allocated size in bytes*/
-} uivector;
-
-static void uivector_cleanup(void* p) {
-  ((uivector*)p)->size = ((uivector*)p)->allocsize = 0;
-  lodepng_free(((uivector*)p)->data);
-  ((uivector*)p)->data = NULL;
-}
-
-/*returns 1 if success, 0 if failure ==> nothing done*/
-static unsigned uivector_reserve(uivector* p, size_t allocsize) {
-  if(allocsize > p->allocsize) {
-    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);
-    void* data = lodepng_realloc(p->data, newsize);
-    if(data) {
-      p->allocsize = newsize;
-      p->data = (unsigned*)data;
-    }
-    else return 0; /*error: not enough memory*/
-  }
-  return 1;
-}
-
-/*returns 1 if success, 0 if failure ==> nothing done*/
-static unsigned uivector_resize(uivector* p, size_t size) {
-  if(!uivector_reserve(p, size * sizeof(unsigned))) return 0;
-  p->size = size;
-  return 1; /*success*/
-}
-
-/*resize and give all new elements the value*/
-static unsigned uivector_resizev(uivector* p, size_t size, unsigned value) {
-  size_t oldsize = p->size, i;
-  if(!uivector_resize(p, size)) return 0;
-  for(i = oldsize; i < size; ++i) p->data[i] = value;
-  return 1;
-}
-
-static void uivector_init(uivector* p) {
-  p->data = NULL;
-  p->size = p->allocsize = 0;
-}
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/*returns 1 if success, 0 if failure ==> nothing done*/
-static unsigned uivector_push_back(uivector* p, unsigned c) {
-  if(!uivector_resize(p, p->size + 1)) return 0;
-  p->data[p->size - 1] = c;
-  return 1;
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-#endif /*LODEPNG_COMPILE_ZLIB*/
-
-/* /////////////////////////////////////////////////////////////////////////// */
-
-/*dynamic vector of unsigned chars*/
-typedef struct ucvector {
-  unsigned char* data;
-  size_t size; /*used size*/
-  size_t allocsize; /*allocated size*/
-} ucvector;
-
-/*returns 1 if success, 0 if failure ==> nothing done*/
-static unsigned ucvector_reserve(ucvector* p, size_t allocsize) {
-  if(allocsize > p->allocsize) {
-    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);
-    void* data = lodepng_realloc(p->data, newsize);
-    if(data) {
-      p->allocsize = newsize;
-      p->data = (unsigned char*)data;
-    }
-    else return 0; /*error: not enough memory*/
-  }
-  return 1;
-}
-
-/*returns 1 if success, 0 if failure ==> nothing done*/
-static unsigned ucvector_resize(ucvector* p, size_t size) {
-  if(!ucvector_reserve(p, size * sizeof(unsigned char))) return 0;
-  p->size = size;
-  return 1; /*success*/
-}
-
-#ifdef LODEPNG_COMPILE_PNG
-
-static void ucvector_cleanup(void* p) {
-  ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0;
-  lodepng_free(((ucvector*)p)->data);
-  ((ucvector*)p)->data = NULL;
-}
-
-static void ucvector_init(ucvector* p) {
-  p->data = NULL;
-  p->size = p->allocsize = 0;
-}
-#endif /*LODEPNG_COMPILE_PNG*/
-
-#ifdef LODEPNG_COMPILE_ZLIB
-/*you can both convert from vector to buffer&size and vica versa. If you use
-init_buffer to take over a buffer and size, it is not needed to use cleanup*/
-static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size) {
-  p->data = buffer;
-  p->allocsize = p->size = size;
-}
-#endif /*LODEPNG_COMPILE_ZLIB*/
-
-#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER)
-/*returns 1 if success, 0 if failure ==> nothing done*/
-static unsigned ucvector_push_back(ucvector* p, unsigned char c) {
-  if(!ucvector_resize(p, p->size + 1)) return 0;
-  p->data[p->size - 1] = c;
-  return 1;
-}
-#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/
-
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_PNG
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-
-/*free string pointer and set it to NULL*/
-static void string_cleanup(char** out) {
-  lodepng_free(*out);
-  *out = NULL;
-}
-
-/* dynamically allocates a new string with a copy of the null terminated input text */
-static char* alloc_string(const char* in) {
-  size_t insize = strlen(in);
-  char* out = (char*)lodepng_malloc(insize + 1);
-  if(out) {
-    size_t i;
-    for(i = 0; i != insize; ++i) {
-      out[i] = in[i];
-    }
-    out[i] = 0;
-  }
-  return out;
-}
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-#endif /*LODEPNG_COMPILE_PNG*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-unsigned lodepng_read32bitInt(const unsigned char* buffer) {
-  return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]);
-}
-
-#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)
-/*buffer must have at least 4 allocated bytes available*/
-static void lodepng_set32bitInt(unsigned char* buffer, unsigned value) {
-  buffer[0] = (unsigned char)((value >> 24) & 0xff);
-  buffer[1] = (unsigned char)((value >> 16) & 0xff);
-  buffer[2] = (unsigned char)((value >>  8) & 0xff);
-  buffer[3] = (unsigned char)((value      ) & 0xff);
-}
-#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-static void lodepng_add32bitInt(ucvector* buffer, unsigned value) {
-  ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/
-  lodepng_set32bitInt(&buffer->data[buffer->size - 4], value);
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / File IO                                                                / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_DISK
-
-/* returns negative value on error. This should be pure C compatible, so no fstat. */
-static long lodepng_filesize(const char* filename) {
-  FILE* file;
-  long size;
-  file = fopen(filename, "rb");
-  if(!file) return -1;
-
-  if(fseek(file, 0, SEEK_END) != 0) {
-    fclose(file);
-    return -1;
-  }
-
-  size = ftell(file);
-  /* It may give LONG_MAX as directory size, this is invalid for us. */
-  if(size == LONG_MAX) size = -1;
-
-  fclose(file);
-  return size;
-}
-
-/* load file into buffer that already has the correct allocated size. Returns error code.*/
-static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename) {
-  FILE* file;
-  size_t readsize;
-  file = fopen(filename, "rb");
-  if(!file) return 78;
-
-  readsize = fread(out, 1, size, file);
-  fclose(file);
-
-  if (readsize != size) return 78;
-  return 0;
-}
-
-unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename) {
-  long size = lodepng_filesize(filename);
-  if (size < 0) return 78;
-  *outsize = (size_t)size;
-
-  *out = (unsigned char*)lodepng_malloc((size_t)size);
-  if(!(*out) && size > 0) return 83; /*the above malloc failed*/
-
-  return lodepng_buffer_file(*out, (size_t)size, filename);
-}
-
-/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
-unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename) {
-  FILE* file;
-  file = fopen(filename, "wb" );
-  if(!file) return 79;
-  fwrite(buffer, 1, buffersize, file);
-  fclose(file);
-  return 0;
-}
-
-#endif /*LODEPNG_COMPILE_DISK*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* // End of common code and tools. Begin of Zlib related code.            // */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_ZLIB
-#ifdef LODEPNG_COMPILE_ENCODER
-/*TODO: this ignores potential out of memory errors*/
-#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit){\
-  /*add a new byte at the end*/\
-  if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\
-  /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\
-  (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\
-  ++(*bitpointer);\
-}
-
-static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) {
-  size_t i;
-  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1));
-}
-
-static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) {
-  size_t i;
-  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1));
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1)
-
-static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream) {
-  unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream));
-  ++(*bitpointer);
-  return result;
-}
-
-static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) {
-  unsigned result = 0, i;
-  for(i = 0; i != nbits; ++i) {
-    result += ((unsigned)READBIT(*bitpointer, bitstream)) << i;
-    ++(*bitpointer);
-  }
-  return result;
-}
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Deflate - Huffman                                                      / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#define FIRST_LENGTH_CODE_INDEX 257
-#define LAST_LENGTH_CODE_INDEX 285
-/*256 literals, the end code, some length codes, and 2 unused codes*/
-#define NUM_DEFLATE_CODE_SYMBOLS 288
-/*the distance codes have their own symbols, 30 used, 2 unused*/
-#define NUM_DISTANCE_SYMBOLS 32
-/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/
-#define NUM_CODE_LENGTH_CODES 19
-
-/*the base lengths represented by codes 257-285*/
-static const unsigned LENGTHBASE[29]
-  = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59,
-     67, 83, 99, 115, 131, 163, 195, 227, 258};
-
-/*the extra bits used by codes 257-285 (added to base length)*/
-static const unsigned LENGTHEXTRA[29]
-  = {0, 0, 0, 0, 0, 0, 0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,
-      4,  4,  4,   4,   5,   5,   5,   5,   0};
-
-/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/
-static const unsigned DISTANCEBASE[30]
-  = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513,
-     769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577};
-
-/*the extra bits of backwards distances (added to base)*/
-static const unsigned DISTANCEEXTRA[30]
-  = {0, 0, 0, 0, 1, 1, 2,  2,  3,  3,  4,  4,  5,  5,   6,   6,   7,   7,   8,
-       8,    9,    9,   10,   10,   11,   11,   12,    12,    13,    13};
-
-/*the order in which "code length alphabet code lengths" are stored, out of this
-the huffman tree of the dynamic huffman tree lengths is generated*/
-static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES]
-  = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*
-Huffman tree struct, containing multiple representations of the tree
-*/
-typedef struct HuffmanTree {
-  unsigned* tree2d;
-  unsigned* tree1d;
-  unsigned* lengths; /*the lengths of the codes of the 1d-tree*/
-  unsigned maxbitlen; /*maximum number of bits a single code can get*/
-  unsigned numcodes; /*number of symbols in the alphabet = number of codes*/
-} HuffmanTree;
-
-/*function used for debug purposes to draw the tree in ascii art with C++*/
-/*
-static void HuffmanTree_draw(HuffmanTree* tree) {
-  std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl;
-  for(size_t i = 0; i != tree->tree1d.size; ++i) {
-    if(tree->lengths.data[i])
-      std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl;
-  }
-  std::cout << std::endl;
-}*/
-
-static void HuffmanTree_init(HuffmanTree* tree) {
-  tree->tree2d = 0;
-  tree->tree1d = 0;
-  tree->lengths = 0;
-}
-
-static void HuffmanTree_cleanup(HuffmanTree* tree) {
-  lodepng_free(tree->tree2d);
-  lodepng_free(tree->tree1d);
-  lodepng_free(tree->lengths);
-}
-
-/*the tree representation used by the decoder. return value is error*/
-static unsigned HuffmanTree_make2DTree(HuffmanTree* tree) {
-  unsigned nodefilled = 0; /*up to which node it is filled*/
-  unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/
-  unsigned n, i;
-
-  tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned));
-  if(!tree->tree2d) return 83; /*alloc fail*/
-
-  /*
-  convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means
-  uninited, a value >= numcodes is an address to another bit, a value < numcodes
-  is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as
-  many columns as codes - 1.
-  A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes.
-  Here, the internal nodes are stored (what their 0 and 1 option point to).
-  There is only memory for such good tree currently, if there are more nodes
-  (due to too long length codes), error 55 will happen
-  */
-  for(n = 0; n < tree->numcodes * 2; ++n) {
-    tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/
-  }
-
-  for(n = 0; n < tree->numcodes; ++n) /*the codes*/ {
-    for(i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/ {
-      unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1);
-      /*oversubscribed, see comment in lodepng_error_text*/
-      if(treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55;
-      if(tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/ {
-        if(i + 1 == tree->lengths[n]) /*last bit*/ {
-          tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/
-          treepos = 0;
-        } else {
-          /*put address of the next step in here, first that address has to be found of course
-          (it's just nodefilled + 1)...*/
-          ++nodefilled;
-          /*addresses encoded with numcodes added to it*/
-          tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes;
-          treepos = nodefilled;
-        }
-      }
-      else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes;
-    }
-  }
-
-  for(n = 0; n < tree->numcodes * 2; ++n) {
-    if(tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/
-  }
-
-  return 0;
-}
-
-/*
-Second step for the ...makeFromLengths and ...makeFromFrequencies functions.
-numcodes, lengths and maxbitlen must already be filled in correctly. return
-value is error.
-*/
-static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) {
-  uivector blcount;
-  uivector nextcode;
-  unsigned error = 0;
-  unsigned bits, n;
-
-  uivector_init(&blcount);
-  uivector_init(&nextcode);
-
-  tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned));
-  if(!tree->tree1d) error = 83; /*alloc fail*/
-
-  if(!uivector_resizev(&blcount, tree->maxbitlen + 1, 0)
-  || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0))
-    error = 83; /*alloc fail*/
-
-  if(!error) {
-    /*step 1: count number of instances of each code length*/
-    for(bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]];
-    /*step 2: generate the nextcode values*/
-    for(bits = 1; bits <= tree->maxbitlen; ++bits) {
-      nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1;
-    }
-    /*step 3: generate all the codes*/
-    for(n = 0; n != tree->numcodes; ++n) {
-      if(tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++;
-    }
-  }
-
-  uivector_cleanup(&blcount);
-  uivector_cleanup(&nextcode);
-
-  if(!error) return HuffmanTree_make2DTree(tree);
-  else return error;
-}
-
-/*
-given the code lengths (as stored in the PNG file), generate the tree as defined
-by Deflate. maxbitlen is the maximum bits that a code in the tree can have.
-return value is error.
-*/
-static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen,
-                                            size_t numcodes, unsigned maxbitlen) {
-  unsigned i;
-  tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned));
-  if(!tree->lengths) return 83; /*alloc fail*/
-  for(i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i];
-  tree->numcodes = (unsigned)numcodes; /*number of symbols*/
-  tree->maxbitlen = maxbitlen;
-  return HuffmanTree_makeFromLengths2(tree);
-}
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-/*BPM: Boundary Package Merge, see "A Fast and Space-Economical Algorithm for Length-Limited Coding",
-Jyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/
-
-/*chain node for boundary package merge*/
-typedef struct BPMNode {
-  int weight; /*the sum of all weights in this chain*/
-  unsigned index; /*index of this leaf node (called "count" in the paper)*/
-  struct BPMNode* tail; /*the next nodes in this chain (null if last)*/
-  int in_use;
-} BPMNode;
-
-/*lists of chains*/
-typedef struct BPMLists {
-  /*memory pool*/
-  unsigned memsize;
-  BPMNode* memory;
-  unsigned numfree;
-  unsigned nextfree;
-  BPMNode** freelist;
-  /*two heads of lookahead chains per list*/
-  unsigned listsize;
-  BPMNode** chains0;
-  BPMNode** chains1;
-} BPMLists;
-
-/*creates a new chain node with the given parameters, from the memory in the lists */
-static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail) {
-  unsigned i;
-  BPMNode* result;
-
-  /*memory full, so garbage collect*/
-  if(lists->nextfree >= lists->numfree) {
-    /*mark only those that are in use*/
-    for(i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0;
-    for(i = 0; i != lists->listsize; ++i) {
-      BPMNode* node;
-      for(node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1;
-      for(node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1;
-    }
-    /*collect those that are free*/
-    lists->numfree = 0;
-    for(i = 0; i != lists->memsize; ++i) {
-      if(!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i];
-    }
-    lists->nextfree = 0;
-  }
-
-  result = lists->freelist[lists->nextfree++];
-  result->weight = weight;
-  result->index = index;
-  result->tail = tail;
-  return result;
-}
-
-/*sort the leaves with stable mergesort*/
-static void bpmnode_sort(BPMNode* leaves, size_t num) {
-  BPMNode* mem = (BPMNode*)lodepng_malloc(sizeof(*leaves) * num);
-  size_t width, counter = 0;
-  for(width = 1; width < num; width *= 2) {
-    BPMNode* a = (counter & 1) ? mem : leaves;
-    BPMNode* b = (counter & 1) ? leaves : mem;
-    size_t p;
-    for(p = 0; p < num; p += 2 * width) {
-      size_t q = (p + width > num) ? num : (p + width);
-      size_t r = (p + 2 * width > num) ? num : (p + 2 * width);
-      size_t i = p, j = q, k;
-      for(k = p; k < r; k++) {
-        if(i < q && (j >= r || a[i].weight <= a[j].weight)) b[k] = a[i++];
-        else b[k] = a[j++];
-      }
-    }
-    counter++;
-  }
-  if(counter & 1) memcpy(leaves, mem, sizeof(*leaves) * num);
-  lodepng_free(mem);
-}
-
-/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/
-static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num) {
-  unsigned lastindex = lists->chains1[c]->index;
-
-  if(c == 0) {
-    if(lastindex >= numpresent) return;
-    lists->chains0[c] = lists->chains1[c];
-    lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0);
-  } else {
-    /*sum of the weights of the head nodes of the previous lookahead chains.*/
-    int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight;
-    lists->chains0[c] = lists->chains1[c];
-    if(lastindex < numpresent && sum > leaves[lastindex].weight) {
-      lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail);
-      return;
-    }
-    lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]);
-    /*in the end we are only interested in the chain of the last list, so no
-    need to recurse if we're at the last one (this gives measurable speedup)*/
-    if(num + 1 < (int)(2 * numpresent - 2)) {
-      boundaryPM(lists, leaves, numpresent, c - 1, num);
-      boundaryPM(lists, leaves, numpresent, c - 1, num);
-    }
-  }
-}
-
-unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,
-                                      size_t numcodes, unsigned maxbitlen) {
-  unsigned error = 0;
-  unsigned i;
-  size_t numpresent = 0; /*number of symbols with non-zero frequency*/
-  BPMNode* leaves; /*the symbols, only those with > 0 frequency*/
-
-  if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/
-  if((1u << maxbitlen) < (unsigned)numcodes) return 80; /*error: represent all symbols*/
-
-  leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves));
-  if(!leaves) return 83; /*alloc fail*/
-
-  for(i = 0; i != numcodes; ++i) {
-    if(frequencies[i] > 0) {
-      leaves[numpresent].weight = (int)frequencies[i];
-      leaves[numpresent].index = i;
-      ++numpresent;
-    }
-  }
-
-  for(i = 0; i != numcodes; ++i) lengths[i] = 0;
-
-  /*ensure at least two present symbols. There should be at least one symbol
-  according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To
-  make these work as well ensure there are at least two symbols. The
-  Package-Merge code below also doesn't work correctly if there's only one
-  symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/
-  if(numpresent == 0) {
-    lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/
-  } else if(numpresent == 1) {
-    lengths[leaves[0].index] = 1;
-    lengths[leaves[0].index == 0 ? 1 : 0] = 1;
-  } else {
-    BPMLists lists;
-    BPMNode* node;
-
-    bpmnode_sort(leaves, numpresent);
-
-    lists.listsize = maxbitlen;
-    lists.memsize = 2 * maxbitlen * (maxbitlen + 1);
-    lists.nextfree = 0;
-    lists.numfree = lists.memsize;
-    lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory));
-    lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*));
-    lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*));
-    lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*));
-    if(!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/
-
-    if(!error) {
-      for(i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i];
-
-      bpmnode_create(&lists, leaves[0].weight, 1, 0);
-      bpmnode_create(&lists, leaves[1].weight, 2, 0);
-
-      for(i = 0; i != lists.listsize; ++i) {
-        lists.chains0[i] = &lists.memory[0];
-        lists.chains1[i] = &lists.memory[1];
-      }
-
-      /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/
-      for(i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i);
-
-      for(node = lists.chains1[maxbitlen - 1]; node; node = node->tail) {
-        for(i = 0; i != node->index; ++i) ++lengths[leaves[i].index];
-      }
-    }
-
-    lodepng_free(lists.memory);
-    lodepng_free(lists.freelist);
-    lodepng_free(lists.chains0);
-    lodepng_free(lists.chains1);
-  }
-
-  lodepng_free(leaves);
-  return error;
-}
-
-/*Create the Huffman tree given the symbol frequencies*/
-static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies,
-                                                size_t mincodes, size_t numcodes, unsigned maxbitlen) {
-  unsigned error = 0;
-  while(!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/
-  tree->maxbitlen = maxbitlen;
-  tree->numcodes = (unsigned)numcodes; /*number of symbols*/
-  tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned));
-  if(!tree->lengths) return 83; /*alloc fail*/
-  /*initialize all lengths to 0*/
-  memset(tree->lengths, 0, numcodes * sizeof(unsigned));
-
-  error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen);
-  if(!error) error = HuffmanTree_makeFromLengths2(tree);
-  return error;
-}
-
-static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index) {
-  return tree->tree1d[index];
-}
-
-static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index) {
-  return tree->lengths[index];
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/
-static unsigned generateFixedLitLenTree(HuffmanTree* tree) {
-  unsigned i, error = 0;
-  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));
-  if(!bitlen) return 83; /*alloc fail*/
-
-  /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/
-  for(i =   0; i <= 143; ++i) bitlen[i] = 8;
-  for(i = 144; i <= 255; ++i) bitlen[i] = 9;
-  for(i = 256; i <= 279; ++i) bitlen[i] = 7;
-  for(i = 280; i <= 287; ++i) bitlen[i] = 8;
-
-  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15);
-
-  lodepng_free(bitlen);
-  return error;
-}
-
-/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/
-static unsigned generateFixedDistanceTree(HuffmanTree* tree) {
-  unsigned i, error = 0;
-  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));
-  if(!bitlen) return 83; /*alloc fail*/
-
-  /*there are 32 distance codes, but 30-31 are unused*/
-  for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5;
-  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15);
-
-  lodepng_free(bitlen);
-  return error;
-}
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-/*
-returns the code, or (unsigned)(-1) if error happened
-inbitlength is the length of the complete buffer, in bits (so its byte length times 8)
-*/
-static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp,
-                                    const HuffmanTree* codetree, size_t inbitlength) {
-  unsigned treepos = 0, ct;
-  for(;;) {
-    if(*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/
-    /*
-    decode the symbol from the tree. The "readBitFromStream" code is inlined in
-    the expression below because this is the biggest bottleneck while decoding
-    */
-    ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)];
-    ++(*bp);
-    if(ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/
-    else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/
-
-    if(treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/
-  }
-}
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Inflator (Decompressor)                                                / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/
-static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d) {
-  /*TODO: check for out of memory errors*/
-  generateFixedLitLenTree(tree_ll);
-  generateFixedDistanceTree(tree_d);
-}
-
-/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/
-static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d,
-                                      const unsigned char* in, size_t* bp, size_t inlength) {
-  /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/
-  unsigned error = 0;
-  unsigned n, HLIT, HDIST, HCLEN, i;
-  size_t inbitlength = inlength * 8;
-
-  /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/
-  unsigned* bitlen_ll = 0; /*lit,len code lengths*/
-  unsigned* bitlen_d = 0; /*dist code lengths*/
-  /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/
-  unsigned* bitlen_cl = 0;
-  HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/
-
-  if((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/
-
-  /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/
-  HLIT =  readBitsFromStream(bp, in, 5) + 257;
-  /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/
-  HDIST = readBitsFromStream(bp, in, 5) + 1;
-  /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/
-  HCLEN = readBitsFromStream(bp, in, 4) + 4;
-
-  if((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/
-
-  HuffmanTree_init(&tree_cl);
-
-  while(!error) {
-    /*read the code length codes out of 3 * (amount of code length codes) bits*/
-
-    bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned));
-    if(!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/);
-
-    for(i = 0; i != NUM_CODE_LENGTH_CODES; ++i) {
-      if(i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3);
-      else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/
-    }
-
-    error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7);
-    if(error) break;
-
-    /*now we can use this tree to read the lengths for the tree that this function will return*/
-    bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));
-    bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));
-    if(!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/);
-    for(i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0;
-    for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0;
-
-    /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/
-    i = 0;
-    while(i < HLIT + HDIST) {
-      unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength);
-      if(code <= 15) /*a length code*/ {
-        if(i < HLIT) bitlen_ll[i] = code;
-        else bitlen_d[i - HLIT] = code;
-        ++i;
-      } else if(code == 16) /*repeat previous*/ {
-        unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/
-        unsigned value; /*set value to the previous code*/
-
-        if(i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/
-
-        if((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
-        replength += readBitsFromStream(bp, in, 2);
-
-        if(i < HLIT + 1) value = bitlen_ll[i - 1];
-        else value = bitlen_d[i - HLIT - 1];
-        /*repeat this value in the next lengths*/
-        for(n = 0; n < replength; ++n) {
-          if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/
-          if(i < HLIT) bitlen_ll[i] = value;
-          else bitlen_d[i - HLIT] = value;
-          ++i;
-        }
-      } else if(code == 17) /*repeat "0" 3-10 times*/ {
-        unsigned replength = 3; /*read in the bits that indicate repeat length*/
-        if((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
-        replength += readBitsFromStream(bp, in, 3);
-
-        /*repeat this value in the next lengths*/
-        for(n = 0; n < replength; ++n) {
-          if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/
-
-          if(i < HLIT) bitlen_ll[i] = 0;
-          else bitlen_d[i - HLIT] = 0;
-          ++i;
-        }
-      } else if(code == 18) /*repeat "0" 11-138 times*/ {
-        unsigned replength = 11; /*read in the bits that indicate repeat length*/
-        if((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
-        replength += readBitsFromStream(bp, in, 7);
-
-        /*repeat this value in the next lengths*/
-        for(n = 0; n < replength; ++n) {
-          if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/
-
-          if(i < HLIT) bitlen_ll[i] = 0;
-          else bitlen_d[i - HLIT] = 0;
-          ++i;
-        }
-      } else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ {
-        if(code == (unsigned)(-1)) {
-          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
-          (10=no endcode, 11=wrong jump outside of tree)*/
-          error = (*bp) > inbitlength ? 10 : 11;
-        }
-        else error = 16; /*unexisting code, this can never happen*/
-        break;
-      }
-    }
-    if(error) break;
-
-    if(bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/
-
-    /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/
-    error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15);
-    if(error) break;
-    error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15);
-
-    break; /*end of error-while*/
-  }
-
-  lodepng_free(bitlen_cl);
-  lodepng_free(bitlen_ll);
-  lodepng_free(bitlen_d);
-  HuffmanTree_cleanup(&tree_cl);
-
-  return error;
-}
-
-/*inflate a block with dynamic of fixed Huffman tree*/
-static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp,
-                                    size_t* pos, size_t inlength, unsigned btype) {
-  unsigned error = 0;
-  HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/
-  HuffmanTree tree_d; /*the huffman tree for distance codes*/
-  size_t inbitlength = inlength * 8;
-
-  HuffmanTree_init(&tree_ll);
-  HuffmanTree_init(&tree_d);
-
-  if(btype == 1) getTreeInflateFixed(&tree_ll, &tree_d);
-  else if(btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength);
-
-  while(!error) /*decode all symbols until end reached, breaks at end code*/ {
-    /*code_ll is literal, length or end code*/
-    unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength);
-    if(code_ll <= 255) /*literal symbol*/ {
-      /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/
-      if(!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/);
-      out->data[*pos] = (unsigned char)code_ll;
-      ++(*pos);
-    } else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/ {
-      unsigned code_d, distance;
-      unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/
-      size_t start, forward, backward, length;
-
-      /*part 1: get length base*/
-      length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX];
-
-      /*part 2: get extra bits and add the value of that to length*/
-      numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX];
-      if((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/
-      length += readBitsFromStream(bp, in, numextrabits_l);
-
-      /*part 3: get distance code*/
-      code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength);
-      if(code_d > 29) {
-        if(code_d == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ {
-          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
-          (10=no endcode, 11=wrong jump outside of tree)*/
-          error = (*bp) > inlength * 8 ? 10 : 11;
-        }
-        else error = 18; /*error: invalid distance code (30-31 are never used)*/
-        break;
-      }
-      distance = DISTANCEBASE[code_d];
-
-      /*part 4: get extra bits from distance*/
-      numextrabits_d = DISTANCEEXTRA[code_d];
-      if((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/
-      distance += readBitsFromStream(bp, in, numextrabits_d);
-
-      /*part 5: fill in all the out[n] values based on the length and dist*/
-      start = (*pos);
-      if(distance > start) ERROR_BREAK(52); /*too long backward distance*/
-      backward = start - distance;
-
-      if(!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/);
-      if (distance < length) {
-        for(forward = 0; forward < length; ++forward) {
-          out->data[(*pos)++] = out->data[backward++];
-        }
-      } else {
-        memcpy(out->data + *pos, out->data + backward, length);
-        *pos += length;
-      }
-    } else if(code_ll == 256) {
-      break; /*end code, break the loop*/
-    } else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ {
-      /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
-      (10=no endcode, 11=wrong jump outside of tree)*/
-      error = ((*bp) > inlength * 8) ? 10 : 11;
-      break;
-    }
-  }
-
-  HuffmanTree_cleanup(&tree_ll);
-  HuffmanTree_cleanup(&tree_d);
-
-  return error;
-}
-
-static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength) {
-  size_t p;
-  unsigned LEN, NLEN, n, error = 0;
-
-  /*go to first boundary of byte*/
-  while(((*bp) & 0x7) != 0) ++(*bp);
-  p = (*bp) / 8; /*byte position*/
-
-  /*read LEN (2 bytes) and NLEN (2 bytes)*/
-  if(p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/
-  LEN = in[p] + 256u * in[p + 1]; p += 2;
-  NLEN = in[p] + 256u * in[p + 1]; p += 2;
-
-  /*check if 16-bit NLEN is really the one's complement of LEN*/
-  if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/
-
-  if(!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/
-
-  /*read the literal data: LEN bytes are now stored in the out buffer*/
-  if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/
-  for(n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++];
-
-  (*bp) = p * 8;
-
-  return error;
-}
-
-static unsigned lodepng_inflatev(ucvector* out,
-                                 const unsigned char* in, size_t insize,
-                                 const LodePNGDecompressSettings* settings) {
-  /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/
-  size_t bp = 0;
-  unsigned BFINAL = 0;
-  size_t pos = 0; /*byte position in the out buffer*/
-  unsigned error = 0;
-
-  (void)settings;
-
-  while(!BFINAL) {
-    unsigned BTYPE;
-    if(bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/
-    BFINAL = readBitFromStream(&bp, in);
-    BTYPE = 1u * readBitFromStream(&bp, in);
-    BTYPE += 2u * readBitFromStream(&bp, in);
-
-    if(BTYPE == 3) return 20; /*error: invalid BTYPE*/
-    else if(BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/
-    else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/
-
-    if(error) return error;
-  }
-
-  return error;
-}
-
-unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
-                         const unsigned char* in, size_t insize,
-                         const LodePNGDecompressSettings* settings) {
-  unsigned error;
-  ucvector v;
-  ucvector_init_buffer(&v, *out, *outsize);
-  error = lodepng_inflatev(&v, in, insize, settings);
-  *out = v.data;
-  *outsize = v.size;
-  return error;
-}
-
-static unsigned inflate(unsigned char** out, size_t* outsize,
-                        const unsigned char* in, size_t insize,
-                        const LodePNGDecompressSettings* settings) {
-  if(settings->custom_inflate) {
-    return settings->custom_inflate(out, outsize, in, insize, settings);
-  } else {
-    return lodepng_inflate(out, outsize, in, insize, settings);
-  }
-}
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Deflator (Compressor)                                                  / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258;
-
-/*bitlen is the size in bits of the code*/
-static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen) {
-  addBitsToStreamReversed(bp, compressed, code, bitlen);
-}
-
-/*search the index in the array, that has the largest value smaller than or equal to the given value,
-given array must be sorted (if no value is smaller, it returns the size of the given array)*/
-static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value) {
-  /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/
-  size_t left = 1;
-  size_t right = array_size - 1;
-
-  while(left <= right) {
-    size_t mid = (left + right) >> 1;
-    if (array[mid] >= value) right = mid - 1;
-    else left = mid + 1;
-  }
-  if(left >= array_size || array[left] > value) left--;
-  return left;
-}
-
-static void addLengthDistance(uivector* values, size_t length, size_t distance) {
-  /*values in encoded vector are those used by deflate:
-  0-255: literal bytes
-  256: end
-  257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits)
-  286-287: invalid*/
-
-  unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length);
-  unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]);
-  unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance);
-  unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]);
-
-  uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX);
-  uivector_push_back(values, extra_length);
-  uivector_push_back(values, dist_code);
-  uivector_push_back(values, extra_distance);
-}
-
-/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3
-bytes as input because 3 is the minimum match length for deflate*/
-static const unsigned HASH_NUM_VALUES = 65536;
-static const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/
-
-typedef struct Hash {
-  int* head; /*hash value to head circular pos - can be outdated if went around window*/
-  /*circular pos to prev circular pos*/
-  unsigned short* chain;
-  int* val; /*circular pos to hash value*/
-
-  /*TODO: do this not only for zeros but for any repeated byte. However for PNG
-  it's always going to be the zeros that dominate, so not important for PNG*/
-  int* headz; /*similar to head, but for chainz*/
-  unsigned short* chainz; /*those with same amount of zeros*/
-  unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/
-} Hash;
-
-static unsigned hash_init(Hash* hash, unsigned windowsize) {
-  unsigned i;
-  hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES);
-  hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize);
-  hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
-
-  hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
-  hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1));
-  hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
-
-  if(!hash->head || !hash->chain || !hash->val  || !hash->headz|| !hash->chainz || !hash->zeros) {
-    return 83; /*alloc fail*/
-  }
-
-  /*initialize hash table*/
-  for(i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1;
-  for(i = 0; i != windowsize; ++i) hash->val[i] = -1;
-  for(i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/
-
-  for(i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1;
-  for(i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/
-
-  return 0;
-}
-
-static void hash_cleanup(Hash* hash) {
-  lodepng_free(hash->head);
-  lodepng_free(hash->val);
-  lodepng_free(hash->chain);
-
-  lodepng_free(hash->zeros);
-  lodepng_free(hash->headz);
-  lodepng_free(hash->chainz);
-}
-
-
-
-static unsigned getHash(const unsigned char* data, size_t size, size_t pos) {
-  unsigned result = 0;
-  if(pos + 2 < size) {
-    /*A simple shift and xor hash is used. Since the data of PNGs is dominated
-    by zeroes due to the filters, a better hash does not have a significant
-    effect on speed in traversing the chain, and causes more time spend on
-    calculating the hash.*/
-    result ^= (unsigned)(data[pos + 0] << 0u);
-    result ^= (unsigned)(data[pos + 1] << 4u);
-    result ^= (unsigned)(data[pos + 2] << 8u);
-  } else {
-    size_t amount, i;
-    if(pos >= size) return 0;
-    amount = size - pos;
-    for(i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u));
-  }
-  return result & HASH_BIT_MASK;
-}
-
-static unsigned countZeros(const unsigned char* data, size_t size, size_t pos) {
-  const unsigned char* start = data + pos;
-  const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH;
-  if(end > data + size) end = data + size;
-  data = start;
-  while(data != end && *data == 0) ++data;
-  /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/
-  return (unsigned)(data - start);
-}
-
-/*wpos = pos & (windowsize - 1)*/
-static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval, unsigned short numzeros) {
-  hash->val[wpos] = (int)hashval;
-  if(hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval];
-  hash->head[hashval] = (int)wpos;
-
-  hash->zeros[wpos] = numzeros;
-  if(hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros];
-  hash->headz[numzeros] = (int)wpos;
-}
-
-/*
-LZ77-encode the data. Return value is error code. The input are raw bytes, the output
-is in the form of unsigned integers with codes representing for example literal bytes, or
-length/distance pairs.
-It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a
-sliding window (of windowsize) is used, and all past bytes in that window can be used as
-the "dictionary". A brute force search through all possible distances would be slow, and
-this hash technique is one out of several ways to speed this up.
-*/
-static unsigned encodeLZ77(uivector* out, Hash* hash,
-                           const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize,
-                           unsigned minmatch, unsigned nicematch, unsigned lazymatching) {
-  size_t pos;
-  unsigned i, error = 0;
-  /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/
-  unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8;
-  unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64;
-
-  unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/
-  unsigned numzeros = 0;
-
-  unsigned offset; /*the offset represents the distance in LZ77 terminology*/
-  unsigned length;
-  unsigned lazy = 0;
-  unsigned lazylength = 0, lazyoffset = 0;
-  unsigned hashval;
-  unsigned current_offset, current_length;
-  unsigned prev_offset;
-  const unsigned char *lastptr, *foreptr, *backptr;
-  unsigned hashpos;
-
-  if(windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/
-  if((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/
-
-  if(nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH;
-
-  for(pos = inpos; pos < insize; ++pos) {
-    size_t wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/
-    unsigned chainlength = 0;
-
-    hashval = getHash(in, insize, pos);
-
-    if(usezeros && hashval == 0) {
-      if(numzeros == 0) numzeros = countZeros(in, insize, pos);
-      else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;
-    } else {
-      numzeros = 0;
-    }
-
-    updateHashChain(hash, wpos, hashval, numzeros);
-
-    /*the length and offset found for the current position*/
-    length = 0;
-    offset = 0;
-
-    hashpos = hash->chain[wpos];
-
-    lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH];
-
-    /*search for the longest string*/
-    prev_offset = 0;
-    for(;;) {
-      if(chainlength++ >= maxchainlength) break;
-      current_offset = (unsigned)(hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize);
-
-      if(current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/
-      prev_offset = current_offset;
-      if(current_offset > 0) {
-        /*test the next characters*/
-        foreptr = &in[pos];
-        backptr = &in[pos - current_offset];
-
-        /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/
-        if(numzeros >= 3) {
-          unsigned skip = hash->zeros[hashpos];
-          if(skip > numzeros) skip = numzeros;
-          backptr += skip;
-          foreptr += skip;
-        }
-
-        while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/ {
-          ++backptr;
-          ++foreptr;
-        }
-        current_length = (unsigned)(foreptr - &in[pos]);
-
-        if(current_length > length) {
-          length = current_length; /*the longest length*/
-          offset = current_offset; /*the offset that is related to this longest length*/
-          /*jump out once a length of max length is found (speed gain). This also jumps
-          out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/
-          if(current_length >= nicematch) break;
-        }
-      }
-
-      if(hashpos == hash->chain[hashpos]) break;
-
-      if(numzeros >= 3 && length > numzeros) {
-        hashpos = hash->chainz[hashpos];
-        if(hash->zeros[hashpos] != numzeros) break;
-      } else {
-        hashpos = hash->chain[hashpos];
-        /*outdated hash value, happens if particular value was not encountered in whole last window*/
-        if(hash->val[hashpos] != (int)hashval) break;
-      }
-    }
-
-    if(lazymatching) {
-      if(!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH) {
-        lazy = 1;
-        lazylength = length;
-        lazyoffset = offset;
-        continue; /*try the next byte*/
-      }
-      if(lazy) {
-        lazy = 0;
-        if(pos == 0) ERROR_BREAK(81);
-        if(length > lazylength + 1) {
-          /*push the previous character as literal*/
-          if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/);
-        } else {
-          length = lazylength;
-          offset = lazyoffset;
-          hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/
-          hash->headz[numzeros] = -1; /*idem*/
-          --pos;
-        }
-      }
-    }
-    if(length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/);
-
-    /*encode it as length/distance pair or literal value*/
-    if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/ {
-      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);
-    } else if(length < minmatch || (length == 3 && offset > 4096)) {
-      /*compensate for the fact that longer offsets have more extra bits, a
-      length of only 3 may be not worth it then*/
-      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);
-    } else {
-      addLengthDistance(out, length, offset);
-      for(i = 1; i < length; ++i) {
-        ++pos;
-        wpos = pos & (windowsize - 1);
-        hashval = getHash(in, insize, pos);
-        if(usezeros && hashval == 0) {
-          if(numzeros == 0) numzeros = countZeros(in, insize, pos);
-          else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;
-        } else {
-          numzeros = 0;
-        }
-        updateHashChain(hash, wpos, hashval, numzeros);
-      }
-    }
-  } /*end of the loop through each character of input*/
-
-  return error;
-}
-
-/* /////////////////////////////////////////////////////////////////////////// */
-
-static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize) {
-  /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte,
-  2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/
-
-  size_t i, j, numdeflateblocks = (datasize + 65534) / 65535;
-  unsigned datapos = 0;
-  for(i = 0; i != numdeflateblocks; ++i) {
-    unsigned BFINAL, BTYPE, LEN, NLEN;
-    unsigned char firstbyte;
-
-    BFINAL = (i == numdeflateblocks - 1);
-    BTYPE = 0;
-
-    firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1));
-    ucvector_push_back(out, firstbyte);
-
-    LEN = 65535;
-    if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos;
-    NLEN = 65535 - LEN;
-
-    ucvector_push_back(out, (unsigned char)(LEN & 255));
-    ucvector_push_back(out, (unsigned char)(LEN >> 8));
-    ucvector_push_back(out, (unsigned char)(NLEN & 255));
-    ucvector_push_back(out, (unsigned char)(NLEN >> 8));
-
-    /*Decompressed data*/
-    for(j = 0; j < 65535 && datapos < datasize; ++j) {
-      ucvector_push_back(out, data[datapos++]);
-    }
-  }
-
-  return 0;
-}
-
-/*
-write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees.
-tree_ll: the tree for lit and len codes.
-tree_d: the tree for distance codes.
-*/
-static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded,
-                          const HuffmanTree* tree_ll, const HuffmanTree* tree_d) {
-  size_t i = 0;
-  for(i = 0; i != lz77_encoded->size; ++i) {
-    unsigned val = lz77_encoded->data[i];
-    addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val));
-    if(val > 256) /*for a length code, 3 more things have to be added*/ {
-      unsigned length_index = val - FIRST_LENGTH_CODE_INDEX;
-      unsigned n_length_extra_bits = LENGTHEXTRA[length_index];
-      unsigned length_extra_bits = lz77_encoded->data[++i];
-
-      unsigned distance_code = lz77_encoded->data[++i];
-
-      unsigned distance_index = distance_code;
-      unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index];
-      unsigned distance_extra_bits = lz77_encoded->data[++i];
-
-      addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits);
-      addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code),
-                       HuffmanTree_getLength(tree_d, distance_code));
-      addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits);
-    }
-  }
-}
-
-/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/
-static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
-                               const unsigned char* data, size_t datapos, size_t dataend,
-                               const LodePNGCompressSettings* settings, unsigned final) {
-  unsigned error = 0;
-
-  /*
-  A block is compressed as follows: The PNG data is lz77 encoded, resulting in
-  literal bytes and length/distance pairs. This is then huffman compressed with
-  two huffman trees. One huffman tree is used for the lit and len values ("ll"),
-  another huffman tree is used for the dist values ("d"). These two trees are
-  stored using their code lengths, and to compress even more these code lengths
-  are also run-length encoded and huffman compressed. This gives a huffman tree
-  of code lengths "cl". The code lenghts used to describe this third tree are
-  the code length code lengths ("clcl").
-  */
-
-  /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/
-  uivector lz77_encoded;
-  HuffmanTree tree_ll; /*tree for lit,len values*/
-  HuffmanTree tree_d; /*tree for distance codes*/
-  HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/
-  uivector frequencies_ll; /*frequency of lit,len codes*/
-  uivector frequencies_d; /*frequency of dist codes*/
-  uivector frequencies_cl; /*frequency of code length codes*/
-  uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/
-  uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/
-  /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl
-  (these are written as is in the file, it would be crazy to compress these using yet another huffman
-  tree that needs to be represented by yet another set of code lengths)*/
-  uivector bitlen_cl;
-  size_t datasize = dataend - datapos;
-
-  /*
-  Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies:
-  bitlen_lld is to tree_cl what data is to tree_ll and tree_d.
-  bitlen_lld_e is to bitlen_lld what lz77_encoded is to data.
-  bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded.
-  */
-
-  unsigned BFINAL = final;
-  size_t numcodes_ll, numcodes_d, i;
-  unsigned HLIT, HDIST, HCLEN;
-
-  uivector_init(&lz77_encoded);
-  HuffmanTree_init(&tree_ll);
-  HuffmanTree_init(&tree_d);
-  HuffmanTree_init(&tree_cl);
-  uivector_init(&frequencies_ll);
-  uivector_init(&frequencies_d);
-  uivector_init(&frequencies_cl);
-  uivector_init(&bitlen_lld);
-  uivector_init(&bitlen_lld_e);
-  uivector_init(&bitlen_cl);
-
-  /*This while loop never loops due to a break at the end, it is here to
-  allow breaking out of it to the cleanup phase on error conditions.*/
-  while(!error) {
-    if(settings->use_lz77) {
-      error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,
-                         settings->minmatch, settings->nicematch, settings->lazymatching);
-      if(error) break;
-    } else {
-      if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/);
-      for(i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/
-    }
-
-    if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/);
-    if(!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/);
-
-    /*Count the frequencies of lit, len and dist codes*/
-    for(i = 0; i != lz77_encoded.size; ++i) {
-      unsigned symbol = lz77_encoded.data[i];
-      ++frequencies_ll.data[symbol];
-      if(symbol > 256) {
-        unsigned dist = lz77_encoded.data[i + 2];
-        ++frequencies_d.data[dist];
-        i += 3;
-      }
-    }
-    frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/
-
-    /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/
-    error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15);
-    if(error) break;
-    /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/
-    error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15);
-    if(error) break;
-
-    numcodes_ll = tree_ll.numcodes; if(numcodes_ll > 286) numcodes_ll = 286;
-    numcodes_d = tree_d.numcodes; if(numcodes_d > 30) numcodes_d = 30;
-    /*store the code lengths of both generated trees in bitlen_lld*/
-    for(i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i));
-    for(i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i));
-
-    /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times),
-    17 (3-10 zeroes), 18 (11-138 zeroes)*/
-    for(i = 0; i != (unsigned)bitlen_lld.size; ++i) {
-      unsigned j = 0; /*amount of repititions*/
-      while(i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j;
-
-      if(bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/ {
-        ++j; /*include the first zero*/
-        if(j <= 10) /*repeat code 17 supports max 10 zeroes*/ {
-          uivector_push_back(&bitlen_lld_e, 17);
-          uivector_push_back(&bitlen_lld_e, j - 3);
-        } else /*repeat code 18 supports max 138 zeroes*/ {
-          if(j > 138) j = 138;
-          uivector_push_back(&bitlen_lld_e, 18);
-          uivector_push_back(&bitlen_lld_e, j - 11);
-        }
-        i += (j - 1);
-      } else if(j >= 3) /*repeat code for value other than zero*/ {
-        size_t k;
-        unsigned num = j / 6, rest = j % 6;
-        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);
-        for(k = 0; k < num; ++k) {
-          uivector_push_back(&bitlen_lld_e, 16);
-          uivector_push_back(&bitlen_lld_e, 6 - 3);
-        }
-        if(rest >= 3) {
-          uivector_push_back(&bitlen_lld_e, 16);
-          uivector_push_back(&bitlen_lld_e, rest - 3);
-        }
-        else j -= rest;
-        i += j;
-      } else /*too short to benefit from repeat code*/ {
-        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);
-      }
-    }
-
-    /*generate tree_cl, the huffmantree of huffmantrees*/
-
-    if(!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/);
-    for(i = 0; i != bitlen_lld_e.size; ++i) {
-      ++frequencies_cl.data[bitlen_lld_e.data[i]];
-      /*after a repeat code come the bits that specify the number of repetitions,
-      those don't need to be in the frequencies_cl calculation*/
-      if(bitlen_lld_e.data[i] >= 16) ++i;
-    }
-
-    error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data,
-                                            frequencies_cl.size, frequencies_cl.size, 7);
-    if(error) break;
-
-    if(!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/);
-    for(i = 0; i != tree_cl.numcodes; ++i) {
-      /*lenghts of code length tree is in the order as specified by deflate*/
-      bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]);
-    }
-    while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4) {
-      /*remove zeros at the end, but minimum size must be 4*/
-      if(!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/);
-    }
-    if(error) break;
-
-    /*
-    Write everything into the output
-
-    After the BFINAL and BTYPE, the dynamic block consists out of the following:
-    - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN
-    - (HCLEN+4)*3 bits code lengths of code length alphabet
-    - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length
-      alphabet, + possible repetition codes 16, 17, 18)
-    - HDIST + 1 code lengths of distance alphabet (encoded using the code length
-      alphabet, + possible repetition codes 16, 17, 18)
-    - compressed data
-    - 256 (end code)
-    */
-
-    /*Write block type*/
-    addBitToStream(bp, out, BFINAL);
-    addBitToStream(bp, out, 0); /*first bit of BTYPE "dynamic"*/
-    addBitToStream(bp, out, 1); /*second bit of BTYPE "dynamic"*/
-
-    /*write the HLIT, HDIST and HCLEN values*/
-    HLIT = (unsigned)(numcodes_ll - 257);
-    HDIST = (unsigned)(numcodes_d - 1);
-    HCLEN = (unsigned)bitlen_cl.size - 4;
-    /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/
-    while(!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN;
-    addBitsToStream(bp, out, HLIT, 5);
-    addBitsToStream(bp, out, HDIST, 5);
-    addBitsToStream(bp, out, HCLEN, 4);
-
-    /*write the code lenghts of the code length alphabet*/
-    for(i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3);
-
-    /*write the lenghts of the lit/len AND the dist alphabet*/
-    for(i = 0; i != bitlen_lld_e.size; ++i) {
-      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]),
-                       HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i]));
-      /*extra bits of repeat codes*/
-      if(bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2);
-      else if(bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3);
-      else if(bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7);
-    }
-
-    /*write the compressed data symbols*/
-    writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);
-    /*error: the length of the end code 256 must be larger than 0*/
-    if(HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64);
-
-    /*write the end code*/
-    addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));
-
-    break; /*end of error-while*/
-  }
-
-  /*cleanup*/
-  uivector_cleanup(&lz77_encoded);
-  HuffmanTree_cleanup(&tree_ll);
-  HuffmanTree_cleanup(&tree_d);
-  HuffmanTree_cleanup(&tree_cl);
-  uivector_cleanup(&frequencies_ll);
-  uivector_cleanup(&frequencies_d);
-  uivector_cleanup(&frequencies_cl);
-  uivector_cleanup(&bitlen_lld_e);
-  uivector_cleanup(&bitlen_lld);
-  uivector_cleanup(&bitlen_cl);
-
-  return error;
-}
-
-static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash,
-                             const unsigned char* data,
-                             size_t datapos, size_t dataend,
-                             const LodePNGCompressSettings* settings, unsigned final) {
-  HuffmanTree tree_ll; /*tree for literal values and length codes*/
-  HuffmanTree tree_d; /*tree for distance codes*/
-
-  unsigned BFINAL = final;
-  unsigned error = 0;
-  size_t i;
-
-  HuffmanTree_init(&tree_ll);
-  HuffmanTree_init(&tree_d);
-
-  generateFixedLitLenTree(&tree_ll);
-  generateFixedDistanceTree(&tree_d);
-
-  addBitToStream(bp, out, BFINAL);
-  addBitToStream(bp, out, 1); /*first bit of BTYPE*/
-  addBitToStream(bp, out, 0); /*second bit of BTYPE*/
-
-  if(settings->use_lz77) /*LZ77 encoded*/ {
-    uivector lz77_encoded;
-    uivector_init(&lz77_encoded);
-    error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,
-                       settings->minmatch, settings->nicematch, settings->lazymatching);
-    if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);
-    uivector_cleanup(&lz77_encoded);
-  } else /*no LZ77, but still will be Huffman compressed*/ {
-    for(i = datapos; i < dataend; ++i) {
-      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i]));
-    }
-  }
-  /*add END code*/
-  if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));
-
-  /*cleanup*/
-  HuffmanTree_cleanup(&tree_ll);
-  HuffmanTree_cleanup(&tree_d);
-
-  return error;
-}
-
-static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize,
-                                 const LodePNGCompressSettings* settings) {
-  unsigned error = 0;
-  size_t i, blocksize, numdeflateblocks;
-  size_t bp = 0; /*the bit pointer*/
-  Hash hash;
-
-  if(settings->btype > 2) return 61;
-  else if(settings->btype == 0) return deflateNoCompression(out, in, insize);
-  else if(settings->btype == 1) blocksize = insize;
-  else /*if(settings->btype == 2)*/ {
-    /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/
-    blocksize = insize / 8 + 8;
-    if(blocksize < 65536) blocksize = 65536;
-    if(blocksize > 262144) blocksize = 262144;
-  }
-
-  numdeflateblocks = (insize + blocksize - 1) / blocksize;
-  if(numdeflateblocks == 0) numdeflateblocks = 1;
-
-  error = hash_init(&hash, settings->windowsize);
-  if(error) return error;
-
-  for(i = 0; i != numdeflateblocks && !error; ++i) {
-    unsigned final = (i == numdeflateblocks - 1);
-    size_t start = i * blocksize;
-    size_t end = start + blocksize;
-    if(end > insize) end = insize;
-
-    if(settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final);
-    else if(settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final);
-  }
-
-  hash_cleanup(&hash);
-
-  return error;
-}
-
-unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
-                         const unsigned char* in, size_t insize,
-                         const LodePNGCompressSettings* settings) {
-  unsigned error;
-  ucvector v;
-  ucvector_init_buffer(&v, *out, *outsize);
-  error = lodepng_deflatev(&v, in, insize, settings);
-  *out = v.data;
-  *outsize = v.size;
-  return error;
-}
-
-static unsigned deflate(unsigned char** out, size_t* outsize,
-                        const unsigned char* in, size_t insize,
-                        const LodePNGCompressSettings* settings) {
-  if(settings->custom_deflate) {
-    return settings->custom_deflate(out, outsize, in, insize, settings);
-  } else {
-    return lodepng_deflate(out, outsize, in, insize, settings);
-  }
-}
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Adler32                                                                  */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len) {
-  unsigned s1 = adler & 0xffff;
-  unsigned s2 = (adler >> 16) & 0xffff;
-
-  while(len > 0) {
-    /*at least 5552 sums can be done before the sums overflow, saving a lot of module divisions*/
-    unsigned amount = len > 5552 ? 5552 : len;
-    len -= amount;
-    while(amount > 0) {
-      s1 += (*data++);
-      s2 += s1;
-      --amount;
-    }
-    s1 %= 65521;
-    s2 %= 65521;
-  }
-
-  return (s2 << 16) | s1;
-}
-
-/*Return the adler32 of the bytes data[0..len-1]*/
-static unsigned adler32(const unsigned char* data, unsigned len) {
-  return update_adler32(1L, data, len);
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Zlib                                                                   / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
-                                 size_t insize, const LodePNGDecompressSettings* settings) {
-  unsigned error = 0;
-  unsigned CM, CINFO, FDICT;
-
-  if(insize < 2) return 53; /*error, size of zlib data too small*/
-  /*read information from zlib header*/
-  if((in[0] * 256 + in[1]) % 31 != 0) {
-    /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/
-    return 24;
-  }
-
-  CM = in[0] & 15;
-  CINFO = (in[0] >> 4) & 15;
-  /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/
-  FDICT = (in[1] >> 5) & 1;
-  /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/
-
-  if(CM != 8 || CINFO > 7) {
-    /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/
-    return 25;
-  }
-  if(FDICT != 0) {
-    /*error: the specification of PNG says about the zlib stream:
-      "The additional flags shall not specify a preset dictionary."*/
-    return 26;
-  }
-
-  error = inflate(out, outsize, in + 2, insize - 2, settings);
-  if(error) return error;
-
-  if(!settings->ignore_adler32) {
-    unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]);
-    unsigned checksum = adler32(*out, (unsigned)(*outsize));
-    if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/
-  }
-
-  return 0; /*no error*/
-}
-
-static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
-                                size_t insize, const LodePNGDecompressSettings* settings) {
-  if(settings->custom_zlib) {
-    return settings->custom_zlib(out, outsize, in, insize, settings);
-  } else {
-    return lodepng_zlib_decompress(out, outsize, in, insize, settings);
-  }
-}
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
-                               size_t insize, const LodePNGCompressSettings* settings) {
-  /*initially, *out must be NULL and outsize 0, if you just give some random *out
-  that's pointing to a non allocated buffer, this'll crash*/
-  ucvector outv;
-  size_t i;
-  unsigned error;
-  unsigned char* deflatedata = 0;
-  size_t deflatesize = 0;
-
-  /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/
-  unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/
-  unsigned FLEVEL = 0;
-  unsigned FDICT = 0;
-  unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64;
-  unsigned FCHECK = 31 - CMFFLG % 31;
-  CMFFLG += FCHECK;
-
-  /*ucvector-controlled version of the output buffer, for dynamic array*/
-  ucvector_init_buffer(&outv, *out, *outsize);
-
-  ucvector_push_back(&outv, (unsigned char)(CMFFLG >> 8));
-  ucvector_push_back(&outv, (unsigned char)(CMFFLG & 255));
-
-  error = deflate(&deflatedata, &deflatesize, in, insize, settings);
-
-  if(!error) {
-    unsigned ADLER32 = adler32(in, (unsigned)insize);
-    for(i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]);
-    lodepng_free(deflatedata);
-    lodepng_add32bitInt(&outv, ADLER32);
-  }
-
-  *out = outv.data;
-  *outsize = outv.size;
-
-  return error;
-}
-
-/* compress using the default or custom zlib function */
-static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
-                              size_t insize, const LodePNGCompressSettings* settings) {
-  if(settings->custom_zlib) {
-    return settings->custom_zlib(out, outsize, in, insize, settings);
-  } else {
-    return lodepng_zlib_compress(out, outsize, in, insize, settings);
-  }
-}
-
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#else /*no LODEPNG_COMPILE_ZLIB*/
-
-#ifdef LODEPNG_COMPILE_DECODER
-static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
-                                size_t insize, const LodePNGDecompressSettings* settings) {
-  if(!settings->custom_zlib) return 87; /*no custom zlib function provided */
-  return settings->custom_zlib(out, outsize, in, insize, settings);
-}
-#endif /*LODEPNG_COMPILE_DECODER*/
-#ifdef LODEPNG_COMPILE_ENCODER
-static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
-                              size_t insize, const LodePNGCompressSettings* settings) {
-  if(!settings->custom_zlib) return 87; /*no custom zlib function provided */
-  return settings->custom_zlib(out, outsize, in, insize, settings);
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#endif /*LODEPNG_COMPILE_ZLIB*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-/*this is a good tradeoff between speed and compression ratio*/
-#define DEFAULT_WINDOWSIZE 2048
-
-void lodepng_compress_settings_init(LodePNGCompressSettings* settings) {
-  /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/
-  settings->btype = 2;
-  settings->use_lz77 = 1;
-  settings->windowsize = DEFAULT_WINDOWSIZE;
-  settings->minmatch = 3;
-  settings->nicematch = 128;
-  settings->lazymatching = 1;
-
-  settings->custom_zlib = 0;
-  settings->custom_deflate = 0;
-  settings->custom_context = 0;
-}
-
-const LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0};
-
-
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings) {
-  settings->ignore_adler32 = 0;
-
-  settings->custom_zlib = 0;
-  settings->custom_inflate = 0;
-  settings->custom_context = 0;
-}
-
-const LodePNGDecompressSettings lodepng_default_decompress_settings = {0, 0, 0, 0};
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* // End of Zlib related code. Begin of PNG related code.                 // */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_PNG
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / CRC32                                                                  / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-
-#ifndef LODEPNG_NO_COMPILE_CRC
-/* CRC polynomial: 0xedb88320 */
-static unsigned lodepng_crc32_table[256] = {
-           0u, 1996959894u, 3993919788u, 2567524794u,  124634137u, 1886057615u, 3915621685u, 2657392035u,
-   249268274u, 2044508324u, 3772115230u, 2547177864u,  162941995u, 2125561021u, 3887607047u, 2428444049u,
-   498536548u, 1789927666u, 4089016648u, 2227061214u,  450548861u, 1843258603u, 4107580753u, 2211677639u,
-   325883990u, 1684777152u, 4251122042u, 2321926636u,  335633487u, 1661365465u, 4195302755u, 2366115317u,
-   997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u,
-   901097722u, 1119000684u, 3686517206u, 2898065728u,  853044451u, 1172266101u, 3705015759u, 2882616665u,
-   651767980u, 1373503546u, 3369554304u, 3218104598u,  565507253u, 1454621731u, 3485111705u, 3099436303u,
-   671266974u, 1594198024u, 3322730930u, 2970347812u,  795835527u, 1483230225u, 3244367275u, 3060149565u,
-  1994146192u,   31158534u, 2563907772u, 4023717930u, 1907459465u,  112637215u, 2680153253u, 3904427059u,
-  2013776290u,  251722036u, 2517215374u, 3775830040u, 2137656763u,  141376813u, 2439277719u, 3865271297u,
-  1802195444u,  476864866u, 2238001368u, 4066508878u, 1812370925u,  453092731u, 2181625025u, 4111451223u,
-  1706088902u,  314042704u, 2344532202u, 4240017532u, 1658658271u,  366619977u, 2362670323u, 4224994405u,
-  1303535960u,  984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u,
-  1131014506u,  879679996u, 2909243462u, 3663771856u, 1141124467u,  855842277u, 2852801631u, 3708648649u,
-  1342533948u,  654459306u, 3188396048u, 3373015174u, 1466479909u,  544179635u, 3110523913u, 3462522015u,
-  1591671054u,  702138776u, 2966460450u, 3352799412u, 1504918807u,  783551873u, 3082640443u, 3233442989u,
-  3988292384u, 2596254646u,   62317068u, 1957810842u, 3939845945u, 2647816111u,   81470997u, 1943803523u,
-  3814918930u, 2489596804u,  225274430u, 2053790376u, 3826175755u, 2466906013u,  167816743u, 2097651377u,
-  4027552580u, 2265490386u,  503444072u, 1762050814u, 4150417245u, 2154129355u,  426522225u, 1852507879u,
-  4275313526u, 2312317920u,  282753626u, 1742555852u, 4189708143u, 2394877945u,  397917763u, 1622183637u,
-  3604390888u, 2714866558u,  953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u,
-  3624741850u, 2936675148u,  906185462u, 1090812512u, 3747672003u, 2825379669u,  829329135u, 1181335161u,
-  3412177804u, 3160834842u,  628085408u, 1382605366u, 3423369109u, 3138078467u,  570562233u, 1426400815u,
-  3317316542u, 2998733608u,  733239954u, 1555261956u, 3268935591u, 3050360625u,  752459403u, 1541320221u,
-  2607071920u, 3965973030u, 1969922972u,   40735498u, 2617837225u, 3943577151u, 1913087877u,   83908371u,
-  2512341634u, 3803740692u, 2075208622u,  213261112u, 2463272603u, 3855990285u, 2094854071u,  198958881u,
-  2262029012u, 4057260610u, 1759359992u,  534414190u, 2176718541u, 4139329115u, 1873836001u,  414664567u,
-  2282248934u, 4279200368u, 1711684554u,  285281116u, 2405801727u, 4167216745u, 1634467795u,  376229701u,
-  2685067896u, 3608007406u, 1308918612u,  956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u,
-  2932959818u, 3654703836u, 1088359270u,  936918000u, 2847714899u, 3736837829u, 1202900863u,  817233897u,
-  3183342108u, 3401237130u, 1404277552u,  615818150u, 3134207493u, 3453421203u, 1423857449u,  601450431u,
-  3009837614u, 3294710456u, 1567103746u,  711928724u, 3020668471u, 3272380065u, 1510334235u,  755167117u
-};
-
-/*Return the CRC of the bytes buf[0..len-1].*/
-unsigned lodepng_crc32(const unsigned char* data, size_t length) {
-  unsigned r = 0xffffffffu;
-  size_t i;
-  for(i = 0; i < length; ++i) {
-    r = lodepng_crc32_table[(r ^ data[i]) & 0xff] ^ (r >> 8);
-  }
-  return r ^ 0xffffffffu;
-}
-#else /* !LODEPNG_NO_COMPILE_CRC */
-unsigned lodepng_crc32(const unsigned char* data, size_t length);
-#endif /* !LODEPNG_NO_COMPILE_CRC */
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Reading and writing single bits and bytes from/to stream for LodePNG   / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream) {
-  unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1);
-  ++(*bitpointer);
-  return result;
-}
-
-static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) {
-  unsigned result = 0;
-  size_t i;
-  for(i = 0 ; i < nbits; ++i) {
-    result <<= 1;
-    result |= (unsigned)readBitFromReversedStream(bitpointer, bitstream);
-  }
-  return result;
-}
-
-#ifdef LODEPNG_COMPILE_DECODER
-static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) {
-  /*the current bit in bitstream must be 0 for this to work*/
-  if(bit) {
-    /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/
-    bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7)));
-  }
-  ++(*bitpointer);
-}
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) {
-  /*the current bit in bitstream may be 0 or 1 for this to work*/
-  if(bit == 0) bitstream[(*bitpointer) >> 3] &=  (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7))));
-  else         bitstream[(*bitpointer) >> 3] |=  (1 << (7 - ((*bitpointer) & 0x7)));
-  ++(*bitpointer);
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / PNG chunks                                                             / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-unsigned lodepng_chunk_length(const unsigned char* chunk) {
-  return lodepng_read32bitInt(&chunk[0]);
-}
-
-void lodepng_chunk_type(char type[5], const unsigned char* chunk) {
-  unsigned i;
-  for(i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i];
-  type[4] = 0; /*null termination char*/
-}
-
-unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type) {
-  if(strlen(type) != 4) return 0;
-  return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]);
-}
-
-unsigned char lodepng_chunk_ancillary(const unsigned char* chunk) {
-  return((chunk[4] & 32) != 0);
-}
-
-unsigned char lodepng_chunk_private(const unsigned char* chunk) {
-  return((chunk[6] & 32) != 0);
-}
-
-unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk) {
-  return((chunk[7] & 32) != 0);
-}
-
-unsigned char* lodepng_chunk_data(unsigned char* chunk) {
-  return &chunk[8];
-}
-
-const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk) {
-  return &chunk[8];
-}
-
-unsigned lodepng_chunk_check_crc(const unsigned char* chunk) {
-  unsigned length = lodepng_chunk_length(chunk);
-  unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]);
-  /*the CRC is taken of the data and the 4 chunk type letters, not the length*/
-  unsigned checksum = lodepng_crc32(&chunk[4], length + 4);
-  if(CRC != checksum) return 1;
-  else return 0;
-}
-
-void lodepng_chunk_generate_crc(unsigned char* chunk) {
-  unsigned length = lodepng_chunk_length(chunk);
-  unsigned CRC = lodepng_crc32(&chunk[4], length + 4);
-  lodepng_set32bitInt(chunk + 8 + length, CRC);
-}
-
-unsigned char* lodepng_chunk_next(unsigned char* chunk) {
-  if(chunk[0] == 0x89 && chunk[1] == 0x50 && chunk[2] == 0x4e && chunk[3] == 0x47
-    && chunk[4] == 0x0d && chunk[5] == 0x0a && chunk[6] == 0x1a && chunk[7] == 0x0a) {
-    /* Is PNG magic header at start of PNG file. Jump to first actual chunk. */
-    return chunk + 8;
-  } else {
-    unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
-    return chunk + total_chunk_length;
-  }
-}
-
-const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk) {
-  if(chunk[0] == 0x89 && chunk[1] == 0x50 && chunk[2] == 0x4e && chunk[3] == 0x47
-    && chunk[4] == 0x0d && chunk[5] == 0x0a && chunk[6] == 0x1a && chunk[7] == 0x0a) {
-    /* Is PNG magic header at start of PNG file. Jump to first actual chunk. */
-    return chunk + 8;
-  } else {
-    unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
-    return chunk + total_chunk_length;
-  }
-}
-
-unsigned char* lodepng_chunk_find(unsigned char* chunk, const unsigned char* end, const char type[5]) {
-  for(;;) {
-    if(chunk + 12 >= end) return 0;
-    if(lodepng_chunk_type_equals(chunk, type)) return chunk;
-    chunk = lodepng_chunk_next(chunk);
-  }
-}
-
-const unsigned char* lodepng_chunk_find_const(const unsigned char* chunk, const unsigned char* end, const char type[5]) {
-  for(;;) {
-    if(chunk + 12 >= end) return 0;
-    if(lodepng_chunk_type_equals(chunk, type)) return chunk;
-    chunk = lodepng_chunk_next_const(chunk);
-  }
-}
-
-unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk) {
-  unsigned i;
-  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
-  unsigned char *chunk_start, *new_buffer;
-  size_t new_length = (*outlength) + total_chunk_length;
-  if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/
-
-  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);
-  if(!new_buffer) return 83; /*alloc fail*/
-  (*out) = new_buffer;
-  (*outlength) = new_length;
-  chunk_start = &(*out)[new_length - total_chunk_length];
-
-  for(i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i];
-
-  return 0;
-}
-
-unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
-                              const char* type, const unsigned char* data) {
-  unsigned i;
-  unsigned char *chunk, *new_buffer;
-  size_t new_length = (*outlength) + length + 12;
-  if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/
-  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);
-  if(!new_buffer) return 83; /*alloc fail*/
-  (*out) = new_buffer;
-  (*outlength) = new_length;
-  chunk = &(*out)[(*outlength) - length - 12];
-
-  /*1: length*/
-  lodepng_set32bitInt(chunk, (unsigned)length);
-
-  /*2: chunk name (4 letters)*/
-  chunk[4] = (unsigned char)type[0];
-  chunk[5] = (unsigned char)type[1];
-  chunk[6] = (unsigned char)type[2];
-  chunk[7] = (unsigned char)type[3];
-
-  /*3: the data*/
-  for(i = 0; i != length; ++i) chunk[8 + i] = data[i];
-
-  /*4: CRC (of the chunkname characters and the data)*/
-  lodepng_chunk_generate_crc(chunk);
-
-  return 0;
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Color types and such                                                   / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*return type is a LodePNG error code*/
-static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/ {
-  switch(colortype) {
-    case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*gray*/
-    case 2: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGB*/
-    case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8            )) return 37; break; /*palette*/
-    case 4: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*gray + alpha*/
-    case 6: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGBA*/
-    default: return 31;
-  }
-  return 0; /*allowed color type / bits combination*/
-}
-
-static unsigned getNumColorChannels(LodePNGColorType colortype) {
-  switch(colortype) {
-    case 0: return 1; /*gray*/
-    case 2: return 3; /*RGB*/
-    case 3: return 1; /*palette*/
-    case 4: return 2; /*gray + alpha*/
-    case 6: return 4; /*RGBA*/
-  }
-  return 0; /*unexisting color type*/
-}
-
-static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth) {
-  /*bits per pixel is amount of channels * bits per channel*/
-  return getNumColorChannels(colortype) * bitdepth;
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-void lodepng_color_mode_init(LodePNGColorMode* info) {
-  info->key_defined = 0;
-  info->key_r = info->key_g = info->key_b = 0;
-  info->colortype = LCT_RGBA;
-  info->bitdepth = 8;
-  info->palette = 0;
-  info->palettesize = 0;
-}
-
-void lodepng_color_mode_cleanup(LodePNGColorMode* info) {
-  lodepng_palette_clear(info);
-}
-
-unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source) {
-  size_t i;
-  lodepng_color_mode_cleanup(dest);
-  *dest = *source;
-  if(source->palette) {
-    dest->palette = (unsigned char*)lodepng_malloc(1024);
-    if(!dest->palette && source->palettesize) return 83; /*alloc fail*/
-    for(i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i];
-  }
-  return 0;
-}
-
-LodePNGColorMode lodepng_color_mode_make(LodePNGColorType colortype, unsigned bitdepth) {
-  LodePNGColorMode result;
-  lodepng_color_mode_init(&result);
-  result.colortype = colortype;
-  result.bitdepth = bitdepth;
-  return result;
-}
-
-static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b) {
-  size_t i;
-  if(a->colortype != b->colortype) return 0;
-  if(a->bitdepth != b->bitdepth) return 0;
-  if(a->key_defined != b->key_defined) return 0;
-  if(a->key_defined) {
-    if(a->key_r != b->key_r) return 0;
-    if(a->key_g != b->key_g) return 0;
-    if(a->key_b != b->key_b) return 0;
-  }
-  if(a->palettesize != b->palettesize) return 0;
-  for(i = 0; i != a->palettesize * 4; ++i) {
-    if(a->palette[i] != b->palette[i]) return 0;
-  }
-  return 1;
-}
-
-void lodepng_palette_clear(LodePNGColorMode* info) {
-  if(info->palette) lodepng_free(info->palette);
-  info->palette = 0;
-  info->palettesize = 0;
-}
-
-unsigned lodepng_palette_add(LodePNGColorMode* info,
-                             unsigned char r, unsigned char g, unsigned char b, unsigned char a) {
-  unsigned char* data;
-  /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with
-  the max of 256 colors, it'll have the exact alloc size*/
-  if(!info->palette) /*allocate palette if empty*/ {
-    /*room for 256 colors with 4 bytes each*/
-    data = (unsigned char*)lodepng_realloc(info->palette, 1024);
-    if(!data) return 83; /*alloc fail*/
-    else info->palette = data;
-  }
-  info->palette[4 * info->palettesize + 0] = r;
-  info->palette[4 * info->palettesize + 1] = g;
-  info->palette[4 * info->palettesize + 2] = b;
-  info->palette[4 * info->palettesize + 3] = a;
-  ++info->palettesize;
-  return 0;
-}
-
-/*calculate bits per pixel out of colortype and bitdepth*/
-unsigned lodepng_get_bpp(const LodePNGColorMode* info) {
-  return lodepng_get_bpp_lct(info->colortype, info->bitdepth);
-}
-
-unsigned lodepng_get_channels(const LodePNGColorMode* info) {
-  return getNumColorChannels(info->colortype);
-}
-
-unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info) {
-  return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA;
-}
-
-unsigned lodepng_is_alpha_type(const LodePNGColorMode* info) {
-  return (info->colortype & 4) != 0; /*4 or 6*/
-}
-
-unsigned lodepng_is_palette_type(const LodePNGColorMode* info) {
-  return info->colortype == LCT_PALETTE;
-}
-
-unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info) {
-  size_t i;
-  for(i = 0; i != info->palettesize; ++i) {
-    if(info->palette[i * 4 + 3] < 255) return 1;
-  }
-  return 0;
-}
-
-unsigned lodepng_can_have_alpha(const LodePNGColorMode* info) {
-  return info->key_defined
-      || lodepng_is_alpha_type(info)
-      || lodepng_has_palette_alpha(info);
-}
-
-size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) {
-  size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth);
-  size_t n = (size_t)w * (size_t)h;
-  return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8;
-}
-
-size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color) {
-  return lodepng_get_raw_size_lct(w, h, color->colortype, color->bitdepth);
-}
-
-
-#ifdef LODEPNG_COMPILE_PNG
-#ifdef LODEPNG_COMPILE_DECODER
-
-/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer,
-and in addition has one extra byte per line: the filter byte. So this gives a larger
-result than lodepng_get_raw_size. */
-static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color) {
-  size_t bpp = lodepng_get_bpp(color);
-  /* + 1 for the filter byte, and possibly plus padding bits per line */
-  size_t line = ((size_t)(w / 8) * bpp) + 1 + ((w & 7) * bpp + 7) / 8;
-  return (size_t)h * line;
-}
-
-/* Safely check if multiplying two integers will overflow (no undefined
-behavior, compiler removing the code, etc...) and output result. */
-static int lodepng_mulofl(size_t a, size_t b, size_t* result) {
-  *result = a * b; /* Unsigned multiplication is well defined and safe in C90 */
-  return (a != 0 && *result / a != b);
-}
-
-/* Safely check if adding two integers will overflow (no undefined
-behavior, compiler removing the code, etc...) and output result. */
-static int lodepng_addofl(size_t a, size_t b, size_t* result) {
-  *result = a + b; /* Unsigned addition is well defined and safe in C90 */
-  return *result < a;
-}
-
-/*Safely checks whether size_t overflow can be caused due to amount of pixels.
-This check is overcautious rather than precise. If this check indicates no overflow,
-you can safely compute in a size_t (but not an unsigned):
--(size_t)w * (size_t)h * 8
--amount of bytes in IDAT (including filter, padding and Adam7 bytes)
--amount of bytes in raw color model
-Returns 1 if overflow possible, 0 if not.
-*/
-static int lodepng_pixel_overflow(unsigned w, unsigned h,
-                                  const LodePNGColorMode* pngcolor, const LodePNGColorMode* rawcolor) {
-  size_t bpp = LODEPNG_MAX(lodepng_get_bpp(pngcolor), lodepng_get_bpp(rawcolor));
-  size_t numpixels, total;
-  size_t line; /* bytes per line in worst case */
-
-  if(lodepng_mulofl((size_t)w, (size_t)h, &numpixels)) return 1;
-  if(lodepng_mulofl(numpixels, 8, &total)) return 1; /* bit pointer with 8-bit color, or 8 bytes per channel color */
-
-  /* Bytes per scanline with the expression "(w / 8) * bpp) + ((w & 7) * bpp + 7) / 8" */
-  if(lodepng_mulofl((size_t)(w / 8), bpp, &line)) return 1;
-  if(lodepng_addofl(line, ((w & 7) * bpp + 7) / 8, &line)) return 1;
-
-  if(lodepng_addofl(line, 5, &line)) return 1; /* 5 bytes overhead per line: 1 filterbyte, 4 for Adam7 worst case */
-  if(lodepng_mulofl(line, h, &total)) return 1; /* Total bytes in worst case */
-
-  return 0; /* no overflow */
-}
-#endif /*LODEPNG_COMPILE_DECODER*/
-#endif /*LODEPNG_COMPILE_PNG*/
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-
-static void LodePNGUnknownChunks_init(LodePNGInfo* info) {
-  unsigned i;
-  for(i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0;
-  for(i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0;
-}
-
-static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info) {
-  unsigned i;
-  for(i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]);
-}
-
-static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src) {
-  unsigned i;
-
-  LodePNGUnknownChunks_cleanup(dest);
-
-  for(i = 0; i != 3; ++i) {
-    size_t j;
-    dest->unknown_chunks_size[i] = src->unknown_chunks_size[i];
-    dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]);
-    if(!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/
-    for(j = 0; j < src->unknown_chunks_size[i]; ++j) {
-      dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j];
-    }
-  }
-
-  return 0;
-}
-
-/******************************************************************************/
-
-static void LodePNGText_init(LodePNGInfo* info) {
-  info->text_num = 0;
-  info->text_keys = NULL;
-  info->text_strings = NULL;
-}
-
-static void LodePNGText_cleanup(LodePNGInfo* info) {
-  size_t i;
-  for(i = 0; i != info->text_num; ++i) {
-    string_cleanup(&info->text_keys[i]);
-    string_cleanup(&info->text_strings[i]);
-  }
-  lodepng_free(info->text_keys);
-  lodepng_free(info->text_strings);
-}
-
-static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source) {
-  size_t i = 0;
-  dest->text_keys = 0;
-  dest->text_strings = 0;
-  dest->text_num = 0;
-  for(i = 0; i != source->text_num; ++i) {
-    CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i]));
-  }
-  return 0;
-}
-
-void lodepng_clear_text(LodePNGInfo* info) {
-  LodePNGText_cleanup(info);
-}
-
-unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str) {
-  char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1)));
-  char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1)));
-  if(!new_keys || !new_strings) {
-    lodepng_free(new_keys);
-    lodepng_free(new_strings);
-    return 83; /*alloc fail*/
-  }
-
-  ++info->text_num;
-  info->text_keys = new_keys;
-  info->text_strings = new_strings;
-
-  info->text_keys[info->text_num - 1] = alloc_string(key);
-  info->text_strings[info->text_num - 1] = alloc_string(str);
-
-  return 0;
-}
-
-/******************************************************************************/
-
-static void LodePNGIText_init(LodePNGInfo* info) {
-  info->itext_num = 0;
-  info->itext_keys = NULL;
-  info->itext_langtags = NULL;
-  info->itext_transkeys = NULL;
-  info->itext_strings = NULL;
-}
-
-static void LodePNGIText_cleanup(LodePNGInfo* info) {
-  size_t i;
-  for(i = 0; i != info->itext_num; ++i) {
-    string_cleanup(&info->itext_keys[i]);
-    string_cleanup(&info->itext_langtags[i]);
-    string_cleanup(&info->itext_transkeys[i]);
-    string_cleanup(&info->itext_strings[i]);
-  }
-  lodepng_free(info->itext_keys);
-  lodepng_free(info->itext_langtags);
-  lodepng_free(info->itext_transkeys);
-  lodepng_free(info->itext_strings);
-}
-
-static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source) {
-  size_t i = 0;
-  dest->itext_keys = 0;
-  dest->itext_langtags = 0;
-  dest->itext_transkeys = 0;
-  dest->itext_strings = 0;
-  dest->itext_num = 0;
-  for(i = 0; i != source->itext_num; ++i) {
-    CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i],
-                                        source->itext_transkeys[i], source->itext_strings[i]));
-  }
-  return 0;
-}
-
-void lodepng_clear_itext(LodePNGInfo* info) {
-  LodePNGIText_cleanup(info);
-}
-
-unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,
-                           const char* transkey, const char* str) {
-  char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1)));
-  char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1)));
-  char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1)));
-  char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1)));
-  if(!new_keys || !new_langtags || !new_transkeys || !new_strings) {
-    lodepng_free(new_keys);
-    lodepng_free(new_langtags);
-    lodepng_free(new_transkeys);
-    lodepng_free(new_strings);
-    return 83; /*alloc fail*/
-  }
-
-  ++info->itext_num;
-  info->itext_keys = new_keys;
-  info->itext_langtags = new_langtags;
-  info->itext_transkeys = new_transkeys;
-  info->itext_strings = new_strings;
-
-  info->itext_keys[info->itext_num - 1] = alloc_string(key);
-  info->itext_langtags[info->itext_num - 1] = alloc_string(langtag);
-  info->itext_transkeys[info->itext_num - 1] = alloc_string(transkey);
-  info->itext_strings[info->itext_num - 1] = alloc_string(str);
-
-  return 0;
-}
-
-/* same as set but does not delete */
-static unsigned lodepng_assign_icc(LodePNGInfo* info, const char* name, const unsigned char* profile, unsigned profile_size) {
-  info->iccp_name = alloc_string(name);
-  info->iccp_profile = (unsigned char*)lodepng_malloc(profile_size);
-
-  if(!info->iccp_name || !info->iccp_profile) return 83; /*alloc fail*/
-
-  memcpy(info->iccp_profile, profile, profile_size);
-  info->iccp_profile_size = profile_size;
-
-  return 0; /*ok*/
-}
-
-unsigned lodepng_set_icc(LodePNGInfo* info, const char* name, const unsigned char* profile, unsigned profile_size) {
-  if(info->iccp_name) lodepng_clear_icc(info);
-  info->iccp_defined = 1;
-
-  return lodepng_assign_icc(info, name, profile, profile_size);
-}
-
-void lodepng_clear_icc(LodePNGInfo* info) {
-  string_cleanup(&info->iccp_name);
-  lodepng_free(info->iccp_profile);
-  info->iccp_profile = NULL;
-  info->iccp_profile_size = 0;
-  info->iccp_defined = 0;
-}
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-void lodepng_info_init(LodePNGInfo* info) {
-  lodepng_color_mode_init(&info->color);
-  info->interlace_method = 0;
-  info->compression_method = 0;
-  info->filter_method = 0;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  info->background_defined = 0;
-  info->background_r = info->background_g = info->background_b = 0;
-
-  LodePNGText_init(info);
-  LodePNGIText_init(info);
-
-  info->time_defined = 0;
-  info->phys_defined = 0;
-
-  info->gama_defined = 0;
-  info->chrm_defined = 0;
-  info->srgb_defined = 0;
-  info->iccp_defined = 0;
-  info->iccp_name = NULL;
-  info->iccp_profile = NULL;
-
-  LodePNGUnknownChunks_init(info);
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-}
-
-void lodepng_info_cleanup(LodePNGInfo* info) {
-  lodepng_color_mode_cleanup(&info->color);
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  LodePNGText_cleanup(info);
-  LodePNGIText_cleanup(info);
-
-  lodepng_clear_icc(info);
-
-  LodePNGUnknownChunks_cleanup(info);
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-}
-
-unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source) {
-  lodepng_info_cleanup(dest);
-  *dest = *source;
-  lodepng_color_mode_init(&dest->color);
-  CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color));
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  CERROR_TRY_RETURN(LodePNGText_copy(dest, source));
-  CERROR_TRY_RETURN(LodePNGIText_copy(dest, source));
-  if(source->iccp_defined) {
-    CERROR_TRY_RETURN(lodepng_assign_icc(dest, source->iccp_name, source->iccp_profile, source->iccp_profile_size));
-  }
-
-  LodePNGUnknownChunks_init(dest);
-  CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source));
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-  return 0;
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/
-static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in) {
-  unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/
-  /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/
-  unsigned p = index & m;
-  in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/
-  in = in << (bits * (m - p));
-  if(p == 0) out[index * bits / 8] = in;
-  else out[index * bits / 8] |= in;
-}
-
-typedef struct ColorTree ColorTree;
-
-/*
-One node of a color tree
-This is the data structure used to count the number of unique colors and to get a palette
-index for a color. It's like an octree, but because the alpha channel is used too, each
-node has 16 instead of 8 children.
-*/
-struct ColorTree {
-  ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/
-  int index; /*the payload. Only has a meaningful value if this is in the last level*/
-};
-
-static void color_tree_init(ColorTree* tree) {
-  int i;
-  for(i = 0; i != 16; ++i) tree->children[i] = 0;
-  tree->index = -1;
-}
-
-static void color_tree_cleanup(ColorTree* tree) {
-  int i;
-  for(i = 0; i != 16; ++i) {
-    if(tree->children[i]) {
-      color_tree_cleanup(tree->children[i]);
-      lodepng_free(tree->children[i]);
-    }
-  }
-}
-
-/*returns -1 if color not present, its index otherwise*/
-static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) {
-  int bit = 0;
-  for(bit = 0; bit < 8; ++bit) {
-    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);
-    if(!tree->children[i]) return -1;
-    else tree = tree->children[i];
-  }
-  return tree ? tree->index : -1;
-}
-
-#ifdef LODEPNG_COMPILE_ENCODER
-static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) {
-  return color_tree_get(tree, r, g, b, a) >= 0;
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-/*color is not allowed to already exist.
-Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist")*/
-static void color_tree_add(ColorTree* tree,
-                           unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index) {
-  int bit;
-  for(bit = 0; bit < 8; ++bit) {
-    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);
-    if(!tree->children[i]) {
-      tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree));
-      color_tree_init(tree->children[i]);
-    }
-    tree = tree->children[i];
-  }
-  tree->index = (int)index;
-}
-
-/*put a pixel, given its RGBA color, into image of any color type*/
-static unsigned rgba8ToPixel(unsigned char* out, size_t i,
-                             const LodePNGColorMode* mode, ColorTree* tree /*for palette*/,
-                             unsigned char r, unsigned char g, unsigned char b, unsigned char a) {
-  if(mode->colortype == LCT_GREY) {
-    unsigned char gray = r; /*((unsigned short)r + g + b) / 3;*/
-    if(mode->bitdepth == 8) out[i] = gray;
-    else if(mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = gray;
-    else {
-      /*take the most significant bits of gray*/
-      gray = (gray >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1);
-      addColorBits(out, i, mode->bitdepth, gray);
-    }
-  } else if(mode->colortype == LCT_RGB) {
-    if(mode->bitdepth == 8) {
-      out[i * 3 + 0] = r;
-      out[i * 3 + 1] = g;
-      out[i * 3 + 2] = b;
-    } else {
-      out[i * 6 + 0] = out[i * 6 + 1] = r;
-      out[i * 6 + 2] = out[i * 6 + 3] = g;
-      out[i * 6 + 4] = out[i * 6 + 5] = b;
-    }
-  } else if(mode->colortype == LCT_PALETTE) {
-    int index = color_tree_get(tree, r, g, b, a);
-    if(index < 0) return 82; /*color not in palette*/
-    if(mode->bitdepth == 8) out[i] = index;
-    else addColorBits(out, i, mode->bitdepth, (unsigned)index);
-  } else if(mode->colortype == LCT_GREY_ALPHA) {
-    unsigned char gray = r; /*((unsigned short)r + g + b) / 3;*/
-    if(mode->bitdepth == 8) {
-      out[i * 2 + 0] = gray;
-      out[i * 2 + 1] = a;
-    } else if(mode->bitdepth == 16) {
-      out[i * 4 + 0] = out[i * 4 + 1] = gray;
-      out[i * 4 + 2] = out[i * 4 + 3] = a;
-    }
-  } else if(mode->colortype == LCT_RGBA) {
-    if(mode->bitdepth == 8) {
-      out[i * 4 + 0] = r;
-      out[i * 4 + 1] = g;
-      out[i * 4 + 2] = b;
-      out[i * 4 + 3] = a;
-    } else {
-      out[i * 8 + 0] = out[i * 8 + 1] = r;
-      out[i * 8 + 2] = out[i * 8 + 3] = g;
-      out[i * 8 + 4] = out[i * 8 + 5] = b;
-      out[i * 8 + 6] = out[i * 8 + 7] = a;
-    }
-  }
-
-  return 0; /*no error*/
-}
-
-/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/
-static void rgba16ToPixel(unsigned char* out, size_t i,
-                         const LodePNGColorMode* mode,
-                         unsigned short r, unsigned short g, unsigned short b, unsigned short a) {
-  if(mode->colortype == LCT_GREY) {
-    unsigned short gray = r; /*((unsigned)r + g + b) / 3;*/
-    out[i * 2 + 0] = (gray >> 8) & 255;
-    out[i * 2 + 1] = gray & 255;
-  } else if(mode->colortype == LCT_RGB) {
-    out[i * 6 + 0] = (r >> 8) & 255;
-    out[i * 6 + 1] = r & 255;
-    out[i * 6 + 2] = (g >> 8) & 255;
-    out[i * 6 + 3] = g & 255;
-    out[i * 6 + 4] = (b >> 8) & 255;
-    out[i * 6 + 5] = b & 255;
-  } else if(mode->colortype == LCT_GREY_ALPHA) {
-    unsigned short gray = r; /*((unsigned)r + g + b) / 3;*/
-    out[i * 4 + 0] = (gray >> 8) & 255;
-    out[i * 4 + 1] = gray & 255;
-    out[i * 4 + 2] = (a >> 8) & 255;
-    out[i * 4 + 3] = a & 255;
-  } else if(mode->colortype == LCT_RGBA) {
-    out[i * 8 + 0] = (r >> 8) & 255;
-    out[i * 8 + 1] = r & 255;
-    out[i * 8 + 2] = (g >> 8) & 255;
-    out[i * 8 + 3] = g & 255;
-    out[i * 8 + 4] = (b >> 8) & 255;
-    out[i * 8 + 5] = b & 255;
-    out[i * 8 + 6] = (a >> 8) & 255;
-    out[i * 8 + 7] = a & 255;
-  }
-}
-
-/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/
-static void getPixelColorRGBA8(unsigned char* r, unsigned char* g,
-                               unsigned char* b, unsigned char* a,
-                               const unsigned char* in, size_t i,
-                               const LodePNGColorMode* mode) {
-  if(mode->colortype == LCT_GREY) {
-    if(mode->bitdepth == 8) {
-      *r = *g = *b = in[i];
-      if(mode->key_defined && *r == mode->key_r) *a = 0;
-      else *a = 255;
-    } else if(mode->bitdepth == 16) {
-      *r = *g = *b = in[i * 2 + 0];
-      if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;
-      else *a = 255;
-    } else {
-      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/
-      size_t j = i * mode->bitdepth;
-      unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);
-      *r = *g = *b = (value * 255) / highest;
-      if(mode->key_defined && value == mode->key_r) *a = 0;
-      else *a = 255;
-    }
-  } else if(mode->colortype == LCT_RGB) {
-    if(mode->bitdepth == 8) {
-      *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2];
-      if(mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0;
-      else *a = 255;
-    } else {
-      *r = in[i * 6 + 0];
-      *g = in[i * 6 + 2];
-      *b = in[i * 6 + 4];
-      if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
-         && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
-         && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;
-      else *a = 255;
-    }
-  } else if(mode->colortype == LCT_PALETTE) {
-    unsigned index;
-    if(mode->bitdepth == 8) index = in[i];
-    else {
-      size_t j = i * mode->bitdepth;
-      index = readBitsFromReversedStream(&j, in, mode->bitdepth);
-    }
-
-    if(index >= mode->palettesize) {
-      /*This is an error according to the PNG spec, but common PNG decoders make it black instead.
-      Done here too, slightly faster due to no error handling needed.*/
-      *r = *g = *b = 0;
-      *a = 255;
-    } else {
-      *r = mode->palette[index * 4 + 0];
-      *g = mode->palette[index * 4 + 1];
-      *b = mode->palette[index * 4 + 2];
-      *a = mode->palette[index * 4 + 3];
-    }
-  } else if(mode->colortype == LCT_GREY_ALPHA) {
-    if(mode->bitdepth == 8) {
-      *r = *g = *b = in[i * 2 + 0];
-      *a = in[i * 2 + 1];
-    } else {
-      *r = *g = *b = in[i * 4 + 0];
-      *a = in[i * 4 + 2];
-    }
-  } else if(mode->colortype == LCT_RGBA) {
-    if(mode->bitdepth == 8) {
-      *r = in[i * 4 + 0];
-      *g = in[i * 4 + 1];
-      *b = in[i * 4 + 2];
-      *a = in[i * 4 + 3];
-    } else {
-      *r = in[i * 8 + 0];
-      *g = in[i * 8 + 2];
-      *b = in[i * 8 + 4];
-      *a = in[i * 8 + 6];
-    }
-  }
-}
-
-/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color
-mode test cases, optimized to convert the colors much faster, when converting
-to RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with
-enough memory, if has_alpha is true the output is RGBA. mode has the color mode
-of the input buffer.*/
-static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels,
-                                unsigned has_alpha, const unsigned char* in,
-                                const LodePNGColorMode* mode) {
-  unsigned num_channels = has_alpha ? 4 : 3;
-  size_t i;
-  if(mode->colortype == LCT_GREY) {
-    if(mode->bitdepth == 8) {
-      for(i = 0; i != numpixels; ++i, buffer += num_channels) {
-        buffer[0] = buffer[1] = buffer[2] = in[i];
-        if(has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255;
-      }
-    } else if(mode->bitdepth == 16) {
-      for(i = 0; i != numpixels; ++i, buffer += num_channels) {
-        buffer[0] = buffer[1] = buffer[2] = in[i * 2];
-        if(has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255;
-      }
-    } else {
-      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/
-      size_t j = 0;
-      for(i = 0; i != numpixels; ++i, buffer += num_channels) {
-        unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);
-        buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest;
-        if(has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255;
-      }
-    }
-  } else if(mode->colortype == LCT_RGB) {
-    if(mode->bitdepth == 8) {
-      for(i = 0; i != numpixels; ++i, buffer += num_channels) {
-        buffer[0] = in[i * 3 + 0];
-        buffer[1] = in[i * 3 + 1];
-        buffer[2] = in[i * 3 + 2];
-        if(has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r
-           && buffer[1]== mode->key_g && buffer[2] == mode->key_b ? 0 : 255;
-      }
-    } else {
-      for(i = 0; i != numpixels; ++i, buffer += num_channels) {
-        buffer[0] = in[i * 6 + 0];
-        buffer[1] = in[i * 6 + 2];
-        buffer[2] = in[i * 6 + 4];
-        if(has_alpha) buffer[3] = mode->key_defined
-           && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
-           && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
-           && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255;
-      }
-    }
-  } else if(mode->colortype == LCT_PALETTE) {
-    unsigned index;
-    size_t j = 0;
-    for(i = 0; i != numpixels; ++i, buffer += num_channels) {
-      if(mode->bitdepth == 8) index = in[i];
-      else index = readBitsFromReversedStream(&j, in, mode->bitdepth);
-
-      if(index >= mode->palettesize) {
-        /*This is an error according to the PNG spec, but most PNG decoders make it black instead.
-        Done here too, slightly faster due to no error handling needed.*/
-        buffer[0] = buffer[1] = buffer[2] = 0;
-        if(has_alpha) buffer[3] = 255;
-      } else {
-        buffer[0] = mode->palette[index * 4 + 0];
-        buffer[1] = mode->palette[index * 4 + 1];
-        buffer[2] = mode->palette[index * 4 + 2];
-        if(has_alpha) buffer[3] = mode->palette[index * 4 + 3];
-      }
-    }
-  } else if(mode->colortype == LCT_GREY_ALPHA) {
-    if(mode->bitdepth == 8) {
-      for(i = 0; i != numpixels; ++i, buffer += num_channels) {
-        buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0];
-        if(has_alpha) buffer[3] = in[i * 2 + 1];
-      }
-    } else {
-      for(i = 0; i != numpixels; ++i, buffer += num_channels) {
-        buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0];
-        if(has_alpha) buffer[3] = in[i * 4 + 2];
-      }
-    }
-  } else if(mode->colortype == LCT_RGBA) {
-    if(mode->bitdepth == 8) {
-      for(i = 0; i != numpixels; ++i, buffer += num_channels) {
-        buffer[0] = in[i * 4 + 0];
-        buffer[1] = in[i * 4 + 1];
-        buffer[2] = in[i * 4 + 2];
-        if(has_alpha) buffer[3] = in[i * 4 + 3];
-      }
-    } else {
-      for(i = 0; i != numpixels; ++i, buffer += num_channels) {
-        buffer[0] = in[i * 8 + 0];
-        buffer[1] = in[i * 8 + 2];
-        buffer[2] = in[i * 8 + 4];
-        if(has_alpha) buffer[3] = in[i * 8 + 6];
-      }
-    }
-  }
-}
-
-/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with
-given color type, but the given color type must be 16-bit itself.*/
-static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a,
-                                const unsigned char* in, size_t i, const LodePNGColorMode* mode) {
-  if(mode->colortype == LCT_GREY) {
-    *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1];
-    if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;
-    else *a = 65535;
-  } else if(mode->colortype == LCT_RGB) {
-    *r = 256u * in[i * 6 + 0] + in[i * 6 + 1];
-    *g = 256u * in[i * 6 + 2] + in[i * 6 + 3];
-    *b = 256u * in[i * 6 + 4] + in[i * 6 + 5];
-    if(mode->key_defined
-       && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
-       && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
-       && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;
-    else *a = 65535;
-  } else if(mode->colortype == LCT_GREY_ALPHA) {
-    *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1];
-    *a = 256u * in[i * 4 + 2] + in[i * 4 + 3];
-  } else if(mode->colortype == LCT_RGBA) {
-    *r = 256u * in[i * 8 + 0] + in[i * 8 + 1];
-    *g = 256u * in[i * 8 + 2] + in[i * 8 + 3];
-    *b = 256u * in[i * 8 + 4] + in[i * 8 + 5];
-    *a = 256u * in[i * 8 + 6] + in[i * 8 + 7];
-  }
-}
-
-unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
-                         const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
-                         unsigned w, unsigned h) {
-  size_t i;
-  ColorTree tree;
-  size_t numpixels = (size_t)w * (size_t)h;
-  unsigned error = 0;
-
-  if(lodepng_color_mode_equal(mode_out, mode_in)) {
-    size_t numbytes = lodepng_get_raw_size(w, h, mode_in);
-    for(i = 0; i != numbytes; ++i) out[i] = in[i];
-    return 0;
-  }
-
-  if(mode_out->colortype == LCT_PALETTE) {
-    size_t palettesize = mode_out->palettesize;
-    const unsigned char* palette = mode_out->palette;
-    size_t palsize = (size_t)1u << mode_out->bitdepth;
-    /*if the user specified output palette but did not give the values, assume
-    they want the values of the input color type (assuming that one is palette).
-    Note that we never create a new palette ourselves.*/
-    if(palettesize == 0) {
-      palettesize = mode_in->palettesize;
-      palette = mode_in->palette;
-      /*if the input was also palette with same bitdepth, then the color types are also
-      equal, so copy literally. This to preserve the exact indices that were in the PNG
-      even in case there are duplicate colors in the palette.*/
-      if (mode_in->colortype == LCT_PALETTE && mode_in->bitdepth == mode_out->bitdepth) {
-        size_t numbytes = lodepng_get_raw_size(w, h, mode_in);
-        for(i = 0; i != numbytes; ++i) out[i] = in[i];
-        return 0;
-      }
-    }
-    if(palettesize < palsize) palsize = palettesize;
-    color_tree_init(&tree);
-    for(i = 0; i != palsize; ++i) {
-      const unsigned char* p = &palette[i * 4];
-      color_tree_add(&tree, p[0], p[1], p[2], p[3], (unsigned)i);
-    }
-  }
-
-  if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16) {
-    for(i = 0; i != numpixels; ++i) {
-      unsigned short r = 0, g = 0, b = 0, a = 0;
-      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in);
-      rgba16ToPixel(out, i, mode_out, r, g, b, a);
-    }
-  } else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA) {
-    getPixelColorsRGBA8(out, numpixels, 1, in, mode_in);
-  } else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB) {
-    getPixelColorsRGBA8(out, numpixels, 0, in, mode_in);
-  } else {
-    unsigned char r = 0, g = 0, b = 0, a = 0;
-    for(i = 0; i != numpixels; ++i) {
-      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in);
-      error = rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a);
-      if (error) break;
-    }
-  }
-
-  if(mode_out->colortype == LCT_PALETTE) {
-    color_tree_cleanup(&tree);
-  }
-
-  return error;
-}
-
-
-/* Converts a single rgb color without alpha from one type to another, color bits truncated to
-their bitdepth. In case of single channel (gray or palette), only the r channel is used. Slow
-function, do not use to process all pixels of an image. Alpha channel not supported on purpose:
-this is for bKGD, supporting alpha may prevent it from finding a color in the palette, from the
-specification it looks like bKGD should ignore the alpha values of the palette since it can use
-any palette index but doesn't have an alpha channel. Idem with ignoring color key. */
-unsigned lodepng_convert_rgb(
-    unsigned* r_out, unsigned* g_out, unsigned* b_out,
-    unsigned r_in, unsigned g_in, unsigned b_in,
-    const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in) {
-  unsigned r = 0, g = 0, b = 0;
-  unsigned mul = 65535 / ((1u << mode_in->bitdepth) - 1u); /*65535, 21845, 4369, 257, 1*/
-  unsigned shift = 16 - mode_out->bitdepth;
-
-  if(mode_in->colortype == LCT_GREY || mode_in->colortype == LCT_GREY_ALPHA) {
-    r = g = b = r_in * mul;
-  } else if(mode_in->colortype == LCT_RGB || mode_in->colortype == LCT_RGBA) {
-    r = r_in * mul;
-    g = g_in * mul;
-    b = b_in * mul;
-  } else if(mode_in->colortype == LCT_PALETTE) {
-    if(r_in >= mode_in->palettesize) return 82;
-    r = mode_in->palette[r_in * 4 + 0] * 257u;
-    g = mode_in->palette[r_in * 4 + 1] * 257u;
-    b = mode_in->palette[r_in * 4 + 2] * 257u;
-  } else {
-    return 31;
-  }
-
-  /* now convert to output format */
-  if(mode_out->colortype == LCT_GREY || mode_out->colortype == LCT_GREY_ALPHA) {
-    *r_out = r >> shift ;
-  } else if(mode_out->colortype == LCT_RGB || mode_out->colortype == LCT_RGBA) {
-    *r_out = r >> shift ;
-    *g_out = g >> shift ;
-    *b_out = b >> shift ;
-  } else if(mode_out->colortype == LCT_PALETTE) {
-    unsigned i;
-    /* a 16-bit color cannot be in the palette */
-    if((r >> 8) != (r & 255) || (g >> 8) != (g & 255) || (b >> 8) != (b & 255)) return 82;
-    for(i = 0; i < mode_out->palettesize; i++) {
-      unsigned j = i * 4;
-      if((r >> 8) == mode_out->palette[j + 0] && (g >> 8) == mode_out->palette[j + 1] &&
-          (b >> 8) == mode_out->palette[j + 2]) {
-        *r_out = i;
-        return 0;
-      }
-    }
-    return 82;
-  } else {
-    return 31;
-  }
-
-  return 0;
-}
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-void lodepng_color_profile_init(LodePNGColorProfile* profile) {
-  profile->colored = 0;
-  profile->key = 0;
-  profile->key_r = profile->key_g = profile->key_b = 0;
-  profile->alpha = 0;
-  profile->numcolors = 0;
-  profile->bits = 1;
-  profile->numpixels = 0;
-}
-
-/*function used for debug purposes with C++*/
-/*void printColorProfile(LodePNGColorProfile* p) {
-  std::cout << "colored: " << (int)p->colored << ", ";
-  std::cout << "key: " << (int)p->key << ", ";
-  std::cout << "key_r: " << (int)p->key_r << ", ";
-  std::cout << "key_g: " << (int)p->key_g << ", ";
-  std::cout << "key_b: " << (int)p->key_b << ", ";
-  std::cout << "alpha: " << (int)p->alpha << ", ";
-  std::cout << "numcolors: " << (int)p->numcolors << ", ";
-  std::cout << "bits: " << (int)p->bits << std::endl;
-}*/
-
-/*Returns how many bits needed to represent given value (max 8 bit)*/
-static unsigned getValueRequiredBits(unsigned char value) {
-  if(value == 0 || value == 255) return 1;
-  /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/
-  if(value % 17 == 0) return value % 85 == 0 ? 2 : 4;
-  return 8;
-}
-
-/*profile must already have been inited.
-It's ok to set some parameters of profile to done already.*/
-unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
-                                   const unsigned char* in, unsigned w, unsigned h,
-                                   const LodePNGColorMode* mode_in) {
-  unsigned error = 0;
-  size_t i;
-  ColorTree tree;
-  size_t numpixels = (size_t)w * (size_t)h;
-
-  /* mark things as done already if it would be impossible to have a more expensive case */
-  unsigned colored_done = lodepng_is_greyscale_type(mode_in) ? 1 : 0;
-  unsigned alpha_done = lodepng_can_have_alpha(mode_in) ? 0 : 1;
-  unsigned numcolors_done = 0;
-  unsigned bpp = lodepng_get_bpp(mode_in);
-  unsigned bits_done = (profile->bits == 1 && bpp == 1) ? 1 : 0;
-  unsigned sixteen = 0; /* whether the input image is 16 bit */
-  unsigned maxnumcolors = 257;
-  if(bpp <= 8) maxnumcolors = LODEPNG_MIN(257, profile->numcolors + (1u << bpp));
-
-  profile->numpixels += numpixels;
-
-  color_tree_init(&tree);
-
-  /*If the profile was already filled in from previous data, fill its palette in tree
-  and mark things as done already if we know they are the most expensive case already*/
-  if(profile->alpha) alpha_done = 1;
-  if(profile->colored) colored_done = 1;
-  if(profile->bits == 16) numcolors_done = 1;
-  if(profile->bits >= bpp) bits_done = 1;
-  if(profile->numcolors >= maxnumcolors) numcolors_done = 1;
-
-  if(!numcolors_done) {
-    for(i = 0; i < profile->numcolors; i++) {
-      const unsigned char* color = &profile->palette[i * 4];
-      color_tree_add(&tree, color[0], color[1], color[2], color[3], i);
-    }
-  }
-
-  /*Check if the 16-bit input is truly 16-bit*/
-  if(mode_in->bitdepth == 16 && !sixteen) {
-    unsigned short r, g, b, a;
-    for(i = 0; i != numpixels; ++i) {
-      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in);
-      if((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) ||
-         (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/ {
-        profile->bits = 16;
-        sixteen = 1;
-        bits_done = 1;
-        numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/
-        break;
-      }
-    }
-  }
-
-  if(sixteen) {
-    unsigned short r = 0, g = 0, b = 0, a = 0;
-
-    for(i = 0; i != numpixels; ++i) {
-      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in);
-
-      if(!colored_done && (r != g || r != b)) {
-        profile->colored = 1;
-        colored_done = 1;
-      }
-
-      if(!alpha_done) {
-        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);
-        if(a != 65535 && (a != 0 || (profile->key && !matchkey))) {
-          profile->alpha = 1;
-          profile->key = 0;
-          alpha_done = 1;
-        } else if(a == 0 && !profile->alpha && !profile->key) {
-          profile->key = 1;
-          profile->key_r = r;
-          profile->key_g = g;
-          profile->key_b = b;
-        } else if(a == 65535 && profile->key && matchkey) {
-          /* Color key cannot be used if an opaque pixel also has that RGB color. */
-          profile->alpha = 1;
-          profile->key = 0;
-          alpha_done = 1;
-        }
-      }
-      if(alpha_done && numcolors_done && colored_done && bits_done) break;
-    }
-
-    if(profile->key && !profile->alpha) {
-      for(i = 0; i != numpixels; ++i) {
-        getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in);
-        if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) {
-          /* Color key cannot be used if an opaque pixel also has that RGB color. */
-          profile->alpha = 1;
-          profile->key = 0;
-          alpha_done = 1;
-        }
-      }
-    }
-  } else /* < 16-bit */ {
-    unsigned char r = 0, g = 0, b = 0, a = 0;
-    for(i = 0; i != numpixels; ++i) {
-      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in);
-
-      if(!bits_done && profile->bits < 8) {
-        /*only r is checked, < 8 bits is only relevant for grayscale*/
-        unsigned bits = getValueRequiredBits(r);
-        if(bits > profile->bits) profile->bits = bits;
-      }
-      bits_done = (profile->bits >= bpp);
-
-      if(!colored_done && (r != g || r != b)) {
-        profile->colored = 1;
-        colored_done = 1;
-        if(profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/
-      }
-
-      if(!alpha_done) {
-        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);
-        if(a != 255 && (a != 0 || (profile->key && !matchkey))) {
-          profile->alpha = 1;
-          profile->key = 0;
-          alpha_done = 1;
-          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
-        } else if(a == 0 && !profile->alpha && !profile->key) {
-          profile->key = 1;
-          profile->key_r = r;
-          profile->key_g = g;
-          profile->key_b = b;
-        } else if(a == 255 && profile->key && matchkey) {
-          /* Color key cannot be used if an opaque pixel also has that RGB color. */
-          profile->alpha = 1;
-          profile->key = 0;
-          alpha_done = 1;
-          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
-        }
-      }
-
-      if(!numcolors_done) {
-        if(!color_tree_has(&tree, r, g, b, a)) {
-          color_tree_add(&tree, r, g, b, a, profile->numcolors);
-          if(profile->numcolors < 256) {
-            unsigned char* p = profile->palette;
-            unsigned n = profile->numcolors;
-            p[n * 4 + 0] = r;
-            p[n * 4 + 1] = g;
-            p[n * 4 + 2] = b;
-            p[n * 4 + 3] = a;
-          }
-          ++profile->numcolors;
-          numcolors_done = profile->numcolors >= maxnumcolors;
-        }
-      }
-
-      if(alpha_done && numcolors_done && colored_done && bits_done) break;
-    }
-
-    if(profile->key && !profile->alpha) {
-      for(i = 0; i != numpixels; ++i) {
-        getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in);
-        if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) {
-          /* Color key cannot be used if an opaque pixel also has that RGB color. */
-          profile->alpha = 1;
-          profile->key = 0;
-          alpha_done = 1;
-          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
-        }
-      }
-    }
-
-    /*make the profile's key always 16-bit for consistency - repeat each byte twice*/
-    profile->key_r += (profile->key_r << 8);
-    profile->key_g += (profile->key_g << 8);
-    profile->key_b += (profile->key_b << 8);
-  }
-
-  color_tree_cleanup(&tree);
-  return error;
-}
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-/*Adds a single color to the color profile. The profile must already have been inited. The color must be given as 16-bit
-(with 2 bytes repeating for 8-bit and 65535 for opaque alpha channel). This function is expensive, do not call it for
-all pixels of an image but only for a few additional values. */
-static unsigned lodepng_color_profile_add(LodePNGColorProfile* profile,
-                                          unsigned r, unsigned g, unsigned b, unsigned a) {
-  unsigned error = 0;
-  unsigned char image[8];
-  LodePNGColorMode mode;
-  lodepng_color_mode_init(&mode);
-  image[0] = r >> 8; image[1] = r; image[2] = g >> 8; image[3] = g;
-  image[4] = b >> 8; image[5] = b; image[6] = a >> 8; image[7] = a;
-  mode.bitdepth = 16;
-  mode.colortype = LCT_RGBA;
-  error = lodepng_get_color_profile(profile, image, 1, 1, &mode);
-  lodepng_color_mode_cleanup(&mode);
-  return error;
-}
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-/*Autochoose color model given the computed profile. mode_in is to copy palette order from
-when relevant.*/
-static unsigned auto_choose_color_from_profile(LodePNGColorMode* mode_out,
-                                               const LodePNGColorMode* mode_in,
-                                               const LodePNGColorProfile* prof) {
-  unsigned error = 0;
-  unsigned palettebits, palette_ok;
-  size_t i, n;
-  size_t numpixels = prof->numpixels;
-
-  unsigned alpha = prof->alpha;
-  unsigned key = prof->key;
-  unsigned bits = prof->bits;
-
-  mode_out->key_defined = 0;
-
-  if(key && numpixels <= 16) {
-    alpha = 1; /*too few pixels to justify tRNS chunk overhead*/
-    key = 0;
-    if(bits < 8) bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
-  }
-  n = prof->numcolors;
-  palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8));
-  palette_ok = n <= 256 && bits <= 8;
-  if(numpixels < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/
-  if(!prof->colored && bits <= palettebits) palette_ok = 0; /*gray is less overhead*/
-
-  if(palette_ok) {
-    const unsigned char* p = prof->palette;
-    lodepng_palette_clear(mode_out); /*remove potential earlier palette*/
-    for(i = 0; i != prof->numcolors; ++i) {
-      error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]);
-      if(error) break;
-    }
-
-    mode_out->colortype = LCT_PALETTE;
-    mode_out->bitdepth = palettebits;
-
-    if(mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize
-        && mode_in->bitdepth == mode_out->bitdepth) {
-      /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/
-      lodepng_color_mode_cleanup(mode_out);
-      lodepng_color_mode_copy(mode_out, mode_in);
-    }
-  } else /*8-bit or 16-bit per channel*/ {
-    mode_out->bitdepth = bits;
-    mode_out->colortype = alpha ? (prof->colored ? LCT_RGBA : LCT_GREY_ALPHA)
-                                : (prof->colored ? LCT_RGB : LCT_GREY);
-
-    if(key) {
-      unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/
-      mode_out->key_r = prof->key_r & mask;
-      mode_out->key_g = prof->key_g & mask;
-      mode_out->key_b = prof->key_b & mask;
-      mode_out->key_defined = 1;
-    }
-  }
-
-  return error;
-}
-
-/*Automatically chooses color type that gives smallest amount of bits in the
-output image, e.g. gray if there are only grayscale pixels, palette if there
-are less than 256 colors, color key if only single transparent color, ...
-Updates values of mode with a potentially smaller color model. mode_out should
-contain the user chosen color model, but will be overwritten with the new chosen one.*/
-unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
-                                   const unsigned char* image, unsigned w, unsigned h,
-                                   const LodePNGColorMode* mode_in) {
-  unsigned error = 0;
-  LodePNGColorProfile prof;
-  lodepng_color_profile_init(&prof);
-  error = lodepng_get_color_profile(&prof, image, w, h, mode_in);
-  if(error) return error;
-  return auto_choose_color_from_profile(mode_out, mode_in, &prof);
-}
-
-#endif /* #ifdef LODEPNG_COMPILE_ENCODER */
-
-/*
-Paeth predicter, used by PNG filter type 4
-The parameters are of type short, but should come from unsigned chars, the shorts
-are only needed to make the paeth calculation correct.
-*/
-static unsigned char paethPredictor(short a, short b, short c) {
-  short pa = abs(b - c);
-  short pb = abs(a - c);
-  short pc = abs(a + b - c - c);
-
-  if(pc < pa && pc < pb) return (unsigned char)c;
-  else if(pb < pa) return (unsigned char)b;
-  else return (unsigned char)a;
-}
-
-/*shared values used by multiple Adam7 related functions*/
-
-static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/
-static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/
-static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/
-static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/
-
-/*
-Outputs various dimensions and positions in the image related to the Adam7 reduced images.
-passw: output containing the width of the 7 passes
-passh: output containing the height of the 7 passes
-filter_passstart: output containing the index of the start and end of each
- reduced image with filter bytes
-padded_passstart output containing the index of the start and end of each
- reduced image when without filter bytes but with padded scanlines
-passstart: output containing the index of the start and end of each reduced
- image without padding between scanlines, but still padding between the images
-w, h: width and height of non-interlaced image
-bpp: bits per pixel
-"padded" is only relevant if bpp is less than 8 and a scanline or image does not
- end at a full byte
-*/
-static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8],
-                                size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) {
-  /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/
-  unsigned i;
-
-  /*calculate width and height in pixels of each pass*/
-  for(i = 0; i != 7; ++i) {
-    passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i];
-    passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i];
-    if(passw[i] == 0) passh[i] = 0;
-    if(passh[i] == 0) passw[i] = 0;
-  }
-
-  filter_passstart[0] = padded_passstart[0] = passstart[0] = 0;
-  for(i = 0; i != 7; ++i) {
-    /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/
-    filter_passstart[i + 1] = filter_passstart[i]
-                            + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0);
-    /*bits padded if needed to fill full byte at end of each scanline*/
-    padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8);
-    /*only padded at end of reduced image*/
-    passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8;
-  }
-}
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / PNG Decoder                                                            / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*read the information from the header and store it in the LodePNGInfo. return value is error*/
-unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,
-                         const unsigned char* in, size_t insize) {
-  unsigned width, height;
-  LodePNGInfo* info = &state->info_png;
-  if(insize == 0 || in == 0) {
-    CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/
-  }
-  if(insize < 33) {
-    CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/
-  }
-
-  /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/
-  /* TODO: remove this. One should use a new LodePNGState for new sessions */
-  lodepng_info_cleanup(info);
-  lodepng_info_init(info);
-
-  if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71
-     || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10) {
-    CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/
-  }
-  if(lodepng_chunk_length(in + 8) != 13) {
-    CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/
-  }
-  if(!lodepng_chunk_type_equals(in + 8, "IHDR")) {
-    CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/
-  }
-
-  /*read the values given in the header*/
-  width = lodepng_read32bitInt(&in[16]);
-  height = lodepng_read32bitInt(&in[20]);
-  info->color.bitdepth = in[24];
-  info->color.colortype = (LodePNGColorType)in[25];
-  info->compression_method = in[26];
-  info->filter_method = in[27];
-  info->interlace_method = in[28];
-
-  if(width == 0 || height == 0) {
-    CERROR_RETURN_ERROR(state->error, 93);
-  }
-
-  if(w) *w = width;
-  if(h) *h = height;
-
-  if(!state->decoder.ignore_crc) {
-    unsigned CRC = lodepng_read32bitInt(&in[29]);
-    unsigned checksum = lodepng_crc32(&in[12], 17);
-    if(CRC != checksum) {
-      CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/
-    }
-  }
-
-  /*error: only compression method 0 is allowed in the specification*/
-  if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32);
-  /*error: only filter method 0 is allowed in the specification*/
-  if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33);
-  /*error: only interlace methods 0 and 1 exist in the specification*/
-  if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34);
-
-  state->error = checkColorValidity(info->color.colortype, info->color.bitdepth);
-  return state->error;
-}
-
-static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon,
-                                 size_t bytewidth, unsigned char filterType, size_t length) {
-  /*
-  For PNG filter method 0
-  unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte,
-  the filter works byte per byte (bytewidth = 1)
-  precon is the previous unfiltered scanline, recon the result, scanline the current one
-  the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead
-  recon and scanline MAY be the same memory address! precon must be disjoint.
-  */
-
-  size_t i;
-  switch(filterType) {
-    case 0:
-      for(i = 0; i != length; ++i) recon[i] = scanline[i];
-      break;
-    case 1:
-      for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];
-      for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth];
-      break;
-    case 2:
-      if(precon) {
-        for(i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i];
-      } else {
-        for(i = 0; i != length; ++i) recon[i] = scanline[i];
-      }
-      break;
-    case 3:
-      if(precon) {
-        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1);
-        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1);
-      } else {
-        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];
-        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1);
-      }
-      break;
-    case 4:
-      if(precon) {
-        for(i = 0; i != bytewidth; ++i) {
-          recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/
-        }
-        for(i = bytewidth; i < length; ++i) {
-          recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth]));
-        }
-      } else {
-        for(i = 0; i != bytewidth; ++i) {
-          recon[i] = scanline[i];
-        }
-        for(i = bytewidth; i < length; ++i) {
-          /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/
-          recon[i] = (scanline[i] + recon[i - bytewidth]);
-        }
-      }
-      break;
-    default: return 36; /*error: unexisting filter type given*/
-  }
-  return 0;
-}
-
-static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) {
-  /*
-  For PNG filter method 0
-  this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times)
-  out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline
-  w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel
-  in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes)
-  */
-
-  unsigned y;
-  unsigned char* prevline = 0;
-
-  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/
-  size_t bytewidth = (bpp + 7) / 8;
-  size_t linebytes = (w * bpp + 7) / 8;
-
-  for(y = 0; y < h; ++y) {
-    size_t outindex = linebytes * y;
-    size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
-    unsigned char filterType = in[inindex];
-
-    CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes));
-
-    prevline = &out[outindex];
-  }
-
-  return 0;
-}
-
-/*
-in: Adam7 interlaced image, with no padding bits between scanlines, but between
- reduced images so that each reduced image starts at a byte.
-out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h
-bpp: bits per pixel
-out has the following size in bits: w * h * bpp.
-in is possibly bigger due to padding bits between reduced images.
-out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation
-(because that's likely a little bit faster)
-NOTE: comments about padding bits are only relevant if bpp < 8
-*/
-static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) {
-  unsigned passw[7], passh[7];
-  size_t filter_passstart[8], padded_passstart[8], passstart[8];
-  unsigned i;
-
-  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
-
-  if(bpp >= 8) {
-    for(i = 0; i != 7; ++i) {
-      unsigned x, y, b;
-      size_t bytewidth = bpp / 8;
-      for(y = 0; y < passh[i]; ++y)
-      for(x = 0; x < passw[i]; ++x) {
-        size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth;
-        size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;
-        for(b = 0; b < bytewidth; ++b) {
-          out[pixeloutstart + b] = in[pixelinstart + b];
-        }
-      }
-    }
-  } else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ {
-    for(i = 0; i != 7; ++i) {
-      unsigned x, y, b;
-      unsigned ilinebits = bpp * passw[i];
-      unsigned olinebits = bpp * w;
-      size_t obp, ibp; /*bit pointers (for out and in buffer)*/
-      for(y = 0; y < passh[i]; ++y)
-      for(x = 0; x < passw[i]; ++x) {
-        ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp);
-        obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;
-        for(b = 0; b < bpp; ++b) {
-          unsigned char bit = readBitFromReversedStream(&ibp, in);
-          /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/
-          setBitOfReversedStream0(&obp, out, bit);
-        }
-      }
-    }
-  }
-}
-
-static void removePaddingBits(unsigned char* out, const unsigned char* in,
-                              size_t olinebits, size_t ilinebits, unsigned h) {
-  /*
-  After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need
-  to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers
-  for the Adam7 code, the color convert code and the output to the user.
-  in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must
-  have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits
-  also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7
-  only useful if (ilinebits - olinebits) is a value in the range 1..7
-  */
-  unsigned y;
-  size_t diff = ilinebits - olinebits;
-  size_t ibp = 0, obp = 0; /*input and output bit pointers*/
-  for(y = 0; y < h; ++y) {
-    size_t x;
-    for(x = 0; x < olinebits; ++x) {
-      unsigned char bit = readBitFromReversedStream(&ibp, in);
-      setBitOfReversedStream(&obp, out, bit);
-    }
-    ibp += diff;
-  }
-}
-
-/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from
-the IDAT chunks (with filter index bytes and possible padding bits)
-return value is error*/
-static unsigned postProcessScanlines(unsigned char* out, unsigned char* in,
-                                     unsigned w, unsigned h, const LodePNGInfo* info_png) {
-  /*
-  This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype.
-  Steps:
-  *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8)
-  *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace
-  NOTE: the in buffer will be overwritten with intermediate data!
-  */
-  unsigned bpp = lodepng_get_bpp(&info_png->color);
-  if(bpp == 0) return 31; /*error: invalid colortype*/
-
-  if(info_png->interlace_method == 0) {
-    if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) {
-      CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp));
-      removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h);
-    }
-    /*we can immediately filter into the out buffer, no other steps needed*/
-    else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp));
-  } else /*interlace_method is 1 (Adam7)*/ {
-    unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8];
-    unsigned i;
-
-    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
-
-    for(i = 0; i != 7; ++i) {
-      CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp));
-      /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline,
-      move bytes instead of bits or move not at all*/
-      if(bpp < 8) {
-        /*remove padding bits in scanlines; after this there still may be padding
-        bits between the different reduced images: each reduced image still starts nicely at a byte*/
-        removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp,
-                          ((passw[i] * bpp + 7) / 8) * 8, passh[i]);
-      }
-    }
-
-    Adam7_deinterlace(out, in, w, h, bpp);
-  }
-
-  return 0;
-}
-
-static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) {
-  unsigned pos = 0, i;
-  if(color->palette) lodepng_free(color->palette);
-  color->palettesize = chunkLength / 3;
-  color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize);
-  if(!color->palette && color->palettesize) {
-    color->palettesize = 0;
-    return 83; /*alloc fail*/
-  }
-  if(color->palettesize > 256) return 38; /*error: palette too big*/
-
-  for(i = 0; i != color->palettesize; ++i) {
-    color->palette[4 * i + 0] = data[pos++]; /*R*/
-    color->palette[4 * i + 1] = data[pos++]; /*G*/
-    color->palette[4 * i + 2] = data[pos++]; /*B*/
-    color->palette[4 * i + 3] = 255; /*alpha*/
-  }
-
-  return 0; /* OK */
-}
-
-static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) {
-  unsigned i;
-  if(color->colortype == LCT_PALETTE) {
-    /*error: more alpha values given than there are palette entries*/
-    if(chunkLength > color->palettesize) return 39;
-
-    for(i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i];
-  } else if(color->colortype == LCT_GREY) {
-    /*error: this chunk must be 2 bytes for grayscale image*/
-    if(chunkLength != 2) return 30;
-
-    color->key_defined = 1;
-    color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1];
-  } else if(color->colortype == LCT_RGB) {
-    /*error: this chunk must be 6 bytes for RGB image*/
-    if(chunkLength != 6) return 41;
-
-    color->key_defined = 1;
-    color->key_r = 256u * data[0] + data[1];
-    color->key_g = 256u * data[2] + data[3];
-    color->key_b = 256u * data[4] + data[5];
-  }
-  else return 42; /*error: tRNS chunk not allowed for other color models*/
-
-  return 0; /* OK */
-}
-
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-/*background color chunk (bKGD)*/
-static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) {
-  if(info->color.colortype == LCT_PALETTE) {
-    /*error: this chunk must be 1 byte for indexed color image*/
-    if(chunkLength != 1) return 43;
-
-    /*error: invalid palette index, or maybe this chunk appeared before PLTE*/
-    if(data[0] >= info->color.palettesize) return 103;
-
-    info->background_defined = 1;
-    info->background_r = info->background_g = info->background_b = data[0];
-  } else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) {
-    /*error: this chunk must be 2 bytes for grayscale image*/
-    if(chunkLength != 2) return 44;
-
-    /*the values are truncated to bitdepth in the PNG file*/
-    info->background_defined = 1;
-    info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1];
-  } else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) {
-    /*error: this chunk must be 6 bytes for grayscale image*/
-    if(chunkLength != 6) return 45;
-
-    /*the values are truncated to bitdepth in the PNG file*/
-    info->background_defined = 1;
-    info->background_r = 256u * data[0] + data[1];
-    info->background_g = 256u * data[2] + data[3];
-    info->background_b = 256u * data[4] + data[5];
-  }
-
-  return 0; /* OK */
-}
-
-/*text chunk (tEXt)*/
-static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) {
-  unsigned error = 0;
-  char *key = 0, *str = 0;
-  unsigned i;
-
-  while(!error) /*not really a while loop, only used to break on error*/ {
-    unsigned length, string2_begin;
-
-    length = 0;
-    while(length < chunkLength && data[length] != 0) ++length;
-    /*even though it's not allowed by the standard, no error is thrown if
-    there's no null termination char, if the text is empty*/
-    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
-
-    key = (char*)lodepng_malloc(length + 1);
-    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
-
-    key[length] = 0;
-    for(i = 0; i != length; ++i) key[i] = (char)data[i];
-
-    string2_begin = length + 1; /*skip keyword null terminator*/
-
-    length = (unsigned)(chunkLength < string2_begin ? 0 : chunkLength - string2_begin);
-    str = (char*)lodepng_malloc(length + 1);
-    if(!str) CERROR_BREAK(error, 83); /*alloc fail*/
-
-    str[length] = 0;
-    for(i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i];
-
-    error = lodepng_add_text(info, key, str);
-
-    break;
-  }
-
-  lodepng_free(key);
-  lodepng_free(str);
-
-  return error;
-}
-
-/*compressed text chunk (zTXt)*/
-static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,
-                               const unsigned char* data, size_t chunkLength) {
-  unsigned error = 0;
-  unsigned i;
-
-  unsigned length, string2_begin;
-  char *key = 0;
-  ucvector decoded;
-
-  ucvector_init(&decoded);
-
-  while(!error) /*not really a while loop, only used to break on error*/ {
-    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;
-    if(length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/
-    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
-
-    key = (char*)lodepng_malloc(length + 1);
-    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
-
-    key[length] = 0;
-    for(i = 0; i != length; ++i) key[i] = (char)data[i];
-
-    if(data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/
-
-    string2_begin = length + 2;
-    if(string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/
-
-    length = (unsigned)chunkLength - string2_begin;
-    /*will fail if zlib error, e.g. if length is too small*/
-    error = zlib_decompress(&decoded.data, &decoded.size,
-                            (unsigned char*)(&data[string2_begin]),
-                            length, zlibsettings);
-    if(error) break;
-    ucvector_push_back(&decoded, 0);
-
-    error = lodepng_add_text(info, key, (char*)decoded.data);
-
-    break;
-  }
-
-  lodepng_free(key);
-  ucvector_cleanup(&decoded);
-
-  return error;
-}
-
-/*international text chunk (iTXt)*/
-static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,
-                               const unsigned char* data, size_t chunkLength) {
-  unsigned error = 0;
-  unsigned i;
-
-  unsigned length, begin, compressed;
-  char *key = 0, *langtag = 0, *transkey = 0;
-  ucvector decoded;
-  ucvector_init(&decoded); /* TODO: only use in case of compressed text */
-
-  while(!error) /*not really a while loop, only used to break on error*/ {
-    /*Quick check if the chunk length isn't too small. Even without check
-    it'd still fail with other error checks below if it's too short. This just gives a different error code.*/
-    if(chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/
-
-    /*read the key*/
-    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;
-    if(length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/
-    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
-
-    key = (char*)lodepng_malloc(length + 1);
-    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
-
-    key[length] = 0;
-    for(i = 0; i != length; ++i) key[i] = (char)data[i];
-
-    /*read the compression method*/
-    compressed = data[length + 1];
-    if(data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/
-
-    /*even though it's not allowed by the standard, no error is thrown if
-    there's no null termination char, if the text is empty for the next 3 texts*/
-
-    /*read the langtag*/
-    begin = length + 3;
-    length = 0;
-    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;
-
-    langtag = (char*)lodepng_malloc(length + 1);
-    if(!langtag) CERROR_BREAK(error, 83); /*alloc fail*/
-
-    langtag[length] = 0;
-    for(i = 0; i != length; ++i) langtag[i] = (char)data[begin + i];
-
-    /*read the transkey*/
-    begin += length + 1;
-    length = 0;
-    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;
-
-    transkey = (char*)lodepng_malloc(length + 1);
-    if(!transkey) CERROR_BREAK(error, 83); /*alloc fail*/
-
-    transkey[length] = 0;
-    for(i = 0; i != length; ++i) transkey[i] = (char)data[begin + i];
-
-    /*read the actual text*/
-    begin += length + 1;
-
-    length = (unsigned)chunkLength < begin ? 0 : (unsigned)chunkLength - begin;
-
-    if(compressed) {
-      /*will fail if zlib error, e.g. if length is too small*/
-      error = zlib_decompress(&decoded.data, &decoded.size,
-                              (unsigned char*)(&data[begin]),
-                              length, zlibsettings);
-      if(error) break;
-      if(decoded.allocsize < decoded.size) decoded.allocsize = decoded.size;
-      ucvector_push_back(&decoded, 0);
-    } else {
-      if(!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/);
-
-      decoded.data[length] = 0;
-      for(i = 0; i != length; ++i) decoded.data[i] = data[begin + i];
-    }
-
-    error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data);
-
-    break;
-  }
-
-  lodepng_free(key);
-  lodepng_free(langtag);
-  lodepng_free(transkey);
-  ucvector_cleanup(&decoded);
-
-  return error;
-}
-
-static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) {
-  if(chunkLength != 7) return 73; /*invalid tIME chunk size*/
-
-  info->time_defined = 1;
-  info->time.year = 256u * data[0] + data[1];
-  info->time.month = data[2];
-  info->time.day = data[3];
-  info->time.hour = data[4];
-  info->time.minute = data[5];
-  info->time.second = data[6];
-
-  return 0; /* OK */
-}
-
-static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) {
-  if(chunkLength != 9) return 74; /*invalid pHYs chunk size*/
-
-  info->phys_defined = 1;
-  info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3];
-  info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7];
-  info->phys_unit = data[8];
-
-  return 0; /* OK */
-}
-
-static unsigned readChunk_gAMA(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) {
-  if(chunkLength != 4) return 96; /*invalid gAMA chunk size*/
-
-  info->gama_defined = 1;
-  info->gama_gamma = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3];
-
-  return 0; /* OK */
-}
-
-static unsigned readChunk_cHRM(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) {
-  if(chunkLength != 32) return 97; /*invalid cHRM chunk size*/
-
-  info->chrm_defined = 1;
-  info->chrm_white_x = 16777216u * data[ 0] + 65536u * data[ 1] + 256u * data[ 2] + data[ 3];
-  info->chrm_white_y = 16777216u * data[ 4] + 65536u * data[ 5] + 256u * data[ 6] + data[ 7];
-  info->chrm_red_x   = 16777216u * data[ 8] + 65536u * data[ 9] + 256u * data[10] + data[11];
-  info->chrm_red_y   = 16777216u * data[12] + 65536u * data[13] + 256u * data[14] + data[15];
-  info->chrm_green_x = 16777216u * data[16] + 65536u * data[17] + 256u * data[18] + data[19];
-  info->chrm_green_y = 16777216u * data[20] + 65536u * data[21] + 256u * data[22] + data[23];
-  info->chrm_blue_x  = 16777216u * data[24] + 65536u * data[25] + 256u * data[26] + data[27];
-  info->chrm_blue_y  = 16777216u * data[28] + 65536u * data[29] + 256u * data[30] + data[31];
-
-  return 0; /* OK */
-}
-
-static unsigned readChunk_sRGB(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) {
-  if(chunkLength != 1) return 98; /*invalid sRGB chunk size (this one is never ignored)*/
-
-  info->srgb_defined = 1;
-  info->srgb_intent = data[0];
-
-  return 0; /* OK */
-}
-
-static unsigned readChunk_iCCP(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,
-                               const unsigned char* data, size_t chunkLength) {
-  unsigned error = 0;
-  unsigned i;
-
-  unsigned length, string2_begin;
-  ucvector decoded;
-
-  info->iccp_defined = 1;
-  if(info->iccp_name) lodepng_clear_icc(info);
-
-  for(length = 0; length < chunkLength && data[length] != 0; ++length) ;
-  if(length + 2 >= chunkLength) return 75; /*no null termination, corrupt?*/
-  if(length < 1 || length > 79) return 89; /*keyword too short or long*/
-
-  info->iccp_name = (char*)lodepng_malloc(length + 1);
-  if(!info->iccp_name) return 83; /*alloc fail*/
-
-  info->iccp_name[length] = 0;
-  for(i = 0; i != length; ++i) info->iccp_name[i] = (char)data[i];
-
-  if(data[length + 1] != 0) return 72; /*the 0 byte indicating compression must be 0*/
-
-  string2_begin = length + 2;
-  if(string2_begin > chunkLength) return 75; /*no null termination, corrupt?*/
-
-  length = (unsigned)chunkLength - string2_begin;
-  ucvector_init(&decoded);
-  error = zlib_decompress(&decoded.data, &decoded.size,
-                          (unsigned char*)(&data[string2_begin]),
-                          length, zlibsettings);
-  if(!error) {
-    info->iccp_profile_size = decoded.size;
-    info->iccp_profile = (unsigned char*)lodepng_malloc(decoded.size);
-    if(info->iccp_profile) {
-      memcpy(info->iccp_profile, decoded.data, decoded.size);
-    } else {
-      error = 83; /* alloc fail */
-    }
-  }
-  ucvector_cleanup(&decoded);
-  return error;
-}
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-unsigned lodepng_inspect_chunk(LodePNGState* state, size_t pos,
-                               const unsigned char* in, size_t insize) {
-  const unsigned char* chunk = in + pos;
-  unsigned chunkLength;
-  const unsigned char* data;
-  unsigned unhandled = 0;
-  unsigned error = 0;
-
-  if (pos + 4 > insize) return 30;
-  chunkLength = lodepng_chunk_length(chunk);
-  if(chunkLength > 2147483647) return 63;
-  data = lodepng_chunk_data_const(chunk);
-  if(data + chunkLength + 4 > in + insize) return 30;
-
-  if(lodepng_chunk_type_equals(chunk, "PLTE")) {
-    error = readChunk_PLTE(&state->info_png.color, data, chunkLength);
-  } else if(lodepng_chunk_type_equals(chunk, "tRNS")) {
-    error = readChunk_tRNS(&state->info_png.color, data, chunkLength);
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  } else if(lodepng_chunk_type_equals(chunk, "bKGD")) {
-    error = readChunk_bKGD(&state->info_png, data, chunkLength);
-  } else if(lodepng_chunk_type_equals(chunk, "tEXt")) {
-    error = readChunk_tEXt(&state->info_png, data, chunkLength);
-  } else if(lodepng_chunk_type_equals(chunk, "zTXt")) {
-    error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
-  } else if(lodepng_chunk_type_equals(chunk, "iTXt")) {
-    error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
-  } else if(lodepng_chunk_type_equals(chunk, "tIME")) {
-    error = readChunk_tIME(&state->info_png, data, chunkLength);
-  } else if(lodepng_chunk_type_equals(chunk, "pHYs")) {
-    error = readChunk_pHYs(&state->info_png, data, chunkLength);
-  } else if(lodepng_chunk_type_equals(chunk, "gAMA")) {
-    error = readChunk_gAMA(&state->info_png, data, chunkLength);
-  } else if(lodepng_chunk_type_equals(chunk, "cHRM")) {
-    error = readChunk_cHRM(&state->info_png, data, chunkLength);
-  } else if(lodepng_chunk_type_equals(chunk, "sRGB")) {
-    error = readChunk_sRGB(&state->info_png, data, chunkLength);
-  } else if(lodepng_chunk_type_equals(chunk, "iCCP")) {
-    error = readChunk_iCCP(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-  } else {
-    /* unhandled chunk is ok (is not an error) */
-    unhandled = 1;
-  }
-
-  if(!error && !unhandled && !state->decoder.ignore_crc) {
-    if(lodepng_chunk_check_crc(chunk)) return 57; /*invalid CRC*/
-  }
-
-  return error;
-}
-
-/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/
-static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,
-                          LodePNGState* state,
-                          const unsigned char* in, size_t insize) {
-  unsigned char IEND = 0;
-  const unsigned char* chunk;
-  size_t i;
-  ucvector idat; /*the data from idat chunks*/
-  ucvector scanlines;
-  size_t predict;
-  size_t outsize = 0;
-
-  /*for unknown chunk order*/
-  unsigned unknown = 0;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-
-  /* safe output values in case error happens */
-  *out = 0;
-  *w = *h = 0;
-
-  state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/
-  if(state->error) return;
-
-  if(lodepng_pixel_overflow(*w, *h, &state->info_png.color, &state->info_raw)) {
-    CERROR_RETURN(state->error, 92); /*overflow possible due to amount of pixels*/
-  }
-
-  ucvector_init(&idat);
-  chunk = &in[33]; /*first byte of the first chunk after the header*/
-
-  /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk.
-  IDAT data is put at the start of the in buffer*/
-  while(!IEND && !state->error) {
-    unsigned chunkLength;
-    const unsigned char* data; /*the data in the chunk*/
-
-    /*error: size of the in buffer too small to contain next chunk*/
-    if((size_t)((chunk - in) + 12) > insize || chunk < in) {
-      if(state->decoder.ignore_end) break; /*other errors may still happen though*/
-      CERROR_BREAK(state->error, 30);
-    }
-
-    /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/
-    chunkLength = lodepng_chunk_length(chunk);
-    /*error: chunk length larger than the max PNG chunk size*/
-    if(chunkLength > 2147483647) {
-      if(state->decoder.ignore_end) break; /*other errors may still happen though*/
-      CERROR_BREAK(state->error, 63);
-    }
-
-    if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in) {
-      CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/
-    }
-
-    data = lodepng_chunk_data_const(chunk);
-
-    unknown = 0;
-
-    /*IDAT chunk, containing compressed image data*/
-    if(lodepng_chunk_type_equals(chunk, "IDAT")) {
-      size_t oldsize = idat.size;
-      size_t newsize;
-      if(lodepng_addofl(oldsize, chunkLength, &newsize)) CERROR_BREAK(state->error, 95);
-      if(!ucvector_resize(&idat, newsize)) CERROR_BREAK(state->error, 83 /*alloc fail*/);
-      for(i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i];
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-      critical_pos = 3;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-    } else if(lodepng_chunk_type_equals(chunk, "IEND")) {
-      /*IEND chunk*/
-      IEND = 1;
-    } else if(lodepng_chunk_type_equals(chunk, "PLTE")) {
-      /*palette chunk (PLTE)*/
-      state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength);
-      if(state->error) break;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-      critical_pos = 2;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-    } else if(lodepng_chunk_type_equals(chunk, "tRNS")) {
-      /*palette transparency chunk (tRNS). Even though this one is an ancillary chunk , it is still compiled
-      in without 'LODEPNG_COMPILE_ANCILLARY_CHUNKS' because it contains essential color information that
-      affects the alpha channel of pixels. */
-      state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength);
-      if(state->error) break;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-      /*background color chunk (bKGD)*/
-    } else if(lodepng_chunk_type_equals(chunk, "bKGD")) {
-      state->error = readChunk_bKGD(&state->info_png, data, chunkLength);
-      if(state->error) break;
-    } else if(lodepng_chunk_type_equals(chunk, "tEXt")) {
-      /*text chunk (tEXt)*/
-      if(state->decoder.read_text_chunks) {
-        state->error = readChunk_tEXt(&state->info_png, data, chunkLength);
-        if(state->error) break;
-      }
-    } else if(lodepng_chunk_type_equals(chunk, "zTXt")) {
-      /*compressed text chunk (zTXt)*/
-      if(state->decoder.read_text_chunks) {
-        state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
-        if(state->error) break;
-      }
-    } else if(lodepng_chunk_type_equals(chunk, "iTXt")) {
-      /*international text chunk (iTXt)*/
-      if(state->decoder.read_text_chunks) {
-        state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
-        if(state->error) break;
-      }
-    } else if(lodepng_chunk_type_equals(chunk, "tIME")) {
-      state->error = readChunk_tIME(&state->info_png, data, chunkLength);
-      if(state->error) break;
-    } else if(lodepng_chunk_type_equals(chunk, "pHYs")) {
-      state->error = readChunk_pHYs(&state->info_png, data, chunkLength);
-      if(state->error) break;
-    } else if(lodepng_chunk_type_equals(chunk, "gAMA")) {
-      state->error = readChunk_gAMA(&state->info_png, data, chunkLength);
-      if(state->error) break;
-    } else if(lodepng_chunk_type_equals(chunk, "cHRM")) {
-      state->error = readChunk_cHRM(&state->info_png, data, chunkLength);
-      if(state->error) break;
-    } else if(lodepng_chunk_type_equals(chunk, "sRGB")) {
-      state->error = readChunk_sRGB(&state->info_png, data, chunkLength);
-      if(state->error) break;
-    } else if(lodepng_chunk_type_equals(chunk, "iCCP")) {
-      state->error = readChunk_iCCP(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
-      if(state->error) break;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-    } else /*it's not an implemented chunk type, so ignore it: skip over the data*/ {
-      /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/
-      if(!state->decoder.ignore_critical && !lodepng_chunk_ancillary(chunk)) {
-        CERROR_BREAK(state->error, 69);
-      }
-
-      unknown = 1;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-      if(state->decoder.remember_unknown_chunks) {
-        state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1],
-                                            &state->info_png.unknown_chunks_size[critical_pos - 1], chunk);
-        if(state->error) break;
-      }
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-    }
-
-    if(!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/ {
-      if(lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/
-    }
-
-    if(!IEND) chunk = lodepng_chunk_next_const(chunk);
-  }
-
-  ucvector_init(&scanlines);
-  /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation.
-  If the decompressed size does not match the prediction, the image must be corrupt.*/
-  if(state->info_png.interlace_method == 0) {
-    predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color);
-  } else {
-    /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/
-    const LodePNGColorMode* color = &state->info_png.color;
-    predict = 0;
-    predict += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, color);
-    if(*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, color);
-    predict += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, color);
-    if(*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, color);
-    predict += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, color);
-    if(*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, color);
-    predict += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, color);
-  }
-  if(!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/
-  if(!state->error) {
-    state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data,
-                                   idat.size, &state->decoder.zlibsettings);
-    if(!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/
-  }
-  ucvector_cleanup(&idat);
-
-  if(!state->error) {
-    outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color);
-    *out = (unsigned char*)lodepng_malloc(outsize);
-    if(!*out) state->error = 83; /*alloc fail*/
-  }
-  if(!state->error) {
-    for(i = 0; i < outsize; i++) (*out)[i] = 0;
-    state->error = postProcessScanlines(*out, scanlines.data, *w, *h, &state->info_png);
-  }
-  ucvector_cleanup(&scanlines);
-}
-
-unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
-                        LodePNGState* state,
-                        const unsigned char* in, size_t insize) {
-  *out = 0;
-  decodeGeneric(out, w, h, state, in, insize);
-  if(state->error) return state->error;
-  if(!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color)) {
-    /*same color type, no copying or converting of data needed*/
-    /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype
-    the raw image has to the end user*/
-    if(!state->decoder.color_convert) {
-      state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color);
-      if(state->error) return state->error;
-    }
-  } else {
-    /*color conversion needed; sort of copy of the data*/
-    unsigned char* data = *out;
-    size_t outsize;
-
-    /*TODO: check if this works according to the statement in the documentation: "The converter can convert
-    from grayscale input color type, to 8-bit grayscale or grayscale with alpha"*/
-    if(!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA)
-       && !(state->info_raw.bitdepth == 8)) {
-      return 56; /*unsupported color mode conversion*/
-    }
-
-    outsize = lodepng_get_raw_size(*w, *h, &state->info_raw);
-    *out = (unsigned char*)lodepng_malloc(outsize);
-    if(!(*out)) {
-      state->error = 83; /*alloc fail*/
-    }
-    else state->error = lodepng_convert(*out, data, &state->info_raw,
-                                        &state->info_png.color, *w, *h);
-    lodepng_free(data);
-  }
-  return state->error;
-}
-
-unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in,
-                               size_t insize, LodePNGColorType colortype, unsigned bitdepth) {
-  unsigned error;
-  LodePNGState state;
-  lodepng_state_init(&state);
-  state.info_raw.colortype = colortype;
-  state.info_raw.bitdepth = bitdepth;
-  error = lodepng_decode(out, w, h, &state, in, insize);
-  lodepng_state_cleanup(&state);
-  return error;
-}
-
-unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) {
-  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8);
-}
-
-unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) {
-  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8);
-}
-
-#ifdef LODEPNG_COMPILE_DISK
-unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename,
-                             LodePNGColorType colortype, unsigned bitdepth) {
-  unsigned char* buffer = 0;
-  size_t buffersize;
-  unsigned error;
-  /* safe output values in case error happens */
-  *out = 0;
-  *w = *h = 0;
-  error = lodepng_load_file(&buffer, &buffersize, filename);
-  if(!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth);
-  lodepng_free(buffer);
-  return error;
-}
-
-unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) {
-  return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8);
-}
-
-unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) {
-  return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8);
-}
-#endif /*LODEPNG_COMPILE_DISK*/
-
-void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings) {
-  settings->color_convert = 1;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  settings->read_text_chunks = 1;
-  settings->remember_unknown_chunks = 0;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-  settings->ignore_crc = 0;
-  settings->ignore_critical = 0;
-  settings->ignore_end = 0;
-  lodepng_decompress_settings_init(&settings->zlibsettings);
-}
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)
-
-void lodepng_state_init(LodePNGState* state) {
-#ifdef LODEPNG_COMPILE_DECODER
-  lodepng_decoder_settings_init(&state->decoder);
-#endif /*LODEPNG_COMPILE_DECODER*/
-#ifdef LODEPNG_COMPILE_ENCODER
-  lodepng_encoder_settings_init(&state->encoder);
-#endif /*LODEPNG_COMPILE_ENCODER*/
-  lodepng_color_mode_init(&state->info_raw);
-  lodepng_info_init(&state->info_png);
-  state->error = 1;
-}
-
-void lodepng_state_cleanup(LodePNGState* state) {
-  lodepng_color_mode_cleanup(&state->info_raw);
-  lodepng_info_cleanup(&state->info_png);
-}
-
-void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source) {
-  lodepng_state_cleanup(dest);
-  *dest = *source;
-  lodepng_color_mode_init(&dest->info_raw);
-  lodepng_info_init(&dest->info_png);
-  dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if(dest->error) return;
-  dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if(dest->error) return;
-}
-
-#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / PNG Encoder                                                            / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*chunkName must be string of 4 characters*/
-static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length) {
-  CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data));
-  out->allocsize = out->size; /*fix the allocsize again*/
-  return 0;
-}
-
-static void writeSignature(ucvector* out) {
-  /*8 bytes PNG signature, aka the magic bytes*/
-  ucvector_push_back(out, 137);
-  ucvector_push_back(out, 80);
-  ucvector_push_back(out, 78);
-  ucvector_push_back(out, 71);
-  ucvector_push_back(out, 13);
-  ucvector_push_back(out, 10);
-  ucvector_push_back(out, 26);
-  ucvector_push_back(out, 10);
-}
-
-static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h,
-                              LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method) {
-  unsigned error = 0;
-  ucvector header;
-  ucvector_init(&header);
-
-  lodepng_add32bitInt(&header, w); /*width*/
-  lodepng_add32bitInt(&header, h); /*height*/
-  ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/
-  ucvector_push_back(&header, (unsigned char)colortype); /*color type*/
-  ucvector_push_back(&header, 0); /*compression method*/
-  ucvector_push_back(&header, 0); /*filter method*/
-  ucvector_push_back(&header, interlace_method); /*interlace method*/
-
-  error = addChunk(out, "IHDR", header.data, header.size);
-  ucvector_cleanup(&header);
-
-  return error;
-}
-
-static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info) {
-  unsigned error = 0;
-  size_t i;
-  ucvector PLTE;
-  ucvector_init(&PLTE);
-  for(i = 0; i != info->palettesize * 4; ++i) {
-    /*add all channels except alpha channel*/
-    if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]);
-  }
-  error = addChunk(out, "PLTE", PLTE.data, PLTE.size);
-  ucvector_cleanup(&PLTE);
-
-  return error;
-}
-
-static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info) {
-  unsigned error = 0;
-  size_t i;
-  ucvector tRNS;
-  ucvector_init(&tRNS);
-  if(info->colortype == LCT_PALETTE) {
-    size_t amount = info->palettesize;
-    /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/
-    for(i = info->palettesize; i != 0; --i) {
-      if(info->palette[4 * (i - 1) + 3] == 255) --amount;
-      else break;
-    }
-    /*add only alpha channel*/
-    for(i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]);
-  } else if(info->colortype == LCT_GREY) {
-    if(info->key_defined) {
-      ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8));
-      ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255));
-    }
-  } else if(info->colortype == LCT_RGB) {
-    if(info->key_defined) {
-      ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8));
-      ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255));
-      ucvector_push_back(&tRNS, (unsigned char)(info->key_g >> 8));
-      ucvector_push_back(&tRNS, (unsigned char)(info->key_g & 255));
-      ucvector_push_back(&tRNS, (unsigned char)(info->key_b >> 8));
-      ucvector_push_back(&tRNS, (unsigned char)(info->key_b & 255));
-    }
-  }
-
-  error = addChunk(out, "tRNS", tRNS.data, tRNS.size);
-  ucvector_cleanup(&tRNS);
-
-  return error;
-}
-
-static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize,
-                              LodePNGCompressSettings* zlibsettings) {
-  ucvector zlibdata;
-  unsigned error = 0;
-
-  /*compress with the Zlib compressor*/
-  ucvector_init(&zlibdata);
-  error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings);
-  if(!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size);
-  ucvector_cleanup(&zlibdata);
-
-  return error;
-}
-
-static unsigned addChunk_IEND(ucvector* out) {
-  unsigned error = 0;
-  error = addChunk(out, "IEND", 0, 0);
-  return error;
-}
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-
-static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring) {
-  unsigned error = 0;
-  size_t i;
-  ucvector text;
-  ucvector_init(&text);
-  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]);
-  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
-  ucvector_push_back(&text, 0); /*0 termination char*/
-  for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]);
-  error = addChunk(out, "tEXt", text.data, text.size);
-  ucvector_cleanup(&text);
-
-  return error;
-}
-
-static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring,
-                              LodePNGCompressSettings* zlibsettings) {
-  unsigned error = 0;
-  ucvector data, compressed;
-  size_t i, textsize = strlen(textstring);
-
-  ucvector_init(&data);
-  ucvector_init(&compressed);
-  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);
-  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
-  ucvector_push_back(&data, 0); /*0 termination char*/
-  ucvector_push_back(&data, 0); /*compression method: 0*/
-
-  error = zlib_compress(&compressed.data, &compressed.size,
-                        (unsigned char*)textstring, textsize, zlibsettings);
-  if(!error) {
-    for(i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]);
-    error = addChunk(out, "zTXt", data.data, data.size);
-  }
-
-  ucvector_cleanup(&compressed);
-  ucvector_cleanup(&data);
-  return error;
-}
-
-static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag,
-                              const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings) {
-  unsigned error = 0;
-  ucvector data;
-  size_t i, textsize = strlen(textstring);
-
-  ucvector_init(&data);
-
-  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);
-  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
-  ucvector_push_back(&data, 0); /*null termination char*/
-  ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/
-  ucvector_push_back(&data, 0); /*compression method*/
-  for(i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]);
-  ucvector_push_back(&data, 0); /*null termination char*/
-  for(i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]);
-  ucvector_push_back(&data, 0); /*null termination char*/
-
-  if(compressed) {
-    ucvector compressed_data;
-    ucvector_init(&compressed_data);
-    error = zlib_compress(&compressed_data.data, &compressed_data.size,
-                          (unsigned char*)textstring, textsize, zlibsettings);
-    if(!error) {
-      for(i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]);
-    }
-    ucvector_cleanup(&compressed_data);
-  } else /*not compressed*/ {
-    for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]);
-  }
-
-  if(!error) error = addChunk(out, "iTXt", data.data, data.size);
-  ucvector_cleanup(&data);
-  return error;
-}
-
-static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info) {
-  unsigned error = 0;
-  ucvector bKGD;
-  ucvector_init(&bKGD);
-  if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) {
-    ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8));
-    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255));
-  } else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) {
-    ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8));
-    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255));
-    ucvector_push_back(&bKGD, (unsigned char)(info->background_g >> 8));
-    ucvector_push_back(&bKGD, (unsigned char)(info->background_g & 255));
-    ucvector_push_back(&bKGD, (unsigned char)(info->background_b >> 8));
-    ucvector_push_back(&bKGD, (unsigned char)(info->background_b & 255));
-  } else if(info->color.colortype == LCT_PALETTE) {
-    ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); /*palette index*/
-  }
-
-  error = addChunk(out, "bKGD", bKGD.data, bKGD.size);
-  ucvector_cleanup(&bKGD);
-
-  return error;
-}
-
-static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time) {
-  unsigned error = 0;
-  unsigned char* data = (unsigned char*)lodepng_malloc(7);
-  if(!data) return 83; /*alloc fail*/
-  data[0] = (unsigned char)(time->year >> 8);
-  data[1] = (unsigned char)(time->year & 255);
-  data[2] = (unsigned char)time->month;
-  data[3] = (unsigned char)time->day;
-  data[4] = (unsigned char)time->hour;
-  data[5] = (unsigned char)time->minute;
-  data[6] = (unsigned char)time->second;
-  error = addChunk(out, "tIME", data, 7);
-  lodepng_free(data);
-  return error;
-}
-
-static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info) {
-  unsigned error = 0;
-  ucvector data;
-  ucvector_init(&data);
-
-  lodepng_add32bitInt(&data, info->phys_x);
-  lodepng_add32bitInt(&data, info->phys_y);
-  ucvector_push_back(&data, info->phys_unit);
-
-  error = addChunk(out, "pHYs", data.data, data.size);
-  ucvector_cleanup(&data);
-
-  return error;
-}
-
-static unsigned addChunk_gAMA(ucvector* out, const LodePNGInfo* info) {
-  unsigned error = 0;
-  ucvector data;
-  ucvector_init(&data);
-
-  lodepng_add32bitInt(&data, info->gama_gamma);
-
-  error = addChunk(out, "gAMA", data.data, data.size);
-  ucvector_cleanup(&data);
-
-  return error;
-}
-
-static unsigned addChunk_cHRM(ucvector* out, const LodePNGInfo* info) {
-  unsigned error = 0;
-  ucvector data;
-  ucvector_init(&data);
-
-  lodepng_add32bitInt(&data, info->chrm_white_x);
-  lodepng_add32bitInt(&data, info->chrm_white_y);
-  lodepng_add32bitInt(&data, info->chrm_red_x);
-  lodepng_add32bitInt(&data, info->chrm_red_y);
-  lodepng_add32bitInt(&data, info->chrm_green_x);
-  lodepng_add32bitInt(&data, info->chrm_green_y);
-  lodepng_add32bitInt(&data, info->chrm_blue_x);
-  lodepng_add32bitInt(&data, info->chrm_blue_y);
-
-  error = addChunk(out, "cHRM", data.data, data.size);
-  ucvector_cleanup(&data);
-
-  return error;
-}
-
-static unsigned addChunk_sRGB(ucvector* out, const LodePNGInfo* info) {
-  unsigned char data = info->srgb_intent;
-  return addChunk(out, "sRGB", &data, 1);
-}
-
-static unsigned addChunk_iCCP(ucvector* out, const LodePNGInfo* info, LodePNGCompressSettings* zlibsettings) {
-  unsigned error = 0;
-  ucvector data, compressed;
-  size_t i;
-
-  ucvector_init(&data);
-  ucvector_init(&compressed);
-  for(i = 0; info->iccp_name[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)info->iccp_name[i]);
-  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
-  ucvector_push_back(&data, 0); /*0 termination char*/
-  ucvector_push_back(&data, 0); /*compression method: 0*/
-
-  error = zlib_compress(&compressed.data, &compressed.size,
-                        info->iccp_profile, info->iccp_profile_size, zlibsettings);
-  if(!error) {
-    for(i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]);
-    error = addChunk(out, "iCCP", data.data, data.size);
-  }
-
-  ucvector_cleanup(&compressed);
-  ucvector_cleanup(&data);
-  return error;
-}
-
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline,
-                           size_t length, size_t bytewidth, unsigned char filterType) {
-  size_t i;
-  switch(filterType) {
-    case 0: /*None*/
-      for(i = 0; i != length; ++i) out[i] = scanline[i];
-      break;
-    case 1: /*Sub*/
-      for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
-      for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth];
-      break;
-    case 2: /*Up*/
-      if(prevline) {
-        for(i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i];
-      } else {
-        for(i = 0; i != length; ++i) out[i] = scanline[i];
-      }
-      break;
-    case 3: /*Average*/
-      if(prevline) {
-        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1);
-        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1);
-      } else {
-        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
-        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1);
-      }
-      break;
-    case 4: /*Paeth*/
-      if(prevline) {
-        /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/
-        for(i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]);
-        for(i = bytewidth; i < length; ++i) {
-          out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth]));
-        }
-      } else {
-        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
-        /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/
-        for(i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]);
-      }
-      break;
-    default: return; /*unexisting filter type given*/
-  }
-}
-
-/* log2 approximation. A slight bit faster than std::log. */
-static float flog2(float f) {
-  float result = 0;
-  while(f > 32) { result += 4; f /= 16; }
-  while(f > 2) { ++result; f /= 2; }
-  return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f);
-}
-
-static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h,
-                       const LodePNGColorMode* info, const LodePNGEncoderSettings* settings) {
-  /*
-  For PNG filter method 0
-  out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are
-  the scanlines with 1 extra byte per scanline
-  */
-
-  unsigned bpp = lodepng_get_bpp(info);
-  /*the width of a scanline in bytes, not including the filter type*/
-  size_t linebytes = (w * bpp + 7) / 8;
-  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/
-  size_t bytewidth = (bpp + 7) / 8;
-  const unsigned char* prevline = 0;
-  unsigned x, y;
-  unsigned error = 0;
-  LodePNGFilterStrategy strategy = settings->filter_strategy;
-
-  /*
-  There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard:
-   *  If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e.
-      use fixed filtering, with the filter None).
-   * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is
-     not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply
-     all five filters and select the filter that produces the smallest sum of absolute values per row.
-  This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true.
-
-  If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed,
-  but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum
-  heuristic is used.
-  */
-  if(settings->filter_palette_zero &&
-     (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO;
-
-  if(bpp == 0) return 31; /*error: invalid color type*/
-
-  if(strategy == LFS_ZERO) {
-    for(y = 0; y != h; ++y) {
-      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
-      size_t inindex = linebytes * y;
-      out[outindex] = 0; /*filter type byte*/
-      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0);
-      prevline = &in[inindex];
-    }
-  } else if(strategy == LFS_MINSUM) {
-    /*adaptive filtering*/
-    size_t sum[5];
-    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/
-    size_t smallest = 0;
-    unsigned char type, bestType = 0;
-
-    for(type = 0; type != 5; ++type) {
-      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);
-      if(!attempt[type]) return 83; /*alloc fail*/
-    }
-
-    if(!error) {
-      for(y = 0; y != h; ++y) {
-        /*try the 5 filter types*/
-        for(type = 0; type != 5; ++type) {
-          filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);
-
-          /*calculate the sum of the result*/
-          sum[type] = 0;
-          if(type == 0) {
-            for(x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type][x]);
-          } else {
-            for(x = 0; x != linebytes; ++x) {
-              /*For differences, each byte should be treated as signed, values above 127 are negative
-              (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there.
-              This means filtertype 0 is almost never chosen, but that is justified.*/
-              unsigned char s = attempt[type][x];
-              sum[type] += s < 128 ? s : (255U - s);
-            }
-          }
-
-          /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/
-          if(type == 0 || sum[type] < smallest) {
-            bestType = type;
-            smallest = sum[type];
-          }
-        }
-
-        prevline = &in[y * linebytes];
-
-        /*now fill the out values*/
-        out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
-        for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];
-      }
-    }
-
-    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);
-  } else if(strategy == LFS_ENTROPY) {
-    float sum[5];
-    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/
-    float smallest = 0;
-    unsigned type, bestType = 0;
-    unsigned count[256];
-
-    for(type = 0; type != 5; ++type) {
-      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);
-      if(!attempt[type]) return 83; /*alloc fail*/
-    }
-
-    for(y = 0; y != h; ++y) {
-      /*try the 5 filter types*/
-      for(type = 0; type != 5; ++type) {
-        filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);
-        for(x = 0; x != 256; ++x) count[x] = 0;
-        for(x = 0; x != linebytes; ++x) ++count[attempt[type][x]];
-        ++count[type]; /*the filter type itself is part of the scanline*/
-        sum[type] = 0;
-        for(x = 0; x != 256; ++x) {
-          float p = count[x] / (float)(linebytes + 1);
-          sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p;
-        }
-        /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/
-        if(type == 0 || sum[type] < smallest) {
-          bestType = type;
-          smallest = sum[type];
-        }
-      }
-
-      prevline = &in[y * linebytes];
-
-      /*now fill the out values*/
-      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
-      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];
-    }
-
-    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);
-  } else if(strategy == LFS_PREDEFINED) {
-    for(y = 0; y != h; ++y) {
-      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
-      size_t inindex = linebytes * y;
-      unsigned char type = settings->predefined_filters[y];
-      out[outindex] = type; /*filter type byte*/
-      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type);
-      prevline = &in[inindex];
-    }
-  } else if(strategy == LFS_BRUTE_FORCE) {
-    /*brute force filter chooser.
-    deflate the scanline after every filter attempt to see which one deflates best.
-    This is very slow and gives only slightly smaller, sometimes even larger, result*/
-    size_t size[5];
-    unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/
-    size_t smallest = 0;
-    unsigned type = 0, bestType = 0;
-    unsigned char* dummy;
-    LodePNGCompressSettings zlibsettings = settings->zlibsettings;
-    /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose,
-    to simulate the true case where the tree is the same for the whole image. Sometimes it gives
-    better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare
-    cases better compression. It does make this a bit less slow, so it's worth doing this.*/
-    zlibsettings.btype = 1;
-    /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG
-    images only, so disable it*/
-    zlibsettings.custom_zlib = 0;
-    zlibsettings.custom_deflate = 0;
-    for(type = 0; type != 5; ++type) {
-      attempt[type] = (unsigned char*)lodepng_malloc(linebytes);
-      if(!attempt[type]) return 83; /*alloc fail*/
-    }
-    for(y = 0; y != h; ++y) /*try the 5 filter types*/ {
-      for(type = 0; type != 5; ++type) {
-        unsigned testsize = (unsigned)linebytes;
-        /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/
-
-        filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type);
-        size[type] = 0;
-        dummy = 0;
-        zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings);
-        lodepng_free(dummy);
-        /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/
-        if(type == 0 || size[type] < smallest) {
-          bestType = type;
-          smallest = size[type];
-        }
-      }
-      prevline = &in[y * linebytes];
-      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
-      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x];
-    }
-    for(type = 0; type != 5; ++type) lodepng_free(attempt[type]);
-  }
-  else return 88; /* unknown filter strategy */
-
-  return error;
-}
-
-static void addPaddingBits(unsigned char* out, const unsigned char* in,
-                           size_t olinebits, size_t ilinebits, unsigned h) {
-  /*The opposite of the removePaddingBits function
-  olinebits must be >= ilinebits*/
-  unsigned y;
-  size_t diff = olinebits - ilinebits;
-  size_t obp = 0, ibp = 0; /*bit pointers*/
-  for(y = 0; y != h; ++y) {
-    size_t x;
-    for(x = 0; x < ilinebits; ++x) {
-      unsigned char bit = readBitFromReversedStream(&ibp, in);
-      setBitOfReversedStream(&obp, out, bit);
-    }
-    /*obp += diff; --> no, fill in some value in the padding bits too, to avoid
-    "Use of uninitialised value of size ###" warning from valgrind*/
-    for(x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0);
-  }
-}
-
-/*
-in: non-interlaced image with size w*h
-out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with
- no padding bits between scanlines, but between reduced images so that each
- reduced image starts at a byte.
-bpp: bits per pixel
-there are no padding bits, not between scanlines, not between reduced images
-in has the following size in bits: w * h * bpp.
-out is possibly bigger due to padding bits between reduced images
-NOTE: comments about padding bits are only relevant if bpp < 8
-*/
-static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) {
-  unsigned passw[7], passh[7];
-  size_t filter_passstart[8], padded_passstart[8], passstart[8];
-  unsigned i;
-
-  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
-
-  if(bpp >= 8) {
-    for(i = 0; i != 7; ++i) {
-      unsigned x, y, b;
-      size_t bytewidth = bpp / 8;
-      for(y = 0; y < passh[i]; ++y)
-      for(x = 0; x < passw[i]; ++x) {
-        size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;
-        size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth;
-        for(b = 0; b < bytewidth; ++b) {
-          out[pixeloutstart + b] = in[pixelinstart + b];
-        }
-      }
-    }
-  } else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ {
-    for(i = 0; i != 7; ++i) {
-      unsigned x, y, b;
-      unsigned ilinebits = bpp * passw[i];
-      unsigned olinebits = bpp * w;
-      size_t obp, ibp; /*bit pointers (for out and in buffer)*/
-      for(y = 0; y < passh[i]; ++y)
-      for(x = 0; x < passw[i]; ++x) {
-        ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;
-        obp = (8 * passstart[i]) + (y * ilinebits + x * bpp);
-        for(b = 0; b < bpp; ++b) {
-          unsigned char bit = readBitFromReversedStream(&ibp, in);
-          setBitOfReversedStream(&obp, out, bit);
-        }
-      }
-    }
-  }
-}
-
-/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image.
-return value is error**/
-static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in,
-                                    unsigned w, unsigned h,
-                                    const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings) {
-  /*
-  This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps:
-  *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter
-  *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter
-  */
-  unsigned bpp = lodepng_get_bpp(&info_png->color);
-  unsigned error = 0;
-
-  if(info_png->interlace_method == 0) {
-    *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/
-    *out = (unsigned char*)lodepng_malloc(*outsize);
-    if(!(*out) && (*outsize)) error = 83; /*alloc fail*/
-
-    if(!error) {
-      /*non multiple of 8 bits per scanline, padding bits needed per scanline*/
-      if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) {
-        unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8));
-        if(!padded) error = 83; /*alloc fail*/
-        if(!error) {
-          addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h);
-          error = filter(*out, padded, w, h, &info_png->color, settings);
-        }
-        lodepng_free(padded);
-      } else {
-        /*we can immediately filter into the out buffer, no other steps needed*/
-        error = filter(*out, in, w, h, &info_png->color, settings);
-      }
-    }
-  } else /*interlace_method is 1 (Adam7)*/ {
-    unsigned passw[7], passh[7];
-    size_t filter_passstart[8], padded_passstart[8], passstart[8];
-    unsigned char* adam7;
-
-    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
-
-    *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/
-    *out = (unsigned char*)lodepng_malloc(*outsize);
-    if(!(*out)) error = 83; /*alloc fail*/
-
-    adam7 = (unsigned char*)lodepng_malloc(passstart[7]);
-    if(!adam7 && passstart[7]) error = 83; /*alloc fail*/
-
-    if(!error) {
-      unsigned i;
-
-      Adam7_interlace(adam7, in, w, h, bpp);
-      for(i = 0; i != 7; ++i) {
-        if(bpp < 8) {
-          unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]);
-          if(!padded) ERROR_BREAK(83); /*alloc fail*/
-          addPaddingBits(padded, &adam7[passstart[i]],
-                         ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]);
-          error = filter(&(*out)[filter_passstart[i]], padded,
-                         passw[i], passh[i], &info_png->color, settings);
-          lodepng_free(padded);
-        } else {
-          error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]],
-                         passw[i], passh[i], &info_png->color, settings);
-        }
-
-        if(error) break;
-      }
-    }
-
-    lodepng_free(adam7);
-  }
-
-  return error;
-}
-
-/*
-palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA...
-returns 0 if the palette is opaque,
-returns 1 if the palette has a single color with alpha 0 ==> color key
-returns 2 if the palette is semi-translucent.
-*/
-static unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize) {
-  size_t i;
-  unsigned key = 0;
-  unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/
-  for(i = 0; i != palettesize; ++i) {
-    if(!key && palette[4 * i + 3] == 0) {
-      r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2];
-      key = 1;
-      i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/
-    }
-    else if(palette[4 * i + 3] != 255) return 2;
-    /*when key, no opaque RGB may have key's RGB*/
-    else if(key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2;
-  }
-  return key;
-}
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize) {
-  unsigned char* inchunk = data;
-  while((size_t)(inchunk - data) < datasize) {
-    CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk));
-    out->allocsize = out->size; /*fix the allocsize again*/
-    inchunk = lodepng_chunk_next(inchunk);
-  }
-  return 0;
-}
-
-static unsigned isGrayICCProfile(const unsigned char* profile, unsigned size) {
-  /*
-  It is a gray profile if bytes 16-19 are "GRAY", rgb profile if bytes 16-19
-  are "RGB ". We do not perform any full parsing of the ICC profile here, other
-  than check those 4 bytes to grayscale profile. Other than that, validity of
-  the profile is not checked. This is needed only because the PNG specification
-  requires using a non-gray color model if there is an ICC profile with "RGB "
-  (sadly limiting compression opportunities if the input data is grayscale RGB
-  data), and requires using a gray color model if it is "GRAY".
-  */
-  if(size < 20) return 0;
-  return profile[16] == 'G' &&  profile[17] == 'R' &&  profile[18] == 'A' &&  profile[19] == 'Y';
-}
-
-static unsigned isRGBICCProfile(const unsigned char* profile, unsigned size) {
-  /* See comment in isGrayICCProfile*/
-  if(size < 20) return 0;
-  return profile[16] == 'R' &&  profile[17] == 'G' &&  profile[18] == 'B' &&  profile[19] == ' ';
-}
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-unsigned lodepng_encode(unsigned char** out, size_t* outsize,
-                        const unsigned char* image, unsigned w, unsigned h,
-                        LodePNGState* state) {
-  unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/
-  size_t datasize = 0;
-  ucvector outv;
-  LodePNGInfo info;
-
-  ucvector_init(&outv);
-  lodepng_info_init(&info);
-
-  /*provide some proper output values if error will happen*/
-  *out = 0;
-  *outsize = 0;
-  state->error = 0;
-
-  /*check input values validity*/
-  if((state->info_png.color.colortype == LCT_PALETTE || state->encoder.force_palette)
-      && (state->info_png.color.palettesize == 0 || state->info_png.color.palettesize > 256)) {
-    state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/
-    goto cleanup;
-  }
-  if(state->encoder.zlibsettings.btype > 2) {
-    state->error = 61; /*error: unexisting btype*/
-    goto cleanup;
-  }
-  if(state->info_png.interlace_method > 1) {
-    state->error = 71; /*error: unexisting interlace mode*/
-    goto cleanup;
-  }
-  state->error = checkColorValidity(state->info_png.color.colortype, state->info_png.color.bitdepth);
-  if(state->error) goto cleanup; /*error: unexisting color type given*/
-  state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth);
-  if(state->error) goto cleanup; /*error: unexisting color type given*/
-
-  /* color convert and compute scanline filter types */
-  lodepng_info_copy(&info, &state->info_png);
-  if(state->encoder.auto_convert) {
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-    if(state->info_png.background_defined) {
-      unsigned bg_r = state->info_png.background_r;
-      unsigned bg_g = state->info_png.background_g;
-      unsigned bg_b = state->info_png.background_b;
-      unsigned r = 0, g = 0, b = 0;
-      LodePNGColorProfile prof;
-      LodePNGColorMode mode16 = lodepng_color_mode_make(LCT_RGB, 16);
-      lodepng_convert_rgb(&r, &g, &b, bg_r, bg_g, bg_b, &mode16, &state->info_png.color);
-      lodepng_color_profile_init(&prof);
-      state->error = lodepng_get_color_profile(&prof, image, w, h, &state->info_raw);
-      if(state->error) goto cleanup;
-      lodepng_color_profile_add(&prof, r, g, b, 65535);
-      state->error = auto_choose_color_from_profile(&info.color, &state->info_raw, &prof);
-      if(state->error) goto cleanup;
-      if(lodepng_convert_rgb(&info.background_r, &info.background_g, &info.background_b,
-          bg_r, bg_g, bg_b, &info.color, &state->info_png.color)) {
-        state->error = 104;
-        goto cleanup;
-      }
-    }
-    else
-#endif /* LODEPNG_COMPILE_ANCILLARY_CHUNKS */
-    {
-      state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw);
-      if(state->error) goto cleanup;
-    }
-  }
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  if(state->info_png.iccp_defined) {
-    unsigned gray_icc = isGrayICCProfile(state->info_png.iccp_profile, state->info_png.iccp_profile_size);
-    unsigned gray_png = info.color.colortype == LCT_GREY || info.color.colortype == LCT_GREY_ALPHA;
-    /* TODO: perhaps instead of giving errors or less optimal compression, we can automatically modify
-    the ICC profile here to say "GRAY" or "RGB " to match the PNG color type, unless this will require
-    non trivial changes to the rest of the ICC profile */
-    if(!gray_icc && !isRGBICCProfile(state->info_png.iccp_profile, state->info_png.iccp_profile_size)) {
-      state->error = 100; /* Disallowed profile color type for PNG */
-      goto cleanup;
-    }
-    if(!state->encoder.auto_convert && gray_icc != gray_png) {
-      /* Non recoverable: encoder not allowed to convert color type, and requested color type not
-      compatible with ICC color type */
-      state->error = 101;
-      goto cleanup;
-    }
-    if(gray_icc && !gray_png) {
-      /* Non recoverable: trying to set grayscale ICC profile while colored pixels were given */
-      state->error = 102;
-      goto cleanup;
-      /* NOTE: this relies on the fact that lodepng_auto_choose_color never returns palette for grayscale pixels */
-    }
-    if(!gray_icc && gray_png) {
-      /* Recoverable but an unfortunate loss in compression density: We have grayscale pixels but
-      are forced to store them in more expensive RGB format that will repeat each value 3 times
-      because the PNG spec does not allow an RGB ICC profile with internal grayscale color data */
-      if(info.color.colortype == LCT_GREY) info.color.colortype = LCT_RGB;
-      if(info.color.colortype == LCT_GREY_ALPHA) info.color.colortype = LCT_RGBA;
-      if(info.color.bitdepth < 8) info.color.bitdepth = 8;
-    }
-  }
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-  if(!lodepng_color_mode_equal(&state->info_raw, &info.color)) {
-    unsigned char* converted;
-    size_t size = ((size_t)w * (size_t)h * (size_t)lodepng_get_bpp(&info.color) + 7) / 8;
-
-    converted = (unsigned char*)lodepng_malloc(size);
-    if(!converted && size) state->error = 83; /*alloc fail*/
-    if(!state->error) {
-      state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h);
-    }
-    if(!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder);
-    lodepng_free(converted);
-    if(state->error) goto cleanup;
-  }
-  else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder);
-
-  /* output all PNG chunks */ {
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-    size_t i;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-    /*write signature and chunks*/
-    writeSignature(&outv);
-    /*IHDR*/
-    addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method);
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-    /*unknown chunks between IHDR and PLTE*/
-    if(info.unknown_chunks_data[0]) {
-      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]);
-      if(state->error) goto cleanup;
-    }
-    /*color profile chunks must come before PLTE */
-    if(info.iccp_defined) addChunk_iCCP(&outv, &info, &state->encoder.zlibsettings);
-    if(info.srgb_defined) addChunk_sRGB(&outv, &info);
-    if(info.gama_defined) addChunk_gAMA(&outv, &info);
-    if(info.chrm_defined) addChunk_cHRM(&outv, &info);
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-    /*PLTE*/
-    if(info.color.colortype == LCT_PALETTE) {
-      addChunk_PLTE(&outv, &info.color);
-    }
-    if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA)) {
-      addChunk_PLTE(&outv, &info.color);
-    }
-    /*tRNS*/
-    if(info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0) {
-      addChunk_tRNS(&outv, &info.color);
-    }
-    if((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined) {
-      addChunk_tRNS(&outv, &info.color);
-    }
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-    /*bKGD (must come between PLTE and the IDAt chunks*/
-    if(info.background_defined) {
-      state->error = addChunk_bKGD(&outv, &info);
-      if(state->error) goto cleanup;
-    }
-    /*pHYs (must come before the IDAT chunks)*/
-    if(info.phys_defined) addChunk_pHYs(&outv, &info);
-
-    /*unknown chunks between PLTE and IDAT*/
-    if(info.unknown_chunks_data[1]) {
-      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]);
-      if(state->error) goto cleanup;
-    }
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-    /*IDAT (multiple IDAT chunks must be consecutive)*/
-    state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings);
-    if(state->error) goto cleanup;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-    /*tIME*/
-    if(info.time_defined) addChunk_tIME(&outv, &info.time);
-    /*tEXt and/or zTXt*/
-    for(i = 0; i != info.text_num; ++i) {
-      if(strlen(info.text_keys[i]) > 79) {
-        state->error = 66; /*text chunk too large*/
-        goto cleanup;
-      }
-      if(strlen(info.text_keys[i]) < 1) {
-        state->error = 67; /*text chunk too small*/
-        goto cleanup;
-      }
-      if(state->encoder.text_compression) {
-        addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings);
-      } else {
-        addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]);
-      }
-    }
-    /*LodePNG version id in text chunk*/
-    if(state->encoder.add_id) {
-      unsigned already_added_id_text = 0;
-      for(i = 0; i != info.text_num; ++i) {
-        if(!strcmp(info.text_keys[i], "LodePNG")) {
-          already_added_id_text = 1;
-          break;
-        }
-      }
-      if(already_added_id_text == 0) {
-        addChunk_tEXt(&outv, "LodePNG", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/
-      }
-    }
-    /*iTXt*/
-    for(i = 0; i != info.itext_num; ++i) {
-      if(strlen(info.itext_keys[i]) > 79) {
-        state->error = 66; /*text chunk too large*/
-        goto cleanup;
-      }
-      if(strlen(info.itext_keys[i]) < 1) {
-        state->error = 67; /*text chunk too small*/
-        goto cleanup;
-      }
-      addChunk_iTXt(&outv, state->encoder.text_compression,
-                    info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i],
-                    &state->encoder.zlibsettings);
-    }
-
-    /*unknown chunks between IDAT and IEND*/
-    if(info.unknown_chunks_data[2]) {
-      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]);
-      if(state->error) goto cleanup;
-    }
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-    addChunk_IEND(&outv);
-  }
-
-cleanup:
-  lodepng_info_cleanup(&info);
-  lodepng_free(data);
-
-  /*instead of cleaning the vector up, give it to the output*/
-  *out = outv.data;
-  *outsize = outv.size;
-
-  return state->error;
-}
-
-unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image,
-                               unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) {
-  unsigned error;
-  LodePNGState state;
-  lodepng_state_init(&state);
-  state.info_raw.colortype = colortype;
-  state.info_raw.bitdepth = bitdepth;
-  state.info_png.color.colortype = colortype;
-  state.info_png.color.bitdepth = bitdepth;
-  lodepng_encode(out, outsize, image, w, h, &state);
-  error = state.error;
-  lodepng_state_cleanup(&state);
-  return error;
-}
-
-unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) {
-  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8);
-}
-
-unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) {
-  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8);
-}
-
-#ifdef LODEPNG_COMPILE_DISK
-unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h,
-                             LodePNGColorType colortype, unsigned bitdepth) {
-  unsigned char* buffer;
-  size_t buffersize;
-  unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth);
-  if(!error) error = lodepng_save_file(buffer, buffersize, filename);
-  lodepng_free(buffer);
-  return error;
-}
-
-unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) {
-  return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8);
-}
-
-unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) {
-  return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8);
-}
-#endif /*LODEPNG_COMPILE_DISK*/
-
-void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings) {
-  lodepng_compress_settings_init(&settings->zlibsettings);
-  settings->filter_palette_zero = 1;
-  settings->filter_strategy = LFS_MINSUM;
-  settings->auto_convert = 1;
-  settings->force_palette = 0;
-  settings->predefined_filters = 0;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-  settings->add_id = 0;
-  settings->text_compression = 1;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-}
-
-#endif /*LODEPNG_COMPILE_ENCODER*/
-#endif /*LODEPNG_COMPILE_PNG*/
-
-#ifdef LODEPNG_COMPILE_ERROR_TEXT
-/*
-This returns the description of a numerical error code in English. This is also
-the documentation of all the error codes.
-*/
-const char* lodepng_error_text(unsigned code) {
-  switch(code) {
-    case 0: return "no error, everything went ok";
-    case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/
-    case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/
-    case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/
-    case 13: return "problem while processing dynamic deflate block";
-    case 14: return "problem while processing dynamic deflate block";
-    case 15: return "problem while processing dynamic deflate block";
-    case 16: return "unexisting code while processing dynamic deflate block";
-    case 17: return "end of out buffer memory reached while inflating";
-    case 18: return "invalid distance code while inflating";
-    case 19: return "end of out buffer memory reached while inflating";
-    case 20: return "invalid deflate block BTYPE encountered while decoding";
-    case 21: return "NLEN is not ones complement of LEN in a deflate block";
-
-    /*end of out buffer memory reached while inflating:
-    This can happen if the inflated deflate data is longer than the amount of bytes required to fill up
-    all the pixels of the image, given the color depth and image dimensions. Something that doesn't
-    happen in a normal, well encoded, PNG image.*/
-    case 22: return "end of out buffer memory reached while inflating";
-    case 23: return "end of in buffer memory reached while inflating";
-    case 24: return "invalid FCHECK in zlib header";
-    case 25: return "invalid compression method in zlib header";
-    case 26: return "FDICT encountered in zlib header while it's not used for PNG";
-    case 27: return "PNG file is smaller than a PNG header";
-    /*Checks the magic file header, the first 8 bytes of the PNG file*/
-    case 28: return "incorrect PNG signature, it's no PNG or corrupted";
-    case 29: return "first chunk is not the header chunk";
-    case 30: return "chunk length too large, chunk broken off at end of file";
-    case 31: return "illegal PNG color type or bpp";
-    case 32: return "illegal PNG compression method";
-    case 33: return "illegal PNG filter method";
-    case 34: return "illegal PNG interlace method";
-    case 35: return "chunk length of a chunk is too large or the chunk too small";
-    case 36: return "illegal PNG filter type encountered";
-    case 37: return "illegal bit depth for this color type given";
-    case 38: return "the palette is too big"; /*more than 256 colors*/
-    case 39: return "tRNS chunk before PLTE or has more entries than palette size";
-    case 40: return "tRNS chunk has wrong size for grayscale image";
-    case 41: return "tRNS chunk has wrong size for RGB image";
-    case 42: return "tRNS chunk appeared while it was not allowed for this color type";
-    case 43: return "bKGD chunk has wrong size for palette image";
-    case 44: return "bKGD chunk has wrong size for grayscale image";
-    case 45: return "bKGD chunk has wrong size for RGB image";
-    case 48: return "empty input buffer given to decoder. Maybe caused by non-existing file?";
-    case 49: return "jumped past memory while generating dynamic huffman tree";
-    case 50: return "jumped past memory while generating dynamic huffman tree";
-    case 51: return "jumped past memory while inflating huffman block";
-    case 52: return "jumped past memory while inflating";
-    case 53: return "size of zlib data too small";
-    case 54: return "repeat symbol in tree while there was no value symbol yet";
-    /*jumped past tree while generating huffman tree, this could be when the
-    tree will have more leaves than symbols after generating it out of the
-    given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/
-    case 55: return "jumped past tree while generating huffman tree";
-    case 56: return "given output image colortype or bitdepth not supported for color conversion";
-    case 57: return "invalid CRC encountered (checking CRC can be disabled)";
-    case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)";
-    case 59: return "requested color conversion not supported";
-    case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)";
-    case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)";
-    /*LodePNG leaves the choice of RGB to grayscale conversion formula to the user.*/
-    case 62: return "conversion from color to grayscale not supported";
-    /*(2^31-1)*/
-    case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk";
-    /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/
-    case 64: return "the length of the END symbol 256 in the Huffman tree is 0";
-    case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes";
-    case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte";
-    case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors";
-    case 69: return "unknown chunk type with 'critical' flag encountered by the decoder";
-    case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)";
-    case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)";
-    case 73: return "invalid tIME chunk size";
-    case 74: return "invalid pHYs chunk size";
-    /*length could be wrong, or data chopped off*/
-    case 75: return "no null termination char found while decoding text chunk";
-    case 76: return "iTXt chunk too short to contain required bytes";
-    case 77: return "integer overflow in buffer size";
-    case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/
-    case 79: return "failed to open file for writing";
-    case 80: return "tried creating a tree of 0 symbols";
-    case 81: return "lazy matching at pos 0 is impossible";
-    case 82: return "color conversion to palette requested while a color isn't in palette, or index out of bounds";
-    case 83: return "memory allocation failed";
-    case 84: return "given image too small to contain all pixels to be encoded";
-    case 86: return "impossible offset in lz77 encoding (internal bug)";
-    case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined";
-    case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy";
-    case 89: return "text chunk keyword too short or long: must have size 1-79";
-    /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/
-    case 90: return "windowsize must be a power of two";
-    case 91: return "invalid decompressed idat size";
-    case 92: return "integer overflow due to too many pixels";
-    case 93: return "zero width or height is invalid";
-    case 94: return "header chunk must have a size of 13 bytes";
-    case 95: return "integer overflow with combined idat chunk size";
-    case 96: return "invalid gAMA chunk size";
-    case 97: return "invalid cHRM chunk size";
-    case 98: return "invalid sRGB chunk size";
-    case 99: return "invalid sRGB rendering intent";
-    case 100: return "invalid ICC profile color type, the PNG specification only allows RGB or GRAY";
-    case 101: return "PNG specification does not allow RGB ICC profile on gray color types and vice versa";
-    case 102: return "not allowed to set grayscale ICC profile with colored pixels by PNG specification";
-    case 103: return "invalid palette index in bKGD chunk. Maybe it came before PLTE chunk?";
-    case 104: return "invalid bKGD color while encoding (e.g. palette index out of range)";
-  }
-  return "unknown error code";
-}
-#endif /*LODEPNG_COMPILE_ERROR_TEXT*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* // C++ Wrapper                                                          // */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_CPP
-namespace lodepng {
-
-#ifdef LODEPNG_COMPILE_DISK
-unsigned load_file(std::vector<unsigned char>& buffer, const std::string& filename) {
-  long size = lodepng_filesize(filename.c_str());
-  if(size < 0) return 78;
-  buffer.resize((size_t)size);
-  return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str());
-}
-
-/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
-unsigned save_file(const std::vector<unsigned char>& buffer, const std::string& filename) {
-  return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str());
-}
-#endif /* LODEPNG_COMPILE_DISK */
-
-#ifdef LODEPNG_COMPILE_ZLIB
-#ifdef LODEPNG_COMPILE_DECODER
-unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
-                    const LodePNGDecompressSettings& settings) {
-  unsigned char* buffer = 0;
-  size_t buffersize = 0;
-  unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings);
-  if(buffer) {
-    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
-    lodepng_free(buffer);
-  }
-  return error;
-}
-
-unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
-                    const LodePNGDecompressSettings& settings) {
-  return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings);
-}
-#endif /* LODEPNG_COMPILE_DECODER */
-
-#ifdef LODEPNG_COMPILE_ENCODER
-unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
-                  const LodePNGCompressSettings& settings) {
-  unsigned char* buffer = 0;
-  size_t buffersize = 0;
-  unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings);
-  if(buffer) {
-    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
-    lodepng_free(buffer);
-  }
-  return error;
-}
-
-unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
-                  const LodePNGCompressSettings& settings) {
-  return compress(out, in.empty() ? 0 : &in[0], in.size(), settings);
-}
-#endif /* LODEPNG_COMPILE_ENCODER */
-#endif /* LODEPNG_COMPILE_ZLIB */
-
-
-#ifdef LODEPNG_COMPILE_PNG
-
-State::State() {
-  lodepng_state_init(this);
-}
-
-State::State(const State& other) {
-  lodepng_state_init(this);
-  lodepng_state_copy(this, &other);
-}
-
-State::~State() {
-  lodepng_state_cleanup(this);
-}
-
-State& State::operator=(const State& other) {
-  lodepng_state_copy(this, &other);
-  return *this;
-}
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const unsigned char* in,
-                size_t insize, LodePNGColorType colortype, unsigned bitdepth) {
-  unsigned char* buffer;
-  unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth);
-  if(buffer && !error) {
-    State state;
-    state.info_raw.colortype = colortype;
-    state.info_raw.bitdepth = bitdepth;
-    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
-    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
-    lodepng_free(buffer);
-  }
-  return error;
-}
-
-unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
-                const std::vector<unsigned char>& in, LodePNGColorType colortype, unsigned bitdepth) {
-  return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth);
-}
-
-unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
-                State& state,
-                const unsigned char* in, size_t insize) {
-  unsigned char* buffer = NULL;
-  unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize);
-  if(buffer && !error) {
-    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
-    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
-  }
-  lodepng_free(buffer);
-  return error;
-}
-
-unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
-                State& state,
-                const std::vector<unsigned char>& in) {
-  return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size());
-}
-
-#ifdef LODEPNG_COMPILE_DISK
-unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const std::string& filename,
-                LodePNGColorType colortype, unsigned bitdepth) {
-  std::vector<unsigned char> buffer;
-  /* safe output values in case error happens */
-  w = h = 0;
-  unsigned error = load_file(buffer, filename);
-  if(error) return error;
-  return decode(out, w, h, buffer, colortype, bitdepth);
-}
-#endif /* LODEPNG_COMPILE_DECODER */
-#endif /* LODEPNG_COMPILE_DISK */
-
-#ifdef LODEPNG_COMPILE_ENCODER
-unsigned encode(std::vector<unsigned char>& out, const unsigned char* in, unsigned w, unsigned h,
-                LodePNGColorType colortype, unsigned bitdepth) {
-  unsigned char* buffer;
-  size_t buffersize;
-  unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth);
-  if(buffer) {
-    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
-    lodepng_free(buffer);
-  }
-  return error;
-}
-
-unsigned encode(std::vector<unsigned char>& out,
-                const std::vector<unsigned char>& in, unsigned w, unsigned h,
-                LodePNGColorType colortype, unsigned bitdepth) {
-  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
-  return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);
-}
-
-unsigned encode(std::vector<unsigned char>& out,
-                const unsigned char* in, unsigned w, unsigned h,
-                State& state) {
-  unsigned char* buffer;
-  size_t buffersize;
-  unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state);
-  if(buffer) {
-    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
-    lodepng_free(buffer);
-  }
-  return error;
-}
-
-unsigned encode(std::vector<unsigned char>& out,
-                const std::vector<unsigned char>& in, unsigned w, unsigned h,
-                State& state) {
-  if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84;
-  return encode(out, in.empty() ? 0 : &in[0], w, h, state);
-}
-
-#ifdef LODEPNG_COMPILE_DISK
-unsigned encode(const std::string& filename,
-                const unsigned char* in, unsigned w, unsigned h,
-                LodePNGColorType colortype, unsigned bitdepth) {
-  std::vector<unsigned char> buffer;
-  unsigned error = encode(buffer, in, w, h, colortype, bitdepth);
-  if(!error) error = save_file(buffer, filename);
-  return error;
-}
-
-unsigned encode(const std::string& filename,
-                const std::vector<unsigned char>& in, unsigned w, unsigned h,
-                LodePNGColorType colortype, unsigned bitdepth) {
-  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
-  return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);
-}
-#endif /* LODEPNG_COMPILE_DISK */
-#endif /* LODEPNG_COMPILE_ENCODER */
-#endif /* LODEPNG_COMPILE_PNG */
-} /* namespace lodepng */
-#endif /*LODEPNG_COMPILE_CPP*/

+ 0 - 2837
lib/tinyxml2.cpp

@@ -1,2837 +0,0 @@
-/*
-Original code by Lee Thomason (www.grinninglizard.com)
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any
-damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any
-purpose, including commercial applications, and to alter it and
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must
-not claim that you wrote the original software. If you use this
-software in a product, an acknowledgment in the product documentation
-would be appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and
-must not be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source
-distribution.
-*/
-
-#include "tinyxml2.h"
-
-#include <new>		// yes, this one new style header, is in the Android SDK.
-#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__)
-#   include <stddef.h>
-#   include <stdarg.h>
-#else
-#   include <cstddef>
-#   include <cstdarg>
-#endif
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE)
-	// Microsoft Visual Studio, version 2005 and higher. Not WinCE.
-	/*int _snprintf_s(
-	   char *buffer,
-	   size_t sizeOfBuffer,
-	   size_t count,
-	   const char *format [,
-		  argument] ...
-	);*/
-	static inline int TIXML_SNPRINTF( char* buffer, size_t size, const char* format, ... )
-	{
-		va_list va;
-		va_start( va, format );
-		int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va );
-		va_end( va );
-		return result;
-	}
-
-	static inline int TIXML_VSNPRINTF( char* buffer, size_t size, const char* format, va_list va )
-	{
-		int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va );
-		return result;
-	}
-
-	#define TIXML_VSCPRINTF	_vscprintf
-	#define TIXML_SSCANF	sscanf_s
-#elif defined _MSC_VER
-	// Microsoft Visual Studio 2003 and earlier or WinCE
-	#define TIXML_SNPRINTF	_snprintf
-	#define TIXML_VSNPRINTF _vsnprintf
-	#define TIXML_SSCANF	sscanf
-	#if (_MSC_VER < 1400 ) && (!defined WINCE)
-		// Microsoft Visual Studio 2003 and not WinCE.
-		#define TIXML_VSCPRINTF   _vscprintf // VS2003's C runtime has this, but VC6 C runtime or WinCE SDK doesn't have.
-	#else
-		// Microsoft Visual Studio 2003 and earlier or WinCE.
-		static inline int TIXML_VSCPRINTF( const char* format, va_list va )
-		{
-			int len = 512;
-			for (;;) {
-				len = len*2;
-				char* str = new char[len]();
-				const int required = _vsnprintf(str, len, format, va);
-				delete[] str;
-				if ( required != -1 ) {
-					TIXMLASSERT( required >= 0 );
-					len = required;
-					break;
-				}
-			}
-			TIXMLASSERT( len >= 0 );
-			return len;
-		}
-	#endif
-#else
-	// GCC version 3 and higher
-	//#warning( "Using sn* functions." )
-	#define TIXML_SNPRINTF	snprintf
-	#define TIXML_VSNPRINTF	vsnprintf
-	static inline int TIXML_VSCPRINTF( const char* format, va_list va )
-	{
-		int len = vsnprintf( 0, 0, format, va );
-		TIXMLASSERT( len >= 0 );
-		return len;
-	}
-	#define TIXML_SSCANF   sscanf
-#endif
-
-
-static const char LINE_FEED				= (char)0x0a;			// all line endings are normalized to LF
-static const char LF = LINE_FEED;
-static const char CARRIAGE_RETURN		= (char)0x0d;			// CR gets filtered out
-static const char CR = CARRIAGE_RETURN;
-static const char SINGLE_QUOTE			= '\'';
-static const char DOUBLE_QUOTE			= '\"';
-
-// Bunch of unicode info at:
-//		http://www.unicode.org/faq/utf_bom.html
-//	ef bb bf (Microsoft "lead bytes") - designates UTF-8
-
-static const unsigned char TIXML_UTF_LEAD_0 = 0xefU;
-static const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;
-static const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;
-
-namespace tinyxml2
-{
-
-struct Entity {
-    const char* pattern;
-    int length;
-    char value;
-};
-
-static const int NUM_ENTITIES = 5;
-static const Entity entities[NUM_ENTITIES] = {
-    { "quot", 4,	DOUBLE_QUOTE },
-    { "amp", 3,		'&'  },
-    { "apos", 4,	SINGLE_QUOTE },
-    { "lt",	2, 		'<'	 },
-    { "gt",	2,		'>'	 }
-};
-
-
-StrPair::~StrPair()
-{
-    Reset();
-}
-
-
-void StrPair::TransferTo( StrPair* other )
-{
-    if ( this == other ) {
-        return;
-    }
-    // This in effect implements the assignment operator by "moving"
-    // ownership (as in auto_ptr).
-
-    TIXMLASSERT( other != 0 );
-    TIXMLASSERT( other->_flags == 0 );
-    TIXMLASSERT( other->_start == 0 );
-    TIXMLASSERT( other->_end == 0 );
-
-    other->Reset();
-
-    other->_flags = _flags;
-    other->_start = _start;
-    other->_end = _end;
-
-    _flags = 0;
-    _start = 0;
-    _end = 0;
-}
-
-
-void StrPair::Reset()
-{
-    if ( _flags & NEEDS_DELETE ) {
-        delete [] _start;
-    }
-    _flags = 0;
-    _start = 0;
-    _end = 0;
-}
-
-
-void StrPair::SetStr( const char* str, int flags )
-{
-    TIXMLASSERT( str );
-    Reset();
-    size_t len = strlen( str );
-    TIXMLASSERT( _start == 0 );
-    _start = new char[ len+1 ];
-    memcpy( _start, str, len+1 );
-    _end = _start + len;
-    _flags = flags | NEEDS_DELETE;
-}
-
-
-char* StrPair::ParseText( char* p, const char* endTag, int strFlags, int* curLineNumPtr )
-{
-    TIXMLASSERT( p );
-    TIXMLASSERT( endTag && *endTag );
-	TIXMLASSERT(curLineNumPtr);
-
-    char* start = p;
-    char  endChar = *endTag;
-    size_t length = strlen( endTag );
-
-    // Inner loop of text parsing.
-    while ( *p ) {
-        if ( *p == endChar && strncmp( p, endTag, length ) == 0 ) {
-            Set( start, p, strFlags );
-            return p + length;
-        } else if (*p == '\n') {
-            ++(*curLineNumPtr);
-        }
-        ++p;
-        TIXMLASSERT( p );
-    }
-    return 0;
-}
-
-
-char* StrPair::ParseName( char* p )
-{
-    if ( !p || !(*p) ) {
-        return 0;
-    }
-    if ( !XMLUtil::IsNameStartChar( *p ) ) {
-        return 0;
-    }
-
-    char* const start = p;
-    ++p;
-    while ( *p && XMLUtil::IsNameChar( *p ) ) {
-        ++p;
-    }
-
-    Set( start, p, 0 );
-    return p;
-}
-
-
-void StrPair::CollapseWhitespace()
-{
-    // Adjusting _start would cause undefined behavior on delete[]
-    TIXMLASSERT( ( _flags & NEEDS_DELETE ) == 0 );
-    // Trim leading space.
-    _start = XMLUtil::SkipWhiteSpace( _start, 0 );
-
-    if ( *_start ) {
-        const char* p = _start;	// the read pointer
-        char* q = _start;	// the write pointer
-
-        while( *p ) {
-            if ( XMLUtil::IsWhiteSpace( *p )) {
-                p = XMLUtil::SkipWhiteSpace( p, 0 );
-                if ( *p == 0 ) {
-                    break;    // don't write to q; this trims the trailing space.
-                }
-                *q = ' ';
-                ++q;
-            }
-            *q = *p;
-            ++q;
-            ++p;
-        }
-        *q = 0;
-    }
-}
-
-
-const char* StrPair::GetStr()
-{
-    TIXMLASSERT( _start );
-    TIXMLASSERT( _end );
-    if ( _flags & NEEDS_FLUSH ) {
-        *_end = 0;
-        _flags ^= NEEDS_FLUSH;
-
-        if ( _flags ) {
-            const char* p = _start;	// the read pointer
-            char* q = _start;	// the write pointer
-
-            while( p < _end ) {
-                if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == CR ) {
-                    // CR-LF pair becomes LF
-                    // CR alone becomes LF
-                    // LF-CR becomes LF
-                    if ( *(p+1) == LF ) {
-                        p += 2;
-                    }
-                    else {
-                        ++p;
-                    }
-                    *q = LF;
-                    ++q;
-                }
-                else if ( (_flags & NEEDS_NEWLINE_NORMALIZATION) && *p == LF ) {
-                    if ( *(p+1) == CR ) {
-                        p += 2;
-                    }
-                    else {
-                        ++p;
-                    }
-                    *q = LF;
-                    ++q;
-                }
-                else if ( (_flags & NEEDS_ENTITY_PROCESSING) && *p == '&' ) {
-                    // Entities handled by tinyXML2:
-                    // - special entities in the entity table [in/out]
-                    // - numeric character reference [in]
-                    //   &#20013; or &#x4e2d;
-
-                    if ( *(p+1) == '#' ) {
-                        const int buflen = 10;
-                        char buf[buflen] = { 0 };
-                        int len = 0;
-                        char* adjusted = const_cast<char*>( XMLUtil::GetCharacterRef( p, buf, &len ) );
-                        if ( adjusted == 0 ) {
-                            *q = *p;
-                            ++p;
-                            ++q;
-                        }
-                        else {
-                            TIXMLASSERT( 0 <= len && len <= buflen );
-                            TIXMLASSERT( q + len <= adjusted );
-                            p = adjusted;
-                            memcpy( q, buf, len );
-                            q += len;
-                        }
-                    }
-                    else {
-                        bool entityFound = false;
-                        for( int i = 0; i < NUM_ENTITIES; ++i ) {
-                            const Entity& entity = entities[i];
-                            if ( strncmp( p + 1, entity.pattern, entity.length ) == 0
-                                    && *( p + entity.length + 1 ) == ';' ) {
-                                // Found an entity - convert.
-                                *q = entity.value;
-                                ++q;
-                                p += entity.length + 2;
-                                entityFound = true;
-                                break;
-                            }
-                        }
-                        if ( !entityFound ) {
-                            // fixme: treat as error?
-                            ++p;
-                            ++q;
-                        }
-                    }
-                }
-                else {
-                    *q = *p;
-                    ++p;
-                    ++q;
-                }
-            }
-            *q = 0;
-        }
-        // The loop below has plenty going on, and this
-        // is a less useful mode. Break it out.
-        if ( _flags & NEEDS_WHITESPACE_COLLAPSING ) {
-            CollapseWhitespace();
-        }
-        _flags = (_flags & NEEDS_DELETE);
-    }
-    TIXMLASSERT( _start );
-    return _start;
-}
-
-
-
-
-// --------- XMLUtil ----------- //
-
-const char* XMLUtil::writeBoolTrue  = "true";
-const char* XMLUtil::writeBoolFalse = "false";
-
-void XMLUtil::SetBoolSerialization(const char* writeTrue, const char* writeFalse)
-{
-	static const char* defTrue  = "true";
-	static const char* defFalse = "false";
-
-	writeBoolTrue = (writeTrue) ? writeTrue : defTrue;
-	writeBoolFalse = (writeFalse) ? writeFalse : defFalse;
-}
-
-
-const char* XMLUtil::ReadBOM( const char* p, bool* bom )
-{
-    TIXMLASSERT( p );
-    TIXMLASSERT( bom );
-    *bom = false;
-    const unsigned char* pu = reinterpret_cast<const unsigned char*>(p);
-    // Check for BOM:
-    if (    *(pu+0) == TIXML_UTF_LEAD_0
-            && *(pu+1) == TIXML_UTF_LEAD_1
-            && *(pu+2) == TIXML_UTF_LEAD_2 ) {
-        *bom = true;
-        p += 3;
-    }
-    TIXMLASSERT( p );
-    return p;
-}
-
-
-void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length )
-{
-    const unsigned long BYTE_MASK = 0xBF;
-    const unsigned long BYTE_MARK = 0x80;
-    const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
-
-    if (input < 0x80) {
-        *length = 1;
-    }
-    else if ( input < 0x800 ) {
-        *length = 2;
-    }
-    else if ( input < 0x10000 ) {
-        *length = 3;
-    }
-    else if ( input < 0x200000 ) {
-        *length = 4;
-    }
-    else {
-        *length = 0;    // This code won't convert this correctly anyway.
-        return;
-    }
-
-    output += *length;
-
-    // Scary scary fall throughs are annotated with carefully designed comments
-    // to suppress compiler warnings such as -Wimplicit-fallthrough in gcc
-    switch (*length) {
-        case 4:
-            --output;
-            *output = (char)((input | BYTE_MARK) & BYTE_MASK);
-            input >>= 6;
-            //fall through
-        case 3:
-            --output;
-            *output = (char)((input | BYTE_MARK) & BYTE_MASK);
-            input >>= 6;
-            //fall through
-        case 2:
-            --output;
-            *output = (char)((input | BYTE_MARK) & BYTE_MASK);
-            input >>= 6;
-            //fall through
-        case 1:
-            --output;
-            *output = (char)(input | FIRST_BYTE_MARK[*length]);
-            break;
-        default:
-            TIXMLASSERT( false );
-    }
-}
-
-
-const char* XMLUtil::GetCharacterRef( const char* p, char* value, int* length )
-{
-    // Presume an entity, and pull it out.
-    *length = 0;
-
-    if ( *(p+1) == '#' && *(p+2) ) {
-        unsigned long ucs = 0;
-        TIXMLASSERT( sizeof( ucs ) >= 4 );
-        ptrdiff_t delta = 0;
-        unsigned mult = 1;
-        static const char SEMICOLON = ';';
-
-        if ( *(p+2) == 'x' ) {
-            // Hexadecimal.
-            const char* q = p+3;
-            if ( !(*q) ) {
-                return 0;
-            }
-
-            q = strchr( q, SEMICOLON );
-
-            if ( !q ) {
-                return 0;
-            }
-            TIXMLASSERT( *q == SEMICOLON );
-
-            delta = q-p;
-            --q;
-
-            while ( *q != 'x' ) {
-                unsigned int digit = 0;
-
-                if ( *q >= '0' && *q <= '9' ) {
-                    digit = *q - '0';
-                }
-                else if ( *q >= 'a' && *q <= 'f' ) {
-                    digit = *q - 'a' + 10;
-                }
-                else if ( *q >= 'A' && *q <= 'F' ) {
-                    digit = *q - 'A' + 10;
-                }
-                else {
-                    return 0;
-                }
-                TIXMLASSERT( digit < 16 );
-                TIXMLASSERT( digit == 0 || mult <= UINT_MAX / digit );
-                const unsigned int digitScaled = mult * digit;
-                TIXMLASSERT( ucs <= ULONG_MAX - digitScaled );
-                ucs += digitScaled;
-                TIXMLASSERT( mult <= UINT_MAX / 16 );
-                mult *= 16;
-                --q;
-            }
-        }
-        else {
-            // Decimal.
-            const char* q = p+2;
-            if ( !(*q) ) {
-                return 0;
-            }
-
-            q = strchr( q, SEMICOLON );
-
-            if ( !q ) {
-                return 0;
-            }
-            TIXMLASSERT( *q == SEMICOLON );
-
-            delta = q-p;
-            --q;
-
-            while ( *q != '#' ) {
-                if ( *q >= '0' && *q <= '9' ) {
-                    const unsigned int digit = *q - '0';
-                    TIXMLASSERT( digit < 10 );
-                    TIXMLASSERT( digit == 0 || mult <= UINT_MAX / digit );
-                    const unsigned int digitScaled = mult * digit;
-                    TIXMLASSERT( ucs <= ULONG_MAX - digitScaled );
-                    ucs += digitScaled;
-                }
-                else {
-                    return 0;
-                }
-                TIXMLASSERT( mult <= UINT_MAX / 10 );
-                mult *= 10;
-                --q;
-            }
-        }
-        // convert the UCS to UTF-8
-        ConvertUTF32ToUTF8( ucs, value, length );
-        return p + delta + 1;
-    }
-    return p+1;
-}
-
-
-void XMLUtil::ToStr( int v, char* buffer, int bufferSize )
-{
-    TIXML_SNPRINTF( buffer, bufferSize, "%d", v );
-}
-
-
-void XMLUtil::ToStr( unsigned v, char* buffer, int bufferSize )
-{
-    TIXML_SNPRINTF( buffer, bufferSize, "%u", v );
-}
-
-
-void XMLUtil::ToStr( bool v, char* buffer, int bufferSize )
-{
-    TIXML_SNPRINTF( buffer, bufferSize, "%s", v ? writeBoolTrue : writeBoolFalse);
-}
-
-/*
-	ToStr() of a number is a very tricky topic.
-	https://github.com/leethomason/tinyxml2/issues/106
-*/
-void XMLUtil::ToStr( float v, char* buffer, int bufferSize )
-{
-    TIXML_SNPRINTF( buffer, bufferSize, "%.8g", v );
-}
-
-
-void XMLUtil::ToStr( double v, char* buffer, int bufferSize )
-{
-    TIXML_SNPRINTF( buffer, bufferSize, "%.17g", v );
-}
-
-
-void XMLUtil::ToStr(int64_t v, char* buffer, int bufferSize)
-{
-	// horrible syntax trick to make the compiler happy about %lld
-	TIXML_SNPRINTF(buffer, bufferSize, "%lld", (long long)v);
-}
-
-
-bool XMLUtil::ToInt( const char* str, int* value )
-{
-    if ( TIXML_SSCANF( str, "%d", value ) == 1 ) {
-        return true;
-    }
-    return false;
-}
-
-bool XMLUtil::ToUnsigned( const char* str, unsigned *value )
-{
-    if ( TIXML_SSCANF( str, "%u", value ) == 1 ) {
-        return true;
-    }
-    return false;
-}
-
-bool XMLUtil::ToBool( const char* str, bool* value )
-{
-    int ival = 0;
-    if ( ToInt( str, &ival )) {
-        *value = (ival==0) ? false : true;
-        return true;
-    }
-    if ( StringEqual( str, "true" ) ) {
-        *value = true;
-        return true;
-    }
-    else if ( StringEqual( str, "false" ) ) {
-        *value = false;
-        return true;
-    }
-    return false;
-}
-
-
-bool XMLUtil::ToFloat( const char* str, float* value )
-{
-    if ( TIXML_SSCANF( str, "%f", value ) == 1 ) {
-        return true;
-    }
-    return false;
-}
-
-
-bool XMLUtil::ToDouble( const char* str, double* value )
-{
-    if ( TIXML_SSCANF( str, "%lf", value ) == 1 ) {
-        return true;
-    }
-    return false;
-}
-
-
-bool XMLUtil::ToInt64(const char* str, int64_t* value)
-{
-	long long v = 0;	// horrible syntax trick to make the compiler happy about %lld
-	if (TIXML_SSCANF(str, "%lld", &v) == 1) {
-		*value = (int64_t)v;
-		return true;
-	}
-	return false;
-}
-
-
-char* XMLDocument::Identify( char* p, XMLNode** node )
-{
-    TIXMLASSERT( node );
-    TIXMLASSERT( p );
-    char* const start = p;
-    int const startLine = _parseCurLineNum;
-    p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum );
-    if( !*p ) {
-        *node = 0;
-        TIXMLASSERT( p );
-        return p;
-    }
-
-    // These strings define the matching patterns:
-    static const char* xmlHeader		= { "<?" };
-    static const char* commentHeader	= { "<!--" };
-    static const char* cdataHeader		= { "<![CDATA[" };
-    static const char* dtdHeader		= { "<!" };
-    static const char* elementHeader	= { "<" };	// and a header for everything else; check last.
-
-    static const int xmlHeaderLen		= 2;
-    static const int commentHeaderLen	= 4;
-    static const int cdataHeaderLen		= 9;
-    static const int dtdHeaderLen		= 2;
-    static const int elementHeaderLen	= 1;
-
-    TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLUnknown ) );		// use same memory pool
-    TIXMLASSERT( sizeof( XMLComment ) == sizeof( XMLDeclaration ) );	// use same memory pool
-    XMLNode* returnNode = 0;
-    if ( XMLUtil::StringEqual( p, xmlHeader, xmlHeaderLen ) ) {
-        returnNode = CreateUnlinkedNode<XMLDeclaration>( _commentPool );
-        returnNode->_parseLineNum = _parseCurLineNum;
-        p += xmlHeaderLen;
-    }
-    else if ( XMLUtil::StringEqual( p, commentHeader, commentHeaderLen ) ) {
-        returnNode = CreateUnlinkedNode<XMLComment>( _commentPool );
-        returnNode->_parseLineNum = _parseCurLineNum;
-        p += commentHeaderLen;
-    }
-    else if ( XMLUtil::StringEqual( p, cdataHeader, cdataHeaderLen ) ) {
-        XMLText* text = CreateUnlinkedNode<XMLText>( _textPool );
-        returnNode = text;
-        returnNode->_parseLineNum = _parseCurLineNum;
-        p += cdataHeaderLen;
-        text->SetCData( true );
-    }
-    else if ( XMLUtil::StringEqual( p, dtdHeader, dtdHeaderLen ) ) {
-        returnNode = CreateUnlinkedNode<XMLUnknown>( _commentPool );
-        returnNode->_parseLineNum = _parseCurLineNum;
-        p += dtdHeaderLen;
-    }
-    else if ( XMLUtil::StringEqual( p, elementHeader, elementHeaderLen ) ) {
-        returnNode =  CreateUnlinkedNode<XMLElement>( _elementPool );
-        returnNode->_parseLineNum = _parseCurLineNum;
-        p += elementHeaderLen;
-    }
-    else {
-        returnNode = CreateUnlinkedNode<XMLText>( _textPool );
-        returnNode->_parseLineNum = _parseCurLineNum; // Report line of first non-whitespace character
-        p = start;	// Back it up, all the text counts.
-        _parseCurLineNum = startLine;
-    }
-
-    TIXMLASSERT( returnNode );
-    TIXMLASSERT( p );
-    *node = returnNode;
-    return p;
-}
-
-
-bool XMLDocument::Accept( XMLVisitor* visitor ) const
-{
-    TIXMLASSERT( visitor );
-    if ( visitor->VisitEnter( *this ) ) {
-        for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) {
-            if ( !node->Accept( visitor ) ) {
-                break;
-            }
-        }
-    }
-    return visitor->VisitExit( *this );
-}
-
-
-// --------- XMLNode ----------- //
-
-XMLNode::XMLNode( XMLDocument* doc ) :
-    _document( doc ),
-    _parent( 0 ),
-    _value(),
-    _parseLineNum( 0 ),
-    _firstChild( 0 ), _lastChild( 0 ),
-    _prev( 0 ), _next( 0 ),
-	_userData( 0 ),
-    _memPool( 0 )
-{
-}
-
-
-XMLNode::~XMLNode()
-{
-    DeleteChildren();
-    if ( _parent ) {
-        _parent->Unlink( this );
-    }
-}
-
-const char* XMLNode::Value() const
-{
-    // Edge case: XMLDocuments don't have a Value. Return null.
-    if ( this->ToDocument() )
-        return 0;
-    return _value.GetStr();
-}
-
-void XMLNode::SetValue( const char* str, bool staticMem )
-{
-    if ( staticMem ) {
-        _value.SetInternedStr( str );
-    }
-    else {
-        _value.SetStr( str );
-    }
-}
-
-XMLNode* XMLNode::DeepClone(XMLDocument* target) const
-{
-	XMLNode* clone = this->ShallowClone(target);
-	if (!clone) return 0;
-
-	for (const XMLNode* child = this->FirstChild(); child; child = child->NextSibling()) {
-		XMLNode* childClone = child->DeepClone(target);
-		TIXMLASSERT(childClone);
-		clone->InsertEndChild(childClone);
-	}
-	return clone;
-}
-
-void XMLNode::DeleteChildren()
-{
-    while( _firstChild ) {
-        TIXMLASSERT( _lastChild );
-        DeleteChild( _firstChild );
-    }
-    _firstChild = _lastChild = 0;
-}
-
-
-void XMLNode::Unlink( XMLNode* child )
-{
-    TIXMLASSERT( child );
-    TIXMLASSERT( child->_document == _document );
-    TIXMLASSERT( child->_parent == this );
-    if ( child == _firstChild ) {
-        _firstChild = _firstChild->_next;
-    }
-    if ( child == _lastChild ) {
-        _lastChild = _lastChild->_prev;
-    }
-
-    if ( child->_prev ) {
-        child->_prev->_next = child->_next;
-    }
-    if ( child->_next ) {
-        child->_next->_prev = child->_prev;
-    }
-	child->_next = 0;
-	child->_prev = 0;
-	child->_parent = 0;
-}
-
-
-void XMLNode::DeleteChild( XMLNode* node )
-{
-    TIXMLASSERT( node );
-    TIXMLASSERT( node->_document == _document );
-    TIXMLASSERT( node->_parent == this );
-    Unlink( node );
-	TIXMLASSERT(node->_prev == 0);
-	TIXMLASSERT(node->_next == 0);
-	TIXMLASSERT(node->_parent == 0);
-    DeleteNode( node );
-}
-
-
-XMLNode* XMLNode::InsertEndChild( XMLNode* addThis )
-{
-    TIXMLASSERT( addThis );
-    if ( addThis->_document != _document ) {
-        TIXMLASSERT( false );
-        return 0;
-    }
-    InsertChildPreamble( addThis );
-
-    if ( _lastChild ) {
-        TIXMLASSERT( _firstChild );
-        TIXMLASSERT( _lastChild->_next == 0 );
-        _lastChild->_next = addThis;
-        addThis->_prev = _lastChild;
-        _lastChild = addThis;
-
-        addThis->_next = 0;
-    }
-    else {
-        TIXMLASSERT( _firstChild == 0 );
-        _firstChild = _lastChild = addThis;
-
-        addThis->_prev = 0;
-        addThis->_next = 0;
-    }
-    addThis->_parent = this;
-    return addThis;
-}
-
-
-XMLNode* XMLNode::InsertFirstChild( XMLNode* addThis )
-{
-    TIXMLASSERT( addThis );
-    if ( addThis->_document != _document ) {
-        TIXMLASSERT( false );
-        return 0;
-    }
-    InsertChildPreamble( addThis );
-
-    if ( _firstChild ) {
-        TIXMLASSERT( _lastChild );
-        TIXMLASSERT( _firstChild->_prev == 0 );
-
-        _firstChild->_prev = addThis;
-        addThis->_next = _firstChild;
-        _firstChild = addThis;
-
-        addThis->_prev = 0;
-    }
-    else {
-        TIXMLASSERT( _lastChild == 0 );
-        _firstChild = _lastChild = addThis;
-
-        addThis->_prev = 0;
-        addThis->_next = 0;
-    }
-    addThis->_parent = this;
-    return addThis;
-}
-
-
-XMLNode* XMLNode::InsertAfterChild( XMLNode* afterThis, XMLNode* addThis )
-{
-    TIXMLASSERT( addThis );
-    if ( addThis->_document != _document ) {
-        TIXMLASSERT( false );
-        return 0;
-    }
-
-    TIXMLASSERT( afterThis );
-
-    if ( afterThis->_parent != this ) {
-        TIXMLASSERT( false );
-        return 0;
-    }
-    if ( afterThis == addThis ) {
-        // Current state: BeforeThis -> AddThis -> OneAfterAddThis
-        // Now AddThis must disappear from it's location and then
-        // reappear between BeforeThis and OneAfterAddThis.
-        // So just leave it where it is.
-        return addThis;
-    }
-
-    if ( afterThis->_next == 0 ) {
-        // The last node or the only node.
-        return InsertEndChild( addThis );
-    }
-    InsertChildPreamble( addThis );
-    addThis->_prev = afterThis;
-    addThis->_next = afterThis->_next;
-    afterThis->_next->_prev = addThis;
-    afterThis->_next = addThis;
-    addThis->_parent = this;
-    return addThis;
-}
-
-
-
-
-const XMLElement* XMLNode::FirstChildElement( const char* name ) const
-{
-    for( const XMLNode* node = _firstChild; node; node = node->_next ) {
-        const XMLElement* element = node->ToElementWithName( name );
-        if ( element ) {
-            return element;
-        }
-    }
-    return 0;
-}
-
-
-const XMLElement* XMLNode::LastChildElement( const char* name ) const
-{
-    for( const XMLNode* node = _lastChild; node; node = node->_prev ) {
-        const XMLElement* element = node->ToElementWithName( name );
-        if ( element ) {
-            return element;
-        }
-    }
-    return 0;
-}
-
-
-const XMLElement* XMLNode::NextSiblingElement( const char* name ) const
-{
-    for( const XMLNode* node = _next; node; node = node->_next ) {
-        const XMLElement* element = node->ToElementWithName( name );
-        if ( element ) {
-            return element;
-        }
-    }
-    return 0;
-}
-
-
-const XMLElement* XMLNode::PreviousSiblingElement( const char* name ) const
-{
-    for( const XMLNode* node = _prev; node; node = node->_prev ) {
-        const XMLElement* element = node->ToElementWithName( name );
-        if ( element ) {
-            return element;
-        }
-    }
-    return 0;
-}
-
-
-char* XMLNode::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr )
-{
-    // This is a recursive method, but thinking about it "at the current level"
-    // it is a pretty simple flat list:
-    //		<foo/>
-    //		<!-- comment -->
-    //
-    // With a special case:
-    //		<foo>
-    //		</foo>
-    //		<!-- comment -->
-    //
-    // Where the closing element (/foo) *must* be the next thing after the opening
-    // element, and the names must match. BUT the tricky bit is that the closing
-    // element will be read by the child.
-    //
-    // 'endTag' is the end tag for this node, it is returned by a call to a child.
-    // 'parentEnd' is the end tag for the parent, which is filled in and returned.
-
-	XMLDocument::DepthTracker tracker(_document);
-	if (_document->Error())
-		return 0;
-
-	while( p && *p ) {
-        XMLNode* node = 0;
-
-        p = _document->Identify( p, &node );
-        TIXMLASSERT( p );
-        if ( node == 0 ) {
-            break;
-        }
-
-        int initialLineNum = node->_parseLineNum;
-
-        StrPair endTag;
-        p = node->ParseDeep( p, &endTag, curLineNumPtr );
-        if ( !p ) {
-            DeleteNode( node );
-            if ( !_document->Error() ) {
-                _document->SetError( XML_ERROR_PARSING, initialLineNum, 0);
-            }
-            break;
-        }
-
-        XMLDeclaration* decl = node->ToDeclaration();
-        if ( decl ) {
-            // Declarations are only allowed at document level
-            //
-            // Multiple declarations are allowed but all declarations
-            // must occur before anything else. 
-            //
-            // Optimized due to a security test case. If the first node is 
-            // a declaration, and the last node is a declaration, then only 
-            // declarations have so far been addded.
-            bool wellLocated = false;
-
-            if (ToDocument()) {
-                if (FirstChild()) {
-                    wellLocated =
-                        FirstChild() &&
-                        FirstChild()->ToDeclaration() &&
-                        LastChild() &&
-                        LastChild()->ToDeclaration();
-                }
-                else {
-                    wellLocated = true;
-                }
-            }
-            if ( !wellLocated ) {
-                _document->SetError( XML_ERROR_PARSING_DECLARATION, initialLineNum, "XMLDeclaration value=%s", decl->Value());
-                DeleteNode( node );
-                break;
-            }
-        }
-
-        XMLElement* ele = node->ToElement();
-        if ( ele ) {
-            // We read the end tag. Return it to the parent.
-            if ( ele->ClosingType() == XMLElement::CLOSING ) {
-                if ( parentEndTag ) {
-                    ele->_value.TransferTo( parentEndTag );
-                }
-                node->_memPool->SetTracked();   // created and then immediately deleted.
-                DeleteNode( node );
-                return p;
-            }
-
-            // Handle an end tag returned to this level.
-            // And handle a bunch of annoying errors.
-            bool mismatch = false;
-            if ( endTag.Empty() ) {
-                if ( ele->ClosingType() == XMLElement::OPEN ) {
-                    mismatch = true;
-                }
-            }
-            else {
-                if ( ele->ClosingType() != XMLElement::OPEN ) {
-                    mismatch = true;
-                }
-                else if ( !XMLUtil::StringEqual( endTag.GetStr(), ele->Name() ) ) {
-                    mismatch = true;
-                }
-            }
-            if ( mismatch ) {
-                _document->SetError( XML_ERROR_MISMATCHED_ELEMENT, initialLineNum, "XMLElement name=%s", ele->Name());
-                DeleteNode( node );
-                break;
-            }
-        }
-        InsertEndChild( node );
-    }
-    return 0;
-}
-
-/*static*/ void XMLNode::DeleteNode( XMLNode* node )
-{
-    if ( node == 0 ) {
-        return;
-    }
-	TIXMLASSERT(node->_document);
-	if (!node->ToDocument()) {
-		node->_document->MarkInUse(node);
-	}
-
-    MemPool* pool = node->_memPool;
-    node->~XMLNode();
-    pool->Free( node );
-}
-
-void XMLNode::InsertChildPreamble( XMLNode* insertThis ) const
-{
-    TIXMLASSERT( insertThis );
-    TIXMLASSERT( insertThis->_document == _document );
-
-	if (insertThis->_parent) {
-        insertThis->_parent->Unlink( insertThis );
-	}
-	else {
-		insertThis->_document->MarkInUse(insertThis);
-        insertThis->_memPool->SetTracked();
-	}
-}
-
-const XMLElement* XMLNode::ToElementWithName( const char* name ) const
-{
-    const XMLElement* element = this->ToElement();
-    if ( element == 0 ) {
-        return 0;
-    }
-    if ( name == 0 ) {
-        return element;
-    }
-    if ( XMLUtil::StringEqual( element->Name(), name ) ) {
-       return element;
-    }
-    return 0;
-}
-
-// --------- XMLText ---------- //
-char* XMLText::ParseDeep( char* p, StrPair*, int* curLineNumPtr )
-{
-    if ( this->CData() ) {
-        p = _value.ParseText( p, "]]>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr );
-        if ( !p ) {
-            _document->SetError( XML_ERROR_PARSING_CDATA, _parseLineNum, 0 );
-        }
-        return p;
-    }
-    else {
-        int flags = _document->ProcessEntities() ? StrPair::TEXT_ELEMENT : StrPair::TEXT_ELEMENT_LEAVE_ENTITIES;
-        if ( _document->WhitespaceMode() == COLLAPSE_WHITESPACE ) {
-            flags |= StrPair::NEEDS_WHITESPACE_COLLAPSING;
-        }
-
-        p = _value.ParseText( p, "<", flags, curLineNumPtr );
-        if ( p && *p ) {
-            return p-1;
-        }
-        if ( !p ) {
-            _document->SetError( XML_ERROR_PARSING_TEXT, _parseLineNum, 0 );
-        }
-    }
-    return 0;
-}
-
-
-XMLNode* XMLText::ShallowClone( XMLDocument* doc ) const
-{
-    if ( !doc ) {
-        doc = _document;
-    }
-    XMLText* text = doc->NewText( Value() );	// fixme: this will always allocate memory. Intern?
-    text->SetCData( this->CData() );
-    return text;
-}
-
-
-bool XMLText::ShallowEqual( const XMLNode* compare ) const
-{
-    TIXMLASSERT( compare );
-    const XMLText* text = compare->ToText();
-    return ( text && XMLUtil::StringEqual( text->Value(), Value() ) );
-}
-
-
-bool XMLText::Accept( XMLVisitor* visitor ) const
-{
-    TIXMLASSERT( visitor );
-    return visitor->Visit( *this );
-}
-
-
-// --------- XMLComment ---------- //
-
-XMLComment::XMLComment( XMLDocument* doc ) : XMLNode( doc )
-{
-}
-
-
-XMLComment::~XMLComment()
-{
-}
-
-
-char* XMLComment::ParseDeep( char* p, StrPair*, int* curLineNumPtr )
-{
-    // Comment parses as text.
-    p = _value.ParseText( p, "-->", StrPair::COMMENT, curLineNumPtr );
-    if ( p == 0 ) {
-        _document->SetError( XML_ERROR_PARSING_COMMENT, _parseLineNum, 0 );
-    }
-    return p;
-}
-
-
-XMLNode* XMLComment::ShallowClone( XMLDocument* doc ) const
-{
-    if ( !doc ) {
-        doc = _document;
-    }
-    XMLComment* comment = doc->NewComment( Value() );	// fixme: this will always allocate memory. Intern?
-    return comment;
-}
-
-
-bool XMLComment::ShallowEqual( const XMLNode* compare ) const
-{
-    TIXMLASSERT( compare );
-    const XMLComment* comment = compare->ToComment();
-    return ( comment && XMLUtil::StringEqual( comment->Value(), Value() ));
-}
-
-
-bool XMLComment::Accept( XMLVisitor* visitor ) const
-{
-    TIXMLASSERT( visitor );
-    return visitor->Visit( *this );
-}
-
-
-// --------- XMLDeclaration ---------- //
-
-XMLDeclaration::XMLDeclaration( XMLDocument* doc ) : XMLNode( doc )
-{
-}
-
-
-XMLDeclaration::~XMLDeclaration()
-{
-    //printf( "~XMLDeclaration\n" );
-}
-
-
-char* XMLDeclaration::ParseDeep( char* p, StrPair*, int* curLineNumPtr )
-{
-    // Declaration parses as text.
-    p = _value.ParseText( p, "?>", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr );
-    if ( p == 0 ) {
-        _document->SetError( XML_ERROR_PARSING_DECLARATION, _parseLineNum, 0 );
-    }
-    return p;
-}
-
-
-XMLNode* XMLDeclaration::ShallowClone( XMLDocument* doc ) const
-{
-    if ( !doc ) {
-        doc = _document;
-    }
-    XMLDeclaration* dec = doc->NewDeclaration( Value() );	// fixme: this will always allocate memory. Intern?
-    return dec;
-}
-
-
-bool XMLDeclaration::ShallowEqual( const XMLNode* compare ) const
-{
-    TIXMLASSERT( compare );
-    const XMLDeclaration* declaration = compare->ToDeclaration();
-    return ( declaration && XMLUtil::StringEqual( declaration->Value(), Value() ));
-}
-
-
-
-bool XMLDeclaration::Accept( XMLVisitor* visitor ) const
-{
-    TIXMLASSERT( visitor );
-    return visitor->Visit( *this );
-}
-
-// --------- XMLUnknown ---------- //
-
-XMLUnknown::XMLUnknown( XMLDocument* doc ) : XMLNode( doc )
-{
-}
-
-
-XMLUnknown::~XMLUnknown()
-{
-}
-
-
-char* XMLUnknown::ParseDeep( char* p, StrPair*, int* curLineNumPtr )
-{
-    // Unknown parses as text.
-    p = _value.ParseText( p, ">", StrPair::NEEDS_NEWLINE_NORMALIZATION, curLineNumPtr );
-    if ( !p ) {
-        _document->SetError( XML_ERROR_PARSING_UNKNOWN, _parseLineNum, 0 );
-    }
-    return p;
-}
-
-
-XMLNode* XMLUnknown::ShallowClone( XMLDocument* doc ) const
-{
-    if ( !doc ) {
-        doc = _document;
-    }
-    XMLUnknown* text = doc->NewUnknown( Value() );	// fixme: this will always allocate memory. Intern?
-    return text;
-}
-
-
-bool XMLUnknown::ShallowEqual( const XMLNode* compare ) const
-{
-    TIXMLASSERT( compare );
-    const XMLUnknown* unknown = compare->ToUnknown();
-    return ( unknown && XMLUtil::StringEqual( unknown->Value(), Value() ));
-}
-
-
-bool XMLUnknown::Accept( XMLVisitor* visitor ) const
-{
-    TIXMLASSERT( visitor );
-    return visitor->Visit( *this );
-}
-
-// --------- XMLAttribute ---------- //
-
-const char* XMLAttribute::Name() const
-{
-    return _name.GetStr();
-}
-
-const char* XMLAttribute::Value() const
-{
-    return _value.GetStr();
-}
-
-char* XMLAttribute::ParseDeep( char* p, bool processEntities, int* curLineNumPtr )
-{
-    // Parse using the name rules: bug fix, was using ParseText before
-    p = _name.ParseName( p );
-    if ( !p || !*p ) {
-        return 0;
-    }
-
-    // Skip white space before =
-    p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr );
-    if ( *p != '=' ) {
-        return 0;
-    }
-
-    ++p;	// move up to opening quote
-    p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr );
-    if ( *p != '\"' && *p != '\'' ) {
-        return 0;
-    }
-
-    char endTag[2] = { *p, 0 };
-    ++p;	// move past opening quote
-
-    p = _value.ParseText( p, endTag, processEntities ? StrPair::ATTRIBUTE_VALUE : StrPair::ATTRIBUTE_VALUE_LEAVE_ENTITIES, curLineNumPtr );
-    return p;
-}
-
-
-void XMLAttribute::SetName( const char* n )
-{
-    _name.SetStr( n );
-}
-
-
-XMLError XMLAttribute::QueryIntValue( int* value ) const
-{
-    if ( XMLUtil::ToInt( Value(), value )) {
-        return XML_SUCCESS;
-    }
-    return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-XMLError XMLAttribute::QueryUnsignedValue( unsigned int* value ) const
-{
-    if ( XMLUtil::ToUnsigned( Value(), value )) {
-        return XML_SUCCESS;
-    }
-    return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-XMLError XMLAttribute::QueryInt64Value(int64_t* value) const
-{
-	if (XMLUtil::ToInt64(Value(), value)) {
-		return XML_SUCCESS;
-	}
-	return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-XMLError XMLAttribute::QueryBoolValue( bool* value ) const
-{
-    if ( XMLUtil::ToBool( Value(), value )) {
-        return XML_SUCCESS;
-    }
-    return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-XMLError XMLAttribute::QueryFloatValue( float* value ) const
-{
-    if ( XMLUtil::ToFloat( Value(), value )) {
-        return XML_SUCCESS;
-    }
-    return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-XMLError XMLAttribute::QueryDoubleValue( double* value ) const
-{
-    if ( XMLUtil::ToDouble( Value(), value )) {
-        return XML_SUCCESS;
-    }
-    return XML_WRONG_ATTRIBUTE_TYPE;
-}
-
-
-void XMLAttribute::SetAttribute( const char* v )
-{
-    _value.SetStr( v );
-}
-
-
-void XMLAttribute::SetAttribute( int v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    _value.SetStr( buf );
-}
-
-
-void XMLAttribute::SetAttribute( unsigned v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    _value.SetStr( buf );
-}
-
-
-void XMLAttribute::SetAttribute(int64_t v)
-{
-	char buf[BUF_SIZE];
-	XMLUtil::ToStr(v, buf, BUF_SIZE);
-	_value.SetStr(buf);
-}
-
-
-
-void XMLAttribute::SetAttribute( bool v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    _value.SetStr( buf );
-}
-
-void XMLAttribute::SetAttribute( double v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    _value.SetStr( buf );
-}
-
-void XMLAttribute::SetAttribute( float v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    _value.SetStr( buf );
-}
-
-
-// --------- XMLElement ---------- //
-XMLElement::XMLElement( XMLDocument* doc ) : XMLNode( doc ),
-    _closingType( OPEN ),
-    _rootAttribute( 0 )
-{
-}
-
-
-XMLElement::~XMLElement()
-{
-    while( _rootAttribute ) {
-        XMLAttribute* next = _rootAttribute->_next;
-        DeleteAttribute( _rootAttribute );
-        _rootAttribute = next;
-    }
-}
-
-
-const XMLAttribute* XMLElement::FindAttribute( const char* name ) const
-{
-    for( XMLAttribute* a = _rootAttribute; a; a = a->_next ) {
-        if ( XMLUtil::StringEqual( a->Name(), name ) ) {
-            return a;
-        }
-    }
-    return 0;
-}
-
-
-const char* XMLElement::Attribute( const char* name, const char* value ) const
-{
-    const XMLAttribute* a = FindAttribute( name );
-    if ( !a ) {
-        return 0;
-    }
-    if ( !value || XMLUtil::StringEqual( a->Value(), value )) {
-        return a->Value();
-    }
-    return 0;
-}
-
-int XMLElement::IntAttribute(const char* name, int defaultValue) const
-{
-	int i = defaultValue;
-	QueryIntAttribute(name, &i);
-	return i;
-}
-
-unsigned XMLElement::UnsignedAttribute(const char* name, unsigned defaultValue) const
-{
-	unsigned i = defaultValue;
-	QueryUnsignedAttribute(name, &i);
-	return i;
-}
-
-int64_t XMLElement::Int64Attribute(const char* name, int64_t defaultValue) const
-{
-	int64_t i = defaultValue;
-	QueryInt64Attribute(name, &i);
-	return i;
-}
-
-bool XMLElement::BoolAttribute(const char* name, bool defaultValue) const
-{
-	bool b = defaultValue;
-	QueryBoolAttribute(name, &b);
-	return b;
-}
-
-double XMLElement::DoubleAttribute(const char* name, double defaultValue) const
-{
-	double d = defaultValue;
-	QueryDoubleAttribute(name, &d);
-	return d;
-}
-
-float XMLElement::FloatAttribute(const char* name, float defaultValue) const
-{
-	float f = defaultValue;
-	QueryFloatAttribute(name, &f);
-	return f;
-}
-
-const char* XMLElement::GetText() const
-{
-    if ( FirstChild() && FirstChild()->ToText() ) {
-        return FirstChild()->Value();
-    }
-    return 0;
-}
-
-
-void	XMLElement::SetText( const char* inText )
-{
-	if ( FirstChild() && FirstChild()->ToText() )
-		FirstChild()->SetValue( inText );
-	else {
-		XMLText*	theText = GetDocument()->NewText( inText );
-		InsertFirstChild( theText );
-	}
-}
-
-
-void XMLElement::SetText( int v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    SetText( buf );
-}
-
-
-void XMLElement::SetText( unsigned v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    SetText( buf );
-}
-
-
-void XMLElement::SetText(int64_t v)
-{
-	char buf[BUF_SIZE];
-	XMLUtil::ToStr(v, buf, BUF_SIZE);
-	SetText(buf);
-}
-
-
-void XMLElement::SetText( bool v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    SetText( buf );
-}
-
-
-void XMLElement::SetText( float v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    SetText( buf );
-}
-
-
-void XMLElement::SetText( double v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    SetText( buf );
-}
-
-
-XMLError XMLElement::QueryIntText( int* ival ) const
-{
-    if ( FirstChild() && FirstChild()->ToText() ) {
-        const char* t = FirstChild()->Value();
-        if ( XMLUtil::ToInt( t, ival ) ) {
-            return XML_SUCCESS;
-        }
-        return XML_CAN_NOT_CONVERT_TEXT;
-    }
-    return XML_NO_TEXT_NODE;
-}
-
-
-XMLError XMLElement::QueryUnsignedText( unsigned* uval ) const
-{
-    if ( FirstChild() && FirstChild()->ToText() ) {
-        const char* t = FirstChild()->Value();
-        if ( XMLUtil::ToUnsigned( t, uval ) ) {
-            return XML_SUCCESS;
-        }
-        return XML_CAN_NOT_CONVERT_TEXT;
-    }
-    return XML_NO_TEXT_NODE;
-}
-
-
-XMLError XMLElement::QueryInt64Text(int64_t* ival) const
-{
-	if (FirstChild() && FirstChild()->ToText()) {
-		const char* t = FirstChild()->Value();
-		if (XMLUtil::ToInt64(t, ival)) {
-			return XML_SUCCESS;
-		}
-		return XML_CAN_NOT_CONVERT_TEXT;
-	}
-	return XML_NO_TEXT_NODE;
-}
-
-
-XMLError XMLElement::QueryBoolText( bool* bval ) const
-{
-    if ( FirstChild() && FirstChild()->ToText() ) {
-        const char* t = FirstChild()->Value();
-        if ( XMLUtil::ToBool( t, bval ) ) {
-            return XML_SUCCESS;
-        }
-        return XML_CAN_NOT_CONVERT_TEXT;
-    }
-    return XML_NO_TEXT_NODE;
-}
-
-
-XMLError XMLElement::QueryDoubleText( double* dval ) const
-{
-    if ( FirstChild() && FirstChild()->ToText() ) {
-        const char* t = FirstChild()->Value();
-        if ( XMLUtil::ToDouble( t, dval ) ) {
-            return XML_SUCCESS;
-        }
-        return XML_CAN_NOT_CONVERT_TEXT;
-    }
-    return XML_NO_TEXT_NODE;
-}
-
-
-XMLError XMLElement::QueryFloatText( float* fval ) const
-{
-    if ( FirstChild() && FirstChild()->ToText() ) {
-        const char* t = FirstChild()->Value();
-        if ( XMLUtil::ToFloat( t, fval ) ) {
-            return XML_SUCCESS;
-        }
-        return XML_CAN_NOT_CONVERT_TEXT;
-    }
-    return XML_NO_TEXT_NODE;
-}
-
-int XMLElement::IntText(int defaultValue) const
-{
-	int i = defaultValue;
-	QueryIntText(&i);
-	return i;
-}
-
-unsigned XMLElement::UnsignedText(unsigned defaultValue) const
-{
-	unsigned i = defaultValue;
-	QueryUnsignedText(&i);
-	return i;
-}
-
-int64_t XMLElement::Int64Text(int64_t defaultValue) const
-{
-	int64_t i = defaultValue;
-	QueryInt64Text(&i);
-	return i;
-}
-
-bool XMLElement::BoolText(bool defaultValue) const
-{
-	bool b = defaultValue;
-	QueryBoolText(&b);
-	return b;
-}
-
-double XMLElement::DoubleText(double defaultValue) const
-{
-	double d = defaultValue;
-	QueryDoubleText(&d);
-	return d;
-}
-
-float XMLElement::FloatText(float defaultValue) const
-{
-	float f = defaultValue;
-	QueryFloatText(&f);
-	return f;
-}
-
-
-XMLAttribute* XMLElement::FindOrCreateAttribute( const char* name )
-{
-    XMLAttribute* last = 0;
-    XMLAttribute* attrib = 0;
-    for( attrib = _rootAttribute;
-            attrib;
-            last = attrib, attrib = attrib->_next ) {
-        if ( XMLUtil::StringEqual( attrib->Name(), name ) ) {
-            break;
-        }
-    }
-    if ( !attrib ) {
-        attrib = CreateAttribute();
-        TIXMLASSERT( attrib );
-        if ( last ) {
-            TIXMLASSERT( last->_next == 0 );
-            last->_next = attrib;
-        }
-        else {
-            TIXMLASSERT( _rootAttribute == 0 );
-            _rootAttribute = attrib;
-        }
-        attrib->SetName( name );
-    }
-    return attrib;
-}
-
-
-void XMLElement::DeleteAttribute( const char* name )
-{
-    XMLAttribute* prev = 0;
-    for( XMLAttribute* a=_rootAttribute; a; a=a->_next ) {
-        if ( XMLUtil::StringEqual( name, a->Name() ) ) {
-            if ( prev ) {
-                prev->_next = a->_next;
-            }
-            else {
-                _rootAttribute = a->_next;
-            }
-            DeleteAttribute( a );
-            break;
-        }
-        prev = a;
-    }
-}
-
-
-char* XMLElement::ParseAttributes( char* p, int* curLineNumPtr )
-{
-    XMLAttribute* prevAttribute = 0;
-
-    // Read the attributes.
-    while( p ) {
-        p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr );
-        if ( !(*p) ) {
-            _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, "XMLElement name=%s", Name() );
-            return 0;
-        }
-
-        // attribute.
-        if (XMLUtil::IsNameStartChar( *p ) ) {
-            XMLAttribute* attrib = CreateAttribute();
-            TIXMLASSERT( attrib );
-            attrib->_parseLineNum = _document->_parseCurLineNum;
-
-            int attrLineNum = attrib->_parseLineNum;
-
-            p = attrib->ParseDeep( p, _document->ProcessEntities(), curLineNumPtr );
-            if ( !p || Attribute( attrib->Name() ) ) {
-                DeleteAttribute( attrib );
-                _document->SetError( XML_ERROR_PARSING_ATTRIBUTE, attrLineNum, "XMLElement name=%s", Name() );
-                return 0;
-            }
-            // There is a minor bug here: if the attribute in the source xml
-            // document is duplicated, it will not be detected and the
-            // attribute will be doubly added. However, tracking the 'prevAttribute'
-            // avoids re-scanning the attribute list. Preferring performance for
-            // now, may reconsider in the future.
-            if ( prevAttribute ) {
-                TIXMLASSERT( prevAttribute->_next == 0 );
-                prevAttribute->_next = attrib;
-            }
-            else {
-                TIXMLASSERT( _rootAttribute == 0 );
-                _rootAttribute = attrib;
-            }
-            prevAttribute = attrib;
-        }
-        // end of the tag
-        else if ( *p == '>' ) {
-            ++p;
-            break;
-        }
-        // end of the tag
-        else if ( *p == '/' && *(p+1) == '>' ) {
-            _closingType = CLOSED;
-            return p+2;	// done; sealed element.
-        }
-        else {
-            _document->SetError( XML_ERROR_PARSING_ELEMENT, _parseLineNum, 0 );
-            return 0;
-        }
-    }
-    return p;
-}
-
-void XMLElement::DeleteAttribute( XMLAttribute* attribute )
-{
-    if ( attribute == 0 ) {
-        return;
-    }
-    MemPool* pool = attribute->_memPool;
-    attribute->~XMLAttribute();
-    pool->Free( attribute );
-}
-
-XMLAttribute* XMLElement::CreateAttribute()
-{
-    TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() );
-    XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();
-    TIXMLASSERT( attrib );
-    attrib->_memPool = &_document->_attributePool;
-    attrib->_memPool->SetTracked();
-    return attrib;
-}
-
-//
-//	<ele></ele>
-//	<ele>foo<b>bar</b></ele>
-//
-char* XMLElement::ParseDeep( char* p, StrPair* parentEndTag, int* curLineNumPtr )
-{
-    // Read the element name.
-    p = XMLUtil::SkipWhiteSpace( p, curLineNumPtr );
-
-    // The closing element is the </element> form. It is
-    // parsed just like a regular element then deleted from
-    // the DOM.
-    if ( *p == '/' ) {
-        _closingType = CLOSING;
-        ++p;
-    }
-
-    p = _value.ParseName( p );
-    if ( _value.Empty() ) {
-        return 0;
-    }
-
-    p = ParseAttributes( p, curLineNumPtr );
-    if ( !p || !*p || _closingType != OPEN ) {
-        return p;
-    }
-
-    p = XMLNode::ParseDeep( p, parentEndTag, curLineNumPtr );
-    return p;
-}
-
-
-
-XMLNode* XMLElement::ShallowClone( XMLDocument* doc ) const
-{
-    if ( !doc ) {
-        doc = _document;
-    }
-    XMLElement* element = doc->NewElement( Value() );					// fixme: this will always allocate memory. Intern?
-    for( const XMLAttribute* a=FirstAttribute(); a; a=a->Next() ) {
-        element->SetAttribute( a->Name(), a->Value() );					// fixme: this will always allocate memory. Intern?
-    }
-    return element;
-}
-
-
-bool XMLElement::ShallowEqual( const XMLNode* compare ) const
-{
-    TIXMLASSERT( compare );
-    const XMLElement* other = compare->ToElement();
-    if ( other && XMLUtil::StringEqual( other->Name(), Name() )) {
-
-        const XMLAttribute* a=FirstAttribute();
-        const XMLAttribute* b=other->FirstAttribute();
-
-        while ( a && b ) {
-            if ( !XMLUtil::StringEqual( a->Value(), b->Value() ) ) {
-                return false;
-            }
-            a = a->Next();
-            b = b->Next();
-        }
-        if ( a || b ) {
-            // different count
-            return false;
-        }
-        return true;
-    }
-    return false;
-}
-
-
-bool XMLElement::Accept( XMLVisitor* visitor ) const
-{
-    TIXMLASSERT( visitor );
-    if ( visitor->VisitEnter( *this, _rootAttribute ) ) {
-        for ( const XMLNode* node=FirstChild(); node; node=node->NextSibling() ) {
-            if ( !node->Accept( visitor ) ) {
-                break;
-            }
-        }
-    }
-    return visitor->VisitExit( *this );
-}
-
-
-// --------- XMLDocument ----------- //
-
-// Warning: List must match 'enum XMLError'
-const char* XMLDocument::_errorNames[XML_ERROR_COUNT] = {
-    "XML_SUCCESS",
-    "XML_NO_ATTRIBUTE",
-    "XML_WRONG_ATTRIBUTE_TYPE",
-    "XML_ERROR_FILE_NOT_FOUND",
-    "XML_ERROR_FILE_COULD_NOT_BE_OPENED",
-    "XML_ERROR_FILE_READ_ERROR",
-    "XML_ERROR_PARSING_ELEMENT",
-    "XML_ERROR_PARSING_ATTRIBUTE",
-    "XML_ERROR_PARSING_TEXT",
-    "XML_ERROR_PARSING_CDATA",
-    "XML_ERROR_PARSING_COMMENT",
-    "XML_ERROR_PARSING_DECLARATION",
-    "XML_ERROR_PARSING_UNKNOWN",
-    "XML_ERROR_EMPTY_DOCUMENT",
-    "XML_ERROR_MISMATCHED_ELEMENT",
-    "XML_ERROR_PARSING",
-    "XML_CAN_NOT_CONVERT_TEXT",
-    "XML_NO_TEXT_NODE",
-	"XML_ELEMENT_DEPTH_EXCEEDED"
-};
-
-
-XMLDocument::XMLDocument( bool processEntities, Whitespace whitespaceMode ) :
-    XMLNode( 0 ),
-    _writeBOM( false ),
-    _processEntities( processEntities ),
-    _errorID(XML_SUCCESS),
-    _whitespaceMode( whitespaceMode ),
-    _errorStr(),
-    _errorLineNum( 0 ),
-    _charBuffer( 0 ),
-    _parseCurLineNum( 0 ),
-	_parsingDepth(0),
-    _unlinked(),
-    _elementPool(),
-    _attributePool(),
-    _textPool(),
-    _commentPool()
-{
-    // avoid VC++ C4355 warning about 'this' in initializer list (C4355 is off by default in VS2012+)
-    _document = this;
-}
-
-
-XMLDocument::~XMLDocument()
-{
-    Clear();
-}
-
-
-void XMLDocument::MarkInUse(XMLNode* node)
-{
-	TIXMLASSERT(node);
-	TIXMLASSERT(node->_parent == 0);
-
-	for (int i = 0; i < _unlinked.Size(); ++i) {
-		if (node == _unlinked[i]) {
-			_unlinked.SwapRemove(i);
-			break;
-		}
-	}
-}
-
-void XMLDocument::Clear()
-{
-    DeleteChildren();
-	while( _unlinked.Size()) {
-		DeleteNode(_unlinked[0]);	// Will remove from _unlinked as part of delete.
-	}
-
-#ifdef TINYXML2_DEBUG
-    const bool hadError = Error();
-#endif
-    ClearError();
-
-    delete [] _charBuffer;
-    _charBuffer = 0;
-	_parsingDepth = 0;
-
-#if 0
-    _textPool.Trace( "text" );
-    _elementPool.Trace( "element" );
-    _commentPool.Trace( "comment" );
-    _attributePool.Trace( "attribute" );
-#endif
-
-#ifdef TINYXML2_DEBUG
-    if ( !hadError ) {
-        TIXMLASSERT( _elementPool.CurrentAllocs()   == _elementPool.Untracked() );
-        TIXMLASSERT( _attributePool.CurrentAllocs() == _attributePool.Untracked() );
-        TIXMLASSERT( _textPool.CurrentAllocs()      == _textPool.Untracked() );
-        TIXMLASSERT( _commentPool.CurrentAllocs()   == _commentPool.Untracked() );
-    }
-#endif
-}
-
-
-void XMLDocument::DeepCopy(XMLDocument* target) const
-{
-	TIXMLASSERT(target);
-    if (target == this) {
-        return; // technically success - a no-op.
-    }
-
-	target->Clear();
-	for (const XMLNode* node = this->FirstChild(); node; node = node->NextSibling()) {
-		target->InsertEndChild(node->DeepClone(target));
-	}
-}
-
-XMLElement* XMLDocument::NewElement( const char* name )
-{
-    XMLElement* ele = CreateUnlinkedNode<XMLElement>( _elementPool );
-    ele->SetName( name );
-    return ele;
-}
-
-
-XMLComment* XMLDocument::NewComment( const char* str )
-{
-    XMLComment* comment = CreateUnlinkedNode<XMLComment>( _commentPool );
-    comment->SetValue( str );
-    return comment;
-}
-
-
-XMLText* XMLDocument::NewText( const char* str )
-{
-    XMLText* text = CreateUnlinkedNode<XMLText>( _textPool );
-    text->SetValue( str );
-    return text;
-}
-
-
-XMLDeclaration* XMLDocument::NewDeclaration( const char* str )
-{
-    XMLDeclaration* dec = CreateUnlinkedNode<XMLDeclaration>( _commentPool );
-    dec->SetValue( str ? str : "xml version=\"1.0\" encoding=\"UTF-8\"" );
-    return dec;
-}
-
-
-XMLUnknown* XMLDocument::NewUnknown( const char* str )
-{
-    XMLUnknown* unk = CreateUnlinkedNode<XMLUnknown>( _commentPool );
-    unk->SetValue( str );
-    return unk;
-}
-
-static FILE* callfopen( const char* filepath, const char* mode )
-{
-    TIXMLASSERT( filepath );
-    TIXMLASSERT( mode );
-#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE)
-    FILE* fp = 0;
-    errno_t err = fopen_s( &fp, filepath, mode );
-    if ( err ) {
-        return 0;
-    }
-#else
-    FILE* fp = fopen( filepath, mode );
-#endif
-    return fp;
-}
-
-void XMLDocument::DeleteNode( XMLNode* node )	{
-    TIXMLASSERT( node );
-    TIXMLASSERT(node->_document == this );
-    if (node->_parent) {
-        node->_parent->DeleteChild( node );
-    }
-    else {
-        // Isn't in the tree.
-        // Use the parent delete.
-        // Also, we need to mark it tracked: we 'know'
-        // it was never used.
-        node->_memPool->SetTracked();
-        // Call the static XMLNode version:
-        XMLNode::DeleteNode(node);
-    }
-}
-
-
-XMLError XMLDocument::LoadFile( const char* filename )
-{
-    if ( !filename ) {
-        TIXMLASSERT( false );
-        SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=<null>" );
-        return _errorID;
-    }
-
-    Clear();
-    FILE* fp = callfopen( filename, "rb" );
-    if ( !fp ) {
-        SetError( XML_ERROR_FILE_NOT_FOUND, 0, "filename=%s", filename );
-        return _errorID;
-    }
-    LoadFile( fp );
-    fclose( fp );
-    return _errorID;
-}
-
-// This is likely overengineered template art to have a check that unsigned long value incremented
-// by one still fits into size_t. If size_t type is larger than unsigned long type
-// (x86_64-w64-mingw32 target) then the check is redundant and gcc and clang emit
-// -Wtype-limits warning. This piece makes the compiler select code with a check when a check
-// is useful and code with no check when a check is redundant depending on how size_t and unsigned long
-// types sizes relate to each other.
-template
-<bool = (sizeof(unsigned long) >= sizeof(size_t))>
-struct LongFitsIntoSizeTMinusOne {
-    static bool Fits( unsigned long value )
-    {
-        return value < (size_t)-1;
-    }
-};
-
-template <>
-struct LongFitsIntoSizeTMinusOne<false> {
-    static bool Fits( unsigned long )
-    {
-        return true;
-    }
-};
-
-XMLError XMLDocument::LoadFile( FILE* fp )
-{
-    Clear();
-
-    fseek( fp, 0, SEEK_SET );
-    if ( fgetc( fp ) == EOF && ferror( fp ) != 0 ) {
-        SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
-        return _errorID;
-    }
-
-    fseek( fp, 0, SEEK_END );
-    const long filelength = ftell( fp );
-    fseek( fp, 0, SEEK_SET );
-    if ( filelength == -1L ) {
-        SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
-        return _errorID;
-    }
-    TIXMLASSERT( filelength >= 0 );
-
-    if ( !LongFitsIntoSizeTMinusOne<>::Fits( filelength ) ) {
-        // Cannot handle files which won't fit in buffer together with null terminator
-        SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
-        return _errorID;
-    }
-
-    if ( filelength == 0 ) {
-        SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
-        return _errorID;
-    }
-
-    const size_t size = filelength;
-    TIXMLASSERT( _charBuffer == 0 );
-    _charBuffer = new char[size+1];
-    size_t read = fread( _charBuffer, 1, size, fp );
-    if ( read != size ) {
-        SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
-        return _errorID;
-    }
-
-    _charBuffer[size] = 0;
-
-    Parse();
-    return _errorID;
-}
-
-
-XMLError XMLDocument::SaveFile( const char* filename, bool compact )
-{
-    if ( !filename ) {
-        TIXMLASSERT( false );
-        SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=<null>" );
-        return _errorID;
-    }
-
-    FILE* fp = callfopen( filename, "w" );
-    if ( !fp ) {
-        SetError( XML_ERROR_FILE_COULD_NOT_BE_OPENED, 0, "filename=%s", filename );
-        return _errorID;
-    }
-    SaveFile(fp, compact);
-    fclose( fp );
-    return _errorID;
-}
-
-
-XMLError XMLDocument::SaveFile( FILE* fp, bool compact )
-{
-    // Clear any error from the last save, otherwise it will get reported
-    // for *this* call.
-    ClearError();
-    XMLPrinter stream( fp, compact );
-    Print( &stream );
-    return _errorID;
-}
-
-
-XMLError XMLDocument::Parse( const char* p, size_t len )
-{
-    Clear();
-
-    if ( len == 0 || !p || !*p ) {
-        SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
-        return _errorID;
-    }
-    if ( len == (size_t)(-1) ) {
-        len = strlen( p );
-    }
-    TIXMLASSERT( _charBuffer == 0 );
-    _charBuffer = new char[ len+1 ];
-    memcpy( _charBuffer, p, len );
-    _charBuffer[len] = 0;
-
-    Parse();
-    if ( Error() ) {
-        // clean up now essentially dangling memory.
-        // and the parse fail can put objects in the
-        // pools that are dead and inaccessible.
-        DeleteChildren();
-        _elementPool.Clear();
-        _attributePool.Clear();
-        _textPool.Clear();
-        _commentPool.Clear();
-    }
-    return _errorID;
-}
-
-
-void XMLDocument::Print( XMLPrinter* streamer ) const
-{
-    if ( streamer ) {
-        Accept( streamer );
-    }
-    else {
-        XMLPrinter stdoutStreamer( stdout );
-        Accept( &stdoutStreamer );
-    }
-}
-
-
-void XMLDocument::SetError( XMLError error, int lineNum, const char* format, ... )
-{
-    TIXMLASSERT( error >= 0 && error < XML_ERROR_COUNT );
-    _errorID = error;
-    _errorLineNum = lineNum;
-	_errorStr.Reset();
-
-    size_t BUFFER_SIZE = 1000;
-    char* buffer = new char[BUFFER_SIZE];
-
-    TIXMLASSERT(sizeof(error) <= sizeof(int));
-    TIXML_SNPRINTF(buffer, BUFFER_SIZE, "Error=%s ErrorID=%d (0x%x) Line number=%d", ErrorIDToName(error), int(error), int(error), lineNum);
-
-	if (format) {
-		size_t len = strlen(buffer);
-		TIXML_SNPRINTF(buffer + len, BUFFER_SIZE - len, ": ");
-		len = strlen(buffer);
-
-		va_list va;
-		va_start(va, format);
-		TIXML_VSNPRINTF(buffer + len, BUFFER_SIZE - len, format, va);
-		va_end(va);
-	}
-	_errorStr.SetStr(buffer);
-	delete[] buffer;
-}
-
-
-/*static*/ const char* XMLDocument::ErrorIDToName(XMLError errorID)
-{
-	TIXMLASSERT( errorID >= 0 && errorID < XML_ERROR_COUNT );
-    const char* errorName = _errorNames[errorID];
-    TIXMLASSERT( errorName && errorName[0] );
-    return errorName;
-}
-
-const char* XMLDocument::ErrorStr() const
-{
-	return _errorStr.Empty() ? "" : _errorStr.GetStr();
-}
-
-
-void XMLDocument::PrintError() const
-{
-    printf("%s\n", ErrorStr());
-}
-
-const char* XMLDocument::ErrorName() const
-{
-    return ErrorIDToName(_errorID);
-}
-
-void XMLDocument::Parse()
-{
-    TIXMLASSERT( NoChildren() ); // Clear() must have been called previously
-    TIXMLASSERT( _charBuffer );
-    _parseCurLineNum = 1;
-    _parseLineNum = 1;
-    char* p = _charBuffer;
-    p = XMLUtil::SkipWhiteSpace( p, &_parseCurLineNum );
-    p = const_cast<char*>( XMLUtil::ReadBOM( p, &_writeBOM ) );
-    if ( !*p ) {
-        SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
-        return;
-    }
-    ParseDeep(p, 0, &_parseCurLineNum );
-}
-
-void XMLDocument::PushDepth()
-{
-	_parsingDepth++;
-	if (_parsingDepth == TINYXML2_MAX_ELEMENT_DEPTH) {
-		SetError(XML_ELEMENT_DEPTH_EXCEEDED, _parseCurLineNum, "Element nesting is too deep." );
-	}
-}
-
-void XMLDocument::PopDepth()
-{
-	TIXMLASSERT(_parsingDepth > 0);
-	--_parsingDepth;
-}
-
-XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) :
-    _elementJustOpened( false ),
-    _stack(),
-    _firstElement( true ),
-    _fp( file ),
-    _depth( depth ),
-    _textDepth( -1 ),
-    _processEntities( true ),
-    _compactMode( compact ),
-    _buffer()
-{
-    for( int i=0; i<ENTITY_RANGE; ++i ) {
-        _entityFlag[i] = false;
-        _restrictedEntityFlag[i] = false;
-    }
-    for( int i=0; i<NUM_ENTITIES; ++i ) {
-        const char entityValue = entities[i].value;
-        const unsigned char flagIndex = (unsigned char)entityValue;
-        TIXMLASSERT( flagIndex < ENTITY_RANGE );
-        _entityFlag[flagIndex] = true;
-    }
-    _restrictedEntityFlag[(unsigned char)'&'] = true;
-    _restrictedEntityFlag[(unsigned char)'<'] = true;
-    _restrictedEntityFlag[(unsigned char)'>'] = true;	// not required, but consistency is nice
-    _buffer.Push( 0 );
-}
-
-
-void XMLPrinter::Print( const char* format, ... )
-{
-    va_list     va;
-    va_start( va, format );
-
-    if ( _fp ) {
-        vfprintf( _fp, format, va );
-    }
-    else {
-        const int len = TIXML_VSCPRINTF( format, va );
-        // Close out and re-start the va-args
-        va_end( va );
-        TIXMLASSERT( len >= 0 );
-        va_start( va, format );
-        TIXMLASSERT( _buffer.Size() > 0 && _buffer[_buffer.Size() - 1] == 0 );
-        char* p = _buffer.PushArr( len ) - 1;	// back up over the null terminator.
-		TIXML_VSNPRINTF( p, len+1, format, va );
-    }
-    va_end( va );
-}
-
-
-void XMLPrinter::Write( const char* data, size_t size )
-{
-    if ( _fp ) {
-        fwrite ( data , sizeof(char), size, _fp);
-    }
-    else {
-        char* p = _buffer.PushArr( static_cast<int>(size) ) - 1;   // back up over the null terminator.
-        memcpy( p, data, size );
-        p[size] = 0;
-    }
-}
-
-
-void XMLPrinter::Putc( char ch )
-{
-    if ( _fp ) {
-        fputc ( ch, _fp);
-    }
-    else {
-        char* p = _buffer.PushArr( sizeof(char) ) - 1;   // back up over the null terminator.
-        p[0] = ch;
-        p[1] = 0;
-    }
-}
-
-
-void XMLPrinter::PrintSpace( int depth )
-{
-    for( int i=0; i<depth; ++i ) {
-        Write( "    " );
-    }
-}
-
-
-void XMLPrinter::PrintString( const char* p, bool restricted )
-{
-    // Look for runs of bytes between entities to print.
-    const char* q = p;
-
-    if ( _processEntities ) {
-        const bool* flag = restricted ? _restrictedEntityFlag : _entityFlag;
-        while ( *q ) {
-            TIXMLASSERT( p <= q );
-            // Remember, char is sometimes signed. (How many times has that bitten me?)
-            if ( *q > 0 && *q < ENTITY_RANGE ) {
-                // Check for entities. If one is found, flush
-                // the stream up until the entity, write the
-                // entity, and keep looking.
-                if ( flag[(unsigned char)(*q)] ) {
-                    while ( p < q ) {
-                        const size_t delta = q - p;
-                        const int toPrint = ( INT_MAX < delta ) ? INT_MAX : (int)delta;
-                        Write( p, toPrint );
-                        p += toPrint;
-                    }
-                    bool entityPatternPrinted = false;
-                    for( int i=0; i<NUM_ENTITIES; ++i ) {
-                        if ( entities[i].value == *q ) {
-                            Putc( '&' );
-                            Write( entities[i].pattern, entities[i].length );
-                            Putc( ';' );
-                            entityPatternPrinted = true;
-                            break;
-                        }
-                    }
-                    if ( !entityPatternPrinted ) {
-                        // TIXMLASSERT( entityPatternPrinted ) causes gcc -Wunused-but-set-variable in release
-                        TIXMLASSERT( false );
-                    }
-                    ++p;
-                }
-            }
-            ++q;
-            TIXMLASSERT( p <= q );
-        }
-        // Flush the remaining string. This will be the entire
-        // string if an entity wasn't found.
-        if ( p < q ) {
-            const size_t delta = q - p;
-            const int toPrint = ( INT_MAX < delta ) ? INT_MAX : (int)delta;
-            Write( p, toPrint );
-        }
-    }
-    else {
-        Write( p );
-    }
-}
-
-
-void XMLPrinter::PushHeader( bool writeBOM, bool writeDec )
-{
-    if ( writeBOM ) {
-        static const unsigned char bom[] = { TIXML_UTF_LEAD_0, TIXML_UTF_LEAD_1, TIXML_UTF_LEAD_2, 0 };
-        Write( reinterpret_cast< const char* >( bom ) );
-    }
-    if ( writeDec ) {
-        PushDeclaration( "xml version=\"1.0\"" );
-    }
-}
-
-
-void XMLPrinter::OpenElement( const char* name, bool compactMode )
-{
-    SealElementIfJustOpened();
-    _stack.Push( name );
-
-    if ( _textDepth < 0 && !_firstElement && !compactMode ) {
-        Putc( '\n' );
-    }
-    if ( !compactMode ) {
-        PrintSpace( _depth );
-    }
-
-    Write ( "<" );
-    Write ( name );
-
-    _elementJustOpened = true;
-    _firstElement = false;
-    ++_depth;
-}
-
-
-void XMLPrinter::PushAttribute( const char* name, const char* value )
-{
-    TIXMLASSERT( _elementJustOpened );
-    Putc ( ' ' );
-    Write( name );
-    Write( "=\"" );
-    PrintString( value, false );
-    Putc ( '\"' );
-}
-
-
-void XMLPrinter::PushAttribute( const char* name, int v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    PushAttribute( name, buf );
-}
-
-
-void XMLPrinter::PushAttribute( const char* name, unsigned v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    PushAttribute( name, buf );
-}
-
-
-void XMLPrinter::PushAttribute(const char* name, int64_t v)
-{
-	char buf[BUF_SIZE];
-	XMLUtil::ToStr(v, buf, BUF_SIZE);
-	PushAttribute(name, buf);
-}
-
-
-void XMLPrinter::PushAttribute( const char* name, bool v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    PushAttribute( name, buf );
-}
-
-
-void XMLPrinter::PushAttribute( const char* name, double v )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( v, buf, BUF_SIZE );
-    PushAttribute( name, buf );
-}
-
-
-void XMLPrinter::CloseElement( bool compactMode )
-{
-    --_depth;
-    const char* name = _stack.Pop();
-
-    if ( _elementJustOpened ) {
-        Write( "/>" );
-    }
-    else {
-        if ( _textDepth < 0 && !compactMode) {
-            Putc( '\n' );
-            PrintSpace( _depth );
-        }
-        Write ( "</" );
-        Write ( name );
-        Write ( ">" );
-    }
-
-    if ( _textDepth == _depth ) {
-        _textDepth = -1;
-    }
-    if ( _depth == 0 && !compactMode) {
-        Putc( '\n' );
-    }
-    _elementJustOpened = false;
-}
-
-
-void XMLPrinter::SealElementIfJustOpened()
-{
-    if ( !_elementJustOpened ) {
-        return;
-    }
-    _elementJustOpened = false;
-    Putc( '>' );
-}
-
-
-void XMLPrinter::PushText( const char* text, bool cdata )
-{
-    _textDepth = _depth-1;
-
-    SealElementIfJustOpened();
-    if ( cdata ) {
-        Write( "<![CDATA[" );
-        Write( text );
-        Write( "]]>" );
-    }
-    else {
-        PrintString( text, true );
-    }
-}
-
-void XMLPrinter::PushText( int64_t value )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( value, buf, BUF_SIZE );
-    PushText( buf, false );
-}
-
-void XMLPrinter::PushText( int value )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( value, buf, BUF_SIZE );
-    PushText( buf, false );
-}
-
-
-void XMLPrinter::PushText( unsigned value )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( value, buf, BUF_SIZE );
-    PushText( buf, false );
-}
-
-
-void XMLPrinter::PushText( bool value )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( value, buf, BUF_SIZE );
-    PushText( buf, false );
-}
-
-
-void XMLPrinter::PushText( float value )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( value, buf, BUF_SIZE );
-    PushText( buf, false );
-}
-
-
-void XMLPrinter::PushText( double value )
-{
-    char buf[BUF_SIZE];
-    XMLUtil::ToStr( value, buf, BUF_SIZE );
-    PushText( buf, false );
-}
-
-
-void XMLPrinter::PushComment( const char* comment )
-{
-    SealElementIfJustOpened();
-    if ( _textDepth < 0 && !_firstElement && !_compactMode) {
-        Putc( '\n' );
-        PrintSpace( _depth );
-    }
-    _firstElement = false;
-
-    Write( "<!--" );
-    Write( comment );
-    Write( "-->" );
-}
-
-
-void XMLPrinter::PushDeclaration( const char* value )
-{
-    SealElementIfJustOpened();
-    if ( _textDepth < 0 && !_firstElement && !_compactMode) {
-        Putc( '\n' );
-        PrintSpace( _depth );
-    }
-    _firstElement = false;
-
-    Write( "<?" );
-    Write( value );
-    Write( "?>" );
-}
-
-
-void XMLPrinter::PushUnknown( const char* value )
-{
-    SealElementIfJustOpened();
-    if ( _textDepth < 0 && !_firstElement && !_compactMode) {
-        Putc( '\n' );
-        PrintSpace( _depth );
-    }
-    _firstElement = false;
-
-    Write( "<!" );
-    Write( value );
-    Putc( '>' );
-}
-
-
-bool XMLPrinter::VisitEnter( const XMLDocument& doc )
-{
-    _processEntities = doc.ProcessEntities();
-    if ( doc.HasBOM() ) {
-        PushHeader( true, false );
-    }
-    return true;
-}
-
-
-bool XMLPrinter::VisitEnter( const XMLElement& element, const XMLAttribute* attribute )
-{
-    const XMLElement* parentElem = 0;
-    if ( element.Parent() ) {
-        parentElem = element.Parent()->ToElement();
-    }
-    const bool compactMode = parentElem ? CompactMode( *parentElem ) : _compactMode;
-    OpenElement( element.Name(), compactMode );
-    while ( attribute ) {
-        PushAttribute( attribute->Name(), attribute->Value() );
-        attribute = attribute->Next();
-    }
-    return true;
-}
-
-
-bool XMLPrinter::VisitExit( const XMLElement& element )
-{
-    CloseElement( CompactMode(element) );
-    return true;
-}
-
-
-bool XMLPrinter::Visit( const XMLText& text )
-{
-    PushText( text.Value(), text.CData() );
-    return true;
-}
-
-
-bool XMLPrinter::Visit( const XMLComment& comment )
-{
-    PushComment( comment.Value() );
-    return true;
-}
-
-bool XMLPrinter::Visit( const XMLDeclaration& declaration )
-{
-    PushDeclaration( declaration.Value() );
-    return true;
-}
-
-
-bool XMLPrinter::Visit( const XMLUnknown& unknown )
-{
-    PushUnknown( unknown.Value() );
-    return true;
-}
-
-}   // namespace tinyxml2

+ 8 - 4
main.cpp

@@ -1,8 +1,8 @@
 
 /*
- * MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR v1.9 (2021-05-28) - standalone console program
- * --------------------------------------------------------------------------------------------
- * A utility by Viktor Chlumsky, (c) 2014 - 2021
+ * MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR - standalone console program
+ * --------------------------------------------------------------------------
+ * A utility by Viktor Chlumsky, (c) 2014 - 2022
  *
  */
 
@@ -276,6 +276,10 @@ static const char * writeOutput(const BitmapConstRef<float, N> &bitmap, const ch
     return NULL;
 }
 
+#define STRINGIZE_(x) #x
+#define STRINGIZE(x) STRINGIZE_(x)
+#define MSDFGEN_VERSION_STRING STRINGIZE(MSDFGEN_VERSION)
+
 #if defined(MSDFGEN_USE_SKIA) && defined(MSDFGEN_USE_OPENMP)
     #define TITLE_SUFFIX    " with Skia & OpenMP"
     #define EXTRA_UNDERLINE "-------------------"
@@ -292,7 +296,7 @@ static const char * writeOutput(const BitmapConstRef<float, N> &bitmap, const ch
 
 static const char *helpText =
     "\n"
-    "Multi-channel signed distance field generator by Viktor Chlumsky v" MSDFGEN_VERSION TITLE_SUFFIX "\n"
+    "Multi-channel signed distance field generator by Viktor Chlumsky v" MSDFGEN_VERSION_STRING TITLE_SUFFIX "\n"
     "---------------------------------------------------------------------" EXTRA_UNDERLINE "\n"
     "  Usage: msdfgen"
     #ifdef _WIN32

+ 3 - 3
msdfgen-ext.h

@@ -2,9 +2,9 @@
 #pragma once
 
 /*
- * MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR v1.9 (2021-05-28) - extensions
- * ----------------------------------------------------------------------------
- * A utility by Viktor Chlumsky, (c) 2014 - 2021
+ * MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR
+ * ---------------------------------------------
+ * A utility by Viktor Chlumsky, (c) 2014 - 2022
  *
  * The extension module provides ways to easily load input and save output using popular formats.
  *

+ 3 - 5
msdfgen.h

@@ -2,9 +2,9 @@
 #pragma once
 
 /*
- * MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR v1.9 (2021-05-28)
- * ---------------------------------------------------------------
- * A utility by Viktor Chlumsky, (c) 2014 - 2021
+ * MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR
+ * ---------------------------------------------
+ * A utility by Viktor Chlumsky, (c) 2014 - 2022
  *
  * The technique used to generate multi-channel distance fields in this code
  * has been developed by Viktor Chlumsky in 2014 for his master's thesis,
@@ -34,8 +34,6 @@
 #include "core/save-tiff.h"
 #include "core/shape-description.h"
 
-#define MSDFGEN_VERSION "1.9"
-
 namespace msdfgen {
 
 /// Generates a conventional single-channel signed distance field.

二进制
resource.h


+ 0 - 29
skia/LICENSE

@@ -1,29 +0,0 @@
-// Copyright (c) 2011 Google Inc. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//    * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//    * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//    * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
---------------------------------------------------------------------------------

+ 0 - 40
skia/include/android/SkAndroidFrameworkUtils.h

@@ -1,40 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkAndroidFrameworkUtils_DEFINED
-#define SkAndroidFrameworkUtils_DEFINED
-
-#include "SkTypes.h"
-
-#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
-
-class SkCanvas;
-
-/**
- *  SkAndroidFrameworkUtils expose private APIs used only by Android framework.
- */
-class SkAndroidFrameworkUtils {
-public:
-
-#if SK_SUPPORT_GPU
-    /**
-     *  clipWithStencil draws the current clip into a stencil buffer with reference value and mask
-     *  set to 0x1. This function works only on a GPU canvas.
-     *
-     *  @param  canvas A GPU canvas that has a non-empty clip.
-     *
-     *  @return true on success or false if clip is empty or not a GPU canvas.
-     */
-    static bool clipWithStencil(SkCanvas* canvas);
-#endif //SK_SUPPORT_GPU
-
-    static void SafetyNetLog(const char*);
-};
-
-#endif // SK_BUILD_FOR_ANDROID_ANDROID
-
-#endif // SkAndroidFrameworkUtils_DEFINED

+ 0 - 154
skia/include/android/SkAnimatedImage.h

@@ -1,154 +0,0 @@
-/*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkAnimatedImage_DEFINED
-#define SkAnimatedImage_DEFINED
-
-#include "SkBitmap.h"
-#include "SkCodecAnimation.h"
-#include "SkDrawable.h"
-#include "SkMatrix.h"
-#include "SkRect.h"
-
-class SkAndroidCodec;
-class SkPicture;
-
-/**
- *  Thread unsafe drawable for drawing animated images (e.g. GIF).
- */
-class SK_API SkAnimatedImage : public SkDrawable {
-public:
-    /**
-     *  Create an SkAnimatedImage from the SkAndroidCodec.
-     *
-     *  Returns null on failure to allocate pixels. On success, this will
-     *  decode the first frame.
-     *
-     *  @param scaledSize Size to draw the image, possibly requiring scaling.
-     *  @param cropRect Rectangle to crop to after scaling.
-     *  @param postProcess Picture to apply after scaling and cropping.
-     */
-    static sk_sp<SkAnimatedImage> Make(std::unique_ptr<SkAndroidCodec>,
-            SkISize scaledSize, SkIRect cropRect, sk_sp<SkPicture> postProcess);
-
-    /**
-     *  Simpler version that uses the default size, no cropping, and no postProcess.
-     */
-    static sk_sp<SkAnimatedImage> Make(std::unique_ptr<SkAndroidCodec>);
-
-    ~SkAnimatedImage() override;
-
-    /**
-     *  Reset the animation to the beginning.
-     */
-    void reset();
-
-    /**
-     *  Whether the animation completed.
-     *
-     *  Returns true after all repetitions are complete, or an error stops the
-     *  animation. Gets reset to false if the animation is restarted.
-     */
-    bool isFinished() const { return fFinished; }
-
-    /**
-     * Returned by decodeNextFrame and currentFrameDuration if the animation
-     * is not running.
-     */
-    static constexpr int kFinished = -1;
-
-    /**
-     *  Decode the next frame.
-     *
-     *  If the animation is on the last frame or has hit an error, returns
-     *  kFinished.
-     */
-    int decodeNextFrame();
-
-    /**
-     *  How long to display the current frame.
-     *
-     *  Useful for the first frame, for which decodeNextFrame is called
-     *  internally.
-     */
-    int currentFrameDuration() {
-        return fCurrentFrameDuration;
-    }
-
-    /**
-     *  Change the repetition count.
-     *
-     *  By default, the image will repeat the number of times indicated in the
-     *  encoded data.
-     *
-     *  Use SkCodec::kRepetitionCountInfinite for infinite, and 0 to show all
-     *  frames once and then stop.
-     */
-    void setRepetitionCount(int count);
-
-    /**
-     *  Return the currently set repetition count.
-     */
-    int getRepetitionCount() const {
-        return fRepetitionCount;
-    }
-
-protected:
-    SkRect onGetBounds() override;
-    void onDraw(SkCanvas*) override;
-
-private:
-    struct Frame {
-        SkBitmap fBitmap;
-        int      fIndex;
-        SkCodecAnimation::DisposalMethod fDisposalMethod;
-
-        // init() may have to create a new SkPixelRef, if the
-        // current one is already in use by another owner (e.g.
-        // an SkPicture). This determines whether to copy the
-        // existing one to the new one.
-        enum class OnInit {
-            // Restore the image from the old SkPixelRef to the
-            // new one.
-            kRestoreIfNecessary,
-            // No need to restore.
-            kNoRestore,
-        };
-
-        Frame();
-        bool init(const SkImageInfo& info, OnInit);
-        bool copyTo(Frame*) const;
-    };
-
-    std::unique_ptr<SkAndroidCodec> fCodec;
-    const SkISize                   fScaledSize;
-    const SkImageInfo               fDecodeInfo;
-    const SkIRect                   fCropRect;
-    const sk_sp<SkPicture>          fPostProcess;
-    const int                       fFrameCount;
-    const bool                      fSimple;     // no crop, scale, or postprocess
-    SkMatrix                        fMatrix;     // used only if !fSimple
-
-    bool                            fFinished;
-    int                             fCurrentFrameDuration;
-    Frame                           fDisplayFrame;
-    Frame                           fDecodingFrame;
-    Frame                           fRestoreFrame;
-    int                             fRepetitionCount;
-    int                             fRepetitionsCompleted;
-
-    SkAnimatedImage(std::unique_ptr<SkAndroidCodec>, SkISize scaledSize,
-            SkImageInfo decodeInfo, SkIRect cropRect, sk_sp<SkPicture> postProcess);
-    SkAnimatedImage(std::unique_ptr<SkAndroidCodec>);
-
-    int computeNextFrame(int current, bool* animationEnded);
-    double finish();
-
-    typedef SkDrawable INHERITED;
-};
-
-#endif // SkAnimatedImage_DEFINED

+ 0 - 29
skia/include/android/SkBRDAllocator.h

@@ -1,29 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkBRDAllocator_DEFINED
-#define SkBRDAllocator_DEFINED
-
-#include "SkBitmap.h"
-#include "SkCodec.h"
-
-/**
- *  Abstract subclass of SkBitmap's allocator.
- *  Allows the allocator to indicate if the memory it allocates
- *  is zero initialized.
- */
-class SkBRDAllocator : public SkBitmap::Allocator {
-public:
-
-    /**
-     *  Indicates if the memory allocated by this allocator is
-     *  zero initialized.
-     */
-    virtual SkCodec::ZeroInitialized zeroInit() const = 0;
-};
-
-#endif // SkBRDAllocator_DEFINED

+ 0 - 92
skia/include/android/SkBitmapRegionDecoder.h

@@ -1,92 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkBitmapRegionDecoder_DEFINED
-#define SkBitmapRegionDecoder_DEFINED
-
-#include "SkBitmap.h"
-#include "SkBRDAllocator.h"
-#include "SkEncodedImageFormat.h"
-#include "SkStream.h"
-
-/*
- * This class aims to provide an interface to test multiple implementations of
- * SkBitmapRegionDecoder.
- */
-class SK_API SkBitmapRegionDecoder {
-public:
-
-    enum Strategy {
-        kAndroidCodec_Strategy, // Uses SkAndroidCodec for scaling and subsetting
-    };
-
-    /*
-     * @param data     Refs the data while this object exists, unrefs on destruction
-     * @param strategy Strategy used for scaling and subsetting
-     * @return         Tries to create an SkBitmapRegionDecoder, returns NULL on failure
-     */
-    static SkBitmapRegionDecoder* Create(sk_sp<SkData>, Strategy strategy);
-
-    /*
-     * @param stream   Takes ownership of the stream
-     * @param strategy Strategy used for scaling and subsetting
-     * @return         Tries to create an SkBitmapRegionDecoder, returns NULL on failure
-     */
-    static SkBitmapRegionDecoder* Create(
-            SkStreamRewindable* stream, Strategy strategy);
-
-    /*
-     * Decode a scaled region of the encoded image stream
-     *
-     * @param bitmap          Container for decoded pixels.  It is assumed that the pixels
-     *                        are initially unallocated and will be allocated by this function.
-     * @param allocator       Allocator for the pixels.  If this is NULL, the default
-     *                        allocator (HeapAllocator) will be used.
-     * @param desiredSubset   Subset of the original image to decode.
-     * @param sampleSize      An integer downscaling factor for the decode.
-     * @param colorType       Preferred output colorType.
-     *                        New implementations should return NULL if they do not support
-     *                        decoding to this color type.
-     *                        The old kOriginal_Strategy will decode to a default color type
-     *                        if this color type is unsupported.
-     * @param requireUnpremul If the image is not opaque, we will use this to determine the
-     *                        alpha type to use.
-     * @param prefColorSpace  If non-null and supported, this is the color space that we will
-     *                        decode into.  Otherwise, we will choose a default.
-     *
-     */
-    virtual bool decodeRegion(SkBitmap* bitmap, SkBRDAllocator* allocator,
-                              const SkIRect& desiredSubset, int sampleSize,
-                              SkColorType colorType, bool requireUnpremul,
-                              sk_sp<SkColorSpace> prefColorSpace = nullptr) = 0;
-
-    virtual SkEncodedImageFormat getEncodedFormat() = 0;
-
-    virtual SkColorType computeOutputColorType(SkColorType requestedColorType) = 0;
-
-    virtual sk_sp<SkColorSpace> computeOutputColorSpace(SkColorType outputColorType,
-            sk_sp<SkColorSpace> prefColorSpace = nullptr) = 0;
-
-
-    int width() const { return fWidth; }
-    int height() const { return fHeight; }
-
-    virtual ~SkBitmapRegionDecoder() {}
-
-protected:
-
-    SkBitmapRegionDecoder(int width, int height)
-        : fWidth(width)
-        , fHeight(height)
-    {}
-
-private:
-    const int fWidth;
-    const int fHeight;
-};
-
-#endif

+ 0 - 42
skia/include/atlastext/SkAtlasTextContext.h

@@ -1,42 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkAtlasTextContext_DEFINED
-#define SkAtlasTextContext_DEFINED
-
-#include "SkRefCnt.h"
-
-class SkAtlasTextRenderer;
-class SkInternalAtlasTextContext;
-
-SkAtlasTextRenderer* SkGetAtlasTextRendererFromInternalContext(class SkInternalAtlasTextContext&);
-
-/**
- * Class that Atlas Text client uses to register their SkAtlasTextRenderer implementation and
- * to create one or more SkAtlasTextTargets (destination surfaces for text rendering).
- */
-class SK_API SkAtlasTextContext : public SkRefCnt {
-public:
-    static sk_sp<SkAtlasTextContext> Make(sk_sp<SkAtlasTextRenderer>);
-
-    SkAtlasTextRenderer* renderer() const {
-        return SkGetAtlasTextRendererFromInternalContext(*fInternalContext);
-    }
-
-    SkInternalAtlasTextContext& internal() { return *fInternalContext; }
-
-private:
-    SkAtlasTextContext() = delete;
-    SkAtlasTextContext(const SkAtlasTextContext&) = delete;
-    SkAtlasTextContext& operator=(const SkAtlasTextContext&) = delete;
-
-    SkAtlasTextContext(sk_sp<SkAtlasTextRenderer>);
-
-    std::unique_ptr<SkInternalAtlasTextContext> fInternalContext;
-};
-
-#endif

+ 0 - 35
skia/include/atlastext/SkAtlasTextFont.h

@@ -1,35 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkAtlasTextFont_DEFINED
-#define SkAtlasTextFont_DEFINED
-
-#include "SkRefCnt.h"
-#include "SkTypeface.h"
-
-/** Represents a font at a size. TODO: What else do we need here (skewX, scaleX, vertical, ...)? */
-class SK_API SkAtlasTextFont : public SkRefCnt {
-public:
-    static sk_sp<SkAtlasTextFont> Make(sk_sp<SkTypeface> typeface, SkScalar size) {
-        return sk_sp<SkAtlasTextFont>(new SkAtlasTextFont(std::move(typeface), size));
-    }
-
-    SkTypeface* typeface() const { return fTypeface.get(); }
-
-    sk_sp<SkTypeface> refTypeface() const { return fTypeface; }
-
-    SkScalar size() const { return fSize; }
-
-private:
-    SkAtlasTextFont(sk_sp<SkTypeface> typeface, SkScalar size)
-            : fTypeface(std::move(typeface)), fSize(size) {}
-
-    sk_sp<SkTypeface> fTypeface;
-    SkScalar fSize;
-};
-
-#endif

+ 0 - 72
skia/include/atlastext/SkAtlasTextRenderer.h

@@ -1,72 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SkPoint3.h"
-#include "SkRefCnt.h"
-
-#ifndef SkAtlasTextRenderer_DEFINED
-#define SkAtlasTextRenderer_DEFINED
-
-/**
- * This is the base class for a renderer implemented by the SkAtlasText client. The
- * SkAtlasTextContext issues texture creations, deletions, uploads, and vertex draws to the
- * renderer. The renderer must perform those actions in the order called to correctly render
- * the text drawn to SkAtlasTextTargets.
- */
-class SK_API SkAtlasTextRenderer : public SkRefCnt {
-public:
-    enum class AtlasFormat {
-        /** Unsigned normalized 8 bit single channel format. */
-        kA8
-    };
-
-    struct SDFVertex {
-        /** Position in device space (not normalized). The third component is w (not z). */
-        SkPoint3 fPosition;
-        /** Color, same value for all four corners of a glyph quad. */
-        uint32_t fColor;
-        /** Texture coordinate (in texel units, not normalized). */
-        int16_t fTextureCoordX;
-        int16_t fTextureCoordY;
-    };
-
-    virtual ~SkAtlasTextRenderer() = default;
-
-    /**
-     * Create a texture of the provided format with dimensions 'width' x 'height'
-     * and return a unique handle.
-     */
-    virtual void* createTexture(AtlasFormat, int width, int height) = 0;
-
-    /**
-     * Delete the texture with the passed handle.
-     */
-    virtual void deleteTexture(void* textureHandle) = 0;
-
-    /**
-     * Place the pixel data specified by 'data' in the texture with handle
-     * 'textureHandle' in the rectangle ['x', 'x' + 'width') x ['y', 'y' + 'height').
-     * 'rowBytes' specifies the byte offset between successive rows in 'data' and will always be
-     * a multiple of the number of bytes per pixel.
-     * The pixel format of data is the same as that of 'textureHandle'.
-     */
-    virtual void setTextureData(void* textureHandle, const void* data, int x, int y, int width,
-                                int height, size_t rowBytes) = 0;
-
-    /**
-     * Draws glyphs using SDFs. The SDF data resides in 'textureHandle'. The array
-     * 'vertices' provides interleaved device-space positions, colors, and
-     * texture coordinates. There are are 4 * 'quadCnt' entries in 'vertices'.
-     */
-    virtual void drawSDFGlyphs(void* targetHandle, void* textureHandle, const SDFVertex vertices[],
-                               int quadCnt) = 0;
-
-    /** Called when a SkAtlasTextureTarget is destroyed. */
-    virtual void targetDeleted(void* targetHandle) = 0;
-};
-
-#endif

+ 0 - 100
skia/include/atlastext/SkAtlasTextTarget.h

@@ -1,100 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkAtlasTextTarget_DEFINED
-#define SkAtlasTextTarget_DEFINED
-
-#include "SkDeque.h"
-#include "SkRefCnt.h"
-#include "SkScalar.h"
-
-#include <memory>
-
-class SkAtlasTextContext;
-class SkAtlasTextFont;
-class SkMatrix;
-struct SkPoint;
-
-/** Represents a client-created renderable surface and is used to draw text into the surface. */
-class SK_API SkAtlasTextTarget {
-public:
-    virtual ~SkAtlasTextTarget();
-
-    /**
-     * Creates a text drawing target. ‘handle’ is used to identify this rendering surface when
-     * draws are flushed to the SkAtlasTextContext's SkAtlasTextRenderer.
-     */
-    static std::unique_ptr<SkAtlasTextTarget> Make(sk_sp<SkAtlasTextContext>,
-                                                   int width,
-                                                   int height,
-                                                   void* handle);
-
-    /**
-     * Enqueues a text draw in the target. The caller provides an array of glyphs and their
-     * positions. The meaning of 'color' here is interpreted by the client's SkAtlasTextRenderer
-     * when it actually renders the text.
-     */
-    virtual void drawText(const SkGlyphID[], const SkPoint[], int glyphCnt, uint32_t color,
-                          const SkAtlasTextFont&) = 0;
-
-    /** Issues all queued text draws to SkAtlasTextRenderer. */
-    virtual void flush() = 0;
-
-    int width() const { return fWidth; }
-    int height() const { return fHeight; }
-
-    void* handle() const { return fHandle; }
-
-    SkAtlasTextContext* context() const { return fContext.get(); }
-
-    /** Saves the current matrix in a stack. Returns the prior depth of the saved matrix stack. */
-    int save();
-    /** Pops the top matrix on the stack if the stack is not empty. */
-    void restore();
-    /**
-     * Pops the matrix stack until the stack depth is count. Does nothing if the depth is already
-     * less than count.
-     */
-    void restoreToCount(int count);
-
-    /** Pre-translates the current CTM. */
-    void translate(SkScalar dx, SkScalar dy);
-    /** Pre-scales the current CTM. */
-    void scale(SkScalar sx, SkScalar sy);
-    /** Pre-rotates the current CTM about the origin. */
-    void rotate(SkScalar degrees);
-    /** Pre-rotates the current CTM about the (px, py). */
-    void rotate(SkScalar degrees, SkScalar px, SkScalar py);
-    /** Pre-skews the current CTM. */
-    void skew(SkScalar sx, SkScalar sy);
-    /** Pre-concats the current CTM. */
-    void concat(const SkMatrix& matrix);
-
-protected:
-    SkAtlasTextTarget(sk_sp<SkAtlasTextContext>, int width, int height, void* handle);
-
-    const SkMatrix& ctm() const { return *static_cast<const SkMatrix*>(fMatrixStack.back()); }
-
-    void* const fHandle;
-    const sk_sp<SkAtlasTextContext> fContext;
-    const int fWidth;
-    const int fHeight;
-
-private:
-    SkDeque fMatrixStack;
-    int fSaveCnt;
-
-    SkMatrix* accessCTM() const {
-        return static_cast<SkMatrix*>(const_cast<void*>(fMatrixStack.back()));
-    }
-
-    SkAtlasTextTarget() = delete;
-    SkAtlasTextTarget(const SkAtlasTextContext&) = delete;
-    SkAtlasTextTarget& operator=(const SkAtlasTextContext&) = delete;
-};
-
-#endif

+ 0 - 159
skia/include/c/sk_canvas.h

@@ -1,159 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_canvas_DEFINED
-#define sk_canvas_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-/**
-    Save the current matrix and clip on the canvas.  When the
-    balancing call to sk_canvas_restore() is made, the previous matrix
-    and clip are restored.
-*/
-SK_API void sk_canvas_save(sk_canvas_t*);
-/**
-    This behaves the same as sk_canvas_save(), but in addition it
-    allocates an offscreen surface. All drawing calls are directed
-    there, and only when the balancing call to sk_canvas_restore() is
-    made is that offscreen transfered to the canvas (or the previous
-    layer).
-
-    @param sk_rect_t* (may be null) This rect, if non-null, is used as
-                      a hint to limit the size of the offscreen, and
-                      thus drawing may be clipped to it, though that
-                      clipping is not guaranteed to happen. If exact
-                      clipping is desired, use sk_canvas_clip_rect().
-    @param sk_paint_t* (may be null) The paint is copied, and is applied
-                       to the offscreen when sk_canvas_restore() is
-                       called.
-*/
-SK_API void sk_canvas_save_layer(sk_canvas_t*, const sk_rect_t*, const sk_paint_t*);
-/**
-    This call balances a previous call to sk_canvas_save() or
-    sk_canvas_save_layer(), and is used to remove all modifications to
-    the matrix and clip state since the last save call.  It is an
-    error to call sk_canvas_restore() more times than save and
-    save_layer were called.
-*/
-SK_API void sk_canvas_restore(sk_canvas_t*);
-
-/**
-    Preconcat the current coordinate transformation matrix with the
-    specified translation.
-*/
-SK_API void sk_canvas_translate(sk_canvas_t*, float dx, float dy);
-/**
-    Preconcat the current coordinate transformation matrix with the
-    specified scale.
-*/
-SK_API void sk_canvas_scale(sk_canvas_t*, float sx, float sy);
-/**
-    Preconcat the current coordinate transformation matrix with the
-    specified rotation in degrees.
-*/
-SK_API void sk_canvas_rotate_degrees(sk_canvas_t*, float degrees);
-/**
-    Preconcat the current coordinate transformation matrix with the
-    specified rotation in radians.
-*/
-SK_API void sk_canvas_rotate_radians(sk_canvas_t*, float radians);
-/**
-    Preconcat the current coordinate transformation matrix with the
-    specified skew.
-*/
-SK_API void sk_canvas_skew(sk_canvas_t*, float sx, float sy);
-/**
-    Preconcat the current coordinate transformation matrix with the
-    specified matrix.
-*/
-SK_API void sk_canvas_concat(sk_canvas_t*, const sk_matrix_t*);
-
-/**
-    Modify the current clip with the specified rectangle.  The new
-    current clip will be the intersection of the old clip and the
-    rectange.
-*/
-SK_API void sk_canvas_clip_rect(sk_canvas_t*, const sk_rect_t*);
-/**
-    Modify the current clip with the specified path.  The new
-    current clip will be the intersection of the old clip and the
-    path.
-*/
-SK_API void sk_canvas_clip_path(sk_canvas_t*, const sk_path_t*);
-
-/**
-    Fill the entire canvas (restricted to the current clip) with the
-    specified paint.
-*/
-SK_API void sk_canvas_draw_paint(sk_canvas_t*, const sk_paint_t*);
-/**
-    Draw the specified rectangle using the specified paint. The
-    rectangle will be filled or stroked based on the style in the
-    paint.
-*/
-SK_API void sk_canvas_draw_rect(sk_canvas_t*, const sk_rect_t*, const sk_paint_t*);
-/**
- *  Draw the circle centered at (cx, cy) with radius rad using the specified paint.
- *  The circle will be filled or framed based on the style in the paint
- */
-SK_API void sk_canvas_draw_circle(sk_canvas_t*, float cx, float cy, float rad, const sk_paint_t*);
-/**
-    Draw the specified oval using the specified paint. The oval will be
-    filled or framed based on the style in the paint
-*/
-SK_API void sk_canvas_draw_oval(sk_canvas_t*, const sk_rect_t*, const sk_paint_t*);
-/**
-    Draw the specified path using the specified paint. The path will be
-    filled or framed based on the style in the paint
-*/
-SK_API void sk_canvas_draw_path(sk_canvas_t*, const sk_path_t*, const sk_paint_t*);
-/**
-    Draw the specified image, with its top/left corner at (x,y), using
-    the specified paint, transformed by the current matrix.
-
-    @param sk_paint_t* (may be NULL) the paint used to draw the image.
-*/
-SK_API void sk_canvas_draw_image(sk_canvas_t*, const sk_image_t*,
-                                 float x, float y, const sk_paint_t*);
-/**
-    Draw the specified image, scaling and translating so that it fills
-    the specified dst rect. If the src rect is non-null, only that
-    subset of the image is transformed and drawn.
-
-    @param sk_paint_t* (may be NULL) The paint used to draw the image.
-*/
-SK_API void sk_canvas_draw_image_rect(sk_canvas_t*, const sk_image_t*,
-                                      const sk_rect_t* src,
-                                      const sk_rect_t* dst, const sk_paint_t*);
-
-/**
-    Draw the picture into this canvas (replay the pciture's drawing commands).
-
-    @param sk_matrix_t* If non-null, apply that matrix to the CTM when
-                        drawing this picture. This is logically
-                        equivalent to: save, concat, draw_picture,
-                        restore.
-
-    @param sk_paint_t* If non-null, draw the picture into a temporary
-                       buffer, and then apply the paint's alpha,
-                       colorfilter, imagefilter, and xfermode to that
-                       buffer as it is drawn to the canvas.  This is
-                       logically equivalent to save_layer(paint),
-                       draw_picture, restore.
-*/
-SK_API void sk_canvas_draw_picture(sk_canvas_t*, const sk_picture_t*,
-                                   const sk_matrix_t*, const sk_paint_t*);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 25
skia/include/c/sk_colorspace.h

@@ -1,25 +0,0 @@
-/*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_imageinfo_DEFINED
-#define sk_imageinfo_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-sk_colorspace_t* sk_colorspace_new_srgb();
-
-void sk_colorspace_ref(sk_colorspace_t*);
-void sk_colorspace_unref(sk_colorspace_t*);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 70
skia/include/c/sk_data.h

@@ -1,70 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_data_DEFINED
-#define sk_data_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-/**
-    Returns a new empty sk_data_t.  This call must be balanced with a call to
-    sk_data_unref().
-*/
-SK_API sk_data_t* sk_data_new_empty(void);
-/**
-    Returns a new sk_data_t by copying the specified source data.
-    This call must be balanced with a call to sk_data_unref().
-*/
-SK_API sk_data_t* sk_data_new_with_copy(const void* src, size_t length);
-/**
-    Pass ownership of the given memory to a new sk_data_t, which will
-    call free() when the refernce count of the data goes to zero.  For
-    example:
-        size_t length = 1024;
-        void* buffer = malloc(length);
-        memset(buffer, 'X', length);
-        sk_data_t* data = sk_data_new_from_malloc(buffer, length);
-    This call must be balanced with a call to sk_data_unref().
-*/
-SK_API sk_data_t* sk_data_new_from_malloc(const void* memory, size_t length);
-/**
-    Returns a new sk_data_t using a subset of the data in the
-    specified source sk_data_t.  This call must be balanced with a
-    call to sk_data_unref().
-*/
-SK_API sk_data_t* sk_data_new_subset(const sk_data_t* src, size_t offset, size_t length);
-
-/**
-    Increment the reference count on the given sk_data_t. Must be
-    balanced by a call to sk_data_unref().
-*/
-SK_API void sk_data_ref(const sk_data_t*);
-/**
-    Decrement the reference count. If the reference count is 1 before
-    the decrement, then release both the memory holding the sk_data_t
-    and the memory it is managing.  New sk_data_t are created with a
-    reference count of 1.
-*/
-SK_API void sk_data_unref(const sk_data_t*);
-
-/**
-    Returns the number of bytes stored.
-*/
-SK_API size_t sk_data_get_size(const sk_data_t*);
-/**
-    Returns the pointer to the data.
- */
-SK_API const void* sk_data_get_data(const sk_data_t*);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 71
skia/include/c/sk_image.h

@@ -1,71 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_image_DEFINED
-#define sk_image_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-/**
- *  Return a new image that has made a copy of the provided pixels, or NULL on failure.
- *  Balance with a call to sk_image_unref().
- */
-SK_API sk_image_t* sk_image_new_raster_copy(const sk_imageinfo_t*, const void* pixels, size_t rowBytes);
-
-/**
- *  If the specified data can be interpreted as a compressed image (e.g. PNG or JPEG) then this
- *  returns an image. If the encoded data is not supported, returns NULL.
- *
- *  On success, the encoded data may be processed immediately, or it may be ref()'d for later
- *  use.
- */
-SK_API sk_image_t* sk_image_new_from_encoded(const sk_data_t* encoded, const sk_irect_t* subset);
-
-/**
- *  Encode the image's pixels and return the result as a new PNG in a
- *  sk_data_t, which the caller must manage: call sk_data_unref() when
- *  they are done.
- *
- *  If the image type cannot be encoded, this will return NULL.
- */
-SK_API sk_data_t* sk_image_encode(const sk_image_t*);
-
-/**
- *  Increment the reference count on the given sk_image_t. Must be
- *  balanced by a call to sk_image_unref().
-*/
-SK_API void sk_image_ref(const sk_image_t*);
-/**
- *  Decrement the reference count. If the reference count is 1 before
- *  the decrement, then release both the memory holding the sk_image_t
- *  and the memory it is managing.  New sk_image_t are created with a
-    reference count of 1.
-*/
-SK_API void sk_image_unref(const sk_image_t*);
-
-/**
- *  Return the width of the sk_image_t/
- */
-SK_API int sk_image_get_width(const sk_image_t*);
-/**
- *  Return the height of the sk_image_t/
- */
-SK_API int sk_image_get_height(const sk_image_t*);
-
-/**
- *  Returns a non-zero value unique among all images.
- */
-SK_API uint32_t sk_image_get_unique_id(const sk_image_t*);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 62
skia/include/c/sk_imageinfo.h

@@ -1,62 +0,0 @@
-/*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_imageinfo_DEFINED
-#define sk_imageinfo_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-typedef enum {
-    UNKNOWN_SK_COLORTYPE,
-    RGBA_8888_SK_COLORTYPE,
-    BGRA_8888_SK_COLORTYPE,
-    ALPHA_8_SK_COLORTYPE,
-    GRAY_8_SK_COLORTYPE,
-    RGBA_F16_SK_COLORTYPE,
-    RGBA_F32_SK_COLORTYPE,
-} sk_colortype_t;
-
-typedef enum {
-    OPAQUE_SK_ALPHATYPE,
-    PREMUL_SK_ALPHATYPE,
-    UNPREMUL_SK_ALPHATYPE,
-} sk_alphatype_t;
-
-/**
- *  Allocate a new imageinfo object. If colorspace is not null, it's owner-count will be
- *  incremented automatically.
- */
-sk_imageinfo_t* sk_imageinfo_new(int width, int height, sk_colortype_t ct, sk_alphatype_t at,
-                                 sk_colorspace_t* cs);
-
-/**
- *  Free the imageinfo object. If it contains a reference to a colorspace, its owner-count will
- *  be decremented automatically.
- */
-void sk_imageinfo_delete(sk_imageinfo_t*);
-
-int32_t          sk_imageinfo_get_width(sk_imageinfo_t*);
-int32_t          sk_imageinfo_get_height(sk_imageinfo_t*);
-sk_colortype_t   sk_imageinfo_get_colortype(sk_imageinfo_t*);
-sk_alphatype_t   sk_imageinfo_get_alphatype(sk_imageinfo_t*);
-
-/**
- *  Return the colorspace object reference contained in the imageinfo, or null if there is none.
- *  Note: this does not modify the owner-count on the colorspace object. If the caller needs to
- *  use the colorspace beyond the lifetime of the imageinfo, it should manually call
- *  sk_colorspace_ref() (and then call unref() when it is done).
- */
-sk_colorspace_t* sk_imageinfo_get_colorspace(sk_imageinfo_t*);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 47
skia/include/c/sk_maskfilter.h

@@ -1,47 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_maskfilter_DEFINED
-#define sk_maskfilter_DEFINED
-
-#include "sk_types.h"
-
-typedef enum {
-    NORMAL_SK_BLUR_STYLE,   //!< fuzzy inside and outside
-    SOLID_SK_BLUR_STYLE,    //!< solid inside, fuzzy outside
-    OUTER_SK_BLUR_STYLE,    //!< nothing inside, fuzzy outside
-    INNER_SK_BLUR_STYLE,    //!< fuzzy inside, nothing outside
-} sk_blurstyle_t;
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-/**
-    Increment the reference count on the given sk_maskfilter_t. Must be
-    balanced by a call to sk_maskfilter_unref().
-*/
-void sk_maskfilter_ref(sk_maskfilter_t*);
-/**
-    Decrement the reference count. If the reference count is 1 before
-    the decrement, then release both the memory holding the
-    sk_maskfilter_t and any other associated resources.  New
-    sk_maskfilter_t are created with a reference count of 1.
-*/
-void sk_maskfilter_unref(sk_maskfilter_t*);
-
-/**
-    Create a blur maskfilter.
-    @param sk_blurstyle_t The SkBlurStyle to use
-    @param sigma Standard deviation of the Gaussian blur to apply. Must be > 0.
-*/
-sk_maskfilter_t* sk_maskfilter_new_blur(sk_blurstyle_t, float sigma);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 49
skia/include/c/sk_matrix.h

@@ -1,49 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_matrix_DEFINED
-#define sk_matrix_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-/** Set the matrix to identity */
-void sk_matrix_set_identity(sk_matrix_t*);
-
-/** Set the matrix to translate by (tx, ty). */
-void sk_matrix_set_translate(sk_matrix_t*, float tx, float ty);
-/**
-    Preconcats the matrix with the specified translation.
-        M' = M * T(dx, dy)
-*/
-void sk_matrix_pre_translate(sk_matrix_t*, float tx, float ty);
-/**
-    Postconcats the matrix with the specified translation.
-        M' = T(dx, dy) * M
-*/
-void sk_matrix_post_translate(sk_matrix_t*, float tx, float ty);
-
-/** Set the matrix to scale by sx and sy. */
-void sk_matrix_set_scale(sk_matrix_t*, float sx, float sy);
-/**
-    Preconcats the matrix with the specified scale.
-        M' = M * S(sx, sy)
-*/
-void sk_matrix_pre_scale(sk_matrix_t*, float sx, float sy);
-/**
-    Postconcats the matrix with the specified scale.
-        M' = S(sx, sy) * M
-*/
-void sk_matrix_post_scale(sk_matrix_t*, float sx, float sy);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 145
skia/include/c/sk_paint.h

@@ -1,145 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_paint_DEFINED
-#define sk_paint_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-/**
-    Create a new paint with default settings:
-        antialias : false
-        stroke : false
-        stroke width : 0.0f (hairline)
-        stroke miter : 4.0f
-        stroke cap : BUTT_SK_STROKE_CAP
-        stroke join : MITER_SK_STROKE_JOIN
-        color : opaque black
-        shader : NULL
-        maskfilter : NULL
-        xfermode_mode : SRCOVER_SK_XFERMODE_MODE
-*/
-SK_API sk_paint_t* sk_paint_new(void);
-/**
-    Release the memory storing the sk_paint_t and unref() all
-    associated objects.
-*/
-SK_API void sk_paint_delete(sk_paint_t*);
-
-/**
-    Return true iff the paint has antialiasing enabled.
-*/
-SK_API bool sk_paint_is_antialias(const sk_paint_t*);
-/**
-    Set to true to enable antialiasing, false to disable it on this
-    sk_paint_t.
-*/
-SK_API void sk_paint_set_antialias(sk_paint_t*, bool);
-
-/**
-    Return the paint's curent drawing color.
-*/
-SK_API sk_color_t sk_paint_get_color(const sk_paint_t*);
-/**
-    Set the paint's curent drawing color.
-*/
-SK_API void sk_paint_set_color(sk_paint_t*, sk_color_t);
-
-/* stroke settings */
-
-/**
-    Return true iff stroking is enabled rather than filling on this
-    sk_paint_t.
-*/
-SK_API bool sk_paint_is_stroke(const sk_paint_t*);
-/**
-    Set to true to enable stroking rather than filling with this
-    sk_paint_t.
-*/
-SK_API void sk_paint_set_stroke(sk_paint_t*, bool);
-
-/**
-    Return the width for stroking.  A value of 0 strokes in hairline mode.
- */
-SK_API float sk_paint_get_stroke_width(const sk_paint_t*);
-/**
-   Set the width for stroking.  A value of 0 strokes in hairline mode
-   (always draw 1-pixel wide, regardless of the matrix).
- */
-SK_API void sk_paint_set_stroke_width(sk_paint_t*, float width);
-
-/**
-    Return the paint's stroke miter value. This is used to control the
-    behavior of miter joins when the joins angle is sharp.
-*/
-SK_API float sk_paint_get_stroke_miter(const sk_paint_t*);
-/**
-   Set the paint's stroke miter value. This is used to control the
-   behavior of miter joins when the joins angle is sharp. This value
-   must be >= 0.
-*/
-SK_API void sk_paint_set_stroke_miter(sk_paint_t*, float miter);
-
-typedef enum {
-    BUTT_SK_STROKE_CAP,
-    ROUND_SK_STROKE_CAP,
-    SQUARE_SK_STROKE_CAP
-} sk_stroke_cap_t;
-
-/**
-    Return the paint's stroke cap type, controlling how the start and
-    end of stroked lines and paths are treated.
-*/
-SK_API sk_stroke_cap_t sk_paint_get_stroke_cap(const sk_paint_t*);
-/**
-    Set the paint's stroke cap type, controlling how the start and
-    end of stroked lines and paths are treated.
-*/
-SK_API void sk_paint_set_stroke_cap(sk_paint_t*, sk_stroke_cap_t);
-
-typedef enum {
-    MITER_SK_STROKE_JOIN,
-    ROUND_SK_STROKE_JOIN,
-    BEVEL_SK_STROKE_JOIN
-} sk_stroke_join_t;
-
-/**
-    Return the paint's stroke join type, specifies the treatment that
-    is applied to corners in paths and rectangles
- */
-SK_API sk_stroke_join_t sk_paint_get_stroke_join(const sk_paint_t*);
-/**
-    Set the paint's stroke join type, specifies the treatment that
-    is applied to corners in paths and rectangles
- */
-SK_API void sk_paint_set_stroke_join(sk_paint_t*, sk_stroke_join_t);
-
-/**
- *  Set the paint's shader to the specified parameter. This will automatically call unref() on
- *  any previous value, and call ref() on the new value.
- */
-SK_API void sk_paint_set_shader(sk_paint_t*, sk_shader_t*);
-
-/**
- *  Set the paint's maskfilter to the specified parameter. This will automatically call unref() on
- *  any previous value, and call ref() on the new value.
- */
-SK_API void sk_paint_set_maskfilter(sk_paint_t*, sk_maskfilter_t*);
-
-/**
- *  Set the paint's xfermode to the specified parameter.
- */
-SK_API void sk_paint_set_xfermode_mode(sk_paint_t*, sk_xfermode_mode_t);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 84
skia/include/c/sk_path.h

@@ -1,84 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_path_DEFINED
-#define sk_path_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-typedef enum {
-    CW_SK_PATH_DIRECTION,
-    CCW_SK_PATH_DIRECTION,
-} sk_path_direction_t;
-
-/** Create a new, empty path. */
-SK_API sk_path_t* sk_path_new(void);
-/** Release the memory used by a sk_path_t. */
-SK_API void sk_path_delete(sk_path_t*);
-
-/** Set the beginning of the next contour to the point (x,y). */
-SK_API void sk_path_move_to(sk_path_t*, float x, float y);
-/**
-    Add a line from the last point to the specified point (x,y). If no
-    sk_path_move_to() call has been made for this contour, the first
-    point is automatically set to (0,0).
-*/
-SK_API void sk_path_line_to(sk_path_t*, float x, float y);
-/**
-    Add a quadratic bezier from the last point, approaching control
-    point (x0,y0), and ending at (x1,y1). If no sk_path_move_to() call
-    has been made for this contour, the first point is automatically
-    set to (0,0).
-*/
-SK_API void sk_path_quad_to(sk_path_t*, float x0, float y0, float x1, float y1);
-/**
-    Add a conic curve from the last point, approaching control point
-    (x0,y01), and ending at (x1,y1) with weight w.  If no
-    sk_path_move_to() call has been made for this contour, the first
-    point is automatically set to (0,0).
-*/
-SK_API void sk_path_conic_to(sk_path_t*, float x0, float y0, float x1, float y1, float w);
-/**
-    Add a cubic bezier from the last point, approaching control points
-    (x0,y0) and (x1,y1), and ending at (x2,y2). If no
-    sk_path_move_to() call has been made for this contour, the first
-    point is automatically set to (0,0).
-*/
-SK_API void sk_path_cubic_to(sk_path_t*,
-                             float x0, float y0,
-                             float x1, float y1,
-                             float x2, float y2);
-/**
-   Close the current contour. If the current point is not equal to the
-   first point of the contour, a line segment is automatically added.
-*/
-SK_API void sk_path_close(sk_path_t*);
-
-/**
-    Add a closed rectangle contour to the path.
-*/
-SK_API void sk_path_add_rect(sk_path_t*, const sk_rect_t*, sk_path_direction_t);
-/**
-    Add a closed oval contour to the path
-*/
-SK_API void sk_path_add_oval(sk_path_t*, const sk_rect_t*, sk_path_direction_t);
-
-/**
- *  If the path is empty, return false and set the rect parameter to [0, 0, 0, 0].
- *  else return true and set the rect parameter to the bounds of the control-points
- *  of the path.
- */
-SK_API bool sk_path_get_bounds(const sk_path_t*, sk_rect_t*);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 70
skia/include/c/sk_picture.h

@@ -1,70 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_picture_DEFINED
-#define sk_picture_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-/**
-    Create a new sk_picture_recorder_t.  Its resources should be
-    released with a call to sk_picture_recorder_delete().
-*/
-sk_picture_recorder_t* sk_picture_recorder_new(void);
-/**
-    Release the memory and other resources used by this
-    sk_picture_recorder_t.
-*/
-void sk_picture_recorder_delete(sk_picture_recorder_t*);
-
-/**
-   Returns the canvas that records the drawing commands
-
-   @param sk_rect_t* the cull rect used when recording this
-                     picture. Any drawing the falls outside of this
-                     rect is undefined, and may be drawn or it may not.
-*/
-sk_canvas_t* sk_picture_recorder_begin_recording(sk_picture_recorder_t*, const sk_rect_t*);
-/**
-    Signal that the caller is done recording. This invalidates the
-    canvas returned by begin_recording. Ownership of the sk_picture_t
-    is passed to the caller, who must call sk_picture_unref() when
-    they are done using it.  The returned picture is immutable.
-*/
-sk_picture_t* sk_picture_recorder_end_recording(sk_picture_recorder_t*);
-
-/**
-    Increment the reference count on the given sk_picture_t. Must be
-    balanced by a call to sk_picture_unref().
-*/
-void sk_picture_ref(sk_picture_t*);
-/**
-    Decrement the reference count. If the reference count is 1 before
-    the decrement, then release both the memory holding the
-    sk_picture_t and any resouces it may be managing.  New
-    sk_picture_t are created with a reference count of 1.
-*/
-void sk_picture_unref(sk_picture_t*);
-
-/**
-    Returns a non-zero value unique among all pictures.
- */
-uint32_t sk_picture_get_unique_id(sk_picture_t*);
-
-/**
-    Return the cull rect specified when this picture was recorded.
-*/
-sk_rect_t sk_picture_get_bounds(sk_picture_t*);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 143
skia/include/c/sk_shader.h

@@ -1,143 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_shader_DEFINED
-#define sk_shader_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-void sk_shader_ref(sk_shader_t*);
-void sk_shader_unref(sk_shader_t*);
-
-typedef enum {
-    CLAMP_SK_SHADER_TILEMODE,
-    REPEAT_SK_SHADER_TILEMODE,
-    MIRROR_SK_SHADER_TILEMODE,
-} sk_shader_tilemode_t;
-
-/**
-    Returns a shader that generates a linear gradient between the two
-    specified points.
-
-    @param points The start and end points for the gradient.
-    @param colors The array[count] of colors, to be distributed between
-                  the two points
-    @param colorPos May be NULL. array[count] of SkScalars, or NULL, of
-                    the relative position of each corresponding color
-                    in the colors array. If this is NULL, the the
-                    colors are distributed evenly between the start
-                    and end point.  If this is not null, the values
-                    must begin with 0, end with 1.0, and intermediate
-                    values must be strictly increasing.
-    @param colorCount Must be >=2. The number of colors (and pos if not
-                      NULL) entries.
-    @param mode The tiling mode
-*/
-sk_shader_t* sk_shader_new_linear_gradient(const sk_point_t points[2],
-                                           const sk_color_t colors[],
-                                           const float colorPos[],
-                                           int colorCount,
-                                           sk_shader_tilemode_t tileMode,
-                                           const sk_matrix_t* localMatrix);
-
-
-/**
-    Returns a shader that generates a radial gradient given the center
-    and radius.
-
-    @param center The center of the circle for this gradient
-    @param radius Must be positive. The radius of the circle for this
-                  gradient
-    @param colors The array[count] of colors, to be distributed
-                  between the center and edge of the circle
-    @param colorPos May be NULL. The array[count] of the relative
-                    position of each corresponding color in the colors
-                    array. If this is NULL, the the colors are
-                    distributed evenly between the center and edge of
-                    the circle.  If this is not null, the values must
-                    begin with 0, end with 1.0, and intermediate
-                    values must be strictly increasing.
-    @param count Must be >= 2. The number of colors (and pos if not
-                 NULL) entries
-    @param tileMode The tiling mode
-    @param localMatrix May be NULL
-*/
-sk_shader_t* sk_shader_new_radial_gradient(const sk_point_t* center,
-                                           float radius,
-                                           const sk_color_t colors[],
-                                           const float colorPos[],
-                                           int colorCount,
-                                           sk_shader_tilemode_t tileMode,
-                                           const sk_matrix_t* localMatrix);
-
-/**
-    Returns a shader that generates a sweep gradient given a center.
-
-    @param center The coordinates of the center of the sweep
-    @param colors The array[count] of colors, to be distributed around
-                  the center.
-    @param colorPos May be NULL. The array[count] of the relative
-                    position of each corresponding color in the colors
-                    array. If this is NULL, the the colors are
-                    distributed evenly between the center and edge of
-                    the circle.  If this is not null, the values must
-                    begin with 0, end with 1.0, and intermediate
-                    values must be strictly increasing.
-    @param colorCount Must be >= 2. The number of colors (and pos if
-                      not NULL) entries
-    @param localMatrix May be NULL
-*/
-sk_shader_t* sk_shader_new_sweep_gradient(const sk_point_t* center,
-                                          const sk_color_t colors[],
-                                          const float colorPos[],
-                                          int colorCount,
-                                          const sk_matrix_t* localMatrix);
-
-/**
-    Returns a shader that generates a conical gradient given two circles, or
-    returns NULL if the inputs are invalid. The gradient interprets the
-    two circles according to the following HTML spec.
-    http://dev.w3.org/html5/2dcontext/#dom-context-2d-createradialgradient
-
-    Returns a shader that generates a sweep gradient given a center.
-
-    @param start, startRadius Defines the first circle.
-    @param end, endRadius Defines the first circle.
-    @param colors The array[count] of colors, to be distributed between
-                  the two circles.
-    @param colorPos May be NULL. The array[count] of the relative
-                    position of each corresponding color in the colors
-                    array. If this is NULL, the the colors are
-                    distributed evenly between the two circles.  If
-                    this is not null, the values must begin with 0,
-                    end with 1.0, and intermediate values must be
-                    strictly increasing.
-    @param colorCount Must be >= 2. The number of colors (and pos if
-                      not NULL) entries
-    @param tileMode The tiling mode
-    @param localMatrix May be NULL
-
-*/
-sk_shader_t* sk_shader_new_two_point_conical_gradient(
-        const sk_point_t* start,
-        float startRadius,
-        const sk_point_t* end,
-        float endRadius,
-        const sk_color_t colors[],
-        const float colorPos[],
-        int colorCount,
-        sk_shader_tilemode_t tileMode,
-        const sk_matrix_t* localMatrix);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 73
skia/include/c/sk_surface.h

@@ -1,73 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_surface_DEFINED
-#define sk_surface_DEFINED
-
-#include "sk_types.h"
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-/**
-    Return a new surface, with the memory for the pixels automatically
-    allocated.  If the requested surface cannot be created, or the
-    request is not a supported configuration, NULL will be returned.
-
-    @param sk_imageinfo_t* Specify the width, height, color type, and
-                           alpha type for the surface.
-
-    @param sk_surfaceprops_t* If not NULL, specify additional non-default
-                              properties of the surface.
-*/
-SK_API sk_surface_t* sk_surface_new_raster(const sk_imageinfo_t*, const sk_surfaceprops_t*);
-
-/**
-    Create a new surface which will draw into the specified pixels
-    with the specified rowbytes.  If the requested surface cannot be
-    created, or the request is not a supported configuration, NULL
-    will be returned.
-
-    @param sk_imageinfo_t* Specify the width, height, color type, and
-                           alpha type for the surface.
-    @param void* pixels Specify the location in memory where the
-                        destination pixels are.  This memory must
-                        outlast this surface.
-     @param size_t rowBytes Specify the difference, in bytes, between
-                           each adjacent row.  Should be at least
-                           (width * sizeof(one pixel)).
-    @param sk_surfaceprops_t* If not NULL, specify additional non-default
-                              properties of the surface.
-*/
-SK_API sk_surface_t* sk_surface_new_raster_direct(const sk_imageinfo_t*,
-                                                  void* pixels, size_t rowBytes,
-                                                  const sk_surfaceprops_t* props);
-
-/**
-    Decrement the reference count. If the reference count is 1 before
-    the decrement, then release both the memory holding the
-    sk_surface_t and any pixel memory it may be managing.  New
-    sk_surface_t are created with a reference count of 1.
-*/
-SK_API void sk_surface_unref(sk_surface_t*);
-
-/**
- *  Return the canvas associated with this surface. Note: the canvas is owned by the surface,
- *  so the returned object is only valid while the owning surface is valid.
- */
-SK_API sk_canvas_t* sk_surface_get_canvas(sk_surface_t*);
-
-/**
- *  Call sk_image_unref() when the returned image is no longer used.
- */
-SK_API sk_image_t* sk_surface_new_image_snapshot(sk_surface_t*);
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 256
skia/include/c/sk_types.h

@@ -1,256 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
-// DO NOT USE -- FOR INTERNAL TESTING ONLY
-
-#ifndef sk_types_DEFINED
-#define sk_types_DEFINED
-
-#include <stdint.h>
-#include <stddef.h>
-
-#ifdef __cplusplus
-    #define SK_C_PLUS_PLUS_BEGIN_GUARD    extern "C" {
-    #define SK_C_PLUS_PLUS_END_GUARD      }
-#else
-    #include <stdbool.h>
-    #define SK_C_PLUS_PLUS_BEGIN_GUARD
-    #define SK_C_PLUS_PLUS_END_GUARD
-#endif
-
-#if !defined(SK_API)
-    #if defined(SKIA_DLL)
-        #if defined(_MSC_VER)
-            #if SKIA_IMPLEMENTATION
-                #define SK_API __declspec(dllexport)
-            #else
-                #define SK_API __declspec(dllimport)
-            #endif
-        #else
-            #define SK_API __attribute__((visibility("default")))
-        #endif
-    #else
-        #define SK_API
-    #endif
-#endif
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-SK_C_PLUS_PLUS_BEGIN_GUARD
-
-typedef uint32_t sk_color_t;
-
-/* This macro assumes all arguments are >=0 and <=255. */
-#define sk_color_set_argb(a, r, g, b)   (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
-#define sk_color_get_a(c)               (((c) >> 24) & 0xFF)
-#define sk_color_get_r(c)               (((c) >> 16) & 0xFF)
-#define sk_color_get_g(c)               (((c) >>  8) & 0xFF)
-#define sk_color_get_b(c)               (((c) >>  0) & 0xFF)
-
-typedef enum {
-    INTERSECT_SK_CLIPTYPE,
-    DIFFERENCE_SK_CLIPTYPE,
-} sk_cliptype_t;
-
-typedef enum {
-    UNKNOWN_SK_PIXELGEOMETRY,
-    RGB_H_SK_PIXELGEOMETRY,
-    BGR_H_SK_PIXELGEOMETRY,
-    RGB_V_SK_PIXELGEOMETRY,
-    BGR_V_SK_PIXELGEOMETRY,
-} sk_pixelgeometry_t;
-
-typedef struct {
-    sk_pixelgeometry_t pixelGeometry;
-} sk_surfaceprops_t;
-
-typedef struct {
-    float   x;
-    float   y;
-} sk_point_t;
-
-typedef struct {
-    int32_t left;
-    int32_t top;
-    int32_t right;
-    int32_t bottom;
-} sk_irect_t;
-
-typedef struct {
-    float   left;
-    float   top;
-    float   right;
-    float   bottom;
-} sk_rect_t;
-
-/**
-    The sk_matrix_t struct holds a 3x3 perspective matrix for
-    transforming coordinates:
-
-        (X,Y) = T[M]((x,y))
-        X = (M[0] * x + M[1] * y + M[2]) / (M[6] * x + M[7] * y + M[8]);
-        Y = (M[3] * x + M[4] * y + M[5]) / (M[6] * x + M[7] * y + M[8]);
-
-    Therefore, the identity matrix is
-
-        sk_matrix_t identity = {{1, 0, 0,
-                                 0, 1, 0,
-                                 0, 0, 1}};
-
-    A matrix that scales by sx and sy is:
-
-        sk_matrix_t scale = {{sx, 0,  0,
-                              0,  sy, 0,
-                              0,  0,  1}};
-
-    A matrix that translates by tx and ty is:
-
-        sk_matrix_t translate = {{1, 0, tx,
-                                  0, 1, ty,
-                                  0, 0, 1}};
-
-    A matrix that rotates around the origin by A radians:
-
-        sk_matrix_t rotate = {{cos(A), -sin(A), 0,
-                               sin(A),  cos(A), 0,
-                               0,       0,      1}};
-
-    Two matrixes can be concatinated by:
-
-         void concat_matrices(sk_matrix_t* dst,
-                             const sk_matrix_t* matrixU,
-                             const sk_matrix_t* matrixV) {
-            const float* u = matrixU->mat;
-            const float* v = matrixV->mat;
-            sk_matrix_t result = {{
-                    u[0] * v[0] + u[1] * v[3] + u[2] * v[6],
-                    u[0] * v[1] + u[1] * v[4] + u[2] * v[7],
-                    u[0] * v[2] + u[1] * v[5] + u[2] * v[8],
-                    u[3] * v[0] + u[4] * v[3] + u[5] * v[6],
-                    u[3] * v[1] + u[4] * v[4] + u[5] * v[7],
-                    u[3] * v[2] + u[4] * v[5] + u[5] * v[8],
-                    u[6] * v[0] + u[7] * v[3] + u[8] * v[6],
-                    u[6] * v[1] + u[7] * v[4] + u[8] * v[7],
-                    u[6] * v[2] + u[7] * v[5] + u[8] * v[8]
-            }};
-            *dst = result;
-        }
-*/
-typedef struct {
-    float   mat[9];
-} sk_matrix_t;
-
-/**
-    A sk_canvas_t encapsulates all of the state about drawing into a
-    destination This includes a reference to the destination itself,
-    and a stack of matrix/clip values.
-*/
-typedef struct sk_canvas_t sk_canvas_t;
-/**
-    A sk_data_ holds an immutable data buffer.
-*/
-typedef struct sk_data_t sk_data_t;
-/**
-    A sk_image_t is an abstraction for drawing a rectagle of pixels.
-    The content of the image is always immutable, though the actual
-    storage may change, if for example that image can be re-created via
-    encoded data or other means.
-*/
-typedef struct sk_image_t sk_image_t;
-
-/**
- *  Describes the color components. See ICC Profiles.
- */
-typedef struct sk_colorspace_t sk_colorspace_t;
-
-/**
- *  Describes an image buffer : width, height, pixel type, colorspace, etc.
- */
-typedef struct sk_imageinfo_t sk_imageinfo_t;
-
-/**
-    A sk_maskfilter_t is an object that perform transformations on an
-    alpha-channel mask before drawing it; it may be installed into a
-    sk_paint_t.  Each time a primitive is drawn, it is first
-    scan-converted into a alpha mask, which os handed to the
-    maskfilter, which may create a new mask is to render into the
-    destination.
- */
-typedef struct sk_maskfilter_t sk_maskfilter_t;
-/**
-    A sk_paint_t holds the style and color information about how to
-    draw geometries, text and bitmaps.
-*/
-typedef struct sk_paint_t sk_paint_t;
-/**
-    A sk_path_t encapsulates compound (multiple contour) geometric
-    paths consisting of straight line segments, quadratic curves, and
-    cubic curves.
-*/
-typedef struct sk_path_t sk_path_t;
-/**
-    A sk_picture_t holds recorded canvas drawing commands to be played
-    back at a later time.
-*/
-typedef struct sk_picture_t sk_picture_t;
-/**
-    A sk_picture_recorder_t holds a sk_canvas_t that records commands
-    to create a sk_picture_t.
-*/
-typedef struct sk_picture_recorder_t sk_picture_recorder_t;
-/**
-    A sk_shader_t specifies the source color(s) for what is being drawn. If a
-    paint has no shader, then the paint's color is used. If the paint
-    has a shader, then the shader's color(s) are use instead, but they
-    are modulated by the paint's alpha.
-*/
-typedef struct sk_shader_t sk_shader_t;
-/**
-    A sk_surface_t holds the destination for drawing to a canvas. For
-    raster drawing, the destination is an array of pixels in memory.
-    For GPU drawing, the destination is a texture or a framebuffer.
-*/
-typedef struct sk_surface_t sk_surface_t;
-
-typedef enum {
-    CLEAR_SK_XFERMODE_MODE,
-    SRC_SK_XFERMODE_MODE,
-    DST_SK_XFERMODE_MODE,
-    SRCOVER_SK_XFERMODE_MODE,
-    DSTOVER_SK_XFERMODE_MODE,
-    SRCIN_SK_XFERMODE_MODE,
-    DSTIN_SK_XFERMODE_MODE,
-    SRCOUT_SK_XFERMODE_MODE,
-    DSTOUT_SK_XFERMODE_MODE,
-    SRCATOP_SK_XFERMODE_MODE,
-    DSTATOP_SK_XFERMODE_MODE,
-    XOR_SK_XFERMODE_MODE,
-    PLUS_SK_XFERMODE_MODE,
-    MODULATE_SK_XFERMODE_MODE,
-    SCREEN_SK_XFERMODE_MODE,
-    OVERLAY_SK_XFERMODE_MODE,
-    DARKEN_SK_XFERMODE_MODE,
-    LIGHTEN_SK_XFERMODE_MODE,
-    COLORDODGE_SK_XFERMODE_MODE,
-    COLORBURN_SK_XFERMODE_MODE,
-    HARDLIGHT_SK_XFERMODE_MODE,
-    SOFTLIGHT_SK_XFERMODE_MODE,
-    DIFFERENCE_SK_XFERMODE_MODE,
-    EXCLUSION_SK_XFERMODE_MODE,
-    MULTIPLY_SK_XFERMODE_MODE,
-    HUE_SK_XFERMODE_MODE,
-    SATURATION_SK_XFERMODE_MODE,
-    COLOR_SK_XFERMODE_MODE,
-    LUMINOSITY_SK_XFERMODE_MODE,
-} sk_xfermode_mode_t;
-
-//////////////////////////////////////////////////////////////////////////////////////////
-
-SK_C_PLUS_PLUS_END_GUARD
-
-#endif

+ 0 - 287
skia/include/codec/SkAndroidCodec.h

@@ -1,287 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkAndroidCodec_DEFINED
-#define SkAndroidCodec_DEFINED
-
-#include "SkCodec.h"
-#include "SkEncodedImageFormat.h"
-#include "SkStream.h"
-#include "SkTypes.h"
-
-/**
- *  Abstract interface defining image codec functionality that is necessary for
- *  Android.
- */
-class SK_API SkAndroidCodec : SkNoncopyable {
-public:
-    enum class ExifOrientationBehavior {
-        /**
-         *  Ignore any exif orientation markers in the data.
-         *
-         *  getInfo's width and height will match the header of the image, and
-         *  no processing will be done to match the marker.
-         */
-        kIgnore,
-
-        /**
-         *  Respect the exif orientation marker.
-         *
-         *  getInfo's width and height will represent what they should be after
-         *  applying the orientation. For example, if the marker specifies a
-         *  rotation by 90 degrees, they will be swapped relative to the header.
-         *  getAndroidPixels will apply the orientation as well.
-         */
-        kRespect,
-    };
-
-    /**
-     *  Pass ownership of an SkCodec to a newly-created SkAndroidCodec.
-     */
-    static std::unique_ptr<SkAndroidCodec> MakeFromCodec(std::unique_ptr<SkCodec>,
-            ExifOrientationBehavior = ExifOrientationBehavior::kIgnore);
-
-    /**
-     *  If this stream represents an encoded image that we know how to decode,
-     *  return an SkAndroidCodec that can decode it. Otherwise return NULL.
-     *
-     *  The SkPngChunkReader handles unknown chunks in PNGs.
-     *  See SkCodec.h for more details.
-     *
-     *  If NULL is returned, the stream is deleted immediately. Otherwise, the
-     *  SkCodec takes ownership of it, and will delete it when done with it.
-     *
-     *  ExifOrientationBehavior is set to kIgnore.
-     */
-    static std::unique_ptr<SkAndroidCodec> MakeFromStream(std::unique_ptr<SkStream>,
-                                                          SkPngChunkReader* = nullptr);
-
-    /**
-     *  If this data represents an encoded image that we know how to decode,
-     *  return an SkAndroidCodec that can decode it. Otherwise return NULL.
-     *
-     *  The SkPngChunkReader handles unknown chunks in PNGs.
-     *  See SkCodec.h for more details.
-     *
-     *  ExifOrientationBehavior is set to kIgnore.
-     */
-    static std::unique_ptr<SkAndroidCodec> MakeFromData(sk_sp<SkData>, SkPngChunkReader* = nullptr);
-
-    virtual ~SkAndroidCodec();
-
-    const SkImageInfo& getInfo() const { return fInfo; }
-
-    /**
-     *  Format of the encoded data.
-     */
-    SkEncodedImageFormat getEncodedFormat() const { return fCodec->getEncodedFormat(); }
-
-    /**
-     *  @param requestedColorType Color type requested by the client
-     *
-     *  |requestedColorType| may be overriden.  We will default to kF16
-     *  for high precision images.
-     *
-     *  In the general case, if it is possible to decode to
-     *  |requestedColorType|, this returns |requestedColorType|.
-     *  Otherwise, this returns a color type that is an appropriate
-     *  match for the the encoded data.
-     */
-    SkColorType computeOutputColorType(SkColorType requestedColorType);
-
-    /**
-     *  @param requestedUnpremul  Indicates if the client requested
-     *                            unpremultiplied output
-     *
-     *  Returns the appropriate alpha type to decode to.  If the image
-     *  has alpha, the value of requestedUnpremul will be honored.
-     */
-    SkAlphaType computeOutputAlphaType(bool requestedUnpremul);
-
-    /**
-     *  @param outputColorType Color type that the client will decode to.
-     *  @param prefColorSpace  Preferred color space to decode to.
-     *                         This may not return |prefColorSpace| for a couple reasons.
-     *                         (1) Android Principles: 565 must be sRGB, F16 must be
-     *                             linear sRGB, transfer function must be parametric.
-     *                         (2) Codec Limitations: F16 requires a linear color space.
-     *
-     *  Returns the appropriate color space to decode to.
-     */
-    sk_sp<SkColorSpace> computeOutputColorSpace(SkColorType outputColorType,
-                                                sk_sp<SkColorSpace> prefColorSpace = nullptr);
-
-    /**
-     *  Compute the appropriate sample size to get to |size|.
-     *
-     *  @param size As an input parameter, the desired output size of
-     *      the decode. As an output parameter, the smallest sampled size
-     *      larger than the input.
-     *  @return the sample size to set AndroidOptions::fSampleSize to decode
-     *      to the output |size|.
-     */
-    int computeSampleSize(SkISize* size) const;
-
-    /**
-     *  Returns the dimensions of the scaled output image, for an input
-     *  sampleSize.
-     *
-     *  When the sample size divides evenly into the original dimensions, the
-     *  scaled output dimensions will simply be equal to the original
-     *  dimensions divided by the sample size.
-     *
-     *  When the sample size does not divide even into the original
-     *  dimensions, the codec may round up or down, depending on what is most
-     *  efficient to decode.
-     *
-     *  Finally, the codec will always recommend a non-zero output, so the output
-     *  dimension will always be one if the sampleSize is greater than the
-     *  original dimension.
-     */
-    SkISize getSampledDimensions(int sampleSize) const;
-
-    /**
-     *  Return (via desiredSubset) a subset which can decoded from this codec,
-     *  or false if the input subset is invalid.
-     *
-     *  @param desiredSubset in/out parameter
-     *                       As input, a desired subset of the original bounds
-     *                       (as specified by getInfo).
-     *                       As output, if true is returned, desiredSubset may
-     *                       have been modified to a subset which is
-     *                       supported. Although a particular change may have
-     *                       been made to desiredSubset to create something
-     *                       supported, it is possible other changes could
-     *                       result in a valid subset.  If false is returned,
-     *                       desiredSubset's value is undefined.
-     *  @return true         If the input desiredSubset is valid.
-     *                       desiredSubset may be modified to a subset
-     *                       supported by the codec.
-     *          false        If desiredSubset is invalid (NULL or not fully
-     *                       contained within the image).
-     */
-    bool getSupportedSubset(SkIRect* desiredSubset) const;
-    // TODO: Rename SkCodec::getValidSubset() to getSupportedSubset()
-
-    /**
-     *  Returns the dimensions of the scaled, partial output image, for an
-     *  input sampleSize and subset.
-     *
-     *  @param sampleSize Factor to scale down by.
-     *  @param subset     Must be a valid subset of the original image
-     *                    dimensions and a subset supported by SkAndroidCodec.
-     *                    getSubset() can be used to obtain a subset supported
-     *                    by SkAndroidCodec.
-     *  @return           Size of the scaled partial image.  Or zero size
-     *                    if either of the inputs is invalid.
-     */
-    SkISize getSampledSubsetDimensions(int sampleSize, const SkIRect& subset) const;
-
-    /**
-     *  Additional options to pass to getAndroidPixels().
-     */
-    // FIXME: It's a bit redundant to name these AndroidOptions when this class is already
-    //        called SkAndroidCodec.  On the other hand, it's may be a bit confusing to call
-    //        these Options when SkCodec has a slightly different set of Options.  Maybe these
-    //        should be DecodeOptions or SamplingOptions?
-    struct AndroidOptions {
-        AndroidOptions()
-            : fZeroInitialized(SkCodec::kNo_ZeroInitialized)
-            , fSubset(nullptr)
-            , fSampleSize(1)
-        {}
-
-        /**
-         *  Indicates is destination pixel memory is zero initialized.
-         *
-         *  The default is SkCodec::kNo_ZeroInitialized.
-         */
-        SkCodec::ZeroInitialized fZeroInitialized;
-
-        /**
-         *  If not NULL, represents a subset of the original image to decode.
-         *
-         *  Must be within the bounds returned by getInfo().
-         *
-         *  If the EncodedFormat is SkEncodedImageFormat::kWEBP, the top and left
-         *  values must be even.
-         *
-         *  The default is NULL, meaning a decode of the entire image.
-         */
-        SkIRect* fSubset;
-
-        /**
-         *  The client may provide an integer downscale factor for the decode.
-         *  The codec may implement this downscaling by sampling or another
-         *  method if it is more efficient.
-         *
-         *  The default is 1, representing no downscaling.
-         */
-        int fSampleSize;
-    };
-
-    /**
-     *  Decode into the given pixels, a block of memory of size at
-     *  least (info.fHeight - 1) * rowBytes + (info.fWidth *
-     *  bytesPerPixel)
-     *
-     *  Repeated calls to this function should give the same results,
-     *  allowing the PixelRef to be immutable.
-     *
-     *  @param info A description of the format (config, size)
-     *         expected by the caller.  This can simply be identical
-     *         to the info returned by getInfo().
-     *
-     *         This contract also allows the caller to specify
-     *         different output-configs, which the implementation can
-     *         decide to support or not.
-     *
-     *         A size that does not match getInfo() implies a request
-     *         to scale or subset. If the codec cannot perform this
-     *         scaling or subsetting, it will return an error code.
-     *
-     *  The AndroidOptions object is also used to specify any requested scaling or subsetting
-     *  using options->fSampleSize and options->fSubset. If NULL, the defaults (as specified above
-     *  for AndroidOptions) are used.
-     *
-     *  @return Result kSuccess, or another value explaining the type of failure.
-     */
-    // FIXME: It's a bit redundant to name this getAndroidPixels() when this class is already
-    //        called SkAndroidCodec.  On the other hand, it's may be a bit confusing to call
-    //        this getPixels() when it is a slightly different API than SkCodec's getPixels().
-    //        Maybe this should be decode() or decodeSubset()?
-    SkCodec::Result getAndroidPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
-            const AndroidOptions* options);
-
-    /**
-     *  Simplified version of getAndroidPixels() where we supply the default AndroidOptions as
-     *  specified above for AndroidOptions. It will not perform any scaling or subsetting.
-     */
-    SkCodec::Result getAndroidPixels(const SkImageInfo& info, void* pixels, size_t rowBytes);
-
-    SkCodec::Result getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes) {
-        return this->getAndroidPixels(info, pixels, rowBytes);
-    }
-
-    SkCodec* codec() const { return fCodec.get(); }
-
-protected:
-    SkAndroidCodec(SkCodec*, ExifOrientationBehavior = ExifOrientationBehavior::kIgnore);
-
-    virtual SkISize onGetSampledDimensions(int sampleSize) const = 0;
-
-    virtual bool onGetSupportedSubset(SkIRect* desiredSubset) const = 0;
-
-    virtual SkCodec::Result onGetAndroidPixels(const SkImageInfo& info, void* pixels,
-            size_t rowBytes, const AndroidOptions& options) = 0;
-
-private:
-    const SkImageInfo               fInfo;
-    const ExifOrientationBehavior   fOrientationBehavior;
-    std::unique_ptr<SkCodec>        fCodec;
-};
-#endif // SkAndroidCodec_DEFINED

+ 0 - 921
skia/include/codec/SkCodec.h

@@ -1,921 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkCodec_DEFINED
-#define SkCodec_DEFINED
-
-#include "../private/SkNoncopyable.h"
-#include "../private/SkTemplates.h"
-#include "../private/SkEncodedInfo.h"
-#include "SkCodecAnimation.h"
-#include "SkColor.h"
-#include "SkEncodedImageFormat.h"
-#include "SkEncodedOrigin.h"
-#include "SkImageInfo.h"
-#include "SkPixmap.h"
-#include "SkSize.h"
-#include "SkStream.h"
-#include "SkTypes.h"
-#include "SkYUVASizeInfo.h"
-
-#include <vector>
-
-class SkColorSpace;
-class SkData;
-class SkFrameHolder;
-class SkPngChunkReader;
-class SkSampler;
-
-namespace DM {
-class CodecSrc;
-class ColorCodecSrc;
-}
-
-/**
- *  Abstraction layer directly on top of an image codec.
- */
-class SK_API SkCodec : SkNoncopyable {
-public:
-    /**
-     *  Minimum number of bytes that must be buffered in SkStream input.
-     *
-     *  An SkStream passed to NewFromStream must be able to use this many
-     *  bytes to determine the image type. Then the same SkStream must be
-     *  passed to the correct decoder to read from the beginning.
-     *
-     *  This can be accomplished by implementing peek() to support peeking
-     *  this many bytes, or by implementing rewind() to be able to rewind()
-     *  after reading this many bytes.
-     */
-    static constexpr size_t MinBufferedBytesNeeded() { return 32; }
-
-    /**
-     *  Error codes for various SkCodec methods.
-     */
-    enum Result {
-        /**
-         *  General return value for success.
-         */
-        kSuccess,
-        /**
-         *  The input is incomplete. A partial image was generated.
-         */
-        kIncompleteInput,
-        /**
-         *  Like kIncompleteInput, except the input had an error.
-         *
-         *  If returned from an incremental decode, decoding cannot continue,
-         *  even with more data.
-         */
-        kErrorInInput,
-        /**
-         *  The generator cannot convert to match the request, ignoring
-         *  dimensions.
-         */
-        kInvalidConversion,
-        /**
-         *  The generator cannot scale to requested size.
-         */
-        kInvalidScale,
-        /**
-         *  Parameters (besides info) are invalid. e.g. NULL pixels, rowBytes
-         *  too small, etc.
-         */
-        kInvalidParameters,
-        /**
-         *  The input did not contain a valid image.
-         */
-        kInvalidInput,
-        /**
-         *  Fulfilling this request requires rewinding the input, which is not
-         *  supported for this input.
-         */
-        kCouldNotRewind,
-        /**
-         *  An internal error, such as OOM.
-         */
-        kInternalError,
-        /**
-         *  This method is not implemented by this codec.
-         *  FIXME: Perhaps this should be kUnsupported?
-         */
-        kUnimplemented,
-    };
-
-    /**
-     *  Readable string representing the error code.
-     */
-    static const char* ResultToString(Result);
-
-    /**
-     *  If this stream represents an encoded image that we know how to decode,
-     *  return an SkCodec that can decode it. Otherwise return NULL.
-     *
-     *  As stated above, this call must be able to peek or read
-     *  MinBufferedBytesNeeded to determine the correct format, and then start
-     *  reading from the beginning. First it will attempt to peek, and it
-     *  assumes that if less than MinBufferedBytesNeeded bytes (but more than
-     *  zero) are returned, this is because the stream is shorter than this,
-     *  so falling back to reading would not provide more data. If peek()
-     *  returns zero bytes, this call will instead attempt to read(). This
-     *  will require that the stream can be rewind()ed.
-     *
-     *  If Result is not NULL, it will be set to either kSuccess if an SkCodec
-     *  is returned or a reason for the failure if NULL is returned.
-     *
-     *  If SkPngChunkReader is not NULL, take a ref and pass it to libpng if
-     *  the image is a png.
-     *
-     *  If the SkPngChunkReader is not NULL then:
-     *      If the image is not a PNG, the SkPngChunkReader will be ignored.
-     *      If the image is a PNG, the SkPngChunkReader will be reffed.
-     *      If the PNG has unknown chunks, the SkPngChunkReader will be used
-     *      to handle these chunks.  SkPngChunkReader will be called to read
-     *      any unknown chunk at any point during the creation of the codec
-     *      or the decode.  Note that if SkPngChunkReader fails to read a
-     *      chunk, this could result in a failure to create the codec or a
-     *      failure to decode the image.
-     *      If the PNG does not contain unknown chunks, the SkPngChunkReader
-     *      will not be used or modified.
-     *
-     *  If NULL is returned, the stream is deleted immediately. Otherwise, the
-     *  SkCodec takes ownership of it, and will delete it when done with it.
-     */
-    static std::unique_ptr<SkCodec> MakeFromStream(std::unique_ptr<SkStream>, Result* = nullptr,
-                                                   SkPngChunkReader* = nullptr);
-
-    /**
-     *  If this data represents an encoded image that we know how to decode,
-     *  return an SkCodec that can decode it. Otherwise return NULL.
-     *
-     *  If the SkPngChunkReader is not NULL then:
-     *      If the image is not a PNG, the SkPngChunkReader will be ignored.
-     *      If the image is a PNG, the SkPngChunkReader will be reffed.
-     *      If the PNG has unknown chunks, the SkPngChunkReader will be used
-     *      to handle these chunks.  SkPngChunkReader will be called to read
-     *      any unknown chunk at any point during the creation of the codec
-     *      or the decode.  Note that if SkPngChunkReader fails to read a
-     *      chunk, this could result in a failure to create the codec or a
-     *      failure to decode the image.
-     *      If the PNG does not contain unknown chunks, the SkPngChunkReader
-     *      will not be used or modified.
-     */
-    static std::unique_ptr<SkCodec> MakeFromData(sk_sp<SkData>, SkPngChunkReader* = nullptr);
-
-    virtual ~SkCodec();
-
-    /**
-     *  Return a reasonable SkImageInfo to decode into.
-     */
-    SkImageInfo getInfo() const { return fEncodedInfo.makeImageInfo(); }
-
-    SkISize dimensions() const { return {fEncodedInfo.width(), fEncodedInfo.height()}; }
-    SkIRect bounds() const {
-        return SkIRect::MakeWH(fEncodedInfo.width(), fEncodedInfo.height());
-    }
-
-    /**
-     *  Returns the image orientation stored in the EXIF data.
-     *  If there is no EXIF data, or if we cannot read the EXIF data, returns kTopLeft.
-     */
-    SkEncodedOrigin getOrigin() const { return fOrigin; }
-
-    /**
-     *  Return a size that approximately supports the desired scale factor.
-     *  The codec may not be able to scale efficiently to the exact scale
-     *  factor requested, so return a size that approximates that scale.
-     *  The returned value is the codec's suggestion for the closest valid
-     *  scale that it can natively support
-     */
-    SkISize getScaledDimensions(float desiredScale) const {
-        // Negative and zero scales are errors.
-        SkASSERT(desiredScale > 0.0f);
-        if (desiredScale <= 0.0f) {
-            return SkISize::Make(0, 0);
-        }
-
-        // Upscaling is not supported. Return the original size if the client
-        // requests an upscale.
-        if (desiredScale >= 1.0f) {
-            return this->dimensions();
-        }
-        return this->onGetScaledDimensions(desiredScale);
-    }
-
-    /**
-     *  Return (via desiredSubset) a subset which can decoded from this codec,
-     *  or false if this codec cannot decode subsets or anything similar to
-     *  desiredSubset.
-     *
-     *  @param desiredSubset In/out parameter. As input, a desired subset of
-     *      the original bounds (as specified by getInfo). If true is returned,
-     *      desiredSubset may have been modified to a subset which is
-     *      supported. Although a particular change may have been made to
-     *      desiredSubset to create something supported, it is possible other
-     *      changes could result in a valid subset.
-     *      If false is returned, desiredSubset's value is undefined.
-     *  @return true if this codec supports decoding desiredSubset (as
-     *      returned, potentially modified)
-     */
-    bool getValidSubset(SkIRect* desiredSubset) const {
-        return this->onGetValidSubset(desiredSubset);
-    }
-
-    /**
-     *  Format of the encoded data.
-     */
-    SkEncodedImageFormat getEncodedFormat() const { return this->onGetEncodedFormat(); }
-
-    /**
-     *  Whether or not the memory passed to getPixels is zero initialized.
-     */
-    enum ZeroInitialized {
-        /**
-         *  The memory passed to getPixels is zero initialized. The SkCodec
-         *  may take advantage of this by skipping writing zeroes.
-         */
-        kYes_ZeroInitialized,
-        /**
-         *  The memory passed to getPixels has not been initialized to zero,
-         *  so the SkCodec must write all zeroes to memory.
-         *
-         *  This is the default. It will be used if no Options struct is used.
-         */
-        kNo_ZeroInitialized,
-    };
-
-    /**
-     *  Additional options to pass to getPixels.
-     */
-    struct Options {
-        Options()
-            : fZeroInitialized(kNo_ZeroInitialized)
-            , fSubset(nullptr)
-            , fFrameIndex(0)
-            , fPriorFrame(kNoFrame)
-        {}
-
-        ZeroInitialized            fZeroInitialized;
-        /**
-         *  If not NULL, represents a subset of the original image to decode.
-         *  Must be within the bounds returned by getInfo().
-         *  If the EncodedFormat is SkEncodedImageFormat::kWEBP (the only one which
-         *  currently supports subsets), the top and left values must be even.
-         *
-         *  In getPixels and incremental decode, we will attempt to decode the
-         *  exact rectangular subset specified by fSubset.
-         *
-         *  In a scanline decode, it does not make sense to specify a subset
-         *  top or subset height, since the client already controls which rows
-         *  to get and which rows to skip.  During scanline decodes, we will
-         *  require that the subset top be zero and the subset height be equal
-         *  to the full height.  We will, however, use the values of
-         *  subset left and subset width to decode partial scanlines on calls
-         *  to getScanlines().
-         */
-        const SkIRect*             fSubset;
-
-        /**
-         *  The frame to decode.
-         *
-         *  Only meaningful for multi-frame images.
-         */
-        int                        fFrameIndex;
-
-        /**
-         *  If not kNoFrame, the dst already contains the prior frame at this index.
-         *
-         *  Only meaningful for multi-frame images.
-         *
-         *  If fFrameIndex needs to be blended with a prior frame (as reported by
-         *  getFrameInfo[fFrameIndex].fRequiredFrame), the client can set this to
-         *  any non-kRestorePrevious frame in [fRequiredFrame, fFrameIndex) to
-         *  indicate that that frame is already in the dst. Options.fZeroInitialized
-         *  is ignored in this case.
-         *
-         *  If set to kNoFrame, the codec will decode any necessary required frame(s) first.
-         */
-        int                        fPriorFrame;
-    };
-
-    /**
-     *  Decode into the given pixels, a block of memory of size at
-     *  least (info.fHeight - 1) * rowBytes + (info.fWidth *
-     *  bytesPerPixel)
-     *
-     *  Repeated calls to this function should give the same results,
-     *  allowing the PixelRef to be immutable.
-     *
-     *  @param info A description of the format (config, size)
-     *         expected by the caller.  This can simply be identical
-     *         to the info returned by getInfo().
-     *
-     *         This contract also allows the caller to specify
-     *         different output-configs, which the implementation can
-     *         decide to support or not.
-     *
-     *         A size that does not match getInfo() implies a request
-     *         to scale. If the generator cannot perform this scale,
-     *         it will return kInvalidScale.
-     *
-     *         If the info contains a non-null SkColorSpace, the codec
-     *         will perform the appropriate color space transformation.
-     *         If the caller passes in the same color space that was
-     *         reported by the codec, the color space transformation is
-     *         a no-op.
-     *
-     *  If a scanline decode is in progress, scanline mode will end, requiring the client to call
-     *  startScanlineDecode() in order to return to decoding scanlines.
-     *
-     *  @return Result kSuccess, or another value explaining the type of failure.
-     */
-    Result getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options*);
-
-    /**
-     *  Simplified version of getPixels() that uses the default Options.
-     */
-    Result getPixels(const SkImageInfo& info, void* pixels, size_t rowBytes) {
-        return this->getPixels(info, pixels, rowBytes, nullptr);
-    }
-
-    Result getPixels(const SkPixmap& pm, const Options* opts = nullptr) {
-        return this->getPixels(pm.info(), pm.writable_addr(), pm.rowBytes(), opts);
-    }
-
-    /**
-     *  If decoding to YUV is supported, this returns true.  Otherwise, this
-     *  returns false and does not modify any of the parameters.
-     *
-     *  @param sizeInfo   Output parameter indicating the sizes and required
-     *                    allocation widths of the Y, U, V, and A planes. Given current codec
-     *                    limitations the size of the A plane will always be 0 and the Y, U, V
-     *                    channels will always be planar.
-     *  @param colorSpace Output parameter.  If non-NULL this is set to kJPEG,
-     *                    otherwise this is ignored.
-     */
-    bool queryYUV8(SkYUVASizeInfo* sizeInfo, SkYUVColorSpace* colorSpace) const {
-        if (nullptr == sizeInfo) {
-            return false;
-        }
-
-        bool result = this->onQueryYUV8(sizeInfo, colorSpace);
-        if (result) {
-            for (int i = 0; i <= 2; ++i) {
-                SkASSERT(sizeInfo->fSizes[i].fWidth > 0 && sizeInfo->fSizes[i].fHeight > 0 &&
-                         sizeInfo->fWidthBytes[i] > 0);
-            }
-            SkASSERT(!sizeInfo->fSizes[3].fWidth &&
-                     !sizeInfo->fSizes[3].fHeight &&
-                     !sizeInfo->fWidthBytes[3]);
-        }
-        return result;
-    }
-
-    /**
-     *  Returns kSuccess, or another value explaining the type of failure.
-     *  This always attempts to perform a full decode.  If the client only
-     *  wants size, it should call queryYUV8().
-     *
-     *  @param sizeInfo   Needs to exactly match the values returned by the
-     *                    query, except the WidthBytes may be larger than the
-     *                    recommendation (but not smaller).
-     *  @param planes     Memory for each of the Y, U, and V planes.
-     */
-    Result getYUV8Planes(const SkYUVASizeInfo& sizeInfo, void* planes[SkYUVASizeInfo::kMaxCount]) {
-        if (!planes || !planes[0] || !planes[1] || !planes[2]) {
-            return kInvalidInput;
-        }
-        SkASSERT(!planes[3]); // TODO: is this a fair assumption?
-
-        if (!this->rewindIfNeeded()) {
-            return kCouldNotRewind;
-        }
-
-        return this->onGetYUV8Planes(sizeInfo, planes);
-    }
-
-    /**
-     *  Prepare for an incremental decode with the specified options.
-     *
-     *  This may require a rewind.
-     *
-     *  @param dstInfo Info of the destination. If the dimensions do not match
-     *      those of getInfo, this implies a scale.
-     *  @param dst Memory to write to. Needs to be large enough to hold the subset,
-     *      if present, or the full image as described in dstInfo.
-     *  @param options Contains decoding options, including if memory is zero
-     *      initialized and whether to decode a subset.
-     *  @return Enum representing success or reason for failure.
-     */
-    Result startIncrementalDecode(const SkImageInfo& dstInfo, void* dst, size_t rowBytes,
-            const Options*);
-
-    Result startIncrementalDecode(const SkImageInfo& dstInfo, void* dst, size_t rowBytes) {
-        return this->startIncrementalDecode(dstInfo, dst, rowBytes, nullptr);
-    }
-
-    /**
-     *  Start/continue the incremental decode.
-     *
-     *  Not valid to call before calling startIncrementalDecode().
-     *
-     *  After the first call, should only be called again if more data has been
-     *  provided to the source SkStream.
-     *
-     *  Unlike getPixels and getScanlines, this does not do any filling. This is
-     *  left up to the caller, since they may be skipping lines or continuing the
-     *  decode later. In the latter case, they may choose to initialize all lines
-     *  first, or only initialize the remaining lines after the first call.
-     *
-     *  @param rowsDecoded Optional output variable returning the total number of
-     *      lines initialized. Only meaningful if this method returns kIncompleteInput.
-     *      Otherwise the implementation may not set it.
-     *      Note that some implementations may have initialized this many rows, but
-     *      not necessarily finished those rows (e.g. interlaced PNG). This may be
-     *      useful for determining what rows the client needs to initialize.
-     *  @return kSuccess if all lines requested in startIncrementalDecode have
-     *      been completely decoded. kIncompleteInput otherwise.
-     */
-    Result incrementalDecode(int* rowsDecoded = nullptr) {
-        if (!fStartedIncrementalDecode) {
-            return kInvalidParameters;
-        }
-        return this->onIncrementalDecode(rowsDecoded);
-    }
-
-    /**
-     * The remaining functions revolve around decoding scanlines.
-     */
-
-    /**
-     *  Prepare for a scanline decode with the specified options.
-     *
-     *  After this call, this class will be ready to decode the first scanline.
-     *
-     *  This must be called in order to call getScanlines or skipScanlines.
-     *
-     *  This may require rewinding the stream.
-     *
-     *  Not all SkCodecs support this.
-     *
-     *  @param dstInfo Info of the destination. If the dimensions do not match
-     *      those of getInfo, this implies a scale.
-     *  @param options Contains decoding options, including if memory is zero
-     *      initialized.
-     *  @return Enum representing success or reason for failure.
-     */
-    Result startScanlineDecode(const SkImageInfo& dstInfo, const Options* options);
-
-    /**
-     *  Simplified version of startScanlineDecode() that uses the default Options.
-     */
-    Result startScanlineDecode(const SkImageInfo& dstInfo) {
-        return this->startScanlineDecode(dstInfo, nullptr);
-    }
-
-    /**
-     *  Write the next countLines scanlines into dst.
-     *
-     *  Not valid to call before calling startScanlineDecode().
-     *
-     *  @param dst Must be non-null, and large enough to hold countLines
-     *      scanlines of size rowBytes.
-     *  @param countLines Number of lines to write.
-     *  @param rowBytes Number of bytes per row. Must be large enough to hold
-     *      a scanline based on the SkImageInfo used to create this object.
-     *  @return the number of lines successfully decoded.  If this value is
-     *      less than countLines, this will fill the remaining lines with a
-     *      default value.
-     */
-    int getScanlines(void* dst, int countLines, size_t rowBytes);
-
-    /**
-     *  Skip count scanlines.
-     *
-     *  Not valid to call before calling startScanlineDecode().
-     *
-     *  The default version just calls onGetScanlines and discards the dst.
-     *  NOTE: If skipped lines are the only lines with alpha, this default
-     *  will make reallyHasAlpha return true, when it could have returned
-     *  false.
-     *
-     *  @return true if the scanlines were successfully skipped
-     *          false on failure, possible reasons for failure include:
-     *              An incomplete input image stream.
-     *              Calling this function before calling startScanlineDecode().
-     *              If countLines is less than zero or so large that it moves
-     *                  the current scanline past the end of the image.
-     */
-    bool skipScanlines(int countLines);
-
-    /**
-     *  The order in which rows are output from the scanline decoder is not the
-     *  same for all variations of all image types.  This explains the possible
-     *  output row orderings.
-     */
-    enum SkScanlineOrder {
-        /*
-         * By far the most common, this indicates that the image can be decoded
-         * reliably using the scanline decoder, and that rows will be output in
-         * the logical order.
-         */
-        kTopDown_SkScanlineOrder,
-
-        /*
-         * This indicates that the scanline decoder reliably outputs rows, but
-         * they will be returned in reverse order.  If the scanline format is
-         * kBottomUp, the nextScanline() API can be used to determine the actual
-         * y-coordinate of the next output row, but the client is not forced
-         * to take advantage of this, given that it's not too tough to keep
-         * track independently.
-         *
-         * For full image decodes, it is safe to get all of the scanlines at
-         * once, since the decoder will handle inverting the rows as it
-         * decodes.
-         *
-         * For subset decodes and sampling, it is simplest to get and skip
-         * scanlines one at a time, using the nextScanline() API.  It is
-         * possible to ask for larger chunks at a time, but this should be used
-         * with caution.  As with full image decodes, the decoder will handle
-         * inverting the requested rows, but rows will still be delivered
-         * starting from the bottom of the image.
-         *
-         * Upside down bmps are an example.
-         */
-        kBottomUp_SkScanlineOrder,
-    };
-
-    /**
-     *  An enum representing the order in which scanlines will be returned by
-     *  the scanline decoder.
-     *
-     *  This is undefined before startScanlineDecode() is called.
-     */
-    SkScanlineOrder getScanlineOrder() const { return this->onGetScanlineOrder(); }
-
-    /**
-     *  Returns the y-coordinate of the next row to be returned by the scanline
-     *  decoder.
-     *
-     *  This will equal fCurrScanline, except in the case of strangely
-     *  encoded image types (bottom-up bmps).
-     *
-     *  Results are undefined when not in scanline decoding mode.
-     */
-    int nextScanline() const { return this->outputScanline(fCurrScanline); }
-
-    /**
-     *  Returns the output y-coordinate of the row that corresponds to an input
-     *  y-coordinate.  The input y-coordinate represents where the scanline
-     *  is located in the encoded data.
-     *
-     *  This will equal inputScanline, except in the case of strangely
-     *  encoded image types (bottom-up bmps, interlaced gifs).
-     */
-    int outputScanline(int inputScanline) const;
-
-    /**
-     *  Return the number of frames in the image.
-     *
-     *  May require reading through the stream.
-     */
-    int getFrameCount() {
-        return this->onGetFrameCount();
-    }
-
-    // Sentinel value used when a frame index implies "no frame":
-    // - FrameInfo::fRequiredFrame set to this value means the frame
-    //   is independent.
-    // - Options::fPriorFrame set to this value means no (relevant) prior frame
-    //   is residing in dst's memory.
-    static constexpr int kNoFrame = -1;
-
-    // This transitional definition was added in August 2018, and will eventually be removed.
-#ifdef SK_LEGACY_SKCODEC_NONE_ENUM
-    static constexpr int kNone = kNoFrame;
-#endif
-
-    /**
-     *  Information about individual frames in a multi-framed image.
-     */
-    struct FrameInfo {
-        /**
-         *  The frame that this frame needs to be blended with, or
-         *  kNoFrame if this frame is independent.
-         *
-         *  Note that this is the *earliest* frame that can be used
-         *  for blending. Any frame from [fRequiredFrame, i) can be
-         *  used, unless its fDisposalMethod is kRestorePrevious.
-         */
-        int fRequiredFrame;
-
-        /**
-         *  Number of milliseconds to show this frame.
-         */
-        int fDuration;
-
-        /**
-         *  Whether the end marker for this frame is contained in the stream.
-         *
-         *  Note: this does not guarantee that an attempt to decode will be complete.
-         *  There could be an error in the stream.
-         */
-        bool fFullyReceived;
-
-        /**
-         *  This is conservative; it will still return non-opaque if e.g. a
-         *  color index-based frame has a color with alpha but does not use it.
-         */
-        SkAlphaType fAlphaType;
-
-        /**
-         *  How this frame should be modified before decoding the next one.
-         */
-        SkCodecAnimation::DisposalMethod fDisposalMethod;
-    };
-
-    /**
-     *  Return info about a single frame.
-     *
-     *  Only supported by multi-frame images. Does not read through the stream,
-     *  so it should be called after getFrameCount() to parse any frames that
-     *  have not already been parsed.
-     */
-    bool getFrameInfo(int index, FrameInfo* info) const {
-        if (index < 0) {
-            return false;
-        }
-        return this->onGetFrameInfo(index, info);
-    }
-
-    /**
-     *  Return info about all the frames in the image.
-     *
-     *  May require reading through the stream to determine info about the
-     *  frames (including the count).
-     *
-     *  As such, future decoding calls may require a rewind.
-     *
-     *  For still (non-animated) image codecs, this will return an empty vector.
-     */
-    std::vector<FrameInfo> getFrameInfo();
-
-    static constexpr int kRepetitionCountInfinite = -1;
-
-    /**
-     *  Return the number of times to repeat, if this image is animated. This number does not
-     *  include the first play through of each frame. For example, a repetition count of 4 means
-     *  that each frame is played 5 times and then the animation stops.
-     *
-     *  It can return kRepetitionCountInfinite, a negative number, meaning that the animation
-     *  should loop forever.
-     *
-     *  May require reading the stream to find the repetition count.
-     *
-     *  As such, future decoding calls may require a rewind.
-     *
-     *  For still (non-animated) image codecs, this will return 0.
-     */
-    int getRepetitionCount() {
-        return this->onGetRepetitionCount();
-    }
-
-protected:
-    const SkEncodedInfo& getEncodedInfo() const { return fEncodedInfo; }
-
-    using XformFormat = skcms_PixelFormat;
-
-    SkCodec(SkEncodedInfo&&,
-            XformFormat srcFormat,
-            std::unique_ptr<SkStream>,
-            SkEncodedOrigin = kTopLeft_SkEncodedOrigin);
-
-    virtual SkISize onGetScaledDimensions(float /*desiredScale*/) const {
-        // By default, scaling is not supported.
-        return this->dimensions();
-    }
-
-    // FIXME: What to do about subsets??
-    /**
-     *  Subclasses should override if they support dimensions other than the
-     *  srcInfo's.
-     */
-    virtual bool onDimensionsSupported(const SkISize&) {
-        return false;
-    }
-
-    virtual SkEncodedImageFormat onGetEncodedFormat() const = 0;
-
-    /**
-     * @param rowsDecoded When the encoded image stream is incomplete, this function
-     *                    will return kIncompleteInput and rowsDecoded will be set to
-     *                    the number of scanlines that were successfully decoded.
-     *                    This will allow getPixels() to fill the uninitialized memory.
-     */
-    virtual Result onGetPixels(const SkImageInfo& info,
-                               void* pixels, size_t rowBytes, const Options&,
-                               int* rowsDecoded) = 0;
-
-    virtual bool onQueryYUV8(SkYUVASizeInfo*, SkYUVColorSpace*) const {
-        return false;
-    }
-
-    virtual Result onGetYUV8Planes(const SkYUVASizeInfo&,
-                                   void*[SkYUVASizeInfo::kMaxCount] /*planes*/) {
-        return kUnimplemented;
-    }
-
-    virtual bool onGetValidSubset(SkIRect* /*desiredSubset*/) const {
-        // By default, subsets are not supported.
-        return false;
-    }
-
-    /**
-     *  If the stream was previously read, attempt to rewind.
-     *
-     *  If the stream needed to be rewound, call onRewind.
-     *  @returns true if the codec is at the right position and can be used.
-     *      false if there was a failure to rewind.
-     *
-     *  This is called by getPixels(), getYUV8Planes(), startIncrementalDecode() and
-     *  startScanlineDecode(). Subclasses may call if they need to rewind at another time.
-     */
-    bool SK_WARN_UNUSED_RESULT rewindIfNeeded();
-
-    /**
-     *  Called by rewindIfNeeded, if the stream needed to be rewound.
-     *
-     *  Subclasses should do any set up needed after a rewind.
-     */
-    virtual bool onRewind() {
-        return true;
-    }
-
-    /**
-     * Get method for the input stream
-     */
-    SkStream* stream() {
-        return fStream.get();
-    }
-
-    /**
-     *  The remaining functions revolve around decoding scanlines.
-     */
-
-    /**
-     *  Most images types will be kTopDown and will not need to override this function.
-     */
-    virtual SkScanlineOrder onGetScanlineOrder() const { return kTopDown_SkScanlineOrder; }
-
-    const SkImageInfo& dstInfo() const { return fDstInfo; }
-
-    const Options& options() const { return fOptions; }
-
-    /**
-     *  Returns the number of scanlines that have been decoded so far.
-     *  This is unaffected by the SkScanlineOrder.
-     *
-     *  Returns -1 if we have not started a scanline decode.
-     */
-    int currScanline() const { return fCurrScanline; }
-
-    virtual int onOutputScanline(int inputScanline) const;
-
-    /**
-     *  Return whether we can convert to dst.
-     *
-     *  Will be called for the appropriate frame, prior to initializing the colorXform.
-     */
-    virtual bool conversionSupported(const SkImageInfo& dst, bool srcIsOpaque,
-                                     bool needsColorXform);
-
-    // Some classes never need a colorXform e.g.
-    // - ICO uses its embedded codec's colorXform
-    // - WBMP is just Black/White
-    virtual bool usesColorXform() const { return true; }
-    void applyColorXform(void* dst, const void* src, int count) const;
-
-    bool colorXform() const { return fXformTime != kNo_XformTime; }
-    bool xformOnDecode() const { return fXformTime == kDecodeRow_XformTime; }
-
-    virtual int onGetFrameCount() {
-        return 1;
-    }
-
-    virtual bool onGetFrameInfo(int, FrameInfo*) const {
-        return false;
-    }
-
-    virtual int onGetRepetitionCount() {
-        return 0;
-    }
-
-private:
-    const SkEncodedInfo                fEncodedInfo;
-    const XformFormat                  fSrcXformFormat;
-    std::unique_ptr<SkStream>          fStream;
-    bool                               fNeedsRewind;
-    const SkEncodedOrigin              fOrigin;
-
-    SkImageInfo                        fDstInfo;
-    Options                            fOptions;
-
-    enum XformTime {
-        kNo_XformTime,
-        kPalette_XformTime,
-        kDecodeRow_XformTime,
-    };
-    XformTime                          fXformTime;
-    XformFormat                        fDstXformFormat; // Based on fDstInfo.
-    skcms_ICCProfile                   fDstProfile;
-    skcms_AlphaFormat                  fDstXformAlphaFormat;
-
-    // Only meaningful during scanline decodes.
-    int                                fCurrScanline;
-
-    bool                               fStartedIncrementalDecode;
-
-    bool initializeColorXform(const SkImageInfo& dstInfo, SkEncodedInfo::Alpha, bool srcIsOpaque);
-
-    /**
-     *  Return whether these dimensions are supported as a scale.
-     *
-     *  The codec may choose to cache the information about scale and subset.
-     *  Either way, the same information will be passed to onGetPixels/onStart
-     *  on success.
-     *
-     *  This must return true for a size returned from getScaledDimensions.
-     */
-    bool dimensionsSupported(const SkISize& dim) {
-        return dim == this->dimensions() || this->onDimensionsSupported(dim);
-    }
-
-    /**
-     *  For multi-framed images, return the object with information about the frames.
-     */
-    virtual const SkFrameHolder* getFrameHolder() const {
-        return nullptr;
-    }
-
-    /**
-     *  Check for a valid Options.fFrameIndex, and decode prior frames if necessary.
-     */
-    Result handleFrameIndex(const SkImageInfo&, void* pixels, size_t rowBytes, const Options&);
-
-    // Methods for scanline decoding.
-    virtual Result onStartScanlineDecode(const SkImageInfo& /*dstInfo*/,
-            const Options& /*options*/) {
-        return kUnimplemented;
-    }
-
-    virtual Result onStartIncrementalDecode(const SkImageInfo& /*dstInfo*/, void*, size_t,
-            const Options&) {
-        return kUnimplemented;
-    }
-
-    virtual Result onIncrementalDecode(int*) {
-        return kUnimplemented;
-    }
-
-
-    virtual bool onSkipScanlines(int /*countLines*/) { return false; }
-
-    virtual int onGetScanlines(void* /*dst*/, int /*countLines*/, size_t /*rowBytes*/) { return 0; }
-
-    /**
-     * On an incomplete decode, getPixels() and getScanlines() will call this function
-     * to fill any uinitialized memory.
-     *
-     * @param dstInfo        Contains the destination color type
-     *                       Contains the destination alpha type
-     *                       Contains the destination width
-     *                       The height stored in this info is unused
-     * @param dst            Pointer to the start of destination pixel memory
-     * @param rowBytes       Stride length in destination pixel memory
-     * @param zeroInit       Indicates if memory is zero initialized
-     * @param linesRequested Number of lines that the client requested
-     * @param linesDecoded   Number of lines that were successfully decoded
-     */
-    void fillIncompleteImage(const SkImageInfo& dstInfo, void* dst, size_t rowBytes,
-            ZeroInitialized zeroInit, int linesRequested, int linesDecoded);
-
-    /**
-     *  Return an object which will allow forcing scanline decodes to sample in X.
-     *
-     *  May create a sampler, if one is not currently being used. Otherwise, does
-     *  not affect ownership.
-     *
-     *  Only valid during scanline decoding or incremental decoding.
-     */
-    virtual SkSampler* getSampler(bool /*createIfNecessary*/) { return nullptr; }
-
-    friend class DM::CodecSrc;  // for fillIncompleteImage
-    friend class SkSampledCodec;
-    friend class SkIcoCodec;
-    friend class SkAndroidCodec; // for fEncodedInfo
-};
-#endif // SkCodec_DEFINED

+ 0 - 43
skia/include/codec/SkCodecAnimation.h

@@ -1,43 +0,0 @@
-/*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkCodecAnimation_DEFINED
-#define SkCodecAnimation_DEFINED
-
-namespace SkCodecAnimation {
-    /**
-     *  This specifies how the next frame is based on this frame.
-     *
-     *  Names are based on the GIF 89a spec.
-     *
-     *  The numbers correspond to values in a GIF.
-     */
-    enum class DisposalMethod {
-        /**
-         *  The next frame should be drawn on top of this one.
-         *
-         *  In a GIF, a value of 0 (not specified) is also treated as Keep.
-         */
-        kKeep               = 1,
-
-        /**
-         *  Similar to Keep, except the area inside this frame's rectangle
-         *  should be cleared to the BackGround color (transparent) before
-         *  drawing the next frame.
-         */
-        kRestoreBGColor     = 2,
-
-        /**
-         *  The next frame should be drawn on top of the previous frame - i.e.
-         *  disregarding this one.
-         *
-         *  In a GIF, a value of 4 is also treated as RestorePrevious.
-         */
-        kRestorePrevious    = 3,
-    };
-};
-#endif // SkCodecAnimation_DEFINED

+ 0 - 23
skia/include/codec/SkEncodedOrigin.h

@@ -1,23 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkEncodedOrigin_DEFINED
-#define SkEncodedOrigin_DEFINED
-// These values match the orientation www.exif.org/Exif2-2.PDF.
-enum SkEncodedOrigin {
-    kTopLeft_SkEncodedOrigin     = 1, // Default
-    kTopRight_SkEncodedOrigin    = 2, // Reflected across y-axis
-    kBottomRight_SkEncodedOrigin = 3, // Rotated 180
-    kBottomLeft_SkEncodedOrigin  = 4, // Reflected across x-axis
-    kLeftTop_SkEncodedOrigin     = 5, // Reflected across x-axis, Rotated 90 CCW
-    kRightTop_SkEncodedOrigin    = 6, // Rotated 90 CW
-    kRightBottom_SkEncodedOrigin = 7, // Reflected across x-axis, Rotated 90 CW
-    kLeftBottom_SkEncodedOrigin  = 8, // Rotated 90 CCW
-    kDefault_SkEncodedOrigin     = kTopLeft_SkEncodedOrigin,
-    kLast_SkEncodedOrigin        = kLeftBottom_SkEncodedOrigin,
-};
-#endif // SkEncodedOrigin_DEFINED

+ 0 - 130
skia/include/config/SkUserConfig.h

@@ -1,130 +0,0 @@
-
-/*
- * Copyright 2006 The Android Open Source Project
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-
-#ifndef SkUserConfig_DEFINED
-#define SkUserConfig_DEFINED
-
-/*  SkTypes.h, the root of the public header files, does the following trick:
-
-    #include "SkPreConfig.h"
-    #include "SkUserConfig.h"
-    #include "SkPostConfig.h"
-
-    SkPreConfig.h runs first, and it is responsible for initializing certain
-    skia defines.
-
-    SkPostConfig.h runs last, and its job is to just check that the final
-    defines are consistent (i.e. that we don't have mutually conflicting
-    defines).
-
-    SkUserConfig.h (this file) runs in the middle. It gets to change or augment
-    the list of flags initially set in preconfig, and then postconfig checks
-    that everything still makes sense.
-
-    Below are optional defines that add, subtract, or change default behavior
-    in Skia. Your port can locally edit this file to enable/disable flags as
-    you choose, or these can be delared on your command line (i.e. -Dfoo).
-
-    By default, this include file will always default to having all of the flags
-    commented out, so including it will have no effect.
-*/
-
-///////////////////////////////////////////////////////////////////////////////
-
-/*  Skia has lots of debug-only code. Often this is just null checks or other
-    parameter checking, but sometimes it can be quite intrusive (e.g. check that
-    each 32bit pixel is in premultiplied form). This code can be very useful
-    during development, but will slow things down in a shipping product.
-
-    By default, these mutually exclusive flags are defined in SkPreConfig.h,
-    based on the presence or absence of NDEBUG, but that decision can be changed
-    here.
- */
-//#define SK_DEBUG
-//#define SK_RELEASE
-
-/*  Skia has certain debug-only code that is extremely intensive even for debug
-    builds.  This code is useful for diagnosing specific issues, but is not
-    generally applicable, therefore it must be explicitly enabled to avoid
-    the performance impact. By default these flags are undefined, but can be
-    enabled by uncommenting them below.
- */
-//#define SK_DEBUG_GLYPH_CACHE
-//#define SK_DEBUG_PATH
-
-/*  preconfig will have attempted to determine the endianness of the system,
-    but you can change these mutually exclusive flags here.
- */
-//#define SK_CPU_BENDIAN
-//#define SK_CPU_LENDIAN
-
-/*  Most compilers use the same bit endianness for bit flags in a byte as the
-    system byte endianness, and this is the default. If for some reason this
-    needs to be overridden, specify which of the mutually exclusive flags to
-    use. For example, some atom processors in certain configurations have big
-    endian byte order but little endian bit orders.
-*/
-//#define SK_UINT8_BITFIELD_BENDIAN
-//#define SK_UINT8_BITFIELD_LENDIAN
-
-
-/*  To write debug messages to a console, skia will call SkDebugf(...) following
-    printf conventions (e.g. const char* format, ...). If you want to redirect
-    this to something other than printf, define yours here
- */
-//#define SkDebugf(...)  MyFunction(__VA_ARGS__)
-
-/*
- *  To specify a different default font cache limit, define this. If this is
- *  undefined, skia will use a built-in value.
- */
-//#define SK_DEFAULT_FONT_CACHE_LIMIT   (1024 * 1024)
-
-/*
- *  To specify the default size of the image cache, undefine this and set it to
- *  the desired value (in bytes). SkGraphics.h as a runtime API to set this
- *  value as well. If this is undefined, a built-in value will be used.
- */
-//#define SK_DEFAULT_IMAGE_CACHE_LIMIT (1024 * 1024)
-
-/*  Define this to set the upper limit for text to support LCD. Values that
-    are very large increase the cost in the font cache and draw slower, without
-    improving readability. If this is undefined, Skia will use its default
-    value (e.g. 48)
- */
-//#define SK_MAX_SIZE_FOR_LCDTEXT     48
-
-/*  Change the ordering to work in X windows.
- */
-#ifdef SK_SAMPLES_FOR_X
-        #define SK_R32_SHIFT    16
-        #define SK_G32_SHIFT    8
-        #define SK_B32_SHIFT    0
-        #define SK_A32_SHIFT    24
-#endif
-
-
-/* Determines whether to build code that supports the GPU backend. Some classes
-   that are not GPU-specific, such as SkShader subclasses, have optional code
-   that is used allows them to interact with the GPU backend. If you'd like to
-   omit this code set SK_SUPPORT_GPU to 0. This also allows you to omit the gpu
-   directories from your include search path when you're not building the GPU
-   backend. Defaults to 1 (build the GPU code).
- */
-//#define SK_SUPPORT_GPU 1
-
-/* Skia makes use of histogram logging macros to trace the frequency of
- * events. By default, Skia provides no-op versions of these macros.
- * Skia consumers can provide their own definitions of these macros to
- * integrate with their histogram collection backend.
- */
-//#define SK_HISTOGRAM_BOOLEAN(name, value)
-//#define SK_HISTOGRAM_ENUMERATION(name, value, boundary_value)
-
-#endif

+ 0 - 50
skia/include/core/SkAnnotation.h

@@ -1,50 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkAnnotation_DEFINED
-#define SkAnnotation_DEFINED
-
-#include "SkTypes.h"
-
-class SkData;
-struct SkPoint;
-struct SkRect;
-class SkCanvas;
-
-/**
- *  Annotate the canvas by associating the specified URL with the
- *  specified rectangle (in local coordinates, just like drawRect).
- *
- *  If the backend of this canvas does not support annotations, this call is
- *  safely ignored.
- *
- *  The caller is responsible for managing its ownership of the SkData.
- */
-SK_API void SkAnnotateRectWithURL(SkCanvas*, const SkRect&, SkData*);
-
-/**
- *  Annotate the canvas by associating a name with the specified point.
- *
- *  If the backend of this canvas does not support annotations, this call is
- *  safely ignored.
- *
- *  The caller is responsible for managing its ownership of the SkData.
- */
-SK_API void SkAnnotateNamedDestination(SkCanvas*, const SkPoint&, SkData*);
-
-/**
- *  Annotate the canvas by making the specified rectangle link to a named
- *  destination.
- *
- *  If the backend of this canvas does not support annotations, this call is
- *  safely ignored.
- *
- *  The caller is responsible for managing its ownership of the SkData.
- */
-SK_API void SkAnnotateLinkToDestination(SkCanvas*, const SkRect&, SkData*);
-
-#endif

+ 0 - 31
skia/include/core/SkBBHFactory.h

@@ -1,31 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkBBHFactory_DEFINED
-#define SkBBHFactory_DEFINED
-
-#include "SkTypes.h"
-class SkBBoxHierarchy;
-struct SkRect;
-
-class SK_API SkBBHFactory {
-public:
-    /**
-     *  Allocate a new SkBBoxHierarchy. Return NULL on failure.
-     */
-    virtual SkBBoxHierarchy* operator()(const SkRect& bounds) const = 0;
-    virtual ~SkBBHFactory() {}
-};
-
-class SK_API SkRTreeFactory : public SkBBHFactory {
-public:
-    SkBBoxHierarchy* operator()(const SkRect& bounds) const override;
-private:
-    typedef SkBBHFactory INHERITED;
-};
-
-#endif

部分文件因为文件数量过多而无法显示