summaryrefslogtreecommitdiffstats
path: root/gfx/harfbuzz/src/wasm/sample/c
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/harfbuzz/src/wasm/sample/c')
-rw-r--r--gfx/harfbuzz/src/wasm/sample/c/Makefile25
-rw-r--r--gfx/harfbuzz/src/wasm/sample/c/shape-fallback.cc60
-rw-r--r--gfx/harfbuzz/src/wasm/sample/c/shape-ot.cc18
-rw-r--r--gfx/harfbuzz/src/wasm/sample/c/test.ttfbin0 -> 22116 bytes
4 files changed, 103 insertions, 0 deletions
diff --git a/gfx/harfbuzz/src/wasm/sample/c/Makefile b/gfx/harfbuzz/src/wasm/sample/c/Makefile
new file mode 100644
index 0000000000..4ee073b645
--- /dev/null
+++ b/gfx/harfbuzz/src/wasm/sample/c/Makefile
@@ -0,0 +1,25 @@
+ADD_TABLE = ../../../addTable.py
+
+all: test-fallback.wasm.ttf test-ot.wasm.ttf
+
+%.wasm: %.cc ../../../hb-wasm-api.h
+ clang \
+ --target=wasm32-unknown-wasi \
+ -Wl,--no-entry \
+ -fvisibility=hidden \
+ -Wl,--allow-undefined \
+ -nostdlib \
+ -I ../../.. \
+ $< \
+ -o $@
+
+test-fallback.wasm.ttf: test.ttf shape-fallback.wasm $(ADD_TABLE)
+ python $(ADD_TABLE) $< $@ shape-fallback.wasm
+
+test-ot.wasm.ttf: test.ttf shape-ot.wasm $(ADD_TABLE)
+ python $(ADD_TABLE) $< $@ shape-ot.wasm
+
+clean:
+ $(RM) test-fallback.wasm.ttf test-ot.wasm.ttf shape-fallback.wasm shape-ot.wasm
+
+.PRECIOUS: *.wasm
diff --git a/gfx/harfbuzz/src/wasm/sample/c/shape-fallback.cc b/gfx/harfbuzz/src/wasm/sample/c/shape-fallback.cc
new file mode 100644
index 0000000000..7787bbae7a
--- /dev/null
+++ b/gfx/harfbuzz/src/wasm/sample/c/shape-fallback.cc
@@ -0,0 +1,60 @@
+#define HB_WASM_INTERFACE(ret_t, name) __attribute__((export_name(#name))) ret_t name
+
+#include <hb-wasm-api.h>
+
+extern "C" {
+void debugprint (const char *s);
+void debugprint1 (const char *s, int32_t);
+void debugprint2 (const char *s, int32_t, int32_t);
+}
+
+bool_t
+shape (void *shape_plan,
+ font_t *font,
+ buffer_t *buffer,
+ const feature_t *features,
+ uint32_t num_features)
+{
+ face_t *face = font_get_face (font);
+
+ blob_t blob = BLOB_INIT;
+ face_copy_table (face, TAG ('c','m','a','p'), &blob);
+
+ debugprint1 ("cmap length", blob.length);
+
+ blob_free (&blob);
+
+ buffer_contents_t contents = BUFFER_CONTENTS_INIT;
+ if (!buffer_copy_contents (buffer, &contents))
+ return false;
+
+ debugprint1 ("buffer length", contents.length);
+
+ glyph_outline_t outline = GLYPH_OUTLINE_INIT;
+
+ for (unsigned i = 0; i < contents.length; i++)
+ {
+ char name[64];
+
+ debugprint1 ("glyph at", i);
+
+ font_glyph_to_string (font, contents.info[i].codepoint, name, sizeof (name));
+
+ debugprint (name);
+
+ contents.info[i].codepoint = font_get_glyph (font, contents.info[i].codepoint, 0);
+ contents.pos[i].x_advance = font_get_glyph_h_advance (font, contents.info[i].codepoint);
+
+ font_copy_glyph_outline (font, contents.info[i].codepoint, &outline);
+ debugprint1 ("num outline points", outline.n_points);
+ debugprint1 ("num outline contours", outline.n_contours);
+ }
+
+ glyph_outline_free (&outline);
+
+ bool_t ret = buffer_set_contents (buffer, &contents);
+
+ buffer_contents_free (&contents);
+
+ return ret;
+}
diff --git a/gfx/harfbuzz/src/wasm/sample/c/shape-ot.cc b/gfx/harfbuzz/src/wasm/sample/c/shape-ot.cc
new file mode 100644
index 0000000000..9081cfebcc
--- /dev/null
+++ b/gfx/harfbuzz/src/wasm/sample/c/shape-ot.cc
@@ -0,0 +1,18 @@
+#define HB_WASM_INTERFACE(ret_t, name) __attribute__((export_name(#name))) ret_t name
+
+#include <hb-wasm-api.h>
+
+extern "C" {
+void debugprint1 (const char *s, int32_t);
+void debugprint2 (const char *s, int32_t, int32_t);
+}
+
+bool_t
+shape (void *shape_plan,
+ font_t *font,
+ buffer_t *buffer,
+ const feature_t *features,
+ uint32_t num_features)
+{
+ return shape_with (font, buffer, features, num_features, "ot");
+}
diff --git a/gfx/harfbuzz/src/wasm/sample/c/test.ttf b/gfx/harfbuzz/src/wasm/sample/c/test.ttf
new file mode 100644
index 0000000000..2ba04f611b
--- /dev/null
+++ b/gfx/harfbuzz/src/wasm/sample/c/test.ttf
Binary files differ