net/netsurf/meson.patch
$ cat meson.patch
diff --git a/frontends/tiny/wl.c b/frontends/tiny/wl.c
index a6664b124b68241c77b8009d6f2238ec61bdf74b..1e8c50bb518055cfddf19ed6f1ba34c8b2f041b3 100644
--- a/frontends/tiny/wl.c
+++ b/frontends/tiny/wl.c
@@ -969,8 +969,6 @@ platform_window_destroy(struct platform_window *p)
wl_surface_destroy(p->surface);
destroyimage(p->image);
pixman_region32_fini(&p->damage);
- free(p);
-
tiny_schedule(-1, redraw, p);
tiny_schedule(-1, resize, p);
tiny_schedule(-1, keyrepeat, p);
@@ -978,6 +976,7 @@ platform_window_destroy(struct platform_window *p)
wl->kbdfocus = NULL;
if (wl->ptrfocus == p)
wl->ptrfocus = NULL;
+ free(p);
}
void
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..4f85a10e39df21b520ff8e4a1bfe11ee83d85271
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,195 @@
+project(
+ 'netsurf-tiny',
+ 'c',
+ version: '3.10',
+ meson_version: '>=0.59',
+ default_options: ['c_std=c99', 'warning_level=1'],
+)
+
+cc = meson.get_compiler('c')
+awk = find_program('awk')
+wayland = import('wayland')
+
+wayland_client_dep = dependency('wayland-client')
+wayland_cursor_dep = dependency('wayland-cursor')
+xkbcommon_dep = dependency('xkbcommon')
+pixman_dep = dependency('pixman-1')
+freetype_dep = dependency('freetype2')
+curl_dep = dependency('libcurl')
+png_dep = dependency('libpng')
+jpeg_dep = dependency('libjpeg')
+threads_dep = dependency('threads')
+zlib_dep = dependency('zlib')
+m_dep = cc.find_library('m', required: false)
+iconv_dep = cc.find_library('iconv', required: false)
+
+# NetSurf libraries are deliberately instantiated as subprojects. Do not use
+# dependency(..., fallback: ...) here: that permits an installed library to win
+# before Meson consults its wrap, which can silently mix incompatible releases.
+wapcaplet_dep = subproject('libwapcaplet').get_variable('libwapcaplet_dep')
+parserutils_dep = subproject('libparserutils').get_variable('libparserutils_dep')
+hubbub_dep = subproject('libhubbub').get_variable('libhubbub_dep')
+dom_dep = subproject('libdom').get_variable('libdom_dep')
+css_dep = subproject('libcss').get_variable('libcss_dep')
+nsgif_dep = subproject('libnsgif').get_variable('libnsgif_dep')
+nsbmp_dep = subproject('libnsbmp').get_variable('libnsbmp_dep')
+nsutils_dep = subproject('libnsutils').get_variable('libnsutils_dep')
+svgtiny_dep = subproject('libsvgtiny').get_variable('libsvgtiny_dep')
+utf8proc_dep = subproject('libutf8proc').get_variable('libutf8proc_dep')
+
+install_resource_dir = get_option('prefix') / get_option('datadir') / 'netsurf'
+source_resource_path = meson.current_source_dir() / 'resources'
+tiny_resource_path = meson.current_source_dir() / 'frontends/tiny/res'
+build_resource_path = meson.current_build_dir()
+
+conf = configuration_data()
+conf.set('nstiny', 1)
+conf.set('WITH_BMP', 1)
+conf.set('WITH_CURL', 1)
+conf.set('WITH_GIF', 1)
+conf.set('WITH_JPEG', 1)
+conf.set('WITH_PNG', 1)
+conf.set('WITH_NS_SVG', 1)
+conf.set('WITH_UTF8PROC', 1)
+conf.set_quoted('NETSURF_HOMEPAGE', get_option('homepage'))
+conf.set_quoted('NETSURF_BUILTIN_LOG_FILTER', 'level:WARNING')
+conf.set_quoted('NETSURF_BUILTIN_VERBOSE_FILTER', 'level:DEBUG')
+conf.set_quoted('TINY_RESPATH',
+ install_resource_dir + ':' +
+ build_resource_path + ':' +
+ source_resource_path / 'en' + ':' +
+ source_resource_path + ':' +
+ tiny_resource_path + ':' +
+ get_option('font_path'))
+conf.set_quoted('TINY_FONT_SANS_SERIF', get_option('font_sans'))
+conf.set_quoted('TINY_FONT_SANS_SERIF_BOLD', get_option('font_sans_bold'))
+conf.set_quoted('TINY_FONT_SANS_SERIF_ITALIC', get_option('font_sans_italic'))
+conf.set_quoted('TINY_FONT_SANS_SERIF_ITALIC_BOLD', get_option('font_sans_bold_italic'))
+conf.set_quoted('TINY_FONT_SERIF', get_option('font_serif'))
+conf.set_quoted('TINY_FONT_SERIF_BOLD', get_option('font_serif_bold'))
+conf.set_quoted('TINY_FONT_MONOSPACE', get_option('font_monospace'))
+conf.set_quoted('TINY_FONT_MONOSPACE_BOLD', get_option('font_monospace_bold'))
+conf.set_quoted('TINY_FONT_CURSIVE', get_option('font_sans'))
+conf.set_quoted('TINY_FONT_FANTASY', get_option('font_sans'))
+conf.set('TINY_DPI', get_option('dpi'))
+configure_file(output: 'config.h', configuration: conf)
+configure_file(input: 'testament.h.in', output: 'testament.h', copy: true)
+
+add_project_arguments(
+ '-D_GNU_SOURCE',
+ '-DUTF8PROC_EXPORTS',
+ '-include', meson.current_build_dir() / 'config.h',
+ language: 'c',
+)
+
+xdg_shell_protocol = wayland.find_protocol('xdg-shell', state: 'stable')
+xdg_shell_sources = wayland.scan_xml(
+ xdg_shell_protocol,
+ client: true,
+ server: false,
+)
+
+messages = custom_target(
+ 'Messages',
+ input: 'resources/FatMessages',
+ output: 'Messages',
+ command: [awk, '-f', files('tools/messages.awk'), '-v', 'lang=en', '-v', 'filter=any', '@INPUT@'],
+ capture: true,
+ install: true,
+ install_dir: get_option('datadir') / 'netsurf',
+)
+
+netsurf_sources = files(
+ 'desktop/cookie_manager.c', 'desktop/knockout.c', 'desktop/hotlist.c',
+ 'desktop/mouse.c', 'desktop/plot_style.c', 'desktop/print.c',
+ 'desktop/search.c', 'desktop/searchweb.c', 'desktop/scrollbar.c',
+ 'desktop/textarea.c', 'desktop/version.c', 'desktop/system_colour.c',
+ 'desktop/local_history.c', 'desktop/global_history.c', 'desktop/treeview.c',
+ 'desktop/page-info.c', 'desktop/browser.c', 'desktop/browser_window.c',
+ 'desktop/browser_history.c', 'desktop/download.c', 'desktop/frames.c',
+ 'desktop/netsurf.c', 'desktop/cw_helper.c', 'desktop/save_complete.c',
+ 'desktop/save_text.c', 'desktop/selection.c', 'desktop/textinput.c',
+ 'desktop/gui_factory.c', 'desktop/save_pdf.c', 'desktop/font_haru.c',
+ 'frontends/tiny/download.c', 'frontends/tiny/fetch.c',
+ 'frontends/tiny/icons.c', 'frontends/tiny/gui.c', 'frontends/tiny/render.c',
+ 'frontends/tiny/schedule.c', 'frontends/tiny/ui.c', 'frontends/tiny/wl.c',
+ 'content/content.c', 'content/content_factory.c', 'content/dirlist.c',
+ 'content/fetch.c', 'content/hlcache.c', 'content/llcache.c',
+ 'content/mimesniff.c', 'content/textsearch.c', 'content/urldb.c',
+ 'content/no_backing_store.c', 'content/fetchers/curl.c',
+ 'content/fetchers/data.c', 'content/fetchers/file.c',
+ 'content/fetchers/about.c', 'content/fetchers/resource.c',
+ 'content/handlers/image/image.c', 'content/handlers/image/image_cache.c',
+ 'content/handlers/image/bmp.c', 'content/handlers/image/gif.c',
+ 'content/handlers/image/ico.c', 'content/handlers/image/jpeg.c',
+ 'content/handlers/image/png.c', 'content/handlers/image/svg.c',
+ 'content/handlers/css/css.c', 'content/handlers/css/dump.c',
+ 'content/handlers/css/internal.c', 'content/handlers/css/hints.c',
+ 'content/handlers/css/select.c', 'content/handlers/css/utils.c',
+ 'content/handlers/javascript/fetcher.c',
+ 'content/handlers/javascript/none/none.c',
+ 'content/handlers/html/box_construct.c',
+ 'content/handlers/html/box_inspect.c',
+ 'content/handlers/html/box_manipulate.c',
+ 'content/handlers/html/box_normalise.c',
+ 'content/handlers/html/box_special.c', 'content/handlers/html/box_textarea.c',
+ 'content/handlers/html/css.c', 'content/handlers/html/css_fetcher.c',
+ 'content/handlers/html/dom_event.c', 'content/handlers/html/font.c',
+ 'content/handlers/html/form.c', 'content/handlers/html/forms.c',
+ 'content/handlers/html/html.c', 'content/handlers/html/imagemap.c',
+ 'content/handlers/html/interaction.c', 'content/handlers/html/layout.c',
+ 'content/handlers/html/object.c', 'content/handlers/html/redraw.c',
+ 'content/handlers/html/redraw_border.c', 'content/handlers/html/script.c',
+ 'content/handlers/html/table.c', 'content/handlers/html/textselection.c',
+ 'content/handlers/text/textplain.c',
+ 'utils/bloom.c', 'utils/corestrings.c', 'utils/file.c', 'utils/filename.c',
+ 'utils/filepath.c', 'utils/hashmap.c', 'utils/hashtable.c', 'utils/idna.c',
+ 'utils/libdom.c', 'utils/log.c', 'utils/messages.c', 'utils/nscolour.c',
+ 'utils/nsoption.c', 'utils/punycode.c', 'utils/ssl_certs.c',
+ 'utils/talloc.c', 'utils/time.c', 'utils/url.c', 'utils/useragent.c',
+ 'utils/utf8.c', 'utils/utils.c',
+ 'utils/http/challenge.c', 'utils/http/generics.c',
+ 'utils/http/primitives.c', 'utils/http/parameter.c',
+ 'utils/http/cache-control.c', 'utils/http/content-disposition.c',
+ 'utils/http/content-type.c', 'utils/http/strict-transport-security.c',
+ 'utils/http/www-authenticate.c',
+ 'utils/nsurl/nsurl.c', 'utils/nsurl/parse.c',
+)
+
+netsurf_deps = [
+ css_dep, dom_dep, nsbmp_dep, nsgif_dep, nsutils_dep, svgtiny_dep,
+ parserutils_dep, wapcaplet_dep, curl_dep, freetype_dep, jpeg_dep, png_dep,
+ utf8proc_dep, wayland_client_dep, wayland_cursor_dep, xkbcommon_dep,
+ pixman_dep, threads_dep, zlib_dep, m_dep, iconv_dep,
+]
+
+executable(
+ 'nstiny',
+ netsurf_sources,
+ xdg_shell_sources,
+ include_directories: include_directories('.', 'include', 'frontends', 'content/handlers'),
+ dependencies: netsurf_deps,
+ install: true,
+)
+
+install_data(
+ 'resources/SearchEngines', 'resources/adblock.css', 'resources/default.css',
+ 'resources/favicon.png', 'resources/internal.css', 'resources/netsurf.png',
+ 'resources/quirks.css', 'resources/en/credits.html',
+ 'resources/en/licence.html', 'resources/en/welcome.html',
+ install_dir: get_option('datadir') / 'netsurf',
+)
+install_data(
+ 'frontends/tiny/res/icons/COPYING',
+ 'frontends/tiny/res/icons/add.ff',
+ 'frontends/tiny/res/icons/back.ff',
+ 'frontends/tiny/res/icons/close.ff',
+ 'frontends/tiny/res/icons/down.ff',
+ 'frontends/tiny/res/icons/forward.ff',
+ 'frontends/tiny/res/icons/home.ff',
+ 'frontends/tiny/res/icons/reload.ff',
+ 'frontends/tiny/res/icons/remove.ff',
+ 'frontends/tiny/res/icons/stop.ff',
+ 'frontends/tiny/res/icons/up.ff',
+ install_dir: get_option('datadir') / 'netsurf/icons',
+)
diff --git a/meson.options b/meson.options
new file mode 100644
index 0000000000000000000000000000000000000000..69dd86af326cab0e88c228c60985f644edbeaa8e
--- /dev/null
+++ b/meson.options
@@ -0,0 +1,11 @@
+option('homepage', type: 'string', value: 'https://lite.duckduckgo.com/lite', description: 'default home page')
+option('dpi', type: 'integer', value: 96, min: 50, max: 400, description: 'default browser DPI')
+option('font_path', type: 'string', value: '/share/fonts/noto-fonts', description: 'font search path')
+option('font_sans', type: 'string', value: 'NotoSans-Regular.ttf')
+option('font_sans_bold', type: 'string', value: 'NotoSans-Bold.ttf')
+option('font_sans_italic', type: 'string', value: 'NotoSans-Italic.ttf')
+option('font_sans_bold_italic', type: 'string', value: 'NotoSans-BoldItalic.ttf')
+option('font_serif', type: 'string', value: 'NotoSerif-Regular.ttf')
+option('font_serif_bold', type: 'string', value: 'NotoSerif-Bold.ttf')
+option('font_monospace', type: 'string', value: 'NotoSansMono-Regular.ttf')
+option('font_monospace_bold', type: 'string', value: 'NotoSansMono-Bold.ttf')
diff --git a/subprojects/libcss.wrap b/subprojects/libcss.wrap
new file mode 100644
index 0000000000000000000000000000000000000000..0d973223f3273f90ba20925c5ce0eb8cae32e811
--- /dev/null
+++ b/subprojects/libcss.wrap
@@ -0,0 +1,8 @@
+[wrap-git]
+url = git://git.netsurf-browser.org/libcss.git
+revision = 385769d6554d2d3a9c2c35a04cf5dde706cefb6b
+depth = 1
+patch_directory = libcss
+
+[provide]
+libcss = libcss_dep
diff --git a/subprojects/libdom.wrap b/subprojects/libdom.wrap
new file mode 100644
index 0000000000000000000000000000000000000000..89df4ab14d254b3e9f3ee43f5fe42902b2172b53
--- /dev/null
+++ b/subprojects/libdom.wrap
@@ -0,0 +1,8 @@
+[wrap-git]
+url = git://git.netsurf-browser.org/libdom.git
+revision = 93b8a9bba18fc3166dd158484188b1730afdd382
+depth = 1
+patch_directory = libdom
+
+[provide]
+libdom = libdom_dep
diff --git a/subprojects/libhubbub.wrap b/subprojects/libhubbub.wrap
new file mode 100644
index 0000000000000000000000000000000000000000..9b038108f78268ebf24b068fd5cb5582e7db05a3
--- /dev/null
+++ b/subprojects/libhubbub.wrap
@@ -0,0 +1,8 @@
+[wrap-git]
+url = git://git.netsurf-browser.org/libhubbub.git
+revision = 41b3e0e617cfce96de85d4d031c4d131e3dc4cf4
+depth = 1
+patch_directory = libhubbub
+
+[provide]
+libhubbub = libhubbub_dep
diff --git a/subprojects/libnsbmp.wrap b/subprojects/libnsbmp.wrap
new file mode 100644
index 0000000000000000000000000000000000000000..1b5a6b2b86aee373222e3333326fc8e814ad9651
--- /dev/null
+++ b/subprojects/libnsbmp.wrap
@@ -0,0 +1,8 @@
+[wrap-git]
+url = git://git.netsurf-browser.org/libnsbmp.git
+revision = 3155a7e9db2d7d7c2349a12bc892fa9ff68c2338
+depth = 1
+patch_directory = libnsbmp
+
+[provide]
+libnsbmp = libnsbmp_dep
diff --git a/subprojects/libnsgif.wrap b/subprojects/libnsgif.wrap
new file mode 100644
index 0000000000000000000000000000000000000000..f08147109f799c090af03c76a2959a64428add3f
--- /dev/null
+++ b/subprojects/libnsgif.wrap
@@ -0,0 +1,8 @@
+[wrap-git]
+url = git://git.netsurf-browser.org/libnsgif.git
+revision = a937d161f6787ecc1c1bef9bad6039925ff13d72
+depth = 1
+patch_directory = libnsgif
+
+[provide]
+libnsgif = libnsgif_dep
diff --git a/subprojects/libnsutils.wrap b/subprojects/libnsutils.wrap
new file mode 100644
index 0000000000000000000000000000000000000000..876ee438596383c3ca8fe1ef3fa2c953f4347943
--- /dev/null
+++ b/subprojects/libnsutils.wrap
@@ -0,0 +1,8 @@
+[wrap-git]
+url = git://git.netsurf-browser.org/libnsutils.git
+revision = 142a7945fb9fe477324f8df5e9645ef161042483
+depth = 1
+patch_directory = libnsutils
+
+[provide]
+libnsutils = libnsutils_dep
diff --git a/subprojects/libparserutils.wrap b/subprojects/libparserutils.wrap
new file mode 100644
index 0000000000000000000000000000000000000000..68f04309aa489930b5ff51b22af6642e728dc674
--- /dev/null
+++ b/subprojects/libparserutils.wrap
@@ -0,0 +1,8 @@
+[wrap-git]
+url = git://git.netsurf-browser.org/libparserutils.git
+revision = 269b0047aa506be93637e93d109a34f4bd7cefc4
+depth = 1
+patch_directory = libparserutils
+
+[provide]
+libparserutils = libparserutils_dep
diff --git a/subprojects/libsvgtiny.wrap b/subprojects/libsvgtiny.wrap
new file mode 100644
index 0000000000000000000000000000000000000000..d6e9cb943779c136675ef1a5e8b3a69929e3da5d
--- /dev/null
+++ b/subprojects/libsvgtiny.wrap
@@ -0,0 +1,8 @@
+[wrap-git]
+url = git://git.netsurf-browser.org/libsvgtiny.git
+revision = e31a20a97c6cd957ac4d858318f5819b90d97f77
+depth = 1
+patch_directory = libsvgtiny
+
+[provide]
+libsvgtiny = libsvgtiny_dep
diff --git a/subprojects/libutf8proc.wrap b/subprojects/libutf8proc.wrap
new file mode 100644
index 0000000000000000000000000000000000000000..1267b3886eecd69e53dbdd63e7231c77eebf33b8
--- /dev/null
+++ b/subprojects/libutf8proc.wrap
@@ -0,0 +1,8 @@
+[wrap-git]
+url = git://git.netsurf-browser.org/libutf8proc.git
+revision = 0d22740b0de2636307cb95c928b244263ed17caa
+depth = 1
+patch_directory = libutf8proc
+
+[provide]
+libutf8proc = libutf8proc_dep
diff --git a/subprojects/libwapcaplet.wrap b/subprojects/libwapcaplet.wrap
new file mode 100644
index 0000000000000000000000000000000000000000..0e958acba2f59b539d861440b04ea32553f7c0c5
--- /dev/null
+++ b/subprojects/libwapcaplet.wrap
@@ -0,0 +1,8 @@
+[wrap-git]
+url = git://git.netsurf-browser.org/libwapcaplet.git
+revision = b5e42b12211a92339b0b62cb90f1a86a397e146e
+depth = 1
+patch_directory = libwapcaplet
+
+[provide]
+libwapcaplet = libwapcaplet_dep
diff --git a/subprojects/packagefiles/libcss/meson.build b/subprojects/packagefiles/libcss/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..7bdd7f852aa5e8d7956f84329346860542914237
--- /dev/null
+++ b/subprojects/packagefiles/libcss/meson.build
@@ -0,0 +1,227 @@
+project('libcss', 'c', version: '0.9.1', default_options: ['c_std=c99'])
+
+awk = find_program('awk')
+sh = find_program('sh')
+parserutils_dep = dependency('libparserutils')
+wapcaplet_dep = dependency('libwapcaplet')
+
+gen_prop_parser = executable(
+ 'gen_prop_parser',
+ 'src/parse/properties/css_property_parser_gen.c',
+ native: true,
+ c_args: ['-D_GNU_SOURCE'],
+)
+
+prop_parsers = custom_target(
+ 'generated property parsers',
+ input: 'src/parse/properties/properties.gen',
+ output: 'prop_parsers.c',
+ command: [
+ sh, '-c',
+ 'awk -f "$1" -v "gen_prop_parser=$2" "$3" > "$4"',
+ 'generate-prop-parsers',
+ files('prop_parsers.awk'), gen_prop_parser,
+ '@INPUT@',
+ '@OUTPUT@',
+ ],
+)
+
+css_sources = files(
+ 'src/charset/detect.c',
+ 'src/lex/lex.c',
+ 'src/parse/font_face.c',
+ 'src/parse/important.c',
+ 'src/parse/language.c',
+ 'src/parse/mq.c',
+ 'src/parse/parse.c',
+ 'src/parse/properties/azimuth.c',
+ 'src/parse/properties/background.c',
+ 'src/parse/properties/background_position.c',
+ 'src/parse/properties/border.c',
+ 'src/parse/properties/border_color.c',
+ 'src/parse/properties/border_spacing.c',
+ 'src/parse/properties/border_style.c',
+ 'src/parse/properties/border_width.c',
+ 'src/parse/properties/clip.c',
+ 'src/parse/properties/column_rule.c',
+ 'src/parse/properties/columns.c',
+ 'src/parse/properties/content.c',
+ 'src/parse/properties/cue.c',
+ 'src/parse/properties/cursor.c',
+ 'src/parse/properties/elevation.c',
+ 'src/parse/properties/flex.c',
+ 'src/parse/properties/flex_flow.c',
+ 'src/parse/properties/font.c',
+ 'src/parse/properties/font_family.c',
+ 'src/parse/properties/font_weight.c',
+ 'src/parse/properties/list_style.c',
+ 'src/parse/properties/list_style_type.c',
+ 'src/parse/properties/margin.c',
+ 'src/parse/properties/opacity.c',
+ 'src/parse/properties/outline.c',
+ 'src/parse/properties/overflow.c',
+ 'src/parse/properties/padding.c',
+ 'src/parse/properties/pause.c',
+ 'src/parse/properties/play_during.c',
+ 'src/parse/properties/properties.c',
+ 'src/parse/properties/quotes.c',
+ 'src/parse/properties/text_decoration.c',
+ 'src/parse/properties/utils.c',
+ 'src/parse/properties/voice_family.c',
+ 'src/parse/propstrings.c',
+ 'src/select/arena.c',
+ 'src/select/computed.c',
+ 'src/select/dispatch.c',
+ 'src/select/font_face.c',
+ 'src/select/hash.c',
+ 'src/select/properties/align_content.c',
+ 'src/select/properties/align_items.c',
+ 'src/select/properties/align_self.c',
+ 'src/select/properties/azimuth.c',
+ 'src/select/properties/background_attachment.c',
+ 'src/select/properties/background_color.c',
+ 'src/select/properties/background_image.c',
+ 'src/select/properties/background_position.c',
+ 'src/select/properties/background_repeat.c',
+ 'src/select/properties/border_bottom_color.c',
+ 'src/select/properties/border_bottom_style.c',
+ 'src/select/properties/border_bottom_width.c',
+ 'src/select/properties/border_collapse.c',
+ 'src/select/properties/border_left_color.c',
+ 'src/select/properties/border_left_style.c',
+ 'src/select/properties/border_left_width.c',
+ 'src/select/properties/border_right_color.c',
+ 'src/select/properties/border_right_style.c',
+ 'src/select/properties/border_right_width.c',
+ 'src/select/properties/border_spacing.c',
+ 'src/select/properties/border_top_color.c',
+ 'src/select/properties/border_top_style.c',
+ 'src/select/properties/border_top_width.c',
+ 'src/select/properties/bottom.c',
+ 'src/select/properties/box_sizing.c',
+ 'src/select/properties/break_after.c',
+ 'src/select/properties/break_before.c',
+ 'src/select/properties/break_inside.c',
+ 'src/select/properties/caption_side.c',
+ 'src/select/properties/clear.c',
+ 'src/select/properties/clip.c',
+ 'src/select/properties/color.c',
+ 'src/select/properties/column_count.c',
+ 'src/select/properties/column_fill.c',
+ 'src/select/properties/column_gap.c',
+ 'src/select/properties/column_rule_color.c',
+ 'src/select/properties/column_rule_style.c',
+ 'src/select/properties/column_rule_width.c',
+ 'src/select/properties/column_span.c',
+ 'src/select/properties/column_width.c',
+ 'src/select/properties/content.c',
+ 'src/select/properties/counter_increment.c',
+ 'src/select/properties/counter_reset.c',
+ 'src/select/properties/cue_after.c',
+ 'src/select/properties/cue_before.c',
+ 'src/select/properties/cursor.c',
+ 'src/select/properties/direction.c',
+ 'src/select/properties/display.c',
+ 'src/select/properties/elevation.c',
+ 'src/select/properties/empty_cells.c',
+ 'src/select/properties/flex_basis.c',
+ 'src/select/properties/flex_direction.c',
+ 'src/select/properties/flex_grow.c',
+ 'src/select/properties/flex_shrink.c',
+ 'src/select/properties/flex_wrap.c',
+ 'src/select/properties/float.c',
+ 'src/select/properties/font_family.c',
+ 'src/select/properties/font_size.c',
+ 'src/select/properties/font_style.c',
+ 'src/select/properties/font_variant.c',
+ 'src/select/properties/font_weight.c',
+ 'src/select/properties/height.c',
+ 'src/select/properties/helpers.c',
+ 'src/select/properties/justify_content.c',
+ 'src/select/properties/left.c',
+ 'src/select/properties/letter_spacing.c',
+ 'src/select/properties/line_height.c',
+ 'src/select/properties/list_style_image.c',
+ 'src/select/properties/list_style_position.c',
+ 'src/select/properties/list_style_type.c',
+ 'src/select/properties/margin_bottom.c',
+ 'src/select/properties/margin_left.c',
+ 'src/select/properties/margin_right.c',
+ 'src/select/properties/margin_top.c',
+ 'src/select/properties/max_height.c',
+ 'src/select/properties/max_width.c',
+ 'src/select/properties/min_height.c',
+ 'src/select/properties/min_width.c',
+ 'src/select/properties/opacity.c',
+ 'src/select/properties/order.c',
+ 'src/select/properties/orphans.c',
+ 'src/select/properties/outline_color.c',
+ 'src/select/properties/outline_style.c',
+ 'src/select/properties/outline_width.c',
+ 'src/select/properties/overflow_x.c',
+ 'src/select/properties/overflow_y.c',
+ 'src/select/properties/padding_bottom.c',
+ 'src/select/properties/padding_left.c',
+ 'src/select/properties/padding_right.c',
+ 'src/select/properties/padding_top.c',
+ 'src/select/properties/page_break_after.c',
+ 'src/select/properties/page_break_before.c',
+ 'src/select/properties/page_break_inside.c',
+ 'src/select/properties/pause_after.c',
+ 'src/select/properties/pause_before.c',
+ 'src/select/properties/pitch.c',
+ 'src/select/properties/pitch_range.c',
+ 'src/select/properties/play_during.c',
+ 'src/select/properties/position.c',
+ 'src/select/properties/quotes.c',
+ 'src/select/properties/richness.c',
+ 'src/select/properties/right.c',
+ 'src/select/properties/speak.c',
+ 'src/select/properties/speak_header.c',
+ 'src/select/properties/speak_numeral.c',
+ 'src/select/properties/speak_punctuation.c',
+ 'src/select/properties/speech_rate.c',
+ 'src/select/properties/stress.c',
+ 'src/select/properties/table_layout.c',
+ 'src/select/properties/text_align.c',
+ 'src/select/properties/text_decoration.c',
+ 'src/select/properties/text_indent.c',
+ 'src/select/properties/text_transform.c',
+ 'src/select/properties/top.c',
+ 'src/select/properties/unicode_bidi.c',
+ 'src/select/properties/vertical_align.c',
+ 'src/select/properties/visibility.c',
+ 'src/select/properties/voice_family.c',
+ 'src/select/properties/volume.c',
+ 'src/select/properties/white_space.c',
+ 'src/select/properties/widows.c',
+ 'src/select/properties/width.c',
+ 'src/select/properties/word_spacing.c',
+ 'src/select/properties/writing_mode.c',
+ 'src/select/properties/z_index.c',
+ 'src/select/select.c',
+ 'src/stylesheet.c',
+ 'src/utils/errors.c',
+ 'src/utils/utils.c',
+)
+
+inc = include_directories('.', 'include', 'src')
+libcss = static_library(
+ 'css',
+ css_sources,
+ prop_parsers,
+ include_directories: inc,
+ dependencies: [parserutils_dep, wapcaplet_dep],
+ c_args: [
+ '-D_BSD_SOURCE',
+ '-D_DEFAULT_SOURCE',
+ '-D_ALIGNED=__attribute__((aligned))',
+ ],
+)
+
+libcss_dep = declare_dependency(
+ link_with: libcss,
+ include_directories: inc,
+ dependencies: [parserutils_dep, wapcaplet_dep],
+)
+meson.override_dependency('libcss', libcss_dep)
diff --git a/subprojects/packagefiles/libcss/prop_parsers.awk b/subprojects/packagefiles/libcss/prop_parsers.awk
new file mode 100644
index 0000000000000000000000000000000000000000..68a596af99a1fc05a32016c8e37b60279fede2d2
--- /dev/null
+++ b/subprojects/packagefiles/libcss/prop_parsers.awk
@@ -0,0 +1,10 @@
+BEGIN {
+ FS=":"
+}
+
+/^#/ { next }
+/^$/ { next }
+
+{
+ system(gen_prop_parser " '" $0 "'")
+}
diff --git a/subprojects/packagefiles/libdom/dom/bindings/hubbub/meson.build b/subprojects/packagefiles/libdom/dom/bindings/hubbub/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..95432eee0f58204f5dd55c816d58547b780f04d9
--- /dev/null
+++ b/subprojects/packagefiles/libdom/dom/bindings/hubbub/meson.build
@@ -0,0 +1,2 @@
+configure_file(input: '../../../bindings/hubbub/errors.h', output: 'errors.h', copy: true)
+configure_file(input: '../../../bindings/hubbub/parser.h', output: 'parser.h', copy: true)
diff --git a/subprojects/packagefiles/libdom/dom/bindings/xml/meson.build b/subprojects/packagefiles/libdom/dom/bindings/xml/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..45a4f9ed97392d57ff6a95ff5cf9b85d1762b5fd
--- /dev/null
+++ b/subprojects/packagefiles/libdom/dom/bindings/xml/meson.build
@@ -0,0 +1,2 @@
+configure_file(input: '../../../bindings/xml/xmlerror.h', output: 'xmlerror.h', copy: true)
+configure_file(input: '../../../bindings/xml/xmlparser.h', output: 'xmlparser.h', copy: true)
diff --git a/subprojects/packagefiles/libdom/meson.build b/subprojects/packagefiles/libdom/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..8cbf1260370808e4d5fa469d90bda3e6295956a2
--- /dev/null
+++ b/subprojects/packagefiles/libdom/meson.build
@@ -0,0 +1,75 @@
+project('libdom', 'c', version: '0.4.1', default_options: ['c_std=c99'])
+
+parserutils_dep = dependency('libparserutils')
+wapcaplet_dep = dependency('libwapcaplet')
+hubbub_dep = dependency('libhubbub')
+expat_dep = dependency('expat')
+
+subdir('dom/bindings/hubbub')
+subdir('dom/bindings/xml')
+
+inc = include_directories('.', 'include', 'src')
+sources = files(
+ 'src/core/string.c', 'src/core/node.c', 'src/core/attr.c',
+ 'src/core/characterdata.c', 'src/core/element.c',
+ 'src/core/implementation.c', 'src/core/text.c', 'src/core/typeinfo.c',
+ 'src/core/comment.c', 'src/core/namednodemap.c', 'src/core/nodelist.c',
+ 'src/core/cdatasection.c', 'src/core/document_type.c',
+ 'src/core/entity_ref.c', 'src/core/pi.c', 'src/core/doc_fragment.c',
+ 'src/core/document.c',
+ 'src/events/event.c', 'src/events/dispatch.c',
+ 'src/events/event_target.c', 'src/events/document_event.c',
+ 'src/events/custom_event.c', 'src/events/keyboard_event.c',
+ 'src/events/mouse_wheel_event.c', 'src/events/text_event.c',
+ 'src/events/event_listener.c', 'src/events/mouse_event.c',
+ 'src/events/mutation_event.c', 'src/events/ui_event.c',
+ 'src/events/mouse_multi_wheel_event.c',
+ 'src/events/mutation_name_event.c',
+ 'src/html/html_applet_element.c', 'src/html/html_area_element.c',
+ 'src/html/html_anchor_element.c', 'src/html/html_basefont_element.c',
+ 'src/html/html_base_element.c', 'src/html/html_body_element.c',
+ 'src/html/html_button_element.c', 'src/html/html_canvas_element.c',
+ 'src/html/html_collection.c', 'src/html/html_document.c',
+ 'src/html/html_element.c', 'src/html/html_dlist_element.c',
+ 'src/html/html_directory_element.c', 'src/html/html_options_collection.c',
+ 'src/html/html_html_element.c', 'src/html/html_head_element.c',
+ 'src/html/html_link_element.c', 'src/html/html_title_element.c',
+ 'src/html/html_meta_element.c', 'src/html/html_style_element.c',
+ 'src/html/html_form_element.c', 'src/html/html_select_element.c',
+ 'src/html/html_input_element.c', 'src/html/html_text_area_element.c',
+ 'src/html/html_opt_group_element.c', 'src/html/html_option_element.c',
+ 'src/html/html_hr_element.c', 'src/html/html_menu_element.c',
+ 'src/html/html_fieldset_element.c', 'src/html/html_legend_element.c',
+ 'src/html/html_div_element.c', 'src/html/html_paragraph_element.c',
+ 'src/html/html_heading_element.c', 'src/html/html_quote_element.c',
+ 'src/html/html_pre_element.c', 'src/html/html_br_element.c',
+ 'src/html/html_label_element.c', 'src/html/html_ulist_element.c',
+ 'src/html/html_olist_element.c', 'src/html/html_li_element.c',
+ 'src/html/html_font_element.c', 'src/html/html_mod_element.c',
+ 'src/html/html_image_element.c', 'src/html/html_object_element.c',
+ 'src/html/html_param_element.c', 'src/html/html_map_element.c',
+ 'src/html/html_script_element.c', 'src/html/html_tablecaption_element.c',
+ 'src/html/html_tablecell_element.c', 'src/html/html_tablecol_element.c',
+ 'src/html/html_tablesection_element.c', 'src/html/html_table_element.c',
+ 'src/html/html_tablerow_element.c', 'src/html/html_frameset_element.c',
+ 'src/html/html_frame_element.c', 'src/html/html_iframe_element.c',
+ 'src/html/html_isindex_element.c',
+ 'src/utils/namespace.c', 'src/utils/hashtable.c',
+ 'src/utils/character_valid.c', 'src/utils/validate.c',
+ 'bindings/hubbub/parser.c', 'bindings/xml/expat_xmlparser.c',
+)
+
+libdom = static_library(
+ 'dom',
+ sources,
+ include_directories: inc,
+ dependencies: [parserutils_dep, wapcaplet_dep, hubbub_dep, expat_dep],
+ c_args: ['-D_BSD_SOURCE', '-D_DEFAULT_SOURCE'],
+)
+
+libdom_dep = declare_dependency(
+ link_with: libdom,
+ include_directories: inc,
+ dependencies: [parserutils_dep, wapcaplet_dep, hubbub_dep, expat_dep],
+)
+meson.override_dependency('libdom', libdom_dep)
diff --git a/subprojects/packagefiles/libhubbub/entities.awk b/subprojects/packagefiles/libhubbub/entities.awk
new file mode 100644
index 0000000000000000000000000000000000000000..9802bef85328dd6945d3fc75f6f6d613633b828f
--- /dev/null
+++ b/subprojects/packagefiles/libhubbub/entities.awk
@@ -0,0 +1,45 @@
+BEGIN {
+ for (i = 32; i <= 126; ++i) ord[sprintf("%c", i)] = i
+ n = -1
+}
+function makenode(c) {
+ ++n
+ splits[n] = c
+ left[n] = -1
+ equal[n] = -1
+ right[n] = -1
+ values[n] = 0
+}
+function insert(nodes, id, c) {
+ nextid = nodes[id]
+ if (nextid != -1) return nextid
+ makenode(c)
+ nodes[id] = n
+ return n
+}
+/^(#|$)/ {next}
+{
+ id = 0
+ c = ord[substr($1, 1, 1)]
+ if (n < 0) makenode(c)
+ for (i = 1; i <= length($1) + 1;) {
+ if (c < splits[id]) {
+ id = insert(left, id, c)
+ } else if (c == splits[id]) {
+ if (i >= length($1)) values[id] = $2
+ if (c == 0) break
+ ++i
+ c = i <= length($1) ? ord[substr($1, i, 1)] : 0
+ id = insert(equal, id, c)
+ } else {
+ id = insert(right, id, c)
+ }
+ }
+}
+END {
+ print "static hubbub_entity_node dict[] = {"
+ for (i = 0; i <= n; ++i)
+ print "\t{ "splits[i]", "left[i]", "equal[i]", "right[i]", "values[i]" },"
+ print "};"
+ print "static int32_t dict_root = 0;"
+}
diff --git a/subprojects/packagefiles/libhubbub/meson.build b/subprojects/packagefiles/libhubbub/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..ecb23066116a10088b08453196d6f0482096d3c0
--- /dev/null
+++ b/subprojects/packagefiles/libhubbub/meson.build
@@ -0,0 +1,61 @@
+project('libhubbub', 'c', version: '0.3.7', default_options: ['c_std=c99'])
+
+awk = find_program('awk')
+parserutils_dep = dependency('libparserutils')
+
+entities_inc = custom_target(
+ 'HTML entities',
+ input: 'build/Entities',
+ output: 'entities.inc',
+ command: [awk, '-f', files('entities.awk'), '@INPUT@'],
+ capture: true,
+)
+
+inc = include_directories('.', 'include', 'src')
+sources = files(
+ 'src/parser.c',
+ 'src/charset/detect.c',
+ 'src/tokeniser/entities.c',
+ 'src/tokeniser/tokeniser.c',
+ 'src/treebuilder/treebuilder.c',
+ 'src/treebuilder/initial.c',
+ 'src/treebuilder/before_html.c',
+ 'src/treebuilder/before_head.c',
+ 'src/treebuilder/in_head.c',
+ 'src/treebuilder/in_head_noscript.c',
+ 'src/treebuilder/after_head.c',
+ 'src/treebuilder/in_body.c',
+ 'src/treebuilder/in_table.c',
+ 'src/treebuilder/in_caption.c',
+ 'src/treebuilder/in_column_group.c',
+ 'src/treebuilder/in_table_body.c',
+ 'src/treebuilder/in_row.c',
+ 'src/treebuilder/in_cell.c',
+ 'src/treebuilder/in_select.c',
+ 'src/treebuilder/in_select_in_table.c',
+ 'src/treebuilder/in_foreign_content.c',
+ 'src/treebuilder/after_body.c',
+ 'src/treebuilder/in_frameset.c',
+ 'src/treebuilder/after_frameset.c',
+ 'src/treebuilder/after_after_body.c',
+ 'src/treebuilder/after_after_frameset.c',
+ 'src/treebuilder/generic_rcdata.c',
+ 'src/utils/errors.c',
+ 'src/utils/string.c',
+)
+
+libhubbub = static_library(
+ 'hubbub',
+ sources,
+ entities_inc,
+ include_directories: inc,
+ dependencies: parserutils_dep,
+ c_args: ['-D_BSD_SOURCE', '-D_DEFAULT_SOURCE', '-DNDEBUG'],
+)
+
+libhubbub_dep = declare_dependency(
+ link_with: libhubbub,
+ include_directories: inc,
+ dependencies: parserutils_dep,
+)
+meson.override_dependency('libhubbub', libhubbub_dep)
diff --git a/subprojects/packagefiles/libnsbmp/meson.build b/subprojects/packagefiles/libnsbmp/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..ba8682607d1e9aaf79c91497a66210d0aa408c92
--- /dev/null
+++ b/subprojects/packagefiles/libnsbmp/meson.build
@@ -0,0 +1,12 @@
+project('libnsbmp', 'c', version: '0.1.5', default_options: ['c_std=c99'])
+
+inc = include_directories('include')
+libnsbmp = static_library(
+ 'nsbmp',
+ 'src/libnsbmp.c',
+ include_directories: inc,
+ c_args: ['-D_BSD_SOURCE', '-D_DEFAULT_SOURCE'],
+)
+
+libnsbmp_dep = declare_dependency(link_with: libnsbmp, include_directories: inc)
+meson.override_dependency('libnsbmp', libnsbmp_dep)
diff --git a/subprojects/packagefiles/libnsgif/meson.build b/subprojects/packagefiles/libnsgif/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..753cda30bf467e4ba956ed65033d038b974508e0
--- /dev/null
+++ b/subprojects/packagefiles/libnsgif/meson.build
@@ -0,0 +1,12 @@
+project('libnsgif', 'c', version: '0.1.0', default_options: ['c_std=c99'])
+
+inc = include_directories('include')
+libnsgif = static_library(
+ 'nsgif',
+ files('src/libnsgif.c', 'src/lzw.c'),
+ include_directories: inc,
+ c_args: ['-D_BSD_SOURCE', '-D_DEFAULT_SOURCE'],
+)
+
+libnsgif_dep = declare_dependency(link_with: libnsgif, include_directories: inc)
+meson.override_dependency('libnsgif', libnsgif_dep)
diff --git a/subprojects/packagefiles/libnsutils/meson.build b/subprojects/packagefiles/libnsutils/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..59f75797262a570e4b80ae712f86f4299ab70d60
--- /dev/null
+++ b/subprojects/packagefiles/libnsutils/meson.build
@@ -0,0 +1,12 @@
+project('libnsutils', 'c', version: '0.1.0', default_options: ['c_std=c99'])
+
+inc = include_directories('include')
+libnsutils = static_library(
+ 'nsutils',
+ files('src/base64.c', 'src/time.c', 'src/unistd.c'),
+ include_directories: inc,
+ c_args: ['-D_BSD_SOURCE', '-D_DEFAULT_SOURCE'],
+)
+
+libnsutils_dep = declare_dependency(link_with: libnsutils, include_directories: inc)
+meson.override_dependency('libnsutils', libnsutils_dep)
diff --git a/subprojects/packagefiles/libparserutils/aliases.awk b/subprojects/packagefiles/libparserutils/aliases.awk
new file mode 100644
index 0000000000000000000000000000000000000000..84094474c5633a732cbb5f2df4c94e4e95b1fa03
--- /dev/null
+++ b/subprojects/packagefiles/libparserutils/aliases.awk
@@ -0,0 +1,33 @@
+BEGIN {
+ print "static parserutils_charset_aliases_canon canonical_charset_names[] = {"
+ n = 0
+}
+/^(#|$)/ {next}
+function addalias(s) {
+ s = tolower(s)
+ gsub("[^a-z0-9]", "", s)
+ if (!(s in aliases)) ++num_aliases
+ aliases[s] = n
+}
+{
+ print "\t{ "$2", "length($1)", \""$1"\" },"
+ addalias($1)
+ for (i = 3; i <= NF; ++i) addalias($i)
+ if ($1 ~ /^ISO-10646-UCS-[24]$/ || $1 ~ /^UTF-(8$|16|32)/)
+ isunicode = (isunicode ? (isunicode" || ") : "") "((x) == "$2")"
+ ++n
+}
+END {
+ print "};"
+ print "static const uint16_t charset_aliases_canon_count = "n";"
+ print "typedef struct { uint16_t name_len; const char *name; parserutils_charset_aliases_canon *canon; } parserutils_charset_aliases_alias;"
+ print "static parserutils_charset_aliases_alias charset_aliases[] = {"
+ for (alias in aliases) {
+ i = aliases[alias]
+ print "\t{ "length(alias)", \""alias"\", &canonical_charset_names["i"] }," | "sort -t '\"' -k 2"
+ }
+ close("sort -t '\"' -k 2")
+ print "};"
+ print "static const uint16_t charset_aliases_count = "num_aliases";"
+ print "#define MIBENUM_IS_UNICODE(x) ("isunicode")"
+}
diff --git a/subprojects/packagefiles/libparserutils/meson.build b/subprojects/packagefiles/libparserutils/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..750c53e69bfba6af52ffdb500e32ee73ef05ce68
--- /dev/null
+++ b/subprojects/packagefiles/libparserutils/meson.build
@@ -0,0 +1,47 @@
+project('libparserutils', 'c', version: '0.2.3', default_options: ['c_std=c99'])
+
+awk = find_program('awk')
+wapcaplet_dep = dependency('libwapcaplet')
+
+aliases_inc = custom_target(
+ 'parserutils aliases',
+ input: 'build/Aliases',
+ output: 'aliases.inc',
+ command: [awk, '-f', files('aliases.awk'), '@INPUT@'],
+ capture: true,
+)
+
+inc = include_directories('.', 'include', 'src')
+sources = files(
+ 'src/charset/aliases.c',
+ 'src/charset/codec.c',
+ 'src/charset/codecs/codec_ascii.c',
+ 'src/charset/codecs/codec_8859.c',
+ 'src/charset/codecs/codec_ext8.c',
+ 'src/charset/codecs/codec_utf8.c',
+ 'src/charset/codecs/codec_utf16.c',
+ 'src/charset/encodings/utf8.c',
+ 'src/charset/encodings/utf16.c',
+ 'src/input/filter.c',
+ 'src/input/inputstream.c',
+ 'src/utils/buffer.c',
+ 'src/utils/errors.c',
+ 'src/utils/stack.c',
+ 'src/utils/vector.c',
+)
+
+libparserutils = static_library(
+ 'parserutils',
+ sources,
+ aliases_inc,
+ include_directories: inc,
+ dependencies: wapcaplet_dep,
+ c_args: ['-D_BSD_SOURCE', '-D_DEFAULT_SOURCE'],
+)
+
+libparserutils_dep = declare_dependency(
+ link_with: libparserutils,
+ include_directories: inc,
+ dependencies: wapcaplet_dep,
+)
+meson.override_dependency('libparserutils', libparserutils_dep)
diff --git a/subprojects/packagefiles/libsvgtiny/autogenerated_colors.c b/subprojects/packagefiles/libsvgtiny/autogenerated_colors.c
new file mode 100644
index 0000000000000000000000000000000000000000..f23635c388630f4d5a56d6b47b44aef2498d149e
--- /dev/null
+++ b/subprojects/packagefiles/libsvgtiny/autogenerated_colors.c
@@ -0,0 +1,923 @@
+/* ANSI-C code produced by gperf version 3.3 */
+/* Command-line: gperf --output-file=subprojects/packagefiles/libsvgtiny/autogenerated_colors.c subprojects/libsvgtiny/src/colors.gperf */
+/* Computed positions: -k'1,3,6-8,12-13' */
+
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
+/* The character set is not based on ISO-646. */
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
+#endif
+
+#line 15 "subprojects/libsvgtiny/src/colors.gperf"
+
+#include <string.h>
+#include "svgtiny.h"
+#include "svgtiny_internal.h"
+
+#line 22 "subprojects/libsvgtiny/src/colors.gperf"
+struct svgtiny_named_color;
+
+#define TOTAL_KEYWORDS 147
+#define MIN_WORD_LENGTH 3
+#define MAX_WORD_LENGTH 20
+#define MIN_HASH_VALUE 4
+#define MAX_HASH_VALUE 565
+/* maximum key range = 562, duplicates = 0 */
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static unsigned int
+svgtiny_color_hash (register const char *str, register size_t len)
+{
+ static const unsigned short asso_values[] =
+ {
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 5, 55, 0,
+ 35, 0, 75, 10, 5, 0, 566, 250, 10, 40,
+ 85, 60, 70, 144, 0, 20, 45, 10, 30, 185,
+ 95, 195, 566, 0, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566, 566, 566,
+ 566, 566, 566, 566, 566, 566, 566, 566
+ };
+ register unsigned int hval = len;
+
+ switch (hval)
+ {
+ default:
+ hval += asso_values[(unsigned char)str[12]];
+#if (defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang__ && __clang_major__ + (__clang_minor__ >= 9) > 3))) || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 202000L && ((defined __GNUC__ && __GNUC__ >= 10) || (defined __clang__ && __clang_major__ >= 9)))
+ [[fallthrough]];
+#elif (defined __GNUC__ && __GNUC__ >= 7) || (defined __clang__ && __clang_major__ >= 10)
+ __attribute__ ((__fallthrough__));
+#endif
+ /*FALLTHROUGH*/
+ case 12:
+ hval += asso_values[(unsigned char)str[11]];
+#if (defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang__ && __clang_major__ + (__clang_minor__ >= 9) > 3))) || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 202000L && ((defined __GNUC__ && __GNUC__ >= 10) || (defined __clang__ && __clang_major__ >= 9)))
+ [[fallthrough]];
+#elif (defined __GNUC__ && __GNUC__ >= 7) || (defined __clang__ && __clang_major__ >= 10)
+ __attribute__ ((__fallthrough__));
+#endif
+ /*FALLTHROUGH*/
+ case 11:
+ case 10:
+ case 9:
+ case 8:
+ hval += asso_values[(unsigned char)str[7]];
+#if (defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang__ && __clang_major__ + (__clang_minor__ >= 9) > 3))) || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 202000L && ((defined __GNUC__ && __GNUC__ >= 10) || (defined __clang__ && __clang_major__ >= 9)))
+ [[fallthrough]];
+#elif (defined __GNUC__ && __GNUC__ >= 7) || (defined __clang__ && __clang_major__ >= 10)
+ __attribute__ ((__fallthrough__));
+#endif
+ /*FALLTHROUGH*/
+ case 7:
+ hval += asso_values[(unsigned char)str[6]];
+#if (defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang__ && __clang_major__ + (__clang_minor__ >= 9) > 3))) || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 202000L && ((defined __GNUC__ && __GNUC__ >= 10) || (defined __clang__ && __clang_major__ >= 9)))
+ [[fallthrough]];
+#elif (defined __GNUC__ && __GNUC__ >= 7) || (defined __clang__ && __clang_major__ >= 10)
+ __attribute__ ((__fallthrough__));
+#endif
+ /*FALLTHROUGH*/
+ case 6:
+ hval += asso_values[(unsigned char)str[5]];
+#if (defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang__ && __clang_major__ + (__clang_minor__ >= 9) > 3))) || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 202000L && ((defined __GNUC__ && __GNUC__ >= 10) || (defined __clang__ && __clang_major__ >= 9)))
+ [[fallthrough]];
+#elif (defined __GNUC__ && __GNUC__ >= 7) || (defined __clang__ && __clang_major__ >= 10)
+ __attribute__ ((__fallthrough__));
+#endif
+ /*FALLTHROUGH*/
+ case 5:
+ case 4:
+ case 3:
+ hval += asso_values[(unsigned char)str[2]+2];
+#if (defined __cplusplus && (__cplusplus >= 201703L || (__cplusplus >= 201103L && defined __clang__ && __clang_major__ + (__clang_minor__ >= 9) > 3))) || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 202000L && ((defined __GNUC__ && __GNUC__ >= 10) || (defined __clang__ && __clang_major__ >= 9)))
+ [[fallthrough]];
+#elif (defined __GNUC__ && __GNUC__ >= 7) || (defined __clang__ && __clang_major__ >= 10)
+ __attribute__ ((__fallthrough__));
+#endif
+ /*FALLTHROUGH*/
+ case 2:
+ case 1:
+ hval += asso_values[(unsigned char)str[0]];
+ break;
+ }
+ return hval;
+}
+
+const struct svgtiny_named_color *
+svgtiny_color_lookup (register const char *str, register size_t len)
+{
+#if (defined __GNUC__ && __GNUC__ + (__GNUC_MINOR__ >= 6) > 4) || (defined __clang__ && __clang_major__ >= 3)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#endif
+ static const struct svgtiny_named_color wordlist[] =
+ {
+#line 44 "subprojects/libsvgtiny/src/colors.gperf"
+ {"cyan", svgtiny_RGB( 0, 255, 255)},
+#line 77 "subprojects/libsvgtiny/src/colors.gperf"
+ {"gray", svgtiny_RGB(128, 128, 128)},
+#line 38 "subprojects/libsvgtiny/src/colors.gperf"
+ {"chartreuse", svgtiny_RGB(127, 255, 0)},
+#line 78 "subprojects/libsvgtiny/src/colors.gperf"
+ {"grey", svgtiny_RGB(128, 128, 128)},
+#line 79 "subprojects/libsvgtiny/src/colors.gperf"
+ {"green", svgtiny_RGB( 0, 128, 0)},
+#line 97 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightgrey", svgtiny_RGB(211, 211, 211)},
+#line 96 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightgreen", svgtiny_RGB(144, 238, 144)},
+#line 95 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightgray", svgtiny_RGB(211, 211, 211)},
+#line 153 "subprojects/libsvgtiny/src/colors.gperf"
+ {"skyblue", svgtiny_RGB(135, 206, 235)},
+#line 156 "subprojects/libsvgtiny/src/colors.gperf"
+ {"slategrey", svgtiny_RGB(112, 128, 144)},
+#line 151 "subprojects/libsvgtiny/src/colors.gperf"
+ {"sienna", svgtiny_RGB(160, 82, 45)},
+#line 155 "subprojects/libsvgtiny/src/colors.gperf"
+ {"slategray", svgtiny_RGB(112, 128, 144)},
+#line 150 "subprojects/libsvgtiny/src/colors.gperf"
+ {"seashell", svgtiny_RGB(255, 245, 238)},
+#line 161 "subprojects/libsvgtiny/src/colors.gperf"
+ {"teal", svgtiny_RGB( 0, 128, 128)},
+#line 40 "subprojects/libsvgtiny/src/colors.gperf"
+ {"coral", svgtiny_RGB(255, 127, 80)},
+#line 99 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightsalmon", svgtiny_RGB(255, 160, 122)},
+#line 103 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightslategrey", svgtiny_RGB(119, 136, 153)},
+#line 31 "subprojects/libsvgtiny/src/colors.gperf"
+ {"black", svgtiny_RGB( 0, 0, 0)},
+#line 102 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightslategray", svgtiny_RGB(119, 136, 153)},
+#line 129 "subprojects/libsvgtiny/src/colors.gperf"
+ {"orange", svgtiny_RGB(255, 165, 0)},
+#line 130 "subprojects/libsvgtiny/src/colors.gperf"
+ {"orangered", svgtiny_RGB(255, 69, 0)},
+#line 30 "subprojects/libsvgtiny/src/colors.gperf"
+ {"bisque", svgtiny_RGB(255, 228, 196)},
+#line 106 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lime", svgtiny_RGB( 0, 255, 0)},
+#line 143 "subprojects/libsvgtiny/src/colors.gperf"
+ {"red", svgtiny_RGB(255, 0, 0)},
+#line 107 "subprojects/libsvgtiny/src/colors.gperf"
+ {"limegreen", svgtiny_RGB( 50, 205, 50)},
+#line 92 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightcoral", svgtiny_RGB(240, 128, 128)},
+#line 145 "subprojects/libsvgtiny/src/colors.gperf"
+ {"royalblue", svgtiny_RGB( 65, 105, 225)},
+#line 108 "subprojects/libsvgtiny/src/colors.gperf"
+ {"linen", svgtiny_RGB(250, 240, 230)},
+#line 72 "subprojects/libsvgtiny/src/colors.gperf"
+ {"fuchsia", svgtiny_RGB(255, 0, 255)},
+#line 49 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkgreen", svgtiny_RGB( 0, 100, 0)},
+#line 91 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightblue", svgtiny_RGB(173, 216, 230)},
+#line 55 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkorchid", svgtiny_RGB(153, 50, 204)},
+#line 158 "subprojects/libsvgtiny/src/colors.gperf"
+ {"springgreen", svgtiny_RGB( 0, 255, 127)},
+#line 109 "subprojects/libsvgtiny/src/colors.gperf"
+ {"magenta", svgtiny_RGB(255, 0, 255)},
+#line 75 "subprojects/libsvgtiny/src/colors.gperf"
+ {"gold", svgtiny_RGB(255, 215, 0)},
+#line 131 "subprojects/libsvgtiny/src/colors.gperf"
+ {"orchid", svgtiny_RGB(218, 112, 214)},
+#line 154 "subprojects/libsvgtiny/src/colors.gperf"
+ {"slateblue", svgtiny_RGB(106, 90, 205)},
+#line 52 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkmagenta", svgtiny_RGB(139, 0, 139)},
+#line 45 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkblue", svgtiny_RGB( 0, 0, 139)},
+#line 104 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightsteelblue", svgtiny_RGB(176, 196, 222)},
+#line 152 "subprojects/libsvgtiny/src/colors.gperf"
+ {"silver", svgtiny_RGB(192, 192, 192)},
+#line 149 "subprojects/libsvgtiny/src/colors.gperf"
+ {"seagreen", svgtiny_RGB( 46, 139, 87)},
+#line 159 "subprojects/libsvgtiny/src/colors.gperf"
+ {"steelblue", svgtiny_RGB( 70, 130, 180)},
+#line 160 "subprojects/libsvgtiny/src/colors.gperf"
+ {"tan", svgtiny_RGB(210, 180, 140)},
+#line 138 "subprojects/libsvgtiny/src/colors.gperf"
+ {"peru", svgtiny_RGB(205, 133, 63)},
+#line 142 "subprojects/libsvgtiny/src/colors.gperf"
+ {"purple", svgtiny_RGB(128, 0, 128)},
+#line 56 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkred", svgtiny_RGB(139, 0, 0)},
+#line 121 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mintcream", svgtiny_RGB(245, 255, 250)},
+#line 69 "subprojects/libsvgtiny/src/colors.gperf"
+ {"firebrick", svgtiny_RGB(178, 34, 34)},
+#line 100 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightseagreen", svgtiny_RGB( 32, 178, 170)},
+#line 53 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkolivegreen", svgtiny_RGB( 85, 107, 47)},
+#line 122 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mistyrose", svgtiny_RGB(255, 228, 225)},
+#line 84 "subprojects/libsvgtiny/src/colors.gperf"
+ {"indigo", svgtiny_RGB( 75, 0, 130)},
+#line 126 "subprojects/libsvgtiny/src/colors.gperf"
+ {"oldlace", svgtiny_RGB(253, 245, 230)},
+#line 139 "subprojects/libsvgtiny/src/colors.gperf"
+ {"pink", svgtiny_RGB(255, 192, 203)},
+#line 57 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darksalmon", svgtiny_RGB(233, 150, 122)},
+#line 87 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lavender", svgtiny_RGB(230, 230, 250)},
+#line 85 "subprojects/libsvgtiny/src/colors.gperf"
+ {"ivory", svgtiny_RGB(255, 255, 240)},
+#line 123 "subprojects/libsvgtiny/src/colors.gperf"
+ {"moccasin", svgtiny_RGB(255, 228, 181)},
+#line 37 "subprojects/libsvgtiny/src/colors.gperf"
+ {"cadetblue", svgtiny_RGB( 95, 158, 160)},
+#line 63 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkviolet", svgtiny_RGB(148, 0, 211)},
+#line 146 "subprojects/libsvgtiny/src/colors.gperf"
+ {"saddlebrown", svgtiny_RGB(139, 69, 19)},
+#line 59 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkslateblue", svgtiny_RGB( 72, 61, 139)},
+#line 133 "subprojects/libsvgtiny/src/colors.gperf"
+ {"palegreen", svgtiny_RGB(152, 251, 152)},
+#line 157 "subprojects/libsvgtiny/src/colors.gperf"
+ {"snow", svgtiny_RGB(255, 250, 250)},
+#line 83 "subprojects/libsvgtiny/src/colors.gperf"
+ {"indianred", svgtiny_RGB(205, 92, 92)},
+#line 94 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightgoldenrodyellow", svgtiny_RGB(250, 250, 210)},
+#line 163 "subprojects/libsvgtiny/src/colors.gperf"
+ {"tomato", svgtiny_RGB(255, 99, 71)},
+#line 90 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lemonchiffon", svgtiny_RGB(255, 250, 205)},
+#line 98 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightpink", svgtiny_RGB(255, 182, 193)},
+#line 110 "subprojects/libsvgtiny/src/colors.gperf"
+ {"maroon", svgtiny_RGB(128, 0, 0)},
+#line 88 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lavenderblush", svgtiny_RGB(255, 240, 245)},
+#line 164 "subprojects/libsvgtiny/src/colors.gperf"
+ {"turquoise", svgtiny_RGB( 64, 224, 208)},
+#line 54 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkorange", svgtiny_RGB(255, 140, 0)},
+#line 125 "subprojects/libsvgtiny/src/colors.gperf"
+ {"navy", svgtiny_RGB( 0, 0, 128)},
+#line 68 "subprojects/libsvgtiny/src/colors.gperf"
+ {"dodgerblue", svgtiny_RGB( 30, 144, 255)},
+#line 71 "subprojects/libsvgtiny/src/colors.gperf"
+ {"forestgreen", svgtiny_RGB( 34, 139, 34)},
+#line 120 "subprojects/libsvgtiny/src/colors.gperf"
+ {"midnightblue", svgtiny_RGB( 25, 25, 112)},
+#line 115 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mediumseagreen", svgtiny_RGB( 60, 179, 113)},
+#line 58 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkseagreen", svgtiny_RGB(143, 188, 143)},
+#line 26 "subprojects/libsvgtiny/src/colors.gperf"
+ {"aqua", svgtiny_RGB( 0, 255, 255)},
+#line 28 "subprojects/libsvgtiny/src/colors.gperf"
+ {"azure", svgtiny_RGB(240, 255, 255)},
+#line 147 "subprojects/libsvgtiny/src/colors.gperf"
+ {"salmon", svgtiny_RGB(250, 128, 114)},
+#line 166 "subprojects/libsvgtiny/src/colors.gperf"
+ {"wheat", svgtiny_RGB(245, 222, 179)},
+#line 35 "subprojects/libsvgtiny/src/colors.gperf"
+ {"brown", svgtiny_RGB(165, 42, 42)},
+#line 27 "subprojects/libsvgtiny/src/colors.gperf"
+ {"aquamarine", svgtiny_RGB(127, 255, 212)},
+#line 39 "subprojects/libsvgtiny/src/colors.gperf"
+ {"chocolate", svgtiny_RGB(210, 105, 30)},
+#line 89 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lawngreen", svgtiny_RGB(124, 252, 0)},
+#line 148 "subprojects/libsvgtiny/src/colors.gperf"
+ {"sandybrown", svgtiny_RGB(244, 164, 96)},
+#line 93 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightcyan", svgtiny_RGB(224, 255, 255)},
+#line 165 "subprojects/libsvgtiny/src/colors.gperf"
+ {"violet", svgtiny_RGB(238, 130, 238)},
+#line 105 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightyellow", svgtiny_RGB(255, 255, 224)},
+#line 112 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mediumblue", svgtiny_RGB( 0, 0, 205)},
+#line 137 "subprojects/libsvgtiny/src/colors.gperf"
+ {"peachpuff", svgtiny_RGB(255, 218, 185)},
+#line 80 "subprojects/libsvgtiny/src/colors.gperf"
+ {"greenyellow", svgtiny_RGB(173, 255, 47)},
+#line 25 "subprojects/libsvgtiny/src/colors.gperf"
+ {"antiquewhite", svgtiny_RGB(250, 235, 215)},
+#line 33 "subprojects/libsvgtiny/src/colors.gperf"
+ {"blue", svgtiny_RGB( 0, 0, 255)},
+#line 119 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mediumvioletred", svgtiny_RGB(199, 21, 133)},
+#line 114 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mediumpurple", svgtiny_RGB(147, 112, 219)},
+#line 76 "subprojects/libsvgtiny/src/colors.gperf"
+ {"goldenrod", svgtiny_RGB(218, 165, 32)},
+#line 32 "subprojects/libsvgtiny/src/colors.gperf"
+ {"blanchedalmond", svgtiny_RGB(255, 235, 205)},
+#line 86 "subprojects/libsvgtiny/src/colors.gperf"
+ {"khaki", svgtiny_RGB(240, 230, 140)},
+#line 140 "subprojects/libsvgtiny/src/colors.gperf"
+ {"plum", svgtiny_RGB(221, 160, 221)},
+#line 113 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mediumorchid", svgtiny_RGB(186, 85, 211)},
+#line 144 "subprojects/libsvgtiny/src/colors.gperf"
+ {"rosybrown", svgtiny_RGB(188, 143, 143)},
+#line 116 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mediumslateblue", svgtiny_RGB(123, 104, 238)},
+#line 62 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkturquoise", svgtiny_RGB( 0, 206, 209)},
+#line 135 "subprojects/libsvgtiny/src/colors.gperf"
+ {"palevioletred", svgtiny_RGB(219, 112, 147)},
+#line 136 "subprojects/libsvgtiny/src/colors.gperf"
+ {"papayawhip", svgtiny_RGB(255, 239, 213)},
+#line 117 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mediumspringgreen", svgtiny_RGB( 0, 250, 154)},
+#line 50 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkgrey", svgtiny_RGB(169, 169, 169)},
+#line 118 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mediumturquoise", svgtiny_RGB( 72, 209, 204)},
+#line 48 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkgray", svgtiny_RGB(169, 169, 169)},
+#line 47 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkgoldenrod", svgtiny_RGB(184, 134, 11)},
+#line 67 "subprojects/libsvgtiny/src/colors.gperf"
+ {"dimgrey", svgtiny_RGB(105, 105, 105)},
+#line 66 "subprojects/libsvgtiny/src/colors.gperf"
+ {"dimgray", svgtiny_RGB(105, 105, 105)},
+#line 81 "subprojects/libsvgtiny/src/colors.gperf"
+ {"honeydew", svgtiny_RGB(240, 255, 240)},
+#line 29 "subprojects/libsvgtiny/src/colors.gperf"
+ {"beige", svgtiny_RGB(245, 245, 220)},
+#line 162 "subprojects/libsvgtiny/src/colors.gperf"
+ {"thistle", svgtiny_RGB(216, 191, 216)},
+#line 42 "subprojects/libsvgtiny/src/colors.gperf"
+ {"cornsilk", svgtiny_RGB(255, 248, 220)},
+#line 127 "subprojects/libsvgtiny/src/colors.gperf"
+ {"olive", svgtiny_RGB(128, 128, 0)},
+#line 34 "subprojects/libsvgtiny/src/colors.gperf"
+ {"blueviolet", svgtiny_RGB(138, 43, 226)},
+#line 111 "subprojects/libsvgtiny/src/colors.gperf"
+ {"mediumaquamarine", svgtiny_RGB(102, 205, 170)},
+#line 41 "subprojects/libsvgtiny/src/colors.gperf"
+ {"cornflowerblue", svgtiny_RGB(100, 149, 237)},
+#line 24 "subprojects/libsvgtiny/src/colors.gperf"
+ {"aliceblue", svgtiny_RGB(240, 248, 255)},
+#line 141 "subprojects/libsvgtiny/src/colors.gperf"
+ {"powderblue", svgtiny_RGB(176, 224, 230)},
+#line 134 "subprojects/libsvgtiny/src/colors.gperf"
+ {"paleturquoise", svgtiny_RGB(175, 238, 238)},
+#line 61 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkslategrey", svgtiny_RGB( 47, 79, 79)},
+#line 51 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkkhaki", svgtiny_RGB(189, 183, 107)},
+#line 60 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkslategray", svgtiny_RGB( 47, 79, 79)},
+#line 74 "subprojects/libsvgtiny/src/colors.gperf"
+ {"ghostwhite", svgtiny_RGB(248, 248, 255)},
+#line 128 "subprojects/libsvgtiny/src/colors.gperf"
+ {"olivedrab", svgtiny_RGB(107, 142, 35)},
+#line 132 "subprojects/libsvgtiny/src/colors.gperf"
+ {"palegoldenrod", svgtiny_RGB(238, 232, 170)},
+#line 46 "subprojects/libsvgtiny/src/colors.gperf"
+ {"darkcyan", svgtiny_RGB( 0, 139, 139)},
+#line 82 "subprojects/libsvgtiny/src/colors.gperf"
+ {"hotpink", svgtiny_RGB(255, 105, 180)},
+#line 73 "subprojects/libsvgtiny/src/colors.gperf"
+ {"gainsboro", svgtiny_RGB(220, 220, 220)},
+#line 64 "subprojects/libsvgtiny/src/colors.gperf"
+ {"deeppink", svgtiny_RGB(255, 20, 147)},
+#line 43 "subprojects/libsvgtiny/src/colors.gperf"
+ {"crimson", svgtiny_RGB(220, 20, 60)},
+#line 36 "subprojects/libsvgtiny/src/colors.gperf"
+ {"burlywood", svgtiny_RGB(222, 184, 135)},
+#line 70 "subprojects/libsvgtiny/src/colors.gperf"
+ {"floralwhite", svgtiny_RGB(255, 250, 240)},
+#line 167 "subprojects/libsvgtiny/src/colors.gperf"
+ {"white", svgtiny_RGB(255, 255, 255)},
+#line 124 "subprojects/libsvgtiny/src/colors.gperf"
+ {"navajowhite", svgtiny_RGB(255, 222, 173)},
+#line 169 "subprojects/libsvgtiny/src/colors.gperf"
+ {"yellow", svgtiny_RGB(255, 255, 0)},
+#line 170 "subprojects/libsvgtiny/src/colors.gperf"
+ {"yellowgreen", svgtiny_RGB(154, 205, 50)},
+#line 101 "subprojects/libsvgtiny/src/colors.gperf"
+ {"lightskyblue", svgtiny_RGB(135, 206, 250)},
+#line 65 "subprojects/libsvgtiny/src/colors.gperf"
+ {"deepskyblue", svgtiny_RGB( 0, 191, 255)},
+#line 168 "subprojects/libsvgtiny/src/colors.gperf"
+ {"whitesmoke", svgtiny_RGB(245, 245, 245)}
+ };
+#if (defined __GNUC__ && __GNUC__ + (__GNUC_MINOR__ >= 6) > 4) || (defined __clang__ && __clang_major__ >= 3)
+#pragma GCC diagnostic pop
+#endif
+
+ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+ {
+ register unsigned int key = svgtiny_color_hash (str, len);
+
+ if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
+ {
+ register const struct svgtiny_named_color *resword;
+
+ switch (key - 4)
+ {
+ case 0:
+ resword = &wordlist[0];
+ goto compare;
+ case 10:
+ resword = &wordlist[1];
+ goto compare;
+ case 16:
+ resword = &wordlist[2];
+ goto compare;
+ case 20:
+ resword = &wordlist[3];
+ goto compare;
+ case 21:
+ resword = &wordlist[4];
+ goto compare;
+ case 25:
+ resword = &wordlist[5];
+ goto compare;
+ case 26:
+ resword = &wordlist[6];
+ goto compare;
+ case 30:
+ resword = &wordlist[7];
+ goto compare;
+ case 33:
+ resword = &wordlist[8];
+ goto compare;
+ case 35:
+ resword = &wordlist[9];
+ goto compare;
+ case 37:
+ resword = &wordlist[10];
+ goto compare;
+ case 40:
+ resword = &wordlist[11];
+ goto compare;
+ case 44:
+ resword = &wordlist[12];
+ goto compare;
+ case 45:
+ resword = &wordlist[13];
+ goto compare;
+ case 46:
+ resword = &wordlist[14];
+ goto compare;
+ case 52:
+ resword = &wordlist[15];
+ goto compare;
+ case 55:
+ resword = &wordlist[16];
+ goto compare;
+ case 56:
+ resword = &wordlist[17];
+ goto compare;
+ case 60:
+ resword = &wordlist[18];
+ goto compare;
+ case 62:
+ resword = &wordlist[19];
+ goto compare;
+ case 65:
+ resword = &wordlist[20];
+ goto compare;
+ case 67:
+ resword = &wordlist[21];
+ goto compare;
+ case 70:
+ resword = &wordlist[22];
+ goto compare;
+ case 74:
+ resword = &wordlist[23];
+ goto compare;
+ case 75:
+ resword = &wordlist[24];
+ goto compare;
+ case 76:
+ resword = &wordlist[25];
+ goto compare;
+ case 80:
+ resword = &wordlist[26];
+ goto compare;
+ case 81:
+ resword = &wordlist[27];
+ goto compare;
+ case 83:
+ resword = &wordlist[28];
+ goto compare;
+ case 85:
+ resword = &wordlist[29];
+ goto compare;
+ case 90:
+ resword = &wordlist[30];
+ goto compare;
+ case 91:
+ resword = &wordlist[31];
+ goto compare;
+ case 92:
+ resword = &wordlist[32];
+ goto compare;
+ case 93:
+ resword = &wordlist[33];
+ goto compare;
+ case 95:
+ resword = &wordlist[34];
+ goto compare;
+ case 97:
+ resword = &wordlist[35];
+ goto compare;
+ case 100:
+ resword = &wordlist[36];
+ goto compare;
+ case 102:
+ resword = &wordlist[37];
+ goto compare;
+ case 104:
+ resword = &wordlist[38];
+ goto compare;
+ case 105:
+ resword = &wordlist[39];
+ goto compare;
+ case 107:
+ resword = &wordlist[40];
+ goto compare;
+ case 109:
+ resword = &wordlist[41];
+ goto compare;
+ case 110:
+ resword = &wordlist[42];
+ goto compare;
+ case 114:
+ resword = &wordlist[43];
+ goto compare;
+ case 115:
+ resword = &wordlist[44];
+ goto compare;
+ case 117:
+ resword = &wordlist[45];
+ goto compare;
+ case 118:
+ resword = &wordlist[46];
+ goto compare;
+ case 120:
+ resword = &wordlist[47];
+ goto compare;
+ case 125:
+ resword = &wordlist[48];
+ goto compare;
+ case 129:
+ resword = &wordlist[49];
+ goto compare;
+ case 130:
+ resword = &wordlist[50];
+ goto compare;
+ case 135:
+ resword = &wordlist[51];
+ goto compare;
+ case 137:
+ resword = &wordlist[52];
+ goto compare;
+ case 138:
+ resword = &wordlist[53];
+ goto compare;
+ case 140:
+ resword = &wordlist[54];
+ goto compare;
+ case 141:
+ resword = &wordlist[55];
+ goto compare;
+ case 144:
+ resword = &wordlist[56];
+ goto compare;
+ case 145:
+ resword = &wordlist[57];
+ goto compare;
+ case 149:
+ resword = &wordlist[58];
+ goto compare;
+ case 155:
+ resword = &wordlist[59];
+ goto compare;
+ case 156:
+ resword = &wordlist[60];
+ goto compare;
+ case 157:
+ resword = &wordlist[61];
+ goto compare;
+ case 159:
+ resword = &wordlist[62];
+ goto compare;
+ case 160:
+ resword = &wordlist[63];
+ goto compare;
+ case 164:
+ resword = &wordlist[64];
+ goto compare;
+ case 165:
+ resword = &wordlist[65];
+ goto compare;
+ case 166:
+ resword = &wordlist[66];
+ goto compare;
+ case 167:
+ resword = &wordlist[67];
+ goto compare;
+ case 168:
+ resword = &wordlist[68];
+ goto compare;
+ case 170:
+ resword = &wordlist[69];
+ goto compare;
+ case 172:
+ resword = &wordlist[70];
+ goto compare;
+ case 174:
+ resword = &wordlist[71];
+ goto compare;
+ case 175:
+ resword = &wordlist[72];
+ goto compare;
+ case 176:
+ resword = &wordlist[73];
+ goto compare;
+ case 180:
+ resword = &wordlist[74];
+ goto compare;
+ case 181:
+ resword = &wordlist[75];
+ goto compare;
+ case 182:
+ resword = &wordlist[76];
+ goto compare;
+ case 183:
+ resword = &wordlist[77];
+ goto compare;
+ case 185:
+ resword = &wordlist[78];
+ goto compare;
+ case 188:
+ resword = &wordlist[79];
+ goto compare;
+ case 190:
+ resword = &wordlist[80];
+ goto compare;
+ case 191:
+ resword = &wordlist[81];
+ goto compare;
+ case 192:
+ resword = &wordlist[82];
+ goto compare;
+ case 196:
+ resword = &wordlist[83];
+ goto compare;
+ case 200:
+ resword = &wordlist[84];
+ goto compare;
+ case 201:
+ resword = &wordlist[85];
+ goto compare;
+ case 209:
+ resword = &wordlist[86];
+ goto compare;
+ case 210:
+ resword = &wordlist[87];
+ goto compare;
+ case 211:
+ resword = &wordlist[88];
+ goto compare;
+ case 215:
+ resword = &wordlist[89];
+ goto compare;
+ case 221:
+ resword = &wordlist[90];
+ goto compare;
+ case 222:
+ resword = &wordlist[91];
+ goto compare;
+ case 226:
+ resword = &wordlist[92];
+ goto compare;
+ case 230:
+ resword = &wordlist[93];
+ goto compare;
+ case 232:
+ resword = &wordlist[94];
+ goto compare;
+ case 238:
+ resword = &wordlist[95];
+ goto compare;
+ case 240:
+ resword = &wordlist[96];
+ goto compare;
+ case 241:
+ resword = &wordlist[97];
+ goto compare;
+ case 243:
+ resword = &wordlist[98];
+ goto compare;
+ case 245:
+ resword = &wordlist[99];
+ goto compare;
+ case 250:
+ resword = &wordlist[100];
+ goto compare;
+ case 251:
+ resword = &wordlist[101];
+ goto compare;
+ case 255:
+ resword = &wordlist[102];
+ goto compare;
+ case 258:
+ resword = &wordlist[103];
+ goto compare;
+ case 260:
+ resword = &wordlist[104];
+ goto compare;
+ case 261:
+ resword = &wordlist[105];
+ goto compare;
+ case 263:
+ resword = &wordlist[106];
+ goto compare;
+ case 269:
+ resword = &wordlist[107];
+ goto compare;
+ case 271:
+ resword = &wordlist[108];
+ goto compare;
+ case 278:
+ resword = &wordlist[109];
+ goto compare;
+ case 279:
+ resword = &wordlist[110];
+ goto compare;
+ case 281:
+ resword = &wordlist[111];
+ goto compare;
+ case 284:
+ resword = &wordlist[112];
+ goto compare;
+ case 289:
+ resword = &wordlist[113];
+ goto compare;
+ case 293:
+ resword = &wordlist[114];
+ goto compare;
+ case 298:
+ resword = &wordlist[115];
+ goto compare;
+ case 299:
+ resword = &wordlist[116];
+ goto compare;
+ case 306:
+ resword = &wordlist[117];
+ goto compare;
+ case 308:
+ resword = &wordlist[118];
+ goto compare;
+ case 309:
+ resword = &wordlist[119];
+ goto compare;
+ case 311:
+ resword = &wordlist[120];
+ goto compare;
+ case 316:
+ resword = &wordlist[121];
+ goto compare;
+ case 321:
+ resword = &wordlist[122];
+ goto compare;
+ case 330:
+ resword = &wordlist[123];
+ goto compare;
+ case 335:
+ resword = &wordlist[124];
+ goto compare;
+ case 336:
+ resword = &wordlist[125];
+ goto compare;
+ case 338:
+ resword = &wordlist[126];
+ goto compare;
+ case 344:
+ resword = &wordlist[127];
+ goto compare;
+ case 345:
+ resword = &wordlist[128];
+ goto compare;
+ case 349:
+ resword = &wordlist[129];
+ goto compare;
+ case 350:
+ resword = &wordlist[130];
+ goto compare;
+ case 355:
+ resword = &wordlist[131];
+ goto compare;
+ case 364:
+ resword = &wordlist[132];
+ goto compare;
+ case 369:
+ resword = &wordlist[133];
+ goto compare;
+ case 373:
+ resword = &wordlist[134];
+ goto compare;
+ case 380:
+ resword = &wordlist[135];
+ goto compare;
+ case 384:
+ resword = &wordlist[136];
+ goto compare;
+ case 398:
+ resword = &wordlist[137];
+ goto compare;
+ case 410:
+ resword = &wordlist[138];
+ goto compare;
+ case 426:
+ resword = &wordlist[139];
+ goto compare;
+ case 436:
+ resword = &wordlist[140];
+ goto compare;
+ case 437:
+ resword = &wordlist[141];
+ goto compare;
+ case 467:
+ resword = &wordlist[142];
+ goto compare;
+ case 482:
+ resword = &wordlist[143];
+ goto compare;
+ case 483:
+ resword = &wordlist[144];
+ goto compare;
+ case 552:
+ resword = &wordlist[145];
+ goto compare;
+ case 561:
+ resword = &wordlist[146];
+ goto compare;
+ }
+ return (struct svgtiny_named_color *) 0;
+ compare:
+ {
+ register const char *s = resword->name;
+
+ if (*str == *s && !strcmp (str + 1, s + 1))
+ return resword;
+ }
+ }
+ }
+ return (struct svgtiny_named_color *) 0;
+}
diff --git a/subprojects/packagefiles/libsvgtiny/meson.build b/subprojects/packagefiles/libsvgtiny/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..f5b3b81ae981d58b47eecb8044175d8f43870d03
--- /dev/null
+++ b/subprojects/packagefiles/libsvgtiny/meson.build
@@ -0,0 +1,20 @@
+project('libsvgtiny', 'c', version: '0.1.8', default_options: ['c_std=c99'])
+
+dom_dep = dependency('libdom')
+wapcaplet_dep = dependency('libwapcaplet')
+
+inc = include_directories('.', 'include', 'src')
+libsvgtiny = static_library(
+ 'svgtiny',
+ files('src/svgtiny.c', 'src/svgtiny_gradient.c', 'src/svgtiny_list.c'),
+ include_directories: inc,
+ dependencies: [dom_dep, wapcaplet_dep],
+ c_args: ['-D_BSD_SOURCE', '-D_DEFAULT_SOURCE'],
+)
+
+libsvgtiny_dep = declare_dependency(
+ link_with: libsvgtiny,
+ include_directories: inc,
+ dependencies: [dom_dep, wapcaplet_dep],
+)
+meson.override_dependency('libsvgtiny', libsvgtiny_dep)
diff --git a/subprojects/packagefiles/libutf8proc/meson.build b/subprojects/packagefiles/libutf8proc/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..3b695fe999a508f5415a5ace12f9d565c8f3ba40
--- /dev/null
+++ b/subprojects/packagefiles/libutf8proc/meson.build
@@ -0,0 +1,16 @@
+project('libutf8proc', 'c', version: '2.4.0', default_options: ['c_std=c99'])
+
+public_inc = include_directories('include')
+private_inc = include_directories('include/libutf8proc')
+libutf8proc = static_library(
+ 'utf8proc',
+ 'src/utf8proc.c',
+ include_directories: private_inc,
+ c_args: ['-DUTF8PROC_EXPORTS'],
+)
+
+libutf8proc_dep = declare_dependency(
+ link_with: libutf8proc,
+ include_directories: public_inc,
+)
+meson.override_dependency('libutf8proc', libutf8proc_dep)
diff --git a/subprojects/packagefiles/libwapcaplet/meson.build b/subprojects/packagefiles/libwapcaplet/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..db91a95b3d418dfb0f2a06423cb75dad421e8aef
--- /dev/null
+++ b/subprojects/packagefiles/libwapcaplet/meson.build
@@ -0,0 +1,15 @@
+project('libwapcaplet', 'c', version: '0.4.3', default_options: ['c_std=c99'])
+
+inc = include_directories('include')
+libwapcaplet = static_library(
+ 'wapcaplet',
+ 'src/libwapcaplet.c',
+ include_directories: inc,
+ c_args: ['-D_BSD_SOURCE', '-D_DEFAULT_SOURCE'],
+)
+
+libwapcaplet_dep = declare_dependency(
+ link_with: libwapcaplet,
+ include_directories: inc,
+)
+meson.override_dependency('libwapcaplet', libwapcaplet_dep)
diff --git a/testament.h.in b/testament.h.in
new file mode 100644
index 0000000000000000000000000000000000000000..2417b6c8604161f7e14092765fd2acabd092c116
--- /dev/null
+++ b/testament.h.in
@@ -0,0 +1,8 @@
+#ifndef NETSURF_REVISION_TESTAMENT
+#define NETSURF_REVISION_TESTAMENT 1
+
+#define WT_NO_GIT 1
+#define WT_MODIFIED 0
+#define WT_MODIFICATIONS {{NULL, NULL}}
+
+#endif
diff --git a/tools/messages.awk b/tools/messages.awk
new file mode 100644
index 0000000000000000000000000000000000000000..aeaea725990ef15aa9fd74551bebbf43f3a792b7
--- /dev/null
+++ b/tools/messages.awk
@@ -0,0 +1,8 @@
+/^(#|$)/ {next}
+{
+ i = index($0, ":")
+ if (!i) next
+ split(substr($0, 1, i - 1), key, ".")
+ if (lang == key[1] && (filter == "any" || key[2] == "all" || key[3] == filter))
+ print key[3] substr($0, i)
+}
