home *** CD-ROM | disk | FTP | other *** search
/ Borland Programmer's Resource / Borland_Programmers_Resource_CD_1995.iso / utils / rtfprsr / rtf.h < prev    next >
C/C++ Source or Header  |  1995-05-18  |  13KB  |  499 lines

  1. /*
  2.     rtf.h - RTF document processing stuff.  Distribution 1.06a2.
  3. */
  4.  
  5.  
  6. /*
  7.     Twentieths of a point (twips) per inch (Many RTF measurements
  8.     are in twips per inch (tpi) units).  Assumes 72 points/inch.
  9. */
  10.  
  11. # define    rtfTpi        1440
  12.  
  13. /*
  14.     RTF buffer size (avoids BUFSIZ, which differs across systems)
  15. */
  16.  
  17. # define    rtfBufSiz    1024
  18.  
  19. /*
  20.     Tokens are associated with up to three classification numbers:
  21.  
  22.     Class number: Broadest (least detailed) breakdown.  For programs
  23.         that only care about gross token distinctions.
  24.     Major/minor numbers: Within their class, tokens have a major
  25.         number, and may also have a minor number to further
  26.         distinquish tokens with the same major number.
  27.  
  28.     *** Class, major and minor token numbers are all >= 0 ***
  29.  
  30.     Tokens that can't be classified are put in the "unknown" class.
  31.     For such, the major and minor numbers are meaningless, although
  32.     rtfTextBuf may be of interest then.
  33.  
  34.     Text tokens are a single character, and the major number indicates
  35.     the character value (note: can be non-ascii, i.e., greater than 127).
  36.     There is no minor number.
  37.  
  38.     Control symbols may have a parameter value, which will be found in
  39.     rtfParam.  If no parameter was given, rtfParam = rtfNoParam.
  40.  
  41.     RTFGetToken() return value is the class number, but it sets all the
  42.     global token vars.
  43.  
  44.     rtfEOF is a fake token used by the reader; the writer never sees
  45.     it (except in the token reader hook, if it installs one).
  46. */
  47.  
  48.  
  49. /*
  50.     Information pertaining to last token read by RTFToken.  The
  51.     text is exactly as it occurs in the input file, e.g., "\{"
  52.     will be found in rtfTextBuf as "\{", even though it means "{".
  53.     These variables are also set when styles are reprocessed.
  54. */
  55.  
  56. extern char    rtfTextBuf[rtfBufSiz];    /* text of token */
  57. extern int    rtfTextLen;        /* length of token in rtfTextBuf */
  58. extern int    rtfClass;        /* token class */
  59. extern int    rtfMajor;        /* token major number */
  60. extern int    rtfMinor;        /* token minor number */
  61. extern int    rtfParam;        /* control symbol parameter */
  62.  
  63.  
  64. # define    rtfNoParam    (-1000000)
  65.  
  66.  
  67. /*
  68.     Token classes (must be zero-based and sequential)
  69. */
  70.  
  71. # define    rtfUnknown    0
  72. # define    rtfGroup    1
  73. # define    rtfText        2
  74. # define    rtfControl    3
  75. # define    rtfEOF        4
  76. # define    rtfMaxClass    5    /* highest class + 1 */
  77.  
  78. /*
  79.     Group class major numbers
  80. */
  81.  
  82. # define    rtfBeginGroup    0
  83. # define    rtfEndGroup    1
  84.  
  85. /*
  86.     Control class major and minor numbers.
  87. */
  88.  
  89. # define    rtfVersion    0
  90.  
  91. # define    rtfDefFont    1
  92.  
  93. # define    rtfCharSet    2
  94. # define        rtfAnsiCharSet        0
  95. # define        rtfMacCharSet        1
  96. # define        rtfPcCharSet        2
  97. # define        rtfPcaCharSet        3
  98.  
  99.  
  100. /*    destination minor numbers should be zero-based, sequential */
  101.  
  102. # define    rtfDestination    3
  103. # define        rtfPict            0
  104. # define        rtfNeXTGraphic        1
  105. # define        rtfFootnote        2
  106. # define        rtfHeader        3
  107. # define        rtfHeaderLeft        4
  108. # define        rtfHeaderRight        5
  109. # define        rtfHeaderFirst        6
  110. # define        rtfFooter        7
  111. # define        rtfFooterLeft        8
  112. # define        rtfFooterRight        9
  113. # define        rtfFooterFirst        10
  114. # define        rtfFNSep        11
  115. # define        rtfFNContSep        12
  116. # define        rtfFNContNotice        13
  117. # define        rtfInfo            14
  118. # define        rtfStyleSheet        15
  119. # define        rtfFontTbl        16
  120. # define        rtfColorTbl        17
  121. # define        rtfField        18
  122. # define        rtfFieldInst        19
  123. # define        rtfFieldResult        20
  124. # define        rtfIndex        21
  125. # define        rtfIndexBold        22
  126. # define        rtfIndexItalic        23
  127. # define        rtfIndexText        24
  128. # define        rtfIndexRange        25
  129. # define        rtfTOC            26
  130. # define        rtfBookmarkStart    27
  131. # define        rtfBookmarkEnd        28
  132. # define        rtfITitle        29
  133. # define        rtfISubject        30
  134. # define        rtfIAuthor        31
  135. # define        rtfIOperator        32
  136. # define        rtfIKeywords        33
  137. # define        rtfIComment        34
  138. # define        rtfIVersion        35
  139. # define        rtfIDoccomm        36
  140. # define        rtfMaxDestination    37    /* highest dest + 1 */
  141.  
  142. # define    rtfFontFamily    4
  143. # define        rtfFFNil        0
  144. # define        rtfFFRoman        1
  145. # define        rtfFFSwiss        2
  146. # define        rtfFFModern        3
  147. # define        rtfFFScript        4
  148. # define        rtfFFDecor        5
  149. # define        rtfFFTech        6
  150.  
  151. # define    rtfColorName    5
  152. # define        rtfRed            0
  153. # define        rtfGreen        1
  154. # define        rtfBlue            2
  155.  
  156. # define    rtfSpecialChar    6
  157. # define        rtfCurHeadPage        0
  158. # define        rtfCurFNote        1
  159. # define        rtfCurHeadPict        2    /* valid? */
  160. # define        rtfCurHeadDate        3
  161. # define        rtfCurHeadTime        4
  162. # define        rtfFormula        5
  163. # define        rtfNoBrkSpace        6
  164. # define        rtfNoReqHyphen        7
  165. # define        rtfNoBrkHyphen        8
  166. # define        rtfPage            9
  167. # define        rtfLine            10
  168. # define        rtfPar            11
  169. # define        rtfSect            12
  170. # define        rtfTab            13
  171. # define        rtfCell            14
  172. # define        rtfRow            15
  173. # define        rtfCurAnnot        16
  174. # define        rtfAnnotation        17
  175. # define        rtfAnnotID        18
  176. # define        rtfCurAnnotRef        19
  177. # define        rtfFNoteSep        20
  178. # define        rtfFNoteCont        21
  179. # define        rtfColumn        22
  180. # define        rtfOptDest        23
  181. # define        rtfIIntVersion        24
  182. # define        rtfICreateTime        25
  183. # define        rtfIRevisionTime    26
  184. # define        rtfIPrintTime        27
  185. # define        rtfIBackupTime        28
  186. # define        rtfIEditTime        29
  187. # define        rtfIYear        30
  188. # define        rtfIMonth        31
  189. # define        rtfIDay            32
  190. # define        rtfIHour        33
  191. # define        rtfIMinute        34
  192. # define        rtfINPages        35
  193. # define        rtfINWords        36
  194. # define        rtfINChars        37
  195. # define        rtfIIntID        38
  196.  
  197. # define    rtfStyleAttr    7
  198. # define        rtfBasedOn        0
  199. # define        rtfNext            1
  200.  
  201. # define    rtfDocAttr    8
  202. # define        rtfPaperWidth        0
  203. # define        rtfPaperHeight        1
  204. # define        rtfLeftMargin        2
  205. # define        rtfRightMargin        3
  206. # define        rtfTopMargin        4
  207. # define        rtfBottomMargin        5
  208. # define        rtfFacingPage        6
  209. # define        rtfGutterWid        7
  210. # define        rtfDefTab        8
  211. # define        rtfWidowCtrl        9
  212. # define        rtfHyphHotZone        10
  213. # define        rtfFNoteEndSect        11
  214. # define        rtfFNoteEndDoc        12
  215. # define        rtfFNoteText        13
  216. # define        rtfFNoteBottom        14
  217. # define        rtfFNoteStart        15
  218. # define        rtfFNoteRestart        16
  219. # define        rtfPageStart        17
  220. # define        rtfLineStart        18
  221. # define        rtfLandscape        19
  222. # define        rtfFracWidth        20
  223. # define        rtfNextFile        21
  224. # define        rtfTemplate        22
  225. # define        rtfMakeBackup        23
  226. # define        rtfRTFDefault        24
  227. # define        rtfRevisions        25
  228. # define        rtfMirrorMargin        26
  229. # define        rtfRevDisplay        27
  230. # define        rtfRevBar        28
  231.  
  232. # define    rtfSectAttr    9
  233. # define        rtfSectDef        0
  234. # define        rtfNoBreak        1
  235. # define        rtfColBreak        2
  236. # define        rtfPageBreak        3
  237. # define        rtfEvenBreak        4
  238. # define        rtfOddBreak        5
  239. # define        rtfPageStarts        6
  240. # define        rtfPageCont        7
  241. # define        rtfPageRestart        8
  242. # define        rtfPageDecimal        9
  243. # define        rtfPageURoman        10
  244. # define        rtfPageLRoman        11
  245. # define        rtfPageULetter        12
  246. # define        rtfPageLLetter        13
  247. # define        rtfPageNumLeft        14
  248. # define        rtfPageNumTop        15
  249. # define        rtfHeaderY        16
  250. # define        rtfFooterY        17
  251. # define        rtfLineModulus        18
  252. # define        rtfLineDist        19
  253. # define        rtfLineStarts        20
  254. # define        rtfLineRestart        21
  255. # define        rtfLineRestartPg    22
  256. # define        rtfLineCont        23
  257. # define        rtfTopVAlign        24
  258. # define        rtfBottomVAlign        25
  259. # define        rtfCenterVAlign        26
  260. # define        rtfJustVAlign        27
  261. # define        rtfColumns        28
  262. # define        rtfColumnSpace        29
  263. # define        rtfColumnLine        30
  264. # define        rtfENoteHere        31
  265. # define        rtfTitleSpecial        32
  266.  
  267. # define    rtfTblAttr    10
  268. # define        rtfCellBordBottom    0
  269. # define        rtfCellBordTop        1
  270. # define        rtfCellBordLeft        2
  271. # define        rtfCellBordRight    3
  272. # define        rtfRowDef        4
  273. # define        rtfRowLeft        5
  274. # define        rtfRowRight        6
  275. # define        rtfRowCenter        7
  276. # define        rtfRowGapH        8
  277. # define        rtfRowHt        9
  278. # define        rtfRowLeftEdge        10
  279. # define        rtfCellPos        11
  280. # define        rtfMergeRngFirst    12
  281. # define        rtfMergePrevious    13
  282.  
  283. # define    rtfParAttr    11
  284. # define        rtfParDef        0
  285. # define        rtfStyleNum        1
  286. # define        rtfQuadLeft        2
  287. # define        rtfQuadRight        3
  288. # define        rtfQuadJust        4
  289. # define        rtfQuadCenter        5
  290. # define        rtfFirstIndent        6
  291. # define        rtfLeftIndent        7
  292. # define        rtfRightIndent        8
  293. # define        rtfSpaceBefore        9
  294. # define        rtfSpaceAfter        10
  295. # define        rtfSpaceBetween        11
  296. # define        rtfInTable        12
  297. # define        rtfKeep            13
  298. # define        rtfKeepNext        14
  299. # define        rtfSideBySide        15
  300. # define        rtfPBBefore        16
  301. # define        rtfNoLineNum        17
  302. # define        rtfTabPos        18
  303. # define        rtfTabRight        19
  304. # define        rtfTabCenter        20
  305. # define        rtfTabDecimal        21
  306. # define        rtfTabBar        22
  307. # define        rtfBorderTop        23
  308. # define        rtfBorderBottom        24
  309. # define        rtfBorderLeft        25
  310. # define        rtfBorderRight        26
  311. # define        rtfBorderBox        27
  312. # define        rtfBorderBar        28
  313. # define        rtfBorderBetween    29
  314. # define        rtfBorderSingle        30
  315. # define        rtfBorderThick        31
  316. # define        rtfBorderShadow        32
  317. # define        rtfBorderDouble        33
  318. # define        rtfBorderDot        34
  319. # define        rtfBorderHair        35
  320. # define        rtfBorderSpace        36
  321. # define        rtfLeaderDot        37
  322. # define        rtfLeaderHyphen        38
  323. # define        rtfLeaderUnder        39
  324. # define        rtfLeaderThick        40
  325.  
  326. # define    rtfCharAttr    12
  327. # define        rtfPlain        0
  328. # define        rtfBold            1
  329. # define        rtfItalic        2
  330. # define        rtfStrikeThru        3
  331. # define        rtfOutline        4
  332. # define        rtfShadow        5
  333. # define        rtfSmallCaps        6
  334. # define        rtfAllCaps        7
  335. # define        rtfInvisible        8
  336. # define        rtfFontNum        9
  337. # define        rtfFontSize        10
  338. # define        rtfExpand        11
  339. # define        rtfUnderline        12
  340. # define        rtfWUnderline        13
  341. # define        rtfDUnderline        14
  342. # define        rtfDbUnderline        15
  343. # define        rtfNoUnderline        16
  344. # define        rtfSuperScript        17
  345. # define        rtfSubScript        18
  346. # define        rtfRevised        19
  347. # define        rtfForeColor        20
  348. # define        rtfBackColor        21
  349. # define        rtfGray            22
  350.  
  351. # define    rtfPictAttr    13
  352. # define        rtfMacQD        0
  353. # define        rtfWinMetafile        1
  354. # define        rtfWinBitmap        2
  355. # define        rtfPicWid        3
  356. # define        rtfPicHt        4
  357. # define        rtfPicGoalWid        5
  358. # define        rtfPicGoalHt        6
  359. # define        rtfPicScaleX        7
  360. # define        rtfPicScaleY        8
  361. # define        rtfPicScaled        9
  362. # define        rtfPicCropTop        10
  363. # define        rtfPicCropBottom    11
  364. # define        rtfPicCropLeft        12
  365. # define        rtfPicCropRight        13
  366. # define        rtfPixelBits        14
  367. # define        rtfBitmapPlanes        15
  368. # define        rtfBitmapWid        16
  369. # define        rtfPicBinary        17
  370.  
  371. # define    rtfNeXTGrAttr    14
  372. # define        rtfNeXTGWidth        0
  373. # define        rtfNeXTGHeight        1
  374.  
  375. # define    rtfFieldAttr    15
  376. # define        rtfFieldDirty        0
  377. # define        rtfFieldEdited        1
  378. # define        rtfFieldLocked        2
  379. # define        rtfFieldPrivate        3
  380.  
  381. # define    rtfTOCAttr    16
  382. # define        rtfTOCType        0
  383. # define        rtfTOCLevel        1
  384.  
  385. # define    rtfPosAttr    17
  386. # define        rtfPosX            0
  387. # define        rtfPosXCenter        1
  388. # define        rtfPosXInside        2
  389. # define        rtfPosXLeft        3
  390. # define        rtfPosXOutSide        4
  391. # define        rtfPosXRight        5
  392. # define        rtfPosY            6
  393. # define        rtfPosYInline        7
  394. # define        rtfPosYTop        8
  395. # define        rtfPosYCenter        9
  396. # define        rtfPosYBottom        10
  397. # define        rtfAbsWid        11
  398. # define        rtfTextDist        12
  399. # define        rtfRPosMargV        13
  400. # define        rtfRPosPageV        14
  401. # define        rtfRPosMargH        15
  402. # define        rtfRPosPageH        16
  403. # define        rtfRPosColH        17
  404.  
  405.  
  406.  
  407. /*
  408.     RTF font, color and style structures.  Used for font table,
  409.     color table, and stylesheet processing.
  410. */
  411.  
  412. typedef struct RTFFont        RTFFont;
  413. typedef struct RTFColor        RTFColor;
  414. typedef struct RTFStyle        RTFStyle;
  415. typedef struct RTFStyleElt    RTFStyleElt;
  416.  
  417.  
  418. struct RTFFont
  419. {
  420.     char    *rtfFName;        /* font name */
  421.     int    rtfFNum;        /* font number */
  422.     int    rtfFFamily;        /* font family */
  423.     RTFFont    *rtfNextFont;        /* next font in list */
  424. };
  425.  
  426.  
  427. /*
  428.     Color values are -1 if the default color for the the color
  429.     number should be used.  The default color is writer-dependent.
  430. */
  431.  
  432. struct RTFColor
  433. {
  434.     int        rtfCNum;    /* color number */
  435.     int        rtfCRed;    /* red value */
  436.     int        rtfCGreen;    /* green value */
  437.     int        rtfCBlue;    /* blue value */
  438.     RTFColor    *rtfNextColor;    /* next color in list */
  439. };
  440.  
  441.  
  442. struct RTFStyle
  443. {
  444.     char        *rtfSName;    /* style name */
  445.     int        rtfSNum;    /* style number */
  446.     int        rtfSBasedOn;    /* style this one's based on */
  447.     int        rtfSNextPar;    /* style next paragraph style */
  448.     RTFStyleElt    *rtfSSEList;    /* list of style words */
  449.     int        rtfExpanding;    /* non-zero = being expanded */
  450.     RTFStyle    *rtfNextStyle;    /* next style in style list */
  451. };
  452.  
  453. # define    rtfBasedOnNone    222    /* "no based-on style" */
  454.  
  455.  
  456. struct RTFStyleElt
  457. {
  458.     int        rtfSEClass;    /* token class */
  459.     int        rtfSEMajor;    /* token major number */
  460.     int        rtfSEMinor;    /* token minor number */
  461.     int        rtfSEParam;    /* control symbol parameter */
  462.     char        *rtfSEText;    /* text of symbol */
  463.     RTFStyleElt    *rtfNextSE;    /* next element in style */
  464. };
  465.  
  466.  
  467. typedef    void (*RTFFuncPtr) ();        /* generic function pointer */
  468.  
  469.  
  470. /*
  471.     Public RTF reader routines
  472. */
  473.  
  474. extern void        RTFInit ();
  475. extern void        RTFSetStream ();
  476. extern void        RTFSetClassCallback ();
  477. extern RTFFuncPtr    RTFGetClassCallback ();
  478. extern void        RTFSetDestinationCallback ();
  479. extern RTFFuncPtr    RTFGetDestinationCallback ();
  480. extern void        RTFRead ();
  481. extern int        RTFGetToken ();    /* writer should rarely need this */
  482. extern void        RTFUngetToken ();
  483. extern int        RTFPeekToken ();
  484. extern void        RTFSetToken ();
  485. extern void        RTFSetReadHook ();
  486. extern RTFFuncPtr    RTFGetReadHook ();
  487. extern void        RTFRouteToken ();
  488. extern void        RTFSkipGroup ();
  489. extern void        RTFExpandStyle ();
  490. extern int        RTFCheckCM ();
  491. extern int        RTFCheckCMM ();
  492. extern int        RTFCheckMM ();
  493. extern RTFFont        *RTFGetFont ();
  494. extern RTFColor        *RTFGetColor ();
  495. extern RTFStyle        *RTFGetStyle ();
  496. extern char        *RTFAlloc ();
  497. extern char        *RTFStrSave ();
  498. extern void        RTFFree ();
  499.