dom-select.c

来自「elinks下lynx是最重要的二个文本浏览器, 在linux下非常实用, el」· C语言 代码 · 共 131 行

C
131
字号
/* Tool for testing the SGML parser */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <stdarg.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "elinks.h"#include "dom/node.h"#include "dom/select.h"#include "dom/sgml/parser.h"#include "dom/stack.h"void die(const char *msg, ...){	va_list args;	if (msg) {		va_start(args, msg);		vfprintf(stderr, msg, args);		fputs("\n", stderr);		va_end(args);	}	exit(!!NULL);}intmain(int argc, char *argv[]){	struct dom_node *root;	struct sgml_parser *parser;	struct dom_select *select;	enum sgml_document_type doctype = SGML_DOCTYPE_HTML;	struct dom_string uri = INIT_DOM_STRING("dom://test", -1);	struct dom_string source = INIT_DOM_STRING("(no source)", -1);	struct dom_string selector = INIT_DOM_STRING("(no select)", -1);	int i;	for (i = 1; i < argc; i++) {		char *arg = argv[i];		if (strncmp(arg, "--", 2))			break;		arg += 2;		if (!strncmp(arg, "uri", 3)) {			arg += 3;			if (*arg == '=') {				arg++;				set_dom_string(&uri, arg, strlen(arg));			} else {				i++;				if (i >= argc)					die("--uri expects a URI");				set_dom_string(&uri, argv[i], strlen(argv[i]));			}		} else if (!strncmp(arg, "src", 3)) {			arg += 3;			if (*arg == '=') {				arg++;				set_dom_string(&source, arg, strlen(arg));			} else {				i++;				if (i >= argc)					die("--src expects a string");				set_dom_string(&source, argv[i], strlen(argv[i]));			}		} else if (!strncmp(arg, "selector", 3)) {			arg += 8;			if (*arg == '=') {				arg++;				set_dom_string(&selector, arg, strlen(arg));			} else {				i++;				if (i >= argc)					die("--selector expects a string");				set_dom_string(&selector, argv[i], strlen(argv[i]));			}		} else if (!strcmp(arg, "help")) {			die(NULL);		} else {			die("Unknown argument '%s'", arg - 2);		}	}	parser = init_sgml_parser(SGML_PARSER_TREE, doctype, &uri);	if (!parser) return 1;	add_dom_stack_tracer(&parser->stack, "sgml-parse: ");	root = parse_sgml(parser, &source);	done_sgml_parser(parser);	if (!root) die("No root node");	select = init_dom_select(DOM_SELECT_SYNTAX_CSS, &selector);	if (select) {		struct dom_node_list *list;		list = select_dom_nodes(select, root);		if (list) {			struct dom_node *node;			int index;			foreach_dom_node (list, node, index) {				DBG("Match");			}			mem_free(list);		}		done_dom_select(select);	}	done_dom_node(root);	return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?