/* rtf2troff.h - rtf2troff defines, structures, externs */ /* troff versions understood */ # define TROFF 0 /* generic troff */ # define XROFF 1 /* Image Network xroff */ # define PSTROFF 2 /* ditroff + public domain tpscript backend */ /* macro packages understood */ # define noMacros 0 # define meMacros 1 # define mmMacros 2 # define msMacros 3 /* macro/register names */ # define mHeader "He" # define mHeaderAll "Ha" # define mHeaderFirst "Hf" # define mHeaderLeft "Hl" # define mHeaderRight "Hr" # define mFooter "Fo" # define mFooterAll "Fa" # define mFooterFirst "Ff" # define mFooterLeft "Fl" # define mFooterRight "Fr" /* normally Hp > Tm > Bm > Fp */ # define rTitlePageSpecial "Tp" # define rTopMargin "Tm" # define rHeaderPos "Hp" # define rBottomMargin "Bm" /* from *top* of page! */ # define rFooterPos "Fp" /* from *top* of page! */ # define rHeaderAll "Ha" # define rHeaderFirst "Hf" # define rHeaderLeft "Hl" # define rHeaderRight "Hr" # define rFooterAll "Fa" # define rFooterFirst "Ff" # define rFooterLeft "Fl" # define rFooterRight "Fr" /* rtfTabLeft is used to indicate the default tab type (left tab). RTF assumes that if some other type is not specified, a tab is a left tab and never indicates that explicitly. It's given a number here so the writer can refer to it by a constant known to be different from the other tab types. (All "real" token numbers are non-negative.) rtfLeaderMotion is used to indicate default tab char (motion only), which likewise is undefined in RTF. rtfNoDestination is used to indicate that a state has had no destination specified yet. rtfNoBorderType indicates that a paragraph has no borders. */ # define rtfTabLeft (-1) # define rtfLeaderMotion (-1) # define rtfNoDestination (-1) # define rtfNoBorderType (-1) # define styleBold 0x0001 # define styleItalic 0x0002 # define styleStrikeThru 0x0004 # define styleOutline 0x0008 # define styleShadow 0x0010 # define styleSmallCaps 0x0020 # define styleAllCaps 0x0040 # define styleInvisible 0x0080 # define styleUnderline 0x0100 # define styleWUnderline 0x0200 # define StyleFontBits(s) (s & (styleBold | styleItalic)) /* Values for operations that map border positions onto bits in flag word. */ # define borderTop 0x0001 # define borderBottom 0x0002 # define borderLeft 0x0004 # define borderRight 0x0008 /* Values for operations that map border positions to array indices. Must be zero-based and sequential. */ # define topIndex 0 # define leftIndex 1 # define bottomIndex 2 # define rightIndex 3 # define lineBreakLen 60 /* break lines after 60 columns */ # define maxIStack 10 /* internal state stack depth */ # define maxWStack 3 /* written state stack depth */ # define maxTab 20 # define maxCell 20 typedef struct State State; typedef struct DocState DocState; typedef struct SectState SectState; typedef struct ParState ParState; typedef struct CharState CharState; typedef struct TblState TblState; /* this is separate */ /* document properties */ struct DocState { int landscape; /* non-zero if landscape */ double pageWidth; /* paper width */ double pageHeight; /* paper height */ double leftMargin; /* left margin */ double rightMargin; /* right margin */ double topMargin; /* top margin */ double bottomMargin; /* bottom margin */ double tabWidth; /* default tab width */ }; /* section properties */ struct SectState { int breakType; /* section break type */ int pageStart; /* section starting page number */ int pageRestart; /* restart page numbering each sect. */ double headerPos; /* from top of page */ double footerPos; /* from bottom of page */ int titleSpecial; /* first page special */ }; /* paragraph properties */ struct ParState { double firstIndent; /* first indent */ double leftIndent; /* left indent */ double rightIndent; /* right indent */ double spaceBefore; /* space before lines */ double spaceAfter; /* space after lines */ double spaceBetween; /* space between lines */ int tabFlag; /* any tabs set yet? (0 = no) */ int nTabs; /* number of tabs (0 = defaults) */ double tab[maxTab]; /* tab positions */ int tabType[maxTab]; /* tab types */ int tabChar; /* tab (leader) character */ int justification; /* justification */ int borderType; /* type of border */ int borderFlags; /* where to draw borders */ }; /* character properties */ struct CharState { int fontSize; /* font (point) size */ u_long charStyle; /* character style */ double superScript; /* superscript */ double subScript; /* subscript */ }; struct State { int destination; /* state destination */ DocState docState; SectState sectState; ParState parState; CharState charState; }; /* table properties */ struct TblState { int tableHeader; /* non-zero if table header written */ int nCells; /* number of cells */ int curCell; /* current cell (0-based) */ double cellPos[maxCell]; /* cell positions (right edge) */ double tableLeft; /* table left edge position */ double cellGap; /* horiz. gap between cells */ int border[maxCell][4]; /* cell borders */ }; extern int tvers; /* troff version */ extern int mvers; /* macro package version */ extern TblState *its; extern int inTable; extern FILE *f; extern State *is; /* current internal state */ extern DocState *ids; /* internal document state */ extern SectState *iss; /* internal section state */ extern ParState *ips; /* internal paragraph state */ extern CharState *ics; /* internal character state */ extern State *ws; /* written state */ extern DocState *wds; /* written document state */ extern SectState *wss; /* written section state */ extern ParState *wps; /* written paragraph state */ extern CharState *wcs; /* written character state */ extern int docStateChanged; /* document properties have changed */ extern int sectStateChanged; /* section properties have changed */ extern int parStateChanged; /* paragraph properties have changed */ extern int charStateChanged; /* character properties have changed */ # define stateChanged \ (docStateChanged||sectStateChanged||parStateChanged||charStateChanged) extern int indirectionLevel; extern void InitState (); extern void CheckFinalState (); extern void PushIState (); extern void PopIState (); extern void PushWState (); extern void PopWState (); extern void BeginDiversion (); extern void EndDiversion (); extern void RestoreSectDefaults (); extern void RestoreParDefaults (); extern void RestoreCharDefaults (); extern void InitTabSet (); extern int MapBorderLocation (); extern void SelectFormatterMaps (); extern void SelectMacPackMaps (); extern void SelectCharSetMaps (); extern char *CharMapping (); extern void TblAttr (); extern void BeginTbl (); extern void EndTbl (); extern void BeginCell (); extern void EndCell (); extern void FlushState (); extern void FlushInitialState (); extern void FlushSectState (); extern void Flush (); extern void SaveTblFPV (); extern void FlushTblFPV (); extern double EnWidth (); extern void ResetPar (); extern void ResetParLine (); extern void Sect (); extern void Par (); extern void PutString (); extern void Comment ();