📄 html.c
字号:
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 + -