📄 internal.h
字号:
#ifndef EL__DOCUMENT_HTML_INTERNAL_H#define EL__DOCUMENT_HTML_INTERNAL_H#include "document/css/stylesheet.h"#include "document/html/parser.h"#include "util/lists.h"struct document_options;struct uri;/* For parser/parse.c: */void process_head(struct html_context *html_context, unsigned char *head);void put_chrs(struct html_context *html_context, unsigned char *start, int len);enum html_whitespace_state { /* Either we are starting a new "block" or the last segment of the * current "block" is ending with whitespace and we should eat any * leading whitespace of the next segment passed to put_chrs(). * This prevents HTML whitespace from indenting new blocks by one * or creating two consecutive segments of whitespace in the middle * of a block. */ HTML_SPACE_SUPPRESS, /* Do not do anything special. */ HTML_SPACE_NORMAL, /* We should add a space when we start the next segment if it doesn't * already start with whitespace. This is used in an "x </y> z" * scenario when the parser hits </y>: it renders "x" and sets this, * so that it will then render " z". XXX: Then we could of course * render "x " and set -1. But we test for this value in parse_html() * if we hit an opening tag of an element and potentially * put_chrs(" "). That needs more investigation yet. --pasky */ HTML_SPACE_ADD,};struct html_context {#ifdef CONFIG_CSS /* The default stylesheet is initially merged into it. When parsing CSS * from <style>-tags and external stylesheets if enabled is merged * added to it. */ struct css_stylesheet css_styles;#endif /* These are global per-document base values, alterable by the <base> * element. */ struct uri *base_href; unsigned char *base_target; struct document_options *options; /* For: * html/parser/parse.c * html/parser/stack.c * html/parser.c */ struct list_head stack; /* For parser/parse.c: */ unsigned char *eoff; /* For parser/forms.c too */ int line_breax; /* This is for ln_break. */ int position; enum html_whitespace_state putsp; /* This is for the put_chrs * state-machine. */ int was_li; unsigned int was_br:1; unsigned int was_xmp:1; unsigned int has_link_lines:1; unsigned int was_body:1; /* For META refresh inside <body>. */ unsigned int was_body_background:1; /* For <HTML> with style. */ /* For html/parser.c, html/renderer.c */ int margin; /* For parser/forms.c: */ unsigned char *startf; /* For: * html/parser/parse.c * html/parser.c * html/renderer.c * html/tables.c */ int table_level; /* For: * html/parser/forms.c * html/parser/link.c * html/parser/parse.c * html/parser/stack.c * html/parser.c */ struct part *part; /* For: * html/parser/forms.c * html/parser/link.c * html/parser/parse.c * html/parser.c */ void (*put_chars_f)(struct html_context *, unsigned char *, int); /* For: * html/parser/forms.c * html/parser/link.c * html/parser/parse.c * html/parser/stack.c * html/parser.c */ void (*line_break_f)(struct html_context *); /* For: * html/parser/forms.c * html/parser/parse.c * html/parser.c */ void *(*special_f)(struct html_context *, enum html_special_type, ...);};#define format (((struct html_element *) html_context->stack.next)->attr)#define par_format (((struct html_element *) html_context->stack.next)->parattr)#define html_top (*(struct html_element *) html_context->stack.next)#define html_is_preformatted() (format.style.attr & AT_PREFORMATTED)#define get_html_max_width() \ int_max(par_format.width - (par_format.leftmargin + par_format.rightmargin), 0)/* For parser/link.c: */void html_focusable(struct html_context *html_context, unsigned char *a);void html_skip(struct html_context *html_context, unsigned char *a);unsigned char *get_target(struct document_options *options, unsigned char *a);voidimport_css_stylesheet(struct css_stylesheet *css, struct uri *base_uri, unsigned char *url, int len);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -