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

📄 html.c

📁 ELinks is an advanced and well-established feature-rich text mode web (HTTP/FTP/..) browser. ELinks
💻 C
📖 第 1 页 / 共 5 页
字号:
		special_f(ff, SP_TAG, al);		mem_free(al);	}}void html_a_special(unsigned char *a, unsigned char *next, unsigned char *eof){	unsigned char *t;	while (next < eof && WHITECHAR(*next)) next++;	if (next > eof - 4) return;	if (!(next[0] == '<' && next[1] == '/' && upcase(next[2]) == 'A' && next[3] == '>')) return;	if (!has_attr(a, "href") || !format.link) return;	t = get_attr_val(a, "title");	if (!t) return;	put_chrs(t, strlen(t), put_chars_f, ff);	mem_free(t);}void html_sub(unsigned char *a){	get_js_events(a);	format.fontsize = 1;	format.baseline = -1;}void html_sup(unsigned char *a){	get_js_events(a);	format.fontsize = 1;	if (format.baseline <= 0) format.baseline = format.fontsize;}void html_font(unsigned char *a){	char *al;	if ((al = get_attr_val(a, "size"))) {		int p = 0;		unsigned long s;		char *nn = al;		char *end;		if (*al == '+') p = 1, nn++;		if (*al == '-') p = -1, nn++;		s = strtoul(nn, &end, 10);		if (*nn && !*end) {			if (s > 7) s = 7;			if (!p) format.fontsize = s;			else format.fontsize += p * s;			if (format.fontsize < 1) format.fontsize = 1;			if (format.fontsize > 7) format.fontsize = 7;		}		mem_free(al);	}	get_color(a, "color", &format.fg);}void html_img(unsigned char *a){	unsigned char *al;	unsigned char *s;	unsigned char *orig_link = NULL;	int ismap, usemap = 0;	/*put_chrs(" ", 1, put_chars_f, ff);*/	get_js_events(a);	if ((!F || !d_opt->display_images) && ((al = get_attr_val(a, "usemap")))) {		unsigned char *u;		usemap = 1;		html_stack_dup();		if (format.link) mem_free(format.link);		if (format.form) format.form = NULL;		u = join_urls(format.href_base, al);		format.link = mem_alloc(strlen(u) + 5);		strcpy(format.link, "MAP@");		strcat(format.link, u);		format.attr |= AT_BOLD;		mem_free(u);		mem_free(al);	}	ismap = format.link && (F || !has_attr(a, "usemap")) && has_attr(a, "ismap");	if (format.image) mem_free(format.image), format.image = NULL;	if ((s = get_url_val(a, "src")) || (s = get_attr_val(a, "dynsrc")) || (s = get_attr_val(a, "data"))) {		 if (!format.link && d_opt->braille) goto skip_img;		 format.image = join_urls(format.href_base, s);		 skip_img:		 orig_link = s;	}	if (!F || !d_opt->display_images) {		if ((!(al = get_attr_val(a, "alt")) && !(al = get_attr_val(a, "title"))) || !*al) {			if (al) mem_free(al);			if (!d_opt->images && !format.link) goto ret;			if (d_opt->image_names && s) {				unsigned char *ss;				al = stracpy("[");				if (!(ss = strrchr(s, '/'))) ss = s;				else ss++;				add_to_strn(&al, ss);				if ((ss = strchr(al, '?'))) *ss = 0;				if ((ss = strchr(al, '&'))) *ss = 0;				add_to_strn(&al, "]");			} else if (usemap) al = stracpy("[USEMAP]");			else if (ismap) al = stracpy("[ISMAP]");			else al = stracpy("[IMG]");		}		if (al) {			if (ismap) {				unsigned char *h;				html_stack_dup();				h = stracpy(format.link);				add_to_strn(&h, "?0,0");				mem_free(format.link);				format.link = h;			}			html_format_changed = 1;			put_chrs(al, strlen(al), put_chars_f, ff);			if (ismap) kill_html_stack_item(&html_top);		}		mem_free(al);#ifdef G	} else {		struct image_description i;		unsigned char *al;		unsigned char *u;		int aa = -1;		if ((al = get_attr_val(a, "align"))) {			if (!strcasecmp(al, "left")) aa = AL_LEFT;			if (!strcasecmp(al, "right")) aa = AL_RIGHT;			if (!strcasecmp(al, "center")) aa = AL_CENTER;			if (!strcasecmp(al, "bottom")) aa = AL_BOTTOM;			if (!strcasecmp(al, "middle")) aa = AL_MIDDLE;			if (!strcasecmp(al, "top")) aa = AL_TOP;			mem_free(al);		}		if (aa == AL_LEFT || aa == AL_RIGHT || aa == AL_CENTER) {			ln_break(1, line_break_f, ff);			html_stack_dup();			par_format.align = aa;		}		memset(&i,0,sizeof(i));		if (ismap) {			unsigned char *h;			html_stack_dup();			h = stracpy(format.link);			add_to_strn(&h, "?0,0");			mem_free(format.link);			format.link = h;		}		i.url = stracpy(format.image);		i.src = orig_link, orig_link = NULL;		/*		i.xsize = get_num(a, "width");		i.ysize = get_num(a, "height");		*/		i.xsize = get_width(a, "width", 2);		i.ysize = get_width(a, "height", 3);		if (d_opt->porn_enable && i.xsize < 0 && i.ysize < 0 && d_opt->plain == 2) {			/* Strict checking for porn condition ;-) */			i.autoscale_x = d_opt->xw;			i.autoscale_y = d_opt->yw;		} else {			/* Turn off autoscale */			i.autoscale_x = 0;			i.autoscale_y = 0; 		}		/*debug("%s, %s -> %d, %d", get_attr_val(a, "width"), get_attr_val(a, "height"), i.xsize, i.ysize);*/		i.hspace = get_num(a, "hspace");		i.vspace = get_num(a, "vspace");		i.border = get_num(a, "border");		i.align = aa;		i.name = get_attr_val(a, "id");		if (!i.name) i.name = get_attr_val(a, "name");		i.alt = get_attr_val(a, "title");		if (!i.alt) i.alt = get_attr_val(a, "alt");		i.insert_flag = !(format.form);		i.ismap = ismap;		if ((u = get_attr_val(a, "usemap"))) {			i.usemap = join_urls(format.href_base, u);			mem_free(u);		}		if (i.url) special_f(ff, SP_IMAGE, &i), mem_free(i.url);		if (i.usemap) mem_free(i.usemap);		if (i.name) mem_free(i.name);		if (i.alt) mem_free(i.alt);		if (i.src) mem_free(i.src);		line_breax = 0;		if (ismap) kill_html_stack_item(&html_top);		if (aa == AL_LEFT || aa == AL_RIGHT || aa == AL_CENTER) {			ln_break(1, line_break_f, ff);			kill_html_stack_item(&html_top);		}		line_breax = 0;		was_br = 0;#endif	}	ret:	if (format.image) mem_free(format.image), format.image = NULL;	html_format_changed = 1;	if (usemap) kill_html_stack_item(&html_top);	/*put_chrs(" ", 1, put_chars_f, ff);*/	if (orig_link) mem_free(orig_link);}void html_obj(unsigned char *a, int obj){	unsigned char *old_base = format.href_base;	unsigned char *url;	unsigned char *type = get_attr_val(a, "type");	unsigned char *base;	if ((base = get_attr_val(a, "codebase"))) format.href_base = join_urls(format.href_base, base);	if (!type) {		url = get_attr_val(a, "src");		if (!url) url = get_attr_val(a, "data");		if (url) type = get_content_type(NULL, url), mem_free(url);	}	if (type && known_image_type(type)) {		html_img(a);		if (obj == 1) html_top.invisible = 1;		goto ret;	}	url = get_attr_val(a, "src");	if (!url) url = get_attr_val(a, "data");	if (url) put_link_line("", !obj ? "[EMBED]" : "[OBJ]", url, ""), mem_free(url);	ret:	if (base) mem_free(format.href_base), format.href_base = old_base, mem_free(base);	if (type) mem_free(type);}void html_embed(unsigned char *a){	html_obj(a, 0);}void html_object(unsigned char *a){	html_obj(a, 1);}void html_body(unsigned char *a){	get_color(a, "text", &format.fg);	get_color(a, "link", &format.clink);	get_color(a, "vlink", &format.vlink);	if (has_attr(a, "onload")) special_f(ff, SP_SCRIPT, NULL);	/*	get_bgcolor(a, &format.bg);	get_bgcolor(a, &par_format.bgcolor);	*/}void html_skip(unsigned char *a) { html_top.invisible = html_top.dontkill = 1; }void html_title(unsigned char *a) { html_top.invisible = html_top.dontkill = 1; }void html_script(unsigned char *a){	unsigned char *s;	s = get_attr_val(a, "src");	special_f(ff, SP_SCRIPT, s);	if (s) mem_free(s);	html_skip(a);}void html_noscript(unsigned char *a){	if (d_opt->js_enable) html_skip(a);}void html_center(unsigned char *a){	par_format.align = AL_CENTER;	if (!table_level && !F) par_format.leftmargin = par_format.rightmargin = 0;}void html_linebrk(unsigned char *a){	char *al;	if ((al = get_attr_val(a, "align"))) {		if (!strcasecmp(al, "left")) par_format.align = AL_LEFT;		if (!strcasecmp(al, "right")) par_format.align = AL_RIGHT;		if (!strcasecmp(al, "center")) {			par_format.align = AL_CENTER;			if (!table_level && !F) par_format.leftmargin = par_format.rightmargin = 0;		}		if (!strcasecmp(al, "justify")) par_format.align = AL_BLOCK;		mem_free(al);	}}void html_br(unsigned char *a){	html_linebrk(a);	if (was_br) ln_break(2, line_break_f, ff);	was_br = 1;}void html_form(unsigned char *a){	was_br = 1;}void html_p(unsigned char *a){	if (par_format.leftmargin < margin) par_format.leftmargin = margin;	if (par_format.rightmargin < margin) par_format.rightmargin = margin;	/*par_format.align = AL_LEFT;*/	html_linebrk(a);}void html_address(unsigned char *a){	par_format.leftmargin += 1;	par_format.align = AL_LEFT;}void html_blockquote(unsigned char *a){	par_format.leftmargin += 2;	par_format.align = AL_LEFT;}void html_h(int h, char *a){#ifdef G	if (F) {		html_linebrk(a);		format.fontsize = 8 - h;		format.attr |= AT_BOLD;		return;	}#endif	par_format.align = AL_LEFT;	if (h == 1) {		html_center(a);		return;	}	html_linebrk(a);	switch (par_format.align) {		case AL_LEFT:			par_format.leftmargin = (h - 2) * 2;			par_format.rightmargin = 0;			break;		case AL_RIGHT:			par_format.leftmargin = 0;			par_format.rightmargin = (h - 2) * 2;			break;		case AL_CENTER:			par_format.leftmargin = par_format.rightmargin = 0;			break;		case AL_BLOCK:			par_format.leftmargin = par_format.rightmargin = (h - 2) * 2;			break;	}}void html_h1(unsigned char *a) { html_h(1, a); }void html_h2(unsigned char *a) { html_h(2, a); }void html_h3(unsigned char *a) { html_h(3, a); }void html_h4(unsigned char *a) { html_h(4, a); }void html_h5(unsigned char *a) { html_h(5, a); }void html_h6(unsigned char *a) { html_h(6, a); }void html_pre(unsigned char *a){	format.attr |= AT_FIXED;	par_format.align = AL_NO;	par_format.leftmargin = par_format.leftmargin > 1;	par_format.rightmargin = 0;}void html_hr(unsigned char *a){	int i/* = par_format.width - 10*/;	int q = get_num(a, "size");	html_stack_dup();	par_format.align = AL_CENTER;	if (format.link) mem_free(format.link), format.link = NULL;	format.form = NULL;	html_linebrk(a);	if (par_format.align == AL_BLOCK) par_format.align = AL_CENTER;	par_format.leftmargin = margin;	par_format.rightmargin = margin;	i = get_width(a, "width", 1);	if (!F) {		unsigned char r = 205;		if (q >= 0 && q < 2) r = 196;		if (i < 0) i = par_format.width - 2 * margin - 4;		format.attr = AT_GRAPHICS;		special_f(ff, SP_NOWRAP, 1);		while (i-- > 0) put_chrs(&r, 1, put_chars_f, ff);		special_f(ff, SP_NOWRAP, 0);	}#ifdef G	else {		struct hr_param hr;		if (q < 0) q = 2;		if (i < 0) i = par_format.width - 2 * margin * G_HTML_MARGIN - 6 * G_HTML_MARGIN;		hr.size = q;		hr.width = i;		if (i >= 0) special_f(ff, SP_HR, &hr);	}#endif	ln_break(2, line_break_f, ff);	kill_html_stack_item(&html_top);}void html_table(unsigned char *a){	par_format.leftmargin = margin;	par_format.rightmargin = margin;	par_format.align = AL_LEFT;	html_linebrk(a);	format.attr = 0;}void html_tr(unsigned char *a){	html_linebrk(a);}void html_th(unsigned char *a){	/*html_linebrk(a);*/	kill_until(1, "TD", "TH", "", "TR", "TABLE", NULL);	format.attr |= AT_BOLD;	put_chrs(" ", 1, put_chars_f, ff);}void html_td(unsigned char *a){	/*html_linebrk(a);*/	kill_until(1, "TD", "TH", "", "TR", "TABLE", NULL);	format.attr &= ~AT_BOLD;	put_chrs(" ", 1, put_chars_f, ff);}void html_base(unsigned char *a){	char *al;	if ((al = get_url_val(a, "href"))) {		if (format.href_base) mem_free(format.href_base);		format.href_base = join_urls(((struct html_element *)html_stack.prev)->attr.href_base, al);		special_f(ff, SP_SET_BASE, format.href_base);		mem_free(al);	}	if ((al = get_target(a))) {		if (format.target_base) mem_free(format.target_base);		format.target_base = al;	}}void html_ul(unsigned char *a){	char *al;	/*debug_stack();*/	par_format.list_level++;	par_format.list_number = 0;	par_format.flags = P_STAR;	if ((al = get_attr_val(a, "type"))) {		if (!strcasecmp(al, "disc") || !strcasecmp(al, "circle")) par_format.flags = P_O;		if (!strcasecmp(al, "square")) par_format.flags = P_PLUS;		mem_free(al);	}	if ((par_format.leftmargin += 2 + (par_format.list_level > 1)) > par_format.width * 2 / 3 && !table_level)		par_format.leftmargin = par_format.width * 2 / 3;	par_format.align = AL_LEFT;	html_top.dontkill = 1;}void html_ol(unsigned char *a){	char *al;	int st;

⌨️ 快捷键说明

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