diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2017-10-13 22:53:19 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2017-10-13 22:53:19 +0000 |
commit | 1031c01a2674825fe7037630e3f37f05fd1e739c (patch) | |
tree | ebfef9c9c109565c30c9b2bc8b601a703aafa487 /Build | |
parent | eb1d91e185ce0b605a76da41e16cf0eb736edc06 (diff) |
harfbuzz-1.6.0
git-svn-id: svn://tug.org/texlive/trunk@45535 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build')
68 files changed, 3283 insertions, 1623 deletions
diff --git a/Build/source/libs/README b/Build/source/libs/README index 69d1ab761a3..0a9fca8579b 100644 --- a/Build/source/libs/README +++ b/Build/source/libs/README @@ -24,7 +24,7 @@ gmp 6.1.2 - checked 16dec16 graphite2 1.3.10 - checked 20jun17 http://sourceforge.net/projects/silgraphite/files/graphite2/ -harfbuzz 1.5.1 - checked 06Sep17 +harfbuzz 1.6.0 - checked 13oct17 http://www.freedesktop.org/software/harfbuzz/release/ icu 58.2 - checked 13mar17 diff --git a/Build/source/libs/harfbuzz/ChangeLog b/Build/source/libs/harfbuzz/ChangeLog index 5b813118fc8..ddde964b716 100644 --- a/Build/source/libs/harfbuzz/ChangeLog +++ b/Build/source/libs/harfbuzz/ChangeLog @@ -1,3 +1,8 @@ +2017-10-13 Akira Kakuto <kakuto@fuk.kindai.ac.jp> + + Import harfbuzz-1.6.0. + * version.ac: Adjusted. + 2017-09-06 Akira Kakuto <kakuto@fuk.kindai.ac.jp> Import harfbuzz-1.5.1. diff --git a/Build/source/libs/harfbuzz/TLpatches/ChangeLog b/Build/source/libs/harfbuzz/TLpatches/ChangeLog index c63378ab3d4..ae72eb2fb82 100644 --- a/Build/source/libs/harfbuzz/TLpatches/ChangeLog +++ b/Build/source/libs/harfbuzz/TLpatches/ChangeLog @@ -1,3 +1,8 @@ +2017-10-13 Akira Kakuto <kakuto@fuk.kindai.ac.jp> + + Imported harfbuzz-1.6.0 source tree from: + http://www.freedesktop.org/software/harfbuzz/release/ + 2017-09-06 Akira Kakuto <kakuto@fuk.kindai.ac.jp> Imported harfbuzz-1.5.1 source tree from: diff --git a/Build/source/libs/harfbuzz/TLpatches/TL-Changes b/Build/source/libs/harfbuzz/TLpatches/TL-Changes index 62e7d3c1249..83a9a4486e5 100644 --- a/Build/source/libs/harfbuzz/TLpatches/TL-Changes +++ b/Build/source/libs/harfbuzz/TLpatches/TL-Changes @@ -1,4 +1,4 @@ -Changes applied to the harfbuzz-1.5.1/ tree as obtained from: +Changes applied to the harfbuzz-1.6.0/ tree as obtained from: http://www.freedesktop.org/software/harfbuzz/release/ Removed: @@ -24,5 +24,5 @@ Removed unused dirs: m4 test util - win32 + win32 -- deleted upstream src/hb-ucdn diff --git a/Build/source/libs/harfbuzz/configure b/Build/source/libs/harfbuzz/configure index 9838a3b1779..6a5dc22921c 100755 --- a/Build/source/libs/harfbuzz/configure +++ b/Build/source/libs/harfbuzz/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 1.5.1. +# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 1.6.0. # # Report bugs to <tex-k@tug.org>. # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='harfbuzz (TeX Live)' PACKAGE_TARNAME='harfbuzz--tex-live-' -PACKAGE_VERSION='1.5.1' -PACKAGE_STRING='harfbuzz (TeX Live) 1.5.1' +PACKAGE_VERSION='1.6.0' +PACKAGE_STRING='harfbuzz (TeX Live) 1.6.0' PACKAGE_BUGREPORT='tex-k@tug.org' PACKAGE_URL='' @@ -1312,7 +1312,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures harfbuzz (TeX Live) 1.5.1 to adapt to many kinds of systems. +\`configure' configures harfbuzz (TeX Live) 1.6.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1383,7 +1383,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of harfbuzz (TeX Live) 1.5.1:";; + short | recursive ) echo "Configuration of harfbuzz (TeX Live) 1.6.0:";; esac cat <<\_ACEOF @@ -1490,7 +1490,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -harfbuzz (TeX Live) configure 1.5.1 +harfbuzz (TeX Live) configure 1.6.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2080,7 +2080,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by harfbuzz (TeX Live) $as_me 1.5.1, which was +It was created by harfbuzz (TeX Live) $as_me 1.6.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4003,7 +4003,7 @@ fi # Define the identity of the package. PACKAGE='harfbuzz--tex-live-' - VERSION='1.5.1' + VERSION='1.6.0' cat >>confdefs.h <<_ACEOF @@ -4205,9 +4205,9 @@ WARNING_CFLAGS=$kpse_cv_warning_cflags HB_VERSION_MAJOR=1 -HB_VERSION_MINOR=5 -HB_VERSION_MICRO=1 -HB_VERSION=1.5.1 +HB_VERSION_MINOR=6 +HB_VERSION_MICRO=0 +HB_VERSION=1.6.0 ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -6866,7 +6866,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by harfbuzz (TeX Live) $as_me 1.5.1, which was +This file was extended by harfbuzz (TeX Live) $as_me 1.6.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6932,7 +6932,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -harfbuzz (TeX Live) config.status 1.5.1 +harfbuzz (TeX Live) config.status 1.6.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md b/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md index 7518c2e42d3..2107803a28f 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md +++ b/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md @@ -5,7 +5,13 @@ Cairo, and GLib. For example, on Ubuntu / Debian, you would do: whereas on Fedora, RHEL, CentOS, and other Red Hat based systems you would do: * sudo yum install gcc gcc-c++ freetype-devel glib2-devel cairo-devel -on the Mac, using MacPorts: +on Windows, consider using [vcpkg](https://github.com/Microsoft/vcpkg), +provided by Microsoft, for building HarfBuzz and other open-source libraries +but if you need to build harfbuzz from source, put ragel binary on your +PATH and follow appveyor CI's cmake +[build steps](https://github.com/behdad/harfbuzz/blob/master/appveyor.yml). + +on macOS, using MacPorts: * sudo port install freetype glib2 cairo or using Homebrew: @@ -14,9 +20,7 @@ or using Homebrew: If you are using a tarball, you can now proceed to running configure and make as with any other standard package. That should leave you with a shared library in src/, and a few utility programs including hb-view and hb-shape -under util/. From the tarball, NMake Makefiles are also provided in win32/, -which supports building HarfBuzz using Visual Studio, with a README.txt that -gives instructions on building using NMake. +under util/. If you are bootstraping from git, you need a few more tools before you can run autogen.sh for the first time. Namely, pkg-config and ragel. Again, on Ubuntu / Debian: diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt b/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt index ee313566786..650def81b57 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt +++ b/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt @@ -183,29 +183,19 @@ set(project_headers ## Find and include needed header folders and libraries if (HB_HAVE_FREETYPE) - add_definitions(-DHAVE_FREETYPE=1 -DHAVE_FT_FACE_GETCHARVARIANTINDEX=1) - # https://github.com/WebKit/webkit/blob/master/Source/cmake/FindFreetype2.cmake - find_package(PkgConfig) - pkg_check_modules(PC_FREETYPE2 QUIET freetype2) + include(FindFreetype) + if (NOT FREETYPE_FOUND) + message(FATAL_ERROR "HB_HAVE_FREETYPE was set, but we failed to find it. Maybe add a CMAKE_PREFIX_PATH= to your Freetype2 install prefix") + endif() - find_path(FREETYPE2_HEADER_DIR NAMES freetype.h HINTS ${PC_FREETYPE2_INCLUDE_DIRS} ${PC_FREETYPE2_INCLUDEDIR} $ENV{FREETYPE_DIR}/include PATH_SUFFIXES freetype) - find_path(FREETYPE2_ROOT_INCLUDE_DIR NAMES freetype/freetype.h HINTS ${PC_FREETYPE2_INCLUDE_DIRS} ${PC_FREETYPE2_INCLUDEDIR} $ENV{FREETYPE_DIR}/include) - if (CMAKE_BUILD_TYPE MATCHES Debug) - set(FREETYPE2_LIBRARY_NAME freetyped) - else () - set(FREETYPE2_LIBRARY_NAME freetype) - endif () - find_library(FREETYPE2_LIBRARIES ${FREETYPE2_LIBRARY_NAME} HINTS ${PC_FREETYPE2_LIBDIR} ${PC_FREETYPE2_LIBRARY_DIRS} $ENV{FREETYPE_DIR}/lib) - - include_directories(AFTER ${FREETYPE2_HEADER_DIR} ${FREETYPE2_ROOT_INCLUDE_DIR}) + list(APPEND THIRD_PARTY_LIBS ${FREETYPE_LIBRARIES}) + include_directories(AFTER ${FREETYPE_INCLUDE_DIRS}) + add_definitions(-DHAVE_FREETYPE=1 -DHAVE_FT_FACE_GETCHARVARIANTINDEX=1) list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-ft.cc) list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-ft.h) - list(APPEND THIRD_PARTY_LIBS ${FREETYPE2_LIBRARIES}) - - mark_as_advanced(FREETYPE2_HEADER_DIR FREETYPE2_ROOT_INCLUDE_DIR FREETYPE2_LIBRARIES) endif () if (HB_HAVE_GRAPHITE2) diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog index 55885cfa14c..a1158c8cf3e 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog +++ b/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog @@ -1,3 +1,1059 @@ +commit 74f1b88e3720103562552780af7058131c5492d5 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 13 11:01:55 2017 +0200 + + [ucdn] Fix compiler warnings + + src/hb-ucdn.cc | 21 +++++++++++++-------- + 1 file changed, 13 insertions(+), 8 deletions(-) + +commit c2cf68dbdffcbf45297dd161b4b6b2de667b5ae4 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 13 10:30:19 2017 +0200 + + [coretext] Fix build + + src/hb-coretext.cc | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +commit 95883fc5d486ecd194253bb223802f930de73e28 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Fri Oct 13 10:21:07 2017 +0200 + + [coretext] Pass correct font size to CoreText + + CoreText "point"s are not typographic points, but CSS pixels. Ie. + they are 96 per inch, not 72 per inch. + + src/hb-coretext.cc | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +commit 4f9a83ec2109b754a75c962e88117d063e6fed43 +Merge: fa48ccbe 40b05d7b +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 12 14:08:58 2017 +0200 + + Merge remote-tracking branch 'origin/master' + +commit fa48ccbe127a2e61ab316f3638e4056940964dae +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 12 14:07:37 2017 +0200 + + [indic] Special-case Kannada Ra,H,ZWJ sequence + + Fixes https://github.com/behdad/harfbuzz/issues/435 + + src/hb-ot-shape-complex-indic.cc | 15 + +++++++++++++++ + test/shaping/Makefile.am | 1 + + .../sha1sum/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf | Bin 0 -> + 2984 bytes + test/shaping/tests/indic-special-cases.tests | 3 +++ + 4 files changed, 19 insertions(+) + +commit 40b05d7b770b8045f176f66231c412b32482d874 +Author: n8willis <n8willis@users.noreply.github.com> +Date: Thu Oct 12 12:48:48 2017 +0100 + + Replacing 'cluster' with 'syllable' when comments describe certain + Indic shaping behavior (#563) + + * Clarified wording of syllable/cluster behavior in Uniscribe in + final_reordering; changed one other probable typo. + + * Additional syllable/cluster swap in comments for final reordering + and for initial-reordering matra decomposition. + + src/hb-ot-shape-complex-indic.cc | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit 6bac4ac2bebb612debecc8ec10b845e977c0afe1 +Author: ebraminio <ebrahim@gnu.org> +Date: Thu Oct 12 15:15:49 2017 +0330 + + Minor BUILD.md fix (#565) + + BUILD.md | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8923033eb2dab75e9361e9ea1333deb1213393ce +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 12 12:01:48 2017 +0200 + + [coretext] Use fabs() to silence compiler warning + + src/hb-coretext.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit dd4b321b4a429c6e6a28441ea9ae52f8f9dd1dad +Author: Dominik Röttsches <drott@chromium.org> +Date: Thu Oct 12 11:49:37 2017 +0200 + + [coretext] Activate tracking for system fonts + + Another attempt at fully fixing + https://github.com/behdad/harfbuzz/issues/360 + + src/hb-coretext.cc | 28 +++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +commit 6760021d6f4beef852c6560607b32090bcfa5acb +Author: Khaled Hosny <khaledhosny@eglug.org> +Date: Thu Oct 12 12:05:08 2017 +0300 + + CMakelists.txt fix for Freetype builds (#564) + + Instead of searching for freetype using pkg-config, use the + FindFreetype + feature of CMake. This allows for better integration with other + projects + that make use of CMake. + + Fixes https://github.com/behdad/harfbuzz/issues/518 + + CMakeLists.txt | 24 +++++++----------------- + 1 file changed, 7 insertions(+), 17 deletions(-) + +commit 6a2cbc6ef51680309eb3970ed9c66ff766dc8040 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 12 10:46:09 2017 +0200 + + [coretext] Use fabsf() instead of abs() + + Fixes bots. + + Link libharfbuzz.so with -lm. Surprising that we survived without + it so far! + + src/Makefile.am | 2 +- + src/harfbuzz.pc.in | 2 +- + src/hb-coretext.cc | 5 +++-- + 3 files changed, 5 insertions(+), 4 deletions(-) + +commit dfeccd073a5e78f6a2c630355c04121b70d2b4aa +Author: ebraminio <ebrahim@gnu.org> +Date: Thu Oct 12 12:11:47 2017 +0330 + + Remove nmake port of harfbuzz (#562) + + BUILD.md | 12 ++- + Makefile.am | 2 +- + appveyor.yml | 30 ------ + configure.ac | 2 - + win32/Makefile.am | 18 ---- + win32/Makefile.vc | 67 ------------ + win32/README.txt | 97 ----------------- + win32/build-rules-msvc.mak | 130 ----------------------- + win32/config-msvc.mak | 230 + ---------------------------------------- + win32/config.h.win32.in | 158 --------------------------- + win32/create-lists-msvc.mak | 147 ------------------------- + win32/create-lists.bat | 42 -------- + win32/detectenv-msvc.mak | 146 ------------------------- + win32/generate-msvc.mak | 39 ------- + win32/hb-introspection-msvc.mak | 42 -------- + win32/info-msvc.mak | 162 ---------------------------- + win32/install.mak | 25 ----- + win32/introspection-msvc.mak | 73 ------------- + win32/pc_base.py | 124 ---------------------- + win32/replace.py | 115 -------------------- + win32/sed-enums-srcs.py | 36 ------- + win32/setup.py | 62 ----------- + 22 files changed, 9 insertions(+), 1750 deletions(-) + +commit 4e4781319b36bba154f3e5d4eb678945d8f6b4fc +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Oct 12 10:33:16 2017 +0200 + + [ft] Add hb_ft_font_changed() + + When the font size or variations settings on underlying FT_Face + change, + one can call hb_ft_font_changed() and continue using hb_font + created using + hb_ft_font_create(). + + Fixes https://github.com/behdad/harfbuzz/issues/559 + + New API: + hb_ft_font_changed() + + docs/harfbuzz-sections.txt | 1 + + src/hb-ft.cc | 15 +++++++++++++-- + src/hb-ft.h | 8 +++++++- + 3 files changed, 21 insertions(+), 3 deletions(-) + +commit 94b3cafc3a042aea69ee7040227557fe98a21d87 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 17:22:44 2017 +0200 + + Add hb_face_get_table_tags() + + New API: + hb_face_get_table_tags() + + Fixes https://github.com/behdad/harfbuzz/issues/560 + + src/hb-face.cc | 29 +++++++++++++++++++++++++++++ + src/hb-face.h | 5 +++++ + src/hb-open-file-private.hh | 18 ++++++++++++++++++ + 3 files changed, 52 insertions(+) + +commit e1b6d923021f68713784e2fd68f631c053ef3497 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 15:51:31 2017 +0200 + + Remove cast of functions to (hb_destroy_func_t) + + Fixes https://github.com/behdad/harfbuzz/issues/474 + + src/hb-blob.cc | 8 +++++++- + src/hb-coretext.cc | 10 ++++++++-- + src/hb-face.cc | 6 ++++-- + src/hb-ft.cc | 20 +++++++++++--------- + src/hb-glib.cc | 9 ++++++++- + src/hb-ot-font.cc | 6 ++++-- + 6 files changed, 42 insertions(+), 17 deletions(-) + +commit 717fcb51dd051ca27d8537e5cf3a32d0447f78b5 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 15:38:21 2017 +0200 + + [coretext] Minor + + src/hb-coretext.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 374bb48d902025e8b8d8acbe525ff43540daee36 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 15:37:50 2017 +0200 + + Change ptem API to make 0 mean unset + + src/hb-font.cc | 5 ++--- + src/hb-font.h | 2 +- + 2 files changed, 3 insertions(+), 4 deletions(-) + +commit 06c14225b20aa43ae88d362be2de577f6cf3f7b9 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 15:29:53 2017 +0200 + + [coretext] Minor + + src/hb-coretext.cc | 1 + + 1 file changed, 1 insertion(+) + +commit a4b46212c5e76494cfde5af6f299e08902aff0d5 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 15:29:22 2017 +0200 + + [coretext] Adjust font size check for 0 + + src/hb-coretext.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 269cf1ca82c34c6f6ea126e7333743e5c381453b +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 15:24:22 2017 +0200 + + Correctly initialize ptem + + src/hb-font.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 84686bf4c75c001e7cfb2eabdf391b2e76cae335 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 15:02:48 2017 +0200 + + [coretext-aat] Also pass through CoreText if font has kerx table + + SFNSText has kerx table which apparently is applied. + + src/hb-coretext.cc | 20 +++++++++----------- + src/hb-coretext.h | 1 + + 2 files changed, 10 insertions(+), 11 deletions(-) + +commit 296d0134c9d04c82cc0bffd545b0fd9a308a2530 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 14:09:30 2017 +0200 + + [coretext] Change default point size to 12 + + src/hb-coretext.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 7b23c286a71883ac3e5777a2dee262af48c76854 +Merge: 8d450dd1 a5ebe1d4 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 13:35:32 2017 +0200 + + Merge branch 'coretext-optical-sizing' + + Should fix https://github.com/behdad/harfbuzz/issues/360 + +commit a5ebe1d4aec41bc5e289a7969e5e5f7bb57733b6 +Author: Dominik Röttsches <drott@chromium.org> +Date: Wed Oct 11 13:32:38 2017 +0200 + + [coretext] Recreate CTFont if pt size changed + + Attempt at fixing #360 + + src/hb-coretext.cc | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit db7a73ce0781d1fec0235e419ac448565dcfc8ca +Author: Dominik Röttsches <drott@chromium.org> +Date: Wed Oct 11 13:24:39 2017 +0200 + + [coretext] Fix build + + src/hb-coretext.cc | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit f33413075655e6383cd16bc31f0bf804dcec1c64 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 13:17:46 2017 +0200 + + [coretext] Another try + + src/hb-coretext.cc | 32 +++++++++++++------------------- + 1 file changed, 13 insertions(+), 19 deletions(-) + +commit a8e466c3c12a3499028cb576721e5f85ff4cbf2d +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 13:05:59 2017 +0200 + + [coretext] Move CT_Font to font data + + Towards implementing optical sizing. Untested; won't compile. + + https://github.com/behdad/harfbuzz/issues/360 + + src/hb-coretext.cc | 85 + ++++++++++++++++++++++++------------------------------ + 1 file changed, 37 insertions(+), 48 deletions(-) + +commit f9b4c6570a4725eec5393f86e6468a189ac8c6be +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 12:51:25 2017 +0200 + + [coretext] Move font size to a macro + + src/hb-coretext.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 8d450dd188dea2d63a03f74d903a76741de8a217 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 12:43:46 2017 +0200 + + Infrastructure for creating CTFont with correct font size + + https://github.com/behdad/harfbuzz/issues/360 + + src/hb-shaper-private.hh | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 16d02a58cf187dbcecc1c796acdc5d3a70ca288e +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 12:28:06 2017 +0200 + + [coretext] Change default font size from 36 to 18 + + src/hb-coretext.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c0c2dbc871667c32ac8eedb11de64078ef24a429 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 12:23:35 2017 +0200 + + Remove dirty tracking + + Turns out I don't need this to resolve CoreText optical sizing + issue after all. + + https://github.com/behdad/harfbuzz/issues/360 + + src/hb-face-private.hh | 9 --------- + src/hb-face.cc | 17 ----------------- + src/hb-font-private.hh | 13 ------------- + src/hb-font.cc | 39 --------------------------------------- + 4 files changed, 78 deletions(-) + +commit b57f18da700837a57df9606290160ea6e96accc8 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 11:47:47 2017 +0200 + + Add hb_font_[sg]et_ptem() to set/get point size on font + + New API: + hb_font_set_ptem() + hb_font_get_ptem() + + Needed for hb-coretext optical sizing: + https://github.com/behdad/harfbuzz/issues/360 + + docs/harfbuzz-sections.txt | 2 ++ + src/hb-font-private.hh | 5 ++++- + src/hb-font.cc | 41 +++++++++++++++++++++++++++++++++++++++++ + src/hb-font.h | 10 ++++++++++ + 4 files changed, 57 insertions(+), 1 deletion(-) + +commit 3f9370d9e5051b1abf2fc94be2e10a39c8069f75 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 11 11:34:53 2017 +0200 + + Fix TODO item + + src/hb-font.cc | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +commit 5f50f8837f918ca1d176355d1538e0e6c9703f41 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Sat Oct 7 13:17:33 2017 +0200 + + [arabic] Fix cluster merging + + src/hb-ot-shape-complex-arabic.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c2545b921523538e8237ff6a2591f6cb75ee79f1 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Sat Oct 7 12:56:53 2017 +0200 + + Add check for HB_EXTERNs + + https://github.com/behdad/harfbuzz/pull/555 + + src/Makefile.am | 1 + + src/check-externs.sh | 21 +++++++++++++++++++++ + 2 files changed, 22 insertions(+) + +commit 48a9406839f086735a05a2f1a07987b8a6bd6d33 +Author: fanc999 <fanc999@yahoo.com.tw> +Date: Sat Oct 7 18:57:14 2017 +0800 + + Fix build of HarfBuzz tools and HarfBuzz-GObject on Visual Studio + (#555) + + * hb-buffer.h: Mark hb_buffer_diff() for export + + This will fix the tools builds on Visual Studio, as the symbol is used + by the tools. + + * build: Adapt NMake Makefiles for GLib 2.53.4 or later + + glib-mkenums was ported from a PERL script to a Python script, so we + need to update how we generate the enum sources for HarfBuzz-GObject + in + the NMake builds. Let this be known in the build documentation + for MSVC + builds. + + One of the problems with the underlying cmd.exe that the NMake + Makefiles + run on is that shebang lines are not recognized, so we need to to test + run the script with Python and see whether it succeeded by outputing a + source file that is larger than 0 in file size (since running the PERL + version of the script will clearly fail and cause an empty file to be + created). + + If it succeeds, we then run a small Python utility script that + makes the + necessary string replacements, and we are done. If that fails, + then we + run the glib-mkenums script with PERL, and do the replacements + with the + PERL one-liners as we did before. + + We need to make replace.py use latin-1 encoding when using Python + 3.x to + cope with the copyright sign that is in the generated enum sources. + + src/hb-buffer.h | 2 +- + win32/Makefile.am | 4 +++- + win32/README.txt | 5 +++-- + win32/generate-msvc.mak | 17 ++++++++++++----- + win32/info-msvc.mak | 5 ++++- + win32/replace.py | 2 +- + win32/sed-enums-srcs.py | 36 ++++++++++++++++++++++++++++++++++++ + 7 files changed, 60 insertions(+), 11 deletions(-) + +commit c9e2cf6f55c7682b8e7020654945ddd074ebfd24 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 4 16:59:22 2017 +0200 + + [ot] Remove 'mal' and 'gle' lang tags + + Fixes https://github.com/behdad/harfbuzz/issues/477 + + src/hb-ot-tag.cc | 2 -- + 1 file changed, 2 deletions(-) + +commit 621c49cb8657a79ee6897c4d313d0e825b2b228f +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 4 15:06:48 2017 +0200 + + Improve performance of ligature component matching + + This O(N^2) was introduced in + 8b2c94c43fd335b944d5e5487265706b8e0f9041. + Make it O(N). + + src/hb-ot-layout-gsubgpos-private.hh | 37 + +++++++++++++++++++++++------------- + 1 file changed, 24 insertions(+), 13 deletions(-) + +commit ab8d70ec7023e51ba6fd7267d2b41c5f95ef0787 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 4 14:47:10 2017 +0200 + + [arabic] Implement Unicode Arabic Mark Ordering Algorithm UTR#53 + + Fixes https://github.com/behdad/harfbuzz/issues/509 + + src/hb-ot-shape-complex-arabic.cc | 75 + +++++++++++++++++++++ + src/hb-ot-shape-complex-default.cc | 1 + + src/hb-ot-shape-complex-hangul.cc | 1 + + src/hb-ot-shape-complex-hebrew.cc | 1 + + src/hb-ot-shape-complex-indic.cc | 1 + + src/hb-ot-shape-complex-myanmar.cc | 2 + + src/hb-ot-shape-complex-private.hh | 12 ++++ + src/hb-ot-shape-complex-thai.cc | 1 + + src/hb-ot-shape-complex-tibetan.cc | 1 + + src/hb-ot-shape-complex-use.cc | 1 + + src/hb-ot-shape-normalize.cc | 8 ++- + test/shaping/Makefile.am | 1 + + .../24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf | Bin 0 -> 7160 bytes + .../94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf | Bin 0 -> 6816 bytes + test/shaping/record-test.sh | 2 +- + test/shaping/tests/arabic-mark-order.tests | 2 + + 16 files changed, 106 insertions(+), 3 deletions(-) + +commit b6fe0ab636ffac0a246e160b3508cc4841cb1823 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 4 13:37:08 2017 +0200 + + Add info_cc() convenience macro + + src/hb-ot-layout-private.hh | 2 ++ + src/hb-ot-shape-normalize.cc | 6 +++--- + 2 files changed, 5 insertions(+), 3 deletions(-) + +commit 7f9e7f8689e1d260596f5256947dfbd474afb1ec +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 4 13:20:33 2017 +0200 + + Adjust normalizer for out-of-order marks + + We are going to implement Unicode Arabic Mark Ordering Algorithm: + + http://www.unicode.org/reports/tr53/tr53-1.pdf + + which will reorder marks out of their sorted ccc order. Adjust + normalizer to stop combining as soon as dangerous ordering is + detected. + + src/hb-ot-shape-normalize.cc | 62 + ++++++++++++++++++++++++++------------------ + 1 file changed, 37 insertions(+), 25 deletions(-) + +commit a252ad61f077c3b7bbfd8335e1b105a57beb58ce +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 4 13:07:08 2017 +0200 + + Minor + + src/hb-unicode-private.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4c05a405acc25c4ef0d70a97c0ae59013abca2df +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 4 13:06:51 2017 +0200 + + Revert "Treat HAMZA ABOVE similar to SHADD for sorting purposes" + + This reverts commit 5a330575768f5a213072230b9ec8faabac9c5737. + + Proper fix coming soon. + + src/hb-unicode-private.hh | 4 ---- + 1 file changed, 4 deletions(-) + +commit d695cacbf4dd5f77b5e7134cf60553775c515ef1 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 4 11:33:47 2017 +0200 + + Shorthand format controls should not be ignored + + Fixes https://github.com/behdad/harfbuzz/issues/503 + + src/hb-unicode-private.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 50e95229d79bd258ad1d3f6392bfffa128f6df2a +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Wed Oct 4 11:28:04 2017 +0200 + + Add Chinantec language tags + + Fixes https://github.com/behdad/harfbuzz/issues/516 + + src/hb-ot-tag.cc | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit 9786fcd8fdc0adbe8b6269ddd174ee2818d6fa9e +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 3 17:22:43 2017 +0200 + + Fix GPOS v_origin ordering + + This should affect mark attachment in vertical text. I have no font + to test, + but this sounds the right order. + + Noticed while debugging https://github.com/behdad/harfbuzz/issues/532 + + src/hb-ot-shape.cc | 44 ++++++++++++++++++++------------------------ + 1 file changed, 20 insertions(+), 24 deletions(-) + +commit 63db692fa9efcd760f2e90f93f4e1428d79a3433 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 3 16:00:18 2017 +0200 + + [indic] Fix shaping of U+0AFB GUJARATI SIGN SHADDA + + Fixes https://github.com/behdad/harfbuzz/issues/552 + + src/hb-ot-shape-complex-indic-private.hh | 2 +- + src/hb-ot-shape-complex-indic.cc | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +commit f559c633073f63b9d87cb2440048b4413cfa1c05 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 3 15:20:07 2017 +0200 + + [indic] Implement Consonent_With_Stacker + + Fixes https://github.com/behdad/harfbuzz/issues/528 + + src/hb-ot-shape-complex-indic-machine.rl | 5 +++-- + src/hb-ot-shape-complex-indic-private.hh | 7 ++++--- + src/hb-ot-shape-complex-myanmar-machine.rl | 5 +++-- + src/hb-ot-shape-complex-myanmar.cc | 6 +++--- + 4 files changed, 13 insertions(+), 10 deletions(-) + +commit e07669fc43c0e23d337ad984aa128c3a08c9c1bb +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 3 14:57:14 2017 +0200 + + [use] Implement Consonant_With_Stacker + + Related to https://github.com/behdad/harfbuzz/issues/528 + + src/gen-use-table.py | 7 ++++--- + src/hb-ot-shape-complex-use-machine.rl | 5 +++-- + src/hb-ot-shape-complex-use-private.hh | 3 ++- + src/hb-ot-shape-complex-use-table.cc | 6 ++++-- + 4 files changed, 13 insertions(+), 8 deletions(-) + +commit 3ca9c92aa68956889642690e176c9161ff52edfe +Author: David Corbett <corbett.dav@husky.neu.edu> +Date: Tue Oct 3 08:07:02 2017 -0400 + + Test Consonant_With_Stacker in Kannada (#530) + + test/shaping/Makefile.am | 1 + + test/shaping/fonts/COPYING | 100 + +++++++++++++++++++++ + .../341421e629668b1a1242245d39238ca48432d35d.ttf | Bin 0 -> 1084 bytes + .../55c88ebbe938680b08f92c3de20713183e0c7481.ttf | Bin 0 -> 3300 bytes + .../663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf | Bin 0 -> 1204 bytes + .../a014549f766436cf55b2ceb40e462038938ee899.ttf | Bin 0 -> 2720 bytes + .../tests/indic-consonant-with-stacker.tests | 4 + + 7 files changed, 105 insertions(+) + +commit 5d98de1f382254a8a21fd9a04b642268a21be16f +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 3 13:46:25 2017 +0200 + + Tweak mark-base attachment + + Apparently a base glyph can also become an attached component of a + ligature if the ligature-forming lookup used IgnoreBase. This was + being confused with a non-first component of a MultipleSubst and + hence not matched for mark-attachment. Tweak test to fix. + + Fixes https://github.com/behdad/harfbuzz/issues/543 + + src/hb-ot-layout-gpos-table.hh | 4 +++- + test/shaping/Makefile.am | 1 + + .../sha1sum/98b7887cff91f722b92a8ff800120954606354f9.ttf | Bin 0 -> + 1168 bytes + test/shaping/tests/mark-attachment.tests | 1 + + 4 files changed, 5 insertions(+), 1 deletion(-) + +commit ea772932d2430ebc7ea712a8c46ec2500966225d +Merge: 771970ef c44657a0 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 3 13:25:44 2017 +0200 + + Merge commit 'c44657a05d565ec5f2c32ac15d4ecfbee00ac5f7' + +commit 771970efa15fc0b77841b7f0a3e266cdcf51246e +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 3 13:23:31 2017 +0200 + + Minor + + .travis.yml | 2 +- + appveyor.yml | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 09cbeb2246217dce61ccc0638edb6211facca4b0 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 3 13:22:07 2017 +0200 + + Make bots happy + + Fixes https://github.com/behdad/harfbuzz/issues/551 + + test/shaping/tests/indic-syllable.tests | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c44657a05d565ec5f2c32ac15d4ecfbee00ac5f7 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Oct 3 13:14:17 2017 +0200 + + Tweak input matching some more + + Followup to 8b2c94c43fd335b944d5e5487265706b8e0f9041 + + Allow matching sequences of marks attached to different ligatures, + as supposedly the base of the subsequent marks were already jumped + over. + + src/hb-ot-layout-gsubgpos-private.hh | 3 --- + 1 file changed, 3 deletions(-) + +commit bbe94777c94637da1bcf944124b5079662618a1e +Author: Khaled Hosny <khaledhosny@eglug.org> +Date: Mon Oct 2 22:36:14 2017 +0200 + + Print test-suite.log when CI builds fail + + .travis.yml | 2 +- + appveyor.yml | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 1633513996f902e95642fcaf9205dded55f509ff +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 20:28:56 2017 +0200 + + Add test for U+0A51 + + New Indic numbers are: + + BENGALI: 353725 out of 354188 tests passed. 463 failed (0.130722%) + DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%) + GUJARATI: 366355 out of 366457 tests passed. 102 failed (0.0278341%) + GURMUKHI: 60729 out of 60747 tests passed. 18 failed (0.0296311%) + KANNADA: 951201 out of 951913 tests passed. 712 failed (0.0747968%) + KHMER: 299071 out of 299124 tests passed. 53 failed (0.0177184%) + MALAYALAM: 1048136 out of 1048334 tests passed. 198 failed + (0.0188871%) + ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%) + SINHALA: 271662 out of 271847 tests passed. 185 failed (0.068053%) + TAMIL: 1091754 out of 1091754 tests passed. 0 failed (0%) + TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%) + + Before 71c0a1429db7c7e7e32507be248c9457e1cbfc7d GURMUKHI used to be + at 15, + because Uniscribe seems to allow this character standalone, but + that looks + wrong. + + .../sha1sum/1735326da89f0818cd8c51a0600e9789812c0f94.ttf | Bin 0 -> + 1008 bytes + test/shaping/tests/indic-syllable.tests | 2 ++ + 2 files changed, 2 insertions(+) + +commit 8b2c94c43fd335b944d5e5487265706b8e0f9041 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 20:02:45 2017 +0200 + + Tweak ligature component matching for ligature formation + + If two marks want to ligate and they belong to different components + of the + same ligature glyph, and said ligature glyph is to be ignored + according to + mark-filtering rules, then allow. + + Example Burmese senquence: + + U+1004,U+103A,U+1039,U+101B,U+103D,U+102D + + Test font provided by Norbert Lindenberg. + + Fixes https://github.com/behdad/harfbuzz/issues/545 + + src/hb-ot-layout-gsubgpos-private.hh | 59 + +++++++++++++++++---- + .../a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf | Bin 0 -> 1384 bytes + test/shaping/tests/ligature-id.tests | 1 + + 3 files changed, 51 insertions(+), 9 deletions(-) + +commit 71c0a1429db7c7e7e32507be248c9457e1cbfc7d +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 18:56:10 2017 +0200 + + [indic] Fix shaping of U+0A51 + + Mark it as matra below to allow the sequence U+0A15, U+0A51, U+0A47. + Oh well... + + Fixes https://github.com/behdad/harfbuzz/issues/524 + + src/hb-ot-shape-complex-indic.cc | 6 ++++++ + .../sha1sum/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf | Bin 0 -> + 1224 bytes + test/shaping/tests/indic-syllable.tests | 1 + + 3 files changed, 7 insertions(+) + +commit 6eb8950e6265b23d88ba35daab1cff4fc3fe8753 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 18:30:05 2017 +0200 + + [ucdn] Oops! + + src/hb-ucdn/{unicodedata_db.h => ucdn_db.h} | 4324 + ++++++++++++++------------- + 1 file changed, 2175 insertions(+), 2149 deletions(-) + +commit cbec0cd65e1787b20ea55dd5583a7444938bd381 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 18:26:52 2017 +0200 + + Remove some really old cruft + + src/hb-common.h | 14 -------------- + src/hb-ucdn/ucdn.h | 14 -------------- + 2 files changed, 28 deletions(-) + +commit b3dff7720c1fac8ca9bdd7087ac368a0af4349e8 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 18:22:51 2017 +0200 + + [ucdn] Update README + + src/hb-ucdn/README | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 57c55ef8341c760145170dedd002c5afb380e6c8 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 18:21:27 2017 +0200 + + [ot] Improve shaper selection heuristic + + src/hb-ot-shape-complex-private.hh | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +commit 5680ef884cf31ab9b42c587ffa260e390c88b8eb +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 18:20:51 2017 +0200 + + [use] Hack to fix shaping of U+1A7F + + Fixes https://github.com/behdad/harfbuzz/issues/525 + + src/gen-use-table.py | 3 +++ + src/hb-ot-shape-complex-use-table.cc | 2 +- + 2 files changed, 4 insertions(+), 1 deletion(-) + +commit 0faa16a25349906ee0ab98b73d9a3d96327a0955 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 17:15:46 2017 +0200 + + [ucdn] Update to Unicode 10 + + Update to commit c000ebf79c095a7d58cf90090bde5715592c4834 + plus this bug-fix: https://github.com/grigorig/ucdn/issues/18 + + src/hb-ucdn.cc | 4 +++ + src/hb-ucdn/Makefile.sources | 2 +- + src/hb-ucdn/ucdn.c | 69 + ++++++++++++++++++++++---------------------- + src/hb-ucdn/ucdn.h | 7 +++++ + 4 files changed, 47 insertions(+), 35 deletions(-) + +commit ea535a1dfa63f82280607273cd282a6134c334da +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 17:02:39 2017 +0200 + + [use] Update to Unicode 10 + + src/gen-use-table.py | 5 +-- + src/hb-ot-shape-complex-use-table.cc | 69 + ++++++++++++++++++++++++++---------- + 2 files changed, 54 insertions(+), 20 deletions(-) + +commit 29c244aff6e3c359796bb033496c14ad5537dbe0 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 16:36:21 2017 +0200 + + Minor + + src/gen-use-table.py | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 1535f8c67216e8559fa48691fe6d9c2726c08973 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 16:12:18 2017 +0200 + + Add Unicode 10 scripts + + src/hb-common.h | 8 ++++++++ + src/hb-ot-shape-complex-private.hh | 5 +++++ + 2 files changed, 13 insertions(+) + +commit bdbe974f525d33b8c735fb5d7fd76c236c4dd0ea +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 10:00:31 2017 -0400 + + [indic] Update table to Unicode 10 + + src/hb-ot-shape-complex-indic-table.cc | 70 + +++++++++++++++++----------------- + 1 file changed, 36 insertions(+), 34 deletions(-) + +commit cc79b666bc4a81a0342ed1e706dd7db109739dc5 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 09:19:15 2017 -0400 + + [indic] Add test for 1a0a356a0f2b2932581e4fd0437c01c058f4f6d1 + + https://github.com/behdad/harfbuzz/issues/538 + + .../sha1sum/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf | Bin 0 -> + 1000 bytes + test/shaping/tests/indic-syllable.tests | 1 + + 2 files changed, 1 insertion(+) + +commit 819cc360499a5f136325b5a1a18098ebc2aee081 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 09:03:16 2017 -0400 + + [indic] Move manual code out of generated table + + src/hb-ot-shape-complex-indic-table.cc | 7 ------- + src/hb-ot-shape-complex-indic.cc | 5 +++++ + 2 files changed, 5 insertions(+), 7 deletions(-) + +commit da4866f7177a4e2836cc70b844e2e64ab671761f +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 08:57:06 2017 -0400 + + [arabic] Update table to Unicode 10 data + + src/hb-ot-shape-complex-arabic-table.hh | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +commit 1a0a356a0f2b2932581e4fd0437c01c058f4f6d1 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Mon Oct 2 08:49:23 2017 -0400 + + [indic] Categorize U+0980 BENGALI ANJI as placeholder + + Fixes https://github.com/behdad/harfbuzz/issues/538 + + src/hb-ot-shape-complex-indic.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 19e77e01bc13f44138e1d50533327d314dd0a018 +Author: jfkthame <jfkthame@gmail.com> +Date: Mon Oct 2 13:08:49 2017 +0100 + + [shape-plan] Don't look for a cached plan if variation coords are + specified. Fixes #549. (#550) + + This is a temporary hack just to avoid incorrect shaping results, + pending proper support + for caching shape-plans with variation coordinates. + + src/hb-shape-plan.cc | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +commit db446cce4ef4cd1a4f1652e3aa3e5e5ed1881d39 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Sun Oct 1 12:06:00 2017 -0400 + + Add RELEASING.md to dist + + Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit 933a81d74fee0d5856fc7b15b58a16e0e0168e48 +Author: ebraminio <ebrahim@gnu.org> +Date: Sun Oct 1 19:35:24 2017 +0330 + + Add release checklist (#529) + + RELEASING.md | 96 + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 96 insertions(+) + +commit 66128d3cfb12705530141b5a4bd2706f0cbb9fc5 +Author: mhosken <mhosken@users.noreply.github.com> +Date: Wed Sep 27 01:29:45 2017 +0700 + + Fix missing xscale in rtl graphite unpacking (#541) + + * Fix missing xscale in rtl graphite unpacking + + * Oops didn't need to mess with yscale + + src/hb-graphite2.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3ca69c8c32b8408dd9f8e6e866cd07e58c0d79b7 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Thu Sep 14 20:50:35 2017 -0400 + + Use strtod_l() to correctly parse decimal numbers in French & + other locales + + Test with, eg.: + $ LC_ALL=fr_FR.utf-8 ./hb-view NotoSansArabic-VF.ttf بهداد + --variations wght=1.2 + + configure.ac | 4 ++-- + src/hb-common.cc | 53 + +++++++++++++++++++++++++++++++++++++++++++++++++++-- + 2 files changed, 53 insertions(+), 4 deletions(-) + +commit 9355218f582a6c2425cadcb868204f81b17d5767 +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Sat Sep 9 11:21:07 2017 -0700 + + [util] Add a few shorthand forms for commandline options + + -o, -O, -u, -v, -V + + util/options.cc | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit a984e0c4d921a6dff82cc1b5c686cc957215bc7e +Author: Behdad Esfahbod <behdad@behdad.org> +Date: Tue Sep 5 11:18:35 2017 -0700 + + 1.5.1 + + NEWS | 13 +++++++++++++ + configure.ac | 2 +- + 2 files changed, 14 insertions(+), 1 deletion(-) + commit d03f11f246efec13e48fd68a9ce136db771b22bf Author: Behdad Esfahbod <behdad@behdad.org> Date: Mon Sep 4 20:14:13 2017 -0700 diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am index 1d8f2e7c7d4..07b38c287df 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am +++ b/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am @@ -4,13 +4,14 @@ NULL = ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = src util test docs win32 +SUBDIRS = src util test docs EXTRA_DIST = \ autogen.sh \ harfbuzz.doap \ README.python \ BUILD.md \ + RELEASING.md \ CMakeLists.txt \ $(NULL) diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/NEWS b/Build/source/libs/harfbuzz/harfbuzz-src/NEWS index 92e5a53705e..4973d124202 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/NEWS +++ b/Build/source/libs/harfbuzz/harfbuzz-src/NEWS @@ -1,3 +1,38 @@ +Overview of changes leading to 1.6.0 +Friday, October the 13th, 2017 +==================================== + +- Update to Unicode 10. + +- Various Indic and Universal Shaping Engine fixes as a result of + HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at + the Igalia offices in A Coruña, Spain. Thanks Igalia for having + us! + +- Implement Unicode Arabic Mark Ordering Algorithm UTR#53. + +- Implement optical sizing / tracking in CoreText backend, using + new API hb_font_set_ptem(). + +- Allow notifying hb_font_t that underlying FT_Face changed sizing, + using new API hb_ft_font_changed(). + +- More Graphite backend RTL fixes. + +- Fix caching of variable font shaping plans. + +- hb-view / hb-shape now accept following new arguments: + + o --unicodes: takes a list of hex numbers that represent Unicode + codepoints. + +New API: ++hb_face_get_table_tags() ++hb_font_set_ptem() ++hb_font_get_ptem() ++hb_ft_font_changed() + + Overview of changes leading to 1.5.1 Tuesday, September 5, 2017 ==================================== diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md b/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md new file mode 100644 index 00000000000..34f64988ffc --- /dev/null +++ b/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md @@ -0,0 +1,96 @@ +HarfBuzz release walk-through checklist: + +1. Open gitk and review changes since last release. + * `git diff $(git describe | sed 's/-.*//').. src/*.h` prints all public API changes. + + Document them in NEWS, All API and API semantic changes should be clearly + marked as API additions, API changes, or API deletions. + If there's a backward-incompatible API change (including deletions for API used anywhere), + that's a release blocker. Do NOT release. Document deprecations. +2. Based on severity of changes, decide whether it's a minor or micro release number bump, +3. Make sure you have correct date and new version at the top of NEWS file, +4. Bump version in configure.ac line 3, +5. Do "make distcheck", if it passes, you get a tarball. + Otherwise, fix things and commit them separately before making release, +6. "make release-files". Enter your GPG password again. This creates a sha256 hash and signs it. +7. Now that you have a tarball built, commit NEWS and configure.ac changes. The commit message + is simply the release number. Eg. "1.4.7" +8. Tag the release and sign it: Eg. "git tag -s 1.4.7 -m 1.4.7". Enter your GPG password. +9. Build win32 bundle. + 1. Put contents of [this](https://drive.google.com/open?id=0B3_fQkxDZZXXbWltRGd5bjVrUDQ) on your `~/.local/i686-w64-mingw32` + 2. Run `./MING32 --with-uniscribe` script (available below) to config harfbuzz with mingw + 3. make + 4. `./UPDATE.sh` (available below) +10. Copy all artefacts to users.freedesktop.org and move them into `/srv/www.freedesktop.org/www/software/harfbuzz/release` + There should be four files. Eg.: + ``` +-rw-r--r-- 1 behdad eng 1592693 Jul 18 11:25 harfbuzz-1.4.7.tar.bz2 +-rw-r--r-- 1 behdad eng 89 Jul 18 11:34 harfbuzz-1.4.7.tar.bz2.sha256 +-rw-r--r-- 1 behdad eng 339 Jul 18 11:34 harfbuzz-1.4.7.tar.bz2.sha256.asc +-rw-r--r-- 1 behdad eng 2895619 Jul 18 11:34 harfbuzz-1.4.7-win32.zip +``` +11. While doing that, quickly double-check the size of the .tar.bz2 and .zip files against their previous releases to make sure nothing bad happened. They should be in the ballpark, perhaps slightly larger. Sometimes they do shrink, that's not by itself a stopper. +12. Push the commit and tag out: "git push --follow-tags". Make sure it's pushed both to freedesktop repo and github. +13. Upload artefacts and NEWS entry on the github release. + + +## MING32 +```bash +#!/bin/bash + +target=i686-w64-mingw32 + +unset CC +unset CXX +unset CPP +unset LD +unset LDFLAGS +unset CFLAGS +unset CXXFLAGS +unset PKG_CONFIG_PATH + +# Removed -static from the following +export CFLAGS="-static-libgcc" +export CXXFLAGS="-static-libgcc -static-libstdc++" +export CPPFLAGS=-I$HOME/.local/$target/include +export LDFLAGS=-L$HOME/.local/$target/lib +export PKG_CONFIG_LIBDIR=$HOME/.local/$target/lib/pkgconfig +export PATH=$HOME/.local/$target/bin:$PATH + +../configure --build=`~/script/config.guess` --host=$target --prefix=/home/behdad/.local/$target "$@" +``` + +## UPDATE.sh +```bash +#!/bin/bash + +v=$1 + +if test "x$v" = x; then + echo "usage: UPDATE.sh micro-version" + exit 1 +fi + +dir_prefix=harfbuzz-1.4. +dir_suffix=-win32 +dir=$dir_prefix$v$dir_suffix +dir_old=$dir_prefix$((v-1))$dir_suffix +if test -d "$dir"; then + echo "New dir $dir exists; not overwriting" + exit 1 +fi +if ! test -d "$dir_old"; then + echo "Old dir $dir_old does NOT exist; aborting" + exit 1 +fi +set -ex +cp -a "$dir_old" "$dir.tmp" +rm -f "$dir.tmp"/GDX32.dll +rm -f "$dir.tmp"/usp10.dll +cp ../winbuild/src/.libs/libharfbuzz-0.dll{,.def} $dir.tmp/ +cp ../winbuild/util/.libs/hb-{shape,view}.exe $dir.tmp/ +i686-w64-mingw32-strip $dir.tmp/{hb-shape.exe,hb-view.exe,libharfbuzz-0.dll} +mv $dir.tmp $dir +zip -r $dir.zip $dir +echo Bundle $dir.zip ready +``` diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in b/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in index 0e858595bfc..e980469cdab 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in +++ b/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in @@ -72,6 +72,9 @@ /* Define to 1 if you have the `mprotect' function. */ #undef HAVE_MPROTECT +/* Define to 1 if you have the `newlocale' function. */ +#undef HAVE_NEWLOCALE + /* Have native OpenType Layout backend */ #undef HAVE_OT @@ -102,6 +105,9 @@ /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H +/* Define to 1 if you have the `strtod_l' function. */ +#undef HAVE_STRTOD_L + /* Define to 1 if you have the `sysconf' function. */ #undef HAVE_SYSCONF @@ -129,8 +135,10 @@ /* Define to 1 if you have the <windows.h> header file. */ #undef HAVE_WINDOWS_H -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ +/* Define to 1 if you have the <xlocale.h> header file. */ +#undef HAVE_XLOCALE_H + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to the address where bug reports for this package should be sent. */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac b/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac index 9151abc058a..5b0797f995d 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac +++ b/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac @@ -1,6 +1,6 @@ AC_PREREQ([2.64]) AC_INIT([HarfBuzz], - [1.5.1], + [1.6.0], [https://github.com/behdad/harfbuzz/issues/new], [harfbuzz], [http://harfbuzz.org/]) @@ -69,8 +69,8 @@ GTK_DOC_CHECK([1.15],[--flavour no-tmpl]) ]) # Functions and headers -AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty) -AC_CHECK_HEADERS(unistd.h sys/mman.h) +AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty newlocale strtod_l) +AC_CHECK_HEADERS(unistd.h sys/mman.h xlocale.h) # Compiler flags AC_CANONICAL_HOST @@ -494,8 +494,6 @@ test/fuzzing/Makefile test/shaping/Makefile docs/Makefile docs/version.xml -win32/Makefile -win32/config.h.win32 ]) AC_OUTPUT diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make b/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make index e7916563d75..e4a12a5b255 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make +++ b/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make @@ -25,6 +25,7 @@ TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ + $(expand_content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt @@ -86,7 +87,7 @@ GTK_DOC_V_SETUP_0=@echo " DOC Preparing build"; setup-build.stamp: -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ - files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ + files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ destdir=`dirname $(abs_builddir)/$$file`; \ @@ -118,7 +119,7 @@ scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ - if test "$(?)" = "0"; then \ + if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ @@ -141,7 +142,7 @@ GTK_DOC_V_XML=$(GTK_DOC_V_XML_$(V)) GTK_DOC_V_XML_=$(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY)) GTK_DOC_V_XML_0=@echo " DOC Building XML"; -sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) +sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) xml/gtkdocentities.ent $(GTK_DOC_V_XML)_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ @@ -152,6 +153,17 @@ sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DO sgml.stamp: sgml-build.stamp @true +xml/gtkdocentities.ent: Makefile + $(GTK_DOC_V_XML)$(MKDIR_P) $(@D) && ( \ + echo "<!ENTITY package \"$(PACKAGE)\">"; \ + echo "<!ENTITY package_bugreport \"$(PACKAGE_BUGREPORT)\">"; \ + echo "<!ENTITY package_name \"$(PACKAGE_NAME)\">"; \ + echo "<!ENTITY package_string \"$(PACKAGE_STRING)\">"; \ + echo "<!ENTITY package_tarname \"$(PACKAGE_TARNAME)\">"; \ + echo "<!ENTITY package_url \"$(PACKAGE_URL)\">"; \ + echo "<!ENTITY package_version \"$(PACKAGE_VERSION)\">"; \ + ) > $@ + #### html #### GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_$(V)) @@ -162,17 +174,17 @@ GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_$(V)) GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY)) GTK_DOC_V_XREF_0=@echo " DOC Fixing cross-references"; -html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) +html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \ mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ - if test "$(?)" = "0"; then \ + if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ - if test "$(?)" = "0"; then \ + if test "$$?" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) @@ -194,11 +206,11 @@ GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_$(V)) GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY)) GTK_DOC_V_PDF_0=@echo " DOC Building PDF"; -pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) +pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \ mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ - if test "$(?)" = "0"; then \ + if test "$$?" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ @@ -223,12 +235,15 @@ clean-local: @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \ rm -f $(DOC_MODULE).types; \ fi + @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \ + rm -f $(DOC_MODULE)-sections.txt; \ + fi distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ - rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ + rm -f $(SETUP_FILES) $(DOC_MODULE).types; \ fi maintainer-clean-local: diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am index 0c077d99013..df99afee731 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am @@ -122,7 +122,7 @@ endif libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS) $(HBNODISTHEADERS) libharfbuzz_la_CPPFLAGS = $(HBCFLAGS) -libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined +libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -lm -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined libharfbuzz_la_LIBADD = $(HBLIBS) EXTRA_libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency) pkginclude_HEADERS = $(HBHEADERS) @@ -300,6 +300,7 @@ check: harfbuzz.def # For check-defs.sh dist_check_SCRIPTS = \ check-c-linkage-decls.sh \ check-defs.sh \ + check-externs.sh \ check-header-guards.sh \ check-includes.sh \ check-libstdc++.sh \ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/check-externs.sh b/Build/source/libs/harfbuzz/harfbuzz-src/src/check-externs.sh new file mode 100755 index 00000000000..63cc7d5bb02 --- /dev/null +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/check-externs.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +LC_ALL=C +export LC_ALL + +test -z "$srcdir" && srcdir=. +stat=0 + +test "x$HBHEADERS" = x && HBHEADERS=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.h'` +test "x$EGREP" = x && EGREP='grep -E' + + +echo 'Checking that all public symbols are exported with HB_EXTERN' + +for x in $HBHEADERS; do + test -f "$srcdir/$x" && x="$srcdir/$x" + $EGREP -B1 '^hb_' "$x" | $EGREP -E -v '^(--|hb_|HB_EXTERN )' -A1 +done | +grep . >&2 && stat=1 + +exit $stat diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py b/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py index fcb66a58022..09cc64fa694 100755 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py @@ -117,6 +117,7 @@ property_names = [ 'Top_And_Right', 'Top_And_Left', 'Top_And_Left_And_Right', + 'Bottom_And_Left', 'Bottom_And_Right', 'Top_And_Bottom_And_Right', 'Overstruck', @@ -153,7 +154,7 @@ def is_BASE(U, UISC, UGC): def is_BASE_IND(U, UISC, UGC): #SPEC-DRAFT return (UISC in [Consonant_Dead, Modifying_Letter] or UGC == Po) return (UISC in [Consonant_Dead, Modifying_Letter] or - (UGC == Po and not U in [0x104E, 0x2022]) or + (UGC == Po and not U in [0x104E, 0x2022, 0x11A3F, 0x11A45]) or False # SPEC-DRAFT-OUTDATED! U == 0x002D ) def is_BASE_NUM(U, UISC, UGC): @@ -177,6 +178,8 @@ def is_CONS_MOD(U, UISC, UGC): def is_CONS_SUB(U, UISC, UGC): #SPEC-DRAFT return UISC == Consonant_Subjoined return UISC == Consonant_Subjoined and UGC != Lo +def is_CONS_WITH_STACKER(U, UISC, UGC): + return UISC == Consonant_With_Stacker def is_HALANT(U, UISC, UGC): return UISC in [Virama, Invisible_Stacker] def is_HALANT_NUM(U, UISC, UGC): @@ -198,9 +201,7 @@ def is_OTHER(U, UISC, UGC): def is_Reserved(U, UISC, UGC): return UGC == 'Cn' def is_REPHA(U, UISC, UGC): - #return UISC == Consonant_Preceding_Repha - #SPEC-OUTDATED hack to categorize Consonant_With_Stacker and Consonant_Prefixed - return UISC in [Consonant_Preceding_Repha, Consonant_With_Stacker, Consonant_Prefixed] + return UISC in [Consonant_Preceding_Repha, Consonant_Prefixed] def is_SYM(U, UISC, UGC): if U == 0x25CC: return False #SPEC-DRAFT #SPEC-DRAFT return UGC in [So, Sc] or UISC == Symbol_Letter @@ -229,6 +230,7 @@ use_mapping = { 'M': is_CONS_MED, 'CM': is_CONS_MOD, 'SUB': is_CONS_SUB, + 'CS': is_CONS_WITH_STACKER, 'H': is_HALANT, 'HN': is_HALANT_NUM, 'ZWNJ': is_ZWNJ, @@ -252,7 +254,7 @@ use_positions = { }, 'M': { 'Abv': [Top], - 'Blw': [Bottom], + 'Blw': [Bottom, Bottom_And_Left], 'Pst': [Right], 'Pre': [Left], }, @@ -298,8 +300,10 @@ def map_to_use(data): # the nasalization marks, maybe only for U+1CE9..U+1CF1. if U == 0x1CED: UISC = Tone_Mark - evals = [(k, v(U,UISC,UGC)) for k,v in items] - values = [k for k,v in evals if v] + # TODO: https://github.com/behdad/harfbuzz/issues/525 + if U == 0x1A7F: UISC = Consonant_Final; UIPC = Bottom + + values = [k for k,v in items if v(U,UISC,UGC)] assert len(values) == 1, "%s %s %s %s" % (hex(U), UISC, UGC, values) USE = values[0] diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.pc.in b/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.pc.in index b3e124aa8c3..661251c2d41 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.pc.in +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.pc.in @@ -8,6 +8,6 @@ Description: HarfBuzz text shaping library Version: %VERSION% Libs: -L${libdir} -lharfbuzz -Libs.private: %libs_private% +Libs.private: -lm %libs_private% Requires.private: %requires_private% Cflags: -I${includedir}/harfbuzz diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc index fb48f03cabe..41e99da0dda 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc @@ -128,6 +128,12 @@ hb_blob_create (const char *data, return blob; } +static void +_hb_blob_destroy (void *data) +{ + hb_blob_destroy ((hb_blob_t *) data); +} + /** * hb_blob_create_sub_blob: * @parent: Parent blob. @@ -164,7 +170,7 @@ hb_blob_create_sub_blob (hb_blob_t *parent, MIN (length, parent->length - offset), HB_MEMORY_MODE_READONLY, hb_blob_reference (parent), - (hb_destroy_func_t) hb_blob_destroy); + _hb_blob_destroy); return blob; } diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h index 1d633f7dcdd..42564bb19be 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h @@ -504,7 +504,7 @@ typedef enum { /*< flags >*/ } hb_buffer_diff_flags_t; /* Compare the contents of two buffers, report types of differences. */ -hb_buffer_diff_flags_t +HB_EXTERN hb_buffer_diff_flags_t hb_buffer_diff (hb_buffer_t *buffer, hb_buffer_t *reference, hb_codepoint_t dottedcircle_glyph, diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc index 0483816d37b..8e8e5565331 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc @@ -32,6 +32,9 @@ #include "hb-object-private.hh" #include <locale.h> +#ifdef HAVE_XLOCALE_H +#include <xlocale.h> +#endif /* hb_options_t */ @@ -246,8 +249,8 @@ struct hb_language_item_t { static hb_language_item_t *langs; #ifdef HB_USE_ATEXIT -static -void free_langs (void) +static void +free_langs (void) { while (langs) { hb_language_item_t *next = langs->next; @@ -694,6 +697,48 @@ parse_uint32 (const char **pp, const char *end, uint32_t *pv) return true; } +#if defined (HAVE_NEWLOCALE) && defined (HAVE_STRTOD_L) +#define USE_XLOCALE 1 +#endif + +#ifdef USE_XLOCALE + +static locale_t C_locale; + +#ifdef HB_USE_ATEXIT +static void +free_C_locale (void) +{ + if (C_locale) + freelocale (C_locale); +} +#endif + +static locale_t +get_C_locale (void) +{ +retry: + locale_t C = (locale_t) hb_atomic_ptr_get (&C_locale); + + if (unlikely (!C)) + { + C = newlocale (LC_ALL_MASK, "C", NULL); + + if (!hb_atomic_ptr_cmpexch (&C_locale, NULL, C)) + { + freelocale (C_locale); + goto retry; + } + +#ifdef HB_USE_ATEXIT + atexit (free_C_locale); /* First person registers atexit() callback. */ +#endif + } + + return C; +} +#endif + static bool parse_float (const char **pp, const char *end, float *pv) { @@ -707,7 +752,11 @@ parse_float (const char **pp, const char *end, float *pv) float v; errno = 0; +#ifdef USE_XLOCALE + v = strtod_l (p, &pend, get_C_locale ()); +#else v = strtod (p, &pend); +#endif if (errno || p == pend) return false; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h index 634cb96a68d..614a63aa60b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h @@ -43,30 +43,16 @@ # endif /* !__cplusplus */ #endif -#if !defined (HB_DONT_DEFINE_STDINT) - #if defined (_SVR4) || defined (SVR4) || defined (__OpenBSD__) || \ defined (_sgi) || defined (__sun) || defined (sun) || \ defined (__digital__) || defined (__HP_cc) # include <inttypes.h> #elif defined (_AIX) # include <sys/inttypes.h> -/* VS 2010 (_MSC_VER 1600) has stdint.h */ -#elif defined (_MSC_VER) && _MSC_VER < 1600 -typedef __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; #else # include <stdint.h> #endif -#endif - HB_BEGIN_DECLS @@ -321,6 +307,14 @@ typedef enum /*9.0*/ HB_SCRIPT_TANGUT = HB_TAG ('T','a','n','g'), /*9.0*/ HB_SCRIPT_NEWA = HB_TAG ('N','e','w','a'), + /* + * Since 1.6.0 + */ + /*10.0*/HB_SCRIPT_MASARAM_GONDI = HB_TAG ('G','o','n','m'), + /*10.0*/HB_SCRIPT_NUSHU = HB_TAG ('N','s','h','u'), + /*10.0*/HB_SCRIPT_SOYOMBO = HB_TAG ('S','o','y','o'), + /*10.0*/HB_SCRIPT_ZANABAZAR_SQUARE = HB_TAG ('Z','a','n','b'), + /* No script set. */ HB_SCRIPT_INVALID = HB_TAG_NONE, diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc index ba96d3994ee..22661407dea 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc @@ -30,12 +30,27 @@ #include "hb-shaper-impl-private.hh" #include "hb-coretext.h" +#include <math.h> #ifndef HB_DEBUG_CORETEXT #define HB_DEBUG_CORETEXT (HB_DEBUG+0) #endif +/* https://developer.apple.com/documentation/coretext/1508745-ctfontcreatewithgraphicsfont */ +#define HB_CORETEXT_DEFAULT_FONT_SIZE 12.f + +static CGFloat +coretext_font_size (float ptem) +{ + /* CoreText points are CSS pixels (96 per inch), + * NOT typographic points (72 per inch). + * + * https://developer.apple.com/library/content/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html + */ + ptem *= 96.f / 72.f; + return ptem <= 0.f ? HB_CORETEXT_DEFAULT_FONT_SIZE : ptem; +} static void release_table_data (void *user_data) @@ -62,16 +77,22 @@ reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data) release_table_data); } +static void +_hb_cg_font_release (void *data) +{ + CGFontRelease ((CGFontRef) data); +} + hb_face_t * hb_coretext_face_create (CGFontRef cg_font) { - return hb_face_create_for_tables (reference_table, CGFontRetain (cg_font), (hb_destroy_func_t) CGFontRelease); + return hb_face_create_for_tables (reference_table, CGFontRetain (cg_font), _hb_cg_font_release); } - HB_SHAPER_DATA_ENSURE_DEFINE(coretext, face) -HB_SHAPER_DATA_ENSURE_DEFINE(coretext, font) - +HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(coretext, font, + fabs (CTFontGetSize((CTFontRef) data) - coretext_font_size (font->ptem)) <= .5 +) /* * shaper face data @@ -113,7 +134,7 @@ static CGFontRef create_cg_font (hb_face_t *face) { CGFontRef cg_font = NULL; - if (face->destroy == (hb_destroy_func_t) CGFontRelease) + if (face->destroy == _hb_cg_font_release) { cg_font = CGFontRetain ((CGFontRef) face->user_data); } @@ -140,7 +161,33 @@ create_cg_font (hb_face_t *face) static CTFontRef create_ct_font (CGFontRef cg_font, CGFloat font_size) { - CTFontRef ct_font = CTFontCreateWithGraphicsFont (cg_font, font_size, NULL, NULL); + CTFontRef ct_font = NULL; + + /* CoreText does not enable trak table usage / tracking when creating a CTFont + * using CTFontCreateWithGraphicsFont. The only way of enabling tracking seems + * to be through the CTFontCreateUIFontForLanguage call. */ + CFStringRef cg_postscript_name = CGFontCopyPostScriptName (cg_font); + if (CFStringHasPrefix (cg_postscript_name, CFSTR (".SFNSText")) || + CFStringHasPrefix (cg_postscript_name, CFSTR (".SFNSDisplay"))) + { + CTFontUIFontType font_type = kCTFontUIFontSystem; + if (CFStringHasSuffix (cg_postscript_name, CFSTR ("-Bold"))) + font_type = kCTFontUIFontEmphasizedSystem; + + ct_font = CTFontCreateUIFontForLanguage (font_type, font_size, NULL); + CFStringRef ct_result_name = CTFontCopyPostScriptName(ct_font); + if (CFStringCompare (ct_result_name, cg_postscript_name, 0) != kCFCompareEqualTo) + { + CFRelease(ct_font); + ct_font = NULL; + } + CFRelease (ct_result_name); + } + CFRelease (cg_postscript_name); + + if (!ct_font) + ct_font = CTFontCreateWithGraphicsFont (cg_font, font_size, NULL, NULL); + if (unlikely (!ct_font)) { DEBUG_MSG (CORETEXT, cg_font, "Font CTFontCreateWithGraphicsFont() failed"); return NULL; @@ -202,51 +249,24 @@ create_ct_font (CGFontRef cg_font, CGFloat font_size) return ct_font; } -struct hb_coretext_shaper_face_data_t { - CGFontRef cg_font; - CTFontRef ct_font; -}; - hb_coretext_shaper_face_data_t * _hb_coretext_shaper_face_data_create (hb_face_t *face) { - hb_coretext_shaper_face_data_t *data = (hb_coretext_shaper_face_data_t *) calloc (1, sizeof (hb_coretext_shaper_face_data_t)); - if (unlikely (!data)) - return NULL; + CGFontRef cg_font = create_cg_font (face); - data->cg_font = create_cg_font (face); - if (unlikely (!data->cg_font)) + if (unlikely (!cg_font)) { DEBUG_MSG (CORETEXT, face, "CGFont creation failed.."); - free (data); - return NULL; - } - - /* We use 36pt size instead of UPEM, because CoreText implements the 'trak' table, - * which can make the font too tight at large sizes. 36pt should be a good semi-neutral - * size. - * - * Since we always create CTFont at a fixed size, our CTFont lives in face_data - * instead of font_data. Which is good, because when people change scale on - * hb_font_t, we won't need to update our CTFont. */ - data->ct_font = create_ct_font (data->cg_font, 36.); - if (unlikely (!data->ct_font)) - { - DEBUG_MSG (CORETEXT, face, "CTFont creation failed."); - CFRelease (data->cg_font); - free (data); return NULL; } - return data; + return (hb_coretext_shaper_face_data_t *) cg_font; } void _hb_coretext_shaper_face_data_destroy (hb_coretext_shaper_face_data_t *data) { - CFRelease (data->ct_font); - CFRelease (data->cg_font); - free (data); + CFRelease ((CGFontRef) data); } /* @@ -256,8 +276,7 @@ CGFontRef hb_coretext_face_get_cg_font (hb_face_t *face) { if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL; - hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face); - return face_data->cg_font; + return (CGFontRef) HB_SHAPER_DATA_GET (face); } @@ -265,17 +284,28 @@ hb_coretext_face_get_cg_font (hb_face_t *face) * shaper font data */ -struct hb_coretext_shaper_font_data_t {}; - hb_coretext_shaper_font_data_t * -_hb_coretext_shaper_font_data_create (hb_font_t *font HB_UNUSED) +_hb_coretext_shaper_font_data_create (hb_font_t *font) { - return (hb_coretext_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED; + hb_face_t *face = font->face; + if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL; + CGFontRef cg_font = (CGFontRef) HB_SHAPER_DATA_GET (face); + + CTFontRef ct_font = create_ct_font (cg_font, coretext_font_size (font->ptem)); + + if (unlikely (!ct_font)) + { + DEBUG_MSG (CORETEXT, font, "CGFont creation failed.."); + return NULL; + } + + return (hb_coretext_shaper_font_data_t *) ct_font; } void _hb_coretext_shaper_font_data_destroy (hb_coretext_shaper_font_data_t *data) { + CFRelease ((CTFontRef) data); } @@ -303,10 +333,8 @@ _hb_coretext_shaper_shape_plan_data_destroy (hb_coretext_shaper_shape_plan_data_ CTFontRef hb_coretext_font_get_ct_font (hb_font_t *font) { - hb_face_t *face = font->face; - if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL; - hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face); - return face_data->ct_font; + if (unlikely (!hb_coretext_shaper_font_data_ensure (font))) return NULL; + return (CTFontRef)HB_SHAPER_DATA_GET (font); } @@ -538,9 +566,10 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan, unsigned int num_features) { hb_face_t *face = font->face; - hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face); + CGFontRef cg_font = (CGFontRef) HB_SHAPER_DATA_GET (face); + CTFontRef ct_font = (CTFontRef) HB_SHAPER_DATA_GET (font); - CGFloat ct_font_size = CTFontGetSize (face_data->ct_font); + CGFloat ct_font_size = CTFontGetSize (ct_font); CGFloat x_mult = (CGFloat) font->x_scale / ct_font_size; CGFloat y_mult = (CGFloat) font->y_scale / ct_font_size; @@ -675,7 +704,7 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan, CTFontDescriptorRef font_desc = CTFontDescriptorCreateWithAttributes (attributes); CFRelease (attributes); - range->font = CTFontCreateCopyWithAttributes (face_data->ct_font, 0.0, NULL, font_desc); + range->font = CTFontCreateCopyWithAttributes (ct_font, 0.0, NULL, font_desc); CFRelease (font_desc); } else @@ -829,7 +858,7 @@ resize_and_retry: CFRelease (lang); } CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len), - kCTFontAttributeName, face_data->ct_font); + kCTFontAttributeName, ct_font); if (num_features && range_records.len) { @@ -947,7 +976,7 @@ resize_and_retry: */ CFDictionaryRef attributes = CTRunGetAttributes (run); CTFontRef run_ct_font = static_cast<CTFontRef>(CFDictionaryGetValue (attributes, kCTFontAttributeName)); - if (!CFEqual (run_ct_font, face_data->ct_font)) + if (!CFEqual (run_ct_font, ct_font)) { /* The run doesn't use our main font instance. We have to figure out * whether font fallback happened, or this is just CoreText giving us @@ -985,13 +1014,13 @@ resize_and_retry: CGFontRef run_cg_font = CTFontCopyGraphicsFont (run_ct_font, 0); if (run_cg_font) { - matched = CFEqual (run_cg_font, face_data->cg_font); + matched = CFEqual (run_cg_font, cg_font); CFRelease (run_cg_font); } } if (!matched) { - CFStringRef font_ps_name = CTFontCopyName (face_data->ct_font, kCTFontPostScriptNameKey); + CFStringRef font_ps_name = CTFontCopyName (ct_font, kCTFontPostScriptNameKey); CFStringRef run_ps_name = CTFontCopyName (run_ct_font, kCTFontPostScriptNameKey); CFComparisonResult result = CFStringCompare (run_ps_name, font_ps_name, 0); CFRelease (run_ps_name); @@ -1263,22 +1292,20 @@ struct hb_coretext_aat_shaper_face_data_t {}; hb_coretext_aat_shaper_face_data_t * _hb_coretext_aat_shaper_face_data_create (hb_face_t *face) { - hb_blob_t *mort_blob = face->reference_table (HB_CORETEXT_TAG_MORT); - /* Umm, we just reference the table to check whether it exists. - * Maybe add better API for this? */ - if (!hb_blob_get_length (mort_blob)) + static const hb_tag_t tags[] = {HB_CORETEXT_TAG_MORX, HB_CORETEXT_TAG_MORT, HB_CORETEXT_TAG_KERX}; + + for (unsigned int i = 0; i < ARRAY_LENGTH (tags); i++) { - hb_blob_destroy (mort_blob); - mort_blob = face->reference_table (HB_CORETEXT_TAG_MORX); - if (!hb_blob_get_length (mort_blob)) + hb_blob_t *blob = face->reference_table (tags[i]); + if (hb_blob_get_length (blob)) { - hb_blob_destroy (mort_blob); - return NULL; + hb_blob_destroy (blob); + return hb_coretext_shaper_face_data_ensure (face) ? (hb_coretext_aat_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED : NULL; } + hb_blob_destroy (blob); } - hb_blob_destroy (mort_blob); - return hb_coretext_shaper_face_data_ensure (face) ? (hb_coretext_aat_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED : NULL; + return NULL; } void diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.h index 82066e4e0dc..c9136ff4c30 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.h +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.h @@ -42,6 +42,7 @@ HB_BEGIN_DECLS #define HB_CORETEXT_TAG_MORT HB_TAG('m','o','r','t') #define HB_CORETEXT_TAG_MORX HB_TAG('m','o','r','x') +#define HB_CORETEXT_TAG_KERX HB_TAG('k','e','r','x') HB_EXTERN hb_face_t * diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face-private.hh index 72f08a599ad..43e7b1cb3ff 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face-private.hh @@ -54,13 +54,6 @@ struct hb_face_t { mutable unsigned int upem; /* Units-per-EM. */ mutable unsigned int num_glyphs; /* Number of glyphs. */ - enum dirty_t { - DIRTY_NOTHING = 0x0000, - DIRTY_INDEX = 0x0001, - DIRTY_UPEM = 0x0002, - DIRTY_NUM_GLYPHS = 0x0004, - } dirty; - struct hb_shaper_data_t shaper_data; /* Various shaper data. */ /* Various non-shaping data. */ @@ -106,8 +99,6 @@ struct hb_face_t { HB_INTERNAL void load_num_glyphs (void) const; }; -HB_MARK_AS_FLAG_T (hb_face_t::dirty_t); - extern HB_INTERNAL const hb_face_t _hb_face_nil; #define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc index 22998f00586..e96c8acd386 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc @@ -51,8 +51,6 @@ const hb_face_t _hb_face_nil = { 1000, /* upem */ 0, /* num_glyphs */ - hb_face_t::DIRTY_NOTHING, /* dirty */ - { #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, #include "hb-shaper-list.hh" @@ -120,8 +118,10 @@ _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index) } static void -_hb_face_for_data_closure_destroy (hb_face_for_data_closure_t *closure) +_hb_face_for_data_closure_destroy (void *data) { + hb_face_for_data_closure_t *closure = (hb_face_for_data_closure_t *) data; + hb_blob_destroy (closure->blob); free (closure); } @@ -171,7 +171,7 @@ hb_face_create (hb_blob_t *blob, face = hb_face_create_for_tables (_hb_face_for_data_reference_table, closure, - (hb_destroy_func_t) _hb_face_for_data_closure_destroy); + _hb_face_for_data_closure_destroy); face->index = index; @@ -367,11 +367,6 @@ hb_face_set_index (hb_face_t *face, if (face->immutable) return; - if (face->index == index) - return; - - face->dirty |= face->DIRTY_INDEX; - face->index = index; } @@ -407,11 +402,6 @@ hb_face_set_upem (hb_face_t *face, if (face->immutable) return; - if (face->upem == upem) - return; - - face->dirty |= face->DIRTY_UPEM; - face->upem = upem; } @@ -456,11 +446,6 @@ hb_face_set_glyph_count (hb_face_t *face, if (face->immutable) return; - if (face->num_glyphs == glyph_count) - return; - - face->dirty |= face->DIRTY_NUM_GLYPHS; - face->num_glyphs = glyph_count; } @@ -489,4 +474,33 @@ hb_face_t::load_num_glyphs (void) const hb_blob_destroy (maxp_blob); } +/** + * hb_face_get_table_tags: + * @face: a face. + * + * Retrieves table tags for a face, if possible. + * + * Return value: total number of tables, or 0 if not possible to list. + * + * Since: 1.6.0 + **/ +unsigned int +hb_face_get_table_tags (hb_face_t *face, + unsigned int start_offset, + unsigned int *table_count, /* IN/OUT */ + hb_tag_t *table_tags /* OUT */) +{ + if (face->destroy != _hb_face_for_data_closure_destroy) + { + if (table_count) + *table_count = 0; + return 0; + } + + hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) face->user_data; + + const OT::OpenTypeFontFile &ot_file = *OT::Sanitizer<OT::OpenTypeFontFile>::lock_instance (data->blob); + const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index); + return ot_face.get_table_tags (start_offset, table_count, table_tags); +} diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h index 91237b70850..9842d52b650 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h @@ -111,6 +111,11 @@ hb_face_set_glyph_count (hb_face_t *face, HB_EXTERN unsigned int hb_face_get_glyph_count (hb_face_t *face); +HB_EXTERN unsigned int +hb_face_get_table_tags (hb_face_t *face, + unsigned int start_offset, + unsigned int *table_count, /* IN/OUT */ + hb_tag_t *table_tags /* OUT */); HB_END_DECLS diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh index ed9f2c54adc..d2801fb86ec 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh @@ -108,6 +108,8 @@ struct hb_font_t { unsigned int x_ppem; unsigned int y_ppem; + float ptem; + /* Font variation coordinates. */ unsigned int num_coords; int *coords; @@ -116,16 +118,6 @@ struct hb_font_t { void *user_data; hb_destroy_func_t destroy; - enum dirty_t { - DIRTY_NOTHING = 0x0000, - DIRTY_FACE = 0x0001, - DIRTY_PARENT = 0x0002, - DIRTY_FUNCS = 0x0004, - DIRTY_SCALE = 0x0008, - DIRTY_PPEM = 0x0010, - DIRTY_VARIATIONS = 0x0020, - } dirty; - struct hb_shaper_data_t shaper_data; @@ -553,8 +545,6 @@ struct hb_font_t { } }; -HB_MARK_AS_FLAG_T (hb_font_t::dirty_t); - #define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_PROTOTYPE(shaper, font); #include "hb-shaper-list.hh" diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc index a684c234d0a..5673e66e3d0 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc @@ -1157,8 +1157,20 @@ hb_font_create_sub_font (hb_font_t *parent) font->y_scale = parent->y_scale; font->x_ppem = parent->x_ppem; font->y_ppem = parent->y_ppem; + font->ptem = parent->ptem; - /* TODO: copy variation coordinates. */ + font->num_coords = parent->num_coords; + if (!font->num_coords) + font->coords = NULL; + else + { + unsigned int size = parent->num_coords * sizeof (parent->coords[0]); + font->coords = (int *) malloc (size); + if (unlikely (!font->coords)) + font->num_coords = 0; + else + memcpy (font->coords, parent->coords, size); + } return font; } @@ -1188,6 +1200,7 @@ hb_font_get_empty (void) 0, /* x_ppem */ 0, /* y_ppem */ + 0, /* ptem */ 0, /* num_coords */ NULL, /* coords */ @@ -1196,8 +1209,6 @@ hb_font_get_empty (void) NULL, /* user_data */ NULL, /* destroy */ - hb_font_t::DIRTY_NOTHING, /* dirty */ - { #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID, #include "hb-shaper-list.hh" @@ -1350,11 +1361,6 @@ hb_font_set_parent (hb_font_t *font, if (!parent) parent = hb_font_get_empty (); - if (parent == font->parent) - return; - - font->dirty |= font->DIRTY_PARENT; - hb_font_t *old = font->parent; font->parent = hb_font_reference (parent); @@ -1397,11 +1403,6 @@ hb_font_set_face (hb_font_t *font, if (unlikely (!face)) face = hb_face_get_empty (); - if (font->face == face) - return; - - font->dirty |= font->DIRTY_FACE; - hb_face_t *old = font->face; font->face = hb_face_reference (face); @@ -1455,8 +1456,6 @@ hb_font_set_funcs (hb_font_t *font, if (!klass) klass = hb_font_funcs_get_empty (); - font->dirty |= font->DIRTY_FUNCS; - hb_font_funcs_reference (klass); hb_font_funcs_destroy (font->klass); font->klass = klass; @@ -1512,11 +1511,6 @@ hb_font_set_scale (hb_font_t *font, if (font->immutable) return; - if (font->x_scale == x_scale && font->y_scale == y_scale) - return; - - font->dirty |= font->DIRTY_SCALE; - font->x_scale = x_scale; font->y_scale = y_scale; } @@ -1558,11 +1552,6 @@ hb_font_set_ppem (hb_font_t *font, if (font->immutable) return; - if (font->x_ppem == x_ppem && font->y_ppem == y_ppem) - return; - - font->dirty |= font->DIRTY_PPEM; - font->x_ppem = x_ppem; font->y_ppem = y_ppem; } @@ -1586,6 +1575,40 @@ hb_font_get_ppem (hb_font_t *font, if (y_ppem) *y_ppem = font->y_ppem; } +/** + * hb_font_set_ptem: + * @font: a font. + * @ptem: + * + * Sets "point size" of the font. + * + * Since: 1.6.0 + **/ +void +hb_font_set_ptem (hb_font_t *font, float ptem) +{ + if (font->immutable) + return; + + font->ptem = ptem; +} + +/** + * hb_font_get_ptem: + * @font: a font. + * + * Gets the "point size" of the font. A value of 0 means unset. + * + * Return value: Point size. + * + * Since: 0.9.2 + **/ +float +hb_font_get_ptem (hb_font_t *font) +{ + return font->ptem; +} + /* * Variations */ @@ -1595,16 +1618,6 @@ _hb_font_adopt_var_coords_normalized (hb_font_t *font, int *coords, /* 2.14 normalized */ unsigned int coords_length) { - if (font->num_coords == coords_length && - (coords_length == 0 || - 0 == memcmp (font->coords, coords, coords_length * sizeof (coords[0])))) - { - free (coords); - return; - } - - font->dirty |= font->DIRTY_VARIATIONS; - free (font->coords); font->coords = coords; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.h index 85fb56d5b6d..540cdcab953 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.h +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.h @@ -607,6 +607,16 @@ hb_font_get_ppem (hb_font_t *font, unsigned int *x_ppem, unsigned int *y_ppem); +/* + * Point size per EM. Used for optical-sizing in CoreText. + * A value of zero means "not set". + */ +HB_EXTERN void +hb_font_set_ptem (hb_font_t *font, float ptem); + +HB_EXTERN float +hb_font_get_ptem (hb_font_t *font); + HB_EXTERN void hb_font_set_variations (hb_font_t *font, const hb_variation_t *variations, diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc index 492992ee425..83af9942ec5 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc @@ -95,14 +95,16 @@ _hb_ft_font_create (FT_Face ft_face, bool symbol, bool unref) } static void -_hb_ft_face_destroy (FT_Face ft_face) +_hb_ft_face_destroy (void *data) { - FT_Done_Face (ft_face); + FT_Done_Face ((FT_Face) data); } static void -_hb_ft_font_destroy (hb_ft_font_t *ft_font) +_hb_ft_font_destroy (void *data) { + hb_ft_font_t *ft_font = (hb_ft_font_t *) data; + if (ft_font->unref) _hb_ft_face_destroy (ft_font->ft_face); @@ -124,7 +126,7 @@ hb_ft_font_set_load_flags (hb_font_t *font, int load_flags) if (font->immutable) return; - if (font->destroy != (hb_destroy_func_t) _hb_ft_font_destroy) + if (font->destroy != _hb_ft_font_destroy) return; hb_ft_font_t *ft_font = (hb_ft_font_t *) font->user_data; @@ -144,7 +146,7 @@ hb_ft_font_set_load_flags (hb_font_t *font, int load_flags) int hb_ft_font_get_load_flags (hb_font_t *font) { - if (font->destroy != (hb_destroy_func_t) _hb_ft_font_destroy) + if (font->destroy != _hb_ft_font_destroy) return 0; const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font->user_data; @@ -155,7 +157,7 @@ hb_ft_font_get_load_flags (hb_font_t *font) FT_Face hb_ft_font_get_face (hb_font_t *font) { - if (font->destroy != (hb_destroy_func_t) _hb_ft_font_destroy) + if (font->destroy != _hb_ft_font_destroy) return NULL; const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font->user_data; @@ -474,7 +476,7 @@ retry: hb_font_set_funcs (font, funcs, _hb_ft_font_create (ft_face, symbol, unref), - (hb_destroy_func_t) _hb_ft_font_destroy); + _hb_ft_font_destroy); } @@ -553,7 +555,7 @@ hb_face_t * hb_ft_face_create_referenced (FT_Face ft_face) { FT_Reference_Face (ft_face); - return hb_ft_face_create (ft_face, (hb_destroy_func_t) _hb_ft_face_destroy); + return hb_ft_face_create (ft_face, _hb_ft_face_destroy); } static void @@ -608,6 +610,19 @@ hb_ft_font_create (FT_Face ft_face, font = hb_font_create (face); hb_face_destroy (face); _hb_ft_font_set_funcs (font, ft_face, false); + hb_ft_font_changed (font); + return font; +} + +void +hb_ft_font_changed (hb_font_t *font) +{ + if (font->destroy != _hb_ft_font_destroy) + return; + + hb_ft_font_t *ft_font = (hb_ft_font_t *) font->user_data; + FT_Face ft_face = ft_font->ft_face; + hb_font_set_scale (font, (int) (((uint64_t) ft_face->size->metrics.x_scale * (uint64_t) ft_face->units_per_EM + (1u<<15)) >> 16), (int) (((uint64_t) ft_face->size->metrics.y_scale * (uint64_t) ft_face->units_per_EM + (1u<<15)) >> 16)); @@ -638,8 +653,6 @@ hb_ft_font_create (FT_Face ft_face, free (mm_var); } #endif - - return font; } /** @@ -655,7 +668,7 @@ hb_font_t * hb_ft_font_create_referenced (FT_Face ft_face) { FT_Reference_Face (ft_face); - return hb_ft_font_create (ft_face, (hb_destroy_func_t) _hb_ft_face_destroy); + return hb_ft_font_create (ft_face, _hb_ft_face_destroy); } diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.h index dc8ef855848..94013eeb915 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.h +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.h @@ -116,7 +116,13 @@ hb_ft_font_set_load_flags (hb_font_t *font, int load_flags); HB_EXTERN int hb_ft_font_get_load_flags (hb_font_t *font); -/* Makes an hb_font_t use FreeType internally to implement font functions. */ +/* Call when size or variations settings on underlying FT_Face change. */ +HB_EXTERN void +hb_ft_font_changed (hb_font_t *font); + +/* Makes an hb_font_t use FreeType internally to implement font functions. + * Note: this internally creates an FT_Face. Use it when you create your + * hb_face_t using hb_face_create(). */ HB_EXTERN void hb_ft_font_set_funcs (hb_font_t *font); diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc index 2b91b5b6511..8b499558b1b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc @@ -383,6 +383,13 @@ hb_glib_get_unicode_funcs (void) } #if GLIB_CHECK_VERSION(2,31,10) + +static void +_hb_g_bytes_unref (void *data) +{ + g_bytes_unref ((GBytes *) data); +} + /** * hb_glib_blob_create: * @@ -397,6 +404,6 @@ hb_glib_blob_create (GBytes *gbytes) size, HB_MEMORY_MODE_READONLY, g_bytes_ref (gbytes), - (hb_destroy_func_t) g_bytes_unref); + _hb_g_bytes_unref); } #endif diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc index 9e0761e63d1..bc247c60cbc 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc @@ -389,7 +389,7 @@ _hb_graphite2_shape (hb_shape_plan_t *shape_plan, } else { - curradvx = gr_seg_advance_X(seg); + curradvx = gr_seg_advance_X(seg) * xscale; for (is = gr_seg_first_slot (seg); is; pPos++, info++, is = gr_slot_next_in_segment (is)) { if (info->cluster != currclus) diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh index f208419aac5..dcfdfd6cab4 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh @@ -79,6 +79,24 @@ typedef struct OffsetTable if (unlikely (i >= numTables)) return Null(TableRecord); return tables[i]; } + inline unsigned int get_table_tags (unsigned int start_offset, + unsigned int *table_count, /* IN/OUT */ + hb_tag_t *table_tags /* OUT */) const + { + if (table_count) + { + if (start_offset >= numTables) + *table_count = 0; + else + *table_count = MIN (*table_count, numTables - start_offset); + + const TableRecord *sub_tables = tables + start_offset; + unsigned int count = *table_count; + for (unsigned int i = 0; i < count; i++) + table_tags[i] = sub_tables[i].tag; + } + return numTables; + } inline bool find_table_index (hb_tag_t tag, unsigned int *table_index) const { Tag t; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc index d3251caf724..a56f4c07f70 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc @@ -458,8 +458,10 @@ _hb_ot_font_create (hb_face_t *face) } static void -_hb_ot_font_destroy (hb_ot_font_t *ot_font) +_hb_ot_font_destroy (void *data) { + hb_ot_font_t *ot_font = (hb_ot_font_t *) data; + ot_font->cmap.fini (); ot_font->h_metrics.fini (); ot_font->v_metrics.fini (); @@ -627,5 +629,5 @@ hb_ot_font_set_funcs (hb_font_t *font) hb_font_set_funcs (font, _hb_ot_get_font_funcs (), ot_font, - (hb_destroy_func_t) _hb_ot_font_destroy); + _hb_ot_font_destroy); } diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh index 738ca8c444e..e45ce2721c8 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh @@ -1087,7 +1087,9 @@ struct MarkBasePosFormat1 do { if (!skippy_iter.prev ()) return_trace (false); /* We only want to attach to the first of a MultipleSubst sequence. Reject others. */ - if (0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx])) break; + if (!_hb_glyph_info_multiplied (&buffer->info[skippy_iter.idx]) || + 0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx])) + break; skippy_iter.reject (); } while (1); diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh index 472628a3937..cedf96e3fb9 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh @@ -374,6 +374,13 @@ struct hb_apply_context_t : inline void reject (void) { num_items++; match_glyph_data--; } + inline matcher_t::may_skip_t + may_skip (const hb_apply_context_t *c, + const hb_glyph_info_t &info) const + { + return matcher.may_skip (c, info); + } + inline bool next (void) { assert (num_items > 0); @@ -736,11 +743,17 @@ static inline bool match_input (hb_apply_context_t *c, * - Ligatures cannot be formed across glyphs attached to different components * of previous ligatures. Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and * LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother. - * However, it would be wrong to ligate that SHADDA,FATHA sequence.o - * There is an exception to this: If a ligature tries ligating with marks that - * belong to it itself, go ahead, assuming that the font designer knows what - * they are doing (otherwise it can break Indic stuff when a matra wants to - * ligate with a conjunct...) + * However, it would be wrong to ligate that SHADDA,FATHA sequence. + * There are a couple of exceptions to this: + * + * o If a ligature tries ligating with marks that belong to it itself, go ahead, + * assuming that the font designer knows what they are doing (otherwise it can + * break Indic stuff when a matra wants to ligate with a conjunct, + * + * o If two marks want to ligate and they belong to different components of the + * same ligature glyph, and said ligature glyph is to be ignored according to + * mark-filtering rules, then allow. + * https://github.com/behdad/harfbuzz/issues/545 */ bool is_mark_ligature = _hb_glyph_info_is_mark (&buffer->cur()); @@ -751,6 +764,12 @@ static inline bool match_input (hb_apply_context_t *c, unsigned int first_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur()); unsigned int first_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->cur()); + enum { + LIGBASE_NOT_CHECKED, + LIGBASE_MAY_NOT_SKIP, + LIGBASE_MAY_SKIP + } ligbase = LIGBASE_NOT_CHECKED; + match_positions[0] = buffer->idx; for (unsigned int i = 1; i < count; i++) { @@ -761,13 +780,43 @@ static inline bool match_input (hb_apply_context_t *c, unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]); unsigned int this_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]); - if (first_lig_id && first_lig_comp) { + if (first_lig_id && first_lig_comp) + { /* If first component was attached to a previous ligature component, * all subsequent components should be attached to the same ligature - * component, otherwise we shouldn't ligate them. */ + * component, otherwise we shouldn't ligate them... */ if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp) - return_trace (false); - } else { + { + /* ...unless, we are attached to a base ligature and that base + * ligature is ignorable. */ + if (ligbase == LIGBASE_NOT_CHECKED) + { + bool found = false; + const hb_glyph_info_t *out = buffer->out_info; + unsigned int j = buffer->out_len; + while (j && _hb_glyph_info_get_lig_id (&out[j - 1]) == first_lig_id) + { + if (_hb_glyph_info_get_lig_comp (&out[j - 1]) == 0) + { + j--; + found = true; + break; + } + j--; + } + + if (found && skippy_iter.may_skip (c, out[j]) == hb_apply_context_t::matcher_t::SKIP_YES) + ligbase = LIGBASE_MAY_SKIP; + else + ligbase = LIGBASE_MAY_NOT_SKIP; + } + + if (ligbase == LIGBASE_MAY_NOT_SKIP) + return_trace (false); + } + } + else + { /* If first component was NOT attached to a previous ligature component, * all subsequent components should also NOT be attached to any ligature * component, unless they are attached to the first component itself! */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh index d4ac60b06fe..6717adeb930 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh @@ -347,6 +347,8 @@ _hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info) return _hb_glyph_info_is_unicode_mark (info) ? info->unicode_props()>>8 : 0; } +#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info))) + static inline bool _hb_glyph_info_is_unicode_space (const hb_glyph_info_t *info) { diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh index 228f3665901..cd6e4058b56 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh @@ -6,10 +6,10 @@ * * on files with these headers: * - * # ArabicShaping-9.0.0.txt - * # Date: 2016-02-24, 22:25:00 GMT [RP] - * # Blocks-9.0.0.txt - * # Date: 2016-02-05, 23:48:00 GMT [KW] + * # ArabicShaping-10.0.0.txt + * # Date: 2017-02-16, 00:00:00 GMT [RP, KW] + * # Blocks-10.0.0.txt + * # Date: 2017-04-12, 17:30:00 GMT [KW] * UnicodeData.txt does not have a header. */ @@ -72,7 +72,10 @@ static const uint8_t joining_table[] = /* Mandaic */ /* 0840 */ R,D,D,D,D,D,R,R,D,R,D,D,D,D,D,D,D,D,D,D,R,D,U,U,U,X,X,X,X,X,X,X, - /* 0860 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, + + /* Syriac Supplement */ + + /* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, /* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, /* Arabic Extended-A */ @@ -130,7 +133,7 @@ static const uint8_t joining_table[] = /* 1E920 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D, /* 1E940 */ D,D,D,D, -}; /* Table items: 1214; occupancy: 54% */ +}; /* Table items: 1214; occupancy: 55% */ static unsigned int diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic.cc index ed7b3f2dd9b..f7419611203 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic.cc @@ -613,6 +613,80 @@ postprocess_glyphs_arabic (const hb_ot_shape_plan_t *plan, HB_BUFFER_DEALLOCATE_VAR (buffer, arabic_shaping_action); } +/* http://www.unicode.org/reports/tr53/tr53-1.pdf */ + +static hb_codepoint_t +modifier_combining_marks[] = +{ + 0x0654u, /* ARABIC HAMZA ABOVE */ + 0x0655u, /* ARABIC HAMZA BELOW */ + 0x0658u, /* ARABIC MARK NOON GHUNNA */ + 0x06DCu, /* ARABIC SMALL HIGH SEEN */ + 0x06E3u, /* ARABIC SMALL LOW SEEN */ + 0x06E7u, /* ARABIC SMALL HIGH YEH */ + 0x06E8u, /* ARABIC SMALL HIGH NOON */ + 0x08F3u, /* ARABIC SMALL HIGH WAW */ +}; + +static inline bool +info_is_mcm (const hb_glyph_info_t &info) +{ + hb_codepoint_t u = info.codepoint; + for (unsigned int i = 0; i < ARRAY_LENGTH (modifier_combining_marks); i++) + if (u == modifier_combining_marks[i]) + return true; + return false; +} + +static void +reorder_marks_arabic (const hb_ot_shape_plan_t *plan, + hb_buffer_t *buffer, + unsigned int start, + unsigned int end) +{ + hb_glyph_info_t *info = buffer->info; + + unsigned int i = start; + for (unsigned int cc = 220; cc <= 230; cc += 10) + { + DEBUG_MSG (ARABIC, buffer, "Looking for %d's starting at %d\n", cc, i); + while (i < end && info_cc(info[i]) < cc) + i++; + DEBUG_MSG (ARABIC, buffer, "Looking for %d's stopped at %d\n", cc, i); + + if (i == end) + break; + + if (info_cc(info[i]) > cc) + continue; + + /* Technically we should also check "info_cc(info[j]) == cc" + * in the following loop. But not doing it is safe; we might + * end up moving all the 220 MCMs and 230 MCMs together in one + * move and be done. */ + unsigned int j = i; + while (j < end && info_is_mcm (info[j])) + j++; + DEBUG_MSG (ARABIC, buffer, "Found %d's from %d to %d\n", cc, i, j); + + if (i == j) + continue; + + /* Shift it! */ + DEBUG_MSG (ARABIC, buffer, "Shifting %d's: %d %d\n", cc, i, j); + hb_glyph_info_t temp[HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS]; + assert (j - i <= ARRAY_LENGTH (temp)); + buffer->merge_clusters (start, j); + memmove (temp, &info[i], (j - i) * sizeof (hb_glyph_info_t)); + memmove (&info[start + j - i], &info[start], (i - start) * sizeof (hb_glyph_info_t)); + memmove (&info[start], temp, (j - i) * sizeof (hb_glyph_info_t)); + + start += j - i; + + i = j; + } +} + const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic = { "arabic", @@ -627,6 +701,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic = NULL, /* compose */ setup_masks_arabic, NULL, /* disable_otl */ + reorder_marks_arabic, HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, true, /* fallback_position */ }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-default.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-default.cc index 42830ab6185..857980cfcbe 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-default.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-default.cc @@ -41,6 +41,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default = NULL, /* compose */ NULL, /* setup_masks */ NULL, /* disable_otl */ + NULL, /* reorder_marks */ HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, true, /* fallback_position */ }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hangul.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hangul.cc index 0e74802ee52..63850d36ac8 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hangul.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hangul.cc @@ -426,6 +426,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hangul = NULL, /* compose */ setup_masks_hangul, NULL, /* disable_otl */ + NULL, /* reorder_marks */ HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE, false, /* fallback_position */ }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hebrew.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hebrew.cc index 96f24946165..b8ddadc1e29 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hebrew.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hebrew.cc @@ -181,6 +181,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hebrew = compose_hebrew, NULL, /* setup_masks */ disable_otl_hebrew, + NULL, /* reorder_marks */ HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, true, /* fallback_position */ }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh index 5a7a265c871..7eaba4e4e7b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh @@ -56,7 +56,7 @@ static const unsigned char _indic_syllable_machine_trans_keys[] = { 5u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 8u, 8u, 1u, 16u, 8u, 13u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, - 16u, 16u, 8u, 8u, 1u, 18u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, + 16u, 16u, 8u, 8u, 1u, 19u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 5u, 14u, 5u, 14u, 5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, @@ -101,7 +101,7 @@ static const unsigned char _indic_syllable_machine_trans_keys[] = { 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 13u, 3u, 10u, 5u, 10u, 3u, 10u, 3u, 13u, 1u, 16u, 3u, 10u, 5u, 10u, 5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, - 9u, 10u, 9u, 9u, 5u, 10u, 0 + 9u, 10u, 9u, 9u, 5u, 10u, 1u, 16u, 0 }; static const char _indic_syllable_machine_key_spans[] = { @@ -127,7 +127,7 @@ static const char _indic_syllable_machine_key_spans[] = { 3, 4, 3, 1, 4, 3, 1, 4, 3, 1, 1, 16, 6, 5, 1, 1, 5, 1, 1, 5, 1, 1, 5, 1, - 1, 1, 18, 15, 15, 14, 16, 15, + 1, 1, 19, 15, 15, 14, 16, 15, 15, 14, 16, 15, 15, 14, 16, 15, 15, 14, 16, 15, 15, 14, 10, 10, 6, 2, 1, 2, 2, 1, 6, 11, @@ -172,7 +172,7 @@ static const char _indic_syllable_machine_key_spans[] = { 12, 11, 10, 12, 11, 10, 12, 11, 10, 12, 11, 10, 11, 8, 6, 8, 11, 16, 8, 6, 6, 2, 1, 2, - 2, 1, 6 + 2, 1, 6, 16 }; static const short _indic_syllable_machine_index_offsets[] = { @@ -198,52 +198,52 @@ static const short _indic_syllable_machine_index_offsets[] = { 954, 958, 963, 967, 969, 974, 978, 980, 985, 989, 991, 993, 1010, 1017, 1023, 1025, 1027, 1033, 1035, 1037, 1043, 1045, 1047, 1053, - 1055, 1057, 1059, 1078, 1094, 1110, 1125, 1142, - 1158, 1174, 1189, 1206, 1222, 1238, 1253, 1270, - 1286, 1302, 1317, 1334, 1350, 1366, 1381, 1392, - 1403, 1410, 1413, 1415, 1418, 1421, 1423, 1430, - 1442, 1451, 1458, 1467, 1479, 1492, 1505, 1517, - 1528, 1541, 1553, 1564, 1577, 1589, 1600, 1613, - 1625, 1636, 1649, 1666, 1678, 1694, 1710, 1727, - 1744, 1761, 1778, 1795, 1811, 1827, 1844, 1861, - 1878, 1895, 1912, 1928, 1944, 1961, 1978, 1995, - 2012, 2029, 2045, 2061, 2078, 2095, 2112, 2129, - 2146, 2162, 2178, 2194, 2210, 2225, 2242, 2258, - 2274, 2289, 2306, 2322, 2338, 2353, 2370, 2386, - 2402, 2417, 2434, 2450, 2466, 2481, 2492, 2503, - 2510, 2513, 2515, 2518, 2521, 2523, 2530, 2542, - 2551, 2558, 2567, 2579, 2592, 2605, 2617, 2628, - 2641, 2653, 2664, 2677, 2689, 2700, 2713, 2725, - 2736, 2749, 2766, 2778, 2794, 2810, 2827, 2844, - 2861, 2878, 2895, 2911, 2927, 2944, 2961, 2978, - 2995, 3012, 3028, 3044, 3061, 3078, 3095, 3112, - 3129, 3145, 3161, 3178, 3195, 3212, 3229, 3241, - 3258, 3274, 3290, 3305, 3322, 3338, 3354, 3369, - 3386, 3402, 3418, 3433, 3450, 3466, 3482, 3497, - 3514, 3530, 3546, 3561, 3572, 3583, 3590, 3593, - 3595, 3598, 3601, 3603, 3610, 3622, 3631, 3638, - 3647, 3659, 3672, 3685, 3697, 3708, 3721, 3733, - 3744, 3757, 3769, 3780, 3793, 3805, 3816, 3829, - 3846, 3858, 3874, 3890, 3907, 3924, 3941, 3958, - 3975, 3991, 4007, 4024, 4041, 4058, 4075, 4092, - 4108, 4124, 4141, 4158, 4175, 4192, 4209, 4225, - 4241, 4258, 4275, 4292, 4309, 4326, 4338, 4354, - 4366, 4382, 4398, 4413, 4430, 4446, 4462, 4477, - 4494, 4510, 4526, 4541, 4558, 4574, 4590, 4605, - 4622, 4638, 4654, 4669, 4680, 4691, 4698, 4701, - 4703, 4706, 4709, 4711, 4718, 4730, 4739, 4746, - 4755, 4767, 4780, 4793, 4805, 4816, 4829, 4841, - 4852, 4865, 4877, 4888, 4901, 4913, 4924, 4937, - 4954, 4966, 4982, 4998, 5015, 5032, 5049, 5066, - 5083, 5099, 5115, 5132, 5149, 5166, 5183, 5200, - 5216, 5232, 5249, 5266, 5283, 5300, 5317, 5333, - 5349, 5366, 5383, 5400, 5417, 5434, 5450, 5468, - 5484, 5502, 5514, 5521, 5524, 5526, 5529, 5532, - 5534, 5541, 5558, 5574, 5590, 5605, 5621, 5637, - 5654, 5667, 5679, 5690, 5703, 5715, 5726, 5739, - 5751, 5762, 5775, 5787, 5798, 5810, 5819, 5826, - 5835, 5847, 5864, 5873, 5880, 5887, 5890, 5892, - 5895, 5898, 5900 + 1055, 1057, 1059, 1079, 1095, 1111, 1126, 1143, + 1159, 1175, 1190, 1207, 1223, 1239, 1254, 1271, + 1287, 1303, 1318, 1335, 1351, 1367, 1382, 1393, + 1404, 1411, 1414, 1416, 1419, 1422, 1424, 1431, + 1443, 1452, 1459, 1468, 1480, 1493, 1506, 1518, + 1529, 1542, 1554, 1565, 1578, 1590, 1601, 1614, + 1626, 1637, 1650, 1667, 1679, 1695, 1711, 1728, + 1745, 1762, 1779, 1796, 1812, 1828, 1845, 1862, + 1879, 1896, 1913, 1929, 1945, 1962, 1979, 1996, + 2013, 2030, 2046, 2062, 2079, 2096, 2113, 2130, + 2147, 2163, 2179, 2195, 2211, 2226, 2243, 2259, + 2275, 2290, 2307, 2323, 2339, 2354, 2371, 2387, + 2403, 2418, 2435, 2451, 2467, 2482, 2493, 2504, + 2511, 2514, 2516, 2519, 2522, 2524, 2531, 2543, + 2552, 2559, 2568, 2580, 2593, 2606, 2618, 2629, + 2642, 2654, 2665, 2678, 2690, 2701, 2714, 2726, + 2737, 2750, 2767, 2779, 2795, 2811, 2828, 2845, + 2862, 2879, 2896, 2912, 2928, 2945, 2962, 2979, + 2996, 3013, 3029, 3045, 3062, 3079, 3096, 3113, + 3130, 3146, 3162, 3179, 3196, 3213, 3230, 3242, + 3259, 3275, 3291, 3306, 3323, 3339, 3355, 3370, + 3387, 3403, 3419, 3434, 3451, 3467, 3483, 3498, + 3515, 3531, 3547, 3562, 3573, 3584, 3591, 3594, + 3596, 3599, 3602, 3604, 3611, 3623, 3632, 3639, + 3648, 3660, 3673, 3686, 3698, 3709, 3722, 3734, + 3745, 3758, 3770, 3781, 3794, 3806, 3817, 3830, + 3847, 3859, 3875, 3891, 3908, 3925, 3942, 3959, + 3976, 3992, 4008, 4025, 4042, 4059, 4076, 4093, + 4109, 4125, 4142, 4159, 4176, 4193, 4210, 4226, + 4242, 4259, 4276, 4293, 4310, 4327, 4339, 4355, + 4367, 4383, 4399, 4414, 4431, 4447, 4463, 4478, + 4495, 4511, 4527, 4542, 4559, 4575, 4591, 4606, + 4623, 4639, 4655, 4670, 4681, 4692, 4699, 4702, + 4704, 4707, 4710, 4712, 4719, 4731, 4740, 4747, + 4756, 4768, 4781, 4794, 4806, 4817, 4830, 4842, + 4853, 4866, 4878, 4889, 4902, 4914, 4925, 4938, + 4955, 4967, 4983, 4999, 5016, 5033, 5050, 5067, + 5084, 5100, 5116, 5133, 5150, 5167, 5184, 5201, + 5217, 5233, 5250, 5267, 5284, 5301, 5318, 5334, + 5350, 5367, 5384, 5401, 5418, 5435, 5451, 5469, + 5485, 5503, 5515, 5522, 5525, 5527, 5530, 5533, + 5535, 5542, 5559, 5575, 5591, 5606, 5622, 5638, + 5655, 5668, 5680, 5691, 5704, 5716, 5727, 5740, + 5752, 5763, 5776, 5788, 5799, 5811, 5820, 5827, + 5836, 5848, 5865, 5874, 5881, 5888, 5891, 5893, + 5896, 5899, 5901, 5908 }; static const short _indic_syllable_machine_indicies[] = { @@ -381,611 +381,613 @@ static const short _indic_syllable_machine_indicies[] = { 161, 161, 162, 157, 0, 183, 0, 184, 0, 186, 185, 188, 189, 190, 191, 192, 193, 84, 79, 194, 195, 196, 196, 156, - 197, 198, 199, 200, 201, 187, 203, 204, - 205, 206, 6, 1, 207, 208, 202, 202, - 38, 209, 202, 202, 210, 202, 211, 204, - 212, 212, 6, 1, 207, 208, 202, 202, - 202, 209, 202, 202, 210, 202, 204, 212, - 212, 6, 1, 207, 208, 202, 202, 202, - 209, 202, 202, 210, 202, 213, 202, 202, - 202, 19, 214, 202, 1, 207, 208, 202, - 202, 202, 215, 202, 213, 202, 216, 217, - 218, 219, 6, 1, 207, 208, 202, 202, - 36, 220, 202, 202, 210, 202, 221, 217, - 222, 222, 6, 1, 207, 208, 202, 202, - 202, 220, 202, 202, 210, 202, 217, 222, - 222, 6, 1, 207, 208, 202, 202, 202, - 220, 202, 202, 210, 202, 223, 202, 202, - 202, 19, 224, 202, 1, 207, 208, 202, - 202, 202, 215, 202, 223, 202, 225, 226, - 227, 228, 6, 1, 207, 208, 202, 202, - 34, 229, 202, 202, 210, 202, 230, 226, - 231, 231, 6, 1, 207, 208, 202, 202, - 202, 229, 202, 202, 210, 202, 226, 231, - 231, 6, 1, 207, 208, 202, 202, 202, - 229, 202, 202, 210, 202, 232, 202, 202, - 202, 19, 233, 202, 1, 207, 208, 202, - 202, 202, 215, 202, 232, 202, 234, 235, - 236, 237, 6, 1, 207, 208, 202, 202, - 32, 238, 202, 202, 210, 202, 239, 235, - 240, 240, 6, 1, 207, 208, 202, 202, - 202, 238, 202, 202, 210, 202, 235, 240, - 240, 6, 1, 207, 208, 202, 202, 202, - 238, 202, 202, 210, 202, 241, 202, 202, - 202, 19, 242, 202, 1, 207, 208, 202, - 202, 202, 215, 202, 241, 202, 243, 244, - 245, 246, 6, 1, 207, 208, 202, 202, - 30, 247, 202, 202, 210, 202, 248, 244, - 249, 249, 6, 1, 207, 208, 202, 202, - 202, 247, 202, 202, 210, 202, 244, 249, - 249, 6, 1, 207, 208, 202, 202, 202, - 247, 202, 202, 210, 202, 19, 250, 202, - 1, 207, 208, 202, 202, 202, 215, 202, - 251, 251, 202, 1, 207, 208, 202, 202, - 202, 215, 202, 252, 202, 202, 253, 207, - 208, 202, 207, 208, 202, 254, 202, 207, - 255, 202, 207, 256, 202, 207, 202, 252, - 202, 202, 202, 207, 208, 202, 257, 202, - 258, 259, 202, 1, 207, 208, 202, 202, - 4, 202, 3, 202, 251, 251, 202, 1, - 207, 208, 202, 251, 251, 202, 1, 207, - 208, 202, 257, 202, 251, 251, 202, 1, - 207, 208, 202, 257, 202, 258, 251, 202, - 1, 207, 208, 202, 202, 4, 202, 19, - 202, 260, 260, 6, 1, 207, 208, 202, - 202, 202, 215, 202, 261, 28, 262, 263, - 9, 1, 207, 208, 202, 202, 202, 215, - 202, 28, 262, 263, 9, 1, 207, 208, - 202, 202, 202, 215, 202, 262, 262, 9, - 1, 207, 208, 202, 202, 202, 215, 202, - 264, 25, 265, 266, 12, 1, 207, 208, - 202, 202, 202, 215, 202, 25, 265, 266, - 12, 1, 207, 208, 202, 202, 202, 215, - 202, 265, 265, 12, 1, 207, 208, 202, - 202, 202, 215, 202, 267, 22, 268, 269, - 15, 1, 207, 208, 202, 202, 202, 215, - 202, 22, 268, 269, 15, 1, 207, 208, - 202, 202, 202, 215, 202, 268, 268, 15, - 1, 207, 208, 202, 202, 202, 215, 202, - 270, 19, 251, 271, 202, 1, 207, 208, - 202, 202, 202, 215, 202, 19, 251, 271, - 202, 1, 207, 208, 202, 202, 202, 215, - 202, 251, 272, 202, 1, 207, 208, 202, - 202, 202, 215, 202, 19, 202, 251, 251, - 202, 1, 207, 208, 202, 202, 202, 215, - 202, 2, 3, 202, 202, 19, 250, 202, - 1, 207, 208, 202, 202, 202, 215, 202, - 2, 202, 244, 249, 249, 6, 1, 207, - 208, 202, 202, 202, 247, 202, 243, 244, - 249, 249, 6, 1, 207, 208, 202, 202, - 202, 247, 202, 202, 210, 202, 243, 244, - 245, 249, 6, 1, 207, 208, 202, 202, - 30, 247, 202, 202, 210, 202, 241, 202, - 273, 202, 260, 260, 6, 1, 207, 208, - 202, 202, 202, 215, 202, 241, 202, 241, - 202, 202, 202, 251, 251, 202, 1, 207, - 208, 202, 202, 202, 215, 202, 241, 202, - 241, 202, 202, 202, 251, 274, 202, 1, - 207, 208, 202, 202, 202, 215, 202, 241, - 202, 241, 202, 273, 202, 251, 251, 202, - 1, 207, 208, 202, 202, 202, 215, 202, - 241, 202, 241, 3, 202, 202, 19, 242, - 202, 1, 207, 208, 202, 202, 202, 215, - 202, 241, 202, 234, 235, 240, 240, 6, - 1, 207, 208, 202, 202, 202, 238, 202, - 202, 210, 202, 234, 235, 236, 240, 6, - 1, 207, 208, 202, 202, 32, 238, 202, - 202, 210, 202, 232, 202, 275, 202, 260, - 260, 6, 1, 207, 208, 202, 202, 202, - 215, 202, 232, 202, 232, 202, 202, 202, - 251, 251, 202, 1, 207, 208, 202, 202, - 202, 215, 202, 232, 202, 232, 202, 202, - 202, 251, 276, 202, 1, 207, 208, 202, - 202, 202, 215, 202, 232, 202, 232, 202, - 275, 202, 251, 251, 202, 1, 207, 208, - 202, 202, 202, 215, 202, 232, 202, 232, - 3, 202, 202, 19, 233, 202, 1, 207, - 208, 202, 202, 202, 215, 202, 232, 202, - 225, 226, 231, 231, 6, 1, 207, 208, - 202, 202, 202, 229, 202, 202, 210, 202, - 225, 226, 227, 231, 6, 1, 207, 208, - 202, 202, 34, 229, 202, 202, 210, 202, - 223, 202, 277, 202, 260, 260, 6, 1, - 207, 208, 202, 202, 202, 215, 202, 223, - 202, 223, 202, 202, 202, 251, 251, 202, - 1, 207, 208, 202, 202, 202, 215, 202, - 223, 202, 223, 202, 202, 202, 251, 278, - 202, 1, 207, 208, 202, 202, 202, 215, - 202, 223, 202, 223, 202, 277, 202, 251, - 251, 202, 1, 207, 208, 202, 202, 202, - 215, 202, 223, 202, 223, 3, 202, 202, - 19, 224, 202, 1, 207, 208, 202, 202, - 202, 215, 202, 223, 202, 216, 217, 222, - 222, 6, 1, 207, 208, 202, 202, 202, - 220, 202, 202, 210, 202, 216, 217, 218, - 222, 6, 1, 207, 208, 202, 202, 36, - 220, 202, 202, 210, 202, 213, 202, 279, - 202, 260, 260, 6, 1, 207, 208, 202, - 202, 202, 215, 202, 213, 202, 213, 202, - 202, 202, 251, 251, 202, 1, 207, 208, - 202, 202, 202, 215, 202, 213, 202, 213, - 202, 202, 202, 251, 280, 202, 1, 207, - 208, 202, 202, 202, 215, 202, 213, 202, - 213, 202, 279, 202, 251, 251, 202, 1, - 207, 208, 202, 202, 202, 215, 202, 213, - 202, 213, 3, 202, 202, 19, 214, 202, - 1, 207, 208, 202, 202, 202, 215, 202, - 213, 202, 203, 204, 212, 212, 6, 1, - 207, 208, 202, 202, 202, 209, 202, 202, - 210, 202, 203, 204, 205, 212, 6, 1, - 207, 208, 202, 202, 38, 209, 202, 202, - 210, 202, 282, 283, 284, 285, 45, 40, - 286, 287, 281, 281, 77, 288, 281, 281, - 289, 281, 290, 283, 291, 285, 45, 40, - 286, 287, 281, 281, 281, 288, 281, 281, - 289, 281, 283, 291, 285, 45, 40, 286, - 287, 281, 281, 281, 288, 281, 281, 289, - 281, 292, 281, 281, 281, 58, 293, 281, - 40, 286, 287, 281, 281, 281, 294, 281, - 292, 281, 295, 296, 297, 298, 45, 40, - 286, 287, 281, 281, 75, 299, 281, 281, - 289, 281, 300, 296, 301, 301, 45, 40, - 286, 287, 281, 281, 281, 299, 281, 281, - 289, 281, 296, 301, 301, 45, 40, 286, - 287, 281, 281, 281, 299, 281, 281, 289, - 281, 302, 281, 281, 281, 58, 303, 281, - 40, 286, 287, 281, 281, 281, 294, 281, - 302, 281, 304, 305, 306, 307, 45, 40, - 286, 287, 281, 281, 73, 308, 281, 281, - 289, 281, 309, 305, 310, 310, 45, 40, - 286, 287, 281, 281, 281, 308, 281, 281, - 289, 281, 305, 310, 310, 45, 40, 286, - 287, 281, 281, 281, 308, 281, 281, 289, - 281, 311, 281, 281, 281, 58, 312, 281, - 40, 286, 287, 281, 281, 281, 294, 281, - 311, 281, 313, 314, 315, 316, 45, 40, - 286, 287, 281, 281, 71, 317, 281, 281, - 289, 281, 318, 314, 319, 319, 45, 40, - 286, 287, 281, 281, 281, 317, 281, 281, - 289, 281, 314, 319, 319, 45, 40, 286, - 287, 281, 281, 281, 317, 281, 281, 289, - 281, 320, 281, 281, 281, 58, 321, 281, - 40, 286, 287, 281, 281, 281, 294, 281, - 320, 281, 322, 323, 324, 325, 45, 40, - 286, 287, 281, 281, 69, 326, 281, 281, - 289, 281, 327, 323, 328, 328, 45, 40, - 286, 287, 281, 281, 281, 326, 281, 281, - 289, 281, 323, 328, 328, 45, 40, 286, - 287, 281, 281, 281, 326, 281, 281, 289, - 281, 58, 329, 281, 40, 286, 287, 281, - 281, 281, 294, 281, 330, 330, 281, 40, - 286, 287, 281, 281, 281, 294, 281, 331, - 281, 281, 332, 286, 287, 281, 286, 287, - 281, 333, 281, 286, 334, 281, 286, 335, - 281, 286, 281, 331, 281, 281, 281, 286, - 287, 281, 336, 281, 337, 338, 281, 40, - 286, 287, 281, 281, 43, 281, 42, 281, - 330, 330, 281, 40, 286, 287, 281, 330, - 330, 281, 40, 286, 287, 281, 336, 281, - 330, 330, 281, 40, 286, 287, 281, 336, - 281, 337, 330, 281, 40, 286, 287, 281, - 281, 43, 281, 58, 281, 339, 339, 45, - 40, 286, 287, 281, 281, 281, 294, 281, - 340, 67, 341, 342, 48, 40, 286, 287, - 281, 281, 281, 294, 281, 67, 341, 342, - 48, 40, 286, 287, 281, 281, 281, 294, - 281, 341, 341, 48, 40, 286, 287, 281, - 281, 281, 294, 281, 343, 64, 344, 345, - 51, 40, 286, 287, 281, 281, 281, 294, - 281, 64, 344, 345, 51, 40, 286, 287, - 281, 281, 281, 294, 281, 344, 344, 51, - 40, 286, 287, 281, 281, 281, 294, 281, - 346, 61, 347, 348, 54, 40, 286, 287, - 281, 281, 281, 294, 281, 61, 347, 348, - 54, 40, 286, 287, 281, 281, 281, 294, - 281, 347, 347, 54, 40, 286, 287, 281, - 281, 281, 294, 281, 349, 58, 330, 350, - 281, 40, 286, 287, 281, 281, 281, 294, - 281, 58, 330, 350, 281, 40, 286, 287, - 281, 281, 281, 294, 281, 330, 351, 281, - 40, 286, 287, 281, 281, 281, 294, 281, - 58, 281, 330, 330, 281, 40, 286, 287, - 281, 281, 281, 294, 281, 41, 42, 281, - 281, 58, 329, 281, 40, 286, 287, 281, - 281, 281, 294, 281, 41, 281, 323, 328, - 328, 45, 40, 286, 287, 281, 281, 281, - 326, 281, 322, 323, 328, 328, 45, 40, - 286, 287, 281, 281, 281, 326, 281, 281, - 289, 281, 322, 323, 324, 328, 45, 40, - 286, 287, 281, 281, 69, 326, 281, 281, - 289, 281, 320, 281, 352, 281, 339, 339, - 45, 40, 286, 287, 281, 281, 281, 294, - 281, 320, 281, 320, 281, 281, 281, 330, - 330, 281, 40, 286, 287, 281, 281, 281, - 294, 281, 320, 281, 320, 281, 281, 281, - 330, 353, 281, 40, 286, 287, 281, 281, - 281, 294, 281, 320, 281, 320, 281, 352, - 281, 330, 330, 281, 40, 286, 287, 281, - 281, 281, 294, 281, 320, 281, 320, 42, - 281, 281, 58, 321, 281, 40, 286, 287, - 281, 281, 281, 294, 281, 320, 281, 313, - 314, 319, 319, 45, 40, 286, 287, 281, - 281, 281, 317, 281, 281, 289, 281, 313, - 314, 315, 319, 45, 40, 286, 287, 281, - 281, 71, 317, 281, 281, 289, 281, 311, - 281, 354, 281, 339, 339, 45, 40, 286, - 287, 281, 281, 281, 294, 281, 311, 281, - 311, 281, 281, 281, 330, 330, 281, 40, - 286, 287, 281, 281, 281, 294, 281, 311, - 281, 311, 281, 281, 281, 330, 355, 281, - 40, 286, 287, 281, 281, 281, 294, 281, - 311, 281, 311, 281, 354, 281, 330, 330, - 281, 40, 286, 287, 281, 281, 281, 294, - 281, 311, 281, 311, 42, 281, 281, 58, - 312, 281, 40, 286, 287, 281, 281, 281, - 294, 281, 311, 281, 304, 305, 310, 310, - 45, 40, 286, 287, 281, 281, 281, 308, - 281, 281, 289, 281, 304, 305, 306, 310, - 45, 40, 286, 287, 281, 281, 73, 308, - 281, 281, 289, 281, 302, 281, 356, 281, - 339, 339, 45, 40, 286, 287, 281, 281, - 281, 294, 281, 302, 281, 302, 281, 281, - 281, 330, 330, 281, 40, 286, 287, 281, - 281, 281, 294, 281, 302, 281, 302, 281, - 281, 281, 330, 357, 281, 40, 286, 287, - 281, 281, 281, 294, 281, 302, 281, 302, - 281, 356, 281, 330, 330, 281, 40, 286, - 287, 281, 281, 281, 294, 281, 302, 281, - 302, 42, 281, 281, 58, 303, 281, 40, - 286, 287, 281, 281, 281, 294, 281, 302, - 281, 295, 296, 301, 301, 45, 40, 286, - 287, 281, 281, 281, 299, 281, 281, 289, - 281, 295, 296, 297, 301, 45, 40, 286, - 287, 281, 281, 75, 299, 281, 281, 289, - 281, 292, 281, 358, 281, 339, 339, 45, - 40, 286, 287, 281, 281, 281, 294, 281, - 292, 281, 292, 281, 281, 281, 330, 330, - 281, 40, 286, 287, 281, 281, 281, 294, - 281, 292, 281, 292, 281, 281, 281, 330, - 359, 281, 40, 286, 287, 281, 281, 281, - 294, 281, 292, 281, 292, 281, 358, 281, - 330, 330, 281, 40, 286, 287, 281, 281, - 281, 294, 281, 292, 281, 76, 44, 44, - 45, 40, 281, 281, 281, 281, 281, 76, - 281, 292, 42, 281, 281, 58, 293, 281, - 40, 286, 287, 281, 281, 281, 294, 281, - 292, 281, 282, 283, 291, 285, 45, 40, - 286, 287, 281, 281, 281, 288, 281, 281, - 289, 281, 361, 191, 362, 362, 84, 79, - 194, 195, 360, 360, 360, 197, 360, 360, - 200, 360, 191, 362, 362, 84, 79, 194, - 195, 360, 360, 360, 197, 360, 360, 200, - 360, 363, 360, 360, 360, 98, 364, 360, - 79, 194, 195, 360, 360, 360, 365, 360, - 363, 360, 366, 367, 368, 369, 84, 79, - 194, 195, 360, 360, 115, 370, 360, 360, - 200, 360, 371, 367, 372, 372, 84, 79, - 194, 195, 360, 360, 360, 370, 360, 360, - 200, 360, 367, 372, 372, 84, 79, 194, - 195, 360, 360, 360, 370, 360, 360, 200, - 360, 373, 360, 360, 360, 98, 374, 360, - 79, 194, 195, 360, 360, 360, 365, 360, - 373, 360, 375, 376, 377, 378, 84, 79, - 194, 195, 360, 360, 113, 379, 360, 360, - 200, 360, 380, 376, 381, 381, 84, 79, - 194, 195, 360, 360, 360, 379, 360, 360, - 200, 360, 376, 381, 381, 84, 79, 194, - 195, 360, 360, 360, 379, 360, 360, 200, - 360, 382, 360, 360, 360, 98, 383, 360, - 79, 194, 195, 360, 360, 360, 365, 360, - 382, 360, 384, 385, 386, 387, 84, 79, - 194, 195, 360, 360, 111, 388, 360, 360, - 200, 360, 389, 385, 390, 390, 84, 79, - 194, 195, 360, 360, 360, 388, 360, 360, - 200, 360, 385, 390, 390, 84, 79, 194, - 195, 360, 360, 360, 388, 360, 360, 200, - 360, 391, 360, 360, 360, 98, 392, 360, - 79, 194, 195, 360, 360, 360, 365, 360, - 391, 360, 393, 394, 395, 396, 84, 79, - 194, 195, 360, 360, 109, 397, 360, 360, - 200, 360, 398, 394, 399, 399, 84, 79, - 194, 195, 360, 360, 360, 397, 360, 360, - 200, 360, 394, 399, 399, 84, 79, 194, - 195, 360, 360, 360, 397, 360, 360, 200, - 360, 98, 400, 360, 79, 194, 195, 360, - 360, 360, 365, 360, 401, 401, 360, 79, - 194, 195, 360, 360, 360, 365, 360, 402, - 360, 360, 403, 194, 195, 360, 194, 195, - 360, 404, 360, 194, 405, 360, 194, 406, - 360, 194, 360, 402, 360, 360, 360, 194, - 195, 360, 407, 360, 408, 409, 360, 79, - 194, 195, 360, 360, 82, 360, 81, 360, - 401, 401, 360, 79, 194, 195, 360, 401, - 401, 360, 79, 194, 195, 360, 407, 360, - 401, 401, 360, 79, 194, 195, 360, 407, - 360, 408, 401, 360, 79, 194, 195, 360, - 360, 82, 360, 98, 360, 410, 410, 84, - 79, 194, 195, 360, 360, 360, 365, 360, - 411, 107, 412, 413, 88, 79, 194, 195, - 360, 360, 360, 365, 360, 107, 412, 413, - 88, 79, 194, 195, 360, 360, 360, 365, - 360, 412, 412, 88, 79, 194, 195, 360, - 360, 360, 365, 360, 414, 104, 415, 416, - 91, 79, 194, 195, 360, 360, 360, 365, - 360, 104, 415, 416, 91, 79, 194, 195, - 360, 360, 360, 365, 360, 415, 415, 91, - 79, 194, 195, 360, 360, 360, 365, 360, - 417, 101, 418, 419, 94, 79, 194, 195, - 360, 360, 360, 365, 360, 101, 418, 419, - 94, 79, 194, 195, 360, 360, 360, 365, - 360, 418, 418, 94, 79, 194, 195, 360, - 360, 360, 365, 360, 420, 98, 401, 421, - 360, 79, 194, 195, 360, 360, 360, 365, - 360, 98, 401, 421, 360, 79, 194, 195, - 360, 360, 360, 365, 360, 401, 422, 360, - 79, 194, 195, 360, 360, 360, 365, 360, - 98, 360, 401, 401, 360, 79, 194, 195, - 360, 360, 360, 365, 360, 80, 81, 360, - 360, 98, 400, 360, 79, 194, 195, 360, - 360, 360, 365, 360, 80, 360, 394, 399, - 399, 84, 79, 194, 195, 360, 360, 360, - 397, 360, 393, 394, 399, 399, 84, 79, - 194, 195, 360, 360, 360, 397, 360, 360, - 200, 360, 393, 394, 395, 399, 84, 79, - 194, 195, 360, 360, 109, 397, 360, 360, - 200, 360, 391, 360, 423, 360, 410, 410, - 84, 79, 194, 195, 360, 360, 360, 365, - 360, 391, 360, 391, 360, 360, 360, 401, - 401, 360, 79, 194, 195, 360, 360, 360, - 365, 360, 391, 360, 391, 360, 360, 360, - 401, 424, 360, 79, 194, 195, 360, 360, - 360, 365, 360, 391, 360, 391, 360, 423, - 360, 401, 401, 360, 79, 194, 195, 360, - 360, 360, 365, 360, 391, 360, 391, 81, - 360, 360, 98, 392, 360, 79, 194, 195, - 360, 360, 360, 365, 360, 391, 360, 384, - 385, 390, 390, 84, 79, 194, 195, 360, - 360, 360, 388, 360, 360, 200, 360, 384, - 385, 386, 390, 84, 79, 194, 195, 360, - 360, 111, 388, 360, 360, 200, 360, 382, - 360, 425, 360, 410, 410, 84, 79, 194, - 195, 360, 360, 360, 365, 360, 382, 360, - 382, 360, 360, 360, 401, 401, 360, 79, - 194, 195, 360, 360, 360, 365, 360, 382, - 360, 382, 360, 360, 360, 401, 426, 360, - 79, 194, 195, 360, 360, 360, 365, 360, - 382, 360, 382, 360, 425, 360, 401, 401, - 360, 79, 194, 195, 360, 360, 360, 365, - 360, 382, 360, 382, 81, 360, 360, 98, - 383, 360, 79, 194, 195, 360, 360, 360, - 365, 360, 382, 360, 375, 376, 381, 381, - 84, 79, 194, 195, 360, 360, 360, 379, - 360, 360, 200, 360, 375, 376, 377, 381, - 84, 79, 194, 195, 360, 360, 113, 379, - 360, 360, 200, 360, 373, 360, 427, 360, - 410, 410, 84, 79, 194, 195, 360, 360, - 360, 365, 360, 373, 360, 373, 360, 360, - 360, 401, 401, 360, 79, 194, 195, 360, - 360, 360, 365, 360, 373, 360, 373, 360, - 360, 360, 401, 428, 360, 79, 194, 195, - 360, 360, 360, 365, 360, 373, 360, 373, - 360, 427, 360, 401, 401, 360, 79, 194, - 195, 360, 360, 360, 365, 360, 373, 360, - 373, 81, 360, 360, 98, 374, 360, 79, - 194, 195, 360, 360, 360, 365, 360, 373, - 360, 366, 367, 372, 372, 84, 79, 194, - 195, 360, 360, 360, 370, 360, 360, 200, - 360, 366, 367, 368, 372, 84, 79, 194, - 195, 360, 360, 115, 370, 360, 360, 200, - 360, 363, 360, 429, 360, 410, 410, 84, - 79, 194, 195, 360, 360, 360, 365, 360, - 363, 360, 363, 360, 360, 360, 401, 401, - 360, 79, 194, 195, 360, 360, 360, 365, - 360, 363, 360, 363, 360, 360, 360, 401, - 430, 360, 79, 194, 195, 360, 360, 360, - 365, 360, 363, 360, 363, 360, 429, 360, - 401, 401, 360, 79, 194, 195, 360, 360, - 360, 365, 360, 363, 360, 363, 81, 360, - 360, 98, 364, 360, 79, 194, 195, 360, - 360, 360, 365, 360, 363, 360, 116, 83, - 83, 84, 79, 431, 431, 431, 431, 156, - 116, 431, 190, 191, 362, 362, 84, 79, - 194, 195, 360, 360, 360, 197, 360, 360, - 200, 360, 116, 83, 83, 84, 79, 431, - 431, 431, 431, 431, 116, 431, 433, 434, - 435, 436, 123, 118, 437, 438, 432, 432, - 155, 439, 432, 432, 440, 432, 441, 434, - 436, 436, 123, 118, 437, 438, 432, 432, - 432, 439, 432, 432, 440, 432, 434, 436, - 436, 123, 118, 437, 438, 432, 432, 432, - 439, 432, 432, 440, 432, 442, 432, 432, - 432, 136, 443, 432, 118, 437, 438, 432, - 432, 432, 444, 432, 442, 432, 445, 446, - 447, 448, 123, 118, 437, 438, 432, 432, - 153, 449, 432, 432, 440, 432, 450, 446, - 451, 451, 123, 118, 437, 438, 432, 432, - 432, 449, 432, 432, 440, 432, 446, 451, - 451, 123, 118, 437, 438, 432, 432, 432, - 449, 432, 432, 440, 432, 452, 432, 432, - 432, 136, 453, 432, 118, 437, 438, 432, - 432, 432, 444, 432, 452, 432, 454, 455, - 456, 457, 123, 118, 437, 438, 432, 432, - 151, 458, 432, 432, 440, 432, 459, 455, - 460, 460, 123, 118, 437, 438, 432, 432, - 432, 458, 432, 432, 440, 432, 455, 460, - 460, 123, 118, 437, 438, 432, 432, 432, - 458, 432, 432, 440, 432, 461, 432, 432, - 432, 136, 462, 432, 118, 437, 438, 432, - 432, 432, 444, 432, 461, 432, 463, 464, - 465, 466, 123, 118, 437, 438, 432, 432, - 149, 467, 432, 432, 440, 432, 468, 464, - 469, 469, 123, 118, 437, 438, 432, 432, - 432, 467, 432, 432, 440, 432, 464, 469, - 469, 123, 118, 437, 438, 432, 432, 432, - 467, 432, 432, 440, 432, 470, 432, 432, - 432, 136, 471, 432, 118, 437, 438, 432, - 432, 432, 444, 432, 470, 432, 472, 473, - 474, 475, 123, 118, 437, 438, 432, 432, - 147, 476, 432, 432, 440, 432, 477, 473, - 478, 478, 123, 118, 437, 438, 432, 432, - 432, 476, 432, 432, 440, 432, 473, 478, - 478, 123, 118, 437, 438, 432, 432, 432, - 476, 432, 432, 440, 432, 136, 479, 432, - 118, 437, 438, 432, 432, 432, 444, 432, - 480, 480, 432, 118, 437, 438, 432, 432, - 432, 444, 432, 481, 432, 432, 482, 437, - 438, 432, 437, 438, 432, 483, 432, 437, - 484, 432, 437, 485, 432, 437, 432, 481, - 432, 432, 432, 437, 438, 432, 486, 432, - 487, 488, 432, 118, 437, 438, 432, 432, - 121, 432, 120, 432, 480, 480, 432, 118, - 437, 438, 432, 480, 480, 432, 118, 437, - 438, 432, 486, 432, 480, 480, 432, 118, - 437, 438, 432, 486, 432, 487, 480, 432, - 118, 437, 438, 432, 432, 121, 432, 136, - 432, 489, 489, 123, 118, 437, 438, 432, - 432, 432, 444, 432, 490, 145, 491, 492, - 126, 118, 437, 438, 432, 432, 432, 444, - 432, 145, 491, 492, 126, 118, 437, 438, - 432, 432, 432, 444, 432, 491, 491, 126, - 118, 437, 438, 432, 432, 432, 444, 432, - 493, 142, 494, 495, 129, 118, 437, 438, - 432, 432, 432, 444, 432, 142, 494, 495, - 129, 118, 437, 438, 432, 432, 432, 444, - 432, 494, 494, 129, 118, 437, 438, 432, - 432, 432, 444, 432, 496, 139, 497, 498, - 132, 118, 437, 438, 432, 432, 432, 444, - 432, 139, 497, 498, 132, 118, 437, 438, - 432, 432, 432, 444, 432, 497, 497, 132, - 118, 437, 438, 432, 432, 432, 444, 432, - 499, 136, 480, 500, 432, 118, 437, 438, - 432, 432, 432, 444, 432, 136, 480, 500, - 432, 118, 437, 438, 432, 432, 432, 444, - 432, 480, 501, 432, 118, 437, 438, 432, - 432, 432, 444, 432, 136, 432, 480, 480, - 432, 118, 437, 438, 432, 432, 432, 444, - 432, 119, 120, 432, 432, 136, 479, 432, - 118, 437, 438, 432, 432, 432, 444, 432, - 119, 432, 473, 478, 478, 123, 118, 437, - 438, 432, 432, 432, 476, 432, 472, 473, - 478, 478, 123, 118, 437, 438, 432, 432, - 432, 476, 432, 432, 440, 432, 472, 473, - 474, 478, 123, 118, 437, 438, 432, 432, - 147, 476, 432, 432, 440, 432, 470, 432, - 502, 432, 489, 489, 123, 118, 437, 438, - 432, 432, 432, 444, 432, 470, 432, 470, - 432, 432, 432, 480, 480, 432, 118, 437, - 438, 432, 432, 432, 444, 432, 470, 432, - 470, 432, 432, 432, 480, 503, 432, 118, - 437, 438, 432, 432, 432, 444, 432, 470, - 432, 470, 432, 502, 432, 480, 480, 432, - 118, 437, 438, 432, 432, 432, 444, 432, - 470, 432, 470, 120, 432, 432, 136, 471, - 432, 118, 437, 438, 432, 432, 432, 444, - 432, 470, 432, 463, 464, 469, 469, 123, - 118, 437, 438, 432, 432, 432, 467, 432, - 432, 440, 432, 463, 464, 465, 469, 123, - 118, 437, 438, 432, 432, 149, 467, 432, - 432, 440, 432, 461, 432, 504, 432, 489, - 489, 123, 118, 437, 438, 432, 432, 432, - 444, 432, 461, 432, 461, 432, 432, 432, - 480, 480, 432, 118, 437, 438, 432, 432, - 432, 444, 432, 461, 432, 461, 432, 432, - 432, 480, 505, 432, 118, 437, 438, 432, - 432, 432, 444, 432, 461, 432, 461, 432, - 504, 432, 480, 480, 432, 118, 437, 438, - 432, 432, 432, 444, 432, 461, 432, 461, - 120, 432, 432, 136, 462, 432, 118, 437, - 438, 432, 432, 432, 444, 432, 461, 432, - 454, 455, 460, 460, 123, 118, 437, 438, - 432, 432, 432, 458, 432, 432, 440, 432, - 454, 455, 456, 460, 123, 118, 437, 438, - 432, 432, 151, 458, 432, 432, 440, 432, - 452, 432, 506, 432, 489, 489, 123, 118, - 437, 438, 432, 432, 432, 444, 432, 452, - 432, 452, 432, 432, 432, 480, 480, 432, - 118, 437, 438, 432, 432, 432, 444, 432, - 452, 432, 452, 432, 432, 432, 480, 507, - 432, 118, 437, 438, 432, 432, 432, 444, - 432, 452, 432, 452, 432, 506, 432, 480, - 480, 432, 118, 437, 438, 432, 432, 432, - 444, 432, 452, 432, 452, 120, 432, 432, - 136, 453, 432, 118, 437, 438, 432, 432, - 432, 444, 432, 452, 432, 445, 446, 451, - 451, 123, 118, 437, 438, 432, 432, 432, - 449, 432, 432, 440, 432, 445, 446, 447, - 451, 123, 118, 437, 438, 432, 432, 153, - 449, 432, 432, 440, 432, 442, 432, 508, - 432, 489, 489, 123, 118, 437, 438, 432, - 432, 432, 444, 432, 442, 432, 442, 432, - 432, 432, 480, 480, 432, 118, 437, 438, - 432, 432, 432, 444, 432, 442, 432, 442, - 432, 432, 432, 480, 509, 432, 118, 437, - 438, 432, 432, 432, 444, 432, 442, 432, - 442, 432, 508, 432, 480, 480, 432, 118, - 437, 438, 432, 432, 432, 444, 432, 442, - 432, 442, 120, 432, 432, 136, 443, 432, - 118, 437, 438, 432, 432, 432, 444, 432, - 442, 432, 433, 434, 436, 436, 123, 118, - 437, 438, 432, 432, 432, 439, 432, 432, - 440, 432, 188, 189, 190, 191, 510, 362, - 84, 79, 194, 195, 196, 196, 156, 197, - 360, 188, 200, 360, 203, 511, 205, 206, - 6, 1, 207, 208, 202, 202, 38, 209, - 202, 202, 210, 202, 213, 189, 190, 191, - 512, 513, 84, 157, 514, 515, 202, 196, - 156, 516, 202, 213, 200, 202, 116, 517, - 517, 84, 157, 207, 208, 202, 202, 156, - 518, 202, 519, 202, 202, 520, 514, 515, - 202, 514, 515, 202, 254, 202, 514, 521, - 202, 514, 522, 202, 514, 202, 519, 202, - 202, 202, 514, 515, 202, 523, 3, 360, - 360, 401, 430, 360, 79, 194, 195, 360, - 360, 360, 365, 360, 523, 360, 524, 367, - 525, 526, 84, 157, 514, 515, 202, 202, - 158, 370, 202, 202, 200, 202, 527, 367, - 528, 528, 84, 157, 514, 515, 202, 202, - 202, 370, 202, 202, 200, 202, 367, 528, - 528, 84, 157, 514, 515, 202, 202, 202, - 370, 202, 202, 200, 202, 524, 367, 528, - 528, 84, 157, 514, 515, 202, 202, 202, - 370, 202, 202, 200, 202, 524, 367, 525, - 528, 84, 157, 514, 515, 202, 202, 158, - 370, 202, 202, 200, 202, 213, 202, 279, - 116, 529, 529, 160, 157, 207, 208, 202, - 202, 202, 518, 202, 213, 202, 530, 184, - 531, 532, 162, 157, 514, 515, 202, 202, - 202, 533, 202, 184, 531, 532, 162, 157, - 514, 515, 202, 202, 202, 533, 202, 531, - 531, 162, 157, 514, 515, 202, 202, 202, - 533, 202, 534, 181, 535, 536, 165, 157, - 514, 515, 202, 202, 202, 533, 202, 181, - 535, 536, 165, 157, 514, 515, 202, 202, - 202, 533, 202, 535, 535, 165, 157, 514, - 515, 202, 202, 202, 533, 202, 537, 178, - 538, 539, 168, 157, 514, 515, 202, 202, - 202, 533, 202, 178, 538, 539, 168, 157, - 514, 515, 202, 202, 202, 533, 202, 538, - 538, 168, 157, 514, 515, 202, 202, 202, - 533, 202, 540, 175, 541, 542, 202, 157, - 514, 515, 202, 202, 202, 533, 202, 175, - 541, 542, 202, 157, 514, 515, 202, 202, - 202, 533, 202, 541, 541, 202, 157, 514, - 515, 202, 202, 202, 533, 202, 543, 202, - 544, 545, 202, 157, 514, 515, 202, 202, - 172, 202, 171, 202, 541, 541, 202, 157, - 514, 515, 202, 541, 541, 202, 157, 514, - 515, 202, 543, 202, 541, 541, 202, 157, - 514, 515, 202, 543, 202, 544, 541, 202, - 157, 514, 515, 202, 202, 172, 202, 523, - 171, 360, 360, 98, 364, 360, 79, 194, - 195, 360, 360, 360, 365, 360, 523, 360, - 547, 546, 548, 548, 546, 186, 549, 550, - 546, 548, 548, 546, 186, 549, 550, 546, - 551, 546, 546, 552, 549, 550, 546, 549, - 550, 546, 553, 546, 549, 554, 546, 549, - 555, 546, 549, 546, 551, 546, 546, 546, - 549, 550, 546, 0 + 197, 198, 199, 200, 201, 202, 187, 204, + 205, 206, 207, 6, 1, 208, 209, 203, + 203, 38, 210, 203, 203, 211, 203, 212, + 205, 213, 213, 6, 1, 208, 209, 203, + 203, 203, 210, 203, 203, 211, 203, 205, + 213, 213, 6, 1, 208, 209, 203, 203, + 203, 210, 203, 203, 211, 203, 214, 203, + 203, 203, 19, 215, 203, 1, 208, 209, + 203, 203, 203, 216, 203, 214, 203, 217, + 218, 219, 220, 6, 1, 208, 209, 203, + 203, 36, 221, 203, 203, 211, 203, 222, + 218, 223, 223, 6, 1, 208, 209, 203, + 203, 203, 221, 203, 203, 211, 203, 218, + 223, 223, 6, 1, 208, 209, 203, 203, + 203, 221, 203, 203, 211, 203, 224, 203, + 203, 203, 19, 225, 203, 1, 208, 209, + 203, 203, 203, 216, 203, 224, 203, 226, + 227, 228, 229, 6, 1, 208, 209, 203, + 203, 34, 230, 203, 203, 211, 203, 231, + 227, 232, 232, 6, 1, 208, 209, 203, + 203, 203, 230, 203, 203, 211, 203, 227, + 232, 232, 6, 1, 208, 209, 203, 203, + 203, 230, 203, 203, 211, 203, 233, 203, + 203, 203, 19, 234, 203, 1, 208, 209, + 203, 203, 203, 216, 203, 233, 203, 235, + 236, 237, 238, 6, 1, 208, 209, 203, + 203, 32, 239, 203, 203, 211, 203, 240, + 236, 241, 241, 6, 1, 208, 209, 203, + 203, 203, 239, 203, 203, 211, 203, 236, + 241, 241, 6, 1, 208, 209, 203, 203, + 203, 239, 203, 203, 211, 203, 242, 203, + 203, 203, 19, 243, 203, 1, 208, 209, + 203, 203, 203, 216, 203, 242, 203, 244, + 245, 246, 247, 6, 1, 208, 209, 203, + 203, 30, 248, 203, 203, 211, 203, 249, + 245, 250, 250, 6, 1, 208, 209, 203, + 203, 203, 248, 203, 203, 211, 203, 245, + 250, 250, 6, 1, 208, 209, 203, 203, + 203, 248, 203, 203, 211, 203, 19, 251, + 203, 1, 208, 209, 203, 203, 203, 216, + 203, 252, 252, 203, 1, 208, 209, 203, + 203, 203, 216, 203, 253, 203, 203, 254, + 208, 209, 203, 208, 209, 203, 255, 203, + 208, 256, 203, 208, 257, 203, 208, 203, + 253, 203, 203, 203, 208, 209, 203, 258, + 203, 259, 260, 203, 1, 208, 209, 203, + 203, 4, 203, 3, 203, 252, 252, 203, + 1, 208, 209, 203, 252, 252, 203, 1, + 208, 209, 203, 258, 203, 252, 252, 203, + 1, 208, 209, 203, 258, 203, 259, 252, + 203, 1, 208, 209, 203, 203, 4, 203, + 19, 203, 261, 261, 6, 1, 208, 209, + 203, 203, 203, 216, 203, 262, 28, 263, + 264, 9, 1, 208, 209, 203, 203, 203, + 216, 203, 28, 263, 264, 9, 1, 208, + 209, 203, 203, 203, 216, 203, 263, 263, + 9, 1, 208, 209, 203, 203, 203, 216, + 203, 265, 25, 266, 267, 12, 1, 208, + 209, 203, 203, 203, 216, 203, 25, 266, + 267, 12, 1, 208, 209, 203, 203, 203, + 216, 203, 266, 266, 12, 1, 208, 209, + 203, 203, 203, 216, 203, 268, 22, 269, + 270, 15, 1, 208, 209, 203, 203, 203, + 216, 203, 22, 269, 270, 15, 1, 208, + 209, 203, 203, 203, 216, 203, 269, 269, + 15, 1, 208, 209, 203, 203, 203, 216, + 203, 271, 19, 252, 272, 203, 1, 208, + 209, 203, 203, 203, 216, 203, 19, 252, + 272, 203, 1, 208, 209, 203, 203, 203, + 216, 203, 252, 273, 203, 1, 208, 209, + 203, 203, 203, 216, 203, 19, 203, 252, + 252, 203, 1, 208, 209, 203, 203, 203, + 216, 203, 2, 3, 203, 203, 19, 251, + 203, 1, 208, 209, 203, 203, 203, 216, + 203, 2, 203, 245, 250, 250, 6, 1, + 208, 209, 203, 203, 203, 248, 203, 244, + 245, 250, 250, 6, 1, 208, 209, 203, + 203, 203, 248, 203, 203, 211, 203, 244, + 245, 246, 250, 6, 1, 208, 209, 203, + 203, 30, 248, 203, 203, 211, 203, 242, + 203, 274, 203, 261, 261, 6, 1, 208, + 209, 203, 203, 203, 216, 203, 242, 203, + 242, 203, 203, 203, 252, 252, 203, 1, + 208, 209, 203, 203, 203, 216, 203, 242, + 203, 242, 203, 203, 203, 252, 275, 203, + 1, 208, 209, 203, 203, 203, 216, 203, + 242, 203, 242, 203, 274, 203, 252, 252, + 203, 1, 208, 209, 203, 203, 203, 216, + 203, 242, 203, 242, 3, 203, 203, 19, + 243, 203, 1, 208, 209, 203, 203, 203, + 216, 203, 242, 203, 235, 236, 241, 241, + 6, 1, 208, 209, 203, 203, 203, 239, + 203, 203, 211, 203, 235, 236, 237, 241, + 6, 1, 208, 209, 203, 203, 32, 239, + 203, 203, 211, 203, 233, 203, 276, 203, + 261, 261, 6, 1, 208, 209, 203, 203, + 203, 216, 203, 233, 203, 233, 203, 203, + 203, 252, 252, 203, 1, 208, 209, 203, + 203, 203, 216, 203, 233, 203, 233, 203, + 203, 203, 252, 277, 203, 1, 208, 209, + 203, 203, 203, 216, 203, 233, 203, 233, + 203, 276, 203, 252, 252, 203, 1, 208, + 209, 203, 203, 203, 216, 203, 233, 203, + 233, 3, 203, 203, 19, 234, 203, 1, + 208, 209, 203, 203, 203, 216, 203, 233, + 203, 226, 227, 232, 232, 6, 1, 208, + 209, 203, 203, 203, 230, 203, 203, 211, + 203, 226, 227, 228, 232, 6, 1, 208, + 209, 203, 203, 34, 230, 203, 203, 211, + 203, 224, 203, 278, 203, 261, 261, 6, + 1, 208, 209, 203, 203, 203, 216, 203, + 224, 203, 224, 203, 203, 203, 252, 252, + 203, 1, 208, 209, 203, 203, 203, 216, + 203, 224, 203, 224, 203, 203, 203, 252, + 279, 203, 1, 208, 209, 203, 203, 203, + 216, 203, 224, 203, 224, 203, 278, 203, + 252, 252, 203, 1, 208, 209, 203, 203, + 203, 216, 203, 224, 203, 224, 3, 203, + 203, 19, 225, 203, 1, 208, 209, 203, + 203, 203, 216, 203, 224, 203, 217, 218, + 223, 223, 6, 1, 208, 209, 203, 203, + 203, 221, 203, 203, 211, 203, 217, 218, + 219, 223, 6, 1, 208, 209, 203, 203, + 36, 221, 203, 203, 211, 203, 214, 203, + 280, 203, 261, 261, 6, 1, 208, 209, + 203, 203, 203, 216, 203, 214, 203, 214, + 203, 203, 203, 252, 252, 203, 1, 208, + 209, 203, 203, 203, 216, 203, 214, 203, + 214, 203, 203, 203, 252, 281, 203, 1, + 208, 209, 203, 203, 203, 216, 203, 214, + 203, 214, 203, 280, 203, 252, 252, 203, + 1, 208, 209, 203, 203, 203, 216, 203, + 214, 203, 214, 3, 203, 203, 19, 215, + 203, 1, 208, 209, 203, 203, 203, 216, + 203, 214, 203, 204, 205, 213, 213, 6, + 1, 208, 209, 203, 203, 203, 210, 203, + 203, 211, 203, 204, 205, 206, 213, 6, + 1, 208, 209, 203, 203, 38, 210, 203, + 203, 211, 203, 283, 284, 285, 286, 45, + 40, 287, 288, 282, 282, 77, 289, 282, + 282, 290, 282, 291, 284, 292, 286, 45, + 40, 287, 288, 282, 282, 282, 289, 282, + 282, 290, 282, 284, 292, 286, 45, 40, + 287, 288, 282, 282, 282, 289, 282, 282, + 290, 282, 293, 282, 282, 282, 58, 294, + 282, 40, 287, 288, 282, 282, 282, 295, + 282, 293, 282, 296, 297, 298, 299, 45, + 40, 287, 288, 282, 282, 75, 300, 282, + 282, 290, 282, 301, 297, 302, 302, 45, + 40, 287, 288, 282, 282, 282, 300, 282, + 282, 290, 282, 297, 302, 302, 45, 40, + 287, 288, 282, 282, 282, 300, 282, 282, + 290, 282, 303, 282, 282, 282, 58, 304, + 282, 40, 287, 288, 282, 282, 282, 295, + 282, 303, 282, 305, 306, 307, 308, 45, + 40, 287, 288, 282, 282, 73, 309, 282, + 282, 290, 282, 310, 306, 311, 311, 45, + 40, 287, 288, 282, 282, 282, 309, 282, + 282, 290, 282, 306, 311, 311, 45, 40, + 287, 288, 282, 282, 282, 309, 282, 282, + 290, 282, 312, 282, 282, 282, 58, 313, + 282, 40, 287, 288, 282, 282, 282, 295, + 282, 312, 282, 314, 315, 316, 317, 45, + 40, 287, 288, 282, 282, 71, 318, 282, + 282, 290, 282, 319, 315, 320, 320, 45, + 40, 287, 288, 282, 282, 282, 318, 282, + 282, 290, 282, 315, 320, 320, 45, 40, + 287, 288, 282, 282, 282, 318, 282, 282, + 290, 282, 321, 282, 282, 282, 58, 322, + 282, 40, 287, 288, 282, 282, 282, 295, + 282, 321, 282, 323, 324, 325, 326, 45, + 40, 287, 288, 282, 282, 69, 327, 282, + 282, 290, 282, 328, 324, 329, 329, 45, + 40, 287, 288, 282, 282, 282, 327, 282, + 282, 290, 282, 324, 329, 329, 45, 40, + 287, 288, 282, 282, 282, 327, 282, 282, + 290, 282, 58, 330, 282, 40, 287, 288, + 282, 282, 282, 295, 282, 331, 331, 282, + 40, 287, 288, 282, 282, 282, 295, 282, + 332, 282, 282, 333, 287, 288, 282, 287, + 288, 282, 334, 282, 287, 335, 282, 287, + 336, 282, 287, 282, 332, 282, 282, 282, + 287, 288, 282, 337, 282, 338, 339, 282, + 40, 287, 288, 282, 282, 43, 282, 42, + 282, 331, 331, 282, 40, 287, 288, 282, + 331, 331, 282, 40, 287, 288, 282, 337, + 282, 331, 331, 282, 40, 287, 288, 282, + 337, 282, 338, 331, 282, 40, 287, 288, + 282, 282, 43, 282, 58, 282, 340, 340, + 45, 40, 287, 288, 282, 282, 282, 295, + 282, 341, 67, 342, 343, 48, 40, 287, + 288, 282, 282, 282, 295, 282, 67, 342, + 343, 48, 40, 287, 288, 282, 282, 282, + 295, 282, 342, 342, 48, 40, 287, 288, + 282, 282, 282, 295, 282, 344, 64, 345, + 346, 51, 40, 287, 288, 282, 282, 282, + 295, 282, 64, 345, 346, 51, 40, 287, + 288, 282, 282, 282, 295, 282, 345, 345, + 51, 40, 287, 288, 282, 282, 282, 295, + 282, 347, 61, 348, 349, 54, 40, 287, + 288, 282, 282, 282, 295, 282, 61, 348, + 349, 54, 40, 287, 288, 282, 282, 282, + 295, 282, 348, 348, 54, 40, 287, 288, + 282, 282, 282, 295, 282, 350, 58, 331, + 351, 282, 40, 287, 288, 282, 282, 282, + 295, 282, 58, 331, 351, 282, 40, 287, + 288, 282, 282, 282, 295, 282, 331, 352, + 282, 40, 287, 288, 282, 282, 282, 295, + 282, 58, 282, 331, 331, 282, 40, 287, + 288, 282, 282, 282, 295, 282, 41, 42, + 282, 282, 58, 330, 282, 40, 287, 288, + 282, 282, 282, 295, 282, 41, 282, 324, + 329, 329, 45, 40, 287, 288, 282, 282, + 282, 327, 282, 323, 324, 329, 329, 45, + 40, 287, 288, 282, 282, 282, 327, 282, + 282, 290, 282, 323, 324, 325, 329, 45, + 40, 287, 288, 282, 282, 69, 327, 282, + 282, 290, 282, 321, 282, 353, 282, 340, + 340, 45, 40, 287, 288, 282, 282, 282, + 295, 282, 321, 282, 321, 282, 282, 282, + 331, 331, 282, 40, 287, 288, 282, 282, + 282, 295, 282, 321, 282, 321, 282, 282, + 282, 331, 354, 282, 40, 287, 288, 282, + 282, 282, 295, 282, 321, 282, 321, 282, + 353, 282, 331, 331, 282, 40, 287, 288, + 282, 282, 282, 295, 282, 321, 282, 321, + 42, 282, 282, 58, 322, 282, 40, 287, + 288, 282, 282, 282, 295, 282, 321, 282, + 314, 315, 320, 320, 45, 40, 287, 288, + 282, 282, 282, 318, 282, 282, 290, 282, + 314, 315, 316, 320, 45, 40, 287, 288, + 282, 282, 71, 318, 282, 282, 290, 282, + 312, 282, 355, 282, 340, 340, 45, 40, + 287, 288, 282, 282, 282, 295, 282, 312, + 282, 312, 282, 282, 282, 331, 331, 282, + 40, 287, 288, 282, 282, 282, 295, 282, + 312, 282, 312, 282, 282, 282, 331, 356, + 282, 40, 287, 288, 282, 282, 282, 295, + 282, 312, 282, 312, 282, 355, 282, 331, + 331, 282, 40, 287, 288, 282, 282, 282, + 295, 282, 312, 282, 312, 42, 282, 282, + 58, 313, 282, 40, 287, 288, 282, 282, + 282, 295, 282, 312, 282, 305, 306, 311, + 311, 45, 40, 287, 288, 282, 282, 282, + 309, 282, 282, 290, 282, 305, 306, 307, + 311, 45, 40, 287, 288, 282, 282, 73, + 309, 282, 282, 290, 282, 303, 282, 357, + 282, 340, 340, 45, 40, 287, 288, 282, + 282, 282, 295, 282, 303, 282, 303, 282, + 282, 282, 331, 331, 282, 40, 287, 288, + 282, 282, 282, 295, 282, 303, 282, 303, + 282, 282, 282, 331, 358, 282, 40, 287, + 288, 282, 282, 282, 295, 282, 303, 282, + 303, 282, 357, 282, 331, 331, 282, 40, + 287, 288, 282, 282, 282, 295, 282, 303, + 282, 303, 42, 282, 282, 58, 304, 282, + 40, 287, 288, 282, 282, 282, 295, 282, + 303, 282, 296, 297, 302, 302, 45, 40, + 287, 288, 282, 282, 282, 300, 282, 282, + 290, 282, 296, 297, 298, 302, 45, 40, + 287, 288, 282, 282, 75, 300, 282, 282, + 290, 282, 293, 282, 359, 282, 340, 340, + 45, 40, 287, 288, 282, 282, 282, 295, + 282, 293, 282, 293, 282, 282, 282, 331, + 331, 282, 40, 287, 288, 282, 282, 282, + 295, 282, 293, 282, 293, 282, 282, 282, + 331, 360, 282, 40, 287, 288, 282, 282, + 282, 295, 282, 293, 282, 293, 282, 359, + 282, 331, 331, 282, 40, 287, 288, 282, + 282, 282, 295, 282, 293, 282, 76, 44, + 44, 45, 40, 282, 282, 282, 282, 282, + 76, 282, 293, 42, 282, 282, 58, 294, + 282, 40, 287, 288, 282, 282, 282, 295, + 282, 293, 282, 283, 284, 292, 286, 45, + 40, 287, 288, 282, 282, 282, 289, 282, + 282, 290, 282, 362, 191, 363, 363, 84, + 79, 194, 195, 361, 361, 361, 197, 361, + 361, 200, 361, 191, 363, 363, 84, 79, + 194, 195, 361, 361, 361, 197, 361, 361, + 200, 361, 364, 361, 361, 361, 98, 365, + 361, 79, 194, 195, 361, 361, 361, 366, + 361, 364, 361, 367, 368, 369, 370, 84, + 79, 194, 195, 361, 361, 115, 371, 361, + 361, 200, 361, 372, 368, 373, 373, 84, + 79, 194, 195, 361, 361, 361, 371, 361, + 361, 200, 361, 368, 373, 373, 84, 79, + 194, 195, 361, 361, 361, 371, 361, 361, + 200, 361, 374, 361, 361, 361, 98, 375, + 361, 79, 194, 195, 361, 361, 361, 366, + 361, 374, 361, 376, 377, 378, 379, 84, + 79, 194, 195, 361, 361, 113, 380, 361, + 361, 200, 361, 381, 377, 382, 382, 84, + 79, 194, 195, 361, 361, 361, 380, 361, + 361, 200, 361, 377, 382, 382, 84, 79, + 194, 195, 361, 361, 361, 380, 361, 361, + 200, 361, 383, 361, 361, 361, 98, 384, + 361, 79, 194, 195, 361, 361, 361, 366, + 361, 383, 361, 385, 386, 387, 388, 84, + 79, 194, 195, 361, 361, 111, 389, 361, + 361, 200, 361, 390, 386, 391, 391, 84, + 79, 194, 195, 361, 361, 361, 389, 361, + 361, 200, 361, 386, 391, 391, 84, 79, + 194, 195, 361, 361, 361, 389, 361, 361, + 200, 361, 392, 361, 361, 361, 98, 393, + 361, 79, 194, 195, 361, 361, 361, 366, + 361, 392, 361, 394, 395, 396, 397, 84, + 79, 194, 195, 361, 361, 109, 398, 361, + 361, 200, 361, 399, 395, 400, 400, 84, + 79, 194, 195, 361, 361, 361, 398, 361, + 361, 200, 361, 395, 400, 400, 84, 79, + 194, 195, 361, 361, 361, 398, 361, 361, + 200, 361, 98, 401, 361, 79, 194, 195, + 361, 361, 361, 366, 361, 402, 402, 361, + 79, 194, 195, 361, 361, 361, 366, 361, + 403, 361, 361, 404, 194, 195, 361, 194, + 195, 361, 405, 361, 194, 406, 361, 194, + 407, 361, 194, 361, 403, 361, 361, 361, + 194, 195, 361, 408, 361, 409, 410, 361, + 79, 194, 195, 361, 361, 82, 361, 81, + 361, 402, 402, 361, 79, 194, 195, 361, + 402, 402, 361, 79, 194, 195, 361, 408, + 361, 402, 402, 361, 79, 194, 195, 361, + 408, 361, 409, 402, 361, 79, 194, 195, + 361, 361, 82, 361, 98, 361, 411, 411, + 84, 79, 194, 195, 361, 361, 361, 366, + 361, 412, 107, 413, 414, 88, 79, 194, + 195, 361, 361, 361, 366, 361, 107, 413, + 414, 88, 79, 194, 195, 361, 361, 361, + 366, 361, 413, 413, 88, 79, 194, 195, + 361, 361, 361, 366, 361, 415, 104, 416, + 417, 91, 79, 194, 195, 361, 361, 361, + 366, 361, 104, 416, 417, 91, 79, 194, + 195, 361, 361, 361, 366, 361, 416, 416, + 91, 79, 194, 195, 361, 361, 361, 366, + 361, 418, 101, 419, 420, 94, 79, 194, + 195, 361, 361, 361, 366, 361, 101, 419, + 420, 94, 79, 194, 195, 361, 361, 361, + 366, 361, 419, 419, 94, 79, 194, 195, + 361, 361, 361, 366, 361, 421, 98, 402, + 422, 361, 79, 194, 195, 361, 361, 361, + 366, 361, 98, 402, 422, 361, 79, 194, + 195, 361, 361, 361, 366, 361, 402, 423, + 361, 79, 194, 195, 361, 361, 361, 366, + 361, 98, 361, 402, 402, 361, 79, 194, + 195, 361, 361, 361, 366, 361, 80, 81, + 361, 361, 98, 401, 361, 79, 194, 195, + 361, 361, 361, 366, 361, 80, 361, 395, + 400, 400, 84, 79, 194, 195, 361, 361, + 361, 398, 361, 394, 395, 400, 400, 84, + 79, 194, 195, 361, 361, 361, 398, 361, + 361, 200, 361, 394, 395, 396, 400, 84, + 79, 194, 195, 361, 361, 109, 398, 361, + 361, 200, 361, 392, 361, 424, 361, 411, + 411, 84, 79, 194, 195, 361, 361, 361, + 366, 361, 392, 361, 392, 361, 361, 361, + 402, 402, 361, 79, 194, 195, 361, 361, + 361, 366, 361, 392, 361, 392, 361, 361, + 361, 402, 425, 361, 79, 194, 195, 361, + 361, 361, 366, 361, 392, 361, 392, 361, + 424, 361, 402, 402, 361, 79, 194, 195, + 361, 361, 361, 366, 361, 392, 361, 392, + 81, 361, 361, 98, 393, 361, 79, 194, + 195, 361, 361, 361, 366, 361, 392, 361, + 385, 386, 391, 391, 84, 79, 194, 195, + 361, 361, 361, 389, 361, 361, 200, 361, + 385, 386, 387, 391, 84, 79, 194, 195, + 361, 361, 111, 389, 361, 361, 200, 361, + 383, 361, 426, 361, 411, 411, 84, 79, + 194, 195, 361, 361, 361, 366, 361, 383, + 361, 383, 361, 361, 361, 402, 402, 361, + 79, 194, 195, 361, 361, 361, 366, 361, + 383, 361, 383, 361, 361, 361, 402, 427, + 361, 79, 194, 195, 361, 361, 361, 366, + 361, 383, 361, 383, 361, 426, 361, 402, + 402, 361, 79, 194, 195, 361, 361, 361, + 366, 361, 383, 361, 383, 81, 361, 361, + 98, 384, 361, 79, 194, 195, 361, 361, + 361, 366, 361, 383, 361, 376, 377, 382, + 382, 84, 79, 194, 195, 361, 361, 361, + 380, 361, 361, 200, 361, 376, 377, 378, + 382, 84, 79, 194, 195, 361, 361, 113, + 380, 361, 361, 200, 361, 374, 361, 428, + 361, 411, 411, 84, 79, 194, 195, 361, + 361, 361, 366, 361, 374, 361, 374, 361, + 361, 361, 402, 402, 361, 79, 194, 195, + 361, 361, 361, 366, 361, 374, 361, 374, + 361, 361, 361, 402, 429, 361, 79, 194, + 195, 361, 361, 361, 366, 361, 374, 361, + 374, 361, 428, 361, 402, 402, 361, 79, + 194, 195, 361, 361, 361, 366, 361, 374, + 361, 374, 81, 361, 361, 98, 375, 361, + 79, 194, 195, 361, 361, 361, 366, 361, + 374, 361, 367, 368, 373, 373, 84, 79, + 194, 195, 361, 361, 361, 371, 361, 361, + 200, 361, 367, 368, 369, 373, 84, 79, + 194, 195, 361, 361, 115, 371, 361, 361, + 200, 361, 364, 361, 430, 361, 411, 411, + 84, 79, 194, 195, 361, 361, 361, 366, + 361, 364, 361, 364, 361, 361, 361, 402, + 402, 361, 79, 194, 195, 361, 361, 361, + 366, 361, 364, 361, 364, 361, 361, 361, + 402, 431, 361, 79, 194, 195, 361, 361, + 361, 366, 361, 364, 361, 364, 361, 430, + 361, 402, 402, 361, 79, 194, 195, 361, + 361, 361, 366, 361, 364, 361, 364, 81, + 361, 361, 98, 365, 361, 79, 194, 195, + 361, 361, 361, 366, 361, 364, 361, 116, + 83, 83, 84, 79, 432, 432, 432, 432, + 156, 116, 432, 190, 191, 363, 363, 84, + 79, 194, 195, 361, 361, 361, 197, 361, + 361, 200, 361, 116, 83, 83, 84, 79, + 432, 432, 432, 432, 432, 116, 432, 434, + 435, 436, 437, 123, 118, 438, 439, 433, + 433, 155, 440, 433, 433, 441, 433, 442, + 435, 437, 437, 123, 118, 438, 439, 433, + 433, 433, 440, 433, 433, 441, 433, 435, + 437, 437, 123, 118, 438, 439, 433, 433, + 433, 440, 433, 433, 441, 433, 443, 433, + 433, 433, 136, 444, 433, 118, 438, 439, + 433, 433, 433, 445, 433, 443, 433, 446, + 447, 448, 449, 123, 118, 438, 439, 433, + 433, 153, 450, 433, 433, 441, 433, 451, + 447, 452, 452, 123, 118, 438, 439, 433, + 433, 433, 450, 433, 433, 441, 433, 447, + 452, 452, 123, 118, 438, 439, 433, 433, + 433, 450, 433, 433, 441, 433, 453, 433, + 433, 433, 136, 454, 433, 118, 438, 439, + 433, 433, 433, 445, 433, 453, 433, 455, + 456, 457, 458, 123, 118, 438, 439, 433, + 433, 151, 459, 433, 433, 441, 433, 460, + 456, 461, 461, 123, 118, 438, 439, 433, + 433, 433, 459, 433, 433, 441, 433, 456, + 461, 461, 123, 118, 438, 439, 433, 433, + 433, 459, 433, 433, 441, 433, 462, 433, + 433, 433, 136, 463, 433, 118, 438, 439, + 433, 433, 433, 445, 433, 462, 433, 464, + 465, 466, 467, 123, 118, 438, 439, 433, + 433, 149, 468, 433, 433, 441, 433, 469, + 465, 470, 470, 123, 118, 438, 439, 433, + 433, 433, 468, 433, 433, 441, 433, 465, + 470, 470, 123, 118, 438, 439, 433, 433, + 433, 468, 433, 433, 441, 433, 471, 433, + 433, 433, 136, 472, 433, 118, 438, 439, + 433, 433, 433, 445, 433, 471, 433, 473, + 474, 475, 476, 123, 118, 438, 439, 433, + 433, 147, 477, 433, 433, 441, 433, 478, + 474, 479, 479, 123, 118, 438, 439, 433, + 433, 433, 477, 433, 433, 441, 433, 474, + 479, 479, 123, 118, 438, 439, 433, 433, + 433, 477, 433, 433, 441, 433, 136, 480, + 433, 118, 438, 439, 433, 433, 433, 445, + 433, 481, 481, 433, 118, 438, 439, 433, + 433, 433, 445, 433, 482, 433, 433, 483, + 438, 439, 433, 438, 439, 433, 484, 433, + 438, 485, 433, 438, 486, 433, 438, 433, + 482, 433, 433, 433, 438, 439, 433, 487, + 433, 488, 489, 433, 118, 438, 439, 433, + 433, 121, 433, 120, 433, 481, 481, 433, + 118, 438, 439, 433, 481, 481, 433, 118, + 438, 439, 433, 487, 433, 481, 481, 433, + 118, 438, 439, 433, 487, 433, 488, 481, + 433, 118, 438, 439, 433, 433, 121, 433, + 136, 433, 490, 490, 123, 118, 438, 439, + 433, 433, 433, 445, 433, 491, 145, 492, + 493, 126, 118, 438, 439, 433, 433, 433, + 445, 433, 145, 492, 493, 126, 118, 438, + 439, 433, 433, 433, 445, 433, 492, 492, + 126, 118, 438, 439, 433, 433, 433, 445, + 433, 494, 142, 495, 496, 129, 118, 438, + 439, 433, 433, 433, 445, 433, 142, 495, + 496, 129, 118, 438, 439, 433, 433, 433, + 445, 433, 495, 495, 129, 118, 438, 439, + 433, 433, 433, 445, 433, 497, 139, 498, + 499, 132, 118, 438, 439, 433, 433, 433, + 445, 433, 139, 498, 499, 132, 118, 438, + 439, 433, 433, 433, 445, 433, 498, 498, + 132, 118, 438, 439, 433, 433, 433, 445, + 433, 500, 136, 481, 501, 433, 118, 438, + 439, 433, 433, 433, 445, 433, 136, 481, + 501, 433, 118, 438, 439, 433, 433, 433, + 445, 433, 481, 502, 433, 118, 438, 439, + 433, 433, 433, 445, 433, 136, 433, 481, + 481, 433, 118, 438, 439, 433, 433, 433, + 445, 433, 119, 120, 433, 433, 136, 480, + 433, 118, 438, 439, 433, 433, 433, 445, + 433, 119, 433, 474, 479, 479, 123, 118, + 438, 439, 433, 433, 433, 477, 433, 473, + 474, 479, 479, 123, 118, 438, 439, 433, + 433, 433, 477, 433, 433, 441, 433, 473, + 474, 475, 479, 123, 118, 438, 439, 433, + 433, 147, 477, 433, 433, 441, 433, 471, + 433, 503, 433, 490, 490, 123, 118, 438, + 439, 433, 433, 433, 445, 433, 471, 433, + 471, 433, 433, 433, 481, 481, 433, 118, + 438, 439, 433, 433, 433, 445, 433, 471, + 433, 471, 433, 433, 433, 481, 504, 433, + 118, 438, 439, 433, 433, 433, 445, 433, + 471, 433, 471, 433, 503, 433, 481, 481, + 433, 118, 438, 439, 433, 433, 433, 445, + 433, 471, 433, 471, 120, 433, 433, 136, + 472, 433, 118, 438, 439, 433, 433, 433, + 445, 433, 471, 433, 464, 465, 470, 470, + 123, 118, 438, 439, 433, 433, 433, 468, + 433, 433, 441, 433, 464, 465, 466, 470, + 123, 118, 438, 439, 433, 433, 149, 468, + 433, 433, 441, 433, 462, 433, 505, 433, + 490, 490, 123, 118, 438, 439, 433, 433, + 433, 445, 433, 462, 433, 462, 433, 433, + 433, 481, 481, 433, 118, 438, 439, 433, + 433, 433, 445, 433, 462, 433, 462, 433, + 433, 433, 481, 506, 433, 118, 438, 439, + 433, 433, 433, 445, 433, 462, 433, 462, + 433, 505, 433, 481, 481, 433, 118, 438, + 439, 433, 433, 433, 445, 433, 462, 433, + 462, 120, 433, 433, 136, 463, 433, 118, + 438, 439, 433, 433, 433, 445, 433, 462, + 433, 455, 456, 461, 461, 123, 118, 438, + 439, 433, 433, 433, 459, 433, 433, 441, + 433, 455, 456, 457, 461, 123, 118, 438, + 439, 433, 433, 151, 459, 433, 433, 441, + 433, 453, 433, 507, 433, 490, 490, 123, + 118, 438, 439, 433, 433, 433, 445, 433, + 453, 433, 453, 433, 433, 433, 481, 481, + 433, 118, 438, 439, 433, 433, 433, 445, + 433, 453, 433, 453, 433, 433, 433, 481, + 508, 433, 118, 438, 439, 433, 433, 433, + 445, 433, 453, 433, 453, 433, 507, 433, + 481, 481, 433, 118, 438, 439, 433, 433, + 433, 445, 433, 453, 433, 453, 120, 433, + 433, 136, 454, 433, 118, 438, 439, 433, + 433, 433, 445, 433, 453, 433, 446, 447, + 452, 452, 123, 118, 438, 439, 433, 433, + 433, 450, 433, 433, 441, 433, 446, 447, + 448, 452, 123, 118, 438, 439, 433, 433, + 153, 450, 433, 433, 441, 433, 443, 433, + 509, 433, 490, 490, 123, 118, 438, 439, + 433, 433, 433, 445, 433, 443, 433, 443, + 433, 433, 433, 481, 481, 433, 118, 438, + 439, 433, 433, 433, 445, 433, 443, 433, + 443, 433, 433, 433, 481, 510, 433, 118, + 438, 439, 433, 433, 433, 445, 433, 443, + 433, 443, 433, 509, 433, 481, 481, 433, + 118, 438, 439, 433, 433, 433, 445, 433, + 443, 433, 443, 120, 433, 433, 136, 444, + 433, 118, 438, 439, 433, 433, 433, 445, + 433, 443, 433, 434, 435, 437, 437, 123, + 118, 438, 439, 433, 433, 433, 440, 433, + 433, 441, 433, 188, 189, 190, 191, 511, + 363, 84, 79, 194, 195, 196, 196, 156, + 197, 361, 188, 200, 361, 204, 512, 206, + 207, 6, 1, 208, 209, 203, 203, 38, + 210, 203, 203, 211, 203, 214, 189, 190, + 191, 513, 514, 84, 157, 515, 516, 203, + 196, 156, 517, 203, 214, 200, 203, 116, + 518, 518, 84, 157, 208, 209, 203, 203, + 156, 519, 203, 520, 203, 203, 521, 515, + 516, 203, 515, 516, 203, 255, 203, 515, + 522, 203, 515, 523, 203, 515, 203, 520, + 203, 203, 203, 515, 516, 203, 524, 3, + 361, 361, 402, 431, 361, 79, 194, 195, + 361, 361, 361, 366, 361, 524, 361, 525, + 368, 526, 527, 84, 157, 515, 516, 203, + 203, 158, 371, 203, 203, 200, 203, 528, + 368, 529, 529, 84, 157, 515, 516, 203, + 203, 203, 371, 203, 203, 200, 203, 368, + 529, 529, 84, 157, 515, 516, 203, 203, + 203, 371, 203, 203, 200, 203, 525, 368, + 529, 529, 84, 157, 515, 516, 203, 203, + 203, 371, 203, 203, 200, 203, 525, 368, + 526, 529, 84, 157, 515, 516, 203, 203, + 158, 371, 203, 203, 200, 203, 214, 203, + 280, 116, 530, 530, 160, 157, 208, 209, + 203, 203, 203, 519, 203, 214, 203, 531, + 184, 532, 533, 162, 157, 515, 516, 203, + 203, 203, 534, 203, 184, 532, 533, 162, + 157, 515, 516, 203, 203, 203, 534, 203, + 532, 532, 162, 157, 515, 516, 203, 203, + 203, 534, 203, 535, 181, 536, 537, 165, + 157, 515, 516, 203, 203, 203, 534, 203, + 181, 536, 537, 165, 157, 515, 516, 203, + 203, 203, 534, 203, 536, 536, 165, 157, + 515, 516, 203, 203, 203, 534, 203, 538, + 178, 539, 540, 168, 157, 515, 516, 203, + 203, 203, 534, 203, 178, 539, 540, 168, + 157, 515, 516, 203, 203, 203, 534, 203, + 539, 539, 168, 157, 515, 516, 203, 203, + 203, 534, 203, 541, 175, 542, 543, 203, + 157, 515, 516, 203, 203, 203, 534, 203, + 175, 542, 543, 203, 157, 515, 516, 203, + 203, 203, 534, 203, 542, 542, 203, 157, + 515, 516, 203, 203, 203, 534, 203, 544, + 203, 545, 546, 203, 157, 515, 516, 203, + 203, 172, 203, 171, 203, 542, 542, 203, + 157, 515, 516, 203, 542, 542, 203, 157, + 515, 516, 203, 544, 203, 542, 542, 203, + 157, 515, 516, 203, 544, 203, 545, 542, + 203, 157, 515, 516, 203, 203, 172, 203, + 524, 171, 361, 361, 98, 365, 361, 79, + 194, 195, 361, 361, 361, 366, 361, 524, + 361, 548, 547, 549, 549, 547, 186, 550, + 551, 547, 549, 549, 547, 186, 550, 551, + 547, 552, 547, 547, 553, 550, 551, 547, + 550, 551, 547, 554, 547, 550, 555, 547, + 550, 556, 547, 550, 547, 552, 547, 547, + 547, 550, 551, 547, 188, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 196, 432, + 432, 432, 432, 188, 432, 0 }; static const short _indic_syllable_machine_trans_targs[] = { @@ -1014,51 +1016,51 @@ static const short _indic_syllable_machine_trans_targs[] = { 169, 170, 520, 172, 173, 517, 175, 176, 514, 178, 532, 178, 179, 258, 337, 339, 413, 415, 359, 360, 416, 412, 494, 495, - 384, 530, 178, 180, 182, 36, 257, 202, - 203, 255, 227, 181, 35, 183, 251, 1, - 184, 186, 34, 250, 248, 185, 33, 187, - 244, 188, 190, 32, 243, 241, 189, 31, - 191, 237, 192, 194, 30, 236, 234, 193, - 29, 195, 230, 196, 198, 28, 229, 226, - 197, 27, 212, 0, 201, 206, 178, 204, - 205, 208, 2, 211, 3, 214, 6, 24, - 217, 9, 21, 220, 12, 18, 223, 15, - 225, 231, 233, 238, 240, 245, 247, 252, - 254, 178, 259, 261, 73, 334, 281, 282, - 335, 306, 260, 72, 262, 330, 38, 263, - 265, 71, 329, 327, 264, 70, 266, 323, - 267, 269, 69, 322, 320, 268, 68, 270, - 316, 271, 273, 67, 315, 313, 272, 66, - 274, 309, 275, 277, 65, 308, 305, 276, - 64, 291, 37, 280, 285, 178, 283, 284, - 287, 39, 290, 40, 293, 43, 61, 296, - 46, 58, 299, 49, 55, 302, 52, 304, - 310, 312, 317, 319, 324, 326, 331, 333, - 178, 338, 109, 340, 408, 75, 341, 343, - 108, 407, 405, 342, 107, 344, 401, 345, - 347, 106, 400, 398, 346, 105, 348, 394, - 349, 351, 104, 393, 391, 350, 103, 352, - 387, 353, 355, 102, 386, 383, 354, 101, - 369, 74, 358, 363, 178, 361, 362, 365, - 76, 368, 77, 371, 80, 98, 374, 83, - 95, 377, 86, 92, 380, 89, 382, 388, - 390, 395, 397, 402, 404, 409, 411, 178, - 178, 417, 419, 146, 145, 439, 440, 492, - 464, 418, 420, 488, 111, 421, 423, 144, - 487, 485, 422, 143, 424, 481, 425, 427, - 142, 480, 478, 426, 141, 428, 474, 429, - 431, 140, 473, 471, 430, 139, 432, 467, - 433, 435, 138, 466, 463, 434, 137, 449, - 110, 438, 443, 178, 441, 442, 445, 112, - 448, 113, 451, 116, 134, 454, 119, 131, - 457, 122, 128, 460, 125, 462, 468, 470, - 475, 477, 482, 484, 489, 491, 147, 496, - 497, 511, 500, 501, 529, 148, 505, 499, - 504, 502, 503, 506, 507, 150, 510, 508, - 149, 151, 513, 153, 174, 163, 516, 156, - 171, 519, 159, 168, 522, 162, 165, 525, - 164, 528, 178, 531, 177, 534, 535, 533, - 538, 178, 536, 537 + 384, 530, 539, 178, 180, 182, 36, 257, + 202, 203, 255, 227, 181, 35, 183, 251, + 1, 184, 186, 34, 250, 248, 185, 33, + 187, 244, 188, 190, 32, 243, 241, 189, + 31, 191, 237, 192, 194, 30, 236, 234, + 193, 29, 195, 230, 196, 198, 28, 229, + 226, 197, 27, 212, 0, 201, 206, 178, + 204, 205, 208, 2, 211, 3, 214, 6, + 24, 217, 9, 21, 220, 12, 18, 223, + 15, 225, 231, 233, 238, 240, 245, 247, + 252, 254, 178, 259, 261, 73, 334, 281, + 282, 335, 306, 260, 72, 262, 330, 38, + 263, 265, 71, 329, 327, 264, 70, 266, + 323, 267, 269, 69, 322, 320, 268, 68, + 270, 316, 271, 273, 67, 315, 313, 272, + 66, 274, 309, 275, 277, 65, 308, 305, + 276, 64, 291, 37, 280, 285, 178, 283, + 284, 287, 39, 290, 40, 293, 43, 61, + 296, 46, 58, 299, 49, 55, 302, 52, + 304, 310, 312, 317, 319, 324, 326, 331, + 333, 178, 338, 109, 340, 408, 75, 341, + 343, 108, 407, 405, 342, 107, 344, 401, + 345, 347, 106, 400, 398, 346, 105, 348, + 394, 349, 351, 104, 393, 391, 350, 103, + 352, 387, 353, 355, 102, 386, 383, 354, + 101, 369, 74, 358, 363, 178, 361, 362, + 365, 76, 368, 77, 371, 80, 98, 374, + 83, 95, 377, 86, 92, 380, 89, 382, + 388, 390, 395, 397, 402, 404, 409, 411, + 178, 178, 417, 419, 146, 145, 439, 440, + 492, 464, 418, 420, 488, 111, 421, 423, + 144, 487, 485, 422, 143, 424, 481, 425, + 427, 142, 480, 478, 426, 141, 428, 474, + 429, 431, 140, 473, 471, 430, 139, 432, + 467, 433, 435, 138, 466, 463, 434, 137, + 449, 110, 438, 443, 178, 441, 442, 445, + 112, 448, 113, 451, 116, 134, 454, 119, + 131, 457, 122, 128, 460, 125, 462, 468, + 470, 475, 477, 482, 484, 489, 491, 147, + 496, 497, 511, 500, 501, 529, 148, 505, + 499, 504, 502, 503, 506, 507, 150, 510, + 508, 149, 151, 513, 153, 174, 163, 516, + 156, 171, 519, 159, 168, 522, 162, 165, + 525, 164, 528, 178, 531, 177, 534, 535, + 533, 538, 178, 536, 537 }; static const char _indic_syllable_machine_trans_actions[] = { @@ -1087,51 +1089,51 @@ static const char _indic_syllable_machine_trans_actions[] = { 0, 0, 2, 0, 0, 2, 0, 0, 2, 9, 0, 12, 2, 2, 6, 2, 13, 13, 0, 0, 2, 2, 6, 2, - 6, 2, 14, 2, 2, 0, 2, 0, + 6, 2, 0, 14, 2, 2, 0, 2, + 0, 0, 2, 2, 2, 0, 2, 2, + 0, 2, 2, 0, 2, 2, 2, 0, + 2, 2, 2, 2, 0, 2, 2, 2, + 0, 2, 2, 2, 2, 0, 2, 2, + 2, 0, 2, 2, 2, 2, 0, 2, + 2, 2, 0, 2, 0, 0, 0, 15, + 0, 0, 2, 0, 2, 0, 2, 0, + 0, 2, 0, 0, 2, 0, 0, 2, + 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 16, 2, 2, 0, 2, 0, 0, 2, 2, 2, 0, 2, 2, 0, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, - 2, 0, 2, 0, 0, 0, 15, 0, + 2, 0, 2, 0, 0, 0, 17, 0, 0, 2, 0, 2, 0, 2, 0, 0, 2, 0, 0, 2, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 16, 2, 2, 0, 2, 0, 0, - 2, 2, 2, 0, 2, 2, 0, 2, - 2, 0, 2, 2, 2, 0, 2, 2, - 2, 2, 0, 2, 2, 2, 0, 2, - 2, 2, 2, 0, 2, 2, 2, 0, - 2, 2, 2, 2, 0, 2, 2, 2, - 0, 2, 0, 0, 0, 17, 0, 0, - 2, 0, 2, 0, 2, 0, 0, 2, - 0, 0, 2, 0, 0, 2, 0, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 18, 6, 0, 6, 6, 0, 6, 2, - 0, 6, 2, 6, 0, 6, 6, 6, + 2, 18, 6, 0, 6, 6, 0, 6, 2, 0, 6, 2, 6, 0, 6, 6, 6, 2, 0, 6, 2, 6, 0, 6, 6, 6, 2, 0, 6, 2, 6, 0, - 6, 0, 0, 0, 19, 0, 0, 2, - 0, 2, 0, 2, 0, 0, 2, 0, - 0, 2, 0, 0, 2, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 20, - 21, 2, 2, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 0, 2, 2, 0, - 2, 2, 2, 0, 2, 2, 2, 2, + 6, 6, 6, 2, 0, 6, 2, 6, + 0, 6, 0, 0, 0, 19, 0, 0, + 2, 0, 2, 0, 2, 0, 0, 2, + 0, 0, 2, 0, 0, 2, 0, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 20, 21, 2, 2, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, - 0, 0, 0, 22, 0, 0, 2, 0, - 2, 0, 2, 0, 0, 2, 0, 0, - 2, 0, 0, 2, 0, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, - 8, 2, 0, 0, 2, 0, 2, 0, - 0, 0, 0, 8, 8, 0, 8, 8, - 0, 0, 2, 0, 0, 0, 2, 0, - 0, 2, 0, 0, 2, 0, 0, 2, - 0, 2, 23, 2, 0, 0, 0, 0, - 0, 24, 0, 0 + 2, 2, 2, 0, 2, 2, 2, 0, + 2, 0, 0, 0, 22, 0, 0, 2, + 0, 2, 0, 2, 0, 0, 2, 0, + 0, 2, 0, 0, 2, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, + 0, 8, 2, 0, 0, 2, 0, 2, + 0, 0, 0, 0, 8, 8, 0, 8, + 8, 0, 0, 2, 0, 0, 0, 2, + 0, 0, 2, 0, 0, 2, 0, 0, + 2, 0, 2, 23, 2, 0, 0, 0, + 0, 0, 24, 0, 0 }; static const char _indic_syllable_machine_to_state_actions[] = { @@ -1202,7 +1204,7 @@ static const char _indic_syllable_machine_to_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0 + 0, 0, 0, 0 }; static const char _indic_syllable_machine_from_state_actions[] = { @@ -1273,7 +1275,7 @@ static const char _indic_syllable_machine_from_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0 + 0, 0, 0, 0 }; static const short _indic_syllable_machine_eof_trans[] = { @@ -1299,52 +1301,52 @@ static const short _indic_syllable_machine_eof_trans[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 186, 0, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 432, 361, 432, - 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 361, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 361, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 361, 547, 547, 547, 547, 547, 547, - 547, 547, 547 + 1, 186, 0, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, + 283, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 433, 362, 433, + 434, 434, 434, 434, 434, 434, 434, 434, + 434, 434, 434, 434, 434, 434, 434, 434, + 434, 434, 434, 434, 434, 434, 434, 434, + 434, 434, 434, 434, 434, 434, 434, 434, + 434, 434, 434, 434, 434, 434, 434, 434, + 434, 434, 434, 434, 434, 434, 434, 434, + 434, 434, 434, 434, 434, 434, 434, 434, + 434, 434, 434, 434, 434, 434, 434, 434, + 434, 434, 434, 434, 434, 434, 434, 434, + 434, 434, 434, 434, 434, 434, 362, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 362, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, + 204, 362, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 433 }; static const int indic_syllable_machine_start = 178; @@ -1358,7 +1360,7 @@ static const int indic_syllable_machine_en_main = 178; -#line 96 "hb-ot-shape-complex-indic-machine.rl" +#line 97 "hb-ot-shape-complex-indic-machine.rl" #define found_syllable(syllable_type) \ @@ -1378,7 +1380,7 @@ find_syllables (hb_buffer_t *buffer) int cs; hb_glyph_info_t *info = buffer->info; -#line 1382 "hb-ot-shape-complex-indic-machine.hh" +#line 1384 "hb-ot-shape-complex-indic-machine.hh" { cs = indic_syllable_machine_start; ts = 0; @@ -1386,7 +1388,7 @@ find_syllables (hb_buffer_t *buffer) act = 0; } -#line 117 "hb-ot-shape-complex-indic-machine.rl" +#line 118 "hb-ot-shape-complex-indic-machine.rl" p = 0; @@ -1395,7 +1397,7 @@ find_syllables (hb_buffer_t *buffer) unsigned int last = 0; unsigned int syllable_serial = 1; -#line 1399 "hb-ot-shape-complex-indic-machine.hh" +#line 1401 "hb-ot-shape-complex-indic-machine.hh" { int _slen; int _trans; @@ -1409,7 +1411,7 @@ _resume: #line 1 "NONE" {ts = p;} break; -#line 1413 "hb-ot-shape-complex-indic-machine.hh" +#line 1415 "hb-ot-shape-complex-indic-machine.hh" } _keys = _indic_syllable_machine_trans_keys + (cs<<1); @@ -1432,71 +1434,71 @@ _eof_trans: {te = p+1;} break; case 15: -#line 87 "hb-ot-shape-complex-indic-machine.rl" +#line 88 "hb-ot-shape-complex-indic-machine.rl" {te = p+1;{ found_syllable (consonant_syllable); }} break; case 17: -#line 88 "hb-ot-shape-complex-indic-machine.rl" +#line 89 "hb-ot-shape-complex-indic-machine.rl" {te = p+1;{ found_syllable (vowel_syllable); }} break; case 22: -#line 89 "hb-ot-shape-complex-indic-machine.rl" +#line 90 "hb-ot-shape-complex-indic-machine.rl" {te = p+1;{ found_syllable (standalone_cluster); }} break; case 24: -#line 90 "hb-ot-shape-complex-indic-machine.rl" +#line 91 "hb-ot-shape-complex-indic-machine.rl" {te = p+1;{ found_syllable (symbol_cluster); }} break; case 19: -#line 91 "hb-ot-shape-complex-indic-machine.rl" +#line 92 "hb-ot-shape-complex-indic-machine.rl" {te = p+1;{ found_syllable (broken_cluster); }} break; case 12: -#line 92 "hb-ot-shape-complex-indic-machine.rl" +#line 93 "hb-ot-shape-complex-indic-machine.rl" {te = p+1;{ found_syllable (non_indic_cluster); }} break; case 14: -#line 87 "hb-ot-shape-complex-indic-machine.rl" +#line 88 "hb-ot-shape-complex-indic-machine.rl" {te = p;p--;{ found_syllable (consonant_syllable); }} break; case 16: -#line 88 "hb-ot-shape-complex-indic-machine.rl" +#line 89 "hb-ot-shape-complex-indic-machine.rl" {te = p;p--;{ found_syllable (vowel_syllable); }} break; case 21: -#line 89 "hb-ot-shape-complex-indic-machine.rl" +#line 90 "hb-ot-shape-complex-indic-machine.rl" {te = p;p--;{ found_syllable (standalone_cluster); }} break; case 23: -#line 90 "hb-ot-shape-complex-indic-machine.rl" +#line 91 "hb-ot-shape-complex-indic-machine.rl" {te = p;p--;{ found_syllable (symbol_cluster); }} break; case 18: -#line 91 "hb-ot-shape-complex-indic-machine.rl" +#line 92 "hb-ot-shape-complex-indic-machine.rl" {te = p;p--;{ found_syllable (broken_cluster); }} break; case 20: -#line 92 "hb-ot-shape-complex-indic-machine.rl" +#line 93 "hb-ot-shape-complex-indic-machine.rl" {te = p;p--;{ found_syllable (non_indic_cluster); }} break; case 1: -#line 87 "hb-ot-shape-complex-indic-machine.rl" +#line 88 "hb-ot-shape-complex-indic-machine.rl" {{p = ((te))-1;}{ found_syllable (consonant_syllable); }} break; case 3: -#line 88 "hb-ot-shape-complex-indic-machine.rl" +#line 89 "hb-ot-shape-complex-indic-machine.rl" {{p = ((te))-1;}{ found_syllable (vowel_syllable); }} break; case 7: -#line 89 "hb-ot-shape-complex-indic-machine.rl" +#line 90 "hb-ot-shape-complex-indic-machine.rl" {{p = ((te))-1;}{ found_syllable (standalone_cluster); }} break; case 9: -#line 90 "hb-ot-shape-complex-indic-machine.rl" +#line 91 "hb-ot-shape-complex-indic-machine.rl" {{p = ((te))-1;}{ found_syllable (symbol_cluster); }} break; case 4: -#line 91 "hb-ot-shape-complex-indic-machine.rl" +#line 92 "hb-ot-shape-complex-indic-machine.rl" {{p = ((te))-1;}{ found_syllable (broken_cluster); }} break; case 5: @@ -1517,22 +1519,22 @@ _eof_trans: case 8: #line 1 "NONE" {te = p+1;} -#line 87 "hb-ot-shape-complex-indic-machine.rl" +#line 88 "hb-ot-shape-complex-indic-machine.rl" {act = 1;} break; case 6: #line 1 "NONE" {te = p+1;} -#line 91 "hb-ot-shape-complex-indic-machine.rl" +#line 92 "hb-ot-shape-complex-indic-machine.rl" {act = 5;} break; case 13: #line 1 "NONE" {te = p+1;} -#line 92 "hb-ot-shape-complex-indic-machine.rl" +#line 93 "hb-ot-shape-complex-indic-machine.rl" {act = 6;} break; -#line 1536 "hb-ot-shape-complex-indic-machine.hh" +#line 1538 "hb-ot-shape-complex-indic-machine.hh" } _again: @@ -1541,7 +1543,7 @@ _again: #line 1 "NONE" {ts = 0;} break; -#line 1545 "hb-ot-shape-complex-indic-machine.hh" +#line 1547 "hb-ot-shape-complex-indic-machine.hh" } if ( ++p != pe ) @@ -1557,7 +1559,7 @@ _again: } -#line 126 "hb-ot-shape-complex-indic-machine.rl" +#line 127 "hb-ot-shape-complex-indic-machine.rl" } diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl index 86a7ceb22ac..58d35c0016c 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl @@ -57,6 +57,7 @@ Repha = 15; Ra = 16; CM = 17; Symbol= 18; +CS = 19; c = (C | Ra); # is_consonant n = ((ZWNJ?.RS)? (N.N?)?); # is_consonant_modifier @@ -76,9 +77,9 @@ medial_group = CM?; halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4}) (Coeng (cn|V))?; -consonant_syllable = Repha? (cn.halant_group){0,4} cn medial_group halant_or_matra_group syllable_tail; +consonant_syllable = (Repha|CS)? (cn.halant_group){0,4} cn medial_group halant_or_matra_group syllable_tail; vowel_syllable = reph? V.n? (ZWJ | (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail); -standalone_cluster = (Repha? PLACEHOLDER | reph? DOTTEDCIRCLE).n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail; +standalone_cluster = ((Repha|CS)? PLACEHOLDER | reph? DOTTEDCIRCLE).n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail; symbol_cluster = symbol syllable_tail; broken_cluster = reph? n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail; other = any; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh index c880311ee4c..8fe2509ef21 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh @@ -60,7 +60,8 @@ enum indic_category_t { OT_Repha = 15, /* Atomically-encoded logical or visual repha. */ OT_Ra = 16, OT_CM = 17, /* Consonant-Medial. */ - OT_Symbol = 18 /* Avagraha, etc that take marks (SM,A,VD). */ + OT_Symbol = 18, /* Avagraha, etc that take marks (SM,A,VD). */ + OT_CS = 19 }; #define MEDIAL_FLAGS (FLAG (OT_CM)) @@ -70,7 +71,7 @@ enum indic_category_t { * We treat Vowels and placeholders as if they were consonants. This is safe because Vowels * cannot happen in a consonant syllable. The plus side however is, we can call the * consonant syllable logic from the vowel syllable function and get it all right! */ -#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_Ra) | MEDIAL_FLAGS | FLAG (OT_V) | FLAG (OT_PLACEHOLDER) | FLAG (OT_DOTTEDCIRCLE)) +#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_CS) | FLAG (OT_Ra) | MEDIAL_FLAGS | FLAG (OT_V) | FLAG (OT_PLACEHOLDER) | FLAG (OT_DOTTEDCIRCLE)) #define JOINER_FLAGS (FLAG (OT_ZWJ) | FLAG (OT_ZWNJ)) #define HALANT_OR_COENG_FLAGS (FLAG (OT_H) | FLAG (OT_Coeng)) @@ -121,8 +122,8 @@ enum indic_syllabic_category_t { INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED = OT_X, /* Don't care. */ INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED = OT_CM, INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA = OT_N, - INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER = OT_C, - INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK = OT_SM, + INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER = OT_CS, + INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK = OT_SM, /* https://github.com/behdad/harfbuzz/issues/552 */ INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER = OT_Coeng, INDIC_SYLLABIC_CATEGORY_JOINER = OT_ZWJ, INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER = OT_X, diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc index 3bf5285e6bb..bfd1c6d3429 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc @@ -6,61 +6,62 @@ * * on files with these headers: * - * # IndicSyllabicCategory-9.0.0.txt - * # Date: 2016-05-21, 02:46:00 GMT [RP] - * # IndicPositionalCategory-9.0.0.txt - * # Date: 2016-02-25, 00:48:00 GMT [RP] - * # Blocks-9.0.0.txt - * # Date: 2016-02-05, 23:48:00 GMT [KW] + * # IndicSyllabicCategory-10.0.0.txt + * # Date: 2017-05-31, 01:07:00 GMT [KW, RP] + * # IndicPositionalCategory-10.0.0.txt + * # Date: 2017-05-31, 01:07:00 GMT [RP] + * # Blocks-10.0.0.txt + * # Date: 2017-04-12, 17:30:00 GMT [KW] */ #include "hb-ot-shape-complex-indic-private.hh" #define ISC_A INDIC_SYLLABIC_CATEGORY_AVAGRAHA /* 15 chars; Avagraha */ -#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU /* 67 chars; Bindu */ +#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU /* 80 chars; Bindu */ #define ISC_BJN INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER /* 20 chars; Brahmi_Joining_Number */ -#define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK /* 53 chars; Cantillation_Mark */ -#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 1907 chars; Consonant */ +#define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK /* 57 chars; Cantillation_Mark */ +#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 2024 chars; Consonant */ #define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD /* 10 chars; Consonant_Dead */ -#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 62 chars; Consonant_Final */ +#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 68 chars; Consonant_Final */ #define ISC_CHL INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER /* 5 chars; Consonant_Head_Letter */ #define ISC_CK INDIC_SYLLABIC_CATEGORY_CONSONANT_KILLER /* 2 chars; Consonant_Killer */ -#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL /* 22 chars; Consonant_Medial */ -#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER /* 16 chars; Consonant_Placeholder */ -#define ISC_CPR INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA /* 1 chars; Consonant_Preceding_Repha */ -#define ISC_CPrf INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED /* 2 chars; Consonant_Prefixed */ -#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED /* 90 chars; Consonant_Subjoined */ -#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 4 chars; Consonant_Succeeding_Repha */ +#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL /* 27 chars; Consonant_Medial */ +#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER /* 18 chars; Consonant_Placeholder */ +#define ISC_CPR INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA /* 2 chars; Consonant_Preceding_Repha */ +#define ISC_CPrf INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED /* 7 chars; Consonant_Prefixed */ +#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED /* 95 chars; Consonant_Subjoined */ +#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 5 chars; Consonant_Succeeding_Repha */ #define ISC_CWS INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER /* 4 chars; Consonant_With_Stacker */ -#define ISC_GM INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK /* 2 chars; Gemination_Mark */ -#define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER /* 7 chars; Invisible_Stacker */ +#define ISC_GM INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK /* 3 chars; Gemination_Mark */ +#define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER /* 10 chars; Invisible_Stacker */ #define ISC_ZWJ INDIC_SYLLABIC_CATEGORY_JOINER /* 1 chars; Joiner */ #define ISC_ML INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER /* 1 chars; Modifying_Letter */ #define ISC_ZWNJ INDIC_SYLLABIC_CATEGORY_NON_JOINER /* 1 chars; Non_Joiner */ -#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 24 chars; Nukta */ -#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER /* 459 chars; Number */ +#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 28 chars; Nukta */ +#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER /* 469 chars; Number */ #define ISC_NJ INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER /* 1 chars; Number_Joiner */ #define ISC_x INDIC_SYLLABIC_CATEGORY_OTHER /* 1 chars; Other */ -#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 16 chars; Pure_Killer */ +#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 21 chars; Pure_Killer */ #define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER /* 2 chars; Register_Shifter */ #define ISC_SM INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER /* 22 chars; Syllable_Modifier */ #define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER /* 7 chars; Tone_Letter */ #define ISC_TM INDIC_SYLLABIC_CATEGORY_TONE_MARK /* 42 chars; Tone_Mark */ #define ISC_V INDIC_SYLLABIC_CATEGORY_VIRAMA /* 24 chars; Virama */ -#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA /* 31 chars; Visarga */ +#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA /* 34 chars; Visarga */ #define ISC_Vo INDIC_SYLLABIC_CATEGORY_VOWEL /* 30 chars; Vowel */ -#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 602 chars; Vowel_Dependent */ -#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 431 chars; Vowel_Independent */ +#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 633 chars; Vowel_Dependent */ +#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 443 chars; Vowel_Independent */ -#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 300 chars; Bottom */ +#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 330 chars; Bottom */ +#define IMC_BL INDIC_MATRA_CATEGORY_BOTTOM_AND_LEFT /* 1 chars; Bottom_And_Left */ #define IMC_BR INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT /* 2 chars; Bottom_And_Right */ #define IMC_L INDIC_MATRA_CATEGORY_LEFT /* 57 chars; Left */ #define IMC_LR INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT /* 21 chars; Left_And_Right */ #define IMC_x INDIC_MATRA_CATEGORY_NOT_APPLICABLE /* 1 chars; Not_Applicable */ #define IMC_O INDIC_MATRA_CATEGORY_OVERSTRUCK /* 10 chars; Overstruck */ -#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 258 chars; Right */ -#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 342 chars; Top */ +#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 262 chars; Right */ +#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 380 chars; Top */ #define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM /* 10 chars; Top_And_Bottom */ #define IMC_TBR INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT /* 1 chars; Top_And_Bottom_And_Right */ #define IMC_TL INDIC_MATRA_CATEGORY_TOP_AND_LEFT /* 6 chars; Top_And_Left */ @@ -133,7 +134,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = { /* 09E0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x), /* 09E8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), /* 09F0 */ _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), - /* 09F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), + /* 09F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(Bi,x), _(x,x), _(x,x), _(x,x), /* Gurmukhi */ @@ -171,7 +172,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = { /* 0AE0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x), /* 0AE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), /* 0AF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), - /* 0AF8 */ _(x,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), + /* 0AF8 */ _(x,x), _(C,x), _(Ca,T), _(Ca,T), _(Ca,T), _(N,T), _(N,T), _(N,T), /* Oriya */ @@ -251,14 +252,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = { /* Malayalam */ - /* 0D00 */ _(x,x), _(Bi,T), _(Bi,R), _(Vs,R), _(x,x), _(VI,x), _(VI,x), _(VI,x), + /* 0D00 */ _(Bi,T), _(Bi,T), _(Bi,R), _(Vs,R), _(x,x), _(VI,x), _(VI,x), _(VI,x), /* 0D08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x), /* 0D10 */ _(VI,x), _(x,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x), /* 0D18 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), /* 0D20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), /* 0D28 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), /* 0D30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), - /* 0D38 */ _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(A,x), _(M,R), _(M,R), + /* 0D38 */ _(C,x), _(C,x), _(C,x), _(PK,T), _(PK,T), _(A,x), _(M,R), _(M,R), /* 0D40 */ _(M,R), _(M,R), _(M,R), _(M,B), _(M,B), _(x,x), _(M,L), _(M,L), /* 0D48 */ _(M,L), _(x,x), _(M,LR), _(M,LR), _(M,LR), _(V,T),_(CPR,x), _(x,x), /* 0D50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(CD,x), _(CD,x), _(CD,x), _(M,R), @@ -341,7 +342,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = { /* 1CD8 */ _(Ca,B), _(Ca,B), _(Ca,T), _(Ca,T), _(Ca,B), _(Ca,B), _(Ca,B), _(Ca,B), /* 1CE0 */ _(Ca,T), _(Ca,R), _(x,O), _(x,O), _(x,O), _(x,O), _(x,O), _(x,O), /* 1CE8 */ _(x,O), _(x,x), _(x,x), _(x,x), _(x,x), _(x,B), _(x,x), _(x,x), - /* 1CF0 */ _(x,x), _(x,x), _(Vs,x), _(Vs,x), _(Ca,T), _(x,x), _(x,x), _(x,x), + /* 1CF0 */ _(x,x), _(x,x), _(Vs,x), _(Vs,x), _(Ca,T), _(x,x), _(x,x), _(Ca,R), /* 1CF8 */ _(Ca,x), _(Ca,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), #define indic_offset_0x2008u 1656 @@ -368,7 +369,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = { /* A8E0 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), /* A8E8 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), - /* A8F0 */ _(Ca,T), _(Ca,T), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), + /* A8F0 */ _(Ca,T), _(Ca,T), _(Bi,x), _(Bi,x), _(x,x), _(x,x), _(x,x), _(x,x), #define indic_offset_0xa9e0u 1720 @@ -390,7 +391,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = { /* AA70 */ _(x,x), _(C,x), _(C,x), _(C,x), _(CP,x), _(CP,x), _(CP,x), _(x,x), /* AA78 */ _(x,x), _(x,x), _(C,x), _(TM,R), _(TM,T), _(TM,R), _(C,x), _(C,x), -}; /* Table items: 1784; occupancy: 69% */ +}; /* Table items: 1784; occupancy: 70% */ INDIC_TABLE_ELEMENT_TYPE hb_indic_get_categories (hb_codepoint_t u) @@ -422,13 +423,6 @@ hb_indic_get_categories (hb_codepoint_t u) if (hb_in_range<hb_codepoint_t> (u, 0xAA60u, 0xAA7Fu)) return indic_table[u - 0xAA60u + indic_offset_0xaa60u]; break; - case 0x11u: - // According to ScriptExtensions.txt, these Grantha marks may also be used in Tamil, - // so the Indic shaper needs to know their categories. - if (unlikely (u == 0x11303)) return _(Vs,R); - if (unlikely (u == 0x1133c)) return _(N,B); - break; - default: break; } @@ -474,6 +468,7 @@ hb_indic_get_categories (hb_codepoint_t u) #undef ISC_VI #undef IMC_B +#undef IMC_BL #undef IMC_BR #undef IMC_L #undef IMC_LR diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc index 3cd8fd6c3d7..051db22fcbe 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc @@ -208,7 +208,21 @@ set_indic_properties (hb_glyph_info_t &info) cat = OT_M; pos = POS_ABOVE_C; } + else if (unlikely (u == 0x0A51u)) + { + /* https://github.com/behdad/harfbuzz/issues/524 */ + cat = OT_M; + pos = POS_BELOW_C; + } + + /* According to ScriptExtensions.txt, these Grantha marks may also be used in Tamil, + * so the Indic shaper needs to know their categories. */ + else if (unlikely (u == 0x11303u)) cat = OT_SM; + else if (unlikely (u == 0x1133cu)) cat = OT_N; + else if (unlikely (u == 0x0AFBu)) cat = OT_N; /* https://github.com/behdad/harfbuzz/issues/552 */ + + else if (unlikely (u == 0x0980u)) cat = OT_PLACEHOLDER; /* https://github.com/behdad/harfbuzz/issues/538 */ else if (unlikely (u == 0x17C6u)) cat = OT_N; /* Khmer Bindu doesn't like to be repositioned. */ else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x2010u, 0x2011u))) cat = OT_PLACEHOLDER; @@ -677,6 +691,21 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data; hb_glyph_info_t *info = buffer->info; + /* https://github.com/behdad/harfbuzz/issues/435#issuecomment-335560167 + * // For compatibility with legacy useage in Kannada, + * // Ra+h+ZWJ must behave like Ra+ZWJ+h... + */ + if (buffer->props.script == HB_SCRIPT_KANNADA && + start + 3 <= end && + is_one_of (info[start ], FLAG (OT_Ra)) && + is_one_of (info[start+1], FLAG (OT_H)) && + is_one_of (info[start+2], FLAG (OT_ZWJ))) + { + buffer->merge_clusters (start+1, start+3); + hb_glyph_info_t tmp = info[start+1]; + info[start+1] = info[start+2]; + info[start+2] = tmp; + } /* 1. Find base consonant: * @@ -842,8 +871,8 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan, /* 2. Decompose and reorder Matras: * - * Each matra and any syllable modifier sign in the cluster are moved to the - * appropriate position relative to the consonant(s) in the cluster. The + * Each matra and any syllable modifier sign in the syllable are moved to the + * appropriate position relative to the consonant(s) in the syllable. The * shaping engine decomposes two- or three-part matras into their constituent * parts before any repositioning. Matra characters are classified by which * consonant in a conjunct they have affinity for and are reordered to the @@ -1269,7 +1298,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, /* This function relies heavily on halant glyphs. Lots of ligation - * and possibly multiplication substitutions happened prior to this + * and possibly multiple substitutions happened prior to this * phase, and that might have messed up our properties. Recover * from a particular case of that where we're fairly sure that a * class of OT_H is desired but has been lost. */ @@ -1293,7 +1322,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, * After the localized forms and basic shaping forms GSUB features have been * applied (see below), the shaping engine performs some final glyph * reordering before applying all the remaining font features to the entire - * cluster. + * syllable. */ bool try_pref = !!indic_plan->mask_array[PREF]; @@ -1676,8 +1705,8 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan, break; default: - /* Uniscribe merges the entire cluster... Except for Tamil & Sinhala. - * This means, half forms are submerged into the main consonants cluster. + /* Uniscribe merges the entire syllable into a single cluster... Except for Tamil & Sinhala. + * This means, half forms are submerged into the main consonant's cluster. * This is unnecessary, and makes cursor positioning harder, but that's what * Uniscribe does. */ buffer->merge_clusters (start, end); @@ -1826,6 +1855,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic = compose_indic, setup_masks_indic, NULL, /* disable_otl */ + NULL, /* reorder_marks */ HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE, false, /* fallback_position */ }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh index d2fe7422e69..ed87404305b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh @@ -1,5 +1,5 @@ -#line 1 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 1 "hb-ot-shape-complex-myanmar-machine.rl" /* * Copyright © 2011,2012 Google, Inc. * @@ -32,199 +32,203 @@ #include "hb-private.hh" -#line 36 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp" +#line 36 "hb-ot-shape-complex-myanmar-machine.hh" static const unsigned char _myanmar_syllable_machine_trans_keys[] = { - 1u, 31u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, + 1u, 32u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, - 3u, 30u, 3u, 29u, 1u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, - 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 8u, 8u, 0 + 3u, 30u, 3u, 29u, 1u, 32u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, + 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 32u, 8u, 8u, 0 }; static const char _myanmar_syllable_machine_key_spans[] = { - 31, 28, 25, 4, 25, 23, 21, 21, + 32, 28, 25, 4, 25, 23, 21, 21, 27, 27, 27, 27, 16, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 4, 25, 23, 21, 21, 27, 27, 27, 27, - 28, 27, 30, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 1 + 28, 27, 32, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 32, 1 }; static const short _myanmar_syllable_machine_index_offsets[] = { - 0, 32, 61, 87, 92, 118, 142, 164, - 186, 214, 242, 270, 298, 315, 343, 371, - 399, 427, 455, 483, 511, 539, 567, 593, - 598, 624, 648, 670, 692, 720, 748, 776, - 804, 833, 861, 892, 920, 948, 976, 1004, - 1032, 1060, 1088, 1116, 1144 + 0, 33, 62, 88, 93, 119, 143, 165, + 187, 215, 243, 271, 299, 316, 344, 372, + 400, 428, 456, 484, 512, 540, 568, 594, + 599, 625, 649, 671, 693, 721, 749, 777, + 805, 834, 862, 895, 923, 951, 979, 1007, + 1035, 1063, 1091, 1119, 1147, 1180 }; static const char _myanmar_syllable_machine_indicies[] = { 1, 1, 2, 3, 4, 4, 0, 5, 0, 6, 1, 0, 0, 0, 0, 7, - 0, 8, 1, 0, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 0, - 21, 22, 23, 23, 20, 24, 20, 25, - 20, 20, 20, 20, 20, 20, 20, 26, - 20, 20, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 20, 23, 23, 20, - 24, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 37, 20, 20, 20, 20, 20, - 20, 31, 20, 20, 20, 35, 20, 23, - 23, 20, 24, 20, 23, 23, 20, 24, - 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, - 31, 20, 20, 20, 35, 20, 38, 20, - 23, 23, 20, 24, 20, 31, 20, 20, - 20, 20, 20, 20, 20, 39, 20, 20, - 20, 20, 20, 20, 31, 20, 23, 23, - 20, 24, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 39, 20, 20, 20, 20, - 20, 20, 31, 20, 23, 23, 20, 24, - 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, - 31, 20, 21, 20, 23, 23, 20, 24, - 20, 25, 20, 20, 20, 20, 20, 20, - 20, 40, 20, 20, 40, 20, 20, 20, - 31, 41, 20, 20, 35, 20, 21, 20, - 23, 23, 20, 24, 20, 25, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 31, 20, 20, 20, - 35, 20, 21, 20, 23, 23, 20, 24, - 20, 25, 20, 20, 20, 20, 20, 20, - 20, 40, 20, 20, 20, 20, 20, 20, - 31, 41, 20, 20, 35, 20, 21, 20, - 23, 23, 20, 24, 20, 25, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 31, 41, 20, 20, - 35, 20, 1, 1, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, - 20, 1, 20, 21, 20, 23, 23, 20, - 24, 20, 25, 20, 20, 20, 20, 20, - 20, 20, 26, 20, 20, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 20, 21, - 20, 23, 23, 20, 24, 20, 25, 20, - 20, 20, 20, 20, 20, 20, 34, 20, - 20, 20, 20, 20, 20, 31, 32, 33, - 34, 35, 20, 21, 20, 23, 23, 20, - 24, 20, 25, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, - 20, 31, 32, 33, 34, 35, 20, 21, - 20, 23, 23, 20, 24, 20, 25, 20, - 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 31, 32, 33, - 20, 35, 20, 21, 20, 23, 23, 20, - 24, 20, 25, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, - 20, 31, 20, 33, 20, 35, 20, 21, - 20, 23, 23, 20, 24, 20, 25, 20, - 20, 20, 20, 20, 20, 20, 34, 20, - 20, 27, 20, 29, 20, 31, 32, 33, - 34, 35, 20, 21, 20, 23, 23, 20, - 24, 20, 25, 20, 20, 20, 20, 20, - 20, 20, 34, 20, 20, 27, 20, 20, - 20, 31, 32, 33, 34, 35, 20, 21, - 20, 23, 23, 20, 24, 20, 25, 20, - 20, 20, 20, 20, 20, 20, 34, 20, - 20, 27, 28, 29, 20, 31, 32, 33, - 34, 35, 20, 21, 22, 23, 23, 20, - 24, 20, 25, 20, 20, 20, 20, 20, - 20, 20, 26, 20, 20, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 20, 3, - 3, 42, 5, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 43, 42, 42, 42, - 42, 42, 42, 13, 42, 42, 42, 17, - 42, 3, 3, 42, 5, 42, 3, 3, - 42, 5, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 13, 42, 42, 42, 17, 42, - 44, 42, 3, 3, 42, 5, 42, 13, - 42, 42, 42, 42, 42, 42, 42, 45, - 42, 42, 42, 42, 42, 42, 13, 42, - 3, 3, 42, 5, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 45, 42, 42, - 42, 42, 42, 42, 13, 42, 3, 3, - 42, 5, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 13, 42, 2, 42, 3, 3, - 42, 5, 42, 6, 42, 42, 42, 42, - 42, 42, 42, 46, 42, 42, 46, 42, - 42, 42, 13, 47, 42, 42, 17, 42, - 2, 42, 3, 3, 42, 5, 42, 6, - 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 13, 42, - 42, 42, 17, 42, 2, 42, 3, 3, - 42, 5, 42, 6, 42, 42, 42, 42, - 42, 42, 42, 46, 42, 42, 42, 42, - 42, 42, 13, 47, 42, 42, 17, 42, - 2, 42, 3, 3, 42, 5, 42, 6, - 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 13, 47, - 42, 42, 17, 42, 21, 22, 23, 23, - 20, 24, 20, 25, 20, 20, 20, 20, - 20, 20, 20, 48, 20, 20, 27, 28, + 0, 8, 9, 0, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 1, + 0, 22, 23, 24, 24, 21, 25, 21, + 26, 21, 21, 21, 21, 21, 21, 21, + 27, 21, 21, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 21, 24, 24, + 21, 25, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 38, 21, 21, 21, 21, + 21, 21, 32, 21, 21, 21, 36, 21, + 24, 24, 21, 25, 21, 24, 24, 21, + 25, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 32, 21, 21, 21, 36, 21, 39, + 21, 24, 24, 21, 25, 21, 32, 21, + 21, 21, 21, 21, 21, 21, 40, 21, + 21, 21, 21, 21, 21, 32, 21, 24, + 24, 21, 25, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 40, 21, 21, 21, + 21, 21, 21, 32, 21, 24, 24, 21, + 25, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 32, 21, 22, 21, 24, 24, 21, + 25, 21, 26, 21, 21, 21, 21, 21, + 21, 21, 41, 21, 21, 41, 21, 21, + 21, 32, 42, 21, 21, 36, 21, 22, + 21, 24, 24, 21, 25, 21, 26, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 32, 21, 21, + 21, 36, 21, 22, 21, 24, 24, 21, + 25, 21, 26, 21, 21, 21, 21, 21, + 21, 21, 41, 21, 21, 21, 21, 21, + 21, 32, 42, 21, 21, 36, 21, 22, + 21, 24, 24, 21, 25, 21, 26, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 32, 42, 21, + 21, 36, 21, 1, 1, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 1, 21, 22, 21, 24, 24, + 21, 25, 21, 26, 21, 21, 21, 21, + 21, 21, 21, 27, 21, 21, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 21, + 22, 21, 24, 24, 21, 25, 21, 26, + 21, 21, 21, 21, 21, 21, 21, 35, + 21, 21, 21, 21, 21, 21, 32, 33, + 34, 35, 36, 21, 22, 21, 24, 24, + 21, 25, 21, 26, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 32, 33, 34, 35, 36, 21, + 22, 21, 24, 24, 21, 25, 21, 26, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 32, 33, + 34, 21, 36, 21, 22, 21, 24, 24, + 21, 25, 21, 26, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 32, 21, 34, 21, 36, 21, + 22, 21, 24, 24, 21, 25, 21, 26, + 21, 21, 21, 21, 21, 21, 21, 35, + 21, 21, 28, 21, 30, 21, 32, 33, + 34, 35, 36, 21, 22, 21, 24, 24, + 21, 25, 21, 26, 21, 21, 21, 21, + 21, 21, 21, 35, 21, 21, 28, 21, + 21, 21, 32, 33, 34, 35, 36, 21, + 22, 21, 24, 24, 21, 25, 21, 26, + 21, 21, 21, 21, 21, 21, 21, 35, + 21, 21, 28, 29, 30, 21, 32, 33, + 34, 35, 36, 21, 22, 23, 24, 24, + 21, 25, 21, 26, 21, 21, 21, 21, + 21, 21, 21, 27, 21, 21, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 21, + 3, 3, 43, 5, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 44, 43, 43, + 43, 43, 43, 43, 14, 43, 43, 43, + 18, 43, 3, 3, 43, 5, 43, 3, + 3, 43, 5, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 14, 43, 43, 43, 18, + 43, 45, 43, 3, 3, 43, 5, 43, + 14, 43, 43, 43, 43, 43, 43, 43, + 46, 43, 43, 43, 43, 43, 43, 14, + 43, 3, 3, 43, 5, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 46, 43, + 43, 43, 43, 43, 43, 14, 43, 3, + 3, 43, 5, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 14, 43, 2, 43, 3, + 3, 43, 5, 43, 6, 43, 43, 43, + 43, 43, 43, 43, 47, 43, 43, 47, + 43, 43, 43, 14, 48, 43, 43, 18, + 43, 2, 43, 3, 3, 43, 5, 43, + 6, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 14, + 43, 43, 43, 18, 43, 2, 43, 3, + 3, 43, 5, 43, 6, 43, 43, 43, + 43, 43, 43, 43, 47, 43, 43, 43, + 43, 43, 43, 14, 48, 43, 43, 18, + 43, 2, 43, 3, 3, 43, 5, 43, + 6, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 14, + 48, 43, 43, 18, 43, 22, 23, 24, + 24, 21, 25, 21, 26, 21, 21, 21, + 21, 21, 21, 21, 49, 21, 21, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 20, 21, 49, 23, 23, 20, 24, 20, - 25, 20, 20, 20, 20, 20, 20, 20, - 26, 20, 20, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 20, 1, 1, 2, - 3, 3, 3, 42, 5, 42, 6, 1, - 42, 42, 42, 42, 1, 42, 8, 1, - 42, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 42, 2, 42, 3, 3, - 42, 5, 42, 6, 42, 42, 42, 42, - 42, 42, 42, 8, 42, 42, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 42, - 2, 42, 3, 3, 42, 5, 42, 6, - 42, 42, 42, 42, 42, 42, 42, 16, - 42, 42, 42, 42, 42, 42, 13, 14, - 15, 16, 17, 42, 2, 42, 3, 3, - 42, 5, 42, 6, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 13, 14, 15, 16, 17, 42, - 2, 42, 3, 3, 42, 5, 42, 6, - 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 13, 14, - 15, 42, 17, 42, 2, 42, 3, 3, - 42, 5, 42, 6, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 13, 42, 15, 42, 17, 42, - 2, 42, 3, 3, 42, 5, 42, 6, - 42, 42, 42, 42, 42, 42, 42, 16, - 42, 42, 9, 42, 11, 42, 13, 14, - 15, 16, 17, 42, 2, 42, 3, 3, - 42, 5, 42, 6, 42, 42, 42, 42, - 42, 42, 42, 16, 42, 42, 9, 42, - 42, 42, 13, 14, 15, 16, 17, 42, - 2, 42, 3, 3, 42, 5, 42, 6, - 42, 42, 42, 42, 42, 42, 42, 16, - 42, 42, 9, 10, 11, 42, 13, 14, - 15, 16, 17, 42, 2, 3, 3, 3, - 42, 5, 42, 6, 42, 42, 42, 42, - 42, 42, 42, 8, 42, 42, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 42, - 51, 50, 0 + 37, 21, 22, 50, 24, 24, 21, 25, + 21, 26, 21, 21, 21, 21, 21, 21, + 21, 27, 21, 21, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 21, 1, 1, + 2, 3, 3, 3, 43, 5, 43, 6, + 1, 43, 43, 43, 43, 1, 43, 8, + 43, 43, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 43, 1, 43, 2, + 43, 3, 3, 43, 5, 43, 6, 43, + 43, 43, 43, 43, 43, 43, 8, 43, + 43, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 43, 2, 43, 3, 3, 43, + 5, 43, 6, 43, 43, 43, 43, 43, + 43, 43, 17, 43, 43, 43, 43, 43, + 43, 14, 15, 16, 17, 18, 43, 2, + 43, 3, 3, 43, 5, 43, 6, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 14, 15, 16, + 17, 18, 43, 2, 43, 3, 3, 43, + 5, 43, 6, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 14, 15, 16, 43, 18, 43, 2, + 43, 3, 3, 43, 5, 43, 6, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 14, 43, 16, + 43, 18, 43, 2, 43, 3, 3, 43, + 5, 43, 6, 43, 43, 43, 43, 43, + 43, 43, 17, 43, 43, 10, 43, 12, + 43, 14, 15, 16, 17, 18, 43, 2, + 43, 3, 3, 43, 5, 43, 6, 43, + 43, 43, 43, 43, 43, 43, 17, 43, + 43, 10, 43, 43, 43, 14, 15, 16, + 17, 18, 43, 2, 43, 3, 3, 43, + 5, 43, 6, 43, 43, 43, 43, 43, + 43, 43, 17, 43, 43, 10, 11, 12, + 43, 14, 15, 16, 17, 18, 43, 2, + 3, 3, 3, 43, 5, 43, 6, 43, + 43, 43, 43, 43, 43, 43, 8, 43, + 43, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 43, 1, 1, 51, 51, 51, + 51, 51, 51, 51, 51, 1, 51, 51, + 51, 51, 1, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 1, 51, 52, 51, 0 }; static const char _myanmar_syllable_machine_trans_targs[] = { 0, 1, 22, 0, 0, 23, 29, 32, - 35, 36, 40, 41, 42, 25, 38, 39, - 37, 28, 43, 44, 0, 2, 12, 0, - 3, 9, 13, 14, 18, 19, 20, 5, - 16, 17, 15, 8, 21, 4, 6, 7, - 10, 11, 0, 24, 26, 27, 30, 31, - 33, 34, 0, 0 + 35, 44, 36, 40, 41, 42, 25, 38, + 39, 37, 28, 43, 45, 0, 2, 12, + 0, 3, 9, 13, 14, 18, 19, 20, + 5, 16, 17, 15, 8, 21, 4, 6, + 7, 10, 11, 0, 24, 26, 27, 30, + 31, 33, 34, 0, 0 }; static const char _myanmar_syllable_machine_trans_actions[] = { 3, 0, 0, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, 0, 0, - 0, 0, 9, 10 + 0, 0, 0, 8, 0, 0, 0, 0, + 0, 0, 0, 9, 10 }; static const char _myanmar_syllable_machine_to_state_actions[] = { @@ -233,7 +237,7 @@ static const char _myanmar_syllable_machine_to_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0 }; static const char _myanmar_syllable_machine_from_state_actions[] = { @@ -242,16 +246,16 @@ static const char _myanmar_syllable_machine_from_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0 }; static const short _myanmar_syllable_machine_eof_trans[] = { - 0, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 21, 21, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 51 + 0, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, + 22, 22, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 52, 52 }; static const int myanmar_syllable_machine_start = 0; @@ -261,11 +265,11 @@ static const int myanmar_syllable_machine_error = -1; static const int myanmar_syllable_machine_en_main = 0; -#line 36 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 36 "hb-ot-shape-complex-myanmar-machine.rl" -#line 93 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 94 "hb-ot-shape-complex-myanmar-machine.rl" #define found_syllable(syllable_type) \ @@ -285,7 +289,7 @@ find_syllables (hb_buffer_t *buffer) int cs; hb_glyph_info_t *info = buffer->info; -#line 289 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp" +#line 293 "hb-ot-shape-complex-myanmar-machine.hh" { cs = myanmar_syllable_machine_start; ts = 0; @@ -293,7 +297,7 @@ find_syllables (hb_buffer_t *buffer) act = 0; } -#line 114 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 115 "hb-ot-shape-complex-myanmar-machine.rl" p = 0; @@ -302,7 +306,7 @@ find_syllables (hb_buffer_t *buffer) unsigned int last = 0; unsigned int syllable_serial = 1; -#line 306 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp" +#line 310 "hb-ot-shape-complex-myanmar-machine.hh" { int _slen; int _trans; @@ -316,7 +320,7 @@ _resume: #line 1 "NONE" {ts = p;} break; -#line 320 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp" +#line 324 "hb-ot-shape-complex-myanmar-machine.hh" } _keys = _myanmar_syllable_machine_trans_keys + (cs<<1); @@ -335,38 +339,38 @@ _eof_trans: switch ( _myanmar_syllable_machine_trans_actions[_trans] ) { case 7: -#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 86 "hb-ot-shape-complex-myanmar-machine.rl" {te = p+1;{ found_syllable (consonant_syllable); }} break; case 5: -#line 86 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 87 "hb-ot-shape-complex-myanmar-machine.rl" {te = p+1;{ found_syllable (non_myanmar_cluster); }} break; case 10: -#line 87 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 88 "hb-ot-shape-complex-myanmar-machine.rl" {te = p+1;{ found_syllable (punctuation_cluster); }} break; case 4: -#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 89 "hb-ot-shape-complex-myanmar-machine.rl" {te = p+1;{ found_syllable (broken_cluster); }} break; case 3: -#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 90 "hb-ot-shape-complex-myanmar-machine.rl" {te = p+1;{ found_syllable (non_myanmar_cluster); }} break; case 6: -#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 86 "hb-ot-shape-complex-myanmar-machine.rl" {te = p;p--;{ found_syllable (consonant_syllable); }} break; case 8: -#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 89 "hb-ot-shape-complex-myanmar-machine.rl" {te = p;p--;{ found_syllable (broken_cluster); }} break; case 9: -#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 90 "hb-ot-shape-complex-myanmar-machine.rl" {te = p;p--;{ found_syllable (non_myanmar_cluster); }} break; -#line 370 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp" +#line 374 "hb-ot-shape-complex-myanmar-machine.hh" } _again: @@ -375,7 +379,7 @@ _again: #line 1 "NONE" {ts = 0;} break; -#line 379 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp" +#line 383 "hb-ot-shape-complex-myanmar-machine.hh" } if ( ++p != pe ) @@ -391,7 +395,7 @@ _again: } -#line 123 "../../src/hb-ot-shape-complex-myanmar-machine.rl" +#line 124 "hb-ot-shape-complex-myanmar-machine.rl" } diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl index 9649a916f02..45733ac733e 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl @@ -41,7 +41,7 @@ A = 10; As = 18; C = 1; -D = 19; +D = 32; D0 = 20; DB = 3; GB = 11; @@ -62,6 +62,7 @@ ZWJ = 6; ZWNJ = 5; Ra = 16; P = 31; +CS = 19; j = ZWJ|ZWNJ; # Joiners k = (Ra As H); # Kinzi @@ -76,7 +77,7 @@ pwo_tone_group = PT A* DB? As?; complex_syllable_tail = As* medial_group main_vowel_group post_vowel_group* pwo_tone_group* V* j?; syllable_tail = (H | complex_syllable_tail); -consonant_syllable = k? (c|IV|D|GB).VS? (H (c|IV).VS?)* syllable_tail; +consonant_syllable = (k|CS)? (c|IV|D|GB).VS? (H (c|IV).VS?)* syllable_tail; punctuation_cluster = P V; broken_cluster = k? VS? syllable_tail; other = any; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc index ebd2b40966f..4081ed03de5 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc @@ -130,8 +130,7 @@ enum syllable_type_t { /* Note: This enum is duplicated in the -machine.rl source file. * Not sure how to avoid duplication. */ enum myanmar_category_t { - OT_As = 18, /* Asat */ - OT_D = 19, /* Digits except zero */ + OT_As = 18, /* Asat */ OT_D0 = 20, /* Digit zero */ OT_DB = OT_N, /* Dot below */ OT_GB = OT_PLACEHOLDER, @@ -145,7 +144,8 @@ enum myanmar_category_t { OT_VPre = 28, OT_VPst = 29, OT_VS = 30, /* Variation selectors */ - OT_P = 31 /* Punctuation */ + OT_P = 31, /* Punctuation */ + OT_D = 32, /* Digits except zero */ }; @@ -524,6 +524,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar_old = NULL, /* compose */ NULL, /* setup_masks */ NULL, /* disable_otl */ + NULL, /* reorder_marks */ HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, true, /* fallback_position */ }; @@ -542,6 +543,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar = NULL, /* compose */ setup_masks_myanmar, NULL, /* disable_otl */ + NULL, /* reorder_marks */ HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY, false, /* fallback_position */ }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh index 952441b6a59..9792067110b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh @@ -39,6 +39,8 @@ #define complex_var_u8_1() var2.u8[3] +#define HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS 32 + enum hb_ot_shape_zero_width_marks_type_t { HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE, HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY, @@ -154,6 +156,16 @@ struct hb_ot_complex_shaper_t */ bool (*disable_otl) (const hb_ot_shape_plan_t *plan); + /* reorder_marks() + * Called during shape(). + * Shapers can use to modify ordering of combining marks. + * May be NULL. + */ + void (*reorder_marks) (const hb_ot_shape_plan_t *plan, + hb_buffer_t *buffer, + unsigned int start, + unsigned int end); + hb_ot_shape_zero_width_marks_type_t zero_width_marks; bool fallback_position; @@ -253,10 +265,12 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner) case HB_SCRIPT_SINHALA: /* If the designer designed the font for the 'DFLT' script, - * use the default shaper. Otherwise, use the specific shaper. + * (or we ended up arbitrarily pick 'latn'), use the default shaper. + * Otherwise, use the specific shaper. * Note that for some simple scripts, there may not be *any* * GSUB/GPOS needed, so there may be no scripts found! */ - if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T')) + if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T') || + planner->map.chosen_script[0] == HB_TAG ('l','a','t','n')) return &_hb_ot_complex_shaper_default; else return &_hb_ot_complex_shaper_indic; @@ -362,11 +376,18 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner) case HB_SCRIPT_MARCHEN: case HB_SCRIPT_NEWA: + /* Unicode-10.0 additions */ + case HB_SCRIPT_MASARAM_GONDI: + case HB_SCRIPT_SOYOMBO: + case HB_SCRIPT_ZANABAZAR_SQUARE: + /* If the designer designed the font for the 'DFLT' script, - * use the default shaper. Otherwise, use the specific shaper. + * (or we ended up arbitrarily pick 'latn'), use the default shaper. + * Otherwise, use the specific shaper. * Note that for some simple scripts, there may not be *any* * GSUB/GPOS needed, so there may be no scripts found! */ - if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T')) + if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T') || + planner->map.chosen_script[0] == HB_TAG ('l','a','t','n')) return &_hb_ot_complex_shaper_default; else return &_hb_ot_complex_shaper_use; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-thai.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-thai.cc index 924247f1742..651c47f8f51 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-thai.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-thai.cc @@ -378,6 +378,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_thai = NULL, /* compose */ NULL, /* setup_masks */ NULL, /* disable_otl */ + NULL, /* reorder_marks */ HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, false,/* fallback_position */ }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-tibetan.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-tibetan.cc index aadf59f5add..a85ac0f4b86 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-tibetan.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-tibetan.cc @@ -58,6 +58,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_tibetan = NULL, /* compose */ NULL, /* setup_masks */ NULL, /* disable_otl */ + NULL, /* reorder_marks */ HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, true, /* fallback_position */ }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh index 1847c48afd9..4f6727186de 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh @@ -36,33 +36,33 @@ #line 38 "hb-ot-shape-complex-use-machine.hh" static const unsigned char _use_syllable_machine_trans_keys[] = { - 1u, 1u, 0u, 39u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u, + 1u, 1u, 0u, 43u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 13u, 21u, 4u, 4u, 13u, 13u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 1u, 1u, 1u, 39u, 8u, 39u, - 21u, 42u, 41u, 42u, 42u, 42u, 0 + 21u, 42u, 41u, 42u, 42u, 42u, 1u, 5u, 0 }; static const char _use_syllable_machine_key_spans[] = { - 1, 40, 1, 32, 32, 1, 32, 32, + 1, 44, 1, 32, 32, 1, 32, 32, 32, 19, 19, 19, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 9, 1, 1, 32, 32, 32, 32, 19, 19, 19, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 39, 32, - 22, 2, 1 + 22, 2, 1, 5 }; static const short _use_syllable_machine_index_offsets[] = { - 0, 2, 43, 45, 78, 111, 113, 146, - 179, 212, 232, 252, 272, 305, 338, 371, - 404, 437, 470, 503, 536, 569, 602, 635, - 668, 678, 680, 682, 715, 748, 781, 814, - 834, 854, 874, 907, 940, 973, 1006, 1039, - 1072, 1105, 1138, 1171, 1204, 1237, 1239, 1279, - 1312, 1335, 1338 + 0, 2, 47, 49, 82, 115, 117, 150, + 183, 216, 236, 256, 276, 309, 342, 375, + 408, 441, 474, 507, 540, 573, 606, 639, + 672, 682, 684, 686, 719, 752, 785, 818, + 838, 858, 878, 911, 944, 977, 1010, 1043, + 1076, 1109, 1142, 1175, 1208, 1241, 1243, 1283, + 1316, 1339, 1342, 1344 }; static const char _use_syllable_machine_indicies[] = { @@ -71,191 +71,192 @@ static const char _use_syllable_machine_indicies[] = { 4, 4, 2, 2, 8, 9, 4, 4, 10, 11, 12, 13, 14, 15, 16, 10, 17, 18, 19, 20, 21, 22, 4, 23, - 24, 25, 4, 27, 26, 29, 28, 28, - 30, 31, 28, 28, 28, 28, 28, 28, - 28, 28, 32, 33, 34, 35, 36, 37, - 38, 39, 33, 40, 32, 41, 42, 43, - 44, 28, 45, 46, 47, 28, 29, 28, - 28, 30, 31, 28, 28, 28, 28, 28, - 28, 28, 28, 48, 33, 34, 35, 36, - 37, 38, 39, 33, 40, 41, 41, 42, - 43, 44, 28, 45, 46, 47, 28, 30, - 49, 29, 28, 28, 30, 31, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 33, - 34, 35, 36, 37, 38, 39, 33, 40, - 41, 41, 42, 43, 44, 28, 45, 46, - 47, 28, 29, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 33, 34, 35, 36, 37, 28, 28, 28, - 28, 28, 28, 42, 43, 44, 28, 45, - 46, 47, 28, 29, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 34, 35, 36, 37, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 45, 46, 47, 28, 29, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 35, 36, 37, 28, - 29, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 36, 37, 28, 29, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 37, 28, - 29, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 35, 36, 37, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 45, 46, 47, - 28, 29, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 35, 36, 37, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 46, - 47, 28, 29, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 35, 36, 37, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 47, 28, 29, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 34, 35, 36, 37, 28, 28, - 28, 28, 28, 28, 42, 43, 44, 28, - 45, 46, 47, 28, 29, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 34, 35, 36, 37, 28, - 28, 28, 28, 28, 28, 28, 43, 44, - 28, 45, 46, 47, 28, 29, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 34, 35, 36, 37, - 28, 28, 28, 28, 28, 28, 28, 28, - 44, 28, 45, 46, 47, 28, 29, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 33, 34, 35, 36, - 37, 28, 39, 33, 28, 28, 28, 42, - 43, 44, 28, 45, 46, 47, 28, 29, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 33, 34, 35, - 36, 37, 28, 50, 33, 28, 28, 28, - 42, 43, 44, 28, 45, 46, 47, 28, - 29, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 33, 34, - 35, 36, 37, 28, 28, 33, 28, 28, - 28, 42, 43, 44, 28, 45, 46, 47, - 28, 29, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 33, - 34, 35, 36, 37, 38, 39, 33, 28, - 28, 28, 42, 43, 44, 28, 45, 46, - 47, 28, 29, 28, 28, 30, 31, 28, - 28, 28, 28, 28, 28, 28, 28, 28, - 33, 34, 35, 36, 37, 38, 39, 33, - 40, 28, 41, 42, 43, 44, 28, 45, - 46, 47, 28, 29, 28, 28, 30, 31, - 28, 28, 28, 28, 28, 28, 28, 28, - 28, 33, 34, 35, 36, 37, 38, 39, - 33, 40, 32, 41, 42, 43, 44, 28, - 45, 46, 47, 28, 52, 51, 51, 51, - 51, 51, 51, 51, 53, 51, 5, 54, - 52, 51, 6, 55, 55, 1, 56, 55, - 55, 55, 55, 55, 55, 55, 55, 57, + 24, 25, 4, 4, 4, 26, 4, 28, + 27, 30, 29, 29, 31, 32, 29, 29, + 29, 29, 29, 29, 29, 29, 33, 34, + 35, 36, 37, 38, 39, 40, 34, 41, + 33, 42, 43, 44, 45, 29, 46, 47, + 48, 29, 30, 29, 29, 31, 32, 29, + 29, 29, 29, 29, 29, 29, 29, 49, + 34, 35, 36, 37, 38, 39, 40, 34, + 41, 42, 42, 43, 44, 45, 29, 46, + 47, 48, 29, 31, 50, 30, 29, 29, + 31, 32, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 34, 35, 36, 37, 38, + 39, 40, 34, 41, 42, 42, 43, 44, + 45, 29, 46, 47, 48, 29, 30, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 34, 35, 36, 37, + 38, 29, 29, 29, 29, 29, 29, 43, + 44, 45, 29, 46, 47, 48, 29, 30, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 35, 36, + 37, 38, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 46, 47, 48, 29, + 30, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 36, 37, 38, 29, 30, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 37, 38, 29, + 30, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 38, 29, 30, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 36, 37, 38, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 46, 47, 48, 29, 30, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 36, 37, 38, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 47, 48, 29, 30, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 36, 37, + 38, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 48, 29, 30, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 35, 36, + 37, 38, 29, 29, 29, 29, 29, 29, + 43, 44, 45, 29, 46, 47, 48, 29, + 30, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 35, + 36, 37, 38, 29, 29, 29, 29, 29, + 29, 29, 44, 45, 29, 46, 47, 48, + 29, 30, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 35, 36, 37, 38, 29, 29, 29, 29, + 29, 29, 29, 29, 45, 29, 46, 47, + 48, 29, 30, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 34, 35, 36, 37, 38, 29, 40, 34, + 29, 29, 29, 43, 44, 45, 29, 46, + 47, 48, 29, 30, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 34, 35, 36, 37, 38, 29, 51, + 34, 29, 29, 29, 43, 44, 45, 29, + 46, 47, 48, 29, 30, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 34, 35, 36, 37, 38, 29, + 29, 34, 29, 29, 29, 43, 44, 45, + 29, 46, 47, 48, 29, 30, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 34, 35, 36, 37, 38, + 39, 40, 34, 29, 29, 29, 43, 44, + 45, 29, 46, 47, 48, 29, 30, 29, + 29, 31, 32, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 34, 35, 36, 37, + 38, 39, 40, 34, 41, 29, 42, 43, + 44, 45, 29, 46, 47, 48, 29, 30, + 29, 29, 31, 32, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 34, 35, 36, + 37, 38, 39, 40, 34, 41, 33, 42, + 43, 44, 45, 29, 46, 47, 48, 29, + 53, 52, 52, 52, 52, 52, 52, 52, + 54, 52, 5, 55, 53, 52, 6, 56, + 56, 1, 57, 56, 56, 56, 56, 56, + 56, 56, 56, 58, 10, 11, 12, 13, + 14, 15, 16, 10, 17, 19, 19, 20, + 21, 22, 56, 23, 24, 25, 56, 6, + 56, 56, 1, 57, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 10, 11, 12, + 13, 14, 15, 16, 10, 17, 19, 19, + 20, 21, 22, 56, 23, 24, 25, 56, + 6, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 10, 11, + 12, 13, 14, 56, 56, 56, 56, 56, + 56, 20, 21, 22, 56, 23, 24, 25, + 56, 6, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 11, 12, 13, 14, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 23, 24, + 25, 56, 6, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 12, 13, 14, 56, 6, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 13, + 14, 56, 6, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 14, 56, 6, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 12, 13, + 14, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 23, 24, 25, 56, 6, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 12, + 13, 14, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 24, 25, 56, + 6, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 12, 13, 14, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 25, + 56, 6, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 11, 12, 13, 14, 56, 56, 56, 56, + 56, 56, 20, 21, 22, 56, 23, 24, + 25, 56, 6, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 11, 12, 13, 14, 56, 56, 56, + 56, 56, 56, 56, 21, 22, 56, 23, + 24, 25, 56, 6, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 11, 12, 13, 14, 56, 56, + 56, 56, 56, 56, 56, 56, 22, 56, + 23, 24, 25, 56, 6, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 10, 11, 12, 13, 14, 56, + 16, 10, 56, 56, 56, 20, 21, 22, + 56, 23, 24, 25, 56, 6, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 10, 11, 12, 13, 14, + 56, 59, 10, 56, 56, 56, 20, 21, + 22, 56, 23, 24, 25, 56, 6, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 10, 11, 12, 13, + 14, 56, 56, 10, 56, 56, 56, 20, + 21, 22, 56, 23, 24, 25, 56, 6, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 10, 11, 12, + 13, 14, 15, 16, 10, 56, 56, 56, + 20, 21, 22, 56, 23, 24, 25, 56, + 6, 56, 56, 1, 57, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 10, 11, + 12, 13, 14, 15, 16, 10, 17, 56, + 19, 20, 21, 22, 56, 23, 24, 25, + 56, 1, 60, 3, 56, 56, 56, 3, + 56, 56, 6, 56, 56, 1, 57, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 10, 11, 12, 13, 14, 15, 16, 10, - 17, 19, 19, 20, 21, 22, 55, 23, - 24, 25, 55, 6, 55, 55, 1, 56, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 10, 11, 12, 13, 14, 15, 16, - 10, 17, 19, 19, 20, 21, 22, 55, - 23, 24, 25, 55, 6, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 10, 11, 12, 13, 14, 55, - 55, 55, 55, 55, 55, 20, 21, 22, - 55, 23, 24, 25, 55, 6, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 11, 12, 13, 14, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 23, 24, 25, 55, 6, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 12, 13, - 14, 55, 6, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 13, 14, 55, 6, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 14, 55, 6, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 12, 13, 14, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 23, - 24, 25, 55, 6, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 12, 13, 14, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 24, 25, 55, 6, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 12, 13, 14, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 25, 55, 6, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 11, 12, 13, 14, - 55, 55, 55, 55, 55, 55, 20, 21, - 22, 55, 23, 24, 25, 55, 6, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 11, 12, 13, - 14, 55, 55, 55, 55, 55, 55, 55, - 21, 22, 55, 23, 24, 25, 55, 6, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 11, 12, - 13, 14, 55, 55, 55, 55, 55, 55, - 55, 55, 22, 55, 23, 24, 25, 55, - 6, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 10, 11, - 12, 13, 14, 55, 16, 10, 55, 55, - 55, 20, 21, 22, 55, 23, 24, 25, - 55, 6, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 10, - 11, 12, 13, 14, 55, 58, 10, 55, - 55, 55, 20, 21, 22, 55, 23, 24, - 25, 55, 6, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 10, 11, 12, 13, 14, 55, 55, 10, - 55, 55, 55, 20, 21, 22, 55, 23, - 24, 25, 55, 6, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, - 55, 10, 11, 12, 13, 14, 15, 16, - 10, 55, 55, 55, 20, 21, 22, 55, - 23, 24, 25, 55, 6, 55, 55, 1, - 56, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 10, 11, 12, 13, 14, 15, - 16, 10, 17, 55, 19, 20, 21, 22, - 55, 23, 24, 25, 55, 1, 59, 3, - 55, 55, 55, 3, 55, 55, 6, 55, - 55, 1, 56, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 10, 11, 12, 13, - 14, 15, 16, 10, 17, 18, 19, 20, - 21, 22, 55, 23, 24, 25, 55, 6, - 55, 55, 1, 56, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 10, 11, 12, - 13, 14, 15, 16, 10, 17, 18, 19, - 20, 21, 22, 55, 23, 24, 25, 55, - 61, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 61, 62, 60, 61, - 62, 60, 62, 60, 0 + 17, 18, 19, 20, 21, 22, 56, 23, + 24, 25, 56, 6, 56, 56, 1, 57, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 10, 11, 12, 13, 14, 15, 16, + 10, 17, 18, 19, 20, 21, 22, 56, + 23, 24, 25, 56, 62, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 62, 63, 61, 62, 63, 61, 63, 61, + 3, 60, 60, 60, 3, 60, 0 }; static const char _use_syllable_machine_trans_targs[] = { 1, 27, 2, 3, 1, 24, 1, 45, 46, 48, 29, 30, 31, 32, 33, 40, 41, 43, 47, 44, 37, 38, 39, 34, - 35, 36, 1, 1, 1, 1, 4, 5, - 23, 7, 8, 9, 10, 11, 18, 19, - 21, 22, 15, 16, 17, 12, 13, 14, - 6, 1, 20, 1, 25, 26, 1, 1, - 0, 28, 42, 1, 1, 49, 50 + 35, 36, 51, 1, 1, 1, 1, 4, + 5, 23, 7, 8, 9, 10, 11, 18, + 19, 21, 22, 15, 16, 17, 12, 13, + 14, 6, 1, 20, 1, 25, 26, 1, + 1, 0, 28, 42, 1, 1, 49, 50 }; static const char _use_syllable_machine_trans_actions[] = { 1, 2, 0, 0, 5, 0, 6, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, - 0, 0, 7, 8, 9, 10, 0, 0, + 0, 0, 0, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 0, 12, 0, 0, 13, 14, - 0, 2, 0, 15, 16, 0, 0 + 0, 0, 11, 0, 12, 0, 0, 13, + 14, 0, 2, 0, 15, 16, 0, 0 }; static const char _use_syllable_machine_to_state_actions[] = { @@ -265,7 +266,7 @@ static const char _use_syllable_machine_to_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0 + 0, 0, 0, 0 }; static const char _use_syllable_machine_from_state_actions[] = { @@ -275,17 +276,17 @@ static const char _use_syllable_machine_from_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0 + 0, 0, 0, 0 }; static const short _use_syllable_machine_eof_trans[] = { - 1, 0, 27, 29, 29, 50, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, - 52, 55, 52, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 60, 56, 56, - 61, 61, 61 + 1, 0, 28, 30, 30, 51, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 53, 56, 53, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 61, 57, 57, + 62, 62, 62, 61 }; static const int use_syllable_machine_start = 1; @@ -299,7 +300,7 @@ static const int use_syllable_machine_en_main = 1; -#line 139 "hb-ot-shape-complex-use-machine.rl" +#line 140 "hb-ot-shape-complex-use-machine.rl" #define found_syllable(syllable_type) \ @@ -319,7 +320,7 @@ find_syllables (hb_buffer_t *buffer) int cs; hb_glyph_info_t *info = buffer->info; -#line 323 "hb-ot-shape-complex-use-machine.hh" +#line 324 "hb-ot-shape-complex-use-machine.hh" { cs = use_syllable_machine_start; ts = 0; @@ -327,7 +328,7 @@ find_syllables (hb_buffer_t *buffer) act = 0; } -#line 160 "hb-ot-shape-complex-use-machine.rl" +#line 161 "hb-ot-shape-complex-use-machine.rl" p = 0; @@ -336,7 +337,7 @@ find_syllables (hb_buffer_t *buffer) unsigned int last = 0; unsigned int syllable_serial = 1; -#line 340 "hb-ot-shape-complex-use-machine.hh" +#line 341 "hb-ot-shape-complex-use-machine.hh" { int _slen; int _trans; @@ -350,7 +351,7 @@ _resume: #line 1 "NONE" {ts = p;} break; -#line 354 "hb-ot-shape-complex-use-machine.hh" +#line 355 "hb-ot-shape-complex-use-machine.hh" } _keys = _use_syllable_machine_trans_keys + (cs<<1); @@ -373,58 +374,58 @@ _eof_trans: {te = p+1;} break; case 8: -#line 128 "hb-ot-shape-complex-use-machine.rl" +#line 129 "hb-ot-shape-complex-use-machine.rl" {te = p+1;{ found_syllable (independent_cluster); }} break; case 10: -#line 130 "hb-ot-shape-complex-use-machine.rl" +#line 131 "hb-ot-shape-complex-use-machine.rl" {te = p+1;{ found_syllable (standard_cluster); }} break; case 6: -#line 134 "hb-ot-shape-complex-use-machine.rl" +#line 135 "hb-ot-shape-complex-use-machine.rl" {te = p+1;{ found_syllable (broken_cluster); }} break; case 5: -#line 135 "hb-ot-shape-complex-use-machine.rl" +#line 136 "hb-ot-shape-complex-use-machine.rl" {te = p+1;{ found_syllable (non_cluster); }} break; case 7: -#line 128 "hb-ot-shape-complex-use-machine.rl" +#line 129 "hb-ot-shape-complex-use-machine.rl" {te = p;p--;{ found_syllable (independent_cluster); }} break; case 11: -#line 129 "hb-ot-shape-complex-use-machine.rl" +#line 130 "hb-ot-shape-complex-use-machine.rl" {te = p;p--;{ found_syllable (virama_terminated_cluster); }} break; case 9: -#line 130 "hb-ot-shape-complex-use-machine.rl" +#line 131 "hb-ot-shape-complex-use-machine.rl" {te = p;p--;{ found_syllable (standard_cluster); }} break; case 13: -#line 131 "hb-ot-shape-complex-use-machine.rl" +#line 132 "hb-ot-shape-complex-use-machine.rl" {te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }} break; case 12: -#line 132 "hb-ot-shape-complex-use-machine.rl" +#line 133 "hb-ot-shape-complex-use-machine.rl" {te = p;p--;{ found_syllable (numeral_cluster); }} break; case 16: -#line 133 "hb-ot-shape-complex-use-machine.rl" +#line 134 "hb-ot-shape-complex-use-machine.rl" {te = p;p--;{ found_syllable (symbol_cluster); }} break; case 14: -#line 134 "hb-ot-shape-complex-use-machine.rl" +#line 135 "hb-ot-shape-complex-use-machine.rl" {te = p;p--;{ found_syllable (broken_cluster); }} break; case 15: -#line 135 "hb-ot-shape-complex-use-machine.rl" +#line 136 "hb-ot-shape-complex-use-machine.rl" {te = p;p--;{ found_syllable (non_cluster); }} break; case 1: -#line 134 "hb-ot-shape-complex-use-machine.rl" +#line 135 "hb-ot-shape-complex-use-machine.rl" {{p = ((te))-1;}{ found_syllable (broken_cluster); }} break; -#line 428 "hb-ot-shape-complex-use-machine.hh" +#line 429 "hb-ot-shape-complex-use-machine.hh" } _again: @@ -433,7 +434,7 @@ _again: #line 1 "NONE" {ts = 0;} break; -#line 437 "hb-ot-shape-complex-use-machine.hh" +#line 438 "hb-ot-shape-complex-use-machine.hh" } if ( ++p != pe ) @@ -449,7 +450,7 @@ _again: } -#line 169 "hb-ot-shape-complex-use-machine.rl" +#line 170 "hb-ot-shape-complex-use-machine.rl" } diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl index 2a7f75115e1..7bd8fce15e4 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl @@ -86,6 +86,7 @@ VMPst = 39; # VOWEL_MOD_POST VMPre = 23; # VOWEL_MOD_PRE SMAbv = 41; # SYM_MOD_ABOVE SMBlw = 42; # SYM_MOD_BELOW +CS = 43; # CONS_WITH_STACKER consonant_modifiers = CMAbv* CMBlw* ((H B | SUB) VS? CMAbv? CMBlw*)*; @@ -96,12 +97,12 @@ vowel_modifiers = VMPre* VMAbv* VMBlw* VMPst*; final_consonants = FAbv* FBlw* FPst* FM?; virama_terminated_cluster = - R? (B | GB) VS? + (R|CS)? (B | GB) VS? consonant_modifiers H ; standard_cluster = - R? (B | GB) VS? + (R|CS)? (B | GB) VS? consonant_modifiers medial_consonants dependent_vowels diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh index ae428cb5eb2..3e763ae3936 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh @@ -87,7 +87,8 @@ enum use_category_t { USE_VMPst = 39, /* VOWEL_MOD_POST */ USE_VMPre = 23, /* VOWEL_MOD_PRE */ USE_SMAbv = 41, /* SYM_MOD_ABOVE */ - USE_SMBlw = 42 /* SYM_MOD_BELOW */ + USE_SMBlw = 42, /* SYM_MOD_BELOW */ + USE_CS = 43 /* CONS_WITH_STACKER */ }; HB_INTERNAL USE_TABLE_ELEMENT_TYPE diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc index 941a003aaf5..1f90fc858b4 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc @@ -6,12 +6,12 @@ * * on files with these headers: * - * # IndicSyllabicCategory-9.0.0.txt - * # Date: 2016-05-21, 02:46:00 GMT [RP] - * # IndicPositionalCategory-9.0.0.txt - * # Date: 2016-06-09, 19:33:00 GMT [RP] - * # Blocks-9.0.0.txt - * # Date: 2016-02-05, 23:48:00 GMT [KW] + * # IndicSyllabicCategory-10.0.0.txt + * # Date: 2017-05-31, 01:07:00 GMT [KW, RP] + * # IndicPositionalCategory-10.0.0.txt + * # Date: 2017-05-31, 01:07:00 GMT [RP] + * # Blocks-10.0.0.txt + * # Date: 2017-04-12, 17:30:00 GMT [KW] * UnicodeData.txt does not have a header. */ @@ -19,6 +19,7 @@ #define B USE_B /* BASE */ #define CGJ USE_CGJ /* CGJ */ +#define CS USE_CS /* CONS_WITH_STACKER */ #define FM USE_FM /* CONS_FINAL_MOD */ #define GB USE_GB /* BASE_OTHER */ #define H USE_H /* HALANT */ @@ -97,7 +98,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* 09C0 */ VPst, VBlw, VBlw, VBlw, VBlw, O, O, VPre, VPre, O, O, VPre, VPre, H, IND, O, /* 09D0 */ O, O, O, O, O, O, O, VPst, O, O, O, O, B, B, O, B, /* 09E0 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, - /* 09F0 */ B, B, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 09F0 */ B, B, O, O, O, O, O, O, O, O, O, O, B, O, O, O, /* Gurmukhi */ @@ -119,7 +120,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* 0AC0 */ VPst, VBlw, VBlw, VBlw, VBlw, VAbv, O, VAbv, VAbv, VAbv, O, VPst, VPst, H, O, O, /* 0AD0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, /* 0AE0 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, - /* 0AF0 */ O, O, O, O, O, O, O, O, O, B, O, O, O, O, O, O, + /* 0AF0 */ O, O, O, O, O, O, O, O, O, B, VMAbv, VMAbv, VMAbv, CMAbv, CMAbv, CMAbv, /* Oriya */ @@ -163,14 +164,14 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* 0CC0 */ VAbv, VPst, VPst, VPst, VPst, O, VAbv, VAbv, VAbv, O, VAbv, VAbv, VAbv, H, O, O, /* 0CD0 */ O, O, O, O, O, VPst, VPst, O, O, O, O, O, O, O, B, O, /* 0CE0 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, - /* 0CF0 */ O, R, R, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 0CF0 */ O, CS, CS, O, O, O, O, O, O, O, O, O, O, O, O, O, /* Malayalam */ - /* 0D00 */ O, VMAbv, VMPst, VMPst, O, B, B, B, B, B, B, B, B, O, B, B, + /* 0D00 */ VMAbv, VMAbv, VMPst, VMPst, O, B, B, B, B, B, B, B, B, O, B, B, /* 0D10 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 0D20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 0D30 */ B, B, B, B, B, B, B, B, B, B, B, O, O, B, VPst, VPst, + /* 0D30 */ B, B, B, B, B, B, B, B, B, B, B, VAbv, VAbv, B, VPst, VPst, /* 0D40 */ VPst, VPst, VPst, VBlw, VBlw, O, VPre, VPre, VPre, O, VPre, VPre, VPre, H, R, O, /* 0D50 */ O, O, O, O, IND, IND, IND, VPst, O, O, O, O, O, O, O, B, /* 0D60 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B, @@ -274,9 +275,9 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* 1A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1A30 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1A40 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1A50 */ B, B, B, B, B, MPre, MBlw, FPst, FAbv, FAbv, FAbv, FBlw, FBlw, FBlw, FBlw, O, + /* 1A50 */ B, B, B, B, B, MPre, MBlw, SUB, FAbv, FAbv, FAbv, SUB, SUB, SUB, SUB, O, /* 1A60 */ H, VPst, VAbv, VPst, VPst, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VAbv, VBlw, VPst, VPre, VPre, - /* 1A70 */ VPre, VPre, VPre, VAbv, VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, FM, FM, FM, O, O, FM, + /* 1A70 */ VPre, VPre, VPre, VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VAbv, FM, FM, O, O, FBlw, /* 1A80 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, /* 1A90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, @@ -323,7 +324,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* 1CD0 */ VMAbv, VMAbv, VMAbv, O, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMAbv, VMAbv, VMBlw, VMBlw, VMBlw, VMBlw, /* 1CE0 */ VMAbv, VMPst, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, O, O, O, O, VMBlw, O, O, - /* 1CF0 */ O, O, VMPst, VMPst, VMAbv, O, O, O, VMAbv, VMAbv, O, O, O, O, O, O, + /* 1CF0 */ O, O, VMPst, VMPst, VMAbv, O, O, VMPst, VMAbv, VMAbv, O, O, O, O, O, O, #define use_offset_0x1df8u 2552 @@ -376,7 +377,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* Devanagari Extended */ /* A8E0 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, - /* A8F0 */ VMAbv, VMAbv, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* A8F0 */ VMAbv, VMAbv, B, B, O, O, O, O, O, O, O, O, O, O, O, O, /* Kayah Li */ @@ -397,7 +398,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* A980 */ VMAbv, VMAbv, FAbv, VMPst, B, B, B, B, B, B, B, B, B, B, B, B, /* A990 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* A9A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* A9B0 */ B, B, B, CMAbv, VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VPre, VAbv, SUB, MPst, MPst, + /* A9B0 */ B, B, B, CMAbv, VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VPre, VAbv, SUB, MPst, MBlw, /* A9C0 */ H, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, /* A9D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, @@ -467,7 +468,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* Brahmi */ - /* 11000 */ VMPst, VMAbv, VMPst, R, R, B, B, B, B, B, B, B, B, B, B, B, + /* 11000 */ VMPst, VMAbv, VMPst, CS, CS, B, B, B, B, B, B, B, B, B, B, B, /* 11010 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11020 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11030 */ B, B, B, B, B, B, B, B, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VBlw, VBlw, @@ -545,7 +546,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* 11320 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, /* 11330 */ B, O, B, B, O, B, B, B, B, B, O, O, CMBlw, B, VPst, VPst, /* 11340 */ VAbv, VPst, VPst, VPst, VPst, O, O, VPre, VPre, O, O, VPre, VPre, H, O, O, - /* 11350 */ O, O, O, O, O, O, O, VPst, O, O, O, O, O, O, O, O, + /* 11350 */ O, O, O, O, O, O, O, VPst, O, O, O, O, O, O, B, B, /* 11360 */ B, B, VPst, VPst, O, O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O, /* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O, @@ -615,7 +616,26 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* 11720 */ VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VAbv, VBlw, VAbv, VAbv, VAbv, O, O, O, O, /* 11730 */ B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, -#define use_offset_0x11c00u 4960 +#define use_offset_0x11a00u 4960 + + + /* Zanabazar Square */ + + /* 11A00 */ B, VAbv, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VAbv, VAbv, VBlw, B, B, B, B, B, + /* 11A10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11A30 */ B, B, B, FM, VBlw, VMAbv, VMAbv, VMAbv, VMAbv, VMPst, R, MBlw, MBlw, MBlw, MBlw, GB, + /* 11A40 */ O, O, O, O, O, GB, O, H, O, O, O, O, O, O, O, O, + + /* Soyombo */ + + /* 11A50 */ B, VAbv, VBlw, VBlw, VAbv, VAbv, VAbv, VPst, VPst, VBlw, VBlw, VBlw, B, B, B, B, + /* 11A60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11A70 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11A80 */ B, B, B, B, O, O, R, R, R, R, FBlw, FBlw, FBlw, FBlw, FBlw, FBlw, + /* 11A90 */ FBlw, FBlw, FBlw, FBlw, FBlw, FBlw, VMAbv, VMPst, CMAbv, H, O, O, O, O, O, O, + +#define use_offset_0x11c00u 5120 /* Bhaiksuki */ @@ -636,7 +656,19 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* 11CA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB, /* 11CB0 */ VBlw, VPre, VBlw, VAbv, VPst, VMAbv, VMAbv, O, -}; /* Table items: 5144; occupancy: 72% */ +#define use_offset_0x11d00u 5304 + + + /* Masaram Gondi */ + + /* 11D00 */ B, B, B, B, B, B, B, O, B, B, O, B, B, B, B, B, + /* 11D10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11D20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11D30 */ B, VAbv, VAbv, VAbv, VAbv, VAbv, VBlw, O, O, O, VAbv, O, VAbv, VAbv, O, VAbv, + /* 11D40 */ VMAbv, VMAbv, CMBlw, VAbv, VBlw, H, R, MBlw, O, O, O, O, O, O, O, O, + /* 11D50 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + +}; /* Table items: 5400; occupancy: 73% */ USE_TABLE_ELEMENT_TYPE hb_use_get_categories (hb_codepoint_t u) @@ -684,7 +716,9 @@ hb_use_get_categories (hb_codepoint_t u) if (hb_in_range<hb_codepoint_t> (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u]; if (hb_in_range<hb_codepoint_t> (u, 0x11400u, 0x114DFu)) return use_table[u - 0x11400u + use_offset_0x11400u]; if (hb_in_range<hb_codepoint_t> (u, 0x11580u, 0x1173Fu)) return use_table[u - 0x11580u + use_offset_0x11580u]; + if (hb_in_range<hb_codepoint_t> (u, 0x11A00u, 0x11A9Fu)) return use_table[u - 0x11A00u + use_offset_0x11a00u]; if (hb_in_range<hb_codepoint_t> (u, 0x11C00u, 0x11CB7u)) return use_table[u - 0x11C00u + use_offset_0x11c00u]; + if (hb_in_range<hb_codepoint_t> (u, 0x11D00u, 0x11D5Fu)) return use_table[u - 0x11D00u + use_offset_0x11d00u]; if (unlikely (u == 0x1107Fu)) return HN; break; @@ -696,6 +730,7 @@ hb_use_get_categories (hb_codepoint_t u) #undef B #undef CGJ +#undef CS #undef FM #undef GB #undef H diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc index a5ab0ab2a2d..ac3a2486737 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc @@ -607,6 +607,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_use = compose_use, setup_masks_use, NULL, /* disable_otl */ + NULL, /* reorder_marks */ HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY, false, /* fallback_position */ }; diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-normalize.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-normalize.cc index 94a3d7d27aa..fd9e7c2a8df 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-normalize.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-normalize.cc @@ -345,14 +345,18 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan, if (_hb_glyph_info_get_modified_combining_class (&buffer->info[end]) == 0) break; - /* We are going to do a O(n^2). Only do this if the sequence is short. */ - if (end - i > 10) { + /* We are going to do a O(n^2). Only do this if the sequence is short, + * but not too short ;). */ + if (end - i < 2 || end - i > HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS) { i = end; continue; } buffer->sort (i, end, compare_combining_class); + if (plan->shaper->reorder_marks) + plan->shaper->reorder_marks (plan, buffer, i, end); + i = end; } @@ -369,46 +373,58 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan, buffer->clear_output (); count = buffer->len; unsigned int starter = 0; + bool combine = true; buffer->next_glyph (); while (buffer->idx < count && !buffer->in_error) { hb_codepoint_t composed, glyph; - if (/* We don't try to compose a non-mark character with it's preceding starter. + if (combine && + /* We don't try to compose a non-mark character with it's preceding starter. * This is both an optimization to avoid trying to compose every two neighboring * glyphs in most scripts AND a desired feature for Hangul. Apparently Hangul * fonts are not designed to mix-and-match pre-composed syllables and Jamo. */ - HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->cur())) && - /* If there's anything between the starter and this char, they should have CCC - * smaller than this character's. */ - (starter == buffer->out_len - 1 || - _hb_glyph_info_get_modified_combining_class (&buffer->prev()) < _hb_glyph_info_get_modified_combining_class (&buffer->cur())) && - /* And compose. */ - c.compose (&c, - buffer->out_info[starter].codepoint, - buffer->cur().codepoint, - &composed) && - /* And the font has glyph for the composite. */ - font->get_nominal_glyph (composed, &glyph)) + HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->cur()))) { - /* Composes. */ - buffer->next_glyph (); /* Copy to out-buffer. */ - if (unlikely (buffer->in_error)) - return; - buffer->merge_out_clusters (starter, buffer->out_len); - buffer->out_len--; /* Remove the second composable. */ - /* Modify starter and carry on. */ - buffer->out_info[starter].codepoint = composed; - buffer->out_info[starter].glyph_index() = glyph; - _hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer); - - continue; + if (/* If there's anything between the starter and this char, they should have CCC + * smaller than this character's. */ + (starter == buffer->out_len - 1 || + info_cc (buffer->prev()) < info_cc (buffer->cur())) && + /* And compose. */ + c.compose (&c, + buffer->out_info[starter].codepoint, + buffer->cur().codepoint, + &composed) && + /* And the font has glyph for the composite. */ + font->get_nominal_glyph (composed, &glyph)) + { + /* Composes. */ + buffer->next_glyph (); /* Copy to out-buffer. */ + if (unlikely (buffer->in_error)) + return; + buffer->merge_out_clusters (starter, buffer->out_len); + buffer->out_len--; /* Remove the second composable. */ + /* Modify starter and carry on. */ + buffer->out_info[starter].codepoint = composed; + buffer->out_info[starter].glyph_index() = glyph; + _hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer); + + continue; + } + else if (/* We sometimes custom-tailor the sorted order of marks. In that case, stop + * trying to combine as soon as combining-class drops. */ + starter < buffer->out_len - 1 && + info_cc (buffer->prev()) > info_cc (buffer->cur())) + combine = false; } /* Blocked, or doesn't compose. */ buffer->next_glyph (); - if (_hb_glyph_info_get_modified_combining_class (&buffer->prev()) == 0) + if (info_cc (buffer->prev()) == 0) + { starter = buffer->out_len - 1; + combine = true; + } } buffer->swap_buffers (); diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc index 8cd8fcc17e0..8fc9d464f51 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc @@ -693,9 +693,9 @@ hb_ot_position_default (hb_ot_shape_context_t *c) static inline void hb_ot_position_complex (hb_ot_shape_context_t *c) { - hb_ot_layout_position_start (c->font, c->buffer); - unsigned int count = c->buffer->len; + hb_glyph_info_t *info = c->buffer->info; + hb_glyph_position_t *pos = c->buffer->pos; /* If the font has no GPOS, AND, no fallback positioning will * happen, AND, direction is forward, then when zeroing mark @@ -710,6 +710,17 @@ hb_ot_position_complex (hb_ot_shape_context_t *c) !c->plan->shaper->fallback_position && HB_DIRECTION_IS_FORWARD (c->buffer->props.direction); + /* We change glyph origin to what GPOS expects (horizontal), apply GPOS, change it back. */ + + /* The nil glyph_h_origin() func returns 0, so no need to apply it. */ + if (c->font->has_glyph_h_origin_func ()) + for (unsigned int i = 0; i < count; i++) + c->font->add_glyph_h_origin (info[i].codepoint, + &pos[i].x_offset, + &pos[i].y_offset); + + hb_ot_layout_position_start (c->font, c->buffer); + switch (c->plan->shaper->zero_width_marks) { case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY: @@ -723,30 +734,8 @@ hb_ot_position_complex (hb_ot_shape_context_t *c) } if (likely (!c->fallback_positioning)) - { - hb_glyph_info_t *info = c->buffer->info; - hb_glyph_position_t *pos = c->buffer->pos; - - /* Change glyph origin to what GPOS expects (horizontal), apply GPOS, change it back. */ - - /* The nil glyph_h_origin() func returns 0, so no need to apply it. */ - if (c->font->has_glyph_h_origin_func ()) - for (unsigned int i = 0; i < count; i++) - c->font->add_glyph_h_origin (info[i].codepoint, - &pos[i].x_offset, - &pos[i].y_offset); - c->plan->position (c->font, c->buffer); - /* The nil glyph_h_origin() func returns 0, so no need to apply it. */ - if (c->font->has_glyph_h_origin_func ()) - for (unsigned int i = 0; i < count; i++) - c->font->subtract_glyph_h_origin (info[i].codepoint, - &pos[i].x_offset, - &pos[i].y_offset); - - } - switch (c->plan->shaper->zero_width_marks) { case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE: @@ -763,6 +752,13 @@ hb_ot_position_complex (hb_ot_shape_context_t *c) hb_ot_layout_position_finish_advances (c->font, c->buffer); hb_ot_zero_width_default_ignorables (c); hb_ot_layout_position_finish_offsets (c->font, c->buffer); + + /* The nil glyph_h_origin() func returns 0, so no need to apply it. */ + if (c->font->has_glyph_h_origin_func ()) + for (unsigned int i = 0; i < count; i++) + c->font->subtract_glyph_h_origin (info[i].codepoint, + &pos[i].x_offset, + &pos[i].y_offset); } static inline void diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc index 9b0db507bb4..59b7d6a6df9 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc @@ -270,28 +270,36 @@ static const LangTag ot_languages[] = { {"cak", HB_TAG('C','A','K',' ')}, /* Kaqchikel */ {"cbk", HB_TAG('C','B','K',' ')}, /* Chavacano */ {"cbl", HB_TAG('Q','I','N',' ')}, /* Bualkhaw Chin */ + {"cco", HB_TAG('C','C','H','N')}, /* Chinantec */ {"ce", HB_TAG('C','H','E',' ')}, /* Chechen */ {"ceb", HB_TAG('C','E','B',' ')}, /* Cebuano */ {"cfm", HB_TAG('H','A','L',' ')}, /* Halam/Falam Chin */ {"cgg", HB_TAG('C','G','G',' ')}, /* Chiga */ {"ch", HB_TAG('C','H','A',' ')}, /* Chamorro */ + {"chj", HB_TAG('C','C','H','N')}, /* Chinantec */ {"chk", HB_TAG('C','H','K','0')}, /* Chuukese */ {"cho", HB_TAG('C','H','O',' ')}, /* Choctaw */ {"chp", HB_TAG('C','H','P',' ')}, /* Chipewyan */ + {"chq", HB_TAG('C','C','H','N')}, /* Chinantec */ {"chr", HB_TAG('C','H','R',' ')}, /* Cherokee */ {"chy", HB_TAG('C','H','Y',' ')}, /* Cheyenne */ + {"chz", HB_TAG('C','C','H','N')}, /* Chinantec */ {"cja", HB_TAG('C','J','A',' ')}, /* Western Cham */ {"cjm", HB_TAG('C','J','M',' ')}, /* Eastern Cham */ {"cka", HB_TAG('Q','I','N',' ')}, /* Khumi Awa Chin */ {"ckb", HB_TAG('K','U','R',' ')}, /* Central Kurdish (Sorani) */ {"ckt", HB_TAG('C','H','K',' ')}, /* Chukchi */ {"cld", HB_TAG('S','Y','R',' ')}, /* Chaldean Neo-Aramaic */ + {"cle", HB_TAG('C','C','H','N')}, /* Chinantec */ {"cmr", HB_TAG('Q','I','N',' ')}, /* Mro-Khimi Chin */ {"cnb", HB_TAG('Q','I','N',' ')}, /* Chinbon Chin */ {"cnh", HB_TAG('Q','I','N',' ')}, /* Hakha Chin */ {"cnk", HB_TAG('Q','I','N',' ')}, /* Khumi Chin */ + {"cnl", HB_TAG('C','C','H','N')}, /* Chinantec */ + {"cnt", HB_TAG('C','C','H','N')}, /* Chinantec */ {"cnw", HB_TAG('Q','I','N',' ')}, /* Ngawn Chin */ {"cop", HB_TAG('C','O','P',' ')}, /* Coptic */ + {"cpa", HB_TAG('C','C','H','N')}, /* Chinantec */ {"cpp", HB_TAG('C','P','P',' ')}, /* Creoles */ {"cr", HB_TAG('C','R','E',' ')}, /* Cree */ {"cre", HB_TAG('Y','C','R',' ')}, /* Y-Cree */ @@ -302,15 +310,21 @@ static const LangTag ot_languages[] = { {"crm", HB_TAG('M','C','R',' ')}, /* Moose Cree */ {"crx", HB_TAG('C','R','R',' ')}, /* Carrier */ {"cs", HB_TAG('C','S','Y',' ')}, /* Czech */ + {"csa", HB_TAG('C','C','H','N')}, /* Chinantec */ {"csb", HB_TAG('C','S','B',' ')}, /* Kashubian */ {"csh", HB_TAG('Q','I','N',' ')}, /* Asho Chin */ + {"cso", HB_TAG('C','C','H','N')}, /* Chinantec */ {"csy", HB_TAG('Q','I','N',' ')}, /* Siyin Chin */ {"ctd", HB_TAG('Q','I','N',' ')}, /* Tedim Chin */ + {"cte", HB_TAG('C','C','H','N')}, /* Chinantec */ {"ctg", HB_TAG('C','T','G',' ')}, /* Chittagonian */ + {"ctl", HB_TAG('C','C','H','N')}, /* Chinantec */ {"cts", HB_TAG('B','I','K',' ')}, /* Northern Catanduanes Bikol */ {"cu", HB_TAG('C','S','L',' ')}, /* Church Slavic */ + {"cuc", HB_TAG('C','C','H','N')}, /* Chinantec */ {"cuk", HB_TAG('C','U','K',' ')}, /* San Blas Kuna */ {"cv", HB_TAG('C','H','U',' ')}, /* Chuvash */ + {"cvn", HB_TAG('C','C','H','N')}, /* Chinantec */ {"cwd", HB_TAG('D','C','R',' ')}, /* Woods Cree */ {"cy", HB_TAG('W','E','L',' ')}, /* Welsh */ {"czt", HB_TAG('Q','I','N',' ')}, /* Zotung Chin */ @@ -380,7 +394,6 @@ static const LangTag ot_languages[] = { {"gkp", HB_TAG('G','K','P',' ')}, /* Kpelle (Guinea) */ {"gl", HB_TAG('G','A','L',' ')}, /* Galician */ {"gld", HB_TAG('N','A','N',' ')}, /* Nanai */ - {"gle", HB_TAG('I','R','T',' ')}, /* Irish Traditional */ {"glk", HB_TAG('G','L','K',' ')}, /* Gilaki */ {"gn", HB_TAG('G','U','A',' ')}, /* Guarani [macrolanguage] */ {"gnn", HB_TAG('G','N','N',' ')}, /* Gumatj */ @@ -538,7 +551,6 @@ static const LangTag ot_languages[] = { {"mag", HB_TAG('M','A','G',' ')}, /* Magahi */ {"mai", HB_TAG('M','T','H',' ')}, /* Maithili */ {"mak", HB_TAG('M','K','R',' ')}, /* Makasar */ - {"mal", HB_TAG('M','A','L',' ')}, /* Malayalam */ {"mam", HB_TAG('M','A','M',' ')}, /* Mam */ {"man", HB_TAG('M','N','K',' ')}, /* Manding/Mandingo [macrolanguage] */ {"mdc", HB_TAG('M','L','E',' ')}, /* Male (Papua New Guinea) */ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc index 3abf555c5f0..5573cd22441 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc @@ -520,15 +520,17 @@ hb_shape_plan_create_cached2 (hb_face_t *face, retry: hb_face_t::plan_node_t *cached_plan_nodes = (hb_face_t::plan_node_t *) hb_atomic_ptr_get (&face->shape_plans); - for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = node->next) - if (hb_shape_plan_matches (node->shape_plan, &proposal)) - { - DEBUG_MSG_FUNC (SHAPE_PLAN, node->shape_plan, "fulfilled from cache"); - return hb_shape_plan_reference (node->shape_plan); - } - /* Not found. */ + /* Don't look for plan in the cache if there were variation coordinates XXX Fix me. */ + if (!hb_coords_present (coords, num_coords)) + for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = node->next) + if (hb_shape_plan_matches (node->shape_plan, &proposal)) + { + DEBUG_MSG_FUNC (SHAPE_PLAN, node->shape_plan, "fulfilled from cache"); + return hb_shape_plan_reference (node->shape_plan); + } + /* Not found. */ hb_shape_plan_t *shape_plan = hb_shape_plan_create2 (face, props, user_features, num_user_features, coords, num_coords, diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-private.hh index 381398a6171..2481ef8ac8f 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-private.hh @@ -88,11 +88,23 @@ struct hb_shaper_data_t { HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data); #define HB_SHAPER_DATA_ENSURE_DEFINE(shaper, object) \ + HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(shaper, object, true) + +#define HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(shaper, object, condition) \ bool \ HB_SHAPER_DATA_ENSURE_FUNC(shaper, object) (hb_##object##_t *object) \ {\ retry: \ HB_SHAPER_DATA_TYPE (shaper, object) *data = (HB_SHAPER_DATA_TYPE (shaper, object) *) hb_atomic_ptr_get (&HB_SHAPER_DATA (shaper, object)); \ + if (likely (data) && !(condition)) { \ + /* Drop and recreate. */ \ + /* If someone dropped it in the mean time, throw it away and don't touch it. \ + * Otherwise, destruct it. */ \ + if (hb_atomic_ptr_cmpexch (&HB_SHAPER_DATA (shaper, object), data, NULL)) { \ + HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data); \ + } \ + goto retry; \ + } \ if (unlikely (!data)) { \ data = HB_SHAPER_DATA_CREATE_FUNC (shaper, object) (object); \ if (unlikely (!data)) \ diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc index a884e3ffd2c..d41cf5b9328 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc @@ -160,17 +160,23 @@ static const hb_script_t ucdn_script_translate[] = HB_SCRIPT_NEWA, HB_SCRIPT_OSAGE, HB_SCRIPT_TANGUT, + HB_SCRIPT_MASARAM_GONDI, + HB_SCRIPT_NUSHU, + HB_SCRIPT_SOYOMBO, + HB_SCRIPT_ZANABAZAR_SQUARE, }; static hb_unicode_combining_class_t -hb_ucdn_combining_class(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, +hb_ucdn_combining_class(hb_unicode_funcs_t *ufuncs HB_UNUSED, + hb_codepoint_t unicode, void *user_data HB_UNUSED) { return (hb_unicode_combining_class_t) ucdn_get_combining_class(unicode); } static unsigned int -hb_ucdn_eastasian_width(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, +hb_ucdn_eastasian_width(hb_unicode_funcs_t *ufuncs HB_UNUSED, + hb_codepoint_t unicode, void *user_data HB_UNUSED) { int w = ucdn_get_east_asian_width(unicode); @@ -178,28 +184,31 @@ hb_ucdn_eastasian_width(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, } static hb_unicode_general_category_t -hb_ucdn_general_category(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, +hb_ucdn_general_category(hb_unicode_funcs_t *ufuncs HB_UNUSED, + hb_codepoint_t unicode, void *user_data HB_UNUSED) { return (hb_unicode_general_category_t)ucdn_get_general_category(unicode); } static hb_codepoint_t -hb_ucdn_mirroring(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, +hb_ucdn_mirroring(hb_unicode_funcs_t *ufuncs HB_UNUSED, + hb_codepoint_t unicode, void *user_data HB_UNUSED) { return ucdn_mirror(unicode); } static hb_script_t -hb_ucdn_script(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode, +hb_ucdn_script(hb_unicode_funcs_t *ufuncs HB_UNUSED, + hb_codepoint_t unicode, void *user_data HB_UNUSED) { return ucdn_script_translate[ucdn_get_script(unicode)]; } static hb_bool_t -hb_ucdn_compose(hb_unicode_funcs_t *ufuncs, +hb_ucdn_compose(hb_unicode_funcs_t *ufuncs HB_UNUSED, hb_codepoint_t a, hb_codepoint_t b, hb_codepoint_t *ab, void *user_data HB_UNUSED) { @@ -207,7 +216,7 @@ hb_ucdn_compose(hb_unicode_funcs_t *ufuncs, } static hb_bool_t -hb_ucdn_decompose(hb_unicode_funcs_t *ufuncs, +hb_ucdn_decompose(hb_unicode_funcs_t *ufuncs HB_UNUSED, hb_codepoint_t ab, hb_codepoint_t *a, hb_codepoint_t *b, void *user_data HB_UNUSED) { @@ -215,7 +224,7 @@ hb_ucdn_decompose(hb_unicode_funcs_t *ufuncs, } static unsigned int -hb_ucdn_decompose_compatibility(hb_unicode_funcs_t *ufuncs, +hb_ucdn_decompose_compatibility(hb_unicode_funcs_t *ufuncs HB_UNUSED, hb_codepoint_t u, hb_codepoint_t *decomposed, void *user_data HB_UNUSED) { diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh index 34513e1324c..44a7471cf6e 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh @@ -105,14 +105,10 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE inline unsigned int modified_combining_class (hb_codepoint_t unicode) { - /* XXX This hack belongs to the Arabic shaper: - * Put HAMZA ABOVE in the same class as SHADDA. */ - if (unlikely (unicode == 0x0654u)) unicode = 0x0651u; - /* XXX This hack belongs to the Myanmar shaper. */ if (unlikely (unicode == 0x1037u)) unicode = 0x103Au; - /* XXX This hack belongs to the SEA shaper (for Tai Tham): + /* XXX This hack belongs to the USE shaper (for Tai Tham): * Reorder SAKOT to ensure it comes after any tone marks. */ if (unlikely (unicode == 0x1A60u)) return 254; @@ -141,6 +137,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE * we do NOT want to hide them, as the way Uniscribe has implemented them * is with regular spacing glyphs, and that's the way fonts are made to work. * As such, we make exceptions for those four. + * Also ignoring U+1BCA0..1BCA3. https://github.com/behdad/harfbuzz/issues/503 * * Unicode 7.0: * $ grep '; Default_Ignorable_Code_Point ' DerivedCoreProperties.txt | sed 's/;.*#/#/' @@ -197,8 +194,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE { /* Other planes */ switch (plane) { - case 0x01: return hb_in_ranges<hb_codepoint_t> (ch, 0x1BCA0u, 0x1BCA3u, - 0x1D173u, 0x1D17Au); + case 0x01: return hb_in_range<hb_codepoint_t> (ch, 0x1D173u, 0x1D17Au); case 0x0E: return hb_in_range<hb_codepoint_t> (ch, 0xE0000u, 0xE0FFFu); default: return false; } diff --git a/Build/source/libs/harfbuzz/version.ac b/Build/source/libs/harfbuzz/version.ac index 6135ebdeca8..684e91eae43 100644 --- a/Build/source/libs/harfbuzz/version.ac +++ b/Build/source/libs/harfbuzz/version.ac @@ -8,4 +8,4 @@ dnl dnl -------------------------------------------------------- dnl dnl m4-include this file to define the current harfbuzz version -m4_define([harfbuzz_version], [1.5.1]) +m4_define([harfbuzz_version], [1.6.0]) |