diff --git a/src/wasm-sample/Makefile b/src/wasm-sample/Makefile new file mode 100644 index 000000000..e80d481e9 --- /dev/null +++ b/src/wasm-sample/Makefile @@ -0,0 +1,18 @@ +all: test.wasm.ttf + +%.so: %.c ../hb-wasm-api.h + clang \ + --target=wasm32-unknown-wasi \ + -Wl,--no-entry \ + -fvisibility=hidden \ + -Wl,--allow-undefined \ + -nostdlib \ + -I .. \ + $< \ + -o $@ + +%.wasm.ttf: %.ttf shape.so addTable.py + python addTable.py + +clean: + $(RM) test.wasm.ttf shape.so diff --git a/src/wasm-sample/addTable.py b/src/wasm-sample/addTable.py new file mode 100644 index 000000000..f8e38858e --- /dev/null +++ b/src/wasm-sample/addTable.py @@ -0,0 +1,11 @@ +from fontTools.ttLib import TTFont +from fontTools.ttLib.tables.DefaultTable import DefaultTable + +font = TTFont("test.ttf") + +wasm_table = DefaultTable("Wasm") +wasm_table.data = open("shape.so", "rb").read() + +font["Wasm"] = wasm_table + +font.save("test.wasm.ttf") diff --git a/src/wasm-sample/shape.c b/src/wasm-sample/shape.c new file mode 100644 index 000000000..a95c80a44 --- /dev/null +++ b/src/wasm-sample/shape.c @@ -0,0 +1,25 @@ +#define HB_WASM_INTERFACE(ret_t, name) __attribute__((export_name(#name))) ret_t name + +#include + +void debugprint1 (char *s, int32_t); +void debugprint2 (char *s, int32_t, int32_t); + +bool_t +shape (font_t font, buffer_t buffer) +{ + face_t face = font_get_face (font); + + blob_t blob = face_reference_table (face, TAG ('c','m','a','p')); + + debugprint1 ("cmap length", blob.length); + + buffer_contents_t contents = buffer_copy_contents (buffer); + + debugprint1 ("buffer length", contents.length); + + for (unsigned i = 0; i < contents.length; i++) + debugprint2 ("Codepoint", i, contents.info[i].codepoint); + + return 1; +} diff --git a/src/wasm-sample/test.ttf b/src/wasm-sample/test.ttf new file mode 100644 index 000000000..2ba04f611 Binary files /dev/null and b/src/wasm-sample/test.ttf differ