Beispiel #1
0
static BOOL find_node_end(stream_t *stream, strbuf_t *buf)
{
    int tag_count = 0, b = buf->len;
    char *p;

    while(1)
    {
        if(!stream_chr(stream, buf, '>'))
            return FALSE;
        if(buf->len == 0)
            break;
        p = &buf->buf[b];
        while((p = memchr(p+1, '"', buf->len-(p+1-buf->buf))) != NULL)
            tag_count++;
        b = buf->len;
        if(tag_count % 2 != 0)
        {
            if(!stream_chr(stream, buf, '"'))
                return FALSE;
            tag_count++;
        }
        else
            break;
    }
    return TRUE;
}
Beispiel #2
0
BOOL next_node(stream_t *stream, strbuf_t *buf)
{
    if(!stream_chr(stream, NULL, '<'))
        return FALSE;

    if(!stream_chr(stream, buf, '>'))
        return FALSE;

    strbuf_append(buf, ">", 2);

    return TRUE;
}
Beispiel #3
0
/* Return the stream content up to the next HTML tag.
 *
 * Note: the first returned character is the end of the last tag (>).
 */
BOOL next_content(stream_t *stream, strbuf_t *buf)
{
    if(!stream_chr(stream, buf, '<'))
        return FALSE;

    return TRUE;
}
Beispiel #4
0
BOOL next_node(stream_t *stream, strbuf_t *buf)
{
    strbuf_t tmpbuf;

    /* search through the end of the current node */
    strbuf_init(&tmpbuf);
    if(!find_node_end(stream, &tmpbuf))
    {
        strbuf_free(&tmpbuf);
        return FALSE;
    }
    strbuf_free(&tmpbuf);

    /* find the beginning of the next node */
    if(!stream_chr(stream, NULL, '<'))
        return FALSE;

    /* read out the data of the next node */
    if(!find_node_end(stream, buf))
        return FALSE;

    strbuf_append(buf, ">", 2);

    return TRUE;
}
Beispiel #5
0
BOOL next_node(stream_t *stream, strbuf_t *buf)
{
    /* find the beginning of the next node */
    if(!stream_chr(stream, NULL, '<'))
        return FALSE;

    /* read out the data of the next node */
    if(!find_node_end(stream, buf))
        return FALSE;

    strbuf_append(buf, ">", 2);

    return TRUE;
}