From 39da44e899ab9a89554300b5f841ffd90f25b70f Mon Sep 17 00:00:00 2001 From: Clownacy Date: Tue, 9 Apr 2019 21:38:25 +0100 Subject: [PATCH] Added cmake build setup --- CMakeLists.txt | 275 + {msvc2003/SDL2-2.0.9 => msvc/SDL2}/BUGS.txt | 0 .../SDL2-2.0.9 => msvc/SDL2}/COPYING.txt | 0 .../SDL2-2.0.9 => msvc/SDL2}/README-SDL.txt | 0 {msvc2003/SDL2-2.0.9 => msvc/SDL2}/README.txt | 0 .../SDL2-2.0.9 => msvc/SDL2}/WhatsNew.txt | 0 .../SDL2}/docs/README-android.md | 0 .../SDL2}/docs/README-cmake.md | 0 .../SDL2}/docs/README-directfb.md | 0 .../SDL2}/docs/README-dynapi.md | 0 .../SDL2}/docs/README-emscripten.md | 0 .../SDL2}/docs/README-gesture.md | 0 .../SDL2}/docs/README-hg.md | 0 .../SDL2}/docs/README-ios.md | 0 .../SDL2}/docs/README-linux.md | 0 .../SDL2}/docs/README-macosx.md | 0 .../SDL2}/docs/README-nacl.md | 0 .../SDL2}/docs/README-pandora.md | 0 .../SDL2}/docs/README-platforms.md | 0 .../SDL2}/docs/README-porting.md | 0 .../SDL2}/docs/README-psp.md | 0 .../SDL2}/docs/README-raspberrypi.md | 0 .../SDL2}/docs/README-touch.md | 0 .../SDL2}/docs/README-wince.md | 0 .../SDL2}/docs/README-windows.md | 0 .../SDL2}/docs/README-winrt.md | 0 .../SDL2-2.0.9 => msvc/SDL2}/docs/README.md | 0 .../SDL2-2.0.9 => msvc/SDL2}/docs/doxyfile | 0 .../SDL2-2.0.9 => msvc/SDL2}/include/SDL.h | 0 .../SDL2}/include/SDL_assert.h | 0 .../SDL2}/include/SDL_atomic.h | 0 .../SDL2}/include/SDL_audio.h | 0 .../SDL2}/include/SDL_bits.h | 0 .../SDL2}/include/SDL_blendmode.h | 0 .../SDL2}/include/SDL_clipboard.h | 0 .../SDL2}/include/SDL_config.h | 0 .../SDL2}/include/SDL_config.h.cmake | 0 .../SDL2}/include/SDL_config.h.in | 0 .../SDL2}/include/SDL_config_android.h | 0 .../SDL2}/include/SDL_config_iphoneos.h | 0 .../SDL2}/include/SDL_config_macosx.h | 0 .../SDL2}/include/SDL_config_macosx.h.orig | 0 .../SDL2}/include/SDL_config_minimal.h | 0 .../SDL2}/include/SDL_config_pandora.h | 0 .../SDL2}/include/SDL_config_psp.h | 0 .../SDL2}/include/SDL_config_windows.h | 0 .../SDL2}/include/SDL_config_winrt.h | 0 .../SDL2}/include/SDL_config_wiz.h | 0 .../SDL2}/include/SDL_copying.h | 0 .../SDL2}/include/SDL_cpuinfo.h | 0 .../SDL2}/include/SDL_egl.h | 0 .../SDL2}/include/SDL_endian.h | 0 .../SDL2}/include/SDL_error.h | 0 .../SDL2}/include/SDL_events.h | 0 .../SDL2}/include/SDL_filesystem.h | 0 .../SDL2}/include/SDL_gamecontroller.h | 0 .../SDL2}/include/SDL_gesture.h | 0 .../SDL2}/include/SDL_haptic.h | 0 .../SDL2}/include/SDL_hints.h | 0 .../SDL2}/include/SDL_joystick.h | 0 .../SDL2}/include/SDL_keyboard.h | 0 .../SDL2}/include/SDL_keycode.h | 0 .../SDL2}/include/SDL_loadso.h | 0 .../SDL2}/include/SDL_log.h | 0 .../SDL2}/include/SDL_main.h | 0 .../SDL2}/include/SDL_messagebox.h | 0 .../SDL2}/include/SDL_mouse.h | 0 .../SDL2}/include/SDL_mutex.h | 0 .../SDL2}/include/SDL_name.h | 0 .../SDL2}/include/SDL_opengl.h | 0 .../SDL2}/include/SDL_opengl_glext.h | 0 .../SDL2}/include/SDL_opengles.h | 0 .../SDL2}/include/SDL_opengles2.h | 0 .../SDL2}/include/SDL_opengles2_gl2.h | 0 .../SDL2}/include/SDL_opengles2_gl2ext.h | 0 .../SDL2}/include/SDL_opengles2_gl2platform.h | 0 .../SDL2}/include/SDL_opengles2_khrplatform.h | 0 .../SDL2}/include/SDL_pixels.h | 0 .../SDL2}/include/SDL_platform.h | 0 .../SDL2}/include/SDL_power.h | 0 .../SDL2}/include/SDL_quit.h | 0 .../SDL2}/include/SDL_rect.h | 0 .../SDL2}/include/SDL_render.h | 0 .../SDL2}/include/SDL_revision.h | 0 .../SDL2}/include/SDL_rwops.h | 0 .../SDL2}/include/SDL_scancode.h | 0 .../SDL2}/include/SDL_sensor.h | 0 .../SDL2}/include/SDL_shape.h | 0 .../SDL2}/include/SDL_stdinc.h | 0 .../SDL2}/include/SDL_surface.h | 0 .../SDL2}/include/SDL_system.h | 0 .../SDL2}/include/SDL_syswm.h | 0 .../SDL2}/include/SDL_test.h | 0 .../SDL2}/include/SDL_test_assert.h | 0 .../SDL2}/include/SDL_test_common.h | 0 .../SDL2}/include/SDL_test_compare.h | 0 .../SDL2}/include/SDL_test_crc32.h | 0 .../SDL2}/include/SDL_test_font.h | 0 .../SDL2}/include/SDL_test_fuzzer.h | 0 .../SDL2}/include/SDL_test_harness.h | 0 .../SDL2}/include/SDL_test_images.h | 0 .../SDL2}/include/SDL_test_log.h | 0 .../SDL2}/include/SDL_test_md5.h | 0 .../SDL2}/include/SDL_test_memory.h | 0 .../SDL2}/include/SDL_test_random.h | 0 .../SDL2}/include/SDL_thread.h | 0 .../SDL2}/include/SDL_timer.h | 0 .../SDL2}/include/SDL_touch.h | 0 .../SDL2}/include/SDL_types.h | 0 .../SDL2}/include/SDL_version.h | 0 .../SDL2}/include/SDL_video.h | 0 .../SDL2}/include/SDL_vulkan.h | 0 .../SDL2}/include/begin_code.h | 0 .../SDL2}/include/close_code.h | 0 .../SDL2-2.0.9 => msvc/SDL2}/lib/x64/SDL2.dll | Bin .../SDL2-2.0.9 => msvc/SDL2}/lib/x64/SDL2.lib | Bin .../SDL2}/lib/x64/SDL2main.lib | Bin .../SDL2}/lib/x64/SDL2test.lib | Bin .../SDL2-2.0.9 => msvc/SDL2}/lib/x86/SDL2.dll | Bin .../SDL2-2.0.9 => msvc/SDL2}/lib/x86/SDL2.lib | Bin .../SDL2}/lib/x86/SDL2main.lib | Bin .../SDL2}/lib/x86/SDL2test.lib | Bin .../freetype-2.10.0 => msvc/freetype}/FTL.TXT | 0 msvc/freetype/GPLv2.TXT | 340 ++ msvc/freetype/LICENSE.TXT | 39 + msvc/freetype/README.md | 15 + .../include/freetype/config/ftconfig.h | 575 ++ .../include/freetype/config/ftheader.h | 0 .../include/freetype/config/ftmodule.h | 0 .../include/freetype/config/ftoption.h | 0 .../include/freetype/config/ftstdlib.h | 0 .../freetype}/include/freetype/freetype.h | 0 .../freetype}/include/freetype/ftadvanc.h | 0 .../freetype}/include/freetype/ftbbox.h | 0 .../freetype}/include/freetype/ftbdf.h | 0 .../freetype}/include/freetype/ftbitmap.h | 0 .../freetype}/include/freetype/ftbzip2.h | 0 .../freetype}/include/freetype/ftcache.h | 0 .../freetype}/include/freetype/ftchapters.h | 0 .../freetype}/include/freetype/ftcid.h | 0 .../freetype}/include/freetype/ftcolor.h | 0 .../freetype}/include/freetype/ftdriver.h | 0 .../freetype}/include/freetype/fterrdef.h | 0 .../freetype}/include/freetype/fterrors.h | 0 .../freetype}/include/freetype/ftfntfmt.h | 0 .../freetype}/include/freetype/ftgasp.h | 0 .../freetype}/include/freetype/ftglyph.h | 0 .../freetype}/include/freetype/ftgxval.h | 0 .../freetype}/include/freetype/ftgzip.h | 0 .../freetype}/include/freetype/ftimage.h | 0 .../freetype}/include/freetype/ftincrem.h | 0 .../freetype}/include/freetype/ftlcdfil.h | 0 .../freetype}/include/freetype/ftlist.h | 0 .../freetype}/include/freetype/ftlzw.h | 0 .../freetype}/include/freetype/ftmac.h | 0 .../freetype}/include/freetype/ftmm.h | 0 .../freetype}/include/freetype/ftmodapi.h | 0 .../freetype}/include/freetype/ftmoderr.h | 0 .../freetype}/include/freetype/ftotval.h | 0 .../freetype}/include/freetype/ftoutln.h | 0 .../freetype}/include/freetype/ftparams.h | 0 .../freetype}/include/freetype/ftpfr.h | 0 .../freetype}/include/freetype/ftrender.h | 0 .../freetype}/include/freetype/ftsizes.h | 0 .../freetype}/include/freetype/ftsnames.h | 0 .../freetype}/include/freetype/ftstroke.h | 0 .../freetype}/include/freetype/ftsynth.h | 0 .../freetype}/include/freetype/ftsystem.h | 0 .../freetype}/include/freetype/fttrigon.h | 0 .../freetype}/include/freetype/fttypes.h | 0 .../freetype}/include/freetype/ftwinfnt.h | 0 .../freetype}/include/freetype/t1tables.h | 0 .../freetype}/include/freetype/ttnameid.h | 0 .../freetype}/include/freetype/tttables.h | 0 .../freetype}/include/freetype/tttags.h | 0 .../freetype}/include/ft2build.h | 0 msvc/freetype/win32/freetype.dll | Bin 0 -> 661504 bytes msvc/freetype/win32/freetype.lib | Bin 0 -> 47394 bytes msvc/freetype/win64/freetype.dll | Bin 0 -> 829952 bytes msvc/freetype/win64/freetype.lib | Bin 0 -> 46362 bytes {msvc2003 => msvc/msvc2003}/CSE2.sln | 0 {msvc2003 => msvc/msvc2003}/CSE2.vcproj | 276 +- msvc/msvc2003/freetype/FTL.TXT | 169 + .../include/freetype/config/ftconfig.h | 0 .../include/freetype/config/ftheader.h | 814 +++ .../include/freetype/config/ftmodule.h | 32 + .../include/freetype/config/ftoption.h | 982 ++++ .../include/freetype/config/ftstdlib.h | 175 + .../freetype/include/freetype/freetype.h | 4880 +++++++++++++++++ .../freetype/include/freetype/ftadvanc.h | 188 + .../freetype/include/freetype/ftbbox.h | 102 + .../freetype/include/freetype/ftbdf.h | 213 + .../freetype/include/freetype/ftbitmap.h | 330 ++ .../freetype/include/freetype/ftbzip2.h | 102 + .../freetype/include/freetype/ftcache.h | 1088 ++++ .../freetype/include/freetype/ftchapters.h | 145 + .../freetype/include/freetype/ftcid.h | 168 + .../freetype/include/freetype/ftcolor.h | 311 ++ .../freetype/include/freetype/ftdriver.h | 1232 +++++ .../freetype/include/freetype/fterrdef.h | 279 + .../freetype/include/freetype/fterrors.h | 285 + .../freetype/include/freetype/ftfntfmt.h | 94 + .../freetype/include/freetype/ftgasp.h | 144 + .../freetype/include/freetype/ftglyph.h | 665 +++ .../freetype/include/freetype/ftgxval.h | 355 ++ .../freetype/include/freetype/ftgzip.h | 151 + .../freetype/include/freetype/ftimage.h | 1240 +++++ .../freetype/include/freetype/ftincrem.h | 344 ++ .../freetype/include/freetype/ftlcdfil.h | 328 ++ .../freetype/include/freetype/ftlist.h | 297 + .../freetype/include/freetype/ftlzw.h | 100 + .../freetype/include/freetype/ftmac.h | 290 + .../msvc2003/freetype/include/freetype/ftmm.h | 753 +++ .../freetype/include/freetype/ftmodapi.h | 785 +++ .../freetype/include/freetype/ftmoderr.h | 203 + .../freetype/include/freetype/ftotval.h | 207 + .../freetype/include/freetype/ftoutln.h | 593 ++ .../freetype/include/freetype/ftparams.h | 204 + .../freetype/include/freetype/ftpfr.h | 180 + .../freetype/include/freetype/ftrender.h | 245 + .../freetype/include/freetype/ftsizes.h | 160 + .../freetype/include/freetype/ftsnames.h | 273 + .../freetype/include/freetype/ftstroke.h | 772 +++ .../freetype/include/freetype/ftsynth.h | 84 + .../freetype/include/freetype/ftsystem.h | 353 ++ .../freetype/include/freetype/fttrigon.h | 350 ++ .../freetype/include/freetype/fttypes.h | 615 +++ .../freetype/include/freetype/ftwinfnt.h | 277 + .../freetype/include/freetype/t1tables.h | 774 +++ .../freetype/include/freetype/ttnameid.h | 1236 +++++ .../freetype/include/freetype/tttables.h | 856 +++ .../freetype/include/freetype/tttags.h | 123 + msvc/msvc2003/freetype/include/ft2build.h | 44 + .../msvc2003/freetype}/lib/freetype.dll | Bin .../msvc2003/freetype}/lib/freetype.lib | Bin .../msvc2003/freetype}/readme.txt | 0 {msvc2003 => msvc/msvc2003}/stdint.h | 0 res/bin2h.c | 41 +- 238 files changed, 26000 insertions(+), 151 deletions(-) create mode 100644 CMakeLists.txt rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/BUGS.txt (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/COPYING.txt (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/README-SDL.txt (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/README.txt (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/WhatsNew.txt (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-android.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-cmake.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-directfb.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-dynapi.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-emscripten.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-gesture.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-hg.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-ios.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-linux.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-macosx.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-nacl.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-pandora.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-platforms.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-porting.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-psp.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-raspberrypi.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-touch.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-wince.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-windows.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README-winrt.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/README.md (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/docs/doxyfile (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_assert.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_atomic.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_audio.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_bits.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_blendmode.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_clipboard.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config.h.cmake (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config.h.in (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config_android.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config_iphoneos.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config_macosx.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config_macosx.h.orig (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config_minimal.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config_pandora.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config_psp.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config_windows.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config_winrt.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_config_wiz.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_copying.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_cpuinfo.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_egl.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_endian.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_error.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_events.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_filesystem.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_gamecontroller.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_gesture.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_haptic.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_hints.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_joystick.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_keyboard.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_keycode.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_loadso.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_log.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_main.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_messagebox.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_mouse.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_mutex.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_name.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_opengl.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_opengl_glext.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_opengles.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_opengles2.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_opengles2_gl2.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_opengles2_gl2ext.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_opengles2_gl2platform.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_opengles2_khrplatform.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_pixels.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_platform.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_power.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_quit.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_rect.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_render.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_revision.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_rwops.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_scancode.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_sensor.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_shape.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_stdinc.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_surface.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_system.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_syswm.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_assert.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_common.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_compare.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_crc32.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_font.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_fuzzer.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_harness.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_images.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_log.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_md5.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_memory.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_test_random.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_thread.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_timer.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_touch.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_types.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_version.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_video.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/SDL_vulkan.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/begin_code.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/include/close_code.h (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/lib/x64/SDL2.dll (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/lib/x64/SDL2.lib (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/lib/x64/SDL2main.lib (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/lib/x64/SDL2test.lib (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/lib/x86/SDL2.dll (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/lib/x86/SDL2.lib (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/lib/x86/SDL2main.lib (100%) rename {msvc2003/SDL2-2.0.9 => msvc/SDL2}/lib/x86/SDL2test.lib (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/FTL.TXT (100%) create mode 100644 msvc/freetype/GPLv2.TXT create mode 100644 msvc/freetype/LICENSE.TXT create mode 100644 msvc/freetype/README.md create mode 100644 msvc/freetype/include/freetype/config/ftconfig.h rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/config/ftheader.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/config/ftmodule.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/config/ftoption.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/config/ftstdlib.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/freetype.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftadvanc.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftbbox.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftbdf.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftbitmap.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftbzip2.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftcache.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftchapters.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftcid.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftcolor.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftdriver.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/fterrdef.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/fterrors.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftfntfmt.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftgasp.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftglyph.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftgxval.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftgzip.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftimage.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftincrem.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftlcdfil.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftlist.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftlzw.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftmac.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftmm.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftmodapi.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftmoderr.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftotval.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftoutln.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftparams.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftpfr.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftrender.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftsizes.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftsnames.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftstroke.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftsynth.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftsystem.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/fttrigon.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/fttypes.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ftwinfnt.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/t1tables.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/ttnameid.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/tttables.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/freetype/tttags.h (100%) rename {msvc2003/freetype-2.10.0 => msvc/freetype}/include/ft2build.h (100%) create mode 100644 msvc/freetype/win32/freetype.dll create mode 100644 msvc/freetype/win32/freetype.lib create mode 100644 msvc/freetype/win64/freetype.dll create mode 100644 msvc/freetype/win64/freetype.lib rename {msvc2003 => msvc/msvc2003}/CSE2.sln (100%) rename {msvc2003 => msvc/msvc2003}/CSE2.vcproj (59%) create mode 100644 msvc/msvc2003/freetype/FTL.TXT rename {msvc2003/freetype-2.10.0 => msvc/msvc2003/freetype}/include/freetype/config/ftconfig.h (100%) create mode 100644 msvc/msvc2003/freetype/include/freetype/config/ftheader.h create mode 100644 msvc/msvc2003/freetype/include/freetype/config/ftmodule.h create mode 100644 msvc/msvc2003/freetype/include/freetype/config/ftoption.h create mode 100644 msvc/msvc2003/freetype/include/freetype/config/ftstdlib.h create mode 100644 msvc/msvc2003/freetype/include/freetype/freetype.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftadvanc.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftbbox.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftbdf.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftbitmap.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftbzip2.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftcache.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftchapters.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftcid.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftcolor.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftdriver.h create mode 100644 msvc/msvc2003/freetype/include/freetype/fterrdef.h create mode 100644 msvc/msvc2003/freetype/include/freetype/fterrors.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftfntfmt.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftgasp.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftglyph.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftgxval.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftgzip.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftimage.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftincrem.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftlcdfil.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftlist.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftlzw.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftmac.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftmm.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftmodapi.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftmoderr.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftotval.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftoutln.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftparams.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftpfr.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftrender.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftsizes.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftsnames.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftstroke.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftsynth.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftsystem.h create mode 100644 msvc/msvc2003/freetype/include/freetype/fttrigon.h create mode 100644 msvc/msvc2003/freetype/include/freetype/fttypes.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ftwinfnt.h create mode 100644 msvc/msvc2003/freetype/include/freetype/t1tables.h create mode 100644 msvc/msvc2003/freetype/include/freetype/ttnameid.h create mode 100644 msvc/msvc2003/freetype/include/freetype/tttables.h create mode 100644 msvc/msvc2003/freetype/include/freetype/tttags.h create mode 100644 msvc/msvc2003/freetype/include/ft2build.h rename {msvc2003/freetype-2.10.0 => msvc/msvc2003/freetype}/lib/freetype.dll (100%) rename {msvc2003/freetype-2.10.0 => msvc/msvc2003/freetype}/lib/freetype.lib (100%) rename {msvc2003/freetype-2.10.0 => msvc/msvc2003/freetype}/readme.txt (100%) rename {msvc2003 => msvc/msvc2003}/stdint.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..a02e10b9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,275 @@ +cmake_minimum_required(VERSION 3.13.4) + +# Default to Release build +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +# Force strict C++98 +set(CMAKE_CXX_STANDARD 98) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +project(CSE2 LANGUAGES C CXX) + +set(SOURCES + src/ArmsItem.cpp + src/ArmsItem.h + src/Back.cpp + src/Back.h + src/Boss.cpp + src/Boss.h + src/BossAlmo1.cpp + src/BossAlmo1.h + src/BossAlmo2.cpp + src/BossAlmo2.h + src/BossBallos.cpp + src/BossBallos.h + src/BossFrog.cpp + src/BossFrog.h + src/BossIronH.cpp + src/BossIronH.h + src/BossLife.cpp + src/BossLife.h + src/BossOhm.cpp + src/BossOhm.h + src/BossPress.cpp + src/BossPress.h + src/BossTwinD.cpp + src/BossTwinD.h + src/BossX.cpp + src/BossX.h + src/BulHit.cpp + src/BulHit.h + src/Bullet.cpp + src/Bullet.h + src/Caret.cpp + src/Caret.h + src/CommonDefines.h + src/Config.cpp + src/Config.h + src/Draw.cpp + src/Draw.h + src/Ending.cpp + src/Ending.h + src/Escape.cpp + src/Escape.h + src/Fade.cpp + src/Fade.h + src/File.cpp + src/File.h + src/Flags.cpp + src/Flags.h + src/Flash.cpp + src/Flash.h + src/Font.cpp + src/Font.h + src/Frame.cpp + src/Frame.h + src/Game.cpp + src/Game.h + src/Generic.cpp + src/Generic.h + src/GenericLoad.cpp + src/GenericLoad.h + src/Input.cpp + src/Input.h + src/KeyControl.cpp + src/KeyControl.h + src/Main.cpp + src/Main.h + src/Map.cpp + src/Map.h + src/MapName.cpp + src/MapName.h + src/MiniMap.cpp + src/MiniMap.h + src/MyChar.cpp + src/MyChar.h + src/MycHit.cpp + src/MycHit.h + src/MycParam.cpp + src/MycParam.h + src/NpcAct.h + src/NpcAct000.cpp + src/NpcAct020.cpp + src/NpcAct040.cpp + src/NpcAct060.cpp + src/NpcAct080.cpp + src/NpcAct100.cpp + src/NpcAct120.cpp + src/NpcAct140.cpp + src/NpcAct160.cpp + src/NpcAct180.cpp + src/NpcAct200.cpp + src/NpcAct220.cpp + src/NpcAct240.cpp + src/NpcAct260.cpp + src/NpcAct280.cpp + src/NpcAct300.cpp + src/NpcAct320.cpp + src/NpcAct340.cpp + src/NpChar.cpp + src/NpChar.h + src/NpcHit.cpp + src/NpcHit.h + src/NpcTbl.cpp + src/NpcTbl.h + src/Organya.cpp + src/Organya.h + src/PixTone.cpp + src/PixTone.h + src/Profile.cpp + src/Profile.h + src/Resource.cpp + src/Resource.h + src/SelStage.cpp + src/SelStage.h + src/Shoot.cpp + src/Shoot.h + src/Sound.cpp + src/Sound.h + src/Stage.cpp + src/Stage.h + src/Star.cpp + src/Star.h + src/TextScr.cpp + src/TextScr.h + src/Triangle.cpp + src/Triangle.h + src/ValueView.cpp + src/ValueView.h + src/WindowsWrapper.h +) + +set(RESOURCES + BITMAP/CREDIT01.bmp + BITMAP/CREDIT02.bmp + BITMAP/CREDIT03.bmp + BITMAP/CREDIT04.bmp + BITMAP/CREDIT05.bmp + BITMAP/CREDIT06.bmp + BITMAP/CREDIT07.bmp + BITMAP/CREDIT08.bmp + BITMAP/CREDIT09.bmp + BITMAP/CREDIT10.bmp + BITMAP/CREDIT11.bmp + BITMAP/CREDIT12.bmp + BITMAP/CREDIT14.bmp + BITMAP/CREDIT15.bmp + BITMAP/CREDIT16.bmp + BITMAP/CREDIT17.bmp + BITMAP/CREDIT18.bmp + BITMAP/PIXEL.bmp + CURSOR/CURSOR_IKA.bmp + CURSOR/CURSOR_NORMAL.bmp + ICON/ICON_MINI.bmp + ORG/ACCESS.org + ORG/ANZEN.org + ORG/BALCONY.org + ORG/BALLOS.org + ORG/BDOWN.org + ORG/CEMETERY.org + ORG/CURLY.org + ORG/DR.org + ORG/ENDING.org + ORG/ESCAPE.org + ORG/FANFALE1.org + ORG/FANFALE2.org + ORG/FANFALE3.org + ORG/FIREEYE.org + ORG/GAMEOVER.org + ORG/GINSUKE.org + ORG/GRAND.org + ORG/GRAVITY.org + ORG/HELL.org + ORG/IRONH.org + ORG/JENKA.org + ORG/JENKA2.org + ORG/KODOU.org + ORG/LASTBT3.org + ORG/LASTBTL.org + ORG/LASTCAVE.org + ORG/MARINE.org + ORG/MAZE.org + ORG/MDOWN2.org + ORG/MURA.org + ORG/OSIDE.org + ORG/PLANT.org + ORG/QUIET.org + ORG/REQUIEM.org + ORG/TOROKO.org + ORG/VIVI.org + ORG/WANPAK2.org + ORG/WANPAKU.org + ORG/WEED.org + ORG/WHITE.org + ORG/XXXX.org + ORG/ZONBIE.org + WAVE/WAVE100 +) + +add_executable(bin2h res/bin2h.c) + +set(RESOURCE_HEADERS "") +foreach(FILENAME IN LISTS RESOURCES) + set(IN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/res") + set(OUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/Resource") + get_filename_component(DIRECTORY "${FILENAME}" DIRECTORY) + add_custom_command( + OUTPUT "${OUT_DIR}/${FILENAME}.h" + COMMAND ${CMAKE_COMMAND} -E make_directory "${OUT_DIR}/${DIRECTORY}" + COMMAND bin2h "${IN_DIR}/${FILENAME}" "${OUT_DIR}/${FILENAME}.h" + DEPENDS bin2h "${IN_DIR}/${FILENAME}" + ) + list(APPEND RESOURCE_HEADERS "${OUT_DIR}/${FILENAME}.h") +endforeach() + +if (MSVC) + # In MSVC we just use our own provided copy of SDL2 and FreeType + set(SDL2_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/include") + set(FREETYPE_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/msvc/freetype/include") + + if (CMAKE_CL_64) + set(SDL2_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x64/SDL2.lib;${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x64/SDL2main.lib") + set(FREETYPE_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/msvc/freetype/win64/freetype.lib") + else() + set(SDL2_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x86/SDL2.lib;${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x86/SDL2main.lib") + # if (MSVC_VERSION LESS_EQUAL 1310) + # message(STATUS "Using MSVC2003 FreeType library") + # set(FREETYPE_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/msvc/msvc2003/freetype/lib/freetype.lib") + # else() + set(FREETYPE_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/msvc/freetype/win32/freetype.lib") + # endif() + endif() + + # Static-link the CRT, so you don't need to lug around 10 different DLLs + foreach(flag_var + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + if(${flag_var} MATCHES "/MD") + string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + endif() + endforeach() + + # Work around MSVC2003's lack of stdint.h + include(CheckIncludeFiles) + check_include_files(stdint.h STDINT_EXISTS) + + if (NOT STDINT_EXISTS) + include_directories("${CMAKE_CURRENT_SOURCE_DIR}/msvc/msvc2003") + endif() +else() + find_package(SDL2 REQUIRED) + find_package(freetype REQUIRED) +endif() + +include_directories(${SDL2_INCLUDE_DIRS} ${FREETYPE_INCLUDE_DIRS}) + +if (MSVC) + add_executable(CSE2 WIN32 ${SOURCES} ${RESOURCE_HEADERS}) # Disable the console window +else() + add_executable(CSE2 ${SOURCES} ${RESOURCE_HEADERS}) +endif() + +target_link_libraries(CSE2 ${SDL2_LIBRARIES} ${FREETYPE_LIBRARIES}) diff --git a/msvc2003/SDL2-2.0.9/BUGS.txt b/msvc/SDL2/BUGS.txt similarity index 100% rename from msvc2003/SDL2-2.0.9/BUGS.txt rename to msvc/SDL2/BUGS.txt diff --git a/msvc2003/SDL2-2.0.9/COPYING.txt b/msvc/SDL2/COPYING.txt similarity index 100% rename from msvc2003/SDL2-2.0.9/COPYING.txt rename to msvc/SDL2/COPYING.txt diff --git a/msvc2003/SDL2-2.0.9/README-SDL.txt b/msvc/SDL2/README-SDL.txt similarity index 100% rename from msvc2003/SDL2-2.0.9/README-SDL.txt rename to msvc/SDL2/README-SDL.txt diff --git a/msvc2003/SDL2-2.0.9/README.txt b/msvc/SDL2/README.txt similarity index 100% rename from msvc2003/SDL2-2.0.9/README.txt rename to msvc/SDL2/README.txt diff --git a/msvc2003/SDL2-2.0.9/WhatsNew.txt b/msvc/SDL2/WhatsNew.txt similarity index 100% rename from msvc2003/SDL2-2.0.9/WhatsNew.txt rename to msvc/SDL2/WhatsNew.txt diff --git a/msvc2003/SDL2-2.0.9/docs/README-android.md b/msvc/SDL2/docs/README-android.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-android.md rename to msvc/SDL2/docs/README-android.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-cmake.md b/msvc/SDL2/docs/README-cmake.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-cmake.md rename to msvc/SDL2/docs/README-cmake.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-directfb.md b/msvc/SDL2/docs/README-directfb.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-directfb.md rename to msvc/SDL2/docs/README-directfb.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-dynapi.md b/msvc/SDL2/docs/README-dynapi.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-dynapi.md rename to msvc/SDL2/docs/README-dynapi.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-emscripten.md b/msvc/SDL2/docs/README-emscripten.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-emscripten.md rename to msvc/SDL2/docs/README-emscripten.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-gesture.md b/msvc/SDL2/docs/README-gesture.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-gesture.md rename to msvc/SDL2/docs/README-gesture.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-hg.md b/msvc/SDL2/docs/README-hg.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-hg.md rename to msvc/SDL2/docs/README-hg.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-ios.md b/msvc/SDL2/docs/README-ios.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-ios.md rename to msvc/SDL2/docs/README-ios.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-linux.md b/msvc/SDL2/docs/README-linux.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-linux.md rename to msvc/SDL2/docs/README-linux.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-macosx.md b/msvc/SDL2/docs/README-macosx.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-macosx.md rename to msvc/SDL2/docs/README-macosx.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-nacl.md b/msvc/SDL2/docs/README-nacl.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-nacl.md rename to msvc/SDL2/docs/README-nacl.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-pandora.md b/msvc/SDL2/docs/README-pandora.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-pandora.md rename to msvc/SDL2/docs/README-pandora.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-platforms.md b/msvc/SDL2/docs/README-platforms.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-platforms.md rename to msvc/SDL2/docs/README-platforms.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-porting.md b/msvc/SDL2/docs/README-porting.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-porting.md rename to msvc/SDL2/docs/README-porting.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-psp.md b/msvc/SDL2/docs/README-psp.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-psp.md rename to msvc/SDL2/docs/README-psp.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-raspberrypi.md b/msvc/SDL2/docs/README-raspberrypi.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-raspberrypi.md rename to msvc/SDL2/docs/README-raspberrypi.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-touch.md b/msvc/SDL2/docs/README-touch.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-touch.md rename to msvc/SDL2/docs/README-touch.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-wince.md b/msvc/SDL2/docs/README-wince.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-wince.md rename to msvc/SDL2/docs/README-wince.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-windows.md b/msvc/SDL2/docs/README-windows.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-windows.md rename to msvc/SDL2/docs/README-windows.md diff --git a/msvc2003/SDL2-2.0.9/docs/README-winrt.md b/msvc/SDL2/docs/README-winrt.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README-winrt.md rename to msvc/SDL2/docs/README-winrt.md diff --git a/msvc2003/SDL2-2.0.9/docs/README.md b/msvc/SDL2/docs/README.md similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/README.md rename to msvc/SDL2/docs/README.md diff --git a/msvc2003/SDL2-2.0.9/docs/doxyfile b/msvc/SDL2/docs/doxyfile similarity index 100% rename from msvc2003/SDL2-2.0.9/docs/doxyfile rename to msvc/SDL2/docs/doxyfile diff --git a/msvc2003/SDL2-2.0.9/include/SDL.h b/msvc/SDL2/include/SDL.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL.h rename to msvc/SDL2/include/SDL.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_assert.h b/msvc/SDL2/include/SDL_assert.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_assert.h rename to msvc/SDL2/include/SDL_assert.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_atomic.h b/msvc/SDL2/include/SDL_atomic.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_atomic.h rename to msvc/SDL2/include/SDL_atomic.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_audio.h b/msvc/SDL2/include/SDL_audio.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_audio.h rename to msvc/SDL2/include/SDL_audio.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_bits.h b/msvc/SDL2/include/SDL_bits.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_bits.h rename to msvc/SDL2/include/SDL_bits.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_blendmode.h b/msvc/SDL2/include/SDL_blendmode.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_blendmode.h rename to msvc/SDL2/include/SDL_blendmode.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_clipboard.h b/msvc/SDL2/include/SDL_clipboard.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_clipboard.h rename to msvc/SDL2/include/SDL_clipboard.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config.h b/msvc/SDL2/include/SDL_config.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config.h rename to msvc/SDL2/include/SDL_config.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config.h.cmake b/msvc/SDL2/include/SDL_config.h.cmake similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config.h.cmake rename to msvc/SDL2/include/SDL_config.h.cmake diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config.h.in b/msvc/SDL2/include/SDL_config.h.in similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config.h.in rename to msvc/SDL2/include/SDL_config.h.in diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config_android.h b/msvc/SDL2/include/SDL_config_android.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config_android.h rename to msvc/SDL2/include/SDL_config_android.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config_iphoneos.h b/msvc/SDL2/include/SDL_config_iphoneos.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config_iphoneos.h rename to msvc/SDL2/include/SDL_config_iphoneos.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config_macosx.h b/msvc/SDL2/include/SDL_config_macosx.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config_macosx.h rename to msvc/SDL2/include/SDL_config_macosx.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config_macosx.h.orig b/msvc/SDL2/include/SDL_config_macosx.h.orig similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config_macosx.h.orig rename to msvc/SDL2/include/SDL_config_macosx.h.orig diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config_minimal.h b/msvc/SDL2/include/SDL_config_minimal.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config_minimal.h rename to msvc/SDL2/include/SDL_config_minimal.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config_pandora.h b/msvc/SDL2/include/SDL_config_pandora.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config_pandora.h rename to msvc/SDL2/include/SDL_config_pandora.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config_psp.h b/msvc/SDL2/include/SDL_config_psp.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config_psp.h rename to msvc/SDL2/include/SDL_config_psp.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config_windows.h b/msvc/SDL2/include/SDL_config_windows.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config_windows.h rename to msvc/SDL2/include/SDL_config_windows.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config_winrt.h b/msvc/SDL2/include/SDL_config_winrt.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config_winrt.h rename to msvc/SDL2/include/SDL_config_winrt.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_config_wiz.h b/msvc/SDL2/include/SDL_config_wiz.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_config_wiz.h rename to msvc/SDL2/include/SDL_config_wiz.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_copying.h b/msvc/SDL2/include/SDL_copying.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_copying.h rename to msvc/SDL2/include/SDL_copying.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_cpuinfo.h b/msvc/SDL2/include/SDL_cpuinfo.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_cpuinfo.h rename to msvc/SDL2/include/SDL_cpuinfo.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_egl.h b/msvc/SDL2/include/SDL_egl.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_egl.h rename to msvc/SDL2/include/SDL_egl.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_endian.h b/msvc/SDL2/include/SDL_endian.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_endian.h rename to msvc/SDL2/include/SDL_endian.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_error.h b/msvc/SDL2/include/SDL_error.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_error.h rename to msvc/SDL2/include/SDL_error.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_events.h b/msvc/SDL2/include/SDL_events.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_events.h rename to msvc/SDL2/include/SDL_events.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_filesystem.h b/msvc/SDL2/include/SDL_filesystem.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_filesystem.h rename to msvc/SDL2/include/SDL_filesystem.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_gamecontroller.h b/msvc/SDL2/include/SDL_gamecontroller.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_gamecontroller.h rename to msvc/SDL2/include/SDL_gamecontroller.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_gesture.h b/msvc/SDL2/include/SDL_gesture.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_gesture.h rename to msvc/SDL2/include/SDL_gesture.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_haptic.h b/msvc/SDL2/include/SDL_haptic.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_haptic.h rename to msvc/SDL2/include/SDL_haptic.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_hints.h b/msvc/SDL2/include/SDL_hints.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_hints.h rename to msvc/SDL2/include/SDL_hints.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_joystick.h b/msvc/SDL2/include/SDL_joystick.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_joystick.h rename to msvc/SDL2/include/SDL_joystick.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_keyboard.h b/msvc/SDL2/include/SDL_keyboard.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_keyboard.h rename to msvc/SDL2/include/SDL_keyboard.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_keycode.h b/msvc/SDL2/include/SDL_keycode.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_keycode.h rename to msvc/SDL2/include/SDL_keycode.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_loadso.h b/msvc/SDL2/include/SDL_loadso.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_loadso.h rename to msvc/SDL2/include/SDL_loadso.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_log.h b/msvc/SDL2/include/SDL_log.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_log.h rename to msvc/SDL2/include/SDL_log.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_main.h b/msvc/SDL2/include/SDL_main.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_main.h rename to msvc/SDL2/include/SDL_main.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_messagebox.h b/msvc/SDL2/include/SDL_messagebox.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_messagebox.h rename to msvc/SDL2/include/SDL_messagebox.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_mouse.h b/msvc/SDL2/include/SDL_mouse.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_mouse.h rename to msvc/SDL2/include/SDL_mouse.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_mutex.h b/msvc/SDL2/include/SDL_mutex.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_mutex.h rename to msvc/SDL2/include/SDL_mutex.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_name.h b/msvc/SDL2/include/SDL_name.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_name.h rename to msvc/SDL2/include/SDL_name.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_opengl.h b/msvc/SDL2/include/SDL_opengl.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_opengl.h rename to msvc/SDL2/include/SDL_opengl.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_opengl_glext.h b/msvc/SDL2/include/SDL_opengl_glext.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_opengl_glext.h rename to msvc/SDL2/include/SDL_opengl_glext.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_opengles.h b/msvc/SDL2/include/SDL_opengles.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_opengles.h rename to msvc/SDL2/include/SDL_opengles.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_opengles2.h b/msvc/SDL2/include/SDL_opengles2.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_opengles2.h rename to msvc/SDL2/include/SDL_opengles2.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_opengles2_gl2.h b/msvc/SDL2/include/SDL_opengles2_gl2.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_opengles2_gl2.h rename to msvc/SDL2/include/SDL_opengles2_gl2.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_opengles2_gl2ext.h b/msvc/SDL2/include/SDL_opengles2_gl2ext.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_opengles2_gl2ext.h rename to msvc/SDL2/include/SDL_opengles2_gl2ext.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_opengles2_gl2platform.h b/msvc/SDL2/include/SDL_opengles2_gl2platform.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_opengles2_gl2platform.h rename to msvc/SDL2/include/SDL_opengles2_gl2platform.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_opengles2_khrplatform.h b/msvc/SDL2/include/SDL_opengles2_khrplatform.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_opengles2_khrplatform.h rename to msvc/SDL2/include/SDL_opengles2_khrplatform.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_pixels.h b/msvc/SDL2/include/SDL_pixels.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_pixels.h rename to msvc/SDL2/include/SDL_pixels.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_platform.h b/msvc/SDL2/include/SDL_platform.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_platform.h rename to msvc/SDL2/include/SDL_platform.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_power.h b/msvc/SDL2/include/SDL_power.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_power.h rename to msvc/SDL2/include/SDL_power.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_quit.h b/msvc/SDL2/include/SDL_quit.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_quit.h rename to msvc/SDL2/include/SDL_quit.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_rect.h b/msvc/SDL2/include/SDL_rect.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_rect.h rename to msvc/SDL2/include/SDL_rect.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_render.h b/msvc/SDL2/include/SDL_render.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_render.h rename to msvc/SDL2/include/SDL_render.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_revision.h b/msvc/SDL2/include/SDL_revision.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_revision.h rename to msvc/SDL2/include/SDL_revision.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_rwops.h b/msvc/SDL2/include/SDL_rwops.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_rwops.h rename to msvc/SDL2/include/SDL_rwops.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_scancode.h b/msvc/SDL2/include/SDL_scancode.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_scancode.h rename to msvc/SDL2/include/SDL_scancode.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_sensor.h b/msvc/SDL2/include/SDL_sensor.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_sensor.h rename to msvc/SDL2/include/SDL_sensor.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_shape.h b/msvc/SDL2/include/SDL_shape.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_shape.h rename to msvc/SDL2/include/SDL_shape.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_stdinc.h b/msvc/SDL2/include/SDL_stdinc.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_stdinc.h rename to msvc/SDL2/include/SDL_stdinc.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_surface.h b/msvc/SDL2/include/SDL_surface.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_surface.h rename to msvc/SDL2/include/SDL_surface.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_system.h b/msvc/SDL2/include/SDL_system.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_system.h rename to msvc/SDL2/include/SDL_system.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_syswm.h b/msvc/SDL2/include/SDL_syswm.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_syswm.h rename to msvc/SDL2/include/SDL_syswm.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test.h b/msvc/SDL2/include/SDL_test.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test.h rename to msvc/SDL2/include/SDL_test.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_assert.h b/msvc/SDL2/include/SDL_test_assert.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_assert.h rename to msvc/SDL2/include/SDL_test_assert.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_common.h b/msvc/SDL2/include/SDL_test_common.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_common.h rename to msvc/SDL2/include/SDL_test_common.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_compare.h b/msvc/SDL2/include/SDL_test_compare.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_compare.h rename to msvc/SDL2/include/SDL_test_compare.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_crc32.h b/msvc/SDL2/include/SDL_test_crc32.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_crc32.h rename to msvc/SDL2/include/SDL_test_crc32.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_font.h b/msvc/SDL2/include/SDL_test_font.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_font.h rename to msvc/SDL2/include/SDL_test_font.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_fuzzer.h b/msvc/SDL2/include/SDL_test_fuzzer.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_fuzzer.h rename to msvc/SDL2/include/SDL_test_fuzzer.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_harness.h b/msvc/SDL2/include/SDL_test_harness.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_harness.h rename to msvc/SDL2/include/SDL_test_harness.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_images.h b/msvc/SDL2/include/SDL_test_images.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_images.h rename to msvc/SDL2/include/SDL_test_images.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_log.h b/msvc/SDL2/include/SDL_test_log.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_log.h rename to msvc/SDL2/include/SDL_test_log.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_md5.h b/msvc/SDL2/include/SDL_test_md5.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_md5.h rename to msvc/SDL2/include/SDL_test_md5.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_memory.h b/msvc/SDL2/include/SDL_test_memory.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_memory.h rename to msvc/SDL2/include/SDL_test_memory.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_test_random.h b/msvc/SDL2/include/SDL_test_random.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_test_random.h rename to msvc/SDL2/include/SDL_test_random.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_thread.h b/msvc/SDL2/include/SDL_thread.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_thread.h rename to msvc/SDL2/include/SDL_thread.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_timer.h b/msvc/SDL2/include/SDL_timer.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_timer.h rename to msvc/SDL2/include/SDL_timer.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_touch.h b/msvc/SDL2/include/SDL_touch.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_touch.h rename to msvc/SDL2/include/SDL_touch.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_types.h b/msvc/SDL2/include/SDL_types.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_types.h rename to msvc/SDL2/include/SDL_types.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_version.h b/msvc/SDL2/include/SDL_version.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_version.h rename to msvc/SDL2/include/SDL_version.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_video.h b/msvc/SDL2/include/SDL_video.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_video.h rename to msvc/SDL2/include/SDL_video.h diff --git a/msvc2003/SDL2-2.0.9/include/SDL_vulkan.h b/msvc/SDL2/include/SDL_vulkan.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/SDL_vulkan.h rename to msvc/SDL2/include/SDL_vulkan.h diff --git a/msvc2003/SDL2-2.0.9/include/begin_code.h b/msvc/SDL2/include/begin_code.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/begin_code.h rename to msvc/SDL2/include/begin_code.h diff --git a/msvc2003/SDL2-2.0.9/include/close_code.h b/msvc/SDL2/include/close_code.h similarity index 100% rename from msvc2003/SDL2-2.0.9/include/close_code.h rename to msvc/SDL2/include/close_code.h diff --git a/msvc2003/SDL2-2.0.9/lib/x64/SDL2.dll b/msvc/SDL2/lib/x64/SDL2.dll similarity index 100% rename from msvc2003/SDL2-2.0.9/lib/x64/SDL2.dll rename to msvc/SDL2/lib/x64/SDL2.dll diff --git a/msvc2003/SDL2-2.0.9/lib/x64/SDL2.lib b/msvc/SDL2/lib/x64/SDL2.lib similarity index 100% rename from msvc2003/SDL2-2.0.9/lib/x64/SDL2.lib rename to msvc/SDL2/lib/x64/SDL2.lib diff --git a/msvc2003/SDL2-2.0.9/lib/x64/SDL2main.lib b/msvc/SDL2/lib/x64/SDL2main.lib similarity index 100% rename from msvc2003/SDL2-2.0.9/lib/x64/SDL2main.lib rename to msvc/SDL2/lib/x64/SDL2main.lib diff --git a/msvc2003/SDL2-2.0.9/lib/x64/SDL2test.lib b/msvc/SDL2/lib/x64/SDL2test.lib similarity index 100% rename from msvc2003/SDL2-2.0.9/lib/x64/SDL2test.lib rename to msvc/SDL2/lib/x64/SDL2test.lib diff --git a/msvc2003/SDL2-2.0.9/lib/x86/SDL2.dll b/msvc/SDL2/lib/x86/SDL2.dll similarity index 100% rename from msvc2003/SDL2-2.0.9/lib/x86/SDL2.dll rename to msvc/SDL2/lib/x86/SDL2.dll diff --git a/msvc2003/SDL2-2.0.9/lib/x86/SDL2.lib b/msvc/SDL2/lib/x86/SDL2.lib similarity index 100% rename from msvc2003/SDL2-2.0.9/lib/x86/SDL2.lib rename to msvc/SDL2/lib/x86/SDL2.lib diff --git a/msvc2003/SDL2-2.0.9/lib/x86/SDL2main.lib b/msvc/SDL2/lib/x86/SDL2main.lib similarity index 100% rename from msvc2003/SDL2-2.0.9/lib/x86/SDL2main.lib rename to msvc/SDL2/lib/x86/SDL2main.lib diff --git a/msvc2003/SDL2-2.0.9/lib/x86/SDL2test.lib b/msvc/SDL2/lib/x86/SDL2test.lib similarity index 100% rename from msvc2003/SDL2-2.0.9/lib/x86/SDL2test.lib rename to msvc/SDL2/lib/x86/SDL2test.lib diff --git a/msvc2003/freetype-2.10.0/FTL.TXT b/msvc/freetype/FTL.TXT similarity index 100% rename from msvc2003/freetype-2.10.0/FTL.TXT rename to msvc/freetype/FTL.TXT diff --git a/msvc/freetype/GPLv2.TXT b/msvc/freetype/GPLv2.TXT new file mode 100644 index 00000000..b2fe7b6a --- /dev/null +++ b/msvc/freetype/GPLv2.TXT @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/msvc/freetype/LICENSE.TXT b/msvc/freetype/LICENSE.TXT new file mode 100644 index 00000000..af5a1c50 --- /dev/null +++ b/msvc/freetype/LICENSE.TXT @@ -0,0 +1,39 @@ + +The FreeType 2 font engine is copyrighted work and cannot be used +legally without a software license. In order to make this project +usable to a vast majority of developers, we distribute it under two +mutually exclusive open-source licenses. + +This means that *you* must choose *one* of the two licenses described +below, then obey all its terms and conditions when using FreeType 2 in +any of your projects or products. + + - The FreeType License, found in the file `FTL.TXT', which is similar + to the original BSD license *with* an advertising clause that forces + you to explicitly cite the FreeType project in your product's + documentation. All details are in the license file. This license + is suited to products which don't use the GNU General Public + License. + + Note that this license is compatible to the GNU General Public + License version 3, but not version 2. + + - The GNU General Public License version 2, found in `GPLv2.TXT' (any + later version can be used also), for programs which already use the + GPL. Note that the FTL is incompatible with GPLv2 due to its + advertisement clause. + +The contributed BDF and PCF drivers come with a license similar to that +of the X Window System. It is compatible to the above two licenses (see +file src/bdf/README and src/pcf/README). The same holds for the files +`fthash.c' and `fthash.h'; their code was part of the BDF driver in +earlier FreeType versions. + +The gzip module uses the zlib license (see src/gzip/zlib.h) which too is +compatible to the above two licenses. + +The MD5 checksum support (only used for debugging in development builds) +is in the public domain. + + +--- end of LICENSE.TXT --- diff --git a/msvc/freetype/README.md b/msvc/freetype/README.md new file mode 100644 index 00000000..59b882f7 --- /dev/null +++ b/msvc/freetype/README.md @@ -0,0 +1,15 @@ +FreeType 2.10.0 +========================= +###### Windows binaries (DLL) of FreeType (win32/win64) + +Compiled with VS Express 2015 +Compatible with Windows XP, Vista, 7, 8, 10 + +> *freetype.dll* uses the *Universal CRT* and therefore **_requires_** Visual C++ 2017 Redistributable to be present on system (*VC++ 2017 Redistributable supersedes VC++ 2015 Redistributable*). + +| filename | sha256 | +| :-- | :-- | +| win32\\**freetype.dll** | `D039F727E82A4570883DBA2069F9DD95518BA580F16F891FCC5FD6C07624BF35` | +| win32\\**freetype.lib** | `28B2D11BC7A4648696C96675771A32AEFE33FC7D13E83A416AB0CCD30CA7B79F` | +| win64\\**freetype.dll** | `58AAE1F69EA5C2ADCA3CF0314D01E14353F674755B9D1098C1EBBF478207B672` | +| win64\\**freetype.lib** | `158C6FEF7BD18028034AE2E5405CA118EA0476B7298935560D7D7A7730D6390E` | diff --git a/msvc/freetype/include/freetype/config/ftconfig.h b/msvc/freetype/include/freetype/config/ftconfig.h new file mode 100644 index 00000000..fc35c930 --- /dev/null +++ b/msvc/freetype/include/freetype/config/ftconfig.h @@ -0,0 +1,575 @@ +/**************************************************************************** + * + * ftconfig.h + * + * ANSI-specific configuration file (specification only). + * + * Copyright (C) 1996-2019 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/`, 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 +#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/` 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` indicates 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 +#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_EXPORT ) +#define FT_EXPORT( x ) __declspec( dllexport ) x +#elif defined( __GNUC__ ) && __GNUC__ >= 4 +#define FT_EXPORT( x ) __attribute__(( visibility( "default" ) )) x +#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550 +#define FT_EXPORT( x ) __global x +#elif defined( __cplusplus ) +#define FT_EXPORT( x ) extern "C" x +#else +#define FT_EXPORT( x ) extern x +#endif + +#else + +#if defined( WIN32 ) && defined( DLL_IMPORT ) +#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 */ diff --git a/msvc2003/freetype-2.10.0/include/freetype/config/ftheader.h b/msvc/freetype/include/freetype/config/ftheader.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/config/ftheader.h rename to msvc/freetype/include/freetype/config/ftheader.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/config/ftmodule.h b/msvc/freetype/include/freetype/config/ftmodule.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/config/ftmodule.h rename to msvc/freetype/include/freetype/config/ftmodule.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/config/ftoption.h b/msvc/freetype/include/freetype/config/ftoption.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/config/ftoption.h rename to msvc/freetype/include/freetype/config/ftoption.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/config/ftstdlib.h b/msvc/freetype/include/freetype/config/ftstdlib.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/config/ftstdlib.h rename to msvc/freetype/include/freetype/config/ftstdlib.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/freetype.h b/msvc/freetype/include/freetype/freetype.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/freetype.h rename to msvc/freetype/include/freetype/freetype.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftadvanc.h b/msvc/freetype/include/freetype/ftadvanc.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftadvanc.h rename to msvc/freetype/include/freetype/ftadvanc.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftbbox.h b/msvc/freetype/include/freetype/ftbbox.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftbbox.h rename to msvc/freetype/include/freetype/ftbbox.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftbdf.h b/msvc/freetype/include/freetype/ftbdf.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftbdf.h rename to msvc/freetype/include/freetype/ftbdf.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftbitmap.h b/msvc/freetype/include/freetype/ftbitmap.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftbitmap.h rename to msvc/freetype/include/freetype/ftbitmap.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftbzip2.h b/msvc/freetype/include/freetype/ftbzip2.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftbzip2.h rename to msvc/freetype/include/freetype/ftbzip2.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftcache.h b/msvc/freetype/include/freetype/ftcache.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftcache.h rename to msvc/freetype/include/freetype/ftcache.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftchapters.h b/msvc/freetype/include/freetype/ftchapters.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftchapters.h rename to msvc/freetype/include/freetype/ftchapters.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftcid.h b/msvc/freetype/include/freetype/ftcid.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftcid.h rename to msvc/freetype/include/freetype/ftcid.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftcolor.h b/msvc/freetype/include/freetype/ftcolor.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftcolor.h rename to msvc/freetype/include/freetype/ftcolor.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftdriver.h b/msvc/freetype/include/freetype/ftdriver.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftdriver.h rename to msvc/freetype/include/freetype/ftdriver.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/fterrdef.h b/msvc/freetype/include/freetype/fterrdef.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/fterrdef.h rename to msvc/freetype/include/freetype/fterrdef.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/fterrors.h b/msvc/freetype/include/freetype/fterrors.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/fterrors.h rename to msvc/freetype/include/freetype/fterrors.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftfntfmt.h b/msvc/freetype/include/freetype/ftfntfmt.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftfntfmt.h rename to msvc/freetype/include/freetype/ftfntfmt.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftgasp.h b/msvc/freetype/include/freetype/ftgasp.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftgasp.h rename to msvc/freetype/include/freetype/ftgasp.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftglyph.h b/msvc/freetype/include/freetype/ftglyph.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftglyph.h rename to msvc/freetype/include/freetype/ftglyph.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftgxval.h b/msvc/freetype/include/freetype/ftgxval.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftgxval.h rename to msvc/freetype/include/freetype/ftgxval.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftgzip.h b/msvc/freetype/include/freetype/ftgzip.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftgzip.h rename to msvc/freetype/include/freetype/ftgzip.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftimage.h b/msvc/freetype/include/freetype/ftimage.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftimage.h rename to msvc/freetype/include/freetype/ftimage.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftincrem.h b/msvc/freetype/include/freetype/ftincrem.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftincrem.h rename to msvc/freetype/include/freetype/ftincrem.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftlcdfil.h b/msvc/freetype/include/freetype/ftlcdfil.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftlcdfil.h rename to msvc/freetype/include/freetype/ftlcdfil.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftlist.h b/msvc/freetype/include/freetype/ftlist.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftlist.h rename to msvc/freetype/include/freetype/ftlist.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftlzw.h b/msvc/freetype/include/freetype/ftlzw.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftlzw.h rename to msvc/freetype/include/freetype/ftlzw.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftmac.h b/msvc/freetype/include/freetype/ftmac.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftmac.h rename to msvc/freetype/include/freetype/ftmac.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftmm.h b/msvc/freetype/include/freetype/ftmm.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftmm.h rename to msvc/freetype/include/freetype/ftmm.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftmodapi.h b/msvc/freetype/include/freetype/ftmodapi.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftmodapi.h rename to msvc/freetype/include/freetype/ftmodapi.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftmoderr.h b/msvc/freetype/include/freetype/ftmoderr.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftmoderr.h rename to msvc/freetype/include/freetype/ftmoderr.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftotval.h b/msvc/freetype/include/freetype/ftotval.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftotval.h rename to msvc/freetype/include/freetype/ftotval.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftoutln.h b/msvc/freetype/include/freetype/ftoutln.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftoutln.h rename to msvc/freetype/include/freetype/ftoutln.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftparams.h b/msvc/freetype/include/freetype/ftparams.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftparams.h rename to msvc/freetype/include/freetype/ftparams.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftpfr.h b/msvc/freetype/include/freetype/ftpfr.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftpfr.h rename to msvc/freetype/include/freetype/ftpfr.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftrender.h b/msvc/freetype/include/freetype/ftrender.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftrender.h rename to msvc/freetype/include/freetype/ftrender.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftsizes.h b/msvc/freetype/include/freetype/ftsizes.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftsizes.h rename to msvc/freetype/include/freetype/ftsizes.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftsnames.h b/msvc/freetype/include/freetype/ftsnames.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftsnames.h rename to msvc/freetype/include/freetype/ftsnames.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftstroke.h b/msvc/freetype/include/freetype/ftstroke.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftstroke.h rename to msvc/freetype/include/freetype/ftstroke.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftsynth.h b/msvc/freetype/include/freetype/ftsynth.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftsynth.h rename to msvc/freetype/include/freetype/ftsynth.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftsystem.h b/msvc/freetype/include/freetype/ftsystem.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftsystem.h rename to msvc/freetype/include/freetype/ftsystem.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/fttrigon.h b/msvc/freetype/include/freetype/fttrigon.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/fttrigon.h rename to msvc/freetype/include/freetype/fttrigon.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/fttypes.h b/msvc/freetype/include/freetype/fttypes.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/fttypes.h rename to msvc/freetype/include/freetype/fttypes.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ftwinfnt.h b/msvc/freetype/include/freetype/ftwinfnt.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ftwinfnt.h rename to msvc/freetype/include/freetype/ftwinfnt.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/t1tables.h b/msvc/freetype/include/freetype/t1tables.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/t1tables.h rename to msvc/freetype/include/freetype/t1tables.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/ttnameid.h b/msvc/freetype/include/freetype/ttnameid.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/ttnameid.h rename to msvc/freetype/include/freetype/ttnameid.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/tttables.h b/msvc/freetype/include/freetype/tttables.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/tttables.h rename to msvc/freetype/include/freetype/tttables.h diff --git a/msvc2003/freetype-2.10.0/include/freetype/tttags.h b/msvc/freetype/include/freetype/tttags.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/tttags.h rename to msvc/freetype/include/freetype/tttags.h diff --git a/msvc2003/freetype-2.10.0/include/ft2build.h b/msvc/freetype/include/ft2build.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/ft2build.h rename to msvc/freetype/include/ft2build.h diff --git a/msvc/freetype/win32/freetype.dll b/msvc/freetype/win32/freetype.dll new file mode 100644 index 0000000000000000000000000000000000000000..664c41cf3040b9416ebcbce28fe403953313b2d2 GIT binary patch literal 661504 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%0D2X8(V*zj*&9bmZ(51wZZ%Q0>9X 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 z zldx(gOpQLVIHzV1huFLnd8T>W90s-T@0fOdbQZ~wy6MR|+ut)5Y}7J{r^@kp2K0rX zlI!LCgi)N~o}ZlPHT%;?Xh!-7Ez8FcEWCnKbe62HN_~nJ%Hw-aQIG^-BThG0`1gH; z65)3=0|&_xJRE9)jUzN4JRHYUF=6cX+v}dx8wWEo$g0!iGJtI!@!a&9GV|+Gk%!(UwbK2K1)wXXp$_mKh@#MXnw-YSseTq%vecby?@1osaA{qCy+t^yH=PBxlEAMr7(^vXrIiF}Z zJvZj4-Sm?`<8C@%8^CgMz0Yn+i5>IE-E_*acGDBUAibLeJAJ_2booi`rjKfUD4E-9 zKj3~U9okQqzVCiI?PT}UCmtWUpK#Kw_Y-{nXjXbZxluj_5&56A*8dtGv%iEMzTKsV z|8hSFbU>T&9cYXf3hh6(JwK0%6X%(eVN2Hfo10OQ$L@FJIp#lHG@ z(?rj@8boVBHLE?l5{en7DyJ=Et`Ihw5;_rGjL>93sMbE?G}-n3N@@!JrL zL`e+Nja3S#LdRh3oD?`^d=9lAy)7R0L{}2I6uSNzsCW2>7h5?G$9H5y;15{W4J=@% zi|=;mLWwDBpR!X{NFXVqFVyv7zXTsFw&HTHPL^FGiIsK^``jwSA@->}KvWJmrSXO; z`S#;UsUmpt^gI29|Lt(Qxe~(PijC5PXApr}wZg~c1V3mmMpr>Naz5!vkbol<{p+sP zQ*nK}gbyzJ0Q0bb%ZdG^Q<;VIH ztg5t^0&ls>2%n70&HR8lPLr4r1!sfK&K!0KLk{HQGlz?;(0iAgE6{NcaF<ueCaai%ZN8ms#&(7}1mthgwp|=1v5VCu3=D!@ zu34IYQ-#ix$@+7KHcrI`R1Kqp3+SHojPK*ZZGA|pJkCHbmpl7UqyQg7&do=9W{%Z_ zf<|nA3dt~pKM)ekK0Ccsa|H;!v>0ET?J-(kk+w(U9I&=(+0S?eR}9#-+act+HbKY( zA|oNr61X}(RD6mTe1MByvrX7xsyqiB0<-OhJZsH+O(B?<6O7g<-zgMcZ2)0{R^NBk z!IF`s6!sXwQICQ5VA9?A?dNzfBWv`X!Cbk_+|n!s%6BHU6ILm0-qFF|WShWA{_*uj z{dL=ydHeP@sh~~f)$H0Jf4BUAzp{b~+%0jP2IhyxRL4eV8h;4~Qdf=&v)}|Yjs8g* zch*`vkA-W4Myou;o34>NC|kB+lr?)r@8?-bRjI~MrTzPDgZC!EDpyO_SLNgA!3cVB z06rUjW?9f&Qp6)V7T4eAsr@_9 zLj*@qponneH4U%pt$$2_QoleGOnVT1cgy0d^D;s*}5p*IT_6%-mY$HNdzjg~%(qf5C)2hB@N z;%*+5j5_K?$Df&FPS*!cWPZ51i~Orj-J)rb)6F0uOOcU}NtS3{oy&@;@~6hAl3aDm z6o4=$b+ZdTcwncoQ&>qSHH6UR5Q&yU;iz#c-O?|IxAZIBl8Q`8!M+sDCq49)0qsD^5BcJ^vuTcs z&{hb)9Q*d49Ocg4Z}BF-Ct6VrKMrpE3mO&>khLPw{*x{F@<84g9lXFmp8jCI}bs8lUFh_%;8=ta&1@ zyZd!-_wPm*yoJ)Jw-0^};wsDcN0x>sFKMoQ&buScxZ#5NjJF5JQr_JoIXK)qQGPHh zMlf+EYfE8$?G(wzF_<`uv`edi+Uc@!@U$-072>dLkmDg7oMgEzy?GDw<9!)9Khzh9 z_rH3!V(NI*)l+<|I=f&PBS(m&^wo2_^ys7*In%i0X+}=r(6HV!mLW#Y>4Kh@@XZI| z;>@PJ%f%^@$M@oK!G10mXA&h&ii`8$!_M~7T%24mWnLs3UJfcN;!m^ZD25ISecgWw zb(UV$|8>8z-^z1F?w<;1IrKG$m^*h2GI!wTR1flVY6qD)4rk~689H3ZhVgXL+?<^% z2_w~u-f1W=2}~;8VDz z*68yR_{par_=~E{wb~-G7)J`Q5afOav23*dNaJQB{ylz0Vb;-Rg-NpEXM@)Y5y!0M znB9!9$Dhf>AdIdUMrPqlC;GkKQB)8k25#liR+8L|Jn z+_RAG)Y<WGim!Y8WW&8dVRoZ-#kzi zQB&~`SR!X|chk+dFO2v5SAGtTT|R+_byv$Wj_T%}52U+UxVA4g^O>7`s>#=zu|U-Z z;zbX6EZ;-X@fse)obh9C5Id-l2L!%u`jft|(*X}1I$~bF?+NrE{#uXTJN7Ki?7de|o-Rl*y^&DE;FLi;+RpgGC!d&kxILEooEcgjTqsY~Rnxk*~!lFGHp zNC-=ee)WrHiT-5Z z`1)@sBMJ+XX+a-rHI70xkM^y+71`kxISu2M=u=2{usYt8X)OwN{|-tN*+zBMLRSq> z6=!qbS8K&jFPqr)3lLOuu5P(SM-sKFu5z^5RLLy$sbVK$YkWs8=Kn@lCPBHwnfO{` z4va2%9i=`a@qKyOQtA(v`i+EOEMrT_(s0RABO&}MUY3PRmKlj={jwvx0|RjC+Omyt z#%}5?^#S;fEb8uvWYkMN3u`&vNGMs_5y|9dSx3an7afr?9gF?6Ix%h*bYG+D5}GP)ue#{JvP(HsV6G#@UG;&Qb=)IEktUzX#B@#*lF=bjgpTr=4@{v3$=7}###y?N%4I%|QT3qIo4R?a`RG&% z*@ge|$CR1K=TUAQx}YqKE%eAr%pkeay7PMO;#KzJ3;6B}@J-?lq@p)6tF`JUGQWD-Wrok!*h`qDM4XP!l$j+kflMpvb3S<07o;v# z^ZdNW;M4h3mkZ{J^&3*tH>oneW}^#m`mTe2K4AZp*=5OmAWd!uG8!KT9gZWX!1#kD z{>tVU;c=NDzT%tQA_^0*X z`A)c*Ps*Y(WF7C|i2=(hF7J~f;?@g$q+%Zqwbk8vQ_P==8Qn_Ec0lGz-OK94X>#gf z*xKN>hXp3ANI-mx71t}yw^{BU9(BzuW+c2LdI=z18MG(=A9{&R5$@mdO44r|^3Ht# zpXvR*aIgKf_E%^e__@ab^5^*>3{yN+m8$$eYWikX-bcr1RJ1HZahpC5h>_Kou9I*i zf6+y!&x-)`nx3M{)FozQn*GT4PXzZ}jL*UQt`QyT6E1nyeM`2KM3 z7q|yT!u_UUaQD0X2N(PSz(2(S|Gm;#^zR+;bHS5$2mGQJIRe=I8rTP1V6*leVEYBw z-yH<@UlQmV-hS2m4d8^wKmK|~pcL|*%>w(*LEU=EvkEU@qYv)z@*lW3JUWq3aHV0mh4XdG4scAUvKxBv9^M0kRT!;Ef@*QpV^6wIH-LUBWZ3v6 z529x4Ni+ABXDl1w%T(hH_V2&@$CU0=Eq;dV-+qU;+_~cIwS2$*0&m(3HM)&2rjyJU zW_%hu-@c#k5K1lgV9NHAJ^p_?Qx+0kSXjU}LdxUvo;xc#=WLPM>N-7TazK=ewrpZM z-D!DP1f2`6zIs8F4pQr22RX7jf^wwAeI(P!vZbH??6PXcmm#Pos4Jn~*hi!lG209Q z0}svUQvxAjac-R>V-Ph=-KRaEgQ5B^jzr2R;9mPF5E};sGkW4L(I8Pl?}(i-R5EU z^&uSVtLDCqb_(;h=2E)J>d$ezeKsW%2X7e<`DS`?TDHyQLLhb8Yqo1_iW*vbkd};1 zJ?5PO9tg3=Y;uvu>vzl6z2HS5Ef7M2S8;fjQt_#bQmHBY?S3P8sLU@^0}~nj1P4tX zN6z`GB&XJe56U^Z&tDZbN%>16!NDq3L)X{5^&8agiJjKGw$HQKMxGh-;U;^Q*)G^v zZTcF2xhwe9rZ4L!=&@h79MRsVT3h&#aM@DOZfCVR-$(#$Nr{odvwUW@>y*EDQa0!m zNw=$<6luh4mvs9IU5_O2?R}DRp;P7ux{OZwC@JyBW|-}gW^8T$-e49l61>sLQSEYO zU_By8P%JjAj(6m5;7${NR%bNdR_uv>#vOljow`%T5kH)<(okiy;{6#bM~8PBrQJC8 z<|A1I`z<{%t1KV&)Th45G~n^7Y));Zo$tIjphz{&vhR@XRAI*-o6>uZ5!9nMCZKrU zF8w#l<|y5Dv+OFR!EBbzQjJA`d6a6L!CD!FarD|+sqW(}KFaW%Z=c084>QcNe0!qv zJl!mtVP`qdMP}J_`yHA$%ZeyA$9{un9G3tkv-eYulSd_4gIUmVCO}bJs%rWQcOzh&E9{I zSY>ZFzjI;qjpic~wd}}+F>gulZ-{9VnoE_W1?49qA3H zHu>4xb@qlUbQkI01oxwd`N$cLRsK@tGVx@RiXE`;ODAU+?3z)L!dlM?JUIcRuez~o zY~C7WFdketj44B#yRdyVujvhvK9ZgIjEzVj*y zHjY#6mGYUdqxUSL7*A4P70kx^2E%dn&#Qr*{Vqc4x+l&|sk( zpH!dJzMFl^q&tdjzP4|Ug@IHzeB z3IGCycx2B>9O&Ljpicc(UdmfwGsBl=%Xs61U(qe?cX-(bdSy@6n~nJ%6ssJYX8NDh z|AD}Vg@8-XvxgR|Ho5e|5ML@792T9n=klpGA>v4yTxmab0kl?^yw}-Rd_&{Tq|Rm; zdsLecTuYpfr#T-d+xC(s|Bj{nb&O8apDOe(lchOASM-$T!eXCtfahfC)D8M)nvh}1 z()?5P+w?f7Jy|-#c`G_|jJy@|DYTp)k0kI<3wENwRj?Cn5_@cc{sYZCV9w>1JOB%A z+@U>Y=`6?Cod9H|vrc>RI;?C@@>Y8^yM_J>?^1Cu=n!zG9VS2l$YBSwRxS;JN>y^T z<|>$3$Mc-#07vR`^sk`dv#gSHfura*Jnl^#tTW1MLR+QcgWEHVSx2~p5uFH^9?>yN zHlIT>WfzLlRFz#mSB}0DT2c?T2mC_?+Z+)Vx~;0|>Vw@_;q2G#1f#bciZGbex|sh^ zx2GAzc-q0X*BEIqhRc18{WJ+bqiqTkWVC86)J4I9lxVPii#pUDnzw>Zo$$6{d3uwT zs^xZamS>3O9@Z<5;SdUKO5cOC5tlqYcq=%%;W19bnbG$8!nSv)04GgOOVPq~{KFHp z1`U0p)(B+90193-YeI$P!Idjr`Of@n0P|9T|1JSPkjFk|SMNCHb~F}EvwgUpD-SI6 z?x@7(_^CM>?3@6X0@Q=sgV9k0{NgxVFoWoRX5gD;aJa&Yf(<`#WnMr~CQd_e^SM0z zC1qj9*nXl<9^XG}h7nX*M^)~{c>e`-?;*5u3 zMXpPh@1)Dk1qZG2C%iqCbqnqPC}P4ZxbFqxNuN3EliW5CrOo=}6U1X%urs`au$#tJ zdsNLM@g86NNcNf@t7J^Pe~i(-i;7ft9^S-xd4!jOgId0=uBMJ>QUB}CqZXBuDCVS8 z?>>`CJbTL|>rQDt{5UPH&B}X0ZSS45SyFmW-7MY9ONO^wzK^VP;z!?o=w0cM+wk|* zqQ@ZdRcu=|Vcg4Yvkc?){oFL+eM#sk>|i5vMCcy5%JK<)=6O(B#?A>T^ep@8uL&~r zLB5=^_&SLjtNqCS=qnHsB2=gD*fvqi&+rs%OL8COpKH>fJsv`PL|7^$My_&xW&v5k zj=L3oHeC^(Tfa?4!IMkuDmU#|v-p=wV|@t!M}0*Of#zGYGsTh84VqIUoZSjK1yR*} zw)nswf9}Yp#(`L=L!D;+MLjHQ9e^8zGfn7v&vdLFcxzK*8 zAWgFyd|fG$xG&$O51td_&Er9U{=53dtAc7tt`!Lu5{qlS2!2&o^Nh1%6NT}aTIH{_ zOIW+$%-%fx_UdK2BQqsHchhLSo_Z(D%xF%f){d4taC5J>doP2&c!S(7uNJ~R;u~3E zUwC+h|8$ZSzH+Bjc#W>mKeEDaji|8XBrDvYE5sEnJq$>N=L`;czEfePeIsQkV3yq= zh8*Z1YZ$y-I1C2a8U}#r=%Nl#vNcdJgFQN1Ln&}{Du_=OHZ2`*=KeD2dOfh9A$x*q zajrGnUl<8BTvAtSZ+8X@g@A3yX7;Xh&MaGP&GvB-zAv4-`Zr6=vM7s@Ts;I0uH$yr z-9L3|i{3!%*g%&L-#~#c4ckB$d@;R&Lhu*aL8w5xYSkiWcKE2(X?Ewz8|;1-U)lvh zwBTSNeg-}dTZJ9qf6>uToX#3TVHKmR`w3{aC3fn^9R3jmbcQIkW z-2djKcK#hK5zVP}tc30&H`OJg&szHnxNI{=r@C&?Z=aU8*}hbl@NR1Dh5FT>>JlDN ztzD*H1F0_Id(_&~^=mNx*i_Xf{1BAWI@^R#(lI;R*wnU$r+RbtBp#cc#~gEubWf=C zujq#goLOZW6EcioDJDiGCqb*8%qnu=hoN6CSDcI09YV1{s!eTv@Is*JiTXF+%MY_p zyc6y>pVSD>Y+FV#eZZtw$?@7s!yl6YzazF2I`;+YtSgKcY4|_Hi-v!uz<=ZIBjNuq z!-ZR3Ypoc)EQe&mqe-%;i%9J4O6&=* zdhly!5XvO0D1XfbMTP6mH8zcAuQ%pffoAWndef+n@5@K?AgkWntxM8qZ-4+ie&Q+k zicX1*j$qTljuySU(TmN8rSmd7N*?O*1W`fY%LyOCg~Rbcr_+I-BTo|B38OU*G}LB2 zNys%-v&=(vYLjU3THg}M3}8-en!^JQ#ruF52Q)-ij#I?RLDGOrZ?1*pL3vLCBY+FQ z*?kTzfls!TV;zJph@cV+mD=%AI?z*=k%2POFywH;z8@>oS#LAt>d=U5TVMI!Oa1s5 zJ&`{)eP5LIiBXyyGwH=xLU$j`V5rP7 z6B`N46y8>J=1gI{MK95mW0ifH)A}R2^@|5vpQu~M5srK6(WI9OY_`jy#VLZ>E{nOdB)6m7 zVC9ZcUktHSOM6E>^l8e&jF%H@#v()b@^YS4E=*nYpr?|6Wu9E}%e!m2H$PWtdoPiN zkt4!JEy8A}76-huqmal0_M(JC2Z&Q9txA?!wOZ2K&B62-wwnW~6;o0xa&>)wPkj_o zd+c9o@QX?Dr<%_@qS~&Z`$7f5C(+Nnf!Nrje){pUUtb1$h+fVVrp!7>lv~J3Lr7@| zjmS!a43YyVAP_X$uhwvRF4=w!5Au)DTCdViR=wKsUw!>O*80`dqwCfqsBxvbfA1gHk9;HibVF`u zW_-KX=xQKiZmRot{&82NFWbnI8S zAYIq#%REUY)v!@H_^DQHOp^-DKwP!$Wlzs^q^OR1-J%_$6$z{3?D&>!4gmZUf zr?HXQCP_;F#mm#$Amz>jtLSp4rMh0DHe55N3rjkD82%C_LwHL|#BfaAVN(qEi|(Et z*2xn*O8@b%NVFF;i_peHyKX6R_`-%j?0Qc4YHU>0LNo$1<8SyHPOaYnOC~dhK*T3b z>)-G-{vm#3AbMeE#$}nYY4Ia}jDD=MB;&HujM(J(kt6u-FUh>DG&43aek2w3cb0fB zEA_@kX-}Qn1LFz$mCkbT4f+e>a{$3YKcGY81Enz|E%`tx+#h=trTFj{r}EOcN3~4jw^mKxZTWU1e~h3xif^DwSlkqXWg}l)GfZm!F3CvbLPvGg}xYmVa<&2^XsOEcSnoX zo}QP?dx6{k0>NXV0|w*(_&)ie z_sP$GpZuKn=A-qV;Y|0aZ^*QjV4IVk4hKHT;-D=1bmCF-SrKSCtO;V+s8A_{lknjP zeyEON#kId>3Uy3%*GI<4?nplO1r#+M!3v^w+HIUs;>Fm-ciAu7NkEzc%-I2_W?v@iB(b~*CkLrt100)@yh*>~qTT%pODh_1AE zH#?|CETG1T(=~uC%k9{Zc3N=Y=|{a8n}HQe?axsM=++Gzkc{YgJx<@G27%Ae`cTa> zZr$)v`()U7j$Qt!eKV|l6)L_V@N%8qcB}3jX8|za7!=cp^VczG@o~hcV}CDq$&M^@ zeh3QfGAOir z@U){|>=sFP@O^%PPkg_&2jlJmN#Ixd=ArH^X0;giV{uW5VV1D0M6Gtw0E{a<+@fO_ z-nmlbY2RkWxGHf$b?5bbWciu}(P(nni=J<{q5WwYS?`6sW9P zp0Uv0FOXUUq_Wj+^Q%%$ZU=vq)7+_Sdzu*cXS7R8K!HW}aZcp()cj!H?(qCjV-BIr zGw@q9CR~1?(Z|`DA!--%Lk;_=npK&htKwYCLuVK({SfXy`$Q8QJs)8~T7d*3Vu|2n zPV5!APSR3*8ybE6=)!utRd%Ph=&aaBG*5aZH~ELAP-+i%`R;dvy#+<7*x5$cybPnO zEVKI+|G1qzc=bbkUvu|9zp?d~y0jlcWVV0^1UJi};<(|odAM9R=W zunU9Ax1rPDeE6)`X>Oa9c7!&i#r|OL#m$Fxla(|%2SbfwT;BP|JtKd1$6s&mew`+_ z_XcRP(%$+pr^%ZB6f-mylGC_bd-<#wo>2aqN^O3F?)y6zx{^qqgXi~gO-L*Kd8ROW3aSHD1CCQxUi|->_+i>j5h|Y`eW23L2VOD=URcEy8 zU{o<}N?27_wLG)dennS31oH1wj}^G0YFR$q%1T>}({b2(+o_=?^*u6;_Q_JAQweI} zGIzE1*GE(nTdJ$r{Yj}}j#Gs;BG$FYHPLAQrQn~VYPou3EobRkJkzC?Ot+SI^^J>d z5uKT8#J07+*50-XFf;~SVS25-k#{x*Slf*u=y<^!l(PG2AGW1FOHYJQ{>Jn4{>+9u z;O@-$t$6Pl_mHeR$4FCH4-X2pU2DYyvXc&4#hLZy#v_2M-du5n)e-B(2W%b6+(z3M zCG+XQ%zKAr_M2<_B=^Ts zxi`LdUEX%1^*`xh+-7BtA~gYn!VgJjHDtgNF}{CxcSXu`W-IsGuDf}e9LXx!T>0) zyh#=$(C_^$M)Y;yN54H0{5TwO#(8$fHuLNB50&T$lNDtn3(A#XZUMcuQPthc4YH*4$ECVWe%`@Wq5W3w|z`F09X3!H`Eti6djA|Z6*iX+r8sZ z>#sLkiF--;*#1b^@nRhdHFU_<(^kZJPemuO2(gLLt2UjyWpANB*gI;A$V=io0uMGz zlkdL$T?l&48rQj3Y6S+&!G(5KKWKzS3WsLDUZ=4+OfiSX24hp0?oAHg8eBCA6MwFn ztA#;PZ^mU}3E79wh+f9vCe)kWlK77F)o?p=JlM~_aYXQE>K^#S)%1(p2&rNc$6*^0 z(ze_V_&wGg@@JHkw@+|*!$nD6Df*dA9)(m-lRBd~F zB0h*##<%qIM4j@Ju5)a<&I2UY*}c3b+vHjP={oiIy4p6I^kkc^gHJsFuLiK^{q)adl>IiBd7{G_Y8$*rnuH;Hxj z0^K)xmVZv)$KdQ2NAA0U8pGXVS9sjgg-Q@fqtYWsGI zf;5tCk}UsHT_W7Bwi|T@!aaGFe_(-Q^JD%@+wQMcjiw(eWy^=;cBD=CmLptPk^}R> zj%JLKmCf~7fPfd%^5^*fHM?aQFh&j8T#O^b++{i7Xrx;qJXJRNIu_@0Z?VsnX@H{U zqCntfP7~&#^~LD)=BDgSs0h|nbJL_z#`@pzBu+Kz?0>&WDitq_Q0-;}uk=RZ337X< zJNXr#Pv=X{Pjn605D>CHsmo`q{|Zk*LYB(5(jdO}d(kNKD0Yt;mhbGwLes z@36e36_jFi_C&IUPFGka*5KJztbFiW%$cgM6bKHDJKmrN;Yhx*{@fL4bvo^2I^*rdwhdkXZMn1^1xxR(O32wFZO+hu)_CAaZ zq=8%)vSK8o%2qg&8?PTZx&KQt7v)ydMM1`lX6#X;xrGufThdYi2cN}0-uhzfJo64g zz5AM&qj*z(h8u{=XsdvvbB1u4bb8~@7>$E6rK^?pW>Dd92z*5P(B@%2oj$(&*^zxb zL<4lNd?Vl9h=IcJZ(k%&l|Q2CPow>LX$i5CK0c}(Q=r?W56JE>yit%Bw^a$l`L7gI z6_3E^J=6M%924r74n2$ir-i;z@=d%qBlc#&ixgQfV-bOqi#?u)9FXs}^vNRrFi`=B zWm^>+Yq1ju)nTKaZ!e#!Q9Pbd;6jvhr7EK#7<4*h$w2s*4Nn4ZcJ?T-21VP;mmYVj zYa25_-7LgPyXdK$)r)gw2)E(u-x~47xh&aQ`$=kaaG2R9$5-!o z!2wafHut7#go+$Q)5LX`T9Fey#i}>}B^3g-fc8?czFNCq(2Teg!ux{0oc@oo*I(^$ zq+!lS4mt^$+tMs6v2r>x!*iG*F?d%nmbm`0s0UPLs=z(&irk)rs2A*_>C?2Dw!^nssn31LMt!u_kps-C=Laba0#WtKXU zcUx#SpUe**UOATwWZq#SQI+Mg87Iu~5}YOodvUwFXQdx|oDBhII-6xmG4$ckjk-vBF z%1Z75_b%1XZa^_j@nmr|BT!|obozJ-e9rvK?8kRZ5e95@CCaloqT%4MW&+jr9!PeL z+L_J(Ne@#qw&UAHES7=Zj6-S{E(tW;sQn|Z%2Ct5 zIY0bXqffnsFY{H|#_Uxb`V#6A9uVGleRua>DlDzFes7N#of6;ODF2?TuDW|5uNz)h zpLaW9Zg>4(ALr73>4op^9uR@=?o|1KGWC3TNnqvwqR$#0bbJ(DGP799%rpUdZMH@E zfUAmv%do%na(3`7`T<(^j9@IHu0a@iZ83j_Ycb!UE#_ZU%|e7?F;5vSXQs+lzYP&cLPF#r@C}yKDv^=1>5Ti|M1;mR zUG7_mewIC2;~yj&IgVII#8=Mw#LX~rt;UH=zD(vTWTE@rxOjNt6H=al9SG_x`n`Cz z&Jl4+tMFfhY57_CGb5Zd;$I{M`LWUEw^rh)uQEe~(9ejBSj&fb5J53?^SEcs+5xzu z|K9s)iNX0*@#Ck9E1%xGB-J@=%y_=iNZAA0hcZ^!-)d(N)eK@JskEH1U{u5mUR z!G2=r8(r&y1#EcIrCLcA4M9_EWUwFiBXk6QBs)>pStrXG6hN`xjQN4QMMJ?f3lcG=rF zXLO2AvgS{%l7HxI7oUP1k+Dw6Tx))j^;KcKJNL6=l;5h$j~gt1 zjrCPgxjs&L)!s~|3AeVrRX?my?H&3dipKcu@}U`7&7)Y$^LT4#`8HQVPF4{5Nnsd<(>=aM1uF^e7 zwE8 z+q&i5Lq(5Dn(iEwYSS61=~g}o@$P|I({EqqU@@WKQqy%wb4IN_Whj+zx_=jRY10pA zhbQByVMC0KAI>4-XsH(s>s3)S*inC(n_1tz*Z;L~-Pr3MJ~MWKRXR#?(Q$Wj$sE^B zF$`gy2cLdew4>$lA;#M1w_0MbRu=8BN|CsTIJ@yQso*rJ0Ngg}#xbdsm)c2Osc8Wc zH-GsZ5yew&MjlydxS#B=J3qnBOq7aHtzdTa{4BITL;Fy%==dz!QKVIT<}$|8v{q5+ zNUb88=3^#yp)E3O*3QZGh4$n7X*VR{m2JdT`eIcF>5^#%3w9Nx(8{jpFW9ETZE-Lm zp+tR-1AS~+cu~NJe-vWE=sNWmuj>MNTupytP$2%!cyS|Rvy45x&&1yuvnsbG1xx~K zMy2rTxRtw=4+Od?RX$+(wpvA{y+4eg*XA7mx1Q{9L5 zB%WQe7+*}9Qf1{s5+mI8a{maye-$qx-bDl6*g*WkFB%+P|LAX zV=FF%p}e=5)CfVBj;b?pu&H{p>{a~kU)7^_=KVaetEt4ezesP~ygs+Si?kcA$e}+_ zmH6O#r~40+z3)&R)j!?+O7Q4v^WLVQdYWu9b$lur%Fsvx_e^8UtK{8>4m()t!qoJ8 z1Pj#Jg}T=vs6VVMuVO1tDPe!5Fhx|EPI?uLor`_HEG13k(&VQdf^*DZHd-kx4Af5zkDz#YJ3>v zh$+}bcg688p7@cW9572mW`obX)^9ch!fzY#TDEze(0}9OhdasaSc3OS6smS(G&|jhBXeanv}^jmY;xm2{5p?4HtB)MvE*4m{BOiqU-7Fj{}b zbMK3CzWMPVzVGL}%5lbvZ{HSPS`Hs%phlZS7>?}wA%BOp$4=2r{tL-8c{mU|4Z9HC zVMe%i#VXR+5 zs#U_q8)dW$!b(j^eB&{+!yC|aDB@-e^m}vk+gSu4mbdZCz54w}Sp3QzA1&C~0kmrf zj|YE^-?4E!(;T<&6$Vnz?=Si77`N|fet@=GknP2vOU*#IPW+V`v+F_%egtmTQ6o*3 z_fZO|xY4RfmbWBk#6*33ruAbN+UMzBY5mxXPU7s;>ah#$d!62c=;P)6KCkXH%Ffc? z3G!#O?sV^Hdfc1Y0YN-F;N27d`~Wh)RbYFTN^cN1iwm`b0uCYWwTuFZWH5e(pLnWs zgXY|jI~(hFz@*~Da&N9^QfDzLhr{HuH8zBIWCpL~|2qDcXZin&{QtpL^k28Mrf>Xe zgBTwO;j7)Jp!HHRbBLod)8VGLP9HioH|6(g{SY^$Q?&Nk@z3Ix%5nd2T;hiITK4yG z91e34M6(rc$P+V>L##*Bn#x}yYxE>8;=!Z7I!(IwE$O6r*L2BSIJM>Bv`o&tYZ^(> zlK8_~VIew$uGAE43oB7tfU6sqWHA~s6H+hJPS`_tKDD2n$O5nw{O|C*P(#khtUNbM z>5joHKeXLLZP6?|IN{j|9SB+N>{zrV+$UN3q8^T=iW8vJ{kAw{>N4)D$8qq5dvG%` zMTX=KJy)I`02EI%6Ggnn`ype#EmbBYH@^A?NRuz}esDX%1myN+mG4Kwbya2R0jDY{ zwy-MofPAfr=V-sb@Y{`q+zgGa6@A9mnzy(F;wS5k?!8%N1SbpS`;D!O4(hiY37to3 zuG+4Dr;vLz ze{-Sx4W)ifeK@=UMubhH-EPy1bCoHELfok3Q)I;jGHk1JVGRKav?HQx0yuK%HHep-pX>&Ksk# zFL2!7Bs$geZ$yr2CW6w?_Gj#ayU)#_jt-|yy^K5B?xn)c?FV;H$>?bNHqUDNvW-8= z6lA|F|NhKie6PVWm0?(kV*b{q9?0RRu2SiF7x9$QmH6U7DkU@GIaD5!^Ux^Y-k}qP zJhsPvjJNf=3K>MDr8_{i0^~aT&}*`O^36mxud?dJMBbeN-KNuIx7jA(M~ZDcpbnw>CQj~E7E}lvYm>G?u!)-FWRF4LpNmTJsMUR-s&-@0bZ=X zcRP~)R*FMOedkq~TNw}swv4HmPQuIqMDf+rJ<-dDbm@k)=Xz_6VElGjP_kCy_wi(E z6ar4v&$43noi60D63sLa=M<%pqzbgCxX2=5Lz-GkPbCD@rjEz#!X|as29n%P;0|ie zbSk(>O%SExXuV3@ARmhqm3VMfkWSuIjgxBb7$4|UUbg+JmAg;e7Qyrvf*5)oTOLCOn zB#X_GTnCtViV5_T_%qxMUv#B|BtSQ?4M0|lv!gX>j3YAv#t|?iH87+ENLChIQm;Ts zaBz`}$}IUt{1I+-pf?YNA-_3)MlUf$q>FfU2Ft0oZ}4GHvEP%%cjE`~ovVY;k@y5P z!DYnBvV%pX8}vpR7;1d5H(o zUJkNbGg9OnST2G{M%GAk@FnQ_>hal)qa}rn8=t?%*RmG0nc<0@(X!Uo55f4_y$Gb@ zYhMFBw(*^~Pu3b5`4J{S2Ua6g3S)5hUCm1;Fu&Hra`9dn(&U_xpV}w;X^wg{S2roU z0`>*&D58_3Tj<@aEB|9E<2Efd*DENaEQbRxBYH~nqnbo9T4yoX=11lDMgQbJ#-y57 zxSLI5Rp%&&n18fY$~b~;W9!PB@aBJqqP%0zHhM(o?~)FksQ=D!FMn~QFxxlsV_6#~ z`dAi;v#qUl{`uzY0lISMtwJiZEQf>tgLLD)Goa6`6ZK=*Aj%LG- zFxl9j2ZyI0--_LN<$cYM%5K2_xzB9$;}sgLRTjKEZ~HU-d40~lULsyE+)e!t%$<;T zLZL(hNHnVLxg<%o6$4Ij93n2h&c56&_}3-L|EKl;fxt;afcun)rG?M=kl>v58z44o zL0pybt<5}otUKjLl*dE||5qh?-KRFKkz)44rD(Xf%d`B`N*=lbwuUjGeFf>sc3lg( zsZFg?k!Y>8@>yzAkp(zdzO9x_sJ%QPNK9qs@5Gdx?ck#2mnLo)8Hh$}~9X01~ zzJb;|Y7T78po>O1zJ$wjQ~5Zctp!}a-VZKB7b6GwCYDlQ*&~!jfUY2opu@B>%r^+l zd%kBgjX3VMl4AXPv8bjJ>WOdCGOcooQ%HQZ7CAS@Z;%=M7?8=5!#ar`zW(t$KLO__ z==_BAPg^seI8UvEPaT6#KXji8R|le#t%{r~bWl+H!V+%jubh$KYA03)N3M5fY6Z?z zLv}+L1|o?-ngZd%+h#?VVAY3wk$@hU!#f0C zZ~>xso{B`h-QMzS(MGnt7Tw z1_g{yq+&0jNqeRPFqL$fP$%37|4lO4uWZqP-lFlQpeK4^L8`DRu<|@t{)1&XF|4ZX zvo8mPI5mKA>=R#gp4s81K*KA*c)^F*go%jGLShJGKLDB6#{)!vy> zfmp~SXE`Q6v%{A+?8WA!+J1~YU4c(({yL(R$`K6-!wO@2}>gB^@L2Tb2nb z(@`upbz}RUBf%+pcDk;RqapOrV9t*P3h3fJhHW%@-GO*;6SbB^*_!O9uOJ zp#yDV#Wb!q{-N6w7!#{|(sF-LJEpkMEI>F;NN0+}C67X~e(Ilhk*B z^>c|HvG+}TWsx3Ex^I}7YW(K_GMrH1IHT?Ryr?ptm4l43ALTb^uGV~V_*`{T1{sch>#)?=YG*KC z;Cv7mFtJ{#K6b;1sd<5HVH`Pa$IA4wL7P!l@O1sDNEzvX8Q7>lKU)^f%i^+@pmdA`cA(n9qFRd#a>l3@ySFXxGW_An?*C1&-k-0V;2$}G)A}i= zvI+9(;^Wh7lNak{*W19~ziH>SMoEIBQ_PW|!$9}LY84uk$nd{VU=L{D!w40hMLHsdE5)@_H)wWtP+UbD7&byi+%l{kVaSwkPL zZOXj(+0HqH${YTgIr7yz^3^x;m0C*HoJ&>fa`B&?Ln}=I^)w!QRsY-fDVpsa9sk4V zeYY`FAD%#v^;99!S`>K$C=?Gm=5irGK6Xu4<1%>BzD?8rC^{k|{>k@%=l$b7Mto{> zG1H4y$p!dw9gOsN-6a|mvBf3Qqc8wZGSZ{d4cZr4LPe&EP3b(9Rp*3L)osy^1QqCa z&>BsgElPnB$TRv8Cx|C$r>OZ;B}U>!nrNh=C64CP$t`keU+V@+NMba_H_8~@cAIHe zD_PLq9QNQWt#yAn`o>~=?!z$TVr5uds6JQX8(`skTk`q15--nKhv+hd@ z+?d?J;Q2UX6ljG`6p3^A`~;w$1+^!$WP``f701C6M^k2J1APKZA(iu|qd7PX=lB+Z zC0s)(E#Q^XpK(f?ZIUO*&u?%1JGTOiMxiX2jUevRzhnp@pQc7c(TR&k$6kKx86p90 zM4rnWtG216waoWRd^Qvp^zBVw#>n?HZ;=Zhx5oHgAnhT=t9D*pgy-i@nwRcM^f_Er~$)pUv+|1iE*11iDuw0^LLeZ@s4| z%~PiWudZ1ig7Gby>W#ui4bVSWieg1bnSXR+xViK)jZMP8{)_n6|5V0h*Sh}ow`XG2 z_S*2!ZTUKM8~8VP*#y@ge`UsHRZ@N%#K+P8_+tz>km+h~yCxsT*0vt{fQ*l)$MqAO z>nC^^3_l1{xNY~agnF^AHzUQdF*^7qQlwb~AD>}tT3pQY9G+*@n~Ng^A{-WkaO=;9 zw1A9FwKMRKB_Rl#2tk-61YuU*ulR-tgl(cIOEu7YZQGp3g&;BQfIGeX|K@+){R!i> zRTOUHTZ&}1s}+LNMgHg)>bTcznMP96Tt}Z*wMhXhhZw5Do}QY@mo4zN?CUb0gSb+S z1dI3EFYBFxHyeG)nH|>Etl7%xiPbuFRNId_dkL#`X_J3T98qDl{T*@~$zWQ*E#)np zDvLcW?3UD3I#qTCUIL^R{#9#Clj@Q+o7B6;Nu5X8q+ZGLp6U{OS8ab%*KoToD=G4? zI@u<}mVfqXI$zus3`w@C?bIh^+ZPY{F-Ua@Kc(9K9U1r|kWcxS>JrAh>yNOSeJhFf zcFLr>=15MPWpD+*F({60Qby1He14`v3j z#$9r1f9BqHi$nU-!Nsg8eJ>e{ZZ z3?Qd=MATB$O7!u!j$p|TNUv)v6%m#h2eD^G276ep`4~<1Ad;q%#3zwTxSv$oXX~H< ze#??7RKNMCR9GeKFEPvS)SWPbiL0UCIugGluTyuTBk_AFpAfHGW@3+iUZ$V->Suu! z;@thXYuEOps%#C1bbN0Hp+(KIHHUgUZ20K)jtE8lRQ7@WALp~&AIPS6j80q@JV65D zQ4GBNIt3xAv?Qv2328=DKaxvO0Sxp+{26IM%30H#`EaVTZp*e?M^rpJXg89eEScMM z)iYFF`XJIx)gp&OUdvAYO0%kIBzW;``jxSYej)Ic?2OriazmMBhH(|Rruk8se~+>}Oc8Q=;NwocUeD@gch`vY zP)l}=#NCuJwtgxTN%$R>JWp=suSaE#7{p!Dv6CDJvE*rH7zFN;C4Zuiodqd>t(E?H zW@LcQIPycHagV6!19aoPGx5It7(S0VB1%p@ARFGE`*9XU`D-i+Rr3<}P0SNVi~Mk} z)>T4UTIV+xpn#rQg~98k%#@VWC_*k&S_3Fg)|H?jy-d=3jt!@h6d<(Vlh@g!-7Uu@$3zU&52Zbyji5^fRNz_9%M{oJ+zmVMoFuXB6C&%CvH z4=GmpYn7^O`tmFti9Hza&oXY8usYlp`v?N=!!`h#>oHQCfa}rE)-Dr^0{f$a!7BD5 zjCc(Tu37dt-g&X{oNuSj)6e^H-e$k;JmcYgzx{jX8GjhWvgcWpkA#^@(09RG4~opj zxT+iT1(qXgkobVJVd3m2Jd!H!t21W@?1fY1GhgerSoY#2xFDn}sGI6F_Wio?!R|3#l2Tk&|`S${h zUNqU7NHvue?9%qlZIX*|O-r|Yl`LK{TK|YPA8$U+K2Ne)=uRC)rT9h(p%VUztd}(s z4dlZ~8Hb=LjthN15XDfo$4M)6Rub^9zGf?c)9F=0%=oOmqK+se_0^z%D}hPyS@AV0!q7u|y65#9?rX@&y;r}E_;z zr0pr=`=fgOSmn3ZEnl`AJ(;DI_GO!Vkm?;YAjzqf%PQ?>PLUgYj_U?O{7fSjBR3V> zg9P?%yu^r(nByekWpWDv%I(kdpcmHEIy-T;ET{m?7JLbqUlF3-NIbw_Rq>jNEaUFJ z914o#AiUFW&w$G?)bvuaNOtZS&Yi+O zZ;Ea?**2X_`PX~45oCrkjUevpCzJ-?Hkyiav92i1Rpon4T}<7POJRgZ9pm^_Uzx(+ z_&XWK?Xs@ohkeGKZ_C3wJiN|>(w7wP;{=$kIDl7+ye-m}xwgOXn;JRZAq0YUVW9Mu z!87)p6)lGa#Sv#`*Da&nt)u2dN2cnXq>DbZ45Rt<8P%meM|Z)_j4^tXr-&9FQCw zjqhHyD3MzIDZn{4Z+pSBhu*}M#yrqbnX^T4k`Q*fbbAA2EZ!cFcn~X^-iDK_KE`Lk zy#9h`Rr1iAg_;+$YJ9DI+5`cykJ;@V4Q3H!7+Y^*MXIo+dvlqB2!; zA1pFCl{u=9UXp)P@9dA3{UOFa?1(E5v9yB1#VlS{X(kS!j%mO6QCUH7#f*fQcW77C z);$Acd5`oY#GkFld~`oQYKNKVfJ-|!(LegR*&^k8^T!;R`5sj}LBcM|7F zwNE4Hyce8^%-Yqfm5_?V&lshTS0RZWtJ`K1J2vi0_sD6y((aNsa8-tJD_ zu+xoB%r2gZzn+h^VB@&XyQHJd`|^8hn-71wA=rGle$`;&r+Z6aa7$ujDDl$XX~M}b zZ$3OGTHJj2lxVp5@Yv`j&4&Zgi&}R@FKj-1d2Gf{GKi+6t8V?z=;&>)_&Ub-dOhPK z8#6xsZ=JRS23T+BmEoNAY^9;IPav@5y3O~pkQO_qYSm=tRE44HoU@DV%iW~^!WE;} zgSbi?z8?J5W?~yRfm(Hq4-Sxd&m+7f6OZwi{(F?tjElq*>G!gwX5xpuC><`+Ol;QA z%@j4QpYhz2__-9t8IgI{4|u|#TI)8cDATew@;=Nn5cty670c|$L3Ev860}rsQ0bEJ zH-knO#_AbjQs39S9p?ZlA#H&2XQ_Tmf1CHPd{bGMdO&(*|It}brXE22QQhs>N0gF6 zUR`Y+x;C{x)+#m1k{()jNxv3y+rD|wOOpE~&H(vt-(vo#p9+%n{!}VbJ;wbA#^Zul zym7&WxG}jaTkoQw5&f8S%Xf)-K)NiBFmjG6uz>>3kk$O$f`g2AJmW1H9PL}3acQ&Q z#m?OwiN~pAu*9qWaeD+FZ>fY#7aoo_=m9>{Y3XviqNgISGPkY!O3oy6 zy{y~hdhxm^|B~x(aG$(N=pWOP2BA)b95*JcUn(DK%GF#S)z3n?n(J4~bBWK?21Srn zm8vg%XysK&-6b&#O+6sPaTk-H8B=<9fF3(7S=dN#I2bxQzD-&7w$dMB@$m)5CI>>n zL2AuadRr`eJqR$I8sQ>AuIljtwB}nQ+{Pi*fw^p;yd!mL4!3q`+uMU>lV2N-x!XhC zBVZALEtW&=0llrbP*loWR(v%?L+dP_Q;oUylGEY7G)@&_y&P$poTVOnu1=h$6A#!$ zyzyvN?62bDpt3}=K}-nNJ|+RqW5BBb{2P>F^#g(-jBrSqw(kWH98o%~#BTb< zWNREC<_cB(ga?%-jN4y%mmL(tlKla`QKC1Fe{Lf@2$v{TV08yhx zNo#DWLt8Y|0)sXeW+oyD36Tk20NdI$X04YnlVCL%971w99m{TO>vpT_cH3RMzwKYU zR=}!|0hftrm5Z%W*&3DF6Nj}?vk)XYzwh&&Ga(2?)Lwu8&F3>Y=e+mp^FHr$)jLh3 z(v3<_L%5F1uAs0bR`qj!sCDK^=Tyh7)RL&uZ9x~uwvKzGW0{&EPO0qncn$2NeSbo@ z`u}QG3Sakv>~N38D9P8|@ou>)#M1fEiBKmi7;{`bur-8BSZ`eJLT|n8v~2u=k)l9@~0wV9Y(Nh zq4MTgpcpN}6|{oqjty1^tx5pQyM?Nk@mt8R+J3*B=ZBdi`d^3eh%H0rbw1Ugm(org zso7@x5&y5(OBn^fpo6&X8g9vnBL(P;C4UD#a9+nn=R`}ICpNhnlowoY_IM%A!F|*O zgWM>PH*2LcU3r!GQP@QRMk$K>F(FwRmBkPftb%d4cu!9( zLjpMH+wMOYy+|oQ`QL6m6{zNW1LNZ&KQY^r8!f3Q^FP}n7659MT+FNNaDn@k(vcZP z>A-$=+uFcnXw$K6B{~%93!qDWhlu|o;&4Yd3Su2`vfqW^^{2p{6}}@!&{%vY<1a)^ z3VWNcMyFiAYYz?8JNx->p7mplkp*4iG$PBuo$n6gK?x7*%d5;!dT~2DB@BgMQvS98 zh!6c?s!-W~Oy`UDJ=(?#>=%TQjT$4w|0@>I&PN#J7-G#y|e3Ak)cC zL9In9HJt41AJg7+~D5WM}>%!)b_{Kk%Z*bOwl1Zyjk1%J9G*W-?8OgLk z645YKmsc9rDTQrwP0xz;yzSf;e^9D5o`P!1)8D(i+Q#2IE~<~7(LAncu3E0U)l#+0 zNf|0>$4bX?667}39+BWS+G`~U;(Ord5H%^*sk(v<4(&FPWsR@S`7NQ%<7#19@Pe!8 zZ-`H5)$aJC2MMA&Ybdf9idCw|@@9>R9L?64sO4rABKj9HFtMKTsfq6m%EMBGiZ$Xg zUA_eBN@|eQV3@z1U=5NIMNUzV@t~}NxYBEt;o>CXzm>=Q*<>rVl1zS7Qd>pW%-4gL zTEh!(811zn(jmoRJ+4Zqap@D1!K>tC7D!nHC{rYJ%9T{3VKv+)y~YK4TxLIB{pvvZ* zBifompt+&ip{sGS62L%{Hc$7f1*WZ8Ed_r=IaxM=_8X7HotMw;q|u~q*zG| zDdOV1NyG?&Ta8b1PSau*QeE0wY0;+U@!%3t6RV?FRtFLx*sESK&u&H4VoN+(mGv$) zN?Ds(U0GwoU$w)H6`nDnJ2I&S2npVXoU@SAH`?JJ=6LvjJ`eB{f7FV82IXgoY1}S% zK_dtWc2KB2du^6#^)n)VU!Ptt2O4DQ`eyu#ohx(A1Y)#!SifDc`&mmyw9eO+qa>IsL?*qxFGCB`Ru4$Ui}uDBIPgt1JKpAsy*lE56ARvi zi_Cw0cwsY=2t(!rOemFN2vJ-sEkTg>H`%-S$mm ziK)9D;AC%omb;hvSq_hf$SI^I|G}1%!Bvd8#)#i#XkC87%l%Kcz7ByN@~AQ6VWAbS zl12&?kZY!|RJsZNgXL1rCe_y@MJh?@LcJVu+!26-v_=v_!1yUn>`)AR8Ri2b~89 zb-14E*DsPuYTr|_Dygo0i~3^;H*14MWD(Y(x&l!Ken1=1!nucs5bcyNE3D?lHp@ce zI&>TV5f9!VD{|!$j4Ua7ewVsr&K(q{=^5$i_2wt#6i}f8_lU5hTCAXSWDxm%*VrUU zl29_j=&Iyfe!?W9oJ1uu-p>K}CY2c9(Yn(n_rFw?$xpto78)fYX3fw22ea^i)0 zU)jk{jO+}WpDvWmB7%bBl>pr`0rz3a;HovflUc@tjCSl@M`RL#wdP%?s?7ziJ2f@g zKph)xAcEIe!6bfnBswl0oNKwpjJl$6xFUb=BAF@KuN1&f3E6?tGT5@^mmm3UqB-SPm? z)^&J^R|fhZ4a)dy{Q3PS1JIw>Dt7yx*D(b2wpaVc_lY;2Po!MN)&qTsewP!26nVo|0tXi#viRfr9lWi*2^MtoA2aUJA_q#)b_RZqfD6?R{c%3g4Xt_CRlZ|OH7A{ z%~lnYIq&3V#uA+~1raPJt78P2ZXv66w7>1vI$z~&f8bERWpBATH*EeBxz|=7vhaod z30Fj&++nkhorO}A95fcLaX(o>KyEyu9sfWex%VgBk=g1XH{Z-9pYs2x@+mv?2%d~@vio5}vbk!hkA0-NpZcODrvHhXsDWO17KONSaGRjj(dtGA;D_74;w z`-#ouj<LHZ|q+>BA?(~^2`c)+hCk>qR?90cxvXnuvU$+NqX!X zh6Y%9umK?FHNT59DTfG#dK{Z%Ae=8cRArxPFNk=dk*x~pV1TR&qIYoNFFy7 zn2|H3m!5d2ij$nN$kKDI(PtT2vubb0qbJwcit+CgZG2|EH(;+@`Ri7z(J*BEKtp}K z{_R@jc84KT;7s^-+IwLUhFS%T+goIR{AQ0G6Y?ZOYL{5@@UdIjD-pwQEEu!dE7|OA z?glnH*eLE5*zCvN9c?b7!R>n!2{6`OYu+Y%v+rlK=fy9n3aicj=(nxS-sX;1R!KwJ zTo~QW6CCU;Kox66HsqNsnEY8GTt{ESwoR2-HCo#-H4*m^)~mG}qdA)d;0OkqVqwT> ze8MC8{%d4xih;hYBb2r>>jzaU3`ycM9zD(L4~@tji4J@MRNhU<&)BWTU}?{+fV;jy z3k;g`RT3}ll&MGU=l3-?v)>vFl+~7EHz9IrgSi1=OkAN<(-hX6jgQ7w7G&Y)<^tsZ zRk+(a6W(WgQ$AYs2BwrzdxS-HgU37#Si>|QdqtA|XnBhw5PG0+v99DEjDWHjA;ecj zgbhp;?9q5u?*x?snVyEdGhULNQ~A%Vf&T{{vHfoF`lPK1E+)3P6hJ3|J?=`+?R*4h z+tD{?wLcO)(@+)ZUVSnot{z*gZ-)#rxPjqRGzfb=-x7Z$D=OB!wbr-%2|YfON`DR@ z%+e|n&?jQI+(CSf6g}kMqTf+Sv=-W;cTVF)cM7c}Yj;0p6#4XTUw*1@Zu}9gdmaRx za%WE_xMjeIOM-aO9nv3T?wODHdiA?RxmZ^bTDRCWa3-KA5vNyoP+z0~vHEq+`8ho} z(9!4TNEpojyJT!Iqk9T&3_wgL8LRKOMauES%5>`$DoRVgp-P7-eup$P_PE%sepC)P zJwAv3#_BUAm+`zs06*}8p~f5|L=xI5gP=dE%DoG-7`&IM|I%WAry7HAPU6ZIuYSaM zH||-5`8#41ePLYZ<9fV=FGE$Nt$v)I8J!X$@s_v^mLVk|?wUMH)ur7oJ|le38;6{4 z8-4nt;*_r3cvLDY%a)*tJ$>NpU9PbCOuP zqE!7+HC>N%%1Bsw@x7w@Cqjta9~7We23rLP-O9PugC_<3{XdY_0K`)(jhJ%nlFe zHy@A#P|dhCQfs%MCP3J^Te~||E7XL?UEM}p=G@=gGH#n{M^7qfj1vRIaj6~FNCB2y zn4QymO73x8)veN`ihM%HSnKL`)mkCYHVjX=;ms6INk=r_6IbABniLqE;=w0~R6tA?6sy9;Vts-+OWIK8{SGl|(V zb-tAj?=(A;kj~UPFC8|Xu$H;KF|C2DIy>pNW+ig&#oRm9tf>?1x?pTjADxLoNRSz$!u@MI?aw7DIJDrdBZSNLodYzItRM4>$or zbgz8dn#Hka$N#>6^bz3vsgv8SA~p%%PcBdpn}oh}5z{hH!m=KciKs7q0SgJP25s(h z#=+R|Nm|#*L?Zpj>kT}>mH{(F&?aHJVm)quxwmyv(qSj*lO!VhloZcZ!flmmK4VuS z`3^~4)Z{ILszf3EZZ^rH5#&AT9B_ZMs6i=8jA85#j1*hai%ExE<_2a<6M{w9`2hj_ zmPq{wohp`o2geGT=E_T%LP!Th3>Mbx+(WT6w2vQ1W@$&f+yyE9#sc%FlT>k1gjgNQ zPi6_7Yv38_w781P^rDHJM-5iur9!<*MlGG2%o=w%v5@^G@z^eBA!6ew&mu%Vap_biPxhNOUfGBz=-b0|irjqs&a$TLgbR;q&Ji7zSx_B~eCikp$8^$ao!q6);%0fp;Wo*9 z&`?GRp-V6wyBM{SmR+H(&pO8i*VScyryO-Yxza50nIm_w2hTnJiZRM9B{Nrq}kG|vox=H{(S>P!$ zlTn78bDpB@_zu%{e$EX1KH3g6k0o2JK|eP7ZRsDtFVI%M#zc0^JkOFT#=FK$t<%=W zQNVF4(c+KL*3gZ@r7!kgD8%Hc#1K`I6-61oq>L~)_05Ht)3OLn7|xM~e-*uqWSJsv z%X%qOL~jJ$J$xN_j&E6p@$%u=a9&$2VQ@UFy!NsD&~%T}D}l3WJz8Kp6u{N=nw<%7 z(aQ_4r^gLnB-psWZyb@;wq&dMMQPS!_?h7&YzlrOv1(T`Cw1eVY|F10B71i4H0Er{Q0!gja-R_3T^t7xu#Km7_g|8~BN^cGje#%9jcs$QqW6)s z<(J0x*h}c^iS8FHtbT`Hj@`NbodfBT_zp^pz3xoB<}{un(eBr9EmAFct@CT(OSFLN zVN>ljZf{fVWo~bCPV+ePMTSm_!UAr&I^e!VGW-)z427xO0(=HaB)Hl=CRl*xz)2D; z-6*!YaUtKCZiMV!NDr0_)N(u_>E#1W>2*KAy z!?Hi#p$Y{7b;rOz%i*|WNXF^~d0jL@iq1Pp;jfz({UlRi)J^qoiJZ;}?BBsGY_Vry z3**mXy%C?ui$=I2>vc02hC1_enVv&I?>FjZ$YiRlShn#k8kvV3<+^FS;4zPkQpwp? z4X4@3sDYyKpTJa0C1k+igH)!i-YZSK$>l#}kAW6CYy+~@d zlcRl~FX?C>`P5CyBQ$G?71Q}3hmBEQc%aWFQw{u+1jtxVSpFFqhMjz8#`^aynF%Zz zxaeEXNq+&fo!Y)KI0YTNGZ|y8OPIt7Gbh$RB{qDf*7cHM| z2}VS4WR0-#MFnE@^^#K7$b{JI6J(9pJI_J5$Su=Kw7+rGH>=#e{2E!~s=>uXzh8r8 zjnm+AoHFIH01Z#)oy{Ei*wZQV=mp&prxqu*ra=@0b+apK`EKkc_vGazF#6p`WJ|ib zX_gE)IV4TXe~C+vgd&!-l*B6vEM%;uZ2jZq=!myOR!etkaf@ zrHcq6GorW!UD=i`~l@X7;=E2PSgAe{i|jXOg)SH1?>WK<_DJZ5Fl) zGHSn~8?{#N&)&}IqpiQP*I~>@r+tYyWC94p4tke=Lc|q%jrM-uAQx7(;~{S{k@_4N zF8Vz12HlSxoTS`a3EG*;jhDZP!e(g?q1XV3yZ%#lGwPhEVdCvc8Y->49_-^7tu#ZV z8Qaj^qQUgE)NUHCxHS3fExTWH1op;VvjBhyz`-S5G;CD4#*CJ|&bXuwIs<$C39ai< zs>2GlH;SXlL7ce!gl`#q)f;1OH=exuMU0}Kwpz0?XteJ&mh_WCFIra-`yCV@8JId* zB(i3hC*bpO=IOR&ayVhZGT@Fc>Z54Edy|2^KqFkvmC)ja@kM*=GnCi8{Q4I{VlxuV zIWxa1A-4l2zYN`qHz&&4DPd$~?TCR_c2IK>$8u&D?O+p$s!0iP+IpaPps#x#>Lb;A z^@>6o(LHY>`m9M}nT~k{RHWC6$gV1&#NLL|I}0ZSoXJ8=>Ngf4`>fX$hwFT~4y60= zdIrDXBE5Wuc_A}St>PA^)32K3wt*7HgEG7+h8cv$xX2(EBUV1cI^*Cv3RqO9+pNII z@?2kFqzX6(#6wc#ra}QJ2>LPtNq#IWr$97y>S=2VAaORotLCE^x;AapFGok*m+h#K z1}@ZR*Gc<+qHIEBq-|xz3XHaMBr61@WTjXo!+Lpf^GNDJSrGw`97NmRX?`c^P%~Cm zI8_8S$hIT(9ipvZqRR@)G7$q`XR42kyLvQkDRHskcQB$VF6meg?;Y|07FPSMVrj^L zPs);(NU#K)t_nXouc(p+hDRG(QMgX(EH74*c6clnx57{gY>^17isliiLGY;e zZK8R&iQS~nG|`j-+6b^fovfPxhamucMxE&s#7@C?nXEt`)6c}uDxV(txawb@WS&iC zk=JsYBcPEis7woGEehh*>=^Kprum(LaXf%?kDu-It}AhR-{v=Rj??>(pWx2%NvAje zT&K4ZWaYd3?&fy}@qT_c@kM=qk z={Ac~AG;`5f?Q*QF!+X{FD~UqaAt;CUnJ1UHU`FpYof^Gqo}k4Ul4*Wg{E^M%M_7r zEy=v{4BIsoen9JWhvj*i%hY|3n;++bkd5FhVMeaFNeJZ4NFJ!3(1;Sy-$_7vbjYpF zSvKlO3dhHbi=e|vrwYX)-BvPsE*#E;2e0ex$v9**mHA&A{6TWS7b5!g-6&n!&rt2KBzvXbxp%7 zXicbCbksuJAVA9o!Jl$`+vNTcnud=C>{5PVoYu9*y0#dz(s#Ex>)vJS1@G z4WATiCwq-!Vt=AoTm4goWRF-!lO6dBA`cG%RShnmW#iK_5|=3a`Ta*iGBOhFBgO(Q z1r};rJ?vQE;(PbkhUxv&jKf4s-rzU%;zFHNPbVFM49l=G1)1TrCP3^<|M4c^*rUth zNUDpKJu(kK+S{Kf(^lUtL&P$y9s;|t2(}z9T)E-}!3`5M^vc&9B-tJ&b8Dv>uPqV0Gg|IX!wM#D7392V_mrGPg$7wz@$Y&j^=)gYO!ET)_00GZnSZPOsAhNert zM5MrYiy(L<5k7Rk(rR6Ka|%xzC4z4r*U#xJve6At|F;5Y|Qtpw&~IDs~s|EaX*?Jsodsw zQrX-}Sc3p;p!KpMv85#4u5a);9k`;p#HCM`{)$h7!)jh5lY+(9D{Ej~1{x{^$IRb)TAkcsGH9S(hR&Hom|5mHhST+q~LB3!67kjnPVx+5a{_*xG9dPa< z@23`f9g7Q$&`cehLOqdF>OlqP$kiSlWme)G9a3iXNPW1@3`1z+)%g~9gcAcJQjvc! z`Zc3%>a5U=sFPJnGpN`1YopeS$ad&?symhHRgH=quFYKp?ZrzxmHKw;wOI9=dHiZ$ zyiQe1eaLiTG;Gro^1Q95wuz1wFpe2iVz*QG+sHP zB<36HMW`5oCqO(KUm@I+nXCN!tZuJ1+kxN$nSZMIiUl6eIsM-E?E27x_=;j_@WH3wZJE^u&{6^I6CbP{gB-E*cyb2>)uisU>bXe2upe6@2G zuS#WRM5)X?275E-wz;no9PAZRr2tb{Ijt}S_t3nLgPEqIA7A(?t5z0 zz(xx9C)!T&eMjP*&+41xsjD=piDC0q;+5#K*7Ou{ z2_>o2V{DQE8I_k7&p2E0Np%e()0-roF>t6VoiB>KbZLBzv`9(r*XpW-c#u8*_p)wo zw=+0<_1mRXsj?^f-48EPof#_iWV~c^K-RdxY}i3{_7*rF)9`w*1b3p{!D*01^k9=n zN~`fq2FrvltFKYBu9}M|UgCrlY-Bwx^2GL)*jfwLaH)=EWTS6abAlIEHDg>I6j6O0 z3&NoVC8)OZZQK_bE#JGd~BNsC0kUs+ObDD$mLhK8=sZr6MVgqQ)2@NfIUWg z)r+tl21InSIomS+ZGQ1-d!=ffDI%L4@c_!-mJi`eRh&g$e~L(L{UQz_WBaO?JEXvu zrs&~myMMbXnZ<#l*G$z{PKRlub^S9*ak&$mA;Z+U3w=VKS=t>v_&(hzvV5_Fs3qTYd8PX=|<^Tt~I%2~uZN=(=YUhzcDgM$d?? zoR$?ixip;&&Xn4=1&bY$yL~9NU0<@#N~PUaN?J%CNHCN55xw7R7 z<6t~^_0HeLk}l`LS;56}LM)cjN*_l-gnC*}+AI(M)7om0+Z3at>DI*!bX$I2U? zk?dB>d(?TbL=JsYmJ&Kjqu{Ns|#f?x?SUq;C$MpZTSA;EUw>n`(h&B z&iKG6ks-SD1GGmJsp4Xu_lP0-HYZJHi1uVfZ<66*Y#5pL;qD?C8SY9b^(J$fT?9d{ z%xayOuDP;|#qHl32}?lR@0de>aQbqeKX_>i>K$T?Q~|6N=NdIgw#;Xg8}&I=BxBR4 z@t!Ht3hl#|ONs#@G-Rp~P%E4al;ms5xUlIpbA@hHQ{~^HjQM?qre_GsY+a7V3jnhm z0LhS&*a0~^9$rfMN6G)gdOM!{ze09cPV8i3)4kMaYrKHMN&U8(8t{SF5-a3N>!IM4 z)mVRTWMW-|xz+-XHWWy=&TlZ=2x|IwGN7TA49>T5*2=^D%9liQ1oqbPdUWJutMOxv zJxDc#^-SXgNZNtn)c7i|yyRA${eHSlZi)T5+s5&CvN*PF;SI zu@w$=|EC2IqQx4VUItvnP~GIsihqdvNwwu?NT0*z-zx$c@-QnNMvi|cY;55-zLe+u z70N?8@+<3G+_5d=cE7Hav3-bgVARMROS@YpV$H5%x0nOS=bUlJeuw3j2!WHR{T1+; zOU{0N_bd5t{UOy`7$2F>%z&HOU*!76bqCDRa=HvArra$v+egkuGI*&>3XmB4FJ-)a zm}T$*X40Bh+8f(fV4+}-V_kO0SUT5OS!SR%C~^&6#HfH{azcyKJ|owc;Dk0gp?APm319$On^n~7=96h0Ll5kGw{LBgcA1cl|p|2#86FUC{PU!PUdc+AmNcF$>gl+&> z9zLPfd5OZz4!8nH3$X;UyYnECDy9$33k_fX{MT z4`zqN_Rt*ebfI4=Cbt6D%*?*evPh-$Y|?H@g3hmSmCMa5gm>s#mR z`BF&cd`-k}a_uyo!>pk9Ir0xtN?hDkA90>N_T=I7Y#-;VXc4G0?Sq`J!7EuGcBguo z9J^Dx8US|xmG;TVf?DDob2652o8xda!dEg6l&un$Yf+?n%okkx9Rm*)vRzIrH`s}4)(;mmyy_0B6 zP>vCv;oo8(XJB%mMkiU4>YW^>s6>5r3sx=FUHo63n-CM&5q)u!nPQl%qE3ZQY(8nBE=tfkBh-ccpZ!|*w`A6fv<)yPBPT-k)ub^Z@| zVoB#i&zueaFnNOh__WoJknN#8A0$t7`a^pq{k9XVBXZ?Nlk{t~*={@pK8{Dh1&-NO z;vq1ZjgvsUwC*kKN#!7+-Roear*9mR)DuQi*Vw7I9V>PAdb~kEGO(4UA@i=@ADO_{ zm#?`ls*Hs>xIo1NL)bQIn$zO;nqN$)O=^$*5sT(8=!5mE3}djijL(P7FR>UcpNK5U zM1QUxDzrQziXkDsig2B{kC{{-B_|*arQo@3AGOxI3A_BO{^VsZW0I~S?tbL7Fs1)ovWmCUDCN_(z{A} zcl@jT3C*J2|8VIGh8N1G0`K+}{ILK;LNAniN{P&_3yL4AKgzK8kNLzl)IfZtWi zBiDS1n)T4t(ilK24-_eRn@X^HDV7*(ag4Sx@lvin-U!VH$xtyxmK!zaDwzpFY8RR} zGc(M|0dZ51BTijeTJAWWi0eq>#P;{G-u~A(_!Jb_# z5xI7R@FQDTTKhX>WZY3r5}2oe4G>6?wqu#ZPO~&|uPYKt47k*osxge2*^xs2MW?G= zW#p19mLDD?v^e%|cFV~-UtjBumu0W5N_SVi+g+QEz3zzqH~b!%T8L|Mzu;|c*y+84 z-@6S??~m-Kyvy%FzE5Z|{TULmeiiT5ZT_9CEa3n}KGm^8c+TF4*Oq=mX1^RgvL#zB z$ug1Qx4xB)z2hQ(vOg9H!`E0VhY@^-fY(?n=hS-~{n&lq=pkwh-}k-Wl!wOg9sux? zf#lDRU>&LwN_)m+CgjL3C9laI73s{2gieF~&D?ma0~b8~i*~-|?1{a+D1Qe+aW9u9 z2C`!>l_p-!&fjh%@Zo`0a)~xR(H%^SW<&4NWykI|?W0^z>|IyOr@*nwxQ4B*O=FQl zThHpLI>h6h?%H?P){b;njda((Bdh7x$GPiJp7{5!51;=6#zVPOv#>h~`43_Y;Ap^o z_)_B_-gE;p#@f2I6K8vE|G9OJ*|oO6T~5bcN1Tq@`WMtT(B}39V@Z!c>b~V+?2%4J zz#$$?FN?d%mcqmS5JY3z8`~%Ijd@qgB2&D2SY)Z<_dmwWrtcR#A$@-j{~OG20@;PK z9uP&Q&WZF2c>)jiU7kUSQ9%R>k|@DRj3-vTr1&<~u(vG}3zh-3@cyl?NM6&Otcg@k z)73m6dOobsFuUaSk{v~i-p-zzvJX6G`;hl0hNnQhN~d$uw=$k$hS~EzNj&i&ia#&Z zf&x|o%)#4K4N+*fB@+0Vv4NGVFrG@EqUXkgGbGkKHufB>N=o1%Mcovyz;e;hyi_m| z560eL3D3E9@E;E_sQH?H*x0!&UOB|{XrCDE4LlPM?5K?g`q3jwuUB)o-kQ7JC);yp z$^=!>&t`XnnajihL~NxSAzRVK+a8cW7YaiOGh6f|1A7`GdFFQ>97(5g%&VXUtb9 z28lCP78+F2x*s$Dn3jDZGHqR~eGgciSt|`#OU*RktLrJHTD&mouAc_|Z?$0Nz|4v^ zibW_?pbn?M+)Dp>(vw&vDi6v|f4+1Vg@3Aaf8#pTCJom*e_%)3Bm^$GD5JsAp-%bv z(>)cjZC?NGmKP+jx?fk04#YJV&Z2g1pb-I+a>Z=PveI8HHESj4LtHsO(qd8TL5KyG zjY=bQb^IR{=^-#I$ghZYG#95gsFh&f2_IKVdYN5(Er+OV;;^YPzv4(F|IRbueMQ_o%p5V*aL8Qyaf2XgvqFkD) z-M6zjYay#A8>tRtw#^?p?RigYS6CA}OxW!Rh~Ye*p+ zwwnk0T0lG9jYgs|VM2?*OlN`sHo|ZtLbU~r{`%au3EGBydeTCBE3;cqwOXHVY*C~M z+yuj@C%v>;+ptTT{W$O0zC@XJ-wueH+J+wAPUjBfv*M_TLfzgK8Hc$IZGD*|mB(S@ zz=}a56qLsNUX?ZB?~xhDxpoJ z^_4CI+hTzs+L_ySV@7^L+fdr*U!L7oZ_9&&o6&?k^CoL^fBF6q3|RI&B!m@qHXV(e z0>M_>u$|W^I7KS2k-J*9k)Z9tMm>+aoRrtPf#HUOs%mTf9;-2IeoWSrjIqle+>OGl z`wPE+z29bJze%6=xqqxc9#UxDdtDEeEXNN=8OtBD!U&eR&42xw+5{LzQs8d5w&^Nj zB_>Xc>@tKdqE#Sm+WNq7cvFY$2;a6wo%s(ORBz?kyuNL{f{g?YS+AH(35-~;cwWS# z=y+qx2M|V5@B#^UbpKD&#$PaTDk|Im zcH3`27hi$|WSvK%I!-`4cn$hWb=D3XMTsx&C5KR+PR#?iQ5w24%WD z+{hRK=F2uSr}k|0yhbC)!q2^Bg4_Y+l6BxYf1-T?Gzr4>Tsp@hR6c%ASlQM7sC+9~$=f_@Kx~3Kpln2x? z@<0!*1xrx6mYL6bNvkw zkNLp=VK4w~W@@}?ke7FLuv*zaK^8@nIPjJJov&ftvFiZU|6Ep>k??O9uLRhuYt90p zXco{84ANtQaGT#?kQKISH)M}wsUBi}#rnmdZ6B|FZ&sKiY#rMZZ1ff$4dwtVR2^Yz z<^Ryi$7Fi^&!G>4lL7oBZ1pALt{%F3$G@rWs%?S}&=cHLBPAPMG}4zKx^+x6VxCBz z5;IUsnQF8kk>r^_B@Kwp?d%XaewAMXtyApUgJOVrP!Ymg&$UW+S@HvddW)cw1IeWj z_SMB}fWD+ZUa1@hIOK%8UG;(K*=LR8ugOewUb`U2z#1+b$iO>4$cvJeB9vRJNWcvmqCuB||OW zuw{mqvSktRX)r&>BEnQegE>uBlWbnE#TFo;2rQ(2`F>FTuP0vZ-)V>M1HxQHRyN$w z)P0`YTdyy{=zbr479*4UY+T1|ctiN@LOLiD(m`Z4B*3-fIu0&~XdMTykBsj)cyT1B zf9n&Po zKfhm&eVH8lO81xU%HTW3{FC=3=bpSrhJbxPIewEP;}YxXpg#ZPJ(xn@;=)XO%P%=% zkf7hUk5+DyU6u^&5gMnshYhEfUu~{o=P2=7t^@k=LeQW(sEBj#+GpHy*B-|5^G5YE z{u>J;u5G!+!3HqTXD(8PUb$-I#11*5CztkcvS=N1rWZ$Dcxw7|8CZi zw&k+fxn|ft;GF^#|J0X>V=Q~MzLb9hbwGrqEW3j|o)5H5=`QBAC1+r_a|BKM_SdZ7gy=5O( z${Wsq!L0k8tQqSDuXQe_AWENhKrJMja8PLlK5MNNJMc4B;I22vraX;62q>pFNp+Mn z^!nJs4{_+kYTT1LHYI6CR>Z}JD{OufxS}q`s?)zBQB&Wi<<66+KV!?970TMd|S!qC; zOg5moS%JVpG&CqfUs4NMo7A{fTCy0B1^Zq>&>c6oX~i=7f`~eUG%>M0CWtP^ydsZ;{Fsi zZn&B|MSXlDH;pVEH%gIvWTXLhf(3Ox&em;c8flU9>kfOut(g0WS@i`+X~QKs2dHh|PS3@}=8c0wnN9LE&;VK|u59 zidd^OVYJTq6oLrCGFPk5!gs?>9`34gvvD2Kpr$`kgCG_%md67{y=yyX3@m6tJ5CTsYZs~`#iB|3%EO3+s}dZ&3OD0-NGtXm%UpItut-$v!fi>U z(74IXB@b0YUvgHtr%elDjtVlMi6tZdme!dzlB_OVJyay_tv>!k8xwRVV-hBR_7Rmq z3ZM4vm{o_=2?mfx<*vt4ycGTYFOGV_dPHNfw5LA2i4!fWfity`o*PdX?FC|wde*E+ zVVR82mX;x-y2#i@4=fF47@gH_XOB_mj?dT%Dc!%L^<+|PlKY7;ZLL(W%6waZSNGke z7B)x^tE0%MaW50rP$71wmtJvf&d{-UsoFo{Zq;%)E1PGNh+>$tsUV{qb5=uBKdZFf zyb9nXfubKa&InbBJ<(7J{#ivW>`e~9RbQCCFj$KXNZv8sk6pHB)thIwcH1u`{#N&R z?x|X5493MG3oVk9gQoBczV4Y=WM@vbK!YbQv6`4 z?wn0heWlB&TmiD-C<75N>Q^wGryH>jN=Nud=2P@A-8N$MmVbNnq}a{qFPv!$!tbvv zaYYrf!W$OWDXBO$X_-={TWZ)HsBwE$CP|kadss$4t5rVAjLJ*#^1vMD8kM!Y8I_9> z**?xcO&XqQx*4=C0@$5u>}TI5Qew!O#E&N z_Rk?FZr<+eZPZuJ(>5oen&kNwktsaSxcN#1bUDmgjbM|YPY4MJd`sU@WN!W^R)Q$` z79tlME>`nTyNye(CVk~${88Ib?usw;HtH3F@rz6N+QaLcMtQ#=0u@6>`5yH$oCz5b z?jTkbhV_+2YV^i88kJM&*!14hXNmzOhy{}v7xJA^IvV;fLjPO28x#4dTlv)Inlh~2|~=i|;@VdDX@;AULWgk0 zQEtL+bpipj*It*iyMOI3jJ_TJt=+fO?W4UT9WOaLe>_&hP#jzI2Lpdax@J*6s_t zojbTzpNZc}?zu1)wDlG5z*|^f@h%_vz5GkTfFLqE@e;)7igbRjXrBoSZf$k`a*mdn z0S#zZhI#IQS8UXI{Y%}gVVi%jGZil=v?|D!3i_#F-aGjT{=dsdeu95e0g>5^48iIA zgg=Svz(wA;=X89v7zyg3Xi9DSX-9j0mNb@$faYECj%wq38%yNa#zsHU(XM4hCQ(VF z)W2DJ=g99(Iq8>>W}OLiI(4XGBW9eT1=TprlMwG2e*xF*(QPa16H(cQ9%I$_Wnn_M zS#=LDXg;qJ>^-@vhyU`2IxzpYS>NVE-;p(=gg!>gI@Sy2D>lE;CArfZ?&ZHRJ#0Gu zL8LwfjZJn*nEZv4N_DMDqdo@b@j;OM0J*E zAO2_$)3el8WJK!2@x^Je+ND(XPe(U zE_zPFJf#GtN)NpII&q{U4?}1Lu#y2m#Ll#v(F1n*;&OOA|*CxxnJhRM4GhFv) zO z!sYIhvdB-65#0mZI$1eYsz_GOkcY8J$i=fZO_wUlu-w@fDN3(bU$;w4U9I`A-=&$V zYS5njYvvN_h~(&%Gg3~yaw?~uUOCgKoS|3FNmc?{rReGMSdGce7kL^XFQYFe4nqYv z84K)z{p2stZf`Pj;ob`)eNo?m*AN&yIAv8Ls{{C$i0#5gt~c?rSAYitZDQ*`ND)@* zJ;zJk&xpobG2=cG(l%FK2O@T-H1UKhk{)4+@dRp8?W&w1iZ}7fYf&QyD8tPZN__P` zAB@gny;3e4fx%_I9eQOEj%}CfAU*XZw#SkN8CZablCB!1;Fa5<$J&K|Jz)Zm7P-R> z%8QIK-dH6Y4E^Z}uc6Bx(dQNT-)$}AhGE?=jk-bq#N`vzmFz&v8|Hcga?6S@-6iH@Zom~+j&Ib7XQZ zH!b7UW&-jSfE4_J4=37>EJ%UiP_Qt$=wr&u4UN?Jra%EfEx#*30jpi-8@b%LPg)3M zh<{5!x<_qJ!V1$HBu!fRKdv>ew_}5@6VQT@`QaLc>3m?RBDrG*)qOFgp6>6KwX=MZ z(IE?mX_^aw%U0Ip<$`tWX_4}jGK|Q#tXvGC%x$cZu3+Y{+G~AEV|B;FB79`*23~$z z+Ys_tz)!?k&A+Du+J*%aj6OT?rQAAmwd$1@4!v^9m#v@1b(R6ArP=yXYCA`*lS}~Z zL%y*mBJz#D{oAAE8;OtYE41`AUtm_eV21HvjvsR?T_VA$(7yFyXKY)JvEWK5E6#+z z$n6hZ)%v+O9QGdPLQvpX|440Jb4mL1FkH+BzYVlm0#mCH!C#TUt)Lj-728w~U1e-R z8d5~IhVaP}dkKABb^wOLWW&@bXaM=g#T-@ctiAmj@nSS+aJo-jqs3)h)fl^_a?`1oU9)EWUg8qzgHIB&*4Z6m>0Sa}S*eLBDbt(4kQ7<1=uXI_mevM zG!z}iOPjIy2Fd;`cAY5xA&@ci%Fm~xjvCJEZKB}{9}(8=ez-GJvetTLb{s5j`FzL0 zTiebrLs#+jSxY>TshO?0(7eh}XQ?H`fqDZPWl!R}L2bxVMhxo>I%Imw9@`O3J)sZP zpK7;-0JVEdU+{tZ;IrX8<6>{(w@&{-aF2~0GE1R@#?x3`U~_ULhSj^j+8Z6uajLC9 z4Fzt`>KAUx&fnpDVW%1U+K3~1N;jf@Zmi8Z#v2uG<9s3XkEF%{TgG>vQo1XsiWPF% z0~bmKXyu>s!NH`p|19Hw%5`4pennuzvS|pEYsknmZbhzOShOWk*B=z!xPPWLx$ud< zS5Ev-f{DshQTdm21dG_AAB&5G2?1{fIe!5OJA_iZWyvz3Gy=)f!J3Wg>q; zUvB|TWmrxHAA;VLSe}nlwb*_~8J&MaSm663+4(PGbLeZsj_Ai2lWeOn_RpXH9^ z3-*I(OZ2T2)(s1|5#uFpM@H`QBw6pq0nBB$ds084|I7608N_>;UYdC&LZAK-g;v#k zg1WZ5J8mt`G8&2^*P_5ZyY%sTw54Z;watSyFn(9&8x?c4%};2X=U2V!e`DqOM#Y@? zoL3Oqj{BPVc!78FrpHbDAu9&%W zTc|h-qjevUxJ7&Ec74YR8oRhCYQt?59X3~xM=M=z<3M|vqpVZ`hrP4j zT(icyLj;h5h*oQx>t`F6%wbM%E{o6D3CuAZTrco$Q;pd(7ayo^$QM4PB?@K-cJJUg z1l)~D*Qwdr+vc8{?P!cu&X#R;?5n{sc8}5*qKpRB{uP<_qx++64$=Mvv&)=`dVk1; z%jFkRlWDo5!F;llGoTLu&DKB1XqZD|nU}WNG|L6&z@^W96C34a;8PA`YhyYzd+8Ow zN15mtEmHFjyoZ(`Qu<{@4W;S$jaUvF#P&Jp5UT6&L$`8S!icyY^>E(n5AtO^7klLk zm|feSD2sf&p#ecm?A2izNMR>fc@ex5}5J8U@fgk-%wZ&(zDRKzMD>0y9G6CAH)%s6gNYPgMoY*f+{BNV#~;2OMe<= zh4F%36ehJb6Qs0Yc6_NbzS6PI29Y)j1yt6$_N!~ngisL1aiv@X9a&{q=Vs<3=Zgx! zudH}*cES1(AP4J3dJ}udWU2dWL$IV{H z;u=C06RUKQB01s*9MLlW+gewHLI0Prb<0ciku@wx(*jPOp$of!atM+z{d9SaY_V!+Z`QOJxt%qWNTpBU3uNn z>v;D@RDL1$g2Ry?l#Ld>XN2^+g4D@UcQ@%6rVy>K43R7#x17V-P+SG2#6>BZf z!z}v5sQK5A2rG}Veg5o03Le5QDs~2x{R`ML>sBg^R;~x%XX3#u3$Zu)$ZeycorD^d z#rRtmy7U^pI%Z~R@pcJbNQur&hM`p!sG@3V@`gb&BB$MqlUP zD);)5C}L@=FCZ*F=T>k$PKCq#PMn-+o3A(pc3A;G=siO6sWSs|yG6^O0K@Pip#M8r zCCn$M{f&jr1KQ>lr}z%7x=40a^mD5)J0UOAWS6`800p-T%B9X*IQ{W5x1(y|*X^Tj^@@66b4jN8D-h>J+F%$MyqEq!`x`0aM2sa7buM6NMC$mqS7m)}v6rXPK$mk+B#_t9~>K?M}i!AIX8^TqGUksg>WFAF}(f*TGwq%o}3-k zkD&v|@zH%F0m(p*BuWMplV*Ry6*=2Rti-OrLafkJiuT3&HDrwRK#yL%F?HeoM0Vs9 zJDpFZyFicjfP+Q*_9qa$v7@}1BFIEkDjP0&pay^mXSJ>ytr!J)`>`|!6z_{A z6oDuoIYr4_V`p~u1TD=(+Bs zeeht^u6uG|18MzBHfphmBn&)56Rf&1x?s$?)5_{z@{vD)rb+DE>396FA z=~W3*^JcCo^EFb0n)=b2yAb!7~3MdMna#^cIIJhUafdq;p^E%N)FR)9U7A&{U^snc_E@I!5?|}X1*O->SA#z!a(r8%vHpxB->819++W?x9;GAN zZ5sqUwf{`k0NY_Wr|oZ;^mR* zBXx^7&gM&Is&9AeM8t+2_2$8^D`Xr@{1eJPDhjKw3@I7h)X9p^g9{2izFKlr`CPu}I{_^#7CiQja3eK%<`zn}0fzds^~{r^?b3V$gS`&|fx z;OL!MYA{x~gsh@4$13FT@Yn~XKiSbuZpOB!wcm|9#MTOgVsh1|WXtcf0@L|@YXe%3nN8Da zIBllE7^3uIe@u@Kr*4Eb1Jy=K9%eRayEvc{a#`YQBQ6efB2)A2*8hqWG?PfFo(@Rl zXYD>bWJMw~GaBz2r&5aO4k^i#9v2w4nxpFQSj`!xIS`Xm6|@Bb<>lI@^Nk&eSKX=e zsKURq?Mu=jYa9ksr^dE839G^G>pK!oy8J=@N$L3NeWq~VgfLo!TxoSNh^jF7 zO1O?wZU^+^skESuXB zixVdScEB<_B=Mp5C%}gu36s9Ty!1wOOJcnV@^=eO70P*od0CsVXr-$VxFqU}3Xk!k zXg^+wRjB5~T^*z?Iiif2Bvf8a8q5M!2$Y;mA!m%1?}*qVX%{aZ*SNU3>l*a4ux@ES za>Lkmz08PU2V;OtGWb@DenFtoz^(4|c*RKoN!ft^qPF&URx&ITr0IAOE@*x)?&uJ8 zYpW7^S<3*DM& z5ud=>t!+pRR^*6)cyMZi`6HQc(fmX_T`e8xRDz*2n8tf!{!$^qvD>BYhfs+M1bEAN z2mC+1#L*oPBOS4XYyZ}4i^GqR9gFd=&`&pGAH5u?y6TAz@^PiZ*jv;adphlW!yomu zj$if4t&j}#(^KagJN-{B|5QeQ(&9UgkFaX(HBKS^r&lh(hQ&byYhI)&vGHXF2g}gv zo|~2cR!Y;{)-E-c6pFk$spB(d?R;IkZ<{mVmeL}uD=#!KC`~Yb6}=B9I21G5g!@QP z=6@c4b5Fs&O69Z`LuvFMYXfD|aQUjSUtyt0Mme?+;mp1tgXVj(3K?02|S z&BAcT+J<6^?i6a*4$d4()x84X;695f4z9$Lgp;|TH=4I-8aWZtN^?kAWo}UaYw!UYn@2iuc`RY3vs*-0iRAxQq$ipmoGI zO@^+PkosikN_i$jSINVC3vifjyEfU?A)ow_V1+!Bp>r0a=xk}h2Y-HvzU5jwHfjjmc@ZfUlGJbVkS^V2SME)+n}OIE&QmL*E|l41;F?U_u;T{5>`mq_`_lO z5>`Z*=Wy6b5?0LlFd?=@Gqx%$*QGBj5of9aGx~8s$bN;`f@)(1DU(W((~&d_rosmP zSVL1EB1~8e3fG#~?6u*t8j=5zgLu)9;BXYv&lh!Bc-$-Q{5~lNyp@+Vf@>OEoVzjj zD@lcm(YP*NrKBc)PMo%Wx@RYqR5?+*psCZKI$8Nu9_d z`8QtlEt=yC7N;(bR~7rKhuW4<7DI!`k;sfx<%`hBG+r2*OxQ^hCUs6=Pit2A<1$<` zQd8m!F2%~(aJ&Y)1m?3Zj_vVO>9L|@`hJZ}uuxK~_r+TrqQlm&4*b*gWleF{QaM|n zCO|AmkD9X@HVdwog@bg~wPLbc>wJJD%HY(;z*8Yv*@P)2r!LY`M(A4Iv#tU|Q!m5G z!63Jg7}``txq9dZk>b!p5$N_p!m`dleZgG5Sy929*ftw~STIvtzw}*#Xs$<1iLp&z zw!&8~q-#9{mzeucHm+)rwO3R@kOziav3jbqMM6vxfb9(0B4P;c2tqMr9V4-?j1*fD z+I?FQ3Zsp?nYY7zhwwaX7OG8Cs4Ku>b^m9i5`P5$&J)J-cRP4GcgNbjzh7<)Nw4up zTO2)9(D@cjRdQwXToDHnX2%ge8$mYJeOz&|*jBIFkFl@qbLjItTIVw6I+X`wQ&0t< zaJ{+Y+L3gtdqEvLCO>h#+n#L-oIZR$f%Iz9!5Hxgzkx`^ypO^FP({ z8jN2{D#Q9Moz9vKOip) z&F8;L*)Vtz6%j_AUN-jxlV{gGlfWWI_N$AxQzCpo#r*YY1*SmPX0veO{nE4a~tLxj4=qiQc;ynB{u>z z^SGJ}YWF?OB0&Nl=0eqIhMr?&*g^(qS(as8e_*inw9({$`<~>h-e$Yss&)N_)@+nl z-N6vHl*tVk+Xf+^<$l!-Wd&rbE-I3Qk(F9-2WO zlq42ht*CHVP;XG(-okyi@k^sK6D^O2=GPjr9c0^ST6!%^A9^S08!$!IZ=R%#6ciYP z^xC|KDIGhY%G$F;bXgIji}9}mbo@bD3H)K?HhiQU6d=t*>eF(7ZW=E8N~?m=m4Pd)7@@m75s6@`SV}jvgY_ zU$-(?5%D52rg_mQE5BBR$I5RxhFp!LN6Z)5u}=V`Aq}HIHyaygr#QDbd;K-8Rt?jO zVe?MbB*2G8VU_zB#f&z@svmir@+@OTL1Y>V{)pjZhmAHj0wqjEVt70XRI#!m!GzxDE zmO0E>z(cknL=N2Uf+cyvW)N_5Lc=HJi9KP6^a8I}{|5^MMbnEKV`;~&uF}U-9ysIL z=BNKJd+!4uRdpu(&t!&VfPoow)TmLTVoMwUpuv?m5%WJ02qc6|un6eZQc7)$FaxM0 z3`{2E<}#GF;?}M9)z*ENZQYetf%peWz$Ve62DLRwhVDRZf&F3Urao}IhOsOoI0q9#65VM&Urk!GRY{pvz(cGg1CAQaCxZC!>CO$|l7YU{+2nBGvP!euHvU4@HOxJ8AhtMGFw zT(82jRrpF3o}Jg4tMDQf?o#1K6@FWV*Q;=a3g1px=AL=2G0v3>*^;|d zLw%B{dLDf|VpUcF%;9lZl&5ntq7JjOczpljhx1{h6)vy)3Vku zTf&^$8}3p8b=@8g^GPqujr1jgMe?yxfi^On-C^AxS(%G`{hJ+$=1QdtA4>{f8-e{!xs81$9N2GWOqR4oB2j%lX+BjM|1r$I#Sf3HA%`- zqRPJt&OT{ofzNX8pS>KzT$L4$R*oi|dy1i`kbXP4y(&Ft!(j&Ke(xd+)G)8Pg z(8=x_D_Np#$P*mWu!MJJ!hx@}JciMxRid%&g5BI9ewy|!`$Ftqcr+=c`u8PeS;0-m zNF*1b;r?eGUb)ug;qO~7 z2!+8lZ7N9QW-fg%_sB9hkS$l~#KyA=O1W|URa3#S+z*$X?b)XIeegO)+%+0T0fx1VZgaqWY0v~r#E?VtwtEkS>FjE0ZMg zbNLWi%!lxeXNtt9BH5A2l0(MC7F8Bcbqt*U`|TNrwQV1Qqj*MF1~PM$1@IZfYF`F z@7si5<0oCR{^b78DSy^uNI*sZ|L~vVlPT1#tB$1czQcfjxsjHm21_JO>DK7;ESt;>-!HWc!h$)u(VT=G9A%KZEHF1_g6w zyfm>*h^0iQ`K&R%UZc)f?TUsHxILYHpZb*ks9dXyWw^bwp@c0(QAX%0**MsFkfiV_ zAxt($oP-v-hj%32Y&;$GX@aFh00SQI_1=)Vt_Gq_)fJ zi5>%kEcPy%xXR_NNSxzM86||NT4>G>jpN;$qFCUN-DVZ;GeBl)$qBcrXC<(4K(t6irR67~fu+ zAsq@>hKY=aiAKV^y>z@px0k9@e_I;!igO}UoX%}^Qhe~fjR9K0SX6$ls$9JAhQ8NS zyuUH6TX^q_F#{-xWd14wFcKvIBhh>ul85oO+1E&~(-WNsl7(N2`9QJ6QHqpA4;rZ= zYE$Y}GTq5q%>s=_l6g^hyEK{C7oU4VvU`RkJ1T^gY2LY=q}q+gcm4Nha^z+g@8IiPZD=Dt95_Ye3NFcMdo$(^G1{!OAxLw!mR@wF-w zJQ&AjX}>9m_?#8H@ggR&h~F#x_Ov*>|H=U*G&RU603nn(s`yEztFOKX?moW{UV_NdC zfOWwvYskNu!B;&E_Hvhgt+0TN0r zd2)xMrqGit&pdUNcj*(gvA9Y)OJAoBWnr%z$r|LCgn^_O_Oiw`$fXRAM|fx(9+UqK zoB7|aK2#)-qgJ}tTaHOcjtQB6L6YwIErcjTd;W0(!jl?T`~trN`kdSKaG1D-o?jLp zYMPeWlsCDtct2RPvHTqfO{_B%?}-(^3zhj>#C&<6pxD9V0F2u3G!78uzhjHRAXaKy z$w(XQnNnv{SXO9b$;j-M#u={3#lL+Td|~qxWB2M^I0mFWn>Ecr#&r)Yuy<@?z|Wnc z7qTrqC#}QkO+$+cTxlI;3MX1e87$nWql{iS**wYUg}LTIMla0M)Iml%w>_^&YpACP z>KdmSYutHb5}hGD)urNM#V@c>zj}*&5N_tV^A|L8=Hx;}&CcC2d%~7~K*lV5??hYZ zTr5_Pu!U_ljQqe^(bvjpR;)piV?I7{<{G(HrcVV{|2ql+{*`_O%!`^uZo0b|Q%W6l zqsln)TL+dJ(@hEjfq>R-1Z3`mNsy_RuGAtjsrov_#E1yWjqGe>`^KD;d{C}ZF1e}8 ziNTY!=C3kf@o_iZ#S~oFa>ZBcabYE+rbPr}i^wC}hy*ehXc0N`Lz2wbB68qAW2p#h zKdyn#r#DMKB0CM)nqvPXY!dyOvV?*qa&@!r;Aj>lysJbf2L!f1|2HM&Qiv#-b$0Ja zU6D<{|C0%KJN+VdPFV9fs1+Hy!-8edwrT_eN-KBa< zBW+HUnU}U$#)_0)op9KPJ(&*QN!35`PgA9*2Wkql6PBy{h2y1DJxYxfg|j-Re@Xh% zXRxpdL3eqf)tt3KMNhcfX%({!7uLMCJr>^wpdkmGj2XU{rypyr2YsymEd#WxuX&9B zaAoy1Vzv>+tX?3jTD<^PEd;?yH0x>Shsk@Y{O9UTE2Y92UVW`xa^pCIT9uJ!S~E<= zRu`#XB$;4vSa(+5q^L;^R^W}z)79CBB1E7fR49xPOB4lBM?TU+&PMEC5Uy8f^SyYn zdGGmu{|%LklN!#}PL4R~<{i^`W`U#A^7IuXpjR_VEKvV4ZXX7RJSVhv=|15QV^kAo8f;H~lRU7n|Zm^Edk6G=b^f{Xr_mYom3 zt94DQoa>PicXZ%z5W*Xm0o|1WK8lSVVMF5)o#ZOClWV0lV9$u ztdd}=qr_QZT>fj}WBQ;@>@%@<{LG1cyw!iq$cS2KFN3~eaGyC?!e+Aj5G!eskACm3;&XR z>J?9!b^UTy+W&BiXy|;U(e43E_bnm|o`Sh54$_-6G z-oxLvY)p7^ZpekMVE20B&61`K)QiummAO+w-hAX^os;ds#XDu6jNh4iO~@{BUlo2Y zjmivG=8g%L=Z*^Ak~=b3oa+weL)_hzdrdGWcS7*`+|LEC&CLy7l{+Q)x!k$ID{|)r zFU`F#cu{U`@ci5>g6B}w(x?5eX!p4ncuHTHuZ?EbrFgf0wAz?GMZM}PA2B5(UylQT zPx-}~kED5yXSYgMAa7?7^TRpUJR=#KL9wu{cPW<%o6%#_Q`yxbb+|roaQ?+qxNUA|OtLCfuLi4O z-tJi#TA(2^vsk|S-xdmCPl~r$(SQoAdR8jXQUk`b0!|d}@)x_7{p&_m#Uo9waNpdJ zqcDyuoq3@V)3ESyG4epPLv?7KmB&qfl+(6D0B}q ze1CNm42)M%o*$T4#le8>rB)@T*ni6K z#lMn=;J-{}RX}CaQjJl`di}eX%{Aw1wl!a+)_l$6g8PDiu|#z91pwdt7qh8u|L&!) z#6Ke{=kfEUDw!y%`s@z}W~x7whS5IhBJk7%I|(RUn8U3t?e{TWruyk^AGvG^!f zf-YDV~@awJAUzEhZ*tDR>T=gt$_XLsXuW zQf$CaEe9rp=VI|JU3#g!=jzpOo7=l$0OZ^G_`@mkQEcI$S}r#BzemB!<1PIj@rF=G zZ}X8w-sW`Kw6V&Mo%Hk|3jSt);`AO4h%g-2Kd5paH2%ZSq=$f6<1rOF1legksDdaP zxr_}2;W@wz=~kkFcrmW-!ojOvhGD@SvWmnZlCx4&+KW4lC#4IVSRre>P^lL7?j&kr zrMH-2}OzzI5BM)Dc<9Z&2^gHjC`$=Mf^}`n?A3ZS`(oc5}~(^+M8t8V?k zC_ER5Psu#o%hoXjRDUn?1TO~8F-{#!{-+g1S$KQ{)S0)pjn7jgqeQ84!cqzU%}S_< z38G9!>36Kyd2gWE$?q%t?&Y`3`c?hH;eCwXsc^yn3*W$ZYYvLe@DP-TWf;MCT687I zTll9QZz>Lcwdh^Evs-$`MW+*LkIv>ls}d1E&N$$?pOC6@fEnkq|d z>qVFFiie#U8C*k+&{ObDAKNPBL!9L6sf&RZACwxhkfpAeYVa&-&Ok_(<;;eL!N}O{ zB%fxFsfM??%^IS=THT5XkQO~A?bAGZOe(^x?ttS9Gae z!b=aH>!0CTHa46yB{)(c06F63Yh&js4#Y>ZA(G8W$~Wq%iRHe;k~@tT1;YuKzy~-Y z(5epnr#LPT?N1nfJS|myt7o7X)01)zO<$qXiv*?0a`yw0CH?p;q^GO8T@MR9Xaw_I z^Ah_{Y`-eNrpmK~GF8mg|0G3b9AD%>UI`3SzWapo1s+8x->qRqv)I>Opbp2{RHrsd zE8y~XL@wgJo^i-7dPht*gX0O_W(FrcdKUq$plEn7J@K$7?HQD3MlwRCp{=Co1fk}l zj}&SSPm&!1PLERrniYE&=Qr&oWl|96!W4!U8RoJxl3|_zPf28$E9lx}lfQKPDaQ4< zK_2p=`uFL}FLzxpV0+r~%h*GN6+XuoL=X*u;X)@U;yzhr2o5{?j90D``UbgSFCEi-o0O;nD{%^yLa(k2GwG zUf|T1y2OS679<_-8`lmtF3lLv3-D>SkArYqs(k_0B2)C;r^8&b;6EvjjCDxau9#IB zp3{}hohJa-%izNg{_A9O1xy$(!HP4+rALfZ+;yGGmCw1fKK)*2iFpkiZ zdu7&#n0PJWLLhjjXPfivNN;AaG}1dJSRmBUO?W#*X{gs7%;v~)%}rtEa@kdp{i{9C zhnIjFBfZ{b7vp$gbjOiav1|a2;&#@ZTB5F13;b^`{c)s^0~E0>?>glJ{fW8H7Ke4% zdK<3MCwF5YhWm%iUqP*ANu{6!HKc3YJ1o|-JS=xii6 zRSRgZ1I8blNBTmpLUx^rilNnBF*YhxO!ncn;$yb9;)G4V8EZF@4h9o$daUqRr1vt< zx~F+8o#9dAaBL4*$<< zGyI|6)nh{=ZY(~uI?eOMpB?YVowU?m>OZ>l-xvci7NAX5b$W_>^tK~i;o4)i1)d_y zVxM^)8Wsu%rtgdcYW#$S!Tw!^x~liOmH@Vcst+~J`wK=E8jFwB#O@OdLlHS&H>Fr( zH(rh1U$CBWh;Q{a>zk)ujG@Z#{Yjoz2eUDKaY+B5!ce!Rs8vJEb)hX?{|eu!a?OY0 zNwzL+i&%7sJ6eC|W#Q~y77E{Zb!bTep|8SV0sN>qGx#Og%y+>L>H+>tA8S|hAOckO4_98=FrJkPhp+}mQ4%CLBgRTymZ*QLVk=#7tvzDB8T^zaz4ipF#exE1=8e)A;bi`k9Qi{V z$p8n}Ik(v3zMIn79c$B?iW5)S<0I{2Pbks!rDH;oVwjy&&ER{=$DndCNIxcRa~!@U`r_)= zd#0G5|;`cuJ(zzH%3V%jH7mn*M}C z&e8gAfy2LWA?7JUY76jtmVIXR$jd268tSE`# zM!6%XF<>E^5uW<{n0<*fedBDrl?+AvviWuX0ozkN2V{(gl`6K|ohie9_*4XT6+Rm( zZ^>jwIuZe#xOX9-#|_(Jdqou{DG}9ERMU?U6JgRt)Nqj!bX<7{($&FBM2-vf5BP9i z7+Vvs7Jk=w#e+i_GE{)b7*5v{8}(%a^RY%9=?3RxZ`$B|Tz=eqsOcDBP`R#zKxADd zC+Aj~M+in&Z05m8-wi7;_nczD#r&1NzyI3dN3acrK`#>Cv>97sw-7$*u|dpOX!98g@eUDRxdX&4i!mU5%O3L zR)s}*J}KZ@MiQ4{K6`Jx5k}f)ubXbo?2Rbnfet2I&_8>gwo9{sHIE))d`UE@lrPOw!RXIW*o7I8S zDo_1Sm;_iUzkro8fFL~UM7|Lu;r=g$B>E2mg{-CWJzRfcf4x&H-{UXLtX-)u%RqQ| z@ra5V$NMZ06X@O+4&d;@y4UbYt-TT4d%)X;g48e|_dg0>z*CrOG&%F> z%bjSCSjgYUA|8tT?^KW^hreQLa&Jw**ScK zPs5+Jq+V4XcJcuauMUd|)Y3bm4joy^0s)I-6TozW1=`{x zj2n4~?FJ{tB_Ve125$7ye*OHc-%JzJv@^Kd>UmG@wy<_l$a00pIMMi*&nW(hmL|qn zLZ7WdK;u7gd!(n)i8e$S#VbV2nO&g_y=_)DX5H{UDSFn3za06{8M>fqk-OIA4Ga@ zi~abw7jDd<>GJyuzlZq!2fx?(oynY?Nm}N^lwV=6xkWBwKb)C_(Iud#p)lIQq$sii zm4YGUN#~$?)xwR@#OmibOHz#Ke=u3r_!G(s3Y1vH&Usd8+f8C;KvOKap}G{Bap8p* za>y6@p~b;IlWq>ArN6Qk1IF2AgVb^|88Jv})aX<6u?TB?&a=%9mst+_SIF@`Q%?I6 z<+Ps_>GcQGBfSY}%LSpm5O1<5M0uSB#)Ak-hTKlR(RlSX(1cS42HJ-jqYSo;->T!< zm+IfO4D*GqJOr^g#9kEP5SuPamh1)>aFwWRoq+(vjBNI=hn^3UEU_!jcK6?kz-S9FW22>jGdSaoahc&hrx48NV4kJ z>i^FGTLj=mWLX&&IXy;;jE^O+=39!p12A@Qv^cp>ZMUtZG;ZSaU7ja)Ir1}xEs*?` zieZ}ln&K2#{zwGZ9a-)|w8ZnoJO17k2-fr?b(euWO8R0us!HFuTo4#SpBa(bep~1| zt=+WmS($mPcC`%)bs<0@4f)@5hEz`=QCN zYsr3%BY#enbNOv7C~s_9k@R6>Q@)o|{iTP~Mg-G!dsd;(U+P*tnsIUz`f^HLb(2(r z&;^H6v6y8hC>cyp;;Or=0Gh;K_@^S9xgO^;M$&2)E*aIjt!Da$H# z`3t?P#`94=>7{O@D-jA(;_6pO2*I!E9b}3BqdrqUhEYj`>CCoaM@?NBOPA0k5u&rt;QSDT1{uf z8T;6&7&Za(gM1Vy-CQF2lUo?7MIvs1@q_l_9^P!m%Rgo7Ll+}WZxB71MMOCgTf!tV zF1iF7wG@*Pc+rz@dRQ!5p=pcGRWhbA8ROG8NE+G1pO%GxvY`0OcOd&P&dt6ScbWcJAfeX(r1zt`@RR=Gx-ffPS=Q`z zMJq3rMhsJ>AFkbu>K+U?Vw=$a=cWIgxB(cp+l&PnKyUE@Xfg4}cL7wUn4oVY3`9F4YOrvl<#BA3#ih49UejO7dNpg8=avqC`N7(; z{_+F0Bek=!7mYNCOO1K&QjDjusC&D23;#kaVD@%DtAZc58fB@g#$jDgt;9l(t&ujL zpPsM9fcP01^oMlWsSDhv~tp6;$`YN_kw_d}t#qM}NwjZ$wCfC}tl$EYR zF4jj0V?;fbl`b40^vfN#nbr5vS(Rb0Q)JEf=&b1{)oQnDwYHc~aSD$sYG6KuK-X7f zgzJXR2O78i*pRXtKU=~gw~l}3m@^VE^6oYx#XIOY9lMv1)t_NLT#86dEORH8ad5kU zRA4jaZInJ!<}H+>*-yJy0&hwlAR}Phu1a!>Q7cX?W;ggQpcI*6tGj`-m#ywvu-#1x zXS$jn13pLztx*9&?o2b@JI6%GsjGjNQ{rCz8+D=IJl;%p+_)rPr2cCBn@ngb&R~dq z=E)yb1ee&NDhCg)sdar5Z0T8_$BRT>qmW}Jrv?}HN3rCO^(#m&y$oXHAR?!jyw%H) zTsHKwbnd_OvJ7}D*k&w00QCde@iCMMa$!D^281x%!KV4PXGa^nc1Q8sk>0CUv8DAw zULZp*<(%@4UA!;B^J8%Q9kpozt^%v#)c_s4s7U?3R67AmA*;M6z%5LdvDF9bPh`DZ zSskzrnax{a)g0_*tCFiZFgv%&>B}+>)DeTP3{JFG+a} zEbb4|IQZ;(Fl*P|UVGXCIo?nnLbh+~Zy7fasWod}e~`;@16uiD{0ik1_fQu0WxVi) z&Kr^rVy1zbNoHj2=I+INwg}H)vDmBkR2l!p8^p4sN4r7kMI`6>f9eT*MGm4TrbODk zdZkZJWu7N~sV{J6EpWAd=*W5t7kjX?U|xv=D0HTnZq`CQCcj3nOy?AZ0Us>VX0?hz zQ3U&n7Jq_C_M5(1vVY0TIV)xPuPp->4CCBrG^eAdob$Y2#UY)I> z&oFE8OXbDg8h!DevCXPxT0izk7d5X@HTRAM`H05ZZ7>WdB zKcg_mm!!!K4Qa8zYq`&C@P&e}&NbNp@v+*ZeMqsk7l{%vAYJY%6i>_yyeIlyp;7P$ zh~wg!?yO(xtsG++X@BSP^UabjmXgk2Fu&dQD0vn3i#dNG

SuK5b<8HvmEfZ*vCk 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 SX@|tDjkpEln`;Q#KB^6$&Znl%m===_ zo_FbR-uBvWCH9-WzqeJ}Z-On#&Lt)rytPETUq{;T-5D8sj2NFKdVoaquCAsiWj#|U z)E1PB@FE@S1hF^V&1WZ;kM#6smWk&7XU-EC4`u=W;EDCSA|ml79+MCw$fN2tR_t78 z*(zAS;&T0&L$M>-Zg|^T;r`b(*6(KN&vncGOp=89#s(IS-EUEM?qc@JnWlQRN2C(! zyRqm~j15t}1&eOQUT87sgfo^W%e>#9dXA85l!i*_M(booKqM@0&LjX$iM{;K$gT*n zEEn|g12Qy=R;t@_Ga2KmE(9v(1@;ZBd+b^!XG|EDe5xS*2c&9Fz|pRAg{5cZWg}J~BNvBnqANY{n7E-_#a|z#$6#c-u^O)%50x#kn zFexQzi<7k6Eb}^w?znAcw1*^JqyW9R{%fT} zjcF_gn{Uyf65sKy(e2qhkWXe~C=PCW6LHyV?W;y#A}-=9=A(n$mSCEvxGotVB1oR7 z(<%+=VEhU$Jq6<(Mfa^U(-_}M39(_Har2D?)KoKJ$tB>TY%_6K0yhhy7p26!e`16P z^Uh)U`>2OotFg9y%ASO}butgdl!E$_)J-LHHn&RU`hE7B|ND{8 zDjkFQhkal{T&kO>e=pOg zD^oKPU6Q>fYR$~!vuU48?k9*YK5?{c?{9{7>ay^-x)eKgnKP~~eY!3SPnb=+kPC0l zy?yD4qnDj9dR#X?l5O|J13Ww1g-&^MH{NV97SiW81EgL^)VVsdf*3k_h3lol7lTaA z)`*kMXL;74_TTlOp1Zmy84qVAmGSd9d7;a%2f;6Sa=d%<;Elna;lLUK+g>1TdNa7s zf3u_*u_F@&N@zIc?Kq~o_$HycD5doRA{g)(&$=ZcYm!~v-ttSiyAUKASLcAwuZuKd z+a%+v+(d4iHc*6+v*-^c*0`i|8l5~>^Q>0wGf7O%@h!2wjTD`I8{Au-SyYXZ{rpYc@fw^QAdg5U3e|C1K-~QptS-&(4YupQza%cAEWh$#Gn>FLOR!z*CyN@Wjndmo(i0KZR#!#rY>H z>3pZ8=h=_Pm-I{CrIJ74DJ5NV@{+bY;P>+EthnGrC0*c@6bEE{NfGDM&+?R#Hk`bq zpaXs>&(8L{>Fg5}rsJLRP6Kd!c@vxrUI&*NRBPxSvN(B>&j2ZX@qM11?O%V3A|>7_ z@*4n-FY=2{2Aw>mNX{vLqR4BUFP8D_Z2#vI6)6Rz2l_$>{5%c*jT3^SYBro{#IgVx zU$>*=A&vV3PwG~2_$})O66tBX*ZJZRo~mNz32{9Qd%FX>O<>y(k;6&BKka~jLW3WC zD{xYEO~l8D)cqo!ofUa+LWJ?{oa(@4@oZ2P(@#9)bdJvX5KqZj&aXh{pB(x>9B47+ z4RpZ?pbc56J4x5Os_4Ht`^%9RUxv0`>_LL*bK`g1BR|vesBeYqj)~u`UbaV=NuFNMTxIJk%i=P!tXwQd-;8f_-FXJ2w%YOAiqnf z?^1rB;kSj~K7NPzz07Ya_5Pb51pZ!uzxTkq&;y+RHV;&?njOpUkb__{et_dMiw*1Z zN;BRqr}X#}{5^)RpmfxU`5kwik>+>orv%O6OA=61tIfnCWCX)wHP#~&U4*UohcrQH z>QaTNNe5QjyobxYKJt~`c@uX!igeiq|;e{aHGzbE48I;Diu7g7%k%2lt1%~vc;ruc0B$^ehzl7QL>pEt_jb6B|d<=WkdYqeqD zrm2XVy6V*Q%{nB@Mg#$1kzHl&JJoLDJ2)ugvSNJTJ|QI{5+K-UVseP~x6j;Mz^J^L z!)wFGI@U3TU2jenepoV)owsw6ul~rlroECHSCkHt9vdhaLk5`Nayib;!=c3OU1Yl2 zEzWmT#hleyw%&YfIIHE1WQAruqC&1ma>prlpI{XoG7AI2nJ@oBbQ`zQ+qUPk@O5>o zEY1wp^#WRT2zMlh8_Wge*44c8Vj-t#Roh`qVpvwW9Y!y1z?y4^heft!7GW`N#l?Bc zAO^``IdsWIu(1%G!a?j^h>WqNWsC=EkgGJW@LK=EkZ~0R$0%?4aW#L9KG8hWszb=h z^bGr!o16P+HgXocn49IkPexxZBA#?$kMF~G@?FMLEQVyuM!~J0oKdMkbdXp08a{Nv ze8`(rTd|J_QlEf>e{5~+@s&}P$*rOTE;4>0UfI>&4|gsZQq=@reE z)#)_w0T#1n$A)u^E#IOd(O0fAT7@T(sF>#8qs|h$K}{cA?OWy9HOUuBJp&sDkt3-; zvpgAHLuqmtuzPqoQDOLdnr5z^x+?E2!KJ;U;HLoo!PV1N&3a34P)dW3TZn`MzTB6v zMSqb6rp}R5wdFdIszo&f{}pCd|5U`P?MqnDP4#sN@5Y7fkEh!SiA5_JpJY^$h1KD6=uqEFB=q=K_nXKPDPHFQWBwf6sV!|w%MS`L9E zMbCjIUeH8DQgwIyg0j-`yQiyHJB{coD~P!XuU?BUZZsxPmDCRR?GVZMyrr##WRi85_z6y zw9b`hvC%qPo?La#lqYyuAkTWEHBX*58m&HgwivD1^8BFDn!%In+UP65$PLmcZa2PH zM11jA9xSjiBDT>BStQ>d`MNYf1b`gdNVh+OBdw_2_t%ZfVlQhM*bbe_L{*od)aVIo)xkUJ+*iSd0=;skS9 z`Df`XD>fY&`!)d#ZouxB@^tii+|mpj?s!G-f{J5*HD4&J^Z;#X5JHGGL{C6kkzrmc zyROU(u=uqT#LN5vFHi#zC{dt30T8uuvN?8<`TN^w59swapYA($y&aSl=`p#lu~*#@ zMoTRA_=DL^7e(h@75T7@d(J?Tlr2e#~D|vXW>OfpyH&Y_TifxUjIN zXV~rEzp*U#*cv_ZfuYF730x_y&V$IB#M06ySNoXm-zw>XU6aYbW{I^fM{~=u%`cI{ z(K>EE{KTogUcq9I$uz{kHH(hD%;51rQXn0420H{gtLQl~AXR^u))+BaqgK0Dm9v_s zK584C(;J2nU#+v2+2=HEm@X8jtQ}Db!3Se({T#H%u(!8wNwug$)LBng$_6NwZCfuL z{hAK3rv!X7Y%2|3v!xfZgBHsb43N1gpl% zyHh?NT=jb&F*T~hC)3x-t#CMmHcZPfcNo|@mDSNk9q2E5dW8P9{zC>5yJUN3V}YRm zJ;+ig+624E8v|D9#X|-nGFxSpjg7&U4J-}mvBMC|kl7~V=uGP_*-rIQ=Wi=TH#(jE z?0}wsJLlSPY>#B#g*4#K&%wg}gyR56cxtMr0-WFNqtnpl=guKM{3r z+JHZz^TQs;VbaECjozH!W2YsQM~~*=)fme^ZvQ?CiKNQ%5sxriEUH;VHPNZTI9Tk* zBqf4wsHQcY8N~(R;^Hacxy3o*ImMI0vx~jqStymwEWRK-qj+Yxp!mFSesOU)ulUk% zZt+!NUvYidTYO_UySOFnDgI#O{LZZ6m66=&M%Q(bsnLy@4UueaF5|NI7hf0g5&yYJ z4)H6E*4@OZvI1-qD8EygSB#ikv)J8JK`46Z1x7pyU?P}_t-DyEv?B0qu<#ArIDi;u zLO~O8E#~(V{Psg*{h?guxKHM|TXM6z*oX_tijJ`y91<}Z)Nx3!`|&BE*tGOp;!Aqa zt1P{BPQ<8E^wRSqepQ;Myj@*l|FY9Jf0`qnQ|+3+M8tEtGm+3aPCO?v5gNHS@H|$} zpH&@t+JhW=YeuJ`dxC$sWrK?BXB^rVQM%A-a>}v(-OXHubYju9=`RvVcp_w-`W5Me zgL)CbsHD9JJZmp0g@bkOq#4=IB4DZ52u)1fuhA*BpB3aV8q3zVS(nID7J(K^7J>Z< ztwJezAKxE6tns+z72}~T7T6*g)+R%1_oF>|W~(3S zPIKtLx7l|_YZ*Cn1(2GpVzbG!E^)tLxR!vCwbkyLGX*F%Kw|~YvY$|=F1<3Rq5dd! zs=)cdq12oXR0!oSK$*t??bj8Ttnk8{nzPNxjsT$UV?e(tph2lxFpobKv#^emwh^aC zOw-l?U@aMlHJ)@gA3DC5#Vfevw1&eKfZ5~)gU_bq>=w>TLm=)AgxAhWpY?5uPqqoU zla>`(pRGSG=p&R{jB_qXAlQuQ5cTq}rt}7er#iJx#O&@ozDE0`1CHxa2iA2wEL##L zA#9Vd^wKeXv{}+7h}n@h)mV>RQX1+&)y;a{=qxh1MIgVZw0e0Ha8=Dg~|%8vM$T^ zsjital}oN+wpcS=ny`eTdLInIvou5SjOx@=vb`dosus;eSuAy-CM(HkMG^$yBys|7 z)|+cCF!5f1jLsW2jQ>~hs0a@R-2B*ewm$ZNxpcOpNG4J>5x zIAE{MO|A6_3TxXlxo;&r_U7tn`LnmGPXYB2qC##X7f{?KDvS1C?6@Kldl!Yu5M{B% z=6mS?92c!rnXJ=7R3o12Q;TOpBd%DE!!B%_Vlm`xbdjcqa`j?Xgdh!E1Df%jiY{ zt~1-D->u~zV$g-&MYJ-0rfk6h9}8NCSf)fjO-B1+BxuI+X}gD-Y+jT-4PiPI9+IMJ z46X2(EOMBIh%L(Y#2yoVG!AtD(JDGgiTUC1)Xw+J ze7Sys z1_SxH$v?IcqXws{HW5a7NHU-;fj(R$a9EatV~=T)FFcWV=}{Y!j~l*s7--eku#I|5 zhqibQ(ch1|=Kq5u`nx+5MdiboW1ev4zSusbx5Bd@no0iy|2An6y2hL7m>_b@{TRF2 z#M!49N7~i)V;!2S+71wyAPjtAXJQkn?clfw)R@Zopd>P>%VLO7(Jx2s24|VeO9)pI zF308N@?gSS()B5xV0w)CzeHcnT)!4b` zl7HsA@TA!AL?a#}*oE*KJg^4XeD-OtGB)g9dp%N~bEZ#(r%Gm}i^~^~epF5Dzod&U zlL7*zPF#hjf2L@KNMzY)WOo0ldYdBh!tf`q*I!p~1Ph;vXGIJJJl})Qf{arFL!yO+wZg8umWINv+2vX(7v{WAD|ml4i&Dzaot(Pqs;d{7db; zolwYnnuOHOJ2be&$iI;F2(h8m&bxKAB+5VQ;2#B6B16_!^>-Z_Kw{)y$ZFNGH|bbO zvtvJ}W4Gy8NwZ^@>DZ`_l{7oHl-Stbl4P4C$Upj)P{=w@gI}+~B}V>nupxF#7mRtR z?iwVK**G`VG$UlaG)$G7@{?sVG<>pbraY~KL}MqfEMMM|Wd-uEl0?GifdQ5)@6MVp zwz2*(-!C(@^Y z65V~rbOh;3uuqvR6(T&Nx3s{OES)hV!&5p_4|VA*S?QCdvrpBLb7Jhr$`?XTUFxbV5F!Inxv>tOaSE+=|3<)M$F6cj5C5-(_}nUmX_O=10xfYrRAsn z;Hrsl+mPV#gGl{j19>*fMs#$`xQfBut>#Uu2Q?BM4PTaOo>6W6`%#dnIqhH%#+c(= z&$^Wa4%ocgh!iZ4_E;N zip}9^28lL&?fd01jS+5_%~b5yv_Go@c}Pu5fUYZ{;p}CD%O?7k@U@V{`zh8=uwyheilVqT`f6t6GR(=KN>b2V5?$x= zG|e}5R!%T>mUy(yapHOM>Yj{!Hz%AqxzB%v2Lo;JG-sU02n%6p*JY*QL%VmH-LhT5 zEVBY4BA8=V;IGv?N!6Kx zjE|TP6z;C3-wT7;)wG-!>yj7ggetM`=H?rhzD)F0#P;O+*B3P2v-~QK2FEN4Cs`<| z@8*FKn2uv20OG7v&U74O@|33k@itI}NThwUCLW5@8b^;xMT9p|;!PxcuclI~4h1Lr z^bu;O?84j#?3ArdV(RqGC$qwcivK7^KGO zleQ!NJCc+}YE!pOX{0ve2Z?v`K~9YqW11Mx5-Ol#1BewnglY)35;izJy(qOqFjhS% z+r5?iJ?rF-JR$@ED+;WgL>Rt+c!tq2GnFn4(`iZ<#U6zR%7Wftw(E!-SL}}yEAp%j z$7EIJvpz$F^f_A{YrghR)LW7b5s(`@P*+A*|-U!2+yTQ@bYY2xO^8$gbX%`F3hB$3lLw+!n5#%c$#rYer- z!?VOTaH8V+YHRNR?T-wkntax+T$^#}g;hbeRjZvhb_D99G``ra$0ntRvZl+&b=B5q z`P$V)3%z!-t1O?D&J~^#eN@j7bcCo%^idhR43)@`e%F}n457wlb%O^1P3ep&u}5V| z$S~sHU~G(C3o^llts?lK4ve?gon`8_+dZIe6?8s{RS!LEcKy)b#B9bfA4|a}`}kSX zRb2iinzOGkgCnqEZvF!3&5(2bW$Gjw;7`{?M$E3Y*lvUlJLc;@Rh98y=O+RO?GgMm z>n9>w;DxF^h^cu5aokv%4;+d;Dj1d_@>*EEyTTjxGOjgN4Pz$2dJ>xLa)eXyy+E4n zayV0Qy`n{<64u70m&)QTGj??GM)Z|eGD+&sfn-@qpX^3OLWlb8RqmL{=`8*pI}29# ztF%|{J_q(4Tf_gJ(OdU`O;6zhO2`S$QXhx<<=7+=(V1$ZS?Za$!qa?dq9QxC+lNR_ zc4F<-5ZqUK&C-EHGj}XQWmxws#aYjyL0(jO$B0>q#lmd45f5bhS9lutJM@y?^!_B> zM15idE5~iNkor~FN4TR-b!dub%}TrwC#oJm2epKm2jbx|LbeIv&53B`1Bt+W_;}cq z@cgG7XyJ_|eh2c|QUdpx_1gvbp8>|y0%DAbvRu<|UV&Q!Z?cSaPI|#;J&*K6Efy;8 zDLN`HYp?LC(h<`$6bNu8j=4-Dc~zdVISnYwo+CL4B>VRApMGn13^x$m_f-vW3fL~oxK$)wEC)HSzgHbF zDt@88TH);|5gB;tn{rA0%<`-J`!XR=S%-4xpw1!(kgW_9f_&EXH@K$X(yb5)?d(=P-6Wu zd_Id8;+A{G_sj$RIcfRGss~g>wpzhz(}mx0nPADlc6s<;Y?_qtd{-@<@JK(tHz%s{ z*hrz9$*J}~^{TP+V@3PG&U)oh{{7)a8w}O6fQ1C>tp5#S_Gf{7W)(}tIzQ6ZlW;1n z${!x-FH+uE;ZrylR-T86E9}8d$iu4TzCzE#)mK_shh;bQa>)U>NA*vTC(cCgQ7!k< zFj1!{-|MnZ}{}hS7_{Ux@kMv%N*Ez zt%FG#1Fo`ecjDjP0R5Fvg6|-^K5$x}hsi;OsqaJwz2C$&)c8;^9v@iGeIZ1I(_0Rh zP?5F5#^xXVW)z#(V(e$2t~&Lg#^&o_QoI?P=P1NeAkUM_%=$xxy@(xcOU;=bvf9s- zdSyf51rB4!mW~%AMu*7&Sp~s)z5@^XFc?vMn}hT0Qegc;rviU*FX{HKIi|fe4|~92 zGjPj1o-kll{=zvTct8^z(7x38UpN3)rafo2F=ujD zEFYUSU;p*!tU)BW;s7(I{&tx$eU!$8FG^TDJwJYXXmozu>&%aPWqxc^ zEqBo5`xqxC#~pfd=!0eb?J9DMZ0AgmI?Hu#8rwcd-{m<=>!>8dKmN*@9_fV^l(Iz` z);cMF@u2<{A8LH?v5G^Q+^z|jbt}!5A+sI_Wk&1AgbYDgrYTP~c~Bb|HW6z4s8m-( zjkA+w`u;UG>}sBpsATU*+?Wr#whX22KOoDZH5t&<{rcV{CNc6aWc`tTPTgNX-pQDx z$-j{GOJcG0&p9rs1w|wl7Q^|8nB2ys_vd6uxg;b?Jjs#~2_>U40p(u|tILN{_seU@ z`bRyM*~wTsH5p42{jeUZ5>45#9>KrVM?=879n^B$%i>=#LMQ)}@mr#~J?cTd{T_`>T9F85 zX>*zorotX$V$S2%wG4k!ryJT-@%ZzpzBgA}rJIyzo2cITPj5WJNvB)qAy)dt6$uR^7>D2I>VlyZIW}+BV(8$S^t4C^=)3P zHx7(k+4*k%l-@E%OFem;PnJr5fXq0PwRiWs9B)wx84oHzsV6z8WBir>CnOj7 ze)B-aG5kEnFx%#?Qf;qhogvZ1?2%0_DL2^}sr&UJ9M6U$k-A?vu5e@}xd!RcQ7+kG zARV@AY#iG)HjeEY8^?By+3YdRc8v*pjPsR+owJzSx7y{7abD-$FOnP^KYcv+RoEyF z-xVIr`BP&(^!2+FYXEKj5$rZR49kdSBuivhM&nOz1}a7BCx=#Y;QjLs z8Prei)ASO7BA{d$-E=kEu1~F~L~_q)y_#{Wv2Om6?0rzFRD8(s#s-NV;koaNT>L#(6bTLg?r_fcGVM_0Ouj^dcluA$(A*zj7YpZI5j>Ld zp>|fGuSjfx$A|1Mdm`_1tzCwv;ybC4mX@+%S{p%a=gud#X<3HR`ZH>&W$9NO3mNYv zLByz1YnS0F#XA3hQ~@PQuUWB_T4>RI?lsND%d{#%jddBpc%}h~?7pfOjsM`Hwu~!kj z^t#B|iQpvv?xs8~T73#4)axSN=tlQ-k*w%O&$Z!GgZ>vAfASDqWyByIXFRdq9Mdq@ zX8V8GR2rQpSuB{~?(cug*c~3*}2Ib=ta&9Jr>)h7GXl=h5S< zr_`lmxvCmi>$zxOf97{xxQ2@104jytcmdMnlfqt(?;a%3J;gZ@8U?+$Lbod2DEZ(t zKA;lnK;bXkE2^WL>NCP0&?0bUE|~6v)(t;CZt#w9rtd$kw_>@A(bTqtnJZ!$m@%(& zn=6+2YljRiLu%}tnpm(O)x}0%V!_u?TW!ovEZD`fsReeB>n+kgL0aZpqy>zfId75l zA&7UbYFB40F)wB*s!6R~ikm;_ba4fWgOjD8Td&8J(LWU>yR}PGr`@ExRW6)Y-SAT| z8Dy1jPy_*wz;I4r!{Q6FVrg$if&49T*^f;7;l^F(QVY>NbTs1dVCT(vz$>2i4rDRaAg2~`gdBbJE z)ksqWmuFbY%amq_^3B?8BsS0CD&C0S4b1ACRYQ`M^=Su!t92l3fitAQt*-r`GGF4= zh4{$lMKDhM<%O(o!3cCN<0YlGOE0JM0=eNl9Lh$I{qACz3H=k%Y3U7K?TT%}^Inic zlzU=L2st`)d3A5F-ep~L%s1g$$iV2v`i#icspf?>R#+BHvB{68K;2r9rhbo1JM@cu z*6UA`T&ow%;6m!NyM{V`^GUn*cB>-)PDyIfLKUnA{}y@Bk`J;+;VtaX+n)aHA=UJe z5G;B}OT<^P9IV>FyNJ*~C{&U4wNEj8?RhM{tSwx(2}rVCoN3B?vVBxs3?SfzfFhX? z{|Vj4U)g$-?XojoZAd6rlI}j2NxCw%c2%|YFWRyeLP~;$at-+VKEk z`fSA%P3|~g?*q&RfD&5C5lB$M&LKZW#xc@T0q>zEvVNgJZy+D={GP+!&r z?$hBj;PG}z^`1F2FEczTWPJ#SC#>_TT?2H7-=jK&kb~?t{FRGQ?KC7sETXchO8D7v9#JaugBro&>|BwwI)22!?!hQ@S zQcv~@f1)aT)SSrLmDW{kpmI&uF2tm`vIxItY&4E!5;^u7YuV2Aj*J-h%hZ=_InlQZ z*{TBfa22EjkC^R(3o6iUw%?%x2h4V99y~T_q2oJPwMTgo4Wr0u;Jx02VvouZK0_Q= zFcWsI;UkxAXo9;X$to`Q!e;w@I=obex9hM+hqvi)KH+3s=R^tIfD@b4c3*iVBLXO$|9xZOPZ$OMrrdZ`~`em2)t^ zL;!iWmE^22zOAuVho8{lb%d$)M--Z8JERDa1+vwfWyN0%kkXk&Hw81oAI1v?-izT9 z9T6QW71N7GLRSr|NLlzY#oI1y^VNXH1>RvK%5>N}y zPwkhy@05DmAgPZc6EGrgl1DWccMvjt$iYNkxhHZSlt6FvZn9wgk`C$3a0(+AjJuCQ zWBAU9w+q+~=?ND17L_%xGCSOyT3cW(?_+mbJ5wY%#7*^}Om^I22-S7ldg)o+SM!BJ%cA`#>7ynbK z8sD*JqB&`Gsv5FySXCE<)Vdis8<37klwQYGkU!as1=<}Xun@4E^0P*1|#TGWH(IiYlyvaim~OZI^ni9;EbJZaUMOt&YrxV zaO=2mEFE@JW-Z1tuH~~tW2XP*wNYc|g+Is$uiS8A7c7f&5h&-?kxpDvYekt5r2>(F1t3uO0F~1^C7i*c@qo ztjdE`+z`7l8;aByo(x^!@mCFPu=>yB^d_zvZrf+mjZnQKQh;n`{)o3}FEhsmh%QL04Q za26mrrm+%bTkk)n%*a`*)>I*th^Wv^8&%0d{Qxiab}Hv&L2FD)09ixMaFtOxKbpd>G{|jBjJlWUGp;| z=f>W6J$!EG0@wUfS7dtZjW@#6I~QcmFU^chiM@fqRObTs{8D##!oxC2Le?i4B%xFH zT(x|~iFu)KXO7c;!P0EjmC2PJ=IJPN?eXS`nl7&2bLMylJjZ3q_wZM}w!G^`OipC` z&)zfz$txM|jGjZdWHxr5t~2uQZ#EK(J^uG>JfnmT@bAVKwGCIkZA3$=W>3N^Ggn9# z_X}$2yph76p~I3@(HEc@>~GN5bY*nBZcnLT%z2i`RP=G?$SJ9RH;uV+OK5jE}fHx zF4j=9+@%;v*O|_Am(JDsjHZlcK|J5h)}Pv`BxS480(YtXm7PkG&ToPDuRJem{AYd6 z<<{2Sqxqby!^1KLCRBm2MX>lKulUimxnLqV?U`p_P94%zU93(MBUZwfTg}CZzb71M z`b1}N!e41U;k~OTthyIVBXy~#?RnSwekl#pUQTh>Mm~`U=IG*mBpR5deW-x z#}s!zvn+aP5bkkgQzAGO-fW<$xidKBuPmr&^^{eQ=z?@RblW0ls&*m&?{%SK*OzJP zm)OK9M-(RmD$qG~)Y4MZS;A;EBUl|{5QI5t#3xbH`&~zt0~~$j%E)3Fh22e+a7W7{ zrD#rG%4MTDQLsH4WgL$&6fwy9hQD{~KgmM~Pu90w^1=Nry=}V!i@x&V$OU$uGs$y9 zfD+nJx+LIZ+uxlNI&VJo#jLKy#cI2{>Cz8wh|JZvM@TjVD|9|ZyK!E5B z7Fudiw-#C|pwXa$K}{qRg5?r!0a_7Ihyf815{s70BttO65C~UM5F!^vR16_N0EHkP zp;j?oP3g#bj^E+NcybL`_ZXvi7j%K+BNSNn)Lr~5mPcA>A@%qITC?6GLzPF zq7Kbq@mX1-_-5Q}3rQMe299MRgiORm(f_6Rjl$p0ysTSY^6}X}K$@7rDTsuzem-u} zn-9Nm+@8fb`Jyqmw5%`3*q<4S8WR7m(HbwgA}i}}e2t|QpH5~SQwsVo2RMzsi}$~H zqGgNky4?otH9Ps!+&1>!&Zl{oI*w!ZGZgaLV!Ms;x6St7#F+bS!vXPI-wU(1SOR+I zGthSe*Ti`3yiS&!a%2%CGj!uVnP4RFM#@r?t5D0M;x5^IXZg#oy-GHuS;{wJMM8k9 zFdm(?ay62PvY8p$K*nUR9ipIPNwAm9KoC4|Q`K7S#v$XLQAJm43ZzU+kNQ(Xa2rTQ83O`R|DX zUp3+R=gXRkFB~)d#^Ob*ggi3Les}8m;{I`brO}^yK9Jg{g(Tgdni9|-hw@b+@lr>2 z+Q>WVzx7O9@>_YAa8ZPr^%a3ZB3-=$f?V6NN6GvKpLEK4Qp|g8;MTxhahzDoW@PAbsMJ+^-$JkX ze~&ePb`i9Nv)~V#wRjh%x!=~}{%&_5@-Afloc|xP&iPOa{n;|<8r(@=^xh>Ed`>_6 zQ#kF*Sfjj-J*ovUHye3f1FsZkAc-?!L3|3UbYFGzBqSfqyM+CR_@NQP*>c_K$vT)> zyTAK4(IQh!`j{G%qHajJJ_hsY zel(K5N!Hjf{MB?M1FZT*D|c~$w78^qSTd$^6V|2i~V`=XIfiPSrH|@BMbCNfx+>u%Z!dtutjDBH|o7$7xyVk^VOM*Kw|Xzh+axkD%d!=X3 zfBT|xgKV6MT|i!DC$RW^KDn){Ad4vzpXi(S&R9g2W&BsJ3uyi|K93qDkD1}*Tjeo# zp`XypYK`PE=gzWaF|z}WT(T3D`kHizW2vF{Exne!{JN#rl9%^cdM$am9KG+=t}OR` zcgf4$_lTdkrX(-t6P%UC;I~R%9$~xvXKUv-{agH|zG@LU_41KJ_41L=(kpy7`N+>v zg|&R-^=JYY$y=qCl02hZy?kUu9?8t8Y5B;u4_ER*WF9*rlAH1oC*jkSiu+xH+n?3T zM~-+SYZQYXsd3*}MzXBi7t5E(Pja~!K`0_7nWN5zygkz)Va-Pc&iufdYEp)j`z>PO zT3jcuby~KjyhvZ}^2rx@U}3#@WKUp>oc+0I7bV=3gyeHOwMFq=ck<2_AtAYMA`^|a zx<`xSOw?U>%83SE{-VVsBh}cSJ}T5!YK0u^>FAFXl>8NmbOa^WS@Vu_q2rPk+pXS6 zv&6BziQ52&T=LGb9vYD2a{BlMJ7@AL`69L=DY$(2* z`2vE9+u%m;JZM41vJk{3-I*(_qO)Wbi#TgXR`GVJKfLH^am5E`j2CIecP0<4n~l_p z#?p$8Br;jP>gPr^;lWw}4hI-Db@_^d6Y7-<2PfK_2i z!5OJTO$r&7iZnaeg!JKN5yju^zP>@JAAcM7XYou9oi1%QyU)&{zSlf1sjK=G^PtN& zgsx=)Vj~XNFPb;nRfre0IR7G<=U7$YI^6N9RCFb3;9$3w2kK&y56^kTdKEb{-TPG^ zS78gWOE;4c#UX1wz2_vj3csQ&vZ{eBgT^7SpFLRL?}geDfu(%FxZjyLjkmo=#Rs#rMTapmeHNDul2oOIO?F(! zM7~KE8IB9tZWuW^4mqq5dw^GC%S)%79T_5$|HI{5MD!vLePZ5EY3Oz9q!c=uD zfA$BYQ$*jn3PoO|_bWu04@F~(Ar{66SM-vW788Du?sdTrn1*=2zBaeD_v@~%LKp6n zszkfI3Sp(OhmtA1Ww`6t?JcOqqr)!G@9d^}zF5Dw*0)xP_ zFVe-mw_THWYd{2~#{WYCQroa##V|poGU^+q`5NNCaqFn!x|;FN|-Z0C@Iy&8Hihj@bmMp@d?W0wNkLNFJr)ITo47nk`89f zc@Zq;o$XS7?a(#v0Uef{@hM)b-{5)$-uh3;GnH?!b1OQWSUlgV9_-rMa+ig{2|AvW z63;%#5yAxfAzajQJlSaEHi$hzu{$b~O#6yFQ`=okBX`VnS%q}m5nR2y*hcPjU7s&& z3dA~J1`yP~NHwj~Lo09ddD8-xJ;FFG2WUj@X`Lmk6c>XW7s$ibK_JbvFValwgXrNn zNN^nR7KMZQ5S)cPy%gIlI{q77^>-rZ{=BE&qT=LYUw2>zXU0y-b^JUeRiC9saLDPL zC^Da;U9n*rm;9Q`*O~5#cWZyFOi2sBFI|}>_4l`jJV9}v#9gae(cs~br&@H};_Q8$ zi~a=1dF;-nq5jZ6<`|!CKn(qdkooL_{-gtMR=mx(k@<#eUWvF*HAT9STrMewL4n7U3{DMQJ7-43t>FB{yPh@XE-sGiysPU`4g6Fw*kCFUhUv{MXlSDl^9N8ccws@bk1WPQeb+ae* z4tu^{IPAq^8%c-F3avz(t4K766FIQDd$8od7E&uLIk0$PUnoitED~S?>G2n}!_}em z&RC-`i=<;pk9TCkwiE$5>G5*AGG3~d40e_%SW7@_Zd$;)(w5bpm&vpR@mxZkt+5KM7}*CiSNBI)D~9iDwN|q zfmY#Zqe2xMA@k+EIF~!6Cz5=623omxrKBMTHBIZ%(WPr$2D%Kb6WOVEXdT})P9LCk zgV0?-o~r+@gx+gqYoI}bZL2R*5@JN~ZUW*pzDS8TwGdv@H=8cqmcDwPmuoG3wN^`C zt&3$ofE%(pT%Eq_37eU`by+XG>rGIzsyDIa~Vb*MSJ>tLJR#s}LKc zub#7|uR>(C#ge|NKd}^gS=Zf2>8m-!csrO4hJpXfZM&(o)81vjLgcA>byqA6-4>_X zIy3b0dc8j9NJ{-B{Q0J&RF9@Eq@F}dO1)N7rTHDw4Gs;bdVZ*>GP919lo|{5o03xh zNDU9~l(UkNl2Sj=RDF8_rR^8LpT+o>AQ3=A4@R2+lw&E9|sl-Es#2j?kYh9kA3c%lhP^M^*-C! zDV_bi_Px?n_|d6v9N)-B@foH6ZSe(KN(Q}>1z#1S#`>=jo@gnpScJN+6Jy+=^zKr+ zO|Ypx8+Q8HEcHD+T(Q#YmoSkH*nhZxQK{uw_C>?nGz*IeST9S)*W1YWsO-#Y`T6a0NA1X6SSeRBf&Uc&V2Q`pvCvtMss2lRHc zU+=gC@}-OM>wEfAS-$lwK$8rLB3k^id9Y%&F2=}OZkLxels^;~nnfMc1)mpR*_PzU zRv`0>P8YfX9xd_5j*o&blAem!7%2@dRUOe)C?P58ETUbWS=_5$wGj^^3x7YyBh%VS z@xI`?K&zV*^SXb>`y08J;4|HKC@%T)S+r)o8A}bA+=lw$mHH9xS!UG?8tr#uu$8`m zSGvbYzBz0bds(DUaJlsn0#`d~PQLX2u68L+e4Ww?FFR1Q5hr-d_QyA3NhR^92&Up* z#;@JiL6)t<{MR<4`+SqgC%8a*IGbP|l<%GHq7ggkbX3C2KbuJ;G@s`h4HrOP+><$=b0zghxBbB(S`QwO4iZu zt0gQS0u5b-Rp|H@%8VQ~~vBQJMTap>JEM_R7VmGh1=+MF7VF`!fIn>~+)B=t!zzOdPS$V#Vg?=*;9 zbec&VG&S+zDe+qu7Cg)S)$n(c#@GE(g~6eR@c)zw30UP%I?JuEHSya}O|&_2q%Jy^A|x?OOB#R$RUyB)QWR=JHauzfb+0CjCV?mT&zdg7tTrI^$2@X$rBz zFg~Djfk!#sJ!f!WwQf~Oa;ZtLPkh&wf!w$d5_02`XP=!_MbY!6+5q3ioPC}x-P&X; zu?vSu)Vh%U+h>ww|K3^h@5`0s>$;K|Is>cOlVUWmUm$g0C#^h^HzQzWYGCjmyqsjG zN7fBQ0xp-527C%TlizYJ9EG{~VFS*d8i>}Z%l{WuyFF)xvR83hY-E+Z-?U3-q)BI# zNuP2keHIl)gli9wsl%Oz(kF=dPw zw~)Tm?{WLSZk^l7_jQ}xAF#_wcjabYf|}KT6U#Tr2#h zY2U=5X;z*Kg7izwpC|urMy`FH*L&-Id7X;W zTkuJ~4jc*Z^r{>QZ`i2M?cVqdY+(k8vCpaBMEVFW`P1op{8ya%5f;gL?ioL_Jcx9S zK)+sku^nl-=VS9?0$1QnmV)u5zqW@|0WzV#ws%Cx{mgWZUMKi((i?Kt;p<~!fp9sI zPS&2Upm2CuGMqfn?b27#_EvN5HxSEf^nD91=IHOlKy~qSV?mqS<GOdxw>W02i5%zsyuNP^dpMG%@%V!Z=(w69Yw zqp&8oLt4smi*8-B%A3nV_x?C4+aXW;i=>E+S&|#t0c1(7NR|kF_*Sl}~ybL~=85=v2FI5ll&q3J0a3l2j z;>fsjB~Q9(-=z;8wvvFYi&gc)2K4C_xtJs~<3&sDn2}X2;s&ZlGU2(=4ij+$TpP=K zp17J6Hy|PXcNV1XPmrI(wWz>rkIM`+>6LD;u!flx7(0Q>0Gy0EANnL-CUI=c$l)GY zYtdhY?1NwkxeO#no^zfTK8H3eu{b4CKm3nLkAsIXOrQ_7qIn}bB!;nIs9&EX3>|0} z5$Yv{U(D|LZ!=u&8&ha9O`Fci%^tKqS&((;&}`2 zfn5?QpM4s~Re!=^TS%SR$wwM4;l>?bY?_droSvN*2O-WoCriG-H8{bjG;x;QJN*~a z#TX;`VPr9Ydst{b6;C#Aj>!_Cf2`@!V$X?OGPFlV-|WDk3EBRi#}NGR?AY{i+5TA9 zu0eMksA-8x*Zc%$u2w_tD$G8(UQjbo8gIGPc6JzIw`#>5IZP$7!reH zx=^f^gI5#ucfMDO>%i;9seInxoZP>#?}rRLCt(kTo;gf*Q|dy0m1e{%LP!51?Z-;- z2keFT2e%IlrdsH4pvi5HOTRc^=r5G*PNa))rM>PS?0ilG8`r$Uc*6OIe8bGHKL4Ff z?0+jvEMf)_1@>@KsCMG)$Bk;l=xSMO0%0uUY$5u3i1cC4G^6c&`NQ@_f$K?H|@#a?cJS zVKkQmbx7*Vdz}-(p}ED9yMB^8PC`pIZYP8N$lzc*gLja@e%WKOy32n%S^Q_tv+Dj* zx;J66eHbnv;XDj!14P971DFps3)#2%}(95ca=cP&3q zoG?%Zxo!uTStE$lCs#KDD@!58z8iUCTKn=3&dl!3sp5{Voxk8~I=9Ci_(Oc#V`yTv zMiTamSd1~+$dT>jyZEkodxDfYQ#`n%zuy3nO?9Z>1R@Y3!nJY^^~;!%JL&E~zf57j z5$HES*QQQ3p&#P9ax|s0-FI6qGKYkQQg{^Hm!9@YrSPU*N}z$A`oCXX?B{{8nZARq z4)9UmlnL|?9E$Oe9WH`93&h>X0Rcqp*Kq+O7E$M^@xRg{ho}>BiX-n_=(p5+-D6N( zFctw-j1pYzt*hU^Lbzx_%iD{L^w`0}li!{Gxr`$N<1>&)%$q)I zqQ_?N{LW0#LaJi1p z+-z!M!5a6hFQw6KjyW}QL6hrCauqiw;FU_wH<@z$cW{qAWm2~TDgN8rH(KkGv|8~q zf9{s)PR?xqqpIRNj2|CpnA3>;2zhBF%#^?&ck+Q>i6l$mGp|P74kV|ypAjE>IK|%v z;~}Z&EH?k0mnOoKmdQn(E?Ig4@%wmt0x>qA$EU`#hr6N$;^RO6Yz472h!B>Qv@9mE zT*3;>$nh8E$|{N{;qjzb4(T;sNs~;O>azT^7lz6Uttk-G$`V;|p2t+C*fTFP=T3Pw z3LPO8_MU>PFbBKJfxlobswi&M5vGmWOuxmAhVOd%AHaimr@*8DE*(2ZiX(3^qBVsM=nEg)XjjW zNQYIG8z8(#UAqq7ci^F9zVr2{tp4fwT3gpbMLK&ATsS>(>>k(?k+5Kql`!GKG;WXv z<}eG3>o%t|?+~$dXI2+`O00Qpc!v~u=(YK{8Brp099`~Gx=)kDfM=mj?xPe~1>w-2 z`8_2votlL$>#CvPqmk5X?Z=x%jR_^q6ZTaH-eOga#JzhW%kK_d{!L=ZMr?iQW_+kE z?92*p7uTV=WJoGgd&>CK7qESICZ(=R`wS+#5}A@WTsbxJGpu9^m=n@9sE=K)you-v z`!3e`vqKV+tMFQ8aFqk7IaJNFu0m6cL88W3>ndy~#CLiZIkPV_B0 z(Hk>!`slD8jSA~>tPwWu+BLA8;w0l`{t@2T!>)O9PA5rfN^x8r*Z(M@c2Ob!0T;#k zyGFE89r)Ezfy=k$1I4mP$d@NgcN%!oOHiM zO^D<{Hr6Ei6@Q_835;}CNupg)lfu^dv_e@dtxx>$sNjDh!RwW3C-L`3#Sn*!K=C*` z@nczKXq0%dki<_w4SnHlocO~OZL#N7C-Ij=1^ukC2Es1LEyT$py<=qB;7>j7G_&`9i z81Ssh^5;wQv>WAVVR(IW%lmaWHlRQ4MlrvWLYt4|7KhCW{*_h}u#11-E0&9f${;SZ zm`smXDz~;4t*0zjj;a-0CAD$(LRrCb&C5sBQF5KD_!4-;=0d`-kQ_dyQzIvG@rzBz zq&I&V`b0W}|7G)(e{^2c?B3!4^A)`e9B-|BuxP^zlgGEOlnSYe=Zlid_4QxngdU*l zU=ZN@a?pl_GO6HveNw-SLr|gHAjowk{n1XLe5VamiC@o;m|KREijkrpDx0Mvk^%5B zg2~D$qVbIky{E(1%M4z~u3Z;bDw@h3>t*I}t}8qF_1rc{wt%SE8_(|jef{FIN52oH zz0x~9ZhDROlFh3hm;O29f=hY)T7;Bei(>yGJguE;?|a3*Qk-QXBy40T zLG$4|ZV!K>nnf?hMVphV8dIXp2a_*~t8MN6EHCD>gP)!1LRuO}F{F4v=eTZ%e^m8l z^^Xq+UhSf4Y0`&3o8C5XVDxf!>f<_pcCd$X^CGFvd=lZ6azI2`2gRuf*?j5H6HQL* zI8_zy5QjE1+#w#NVcxB0=J{vk6!qjEg!=IM#hYo1$uXnf{Mm+HpS5=TFX}1(9TMgL zvhMPKLs$8~r8EE83p-?L<)SpLTxM#eMJKIv>8O<+?NQb&Zjpf!@Td)av>LY|1(hQr z8wQBE@IywVLoJFvZS6Lcp`H@U4QZGTwdlpaNrLz{kG7uM{=n18mD#m93y?^C_$dpd@<|W*}#kMS}Bz5$-_3 z0)IkbCf?3`XmN4?RpUR)$%rOxX<@Ce%eix{-O6{iE6YWFTVIwyrJmeIe-%csw> z-@jpM?!+l=4+lISPBw1nH*soS+ry(KtI^-^nb#M;U21O&yKbp!X&}h_mT@g(RBoqR zris$wmQ2L_=3WdDr4__jmDetCOC9O(y=C~dhMNW!VRju1B^4p!mvt7;*;&_5ZZ#_D zH&(30V~+V_{WIeHKackhBgr2=D`N$#*RUNSOmD?l!HvD^Sw&}h@4Kr~T*ZET+{24Ey7DNIe;oVm5ocMQIxkJBXD{u5@7TkUoTJb9#h?x`j zHnyr7+ncnl6_FJ2^}i=A>?|^W4u{ep%;PY=yh?=H5-?(MZdJLLXNC5X9I}%8Jq~tG zj)6CU8v{o|Pva!~ez=7q)i5%2p7;(f81qRu?+>BRCG(Ak@upbz9cYsia*Bkj)r9_( zL{(TdmzB3OgEKaWDYS~1ia1zb&(Ijn(ApVrrz`C8b4?eG$!4ji!~zk^(b-@mJI zQ^U`gQ`eFa>kP;21S79SD2Haykm$+OWR^!F{ozY5MDndPghkg}@$O-J3g=k(f>%s7 zM|Y$1j(_)XQVW?|)=%6cHTnI#(|Qdy@XDF5zR?J*KxxBq*K>Gi zx2$ev_m0o|OvjSnTb7mbKC%~$IDxx7>b&TLr#e!y2SaTitmEU;d9l}59kfVU`{Jpa zfy_9BHdW`+W&^L+y0%@6o7(HE?mAdz+|{^LL%$)j%tKm*eleXMvSVoC1CseTF1FCa za-=essnI-b#VnnDk`DIxkn?Yx>aNuL;choH~=vB76(98rW`f@;y= zLFf)0eI8<+h4VUwrjmrwqw9-IvomzDmGp$11nDFuiIan& zAPJM!GHMcnL+(;_ve#wfislLNur>4q?jQ9)B`AwTP?HB(R0WZ+X45*d}?a3`d z|3<36QP-LzAim=ZFv8CZ#{R zaS7tX=`>mh+vzuO`tD(teW<)9i^gZ#S|u2del+E!UpGBSMQxna$bh7HbO$7%v>bEl zI5{U&tJteBMAu?GO9K0nKr4o08Fu*C_|CTXO+3d4Q)g|oWR2WE=;M^V`v^0fd?@## z!q;+Je_6djUf<4S%UQ5+hfch|axgVX>dg6YhmIJp6HR+d!>1f^ciY2${kr(&+kX9;_+6y6*Rw~mpc}UD78wR8 zIPx0qU=lsEiO3#2ClSVlJ9NfIxT}q!gg9x^7%MZeJs5f)CIvF$eDQJqjJQw+ElrzZ zFgZn1nJX@d*LrCmmc^@-fOtk=z?FN*ccbj}-0jXKBM765&o3 z3+Z3}9>;VER!%PcJth6OgVw5szF4i7HR$p$a_v0$<*^@CUD-l1`ClnLPuI<~$!UBP zR?f*Mk!q5xKM~uZJE{D_!_>Pa>#t|e#7=HAD*82#59w1VO}j{+^{yXW;h~wMdqC#FA9X$gc8x z-819&rhg(r zjd+qz z(EWI44%yHt(z5xsV(%6vwst8UWQmDPBvs{qRf9*T?8042D5-E4`36?FOOgJcr~keB zf0q82508br3>;Qq~P?wEG&k* z$hu;7c`1q}L92k$y4UMf$*S7isI^F4C65U8J2bWs3YoFPKJ_ zRkOaC1I-+0=0GzCnmN$Sfo2XgbD)_6%^YavKr;uLInd03W)3uSpqT^B9BAf1GY6VE z(9D5m4*b`0K(>>bpJom;bD)_6%^YavKr;uLInd03C=SSxu7w#&C7Q}z3dFkfC(2!& zsN7YZmA;$tVK1d>u^V@#WnYcGx=Oj-Keo(Wqrwzp8E&g_qxg8mSowg3^KgPO3^F-* z8V04Djtzs%|3Lk#Qq%s13e=wr6$Z|e$ce?p;Cs0H0jPgC4tkp$3ALZnr|}P*$IJQQ zFmRp}#MF!xQ8muf&QOCv{lm?=x!))KoG%Rn=PBj$702Zh7WPy6J?z1>=akwHoX5*W zj<8(jaGrS52kIY=0EU4`Ik*-Cdte4Bqli{ngZfFeo7n`y;}idM<5L3mh1zd>{6xn0d*NdN5FmHSKwhV7kI%FpbCV6x*QcK6aSzT zRDwO=Es%L7^#hE9=f4JXz+9lNK?UYB_yZ4uFTvL!3=+xEFTptQfMgC{wiJH8M?3q# zKw~|3lZMH_Ybvz{%pz=o^K3yQC+n|p-!#?K?*Gl#*w(Wl0f^ZY6TrcKbh3+ zxe@hSB~V|1^OVtc!V&Gqi~hw(Gi~j7M0?A`Zf>MKX$(iC)B7Xx52}dst%!KNZE**j z$4lCeN2FiGGS3Chlh^|@sDCcT4C{e2P3=8<7v?B0Zq~ zX@?njsas*7t|fh-7KDLHBtDP=)`3zG2I@MTf<&+wlz?@h6zm68;Lo5Ign>#z1*#|Z z1F;8Tpa!9?qg*N5xzaG7r@ehZeFI^jzC!()8vu+MSAaw?7)WFNvozQ;$`Pn-^iM#& z%XkEoic!a(rlLL*qi)+3qf)>XRA3XlcqB%Zfj^6Ee8(i{)>*{5_%gD-hjE(LFD^t@5{5{$7&5 zeTu)0qT4Kg&&uBm@>d~$mGZZTzfE3s>>2aeCi8dm%-{LUW4la*q8-~}9(&HxLsY-> zs`s{;N9UPGmzqb5&G*X9_qLnwRhUOtD4`T-z0W-QsMsD|tm&J~qtBQ}pEHl*Y@hl5 zeDmmbb@VCo=nnJ!0`ut0=Ftu2(Ou^IUi1Azb+pVpT8RTw9N=-QI1u`J^XO(B$n)mW za`WgO^L?NBe!i+LdERUCmoI-M^0&HyrcOWcjCuNr&F1OVtAQWngCg)8coF*-u-^`L zVtyWVJ$PB{K)DJ&U1$cMehO>^o5Azo1yBxFsNmC&qOJp_V80oB#tVwTW7sW&wirbF zxBS*TSz^{aS)^*7EJR%Z7NIXd^#MOvh}mnK=i9UZ>SC}&)jYPwtXWxM)|BL%HA^>` zHA|iYi_DtkOU#u z`J-tpndg_k$K~%a<v5^M+Sg|aHr@OY$QW29k|V^B4V$;~2iw&;1Y zW-(k^v=Ma!>eHwz)ak8D&C^>q0&3L@6<{Cw$H0?dzdF5jCA62&F9W538u$Wkw{8M^ z3BMAx1ln$}SDh$dXr3rv1WL^l+t;EBO29_U3)G42=(n%3?ZlmJzkLn*GIgT77O#Yf~=-|c@KnFk{9o$IAu!)XgQvfVf-|Bx;KJI*~rig}DMD+^Lz>4WCidLI7{!+|z z0)Z0ji=aW*G~8(SG|B+9g_~84Z>d@1qmlcT0~)%I#_7YI?@92qs`25@w-OMpkH+cS z4Cq9BG+f_WWzj^x2{`V=&9mTn)e!DF%rtBtO~6M}(C(j6H3i$ungTkXg5BUHfL#G$ z6>JB4RD)UE5N-j@NBbcU1<$Dy75V0gipM|!mue?Ill*7yNa@!0~%Hd-<`6z!8ysS=?k=`=GF53b~e;HwyEdb8}nw_?H=;DTE zTSnTno8{Q=Fi&j5e%lk!DnL2dgPA;((JhF*Ll-yO;K4TXtKCRjSXfStUAU9KVyXPa z(kd1*=9d&pJ1v%$xRAMlPWeH zq|!W6VIJ9O9@%Ri*{6rkL)&&>^I-?ns52cx8|8|`L)aK=8;|Ik(bQ3^3AvA zn{Pd8zEz}xTNqilFtTo;aco%#Rs%-VEoEl#xu;cd%S!Z*fmL8FV8q=*1KYxgyJd~C z^b63_$eyE-Z7H{uox$gdgIk`^^et;Fr4lO@e2(VzoDa;y^-68rvRYF_nTLa?v7|je zN3x!K7QCQ>n`!f#Nyg^K!4qH&AnBWNx4BY%yFJO?OtLro0h5Bw^bOB$M^v30wRLxqZG;5j0tflu_OYg9j*0px0s#)u;S+|sbOqNdES-OIH z9X+G=PtUoQsnuF~%eA!HwY1i?kAremvv#o#hsn&^Cu-J7aOIjH*6VB5?#IP4O|ae7 ztdqdzX;OZ@ODp2#Rse;XY=`D}Ub`P}tF_H?9qco7-_JayYMx$f;1@{)1!M)V$y$n-( zDCIqr@*Y~yo|mD`M}1KZH#1C+`3rNf+1DIm4pWwCfHsf7oNZ1rC!6<~6U@8K9F=E2 zWX?1nF&{7|nlsFM)KqhNBl9%#LGxbRKdep^c+C?9bioC5dj)jU1x3oD(XAHH^=Z2z zRkLF~-PB8%>2eF`x(gmtCkp7Q3+TEEmIAu#0=nt~y3-vD7dsd>c5J{O!@~|L!w$OG z9nWI_ggTL5X1=oBJdsaNn7<1$MOnd=xPp|8 zz+&_DGV^sh@}11D^0#5*hq}~!eY^SF_2zFG)pjxx>||oLW2N~zA?%=jFMG;7y^Obu zW!nIAw`I?QC%_J{U7coTeR>&neA!wcZg~S)#@od*=6cI2RIp;H8LXhxDrn>+H&{Ul zS8NeAxTDxMY26mp;EtM6u@lf2YWLKZ3aYc0X5gg(c;^8IDK7(5KAg+vts+05EIMxn z+K!2Umx+LOh()N!wQe3g0pDaW|jJigjI9#F>@na3S{4Fg%tHdwoj z^loDUvTZ%s#DG*Lle4l_^7o7wnb+I2rybhTedw0SymZ-8`ICt#ZyV@j0=QJ>o6F`a zbY-H`?zDwW;+8GqZ>dc2mdcC9(wF5=20{vtKN&EW$!o|m9UkuvCCg-ryG$mE%eE^1 zBx#g3f7(KOdrFM*ree9+dsdxZPrX}Dy<1ORTVDX^ch~byvYz*k z^{bUd9Cb`bC7jWCh_Yd0cd?E0io*DSuK9OC;4x_A36?iB1x-MBV_F$n;`~ z%$b+Sq+*F=af$G4$xF(i2?v+Z(d}di*+~`O`6OW6+gSnj06L~!^Hp%?67+P0+MW(= zCslnX9oP0`c=(VngAkzPj8uTp5C$?z%r&Er?)((PH$oHU<-=| zTehm;R`S9tUXa(f;8vP0{)2=W+{)Zw>l4b-lh>_u?z{q8?!}JgzLn-&M#o&nRHqCY zbG~31oq8GJYR%#dL;uv zCG&zx_@wRNVI^tRba-C5P6c-t;MWJ{L1#FxTnw1QR6dQF!KJbUH%tk3Qx?0IsS`Vx zyY8SP-obox2XoU3dRaQp6BWBLFH)x;D>hHBfgZC-<&2Pwsu*Jo$2|d2-);^CRyP^P{3N^P{B;&5zcgzPQ``sH_-lGe06v9~Uh# zKW0(m{LcSDPP| z5aOY*wn+?a`&>yf52I`-7hKd0{1wBE!je7eFX#ULp!>1tn@v%SW2f-e!$$|$+ z^IWhN$R1szhqT3jn{A|`W`Kb(wfl9Cs><0&IIPUf5Q>j03Hf}{t0qGzM+zsvl(a&|%DM3$gGw25ff#}C% z5AQ1QQ_vIK1d@UC7^FW2^s#Xpsvs4lfq@_k+zsvl&JzPK1ubo~MHO@bKLO6u(WTT6 z!3{QULKXD3aVzR=;6X44c)>g{A3O?*!Arn-u1;is5IFmS4xO$`$$1m^70O)#G@Y|2 zLG-n@S$6L(w>@-4Z4FXw^Q88cW)h0H`?XD9fJ&FH9Q$JQV!sK<^D+?gJ3zua4djUt zB9G(mQp`fSCW_w6rjLrEud?YCwmK74s;8*(IN`DlufzS&Rzs+gj=Cs!KY~F*>M4xk z8EC6cIPKZ0)b^oNCk7=up`xh`v zxNq8OF{AytPe2a4T7u#KjmR2~9{~Iui`w=!h4^`q{;h5?7 zv>8<%$KMXy-BH`!Ur;5S4z{}+Y=0x7{n_-RHvKQC+F!g5zCQdLFiX5+qUaCW^!YY@ zm2KXFD&dGK&nvd-r1xKK`>$>Kr8t)G2Z$%0`)#x1UgmUS|CFufqe?l{pvoij2eEhD zcfi~Za}QK`ZnIU#{t3+DwcMt^hARG#*yew=Rmc6GF^l_F^m$UXueJNW!M6IKtvc=x zV;1+-QS?D}JdZ?$f6R7YXS?r6A1~?YYO6i%KHmv{fK9*CrcbfWkDyAt3vBumw(9uX zXuGSl=`wGTc!H?nPgHs0gt+$U^$xlKQSD*j%Na_6{z-*zvmJP!R&HvO+r^mdFf z60eL)@{F|AY*dM7k!{|ID(>F0%}%)gZqr*@BTs#N*I*X+gQDnn+w>_mUFJjbEJl_1 z%5Ad~{sGJqPK`}Bq_Xok_B}9*y~n0cjIuAb?O%wZ-*40Nqv&ti^ixsvJkA43Jfh0u z#NPt5r28_P-rIKPvDG0qeY~wsa#VZVU17W15k)_0)8*`;JWhPloip64vMb_k&cvuG zZR6eEYZ>psIKi=2ZWE+{vaeg&oMVoGIrF$>uILo6rCFCi8)wt1ph=rQ3{3?scW*$G zp(+T?ZPVU^Ch4e!w(y+g?n7w0>;GLV_Zn!zs}MBlrrprqv)!G8CS9-z?W9dpm&LoK zdrX8D_ZKU?_Rxf{8PF1Jnh8z1lTpyx+qCY`q$`;Qt&>gb15KK@7g~3lmH|zgU*5Ve#cKG+y0Q8MJZG#P561 zI-*uVE3w_3geKG7W6-K>S_s;u&_d9vZQ40#GR?1pR%g@dpvjTD_}>%fmsY%Sm&dy~ zj;K09>t)m2&}3fO71}79)*hO?CMSMK-fUVYXeP8wXd#={721{1s-V@{v|iAD3{Bih zxRQS1laz;)rk6&RrcHp>6CbW#wZHH1$*EPVBDS*I-wQT}Rul6uWDol|k!e z(>6jYrQe&@O8P$QNkpl_O^)rR3^&(7tA@79ro9C1dT2ptr8cb!S`xHcXjL|?8d^_i z>fgzqO$$O3VV!Php$OWI&`fCN*H&J{-A&LEp=CtSq_0kaw#ufR#2qAcEGFK47N}VI z0?-xo0hwR|mN4WgYF;&3jJdy2H z>b{sAIPF2k9ifRT{l2)9aYtyPN?<~haYtyPO1~;Jr%w=7`b(k7xFhaFmHtg=GVTaX zk3Tj|#vP%FDs4*KN&G?+RqD3T1VR&4>Z+(R?g&j(sUt#@b}ckfZw5k>aYtyP-Uj56 zaVL@{dg%`$X~GN1cO*@CA>&RYP4X?{P9#n8E&Pe3Nxr4OiKI!sW!#CRNxp@Tku=GN zj5|V;w0nTiWZV&&r2XeWXwshvP12qTgeK#T&?N1{fY2H}+@Fzh5;u~UUjT6<Kj0{)q6v?$jG_sTuZp4xkAECR6CO*QiHt*d z+$D-8JpM@(O?dp%D4OJ>t4$OBPXj{xnN1V^KV;LcwrRruSvF1Ts-#8u?*-yl`eC67 z|K|gtNk1$!;rBuyG^x`<6MioSLX-YiXu|KMKxm0TXu|JRKpyFDBWa?S{x*^(d`^m@ z37@6EjdUk`mbMg06F%PWxBu)6-JBlXxkhUrAq>iiuLQ4ihGr`k9 zXnlatt^_Xtq1^(6CUv9?2<=uNG^r!ofzYI_3r*@sB@kK)kVops%Rp$UK-@_k*$0Gn zI}n=Gkpns~oG!GEk)!;24v~(aesUzw8fza*%LX$f32Ouc}}Dw86lsBWN`()22xskw@GO0pd>Th&)0Y3WO$gL>{3H15yvAj(iD(mf4!|7R&?- zK`E#Jhrx%S7R0q-yanAs3K$M@z${P#HiAm<1_*+4Af9)!P9PDafl*)n?r7vnnU3i^OdFagX23qdKU0EfYc0G2jC%^YavKr;uL zInd03W)3uSpqT^B9BAgiec3?F;J{GC^#lMB7Ys9eQ;Ld@2k+ZRQv zg3oY!9Ud$K2|Z(DN2bn6Q3 z(7Np?Z_^T|bt`cLdTs_*uSE@REaeK`4&b=4ZU;V(oxVn=uf%aISgymB?}rM#fcqH* z+c@g_xHg~QNbZSkg<5Z4p;{>C&x?JUq`2&KL_*g$m$C+qu9SNqPjL^#;)lLjQ!c5(@7@yRN(?sToz}V&;T19$5IEg0M{x7Yv{`N%*f$6) zdpXswZvhl&^YMUr+>4Hr_VA|cF(Go~Tn>;glUO-8uFsK|qSvRxH%Egsg(wD93HjXg$Y-IX=u$=iMA#-fj6my^5Qy`Z%x-Mm>PbPnL6} zcePG}N;I!CuQ!v-p5_hajpj{eFH=@aSXUcAWy;;-@42tXjC-a}nwG0+6DDSl&zq7P zNm7%h-ZOpT_!$#>%Alo4)E1ao z6w-U9nWz$06{@Uj{Z~KNjAiX+`i$xK5b(9vTr-tonUMX!^!pr|#5aB7j0f_j-!t)= zZ0MM;aR_4I=>o1voi=UC#Iy(U?w&GH$k`7}&Fw)z_m8(~!tjTuO*C2jxo6S@m5W~1 zf$qu9R=LyjCW;xOx^LoisU4zKR=H1@bdOz;radqt*RBFOXi2Dc$lr`?;>sOQ%oZg# zx5quy6J0YT?4B$zIq~$EIQ3pW2d*9FOq!Z2wK0OE#!qU;=~Es zt#`KJ4gxjDaMuDWriOpE0_O@STdzQD?w*j{;GhXz-~MSTB43lHW=pHI)jvGqNgaf8&2_zdi&pg?nx(?ts$gy1`M*_t4j)0wQHEC*_TDxzZzx!Fv?sTWmeZW4&NPR?i^+A8D&n3 zGT#|x&cz(buUVKQ^Sdz0{i-N)MU>g<@#&9XitIJ&epdHR!lj0%mOgkD#_ph0@CD=D zUmA~bkkzzL8`GxM8g3JG#Lj)raHoKApcaVxfBG?EV&hu0Y!%xT_b9Xi}L zc?R_zoYsF(Kd~4#vVYoeHdE7V_4eCGsoVPxADEh{!)i1G>XI`-jU6Skqh2?T?Kfa_ zX2#f|se}62vm?TiIPBQ9zL9VCc1hUngGUUKxNjdk%1T%NUwA~5nwBS@|9^Z|oMdWQB*9oFEQedyH8u^FEJ{W2_e zSbXvfAKQ2EfB~Mq!}|{&WVLe5Kj@KsacDz5{rV3ZK6JFi(|7Q|fgYQ;eFtZb9%=`j z=1ET-F@SJwW~X_E4eviFRU!~?D$SGCzprPkWWPRll+D;-nW=pxtLZ3?MSAMM{sTrk zChYq68!QEDx4Y{nLr6kB1s+A*GZ=~lOTtXF8sH$qtZtV7~sStOzq!yEX6rM zbAMp!sQUB`>_4bpKWOmKf%OLB8#H)0d1HUN|0vIZvBT`r#5}k^328778IhV6S!hF3 zM@A-7X>(M06TD4ty4)>4O_#mcMVG(OB3Plrjw}bUkLI_~B6*?B5&RHyG*5&U%@0kB z;z_+bn@#m@BFs(kZP>t63Qls@z+dr8J?;N<&)^Y_DuB(y2D?ZOSo|F};`U*EhxX5m zEH52iJ>6=njcK|`XdVt5!CTTdLU6)vu(Lw>Cfy3jqEkCPLkIL9#LL&PhtP#mX9Te6xL z&neJ0obXKG^ybB!a&&Wo@e)oWw&$eb_c;;Sk<)gUa+0nSD}a}Cn#|;+*j1bY>&)ud zPdL5Rm6KUlbLy%)C#tUDv{WJ|p|0nYQ%_F0-N@;rUaTJ8%*nGpoGQDO6Jsfy2D_b; zUTK`-O6P=D2B)v?;AGVRPE8HsL{uiHorZFfX}B7pveZa5N{!~M)@IU9Me%HcHRWObjKqV88yS^b@+9#qp=wais{oF)8~nyDUEk8taAmYU7{ zaxM#4`Kmzq)I3$ldBI0jk@BkrD!@6xVzr2qfhB4QX91U~-C*|s;;5l*vJtG7A7_O5zQ9aZnE z4>-5>JN2*X_ncMxH}&u8xC*Kob%GOVC+iE^V4e13^@$2`{_M0m!-=y$sz2GKd5`+D zs#Tw=&(!CfI{S)40L7(YVRzW%M>~Hj<4##x2IJ##(s1 zLEUDg7^%kXMqeY%@EGaFO8ES&>Stsa{f#?}pBn>=fyN+Xu#ssDF@_q$jN!%zBg+_R zj501mbOb*Hm)aaQG;jYgzJ6D(x^3=Ur#WHq;Gf|@eWmzM zYyNNd4*%(FM|k}EJq*%6>^?^JMjH1r*6s4>o`!qx^fhui+3IZ~qH0pR0BWG##_5;p z3G`6bvqURSU)5m$&*`k*ggvzXWPgH0hx#7HN{Mx2-sxL}X7w+ePmSnd*j@TB=wtr5 zyj#AleoFKWeHCl#GI6l~rPmUZ)pLmsSujoXUqb(%?!!dJ2e0L70_*zLY{y!6N_>R5 z21r>E&KZ*Ip{W0z`kn(G2xW|bqLti=>+LRc*Hr583 zOt3p+q)vucB!}M5nf@$|XOuF93 zuiRshl(h#{%ZMAOcg+G}mH)SW2<0%)gYlq#mChQ~+mtf~Sr3H=C z(w?-;!ZJEOF?Ybu+k~Bj*)f7IDf1e_6uZkK?5ZQ|B!5?6SJFh7VrOEv`~r4YVn+-7 zMmojcRoJb$fZdO=E4_eSXY4j!z^)5+o13r`zWf9`>0d-2`Lx8)(zNJ~ot!I>N92zu3iNHv!eL6Ms_Q#jds4IDg`g?n$HdmDYU{#~)<jZ>N@`HC%S)Wm)LZhCMeYze;ZMo;!79onyS0vuOnerG~rLu@hIBJ3Kq2kau-d!zO+@L_Iu)AP;AinB|w4l|G@Uty;7i zaP;wLeh^`27B$#OeBZ;ase0}BZ&F2}I}2sm!5panq+bDwd* z3rb}k1We$@E>UoSIgx}@gP~{%_EYzNa@gAy^=4Q2-1I--x-_L<*GvpMYb!t@35lV_9 z&g9jfBfK_!*l_!pqT>9knl@v6-b~!yK83@vsD0DZwcGybeujm$c*``c!+Ac+&GIJPR7SaJ>iy%@C^wPw5=o0Z)wq#zaCj)R==6LT^-UGa4HXp? z6%Z6u6jX|eh!kJ@OGpk$B+WFi;r};#&pvwx`R@1L|M%Sc{O^6lf&2=c+>-`drG9S*_2zU^bz;T*UD zj&kngvfjS|jy=T@_}AY6$MZTq%{Raax(=u91~}0aN3a`YTo5^sbp;tmsM&ktXo5;xKT((sej1DUMVZ+3Rpt-vDRBbvTD9ju|Oqjqo5icOsDAZi*w+k(_B0o;d{k^FDBhog?cJ;V1O35I;e2 zh%B}YO`hWfoO2SK;ei|DbW3oyVBQsIrSPf*=fZ!1BgOx(p6%fmq#*oP`Tt4(KT`tu zUPD8iK#h*CUz?76%>v&qHzNz*7!(Shq|o?We8qr|7I<8mX7V9%=Ay2(tz{L-Eo!MY zw9pS<%G$|yG!6K`fv2m;%}B#%Ra|5~BIE(Q=IEP?mM(2Ia9CLxX{*}khfvv)XW*qb zwey^oODa>?)K*somRarf^+Khy^bK|OtArTt|D+#r@n=O+8*AvtHFd37bt?_k#dU2} zwWKZ;ji`G)zNjf~YON#RXpltwOzGvd_{yZw(AvtU3vP6=9&R_41`(bhn6mcD7HQ+k zB<&%2LWAlJjcM(5_0{RM`j*s|7Ck3O6p_`050%KlmhxJBrBq8#xZrF~TT9b2!@Roc zHm=&JA2|-g%M-kE=YqCC-&oVGuQ6n|G_{ktp&6gZtY~T>T?{|J-B4Dg=cK?r*VZj1 z!Y9vJ?W>77<(}v2kwDv8)K+U~AqYa-IT?!yyv!$Km9AjHno*PnJ#8e38KzIMWd7d8Wnro0L#eQ+aIL14ejXM^b(|E-{mR<(Eo~Y4 zHa%hyWN`&K1mzf3&On^_AHbT#Aaf&``-nX!`?};rwFANw1Xl!dSJiX` zUxW~ZC`ge9`S{lLOh7ok2vorHP`eI)dg&{sl#34JE?8|gbT z*ONfnLc$V4L<$2@F#v(6qO2T{^j9hJNxzcxW(rYlP9TQ?ijmLxM95!)IKk5ph{CrM zh&cBHWXS_y3W3PK06^$T{YmzRj6afJ zPhlv5$Ui{iq`yi2CJGA(ME+F(Qa;fulFyx(2XsV~wEqP_(tcl>&sid*N0K<`KLH@^ zCwfKbD=G9L5cxZ3oaisfUqfLUfynO$Am!tKE`I@q9t0x)VF1$pbehf?bMQ%|`R4#h z`=`+STPX~t`TJ;G(9exDo=5Y?07>~|9Fh7FdrhDVz+pi0BkhkO4~Q?PFqS~n?<4?e zKlgPB@|V*50Ghvx#s&RePvcoMzaNm44^|xi#T0rGh{UG=Nc*d3I`@4E%9%~`e*h%y zC$^W=kDKEG!)gBeG~JfM%@h{W{67Gtj*^sJ^~>17v!s_ z`Q9}Dc^W6?h19Qu!c+o5e-VJt3-Y;%<`er$^0xv=$3N#wfKLL=KLaQo|8*oC`7>z# zUK$50F8w|Va|uM^2mmQxNz*GRBxgH{!H3LE((&I;^J54E{bvBu@o%8{{xttp8W;3y z9gSzw{GS0y`6!C}=Vl7Yx9WudHUR1P=hkRIo<;M&1C);c29l2aFq;1^jSKeaej1-c z^M3;*o>G)qk5|AE8Am~p4NXLH-Nk@JlfyjS@#)bCXOXJxze-MzA4^)os77Drf z7KzUwE*<}O)BI!tk^d8bbo_H)siXV|n*RZThzs`V0U9r&`PTrYL|J9VqWPXQ{|P|p_`ieZC(-G-dt^gaZl{V&ouL*W_<(+EVq5rCAB|2ZKnpwNRrPw2 z{{I|!((!Mg^!@~b|7$cZ=+`=^eN%Q{+C>{UHXnqLIe}~4cDEtS7`859uASqwypLsOj z74Syme+A8tBM|lb5xE+NLP*_AD^8W%TM&rr&oJSxY$^gmuCx0)D>{XNi;(ysqB#wbn z0Z7L0%_N?})06(4PvS82<$&IZFCuXb>IX>Lw}8Z<=yL%(5I;=fOL%&aapjYJ6H-1I z|6KWS1W5Treq8x56r_AT;#~PlczQB^x$;pFQoasxu6!+DKGA=!d`yI-{3D19<>QfS zKWPIghsbI=LNdbL2t-DIp(eR?)tc&6 zxIC?{N>f?aropR^nzq_jOU=jlE@@s0qTc|d}e~)_|@A^8NrP9|&@O&q;C3gf0 zeE%=;uH#va7iId!D#Ijh5?(jVH#9W2tkXPMW3`vBIsZ8Y-LW zTLn}TKe5v^Erw>i8KM}va9wybp4%IjH8!ni)DTJI1sHj|qrshMwN2GLqEIi~i&ovV zLepBenr|nOXG@Ers!daC(BqY!rmEJ!9c%+xBQC*1&8o=jJw5-*lIu$zA6LrhrPzEq zO3XYqm~dgk6F+`R%w|*YNa9nJoY%^w zInXo*Q<|mB7G>C?3|o|8i!y9c2Kf;mK?AtEb@I8nEjKCbw<9zoB%%CJ;A}^@P@=Hc z6q7HIuKUfsF0BIev+&2l=!0Q zMlvwRp+9rH%yCEkNc*QKtr7UD{W~;7J`SL9pfnn^_3(U!eKFt?1ajBX$rk=jyIqhE zId^ytaiQf(comM2wWCt#4|`MG5xgD2oBT*0+d&3)kbxa!UD+ln@=5ZkhSHJ)!r8p4Gev~eHKv6r{;eVoCS!E**nSu=Q} z+hp6;5+`{i5I>g0NjeGS zC!|XuzMUj4v*{<$?>>a_{Q<_^y9#^zkD&v=82%J(JApKW3kW76$pgXDe)iwvk$!6i z-jdJ3>m+!7d1HP=7f*kyuuu6OcnB#!+!#-e6%hjeA08+DNGi!S{a~xmw&D+AUl5#D z_FIu@Cm|cgl>dk1m*2Gn~dOx5RZ_9Fdv~7 zft&*+XR*lnCvtAI4QXo;wjgXrAm=-G0q#cFhj0MleT2gZrx7k7kTa>>fV~J~2a2ZRd<-3Yx1 z{Rr4xupcH6_miG%N4W@|%TXSJ{W0_j0?`k*RgfF*G7SQJA2_EEqMx8UDf`j4?@N`}pz*|4qJZx59oH zL9+*A2jMir?zf=hdjS!&`%quVV>k4^89KiOx^IuRokm-B{|H$kXn#U`5mNqzbOguxQ}qBHaYJkoMIx+IJskJDdW$9nc|cSSeq)G3IDDd zXUxjr*9kW#XY#e=>VjuNK8L?@mrIh7G`NxEU>Da6#53xMk4TSsA8?Tj}}5 z_?u(JISBI+ZsN}FL&)UbaZ__?!yqYMIAm|S7y{g)9~3_<=OU0>CX%eSj|kY1&4LB*$Cv#3kJgvfJ9x_UcLqrM;n&oZ_r$lvOu@b&Cu);B$rP8}QVM8_Rj* z7ViFiNW#!qZ@?))TspSR^*+Wwp3r-vAjQ1FOVVTnt_-TWx4* zk~QI;^tKgEvNjy0M1ye$yliP5THA^Pgso_Hql~voxU?PZYN|(jS`FA);GRhT$R>3V zDrdm8=Dg+YYn_uIJ*Cx zTd_z923l&1jEhN1Yr`p2gN*MiEUD3_r2mPWaV)lm=m~EyS3zD&>zi=U7gFMrs@k!H zZme3x*RK`mP%NRpxdLl&#udkboA^eP7>8xb<6?Yemezs2%+Od(`mb7FQ-g_$2Sj=J z-X>NU0_&p~om_u9a0{ykYv_O69m!lH7qa!gg?qlWtWy5?5cPn3XdhIXok zd{1-oKsitvs{LHoEUh=Jl<{(F&_nebAyhJq#Nkt2hiVe8+_`9B2-UVX*63T>8|v}b z9%M~5(9dNUPlVpkz%@HHQ-<@pOQD3EP8RSQQbYlliRd4!PT%u7+Vk=5V>(iQE_L|iY8OBE!=5wuIG5p z*wH}+a9w_L{VJZ$gj?0ryo&FdR9@z({CMDmo@x?oD&H-soPbmL&PW#ooyk*XN+>f; zl$ktbE{~Hd!O1n@o{C?%OSKv~D*P$R<$wa$c7 z$K&A7N)WzHJZh7K9egm#u8Bv*QG9~h%2&Oer)ZZ@w3{f}d5Tp$&MH&-YB~hC>7um( zf3O9+3gSTFQ}`JJ$KhMsR>8>dQIpP?CJ-JumCRK9qiGf~;fk|~DG92Ip-W~PvUNxl zUK%BHiK$@ZnVvx=K9f1d6eDwu7{Q!lieT;$pUE6#ig9z1DMrS>DZ~WuP~uSDK!PB{fB=O;4hws57P2o1Pj>PmQK0$sjkSwVIy9GT_fFB_hRCE1M}W-r+@LolrJF1*-w1w|H!;p8%1nEk2WdP==RpP!GI@~2gKQq;@F155 zc|6GHK>-iu@Sud0vT&!1Y^wS;9;*L(@!2OHETY&7#fYy(>PApPA{igs)^Cr>1UxU+RC?qdzZt*aAE9&Sv%1-GF#;O^7a@(%gE@=fwB z@`vTyX92qCZg>hp%7*8gMiDZ(QeCDiT2~){bGfSCT=2oVjX=Iw2 z7N(6^&a7lsGj}j|F)Xu&S<9?vHZU8RP0VIy3$vAZn0bbIo_U?QMb)gjQ?*`oO4Y0K zP^YVxsPoiw)eY(zb({K5^)~fd^%nJW>JQXA)%(;()hE?`>a*&9sfX3q)Kkq=W)5cA ziXr94%n8QG+@`2eY*4zW(p0Z2zg3tiU1hVC<#-G7v2q5!PWX;_6>mHW@cqJKoQ+9U zE>_}3VdY)QV~PXJv&v@KPs~c(;c2IMUa?29QC6o~uKHEAP`OT-qKH#6iiZ_*nPmA- z$|v!+(<0ShF$2srMTjC%F-uXXn6Fr=xL5J6qD*zaszCLG>IK!Ssy(Vhs^hBjsvlG@ z$VOCVYFo9Rx>5Nr#m|ai#TCV$cxBXdVoE0i+z6?Kw2%FL*IM;WLJQTv#E zp`1{9t3p%{DJ@mes`r#OET} z19O@Gi4GiKNDqF+e8>ERejH#X7)D{I5G0(U$mXP6qqvQe^ut^qy{kB;IIH+pAqhH4tT$LcZ2hA39_z!_pIe``?zA4T{?*#j#@)u>MrV^|Q)08g zW~oh!&0RJR*gR?Ts?A=T4{ScO`P!z(X2OQCwXyZI^|KANjkZm)O|#9mEwC-My~$Q@ zTSE?s{SSZtxgYsI_ak3|4*lnT|8?(<2i87v{+ascT6ezr&O=9!f98JjrPE)1Rq{`d)CaH`ya^NY z5nOEjki1X+J7WgND1j+u7Q*e>z--IB2cLjFiqDi@?(7;LGqCbM20FV&h8kJ<#nFMz z{(APxB`%`_CvFeYl+KGI#tFlE90NL!zX;HaGx)#D&3JOJH@bcu>Fe+Bt74U>yNAXu z8vBPg--GKY5l(@xTgWK=#>*NalqHm;%kq61c z`VFk#+v5Y5`i(2s%Ra)D{CT))|7KjHe;X}qhgiZcTEa_`5_Z!1UZf?xiUxK}d@Apt z>HADowXaslpOn8S|LS5t&xeuq8AptxeXaM%K9TR2AC`YAw(E=_p`R$9?x8kD{*C+s zZR~a-{{qLWLv~m`N--};YWI8{!`LwHMv?Kk!3pEYn6aA^FUv6f!@c?r#eD`BKi z&xxf&_A#@SrgZ&!v2$d=IM~gpx98lek{=PvYB~uTG?eT$r z(OOQ7(YjTR4GmxHY+>bV((jX{D=HLsD~>46C@v^pQ@*b}p**KoC~j8NDw@QSX7dWI zhEjD*e5P2zGnyE$QotYHtay#rHfv)y^i{t`c3knK;svT$=CsfrqKb;Q6bDF)5AdqU z%FWUA4!Nb`Q`&U7CC8(a5*?^j!jYa(KBs)KQ>;y{L9J9O-ITt{8fB|;L+8cIy`7_d zor9v3-WMMOs~P1CWrcARqU|=eFv?hE-VG=|5Gmf~^>tKC8S51bPe);wJ4Yv%_c_tF zzOK&x(Xo-C%Mv|2P{%4><~rzJbT-%Ot5kRsl3wy15(_AyZLiAMEXz>-p|Vu@sg|f# zsa{gOuIf>Zsby+wwWnIEPFT<(|3$@g@v{F!HGQ$;q>mqt(_7@zy9l&Wx5jB2*( zCLYz6?XBENg4d`vqYqfMAL00GV~i7<7!E@eBw$gqxMnH={39}c?-Z49C zZf5RhzS#T~^F!vR&97R7S~OU+awDNb_Nn?!+PFU6EXkd!RO-*wXVe$e{bogc=Xmh? z&m(wwN)#`K^p<)|{VVCMcliNyuk153dowpPjadkm6v<{VXk_N``ha$mn`qUKQLBDf zVmCjc_4%1v^-oMzTv@F!)0-_byW3>NmDGxN$UZlt>OnbhjL!M`Tzf?JP5HX7w$D0`QH_hLnbBo)s5d(9}@MvE@465Q0 z^AmJh+R(z7e{J3=(rM6;kx^rHhkUd7fS4TCs99b?i<<^ z7SR@k7K`+26pvXXS!9`}r+8ZWeYG93(-!4aDTawp(c$&Jg@N{|$M{GStJ(Ei?Hc(z z7I#>zr2}V>%rK;mto%UM23eNH3l_U94p^MC_}=2GrP9()nC0GsE(&JE%fMKCVDXtm zyXTs$M>lUR9;{<5IxPl4Vp7T$l*4O8wPf4}42_S_DyR^$Nh;XI*XGASkU5W#%VQzMv+? z`d;g;qI6R*>(Xhkmuh3}_+U@x$oN2i=XhJk#Fy6l`SgjazX{FWlDk!wYdvKByY*i- zRyNbHE3(*TKlVQ^*o@d*v(?(pwXL#!$@V?lFOGE)i8u&3O2j{vO2>w)fdSWc!TCXgu02D3Ib+YF9V5GPb*H z-{Q@19UU=`@k<7IknK?_m(bsO`^HA~jO{nJU1DKv-MsWAqFSD}UY2L4wsW+bVHabU zZdWAnjZjvTeT)5F_V-EVBY&f5tY6~n?Bi0?YAx|oqa{KP8A6j7 z`$P68MDeiH(fz5FvH#lsVxO4P$ZO5Af{n5Q2f2gF!NOsh!z~W$93FCb(P59nAy|Rq z1?WgE*PP>+p(oxPz|Ez2f_>NCcI1Ylr-V!xIvHvyccPQ6h-YR>t9D zhjYY1?~tcDoaB{n;#a=K^>gl%&2jj};de(jM{mbO$85(k$Aym7Chc3_S%r60j##K* zNqXARlB({ToQlmBoQ{vk0>*KMW29ijQ)oNWjFLKMNNN>E88wiJlsGj{wX=$+3h$Q{ zI<9xz=(yGKoa2Dw)hUW8&QrXngiT4Dk~XCro$wiN3FYZkO2?-hUvS*zc$^n{wjlIO zB6P=njt9xW{CJYk^Q1!0OFP(A+?XTbH#B+AaX3BH4l9}?37bblAUpSiz1KIDxHoxopw6s>?8I{ zMFZ;{(8M@>=hSVQu9I(f8g=^JS?z4=>_J=kooKl((pLT;Y2{C}br&Sg2P-eG z>ySV196NcEv~5s27dbC;KHv-`#&B9AFK}MyTt&+%rObmL%4@4zgJ?Y9T|NI@NnXPrNybL1v*`i(H@_L3&X z+30+gn{GSgKRd(u=QmXQxdqhvR)ve&#oHx_n2!3+k)3xbb6M!Jl(xITG>>}~QfA}D8)U^UYg{(EJmm7M%UPE$mkC#f zqL&L6=cr_vGuNPSdD&&Ji)3?Yx@3OIyOB@-QZ3{1t;>(tH+qSiQ+CvKD7L%wT^SLz zq)alXwXKY+xvM*ncDmY%O={-b-CS~yti(0gHOe(vsNXROv5q$Ew$hEVQrBBtSGd09 z`mO6F*J0Ojw<&JZ-9q$?tHHHdEV+Q6V9KkMt{tu$Tpx6Of*-5%1tT|?PO`_P7Hw`d zqAwJ49abid#I5%;IvUvz)neZTu5_oMD#xSyx>sH62*O6#$N z)}xr#qn_5IhL%!GOR1)%7-%Us#i-o-+<$TZ)kE%KL3z)oyh|zXGRk`y<$bH3@o@DB zC2HCsU*MsU494n#;XZ1rE>x*J(mg6YmU%qn@e0x4HS#4Mg&qqe*h{H${V8bn;@&Iz zHSz~M+C5ltn0@p2>Fhf)PkB7)v7O9QCj|d{kz_nD*p+KzJU;L^E)0MrbO2O(d?l$u zt%33A@)(jBj5*@2*3w$lRP|J!soJSCr{?IHsn%0n#bKH))-b56SK_hG5Ixq5()4$+ zK_Dz!`|Fsg3#KmV8GsAJ7$hSpYUt9~%@=795PdiUHL7=x%m#N;M^bGcl@yzus6-DB6gH^{aVYjeuY*gY( z?W$&HkyiX{(6)k^7CkM+*l*fLTQ)>%t*_WDtC&_d?e=N+ zOgrY4={3*mnAg`{7pFT<_nN+W`Xkf7=cc(1*>}@gX_J4Wy9@PIifR9twsqS3eBYfV zT{dmov}Z||ea5T*8rk>Lc1_zy`(!y~@Vm+H@~u`(J2lPdH4}c6IQ55T+lx<5DWB?W9I+00v)6l~LgG#1q$$irvT?k!f${2{Zb==pTfN4-{t^iXMIU9g=s(2>uP|Hq z4d!)<7pLo{$4p-^ebw~!I#zK;&rF{=y#zLr+fE$)b>QL<-qmuiYR(FKpL+z>9g5ec z*O2y1!aHY5sRu*q!)+$7Oj&tjt77`o(|1jOYx3TUEw6;_VsR=@Ik~No*G})5K17|Yl~m4cb2rH5YOFL)n(3M(O}eH?vrtndI5?k+{c)Fp(fDh$ zVkwT26;L5Rc=k$0VXWjeTn^QR<+T6qn73XwPjkEG9?dq*N1D$xU(-6RLAh0oW|QVY zqVXpMgWp!oXtrx!750L>*1|$*_GsP}EYy11lnvCqW+l~#qeZWnzg{+9GpM=Z?dUz- z+t)inXyO-O{-?K@iTNgRXMLm8ahe4$@)-%^c*=O?P5+SH80M8Si=CwcPwE`_X#|CHPaahgQio*!xcJHKf6(ga$9KX1pKtev#IxL%!1c zX-fPTn(n>Jd%w{1&9v!bcpK~eiT7#AZb!)Y-zU_oR6--9zdGb^d5_cWzll19kIKj1 zNAl7$Q|xLpso5=+2qA%1YZdL-tK+SVPrlD>7yD`$pE94tB8yx5{`RJ+zQ1p5tlz-+ z+~ISth`99ch_wqg$QJm#;d9Jq)YsOx#P@aIgT6=gjL$xw4@Dy%%e&L7su-V>K0gxE z)giyrhgztKzldV_7=3;wa{iLa*=q~tx;66Keg5=SQ-R8Frvlw-Q24s|dixfLHFK?I zd;@(G|NhGAalWG@>+qk*6!&PaLFv25x5jsc?;5e5iP!DbO17b0P{0P?C;wi+qkk*l z2g%&`u%ts0TN&TaeQ^|o9FbW~w@3HupONYPJOZ`_Dg!eD*9LwPqzuXkx+~~|8Cf&F z4ZbgUAjCm;SZ9osMRrD+MK6io8FPEg+E`V*O@bmJGU3yNf9f^{%Kak!TKu;8edq7t zzrcT+|91f%0SmMn1HJw7{0jX_{pR{D@LTLx>9^GHR=-9q8@O1<2I?c(z{)5#uqv7j ztd3y=?PJ+MLmV5pG@cEtNnit(=+*~J^;_e&-fyGdX1}d|k80TfgN_YY8p#G!0nY+> z<_T<|S>(n5FTcHhZ~MLL_krI>e#iVi^E>5t#_ww_>$gP5`k@>@l;ekT{7{acA(r)9 z8prz8#It_239MgT)W$$-zY)I)zu)|>`7{1%e@lN`e@A~8)N?uNxdQcEiF&R=Jy)Zi zx1*kSp!_>g{#_{l?&ytyHvWx{ga@73iMBd{+YOqfe!v7{uBPc`CkiQ0@MMP0k#2-0i^xUqWtZke-7n8kMehb z{zcHg1p1djzZ3MY#BU6A42TSf4M+@_9gr4~6_6KD7*HBO+W#8pUkCl0px+Dnw?Mxi z^anuyF6iF_{rd?U1E&PE1S}6&9dK8`nt=5I8v`~6Yz-joKLq*@K)((2uY&$<&>sZ- z&bfNuhR z0LM4LaSu2uz_Az{OTn=b9Gj8ujC2>IyCU5U>F!APKuJ?kk|#>?fu<+}Jp(m?et|)O zp@G`K=)m~Eq`(yL^##2j=>0(-0Q$ffHb4dX8K4gaeF*47qc;ZF1}+L*5?CEr8(1IM z9M~4PGVqQ-7W84D4+nh&=(V8Nq5MeDM}a;X^f921g{G(jp9kf%^gv z1il}581!+Vj|Y7M=o3Ld6ZA=-p9T8apic&U3N&R};17Wp0=oly1N#Gq1IGfd2L2Hw z1AQv!(?FjN`V7!#f<6oM*`Ut>eJ<$ppebHKo(G4bWnUyQV?l>KHf5Z z3HmvB%eWo%MW8QvA&^3X2vZu@bY2gvN#RgLRNh| zb+b^@bwk5L14EaZSe*yi$6YU1%y@Rj%QN=QI5gwvjIXGV^rko=kp(WDuHK;&`yS#; z(mDMtIw|k3QqJg_@pEuO@ZG#ee~L_oGe%}yA(P>0ellDqyBKU4>=-;P*gsfDi+WMy z|2pOWvV{LDl>ckkAXq2c7n~bh9&8A%4{j%Qy3#dJ$tql{nBWD$w~$Bq5ceVk z3{|ttmvDED9BQg*nW3##1wRt}Z1C&BZv~$>ZFI@IJ1>j9a~s#0D(WGvk#z?j2|g)G z=B%(n`4{}9;2(m!shFM<(mSz7c`5ix@LwS~Awphr$p5@NG-AXF8C|h}({-t@P95SM z5)(EN_D8stu1U*;1crp~-n%=V)i@tGxKGDwcI?qALS~1}4Z}uONNLE@kR2fxLp7m` zL!S!$F3e4*2w4!aIHWR;Roch1N{0ki=@@Alaz_XovNmKx$fl4jArFT<9`aPkb}g%% zqGOd#k*v}=idD*^S*1%1t8|TJm2RMR2ek*Nr$$+Zyc_aC$VVZ^LOu&Q6>=uz>yYn4 zegd^8sHcJ23)Is=tpT++sC_`~3u-@5`$t=bTn+gnR2HfXH4n88wGVX)bqnZb zYAvXBppFD}6sV))EJOE(z8(5*=m()6g&qt2Ec8_9nNZAs${0|WfI1ds$D!(p<|&}L;nbqg(<_#!>q&X!<;}p8`R05P62f)sMA254(be0XM#El z)Y%D^Vc}tsVX1!m`5h!V1GmL7fBYTu|qMIv>;ppq>NjLQofh`aw{a>Xczi z!k!6xA?%RWGHiL+>ae@Q)`YDO+ZeVvY-`w~VcWo`41CJLrviNDg3mngnGZfUfzJZ) zSqMIh_5g8lv@-1Vusvb>!wv$)4k$#mU_zB`397J9!@danD(rmNw~_3`F|fJ?tg3+5 z3cU7sCaf#$mnbHzFKj@^P8=?po)w-KUKm~)J~w!Vq9WelsXie=T+aje<^?4=2;x+dBzyd`{V_~{7Si13J|5zlB<;dh0v311(+F?_R@ zRo8-Z9q6ZmW;*b_b(Y~f!*_-64&N7kApHIC!{MKVp9nt*OdnwSqBK8X`=hh~lop86 zf}h_r~Th`flxh|-9;5ep&~M^pkY1$e2z zO9Ngy@G`(V6TGv)HwS!kV=N+8N8A;$CSrZW#)!=kTO%HgfDWkhK$j1?0?^F?T_Na- zKv#@9m4LSN9Ux`LC?Z~q_&nmWRu%D1#Cs7RMtmG`9EdxBcoz`Y1MzVb@}^D|@z03w zBmNc9710C6tH5{z7(WQc?;`)qTX;AhYliPCRa#4}oi;|>s@?NeEUS5SUkt1IV1GQT z`Z!jtou>8H`fF!s!?e0+R&^R#U&XSjGjXiyEHKU`u&VQMmfC!6k+w`bPrFcii?&Kz zqg|$L(z2?rb*u`LzUrGOR`o5YzXSF6p#A~WKZ5!vQ2#65QhT5Fe(i(WN3>69pVmI7 zeNp?0_H|HS0Cgv*FM_%Y)ZL&qg8CAudqCX_>b?Yp_MrBV_6YEQj%I&{(fU0kPO1G; z`=j<3?Sz)mp4Wb>Wq;2{`gEN_Yt;5>2f$+(JbnR>k-bsu?=cBxIhE`0r>!s;fJbr$18Nfy1BZAS~FduZniE>m!-?o73yFMRC`fjc%3So z%2Is<`Xit{2-^4G0^y-(MyJm;y1lxCI;E~d_n_`E-L6PR zcdu>}yk2kBfdtlj%3J#*S#Ov9aSGjb-45N(C{`01&1%A8SWWobZ{x}Otvzp}*Bka7 zd@GJ+4%INaW4bT6qrb8X?TqfM?gzmuStocks#->OSvTGXPp5NG&uY^|cj1LPvq<~M z8Ijt^q{xa$L*)KSCekHxy5O8_F*zq*{2XpC*&#g-uPQP(KS1eXU+%p9opw3M|(T_FJ0;D9;;>lx{Xf%MfHj(yXfrb zVgnQ99G$jwgX(nDjHt+{)TpAUol$Q``$tC!^$zUr>@kk^_8Q^otzduGPHM*HS|+L@ zYJ2CvZ+a$ban#+MQ^rKqM%^Zm`%c1N%eg2_)O}Gn0msY5e-gq5z8KZ%{!U0lD70t* z><>kCc6WEu5M{`$$GWyo&mgqa9pQUe}<>EeTDqb9p zb`Dmrkp)EmBly4WZko#-6V zD`IYmsf%egY33SUGZ|4c*9g1Js%AyZrkEWuAL*HxtufDZjtvQ|mW|+;v)@xgq}1VF z0~50+25$+3k75>Z&h-1uOw5UxFW}W*{cEI&i8&YZLuXg7v6b~HUdhBf3=tWPN*8t^Oaw9FP|tX*tyYs7IPV-Ln2 zjy)dxCC}mf_|;_-Wqp%+`VxR#BIa5L;?THUSsFPDs0*iI=;%E zP_o{!&Ppck)wn%;ayR8_9B*Fh{b1a&xQlUPaeq`ZaVO)xY3%TRB<{?`QB+_jT7xr$ z} zk2iG47RT!(qjWa67VMDS6`w6hT|Ck^+}6RA#4n-;z?f39Gs(m^#;@u%%|WS`O(yxd z`1KN#T!S-9eXUIVQ}Lb4?vVw@zZCyb{I_~0epmdv{bb!JSg;0aFB=+|_!IG`I-yrS zuA*(B$Jwsw8(2-+I6a{-(f8}X@EG=_@u87P`_tRj%2E>S5?m5|5`wwU0A*d0=4g0R zbZr@bnvE%LS0|(-+?22+VO7HY2~Srt30Vn6!hHF#$u?>D@$Q5qn)+#39$Amt~ z7j*i*#x<&o2_uQ}PEL%1`PR?})y2v!vdYBp#Qlkf6F*J7m}Hfdo3wRy&g}BpchA0e z_Jb*QDcBIxn65Sd+*mKA!l3sY1KDE{}5O5M_%J%O%oF;wu^oF(fu7t`Nkq zOAte7Et9xDaf?YUn#Xv%oh+yat3BP)A-f~-6$#TtqP15EZ*;IN(#9lymH3_Tl0-qx zkjkJ=9G%*WL!Iz9Zm=FEmuV<3FX5|@}q`p};m&PbU4U=?r7Q;o1Ev)}1BK~2}ca6g*6+DGm z-m~D@5KqB=RhL8y9lx*ei2A3XWe7$8l$z` zMey= zt*qG)y3>DyWO$}EDP}L4T{pY!Vki8JK7K%Zh&pkHs1rX7cXBSy)4vEV&&Msw*-s`v zlKfMO3g?q&Kc5_LP|SXH_M5Xu$qY3{dSjjJ_SuJLAD#XE?5^3p7u(pYqYcdL&u5?R zt7dW9#`GcbLTb1djy1Dae-S$>j_bX3vOAMi$(G5Q5lWd>tOql#BGP#*D zSwxs{=j3>2G5#_f$>fyeTS80W88JVC z%XjD=8o$`jZ?Ee6x_b;va!>Mzh!t!)D`8@sh%av8Ewr$*ms*(==agym6(VbzH-8pB z`@E-JkrJPho>C}w=W?+-zs5A5QjyYXY+Ix8Nm-my%asMI>i^9UreJusEv%3GsPR{% zoT_?2R+aKpYF%nu>b}&oY1;IEW*pB9$y}6Ep0g-tX--SdLwbvp-6`*-98EcyayF$u zWg;~=70WQe{cSW^sBOICX~r8W4;ZSH?^3!1L$ysXR35^RiP|vOP3-Joce^sxJk>GP zEp@tySqCRYd!CnEoM1bKM{y2!8SDLXiz0PqYHI32RqYpQXfx!gWsCB;g4%|$a+$@&|P>7vRj|JJ@rMhTYpA4 zB49B-QqM9K)lBNUsh^SWzO7P^2=B11gb{@Aa8tic?c=^A?~olx?c!<^I0!X;K6N6^ zHq9f=zm7@$BTWg10hbTBX=4t4xA?k{97rbVpiUT8q#fPYT^JRg{R6L7nz++Rn7Y>B@Bb zbpIQCyLPCGNqZyh?aT0&ma&0TOmlR0HIsHM4YwoEkJHo6ruE!_{6q0A!8?C@tv)U} zAlQ1NkJGu`2jVkw?z&_LOMvtj}XZZLH4|%}ho^Mr;2#mZgtiIosLK zb)+`-O5a#5ld&P=aWXfNRlvpmPBNcx3p#1SSNs@Q!yLy5+@cFRPmmems)(CkzA{+$7(ZG+#D?0+J zG95?9``VbyshPffRRXH`Wl}&*gCa93Gc^-OxG%zoq~E~q5Y2o#mnLRyZ!*tp%v_au zI_uHwx3bUV%*x3U$4Li1T)sz^n7JAMDBRUwF-VFhL_U9WFF4M7r_0OxRvQw+`p$An9Q%U9vINCmxX5bWCdnLX3fr8 zl+~(NWDaFnWI2%QPMFNAnb$b6P2qeK?$MdQpJ3wS7ADIz%ZuNOvKDOZ&3z^tK|C&@ ze%9m*MDpb_la-$}muyAx^Ntf&mqV>gR%KQlU+-emTyl|L7BX3PW!)!|IC3QK4R?;h zAx~;#vYyI%v1eqQ+~(nv*~VnOmUR%HDZ|4v!fIioDSTw8ezUJ4>-((Etl_M`vO}`x zXD`iOmff7)o_%{ZoBc}m8%I9QXJzU%CaWi_|7Za#Gb>|d=IKn}p}hNKCM&bgRAt9y&&*EA&dko6 z!^+%Gm9R3^m*uQXc{ZJuO)Y1#i?hqqSefg5R;I{evKMDpX0bABlvA60)4xWB z)iA6d*{PDflKo*TlYKP%^UlFm_A2aJ-%@ts+ZHDKo19R50wQ>^**!TH#7$YFway;N zz9v~~SBhRyD#vq;)+Wa}$6JC@C8DGa4`B-L8yXaJ|8C*oIFK&)2(e?tJYe7InUV3| zjD6&j_vc|ajbqrA!pq;s##@-2RXP9YU&Z9GIqR|g$NGFp{DM<3kzK1;*^XaZlsV7j zyp;2L&i;?MPn#ybI)-a^*oiab<+_2LI7e>bVJFU4ZU}Ub;!Lb_wn2pa^J`u&C}(@-xpl&t z>-`>MONU02yBd2&tj4>Y$z7lOfG|0}ButJ0qJOnS^sf%rD{|k?{V>-Z!|IT`gyp4HV z^A-74`BU=)^5gTf@=K2M_m`XnF(s(WPo8IU+jOK@61_5JJHyL zLOxhz89Fqs`H@^^6t_`_RS*|T9>&h9k+Wd$3RPk97w1^VWtyz7|)b%CAG`5UB~^80<=!hX`CUcI6~ zTaZ|gYU2Dn&)El@3vvod1kTS3oPDq#Q=l)nmHMY%R%Fh`^;&N8z*8 z`v->x@QP||Xarz<6kCsj;{)6x2CFH$4|nyqT9(;S%go7}bBA6rr*zJuIaQ|2mw5>V zLPB$Hozp5v=w(4df!xN)ygK!qEpv{{`Locxa7y7cJu~OgIlKCQ9qU82G1InoDAvt+ ziPJLjk!^KHz|uMU;i8ODucQ(y3|tMiPPTK-xj8?~>6tSyXPjR{OmGML`K6;D$H1J^ zaCYJw`f_HSXk;oyA$>G9hR+1yW@{A_bxfgOVFYe5kzFYaf$!!!O3Xjm=wp4HrQd3o zUdC%REGGOPs%Hx46;_J-19pOvKi0q$-d4DZz6Np-y@-s#i`>e}e{GXx;R}Ut79K48 zr0~lk*CNlNz@lwM`|tq{UaxRou5GvRGXLZx*1b-w`=|Zzi`L5g3V$l>D;zJ9iEfK@ zOIIl_ZTwo9B6X1s@1xY2e3Wh+!`HkfZb}8Tsf%KYvWgZJ)fC-Zw3*lG4(8jU6i%>a zoIhH{6qOXsB?q2-xnobhV!dE;Mp05T{`dha*WKDN@j=mQelfwFp=Z{@R6?Xju>;7t z;1J|VvWow8sGGcd!}i_uqSpkwKK%;0)MXh{^kLCwq9g3ZnV<7??tNBVvR!Utiu#I% zI{UD6oJ;R5+tkh!{aI`-%FrOz_2}xg^3mey#X-e0iq|`nY$mLi!cWEr!QrhT><7_ZFWkdAHovT#E7fNQ7#Ffk|*$oDlN_?^2*DH#DDZW~w;0L9RxUj$9w9C$vIFz{Y`I%z= zQJgAg-UBhN?CxWF?Cz+^0G3xPOFk(%RdTN6C)05`73Zhe z(F1aH4z6Wq6S%oP3-PcXqQZzI12l zp3?V9zb(B`rY@UaR#4Vhwz_Ox*-K?_lpPf2f?AV#9ppz!hhI(UF@B%Ph?mKuqnsNY z_#oepjYeZ5Q`%el3msN|w>2}RS4yw(9_l)>?@`VAJpmJ4W>e-OnCL;lL^swlW&UN! zdZsL-EVc_LIr()_?O@Muy+iG+Hi*1IxM;*ng=#inSshbWT2|d{96|>U_x5%1V=*#N zSUYK?yQFTS5sGhS%KlM?69B|(z8#yjWlxkn%T??Fe%cd0B3xk_)tZ&O8Js`)!zZ)9 zeQ#k{#+3DxiRT}7mPyY)v^6p1s&c16v`kcmHvULtdA*|Cw>-RjnWzXe4NQ4-`An<| zu_`m4Fg7a6Gs_FhOi#}_PSx6>2`FDKI7zI}V1ugs z{_2an_PIIaVkG#VslL=PA8eD#JA-Gs+o%E6_H#?Qz`<*k|O{9rN#?2 zYvlPAb1LSGocyJB??p0@Mb;=I*d7i6tgc#2Sq;!CqpEEgGZI7^SIj90zx_qY9|V z9UVcWTMz{iQEXHJK}AF?hy?}3Xd)^IktW54A@4K0JG*=M{k^~UkM~dbINt8;?C$I{ zGf#h>K^xa+uP-3=n`!#7$pNh|U4Nejd_0pCEo=Q>452^u+7+#D*zjeQt+!y_`ZpU8 zPlg}vj5hS#0LveOM>;JD1=QPK_ofO=lwedCC2xS$OQ8z5;F z_TcVMkTl~yy^Mj!i~6P}2bER|W->s=gkhq<<%d59ZFsuj6-VNJCL~U+pSjvIe*^P zTJ=Jq7FQepNUC7Xfye-&Fv#51VC+HH!8r_@c&@YJKX8K1Z)Bl@>BhmvQN{<2^NlYX zmm1fYXqk*Q`N3q4iHV8S#GZ_vjGfZ22#L2aKK?0*52a^|O*J;4);g<3ZUQoHeBby9 zA>*$I8MmpGAmaw(cN_(m5eg2b5R)DzUw%Tg$FM}(kGB*Cb3}W(12S1?@-sb3?m)Cn zR-61m5$zC~Xty(T&xIq}t~AkJZ>#P=CfmT32pG!WK6oW|=P0%YmN{+|MQ7Y$@<0PV&fHqIiT{fB_o8bG^o`Nnk| zXe|h6$0*Q7^NlW_fOa$sT3;S$2Yo7CzvZAk%>ivZy)lc1wi`fuWB$fM3fjRmw83QA zfK#11bI^8iK^vcK>WP=v#(y@plI3Lwk9xmJKtD>&EU#!e+SGs3Kn&eKH0E*%BTyx@ zNYEzzO|zck&>ofEl18aYFVQMYV6{oIdE(|po4q!Nnf_!p$85LR0ZD(!HaWn`$<_-t=*^E<3^Z(3Z<~8pvN*iZ<=p6u;^8rVC`4&hQaX zN2DeK>WI=nKpoLANSp3&V(0%JGDu%=RPa|q1y%YdK@sRJ%-F2Gc_0`>>KbV@kEARF z(Nli@&R6DW^W@DxvP^qFK=KemGeRob{Ojg*n>TKDqDjC@Mt7w(8Vf<2EjBB#5L7{I zn8W#bCq{$Uj#_Kv<^Up}jFf3_KDhb#=FH6(H$KF1#eGUM>0?@HeF>}X7-ucw`Tehk*R^H#MIq1oE_o47Rc1f6hK2riW9}p z427XG^)d}4>uE0;s-boEBGUt=Nv0X5m&qiU!=D75w=^d~=WUHi(0NBDG<{^+WG47u zxsjr~S}-HK<~t3C^=vlOYy>?cjX6qeOlhmk*p!=*3ZdB|vsGq>+`z2n2IjOKGTUsX z;67VgZR;&AGjlTYC-i8FnI{9yjwuAJWqh5|y80#nvn?`9Hp?N}T&n*t>n^mmH97dA zD6^|(Wo8e}-Z9sKQ;wnZAO(a2@kY^RFU=aL%1hkL2GcgqyQ)SB5+P}-LWk{;WRPSS zt)kK$$>HRml}Iv4GK>4vKe$iLgk*%0UnFZN>FqE<-Y1=q#8grMmt+z0cA~{Ei(VZ+^!x};V#I0v$>4Y zunJDl8dgDGE10XHiJSQj>Vn>E`hwmZ4w|VgRSj$m=Fs;9oY&=H0=fB3nX$}Mc35`9 z%Gkd4a-+LU-~myzPV)i&X$X$#!{)& zQM#L~-bos(7j{~Zx=H;ty#G2AiPl=Fxt5RAwXv}HmcU4@e_NW(6JK`L0~5fl(^WY3 zK>A1u$)#y#b|jBU9@+S^y}kza7y!?=$retq6Pd;5T@nEQ(%b~rXp65c#$!PRJV+@Q z?0h^@>{$UBmK$wVmO_ga7D+MzrKj{4r(0~YFt>29@URH9*qa9NFzHi}h1|jxB4pAn zp^%lH4$OK>(_8iwo72H4&z?ho2JuW3r&AFJ&H>^Ki+qbq7R44N7WXZlTePN`L+DL9 z#OY)}Xp=aD+?%2K=!`Cp&fq^fqqX{FlWl-FO*TaKwMYhESoi&9%q`?*R@syNUO+1 z-e!ZW`df`-ebOIVeZ^a1yV~0zLomA(XEeT~)h<>o?c4&L?V=Vxuv$yz$^+a)jV!Hr z{8XAkWaVyEYW2|Sb#=R3WaVp>Y<1QOQqNlLwAx4Ur>x7+Hq3XjE<;~yUbG`Bfz=wV z`f;e(iNh9UR*=z#jd%)fsdMxfLs~9*Px%n}2>JK&`DrlEGp8VVfBEMStd?m3g?vP& z=7i7eGT}4%6Fw80Ihn}_M3{9FS+49QcawX|_scUBeH24s$L<&f2)BeEasUgSJV+ki zObay=$rx_qzTi)JGVcpQL7fpG&Xr%4-<02#SIGaCH_AKHAmA=H9f#j#K(Jjd>3^i(SX4^3dtsi#cEgBz)5f8Ev!7Ujm5 z;0hzhPU)i&BZVY#984;Su8_Hk6s3xXifTnCH~y}5bzB(HR1TEoiWVLyLx9+kyz1zQ zbwBFmeYU8yqTe^yR@?guCRu-DJ;i#y^?J^b2DF_W+J4T+dWrQ)T6ZXAm1i|L$(o*y zB3huZ4ziB7F0_7azsl@a0t>H_so#qZkqSlqxe_)r zpx2+WKq|6vvGKCmWfKKgn94bzPvf4L1j=5SN?%(kv^ijN!sa60PeEVH<_N_s{ReV2 zn8v~J3%lSj_s@h3!Oz=Bj}m1ro|692QW+~%Ce68G4I{;YM}p(>|Jq| z$hMd5(CXGU%ndTPEmR;|UE3cU;R8V5hit#Kol4#k!!()ELOyMx9NDh4-B9(0R7?S8 zfiwpm2JkHIGc7QQ0a{yaqio}0ML8i`AKMVpaxe4XS-^LYx@7QuX5f9)4%w#J-jyNS zY}?`&bu}$e#CSaWOu+Wx#{^Ursd@J7v!cN zU6Eam-6iso`rsS!h8x|vZpf~}?iu!PWN!Vg3EPmVDLCmvHK>sFd)Ohn5B5F4*|47U zFchFhj(1|Pk&~#_cJ@M;8?v8bzW_g*Tn>SUljB{OF(xV1yai46o9!(bBhC+;9AC|5 zFDa1;?S1Sc?GIwFE}m2E1FrG(_C_m_eTsdl{bPFwOteq6zev4}rIN1r%UCKoSo5M4 zp^`sqwCZ7n?B6Q|v^BHd6)Clq0|*}5SPkEe`8Une#&!XkGo**eG|HlXl4A zYlqDep~Gm0nGS2HOw(Eu9lql}?)l4V@C9scZfSZ)*-qGCx^)_X-wQZWvBF;L;OgMz z5adbofIh}P1LnovjhJMk8wL$kwsNA#>6kRPba zA2QQ+Y-MXh9Uxdbd`2mB9O5|AaRT?HYZ>F*4|uDJT*qmSD;(EynH_I9{=}Gq!Z2R8 zS0M#+euiFiV~&8}#HJT=auzwdJ0>}1IOb6XDo3?r2uHIQb7VTvaUXBA^tQnTIhHt5zDYRmkmCc#XWUcc$WvAN|56(gX-#l^!?0om=Y%YSr{o^T7e33rj%c*AL}(?$+-uAgqa;by&4VC@v(RP1!uS?D~_+1L5H z^DXB`&d($wr*NkOPDh!(+IgI_7562E)pjE1 z$`4XXXg!2JsE~YY$ z{_5fI)y^r-8RVk~o$z-6ld{<1%=Q{T7cc*;@+T zhPi#~9^+x`VdbIrNZ&el>+f4lw{F=QzcoeD*X0M7-&|xaJ}&L9{awFvUFv$q_57Au zTh^N+m+3Ccx^7OAKyXpC6uGQ-F~Lln?qrsUn*+KO7h9JdpXgFzG07Ng86f`CCEDen zOS(&e%XODZ7ntp|>S8ewPk(ed&LF3bANjEBd_-{8pIrvvPt5^%%#UY8gwr7u1sC+@A_&+@XFU**vPMk5xf^>Y@xUUzNZ zBHGe-%lO(lNCwf~rbMn4u748%E(BH`6e-}Lg2f587W1a$V^sR>SSo_;ynMmLv1QR12TFI56H4pTx_=aqG0dRJ6rs%f2m#x1_*Z zgSJGn!C67n!iDYW@K%^At(i0vHRciDZZMPcmYOOPZMnJSrJKO5uN-YD+X7iYiD>D| z4&++$wQBveEg)#JgwO*7MABS|HJ&`Uya5-}>PFD6y?}frTC?QZZnNBS-HP0vxKDEr zk%--vxUF_Gax-(|LY{b=IWDCa?+}=3ZdPt={C5nQYD45AHy^hUxBYG@1m53k%9AK$AcTH ztHFDhRoe_9%)lU6lr~}yk;gY4Gdvb}tdby)-X33Se!IQKC->L9Xhr}tS)-KzyklF* zC5>I;HrgT&I}dkGK{B26Wv`vkBgkWq$6<}AqN5z+w32GcMHL-ZiajoPJoM>;G_Qbc*#WHYLWCe86JH3e=7*nk7*7ag;nKrInYCSm}bc%C_2*Yqyyk z3I|=$*6mw)VdB4WV|!+66mM+Z-;jHA-jbsWwh;o`t&g|A^&I56!E^hLK|6-;n6zW* z4uc(~JKlJCdii-B^*ZB~?bR;nv9*5do2~zD6Kxy5ZPIow(Ly?HcAZ17m?^MExAoaJ zh>(MHvPP%8qGsp&swR3KFSYBvZSi*P?O$x4w|(XI&D-s_dvA}~eoBJ2t=QICUu`Mc zwtky*+r@2nG#2tltm}j}cH3gG5=n-(xoz{)Xz{L#!n5-&#h;;V@!L*oH2l!D;rp%? z9SvMkplyF|YtXnI>6Q`nxl z{SrT)!qaLywEf!lKRm-`btHf zx}IY_zxP~0Gm-NNEt-qDNzWOcKVok3Pl}r)(HQgiQE0lWkeveUn7U(Div&_&@{@zx!VX&3cdX>G2S&EOZwhuucWm3?zhk!q z?NID+px4?|PH4#Bu;GvOOx}`dZ<-*?woWSC5w|0G$7xmoU@l8onFQ^~-%-q7eojAJ zYA4)LzT?>r+VV|%Od}f(mHtXF$Q`A&m&i-UYmV1aua#b|&ug((jUrm#y~OeTLa$+7 zqr9e5v1#8lf{TLSq}R8snRv7g4p$qGvo6p#jm4T;EiWoW2zjmdf_x%gCSF#cI)Y?A z5H_UhT#aqDQ^0)-hro5N`T+bg_($Eq)B{-bWM`q*F0UxB15{vz)*_l88##~_@ERfA z78P9)&ZM;(N8sdj#p|{gm;Wq;21H*DPF^p(8d*3!qc5AkBY?PP7bXBv+B?kqxOb8F z6W`B$$NQQ3dHS99|I+^l|Kj08FtI9Hb&z1<(*zTL zFGs3Vs?w_FD)6RMWvdDZ3c|Wk*0bXXO9*!;#H#1&@oFozpZ7NqKLUOPZzV!ii~2M5 zP>4c8st;;0zLOfichQt_lRl23hje9oGbq-$CXv-PLiJ?z8npqwT|Ha9gu52PyFHk` zeR-GLcLJ9K3Fusq+F6Zl-^`1B>DH57gz8=DvQXNWDjWm}?V6xB0nNDO9Jc z@2VeC9XO|^(o|8`-tFdfAe3&tqDu#MwJ3z@*WNnbUr@Kd_ZD$)h~V8GPT&4Zm)pbM zL)b548d=8C>c6}f@@VyLz>4D*HMYLzB1C_FT~$Md>Ou>cGZr}`?=9Yepgf{EDsu4* zBZK&uBkvgRcorA;AT#y86nUTV&Sr#x$NUg%$XM)xyl;A!6O$+eslivObQjBdcsKai z`ndV{`yBEq^0^~J-mN~Sb|UY8eYAZB`G6}dP5+i^5Hd&%!KY9VDlJ1k6Mbg!$<7O$ z#>Z!&&un)K{1C_Hkr6 z@(6{t?+jlP-xt13em(tudSQWl=lO1^uLe1c={w|}Vx=k>#QY1gtK03wz6#$E-&o%x zz7HhGSLwS$laF@NV4pwNyl6o<>7N{sZ;I~?ctEP}g+@M)?Z8w1iuiJ}J-?NbgS!_8 z=)Zk|F=Kli*651-2Kdc&_8s-P-`9TQ{C@D8&e2{ys%PK|PdgVqXr>Yw3}k=;ThjR{0o`2D{PUU%+CcxhC6 zvEMnr`+g06Z~X;wB@66Z}I4WOl{{TcMyYf>ua`K_h}D1i_Bm z49xb?aQYJ96f`qvA%W9A0;exwjWf&{*p7mXgDhCMMFK8GLAF8QV+V2P$ce{MJ1ay% zK|81HoVU}hy4}7=46TlYZqDN;tbMe8m#T0k2`y7;8Hmcmum6Rrxk=ESGTv3n=Luu+Ss6-i+7r^ zHl~uDzwsapNgZn;lgdunP6v+H*hizCRgJP;g4sJ`b{^V!eCO4jw|2e^M!{o(^@D#5 z-WY5VtR#e4!NMO5r|@Mm^%(ii%ul`4Bk0jl!szTQ-}x6A9SGf~_jyo)ifm`&&i9;` zx`KGAPf(!Xp24t@c9*EV@vN765RYB`l5Th&I&se{5tp}M_pEvrMll9h4cxTClQ7W z3>h9WhJ|?|4b{;A)sTrH(+E@(2~lZLgI>$`yrqKrrEl4{1zRDy0CRGu`)t|c8PZl(q!Vwx-fAof&bezahC@FS4-Wx za90=pue{5xt3OHOxXY!-F7>XEUB`Fb-1Tr*eW> zBba*WM>sg3T`jvl0(8Ix3T=S4Kd*j)GX<+!U4@|oLWhKoct!Z^cs^7S>JoZo_fQUP*xI1b zt)USt+PE3Y&;J?#v2&rZp-G`9*?E{x&%?Pe4?{CT^T|BSC-ZQw9SSW8ZFmNK1uE<< z7#&&}%6C%|GOo;~ut-DOb`OF)6VMKY{Gc?@QJGu60k$I)Tg`k zcC-4gg}Yh(*FwTEJY|V|7E9#w-b;kLjdxq@wqd(}knX-Nbbq(g?ro&|2TAvJm5~DF z?$f)A!afhn4;O_G4F56wY+p{er=xmCEss(}?TH>5{d4p>3EG{xJCCB=f>xq_ zm}D;6eQWo-Fs-mY)Q;ia$aVLl-8_r|x!^$41L3foeist{(Y!z;OQ64|{i%MF3d6n% zlZK^BP?%oWCMt41Y+~4yuzB=ne8y>T!Z|fV*vhcq>FX=F>(?nuP8lZaVK!k7SZVeb zZG!a^w1xSE1&76i9SlohoJ4pV+f;(pAAGxX?_mWLr8HIPmNOCX4_F=bd<#)naoCfv z=V2dU-^;MlFc1K-h6JC#)7x7cXuMx%(*02|51vjT8*af1IL?*j++0A^L3yN@v@Y3AP+!Lq~>}Gz8 zn=`PPA#_76yciM7cv9TtDAsR{vT(uVi1LWPB5EVGBS%DzkDMI&OQdaNXypFLQ;|85 zm66XQUqyoLpC$kjb`8EH?1NbZ1R-Fdho3B9rv-}a8~HgkU92FYzY+AXFF>QJH-?HW zgpB1THLz_V=h*I1!~wZejYh7ECG z*$_c4B;AYrHwxi!x3zUG5c#}LDU8yIni93h3PlZx8c$7qtyfVa$hJrgtPjh;E`CcZ z@lNvS4+mk?nka)P$OMVmp%lm`$~fB8PyutJ$2y@XWmJd-igJxo)lgOdP>c#v8md|$ zz2vcoZajWaR)G%CJrDBqZ!jvkQvWjpn(-cwyfeZ$W$XwCK6a z>R3hmfKZ0-}x*3v$FMh6Ika3XV~q?qI07!M|1vPB{W!8a%-r>Aza`P-LZGu zUjMzj_r~sDv)?%O_XDy67Y|g%ZH%)xhz`y@Xn4?E(m&?QnAtIlV}6NQ8>5a1iP;~M z6mvi3*`CI|gZC;WC}u>=#D-=@JD{4X!oHBKxo{%8v{Gml?s~c#-&&yyFvEjLDvb?>Vh8=DxD$BEW3mZB4n7 zGDwHcD(2hty!I8(c3Gey*LXPzWB!TxZ_ji1pyn977b5TTQ+hdHU zpQ_V{%q2ZfoYVIe;}Zc_reppbUN>P+$e!3e@q3c?r0&Vzb8pW>&DSl!uX~4I_m+EI zDDQQ>;B|$2uG6nGW?#1hzwQn9x*2$1l^1n2z)K=$;hr~pwf6R_eoc6o0@z=G9Ph(8 z12{Qwr>%vzRwk+}wTizrrw+oy7aR_l54u**|&zd|nFn)i_Cy zk6`S+*nLO#r4lM;%^Pzu!^&DicP{K7(PZH-_mAKrg-|HoKSENo3CEC;VBxoCgJ{)+w8`$5RtpS%AWHDy>$$5su!$XA*d zZ3%0)N~2X@#%0qTL{3K9oTK5qRjw4qj*a~`b_w=XNotm(*vYYTNW{G^aAdToI;^#- zp}Ceg3FtxZ3u4Ue|r)W?3%xW$EG2$yK8 zcU)c2fiDg~`bkjvu$m(`4GoYphq7I`iGE)LbQNzQ2!X69A5fS33ML+KKCt6Jz=30& zUVQ|!?ng!2p#!@PL_wZC2)|BKq67O69E4cj3O3TDk25-O`al*vKh4Sf)Y}U8T{&=v z;}F-7#s5$#K2Uw2Ic{p){J7;@hdt>%0wDEwwYw-z6sHq6EN%kc`h^LI8-Z0-%<(Wv zkHVbjwl_0J!?|yM(oF2eUz421YW>gS)>GcZ`g(XUfEhaBB#g6-^N%|uLvc=VTN#;q zYby?^rI@3Ux^6^9b9yfXVr4!AoG9~jWb!%_?%;) z!118!P}-sVLst&nJoNBTXS}vVba3avgo9Ow;w{j@u!Aua4{q4N(xhXSqJt+6W*#g& zSVr*SB0gg7tmvZFd7y!cJ0AkO>KrJ}Ir#2S-$P#=8gXdMp-G449*UeSJR~?II@A-w zJ9B`V$fN$GMN(V<0$e1R>o7ajWTkl`V# zLvH`4rd^0)4xcFIXokLOUTbNr#*rT^JPvVG^D}1kjCl$IBW$S=&%@_yn;`wm%R^O% z+6j^T`4GGR$IqmfFPRy7(p40%6F)58HU1_Qg^O(+s&R^E?QIZrn-@Phen$L{@eAWu z#2d!T(;(h9FC8|@%gX?EAdfsMPZKtIT|PLE|G{}U)~LzePp}|9F#b?{YJ5(75zylJ z-SOZdh4+RVK`_T=%t5LJ7vqo7bnop&Mn|)Q_pKwCYYU*)qWFgiBNC=2tN|;HpI}sc zZG2Pwn*@~b1+^KHo-U<=*Bi#W8{yooGPS;L0-McRr9Yfv(NucFaeKAi(1h{an*7=c zCCpA(Oma=>eT}&}wceKrzk7u*qSk z!+SWix}Bw{skGi>y@e>@LBf-SSBL3DfcjV$s2=rILJj63t8vO&*4B4Ap@X&cogpjw zREr8PtnFq7RQf{5>Jjsf0x9a~L&X>FU|OzP3Y$ z-4E}sd+`FS$6YTrcSyD!z%x zzyck9a`+`1;rAI>j1D&*eoJ^uBg$f=)-_4gBHmb=WZH>C6PG5+6AvZkBvx9YMBT)R zz&}9*9~HQ!_hWtaJ3y(4(-Y^?DAk{!)PR>bGnNxdT$8vS^INB#QKCtrgv!cY3)+0h z%Kb<#Oms*LNQ{Pgp6HgigP!M;$vjtSptRGh5-EfOZhhiOp4hs-RqidWO}vyy@9)F% zw`@Y@+AYGws>H@4{jsX!1+7IIHLp&B65A6y$@uPRXa{+S-ONx7Lx%mIz}5+|H99qQ za0M`n8tpj3&41)2M@MEKStCJ5793f@4(k(I{M)4T5neiCe8laDAHLD^h=eu_tI@V2 zwyXjIWoa-AuR&>zbzT(p`%9sHBtGe8(ubqsqq;|d3$pEXh9zvF4Lb5MX&B~*Y*3PR(g4Co&EXrq6by$nTf=Yv zM+afjoFwBUg#;xnOj@lWYufT`XhKcT{sq8LIiMt`q;2F~bNTPG;h)TNK}oSmDVjXk zd<`DV8oCZH{Tg3o2Y3i2-A{Uq9SOl%VFa8#O9HQ6o)_VlWOJlZ7r7<8lbdD#9Q~X( z%l6u%qhpTlwemraj(&f1_R$3#>o%5>26{tdOLTPk(JdHJ`k;$P*B>=IYQy0uYN62% zjKf%g1l^<1t2erE)cfcz?wPZ>7G+p|g}`b`CyfR|#24qsz19{TJ$Lj9XW25P{41=~ zX#3GS#1COB599u>6dr9j`Y!o1?vrb=?7(W-0GRQL<-pKyqmEKK4mZ=_i?S zI-I9O%VjT2KAxPBe2#5fM7LeSwJl;7)|=NZD7hjTGQv_0oMDu|wHkRO*RoAermHCV z-(x+GjXbu7gGVq2k5|VA^WXtHcO3iX*e}&GbnN?Mb8(;t+YxMS;d~20?I>5hc|yZ( z4EfSyR>vHVxgYakZwjV+--qjcF!!a$B9Fx#JHocTOt)RkwY}^dDR4eknUa@Md}7H7 zo70m|&rL1KSfAmOaWHdJW_;GAtdg^SXK!V@XM0O}9cwuD_ITgpe;l_v?tVP{c-rww z_Q^SzV5+rDjth7S2bqQV_|W4ckAHJ~`thZN*_=)>q_g6yILN$5$gVuBK&N}YLgZDPbU=9C3u7>mi5Rv(|suiCD;3<;v?}vu!SAhDfj^`g| zw|4vKIII8oiJ*4af>eCGCPhDGR*H3s6CAf3|B!-GMy5<)ruP(PznGsOfD>|ErSwht z0^Z0d-n?DcG_?=)D!;7EEj3N_>z}%EuEuPJG45I+dSV$o{06YGZ7@Ix*qI z_t<*%j06yF;xQWtQa8Jx6ThBVPu>P*2k<{s>q<|U^7^2V^*Z5oV)u#k6RjtWPr9BA zJ^A;^4^@zl2Y4gmN`n&YtXXa`4HoPL4h~<>aE1t0tq9{Z4)c63<8m3!Xz%8SIYp z(ul$;a(!XZ(V1K-6ssn)<<0abab>QSZ-UAOcx}cLaC!1NF;3!ssJsQ#% zhYDt%8g^>zsUJ?QI`zk?&8OT>MV!h!RdA~0RQ;*8Q~!|{Td{bfffl*cV=Pb2`P7UQ zM&m0xHX-F^zyzmcr|bzPXdsxt4*XG0?Kl<0nTo84mFODg# zPj5Zb>&z&Q326zU8Zsxvxgz9d6+mJHR5dT-AFJNc_dAX9~~U zJ@faO+B0ucdrU@WuAM1O1BpBpmnrDXgEN0Z5}Z^}U8Is;r)nlZX;EbfHE+^y+jUR2jJ9$sp;ea-=?zhzp#HH^~{N>`Q!l; zDfNf9qG#%pv|ee0(k7*?Ok0;`mfq)O0|f0~POVFANNoo-av>fATllSShkZS&HDr($ zju$fE&{KBWNFFxXUf=GB(x#`ep4aCwjUrt>4|xQzQhYA-kF6|ha@I~$rbVQsr`<|> zoc2+I(p=MgH3b(J4Z&p)sDIP;r6uvyzdQKqUrQU5mXlVjq08OMNGeMkLCPTMFeYzv zKxxm?AomuRAwwIkv+>2AnwsD3?z;pt(kG-(NuQf;oGwY%>ndHI&gQ?UC+o@_1G#wBr16#qpuqHJFohuF%a~m>3Vg$$Kvxb0ZgD{wJu`m8 zC@@1OV~!MM49S29aPT!$jZwBkex1hW@4>H%>;=Pq{d)(Lu`uIj`dvN@j@(1x$PKnA z!z4qAbH@vQ$dK~-IslyV)LLE{Zalsq)(&L^Wkj+`DCTh5>~%`*jFTCEWz=P&%pWr6 zSfY&di~`sqt(`UBU54HlXWV8{GG@s+l=Le%sW)+x`h3P4-lX=buY1w%j57OX4#yg0 zYG0$O_mp%ui^@U5ubBx_7{ek?a294R%KSC+58xVU#%w&p;q@UB)VIwNVWwr~*3A9S zK?|mrX$Oeq6*G?nda$d^II~POm6|SdXJ!PGn$C<-vs+NQ^V1kn$@*mGXI{-L&uq;6 zFYC*!@mVXfEV2${o#6PUAEhX>H1n=hHMPi2H8qatmB5vx6}+=y=P}56Xsa4~9JEVJ zx-Gimhz-gTXZ5mDP2Fv$o_a8A!1Jo+I=n~V)LXVFYed#)d)3stO>nu)PLwqzYev?O zSqtDS6jGW`Er&N9pfqQo^O>3eYIWLup}y-|kK$k&CzNHM*>9L&BsfVGc2e&5vowyK&-MY!E1OyH88ol}rgo@+*$=Yovs-ie<{0PLf|19_ML9!qM&wM&SxG)?rUutis6aVWa~5gXz&kG!8@Q<^ z4^vbJfne>t@ABj@(8U~g9vD?^Z>y_e*KJysS?H<~7H#ns|C4htCmS0toYft_rnZJaOvSHVHasd5-nxpPc8Eb1sY@SGO1Y zRiE2?E?M&pN4mVB|0jOc>_+oy{o->KyxHYri_X=a>!@z7ZGsK_Mvgq!$`G3Vpx&0C zJW<|2Frz|TJegAQuOTxU?BT(%q{r<=dEezt&s(0iiP+l|;Aq{2HJRXm@>b`qr?~-7 zh8qZHxD5~3wE-o&_=q3ox#R`rg%gw9tUNC=p=XiTJ%r>{tcPpXn>r_ycQo$|xf;u7 zIAi77c{lRS^B_`WoYN68qvqc)p7;|GWH^`M=}P(fn!o3n(gvIh}WVY05<%@1ePXU%P~k#>j;E z*7+&+mweCs;QUzfwuu^V+poFWIw2T}KQj)1bvr*T|6Da>OK1bvbYTs4iyJkq z4RYA$F<-*(x#up?P zY%cg-ICSCCh0+U8FTA?g_u{CF-(H+fZj`cf3sNxBAvxw3{s;fhgrX~0WynUDgBP4G zu>S9LWDY7|8D0p!5X16@+EOA3j8>ovNf&^B>9X8Lv66rfkGmfDsmtsePB?&Uix*yB zct?-V7GTIO{C81I2?slAKv0YnxJ)^#1s5)US=~VGw({mLW)VBFB7-1B^ApBD^+iGgPe2(rL`f)1LxHjVJ2)Y<$7*aVA~kw)!tKn2SSEURG<3)U1E z5lj`s$5b)Ryd-!I5SqlGINE>Hho4IV#1S@PNy!`AKa@QRatn$IZWq*EGP`7Zsen^2 zDL81$IUeI$!DAkveeHz>&6j?^WFQk2e7LmW(y~jxLc(3qCGAV2FHO2MqxxMND3LDd zT>7dOltYvq66<8CgF3dVhE&ypQy+EhWexVl(K_E+2OEg{;k36}$FM`YFJa2R!D-Q% z!1)0!ZB3A=6RVTz$=0@)d@dzm?#x?%(528zF^pDo69a8<7M)F-%Jc_cI&~?FxxAUX zJg1HLoehSdzDsv6JppN~s-DtaYn`A_(HSS-HcF>dBs7H>v^wt?&`nOO> zS*ZU3R0S65KVc({CfHc{9j*5ctgEsT6^;oHj- zE?ZxYlL!m{yWH!t4vWkV(S&jYAgRk=T-GDZ@gahwMgX^XdD`W9msehf{q1O0)q_vJ zI;=G5SBG4Kesutr6JB<{?0MOjeP=xVPCfk2;LB0uo$=(IdQ7^c09WDVQ)|3_{%2*ybTDT3WQa$cVuOV*s@=n0wt4xYe`>HipF1Fo3x= zRv9XoQWRRWrzoN5Vo~drzE{4vvf|46EAlJOSE8;QxROaAYtF)m$s?>DBPlxhsgfz! z0u@~;Dxqw2a$u{A%8H(F(HmpwFb=ie*rHl)$>;;Pi#}Xo<)2ytZaJW^D+90Sa&*X? z(4kQZbY;>N$WqdU4vl2#kT(xkef}vOYUk+C6bE$0HIeaAr2PgoJ$s^NPkPgusSMshDV1D5Dx)zAj8~KN8xWM&F!7G3Lo&E%TJwLh=5UN^nI4LrpuKOw;fbJ3Omibci!ioXEC2?Y^7K@clJ zVRsLBr=3(-Jg#_B@hVz`x{n2(;_1b6u)y%|C2eu9t1hl-Pn&lDFI-(p%mWJDxqcz;%L zKHZ&1?CW0B57K%}!c{8R;I3*bRQ$5Ikq+K^?~01sivJ}GEr^VKFS+n)|EoiQ-b%eX^Xh`Dzg+$O>SiVcqz?3WOxKt`=)S_9EKJN=0~5W~#Eafi zYdK!s!eJ*m8i{jt_`*hbb>G#rtNAR)aP(>tZ^b%uw|X#I-;H+Y>W!=aNzm0hS6|aX zTsBw#yvp0awTX*V*`|@8_a{!*xZWOJ)4BHZ3t$Uzz=^NG^xEia6Ru6awvgJW{tMpx zUcfD;sdSLaZwhp6)wSQT{^MJ?*oxIG0vyZ(@swK54&rML*W9joT?@SiMjnh1QW*yY z6)+n-ZFv#3bES{)%C!U6(yrx_UaN&A*N!vMV5yAL_D<%!6l}aU=-Q2I>Z!x+)@VYLCHk*T_qd_(Up;a7_|?}_Voum5@d8H+g!=_f7Xw0?!Ww*TJfaic%m_7dIp zC$8TdWdgIQGKTD!YVoUzL+3Tj=P1l<{C88ViZY;U6>4u!XYdZAx#>yLi zkiKS-zD_6LQ|Z6m;wvt{;c{d5jWaixWH#O%({HG6_@AAw>X=S=h3Rs1Bl<=hBYKyE zRBos4Sb5_pxxVsE)f>VPG{ffDH)!=D~O4gJ>9vBF@+YU^uOjIH* zu`lr`@y5u2=CJ#5b94gXC2vxb_1asGpWQ)oV8IGuNn*+Al5!4;?;yRUL|Bqra=C3a`xvET+KfPjf*xx83x{5p^nEPlm~XEy-_& z-HhcP9>qPp&26{9?dG-8w9>rNveFN?=G|I)XZ)SDcQ)NQb|>{t_MO5zC6b;uAKk3F z`ReAI(qW}@OP810(qU;n#07A&5%=ibHt6QZ(m^bWZ7S`_>+t~wuNu; zT(26zD~<5^23t_+>e3DL4xReL-nT=50fk7hn=l=d-#N`qSn5*hSsF}c-E#h{>uluh ziBr12G?BC#qtVL$8F}Rs;JT!!w5aqtCdW0zHO18el|C$e#%de=fGsMmD}{txIJiiq z8^A1&Aercv=+=N+U*FEzeZxi$wL!N=-kQh&Nu~dq0n6qlB6e<~$*!&% z3=^`Rw~TK|Z)M;9?6&N7#O>nSoooQ86x~wX0%a*q-!Zo27GPmaA|U@=WfOR}w-8b2 zR_HCreE{y(`u%V1;h?sd5`fhD18$wNHdkq3SnwzN54=Z%*&24S!GHe`3drFSI$Q_=qm!aE3Z!fB8V{f?q&Fz_8 zZn(_da0#befN&`GJ8o~dy$OGZN`DB|b(Q`Xl$MNpp4;t!F3-#5o|o+`yuJT+&g}v_ zbUXg`N%#zAz{j4b1GMsz&Qw2#vWuz4CbR**8K>=nZr{B90NfNPEvIVS03dCj$eOpC zZoi>BHk9eum!PX7V7b%p&hRe1%Hn#Jp+I-OzcZU#2Vpko&VoBD*xAv{%nnl?pJ1RA z-LbmkbSL;u9Cu>`SwL$2mOEa&WoK!x);oSDoOgc>*hLt97s$~R>PQEtS1Xn7URD`{ zvWds%uJ?`LfPc|FNZ@|w<(-y0|K8QUJM!-Lcc=t<3buRm*Oi~tf-|D{dzUqF#{hQ_2 z%U_rOThX&(_yZ*Ab2s?zp1TQmkKH|UH}`JY-6v(jGM%#dRWDd{vYMsLXK0rFUmAJ; zz+$uCf#}{XxO<%t-7|#f{=k9S*9P5vez$`~b1&{T@!%cBjM&$FzmDPW7r zzA78bJ;#R|vgc(}c#p8<@lSXYcquAdS7wOOQ7u77ZWgG_s?3pqR`4I7qcZn0H9<$a z8FbVx>ruAvUc$YUd-?Ys-yeV9MBcOPL|JB8McIpclkUyC=YDS|L5ROR!)Y#LsO)0d zHBwi`N0J>HyQX$R#$&SCn5gXSJ;A;H_jJj9<7WxLOR>90pp(0J-Ma<<4G3-hT$g$3`jf)L6*S2v{Fn0>EK<0Y&Sq0Owzqn-t4PZ zqI-q+N=SqCUH!rRorL#Z-0yjRP*p8Vr}s?_(7xqf2jQ7g02i=+Dk;3A%`4kK^@e=k zicP>)!u!+j&%eK#yi(l^`Js6^uYLF@-Vmoo-nE~h6kxH1umG*h`|gZ{^j0ChA98=s z{loW9+|S?^nk&bb8<3ZoH$r&0m1^7%e03pT>^4&Nxc|6(RQaUxndO_xgUh2Ve8iRa zYwmw27ZSD9?EA!XqGLAcTjl#E3sl~xd=ROCopZpakvZ!a!L5V9I?|UQ8&p28d_B9e zYRgyfmPHJ+vP|g3RBl!7#62W{TTCy@`S{Pijfrh)^+4tO%VAfz^7!%;cEJb2D^tsJ zm`5`%v7>+>&8qKu zu)?+?q9X5EofWEZsqo?k*QTzit*!=g{c}}z^^j=;h;T(*#WAkd>eGe_3R6`SRov!) z>&F4Nx`MC&wR;awY^r!i1~8aqVs^flpa;Dk3}i9x-!!T<-5M&``e4q(MGsd!bblCG zdG^t$N54KYd}Q%R^(gSs-bV?N-VfG1FnM79K=HukLE(d^4_-YS@bGJH4qH-~TWc%* zI1^3`HIa)R?069HAo>B!cv_RF>0e%~Ko4Rcq-bD}&a1=>yFn8vU8}Q453WC8qa&wi zV6;>M5S9Mf*VUHjLF+@Umq2JpETB00HH=;(nfg&JuUW(A-uHEo1gYZT*oU*p@|p2a zpDc?RTV0u7d6k3wK$)oWZsp_3`bwT0Y29UGtwIiBGb~W$ zzmIf21?8SkK>0)=eDv+3>5mq2AT{Jbngi*@$V@m5>?uh$7tI5Ku@XJ9e&ovCznQ!L z0>eRNk)()>`5}yCqCe}39wk2lFFrE;+4OfR{c{3=AWA3@9EUP^lt6F_&aWeZARo@Z zg!6bf{|e5(hO$Iv>mm{SW+$_f2rQi>QWu5NULf~ykjv}^b`q%*oY}bw9Ar)krG->x z?;>-OSqPjRBvP5+52@15P9l-wYJm&?1fGxow4wBcG8oD*D5If_gEAe;k5HCFd3s5t zqjy=PV^%EEX@>Ijsz^uYnn*_w-cv^q*;D7^ik>=hhh93+wEM3c0^JbkhCnw2x*^aF zfo=$NL!cW1-4N)8KsN-sA=}Fan2mgo3#ngSN?eHupY-8R*KRDJ? zh;>rmh;)X+@xnH`oj#nKLE$ykI5flU-fG?>aD?~$AKrswL&EIEI{I*r2qHy36G5y9 zg8$%8B=`!BwW0Kc(i=)&DE*=6K=~ZXASgqi426Q*4uhi0+>7snXTi7kWxky{M+oYn zjyzX{BU1zd{mE0NPMbbs=B(L2En2)}=`wOJbrJr0U0et!aeEI==`T>0U0et!aeEI==`T=};YUx2431t+N(NM-f84G0`ly9JnhcZE+ zBl-@CK9p%tW*3p?H z*12OS);T${r;cxOFP$*>T?jB#!Eea1UOG!g_0(Ao=lO8Hga_N^o-hZ$5bHc0F4k$D z0M7ter}h!+tmzBzvJmUU!|xh^rNd`porRx60T?}n-!OQmU=aMmvDsj#Ukr0>1DqSc zuQ}B9g6F~g`m@D41@oZoLa~k>l(666dw|~T~C1H8Yq8Iun`IHm>EJb26%0RvKfjQa}Cc?b0`+fxgNDP z@LDG0tpjsc2d0vaXb_a4P;hjWK!DflQ&{6`Y@okTQlU^6y8QPa{E;e=06#|n1&(07 z;Ai7MkzfW}|9@JCLv;oThV~pI7^?l9pqJJZC{tm6OoM_Wyaa;ppy&V$@o|9_zybFoX1bNa93P9J0IGJw#~3F`!SvoW!kjtJJ@EI1wy$3v4~ zEgtQqa|dY7NBG4JXF&;r^@oq+ZQ=W&;Nz};7@n$WuuiCca`Oh$p3h)D5xmWxuNVgX z&=@G=pp1v|EwuX%%J*=r4`m9JY1FG00-ac+q~HD5_W#bnoOl4mpld(6&;S300OmcO zUIEw_!+eL5dKvH|{5~y&UpO{{qJl!+ir3phC__(Z@;MH04{3v+nR*r05EKU}PvM#< zr5CmC@x6NgmwTW7zuc?;f4NuZ+NbX&{rdm<>uje~y2t@%P`{IGr55y^-1!!&!a!kx zn+bk%a8XDlw(AsIWmNq-TM0zV3IqxqO6%Yxga0ROkvTczuv`2mbx=A`2fY85Ec;pE zWIM@V#w3Fkt0yg5hA%-K^g|(?v~&^M66!pZ>*UHwzv4I0e@m7vmnkN#vY51dC37df zclkQzZUY)q({-y9_ENapU@CX-I#M^2ty?Kk;CHO!zn7|`@HNv6-a*&#Urp8VZ-mB6 zmcbjWCN1K3aLKQW$z#}Gs9P@aSS7PixZ06Qx^9uumKg(F4|VY3Pul$oeb(&XuZw?I zy4qXt?_TaI`9mSGhx`9fEMQ*3)U8w6Td|e6$Kx%PPI@cW{We*D#F|)-i0(7r%go_4>!rstSc zsZW1(`SUeE%q$vJXOp45G&=H@VGn`e{y){9;rhA_Mz{R(1%e@MPTou5P0L;xQ0>j` z?t5eEC=kfoN0s3?@zt-)>E~>+u3hLM5KMTx#{EAr(Arm%sQR5#hRloggE;QX3yzmS z|Hi#CrRu$}pG>OSArQob?+Y6Ngn_*G#~b>_(lC&G#vK_5m)Ux)ke5gI25Hut!TZy_ z)8p(51cDn6YSwu}`=PHEQ_t5A>3!}LOz&RP9=2|ScFWoy_vi_~VcRCTlgAeyO`+L2>ZX5(1x>=wnYzp@zIHhGoL}8i7M4JLOv=XC z{Uf;glDc{Qeu8>Sx6kiGu1WT9?>NOT%}~E=aldIdcM^F90t;ZRi{8sv!7UOK+; z>j1xZpgs(KkHNJl_>CXYQ%7}*lhw4ufE(Z$a%e|nIsEK`CZIu3bY6*dY+-)Pf^Un5 zdKH}OH$vawT0E3yD7d};KfqhVy2Qs%;df0P++U0Nvq7v3i)BpAOY?a^+#d7VM9#%> zHYIkR6;!IR=2b-0s94dWM8!%eYWj*wTiV8!DpIPcQbilDsil=FZQuVnvzu&| zaH+lTy}x_!F9ZLanddy`W6nJ1d7kqzv#FyLVH(V*r5C6g1HF&*QGh3qK5`ICd1zgz zub3YHXZm1iUMF<114Bx0Vd_9D6M8zPkW9)MT?j|jRY)n6pRo{^i#QnV8a;ZnYvRNl zlvy~D9ivAVl8F;XgOOe$y7xdX?4YS>PArQ;muqyPIB_D1A*|*!Zr~$l$k5zj!}Idf zVJf>*2CmZ_Isd`q?|=IbX7B}*r*6Ms=&-zkGtN9~^cPHi68pfdJV^cT+5*!e(PSW4 z%c@ruZwywgi3RCJGC8#_yvCu^>yF=3jI=;A&<>DEd4(U2CWWs8G=DmO(*Yez=Wli)r25zk)MFm! z7_O<_9r-=zXVCI#2>rYlbefhPomKgTRAWIM_a0DHy$97_hqHKSd^XRKEFNmZvw3>5 zc<4MsHV;|czdp30**y6v9%_T=F&4zGN;tTTNE-B~;|K9h&0J(k6@YXF|yCH>2SdwEhmg(;qN z{^0?5CS>Ik8-S-Ii-(SM(s|;P-LI75DWC)#^tsb}q4PCVPUv}A7EeivPG??dI?7X( z#bc)EG#|=Gc>-BHaDf<|#-EWoZ_46nO3~BuLGx+O;-Nk)rDyVN$l~cp@lZZ`&~Q^0 zPjiY++hA?#d}|iZ<_w;%rOuC}c+%d*PSCU4xjn^`t|Rs9)8{y4^*Ih6N~3dY^f(G+ z=0oGEA!9U5-v@^adYwM#c{q!QAAqMb#gndcHF&bi+JpK~-Gd=f?~%<@`C>sKjZfF7 z2q&35lf7jeRb}D&FHOc>V($Wo59om*MWJ=44$qJ2IlEm z+gDZ_Il0cXtk#S=mkv;8dhh?}LB|OdU|tUU3Q0-B4kn09|`#5fmxB7XaI9Lv=+0P@GZP#CWR1816BHyp$OlfOahHD5^GG7 z`DIJUOrR{72-QWF1Z$GfILj*|-$jip;&iomX1zbYC>cj-&f2jz9$Mv3GFOkxXbgn| zlwo>2?#G-AJ%YieU=6~Wa5NFD4TUKuy^FF?oRyPeJFVYE^E#d1MR`u=cTt|x`CXLf zbbc3QIi24{c~0kdQJ&NJU6ki^ei!9Ao!>=yPG|2Z&*|(P@*`3ULwXCy*89xC43H{R*Z_@uv&BbOW} zV{l5ZM`7M>9316Q*jF(Q^%;eExpBDBF<8SKgLT|-^(+a}lwjQ(^+&ofnCI(_Pe~G; z=c9R!!J0bFi{>*5do)I2kA_nwP2)30L|2DpsKOhl0WlKxXOVx*l9k zuhE=j1+e$W1!V8jj(47p!{cY;`;wm&kdkK#2ulFkKXc^v6cl#+sDO=ah-*Z@x)AEP z4jzLo@SoHIuWid5;r=HT^4~n$g^S7-ExqF5>pwZVVCLp^7jCrnUin?x?PeOw7bmdh zzB~|%M_1wN)yv_TuS`Z`%WLDoU=mhssxXb`rg6)oE3Qr~hiVapiCxX z^9pwWG~aakgBj`b9?mNq5779*9V{T%jKLfz z_QTwQu;5%meg`PPeP&}(tt zjPoBN%}cocBf>+#$KZV%VKw;o0)I!`T9k7Uc<+GGjUnCFfhy3-!1pH3hXBhE|0%*v zfPged5&94|fNwwWcch&Uo)t**Cu+QbFs>uusiO78HQnt|g!A(eK8o}gf%kU6h4WS5 zoeQ43QK!wwZyD$dz-xl`1kOuA`wik=MK}}u`w`a#T#WPU5dRg#4Mli1XtNO}kgg7S zhEUd7z&)Vdg)olzFwQSTy6wPv@I`brDC-7<4*<6UpMzcpo;;-c3(^(i z`V8O!oL>RnHsCYhPrwS4aUw{b&IY{{ArG93Ja0g_4?GVeehu>5iue$&YY_eo zcm#RWBV2?$z65?5eDi@1fNz0+BxqM6)Di9hEsFE$=u=C8df<9sGw=lP0`M!K8#n=+ z^XmdK8Bl<^KrPS&+zhk@mw^Mo?|?r6d4~(gxxj^h23!g(2C9K1uo1WuxDR+7 z_yO=E;7#Bt@F!r{ZwkmHzy_`Ynt)c|N#KXTTfm3FUx0$Q3djY32rK~Nz-HhH;AP+q zpc@$Wb^#d&d=;>PIlxjN1T+Dyz(c_IfmeZF10Ml@14efhkYYdu<^n5#)xd4Q{lL?} zOTZzZ8_4-B+5ixM3LpsF2y6m&051cFfKLGOP5~JMOae4uE^rla4X_^A1hfM`2R;B! z0Qv9YUVw`L8JGoB0X`rMTnl^)xF2{5_yO=T@EY(I@DV_c6p)d?mjMCr0A8RPXav3q z+ym?Yehj<^d`Rzi{4zP8T!1;_iDVLfiKv)dh~FZbjG4Tz zkc-JzF|Rn4Oe2?IzL+Nh5s8FfDN=}vcOZ0P;Ma;wViB8oNGX|4W{{cKOE`;^lS{Ey zIGfBNb4ewchc~nq5HGomEF_Ca6Cn` zgXAIdFy_P`A>Sd7l5ONM@;Lb}*^Xa{dXnrQ?c^!)G|)R@_n+K{DABs z&yyF(i=>16ko;fr64^^$Ca;iJ$v*NU@?-K7vY-4EzaQm{o~H%EVNzZ-(>HUTKQ_}} zQy=tIMx!gS8rGjUKe(DvW;gijf+z8vL|ue^^uc&`igYIP{1N05_mxE>LB^9NI7OG! zU#z0V_b0P``I+SG>=p(aFhxL9&o1kieqk^XOft&+XdviY9EoFh7R_nVj8O8Vo5?0- z+)H1SQ?_q9euRsz`T0_n^Gy!~d}YB}e`7f5n->i`?MgkevGoul_l|b(=%`r0?Ta$5_ zYUXt8tcDd>0KjjC^(B}c31y~F-Q3JzC|n+DqI@&M{zM{FGdCEI_{t$V*|a5CObF1m zPs$r*w_Fxll}b#@_oW^xd*&<)wss447JF$JKVwD{v#ZL`inu?{Zh>9To9A2Nr_$s^ zr`vi~JRXhvoE2CaNsI8!tPj?#OfQ6ZQ6;)Ql8(GIn51j6$PDieBxgqgL3Vd6VOCrs z^%S$yCKlADl4r)GNQ*G>L|2Uam6(b{LRxljDsMbWm#0IHfUqho3MLmvVyw==Km}eq zp$plx?%`-Oo@z`~6VkNGA7OpOmvPAorPnjc%Fzt|IE3EEdIIC3)KrUxi zh{_dO%#TI+RPp7ZcmnsDYJ6I8xPkuTg4nZA(_2OFBBwcKM{1+#^3t^Qj)qi4(`5Aa#@^QOMia?IO*|A! z`Z617A(Rw;fUx%#7Ga^%M;~~VpUE`6RYuE9)Js5HHulL6BUkxXIC_z#Y+R8R*}hs= z;WrUiX5VpI75HXF>O#;%X|+RhLC^F}Zwe*)iwmWm@`2JwXK%Vg&F&^4(h?qyxDI+9Z1EN4nb9UM*XGzPt=nKPnH zr#TcT$LLDuQ89k!dIsb)RX;|pik_4)+A@;BdsEEtTzYLN2CIpmjl^4U2_`ue{)7+W z;FLliA)`_|(oeakG`SC&t+FNn%a#)Af#^=xVEOcqzBCwZfXp(jm5y1GdJhkhSqc3^ z4J>UHc3zG?7^W}rWf1yeXGgG}!1NGfo{bu%3>Uk0oQU3}i7K}JbFlDHF37J-!5_^*`XiSD_=U~Q@7ST&c$yfTiEJ%d_+m|w#sEy9N z&XnnN!ZdB!<(ZriSUiqUAlN67=>&+v=_%uUGg5M%!Ji?-nbdTT$fPZZhhU$u5e%<# zX522CG4s;VVf`ue1<-zX+pnjj%V5NCO0K-{g_H0R%lt_{wJ$WoG|llC`cs%`3f9Hx zJCEq$uyicm@fX(g=8(Qd-=gsggSF7Na0_~$Y9A#-cpUjo`KC@fs;K*fZDA0a2R$k+ zPVCjol!Q99Wjz5VnWj!r(#)s}i|tLFCiJo=p*~kM*7+(h%5XBE6vtui?-J3Zr?Rc7 zxPdisDl*&DQZm(40rboSd~U~qqEv6FDHvu|X4;36GR+sg?)Q`_;gnV)9eIknQ8UO) z8EWB}u046lXpMa!ji|Mec%2C*OGD-Ms^m1Wi1QLkpk-=lI z1qNGSumuKNV6X-L11<2>xEIUjzgPMLng!i6h2?X$PM^+laQkAqCH{AYzsMg!dVt)5 z5u^x^fcZcGxE5#y+JSE15bz4{J@EfC$N1qR$Y;YwkbeV?0Ed81;1ysG@HDUu_-BrC zbFklJw#KQ? z2m8&yZSzI@O$BKPHY6}$#acAZ=wc;SqZ7$^yrw>mRcV~zKlUDxFg{^*bpz%AC|?bx zc(H~}&%lNiZ6ESLtcV>(#OF&S1HL3(^9W%+!56^PO+32B7sjM0cDE2;u&E}9srh=m z9*GrM$%py7226S_nYnQB{HodWX7Lio)_}3rjg-k~82hE@S%ellj$D(Va{z^;4qrcu ztim@eNG*GPkzkFxHj23ltZ!p2*&o3Ac5NaUT!}UA+GG%m%0+CA8E@W@2CN=M@v6~y z0!DUvn^OYr@J#0pLeW&ke5(>MtRf|Av6_!N3Sr(1bI^LAWe&epe3PAaChF@iN;v|ur9+h9#2CieOzx&U>FCw-V5Kt|Zdkh=0+(-^|)1S4Xv zgRjOpyPD7&WQ#_`9}7)wNKC~P$5iAn6?a4@kf(h+9PNXidd>Zs8Ast>UV9=GxskxUm z2IFhI!8l#ypp$`YnhL8TBTmkJb^z~G^_5vwPX!)C@;aq1T7#v!hAQ0N^aNeIr)T8s zoU%}Y3X#K{nt+`N@lTMsL+Lt+Ba(~gq61woB6X-On;ON=h;%JqVEHHg@nmC+P8TjE zb(G>P7*?<@y%c*IXDysRt5Ou4emt+`fl8*J)acwVDP`9 z1%7)D4D{eJ*aEBthA?4pVXHU&u9b$6k$e9*-yQT0K&S88;(&uxu#R*h{bz)rY^c*q+qc*q=Hd*R%1r9Ov|SKKJ9l z(RRnI1G`R#9(LvYabo%i4}p+_oRiq88p5ts?7cx4#*Wt6xT?i2Rzj|4JRIx>2Tz-Z zvzQH;gMGO<7>z`+-!+EuK?M6-=Ob)DYI;;bT7uZ6TaLVg_*aGa7^8SWiDIv85W8nF z48gGkK5tHM*=2}HAdc24296N8@$x>7a(0$Pt_#5vVS8`WHFsf*6vB?&IO-5bS@f8O zeZ_tGE9(PAkz_FuR`b5r$u5Pq%?ym-av+~h?o`6) z-KJ%XUOCc|opu_^r1hdl8IS`Bp-(lPvQIkkjtPOHL95W`9zm_c2s34-AomDmAf~6O zA?%_XG%%E~CiBy{$u4Y&VBZ6>CNHikpQ=rE(Ut#z9|P>5HF-@iG1+6EIl{!|)?mYm z@ER8~h$O7Zjq!+)z+UJEe`0Dws3smwL~H4QtikXn8m6t{C%Z6Y2-RY&y(F_VWaV<1 z$#`P|+gfU)soW-=CO2^sONW#R3@76luBEO)i94Gyf&sb{4`YkEV4^oNGkO*qiQ={^ zgR6pJSD5~_Ci@fEgGBcWOm;Pfrq|Gck~O*3A5H`(yDsU?$Gqg!rI?rWtCM+2@692( zc}cq6a6uoy;4#<&gDvo1-vTb?=aD>hth!SDrh1?HJ@pK&QQN7Vq0iDEFy1gU^BMCO zX0A2fy3%^qI&KB+TIw{wB+_x>C~6u@op1Wwtv;;2pzhY*(uV7AS)BcXjX19pcY}1N zv`w0<2+Hm1J!++PIh;!vHI~P1f?|CG!l~=^I^!M#FS0<#MHiIQ4wXeiyMh z?3*~Rie1X@l%Kl~xN|%sX`cA{iwnVIZnt=`Bxt5lYLpojMx}ALl}F=UIjo*n@$YIM zYV}6gh#5(v$yjSN8|#b>#zuO7_#h^|-x11l?n(A!o0R6T_9^ARD-v%GyZ24p1KdIW zZJx8hSnbe0<9Dln(dJk?C@q%5zMa%1{7(3u_^32izC!*~&Q&UvTh+a2_nWj=wS4^r z^C110MYD4+tGOGwd$}I|8fm0Fm*&wzy$`(q%T3`pPU1AqnADK6ijzODXU8$sK>!?}M$z%Ygy)S(xO_I0Ed*rv}O2wzFR}^)+{=R;u zajtQJQDX4MQujo&(z@K*YCUDWXWe4|U%S(O+y1@%i9Ov@;klp5(GYkyc&C;-pYw4u zg(bpvVZZQ^a7;K~TqgR&o5c^r9&wU%l^m3B(Y9(&X&-2R)GpH9dW{~@AJo66AJ&iQ zpX-w0Huf5a++Q*$nVZc=P0`A+FSGMJU-mS3h-(NuOuWa<+1y#YkH1rRM>sBAEL!4K z;!1Unc1Rno7wOyd?RvYuQ_r*K+n3wlv7fLz?4Q^}J!gB)_XIpq&$}MNIpakSe>Fc^ z`X%HQzrBWhU*+F0iFXK-*PrtT`7?!a!kyxCHmM%M`p9SMx!Re=5o5Xev1Qq-?RECI z?Z;>v$A&Ojc|uws-!8u)za@VxKd7kcbC%!!wf(;5&$NA-9i9?V6>CLPovAKTuTXPv z=k5C0#&~0*G0h+?Ls%ajCtoVp$}PqY>k~_(`L{Xsy;$IdU#YlmAHu#x_AhSLUE%h- z58H0fe9s=wL0V3SQ`aHf2|*RNNNv(q=&$WkyL3o?1yVvfoxCoy!q!cmH$9}w;TO5b zxW)V-K3~`@oGs1~cdI4Zr?gM?IQ2dxeW=W~_FDU_{Z^-S0J3_yU2Xr&{-u2gr4Ge= zig;(3tKjnaukaE6`@#VsE^ZVX^k#j%ex?dDE%7y4C)x!2rh?ngg30G)BzB-~Kem-h0!;1-`2UDAWnW~E78 zt2V3a)D7xJwMA`JH>q3Hi`}K}*U*o~n-`ch<~8Qm(O2&^zhZNclc7vbUZ*+;KUP9V zu!n?EqAfzC55Pq9@m+~lW$7ZJ< zOQ?Qn8Or*^qtYYFW-X>C^(N%itgq8IKr6K9t@amW&E}p=Pqq#O|bMhR=D7Tf$w!9p_Kr<LAN zshVn{_x9-P%-hlDA2vf)qeZ%gGF|=x|26R=sYJU(tJVTqy%yGD+Nav9kmMLF&=#Z3 z*lKJuR=ek!Rptr21e&mA%Yfj=mDG>+P@|vy*m{z1D7q_Sj%=v|FI> zH`!b4HhZhR&E5{ZdcZztAGW*fBd`PAc8`6`K5nCjcyc}Yu-Jv3v7RE&1dq#8>?!d~ z@o*l=qj^kEsizE@xYFbGRC$&`+Nz=J>OEmk%#-vqdDeQGJ?lIhJR3bNo>mWu(Jvh0 z+ZXaKd8AUP{6cwCsZ_mcmAXt_u2!plV7rjQ#N3RuPTnAIlw0Ihd6S$pZ!qsb4;*2Qwa&Lnm`=)N zdU6H7R%jO1rK}?ol3|Qqr|;0$nAcfPS~ojBAHMoY>okJ9m;V|6K4df`d|$X({*pRh z{i*u7I$oQsm1&o0@6)_p! zXIx@j2Ftb2*l%=FpQw5m({;NfqQB+#LOPe3%gt&tVAh)?HjK$z9se@FUTU^U^Dy>2 z!d#3?a!uS?u9;iMZQwR?EnF+NiQB@paa+07{CPr!@NM~Fd8hoc{JQ+U{5kxi=hb&K z(&m))AwOTNa4+cXrzhxZ;qAki-pl3B;LG`Wd=-BSe<%MS@AOYjfXgSCLa9)Oyvx+N zYNvicKL}ggr619sgIDT;Op^|$zF*~cid9Yo#x+7MT^$lyIb(ckYhB1BmsI*KjP`_^64%ypb zY_h%!UHB{OU1+J{=w%n#ZhMyfwx`?kIW2<>XYw+F8^@J!Dp$@e&af3uTfWHb4t{eL z+#VT!T+aDxR8~uevuFKH$l9~;eoUoQDN`zxLX0Vj)CsCf9ib8La3)i`cbSQh3eae2NQ#qgK?TNe)~RkzuKuD zP!Fny)h_jjdQ|OJd(>ml2q*CAf?O@zUY2N6G)|K=O*6GpjWj#YYANkcEyI})b_>5z zYLQx{O;Vq4vtEB)Cv6VzYHPDi+K02gSLber&AZlGXSG^~td(|-NA{2ohmVbII)^ho zf4B08@{ICB<)?H}vCEN(ySYcW=eU=-Uvh7A-NN65k>YsqBJq9w$0q!pp5g4b3UtI1 zBiG0`GDi@_@R+9kI~Vq zQw|urseU4POlBYF?h>98K878dEH9CFE5+_9?uXouxz}6m9)e#7p!)82+)Khxd5v74 z+^_6bK2+{e52^W@p>@E^cIr0HCayfzuG6{Q_^iaW$nAaiFHGv0y>CCtbX^{6%jft< zg*n;^?U&{U=Ee5Yp1;z#(md9F^%(tJq2A@*>fY%g-aIzm8Oi+%cO7?x`#pD#FkX05 zD2LAPe}9*nBkUqr$~pEb`)l@lG{0)6F0V_A_eq6+X~Z1k5o>SeH@KDAbDKrgvYy-~eYy;Hp(^9zruF% zFZ@d7GzHQhPkMntWHd6&%m@Ql(JRhnIuS;X(^JPKSdW-2^niY~9>aaE)xQC+^)~pd zo8hs32jjS>^ z7xN9$>BtGyCXOzt&?>bmZ5dj-Nn5Lt9!G9z|8gug8U$ZzIhKR(F9|z^UBVurL)a_q z!w9xhI4pDtM};1YWKRgWV!l`?7KszYVsVPdiJDjnZ?aOX!Wg$&tQW&#Qd}!GiyOoi zu@z&2t*jMyiF?Go;(oDHJScXFN5pRNn0OqYaLJcON@Jx7l1nO)AcT^MF-?W!m6l1% zrGONcVp5aTEUl9^GJV&^#&J8PJyM6XPwJEoNQb2((ov}gI^cwqE02^5m}SUkR$&73(K+Uy zmoZDQ4BlZNWdrEQX#*QIZBeQ2r&_;*Y5W6B+aG0`{)9@kd?6bV6*KLwL9>^oo=0`c zqffHu(yXo1HfS5Q7Ohp=q;1jKFi)^e+pe`^R&STKN9)k`YWuYPTBmkEJE$Gjy0jzO zQLP*O z7z*bM)$g>$^P2`L}A6*EKIFz?dNWSEFlT1P@&$1;g^L1s&s)Jl+BlSwX- za+wqsLJm2p6tY(hscVLXZIjv|XPr_P4M)<3SXrf{z)@rtPOrh2Yin%_!|V$=;Vp=mKpbbyG15dgOPnY0{y6_ZBbuaY91~#H?*E^sW_CqgFf0aJNe0)m?V=?s2 z{&!h{{^?~sbUFHH0DUwjHldep!2AU5rJGXybi24yq&>Am+=sq;Ks<_(F7==b&9P>Y zIl*+9#b${)#gt6VG%y1t5kIlWKoGob4t*}Ac(XKnut_S3U@?o^@5&5XxjW#|epU!7Y&)W{{ zX{<9^Qe)-*UPYI2)EMdJ+*R%-_ZD}D`v~SJr@(tn;{NuSU6?;Fu_|FlTCH7}IUpG2 zR$vs{V(-K#^@Q!hsIwlHrQLG?V{PKiXFmJ{%(@03pW7kv$G9R$a5cXUuuF^OFDDGQ{eGCUiSZNAKC@&O1e~%?oiDb((C%84&8>Sr;*DO0`m-9i_dql-a{d zXeH-4SHmjSGrO2%c5wqNWA<2}UD_$_Vm8u|0cs}?LK3=|t?Y(2JI3rKk#psIW;4gi z6JRq-6WiFd*mIba+#4jWyVV{XQ%1urnsr4>?erkpe?U4{{88%CH%m66cwRq*<@K%XDM_+koVFA4j- z2f8~K_O}u`yA^)iVfbvt@Xx}~L_2YxCk&Un%w6wJx;MHvVTO1Q)}*?ib913sTbv_baFd?>VV~jDjWsGGTV~oU%j1z(-%`iwXT0Ap=Y-2s1X6}q0ym@bU z^F~M@FlG_^4r1Ry?E4ymmpBgD976a(rTl|(`B%!7a=B8JE0uC3`OfX`d(Y|HxAmUh zkjjs!>gc|E&guSo@4lx`_k8}?YHNJUar=FJvHrKTzrSzk(q;Wee?#++vad^*9(~j? z>F?9`BU*3|(Z*jBeQy!bX{(8v2N}9~HxbjW-x#{}F(RhPi!J>-o}l}GZ>WA55fg%> z^x!K*OuHL~9y@@D>Ba*M-GI259(&i&gC{~CbnZKbE;)vX>0E?oy6_-F4_!yZv>SR% z+cp|H`(KHew!dWPe58x1HDT!dop=Xb{BuLwet~eHnT3{i;0ZdbW$EAW1kL=Xp_|?& zV!HV_L-obTFX*8qhR)bR#56l%=;b;Q)3wlNntjbs`*0$rWYExgj}S3E@JmDYUxxBz zI@r(yli-7PA#F_4ZyI`dn270;Ck)+$d@|jL@?^U38bgmE&rG+RW~c#urio34u6~P% z>6+D+UdI#k#2bdre3gjl1(Y+>A)AU18|O-9$_mj~Tl0 zLZlD$1k%HFHp)9Cw41X*_X3OQz9TH%i6`isC5A5h01?x5h@a_Nq=D%=)HT!f$P3dA zD-2zaGGV$7X=1t!Wy5qg(!g~47DKlk2tMepU54%*LOMXV?KE@`;$*u0Z9{jUyqNAe z-Oyc!A{^-M-&xuhPtZjupOnysFXDFm2Saxv%}niE4bAOO#8gAQr3AeiXbbYeR6E4b z)SE;pZN?LHIr7G|Y3Qo`h?uTG z-kGk1F4HtHm|i@}&G%IuTRj zI75#h{Y;Pl%Fv~#3#Lc<4DA?(KIn0zfobRMh8{hfi0Qm#hITFiAN1(GhHhPsaSL<{ zu$Y=V4Yl6JxB$A~L_F4OLLSOs8+K^g5oP&CqA6K4xgsA|j^m-)X4Q zKseB*3oM~-H-W~HhLi|TrnaFcQEyCF?J)G@ZoGqDK^>;_DxR-aDr?qmSU)mW89aV; zU}VjPvGpUB$ySoIx6dS0sjNGBc(|y6`mriTVQlru>rSc+t{huQm7%f9@vT;~RT*u! zYK`)5%#@zBZX|wzh}Vlmy!AXOf1mCwS0U*=|?Iw^W8| zbqT4sxfYV2RHsGKte)dTb0nEeT1jI(@nL-dbO)P_f|}q#V>GEJ!IxBKKnzSoQ0`1{ub)s@Yef!K7p(vS7 zhrxXn!?T!Ut!iU-ve}Yl%!q;y&5@)rk+ceknhm`Z5b~s?)zD2&ajh2OA3w81*OS>0 zX?82?s?)M!IBF@dx*M9a?b-2GZKfRxP>>>&tzj;k>FSIqGGCDDn%eUf1=ps-Mps#b z;@c)76blBLqX73Bn0cXV#EsjD@O$);Btp3H_AXx1@?nLxwU?TKv5X&DyfE*B7U$(&Mc z)vArQUjb=$f+{89X9ttX>Ri1ok{ya8R}=BrG?yaCZdEa%oszU>Yt4qpYC!^RZfPqgwpKC6 z2u;P+TC#?P8raZVIWbXL+nkuw)1P44xC%NPlVd_>1atD%B;#Zm_W01W9eO(kIoW+e~VD%DhR)}iUrg*?h@_VOntiuR*>Y{YZ_ZIfEINf z-=@nA`Osf#f2}yH0X}4s>=m>HJgdMHPzMj5;JJ6K)=^MCX zRjHf4fxEI@Z7dTtYu{PYn5rij11Be?STLbu2cwf4HQ728H`f|zwox4-GOOqKx#n=v zm}<+Vpw)EzTysOSjtNn%ZLMxD$+d@C&FM-iD5gTn5Q00==wt((t-4u_Y`y@x=|VNA zT#!IJSHyBcts4pwn~s6C)tSn0wJ|kUox&PqP$ZsHQxwZ^Ls$z}W$k1^oCMk%s`aFe zt}<9{S2^nfp(qmiW(g3`b^@h~gS!NW^**uM2)y~XM+dlNJ*^r z#-&R&Uxg@05o)-G1?W(%F(DErcuoUTp0ALyoP14VR*#oy9FFU>%*5tLpY(fCgaWNndYqQs{xq^fuULC!|A46 zp~d5KK+Uj)-oTb*Tuy^7KFb%HXsz&?fq6i$QYDDeKxht?j*RIS*Z>9(IXnfWekhSVrJt5n#^Dim ztSW6wMUj`ARpo8Zh-^w$4GyK>wX?`eVf^-mB8*$AdKuslxd{5E)-a!_d026CE!|nI zlIyGX)ob>Oo5$o@ok*V5%q6+@K+|7FX3<(fuDhxZ3r#Uv%Z6V14Lw?KqD7tED7MUY(MQMuyiStA9duR!&H) zXIPM<4HZmkg6CrJ%zSAShQ}KG3yT9a>Plv&BSzJHUQa^{Nv55ar|zvL)?AS3jx|df zR7FUj&CR8dVabG!`&K()W91agv=e&n2}*USA=t!4QxhSK1lj}j>g;T7oDG#Bkg(Vb z=fTJ@84eFGXh})>@hQ^e@ey-c2mwux4^95?v!*CFq-jH4nF7MH<-vtDh6LG!gHnXz z3Qs?O@hv>7zx0YCr@s~jD_5(jre#7W&DUCANpYdYS%K1EGFzK!pp7?M6IhnDm0dET zV`D%<_8di-lFd(5pYRz76Lk=6arF} zgz^|{O_@)5^U*2#L{OUNyd;!uR$3}jyK-A?7RJNkSk1|lLR&_>WSYQKGmEc$W$feR z`9g%@ovm~}2#i$$nGE3#AenYHdZfnPbP4aqunlPY4P`5d=m0B~BIPGHX3~(!#Ohk3 zt@makI*5VGcf-&~Wi3oBwQ)IG6eL1ByaUAXWD=nrwyd&tCV{qC@uGTa6Ui!!2FmPI zs-Z(eZBM~H6@=?)7U7O>Oq7R`LJ?*dpTc8uTgRa|fzZX$wl*GA&LmQMZgZKo zlL&3JOw%^fPaoN4U4jZ4BJ}awW|}Pgv1L*(6oz@77ZJwFY=~29jiGhOR#MfY z6erA+4UG+8Y1M$O(i>nrw$vL*X5}E0Yg&QS)r}`tb*(4o3}ZWGZic6Xyj;Rk8NUgo z_ZIw6M#`bqH7AnF$&FSb%;cIY<2KekPLVVN(?Gw#_ylL3bkTIeIW_rNT##@tf(jZ6n^s%NtQ-ys5*_#OcTdeLQi7&}G4tJx zd8Q4Q2&d?C@jf!wz)C|XSjJxX883By#{Ue@uwQQ^TJ$}l)u$01)P(o$%|yT11@F{b z;Tbwf^zWeG-w*G$I+WQ{3|?#vJP&|J+JQGh58i3-;`fQ*zjH3pF_%D&=Rp_3v-2VF zpu2G!(Z9lt^rh{H>wI_|w%`qj=g%)D`UPYQXW&H$YMn*&Z=nCg@3(IvIu2=B4BRD% zXUiExBeU>cd>Q;}iC)9+!{OC7n7|Y9JfdGdfHWeV2ZJW@dk6CH<}}gp!|-TDnkEq6 zyGZXfNY_rJ_q1EUXV19_qPMO_{;wf=9rVT%M6aHSG`~P}2=e|6;(rI2e}LED!65ej z+x;TZ7}9&Dejf_i@1VOc=$(sD#-KkSFVDae z@K%(={&UD%4Ls0_El4|_Z%)B`5HxW)yd1$hXDiWvK<|9eAnM{)q;b(Mlt1e0m(bbo zD&SuM{*?%WvO5a-{4vU55asa}%6~J;>0Q*vYbetWe&37V%h9%8NBQqWdwUyg;lvAw{^bX#H_&Uy?{eg6 z*K=rx&m+yC_kj+43i*B-ae#jne*YKfm}iN8_6$5a@f^W(26FarJ`CyKaT&@B^jqZV zHN=1958=rUx&i4swu!3^l1i>uE84g8qc=q}%9b`VnoUm+2Kchc2Q^=tX*ocGAW42K_l*MXP9l z2I)xpE>-9|^gY@{r_uN6qqK-N(6RKV^dZAQ=IUP+Or$45{=^)ylK1`pYZ_+iii*BUb z=`Q*R9Y-IdTj?hHHXTp@NdH8S(^K>`y+BXU^Ykn|L(kEZ^e{a}kJ2M_0$om*(K;HY zwR94FjZUOD>7QuB*iRI!mw45>7@|Qj`SGmll!1tTMTBOX9%6#F#B^^dM zl<_P{e+dui{M{^)((gjM|B@QxBqQ50La1!Bh_?pvcUSaIo`2NkI%Z!ie|K4xE_p$V zw`ArfF+}8?YJ^81C&apJL&3adwsOZwze&^NrwZ1!CucYtveS3p8J_n$#HpbxY)*4h z{)R8OjFt$4j-I}=r3edyBm1EWAJC$(;J<12EK>u&QxDtoSXy^Jl6c|IOldw7?^x1W zg;m}zt6;0$QVz_!d!?IVEG*rkv$5`Zd(bJe_m1;fkv!$m;{>QL*lW{GJi)@2yw44K z3Ukha+japD>X64www1>b4v)<=6Wxn;Z)LhTuMa#CYK`XZyPf|7ZQ_MDMENkK3YcV+K{;(NG4}9Yug162&rj( z)ErB@rCTmGMdbm7j2m(#wZg!r0+(X>mWY#vcDQVu1zSghnw;Ospz$Q9xzuEuJN0cQ7zv9NJ_VskGsE8pXFdfK@ ze_F1bM4c#e4o{AMG)I{_ZU;HG|B;-0d;t zSwCdqTO9OEwm$ucQ+VuSV$Y{we#xQu&6Y$8!|(oKFXm-4ZgB@I(ACeJ@`=Yu%aWKma$^<6 zF4tTb>^jd+--xSusg2dJ(jC*%Eyn0ZpNJs)UNJLH3x_!Jy-A_xw$lnMF(tVu&}I!c zuq_8!fE(DubiLF?TDl1v*w01zr-kWG6}TOKcs*tN|AME+PwTJm`QLZo@sEwb4(#-8sD2!%h@sGko_UwNARo=xu9Tla3*^Gpf3pBw|g*rT7|j984OI5EAovk zBECIlMx0{U5-4r8Cb^>HrZ@+a zGYe;Fgxy1ErCc-aEe-+AW6*+i+Cqs3oVM*^RrmwCd=HSfXq@S}ZI)1%a^hXj#$PqvYD=qeZ2M>Pyd3 zg?zmE``Rmh^YLq}6bdpku_$hMdFiX5C3`Rkr`MJ`h=1~!8%D&vSK5wLM8blk_{xq{ zkc6|UY)U%Jp51#g`%*9<#?qq4j&EyHA@hZ`Vr#ooQ52}xf(@z|DtKB_+oMzV=ptT6j@dL%ouhLuE; z+r$bAnPp5!oPA8QBIhXO=^b+jGkglv9nI7cJL{R|>cgM8B`wz~y*Ni&)iQO@w&wFg zw*mz2&d?WEV3BCeUs-g_@>gWcD=x^GtE_M;4sT7C+26diX2uUJG=+68i`toztc|Y7 z*Qbx1y0F(3f_Up~7bMX0eNpf@CpxmW;}rm*ftaK<6CBP()U8QI))yE7vYwO5@uSGhJm-6kKIjEbvq7qT)&$qbDd@8kNEx7KA9(PESjf ztPeQ`-vX&ppzM%J5?C~GY@tTU{1VHgijsArOO1TQwpPkKxW4AYw^-(SxuoDU8n9l< zaH%-6VHPFsU_wFSjeO2}D6N`>FwVAFA}B0KT%;KEw4JjM0W_SovmkRe&w@aYSq@Cw zKMR4J6|^8gdk`aFY7xzJgbmc2!-OO-iv?_?S)87w)aU2-p!gDJHTC(SMy@QVCV+28 z&A8UDxcoN9Nqf!XkrVYgdmr!VX5+qZ8h_)(i%;Kgc)>pOsbAf9+K1sWxi6e5@o&MA z6MT8nVWZ}i;Bg2KPxoS1ug#RLOeeXZ%qETzs%H^=;Mn%2qs6!|2TqMHhpYuZM@Z-ZBDiqe|h99i-*^& zJ1LcV|Lu==4#*L}b2a_72>-u7{Uu?L3ic*Pa&OtRV8MU?w*%xb{EySOkX)`;5Tz;J z;y7vk7-=8J>0=!*;CE?5_2(Ssf1dxd|2TGn2Wb9pA-pnin`rT7&z|o7lsWFCwJhsj zn%;tKTFb(;wY-XSne>KR3tW-aKhau_b^>lKyWNX@a%*{ST0ti@`x&I7^fJ}`x-Pe4 z+)d(nFMAsZv2u&_vVK=o+#0!;$$z4k^*KK4z2#o)bAHRWlQR7*kmqmY>hHHr5hE87 z_t4=5JbHa0&ELMfXBOBsk~K$N*JJ;(Fy>-lF2I=SVe;gs0Od<3{jGm_81FFPEp&K= zeXQOvmzU)6aA59JifMO>WCm3-I?C{7)DL413jX;Ai6Yghs>1Jm0t9BVJ^dIMCu*zYF8Nq2T08Cv_HEzkO1px#KYs zLglp+yja~G!d@0^jU`_?mQdfE7BCCeCebQ^p}+55+Hsq zfS8%+B#=r%C#ZcTbL%I7y4az@QA&Yy-{VS3^B|yn-lA9sECnQAI?7GS%>8NL9O`hg zGjcNay;$>=lpN0hUr<=?1YU1=vGu`W63^^j&faM`#BQ1{%Qm{^L3PfUANukB|YWKKtCdYE?g*k!!7v+W9!q` zJY4Mh>2tEZAxCn2WEj~weD;JJTSt9e;tD@f1=#gS5$jJ!NknY775!6t!|p3-)d!<~ zmpW|c_o|@eODFv&Hu^5JNa(bgJFSer`*9*Rvm9MS^A;WwyOX@d?81El&GY`1FkO!b zv6W-LhnYDQ_k`rD&z!@Q}+6v#SJj-ABJsva;lj#bdk_L|v;@ zGUQ7~?W|r(MWd7njPT(p(dj%<9daccGNyOZJ zUqWNAJDf0sOFSckC>61jz~=J^jMFmB^Cu%M2(E*r~0Vo z%%1|3FCEom%JQEI+;*d{Ed8SNY zzBSLZnED{QM3~>vrf%_q2jms3eCZ^Y%S+Z^U&9zT9YJ;H?j>ILd5-PnHiGEcd42^f zUpmQktj{z(Tz5@?#OOY!F}vtYhG?%JP*C!vqr64h?O75jyVXD<>_yH>)*$Qw)bj8q z)EK@OSP{GEti-bSmiCsj*v@HNq1oFV6r6nNq~2n?!gCVMUK%0e-;0tg>G$l{w^gFy zGKwCNBJJaBhm>7%(IZyLijD2b+a%U}cx**x`t1@cKjGbDNya>&&#{R5u8-bIGd4<| ztMRfsM0!K)EBSt7uf-h>(cDdUXH_8p2(=xOGh{*>lXGYIp5;IMc3S< z(i>8wm;FE>1sZ!7Hfq+6ln578C8^BBgW?H3k71)T~Xq8(mrB6 z`XY;z-E%WkaCq)IXE7Va#Xerx-MMSb*gowg0yEGFy2gr?=T3(;*RJD_d{)doK(fZV zpG9LUgiC!qzF$be$(N2=OUazgz8RN!X!*585@mjKc)5?smzXO!`O;AiOU7mP$hg8o z3m@I+8nI-AW((<+C5X7ZNy4a?PI4JLM|hQo3A>BB6G{Ph-9KWM=&Os!`mQMjEnhmx zb8K(=nj*5f!b*a4UCJ@*&$S^$b2C!Ipi(0HLT^~S{_jswScHNd@tAHCk zwNE;d5Z}t%L%X(zK<`;8U z2s6EYtw+pAAGyV1y1Uy3adS`lw;2?qeCenzBm0`SdWiP6I0>QZwG+JMC36a&kGQRX z7r2D3C-m5w!#N&>}T?r$x&z+)Hob>kTi`C+{lY&C~Zz#C~^o zhB@8bngpH3x*u61douTAc;Z6B-byrrc5j9z?m6rUE%qgMpF?xkC-#ICo1gBtNZzfC zJ>kV>-v=~a@iVpiHWF!*4`yic5=oW0uJK~Id&tA%%PD(9i`Ct3fhI1!RDklOqxqqv z5AX@LhZSDoE=>uga@`Sb$>_-^*d7tM^Y7;y^9gxWBk##AqwBU5^ZR{FW6z`CZ|v*i zae?aHRN7Ph#w=w|2uyhassil3Y)e`)`~5vB5a-G7FER=}CD7(;bsTH8PYXQup8DVP zWO~NK-cy&6b==7~5o<@!I&ANcYe|gmze8eoB0T31aUE`ND6xD!?@;o~bop}oUJ*-1 z+{Nf0FBB2^`d*bq`O;C%mF$19$I^>AUh!6738a$H5o+XH`6Un4T{f%$yB~KVh%fty z_7dYB5hEkrD;{F;3LA;tQHhp(L9$iy&pkA8=dy(9z7`{G^;I8p+f1|7>$hB_t^P$2 zZ$A99V)nAvJXF|T)y31Qc)M@2k#ET#6_M?Q);(fI>h#ARroAXz0m_$7+HGvz{u2*x z9&Cb<7W7jOP2KA)vo){%c(F45nTJ;}uyox@V>9tzSv0=gTxF?il-NxC zbBEG0-tg|PN%n|XvOmrzfd0COI8S?@vHjN9Eo$+W_a1W^Stb9C#vD!>Q|&G9VO{>M z#>;M{fA4bmcN)>&cHbjj#A5yT8n5KjL*n;3j{bv2O#i&8jDIgy-x066Uoe_?>3@%C SC8fzeKL2RZ>>m?QK>q{V#MjpV literal 0 HcmV?d00001 diff --git a/msvc/freetype/win64/freetype.dll b/msvc/freetype/win64/freetype.dll new file mode 100644 index 0000000000000000000000000000000000000000..de6edca419655d5613b70f0e50eb39a02f74ed68 GIT binary patch literal 829952 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

5j83CiWOAR*PGNPZ#^lIwpZ(j} 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∓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 IpIhL+0YbtE*#H0l literal 0 HcmV?d00001 diff --git a/msvc/freetype/win64/freetype.lib b/msvc/freetype/win64/freetype.lib new file mode 100644 index 0000000000000000000000000000000000000000..e97d0e700590858beddde2c030ec161401e5e46b GIT binary patch literal 46362 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 + RelativePath="..\..\src\ArmsItem.cpp"> + RelativePath="..\..\src\Back.cpp"> + RelativePath="..\..\src\Boss.cpp"> + RelativePath="..\..\src\BossAlmo1.cpp"> + RelativePath="..\..\src\BossAlmo2.cpp"> + RelativePath="..\..\src\BossBallos.cpp"> + RelativePath="..\..\src\BossFrog.cpp"> + RelativePath="..\..\src\BossIronH.cpp"> + RelativePath="..\..\src\BossLife.cpp"> + RelativePath="..\..\src\BossOhm.cpp"> + RelativePath="..\..\src\BossPress.cpp"> + RelativePath="..\..\src\BossTwinD.cpp"> + RelativePath="..\..\src\BossX.cpp"> + RelativePath="..\..\src\BulHit.cpp"> + RelativePath="..\..\src\Bullet.cpp"> + RelativePath="..\..\src\Caret.cpp"> + RelativePath="..\..\src\Config.cpp"> + RelativePath="..\..\src\Draw.cpp"> + RelativePath="..\..\src\Ending.cpp"> + RelativePath="..\..\src\Escape.cpp"> + RelativePath="..\..\src\Fade.cpp"> + RelativePath="..\..\src\File.cpp"> + RelativePath="..\..\src\Flags.cpp"> + RelativePath="..\..\src\Flash.cpp"> + RelativePath="..\..\src\Font.cpp"> + RelativePath="..\..\src\Frame.cpp"> + RelativePath="..\..\src\Game.cpp"> + RelativePath="..\..\src\Generic.cpp"> + RelativePath="..\..\src\GenericLoad.cpp"> + RelativePath="..\..\src\Input.cpp"> + RelativePath="..\..\src\KeyControl.cpp"> + RelativePath="..\..\src\Main.cpp"> + RelativePath="..\..\src\Map.cpp"> + RelativePath="..\..\src\MapName.cpp"> + RelativePath="..\..\src\MiniMap.cpp"> + RelativePath="..\..\src\MyChar.cpp"> + RelativePath="..\..\src\MycHit.cpp"> + RelativePath="..\..\src\MycParam.cpp"> + RelativePath="..\..\src\NpcAct000.cpp"> + RelativePath="..\..\src\NpcAct020.cpp"> + RelativePath="..\..\src\NpcAct040.cpp"> + RelativePath="..\..\src\NpcAct060.cpp"> + RelativePath="..\..\src\NpcAct080.cpp"> + RelativePath="..\..\src\NpcAct100.cpp"> + RelativePath="..\..\src\NpcAct120.cpp"> + RelativePath="..\..\src\NpcAct140.cpp"> + RelativePath="..\..\src\NpcAct160.cpp"> + RelativePath="..\..\src\NpcAct180.cpp"> + RelativePath="..\..\src\NpcAct200.cpp"> + RelativePath="..\..\src\NpcAct220.cpp"> + RelativePath="..\..\src\NpcAct240.cpp"> + RelativePath="..\..\src\NpcAct260.cpp"> + RelativePath="..\..\src\NpcAct280.cpp"> + RelativePath="..\..\src\NpcAct300.cpp"> + RelativePath="..\..\src\NpcAct320.cpp"> + RelativePath="..\..\src\NpcAct340.cpp"> + RelativePath="..\..\src\NpChar.cpp"> + RelativePath="..\..\src\NpcHit.cpp"> + RelativePath="..\..\src\NpcTbl.cpp"> + RelativePath="..\..\src\Organya.cpp"> + RelativePath="..\..\src\PixTone.cpp"> + RelativePath="..\..\src\Profile.cpp"> + RelativePath="..\..\src\Resource.cpp"> + RelativePath="..\..\src\SelStage.cpp"> + RelativePath="..\..\src\Shoot.cpp"> + RelativePath="..\..\src\Sound.cpp"> + RelativePath="..\..\src\Stage.cpp"> + RelativePath="..\..\src\Star.cpp"> + RelativePath="..\..\src\TextScr.cpp"> + RelativePath="..\..\src\Triangle.cpp"> + RelativePath="..\..\src\ValueView.cpp"> + RelativePath="..\..\src\ArmsItem.h"> + RelativePath="..\..\src\Back.h"> + RelativePath="..\..\src\Boss.h"> + RelativePath="..\..\src\BossAlmo1.h"> + RelativePath="..\..\src\BossAlmo2.h"> + RelativePath="..\..\src\BossBallos.h"> + RelativePath="..\..\src\BossFrog.h"> + RelativePath="..\..\src\BossIronH.h"> + RelativePath="..\..\src\BossLife.h"> + RelativePath="..\..\src\BossOhm.h"> + RelativePath="..\..\src\BossPress.h"> + RelativePath="..\..\src\BossTwinD.h"> + RelativePath="..\..\src\BossX.h"> + RelativePath="..\..\src\BulHit.h"> + RelativePath="..\..\src\Bullet.h"> + RelativePath="..\..\src\Caret.h"> + RelativePath="..\..\src\CommonDefines.h"> + RelativePath="..\..\src\Config.h"> + RelativePath="..\..\src\Draw.h"> + RelativePath="..\..\src\Ending.h"> + RelativePath="..\..\src\Escape.h"> + RelativePath="..\..\src\Fade.h"> + RelativePath="..\..\src\File.h"> + RelativePath="..\..\src\Flags.h"> + RelativePath="..\..\src\Flash.h"> + RelativePath="..\..\src\Font.h"> + RelativePath="..\..\src\Frame.h"> + RelativePath="..\..\src\Game.h"> + RelativePath="..\..\src\Generic.h"> + RelativePath="..\..\src\GenericLoad.h"> + RelativePath="..\..\src\Input.h"> + RelativePath="..\..\src\KeyControl.h"> + RelativePath="..\..\src\Main.h"> + RelativePath="..\..\src\Map.h"> + RelativePath="..\..\src\MapName.h"> + RelativePath="..\..\src\MiniMap.h"> + RelativePath="..\..\src\MyChar.h"> + RelativePath="..\..\src\MycHit.h"> + RelativePath="..\..\src\MycParam.h"> + RelativePath="..\..\src\NpcAct.h"> + RelativePath="..\..\src\NpChar.h"> + RelativePath="..\..\src\NpcHit.h"> + RelativePath="..\..\src\NpcTbl.h"> + RelativePath="..\..\src\Organya.h"> + RelativePath="..\..\src\PixTone.h"> + RelativePath="..\..\src\Profile.h"> + RelativePath="..\..\src\Resource.h"> + RelativePath="..\..\src\SelStage.h"> + RelativePath="..\..\src\Shoot.h"> + RelativePath="..\..\src\Sound.h"> + RelativePath="..\..\src\Stage.h"> + RelativePath="..\..\src\Star.h"> + RelativePath="..\..\src\Tags.h"> + RelativePath="..\..\src\TextScr.h"> + RelativePath="..\..\src\Triangle.h"> + RelativePath="..\..\src\Types.h"> + RelativePath="..\..\src\ValueView.h"> + RelativePath="..\..\src\WindowsWrapper.h"> + RelativePath="..\..\res\Icon\ICON.rc"> diff --git a/msvc/msvc2003/freetype/FTL.TXT b/msvc/msvc2003/freetype/FTL.TXT new file mode 100644 index 00000000..c406d150 --- /dev/null +++ b/msvc/msvc2003/freetype/FTL.TXT @@ -0,0 +1,169 @@ + 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 © The FreeType + Project (www.freetype.org). All rights reserved. + """ + + Please replace 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 freetype@nongnu.org + + 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 freetype-devel@nongnu.org + + Discusses bugs, as well as engine internals, design issues, + specific licenses, porting, etc. + + Our home page can be found at + + https://www.freetype.org + + +--- end of FTL.TXT --- diff --git a/msvc2003/freetype-2.10.0/include/freetype/config/ftconfig.h b/msvc/msvc2003/freetype/include/freetype/config/ftconfig.h similarity index 100% rename from msvc2003/freetype-2.10.0/include/freetype/config/ftconfig.h rename to msvc/msvc2003/freetype/include/freetype/config/ftconfig.h diff --git a/msvc/msvc2003/freetype/include/freetype/config/ftheader.h b/msvc/msvc2003/freetype/include/freetype/config/ftheader.h new file mode 100644 index 00000000..696d6ba9 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/config/ftheader.h @@ -0,0 +1,814 @@ +/**************************************************************************** + * + * ftheader.h + * + * Build macros of the FreeType 2 library. + * + * Copyright (C) 1996-2019 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_ + + + /*@***********************************************************************/ + /* */ + /* */ + /* FT_BEGIN_HEADER */ + /* */ + /* */ + /* 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 + + + /*@***********************************************************************/ + /* */ + /* */ + /* FT_END_HEADER */ + /* */ + /* */ + /* 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 +#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 +#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 +#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 +#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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + /* 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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @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 + + + /************************************************************************** + * + * @macro: + * FT_COLOR_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which handles the OpenType 'CPAL' table. + */ +#define FT_COLOR_H + + + /* */ + + /* These header files don't need to be included by the user. */ +#define FT_ERROR_DEFINITIONS_H +#define FT_PARAMETER_TAGS_H + + /* Deprecated macros. */ +#define FT_UNPATENTED_HINTING_H +#define FT_TRUETYPE_UNPATENTED_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 `` only when + * building the library. + */ +#ifdef FT2_BUILD_LIBRARY +#define FT_INTERNAL_INTERNAL_H +#include FT_INTERNAL_INTERNAL_H +#endif /* FT2_BUILD_LIBRARY */ + + +#endif /* FTHEADER_H_ */ + + +/* END */ diff --git a/msvc/msvc2003/freetype/include/freetype/config/ftmodule.h b/msvc/msvc2003/freetype/include/freetype/config/ftmodule.h new file mode 100644 index 00000000..7c603e53 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/config/ftmodule.h @@ -0,0 +1,32 @@ +/* + * 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 `/objs/`) based on information + * from `/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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/config/ftoption.h b/msvc/msvc2003/freetype/include/freetype/config/ftoption.h new file mode 100644 index 00000000..12f47a82 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/config/ftoption.h @@ -0,0 +1,982 @@ +/**************************************************************************** + * + * ftoption.h + * + * User-selectable configuration macros (specification only). + * + * Copyright (C) 1996-2019 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 + + +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/` by default, but you can easily change that for your + * own projects. + * + * - Copy the file 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 + * #include + * ``` + * + * 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 ``. + * + * 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). + * + * ``` + * + * ':' + * '=' + * + * ':' + * '=' + * ... + * ``` + * + * 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 precedence, 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 precedence, 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 precedence, 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 precedence, 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 + + + /************************************************************************** + * + * Error Strings + * + * If this macro is set, `FT_Error_String` will return meaningful + * descriptions. This is not enabled by default to reduce the overall + * size of FreeType. + * + * More details can be found in the file `fterrors.h`. + */ +/* #define FT_CONFIG_OPTION_ERROR_STRINGS */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** 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_COLOR_LAYERS` if you want to support coloured + * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt' + * module (namely TrueType~& OpenType). + */ +#define TT_CONFIG_OPTION_COLOR_LAYERS + + + /************************************************************************** + * + * 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). Tagged 'Font Variations', this is now part of OpenType + * also. 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' (covering the CNS 11643 character + * set) needs 256. + */ +#define T1_MAX_CHARSTRINGS_OPERANDS 256 + + + /************************************************************************** + * + * Define this configuration macro if you want to prevent the compilation + * of the 't1afm' module, which is in charge of reading Type~1 AFM files + * into an existing face. Note that if set, the Type~1 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. + * + * 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). + * + * This experimental option is not active if the rendering mode is + * `FT_RENDER_MODE_LIGHT`. + */ +#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 + * + * [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 */ + + + /* + * The next three macros are defined if native TrueType hinting is + * requested by the definitions above. Don't change this. + */ +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/config/ftstdlib.h b/msvc/msvc2003/freetype/include/freetype/config/ftstdlib.h new file mode 100644 index 00000000..438b6145 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/config/ftstdlib.h @@ -0,0 +1,175 @@ +/**************************************************************************** + * + * ftstdlib.h + * + * ANSI-specific library and header configuration file (specification + * only). + * + * Copyright (C) 2002-2019 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 + +#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 FreeType~2 with all fonts. + * + * In these cases, `ftconfig.h` will refuse to compile anyway with a + * message like 'couldn't find 32-bit type' or something similar. + * + */ + + +#include + +#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 + +#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 + +#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 + +#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 + +#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 + + +#endif /* FTSTDLIB_H_ */ + + +/* END */ diff --git a/msvc/msvc2003/freetype/include/freetype/freetype.h b/msvc/msvc2003/freetype/include/freetype/freetype.h new file mode 100644 index 00000000..4f2eaca6 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/freetype.h @@ -0,0 +1,4880 @@ +/**************************************************************************** + * + * freetype.h + * + * FreeType high-level API and common types (specification only). + * + * Copyright (C) 1996-2019 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 " +#error " #include FT_FREETYPE_H" +#endif + + +#include +#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 + * + * #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 @header_file_macros, 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). + * + * [Since 2.5.6] 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, 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 for all formats except BDF, PCF, + * and Windows FNT; see below for more information. + * + * 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. See @FT_LOAD_COLOR + * for more information. + * + * 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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 + * + * @description: + * Deprecated. + * + */ +#define FT_HAS_FAST_GLYPHS( face ) 0 + + + /************************************************************************** + * + * @macro: + * FT_HAS_GLYPH_NAMES + * + * @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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 ) + + + /************************************************************************** + * + * @enum: + * 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. + * + * glyph_index :: + * [Since 2.10] The glyph index passed as an argument to @FT_Load_Glyph + * while initializing the glyph slot. + * + * 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 + * + * + * FT_Outline_Translate( slot->outline, origin_x & 63, 0 ); + * + * + * + * + * + * origin_x += slot->advance.x; + * origin_x += slot->lsb_delta - slot->rsb_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 + * + * + * + * + * 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; + * + * + * + * 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 glyph_index; /* new in 2.10; was reserved previously */ + 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. + * + * @example: + * 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 and hinting. 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 + * fills the `num_subglyph` and `subglyphs` values of the glyph slot; + * it also sets `glyph->format` to @FT_GLYPH_FORMAT_COMPOSITE. The + * description of subglyphs can then be accessed with + * @FT_Get_SubGlyph_Info. + * + * Don't use this flag for retrieving metrics information since some + * font drivers only return rudimentary data. + * + * 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 :: + * Load colored glyphs. There are slight differences depending on the + * font format. + * + * [Since 2.5] Load embedded color bitmap images. The resulting color + * bitmaps, if available, will have the @FT_PIXEL_MODE_BGRA format, + * with pre-multiplied color channels. If the flag is not set and + * color bitmaps are found, they are converted to 256-level gray + * bitmaps, using the @FT_PIXEL_MODE_GRAY format. + * + * [Since 2.10, experimental] If the glyph index contains an entry in + * the face's 'COLR' table with a 'CPAL' palette table (as defined in + * the OpenType specification), make @FT_Render_Glyph provide a default + * blending of the color glyph layers associated with the glyph index, + * using the same bitmap format as embedded color bitmap images. This + * is mainly for convenience; for full control of color layers use + * @FT_Get_Color_Glyph_Layer and FreeType's color functions like + * @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering + * so that the client application can handle blending by itself. + * + * 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. + * + * Note that for outline fonts only the TrueType font driver has proper + * monochrome hinting support, provided the TTFs contain hints for B/W + * rendering (which most fonts no longer provide). If these conditions + * are not met it is very likely that you get ugly results at smaller + * sizes. + * + * 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. + * + * If @FT_RENDER_MODE_NORMAL is used, a previous call of @FT_Load_Glyph + * with flag @FT_LOAD_COLOR makes FT_Render_Glyph provide a default + * blending of colored glyph layers associated with the current glyph + * slot (provided the font contains such layers) instead of rendering + * the glyph slot's outline. This is an experimental feature; see + * @FT_LOAD_COLOR for more information. + * + * @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_rendering. 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. + * + * @example: + * Here is 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 ); + + + /************************************************************************** + * + * @enum: + * 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). + * + * https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description + * + * @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 + + + /************************************************************************** + * + * @function: + * 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. + * + * https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description + * + */ + 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 ); + + + /************************************************************************** + * + * @section: + * layer_management + * + * @title: + * Glyph Layer Management + * + * @abstract: + * Retrieving and manipulating OpenType's 'COLR' table data. + * + * @description: + * The functions described here allow access of colored glyph layer data + * in OpenType's 'COLR' tables. + */ + + + /************************************************************************** + * + * @struct: + * FT_LayerIterator + * + * @description: + * This iterator object is needed for @FT_Get_Color_Glyph_Layer. + * + * @fields: + * num_layers :: + * The number of glyph layers for the requested glyph index. Will be + * set by @FT_Get_Color_Glyph_Layer. + * + * layer :: + * The current layer. Will be set by @FT_Get_Color_Glyph_Layer. + * + * p :: + * An opaque pointer into 'COLR' table data. The caller must set this + * to `NULL` before the first call of @FT_Get_Color_Glyph_Layer. + */ + typedef struct FT_LayerIterator_ + { + FT_UInt num_layers; + FT_UInt layer; + FT_Byte* p; + + } FT_LayerIterator; + + + /************************************************************************** + * + * @function: + * FT_Get_Color_Glyph_Layer + * + * @description: + * This is an interface to the 'COLR' table in OpenType fonts to + * iteratively retrieve the colored glyph layers associated with the + * current glyph slot. + * + * https://docs.microsoft.com/en-us/typography/opentype/spec/colr + * + * The glyph layer data for a given glyph index, if present, provides an + * alternative, multi-colour glyph representation: Instead of rendering + * the outline or bitmap with the given glyph index, glyphs with the + * indices and colors returned by this function are rendered layer by + * layer. + * + * The returned elements are ordered in the z~direction from bottom to + * top; the 'n'th element should be rendered with the associated palette + * color and blended on top of the already rendered layers (elements 0, + * 1, ..., n-1). + * + * @input: + * face :: + * A handle to the parent face object. + * + * base_glyph :: + * The glyph index the colored glyph layers are associated with. + * + * @inout: + * iterator :: + * An @FT_LayerIterator object. For the first call you should set + * `iterator->p` to `NULL`. For all following calls, simply use the + * same object again. + * + * @output: + * aglyph_index :: + * The glyph index of the current layer. + * + * acolor_index :: + * The color index into the font face's color palette of the current + * layer. The value 0xFFFF is special; it doesn't reference a palette + * entry but indicates that the text foreground color should be used + * instead (to be set up by the application outside of FreeType). + * + * The color palette can be retrieved with @FT_Palette_Select. + * + * @return: + * Value~1 if everything is OK. If there are no more layers (or if there + * are no layers at all), value~0 gets returned. In case of an error, + * value~0 is returned also. + * + * @note: + * This function is necessary if you want to handle glyph layers by + * yourself. In particular, functions that operate with @FT_GlyphRec + * objects (like @FT_Get_Glyph or @FT_Glyph_To_Bitmap) don't have access + * to this information. + * + * Note that @FT_Render_Glyph is able to handle colored glyph layers + * automatically if the @FT_LOAD_COLOR flag is passed to a previous call + * to @FT_Load_Glyph. [This is an experimental feature.] + * + * @example: + * ``` + * FT_Color* palette; + * FT_LayerIterator iterator; + * + * FT_Bool have_layers; + * FT_UInt layer_glyph_index; + * FT_UInt layer_color_index; + * + * + * error = FT_Palette_Select( face, palette_index, &palette ); + * if ( error ) + * palette = NULL; + * + * iterator.p = NULL; + * have_layers = FT_Get_Color_Glyph_Layer( face, + * glyph_index, + * &layer_glyph_index, + * &layer_color_index, + * &iterator ); + * + * if ( palette && have_layers ) + * { + * do + * { + * FT_Color layer_color; + * + * + * if ( layer_color_index == 0xFFFF ) + * layer_color = text_foreground_color; + * else + * layer_color = palette[layer_color_index]; + * + * // Load and render glyph `layer_glyph_index', then + * // blend resulting pixmap (using color `layer_color') + * // with previously created pixmaps. + * + * } while ( FT_Get_Color_Glyph_Layer( face, + * glyph_index, + * &layer_glyph_index, + * &layer_color_index, + * &iterator ) ); + * } + * ``` + */ + FT_EXPORT( FT_Bool ) + FT_Get_Color_Glyph_Layer( FT_Face face, + FT_UInt base_glyph, + FT_UInt *aglyph_index, + FT_UInt *acolor_index, + FT_LayerIterator* iterator ); + + + /************************************************************************** + * + * @section: + * base_interface + * + */ + + /************************************************************************** + * + * @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 charmap. + * + * @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. + * + * **Attention**: Most arithmetic functions take `FT_Long` as arguments. + * For historical reasons, FreeType was designed under the assumption + * that `FT_Long` is a 32-bit integer; results can thus be undefined if + * the arguments don't fit into 32 bits. + * + * @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* vector, + 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 + * + */ + + + /************************************************************************** + * + * @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 10 +#define FREETYPE_PATCH 0 + + + /************************************************************************** + * + * @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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftadvanc.h b/msvc/msvc2003/freetype/include/freetype/ftadvanc.h new file mode 100644 index 00000000..95c38f92 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftadvanc.h @@ -0,0 +1,188 @@ +/**************************************************************************** + * + * ftadvanc.h + * + * Quick computation of advance widths (specification only). + * + * Copyright (C) 2008-2019 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 +#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 + * + */ + + + /************************************************************************** + * + * @enum: + * 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftbbox.h b/msvc/msvc2003/freetype/include/freetype/ftbbox.h new file mode 100644 index 00000000..22da70c0 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftbbox.h @@ -0,0 +1,102 @@ +/**************************************************************************** + * + * ftbbox.h + * + * FreeType exact bbox computation (specification). + * + * Copyright (C) 1996-2019 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 +#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: */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftbdf.h b/msvc/msvc2003/freetype/include/freetype/ftbdf.h new file mode 100644 index 00000000..1c46da59 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftbdf.h @@ -0,0 +1,213 @@ +/**************************************************************************** + * + * ftbdf.h + * + * FreeType API for accessing BDF-specific strings (specification). + * + * Copyright (C) 2002-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftbitmap.h b/msvc/msvc2003/freetype/include/freetype/ftbitmap.h new file mode 100644 index 00000000..a6acdb96 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftbitmap.h @@ -0,0 +1,330 @@ +/**************************************************************************** + * + * ftbitmap.h + * + * FreeType utility functions for bitmaps (specification). + * + * Copyright (C) 2004-2019 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 +#include FT_FREETYPE_H +#include FT_COLOR_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, + * automatically adjusting the target's bitmap buffer size as needed. + * + * Note that none of the functions changes the bitmap's 'flow' (as + * indicated by the sign of the `pitch` field in @FT_Bitmap). + * + * To set the flow, assign an appropriate positive or negative value to + * the `pitch` field of the target @FT_Bitmap object after calling + * @FT_Bitmap_Init but before calling any of the other functions + * described here. + */ + + + /************************************************************************** + * + * @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. + * + * @note: + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + */ + 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 per + * 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 argument. 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. + * + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Convert( FT_Library library, + const FT_Bitmap *source, + FT_Bitmap *target, + FT_Int alignment ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Blend + * + * @description: + * Blend a bitmap onto another bitmap, using a given color. + * + * @input: + * library :: + * A handle to a library object. + * + * source :: + * The source bitmap, which can have any @FT_Pixel_Mode format. + * + * source_offset :: + * The offset vector to the upper left corner of the source bitmap in + * 26.6 pixel format. It should represent an integer offset; the + * function will set the lowest six bits to zero to enforce that. + * + * color :: + * The color used to draw `source` onto `target`. + * + * @inout: + * target :: + * A handle to an `FT_Bitmap` object. It should be either initialized + * as empty with a call to @FT_Bitmap_Init, or it should be of type + * @FT_PIXEL_MODE_BGRA. + * + * atarget_offset :: + * The offset vector to the upper left corner of the target bitmap in + * 26.6 pixel format. It should represent an integer offset; the + * function will set the lowest six bits to zero to enforce that. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function doesn't perform clipping. + * + * The bitmap in `target` gets allocated or reallocated as needed; the + * vector `atarget_offset` is updated accordingly. + * + * In case of allocation or reallocation, the bitmap's pitch is set to + * `4 * width`. Both `source` and `target` must have the same bitmap + * flow (as indicated by the sign of the `pitch` field). + * + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Blend( FT_Library library, + const FT_Bitmap* source, + const FT_Vector source_offset, + FT_Bitmap* target, + FT_Vector *atarget_offset, + FT_Color color ); + + + /************************************************************************** + * + * @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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftbzip2.h b/msvc/msvc2003/freetype/include/freetype/ftbzip2.h new file mode 100644 index 00000000..ae88cfdb --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftbzip2.h @@ -0,0 +1,102 @@ +/**************************************************************************** + * + * ftbzip2.h + * + * Bzip2-compressed stream support. + * + * Copyright (C) 2010-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftcache.h b/msvc/msvc2003/freetype/include/freetype/ftcache.h new file mode 100644 index 00000000..0d589d0b --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftcache.h @@ -0,0 +1,1088 @@ +/**************************************************************************** + * + * ftcache.h + * + * FreeType Cache subsystem (specification). + * + * Copyright (C) 1996-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftchapters.h b/msvc/msvc2003/freetype/include/freetype/ftchapters.h new file mode 100644 index 00000000..2ee26973 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftchapters.h @@ -0,0 +1,145 @@ +/**************************************************************************** + * + * 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 + * color_management + * layer_management + * 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 + * lcd_rendering + * + */ + + + /************************************************************************** + * + * @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 + * + */ + + + /************************************************************************** + * + * @chapter: + * error_codes + * + * @title: + * Error Codes + * + * @sections: + * error_enumerations + * error_code_values + * + */ + + +/* END */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftcid.h b/msvc/msvc2003/freetype/include/freetype/ftcid.h new file mode 100644 index 00000000..8eafc1c7 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftcid.h @@ -0,0 +1,168 @@ +/**************************************************************************** + * + * ftcid.h + * + * FreeType API for accessing CID font information (specification). + * + * Copyright (C) 2007-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftcolor.h b/msvc/msvc2003/freetype/include/freetype/ftcolor.h new file mode 100644 index 00000000..cf180219 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftcolor.h @@ -0,0 +1,311 @@ +/**************************************************************************** + * + * ftcolor.h + * + * FreeType's glyph color management (specification). + * + * Copyright (C) 2018-2019 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 FTCOLOR_H_ +#define FTCOLOR_H_ + +#include +#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: + * color_management + * + * @title: + * Glyph Color Management + * + * @abstract: + * Retrieving and manipulating OpenType's 'CPAL' table data. + * + * @description: + * The functions described here allow access and manipulation of color + * palette entries in OpenType's 'CPAL' tables. + */ + + + /************************************************************************** + * + * @struct: + * FT_Color + * + * @description: + * This structure models a BGRA color value of a 'CPAL' palette entry. + * + * The used color space is sRGB; the colors are not pre-multiplied, and + * alpha values must be explicitly set. + * + * @fields: + * blue :: + * Blue value. + * + * green :: + * Green value. + * + * red :: + * Red value. + * + * alpha :: + * Alpha value, giving the red, green, and blue color's opacity. + * + * @since: + * 2.10 + */ + typedef struct FT_Color_ + { + FT_Byte blue; + FT_Byte green; + FT_Byte red; + FT_Byte alpha; + + } FT_Color; + + + /************************************************************************** + * + * @enum: + * FT_PALETTE_XXX + * + * @description: + * A list of bit field constants used in the `palette_flags` array of the + * @FT_Palette_Data structure to indicate for which background a palette + * with a given index is usable. + * + * @values: + * FT_PALETTE_FOR_LIGHT_BACKGROUND :: + * The palette is appropriate to use when displaying the font on a + * light background such as white. + * + * FT_PALETTE_FOR_DARK_BACKGROUND :: + * The palette is appropriate to use when displaying the font on a dark + * background such as black. + * + * @since: + * 2.10 + */ +#define FT_PALETTE_FOR_LIGHT_BACKGROUND 0x01 +#define FT_PALETTE_FOR_DARK_BACKGROUND 0x02 + + + /************************************************************************** + * + * @struct: + * FT_Palette_Data + * + * @description: + * This structure holds the data of the 'CPAL' table. + * + * @fields: + * num_palettes :: + * The number of palettes. + * + * palette_name_ids :: + * A read-only array of palette name IDs with `num_palettes` elements, + * corresponding to entries like 'dark' or 'light' in the font's 'name' + * table. + * + * An empty name ID in the 'CPAL' table gets represented as value + * 0xFFFF. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * palette_flags :: + * A read-only array of palette flags with `num_palettes` elements. + * Possible values are an ORed combination of + * @FT_PALETTE_FOR_LIGHT_BACKGROUND and + * @FT_PALETTE_FOR_DARK_BACKGROUND. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * num_palette_entries :: + * The number of entries in a single palette. All palettes have the + * same size. + * + * palette_entry_name_ids :: + * A read-only array of palette entry name IDs with + * `num_palette_entries`. In each palette, entries with the same index + * have the same function. For example, index~0 might correspond to + * string 'outline' in the font's 'name' table to indicate that this + * palette entry is used for outlines, index~1 might correspond to + * 'fill' to indicate the filling color palette entry, etc. + * + * An empty entry name ID in the 'CPAL' table gets represented as value + * 0xFFFF. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * @note: + * Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to + * name strings. + * + * @since: + * 2.10 + */ + typedef struct FT_Palette_Data_ { + FT_UShort num_palettes; + const FT_UShort* palette_name_ids; + const FT_UShort* palette_flags; + + FT_UShort num_palette_entries; + const FT_UShort* palette_entry_name_ids; + + } FT_Palette_Data; + + + /************************************************************************** + * + * @function: + * FT_Palette_Data_Get + * + * @description: + * Retrieve the face's color palette data. + * + * @input: + * face :: + * The source face handle. + * + * @output: + * apalette :: + * A pointer to an @FT_Palette_Data structure. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * All arrays in the returned @FT_Palette_Data structure are read-only. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Data_Get( FT_Face face, + FT_Palette_Data *apalette ); + + + /************************************************************************** + * + * @function: + * FT_Palette_Select + * + * @description: + * This function has two purposes. + * + * (1) It activates a palette for rendering color glyphs, and + * + * (2) it retrieves all (unmodified) color entries of this palette. This + * function returns a read-write array, which means that a calling + * application can modify the palette entries on demand. + * + * A corollary of (2) is that calling the function, then modifying some + * values, then calling the function again with the same arguments resets + * all color entries to the original 'CPAL' values; all user modifications + * are lost. + * + * @input: + * face :: + * The source face handle. + * + * palette_index :: + * The palette index. + * + * @output: + * apalette :: + * An array of color entries for a palette with index `palette_index`, + * having `num_palette_entries` elements (as found in the + * `FT_Palette_Data` structure). If `apalette` is set to `NULL`, no + * array gets returned (and no color entries can be modified). + * + * In case the font doesn't support color palettes, `NULL` is returned. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The array pointed to by `apalette_entries` is owned and managed by + * FreeType. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Select( FT_Face face, + FT_UShort palette_index, + FT_Color* *apalette ); + + + /************************************************************************** + * + * @function: + * FT_Palette_Set_Foreground_Color + * + * @description: + * 'COLR' uses palette index 0xFFFF to indicate a 'text foreground + * color'. This function sets this value. + * + * @input: + * face :: + * The source face handle. + * + * foreground_color :: + * An `FT_Color` structure to define the text foreground color. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If this function isn't called, the text foreground color is set to + * white opaque (BGRA value 0xFFFFFFFF) if + * @FT_PALETTE_FOR_DARK_BACKGROUND is present for the current palette, + * and black opaque (BGRA value 0x000000FF) otherwise, including the case + * that no palette types are available in the 'CPAL' table. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Set_Foreground_Color( FT_Face face, + FT_Color foreground_color ); + + /* */ + + +FT_END_HEADER + +#endif /* FTCOLOR_H_ */ + + +/* END */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftdriver.h b/msvc/msvc2003/freetype/include/freetype/ftdriver.h new file mode 100644 index 00000000..497bde9f --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftdriver.h @@ -0,0 +1,1232 @@ +/**************************************************************************** + * + * ftdriver.h + * + * FreeType API for controlling driver modules (specification only). + * + * Copyright (C) 2017-2019 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 +#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://rastertragedy.com/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://rastertragedy.com/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://rastertragedy.com/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://rastertragedy.com/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. + * + * @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'). + * + * @example: + * 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_HINTING_ADOBE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "cff", + * "hinting-engine", &hinting_engine ); + * ``` + * + * @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. + * + * @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. + * + * @example: + * ``` + * FT_Library library; + * FT_Bool no_stem_darkening = TRUE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "cff", + * "no-stem-darkening", &no_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 (see the example + * below that demonstrates this for the Type~1 driver). + * + * 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 + * ``` + * + * @example: + * ``` + * 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 ); + * ``` + * + * @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. + * + * @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). + * + * @example: + * ``` + * 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 ); + * ``` + * + * @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. + * + * @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'). + * + * @example: + * 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 ); + * ``` + * + * @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. + * + * @example: + * 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. + * + * @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. + * + * @example: + * ``` + * FT_Library library; + * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "autofitter", + * "fallback-script", &fallback_script ); + * ``` + * + * @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. + * + * @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. + * + * @example: + * ``` + * FT_Library library; + * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "autofitter", + * "default-script", &default_script ); + * ``` + * + * @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. + * + * @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). + * + * @example: + * ``` + * 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 ); + * ``` + * + * @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. + * + * @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. + * + * @example: + * This example 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 ); + * ``` + * + * @since: + * 2.6 + * + */ + + + /* */ + + +FT_END_HEADER + + +#endif /* FTDRIVER_H_ */ + + +/* END */ diff --git a/msvc/msvc2003/freetype/include/freetype/fterrdef.h b/msvc/msvc2003/freetype/include/freetype/fterrdef.h new file mode 100644 index 00000000..9bc7dc65 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/fterrdef.h @@ -0,0 +1,279 @@ +/**************************************************************************** + * + * fterrdef.h + * + * FreeType error codes (specification). + * + * Copyright (C) 2002-2019 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/fterrors.h b/msvc/msvc2003/freetype/include/freetype/fterrors.h new file mode 100644 index 00000000..58f5a3ea --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/fterrors.h @@ -0,0 +1,285 @@ +/**************************************************************************** + * + * fterrors.h + * + * FreeType error code handling (specification). + * + * Copyright (C) 1996-2019 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 + * ``` + * + * An alternative to using an array is a switch statement. + * + * ``` + * #undef FTERRORS_H_ + * #define FT_ERROR_START_LIST switch ( error_code ) { + * #define FT_ERRORDEF( e, v, s ) case v: return s; + * #define FT_ERROR_END_LIST } + * ``` + * + * If you use `FT_CONFIG_OPTION_USE_MODULE_ERRORS`, `error_code` should + * be replaced with `FT_ERROR_BASE(error_code)` in the last example. + */ + + /* */ + + /* 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_INCLUDE_ERR_PROTOS + +#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 _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 + + /* FT_INCLUDE_ERR_PROTOS: Control if function prototypes should be */ + /* included with `#include FT_ERRORS_H'. This is */ + /* only true where `FT_ERRORDEF` is undefined. */ + /* FT_ERR_PROTOS_DEFINED: Actual multiple-inclusion protection of */ + /* `fterrors.h`. */ +#ifdef FT_INCLUDE_ERR_PROTOS +#undef FT_INCLUDE_ERR_PROTOS + +#ifndef FT_ERR_PROTOS_DEFINED +#define FT_ERR_PROTOS_DEFINED + + + /************************************************************************** + * + * @function: + * FT_Error_String + * + * @description: + * Retrieve the description of a valid FreeType error code. + * + * @input: + * error_code :: + * A valid FreeType error code. + * + * @return: + * A C~string or `NULL`, if any error occurred. + * + * @note: + * FreeType has to be compiled with `FT_CONFIG_OPTION_ERROR_STRINGS` or + * `FT_DEBUG_LEVEL_ERROR` to get meaningful descriptions. + * 'error_string' will be `NULL` otherwise. + * + * Module identification will be ignored: + * + * ```c + * strcmp( FT_Error_String( FT_Err_Unknown_File_Format ), + * FT_Error_String( BDF_Err_Unknown_File_Format ) ) == 0; + * ``` + */ + FT_EXPORT( const char* ) + FT_Error_String( FT_Error error_code ); + + +#endif /* FT_ERR_PROTOS_DEFINED */ + +#endif /* FT_INCLUDE_ERR_PROTOS */ + +#endif /* !(FTERRORS_H_ && __FTERRORS_H__) */ + + +/* END */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftfntfmt.h b/msvc/msvc2003/freetype/include/freetype/ftfntfmt.h new file mode 100644 index 00000000..aae0b132 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftfntfmt.h @@ -0,0 +1,94 @@ +/**************************************************************************** + * + * ftfntfmt.h + * + * Support functions for font formats. + * + * Copyright (C) 2002-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftgasp.h b/msvc/msvc2003/freetype/include/freetype/ftgasp.h new file mode 100644 index 00000000..24673d8c --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftgasp.h @@ -0,0 +1,144 @@ +/**************************************************************************** + * + * ftgasp.h + * + * Access of TrueType's 'gasp' table (specification). + * + * Copyright (C) 2007-2019 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 +#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 + + + /************************************************************************** + * + * @function: + * 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftglyph.h b/msvc/msvc2003/freetype/include/freetype/ftglyph.h new file mode 100644 index 00000000..4067c2e6 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftglyph.h @@ -0,0 +1,665 @@ +/**************************************************************************** + * + * ftglyph.h + * + * FreeType convenience functions to handle glyphs (specification). + * + * Copyright (C) 1996-2019 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 +#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. These objects are + * detached from @FT_Face, contrary to @FT_GlyphSlot. + * + */ + + + /* 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_New_Glyph + * + * @description: + * A function used to create a new empty glyph image. Note that the + * created @FT_Glyph object must be released with @FT_Done_Glyph. + * + * @input: + * library :: + * A handle to the FreeType library object. + * + * format :: + * The format of the glyph's image. + * + * @output: + * aglyph :: + * A handle to the glyph object. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_New_Glyph( FT_Library library, + FT_Glyph_Format format, + FT_Glyph *aglyph ); + + + /************************************************************************** + * + * @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 is 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, &glyphs[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: */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftgxval.h b/msvc/msvc2003/freetype/include/freetype/ftgxval.h new file mode 100644 index 00000000..b14f637c --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftgxval.h @@ -0,0 +1,355 @@ +/**************************************************************************** + * + * ftgxval.h + * + * FreeType API for validating TrueTypeGX/AAT tables (specification). + * + * Copyright (C) 2004-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftgzip.h b/msvc/msvc2003/freetype/include/freetype/ftgzip.h new file mode 100644 index 00000000..418c6122 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftgzip.h @@ -0,0 +1,151 @@ +/**************************************************************************** + * + * ftgzip.h + * + * Gzip-compressed stream support. + * + * Copyright (C) 2002-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftimage.h b/msvc/msvc2003/freetype/include/freetype/ftimage.h new file mode 100644 index 00000000..d640b0b0 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftimage.h @@ -0,0 +1,1240 @@ +/**************************************************************************** + * + * ftimage.h + * + * FreeType glyph image formats and default raster interface + * (specification). + * + * Copyright (C) 1996-2019 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 +#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 used 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 & 0x03 ) + + /* see the `tags` field in `FT_Outline` for a description of the values */ +#define FT_CURVE_TAG_ON 0x01 +#define FT_CURVE_TAG_CONIC 0x00 +#define FT_CURVE_TAG_CUBIC 0x02 + +#define FT_CURVE_TAG_HAS_SCANMODE 0x04 + +#define FT_CURVE_TAG_TOUCH_X 0x08 /* reserved for TrueType hinter */ +#define FT_CURVE_TAG_TOUCH_Y 0x10 /* reserved for TrueType hinter */ + +#define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \ + FT_CURVE_TAG_TOUCH_Y ) + /* values 0x20, 0x40, and 0x80 are reserved */ + + + /* these constants are deprecated; use the corresponding */ + /* `FT_CURVE_TAG_XXX` values instead */ +#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. + */ + 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: */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftincrem.h b/msvc/msvc2003/freetype/include/freetype/ftincrem.h new file mode 100644 index 00000000..a4db02b5 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftincrem.h @@ -0,0 +1,344 @@ +/**************************************************************************** + * + * ftincrem.h + * + * FreeType incremental loading (specification). + * + * Copyright (C) 2002-2019 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 +#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 = ¶meter; // 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftlcdfil.h b/msvc/msvc2003/freetype/include/freetype/ftlcdfil.h new file mode 100644 index 00000000..3a19d043 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftlcdfil.h @@ -0,0 +1,328 @@ +/**************************************************************************** + * + * ftlcdfil.h + * + * FreeType API for color filtering of subpixel bitmap glyphs + * (specification). + * + * Copyright (C) 2006-2019 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 +#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_rendering + * + * @title: + * Subpixel Rendering + * + * @abstract: + * API to control subpixel rendering. + * + * @description: + * FreeType provides two alternative subpixel rendering technologies. + * Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your + * `ftoption.h` file, this enables patented ClearType-style rendering. + * Otherwise, Harmony LCD rendering is enabled. These technologies are + * controlled differently and API described below, although always + * available, performs its function when appropriate method is enabled + * and does nothing otherwise. + * + * 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. Using the + * subpixels coverages unfiltered can create severe color fringes + * especially when rendering thin features. Indeed, to produce + * black-on-white text, the nearby color subpixels must be dimmed + * equally. + * + * A good 5-tap FIR filter should be applied to subpixel coverages + * regardless of pixel boundaries and should have these properties: + * + * 1. It should be symmetrical, like {~a, b, c, b, a~}, to avoid + * any shifts in appearance. + * + * 2. It should be color-balanced, meaning a~+ b~=~c, to reduce color + * fringes by distributing the computed coverage for one subpixel to + * all subpixels equally. + * + * 3. It should be normalized, meaning 2a~+ 2b~+ c~=~1.0 to maintain + * overall brightness. + * + * Boxy 3-tap filter {0, 1/3, 1/3, 1/3, 0} is sharper but is less + * forgiving of non-ideal gamma curves of a screen (and viewing angles), + * beveled filters are fuzzier but more tolerant. + * + * Use the @FT_Library_SetLcdFilter or @FT_Library_SetLcdFilterWeights + * API to specify a low-pass filter, which is then applied to + * subpixel-rendered bitmaps generated through @FT_Render_Glyph. + * + * Harmony LCD rendering is suitable to panels with any regular subpixel + * structure, not just monitors with 3 color striped subpixels, as long + * as the color subpixels have fixed positions relative to the pixel + * center. In this case, each color channel is then rendered separately + * after shifting the outline opposite to the subpixel shift so that the + * coverage maps are aligned. This method is immune to color fringes + * because the shifts do not change integral coverage. + * + * The subpixel geometry must be specified by xy-coordinates for each + * subpixel. By convention they may come in the RGB order: {{-1/3, 0}, + * {0, 0}, {1/3, 0}} for standard RGB striped panel or {{-1/6, 1/4}, + * {-1/6, -1/4}, {1/3, 0}} for a certain PenTile panel. + * + * Use the @FT_Library_SetLcdGeometry API to specify subpixel positions. + * If one follows the RGB order convention, the same order applies to the + * resulting @FT_PIXEL_MODE_LCD and @FT_PIXEL_MODE_LCD_V bitmaps. Note, + * however, that the coordinate frame for the latter must be rotated + * clockwise. Harmony with default LCD geometry is equivalent to + * ClearType with light filter. + * + * As a result of ClearType filtering or Harmony rendering, the + * dimensions of LCD bitmaps can be 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 2~subpixels to + * the left, and 2~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. + * + * The ClearType and Harmony rendering is applicable to glyph bitmaps + * rendered through @FT_Render_Glyph, @FT_Load_Glyph, @FT_Load_Char, and + * @FT_Glyph_To_Bitmap, when @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V + * is specified. This API does not control @FT_Outline_Render and + * @FT_Outline_Get_Bitmap. + * + * The described algorithms can completely remove color artefacts when + * combined with gamma-corrected alpha blending in linear space. Each of + * the 3~alpha values (subpixels) must by 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. + */ + + + /************************************************************************** + * + * @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 :: + * This is a beveled, normalized, and color-balanced five-tap filter + * with weights of [0x08 0x4D 0x56 0x4D 0x08] in 1/256th units. + * + * FT_LCD_FILTER_LIGHT :: + * this is a boxy, normalized, and color-balanced three-tap filter with + * weights of [0x00 0x55 0x56 0x55 0x00] in 1/256th units. + * + * FT_LCD_FILTER_LEGACY :: + * FT_LCD_FILTER_LEGACY1 :: + * 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. + * This filter is only provided for comparison purposes, and might be + * disabled or stay unsupported in the future. The second value is + * provided for compatibility with FontConfig, which historically used + * different enumeration, sometimes incorrectly forwarded to FreeType. + * + * @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; + + + /************************************************************************** + * + * @function: + * 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 ); + + + /************************************************************************** + * + * @function: + * 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 in 1/256th units. + * + * @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]; + + + /************************************************************************** + * + * @function: + * FT_Library_SetLcdGeometry + * + * @description: + * This function can be used to modify default positions of color + * subpixels, which controls Harmony LCD rendering. + * + * @input: + * library :: + * A handle to the target library instance. + * + * sub :: + * A pointer to an array of 3 vectors in 26.6 fractional pixel format; + * the function modifies the default values, see the note below. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Subpixel geometry examples: + * + * - {{-21, 0}, {0, 0}, {21, 0}} is the default, corresponding to 3 color + * stripes shifted by a third of a pixel. This could be an RGB panel. + * + * - {{21, 0}, {0, 0}, {-21, 0}} looks the same as the default but can + * specify a BGR panel instead, while keeping the bitmap in the same + * RGB888 format. + * + * - {{0, 21}, {0, 0}, {0, -21}} is the vertical RGB, but the bitmap + * stays RGB888 as a result. + * + * - {{-11, 16}, {-11, -16}, {22, 0}} is a certain PenTile arrangement. + * + * This function does nothing and returns `FT_Err_Unimplemented_Feature` + * in the context of ClearType-style subpixel rendering when + * `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is defined in your build of the + * library. + * + * @since: + * 2.10.0 + */ + FT_EXPORT( FT_Error ) + FT_Library_SetLcdGeometry( FT_Library library, + FT_Vector sub[3] ); + + /* */ + + +FT_END_HEADER + +#endif /* FTLCDFIL_H_ */ + + +/* END */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftlist.h b/msvc/msvc2003/freetype/include/freetype/ftlist.h new file mode 100644 index 00000000..4782892d --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftlist.h @@ -0,0 +1,297 @@ +/**************************************************************************** + * + * ftlist.h + * + * Generic list support for FreeType (specification). + * + * Copyright (C) 1996-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftlzw.h b/msvc/msvc2003/freetype/include/freetype/ftlzw.h new file mode 100644 index 00000000..fd22968f --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftlzw.h @@ -0,0 +1,100 @@ +/**************************************************************************** + * + * ftlzw.h + * + * LZW-compressed stream support. + * + * Copyright (C) 2004-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftmac.h b/msvc/msvc2003/freetype/include/freetype/ftmac.h new file mode 100644 index 00000000..92b9f3dc --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftmac.h @@ -0,0 +1,290 @@ +/**************************************************************************** + * + * ftmac.h + * + * Additional Mac-specific API. + * + * Copyright (C) 1996-2019 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 + + +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. + * + * @example: + * 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftmm.h b/msvc/msvc2003/freetype/include/freetype/ftmm.h new file mode 100644 index 00000000..f2e16b64 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftmm.h @@ -0,0 +1,753 @@ +/**************************************************************************** + * + * ftmm.h + * + * FreeType Multiple Master font interface (specification). + * + * Copyright (C) 1996-2019 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 +#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 ); + + + /************************************************************************** + * + * @function: + * FT_Set_MM_WeightVector + * + * @description: + * For Adobe MM fonts, choose an interpolated font design by directly + * setting the weight vector. + * + * This function can't be used with TrueType GX or OpenType variation + * fonts. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * len :: + * The length of the weight vector array. If it is larger than the + * number of designs, the extra values are ignored. If it is less than + * the number of designs, the remaining values are set to zero. + * + * weightvector :: + * An array representing the weight vector. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Adobe Multiple Master fonts limit the number of designs, and thus the + * length of the weight vector to~16. + * + * If `len` is zero and `weightvector` is `NULL`, the weight vector array + * is reset to the default values. + * + * The Adobe documentation also states that the values in the + * WeightVector array must total 1.0 +/-~0.001. In practice this does + * not seem to be enforced, so is not enforced here, either. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Set_MM_WeightVector( FT_Face face, + FT_UInt len, + FT_Fixed* weightvector ); + + + /************************************************************************** + * + * @function: + * FT_Get_MM_WeightVector + * + * @description: + * For Adobe MM fonts, retrieve the current weight vector of the font. + * + * This function can't be used with TrueType GX or OpenType variation + * fonts. + * + * @inout: + * face :: + * A handle to the source face. + * + * len :: + * A pointer to the size of the array to be filled. If the size of the + * array is less than the number of designs, `FT_Err_Invalid_Argument` + * is returned, and `len` is set to the required size (the number of + * designs). If the size of the array is greater than the number of + * designs, the remaining entries are set to~0. On successful + * completion, `len` is set to the number of designs (i.e., the number + * of values written to the array). + * + * @output: + * weightvector :: + * An array to be filled. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Adobe Multiple Master fonts limit the number of designs, and thus the + * length of the WeightVector to~16. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Get_MM_WeightVector( FT_Face face, + FT_UInt* len, + FT_Fixed* weightvector ); + + + /************************************************************************** + * + * @enum: + * FT_VAR_AXIS_FLAG_XXX + * + * @description: + * A list of bit flags used in the return value of + * @FT_Get_Var_Axis_Flags. + * + * @values: + * FT_VAR_AXIS_FLAG_HIDDEN :: + * The variation axis should not be exposed to user interfaces. + * + * @since: + * 2.8.1 + */ +#define FT_VAR_AXIS_FLAG_HIDDEN 1 + + + /************************************************************************** + * + * @function: + * FT_Get_Var_Axis_Flags + * + * @description: + * Get the 'flags' field of an OpenType Variation Axis Record. + * + * Not meaningful for Adobe MM fonts (`*flags` is always zero). + * + * @input: + * master :: + * The variation descriptor. + * + * axis_index :: + * The index of the requested variation axis. + * + * @output: + * flags :: + * The 'flags' field. See @FT_VAR_AXIS_FLAG_XXX for possible values. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.8.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Axis_Flags( FT_MM_Var* master, + FT_UInt axis_index, + FT_UInt* flags ); + + + /************************************************************************** + * + * @function: + * FT_Set_Named_Instance + * + * @description: + * Set or change the current named instance. + * + * @input: + * face :: + * A handle to the source face. + * + * instance_index :: + * The index of the requested instance, starting with value 1. If set + * to value 0, FreeType switches to font access without a named + * instance. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The function uses the value of `instance_index` to set bits 16-30 of + * the face's `face_index` field. It also resets any variation applied + * to the font, and the @FT_FACE_FLAG_VARIATION bit of the face's + * `face_flags` field gets reset to zero (i.e., @FT_IS_VARIATION will + * return false). + * + * For Adobe MM fonts (which don't have named instances) this function + * simply resets the current face to the default instance. + * + * @since: + * 2.9 + */ + FT_EXPORT( FT_Error ) + FT_Set_Named_Instance( FT_Face face, + FT_UInt instance_index ); + + /* */ + + +FT_END_HEADER + +#endif /* FTMM_H_ */ + + +/* END */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftmodapi.h b/msvc/msvc2003/freetype/include/freetype/ftmodapi.h new file mode 100644 index 00000000..88488bfe --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftmodapi.h @@ -0,0 +1,785 @@ +/**************************************************************************** + * + * ftmodapi.h + * + * FreeType modules public interface (specification). + * + * Copyright (C) 1996-2019 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 +#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. While being a public structure necessary + * for FreeType's module bookkeeping, most of the fields are essentially + * internal, not to be used directly by an application. + * + * @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_interface :: + * A typeless pointer to a structure (which varies between different + * modules) that holds the module's interface functions. This is + * essentially what `get_interface` returns. + * + * 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). + * + * ``` + * + * ':' + * '=' + * + * ':' + * '=' + * ... + * ``` + * + * 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 ); + + + /************************************************************************** + * + * @functype: + * FT_DebugHook_Func + * + * @description: + * A drop-in replacement (or rather a wrapper) for the bytecode or + * charstring interpreter's main loop function. + * + * Its job is essentially + * + * - to activate debug mode to enforce single-stepping, + * + * - to call the main loop function to interpret the next opcode, and + * + * - to show the changed context to the user. + * + * An example for such a main loop function is `TT_RunIns` (declared in + * FreeType's internal header file `src/truetype/ttinterp.h`). + * + * Have a look at the source code of the `ttdebug` FreeType demo program + * for an example of a drop-in replacement. + * + * @inout: + * arg :: + * A typeless pointer, to be cast to the main loop function's data + * structure (which depends on the font module). For TrueType fonts + * it is bytecode interpreter's execution context, `TT_ExecContext`, + * which is declared in FreeType's internal header file `tttypes.h`. + */ + typedef void + (*FT_DebugHook_Func)( void* arg ); + + + /************************************************************************** + * + * @enum: + * FT_DEBUG_HOOK_XXX + * + * @description: + * A list of named debug hook indices. + * + * @values: + * FT_DEBUG_HOOK_TRUETYPE:: + * This hook index identifies the TrueType bytecode debugger. + */ +#define FT_DEBUG_HOOK_TRUETYPE 0 + + + /************************************************************************** + * + * @function: + * FT_Set_Debug_Hook + * + * @description: + * Set a debug hook function for debugging the interpreter of a font + * format. + * + * While this is a public API function, an application needs access to + * FreeType's internal header files to do something useful. + * + * Have a look at the source code of the `ttdebug` FreeType demo program + * for an example of its usage. + * + * @inout: + * library :: + * A handle to the library object. + * + * @input: + * hook_index :: + * The index of the debug hook. You should use defined enumeration + * macros like @FT_DEBUG_HOOK_TRUETYPE. + * + * debug_hook :: + * The function used to debug the interpreter. + * + * @note: + * Currently, four debug hook slots are available, but only one (for the + * TrueType interpreter) is defined. + */ + 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; + + + /************************************************************************** + * + * @function: + * 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftmoderr.h b/msvc/msvc2003/freetype/include/freetype/ftmoderr.h new file mode 100644 index 00000000..e1699357 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftmoderr.h @@ -0,0 +1,203 @@ +/**************************************************************************** + * + * ftmoderr.h + * + * FreeType module error offsets (specification). + * + * Copyright (C) 2001-2019 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftotval.h b/msvc/msvc2003/freetype/include/freetype/ftotval.h new file mode 100644 index 00000000..c034f489 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftotval.h @@ -0,0 +1,207 @@ +/**************************************************************************** + * + * ftotval.h + * + * FreeType API for validating OpenType tables (specification). + * + * Copyright (C) 2004-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftoutln.h b/msvc/msvc2003/freetype/include/freetype/ftoutln.h new file mode 100644 index 00000000..75c3d015 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftoutln.h @@ -0,0 +1,593 @@ +/**************************************************************************** + * + * ftoutln.h + * + * Support for the FT_Outline type used to store glyph shapes of + * most scalable font formats (specification). + * + * Copyright (C) 1996-2019 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 +#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 ); + + + /************************************************************************** + * + * @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 ); + + + /************************************************************************** + * + * @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. + * + * To get meaningful results, font scaling values must be set with + * functions like @FT_Set_Char_Size before calling FT_Render_Glyph. + * + * @example: + * ``` + * FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); + * + * if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ) + * FT_Outline_Embolden( &face->glyph->outline, strength ); + * ``` + * + */ + 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: */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftparams.h b/msvc/msvc2003/freetype/include/freetype/ftparams.h new file mode 100644 index 00000000..c374ee2f --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftparams.h @@ -0,0 +1,204 @@ +/**************************************************************************** + * + * ftparams.h + * + * FreeType API for possible FT_Parameter tags (specification only). + * + * Copyright (C) 2017-2019 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 +#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. + * + */ + + + /************************************************************************** + * + * @enum: + * 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 + + + /************************************************************************** + * + * @enum: + * 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 + + + /************************************************************************** + * + * @enum: + * 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' ) + + + /************************************************************************** + * + * @enum: + * 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' ) + + + /************************************************************************** + * + * @enum: + * 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' ) + + + /************************************************************************** + * + * @enum: + * 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' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_UNPATENTED_HINTING + * + * @description: + * Deprecated, no effect. + * + * Previously: A constant used as the tag of an @FT_Parameter structure + * to indicate that unpatented methods only should be used by the + * TrueType bytecode interpreter for a typeface opened by @FT_Open_Face. + * + */ +#define FT_PARAM_TAG_UNPATENTED_HINTING \ + FT_MAKE_TAG( 'u', 'n', 'p', 'a' ) + + + /* */ + + +FT_END_HEADER + + +#endif /* FTPARAMS_H_ */ + + +/* END */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftpfr.h b/msvc/msvc2003/freetype/include/freetype/ftpfr.h new file mode 100644 index 00000000..b4eca76e --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftpfr.h @@ -0,0 +1,180 @@ +/**************************************************************************** + * + * ftpfr.h + * + * FreeType API for accessing PFR-specific data (specification only). + * + * Copyright (C) 2002-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftrender.h b/msvc/msvc2003/freetype/include/freetype/ftrender.h new file mode 100644 index 00000000..a01c7742 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftrender.h @@ -0,0 +1,245 @@ +/**************************************************************************** + * + * ftrender.h + * + * FreeType renderer modules public interface (specification). + * + * Copyright (C) 1996-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftsizes.h b/msvc/msvc2003/freetype/include/freetype/ftsizes.h new file mode 100644 index 00000000..6c63cef2 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftsizes.h @@ -0,0 +1,160 @@ +/**************************************************************************** + * + * ftsizes.h + * + * FreeType size objects management (specification). + * + * Copyright (C) 1996-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftsnames.h b/msvc/msvc2003/freetype/include/freetype/ftsnames.h new file mode 100644 index 00000000..4d43602a --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftsnames.h @@ -0,0 +1,273 @@ +/**************************************************************************** + * + * 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 (C) 1996-2019 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 +#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. + * + * @note: + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + */ + 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. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + */ + 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. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + * + * @since: + * 2.8 + */ + FT_EXPORT( FT_Error ) + FT_Get_Sfnt_LangTag( FT_Face face, + FT_UInt langID, + FT_SfntLangTag *alangTag ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTSNAMES_H_ */ + + +/* END */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftstroke.h b/msvc/msvc2003/freetype/include/freetype/ftstroke.h new file mode 100644 index 00000000..01a9c181 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftstroke.h @@ -0,0 +1,772 @@ +/**************************************************************************** + * + * ftstroke.h + * + * FreeType path stroker (specification). + * + * Copyright (C) 2002-2019 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 +#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: */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftsynth.h b/msvc/msvc2003/freetype/include/freetype/ftsynth.h new file mode 100644 index 00000000..8754f97c --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftsynth.h @@ -0,0 +1,84 @@ +/**************************************************************************** + * + * ftsynth.h + * + * FreeType synthesizing code for emboldening and slanting + * (specification). + * + * Copyright (C) 2000-2019 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 +#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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftsystem.h b/msvc/msvc2003/freetype/include/freetype/ftsystem.h new file mode 100644 index 00000000..889a6ba1 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftsystem.h @@ -0,0 +1,353 @@ +/**************************************************************************** + * + * ftsystem.h + * + * FreeType low-level system interface definition (specification). + * + * Copyright (C) 1996-2019 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 + + +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. In particular, the `FT_GET_XXX` macros use this instead of + * the `pos` field. + * + * 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/fttrigon.h b/msvc/msvc2003/freetype/include/freetype/fttrigon.h new file mode 100644 index 00000000..37e1412f --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/fttrigon.h @@ -0,0 +1,350 @@ +/**************************************************************************** + * + * fttrigon.h + * + * FreeType trigonometric functions (specification). + * + * Copyright (C) 2001-2019 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 `angle2-angle1`. + * + */ + 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/fttypes.h b/msvc/msvc2003/freetype/include/freetype/fttypes.h new file mode 100644 index 00000000..10571505 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/fttypes.h @@ -0,0 +1,615 @@ +/**************************************************************************** + * + * fttypes.h + * + * FreeType simple types definitions (specification only). + * + * Copyright (C) 1996-2019 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 +#include FT_CONFIG_CONFIG_H +#include FT_SYSTEM_H +#include FT_IMAGE_H + +#include + + +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) != 0 ) ) + + /* 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ftwinfnt.h b/msvc/msvc2003/freetype/include/freetype/ftwinfnt.h new file mode 100644 index 00000000..3437913d --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ftwinfnt.h @@ -0,0 +1,277 @@ +/**************************************************************************** + * + * ftwinfnt.h + * + * FreeType API for accessing Windows fnt-specific data. + * + * Copyright (C) 2003-2019 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 +#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 : + * + * 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://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers + * , + * + * 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: */ diff --git a/msvc/msvc2003/freetype/include/freetype/t1tables.h b/msvc/msvc2003/freetype/include/freetype/t1tables.h new file mode 100644 index 00000000..645e6457 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/t1tables.h @@ -0,0 +1,774 @@ +/**************************************************************************** + * + * t1tables.h + * + * Basic Type 1/Type 2 tables definitions and interface (specification + * only). + * + * Copyright (C) 1996-2019 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 +#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-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. In + * most cases, they are part of the font's '/FDArray' array. Within a + * CID font file, such (internal) subfont dictionaries are enclosed by + * '%ADOBeginFontDict' and '%ADOEndFontDict' comments. + * + * Note that `CID_FaceDictRec` misses a field for the '/FontName' + * keyword, specifying the subfont's name (the top-level font name is + * given by the '/CIDFontName' keyword). This is an oversight, but it + * doesn't limit the 'cid' font module's functionality because FreeType + * neither needs this entry nor gives access to CID subfonts. + */ + typedef struct CID_FaceDictRec_ + { + PS_PrivateRec private_dict; + + FT_UInt len_buildchar; + FT_Fixed forcebold_threshold; + FT_Pos stroke_width; + FT_Fixed expansion_factor; /* this is a duplicate of */ + /* `private_dict->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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/ttnameid.h b/msvc/msvc2003/freetype/include/freetype/ttnameid.h new file mode 100644 index 00000000..cc677de7 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/ttnameid.h @@ -0,0 +1,1236 @@ +/**************************************************************************** + * + * ttnameid.h + * + * TrueType name ID definitions (specification only). + * + * Copyright (C) 1996-2019 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 + + +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://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings , + * + * 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/tttables.h b/msvc/msvc2003/freetype/include/freetype/tttables.h new file mode 100644 index 00000000..d04f8102 --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/tttables.h @@ -0,0 +1,856 @@ +/**************************************************************************** + * + * tttables.h + * + * Basic SFNT/TrueType tables definitions and interface + * (specification only). + * + * Copyright (C) 1996-2019 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 +#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. The 64-bit timestamps are stored in + * two-element arrays `Created` and `Modified`, first the upper then + * the lower 32~bits. + */ + 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_ULong Created [2]; + FT_ULong 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. + * + * @example: + * Here is an example demonstrating access to 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 */ diff --git a/msvc/msvc2003/freetype/include/freetype/tttags.h b/msvc/msvc2003/freetype/include/freetype/tttags.h new file mode 100644 index 00000000..bd0986ef --- /dev/null +++ b/msvc/msvc2003/freetype/include/freetype/tttags.h @@ -0,0 +1,123 @@ +/**************************************************************************** + * + * tttags.h + * + * Tags for TrueType and OpenType tables (specification only). + * + * Copyright (C) 1996-2019 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 +#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_COLR FT_MAKE_TAG( 'C', 'O', 'L', 'R' ) +#define TTAG_CPAL FT_MAKE_TAG( 'C', 'P', 'A', 'L' ) +#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 */ diff --git a/msvc/msvc2003/freetype/include/ft2build.h b/msvc/msvc2003/freetype/include/ft2build.h new file mode 100644 index 00000000..e3f48879 --- /dev/null +++ b/msvc/msvc2003/freetype/include/ft2build.h @@ -0,0 +1,44 @@ +/**************************************************************************** + * + * ft2build.h + * + * FreeType 2 build and setup macros. + * + * Copyright (C) 1996-2019 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 + * #include FT_FREETYPE_H + * ``` + * + */ + + +#ifndef FT2BUILD_H_ +#define FT2BUILD_H_ + +#include + +#endif /* FT2BUILD_H_ */ + + +/* END */ diff --git a/msvc2003/freetype-2.10.0/lib/freetype.dll b/msvc/msvc2003/freetype/lib/freetype.dll similarity index 100% rename from msvc2003/freetype-2.10.0/lib/freetype.dll rename to msvc/msvc2003/freetype/lib/freetype.dll diff --git a/msvc2003/freetype-2.10.0/lib/freetype.lib b/msvc/msvc2003/freetype/lib/freetype.lib similarity index 100% rename from msvc2003/freetype-2.10.0/lib/freetype.lib rename to msvc/msvc2003/freetype/lib/freetype.lib diff --git a/msvc2003/freetype-2.10.0/readme.txt b/msvc/msvc2003/freetype/readme.txt similarity index 100% rename from msvc2003/freetype-2.10.0/readme.txt rename to msvc/msvc2003/freetype/readme.txt diff --git a/msvc2003/stdint.h b/msvc/msvc2003/stdint.h similarity index 100% rename from msvc2003/stdint.h rename to msvc/msvc2003/stdint.h diff --git a/res/bin2h.c b/res/bin2h.c index 06ca5a6a..67319fa5 100644 --- a/res/bin2h.c +++ b/res/bin2h.c @@ -12,21 +12,31 @@ int main(int argc, char *argv[]) if (argc > 2) { - char *last_forward_slash = strrchr(argv[1], '/'); - char *last_back_slash = strrchr(argv[1], '\\'); + char *last_forward_slash; + char *last_back_slash; + char *last_path_seperator; + char *filename_pointer; + char *dot; + size_t filename_length; + char *filename; + FILE *in_file; + FILE *out_file; - char *last_path_seperator = last_forward_slash > last_back_slash ? last_forward_slash : last_back_slash; + last_forward_slash = strrchr(argv[1], '/'); + last_back_slash = strrchr(argv[1], '\\'); - char *filename_pointer = (last_path_seperator == NULL) ? argv[1] : last_path_seperator + 1; - char *dot = strchr(filename_pointer, '.'); - size_t filename_length = (dot == NULL) ? strlen(filename_pointer) : dot - filename_pointer; + last_path_seperator = last_forward_slash > last_back_slash ? last_forward_slash : last_back_slash; - char *filename = malloc(filename_length + 1); + filename_pointer = (last_path_seperator == NULL) ? argv[1] : last_path_seperator + 1; + dot = strchr(filename_pointer, '.'); + filename_length = (dot == NULL) ? strlen(filename_pointer) : dot - filename_pointer; + + filename = malloc(filename_length + 1); memcpy(filename, filename_pointer, filename_length); filename[filename_length] = '\0'; - FILE *in_file = fopen(argv[1], "rb"); - FILE *out_file = fopen(argv[2], "w"); + in_file = fopen(argv[1], "rb"); + out_file = fopen(argv[2], "w"); if (in_file == NULL) { @@ -40,19 +50,24 @@ int main(int argc, char *argv[]) } else { + long in_file_size; + unsigned char *in_file_buffer; + unsigned char *in_file_pointer; + long i; + fseek(in_file, 0, SEEK_END); - const long in_file_size = ftell(in_file); + in_file_size = ftell(in_file); rewind(in_file); - unsigned char *in_file_buffer = malloc(in_file_size); + in_file_buffer = malloc(in_file_size); fread(in_file_buffer, 1, in_file_size, in_file); fclose(in_file); - unsigned char *in_file_pointer = in_file_buffer; + in_file_pointer = in_file_buffer; setvbuf(out_file, NULL, _IOFBF, 0x10000); fprintf(out_file, "#pragma once\n\nconst unsigned char r%s[0x%lX] = {\n\t", filename, in_file_size); - for (long i = 0; i < in_file_size - 1; ++i) + for (i = 0; i < in_file_size - 1; ++i) { if (i % 16 == 15) fprintf(out_file, "0x%02X,\n\t", *in_file_pointer++);