⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgml.h

📁 一个很有名的浏览器
💻 H
字号:
/* $Id: sgml.h,v 1.2 2004/09/24 00:44:59 jonas Exp $ */#ifndef EL__DOCUMENT_SGML_SGML_H#define EL__DOCUMENT_SGML_SGML_H#include <stdlib.h>#include "document/dom/navigator.h"/* The flags stored in the attribute sgml node info data *//* TODO: Other potential flags (there can be only 16) * * - interaction info for forms (diabled, readonly, maxlength) maybe tabindex, * - table layout, * - generic layout style attributes maybe giving color values an additional flag, * - meta information (rel, rev, title, alt, summary, caption, standby, lang), * - scripting hooks (onblur, ...) * - information about the referenced content (hreflang, codetype, media, type) * * Anyway the flags should of course optimally have a purpose to speed things up * by quickly making it possible to identify certain attribute groups. --jonas */enum sgml_attribute_flags {	/* The value uniquely identifies the owner */	SGML_ATTRIBUTE_IDENTIFIER = 1,	/* The value contains an URI of some sort */	SGML_ATTRIBUTE_REFERENCE = 2,};/* TODO: We also need an element flag to signal to the parser that all the * content should be skipped; possible with some ugly hacks to not use the * scanner since it could get confused. The purpose of this flag is to group * all element content in one text node. Kind of like a ``verbatim'' thing * where not parsing should be done. For HTML the <script> and <style> tags * should use it. */enum sgml_element_flags {	/* The start and end tags are optional */	SGML_ELEMENT_OPTIONAL = 1,	/* The element is empty and end tags are forbidden */	SGML_ELEMENT_EMPTY = 2,	/* The end tag is obtional */	SGML_ELEMENT_END_OPTIONAL = 4,};struct sgml_node_info {	unsigned char *string;	int length;	uint16_t type;	uint16_t flags;};#define SGML_NODE_HEAD(doctype, nodetype) \	{ NULL, doctype##_##nodetype##S - 1, doctype##_##nodetype##_UNKNOWN }#define SGML_NODE_INFO(doctype, nodetype, name, data) \	{ #name, sizeof(#name) - 1, doctype##_##nodetype##_##name, data }#define SGML_NODE_INF2(doctype, nodetype, name, ident, data) \	{ ident, sizeof(ident) - 1, doctype##_##nodetype##_##name, data }#define SGML_NODE_INFO_TYPE(doctype, nodetype, name) doctype##_##nodetype##_##nameint sgml_info_strcmp(const void *key, const void *node);static inline struct sgml_node_info *get_sgml_node_info(struct sgml_node_info list[], struct dom_node *node){	struct sgml_node_info *map = &list[1];	size_t map_size = list->length;	size_t obj_size = sizeof(struct sgml_node_info);	void *match = bsearch(node, map, map_size, obj_size, sgml_info_strcmp);	return match ? match : list;}struct sgml_info {	struct sgml_node_info *attributes;	struct sgml_node_info *elements;	dom_navigator_callback_T callbacks[DOM_NODES];};#endif

⌨️ 快捷键说明

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