diff options
| author | Martin Fischer <martin@push-f.com> | 2021-04-08 08:42:01 +0200 | 
|---|---|---|
| committer | Martin Fischer <martin@push-f.com> | 2021-04-08 15:40:37 +0200 | 
| commit | 57e7eefcbe6fb8c3dc4b01c707be9de4c34963a7 (patch) | |
| tree | 6a9d296389bf3023396592c8514ed6712e011c7f /examples/capi | |
import https://github.com/servo/html5ever
commit d1206daa740305f55a5fa159e43eb33afc359cb4
Diffstat (limited to 'examples/capi')
| -rw-r--r-- | examples/capi/tokenize.c | 74 | 
1 files changed, 74 insertions, 0 deletions
| diff --git a/examples/capi/tokenize.c b/examples/capi/tokenize.c new file mode 100644 index 0000000..8c8cdd4 --- /dev/null +++ b/examples/capi/tokenize.c @@ -0,0 +1,74 @@ +// Copyright 2014-2017 The html5ever Project Developers. See the +// COPYRIGHT file at the top-level directory of this distribution. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#include <stdio.h> + +#include "html5ever.h" + +void put_str(const char *x) { +    fputs(x, stdout); +} + +void put_buf(struct h5e_buf text) { +    fwrite(text.data, text.len, 1, stdout); +} + +void do_chars(void *user, struct h5e_buf text) { +    put_str("CHARS : "); +    put_buf(text); +    put_str("\n"); +} + +void do_start_tag(void *user, struct h5e_buf name, int self_closing, size_t num_attrs) { +    put_str("TAG   : <"); +    put_buf(name); +    if (self_closing) { +        putchar('/'); +    } +    put_str(">\n"); +} + +void do_tag_attr(void *user, struct h5e_buf name, struct h5e_buf value) { +    put_str("  ATTR: "); +    put_buf(name); +    put_str("=\""); +    put_buf(value); +    put_str("\"\n"); +} + +void do_end_tag(void *user, struct h5e_buf name) { +    put_str("TAG   : </"); +    put_buf(name); +    put_str(">\n"); +} + +struct h5e_token_ops ops = { +    .do_chars = do_chars, +    .do_start_tag = do_start_tag, +    .do_tag_attr = do_tag_attr, +    .do_end_tag = do_end_tag, +}; + +struct h5e_token_sink sink = { +    .ops = &ops, +    .user = NULL, +}; + +int main(int argc, char *argv[]) { +    if (argc < 2) { +        printf("Usage: %s 'HTML fragment'\n", argv[0]); +        return 1; +    } + +    struct h5e_tokenizer *tok = h5e_tokenizer_new(&sink); +    h5e_tokenizer_feed(tok, h5e_buf_from_cstr(argv[1])); +    h5e_tokenizer_end(tok); +    h5e_tokenizer_free(tok); +    return 0; +} | 
