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

📄 general.c

📁 elinks下lynx是最重要的二个文本浏览器, 在linux下非常实用, elinks也是gentoo安装过程中默认使用的浏览器, 这是elinks源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
voidhtml_h4(struct html_context *html_context, unsigned char *a,        unsigned char *html, unsigned char *eof, unsigned char **end){	html_h(4, a, ALIGN_LEFT, html_context, html, eof, end);}voidhtml_h5(struct html_context *html_context, unsigned char *a,        unsigned char *html, unsigned char *eof, unsigned char **end){	html_h(5, a, ALIGN_LEFT, html_context, html, eof, end);}voidhtml_h6(struct html_context *html_context, unsigned char *a,        unsigned char *html, unsigned char *eof, unsigned char **end){	html_h(6, a, ALIGN_LEFT, html_context, html, eof, end);}voidhtml_pre(struct html_context *html_context, unsigned char *a,         unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	format.style.attr |= AT_PREFORMATTED;	par_format.leftmargin = (par_format.leftmargin > 1);	par_format.rightmargin = 0;}voidhtml_xmp(struct html_context *html_context, unsigned char *a,         unsigned char *html, unsigned char *eof, unsigned char **end){	html_context->was_xmp = 1;	html_pre(html_context, a, html, eof, end);}voidhtml_hr(struct html_context *html_context, unsigned char *a,        unsigned char *html, unsigned char *eof, unsigned char **end){	int i/* = par_format.width - 10*/;	unsigned char r = (unsigned char) BORDER_DHLINE;	int q = get_num(a, "size", html_context->options);	if (q >= 0 && q < 2) r = (unsigned char) BORDER_SHLINE;	html_stack_dup(html_context, ELEMENT_KILLABLE);	par_format.align = ALIGN_CENTER;	mem_free_set(&format.link, NULL);	format.form = NULL;	html_linebrk(html_context, a, html, eof, end);	if (par_format.align == ALIGN_JUSTIFY) par_format.align = ALIGN_CENTER;	par_format.leftmargin = par_format.rightmargin = html_context->margin;	i = get_width(a, "width", 1, html_context);	if (i == -1) i = get_html_max_width();	format.style.attr = AT_GRAPHICS;	html_context->special_f(html_context, SP_NOWRAP, 1);	while (i-- > 0) {		put_chrs(html_context, &r, 1);	}	html_context->special_f(html_context, SP_NOWRAP, 0);	ln_break(html_context, 2);	kill_html_stack_item(html_context, &html_top);}voidhtml_table(struct html_context *html_context, unsigned char *attr,           unsigned char *html, unsigned char *eof, unsigned char **end){	if (html_context->options->tables	    && html_context->table_level < HTML_MAX_TABLE_LEVEL) {		format_table(attr, html, eof, end, html_context);		ln_break(html_context, 2);		return;	}	par_format.leftmargin = par_format.rightmargin = html_context->margin;	par_format.align = ALIGN_LEFT;	html_linebrk(html_context, attr, html, eof, end);	format.style.attr = 0;}voidhtml_tt(struct html_context *html_context, unsigned char *a,        unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){}voidhtml_tr(struct html_context *html_context, unsigned char *a,        unsigned char *html, unsigned char *eof, unsigned char **end){	html_linebrk(html_context, a, html, eof, end);}voidhtml_th(struct html_context *html_context, unsigned char *a,        unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	/*html_linebrk(html_context, a, html, eof, end);*/	kill_html_stack_until(html_context, 1,	                      "TD", "TH", "", "TR", "TABLE", NULL);	format.style.attr |= AT_BOLD;	put_chrs(html_context, " ", 1);}voidhtml_td(struct html_context *html_context, unsigned char *a,        unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	/*html_linebrk(html_context, a, html, eof, end);*/	kill_html_stack_until(html_context, 1,	                      "TD", "TH", "", "TR", "TABLE", NULL);	format.style.attr &= ~AT_BOLD;	put_chrs(html_context, " ", 1);}voidhtml_base(struct html_context *html_context, unsigned char *a,          unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	unsigned char *al;	al = get_url_val(a, "href", html_context->options);	if (al) {		unsigned char *base = join_urls(html_context->base_href, al);		struct uri *uri = base ? get_uri(base, 0) : NULL;		mem_free(al);		mem_free_if(base);		if (uri) {			done_uri(html_context->base_href);			html_context->base_href = uri;		}	}	al = get_target(html_context->options, a);	if (al) mem_free_set(&html_context->base_target, al);}voidhtml_ul(struct html_context *html_context, unsigned char *a,        unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	unsigned char *al;	/* dump_html_stack(html_context); */	par_format.list_level++;	par_format.list_number = 0;	par_format.flags = P_STAR;	al = get_attr_val(a, "type", html_context->options);	if (al) {		if (!strcasecmp(al, "disc") || !strcasecmp(al, "circle"))			par_format.flags = P_O;		else if (!strcasecmp(al, "square"))			par_format.flags = P_PLUS;		mem_free(al);	}	par_format.leftmargin += 2 + (par_format.list_level > 1);	if (!html_context->table_level)		int_upper_bound(&par_format.leftmargin, par_format.width / 2);	par_format.align = ALIGN_LEFT;	html_top.type = ELEMENT_DONT_KILL;}voidhtml_ol(struct html_context *html_context, unsigned char *a,        unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	unsigned char *al;	int st;	par_format.list_level++;	st = get_num(a, "start", html_context->options);	if (st == -1) st = 1;	par_format.list_number = st;	par_format.flags = P_NUMBER;	al = get_attr_val(a, "type", html_context->options);	if (al) {		if (*al && !al[1]) {			if (*al == '1') par_format.flags = P_NUMBER;			else if (*al == 'a') par_format.flags = P_alpha;			else if (*al == 'A') par_format.flags = P_ALPHA;			else if (*al == 'r') par_format.flags = P_roman;			else if (*al == 'R') par_format.flags = P_ROMAN;			else if (*al == 'i') par_format.flags = P_roman;			else if (*al == 'I') par_format.flags = P_ROMAN;		}		mem_free(al);	}	par_format.leftmargin += (par_format.list_level > 1);	if (!html_context->table_level)		int_upper_bound(&par_format.leftmargin, par_format.width / 2);	par_format.align = ALIGN_LEFT;	html_top.type = ELEMENT_DONT_KILL;}static struct {	int n;	unsigned char *s;} roman_tbl[] = {	{1000,	"m"},	{999,	"im"},	{990,	"xm"},	{900,	"cm"},	{500,	"d"},	{499,	"id"},	{490,	"xd"},	{400,	"cd"},	{100,	"c"},	{99,	"ic"},	{90,	"xc"},	{50,	"l"},	{49,	"il"},	{40,	"xl"},	{10,	"x"},	{9,	"ix"},	{5,	"v"},	{4,	"iv"},	{1,	"i"},	{0,	NULL}};static voidroman(unsigned char *p, unsigned n){	int i = 0;	if (n >= 4000) {		strcpy(p, "---");		return;	}	if (!n) {		strcpy(p, "o");		return;	}	p[0] = 0;	while (n) {		while (roman_tbl[i].n <= n) {			n -= roman_tbl[i].n;			strcat(p, roman_tbl[i].s);		}		i++;		assertm(!(n && !roman_tbl[i].n),			"BUG in roman number convertor");		if_assert_failed break;	}}voidhtml_li(struct html_context *html_context, unsigned char *a,        unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	/* When handling the code <li><li> @was_li will be 1 and it means we	 * have to insert a line break since no list item content has done it	 * for us. */	if (html_context->was_li) {		html_context->line_breax = 0;		ln_break(html_context, 1);	}	/*kill_html_stack_until(html_context, 0	                      "", "UL", "OL", NULL);*/	if (!par_format.list_number) {		unsigned char x[7] = "*&nbsp;";		int t = par_format.flags & P_LISTMASK;		if (t == P_O) x[0] = 'o';		if (t == P_PLUS) x[0] = '+';		put_chrs(html_context, x, 7);		par_format.leftmargin += 2;		par_format.align = ALIGN_LEFT;	} else {		unsigned char c = 0;		unsigned char n[32];		int nlen;		int t = par_format.flags & P_LISTMASK;		int s = get_num(a, "value", html_context->options);		if (s != -1) par_format.list_number = s;		if (t == P_ALPHA || t == P_alpha) {			put_chrs(html_context, "&nbsp;", 6);			c = 1;			n[0] = par_format.list_number			       ? (par_format.list_number - 1) % 26			         + (t == P_ALPHA ? 'A' : 'a')			       : 0;			n[1] = 0;		} else if (t == P_ROMAN || t == P_roman) {			roman(n, par_format.list_number);			if (t == P_ROMAN) {				unsigned char *x;				for (x = n; *x; x++) *x = toupper(*x);			}		} else {			if (par_format.list_number < 10) {				put_chrs(html_context, "&nbsp;", 6);				c = 1;			}			ulongcat(n, NULL, par_format.list_number, (sizeof(n) - 1), 0);		}		nlen = strlen(n);		put_chrs(html_context, n, nlen);		put_chrs(html_context, ".&nbsp;", 7);		par_format.leftmargin += nlen + c + 2;		par_format.align = ALIGN_LEFT;		{			struct html_element *element;			element = search_html_stack(html_context, "ol");			if (element)				element->parattr.list_number = par_format.list_number + 1;		}		par_format.list_number = 0;	}	html_context->putsp = HTML_SPACE_SUPPRESS;	html_context->line_breax = 2;	html_context->was_li = 1;}voidhtml_dl(struct html_context *html_context, unsigned char *a,        unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	par_format.flags &= ~P_COMPACT;	if (has_attr(a, "compact", html_context->options))		par_format.flags |= P_COMPACT;	if (par_format.list_level) par_format.leftmargin += 5;	par_format.list_level++;	par_format.list_number = 0;	par_format.align = ALIGN_LEFT;	par_format.dd_margin = par_format.leftmargin;	html_top.type = ELEMENT_DONT_KILL;	if (!(par_format.flags & P_COMPACT)) {		ln_break(html_context, 2);		html_top.linebreak = 2;	}}voidhtml_dt(struct html_context *html_context, unsigned char *a,        unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	kill_html_stack_until(html_context, 0, "", "DL", NULL);	par_format.align = ALIGN_LEFT;	par_format.leftmargin = par_format.dd_margin;	if (!(par_format.flags & P_COMPACT)	    && !has_attr(a, "compact", html_context->options))		ln_break(html_context, 2);}voidhtml_dd(struct html_context *html_context, unsigned char *a,        unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	kill_html_stack_until(html_context, 0, "", "DL", NULL);	par_format.leftmargin = par_format.dd_margin + 3;	if (!html_context->table_level) {		par_format.leftmargin += 5;		int_upper_bound(&par_format.leftmargin, par_format.width / 2);	}	par_format.align = ALIGN_LEFT;}voidhtml_noframes(struct html_context *html_context, unsigned char *a,              unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	struct html_element *element;	if (!html_context->options->frames) return;	element = search_html_stack(html_context, "frameset");	if (element && !element->frameset) return;	html_skip(html_context, a);}voidhtml_frame(struct html_context *html_context, unsigned char *a,           unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	unsigned char *name, *src, *url;	src = get_url_val(a, "src", html_context->options);	if (!src) {		url = stracpy("about:blank");	} else {		url = join_urls(html_context->base_href, src);		mem_free(src);	}	if (!url) return;	name = get_attr_val(a, "name", html_context->options);	if (!name) {		name = stracpy(url);	} else if (!name[0]) {		/* When name doesn't have a value */		mem_free(name);		name = stracpy(url);	}	if (!name) return;	if (!html_context->options->frames || !html_top.frameset) {		html_focusable(html_context, a);		put_link_line("Frame: ", name, url, "", html_context);	} else {		if (html_context->special_f(html_context, SP_USED, NULL)) {			html_context->special_f(html_context, SP_FRAME,					       html_top.frameset, name, url);		}	}	mem_free(name);	mem_free(url);}voidhtml_frameset(struct html_context *html_context, unsigned char *a,              unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	struct frameset_param fp;	unsigned char *cols, *rows;	int width, height;	/* XXX: This is still not 100% correct. We should also ignore the	 * frameset when we encountered anything 3v1l (read as: non-whitespace	 * text/element/anything) in the document outside of <head>. Well, this	 * is still better than nothing and it should heal up the security	 * concerns at least because sane sites should enclose the documents in	 * <body> elements ;-). See also bug 171. --pasky */	if (search_html_stack(html_context, "BODY")	    || !html_context->options->frames	    || !html_context->special_f(html_context, SP_USED, NULL))		return;	cols = get_attr_val(a, "cols", html_context->options);	if (!cols) {		cols = stracpy("100%");		if (!cols) return;	}	rows = get_attr_val(a, "rows", html_context->options);	if (!rows) {		rows = stracpy("100%");	       	if (!rows) {			mem_free(cols);			return;		}	}	if (!html_top.frameset) {		width = html_context->options->box.width;		height = html_context->options->box.height;		html_context->options->needs_height = 1;	} else {		struct frameset_desc *frameset_desc = html_top.frameset;		int offset;		if (frameset_desc->box.y >= frameset_desc->box.height)			goto free_and_return;		offset = frameset_desc->box.x			 + frameset_desc->box.y * frameset_desc->box.width;		width = frameset_desc->frame_desc[offset].width;		height = frameset_desc->frame_desc[offset].height;	}	fp.width = fp.height = NULL;	parse_frame_widths(cols, width, HTML_FRAME_CHAR_WIDTH,			   &fp.width, &fp.x);	parse_frame_widths(rows, height, HTML_FRAME_CHAR_HEIGHT,			   &fp.height, &fp.y);	fp.parent = html_top.frameset;	if (fp.x && fp.y) {		html_top.frameset = html_context->special_f(html_context, SP_FRAMESET, &fp);	}	mem_free_if(fp.width);	mem_free_if(fp.height);free_and_return:	mem_free(cols);	mem_free(rows);}voidhtml_noscript(struct html_context *html_context, unsigned char *a,              unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5){	/* We shouldn't throw <noscript> away until our ECMAScript support is	 * halfway decent. */#ifdef CONFIG_ECMASCRIPT	if (get_opt_bool("ecmascript.enable")            && get_opt_bool("ecmascript.ignore_noscript"))		html_skip(html_context, a);#endif}

⌨️ 快捷键说明

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