diff options
Diffstat (limited to 'parsetag.c')
-rw-r--r-- | parsetag.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/parsetag.c b/parsetag.c new file mode 100644 index 0000000..7713c14 --- /dev/null +++ b/parsetag.c @@ -0,0 +1,57 @@ +/* $Id: parsetag.c,v 1.4 2001/11/20 17:49:23 ukai Exp $ */ +#include "myctype.h" +#include "indep.h" +#include "Str.h" +#include "parsetag.h" + +char * +tag_get_value(struct parsed_tagarg *t, char *arg) +{ + for (; t; t = t->next) { + if (!strcasecmp(t->arg, arg)) + return t->value; + } + return NULL; +} + +int +tag_exists(struct parsed_tagarg *t, char *arg) +{ + for (; t; t = t->next) { + if (!strcasecmp(t->arg, arg)) + return 1; + } + return 0; +} + +struct parsed_tagarg * +cgistr2tagarg(char *cgistr) +{ + Str tag; + Str value; + struct parsed_tagarg *t0, *t; + + t = t0 = NULL; + do { + t = New(struct parsed_tagarg); + t->next = t0; + t0 = t; + tag = Strnew(); + while (*cgistr && *cgistr != '=' && *cgistr != '&') + Strcat_char(tag, *cgistr++); + t->arg = Str_form_unquote(tag)->ptr; + t->value = NULL; + if (*cgistr == '\0') + return t; + else if (*cgistr == '=') { + cgistr++; + value = Strnew(); + while (*cgistr && *cgistr != '&') + Strcat_char(value, *cgistr++); + t->value = Str_form_unquote(value)->ptr; + } + else if (*cgistr == '&') + cgistr++; + } while (*cgistr); + return t; +} |