From e79a7318c4956fa9a8974812332480ccc5a13991 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 23 Feb 2023 09:03:06 -0700 Subject: [PATCH] [wasm] Start adding wasm-api --- src/harfbuzz-subset.cc | 1 - src/harfbuzz.cc | 1 - src/hb-wasm-api.h | 29 ++++++++++++++++----------- src/hb-wasm-api.hh | 45 ++++++++++++++++++++++++++++++++++++++++++ src/hb-wasm-font.hh | 44 +++++++++++++++++++++++++++++++++++++++++ src/hb-wasm-shape.cc | 4 ++-- 6 files changed, 108 insertions(+), 16 deletions(-) create mode 100644 src/hb-wasm-api.hh create mode 100644 src/hb-wasm-font.hh diff --git a/src/harfbuzz-subset.cc b/src/harfbuzz-subset.cc index 743a3539d..c0e23b3eb 100644 --- a/src/harfbuzz-subset.cc +++ b/src/harfbuzz-subset.cc @@ -60,4 +60,3 @@ #include "hb-subset.cc" #include "hb-ucd.cc" #include "hb-unicode.cc" -#include "hb-wasm-shape.cc" diff --git a/src/harfbuzz.cc b/src/harfbuzz.cc index 5b8196126..d7e8a93f3 100644 --- a/src/harfbuzz.cc +++ b/src/harfbuzz.cc @@ -58,4 +58,3 @@ #include "hb-ucd.cc" #include "hb-unicode.cc" #include "hb-uniscribe.cc" -#include "hb-wasm-shape.cc" diff --git a/src/hb-wasm-api.h b/src/hb-wasm-api.h index 8cfb24ae1..805e89322 100644 --- a/src/hb-wasm-api.h +++ b/src/hb-wasm-api.h @@ -32,39 +32,44 @@ #include -#ifndef HB_BEGIN_DECLS +#ifndef HB_WASM_BEGIN_DECLS # ifdef __cplusplus -# define HB_BEGIN_DECLS extern "C" { -# define HB_END_DECLS } +# define HB_WASM_BEGIN_DECLS extern "C" { +# define HB_WASM_END_DECLS } # else /* !__cplusplus */ -# define HB_BEGIN_DECLS -# define HB_END_DECLS +# define HB_WASM_BEGIN_DECLS +# define HB_WASM_END_DECLS # endif /* !__cplusplus */ #endif -HB_BEGIN_DECLS +HB_WASM_BEGIN_DECLS + +#ifndef HB_WASM_API +#define HB_WASM_API(x) x +#endif + #ifndef bool_t #define bool_t uint32_t #endif -typedef uint32_t face_t -typedef uint32_t font_t -typedef uint32_t buffer_t +typedef uint32_t face_t; +typedef uint32_t font_t; +typedef uint32_t buffer_t; /* font */ face_t -font_get_face (font_t); +HB_WASM_API (font_get_face) (font_t); /* shape interface */ bool_t -shape (font_t, buffer_t); +HB_WASM_API (shape) (font_t, buffer_t); -HB_END_DECLS +HB_WASM_END_DECLS #endif /* HB_WASM_API_H */ diff --git a/src/hb-wasm-api.hh b/src/hb-wasm-api.hh new file mode 100644 index 000000000..0f63a1051 --- /dev/null +++ b/src/hb-wasm-api.hh @@ -0,0 +1,45 @@ +/* + * Copyright © 2023 Behdad Esfahbod + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#ifndef HB_WASM_API_HH +#define HB_WASM_API_HH + +#include "hb.h" + + +#define HB_WASM_API(x) HB_INTERNAL x +#define HB_WASM_BEGIN_DECLS namespace hb { namespace wasm { +#define HB_WASM_END_DECLS }} + +#include "hb-wasm-api.h" + +#undef HB_WASM_API +#undef HB_WASM_BEGIN_DECLS +#undef HB_WASM_END_DECLS + + +#include "hb-wasm-font.hh" + + +#endif /* HB_WASM_API_HH */ diff --git a/src/hb-wasm-font.hh b/src/hb-wasm-font.hh new file mode 100644 index 000000000..0223e676b --- /dev/null +++ b/src/hb-wasm-font.hh @@ -0,0 +1,44 @@ +/* + * Copyright © 2023 Behdad Esfahbod + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#ifndef HB_WASM_FONT_HH +#define HB_WASM_FONT_HH + +#include + +namespace hb { +namespace wasm { + + +face_t +font_get_face (font_t) +{ + return 0; +} + + + +}} + +#endif /* HB_WASM_FONT_HH */ diff --git a/src/hb-wasm-shape.cc b/src/hb-wasm-shape.cc index be289fa1b..ccc337b1c 100644 --- a/src/hb-wasm-shape.cc +++ b/src/hb-wasm-shape.cc @@ -30,6 +30,8 @@ #ifdef HAVE_WASM +#include "hb-wasm-api.hh" + #include @@ -44,11 +46,9 @@ struct hb_wasm_face_data_t { wasm_module_t wasm_module; }; -extern "C" { static void debugprint(wasm_exec_env_t exec_env, char *the_string, uint8_t len) { printf("%*s", len, the_string); } -} static bool init_wasm ()