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

📄 html.c

📁 基于rtos开发的浏览器!
💻 C
📖 第 1 页 / 共 5 页
字号:
		 */		if (!strcasecomp(value[HTML_LINK_REL], "StyleSheet") ||		    !strcasecomp(value[HTML_LINK_REL], "Style")) {		    if (TRACE) {			fprintf(stderr,				"HTML: StyleSheet link found.\n");		    }#ifdef LINKEDSTYLES		    if (href && *href != '\0')		    {			int res = -999;			if ((url_type = is_url(href)) == 0 ||			    (url_type == FILE_URL_TYPE && LYisLocalFile(href))) {			    if (url_type == FILE_URL_TYPE) {				temp = HTParse(href, "", PARSE_PATH+PARSE_PUNCTUATION);				HTUnEscape(temp);				if (temp && *temp != '\0') {				    res = style_readFromFile(temp);				    if (res != 0)					StrAllocCopy(href, temp);				}				FREE(temp);			    } else {				res = style_readFromFile(href);			    }			}			if (TRACE)			    fprintf(stderr, "CSS: StyleSheet=%s %d\n", href, res);			if (res == 0)			    HTAnchor_setStyle (me->node_anchor, href);		    }		    else			if (TRACE)			    fprintf(stderr,				"        non-local StyleSheets not yet implemented.\n");#else		    if (TRACE)			fprintf(stderr,				"        StyleSheets not yet implemented.\n");#endif		    FREE(href);		    break;		}		/*		 *  Ignore anything not registered in the the 28-Mar-95		 *  IETF HTML 3.0 draft and W3C HTML 3.2 draft, or not		 *  appropriate for Lynx banner links in the expired		 *  Maloney and Quin relrev draft.  We'll make this more		 *  efficient when the situation stabilizes, and for now,		 *  we'll treat "Banner" as another toolbar element. - FM		 */		if (!strcasecomp(value[HTML_LINK_REL], "Home") ||		    !strcasecomp(value[HTML_LINK_REL], "ToC") ||		    !strcasecomp(value[HTML_LINK_REL], "Contents") ||		    !strcasecomp(value[HTML_LINK_REL], "Index") ||		    !strcasecomp(value[HTML_LINK_REL], "Glossary") ||		    !strcasecomp(value[HTML_LINK_REL], "Copyright") ||		    !strcasecomp(value[HTML_LINK_REL], "Up") ||		    !strcasecomp(value[HTML_LINK_REL], "Next") ||		    !strcasecomp(value[HTML_LINK_REL], "Previous") ||		    !strcasecomp(value[HTML_LINK_REL], "Prev") ||		    !strcasecomp(value[HTML_LINK_REL], "Help") ||		    !strcasecomp(value[HTML_LINK_REL], "Search") ||		    !strcasecomp(value[HTML_LINK_REL], "Bookmark") ||		    !strcasecomp(value[HTML_LINK_REL], "Banner") ||		    !strcasecomp(value[HTML_LINK_REL], "Top") ||		    !strcasecomp(value[HTML_LINK_REL], "Origin") ||		    !strcasecomp(value[HTML_LINK_REL], "Navigator") ||		    !strcasecomp(value[HTML_LINK_REL], "Child") ||		    !strcasecomp(value[HTML_LINK_REL], "Disclaimer") ||		    !strcasecomp(value[HTML_LINK_REL], "Sibling") ||		    !strcasecomp(value[HTML_LINK_REL], "Parent") ||		    !strcasecomp(value[HTML_LINK_REL], "Author") ||		    !strcasecomp(value[HTML_LINK_REL], "Editor") ||		    !strcasecomp(value[HTML_LINK_REL], "Publisher") ||		    !strcasecomp(value[HTML_LINK_REL], "Trademark") ||		    !strcasecomp(value[HTML_LINK_REL], "Meta") ||		    !strcasecomp(value[HTML_LINK_REL], "URC") ||		    !strcasecomp(value[HTML_LINK_REL], "Hotlist") ||		    !strcasecomp(value[HTML_LINK_REL], "Begin") ||		    !strcasecomp(value[HTML_LINK_REL], "First") ||		    !strcasecomp(value[HTML_LINK_REL], "End") ||		    !strcasecomp(value[HTML_LINK_REL], "Last") ||		    !strcasecomp(value[HTML_LINK_REL], "Pointer") ||		    !strcasecomp(value[HTML_LINK_REL], "Translation") ||		    !strcasecomp(value[HTML_LINK_REL], "Definition") ||		    !strcasecomp(value[HTML_LINK_REL], "Chapter") ||		    !strcasecomp(value[HTML_LINK_REL], "Documentation") ||		    !strcasecomp(value[HTML_LINK_REL], "Biblioentry") ||		    !strcasecomp(value[HTML_LINK_REL], "Bibliography")) {		    StrAllocCopy(title, value[HTML_LINK_REL]);		} else {		    if (TRACE) {			fprintf(stderr,				"HTML: LINK with REL=\"%s\" ignored.\n",				 value[HTML_LINK_REL]);		    }		    FREE(href);		    break;		}	    }	} else if (present &&		   present[HTML_LINK_REL] && value[HTML_LINK_REL]) {	    /*	     *	If no HREF was specified, handle special REL links	     *	with self-designated HREFs. - FM	     */	    if (!strcasecomp(value[HTML_LINK_REL], "Home")) {		StrAllocCopy(href, LynxHome);	    } else if (!strcasecomp(value[HTML_LINK_REL], "Help")) {		StrAllocCopy(href, helpfile);	    } else if (!strcasecomp(value[HTML_LINK_REL], "Index")) {		StrAllocCopy(href, indexfile);	    } else {		if (TRACE) {		    fprintf(stderr,			    "HTML: LINK with REL=\"%s\" and no HREF ignored.\n",			    value[HTML_LINK_REL]);		}		break;	    }	    StrAllocCopy(title, value[HTML_LINK_REL]);	}	if (href) {	    /*	     *	Create a title (link name) from the TITLE value,	     *	if present, or default to the REL value that was	     *	loaded into title. - FM	     */	    if (present && present[HTML_LINK_TITLE] &&		value[HTML_LINK_TITLE] && *value[HTML_LINK_TITLE] != '\0') {		StrAllocCopy(title, value[HTML_LINK_TITLE]);		TRANSLATE_AND_UNESCAPE_ENTITIES(&title, TRUE, FALSE);		LYTrimHead(title);		LYTrimTail(title);	    }	    if (!(title && *title)) {		FREE(href);		FREE(title);		break;	    }	    if (me->inA) {		/*		 *  Ugh!  The LINK tag, which is a HEAD element,		 *  is in an Anchor, which is BODY element.  All		 *  we can do is close the Anchor and cross our		 *  fingers. - FM		 */		SET_SKIP_STACK(HTML_A);		HTML_end_element(me, HTML_A, (char **)&include);	    }	    /*	     *	Create anchors for the links that simulate	     *	a toolbar. - FM	     */	    me->CurrentA = HTAnchor_findChildAndLink(				me->node_anchor,	/* Parent */				NULL,			/* Tag */				href,			/* Addresss */				INTERN_LT);		/* Type */	    if ((dest = HTAnchor_parent(			    HTAnchor_followMainLink((HTAnchor*)me->CurrentA)				      )) != NULL) {		if (!HTAnchor_title(dest))		    HTAnchor_setTitle(dest, title);		dest = NULL;		if (present[HTML_LINK_CHARSET] &&		    value[HTML_LINK_CHARSET] && *value[HTML_LINK_CHARSET] != '\0') {		    dest_char_set = UCGetLYhndl_byMIME(value[HTML_LINK_CHARSET]);		    if (dest_char_set < 0)			dest_char_set = UCLYhndl_for_unrec;		}		if (dest && dest_char_set >= 0)		    HTAnchor_setUCInfoStage(dest, dest_char_set,					    UCT_STAGE_PARSER,					    UCT_SETBY_LINK);		dest_char_set = -1;	    }	    UPDATE_STYLE;	    if (!HText_hasToolbar(me->text) &&		(ID_A = HTAnchor_findChildAndLink(					me->node_anchor,	/* Parent */					LYToolbarName,		/* Tag */					NULL,			/* Addresss */					(HTLinkType*)0))) {	/* Type */		HText_appendCharacter(me->text, '#');		HText_setLastChar(me->text, ' ');  /* absorb white space */		HText_beginAnchor(me->text, me->inUnderline, ID_A);		HText_endAnchor(me->text, 0);		HText_setToolbar(me->text);	    }	    HText_beginAnchor(me->text, me->inUnderline, me->CurrentA);	    if (me->inBoldH == FALSE)		HText_appendCharacter(me->text, LY_BOLD_START_CHAR);#ifdef USE_COLOR_STYLE	    if (present && present[HTML_LINK_CLASS] &&	    value && *value[HTML_LINK_CLASS]!='\0')	    {		char tmp[1024];		sprintf(tmp, "link.%s.%s.%s", value[HTML_LINK_CLASS], title, value[HTML_LINK_CLASS]);		if (TRACE)			fprintf(stderr, "CSSTRIM:link=%s\n", tmp);		HText_characterStyle(me->text, hash_code(tmp), 1);		HTML_put_string(me, title);		HTML_put_string(me, " (");		HTML_put_string(me, value[HTML_LINK_CLASS]);		HTML_put_string(me, ")");		HText_characterStyle(me->text, hash_code(tmp), 0);	    }	    else#endif	    HTML_put_string(me, title);	    if (me->inBoldH == FALSE)		HText_appendCharacter(me->text, LY_BOLD_END_CHAR);	    HText_endAnchor(me->text, 0);	}	FREE(href);	FREE(title);	break;    case HTML_ISINDEX:	if (((present)) &&	    ((present[HTML_ISINDEX_HREF] && value[HTML_ISINDEX_HREF]) ||	     (present[HTML_ISINDEX_ACTION] && value[HTML_ISINDEX_ACTION]))) {	    char * action = NULL;	    char * isindex_href = NULL;	    /*	     *	Lynx was supporting ACTION, which never made it into	     *  the HTML 2.0 specs.  HTML 3.0 uses HREF, so we'll	     *	use that too, but allow use of ACTION as an alternate	     *	until people have fully switched over. - FM	     */	    if (present[HTML_ISINDEX_HREF] && value[HTML_ISINDEX_HREF])		StrAllocCopy(isindex_href, value[HTML_ISINDEX_HREF]);	    else		StrAllocCopy(isindex_href, value[HTML_ISINDEX_ACTION]);	    url_type = LYLegitimizeHREF(me, (char**)&isindex_href,					TRUE, TRUE);	    /*	     *	Check whether a base tag is in effect.	     */	    if (me->inBASE && *isindex_href != '\0' && *isindex_href != '#')		action = HTParse(isindex_href, me->base_href, PARSE_ALL);	    if (!(action && *action))		action = HTParse(isindex_href,				 me->node_anchor->address, PARSE_ALL);	    FREE(isindex_href);	    if (action && *action) {		HTAnchor_setIndex(me->node_anchor, action);	    } else {		HTAnchor_setIndex(me->node_anchor, me->node_anchor->address);	    }	    FREE(action);	} else {	    if (me->inBASE)		/*		 *  Use base.		 */		HTAnchor_setIndex(me->node_anchor, me->base_href);	    else		/*		 *  Use index's address.		 */		HTAnchor_setIndex(me->node_anchor, me->node_anchor->address);	}	/*	 *  Support HTML 3.0 PROMPT attribute. - FM	 */	if (present &&	    present[HTML_ISINDEX_PROMPT] &&	    value[HTML_ISINDEX_PROMPT] && *value[HTML_ISINDEX_PROMPT]) {	    StrAllocCopy(temp, value[HTML_ISINDEX_PROMPT]);	    TRANSLATE_AND_UNESCAPE_ENTITIES(&temp, TRUE, FALSE);	    LYTrimHead(temp);	    LYTrimTail(temp);	    if (*temp != '\0') {		StrAllocCat(temp, " ");		HTAnchor_setPrompt(me->node_anchor, temp);	    } else {		HTAnchor_setPrompt(me->node_anchor,				   "Enter a database query: ");	    }	    FREE(temp);	} else {	    HTAnchor_setPrompt(me->node_anchor, "Enter a database query: ");	}	break;    case HTML_NEXTID:	/* if (present && present[NEXTID_N] && value[NEXTID_N])		HText_setNextId(me->text, atoi(value[NEXTID_N])); */	break;    case HTML_STYLE:	/*	 *  We're getting it as Literal text, which, for now,	 *  we'll just ignore. - FM	 */	HTChunkClear(&me->style_block);	break;    case HTML_SCRIPT:	/*	 *  We're getting it as Literal text, which, for now,	 *  we'll just ignore. - FM	 */	HTChunkClear(&me->script);	break;    case HTML_BODY:	CHECK_ID(HTML_BODY_ID);	if (HText_hasToolbar(me->text))	    HText_appendParagraph(me->text);	break;    case HTML_FRAMESET:	break;    case HTML_FRAME:	if (present && present[HTML_FRAME_NAME] &&	    value[HTML_FRAME_NAME] && *value[HTML_FRAME_NAME]) {	    StrAllocCopy(id_string, value[HTML_FRAME_NAME]);	    TRANSLATE_AND_UNESCAPE_ENTITIES(&id_string, TRUE, FALSE);	    LYTrimHead(id_string);	    LYTrimTail(id_string);	}	if (present && present[HTML_FRAME_SRC] &&	    value[HTML_FRAME_SRC] && *value[HTML_FRAME_SRC] != '\0') {	    StrAllocCopy(href, value[HTML_FRAME_SRC]);	    CHECK_FOR_INTERN(href);	    url_type = LYLegitimizeHREF(me, (char**)&href, TRUE, TRUE);	    /*	     *	Check whether a base tag is in effect. - FM	     */	    if ((me->inBASE && *href != '\0' && *href != '#') &&		(temp = HTParse(href, me->base_href, PARSE_ALL)) &&		*temp != '\0')		/*		 *  Use reference related to the base.		 */		StrAllocCopy(href, temp);	    FREE(temp);	    /*	     *	Check whether to fill in localhost. - FM	     */	    LYFillLocalFileURL((char **)&href,			       ((*href != '\0' && *href != '#' &&				 me->inBASE) ?			       me->base_href : me->node_anchor->address));	    if (me->inA) {		SET_SKIP_STACK(HTML_A);		HTML_end_element(me, HTML_A, (char **)&include);	    }	    me->CurrentA = HTAnchor_findChildAndLink(				me->node_anchor,	/* Parent */				NULL,			/* Tag */				href,			/* Addresss */				INTERN_LT);		/* Type */	    LYEnsureSingleSpace(me);	    if (me->inUnderline == FALSE)		HText_appendCharacter(me->text, LY_UNDERLINE_START_CHAR);	    HTML_put_string(me, "FRAME:");	    if (me->inUnderline == FALSE)		HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);	    HTML_put_character(me, ' ');	    me->in_word = NO;	    CHECK_ID(HTML_FRAME_ID);	    HText_beginAnchor(me->text, me->inUnderline, me->CurrentA);	    if (me->inBoldH == FALSE)		HText_appendCharacter(me->text, LY_BOLD_START_CHAR);	    HTML_put_string(me, (id_string ? id_string : href));	    FREE(href);	    if (me->inBoldH == FALSE)		HText_appendCharacter(me->text, LY_BOLD_END_CHAR);	    HText_endAnchor(me->text, 0);	    LYEnsureSingleSpace(me);	} else {	    CHECK_ID(HTML_FRAME_ID);	}	FREE(id_string);	break;    case HTML_NOFRAMES:	LYEnsureDoubleSpace(me);	LYResetParagraphAlignment(me);	break;    case HTML_IFRAME:	if (present && present[HTML_IFRAME_NAME] &&	    value[HTML_IFRAME_NAME] && *value[HTML_IFRAME_NAME]) {	    StrAllocCopy(id_string, value[HTML_IFRAME_NAME]);	    TRANSLATE_AND_UNESCAPE_ENTITIES(&id_string, TRUE, FALSE);	    LYTrimHead(id_string);	    LYTrimTail(id_string);	}	if (present && present[HTML_IFRAME_SRC] &&	    value[HTML_IFRAME_SRC] && *value[HTML_IFRAME_SRC] != '\0') {	    StrAllocCopy(href, value[HTML_IFRAME_SRC]);	    CHECK_FOR_INTERN(href);	    url_type = LYLegitimizeHREF(me, (char**)&href, TRUE, TRUE);	    /*	     *	Check whether a base tag is in effect. - FM	     */	    if ((me->inBASE && *href != '\0' && *href != '#') &&		(temp = HTParse(href, me->base_href, PARSE_ALL)) &&		*temp != '\0')		/*		 *  Use reference related to the base.		 */		StrAllocCopy(href, temp);	    FREE(temp);	    /*	     *	Check whether to fill in localhost. - FM	     */	    LYFillLocalFileURL((char **)&href,			       ((*href != '\0' && *href != '#' &&				 me->inBASE) ?			       me->base_href : me->node_anchor->address));	    if (me->inA)		HTML_end_element(me, HTML_A, (char **)&include);	    me->CurrentA = HTAnchor_findChildAndLink(				me->node_anchor,	/* Parent */				NULL,			/* Tag */				href,			/* Addresss */				INTERN_LT);		/* Type */	    LYEnsureDoubleSpace(me);	    LYResetParagraphAlignment(me);	    if (me->inUnderline == FALSE)		HText_appendCharacter(me->text, LY_UNDERLINE_START_CHAR);	    HTML_put_string(me, "IFRAME:");	    if (me->inUnderline == FALSE)		HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);	    HTML_put_character(me, ' ');	    me->in_word = NO;	    CHECK_ID(HTML_IFRAME_ID);	    HText_beginAnchor(me->text, me->inUnderline, me->CurrentA);	    if (me->inBoldH == FALSE)		HText_appendCharacter(me->text, LY_BOLD_START_CHAR);	    HTML_put_string(me, (id_string ? id_string : href));	    FREE(href);	    if (me->inBoldH == FALSE)		HText_appendCharacter(me->text, LY_BOLD_END_CHAR);

⌨️ 快捷键说明

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