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

📄 htmlout.c

📁 将rft格式文件转换成html格式文件
💻 C
📖 第 1 页 / 共 3 页
字号:
		    OD->TStack[OD->HTTags] = i;		    if (TMatchArr[i].TTidx >= TTagLen) {		    	RTFMsg ("Fatal Error");	    		context();		    	RTFPanic ("Internal trap - tried to push special: %d\n",TMatchArr[i].TTidx);		    }		    putwrap(TTagArr[TMatchArr[i].TTidx].StartTag,			OD,OD->wrap);		}	    }	}    }			}DoPmark(OD)    struct FDest *OD;{	/* pop all text styles, print the paragraph mark and push them back */	int i;	OD->NeedPar=0;	for(i=OD->HTTags;i>OD->HPTags;i--){	    putwrap(TTagArr[TMatchArr[OD->TStack[i]].TTidx].EndTag,		OD,OD->wrap);	}	putwrap(PTagArr[OD->PTidx].ParTag, OD,OD->wrap);	for(i=OD->HPTags+1; i<=OD->HTTags;i++){	    putwrap(TTagArr[TMatchArr[OD->TStack[i]].TTidx].StartTag,		OD,OD->wrap);	}}PutSpecial(Special)    int Special;{    int i,j,n,opos,dataleft;    char orec[MAXOBUF];    struct FDest *OD;    switch (destination) {	/* string destinations */    case rtfITitle:    case rtfInfo:    case rtfISubject:    case rtfIAuthor:    case rtfIOperator:    case rtfIKeywords:    case rtfIComment:    case rtfIVersion:    case rtfIDoccomm:	return;	case rtfParNumText:    	SaveSt(&PNSave,1+Special);    	PNText=1;		return;	/* file destinations */    case rtfHeader:    case rtfHeaderLeft:    case rtfHeaderRight:    case rtfHeaderFirst:    case rtfFooter:    case rtfFooterLeft:    case rtfFooterRight:    case rtfFooterFirst:	return;    case rtfFootnote:	OD = &Footnote;	break;    default:	OD = &File1;	break;    }    if(PNText){	/* We have saved ParNumText */    	PNText=0;    	PlayST(&PNSave);    }    if(FNText==1){	    	FNText=2;	    	PlayST(&FNSave);		    FNText=0;    }    if (IStyle_Chg){	    if(inTable){			TFont="--Not a Font--";	    	TStyle=0;	   		TSize=9999;	   		ParStyle="_Table";	    }    	TestStyle(OD);    }    if (OD->NeedPar) {		DoPmark(OD);		OD->NeedPar = 0;    }	switch (Special) {    case rtfRow:	/* Clear out all saved cell data */    	dataleft=1;	    for(i=firstcell;i<lastcell;i++)	    	cell[i].cpos=0;    	while(dataleft){    		dataleft=0;    		opos=0;	    	for(i=firstcell;i<lastcell;i++){	    		if(cell[i].merge||cell[i].cpos>=cell[i].cbuff.used){	    			for(j=0;j<=cell[i].width;j++){	    				orec[opos++]=' ';	    			}	    			continue;	    			}	    		cell[i].cpos+=nextfield(&(cell[i].cbuff.ptr[cell[i].cpos]), 	    			cell[i].width-1,  &(orec[opos]), cell[i].just,1);	    		/* skip leading blanks */	    		while(cell[i].cbuff.ptr[cell[i].cpos]==' '||cell[i].cbuff.ptr[cell[i].cpos]=='\t')	    			cell[i].cpos++;	    		n=strlen(&(orec[opos]));	    		orec[opos+n]=' ';	    		orec[opos+n+1]=' ';	    		opos+=n+2; 			    		if(cell[i].cpos<cell[i].cbuff.used)	    			dataleft=1;	    	}    		orec[opos++]='\n';    		orec[opos]='\0';    		putwrap(orec, OD,0);    	}	    for(i=firstcell;i<lastcell;i++)	    	cell[i].cbuff.used=0;		break;    case rtfPar:    	if(inTable){    		AppendText(&(cell[cellno].cbuff), " ");			return;    	}   				if (OD->TSpecial == MTDiscard)		    return;    	if (OD->InCol2==0 && PTagArr[OD->PTidx].DeleteCol1==1) {     		/* We deleted Everything */	    	if(SkipCol.used>0){	    		RTFMsg ("Warning - required Tab missing from list entry - recovering text");		    	context();	    		putwrap(SkipCol.ptr,OD,OD->wrap);    		}    	}		OD->NeedPar = 1;		OD->InCol2 = 0;	    SkipCol.used=0;	    if(ToC&&ToCText&&OD==&File1&&HToCLev>0){	    	putwrap("</a>",&ToCFile,0);	    	putwrap("</a>",OD,0);	    	ToCText=0;	    }		break;    case rtfTab:    	if(inTable){    		AppendText(&(cell[cellno].cbuff), " ");			return;    	}   				if (OD->TSpecial == MTDiscard)		    return;		if (!OD->InCol2) {		    putwrap(PTagArr[OD->PTidx].Col2Tag, OD,OD->wrap);	    	SkipCol.used=0;		    OD->InCol2 = 1;		} else {		    putwrap(PTagArr[OD->PTidx].TabTag, OD,OD->wrap);		}		break;    }}context(){	int cptr;	char ctxbuff[256];	sprintf (ctxbuff,"At line %ld, position %d.\n",rtfLineNum, rtfLinePos);	RTFMsg (ctxbuff);}voidPutHTMLString(p)    char *p;{    int i, j;    struct FDest *OD;    switch (destination) {	/* string destinations */    case rtfITitle:	AppendText(&Title, p);	return;    case rtfInfo:    case rtfISubject:    case rtfIAuthor:    case rtfIOperator:    case rtfIKeywords:    case rtfIComment:    case rtfIVersion:    case rtfIDoccomm:	return;	case rtfParNumText:		AppendText(&PNSave.SD, p);	    if (IStyle_Chg)SaveSt(&PNSave,0);	    PNText=1;		return;    case rtfObjItem:	AppendText(&Item, p);	return;    case rtfBookmarkStart:	AppendText(&BkName, p);	return;    case rtfBookmarkEnd:	return;	/* file destinations */    case rtfHeader:    case rtfHeaderLeft:    case rtfHeaderRight:    case rtfHeaderFirst:    case rtfFooter:    case rtfFooterLeft:    case rtfFooterRight:    case rtfFooterFirst:	return;    case rtfFootnote:	OD = &Footnote;	break;    default:	OD = &File1;	break;    }	    if(PNText){	/* We have saved ParNumText */    	PNText=0;    	PlayST(&PNSave);    }    if(inTable){		AppendText(&(cell[cellno].cbuff), p);		return;	}    if(FNText==1){	    	FNText=2;	    	PlayST(&FNSave);		    FNText=0;    } else if(FNText==0&&IStyle_Chg&&destination!=rtfFootnote) { /* We have a candidate footnote */    	FNText=1;    	AppendText(&FNSave.SD, p);	    SaveSt(&FNSave,0);    	return;    }    if (IStyle_Chg){    	TestStyle(OD);    }    if (OD->TSpecial == MTDiscard)	return;    if (OD->InCol2==0 && PTagArr[OD->PTidx].DeleteCol1==1){    	AppendText(&SkipCol, p);		return;	}    if (OD->NeedPar) {		DoPmark(OD);		OD->NeedPar = 0;    }    /* If we are looking at <,> or & that have been translated    	and we are in MHLiteral, untranslated them.    */    if (OD->TSpecial == MTLiteral){    	if(strcmp(p,"&lt;")==0)p="<";    	else if(strcmp(p,"&gt;")==0)p=">";    	else if(strcmp(p,"&amp;")==0)p="&";    } else if ((ConvertCaps) && p[0] != '&' && p[0] != '[') {    /* do uppercasing if string doesn't begin with '&' or '[' */	char *s = p;	while (*s != '\0') {	    if (islower(*s))		*s = toupper(*s);	    ++s;	}    }    if(ToC&&OD==&File1&&HToCLev>0){    	while(oToCLev>HToCLev){    		putwrap("</ol>",&ToCFile,0);    		oToCLev--;    	}    	while(oToCLev<HToCLev){    		putwrap("<ol>",&ToCFile,0);    		oToCLev++;    	}    	if(ToCText==0){    	    anyTOC=1;    		sprintf(LineBuffer,"\n<li><a href=\"%s.html#RTFToC%d\">", FPrefixR,ToCidx);    		putwrap(LineBuffer,&ToCFile,0);    		sprintf(LineBuffer,"<a name=\"RTFToC%d\">",ToCidx++);    		putwrap(LineBuffer,OD,0);    		ToCText=1;    	}    	putwrap(p,&ToCFile,0);    }    putwrap(p, OD,OD->wrap);}voidPutHTML(){    char *p;    p = MapChar(rtfMinor);    PutHTMLString(p);}/* * Map a standard character code to an output string. * Returns pointer to static string. */static char *MapChar(stdCode)    int stdCode;{    static char buf[100];    char *oStr;    if (stdCode == rtfSC_nothing){    sprintf(buf,"&#%d;",rtfMajor);	RTFMsg("Invalid Character Code \\`%x - outputting &#%d;\n",rtfMajor,rtfMajor);    }else {	oStr = outMap[stdCode];	if (oStr == (char *) NULL) {	/* no output sequence in map */	    sprintf(buf, "[[%s]]", RTFStdCharName(stdCode));	    RTFMsg("No output translation for :%s\n",RTFStdCharName(stdCode));	} else	    (void) strcpy(buf, oStr);    }    return (buf);}static voidAppendText(OD, text)    struct SDest *OD;    char *text;{    int need;    char *ptr;    need = OD->used + 1 + strlen(text);	/* need space for next char + '\0' */    if (OD->alloc < need) {	OD->alloc += DSALLOC * (1 + (need / DSALLOC));	ptr = (char *) RTFAlloc(	    (int) sizeof(char) * OD->alloc);	if (ptr == NULL) {	    RTFMsg ("Memory Allocation Failed\n");	    context();	   RTFPanic ("");	}	if (OD->ptr != NULL) {	    (void) strcpy(ptr, OD->ptr);	    RTFFree(OD->ptr);	}	OD->ptr = ptr;    }    strcpy(&(OD->ptr[(OD->used)]), text);    OD->used += strlen(text);}/* 	Need to save off  Special Character (int)	and current text position	and current save state pointer*/SaveSt(SS,Special)struct SSStruct *SS;{	struct SSData *ptr;	int i;	if(SS->alloc==SS->used){		SS->alloc+=40;		ptr = (struct SSData *) RTFAlloc(	    (int) sizeof(struct SSData) * SS->alloc);		if (ptr == NULL) {		    RTFMsg ("Memory Allocation Failed\n");		    context();		   RTFPanic ("");		}		if(SS->data != NULL) {			for(i=0;i<SS->used;i++){				ptr[i]=SS->data[i];			}			RTFFree(SS->data);		}		SS->data=ptr;	}	SS->data[SS->used].Special=Special;	if(IStyle_Chg){		SS->data[SS->used].TheState=SaveIState();	} else {		SS->data[SS->used].TheState=NULL;	}	SS->data[SS->used++].cpos=SS->SD.used;}PlayST(SS)struct SSStruct *SS;{	int i,tidx=0;	InStateStack *SavedState;	char savchar;	SavedState=SaveIState();	for(i=0;i<SS->used;i++){		if(SS->data[i].TheState){			RestoreIState(SS->data[i].TheState);			SS->data[i].TheState=NULL;			if(destination==rtfParNumText){			    destination=SavedState->destination;			    ParStyle=SavedState->ParStyle;		    } else if(destination!=rtfFootnote &&		    	SavedState->destination==rtfFootnote){				FNMatch.TStyle = TStyle;				FNMatch.Font= TFont;				FNMatch.FSize = TSize;		    }		}		/* First dispense with all leading text */		if(tidx < SS->SD.used){			savchar=SS->SD.ptr[SS->data[i].cpos];			SS->SD.ptr[SS->data[i].cpos]='\0';			PutHTMLString(&(SS->SD.ptr[tidx]));			tidx=SS->data[i].cpos;			SS->SD.ptr[SS->data[i].cpos]=savchar;		}		if(SS->data[i].Special){			PutSpecial(SS->data[i].Special-1);		}	}	SS->SD.used=0;	SS->used=0;	RestoreIState(SavedState);}

⌨️ 快捷键说明

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