亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? htmlgen.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
字號:
/*								      HTMLGen.c**	HTML GENERATOR****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTMLGen.c,v 2.45 1999/02/22 22:10:11 frystyk Exp $****	This version of the HTML object sends HTML markup to the output stream.**** Bugs:	Line wrapping is not done at all.**		All data handled as PCDATA.**		Should convert old XMP, LISTING and PLAINTEXT to PRE.****	It is not obvious to me right now whether the HEAD should be generated**	from the incomming data or the anchor.  Currently it is from the former**	which is cleanest. TBL**** HISTORY:**	 8 Jul 94  FM	Insulate free() from _free structure element.***//* Library include files */#include "wwwsys.h"#include "HTUtils.h"#include "HTMLPDTD.h"#include "HTStruct.h"#include "HTFormat.h"#include "HTMLGen.h"				         /* Implemented here */#define BUFFER_SIZE	80	/* Line buffer attempts to make neat breaks */#define MAX_CLEANNESS	10#define PUT_CHAR(c)	(*me->target->isa->put_character)(me->target, c)#define PUT_STR(s)	(*me->target->isa->put_string)(me->target, s)#define PUT_BLOCK(s,l)	(*me->target->isa->put_block)(me->target, s, l)/* HTML Generator Object */struct _HTStream {    const HTStreamClass *	isa;    HTStream *			target;};struct _HTStructured {    const HTStructuredClass *	isa;    HTStream * 			target;    const SGML_dtd *		dtd;    BOOL			seven_bit;		  /* restrict output */	    char			buffer[BUFFER_SIZE+1];    char *			write_pointer;    char *			line_break [MAX_CLEANNESS+1];    int				cleanness;    BOOL			overflowed;    BOOL			delete_line_break_char[MAX_CLEANNESS+1];    char			preformatted;};/*			OUTPUT FUNCTIONS****	These function output the finished SGML stream doing the**	line wrap*//*	Flush Buffer**	------------*/PRIVATE void flush_breaks (HTStructured * me){    int i;    for (i=0; i<= MAX_CLEANNESS; i++) {        me->line_break[i] = NULL;    }}PRIVATE int HTMLGen_flush (HTStructured * me){    PUT_BLOCK(me->buffer, me->write_pointer - me->buffer);    me->write_pointer = me->buffer;    flush_breaks(me);    me->cleanness = 0;    return HT_OK;}/*	Weighted optional line break****	We keep track of all the breaks for when we chop the line*/PRIVATE void allow_break (HTStructured * me, int new_cleanness, BOOL dlbc){    me->line_break[new_cleanness] = 			 dlbc ? me->write_pointer - 1 /* Point to space */			      : me->write_pointer ;   /* point to gap */    me->delete_line_break_char[new_cleanness] = dlbc;    if (new_cleanness >= me->cleanness)	me->cleanness = new_cleanness;}/*	Character handling**	------------------****	The tricky bits are the line break handling.  This attempts**	to synchrononise line breaks on sentence or phrase ends. This**	is important if one stores SGML files in a line-oriented code**	repository, so that if a small change is made, line ends don't**	shift in a ripple-through to apparently change a large part of the**	file. We give extra "cleanness" to spaces appearing directly**	after periods (full stops), [semi]colons and commas.**	   This should make the source files easier to read and modify**	by hand, too, though this is not a primary design consideration. TBL*/PRIVATE char delims[] = ",;:.";		/* @@ english bias */PRIVATE int HTMLGen_output_character (HTStructured * me, char c){    *me->write_pointer++ = c;        if (c=='\n') {		/* Newlines */        if (me->preformatted) {	    HTMLGen_flush(me);	    return HT_OK;	} else {	    me->write_pointer[-1] = c = ' ';	/* Treat same as space */	}    }        /* Figure our whether we can break at this point    */    if ((!me->preformatted  && c==' ')) {        int new_cleanness = 1;	if (me->write_pointer > (me->buffer + 1)) {	    char * p;	    p = strchr(delims, me->write_pointer[-2]);	    if (p) new_cleanness = p - delims + 4;	}	allow_break(me, new_cleanness, YES);    }        /* Flush buffer out when full, or whenever the line is over       the nominal maximum and we can break at all    */    if (me->write_pointer >= me->buffer + BUFFER_SIZE-1        ||  (me->overflowed && me->cleanness)) {    	if (me->cleanness) {	    char line_break_char = me->line_break[me->cleanness][0];	    char * saved = me->line_break[me->cleanness];	    	    if (me->delete_line_break_char[me->cleanness]) saved++; 	    me->line_break[me->cleanness][0] = '\n';	    PUT_BLOCK(me->buffer, me->line_break[me->cleanness]-me->buffer+1);	    me->line_break[me->cleanness][0] = line_break_char;	    {  /* move next line in */	    	char * p=saved;		char *q;		for(q=me->buffer; p < me->write_pointer; )			*q++ = *p++;	    }	    me->cleanness = 0;	    /* Now we have to check whether ther are any perfectly good breaks	    ** which weren't good enough for the last line but may be	    **  good enough for the next	    */	    {	        int i;		for(i=0; i <= MAX_CLEANNESS; i++) {		    if (me->line_break[i] > saved) {		        me->line_break[i] = me->line_break[i] -						(saved-me->buffer);			me->cleanness = i;		    } else {		        me->line_break[i] = NULL;		    }		}	    }	    me->write_pointer = me->write_pointer - (saved-me->buffer);	    me->overflowed = NO;	} else {   /* No break- just output with no newline */	    PUT_BLOCK(me->buffer, me->write_pointer - me->buffer);	    me->write_pointer = me->buffer;	    flush_breaks(me);	    me->overflowed = YES;	}    }    return HT_OK;}/*	String handling**	---------------*/PRIVATE int HTMLGen_output_string (HTStructured * me, const char* s){    while (*s)	HTMLGen_output_character(me, *s++);    return HT_OK;}/*			INPUT FUNCTIONS****	These take data from the structured stream.  In the input**	stream, entities are in raw form.  The seven_bit flag controls**	whether the ISO Latin-1 charactrs are represented in SGML entity**	form.  This is only recommended for viewing on older non-latin-1**	capable equipment, or for mailing for example. **** Bug: assumes local encoding is ISO!*/	PRIVATE int HTMLGen_put_character (HTStructured * me, char c){    if (c=='&') HTMLGen_output_string(me, "&amp;");    else if (c=='<') HTMLGen_output_string(me, "&lt;");    else if (me->seven_bit && ((unsigned char)c > 127)) {        char temp[8];	sprintf(temp, "&%d;", c);	HTMLGen_output_string(me, temp);    } else	HTMLGen_output_character(me, c);    return HT_OK;}PRIVATE int HTMLGen_put_string (HTStructured * me, const char* s){    while (*s)	HTMLGen_put_character(me, *s++);    return HT_OK;}PRIVATE int HTMLGen_write (HTStructured * me, const char* b, int l){    while (l-- > 0)	HTMLGen_put_character(me, *b++);    return HT_OK;}/*	Start Element**	-------------****	Within the opening tag, there may be spaces**	and the line may be broken at these spaces.*/PRIVATE void HTMLGen_start_element (	HTStructured * 	me,	int			element_number,	const BOOL*	 	present,	const char **		value){    int i;    HTTag * tag = &me->dtd->tags[element_number];    /* Control line breaks allowed within tag! */    int was_preformatted = me->preformatted;	/* save state */    me->preformatted = 1;	/* Can break between attributes */    HTMLGen_output_character(me, '<');    HTMLGen_output_string(me, tag->name);    if (present) for (i=0; i< tag->number_of_attributes; i++) {        if (present[i]) {	    HTMLGen_output_character(me, ' ');	    allow_break(me, 1, YES);	    HTMLGen_output_string(me, tag->attributes[i].name);	    if (value[i]) {	 	HTMLGen_output_string(me, "=\"");		HTMLGen_output_string(me, value[i]);		HTMLGen_output_character(me, '"');	    }	}    }    me->preformatted = was_preformatted;	/* Restore state */    /* Nested PRE is no more a problem! */    if (element_number == HTML_PRE)	me->preformatted++;    HTMLGen_output_character(me, '>');        /* Here is a funny one.  In PRE, newlines are significant, except of    course for one after the <PRE> which is ignored. This means that    we MUST put in a dummy one after the <PRE> to protect any real newline    within the pre section.        However, *within* a PRE section, although we can break after    (for example) emphasis start tags, it will probably confuse some    parsers so we won't.*/        if (element_number == HTML_PRE) {        HTMLGen_output_character(me, '\n');    } else  if (!me->preformatted &&     	 tag->contents != SGML_EMPTY) {  /* can break after element start */     	allow_break(me, 3, NO);    }}/*	End Element**	-----------****      The rules for insertring CR LF into SGML are weird, strict, and** 	nonintitive.**	See comment also about PRE above.*/PRIVATE void HTMLGen_end_element (HTStructured * me, int element_number){    if (element_number == HTML_PRE) {        HTMLGen_output_character(me, '\n');    } else  if (!me->preformatted) { /* can break before element end */     	allow_break(me, 1, NO);    }    HTMLGen_output_string(me, "</");    HTMLGen_output_string(me, me->dtd->tags[element_number].name);    HTMLGen_output_character(me, '>');	   /* NO break after. TBL 940501 */    if (element_number == HTML_PRE && me->preformatted)	me->preformatted--;}/*	Expanding entities**	------------------***/PRIVATE void HTMLGen_put_entity (HTStructured * me, int entity_number){    HTMLGen_output_character(me, '&');    HTMLGen_output_string(me, me->dtd->entity_names[entity_number]);    HTMLGen_output_character(me, ';');}/*	Free an object**	--------------***/PRIVATE int HTMLGen_free (HTStructured * me){    HTMLGen_flush(me);    PUT_CHAR('\n');    (*me->target->isa->_free)(me->target);    HT_FREE(me);    return HT_OK;}PRIVATE int PlainToHTML_free (HTStructured * me){    HTMLGen_end_element(me, HTML_PRE);    HTMLGen_end_element(me, HTML_BODY);    HTMLGen_end_element(me, HTML_HTML);    HTMLGen_free(me);    return HT_OK;}PRIVATE int HTMLGen_abort (HTStructured * me, HTList * e){    HTMLGen_free(me);    return HT_ERROR;}PRIVATE int PlainToHTML_abort (HTStructured * me, HTList * e){    PlainToHTML_free(me);    return HT_ERROR;}/*	Structured Object Class**	-----------------------*/PRIVATE const HTStructuredClass HTMLGeneration = /* As opposed to print etc */{			"text/html",	HTMLGen_flush,	HTMLGen_free,	HTMLGen_abort,	HTMLGen_put_character, 	HTMLGen_put_string, HTMLGen_write,	HTMLGen_start_element,	HTMLGen_end_element,	HTMLGen_put_entity}; /*	Subclass-specific Methods**	-------------------------*/PUBLIC HTStructured* HTMLGenerator (HTRequest *	request,				    void *	param,				    HTFormat	input_format,				    HTFormat	output_format,				    HTStream *	output_stream){    HTStructured* me;    if ((me = (HTStructured  *) HT_CALLOC(1, sizeof(HTStructured))) == NULL)        HT_OUTOFMEM("HTMLGenerator");    me->isa = &HTMLGeneration;           me->dtd = HTML_dtd();    if ((me->target = HTStreamStack(WWW_HTML, output_format, output_stream,				    request, YES)) == NULL) {	HTTRACE(STREAM_TRACE, "HTMLGen..... Can't convert to media type\n");	HT_FREE(me);	me->target = HTErrorStream();    }    me->write_pointer = me->buffer;    flush_breaks(me);    return me;}/*	Stream Object Class**	-------------------****	This object just converts a plain text stream into HTML**	It is officially a structured stream but only the stream bits exist.**	This is just the easiest way of typecasting all the routines.*/PRIVATE const HTStructuredClass PlainToHTMLConversion ={			"plaintexttoHTML",	HTMLGen_flush,	PlainToHTML_free,	/* HTMLGen_free,  Henrik 03/03-94 */	PlainToHTML_abort,		HTMLGen_put_character,	HTMLGen_put_string,	HTMLGen_write,	NULL,		/* Structured stuff */	NULL,	NULL}; /*	HTConverter from plain text to HTML Stream**	------------------------------------------**** Changed by henrik 03/03-94, so no more core dumps etc. (I hope!!!)*/PUBLIC HTStream* HTPlainToHTML (HTRequest *	request,				void *		param,				HTFormat	input_format,				HTFormat	output_format,				HTStream *	output_stream){    BOOL present[MAX_ATTRIBUTES];	/* Flags: attribute is present? */    const char *value[MAX_ATTRIBUTES];	/* malloc'd strings or NULL if none */    HTStructured* me;    if ((me = (HTStructured *) HT_CALLOC(1,sizeof(*me))) == NULL)        HT_OUTOFMEM("PlainToHTML");        memset((void *) present, '\0', MAX_ATTRIBUTES);    memset((void *) value, '\0', MAX_ATTRIBUTES*sizeof(char *));        me->isa = (HTStructuredClass*) &PlainToHTMLConversion;    me->dtd = HTML_dtd();    me->target = output_stream;    me->write_pointer = me->buffer;    flush_breaks(me);        if (me->target) {	HTMLGen_start_element(me, HTML_HTML, present, value);	HTMLGen_start_element(me, HTML_BODY, present, value);	HTMLGen_start_element(me, HTML_PRE, present, value);    }    return (HTStream*) me;}/* 	A safe version for making 7-bit restricted HTML**	Beware that thsi makes it horrible for the Scandinavians**	to actually read it.**	ehh - not horrible - THIS REALLY PISSES THEM OFF - Henrik ;-)*/PUBLIC HTStream* HTPlainTo7BitHTML (HTRequest *	request,				    void *	param,				    HTFormat	input_format,				    HTFormat	output_format,				    HTStream *	output_stream){    HTStream* me = HTPlainToHTML(request,param,input_format,    		output_format, output_stream);    ((HTStructured*)me)->seven_bit = YES;    return me;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线国偷精品免费看| 欧洲一区二区三区在线| 色欧美乱欧美15图片| 欧美一级夜夜爽| 国产精品久久二区二区| 青青草国产精品亚洲专区无| 成人性生交大片免费看视频在线| 欧美综合亚洲图片综合区| 中文字幕国产精品一区二区| 日本欧美一区二区三区| 欧美性大战久久| 国产精品美女久久久久aⅴ| 久久精品72免费观看| 欧美日韩国产天堂| 亚洲女同一区二区| 成人黄色在线看| 久久久一区二区三区| 免费观看在线综合| 制服丝袜亚洲精品中文字幕| 亚洲激情在线激情| 成人动漫av在线| 国产婷婷色一区二区三区在线| 青青国产91久久久久久| 欧美一级在线视频| 日韩av中文字幕一区二区| 色婷婷综合久久久久中文一区二区 | 自拍偷拍欧美精品| 成人精品视频一区| 欧美国产精品一区| 成人性生交大片免费看中文| 久久久99久久| 国产成人精品亚洲777人妖| 精品国产乱码久久| 国产毛片精品视频| 亚洲国产成人在线| 91在线视频18| 一区二区国产盗摄色噜噜| 色婷婷精品久久二区二区蜜臂av| 亚洲色图一区二区三区| 色欧美88888久久久久久影院| 亚洲欧洲精品一区二区三区不卡| 成人午夜碰碰视频| 亚洲少妇中出一区| 欧美亚洲国产一卡| 日韩中文字幕亚洲一区二区va在线| 欧美日韩在线三级| 奇米888四色在线精品| 欧美成人性福生活免费看| 国产一区二区三区在线观看免费 | 亚洲视频网在线直播| 91免费国产在线| 亚洲综合一区二区三区| 欧美日韩成人在线一区| 久久超碰97中文字幕| 国产精品色哟哟网站| 99精品视频中文字幕| 亚洲午夜免费视频| 日韩欧美国产一区在线观看| 国产伦精品一区二区三区视频青涩| 中文字幕电影一区| 欧洲色大大久久| 久久精品国产**网站演员| 国产欧美日韩综合精品一区二区| www.亚洲精品| 日韩精品免费视频人成| 国产婷婷色一区二区三区四区| 99久久99久久免费精品蜜臀| 日韩高清一区二区| 国产欧美一区二区精品性色| 欧美性生活久久| 国产精品亚洲一区二区三区妖精| 亚洲日韩欧美一区二区在线| 欧美高清性hdvideosex| 成人小视频在线| 男女男精品视频| 国产精品久久夜| 日韩欧美的一区| 91成人在线观看喷潮| 狠狠色丁香婷综合久久| 亚洲成人av在线电影| 中文字幕欧美国产| 精品免费日韩av| 欧美在线你懂得| 成人av网站在线| 麻豆精品视频在线| 亚洲高清免费观看高清完整版在线观看| xfplay精品久久| 51精品秘密在线观看| 91视频在线看| 成人午夜av电影| 国内精品视频一区二区三区八戒| 亚洲一区中文在线| 中文字幕一区免费在线观看| 亚洲精品一线二线三线| 91精品一区二区三区在线观看| 91丝袜高跟美女视频| 大陆成人av片| 国产精品99久久久久久似苏梦涵| 日韩—二三区免费观看av| 亚洲黄网站在线观看| 136国产福利精品导航| 国产日韩一级二级三级| 日韩免费一区二区三区在线播放| 欧美日韩国产首页| 欧美日韩日日骚| 欧美午夜精品久久久久久孕妇| 99久久免费视频.com| 成人h动漫精品一区二| 国产精品综合一区二区| 久久97超碰色| 国产一区二区中文字幕| 久久99国产精品久久99| 久久aⅴ国产欧美74aaa| 免费观看久久久4p| 看国产成人h片视频| 久久精品国产一区二区| 久久91精品国产91久久小草| 美女网站色91| 激情久久五月天| 国产乱码精品1区2区3区| 国产精品自拍网站| 丁香天五香天堂综合| 成人午夜伦理影院| 一本色道久久综合精品竹菊| 色嗨嗨av一区二区三区| 日本道在线观看一区二区| 在线观看三级视频欧美| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品美女久久久久久久网站| 国产区在线观看成人精品| 国产精品视频在线看| 中文字幕在线观看一区二区| 亚洲色图视频网站| 性欧美大战久久久久久久久| 人人精品人人爱| 国产精品一区二区果冻传媒| 99在线精品一区二区三区| 欧美亚洲综合久久| 精品久久久久一区| 亚洲欧美另类图片小说| 婷婷激情综合网| 麻豆久久一区二区| 国产69精品久久久久毛片 | 成人av电影在线| 色999日韩国产欧美一区二区| 欧美丝袜第三区| 日韩精品一区二区三区在线观看 | 国产精品一区免费视频| 97久久久精品综合88久久| 欧美三级电影一区| 久久久久久免费毛片精品| 国产精品免费网站在线观看| 亚洲高清在线视频| 成人午夜精品在线| 9191成人精品久久| 国产精品毛片久久久久久久| 三级久久三级久久久| 国产成人av一区二区三区在线 | 国产精品一二三四| 欧美中文字幕一区二区三区亚洲| 日韩一区二区三区四区| 国产精品毛片久久久久久久| 日本不卡免费在线视频| 91在线观看视频| 久久伊99综合婷婷久久伊| 亚洲观看高清完整版在线观看 | 欧美日韩一级大片网址| 中文字幕av免费专区久久| 日韩高清电影一区| 色婷婷av一区二区三区之一色屋| 精品国产电影一区二区| 伊人一区二区三区| 成人一区二区三区| 久久久久久亚洲综合| 捆绑变态av一区二区三区| 在线影院国内精品| 国产精品久久久一区麻豆最新章节| 蜜芽一区二区三区| 欧美日韩中文另类| 综合久久给合久久狠狠狠97色| 国产一区亚洲一区| 欧美一区三区四区| 午夜av区久久| 欧美色视频一区| 一区二区三区四区激情| 成人app网站| 国产视频一区不卡| 国产在线播放一区二区三区| 91精品国产综合久久久久久漫画 | 欧美乱妇15p| 一区二区三区四区精品在线视频 | 91精品婷婷国产综合久久性色| 一区二区在线观看免费| 91浏览器在线视频| 综合分类小说区另类春色亚洲小说欧美| 成人涩涩免费视频| 国产精品午夜在线观看| 国产+成+人+亚洲欧洲自线| 欧美国产日本视频| 不卡欧美aaaaa|