diff options
Diffstat (limited to 'graphics/sketch/opts.h')
-rw-r--r-- | graphics/sketch/opts.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/graphics/sketch/opts.h b/graphics/sketch/opts.h new file mode 100644 index 0000000000..38e87a4d80 --- /dev/null +++ b/graphics/sketch/opts.h @@ -0,0 +1,101 @@ +/* opts.h + Copyright (C) 2005,2006,2007 Eugene K. Ressler, Jr. + +This file is part of Sketch, a small, simple system for making +3d drawings with LaTeX and the PSTricks or TikZ package. + +Sketch 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, or (at your option) +any later version. + +Sketch 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 Sketch; see the file COPYING.txt. If not, see +http://www.gnu.org/copyleft */ + +#ifndef __OPTS_H +#define __OPTS_H + +#include <stdio.h> +#include "dynarray.h" +#include "error.h" + +#define OPT_NONE 0x00 + +// type flags +#define OPT_INTERNAL 0x01 +#define OPT_LINE 0x02 +#define OPT_POLYGON 0x04 + +// default class flags +#define OPT_LINE_STYLE 0x08 +#define OPT_FILL_STYLE 0x10 +#define OPT_FILL_COLOR 0x20 +#define OPT_DEFAULTS (OPT_LINE_STYLE|OPT_FILL_STYLE|OPT_FILL_COLOR) + +// key doesn't have type information; use val +#define OPT_TYPE_IN_VAL 0x40 + +// sufficient to emit value without key +#define OPT_EMIT_VAL 0x80 + +// some dynamic array types +typedef struct opt_t +{ + char *key, *val; +} +OPT; + +typedef struct opt_list_t +{ + DYNAMIC_ARRAY_FIELDS (OPT, elt, n_elts); +} +OPT_LIST; + +DECLARE_DYNAMIC_ARRAY_PROTOS (OPT_LIST, OPT, opt_list, elt, n_elts) + +typedef struct opts_t +{ + // DEBUG: could cache list data here for speed + OPT_LIST list[1]; +} +OPTS; + +void init_opts (OPTS * opts); +void setup_opts (OPTS * opts, char *opt_str, SRC_LINE line); +OPTS *raw_opts (void); +OPTS *new_opts (char *opts_str, SRC_LINE line); +void clear_opts (OPTS * opts); +char *opt_val (OPTS * opts, char *opt); +int bool_opt_p (OPTS * opts, char *opt, int default_p); +int opt_type (OPT * opt, int default_type, int lang); +void add_no_edges_default_opt (OPTS ** opts_ptr, int lang); +void add_solid_white_default_opt (OPTS ** opts_ptr, int lang); +// selective copy for splitting option lists by type +OPTS *copy_opts (OPTS * opts, int type_mask, int lang); +OPTS *cat_opts (OPTS * dst, OPTS * src); +// selective copy for splitting out line options and modifying arrows +OPTS *copy_line_opts (OPTS * opts, int first_p, int last_p, int lang); +void emit_opts_raw (FILE * f, OPTS * opts, int lang); +void emit_opts (FILE * f, OPTS * opts, int lang); +void emit_opts_with_exceptions (FILE * f, OPTS * opts, char ** exceptions, int lang); +void check_opts (OPTS * opts, + int allowed, char *allowed_msg, int lang, + SRC_LINE line); + +// slice src into dest using Perl/Python conventions +char *str_slice (char *dst, int dst_size, char *src, int beg, int end); +#define SLICE_TO_END ((int)(~0u >> 1)) + +// find last occurance of aachar in set in src; return index or -1 if none +int str_last_occurance (char *src, char *set); + +// strtok with a state variable instead of static +char *istrtok (int *p, char *s, char sep); + +#endif |