📄 rtftohtml.c
字号:
case rtfDefTab: break; case rtfWidowCtrl: break; case rtfHyphHotZone: break; case rtfFNoteEndSect: break; case rtfFNoteEndDoc: break; case rtfFNoteText: break; case rtfFNoteBottom: break; case rtfFNoteStart: break; case rtfFNoteRestart: break; case rtfPageStart: break; case rtfLineStart: break; case rtfLandscape: break; case rtfFracWidth: break; case rtfNextFile: break; case rtfRTFDefault: break; case rtfRevisions: break; case rtfMirrorMargin: break; case rtfRevDisplay: break; case rtfRevBar: break; }}static void SectAttr (){ switch (rtfMinor) { case rtfSectDef: break; case rtfNoBreak: break; case rtfColBreak: break; case rtfPageBreak: break; case rtfEvenBreak: break; case rtfOddBreak: break; case rtfPageStarts: break; case rtfPageCont: break; case rtfPageRestart: break; case rtfPageDecimal: break; case rtfPageURoman: break; case rtfPageLRoman: break; case rtfPageULetter: break; case rtfPageLLetter: break; case rtfPageNumRight: break; case rtfPageNumTop: break; case rtfHeaderY: break; case rtfFooterY: break; case rtfLineModulus: break; case rtfLineDist: break; case rtfLineStarts: break; case rtfLineRestart: break; case rtfLineRestartPg: break; case rtfLineCont: break; case rtfTopVAlign: break; case rtfBottomVAlign: break; case rtfCenterVAlign: break; case rtfJustVAlign: break; case rtfColumns: break; case rtfColumnSpace: break; case rtfColumnLine: break; case rtfENoteHere: break; case rtfTitleSpecial: break; }}static void ObjAttr (){ switch (rtfMinor) { case rtfObjLinkSelf: linkself=1; break; }}static void TblAttr (){ switch (rtfMinor) { case rtfCellBordBottom: break; case rtfCellBordTop: break; case rtfCellBordLeft: break; case rtfCellBordRight: break; case rtfRowDef: lastcell=0; cellno=firstcell; celldidx=firstcell; cell[celldidx].merge=0; cell[celldidx].just=AdjLPad; lastleft=0; break; case rtfRowLeft: break; case rtfRowRight: break; case rtfRowCenter: break; case rtfRowGapH: break; case rtfRowHt: break; case rtfRowLeftEdge: lastleft=rtfParam; break; case rtfCellPos: cell[celldidx].width=(rtfParam-lastleft)/TWIPSperCHAR; if(cell[celldidx].width<=1)cell[celldidx].width=2; lastleft=rtfParam; if(celldidx++>=CELLMAX){ RTFMsg ("Overflowed the total number of cells %s\n",CELLMAX); celldidx--; } cell[celldidx].just=AdjLPad; cell[celldidx].merge=0; break; case rtfMergeRngFirst: break; case rtfMergePrevious: cell[celldidx].merge=1; break; }}int parnest=0;static void ParAttr (){ RTFStyle *newstyle; int i; IStyle_Chg=1; switch (rtfMinor) { case rtfParDef: /* set the input paragraph stype to null */ ParStyle=""; TStyle = stylePlain; inTable=0; break; case rtfStyleNum: /* When we call RTFExpandStyle, ParAttr will get recursively called. We only perform processing on the outermost style. */ if(parnest==0){ newstyle=RTFGetStyle(rtfParam); if (newstyle == (RTFStyle *) NULL) break; ParStyle=newstyle->rtfSName; parnest++; RTFExpandStyle(rtfParam); parnest--; } break; case rtfQuadLeft: cell[cellno].just=AdjLPad; break; case rtfQuadRight: cell[cellno].just=AdjRPad; break; case rtfQuadJust: cell[cellno].just=AdjLPad; break; case rtfQuadCenter: cell[cellno].just=AdjCpad; break; case rtfFirstIndent: break; case rtfLeftIndent: break; case rtfRightIndent: break; case rtfSpaceBefore: break; case rtfSpaceAfter: break; case rtfSpaceBetween: break; case rtfInTable: inTable=1; break; case rtfKeep: break; case rtfKeepNext: break; case rtfSideBySide: break; case rtfPBBefore: break; case rtfNoLineNum: break; case rtfTabPos: break; case rtfTabRight: break; case rtfTabCenter: break; case rtfTabDecimal: break; case rtfTabBar: break; case rtfBorderTop: break; case rtfBorderBottom: break; case rtfBorderLeft: break; case rtfBorderRight: break; case rtfBorderBar: break; case rtfBorderBox: break; case rtfBorderBetween: break; case rtfBorderSingle: break; case rtfBorderThick: break; case rtfBorderShadow: break; case rtfBorderDouble: break; case rtfBorderDot: break; case rtfBorderHair: break; case rtfBorderSpace: break; case rtfLeaderDot: break; case rtfLeaderHyphen: break; case rtfLeaderUnder: break; case rtfLeaderThick: break; }}/* Several of the attributes can be turned off with param value of zero (e.g., \b vs. \b0).*/static void CharAttr (){RTFFont *fp;int turnOn = (rtfParam != 0); IStyle_Chg=1; switch (rtfMinor) { case rtfPlain: TStyle = stylePlain; break; case rtfBold: if(turnOn){ TStyle |= styleBold; } else { TStyle &= ~styleBold; } break; case rtfItalic: if(turnOn){ TStyle |= styleItalic; } else { TStyle &= ~styleItalic; } break; case rtfStrikeThru: if(turnOn){ TStyle |= styleStrikeThru; } else { TStyle &= ~styleStrikeThru; } break; case rtfOutline: if(turnOn){ TStyle |= styleOutline; } else { TStyle &= ~styleOutline; } break; case rtfShadow: if(turnOn){ TStyle |= styleShadow; } else { TStyle &= ~styleShadow; } break; case rtfSmallCaps: if(turnOn){ TStyle |= styleSmallCaps; } else { TStyle &= ~styleSmallCaps; } break; case rtfAllCaps: if(turnOn){ TStyle |= styleAllCaps; } else { TStyle &= ~styleAllCaps; } break; case rtfInvisible: if(turnOn){ TStyle |= styleInvisible; } else { TStyle &= ~styleInvisible; } break; case rtfFontNum: if((fp = RTFGetFont(rtfParam)) == (RTFFont *) NULL){ TFont=""; } else { TFont=fp->rtfFName; } break; case rtfFontSize: TSize=rtfParam; break; case rtfExpand: break; case rtfUnderline: if(turnOn){ TStyle |= styleUnderline; } else { TStyle &= ~styleUnderline; } break; case rtfWordUnderline: if(turnOn){ TStyle |= styleWUnderline; } else { TStyle &= ~styleWUnderline; } break; case rtfDotUnderline: if(turnOn){ TStyle |= styleDUnderline; } else { TStyle &= ~styleDUnderline; } break; case rtfDbUnderline: if(turnOn){ TStyle |= styleDbUnderline; } else { TStyle &= ~styleDbUnderline; } break; case rtfNoUnderline: TStyle&=~(styleUnderline|styleWUnderline| styleDUnderline|styleDbUnderline); break; case rtfSuperScript: if(turnOn){ TStyle |= styleSuperScript; } else { TStyle &= ~styleSuperScript; } break; case rtfSubScript: if(turnOn){ TStyle |= styleSubScript; } else { TStyle &= ~styleSubScript; } break; case rtfRevised: break; case rtfForeColor: break; case rtfBackColor: break; }}static void PictAttr (){ char *ptr,LinkBuf[512]; switch (rtfMinor) { case rtfMacQD: PictExt="pict"; PictType=FTPICT; RTFSetClassCallback (rtfText, NabPicture); break; case rtfWinMetafile: PictExt="wmf"; PictType=FTWMF; RTFSetClassCallback (rtfText, NabPicture); break; case rtfWinBitmap: PictExt="bmp"; PictType=FTBMF; RTFSetClassCallback (rtfText, NabPicture); break; case rtfPicWid: break; case rtfPicHt: break; case rtfPicGoalWid: PicGoalWid=rtfParam; break; case rtfPicGoalHt: PicGoalHt=rtfParam; break; case rtfPicScaleX: break; case rtfPicScaleY: break; case rtfPicScaled: break; case rtfPicCropTop: break; case rtfPicCropBottom: break; case rtfPicCropLeft: break; case rtfPicCropRight: break; case rtfPixelBits: break; case rtfBitmapPlanes: break; case rtfBitmapWid: break; case rtfPicBinary: RTFSkipGroup (); /* Not sure this will work on binary input data */ PopIState(); break; }}static void NeXTGrAttr (){ switch (rtfMinor) { case rtfNeXTGWidth: break; case rtfNeXTGHeight: break; }}static void FieldAttr (){ switch (rtfMinor) { case rtfFieldDirty: break; case rtfFieldEdited: break; case rtfFieldLocked: break; case rtfFieldPrivate: break; }}static void TOCAttr (){ switch (rtfMinor) { case rtfTOCType: break; case rtfTOCLevel: ToCLev=rtfParam; break; }}static void PosAttr (){ switch (rtfMinor) { case rtfPosX: break; case rtfPosXCenter: break; case rtfPosXInside: break; case rtfPosXLeft: break; case rtfPosXOutSide: break; case rtfPosXRight: break; case rtfPosY: break; case rtfPosYInline: break; case rtfPosYTop: break; case rtfPosYCenter: break; case rtfPosYBottom: break; case rtfAbsWid: break;/* case rtfTextDistX: break;*/ case rtfTextDistY: break; case rtfRPosMargV: break; case rtfRPosPageV: break; case rtfRPosMargH: break; case rtfRPosPageH: break; case rtfRPosColH: break; }}InStateStack *SaveIState(){ InStateStack *NewState; NewState=(InStateStack *) malloc( (int) sizeof(InStateStack)); if(NewState==NULL){ RTFPanic ("Memory Allocation Failed"); } NewState->ParStyle=ParStyle; NewState->TStyle=TStyle; NewState->TFont=TFont; NewState->TSize=TSize; NewState->destination=destination; NewState->firstcell=firstcell; NewState->inTable=inTable; NewState->cellno=cellno; NewState->lastcell=lastcell; NewState->ToCLev=ToCLev; IStyle_Chg=1; return(NewState);}PushIState(){/* Push the current state. Note that defaults are not set, so resetting the default state (such as for headers/footers) must be done after the Push.*/ InStateStack *Current=ISS; ISS=SaveIState(); ISS->Next=Current;}voidRestoreIState(TheState)InStateStack *TheState;{ ParStyle=TheState->ParStyle; TStyle=TheState->TStyle; TFont=TheState->TFont; TSize=TheState->TSize; ToCLev=TheState->ToCLev; if(destination==rtfFootnote){ /* Footnotes get their own tables */ firstcell=TheState->firstcell; inTable=TheState->inTable; cellno=TheState->cellno; lastcell=TheState->lastcell; } destination=TheState->destination; RTFFree(TheState); IStyle_Chg=1;}PopIState(){ InStateStack *Next; if(ISS==NULL){ RTFPanic ("Input State Stack Popped too many times"); } HTMLEndDivert(); Next=ISS->Next; RestoreIState(ISS); ISS=Next;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -