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

📄 httexgen.c

📁 www工具包
💻 C
📖 第 1 页 / 共 2 页
字号:
    } else if (me->markup || me->preformatted) {	*me->write_pointer++ = c;    } else if (c==' ' || c=='\t') {	              /* Skip space and tabs */	if (*(me->write_pointer-1) != ' ')	    *me->write_pointer++ = ' ';	else	    return HT_OK;    } else {	if (c=='$' || c=='&' || c=='%' || c=='#' ||         /* Special chars */	    c=='{' || c=='}' || c=='_') {	    *me->write_pointer++ = '\\';	    *me->write_pointer++ = c;	} else if (c=='\\') {			            /* Special names */	    char *temp = "$\\backslash$";	    strcpy(me->write_pointer, temp);	    me->write_pointer += strlen(temp);	} else if (c=='^') {	    char *temp = "$\\hat{ }$";	    strcpy(me->write_pointer, temp);	    me->write_pointer += strlen(temp);	    	} else if (c=='~') {	    char *temp = "$\\tilde{ }$";	    strcpy(me->write_pointer, temp);	    me->write_pointer += strlen(temp);	} else if (c=='|' || c=='<' || c=='>') {       	        /* Math mode */	    *me->write_pointer++ = '$';	    *me->write_pointer++ = c;	    *me->write_pointer++ = '$';	} else	    *me->write_pointer++ = c;	      	        /* Char seems normal */    }    if (c==' ')						   /* Find delimiter */	me->line_break = me->write_pointer;    else if (strchr(WORD_DELIMITERS, c))	me->line_break = me->write_pointer-1;    /* Flush buffer out when full */    if (me->write_pointer >= me->buffer+BUFFER_SIZE-3) {#ifdef OLD_CODE	if (me->markup || me->preformatted) {#endif /* OLD_CODE */	if (me->preformatted) {	    *me->write_pointer = '\n';	    (*me->targetClass.put_block)(me->target,					 me->buffer,					 me->write_pointer-me->buffer+1);	    me->write_pointer = me->buffer;	} else {		       		          /* Use break-point */	    char line_break_char = *me->line_break;	    char *saved = me->line_break;	    *me->line_break = '\n';	    (*me->targetClass.put_block)(me->target,					 me->buffer,					 me->line_break-me->buffer+1);	    *me->line_break = line_break_char;	    {                                           /* move next line in */		char *p = saved;		char *q;		for(q=me->buffer; p<me->write_pointer; )		    *q++ = *p++;	    }	    me->write_pointer = me->buffer + (me->write_pointer-saved);	}	    	me->line_break = me->buffer;    }    return HT_OK;}/*	String handling**	---------------*/PRIVATE int HTTeXGen_put_string (HTStructured * me, const char* s){    while (*s)	HTTeXGen_put_character(me, *s++);    return HT_OK;}PRIVATE int HTTeXGen_write (HTStructured * me, const char* b, int l){    while (l-- > 0)	HTTeXGen_put_character(me, *b++);    return HT_OK;}/*	Start Element**	-------------****     	No attributes are put to the output		Henrik 07/03-94**	Does no assumptions of WHAT element is started...*/PRIVATE void HTTeXGen_start_element (HTStructured * 	me,				     int		element_number,				     const BOOL *	present,				     const char **	value){    me->startup = YES;			        /* Now, let's get down to it */    if (me->preformatted == YES) {	       /* Don't start markup in here */	HTTRACE(SGML_TRACE, "LaTeX....... No Markup in verbatim mode\n");	return;    }    if (element_number == HTML_PRE)	me->preformatted = YES;    if (element_number == HTML_CITE ||	              /* No \n here, please! */	element_number == HTML_DT ||	element_number == HTML_H1 ||	element_number == HTML_H2 ||	element_number == HTML_H3 ||	element_number == HTML_H4 ||	element_number == HTML_H5 ||	element_number == HTML_H6 ||	element_number == HTML_H7 ||	element_number == HTML_TITLE)	me->sensitive = YES;    else if (element_number == HTML_DD)         /* Only way to turn <DT> off */	me->sensitive = NO;    me->markup = element_number == HTML_A ? NO : YES;    HTTeXGen_put_string(me, *TeX_names[element_number]);    me->markup = NO;}/*		End Element**		-----------****	Ends an markup element			Henrik 07/03-94**	Does no assumptions of WHAT element is ended...*/PRIVATE void HTTeXGen_end_element (HTStructured * me, int element_number){    if (me->preformatted && element_number != HTML_PRE) {	HTTRACE(SGML_TRACE, "LaTeX....... No markup in verbatim mode\n");	return;    }    me->preformatted = NO;    me->markup = YES;    HTTeXGen_put_string(me, *(TeX_names[element_number]+1));    me->markup = NO;    if (element_number == HTML_CITE ||		element_number == HTML_DL ||	element_number == HTML_H1 ||	element_number == HTML_H2 ||	element_number == HTML_H3 ||	element_number == HTML_H4 ||	element_number == HTML_H5 ||	element_number == HTML_H6 ||	element_number == HTML_H7 ||	element_number == HTML_TITLE)	me->sensitive = NO;}/*		Expanding entities**		------------------***/PRIVATE void HTTeXGen_put_entity (HTStructured * me, int entity_number){    BOOL mark = me->markup;    if (*TeX_entities[entity_number] != '&' && /* Theese are converted later */	*TeX_entities[entity_number] != '<' &&	*TeX_entities[entity_number] != '>')	me->markup = YES;    HTTeXGen_put_string(me, TeX_entities[entity_number]);    me->markup = mark;}PRIVATE int HTTeXGen_unparsedBeginElement (HTStructured * me, const char * b, int l){    return (*me->targetClass.put_block)(me->target, b, l);}PRIVATE int HTTeXGen_unparsedEndElement (HTStructured * me, const char * b, int l){    return (*me->targetClass.put_block)(me->target, b, l);}PRIVATE int HTTeXGen_unparsedEntity (HTStructured * me, const char * b, int l){    return (*me->targetClass.put_block)(me->target, b, l);}/*	Free an HTML object**	-------------------***/PRIVATE int HTTeXGen_free (HTStructured * me){    HTTeXGen_flush(me);    (*me->targetClass.put_string)(me->target, "\n\\end{document}\n");    HTTeXGen_flush(me);    (*me->targetClass._free)(me->target);	/* ripple through */    HT_FREE(me);    return HT_OK;}PRIVATE int HTTeXGen_abort (HTStructured * me, HTList * e){    HTTeXGen_free(me);    return HT_ERROR;}/*	Structured Object Class**	-----------------------*/PRIVATE const HTStructuredClass HTTeXGeneration = /* As opposed to print etc */{			"HTMLToTeX",	HTTeXGen_flush,	HTTeXGen_free,	HTTeXGen_abort,	HTTeXGen_put_character,        	HTTeXGen_put_string,	HTTeXGen_write,	HTTeXGen_start_element, 	HTTeXGen_end_element,	HTTeXGen_put_entity,	HTTeXGen_unparsedBeginElement,	HTTeXGen_unparsedEndElement,	HTTeXGen_unparsedEntity}; /*	HTConverter from HTML to TeX Stream**	------------------------------------------***/PUBLIC HTStream* HTMLToTeX (HTRequest *	request,			    void *	param,			    HTFormat	input_format,			    HTFormat	output_format,			    HTStream *	output_stream){    HTStructured* me;    if ((me = (HTStructured *) HT_CALLOC(1, sizeof(*me))) == NULL)        HT_OUTOFMEM("HTMLToTeX");    me->isa = (HTStructuredClass*) &HTTeXGeneration;    me->dtd = HTML_dtd();    me->target = output_stream;    me->targetClass = *me->target->isa;/* Copy pointers to routines for speed*/    me->write_pointer = me->buffer;    me->line_break = 	me->buffer;    (*me->targetClass.put_string)(me->target,        "\\documentstyle[11pt]{report}\n\\begin{document}\n");    return SGML_new(HTML_dtd(), me);}

⌨️ 快捷键说明

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