diff options
author | Akinori Ito <aito@eie.yz.yamagata-u.ac.jp> | 2001-11-08 05:14:08 +0000 |
---|---|---|
committer | Akinori Ito <aito@eie.yz.yamagata-u.ac.jp> | 2001-11-08 05:14:08 +0000 |
commit | 68a07bf03b7624c9924065cce9ffa45497225834 (patch) | |
tree | c2adb06a909a8594445e4a3f8587c4bad46e3ecd /parsetag.c | |
download | w3m-68a07bf03b7624c9924065cce9ffa45497225834.tar.gz w3m-68a07bf03b7624c9924065cce9ffa45497225834.zip |
Initial revision
Diffstat (limited to '')
-rw-r--r-- | parsetag.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/parsetag.c b/parsetag.c new file mode 100644 index 0000000..9cafd95 --- /dev/null +++ b/parsetag.c @@ -0,0 +1,56 @@ +#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 = 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 = form_unquote(value)->ptr; + } + else if (*cgistr == '&') + cgistr++; + } while (*cgistr); + return t; +} |