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

📄 html.c

📁 firtext搜索引擎源码
💻 C
📖 第 1 页 / 共 2 页
字号:
		char * ptr = NULL;		char * relation = NULL;		StrAllocCopy(strval, value[HTML_LINK_REL]);		ptr = strval;		while ((relation = HTNextLWSToken(&ptr)) != NULL) {		    HTLink_add((HTAnchor *) me->node_anchor, (HTAnchor *) dest,			       (HTLinkType) HTAtom_caseFor(relation),			       METHOD_INVALID);		}		HT_FREE(strval);	    }	    /* If reverse reference */	    if ((present[HTML_LINK_REV] && value[HTML_LINK_REV])) {		char * strval = NULL;		char * ptr = NULL;		char * relation = NULL;		StrAllocCopy(strval, value[HTML_LINK_REV]);		ptr = strval;		while ((relation = HTNextLWSToken(&ptr)) != NULL) {		    HTLink_add((HTAnchor *) dest, (HTAnchor *) me->node_anchor,			       (HTLinkType) HTAtom_caseFor(relation),			       METHOD_INVALID);		}		HT_FREE(strval);	    }	    /* If we got any type information as well */	    if (present[HTML_LINK_TYPE] && value[HTML_LINK_TYPE]) {		if (HTAnchor_format(dest) == WWW_UNKNOWN)		    HTAnchor_setFormat(dest,				       (HTFormat) HTAtom_caseFor(value[HTML_LINK_TYPE]));	    }	    /* Call out to the layout engine */	    HTextImp_foundLink(me->text, element_number, HTML_LINK_HREF,			       address, present, value);	}	break;    case HTML_META:	if (present[HTML_META_NAME] && value[HTML_META_NAME]) {	    HTAnchor_addMeta (me->node_anchor,			      value[HTML_META_NAME],			      (present[HTML_META_CONTENT] && value[HTML_META_CONTENT]) ?			      value[HTML_META_CONTENT] : "");	}	break;    case HTML_OBJECT:	if (present[HTML_OBJECT_CLASSID] && value[HTML_OBJECT_CLASSID]) {	    address = HTAnchor_findChildAndLink(me->node_anchor, NULL,						value[HTML_OBJECT_CLASSID], NULL);	    HTextImp_foundLink(me->text, element_number, HTML_OBJECT_CLASSID,			       address, present, value);	}	if (present[HTML_OBJECT_CODEBASE] && value[HTML_OBJECT_CODEBASE]) {	    address = HTAnchor_findChildAndLink(me->node_anchor, NULL,						value[HTML_OBJECT_CODEBASE], NULL);	    HTextImp_foundLink(me->text, element_number, HTML_OBJECT_CODEBASE,			       address, present, value);	}	if (present[HTML_OBJECT_DATA] && value[HTML_OBJECT_DATA]) {	    address = HTAnchor_findChildAndLink(me->node_anchor, NULL,						value[HTML_OBJECT_DATA], NULL);	    HTextImp_foundLink(me->text, element_number, HTML_OBJECT_DATA,			       address, present, value);	}	if (present[HTML_OBJECT_ARCHIVE] && value[HTML_OBJECT_ARCHIVE]) {	    address = HTAnchor_findChildAndLink(me->node_anchor, NULL,						value[HTML_OBJECT_ARCHIVE], NULL);	    HTextImp_foundLink(me->text, element_number, HTML_OBJECT_ARCHIVE,			       address, present, value);	}	if (present[HTML_OBJECT_USEMAP] && value[HTML_OBJECT_USEMAP]) {	    address = HTAnchor_findChildAndLink(me->node_anchor, NULL,						value[HTML_OBJECT_USEMAP], NULL);	    HTextImp_foundLink(me->text, element_number, HTML_OBJECT_USEMAP,			       address, present, value);	}	break;    case HTML_PRE:    	if (me->comment_end)	    HTextImp_addText(me->text, me->comment_end, strlen(me->comment_end));	break;    case HTML_TITLE:        HTChunk_truncate(me->title,0);	break;    }    /* Update our parse stack */    if (SGML_findTagContents(me->dtd, element_number) != SGML_EMPTY) {        if (me->sp == me->stack) {	    HTTRACE(SGML_TRACE, "HTML Parser. Maximum nesting of %d exceded!\n" _ MAX_NESTING); 	    me->overflow++;	    return;	}    	--(me->sp);	me->sp[0] = element_number;    }	    /* Call out to the layout engine */    HTextImp_beginElement(me->text, element_number, present, value);}PRIVATE void HTML_end_element (HTStructured * me, int element_number){    if (!me->started) {	HTextImp_build(me->text, HTEXT_BEGIN);	me->started = YES;    }    /* Update our parse stack */    if (me->overflow > 0) {	me->overflow--;	return;    }    me->sp++;    if (me->sp > me->stack + MAX_NESTING - 1) {	HTTRACE(SGML_TRACE, "HTML Parser. Bottom of parse stack reached\n");	me->sp = me->stack + MAX_NESTING - 1;    }    /* Look at what element was closed */    switch(element_number) {    case HTML_TITLE:    	HTAnchor_setTitle(me->node_anchor, HTChunk_data(me->title));	break;	    case HTML_PRE:    	if (me->comment_start)	    HTextImp_addText(me->text, me->comment_start, strlen(me->comment_start));	break;    }    /* Call out to the layout engine */    HTextImp_endElement(me->text, element_number);}PRIVATE void HTML_put_entity (HTStructured * me, int entity_number){    if (!me->started) {	HTextImp_build(me->text, HTEXT_BEGIN);	me->started = YES;    }    if (entity_number>=0 && entity_number<HTML_ENTITIES)	HTML_put_string(me, *(CurrentEntityValues+entity_number));}PUBLIC int HTML_flush (HTStructured * me){    if (!me->started) {	HTextImp_build(me->text, HTEXT_BEGIN);	me->started = YES;    }    if (me->comment_end) HTML_put_string(me, me->comment_end);    return me->target ? FLUSH_TARGET(me) : HT_OK;}PRIVATE int HTML_unparsedBeginElement (HTStructured * me, const char * b, int l){    if (!me->started) {	HTextImp_build(me->text, HTEXT_BEGIN);	me->started = YES;    }    HTextImp_unparsedBeginElement(me->text, b, l);    return HT_OK;}PRIVATE int HTML_unparsedEndElement (HTStructured * me, const char * b, int l){    if (!me->started) {	HTextImp_build(me->text, HTEXT_BEGIN);	me->started = YES;    }    HTextImp_unparsedEndElement(me->text, b, l);    return HT_OK;}PRIVATE int HTML_unparsedEntity (HTStructured * me, const char * b, int l){    if (!me->started) {	HTextImp_build(me->text, HTEXT_BEGIN);	me->started = YES;    }    HTextImp_unparsedEntity(me->text, b, l);    return HT_OK;}PUBLIC int HTML_free (HTStructured * me){    if (!me->started) HTextImp_build(me->text, HTEXT_BEGIN);    if (me->comment_end) HTML_put_string(me, me->comment_end);    HTextImp_build(me->text, HTEXT_END);    HTextImp_delete(me->text);    HTChunk_delete(me->title);    if (me->target) FREE_TARGET(me);    HT_FREE(me);    return HT_OK;}PRIVATE int HTML_abort (HTStructured * me, HTList * e){    if (!me->started) HTextImp_build(me->text, HTEXT_BEGIN);    HTextImp_build(me->text, HTEXT_ABORT);    HTextImp_delete(me->text);    HTChunk_delete(me->title);    if (me->target) ABORT_TARGET(me);    HT_FREE(me);    return HT_ERROR;}/*	Structured Object Class**	-----------------------*/PRIVATE const HTStructuredClass HTMLPresentation = /* As opposed to print etc */{		    "text/html",    HTML_flush,    HTML_free,    HTML_abort,    HTML_put_character,    HTML_put_string,    HTML_write,    HTML_start_element,    HTML_end_element,    HTML_put_entity,    HTML_unparsedBeginElement,    HTML_unparsedEndElement,    HTML_unparsedEntity};/*	Structured Text object**	----------------------****	The structured stream can generate either presentation,**	or plain text, or HTML.*/PRIVATE HTStructured * HTML_new (HTRequest *	request,				 void *		param,				 HTFormat	input_format,				 HTFormat	output_format,				 HTStream *	output_stream){    HTStructured * me = NULL;    if (request) {	if ((me = (HTStructured *) HT_CALLOC(1, sizeof(HTStructured))) == NULL)	    HT_OUTOFMEM("HTML_new");	me->isa = &HTMLPresentation;	me->dtd = HTML_dtd();	me->request = request;	me->node_anchor =  HTRequest_anchor(request);	me->title = HTChunk_new(128);	me->comment_start = NULL;	me->comment_end = NULL;	me->target = output_stream;	me->sp = me->stack + MAX_NESTING - 1;	/* Create the text object */	me->text = HTextImp_new(me->request, me->node_anchor, me->target);    }    return me;}/*	HTConverter for HTML to plain text**	----------------------------------****	This will convert from HTML to presentation or plain text.*/PUBLIC HTStream * HTMLToPlain (HTRequest *	request,			       void *		param,			       HTFormat		input_format,			       HTFormat		output_format,			       HTStream *	output_stream){    return SGML_new(HTML_dtd(), HTML_new(    	request, NULL, input_format, output_format, output_stream));}/*	HTConverter for HTML to C code**	------------------------------****	C code is like plain text but all non-preformatted code**	is commented out.**	This will convert from HTML to presentation or plain text.*/PUBLIC HTStream * HTMLToC (HTRequest *	request,			   void *	param,			   HTFormat	input_format,			   HTFormat	output_format,			   HTStream *	output_stream){    if (output_stream) {	HTStructured * html = NULL;	(*output_stream->isa->put_string)(output_stream, "/* "); /* Before title */	html = HTML_new(request, NULL, input_format, output_format, output_stream);	html->comment_start = "\n/* ";	html->dtd = HTML_dtd();	html->comment_end = " */\n";	/* Must start in col 1 for cpp */	return SGML_new(HTML_dtd(), html);    } else	return HTErrorStream();}/*	Presenter for HTML**	------------------****	This will convert from HTML to presentation or plain text.****	Override this if you have a windows version*/PUBLIC HTStream * HTMLPresent (HTRequest *	request,			       void *		param,			       HTFormat		input_format,			       HTFormat		output_format,			       HTStream *	output_stream){    return SGML_new(HTML_dtd(), HTML_new(    	request, NULL, input_format, output_format, output_stream));}

⌨️ 快捷键说明

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