[HarfBuzz] harfbuzz: Branch 'master' - 11 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Thu Jan 11 09:43:54 UTC 2018
.circleci/config.yml | 133 +++---
CMakeLists.txt | 11
src/hb-aat-layout-common-private.hh | 89 ++++
src/hb-aat-layout-morx-table.hh | 194 ++++++++--
src/hb-open-type-private.hh | 2
src/hb-private.hh | 11
test/shaping/data/Makefile.am | 4
test/shaping/data/in-house/Makefile.am | 4
test/shaping/data/text-rendering-tests/COPYING | 13
test/shaping/data/text-rendering-tests/Makefile.am | 58 --
test/shaping/data/text-rendering-tests/Makefile.sources | 51 ++
test/shaping/data/text-rendering-tests/README | 4
test/shaping/data/text-rendering-tests/fonts/TestMORXEight.ttf |binary
test/shaping/data/text-rendering-tests/fonts/TestMORXNine.ttf |binary
test/shaping/data/text-rendering-tests/tests/MORX-5.tests | 25 +
test/shaping/data/text-rendering-tests/tests/MORX-6.tests | 1
test/shaping/data/text-rendering-tests/tests/MORX-7.tests | 1
test/shaping/data/text-rendering-tests/tests/MORX-8.tests | 3
test/shaping/data/text-rendering-tests/tests/MORX-9.tests | 1
test/shaping/data/text-rendering-tests/update.sh | 48 ++
test/shaping/run-tests.py | 18
21 files changed, 511 insertions(+), 160 deletions(-)
New commits:
commit a5adc5aa84c03184fd1c8a486be80ff0af1f448c
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Thu Jan 11 10:30:22 2018 +0100
[test/text-rendering-tests] Update from upstream
Also adds an update.sh script that does this automatically.
diff --git a/test/shaping/data/text-rendering-tests/Makefile.am b/test/shaping/data/text-rendering-tests/Makefile.am
index 56247b7b..788db1f6 100644
--- a/test/shaping/data/text-rendering-tests/Makefile.am
+++ b/test/shaping/data/text-rendering-tests/Makefile.am
@@ -6,61 +6,21 @@ NULL =
lib:
@$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
+update:
+ (cd $(srcdir) && ./update.sh)
+
EXTRA_DIST = \
README \
COPYING \
+ update.sh \
extract-tests.py \
fonts \
- $(TESTS) \
+ tests \
$(NULL)
TEST_EXTENSIONS = .tests
TESTS_LOG_COMPILER = $(srcdir)/../../run-tests.py $(top_builddir)/util/hb-shape$(EXEEXT)
-TESTS = \
- tests/AVAR-1.tests \
- tests/CFF-1.tests \
- tests/CFF2-1.tests \
- tests/CFF-2.tests \
- tests/CMAP-1.tests \
- tests/CMAP-2.tests \
- tests/CVAR-1.tests \
- tests/CVAR-2.tests \
- tests/GLYF-1.tests \
- tests/GPOS-1.tests \
- tests/GPOS-2.tests \
- tests/GPOS-3.tests \
- tests/GPOS-4.tests \
- tests/GPOS-5.tests \
- tests/GSUB-1.tests \
- tests/GSUB-2.tests \
- tests/GVAR-1.tests \
- tests/GVAR-2.tests \
- tests/GVAR-3.tests \
- tests/GVAR-4.tests \
- tests/GVAR-5.tests \
- tests/GVAR-6.tests \
- tests/GVAR-7.tests \
- tests/GVAR-8.tests \
- tests/GVAR-9.tests \
- tests/HVAR-1.tests \
- tests/HVAR-2.tests \
- tests/KERN-1.tests \
- tests/KERN-2.tests \
- tests/SHBALI-3.tests \
- tests/SHKNDA-1.tests \
- $(NULL)
-DISABLED_TESTS = \
- tests/CMAP-3.tests # Non-Unicode cmap \
- tests/MORX-1.tests # Not implemented \
- tests/MORX-2.tests # Not implemented \
- tests/MORX-3.tests # Not implemented \
- tests/MORX-4.tests # Not implemented \
- tests/SHARAN-1.tests # Rounding difference \
- tests/SHBALI-1.tests # Rounding difference \
- tests/SHBALI-2.tests # Rounding difference \
- tests/SHKNDA-2.tests # Rounding difference \
- tests/SHKNDA-3.tests # Rounding difference \
- $(NULL)
+include Makefile.sources
-include $(top_srcdir)/git.mk
diff --git a/test/shaping/data/text-rendering-tests/Makefile.sources b/test/shaping/data/text-rendering-tests/Makefile.sources
new file mode 100644
index 00000000..913d4195
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/Makefile.sources
@@ -0,0 +1,51 @@
+TESTS = \
+ tests/AVAR-1.tests \
+ tests/CFF-1.tests \
+ tests/CFF2-1.tests \
+ tests/CFF-2.tests \
+ tests/CMAP-1.tests \
+ tests/CMAP-2.tests \
+ tests/CVAR-1.tests \
+ tests/CVAR-2.tests \
+ tests/GLYF-1.tests \
+ tests/GPOS-1.tests \
+ tests/GPOS-2.tests \
+ tests/GPOS-3.tests \
+ tests/GPOS-4.tests \
+ tests/GPOS-5.tests \
+ tests/GSUB-1.tests \
+ tests/GSUB-2.tests \
+ tests/GVAR-1.tests \
+ tests/GVAR-2.tests \
+ tests/GVAR-3.tests \
+ tests/GVAR-4.tests \
+ tests/GVAR-5.tests \
+ tests/GVAR-6.tests \
+ tests/GVAR-7.tests \
+ tests/GVAR-8.tests \
+ tests/GVAR-9.tests \
+ tests/HVAR-1.tests \
+ tests/HVAR-2.tests \
+ tests/KERN-1.tests \
+ tests/KERN-2.tests \
+ tests/MORX-5.tests \
+ tests/MORX-6.tests \
+ tests/MORX-7.tests \
+ tests/MORX-8.tests \
+ tests/MORX-9.tests \
+ tests/SHBALI-3.tests \
+ tests/SHKNDA-1.tests \
+ $(NULL)
+
+DISBALED_TESTS = \
+ tests/CMAP-3.tests \
+ tests/MORX-1.tests \
+ tests/MORX-2.tests \
+ tests/MORX-3.tests \
+ tests/MORX-4.tests \
+ tests/SHARAN-1.tests \
+ tests/SHBALI-1.tests \
+ tests/SHBALI-2.tests \
+ tests/SHKNDA-2.tests \
+ tests/SHKNDA-3.tests \
+ $(NULL)
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXEight.ttf b/test/shaping/data/text-rendering-tests/fonts/TestMORXEight.ttf
new file mode 100644
index 00000000..9255e996
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestMORXEight.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXNine.ttf b/test/shaping/data/text-rendering-tests/fonts/TestMORXNine.ttf
new file mode 100644
index 00000000..4371df45
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestMORXNine.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-5.tests b/test/shaping/data/text-rendering-tests/tests/MORX-5.tests
new file mode 100644
index 00000000..ca8d0864
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-5.tests
@@ -0,0 +1,25 @@
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0033:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|three at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0034:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|four at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0035:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|five at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0036:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|six at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0037:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|seven at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0038:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|eight at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0038:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|eight at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0039:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|nine at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0039:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|nine at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+2793:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|one_zero at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+2793:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|one_zero at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+24EB:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|one_one at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+24EB:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|one_one at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+24EC:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|one_two at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+24EC:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|one_two at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0058,U+0059,U+005A,U+24EC:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|C at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|one_two at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+24ED:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|one_three at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+24ED:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|one_three at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0058,U+0059,U+005A,U+24ED:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|C at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|one_three at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+24EE:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|one_four at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+24EE:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|one_four at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0058,U+0059,U+005A,U+24EE:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|C at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|one_four at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+24EF:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|one_five at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+24EF:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|one_five at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0058,U+0059,U+005A,U+24EF:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|C at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|one_five at 4558,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-6.tests b/test/shaping/data/text-rendering-tests/tests/MORX-6.tests
new file mode 100644
index 00000000..ff9c061a
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-6.tests
@@ -0,0 +1 @@
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0043,U+0044,U+0045,U+0046,U+0047,U+004F,U+004F,U+004F,U+0033,U+0031,U+0034,U+0031:[O|O at 418,0|O at 836,0|E at 1254,0|F at 2084,0|A at 2914,0|G at 3744,0|B at 4574,0|C at 5404,0|D at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|three at 8318,0|one at 9168,0|four at 10018,0|one at 10868,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-7.tests b/test/shaping/data/text-rendering-tests/tests/MORX-7.tests
new file mode 100644
index 00000000..f2508486
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-7.tests
@@ -0,0 +1 @@
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+0042,U+0043,U+0044,U+0031:[B|C at 830,0|D at 1660,0|O at 2490,0|one at 2908,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-8.tests b/test/shaping/data/text-rendering-tests/tests/MORX-8.tests
new file mode 100644
index 00000000..aa0d28b5
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-8.tests
@@ -0,0 +1,3 @@
+../fonts/TestMORXEight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0030,U+0041,U+0042,U+0043:[zero|A at 914,0|B at 1552,0|C at 2202,0]
+../fonts/TestMORXEight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0031,U+0041,U+0042,U+0043:[one|B at 914,0|C at 1564,0|A at 2196,0]
+../fonts/TestMORXEight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0032,U+0041,U+0042,U+0043:[two|C at 914,0|A at 1546,0|B at 2184,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-9.tests b/test/shaping/data/text-rendering-tests/tests/MORX-9.tests
new file mode 100644
index 00000000..a8999087
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-9.tests
@@ -0,0 +1 @@
+../fonts/TestMORXNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0041,U+0042:[B|A at 650,0|X at 1288,0|A at 1874,0|B at 2512,0]
diff --git a/test/shaping/data/text-rendering-tests/update.sh b/test/shaping/data/text-rendering-tests/update.sh
new file mode 100755
index 00000000..31960a14
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/update.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+dir=`dirname "$0"`
+
+set -ex
+if test -d text-rendering-tests; then
+ cd text-rendering-tests
+ git pull
+ cd ..
+else
+ git clone https://github.com/unicode-org/text-rendering-tests
+fi
+
+test -d fonts && git rm -rf fonts
+test -d fonts && (echo "fonts/ dir not empty; investigate."; false)
+cp -a text-rendering-tests/fonts .
+git add fonts
+
+rmdir tests || true
+test -d tests && git rm -rf tests || true
+test -d tests && (echo "tests/ dir not empty; investigate."; false)
+mkdir tests
+
+echo "NULL =" > Makefile.sources
+echo > Makefile.sources
+echo "TESTS = \\" > Makefile.sources
+
+DISABLED="DISBALED_TESTS = \\"
+for x in text-rendering-tests/testcases/*.html; do
+ test "x$x" = xtext-rendering-tests/testcases/index.html && continue
+ out=tests/`basename "$x" .html`.tests
+ "$dir"/extract-tests.py < "$x" > "$out"
+ if grep -q "^$out$" DISABLED; then
+ DISABLED="$DISABLED
+ $out \\"
+ else
+ echo " $out \\" >> Makefile.sources
+ fi
+done
+git add tests
+
+echo ' $(NULL)' >> Makefile.sources
+echo >> Makefile.sources
+echo "$DISABLED" >> Makefile.sources
+echo ' $(NULL)' >> Makefile.sources
+git add Makefile.sources
+
+git commit -e -m "[test/text-rendering-tests] Update from upstream"
commit c861daacc4255d41d2358868b917277422949dc9
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Thu Jan 11 10:11:01 2018 +0100
[test/text-rendering-tests] Add README and COPYING
diff --git a/test/shaping/data/text-rendering-tests/COPYING b/test/shaping/data/text-rendering-tests/COPYING
new file mode 100644
index 00000000..7758b2e5
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/COPYING
@@ -0,0 +1,13 @@
+Copyright 2016 Unicode Inc. All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the “License”);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an “AS IS” BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/test/shaping/data/text-rendering-tests/Makefile.am b/test/shaping/data/text-rendering-tests/Makefile.am
index 385270a2..56247b7b 100644
--- a/test/shaping/data/text-rendering-tests/Makefile.am
+++ b/test/shaping/data/text-rendering-tests/Makefile.am
@@ -7,6 +7,8 @@ lib:
@$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
EXTRA_DIST = \
+ README \
+ COPYING \
extract-tests.py \
fonts \
$(TESTS) \
diff --git a/test/shaping/data/text-rendering-tests/README b/test/shaping/data/text-rendering-tests/README
new file mode 100644
index 00000000..351f8301
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/README
@@ -0,0 +1,4 @@
+Tests in this directory are automatically imported from the
+text-rendering-tests repository owned by Unicode Consortium:
+
+ https://github.com/unicode-org/text-rendering-tests
commit 14b4d84eef18bd54287c10ce44eaef4f642f6238
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Thu Jan 11 10:08:25 2018 +0100
[aat] Fix RearrangementSubtable action
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index 76c9a608..cbc69d26 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -121,7 +121,7 @@ struct RearrangementSubtable
memcpy (buf + 2, info + end - r, r * sizeof (buf[0]));
if (l != r)
- memmove (info + start + r - l, info + start + l, (end - start - l - r) * sizeof (buf[0]));
+ memmove (info + start + r, info + start + l, (end - start - l - r) * sizeof (buf[0]));
memcpy (info + start, buf + 2, r * sizeof (buf[0]));
memcpy (info + end - l, buf, l * sizeof (buf[0]));
commit ea3e86c6401d41cf54d82692eccbf44c87be2fd5
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Thu Jan 11 09:58:42 2018 +0100
Minor
diff --git a/test/shaping/data/Makefile.am b/test/shaping/data/Makefile.am
index e76b3b87..4f2c1136 100644
--- a/test/shaping/data/Makefile.am
+++ b/test/shaping/data/Makefile.am
@@ -6,4 +6,8 @@ SUBDIRS = \
text-rendering-tests \
$(NULL)
+# Convenience targets:
+lib:
+ @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
+
-include $(top_srcdir)/git.mk
diff --git a/test/shaping/data/in-house/Makefile.am b/test/shaping/data/in-house/Makefile.am
index a9893a89..2f955191 100644
--- a/test/shaping/data/in-house/Makefile.am
+++ b/test/shaping/data/in-house/Makefile.am
@@ -2,6 +2,10 @@
NULL =
+# Convenience targets:
+lib:
+ @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
+
EXTRA_DIST = \
COPYING \
fonts \
diff --git a/test/shaping/data/text-rendering-tests/Makefile.am b/test/shaping/data/text-rendering-tests/Makefile.am
index 2798e512..385270a2 100644
--- a/test/shaping/data/text-rendering-tests/Makefile.am
+++ b/test/shaping/data/text-rendering-tests/Makefile.am
@@ -2,6 +2,10 @@
NULL =
+# Convenience targets:
+lib:
+ @$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
+
EXTRA_DIST = \
extract-tests.py \
fonts \
commit 800e4ae80232f022404be155afd497b0421a6a64
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Thu Jan 11 09:57:55 2018 +0100
[aat] Mark state-machine-based lookup as completely unsafe-to-break
To be improved later.
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index f4e5cccc..76c9a608 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -63,6 +63,8 @@ struct RearrangementSubtable
hb_glyph_info_t *info = c->buffer->info;
unsigned int count = c->buffer->len;
+ c->buffer->unsafe_to_break (0, count); /* TODO Improve. */
+
for (unsigned int i = 0; i < count; i++)
{
unsigned int klass = machine.get_class (info[i].codepoint, num_glyphs);
commit ca42d961293a9e4dfd0817c1a02d454008583282
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Thu Jan 11 09:15:34 2018 +0100
[aat] Implement RearrangementSubtable
diff --git a/src/hb-aat-layout-common-private.hh b/src/hb-aat-layout-common-private.hh
index 4b96ee6c..32ba6326 100644
--- a/src/hb-aat-layout-common-private.hh
+++ b/src/hb-aat-layout-common-private.hh
@@ -164,7 +164,7 @@ struct UnsizedArrayOf
return_trace (c->check_array (arrayZ, arrayZ[0].static_size, count));
}
- protected:
+ public:
Type arrayZ[VAR];
public:
DEFINE_SIZE_ARRAY (0, arrayZ);
@@ -221,7 +221,7 @@ struct LookupSegmentSingle
GlyphID first; /* First GlyphID in this segment */
T value; /* The lookup value (only one) */
public:
- DEFINE_SIZE_STATIC (4 + sizeof (T));
+ DEFINE_SIZE_STATIC (4 + T::static_size);
};
template <typename T>
@@ -323,7 +323,7 @@ struct LookupSingle
GlyphID glyph; /* Last GlyphID */
T value; /* The lookup value (only one) */
public:
- DEFINE_SIZE_STATIC (4 + sizeof (T));
+ DEFINE_SIZE_STATIC (4 + T::static_size);
};
template <typename T>
@@ -424,7 +424,7 @@ struct Lookup
};
-struct Class
+struct ClassTable
{
inline unsigned int get_class (hb_codepoint_t glyph_id) const
{
@@ -448,6 +448,87 @@ struct Class
DEFINE_SIZE_ARRAY (4, classArrayZ);
};
+
+/*
+ * (Extended) State Table
+ */
+
+template <typename T>
+struct Entry
+{
+ inline bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && data.sanitize (c));
+ }
+
+ public:
+ HBUINT16 newState; /* Byte offset from beginning of state table to the new state. */
+ HBUINT16 flags; /* Table specific. */
+ T data; /* Optional offsets to per-glyph tables. */
+ public:
+ DEFINE_SIZE_STATIC (4 + T::static_size);
+};
+
+template <>
+struct Entry<void>
+{
+ inline bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ public:
+ HBUINT16 newState; /* Byte offset from beginning of state table to the new state. */
+ HBUINT16 flags; /* Table specific. */
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+template <typename Types, typename Extra>
+struct StateTable
+{
+ typedef typename Types::HBUINT HBUINT;
+ typedef typename Types::HBUSHORT HBUSHORT;
+ typedef typename Types::ClassType ClassType;
+
+ inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+ { return (this+classTable).get_class (glyph_id, num_glyphs); }
+
+
+ inline const Entry<Extra> *get_entry (unsigned int state, unsigned int klass) const
+ {
+ const HBUSHORT *states = (this+stateArrayTable).arrayZ;
+ const Entry<Extra> *entries = (this+entryTable).arrayZ;
+
+ unsigned int entry = states[state * nClasses + klass]; /* XXX bound check. */
+
+ return &entries[entry]; /* XXX bound check. */
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c, unsigned int num_glyphs) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (true);
+ return_trace (c->check_struct (this)); /* XXX */
+ }
+
+ protected:
+ HBUINT nClasses; /* Number of classes, which is the number of indices
+ * in a single line in the state array. */
+ OffsetTo<ClassType, HBUINT>
+ classTable; /* Offset to the class table. */
+ OffsetTo<UnsizedArrayOf<HBUSHORT>, HBUINT>
+ stateArrayTable;/* Offset to the state array. */
+ OffsetTo<UnsizedArrayOf<Entry<Extra> >, HBUINT>
+ entryTable; /* Offset to the entry array. */
+
+ public:
+ DEFINE_SIZE_UNION (2, format);
+};
+
+
} /* namespace AAT */
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index e7eac2b2..f4e5cccc 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -39,21 +39,124 @@ namespace AAT {
using namespace OT;
+template <typename Types>
struct RearrangementSubtable
{
+ enum {
+ MarkFirst = 0x8000,
+ DontAdvance = 0x4000,
+ MarkLast = 0x2000,
+ Verb = 0x000F,
+ };
+
inline bool apply (hb_apply_context_t *c) const
{
TRACE_APPLY (this);
- /* TODO */
- return_trace (false);
+
+ bool ret = false;
+ unsigned int num_glyphs = c->face->get_num_glyphs ();
+
+ unsigned int state = 0;
+ unsigned int start = 0;
+ unsigned int end = 0;
+
+ hb_glyph_info_t *info = c->buffer->info;
+ unsigned int count = c->buffer->len;
+
+ for (unsigned int i = 0; i < count; i++)
+ {
+ unsigned int klass = machine.get_class (info[i].codepoint, num_glyphs);
+ const Entry<void> *entry = machine.get_entry (state, klass);
+ if (unlikely (!entry))
+ break;
+
+ unsigned int flags = entry->flags;
+
+ if (flags & MarkFirst)
+ start = i;
+
+ if (flags & MarkLast)
+ end = i + 1;
+
+ if ((flags & Verb) && start < end)
+ {
+ /* The following map has two nibbles, for start-side
+ * and end-side. Values of 0,1,2 mean move that many
+ * to the other side. Value of 3 means move 2 and
+ * flip them. */
+ static const unsigned char map[16] =
+ {
+ 0x00, /* 0 no change */
+ 0x10, /* 1 Ax => xA */
+ 0x01, /* 2 xD => Dx */
+ 0x11, /* 3 AxD => DxA */
+ 0x20, /* 4 ABx => xAB */
+ 0x30, /* 5 ABx => xBA */
+ 0x02, /* 6 xCD => CDx */
+ 0x03, /* 7 xCD => DCx */
+ 0x12, /* 8 AxCD => CDxA */
+ 0x13, /* 9 AxCD => DCxA */
+ 0x21, /* 10 ABxD => DxAB */
+ 0x31, /* 11 ABxD => DxBA */
+ 0x22, /* 12 ABxCD => CDxAB */
+ 0x32, /* 13 ABxCD => CDxBA */
+ 0x23, /* 14 ABxCD => DCxAB */
+ 0x33, /* 15 ABxCD => DCxBA */
+ };
+
+ unsigned int m = map[flags & Verb];
+ unsigned int l = MIN<unsigned int> (2, m >> 4);
+ unsigned int r = MIN<unsigned int> (2, m & 0x0F);
+ bool reverse_l = 3 == (m >> 4);
+ bool reverse_r = 3 == (m & 0x0F);
+
+ if (end - start >= l + r)
+ {
+ c->buffer->merge_clusters (start, end);
+
+ hb_glyph_info_t buf[4];
+ memcpy (buf, info + start, l * sizeof (buf[0]));
+ memcpy (buf + 2, info + end - r, r * sizeof (buf[0]));
+
+ if (l != r)
+ memmove (info + start + r - l, info + start + l, (end - start - l - r) * sizeof (buf[0]));
+
+ memcpy (info + start, buf + 2, r * sizeof (buf[0]));
+ memcpy (info + end - l, buf, l * sizeof (buf[0]));
+ if (reverse_l)
+ {
+ buf[0] = info[end - 1];
+ info[end - 1] = info[end - 2];
+ info[end - 2] = buf[0];
+ }
+ if (reverse_r)
+ {
+ buf[0] = info[start];
+ info[start] = info[start + 1];
+ info[start + 1] = buf[0];
+ }
+ }
+ }
+
+ if (false/* XXX*/ && flags & DontAdvance)
+ i--; /* XXX Detect infinite loop. */
+
+ state = entry->newState;
+ }
+
+ return_trace (ret);
}
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- /* TODO */
- return_trace (false);
+ return_trace (machine.sanitize (c, 0/*XXX*/));
}
+
+ protected:
+ StateTable<Types, void> machine;
+ public:
+ DEFINE_SIZE_MIN (2);
};
struct ContextualSubtable
@@ -95,11 +198,12 @@ struct NoncontextualSubtable
inline bool apply (hb_apply_context_t *c) const
{
TRACE_APPLY (this);
- hb_buffer_t *buffer = c->buffer;
- hb_glyph_info_t *info = buffer->info;
- unsigned int num_glyphs = c->face->get_num_glyphs ();
+
bool ret = false;
- unsigned int count = buffer->len;
+ unsigned int num_glyphs = c->face->get_num_glyphs ();
+
+ hb_glyph_info_t *info = c->buffer->info;
+ unsigned int count = c->buffer->len;
for (unsigned int i = 0; i < count; i++)
{
const GlyphID *replacement = substitute.get_value (info[i].codepoint, num_glyphs);
@@ -109,6 +213,7 @@ struct NoncontextualSubtable
ret = true;
}
}
+
return_trace (ret);
}
@@ -163,11 +268,13 @@ struct Feature
};
-template <typename HBUINT>
+template <typename Types>
struct ChainSubtable
{
template <typename> struct Chain;
- friend struct Chain<HBUINT>;
+ friend struct Chain<Types>;
+
+ typedef typename Types::HBUINT HBUINT;
inline unsigned int get_size (void) const { return length; }
inline unsigned int get_type (void) const { return coverage & 0xFF; }
@@ -214,9 +321,10 @@ struct ChainSubtable
protected:
HBUINT length; /* Total subtable length, including this header. */
HBUINT coverage; /* Coverage flags and subtable type. */
- HBUINT32 subFeatureFlags;/* The 32-bit mask identifying which subtable this is. */
+ HBUINT32 subFeatureFlags;/* The 32-bit mask identifying which subtable this is. */
union {
- RearrangementSubtable rearrangement;
+ RearrangementSubtable<Types>
+ rearrangement;
ContextualSubtable contextual;
LigatureSubtable ligature;
NoncontextualSubtable noncontextual;
@@ -226,17 +334,19 @@ struct ChainSubtable
DEFINE_SIZE_MIN (2 * sizeof (HBUINT) + 4);
};
-template <typename HBUINT>
+template <typename Types>
struct Chain
{
+ typedef typename Types::HBUINT HBUINT;
+
inline void apply (hb_apply_context_t *c) const
{
- const ChainSubtable<HBUINT> *subtable = &StructAtOffset<ChainSubtable<HBUINT> > (featureZ, featureZ[0].static_size * featureCount);
+ const ChainSubtable<Types> *subtable = &StructAtOffset<ChainSubtable<Types> > (featureZ, featureZ[0].static_size * featureCount);
unsigned int count = subtableCount;
for (unsigned int i = 0; i < count; i++)
{
subtable->apply (c);
- subtable = &StructAfter<ChainSubtable<HBUINT> > (*subtable);
+ subtable = &StructAfter<ChainSubtable<Types> > (*subtable);
}
}
@@ -253,13 +363,13 @@ struct Chain
if (!c->check_array (featureZ, featureZ[0].static_size, featureCount))
return_trace (false);
- const ChainSubtable<HBUINT> *subtable = &StructAtOffset<ChainSubtable<HBUINT> > (featureZ, featureZ[0].static_size * featureCount);
+ const ChainSubtable<Types> *subtable = &StructAtOffset<ChainSubtable<Types> > (featureZ, featureZ[0].static_size * featureCount);
unsigned int count = subtableCount;
for (unsigned int i = 0; i < count; i++)
{
if (!subtable->sanitize (c))
return_trace (false);
- subtable = &StructAfter<ChainSubtable<HBUINT> > (*subtable);
+ subtable = &StructAfter<ChainSubtable<Types> > (*subtable);
}
return_trace (true);
@@ -272,7 +382,7 @@ struct Chain
HBUINT subtableCount; /* The number of subtables in the chain. */
Feature featureZ[VAR]; /* Features. */
- ChainSubtable<HBUINT> subtableX[VAR]; /* Subtables. */
+ ChainSubtable<Types> subtableX[VAR]; /* Subtables. */
// subtableGlyphCoverageArray if major == 3
public:
@@ -284,20 +394,22 @@ struct Chain
* The 'mort'/'morx' Tables
*/
-template <typename HBUINT>
+template <typename Types>
struct mortmorx
{
static const hb_tag_t mortTag = HB_AAT_TAG_MORT;
static const hb_tag_t morxTag = HB_AAT_TAG_MORX;
+ typedef typename Types::HBUINT HBUINT;
+
inline void apply (hb_apply_context_t *c) const
{
- const Chain<HBUINT> *chain = chains;
+ const Chain<Types> *chain = chains;
unsigned int count = chainCount;
for (unsigned int i = 0; i < count; i++)
{
chain->apply (c);
- chain = &StructAfter<Chain<HBUINT> > (*chain);
+ chain = &StructAfter<Chain<Types> > (*chain);
}
}
@@ -305,17 +417,17 @@ struct mortmorx
{
TRACE_SANITIZE (this);
if (!version.sanitize (c) ||
- version.major >> (sizeof (HBUINT) == 4) != 1 ||
+ (version.major >> (sizeof (HBUINT) == 4 ? 1 : 0)) != 1 ||
!chainCount.sanitize (c))
return_trace (false);
- const Chain<HBUINT> *chain = chains;
+ const Chain<Types> *chain = chains;
unsigned int count = chainCount;
for (unsigned int i = 0; i < count; i++)
{
if (!chain->sanitize (c, version.major))
return_trace (false);
- chain = &StructAfter<Chain<HBUINT> > (*chain);
+ chain = &StructAfter<Chain<Types> > (*chain);
}
return_trace (true);
@@ -326,18 +438,44 @@ struct mortmorx
* 1 for mort, 2 or 3 for morx. */
HBUINT32 chainCount; /* Number of metamorphosis chains contained in this
* table. */
- Chain<HBUINT> chains[VAR]; /* Chains. */
+ Chain<Types> chains[VAR]; /* Chains. */
public:
DEFINE_SIZE_MIN (8);
};
-struct mort : mortmorx<HBUINT16>
+struct MorxTypes
+{
+ typedef HBUINT32 HBUINT;
+ typedef HBUINT16 HBUSHORT;
+ struct ClassType : Lookup<HBUINT16>
+ {
+ inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+ {
+ const HBUINT16 *v = get_value (glyph_id, num_glyphs);
+ return v ? *v : 1;
+ }
+ };
+};
+struct MortTypes
+{
+ typedef HBUINT16 HBUINT;
+ typedef HBUINT8 HBUSHORT;
+ struct ClassType : ClassTable
+ {
+ inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs HB_UNUSED) const
+ {
+ return ClassTable::get_class (glyph_id);
+ }
+ };
+};
+
+struct mort : mortmorx<MortTypes>
{
static const hb_tag_t tableTag = HB_AAT_TAG_MORT;
};
-struct morx : mortmorx<HBUINT32>
+struct morx : mortmorx<MorxTypes>
{
static const hb_tag_t tableTag = HB_AAT_TAG_MORX;
};
diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index 29bf7ba2..6d8bc6cb 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
@@ -527,8 +527,6 @@ struct Supplier
};
-
-
/*
*
* The OpenType Font File: Data Types
diff --git a/src/hb-private.hh b/src/hb-private.hh
index 9cad5685..62c9fb27 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
@@ -298,9 +298,10 @@ static_assert ((sizeof (hb_var_int_t) == 4), "");
/* Misc */
-/* Void! */
-struct _hb_void_t {};
-typedef const _hb_void_t *hb_void_t;
+/*
+ * Void!
+ */
+typedef const struct _hb_void_t *hb_void_t;
#define HB_VOID ((const _hb_void_t *) nullptr)
/* Return the number of 1 bits in mask. */
commit 5dbbd0fdb9a343554112a846b392803f11c13197
Author: Ebrahim Byagowi <ebrahim at gnu.org>
Date: Thu Jan 11 12:33:22 2018 +0330
Move the #define of _GNU_SOURCE to the top of hb-private.hh (#697)
This fixes the build on Cygwin.
diff --git a/src/hb-private.hh b/src/hb-private.hh
index 9a1f2c51..9cad5685 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
@@ -29,6 +29,8 @@
#ifndef HB_PRIVATE_HH
#define HB_PRIVATE_HH
+#define _GNU_SOURCE 1
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -87,8 +89,6 @@ extern "C" void hb_free_impl(void *ptr);
#endif // __cplusplus < 201103L
-#define _GNU_SOURCE 1
-
#if (defined(__GNUC__) || defined(__clang__)) && defined(__OPTIMIZE__)
#define likely(expr) (__builtin_expect (!!(expr), 1))
#define unlikely(expr) (__builtin_expect (!!(expr), 0))
commit 90e3c9e69e93e05d9fb534fd43b5c99cf58a7cb4
Author: Ebrahim Byagowi <ebrahim at gnu.org>
Date: Thu Jan 11 12:31:05 2018 +0330
[cmake] Fix hb-blob test (#699)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e45c5bc0..4d52668b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -107,10 +107,10 @@ check_include_file(unistd.h HAVE_UNIST_H)
if (${HAVE_UNIST_H})
add_definitions(-DHAVE_UNIST_H)
endif ()
-check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
-if (${HAVE_SYS_MMAN_H})
- add_definitions(-DHAVE_SYS_MMAN_H)
-endif ()
+#check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
+#if (${HAVE_SYS_MMAN_H})
+# add_definitions(-DHAVE_SYS_MMAN_H)
+#endif ()
check_include_file(xlocale.h HAVE_XLOCALE_H)
if (${HAVE_XLOCALE_H})
add_definitions(-DHAVE_XLOCALE_H)
commit 1461965c2220cd957c26b3fe5835200e426bc715
Author: Ebrahim Byagowi <ebrahim at gnu.org>
Date: Thu Jan 11 08:48:22 2018 +0330
[test] Better tests output by converting stderr to stdout (#696)
https://gitlab.kitware.com/cmake/cmake/issues/17630
diff --git a/test/shaping/run-tests.py b/test/shaping/run-tests.py
index 36ec0657..c65e7142 100755
--- a/test/shaping/run-tests.py
+++ b/test/shaping/run-tests.py
@@ -8,8 +8,8 @@ def cmd(command):
p = subprocess.Popen (
command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait ()
- print (p.stderr.read (), file=sys.stderr, end='')
- return p.stdout.read ().decode ("utf-8").strip(), p.returncode
+ print (p.stderr.read (), end="") # file=sys.stderr
+ return p.stdout.read ().decode ("utf-8").strip (), p.returncode
args = sys.argv[1:]
@@ -61,7 +61,7 @@ for filename in args:
unicodes] + (options.split (' ') if options else []))
if returncode:
- print ("hb-shape --font-funcs=ft failed.")
+ print ("hb-shape --font-funcs=ft failed.") # file=sys.stderr
fails = fails + 1
#continue
@@ -70,13 +70,13 @@ for filename in args:
unicodes] + (options.split (' ') if options else []))
if returncode:
- print ("ERROR: hb-shape --font-funcs=ot failed.")
+ print ("ERROR: hb-shape --font-funcs=ot failed.") # file=sys.stderr
fails = fails + 1
#continue
if glyphs1 != glyphs2:
- print ("FT funcs: " + glyphs1)
- print ("OT funcs: " + glyphs2)
+ print ("FT funcs: " + glyphs1) # file=sys.stderr
+ print ("OT funcs: " + glyphs2) # file=sys.stderr
fails = fails + 1
if reference:
@@ -84,13 +84,13 @@ for filename in args:
continue
if glyphs1.strip() != glyphs_expected.strip():
- print ("Actual: " + glyphs1, file=sys.stderr)
- print ("Expected: " + glyphs_expected, file=sys.stderr)
+ print ("Actual: " + glyphs1) # file=sys.stderr
+ print ("Expected: " + glyphs_expected) # file=sys.stderr
fails = fails + 1
if fails != 0:
if not reference:
- print (str (fails) + " tests failed.")
+ print (str (fails) + " tests failed.") # file=sys.stderr
sys.exit (1)
else:
commit ebb9b7d6335536804b50002fb83dd30da42a8ad5
Author: Ebrahim Byagowi <ebrahim at gnu.org>
Date: Thu Jan 11 08:15:06 2018 +0330
[test] Print shaping output on CI fails (#695)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 43ddc4ac..874c587d 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -46,7 +46,7 @@ jobs:
- run: apt update && apt install -y pkg-config ragel gtk-doc-tools libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev
- run: cmake -DHB_HAVE_FREETYPE=ON -DHB_HAVE_GRAPHITE2=ON -DHB_BUILTIN_UCDN=ON -DHB_HAVE_GLIB=ON -DHB_HAVE_ICU=ON -DHB_BUILD_UTILS=ON -Bbuild -H. -GNinja
- run: ninja -Cbuild
- - run: ninja -Cbuild test
+ - run: CTEST_OUTPUT_ON_FAILURE=1 ninja -Cbuild test
- run: ninja -Cbuild install
cmake-oracledeveloperstudio:
@@ -58,7 +58,7 @@ jobs:
- run: wget http://$ODSUSER:$ODSPASS@behdad.org/harfbuzz-private/OracleDeveloperStudio12.6-linux-x86-bin.tar.bz2 && tar xf OracleDeveloperStudio12.6-linux-x86-bin.tar.bz2 --owner root --group root --no-same-owner
- run: CC=/root/project/OracleDeveloperStudio12.6-linux-x86-bin/developerstudio12.6/bin/suncc CXX=/root/project/OracleDeveloperStudio12.6-linux-x86-bin/developerstudio12.6/bin/sunCC cmake -DHB_HAVE_GRAPHITE2=ON -DHB_BUILTIN_UCDN=ON -DHB_HAVE_GLIB=ON -DHB_HAVE_ICU=ON -DHB_HAVE_FREETYPE=ON -Bbuild -H.
- run: make -Cbuild
- - run: make -Cbuild test
+ - run: CTEST_OUTPUT_ON_FAILURE=1 make -Cbuild test
- run: make -Cbuild install
crosscompile-notest-djgpp:
diff --git a/test/shaping/run-tests.py b/test/shaping/run-tests.py
index b3f5ffcd..36ec0657 100755
--- a/test/shaping/run-tests.py
+++ b/test/shaping/run-tests.py
@@ -61,7 +61,7 @@ for filename in args:
unicodes] + (options.split (' ') if options else []))
if returncode:
- print ("hb-shape --font-funcs=ft failed.", file=sys.stderr)
+ print ("hb-shape --font-funcs=ft failed.")
fails = fails + 1
#continue
@@ -70,13 +70,13 @@ for filename in args:
unicodes] + (options.split (' ') if options else []))
if returncode:
- print ("ERROR: hb-shape --font-funcs=ot failed.", file=sys.stderr)
+ print ("ERROR: hb-shape --font-funcs=ot failed.")
fails = fails + 1
#continue
if glyphs1 != glyphs2:
- print ("FT funcs: " + glyphs1, file=sys.stderr)
- print ("OT funcs: " + glyphs2, file=sys.stderr)
+ print ("FT funcs: " + glyphs1)
+ print ("OT funcs: " + glyphs2)
fails = fails + 1
if reference:
commit e24bea8e91ba9f447f1f7f252bdefacef1f83593
Author: Ebrahim Byagowi <ebrahim at gnu.org>
Date: Wed Jan 10 23:51:56 2018 +0330
[cmake] Another try on making sure feature testing is working (#691)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 8c02624e..43ddc4ac 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -2,26 +2,23 @@ version: 2
jobs:
- oracledeveloperstudio:
+ distcheck:
docker:
- - image: fedora
+ - image: dockcross/base
steps:
- checkout
- - run: dnf install -y gcc ragel cmake make which glib2-devel freetype-devel cairo-devel libicu-devel graphite2-devel wget tar bzip2 python || true
- - run: wget http://$ODSUSER:$ODSPASS@behdad.org/harfbuzz-private/OracleDeveloperStudio12.6-linux-x86-bin.tar.bz2 && tar xf OracleDeveloperStudio12.6-linux-x86-bin.tar.bz2 --owner root --group root --no-same-owner
- - run: CC=/root/project/OracleDeveloperStudio12.6-linux-x86-bin/developerstudio12.6/bin/suncc CXX=/root/project/OracleDeveloperStudio12.6-linux-x86-bin/developerstudio12.6/bin/sunCC cmake -DHB_HAVE_GRAPHITE2=ON -DHB_BUILTIN_UCDN=ON -DHB_HAVE_GLIB=ON -DHB_HAVE_ICU=ON -DHB_HAVE_FREETYPE=ON -Bbuild -H.
- - run: make -Cbuild
- - run: make -Cbuild test
- - run: make -Cbuild install
+ - run: apt update && apt install -y pkg-config ragel gtk-doc-tools libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev
+ - run: ./autogen.sh && make distcheck
+ - run: make distdir && cd harfbuzz-* && cmake -DDHB_CHECK=ON -Bbuild -H. -GNinja && ninja -Cbuild && CTEST_OUTPUT_ON_FAILURE=1 ninja -Cbuild test && ninja -Cbuild install
- fedora-out-of-tree:
+ alpine:
docker:
- - image: fedora
+ - image: alpine
steps:
- checkout
- - run: dnf install -y pkg-config ragel gcc gcc-c++ automake autoconf libtool make which glib2-devel freetype-devel cairo-devel libicu-devel gobject-introspection-devel graphite2-devel redhat-rpm-config || true
- - run: NOCONFIGURE=1 ./autogen.sh --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2
- - run: mkdir build && cd build && ../configure && make && make check
+ - run: apk update && apk add ragel make pkgconfig libtool autoconf automake gettext gcc g++ glib-dev freetype-dev cairo-dev
+ - run: ./autogen.sh
+ - run: make && make check
archlinux:
docker:
@@ -32,16 +29,16 @@ jobs:
- run: ./autogen.sh --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2
- run: make && make check
- freebsd9:
+ fedora-outoftreebuild:
docker:
- - image: donbowman/freebsd-cross-build
+ - image: fedora
steps:
- checkout
- - run: apt update && apt install -y pkg-config ragel
- - run: ./autogen.sh --prefix=/freebsd --host=x86_64-pc-freebsd9
- - run: make
+ - run: dnf install -y pkg-config ragel gcc gcc-c++ automake autoconf libtool make which glib2-devel freetype-devel cairo-devel libicu-devel gobject-introspection-devel graphite2-devel redhat-rpm-config || true
+ - run: NOCONFIGURE=1 ./autogen.sh --with-freetype --with-glib --with-gobject --with-cairo --with-icu --with-graphite2
+ - run: mkdir build && cd build && ../configure && make && make check
- base:
+ cmake-gcc:
docker:
- image: dockcross/base
steps:
@@ -52,16 +49,37 @@ jobs:
- run: ninja -Cbuild test
- run: ninja -Cbuild install
- distcheck:
+ cmake-oracledeveloperstudio:
docker:
- - image: dockcross/base
+ - image: fedora
steps:
- checkout
- - run: apt update && apt install -y pkg-config ragel gtk-doc-tools libfreetype6-dev libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev
- - run: ./autogen.sh && make distcheck
- - run: make distdir && cd harfbuzz-* && cmake -DDHB_CHECK=ON -Bbuild -H. -GNinja && ninja -Cbuild && CTEST_OUTPUT_ON_FAILURE=1 ninja -Cbuild test && ninja -Cbuild install
+ - run: dnf install -y gcc ragel cmake make which glib2-devel freetype-devel cairo-devel libicu-devel graphite2-devel wget tar bzip2 python || true
+ - run: wget http://$ODSUSER:$ODSPASS@behdad.org/harfbuzz-private/OracleDeveloperStudio12.6-linux-x86-bin.tar.bz2 && tar xf OracleDeveloperStudio12.6-linux-x86-bin.tar.bz2 --owner root --group root --no-same-owner
+ - run: CC=/root/project/OracleDeveloperStudio12.6-linux-x86-bin/developerstudio12.6/bin/suncc CXX=/root/project/OracleDeveloperStudio12.6-linux-x86-bin/developerstudio12.6/bin/sunCC cmake -DHB_HAVE_GRAPHITE2=ON -DHB_BUILTIN_UCDN=ON -DHB_HAVE_GLIB=ON -DHB_HAVE_ICU=ON -DHB_HAVE_FREETYPE=ON -Bbuild -H.
+ - run: make -Cbuild
+ - run: make -Cbuild test
+ - run: make -Cbuild install
+
+ crosscompile-notest-djgpp:
+ docker:
+ - image: quay.io/ebraminio/djgpp
+ steps:
+ - checkout
+ - run: apt update && apt install -y ragel pkg-config libtool autoconf
+ - run: CFLAGS="-Wno-attributes" CXXFLAGS="-Wno-attributes" ./autogen.sh --prefix=/usr/local/djgpp --host=i586-pc-msdosdjgpp
+ - run: make
- psvita:
+ crosscompile-notest-freebsd9:
+ docker:
+ - image: donbowman/freebsd-cross-build
+ steps:
+ - checkout
+ - run: apt update && apt install -y pkg-config ragel
+ - run: ./autogen.sh --prefix=/freebsd --host=x86_64-pc-freebsd9
+ - run: make
+
+ crosscompile-notest-psvita:
docker:
- image: dockcross/base
steps:
@@ -71,7 +89,7 @@ jobs:
- run: ./autogen.sh --prefix=/usr/local/vitasdk/arm-vita-eabi --host=arm-vita-eabi
- run: make
- android-arm:
+ crosscompile-cmake-notest-android-arm:
docker:
- image: dockcross/android-arm
steps:
@@ -80,7 +98,7 @@ jobs:
- run: cmake -Bbuild -H. -GNinja
- run: ninja -Cbuild
- browser-asmjs:
+ crosscompile-cmake-notest-browser-asmjs:
docker:
- image: dockcross/browser-asmjs
steps:
@@ -89,7 +107,7 @@ jobs:
- run: cmake -Bbuild -H. -GNinja
- run: ninja -Cbuild
- linux-arm64:
+ crosscompile-cmake-notest-linux-arm64:
docker:
- image: dockcross/linux-arm64
steps:
@@ -98,7 +116,7 @@ jobs:
- run: cmake -Bbuild -H. -GNinja
- run: ninja -Cbuild
- linux-mips:
+ crosscompile-cmake-notest-linux-mips:
docker:
- image: dockcross/linux-mips
steps:
@@ -107,7 +125,7 @@ jobs:
- run: cmake -Bbuild -H. -GNinja
- run: ninja -Cbuild
- windows-x64:
+ crosscompile-cmake-notest-windows-x64:
docker:
- image: dockcross/windows-x64
steps:
@@ -116,39 +134,32 @@ jobs:
- run: cmake -Bbuild -H. -GNinja
- run: ninja -Cbuild
- alpine:
- docker:
- - image: alpine
- steps:
- - checkout
- - run: apk update && apk add ragel make pkgconfig libtool autoconf automake gettext gcc g++ glib-dev freetype-dev cairo-dev
- - run: ./autogen.sh
- - run: make && make check
-
- dos:
- docker:
- - image: quay.io/ebraminio/djgpp
- steps:
- - checkout
- - run: apt update && apt install -y ragel pkg-config libtool autoconf
- - run: CFLAGS="-Wno-attributes" CXXFLAGS="-Wno-attributes" ./autogen.sh --prefix=/usr/local/djgpp --host=i586-pc-msdosdjgpp
- - run: make
-
workflows:
version: 2
build:
jobs:
- #- oracledeveloperstudio
- #- fedora-out-of-tree
- - archlinux
- - freebsd9
- - base
+ # both autotools and cmake
- distcheck
- - psvita
- - android-arm
- - browser-asmjs
- - linux-arm64
- - linux-mips
- - windows-x64
+
+ # autotools based builds
- alpine
- - dos
+ - archlinux
+ - fedora-outoftreebuild
+
+ # cmake based builds
+ - cmake-gcc
+ - cmake-oracledeveloperstudio
+
+ # crosscompiles
+ # they can't be test thus are without tests
+ ## autotools
+ - crosscompile-notest-djgpp
+ - crosscompile-notest-freebsd9
+ - crosscompile-notest-psvita
+
+ ## cmake
+ - crosscompile-cmake-notest-android-arm
+ - crosscompile-cmake-notest-browser-asmjs
+ - crosscompile-cmake-notest-linux-arm64
+ - crosscompile-cmake-notest-linux-mips
+ - crosscompile-cmake-notest-windows-x64
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a2599b54..e45c5bc0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -94,24 +94,23 @@ include (CheckFunctionExists)
include (CheckIncludeFile)
macro (check_funcs) # Similar to AC_CHECK_FUNCS of autotools
foreach (func_name ${ARGN})
- set (RESULT OFF)
- check_function_exists(${func_name} RESULT)
- if (${RESULT})
- string(TOUPPER ${func_name} definiton_to_add)
+ string(TOUPPER ${func_name} definiton_to_add)
+ check_function_exists(${func_name} HAVE_${definiton_to_add})
+ if (${HAVE_${definiton_to_add}})
add_definitions(-DHAVE_${definiton_to_add})
endif ()
endforeach ()
endmacro ()
-check_funcs(atexit mprotect sysconf getpagesize mmap isatty newlocale strtod_l)
+check_funcs(atexit mprotect sysconf mmap strtod_l) #TODO: getpagesize newlocale isatty
check_include_file(unistd.h HAVE_UNIST_H)
if (${HAVE_UNIST_H})
add_definitions(-DHAVE_UNIST_H)
endif ()
-#check_include_file(sys/mman.h HAVE_SYS_MMAN_H) enable this sometime
-#if (${HAVE_SYS_MMAN_H})
-# add_definitions(-DHAVE_SYS_MMAN_H)
-#endif ()
+check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
+if (${HAVE_SYS_MMAN_H})
+ add_definitions(-DHAVE_SYS_MMAN_H)
+endif ()
check_include_file(xlocale.h HAVE_XLOCALE_H)
if (${HAVE_XLOCALE_H})
add_definitions(-DHAVE_XLOCALE_H)
More information about the HarfBuzz
mailing list