// 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 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. #include #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 : \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; }