diff options
author | admin@progandy.co.cc <admin@progandy.co.cc@eced67a3-f377-a0ae-92ae-d6de1850b05a> | 2010-09-13 18:11:13 +0000 |
---|---|---|
committer | admin@progandy.co.cc <admin@progandy.co.cc@eced67a3-f377-a0ae-92ae-d6de1850b05a> | 2010-09-13 18:11:13 +0000 |
commit | 376594ac1d65cbb31165f5a74775d624c3fd2981 (patch) | |
tree | b1f9bf2ee2f1a82c5d9378c03cf09f72535c001d /ekhtml/src/ekhtml_special.c | |
parent | 99ef7f1cfcaa4ead4b860faec88754abbe31ebfc (diff) |
- added basic html conversion for receiving (maybe a bit too powerful)
- some bugfixes
git-svn-id: http://mirotr.googlecode.com/svn/trunk@12 eced67a3-f377-a0ae-92ae-d6de1850b05a
Diffstat (limited to 'ekhtml/src/ekhtml_special.c')
-rw-r--r-- | ekhtml/src/ekhtml_special.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/ekhtml/src/ekhtml_special.c b/ekhtml/src/ekhtml_special.c new file mode 100644 index 0000000..f43a62d --- /dev/null +++ b/ekhtml/src/ekhtml_special.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2002, Jon Travis + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <assert.h> + +#include "ekhtml_config.h" +#include "ekhtml.h" +#include "ekhtml_tables.h" +#define EKHTML_USE_PRIVATE +#include "ekhtml_private.h" + +char *ekhtml_parse_special(ekhtml_parser_t *parser, void **state_data, + const char *curp, const char *endp, + int *baddata) +{ + const char *workp; + int *offset = &parser->state.offset; + + assert(*curp == '<' && *(curp + 1) == '!'); + + if(*state_data == NULL){/* Only called the first time the tag is started */ + *offset = 2; + *state_data = (void *)1; /* Assign it any non-NULL value */ + } + + for(workp=curp + *offset;workp != endp; workp++) + if(*workp == '<' || *workp == '>') + break; + + if(workp == endp){ + /* No end of tag found yet, save state */ + *offset = endp - curp; + return NULL; + } + + if(parser->datacb){ + ekhtml_string_t str; + + str.str = curp; + str.len = workp - curp + 1; + parser->datacb(parser->cbdata, &str); + } + + *state_data = NULL; + if(*workp == '<') /* Malformed HTML */ + return (char *)workp; + else + return (char *)workp + 1; +} |