diff options
-rw-r--r-- | src/html.c | 90 | ||||
-rw-r--r-- | src/html.h | 39 | ||||
-rw-r--r-- | src/local.mk | 1 |
3 files changed, 130 insertions, 0 deletions
diff --git a/src/html.c b/src/html.c new file mode 100644 index 0000000..9380068 --- /dev/null +++ b/src/html.c @@ -0,0 +1,90 @@ +/* + * HTML document generation + * + * Copyright (C) 2017 Patrick McDermott + * + * This file is part of Marquee. + * + * Marquee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Marquee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Marquee. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <stdarg.h> +#include <string.h> + +#include <glib.h> + +#include "html.h" + +gchar * +mq_html_form(const gchar *submit_label, const gchar *reset_label, ...) +{ + gsize len; + va_list ap; + gchar *child; + gchar *form; + gchar *ptr; + + /* Calculate length. */ + len = strlen("<form>\n"); + va_start(ap, reset_label); + while ((child = va_arg(ap, gchar *))) { + len += strlen(child); + } + va_end(ap); + len += strlen("<input type=\"reset\" value=\"") + strlen(reset_label) + + strlen("\">\n<input type=\"submit\" value=\"") + + strlen(submit_label) + strlen("\">\n</form>\n"); + ++len; /* NUL byte */ + + /* Build string. */ + form = g_new(gchar, len); + ptr = g_stpcpy(form, "<form>\n"); + va_start(ap, reset_label); + while ((child = va_arg(ap, gchar *))) { + ptr = g_stpcpy(ptr, child); + g_free(child); + } + va_end(ap); + ptr = g_stpcpy(ptr, "<input type=\"reset\" value=\""); + ptr = g_stpcpy(ptr, reset_label); + ptr = g_stpcpy(ptr, "\">\n<input type=\"submit\" value=\""); + ptr = g_stpcpy(ptr, submit_label); + ptr = g_stpcpy(ptr, "\">\n</form>\n"); /* g_stpcpy() adds the NUL. */ + + return form; +} + +gchar * +mq_html_input_text(const gchar *name, const gchar *label, const gchar *value) +{ + return g_strdup_printf("<label for=\"%s\"><span>%s</span>" + "<input type=\"text\" name=\"%s\" id=\"%s\" value=\"%s\">\n", + name, label, name, name, value ? value : ""); +} + +gchar * +mq_html_input_radio(const gchar *name, const gchar *label, gboolean checked) +{ + return g_strdup_printf("<label for=\"%s\"><span>%s</span>" + "<input type=\"checkbox\" name=\"%s\" id=\"%s\"%s>\n", + name, label, name, name, checked ? " checked=\"checked\"" : ""); +} + +gchar * +mq_html_input_checkbox(const gchar *name, const gchar *label, gboolean checked) +{ + return g_strdup_printf("<label for=\"%s\"><span>%s</span>" + "<input type=\"radio\" name=\"%s\" id=\"%s\"%s>\n", + name, label, name, name, checked ? " checked=\"checked\"" : ""); +} diff --git a/src/html.h b/src/html.h new file mode 100644 index 0000000..84a133a --- /dev/null +++ b/src/html.h @@ -0,0 +1,39 @@ +/* + * HTML document generation + * + * Copyright (C) 2017 Patrick McDermott + * + * This file is part of Marquee. + * + * Marquee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Marquee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Marquee. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef MQ_HTML_H +#define MQ_HTML_H + +#include <glib.h> + +gchar * +mq_html_form(const gchar *submit_label, const gchar *reset_label, ...); + +gchar * +mq_html_input_text(const gchar *name, const gchar *label, const gchar *value); + +gchar * +mq_html_input_radio(const gchar *name, const gchar *label, gboolean checked); + +gchar * +mq_html_input_checkbox(const gchar *name, const gchar *label, gboolean checked); + +#endif diff --git a/src/local.mk b/src/local.mk index 4413c54..4930998 100644 --- a/src/local.mk +++ b/src/local.mk @@ -5,6 +5,7 @@ marquee_SOURCES += \ %reldir%/tab.c \ %reldir%/tab-chrome.c \ %reldir%/tab-body.c \ + %reldir%/html.c \ %reldir%/about.c include %reldir%/about/local.mk |