Template for internal export module.
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <limits.h>
#include "export.h"
typedef struct tmpl_instance
{
int flip;
int day;
int prime;
double quality;
char * comment;
int weekday;
int counter;
} tmpl_instance;
#define TMPL(e) PARENT(e, tmpl_instance, export);
tmpl_new(void)
{
tmpl_instance *tmpl;
if (!(tmpl = calloc(1, sizeof(*tmpl))))
return NULL;
tmpl->counter = 0;
return &tmpl->export;
}
static void
{
tmpl_instance *tmpl = TMPL(e);
if (tmpl->comment)
free(tmpl->comment);
free(tmpl);
}
#define elements(array) (sizeof(array) / sizeof(array[0]))
static const char *
string_menu_items[] = {
N_("Sunday"), N_("Monday"), N_("Tuesday"),
N_("Wednesday"), N_("Thursday"), N_("Friday"), N_("Saturday")
};
static int
int_menu_items[] = {
1, 3, 5, 7, 11, 13, 17, 19
};
tmpl_options[] = {
("flip", N_("Boolean option"),
FALSE, N_("This is a boolean option")),
("day", N_("Select a month day"),
13, 1, 31, 1, NULL),
("prime", N_("Select a prime"),
0, int_menu_items, elements(int_menu_items),
N_("Default is the first, '1'")),
("quality", N_("Compression quality"),
100, 1, 100, 0.01, NULL),
("comment", N_("Add a comment"),
"default comment", N_("Another tooltip")),
("weekday", N_("Select a weekday"),
2, string_menu_items, 7, N_("Default is Tuesday"))
};
{
e = e;
if (index < 0 || index >= (int) elements(tmpl_options))
return NULL;
return tmpl_options + index;
}
#define KEYWORD(str) (strcmp(keyword, str) == 0)
static vbi_bool
{
tmpl_instance *tmpl = TMPL(e);
if (KEYWORD("flip")) {
} else if (KEYWORD("day")) {
value->num = tmpl->day;
} else if (KEYWORD("prime")) {
value->num = tmpl->prime;
} else if (KEYWORD("quality")) {
value->
dbl = tmpl->quality;
} else if (KEYWORD("comment")) {
tmpl->comment ? tmpl->comment : "")))
return FALSE;
} else if (KEYWORD("weekday")) {
value->num = tmpl->weekday;
} else {
return FALSE;
}
return TRUE;
}
static vbi_bool
option_set(
vbi_export *e,
const char *keyword, va_list args)
{
tmpl_instance *tmpl = TMPL(e);
if (KEYWORD("flip")) {
tmpl->flip = !!va_arg(args, int);
} else if (KEYWORD("day")) {
int day = va_arg(args, int);
if (day < 1 || day > 31) {
return FALSE;
}
tmpl->day = day;
} else if (KEYWORD("prime")) {
unsigned int i;
unsigned int d, dmin = UINT_MAX;
int value = va_arg(args, int);
for (i = 0; i < elements(int_menu_items); i++)
if ((d = abs(int_menu_items[i] - value)) < dmin) {
tmpl->prime = int_menu_items[i];
dmin = d;
}
} else if (KEYWORD("quality")) {
double quality = va_arg(args, double);
if (quality < 1)
quality = 1;
else if (quality > 100)
quality = 100;
tmpl->quality = quality;
} else if (KEYWORD("comment")) {
char *comment = va_arg(args, char *);
return FALSE;
} else if (KEYWORD("weekday")) {
int day = va_arg(args, int);
tmpl->weekday = day % 7;
} else {
return FALSE;
}
return TRUE;
}
static vbi_bool
{
tmpl_instance *tmpl = TMPL(e);
vbi_export_printf (e,
"Page %x.%x\n", pg->
pgno, pg->
subno);
tmpl->counter++;
return FALSE;
}
info_tmpl = {
.label = N_("Template"),
.tooltip = N_("This is just an export template"),
.mime_type = "misc/example",
.extension = "tmpl",
};
vbi_export_class_tmpl = {
._new = tmpl_new,
._delete = tmpl_delete,
.option_enum = option_enum,
.option_get = option_get,
.option_set = option_set,
.export = export
};
#if 0
#endif