+++ /dev/null
-/*\r
- * WINE RTF file reader\r
- *\r
- * Portions Copyright 2004 Mike McCormack for CodeWeavers\r
- *\r
- * This library is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU Lesser General Public\r
- * License as published by the Free Software Foundation; either\r
- * version 2.1 of the License, or (at your option) any later version.\r
- *\r
- * This library is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
- * Lesser General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Lesser General Public\r
- * License along with this library; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
- */\r
-\r
-/*\r
- * - Need to document error code meanings.\r
- * - Need to do something with \* on destinations.\r
- * - Make the parameter a long?\r
- *\r
- * reader.c - RTF file reader. Release 1.10.\r
- *\r
- * ASCII 10 (\n) and 13 (\r) are ignored and silently discarded.\r
- * Nulls are also discarded.\r
- * (although the read hook will still get a look at them.)\r
- *\r
- * "\:" is not a ":", it's a control symbol. But some versions of\r
- * Word seem to write "\:" for ":". This reader treats "\:" as a\r
- * plain text ":"\r
- *\r
- * 19 Mar 93\r
- * - Add hack to skip "{\*\keycode ... }" group in stylesheet.\r
- * This is probably the wrong thing to do, but it's simple.\r
- * 13 Jul 93\r
- * - Add THINK C awareness to malloc() declaration. Necessary so\r
- * compiler knows the malloc argument is 4 bytes. Ugh.\r
- * 07 Sep 93\r
- * - Text characters are mapped onto standard codes, which are placed\r
- * in rtfMinor.\r
- * - Eliminated use of index() function.\r
- * 05 Mar 94\r
- * - Added zillions of new symbols (those defined in RTF spec 1.2).\r
- * 14 Mar 94\r
- * - Public functions RTFMsg() and RTFPanic() now take variable arguments.\r
- * This means RTFPanic() now is used in place of what was formerly the\r
- * internal function Error().\r
- * - 8-bit characters are now legal, so they're not converted to \'xx\r
- * hex char representation now.\r
- * 01 Apr 94\r
- * - Added public variables rtfLineNum and rtfLinePos.\r
- * - #include string.h or strings.h, avoiding strncmp() problem where\r
- * last argument is treated as zero when prototype isn't available.\r
- * 04 Apr 94\r
- * - Treat style numbers 222 and 0 properly as "no style" and "normal".\r
- *\r
- * Author: Paul DuBois dubois@primate.wisc.edu\r
- *\r
- * This software may be redistributed without restriction and used for\r
- * any purpose whatsoever.\r
- */\r
-\r
-# include <stdio.h>\r
-# include <ctype.h>\r
-# include <string.h>\r
-# include <stdarg.h>\r
-\r
-#include "rtf.h"\r
-/*\r
- * include hard coded charsets\r
- */\r
-\r
-#include "ansi_gen.h"\r
-#include "ansi_sym.h"\r
-#include "text_map.h"\r
-\r
-#include <stdlib.h>\r
-\r
-#include "windef.h"\r
-#include "winbase.h"\r
-#include "wine/debug.h"\r
-\r
-WINE_DEFAULT_DEBUG_CHANNEL(richedit);\r
-\r
-extern HANDLE RICHED32_hHeap;\r
-\r
-static int _RTFGetChar(RTF_Info *);\r
-static void _RTFGetToken (RTF_Info *);\r
-static void _RTFGetToken2 (RTF_Info *);\r
-static int GetChar (RTF_Info *);\r
-static void ReadFontTbl (RTF_Info *);\r
-static void ReadColorTbl (RTF_Info *);\r
-static void ReadStyleSheet (RTF_Info *);\r
-static void ReadInfoGroup (RTF_Info *);\r
-static void ReadPictGroup (RTF_Info *);\r
-static void ReadObjGroup (RTF_Info *);\r
-static void LookupInit (void);\r
-static void Lookup (RTF_Info *, char *);\r
-static int Hash (char*);\r
-\r
-static void CharSetInit (RTF_Info *);\r
-static void ReadCharSetMaps (RTF_Info *);\r
-\r
-\r
-/*\r
- * This array is used to map standard character names onto their numeric codes.\r
- * The position of the name within the array is the code.\r
- * stdcharnames.h is generated in the ../h directory.\r
- */\r
-\r
-#include "stdcharnames.h"\r
-\r
-int _RTFGetChar(RTF_Info *info)\r
-{\r
- int ch;\r
-\r
- TRACE("\n");\r
-\r
- if( info->dwInputSize <= info->dwInputUsed )\r
- {\r
- long count = 0;\r
- info->editstream.pfnCallback(info->editstream.dwCookie, \r
- info->InputBuffer, sizeof(info->InputBuffer), &count);\r
- if(count == 0)\r
- return EOF;\r
- info->dwInputSize = count;\r
- info->dwInputUsed = 0;\r
- }\r
- ch = info->InputBuffer[info->dwInputUsed++];\r
- if( !ch ) return EOF;\r
- return ch;\r
-}\r
-\r
-void RTFSetEditStream(RTF_Info *info, EDITSTREAM *es)\r
-{\r
- TRACE("\n");\r
-\r
- info->editstream.dwCookie = es->dwCookie;\r
- info->editstream.dwError = es->dwError;\r
- info->editstream.pfnCallback = es->pfnCallback;\r
-}\r
-\r
-/*\r
- * Initialize the reader. This may be called multiple times,\r
- * to read multiple files. The only thing not reset is the input\r
- * stream; that must be done with RTFSetStream().\r
- */\r
-\r
-void RTFInit(RTF_Info *info)\r
-{\r
-int i;\r
-RTFColor *cp;\r
-RTFFont *fp;\r
-RTFStyle *sp;\r
-RTFStyleElt *eltList, *ep;\r
-\r
- TRACE("\n");\r
-\r
- if (info->rtfTextBuf == (char *) NULL) /* initialize the text buffers */\r
- {\r
- info->rtfTextBuf = RTFAlloc (rtfBufSiz);\r
- info->pushedTextBuf = RTFAlloc (rtfBufSiz);\r
- if (info->rtfTextBuf == (char *) NULL\r
- || info->pushedTextBuf == (char *) NULL)\r
- RTFPanic (info,"Cannot allocate text buffers.");\r
- info->rtfTextBuf[0] = info->pushedTextBuf[0] = '\0';\r
- }\r
-\r
- RTFFree (info->inputName);\r
- RTFFree (info->outputName);\r
- info->inputName = info->outputName = (char *) NULL;\r
-\r
- /* initialize lookup table */\r
- LookupInit ();\r
-\r
- for (i = 0; i < rtfMaxClass; i++)\r
- RTFSetClassCallback (info, i, (RTFFuncPtr) NULL);\r
- for (i = 0; i < rtfMaxDestination; i++)\r
- RTFSetDestinationCallback (info, i, (RTFFuncPtr) NULL);\r
-\r
- /* install built-in destination readers */\r
- RTFSetDestinationCallback (info, rtfFontTbl, ReadFontTbl);\r
- RTFSetDestinationCallback (info, rtfColorTbl, ReadColorTbl);\r
- RTFSetDestinationCallback (info, rtfStyleSheet, ReadStyleSheet);\r
- RTFSetDestinationCallback (info, rtfInfo, ReadInfoGroup);\r
- RTFSetDestinationCallback (info, rtfPict, ReadPictGroup);\r
- RTFSetDestinationCallback (info, rtfObject, ReadObjGroup);\r
-\r
-\r
- RTFSetReadHook (info, (RTFFuncPtr) NULL);\r
-\r
- /* dump old lists if necessary */\r
-\r
- while (info->fontList != (RTFFont *) NULL)\r
- {\r
- fp = info->fontList->rtfNextFont;\r
- RTFFree (info->fontList->rtfFName);\r
- RTFFree ((char *) info->fontList);\r
- info->fontList = fp;\r
- }\r
- while (info->colorList != (RTFColor *) NULL)\r
- {\r
- cp = info->colorList->rtfNextColor;\r
- RTFFree ((char *) info->colorList);\r
- info->colorList = cp;\r
- }\r
- while (info->styleList != (RTFStyle *) NULL)\r
- {\r
- sp = info->styleList->rtfNextStyle;\r
- eltList = info->styleList->rtfSSEList;\r
- while (eltList != (RTFStyleElt *) NULL)\r
- {\r
- ep = eltList->rtfNextSE;\r
- RTFFree (eltList->rtfSEText);\r
- RTFFree ((char *) eltList);\r
- eltList = ep;\r
- }\r
- RTFFree (info->styleList->rtfSName);\r
- RTFFree ((char *) info->styleList);\r
- info->styleList = sp;\r
- }\r
-\r
- info->rtfClass = -1;\r
- info->pushedClass = -1;\r
- info->pushedChar = EOF;\r
-\r
- info->rtfLineNum = 0;\r
- info->rtfLinePos = 0;\r
- info->prevChar = EOF;\r
- info->bumpLine = 0;\r
-\r
- CharSetInit (info);\r
- info->csTop = 0;\r
-}\r
-\r
-/*\r
- * Set or get the input or output file name. These are never guaranteed\r
- * to be accurate, only insofar as the calling program makes them so.\r
- */\r
-\r
-void RTFSetInputName(RTF_Info *info, char *name)\r
-{\r
- TRACE("\n");\r
-\r
- if ((info->inputName = RTFStrSave (name)) == (char *) NULL)\r
- RTFPanic (info,"RTFSetInputName: out of memory");\r
-}\r
-\r
-\r
-char *RTFGetInputName(RTF_Info *info)\r
-{\r
- return (info->inputName);\r
-}\r
-\r
-\r
-void RTFSetOutputName(RTF_Info *info, char *name)\r
-{\r
- TRACE("\n");\r
-\r
- if ((info->outputName = RTFStrSave (name)) == (char *) NULL)\r
- RTFPanic (info, "RTFSetOutputName: out of memory");\r
-}\r
-\r
-\r
-char *RTFGetOutputName(RTF_Info *info)\r
-{\r
- return (info->outputName);\r
-}\r
-\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-/*\r
- * Callback table manipulation routines\r
- */\r
-\r
-\r
-/*\r
- * Install or return a writer callback for a token class\r
- */\r
-\r
-void RTFSetClassCallback(RTF_Info *info, int class, RTFFuncPtr callback)\r
-{\r
- if (class >= 0 && class < rtfMaxClass)\r
- info->ccb[class] = callback;\r
-}\r
-\r
-\r
-RTFFuncPtr RTFGetClassCallback(RTF_Info *info, int class)\r
-{\r
- if (class >= 0 && class < rtfMaxClass)\r
- return (info->ccb[class]);\r
- return ((RTFFuncPtr) NULL);\r
-}\r
-\r
-\r
-/*\r
- * Install or return a writer callback for a destination type\r
- */\r
-\r
-void RTFSetDestinationCallback(RTF_Info *info, int dest, RTFFuncPtr callback)\r
-{\r
- if (dest >= 0 && dest < rtfMaxDestination)\r
- info->dcb[dest] = callback;\r
-}\r
-\r
-\r
-RTFFuncPtr RTFGetDestinationCallback(RTF_Info *info, int dest)\r
-{\r
- if (dest >= 0 && dest < rtfMaxDestination)\r
- return (info->dcb[dest]);\r
- return ((RTFFuncPtr) NULL);\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-/*\r
- * Token reading routines\r
- */\r
-\r
-\r
-/*\r
- * Read the input stream, invoking the writer's callbacks\r
- * where appropriate.\r
- */\r
-\r
-void RTFRead(RTF_Info *info)\r
-{\r
- while (RTFGetToken (info) != rtfEOF)\r
- RTFRouteToken (info);\r
-}\r
-\r
-\r
-/*\r
- * Route a token. If it's a destination for which a reader is\r
- * installed, process the destination internally, otherwise\r
- * pass the token to the writer's class callback.\r
- */\r
-\r
-void RTFRouteToken(RTF_Info *info)\r
-{\r
-RTFFuncPtr p;\r
-\r
- TRACE("\n");\r
-\r
- if (info->rtfClass < 0 || info->rtfClass >= rtfMaxClass) /* watchdog */\r
- {\r
- RTFPanic (info,"Unknown class %d: %s (reader malfunction)",\r
- info->rtfClass, info->rtfTextBuf);\r
- }\r
- if (RTFCheckCM (info, rtfControl, rtfDestination))\r
- {\r
- /* invoke destination-specific callback if there is one */\r
- if ((p = RTFGetDestinationCallback (info, info->rtfMinor))\r
- != (RTFFuncPtr) NULL)\r
- {\r
- (*p) (info);\r
- return;\r
- }\r
- }\r
- /* invoke class callback if there is one */\r
- if ((p = RTFGetClassCallback (info, info->rtfClass)) != (RTFFuncPtr) NULL)\r
- (*p) (info);\r
-}\r
-\r
-\r
-/*\r
- * Skip to the end of the current group. When this returns,\r
- * writers that maintain a state stack may want to call their\r
- * state unstacker; global vars will still be set to the group's\r
- * closing brace.\r
- */\r
-\r
-void RTFSkipGroup(RTF_Info *info)\r
-{\r
-int level = 1;\r
- TRACE("\n");\r
-\r
- while (RTFGetToken (info) != rtfEOF)\r
- {\r
- if (info->rtfClass == rtfGroup)\r
- {\r
- if (info->rtfMajor == rtfBeginGroup)\r
- ++level;\r
- else if (info->rtfMajor == rtfEndGroup)\r
- {\r
- if (--level < 1)\r
- break; /* end of initial group */\r
- }\r
- }\r
- }\r
-}\r
-\r
-\r
-/*\r
- * Read one token. Call the read hook if there is one. The\r
- * token class is the return value. Returns rtfEOF when there\r
- * are no more tokens.\r
- */\r
-\r
-int RTFGetToken(RTF_Info *info)\r
-{\r
-RTFFuncPtr p;\r
- TRACE("\n");\r
-\r
- for (;;)\r
- {\r
- _RTFGetToken (info);\r
- if ((p = RTFGetReadHook (info)) != (RTFFuncPtr) NULL)\r
- (*p) (info); /* give read hook a look at token */\r
-\r
- /* Silently discard newlines, carriage returns, nulls. */\r
- if (!(info->rtfClass == rtfText && info->rtfFormat != SF_TEXT\r
- && (info->rtfMajor == '\r' || info->rtfMajor == '\n' || info->rtfMajor == '\0')))\r
- break;\r
- }\r
- return (info->rtfClass);\r
-}\r
-\r
-\r
-/*\r
- * Install or return a token reader hook.\r
- */\r
-\r
-void RTFSetReadHook(RTF_Info *info, RTFFuncPtr f)\r
-{\r
- info->readHook = f;\r
-}\r
-\r
-\r
-RTFFuncPtr RTFGetReadHook(RTF_Info *info)\r
-{\r
- return (info->readHook);\r
-}\r
-\r
-\r
-void RTFUngetToken(RTF_Info *info)\r
-{\r
- TRACE("\n");\r
-\r
- if (info->pushedClass >= 0) /* there's already an ungotten token */\r
- RTFPanic (info,"cannot unget two tokens");\r
- if (info->rtfClass < 0)\r
- RTFPanic (info,"no token to unget");\r
- info->pushedClass = info->rtfClass;\r
- info->pushedMajor = info->rtfMajor;\r
- info->pushedMinor = info->rtfMinor;\r
- info->pushedParam = info->rtfParam;\r
- (void) strcpy (info->pushedTextBuf, info->rtfTextBuf);\r
-}\r
-\r
-\r
-int RTFPeekToken(RTF_Info *info)\r
-{\r
- _RTFGetToken (info);\r
- RTFUngetToken (info);\r
- return (info->rtfClass);\r
-}\r
-\r
-\r
-static void _RTFGetToken(RTF_Info *info)\r
-{\r
-RTFFont *fp;\r
-\r
- TRACE("\n");\r
-\r
- if (info->rtfFormat == SF_TEXT) {\r
- info->rtfMajor = GetChar (info);\r
- info->rtfMinor = rtfSC_nothing;\r
- info->rtfParam = rtfNoParam;\r
- info->rtfTextBuf[info->rtfTextLen = 0] = '\0';\r
- if (info->rtfMajor == EOF)\r
- info->rtfClass = rtfEOF;\r
- else\r
- info->rtfClass = rtfText;\r
- return;\r
- }\r
-\r
- /* first check for pushed token from RTFUngetToken() */\r
-\r
- if (info->pushedClass >= 0)\r
- {\r
- info->rtfClass = info->pushedClass;\r
- info->rtfMajor = info->pushedMajor;\r
- info->rtfMinor = info->pushedMinor;\r
- info->rtfParam = info->pushedParam;\r
- (void) strcpy (info->rtfTextBuf, info->pushedTextBuf);\r
- info->rtfTextLen = strlen (info->rtfTextBuf);\r
- info->pushedClass = -1;\r
- return;\r
- }\r
-\r
- /*\r
- * Beyond this point, no token is ever seen twice, which is\r
- * important, e.g., for making sure no "}" pops the font stack twice.\r
- */\r
-\r
- _RTFGetToken2 (info);\r
- if (info->rtfClass == rtfText) /* map RTF char to standard code */\r
- info->rtfMinor = RTFMapChar (info, info->rtfMajor);\r
-\r
- /*\r
- * If auto-charset stuff is activated, see if anything needs doing,\r
- * like reading the charset maps or switching between them.\r
- */\r
-\r
- if (info->autoCharSetFlags == 0)\r
- return;\r
-\r
- if ((info->autoCharSetFlags & rtfReadCharSet)\r
- && RTFCheckCM (info, rtfControl, rtfCharSet))\r
- {\r
- ReadCharSetMaps (info);\r
- }\r
- else if ((info->autoCharSetFlags & rtfSwitchCharSet)\r
- && RTFCheckCMM (info, rtfControl, rtfCharAttr, rtfFontNum))\r
- {\r
- if ((fp = RTFGetFont (info, info->rtfParam)) != (RTFFont *) NULL)\r
- {\r
- if (strncmp (fp->rtfFName, "Symbol", 6) == 0)\r
- info->curCharSet = rtfCSSymbol;\r
- else\r
- info->curCharSet = rtfCSGeneral;\r
- RTFSetCharSet (info, info->curCharSet);\r
- }\r
- }\r
- else if ((info->autoCharSetFlags & rtfSwitchCharSet) && info->rtfClass == rtfGroup)\r
- {\r
- switch (info->rtfMajor)\r
- {\r
- case rtfBeginGroup:\r
- if (info->csTop >= maxCSStack)\r
- RTFPanic (info, "_RTFGetToken: stack overflow");\r
- info->csStack[info->csTop++] = info->curCharSet;\r
- break;\r
- case rtfEndGroup:\r
- /*\r
- * If stack top is 1 at this point, we are ending the\r
- * group started by the initial {, which ends the\r
- * RTF stream\r
- */\r
- if (info->csTop <= 0)\r
- RTFPanic (info,"_RTFGetToken: stack underflow");\r
- else if (info->csTop == 1)\r
- info->rtfClass = rtfEOF;\r
- else\r
- {\r
- info->curCharSet = info->csStack[--info->csTop];\r
- RTFSetCharSet (info, info->curCharSet);\r
- }\r
- break;\r
- }\r
- }\r
-}\r
-\r
-\r
-/* this shouldn't be called anywhere but from _RTFGetToken() */\r
-\r
-static void _RTFGetToken2(RTF_Info *info)\r
-{\r
-int sign;\r
-int c;\r
-\r
- TRACE("\n");\r
-\r
- /* initialize token vars */\r
-\r
- info->rtfClass = rtfUnknown;\r
- info->rtfParam = rtfNoParam;\r
- info->rtfTextBuf[info->rtfTextLen = 0] = '\0';\r
-\r
- /* get first character, which may be a pushback from previous token */\r
-\r
- if (info->pushedChar != EOF)\r
- {\r
- c = info->pushedChar;\r
- info->rtfTextBuf[info->rtfTextLen++] = c;\r
- info->rtfTextBuf[info->rtfTextLen] = '\0';\r
- info->pushedChar = EOF;\r
- }\r
- else if ((c = GetChar (info)) == EOF)\r
- {\r
- info->rtfClass = rtfEOF;\r
- return;\r
- }\r
-\r
- if (c == '{')\r
- {\r
- info->rtfClass = rtfGroup;\r
- info->rtfMajor = rtfBeginGroup;\r
- return;\r
- }\r
- if (c == '}')\r
- {\r
- info->rtfClass = rtfGroup;\r
- info->rtfMajor = rtfEndGroup;\r
- return;\r
- }\r
- if (c != '\\')\r
- {\r
- /*\r
- * Two possibilities here:\r
- * 1) ASCII 9, effectively like \tab control symbol\r
- * 2) literal text char\r
- */\r
- if (c == '\t') /* ASCII 9 */\r
- {\r
- info->rtfClass = rtfControl;\r
- info->rtfMajor = rtfSpecialChar;\r
- info->rtfMinor = rtfTab;\r
- }\r
- else\r
- {\r
- info->rtfClass = rtfText;\r
- info->rtfMajor = c;\r
- }\r
- return;\r
- }\r
- if ((c = GetChar (info)) == EOF)\r
- {\r
- /* early eof, whoops (class is rtfUnknown) */\r
- return;\r
- }\r
- if (!isalpha (c))\r
- {\r
- /*\r
- * Three possibilities here:\r
- * 1) hex encoded text char, e.g., \'d5, \'d3\r
- * 2) special escaped text char, e.g., \{, \}\r
- * 3) control symbol, e.g., \_, \-, \|, \<10>\r
- */\r
- if (c == '\'') /* hex char */\r
- {\r
- int c2;\r
-\r
- if ((c = GetChar (info)) != EOF && (c2 = GetChar (info)) != EOF)\r
- {\r
- /* should do isxdigit check! */\r
- info->rtfClass = rtfText;\r
- info->rtfMajor = RTFCharToHex (c) * 16\r
- + RTFCharToHex (c2);\r
- return;\r
- }\r
- /* early eof, whoops (class is rtfUnknown) */\r
- return;\r
- }\r
-\r
- /* escaped char */\r
- /*if (index (":{}\\", c) != (char *) NULL)*/ /* escaped char */\r
- if (c == ':' || c == '{' || c == '}' || c == '\\')\r
- {\r
- info->rtfClass = rtfText;\r
- info->rtfMajor = c;\r
- return;\r
- }\r
-\r
- /* control symbol */\r
- Lookup (info, info->rtfTextBuf); /* sets class, major, minor */\r
- return;\r
- }\r
- /* control word */\r
- while (isalpha (c))\r
- {\r
- if ((c = GetChar (info)) == EOF)\r
- break;\r
- }\r
-\r
- /*\r
- * At this point, the control word is all collected, so the\r
- * major/minor numbers are determined before the parameter\r
- * (if any) is scanned. There will be one too many characters\r
- * in the buffer, though, so fix up before and restore after\r
- * looking up.\r
- */\r
-\r
- if (c != EOF)\r
- info->rtfTextBuf[info->rtfTextLen-1] = '\0';\r
- Lookup (info, info->rtfTextBuf); /* sets class, major, minor */\r
- if (c != EOF)\r
- info->rtfTextBuf[info->rtfTextLen-1] = c;\r
-\r
- /*\r
- * Should be looking at first digit of parameter if there\r
- * is one, unless it's negative. In that case, next char\r
- * is '-', so need to gobble next char, and remember sign.\r
- */\r
-\r
- sign = 1;\r
- if (c == '-')\r
- {\r
- sign = -1;\r
- c = GetChar (info);\r
- }\r
- if (c != EOF && isdigit (c))\r
- {\r
- info->rtfParam = 0;\r
- while (isdigit (c)) /* gobble parameter */\r
- {\r
- info->rtfParam = info->rtfParam * 10 + c - '0';\r
- if ((c = GetChar (info)) == EOF)\r
- break;\r
- }\r
- info->rtfParam *= sign;\r
- }\r
- /*\r
- * If control symbol delimiter was a blank, gobble it.\r
- * Otherwise the character is first char of next token, so\r
- * push it back for next call. In either case, delete the\r
- * delimiter from the token buffer.\r
- */\r
- if (c != EOF)\r
- {\r
- if (c != ' ')\r
- info->pushedChar = c;\r
- info->rtfTextBuf[--info->rtfTextLen] = '\0';\r
- }\r
-}\r
-\r
-\r
-/*\r
- * Read the next character from the input. This handles setting the\r
- * current line and position-within-line variables. Those variable are\r
- * set correctly whether lines end with CR, LF, or CRLF (the last being\r
- * the tricky case).\r
- *\r
- * bumpLine indicates whether the line number should be incremented on\r
- * the *next* input character.\r
- */\r
-\r
-\r
-static int GetChar(RTF_Info *info)\r
-{\r
-int c;\r
-int oldBumpLine;\r
-\r
- TRACE("\n");\r
-\r
- if ((c = _RTFGetChar(info)) != EOF)\r
- {\r
- info->rtfTextBuf[info->rtfTextLen++] = c;\r
- info->rtfTextBuf[info->rtfTextLen] = '\0';\r
- }\r
- if (info->prevChar == EOF)\r
- info->bumpLine = 1;\r
- oldBumpLine = info->bumpLine; /* non-zero if prev char was line ending */\r
- info->bumpLine = 0;\r
- if (c == '\r')\r
- info->bumpLine = 1;\r
- else if (c == '\n')\r
- {\r
- info->bumpLine = 1;\r
- if (info->prevChar == '\r') /* oops, previous \r wasn't */\r
- oldBumpLine = 0; /* really a line ending */\r
- }\r
- ++info->rtfLinePos;\r
- if (oldBumpLine) /* were we supposed to increment the */\r
- { /* line count on this char? */\r
- ++info->rtfLineNum;\r
- info->rtfLinePos = 1;\r
- }\r
- info->prevChar = c;\r
- return (c);\r
-}\r
-\r
-\r
-/*\r
- * Synthesize a token by setting the global variables to the\r
- * values supplied. Typically this is followed with a call\r
- * to RTFRouteToken().\r
- *\r
- * If a param value other than rtfNoParam is passed, it becomes\r
- * part of the token text.\r
- */\r
-\r
-void RTFSetToken(RTF_Info *info, int class, int major, int minor, int param, char *text)\r
-{\r
- TRACE("\n");\r
-\r
- info->rtfClass = class;\r
- info->rtfMajor = major;\r
- info->rtfMinor = minor;\r
- info->rtfParam = param;\r
- if (param == rtfNoParam)\r
- (void) strcpy (info->rtfTextBuf, text);\r
- else\r
- sprintf (info->rtfTextBuf, "%s%d", text, param);\r
- info->rtfTextLen = strlen (info->rtfTextBuf);\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-/*\r
- * Routines to handle mapping of RTF character sets\r
- * onto standard characters.\r
- *\r
- * RTFStdCharCode(name) given char name, produce numeric code\r
- * RTFStdCharName(code) given char code, return name\r
- * RTFMapChar(c) map input (RTF) char code to std code\r
- * RTFSetCharSet(id) select given charset map\r
- * RTFGetCharSet() get current charset map\r
- *\r
- * See ../h/README for more information about charset names and codes.\r
- */\r
-\r
-\r
-/*\r
- * Initialize charset stuff.\r
- */\r
-\r
-static void CharSetInit(RTF_Info *info)\r
-{\r
- TRACE("\n");\r
-\r
- info->autoCharSetFlags = (rtfReadCharSet | rtfSwitchCharSet);\r
- RTFFree (info->genCharSetFile);\r
- info->genCharSetFile = (char *) NULL;\r
- info->haveGenCharSet = 0;\r
- RTFFree (info->symCharSetFile);\r
- info->symCharSetFile = (char *) NULL;\r
- info->haveSymCharSet = 0;\r
- info->curCharSet = rtfCSGeneral;\r
- info->curCharCode = info->genCharCode;\r
-}\r
-\r
-\r
-/*\r
- * Specify the name of a file to be read when auto-charset-file reading is\r
- * done.\r
- */\r
-\r
-void RTFSetCharSetMap (RTF_Info *info, char *name, int csId)\r
-{\r
- TRACE("\n");\r
-\r
- if ((name = RTFStrSave (name)) == (char *) NULL) /* make copy */\r
- RTFPanic (info,"RTFSetCharSetMap: out of memory");\r
- switch (csId)\r
- {\r
- case rtfCSGeneral:\r
- RTFFree (info->genCharSetFile); /* free any previous value */\r
- info->genCharSetFile = name;\r
- break;\r
- case rtfCSSymbol:\r
- RTFFree (info->symCharSetFile); /* free any previous value */\r
- info->symCharSetFile = name;\r
- break;\r
- }\r
-}\r
-\r
-\r
-/*\r
- * Do auto-charset-file reading.\r
- * will always use the ansi charset no mater what the value\r
- * of the rtfTextBuf is.\r
- *\r
- * TODO: add support for other charset in the future.\r
- *\r
- */\r
-\r
-static void ReadCharSetMaps(RTF_Info *info)\r
-{\r
-char buf[rtfBufSiz];\r
-\r
- TRACE("\n");\r
-\r
- if (info->genCharSetFile != (char *) NULL)\r
- (void) strcpy (buf, info->genCharSetFile);\r
- else\r
- sprintf (buf, "%s-gen", &info->rtfTextBuf[1]);\r
- if (RTFReadCharSetMap (info, rtfCSGeneral) == 0)\r
- RTFPanic (info,"ReadCharSetMaps: Cannot read charset map %s", buf);\r
- if (info->symCharSetFile != (char *) NULL)\r
- (void) strcpy (buf, info->symCharSetFile);\r
- else\r
- sprintf (buf, "%s-sym", &info->rtfTextBuf[1]);\r
- if (RTFReadCharSetMap (info, rtfCSSymbol) == 0)\r
- RTFPanic (info,"ReadCharSetMaps: Cannot read charset map %s", buf);\r
-}\r
-\r
-\r
-\r
-/*\r
- * Convert a CaracterSetMap (caracter_name, caracter) into\r
- * this form : array[caracter_ident] = caracter;\r
- */\r
-\r
-int RTFReadCharSetMap(RTF_Info *info, int csId)\r
-{\r
- int *stdCodeArray;\r
- unsigned int i;\r
-\r
- TRACE("\n");\r
-\r
- switch (csId)\r
- {\r
- default:\r
- return (0); /* illegal charset id */\r
- case rtfCSGeneral:\r
-\r
- info->haveGenCharSet = 1;\r
- stdCodeArray = info->genCharCode;\r
- for (i = 0; i < charSetSize; i++)\r
- {\r
- stdCodeArray[i] = rtfSC_nothing;\r
- }\r
-\r
- for ( i = 0 ; i< sizeof(ansi_gen)/(sizeof(int));i+=2)\r
- {\r
- stdCodeArray[ ansi_gen[i+1] ] = ansi_gen[i];\r
- }\r
- break;\r
-\r
- case rtfCSSymbol:\r
-\r
- info->haveSymCharSet = 1;\r
- stdCodeArray = info->symCharCode;\r
- for (i = 0; i < charSetSize; i++)\r
- {\r
- stdCodeArray[i] = rtfSC_nothing;\r
- }\r
-\r
- for ( i = 0 ; i< sizeof(ansi_sym)/(sizeof(int));i+=2)\r
- {\r
- stdCodeArray[ ansi_sym[i+1] ] = ansi_sym[i];\r
- }\r
- break;\r
- }\r
-\r
- return (1);\r
-}\r
-\r
-\r
-/*\r
- * Given a standard character name (a string), find its code (a number).\r
- * Return -1 if name is unknown.\r
- */\r
-\r
-int RTFStdCharCode(RTF_Info *info, char *name)\r
-{\r
-int i;\r
-\r
- TRACE("\n");\r
-\r
- for (i = 0; i < rtfSC_MaxChar; i++)\r
- {\r
- if (strcmp (name, stdCharName[i]) == 0)\r
- return (i);\r
- }\r
- return (-1);\r
-}\r
-\r
-\r
-/*\r
- * Given a standard character code (a number), find its name (a string).\r
- * Return NULL if code is unknown.\r
- */\r
-\r
-char *RTFStdCharName(RTF_Info *info, int code)\r
-{\r
- if (code < 0 || code >= rtfSC_MaxChar)\r
- return ((char *) NULL);\r
- return (stdCharName[code]);\r
-}\r
-\r
-\r
-/*\r
- * Given an RTF input character code, find standard character code.\r
- * The translator should read the appropriate charset maps when it finds a\r
- * charset control. However, the file might not contain one. In this\r
- * case, no map will be available. When the first attempt is made to\r
- * map a character under these circumstances, RTFMapChar() assumes ANSI\r
- * and reads the map as necessary.\r
- */\r
-\r
-int RTFMapChar(RTF_Info *info, int c)\r
-{\r
- TRACE("\n");\r
-\r
- switch (info->curCharSet)\r
- {\r
- case rtfCSGeneral:\r
- if (!info->haveGenCharSet)\r
- {\r
- if (RTFReadCharSetMap (info, rtfCSGeneral) == 0)\r
- RTFPanic (info,"RTFMapChar: cannot read ansi-gen");\r
- }\r
- break;\r
- case rtfCSSymbol:\r
- if (!info->haveSymCharSet)\r
- {\r
- if (RTFReadCharSetMap (info, rtfCSSymbol) == 0)\r
- RTFPanic (info,"RTFMapChar: cannot read ansi-sym");\r
- }\r
- break;\r
- }\r
- if (c < 0 || c >= charSetSize)\r
- return (rtfSC_nothing);\r
- return (info->curCharCode[c]);\r
-}\r
-\r
-\r
-/*\r
- * Set the current character set. If csId is illegal, uses general charset.\r
- */\r
-\r
-void RTFSetCharSet(RTF_Info *info, int csId)\r
-{\r
- TRACE("\n");\r
-\r
- switch (csId)\r
- {\r
- default: /* use general if csId unknown */\r
- case rtfCSGeneral:\r
- info->curCharCode = info->genCharCode;\r
- info->curCharSet = csId;\r
- break;\r
- case rtfCSSymbol:\r
- info->curCharCode = info->symCharCode;\r
- info->curCharSet = csId;\r
- break;\r
- }\r
-}\r
-\r
-\r
-int RTFGetCharSet(RTF_Info *info)\r
-{\r
- return (info->curCharSet);\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-/*\r
- * Special destination readers. They gobble the destination so the\r
- * writer doesn't have to deal with them. That's wrong for any\r
- * translator that wants to process any of these itself. In that\r
- * case, these readers should be overridden by installing a different\r
- * destination callback.\r
- *\r
- * NOTE: The last token read by each of these reader will be the\r
- * destination's terminating '}', which will then be the current token.\r
- * That '}' token is passed to RTFRouteToken() - the writer has already\r
- * seen the '{' that began the destination group, and may have pushed a\r
- * state; it also needs to know at the end of the group that a state\r
- * should be popped.\r
- *\r
- * It's important that rtf.h and the control token lookup table list\r
- * as many symbols as possible, because these destination readers\r
- * unfortunately make strict assumptions about the input they expect,\r
- * and a token of class rtfUnknown will throw them off easily.\r
- */\r
-\r
-\r
-/*\r
- * Read { \fonttbl ... } destination. Old font tables don't have\r
- * braces around each table entry; try to adjust for that.\r
- */\r
-\r
-static void ReadFontTbl(RTF_Info *info)\r
-{\r
-RTFFont *fp = NULL;\r
-char buf[rtfBufSiz], *bp;\r
-int old = -1;\r
-char *fn = "ReadFontTbl";\r
-\r
- TRACE("\n");\r
-\r
- for (;;)\r
- {\r
- (void) RTFGetToken (info);\r
- if (RTFCheckCM (info, rtfGroup, rtfEndGroup))\r
- break;\r
- if (old < 0) /* first entry - determine tbl type */\r
- {\r
- if (RTFCheckCMM (info, rtfControl, rtfCharAttr, rtfFontNum))\r
- old = 1; /* no brace */\r
- else if (RTFCheckCM (info, rtfGroup, rtfBeginGroup))\r
- old = 0; /* brace */\r
- else /* can't tell! */\r
- RTFPanic (info, "%s: Cannot determine format", fn);\r
- }\r
- if (old == 0) /* need to find "{" here */\r
- {\r
- if (!RTFCheckCM (info, rtfGroup, rtfBeginGroup))\r
- RTFPanic (info, "%s: missing \"{\"", fn);\r
- (void) RTFGetToken (info); /* yes, skip to next token */\r
- }\r
- if ((fp = New (RTFFont)) == (RTFFont *) NULL)\r
- RTFPanic (info, "%s: cannot allocate font entry", fn);\r
-\r
- fp->rtfNextFont = info->fontList;\r
- info->fontList = fp;\r
-\r
- fp->rtfFName = (char *) NULL;\r
- fp->rtfFAltName = (char *) NULL;\r
- fp->rtfFNum = -1;\r
- fp->rtfFFamily = 0;\r
- fp->rtfFCharSet = 0;\r
- fp->rtfFPitch = 0;\r
- fp->rtfFType = 0;\r
- fp->rtfFCodePage = 0;\r
-\r
- while (info->rtfClass != rtfEOF\r
- && !RTFCheckCM (info, rtfText, ';')\r
- && !RTFCheckCM (info, rtfGroup, rtfEndGroup))\r
- {\r
- if (info->rtfClass == rtfControl)\r
- {\r
- switch (info->rtfMajor)\r
- {\r
- default:\r
- /* ignore token but announce it */\r
- RTFMsg (info,"%s: unknown token \"%s\"\n",\r
- fn, info->rtfTextBuf);\r
- break;\r
- case rtfFontFamily:\r
- fp->rtfFFamily = info->rtfMinor;\r
- break;\r
- case rtfCharAttr:\r
- switch (info->rtfMinor)\r
- {\r
- default:\r
- break; /* ignore unknown? */\r
- case rtfFontNum:\r
- fp->rtfFNum = info->rtfParam;\r
- break;\r
- }\r
- break;\r
- case rtfFontAttr:\r
- switch (info->rtfMinor)\r
- {\r
- default:\r
- break; /* ignore unknown? */\r
- case rtfFontCharSet:\r
- fp->rtfFCharSet = info->rtfParam;\r
- break;\r
- case rtfFontPitch:\r
- fp->rtfFPitch = info->rtfParam;\r
- break;\r
- case rtfFontCodePage:\r
- fp->rtfFCodePage = info->rtfParam;\r
- break;\r
- case rtfFTypeNil:\r
- case rtfFTypeTrueType:\r
- fp->rtfFType = info->rtfParam;\r
- break;\r
- }\r
- break;\r
- }\r
- }\r
- else if (RTFCheckCM (info, rtfGroup, rtfBeginGroup)) /* dest */\r
- {\r
- RTFSkipGroup (info); /* ignore for now */\r
- }\r
- else if (info->rtfClass == rtfText) /* font name */\r
- {\r
- bp = buf;\r
- while (info->rtfClass == rtfText\r
- && !RTFCheckCM (info, rtfText, ';'))\r
- {\r
- *bp++ = info->rtfMajor;\r
- (void) RTFGetToken (info);\r
- }\r
-\r
- /* FIX: in some cases the <fontinfo> isn't finished with a semi-column */\r
- if(RTFCheckCM (info, rtfGroup, rtfEndGroup))\r
- {\r
- RTFUngetToken (info);\r
- }\r
- *bp = '\0';\r
- fp->rtfFName = RTFStrSave (buf);\r
- if (fp->rtfFName == (char *) NULL)\r
- RTFPanic (info, "%s: cannot allocate font name", fn);\r
- /* already have next token; don't read one */\r
- /* at bottom of loop */\r
- continue;\r
- }\r
- else\r
- {\r
- /* ignore token but announce it */\r
- RTFMsg (info, "%s: unknown token \"%s\"\n",\r
- fn,info->rtfTextBuf);\r
- }\r
- (void) RTFGetToken (info);\r
- }\r
- if (old == 0) /* need to see "}" here */\r
- {\r
- (void) RTFGetToken (info);\r
- if (!RTFCheckCM (info, rtfGroup, rtfEndGroup))\r
- RTFPanic (info, "%s: missing \"}\"", fn);\r
- }\r
- }\r
- if (fp->rtfFNum == -1)\r
- RTFPanic (info,"%s: missing font number", fn);\r
-/*\r
- * Could check other pieces of structure here, too, I suppose.\r
- */\r
- RTFRouteToken (info); /* feed "}" back to router */\r
-}\r
-\r
-\r
-/*\r
- * The color table entries have color values of -1 if\r
- * the default color should be used for the entry (only\r
- * a semi-colon is given in the definition, no color values).\r
- * There will be a problem if a partial entry (1 or 2 but\r
- * not 3 color values) is given. The possibility is ignored\r
- * here.\r
- */\r
-\r
-static void ReadColorTbl(RTF_Info *info)\r
-{\r
-RTFColor *cp;\r
-int cnum = 0;\r
-char *fn = "ReadColorTbl";\r
-\r
- TRACE("\n");\r
-\r
- for (;;)\r
- {\r
- (void) RTFGetToken (info);\r
- if (RTFCheckCM (info, rtfGroup, rtfEndGroup))\r
- break;\r
- if ((cp = New (RTFColor)) == (RTFColor *) NULL)\r
- RTFPanic (info,"%s: cannot allocate color entry", fn);\r
- cp->rtfCNum = cnum++;\r
- cp->rtfCRed = cp->rtfCGreen = cp->rtfCBlue = -1;\r
- cp->rtfNextColor = info->colorList;\r
- info->colorList = cp;\r
- while (RTFCheckCM (info, rtfControl, rtfColorName))\r
- {\r
- switch (info->rtfMinor)\r
- {\r
- case rtfRed: cp->rtfCRed = info->rtfParam; break;\r
- case rtfGreen: cp->rtfCGreen = info->rtfParam; break;\r
- case rtfBlue: cp->rtfCBlue = info->rtfParam; break;\r
- }\r
- RTFGetToken (info);\r
- }\r
- if (!RTFCheckCM (info, rtfText, (int) ';'))\r
- RTFPanic (info,"%s: malformed entry", fn);\r
- }\r
- RTFRouteToken (info); /* feed "}" back to router */\r
-}\r
-\r
-\r
-/*\r
- * The "Normal" style definition doesn't contain any style number,\r
- * all others do. Normal style is given style rtfNormalStyleNum.\r
- */\r
-\r
-static void ReadStyleSheet(RTF_Info *info)\r
-{\r
-RTFStyle *sp;\r
-RTFStyleElt *sep, *sepLast;\r
-char buf[rtfBufSiz], *bp;\r
-char *fn = "ReadStyleSheet";\r
-\r
- TRACE("\n");\r
-\r
- for (;;)\r
- {\r
- (void) RTFGetToken (info);\r
- if (RTFCheckCM (info, rtfGroup, rtfEndGroup))\r
- break;\r
- if ((sp = New (RTFStyle)) == (RTFStyle *) NULL)\r
- RTFPanic (info,"%s: cannot allocate stylesheet entry", fn);\r
- sp->rtfSName = (char *) NULL;\r
- sp->rtfSNum = -1;\r
- sp->rtfSType = rtfParStyle;\r
- sp->rtfSAdditive = 0;\r
- sp->rtfSBasedOn = rtfNoStyleNum;\r
- sp->rtfSNextPar = -1;\r
- sp->rtfSSEList = sepLast = (RTFStyleElt *) NULL;\r
- sp->rtfNextStyle = info->styleList;\r
- sp->rtfExpanding = 0;\r
- info->styleList = sp;\r
- if (!RTFCheckCM (info, rtfGroup, rtfBeginGroup))\r
- RTFPanic (info,"%s: missing \"{\"", fn);\r
- for (;;)\r
- {\r
- (void) RTFGetToken (info);\r
- if (info->rtfClass == rtfEOF\r
- || RTFCheckCM (info, rtfText, ';'))\r
- break;\r
- if (info->rtfClass == rtfControl)\r
- {\r
- if (RTFCheckMM (info, rtfSpecialChar, rtfOptDest))\r
- continue; /* ignore "\*" */\r
- if (RTFCheckMM (info, rtfParAttr, rtfStyleNum))\r
- {\r
- sp->rtfSNum = info->rtfParam;\r
- sp->rtfSType = rtfParStyle;\r
- continue;\r
- }\r
- if (RTFCheckMM (info, rtfCharAttr, rtfCharStyleNum))\r
- {\r
- sp->rtfSNum = info->rtfParam;\r
- sp->rtfSType = rtfCharStyle;\r
- continue;\r
- }\r
- if (RTFCheckMM (info, rtfSectAttr, rtfSectStyleNum))\r
- {\r
- sp->rtfSNum = info->rtfParam;\r
- sp->rtfSType = rtfSectStyle;\r
- continue;\r
- }\r
- if (RTFCheckMM (info, rtfStyleAttr, rtfBasedOn))\r
- {\r
- sp->rtfSBasedOn = info->rtfParam;\r
- continue;\r
- }\r
- if (RTFCheckMM (info, rtfStyleAttr, rtfAdditive))\r
- {\r
- sp->rtfSAdditive = 1;\r
- continue;\r
- }\r
- if (RTFCheckMM (info, rtfStyleAttr, rtfNext))\r
- {\r
- sp->rtfSNextPar = info->rtfParam;\r
- continue;\r
- }\r
- if ((sep = New (RTFStyleElt)) == (RTFStyleElt *) NULL)\r
- RTFPanic (info,"%s: cannot allocate style element", fn);\r
- sep->rtfSEClass = info->rtfClass;\r
- sep->rtfSEMajor = info->rtfMajor;\r
- sep->rtfSEMinor = info->rtfMinor;\r
- sep->rtfSEParam = info->rtfParam;\r
- if ((sep->rtfSEText = RTFStrSave (info->rtfTextBuf))\r
- == (char *) NULL)\r
- RTFPanic (info,"%s: cannot allocate style element text", fn);\r
- if (sepLast == (RTFStyleElt *) NULL)\r
- sp->rtfSSEList = sep; /* first element */\r
- else /* add to end */\r
- sepLast->rtfNextSE = sep;\r
- sep->rtfNextSE = (RTFStyleElt *) NULL;\r
- sepLast = sep;\r
- }\r
- else if (RTFCheckCM (info, rtfGroup, rtfBeginGroup))\r
- {\r
- /*\r
- * This passes over "{\*\keycode ... }, among\r
- * other things. A temporary (perhaps) hack.\r
- */\r
- RTFSkipGroup (info);\r
- continue;\r
- }\r
- else if (info->rtfClass == rtfText) /* style name */\r
- {\r
- bp = buf;\r
- while (info->rtfClass == rtfText)\r
- {\r
- if (info->rtfMajor == ';')\r
- {\r
- /* put back for "for" loop */\r
- (void) RTFUngetToken (info);\r
- break;\r
- }\r
- *bp++ = info->rtfMajor;\r
- (void) RTFGetToken (info);\r
- }\r
- *bp = '\0';\r
- if ((sp->rtfSName = RTFStrSave (buf)) == (char *) NULL)\r
- RTFPanic (info, "%s: cannot allocate style name", fn);\r
- }\r
- else /* unrecognized */\r
- {\r
- /* ignore token but announce it */\r
- RTFMsg (info, "%s: unknown token \"%s\"\n",\r
- fn, info->rtfTextBuf);\r
- }\r
- }\r
- (void) RTFGetToken (info);\r
- if (!RTFCheckCM (info, rtfGroup, rtfEndGroup))\r
- RTFPanic (info, "%s: missing \"}\"", fn);\r
-\r
- /*\r
- * Check over the style structure. A name is a must.\r
- * If no style number was specified, check whether it's the\r
- * Normal style (in which case it's given style number\r
- * rtfNormalStyleNum). Note that some "normal" style names\r
- * just begin with "Normal" and can have other stuff following,\r
- * e.g., "Normal,Times 10 point". Ugh.\r
- *\r
- * Some German RTF writers use "Standard" instead of "Normal".\r
- */\r
- if (sp->rtfSName == (char *) NULL)\r
- RTFPanic (info,"%s: missing style name", fn);\r
- if (sp->rtfSNum < 0)\r
- {\r
- if (strncmp (buf, "Normal", 6) != 0\r
- && strncmp (buf, "Standard", 8) != 0)\r
- RTFPanic (info,"%s: missing style number", fn);\r
- sp->rtfSNum = rtfNormalStyleNum;\r
- }\r
- if (sp->rtfSNextPar == -1) /* if \snext not given, */\r
- sp->rtfSNextPar = sp->rtfSNum; /* next is itself */\r
- }\r
- RTFRouteToken (info); /* feed "}" back to router */\r
-}\r
-\r
-\r
-static void ReadInfoGroup(RTF_Info *info)\r
-{\r
- RTFSkipGroup (info);\r
- RTFRouteToken (info); /* feed "}" back to router */\r
-}\r
-\r
-\r
-static void ReadPictGroup(RTF_Info *info)\r
-{\r
- RTFSkipGroup (info);\r
- RTFRouteToken (info); /* feed "}" back to router */\r
-}\r
-\r
-\r
-static void ReadObjGroup(RTF_Info *info)\r
-{\r
- RTFSkipGroup (info);\r
- RTFRouteToken (info); /* feed "}" back to router */\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-/*\r
- * Routines to return pieces of stylesheet, or font or color tables.\r
- * References to style 0 are mapped onto the Normal style.\r
- */\r
-\r
-\r
-RTFStyle *RTFGetStyle(RTF_Info *info, int num)\r
-{\r
-RTFStyle *s;\r
-\r
- if (num == -1)\r
- return (info->styleList);\r
- for (s = info->styleList; s != (RTFStyle *) NULL; s = s->rtfNextStyle)\r
- {\r
- if (s->rtfSNum == num)\r
- break;\r
- }\r
- return (s); /* NULL if not found */\r
-}\r
-\r
-\r
-RTFFont *RTFGetFont(RTF_Info *info, int num)\r
-{\r
-RTFFont *f;\r
-\r
- if (num == -1)\r
- return (info->fontList);\r
- for (f = info->fontList; f != (RTFFont *) NULL; f = f->rtfNextFont)\r
- {\r
- if (f->rtfFNum == num)\r
- break;\r
- }\r
- return (f); /* NULL if not found */\r
-}\r
-\r
-\r
-RTFColor *RTFGetColor(RTF_Info *info, int num)\r
-{\r
-RTFColor *c;\r
-\r
- if (num == -1)\r
- return (info->colorList);\r
- for (c = info->colorList; c != (RTFColor *) NULL; c = c->rtfNextColor)\r
- {\r
- if (c->rtfCNum == num)\r
- break;\r
- }\r
- return (c); /* NULL if not found */\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-\r
-/*\r
- * Expand style n, if there is such a style.\r
- */\r
-\r
-void RTFExpandStyle(RTF_Info *info, int n)\r
-{\r
-RTFStyle *s;\r
-RTFStyleElt *se;\r
-\r
- TRACE("\n");\r
-\r
- if (n == -1 || (s = RTFGetStyle (info, n)) == (RTFStyle *) NULL)\r
- return;\r
- if (s->rtfExpanding != 0)\r
- RTFPanic (info,"Style expansion loop, style %d", n);\r
- s->rtfExpanding = 1; /* set expansion flag for loop detection */\r
- /*\r
- * Expand "based-on" style (unless it's the same as the current\r
- * style -- Normal style usually gives itself as its own based-on\r
- * style). Based-on style expansion is done by synthesizing\r
- * the token that the writer needs to see in order to trigger\r
- * another style expansion, and feeding to token back through\r
- * the router so the writer sees it.\r
- */\r
- if (n != s->rtfSBasedOn)\r
- {\r
- RTFSetToken (info, rtfControl, rtfParAttr, rtfStyleNum,\r
- s->rtfSBasedOn, "\\s");\r
- RTFRouteToken (info);\r
- }\r
- /*\r
- * Now route the tokens unique to this style. RTFSetToken()\r
- * isn't used because it would add the param value to the end\r
- * of the token text, which already has it in.\r
- */\r
- for (se = s->rtfSSEList; se != (RTFStyleElt *) NULL; se = se->rtfNextSE)\r
- {\r
- info->rtfClass = se->rtfSEClass;\r
- info->rtfMajor = se->rtfSEMajor;\r
- info->rtfMinor = se->rtfSEMinor;\r
- info->rtfParam = se->rtfSEParam;\r
- (void) strcpy (info->rtfTextBuf, se->rtfSEText);\r
- info->rtfTextLen = strlen (info->rtfTextBuf);\r
- RTFRouteToken (info);\r
- }\r
- s->rtfExpanding = 0; /* done - clear expansion flag */\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-/*\r
- * Control symbol lookup routines\r
- */\r
-\r
-\r
-typedef struct RTFKey RTFKey;\r
-\r
-struct RTFKey\r
-{\r
- int rtfKMajor; /* major number */\r
- int rtfKMinor; /* minor number */\r
- char *rtfKStr; /* symbol name */\r
- int rtfKHash; /* symbol name hash value */\r
-};\r
-\r
-/*\r
- * A minor number of -1 means the token has no minor number\r
- * (all valid minor numbers are >= 0).\r
- */\r
-\r
-static RTFKey rtfKey[] =\r
-{\r
- /*\r
- * Special characters\r
- */\r
-\r
- { rtfSpecialChar, rtfIIntVersion, "vern", 0 },\r
- { rtfSpecialChar, rtfICreateTime, "creatim", 0 },\r
- { rtfSpecialChar, rtfIRevisionTime, "revtim", 0 },\r
- { rtfSpecialChar, rtfIPrintTime, "printim", 0 },\r
- { rtfSpecialChar, rtfIBackupTime, "buptim", 0 },\r
- { rtfSpecialChar, rtfIEditTime, "edmins", 0 },\r
- { rtfSpecialChar, rtfIYear, "yr", 0 },\r
- { rtfSpecialChar, rtfIMonth, "mo", 0 },\r
- { rtfSpecialChar, rtfIDay, "dy", 0 },\r
- { rtfSpecialChar, rtfIHour, "hr", 0 },\r
- { rtfSpecialChar, rtfIMinute, "min", 0 },\r
- { rtfSpecialChar, rtfISecond, "sec", 0 },\r
- { rtfSpecialChar, rtfINPages, "nofpages", 0 },\r
- { rtfSpecialChar, rtfINWords, "nofwords", 0 },\r
- { rtfSpecialChar, rtfINChars, "nofchars", 0 },\r
- { rtfSpecialChar, rtfIIntID, "id", 0 },\r
-\r
- { rtfSpecialChar, rtfCurHeadDate, "chdate", 0 },\r
- { rtfSpecialChar, rtfCurHeadDateLong, "chdpl", 0 },\r
- { rtfSpecialChar, rtfCurHeadDateAbbrev, "chdpa", 0 },\r
- { rtfSpecialChar, rtfCurHeadTime, "chtime", 0 },\r
- { rtfSpecialChar, rtfCurHeadPage, "chpgn", 0 },\r
- { rtfSpecialChar, rtfSectNum, "sectnum", 0 },\r
- { rtfSpecialChar, rtfCurFNote, "chftn", 0 },\r
- { rtfSpecialChar, rtfCurAnnotRef, "chatn", 0 },\r
- { rtfSpecialChar, rtfFNoteSep, "chftnsep", 0 },\r
- { rtfSpecialChar, rtfFNoteCont, "chftnsepc", 0 },\r
- { rtfSpecialChar, rtfCell, "cell", 0 },\r
- { rtfSpecialChar, rtfRow, "row", 0 },\r
- { rtfSpecialChar, rtfPar, "par", 0 },\r
- /* newline and carriage return are synonyms for */\r
- /* \par when they are preceded by a \ character */\r
- { rtfSpecialChar, rtfPar, "\n", 0 },\r
- { rtfSpecialChar, rtfPar, "\r", 0 },\r
- { rtfSpecialChar, rtfSect, "sect", 0 },\r
- { rtfSpecialChar, rtfPage, "page", 0 },\r
- { rtfSpecialChar, rtfColumn, "column", 0 },\r
- { rtfSpecialChar, rtfLine, "line", 0 },\r
- { rtfSpecialChar, rtfSoftPage, "softpage", 0 },\r
- { rtfSpecialChar, rtfSoftColumn, "softcol", 0 },\r
- { rtfSpecialChar, rtfSoftLine, "softline", 0 },\r
- { rtfSpecialChar, rtfSoftLineHt, "softlheight", 0 },\r
- { rtfSpecialChar, rtfTab, "tab", 0 },\r
- { rtfSpecialChar, rtfEmDash, "emdash", 0 },\r
- { rtfSpecialChar, rtfEnDash, "endash", 0 },\r
- { rtfSpecialChar, rtfEmSpace, "emspace", 0 },\r
- { rtfSpecialChar, rtfEnSpace, "enspace", 0 },\r
- { rtfSpecialChar, rtfBullet, "bullet", 0 },\r
- { rtfSpecialChar, rtfLQuote, "lquote", 0 },\r
- { rtfSpecialChar, rtfRQuote, "rquote", 0 },\r
- { rtfSpecialChar, rtfLDblQuote, "ldblquote", 0 },\r
- { rtfSpecialChar, rtfRDblQuote, "rdblquote", 0 },\r
- { rtfSpecialChar, rtfFormula, "|", 0 },\r
- { rtfSpecialChar, rtfNoBrkSpace, "~", 0 },\r
- { rtfSpecialChar, rtfNoReqHyphen, "-", 0 },\r
- { rtfSpecialChar, rtfNoBrkHyphen, "_", 0 },\r
- { rtfSpecialChar, rtfOptDest, "*", 0 },\r
- { rtfSpecialChar, rtfLTRMark, "ltrmark", 0 },\r
- { rtfSpecialChar, rtfRTLMark, "rtlmark", 0 },\r
- { rtfSpecialChar, rtfNoWidthJoiner, "zwj", 0 },\r
- { rtfSpecialChar, rtfNoWidthNonJoiner, "zwnj", 0 },\r
- /* is this valid? */\r
- { rtfSpecialChar, rtfCurHeadPict, "chpict", 0 },\r
-\r
- /*\r
- * Character formatting attributes\r
- */\r
-\r
- { rtfCharAttr, rtfPlain, "plain", 0 },\r
- { rtfCharAttr, rtfBold, "b", 0 },\r
- { rtfCharAttr, rtfAllCaps, "caps", 0 },\r
- { rtfCharAttr, rtfDeleted, "deleted", 0 },\r
- { rtfCharAttr, rtfSubScript, "dn", 0 },\r
- { rtfCharAttr, rtfSubScrShrink, "sub", 0 },\r
- { rtfCharAttr, rtfNoSuperSub, "nosupersub", 0 },\r
- { rtfCharAttr, rtfExpand, "expnd", 0 },\r
- { rtfCharAttr, rtfExpandTwips, "expndtw", 0 },\r
- { rtfCharAttr, rtfKerning, "kerning", 0 },\r
- { rtfCharAttr, rtfFontNum, "f", 0 },\r
- { rtfCharAttr, rtfFontSize, "fs", 0 },\r
- { rtfCharAttr, rtfItalic, "i", 0 },\r
- { rtfCharAttr, rtfOutline, "outl", 0 },\r
- { rtfCharAttr, rtfRevised, "revised", 0 },\r
- { rtfCharAttr, rtfRevAuthor, "revauth", 0 },\r
- { rtfCharAttr, rtfRevDTTM, "revdttm", 0 },\r
- { rtfCharAttr, rtfSmallCaps, "scaps", 0 },\r
- { rtfCharAttr, rtfShadow, "shad", 0 },\r
- { rtfCharAttr, rtfStrikeThru, "strike", 0 },\r
- { rtfCharAttr, rtfUnderline, "ul", 0 },\r
- { rtfCharAttr, rtfDotUnderline, "uld", 0 },\r
- { rtfCharAttr, rtfDbUnderline, "uldb", 0 },\r
- { rtfCharAttr, rtfNoUnderline, "ulnone", 0 },\r
- { rtfCharAttr, rtfWordUnderline, "ulw", 0 },\r
- { rtfCharAttr, rtfSuperScript, "up", 0 },\r
- { rtfCharAttr, rtfSuperScrShrink, "super", 0 },\r
- { rtfCharAttr, rtfInvisible, "v", 0 },\r
- { rtfCharAttr, rtfForeColor, "cf", 0 },\r
- { rtfCharAttr, rtfBackColor, "cb", 0 },\r
- { rtfCharAttr, rtfRTLChar, "rtlch", 0 },\r
- { rtfCharAttr, rtfLTRChar, "ltrch", 0 },\r
- { rtfCharAttr, rtfCharStyleNum, "cs", 0 },\r
- { rtfCharAttr, rtfCharCharSet, "cchs", 0 },\r
- { rtfCharAttr, rtfLanguage, "lang", 0 },\r
- /* this has disappeared from spec 1.2 */\r
- { rtfCharAttr, rtfGray, "gray", 0 },\r
-\r
- /*\r
- * Paragraph formatting attributes\r
- */\r
-\r
- { rtfParAttr, rtfParDef, "pard", 0 },\r
- { rtfParAttr, rtfStyleNum, "s", 0 },\r
- { rtfParAttr, rtfHyphenate, "hyphpar", 0 },\r
- { rtfParAttr, rtfInTable, "intbl", 0 },\r
- { rtfParAttr, rtfKeep, "keep", 0 },\r
- { rtfParAttr, rtfNoWidowControl, "nowidctlpar", 0 },\r
- { rtfParAttr, rtfKeepNext, "keepn", 0 },\r
- { rtfParAttr, rtfOutlineLevel, "level", 0 },\r
- { rtfParAttr, rtfNoLineNum, "noline", 0 },\r
- { rtfParAttr, rtfPBBefore, "pagebb", 0 },\r
- { rtfParAttr, rtfSideBySide, "sbys", 0 },\r
- { rtfParAttr, rtfQuadLeft, "ql", 0 },\r
- { rtfParAttr, rtfQuadRight, "qr", 0 },\r
- { rtfParAttr, rtfQuadJust, "qj", 0 },\r
- { rtfParAttr, rtfQuadCenter, "qc", 0 },\r
- { rtfParAttr, rtfFirstIndent, "fi", 0 },\r
- { rtfParAttr, rtfLeftIndent, "li", 0 },\r
- { rtfParAttr, rtfRightIndent, "ri", 0 },\r
- { rtfParAttr, rtfSpaceBefore, "sb", 0 },\r
- { rtfParAttr, rtfSpaceAfter, "sa", 0 },\r
- { rtfParAttr, rtfSpaceBetween, "sl", 0 },\r
- { rtfParAttr, rtfSpaceMultiply, "slmult", 0 },\r
-\r
- { rtfParAttr, rtfSubDocument, "subdocument", 0 },\r
-\r
- { rtfParAttr, rtfRTLPar, "rtlpar", 0 },\r
- { rtfParAttr, rtfLTRPar, "ltrpar", 0 },\r
-\r
- { rtfParAttr, rtfTabPos, "tx", 0 },\r
- /*\r
- * FrameMaker writes \tql (to mean left-justified tab, apparently)\r
- * although it's not in the spec. It's also redundant, since lj\r
- * tabs are the default.\r
- */\r
- { rtfParAttr, rtfTabLeft, "tql", 0 },\r
- { rtfParAttr, rtfTabRight, "tqr", 0 },\r
- { rtfParAttr, rtfTabCenter, "tqc", 0 },\r
- { rtfParAttr, rtfTabDecimal, "tqdec", 0 },\r
- { rtfParAttr, rtfTabBar, "tb", 0 },\r
- { rtfParAttr, rtfLeaderDot, "tldot", 0 },\r
- { rtfParAttr, rtfLeaderHyphen, "tlhyph", 0 },\r
- { rtfParAttr, rtfLeaderUnder, "tlul", 0 },\r
- { rtfParAttr, rtfLeaderThick, "tlth", 0 },\r
- { rtfParAttr, rtfLeaderEqual, "tleq", 0 },\r
-\r
- { rtfParAttr, rtfParLevel, "pnlvl", 0 },\r
- { rtfParAttr, rtfParBullet, "pnlvlblt", 0 },\r
- { rtfParAttr, rtfParSimple, "pnlvlbody", 0 },\r
- { rtfParAttr, rtfParNumCont, "pnlvlcont", 0 },\r
- { rtfParAttr, rtfParNumOnce, "pnnumonce", 0 },\r
- { rtfParAttr, rtfParNumAcross, "pnacross", 0 },\r
- { rtfParAttr, rtfParHangIndent, "pnhang", 0 },\r
- { rtfParAttr, rtfParNumRestart, "pnrestart", 0 },\r
- { rtfParAttr, rtfParNumCardinal, "pncard", 0 },\r
- { rtfParAttr, rtfParNumDecimal, "pndec", 0 },\r
- { rtfParAttr, rtfParNumULetter, "pnucltr", 0 },\r
- { rtfParAttr, rtfParNumURoman, "pnucrm", 0 },\r
- { rtfParAttr, rtfParNumLLetter, "pnlcltr", 0 },\r
- { rtfParAttr, rtfParNumLRoman, "pnlcrm", 0 },\r
- { rtfParAttr, rtfParNumOrdinal, "pnord", 0 },\r
- { rtfParAttr, rtfParNumOrdinalText, "pnordt", 0 },\r
- { rtfParAttr, rtfParNumBold, "pnb", 0 },\r
- { rtfParAttr, rtfParNumItalic, "pni", 0 },\r
- { rtfParAttr, rtfParNumAllCaps, "pncaps", 0 },\r
- { rtfParAttr, rtfParNumSmallCaps, "pnscaps", 0 },\r
- { rtfParAttr, rtfParNumUnder, "pnul", 0 },\r
- { rtfParAttr, rtfParNumDotUnder, "pnuld", 0 },\r
- { rtfParAttr, rtfParNumDbUnder, "pnuldb", 0 },\r
- { rtfParAttr, rtfParNumNoUnder, "pnulnone", 0 },\r
- { rtfParAttr, rtfParNumWordUnder, "pnulw", 0 },\r
- { rtfParAttr, rtfParNumStrikethru, "pnstrike", 0 },\r
- { rtfParAttr, rtfParNumForeColor, "pncf", 0 },\r
- { rtfParAttr, rtfParNumFont, "pnf", 0 },\r
- { rtfParAttr, rtfParNumFontSize, "pnfs", 0 },\r
- { rtfParAttr, rtfParNumIndent, "pnindent", 0 },\r
- { rtfParAttr, rtfParNumSpacing, "pnsp", 0 },\r
- { rtfParAttr, rtfParNumInclPrev, "pnprev", 0 },\r
- { rtfParAttr, rtfParNumCenter, "pnqc", 0 },\r
- { rtfParAttr, rtfParNumLeft, "pnql", 0 },\r
- { rtfParAttr, rtfParNumRight, "pnqr", 0 },\r
- { rtfParAttr, rtfParNumStartAt, "pnstart", 0 },\r
-\r
- { rtfParAttr, rtfBorderTop, "brdrt", 0 },\r
- { rtfParAttr, rtfBorderBottom, "brdrb", 0 },\r
- { rtfParAttr, rtfBorderLeft, "brdrl", 0 },\r
- { rtfParAttr, rtfBorderRight, "brdrr", 0 },\r
- { rtfParAttr, rtfBorderBetween, "brdrbtw", 0 },\r
- { rtfParAttr, rtfBorderBar, "brdrbar", 0 },\r
- { rtfParAttr, rtfBorderBox, "box", 0 },\r
- { rtfParAttr, rtfBorderSingle, "brdrs", 0 },\r
- { rtfParAttr, rtfBorderThick, "brdrth", 0 },\r
- { rtfParAttr, rtfBorderShadow, "brdrsh", 0 },\r
- { rtfParAttr, rtfBorderDouble, "brdrdb", 0 },\r
- { rtfParAttr, rtfBorderDot, "brdrdot", 0 },\r
- { rtfParAttr, rtfBorderDot, "brdrdash", 0 },\r
- { rtfParAttr, rtfBorderHair, "brdrhair", 0 },\r
- { rtfParAttr, rtfBorderWidth, "brdrw", 0 },\r
- { rtfParAttr, rtfBorderColor, "brdrcf", 0 },\r
- { rtfParAttr, rtfBorderSpace, "brsp", 0 },\r
-\r
- { rtfParAttr, rtfShading, "shading", 0 },\r
- { rtfParAttr, rtfBgPatH, "bghoriz", 0 },\r
- { rtfParAttr, rtfBgPatV, "bgvert", 0 },\r
- { rtfParAttr, rtfFwdDiagBgPat, "bgfdiag", 0 },\r
- { rtfParAttr, rtfBwdDiagBgPat, "bgbdiag", 0 },\r
- { rtfParAttr, rtfHatchBgPat, "bgcross", 0 },\r
- { rtfParAttr, rtfDiagHatchBgPat, "bgdcross", 0 },\r
- { rtfParAttr, rtfDarkBgPatH, "bgdkhoriz", 0 },\r
- { rtfParAttr, rtfDarkBgPatV, "bgdkvert", 0 },\r
- { rtfParAttr, rtfFwdDarkBgPat, "bgdkfdiag", 0 },\r
- { rtfParAttr, rtfBwdDarkBgPat, "bgdkbdiag", 0 },\r
- { rtfParAttr, rtfDarkHatchBgPat, "bgdkcross", 0 },\r
- { rtfParAttr, rtfDarkDiagHatchBgPat, "bgdkdcross", 0 },\r
- { rtfParAttr, rtfBgPatLineColor, "cfpat", 0 },\r
- { rtfParAttr, rtfBgPatColor, "cbpat", 0 },\r
-\r
- /*\r
- * Section formatting attributes\r
- */\r
-\r
- { rtfSectAttr, rtfSectDef, "sectd", 0 },\r
- { rtfSectAttr, rtfENoteHere, "endnhere", 0 },\r
- { rtfSectAttr, rtfPrtBinFirst, "binfsxn", 0 },\r
- { rtfSectAttr, rtfPrtBin, "binsxn", 0 },\r
- { rtfSectAttr, rtfSectStyleNum, "ds", 0 },\r
-\r
- { rtfSectAttr, rtfNoBreak, "sbknone", 0 },\r
- { rtfSectAttr, rtfColBreak, "sbkcol", 0 },\r
- { rtfSectAttr, rtfPageBreak, "sbkpage", 0 },\r
- { rtfSectAttr, rtfEvenBreak, "sbkeven", 0 },\r
- { rtfSectAttr, rtfOddBreak, "sbkodd", 0 },\r
-\r
- { rtfSectAttr, rtfColumns, "cols", 0 },\r
- { rtfSectAttr, rtfColumnSpace, "colsx", 0 },\r
- { rtfSectAttr, rtfColumnNumber, "colno", 0 },\r
- { rtfSectAttr, rtfColumnSpRight, "colsr", 0 },\r
- { rtfSectAttr, rtfColumnWidth, "colw", 0 },\r
- { rtfSectAttr, rtfColumnLine, "linebetcol", 0 },\r
-\r
- { rtfSectAttr, rtfLineModulus, "linemod", 0 },\r
- { rtfSectAttr, rtfLineDist, "linex", 0 },\r
- { rtfSectAttr, rtfLineStarts, "linestarts", 0 },\r
- { rtfSectAttr, rtfLineRestart, "linerestart", 0 },\r
- { rtfSectAttr, rtfLineRestartPg, "lineppage", 0 },\r
- { rtfSectAttr, rtfLineCont, "linecont", 0 },\r
-\r
- { rtfSectAttr, rtfSectPageWid, "pgwsxn", 0 },\r
- { rtfSectAttr, rtfSectPageHt, "pghsxn", 0 },\r
- { rtfSectAttr, rtfSectMarginLeft, "marglsxn", 0 },\r
- { rtfSectAttr, rtfSectMarginRight, "margrsxn", 0 },\r
- { rtfSectAttr, rtfSectMarginTop, "margtsxn", 0 },\r
- { rtfSectAttr, rtfSectMarginBottom, "margbsxn", 0 },\r
- { rtfSectAttr, rtfSectMarginGutter, "guttersxn", 0 },\r
- { rtfSectAttr, rtfSectLandscape, "lndscpsxn", 0 },\r
- { rtfSectAttr, rtfTitleSpecial, "titlepg", 0 },\r
- { rtfSectAttr, rtfHeaderY, "headery", 0 },\r
- { rtfSectAttr, rtfFooterY, "footery", 0 },\r
-\r
- { rtfSectAttr, rtfPageStarts, "pgnstarts", 0 },\r
- { rtfSectAttr, rtfPageCont, "pgncont", 0 },\r
- { rtfSectAttr, rtfPageRestart, "pgnrestart", 0 },\r
- { rtfSectAttr, rtfPageNumRight, "pgnx", 0 },\r
- { rtfSectAttr, rtfPageNumTop, "pgny", 0 },\r
- { rtfSectAttr, rtfPageDecimal, "pgndec", 0 },\r
- { rtfSectAttr, rtfPageURoman, "pgnucrm", 0 },\r
- { rtfSectAttr, rtfPageLRoman, "pgnlcrm", 0 },\r
- { rtfSectAttr, rtfPageULetter, "pgnucltr", 0 },\r
- { rtfSectAttr, rtfPageLLetter, "pgnlcltr", 0 },\r
- { rtfSectAttr, rtfPageNumHyphSep, "pgnhnsh", 0 },\r
- { rtfSectAttr, rtfPageNumSpaceSep, "pgnhnsp", 0 },\r
- { rtfSectAttr, rtfPageNumColonSep, "pgnhnsc", 0 },\r
- { rtfSectAttr, rtfPageNumEmdashSep, "pgnhnsm", 0 },\r
- { rtfSectAttr, rtfPageNumEndashSep, "pgnhnsn", 0 },\r
-\r
- { rtfSectAttr, rtfTopVAlign, "vertalt", 0 },\r
- /* misspelled as "vertal" in specification 1.0 */\r
- { rtfSectAttr, rtfBottomVAlign, "vertalb", 0 },\r
- { rtfSectAttr, rtfCenterVAlign, "vertalc", 0 },\r
- { rtfSectAttr, rtfJustVAlign, "vertalj", 0 },\r
-\r
- { rtfSectAttr, rtfRTLSect, "rtlsect", 0 },\r
- { rtfSectAttr, rtfLTRSect, "ltrsect", 0 },\r
-\r
- /* I've seen these in an old spec, but not in real files... */\r
- /*rtfSectAttr, rtfNoBreak, "nobreak", 0,*/\r
- /*rtfSectAttr, rtfColBreak, "colbreak", 0,*/\r
- /*rtfSectAttr, rtfPageBreak, "pagebreak", 0,*/\r
- /*rtfSectAttr, rtfEvenBreak, "evenbreak", 0,*/\r
- /*rtfSectAttr, rtfOddBreak, "oddbreak", 0,*/\r
-\r
- /*\r
- * Document formatting attributes\r
- */\r
-\r
- { rtfDocAttr, rtfDefTab, "deftab", 0 },\r
- { rtfDocAttr, rtfHyphHotZone, "hyphhotz", 0 },\r
- { rtfDocAttr, rtfHyphConsecLines, "hyphconsec", 0 },\r
- { rtfDocAttr, rtfHyphCaps, "hyphcaps", 0 },\r
- { rtfDocAttr, rtfHyphAuto, "hyphauto", 0 },\r
- { rtfDocAttr, rtfLineStart, "linestart", 0 },\r
- { rtfDocAttr, rtfFracWidth, "fracwidth", 0 },\r
- /* \makeback was given in old version of spec, it's now */\r
- /* listed as \makebackup */\r
- { rtfDocAttr, rtfMakeBackup, "makeback", 0 },\r
- { rtfDocAttr, rtfMakeBackup, "makebackup", 0 },\r
- { rtfDocAttr, rtfRTFDefault, "defformat", 0 },\r
- { rtfDocAttr, rtfPSOverlay, "psover", 0 },\r
- { rtfDocAttr, rtfDocTemplate, "doctemp", 0 },\r
- { rtfDocAttr, rtfDefLanguage, "deflang", 0 },\r
-\r
- { rtfDocAttr, rtfFENoteType, "fet", 0 },\r
- { rtfDocAttr, rtfFNoteEndSect, "endnotes", 0 },\r
- { rtfDocAttr, rtfFNoteEndDoc, "enddoc", 0 },\r
- { rtfDocAttr, rtfFNoteText, "ftntj", 0 },\r
- { rtfDocAttr, rtfFNoteBottom, "ftnbj", 0 },\r
- { rtfDocAttr, rtfENoteEndSect, "aendnotes", 0 },\r
- { rtfDocAttr, rtfENoteEndDoc, "aenddoc", 0 },\r
- { rtfDocAttr, rtfENoteText, "aftntj", 0 },\r
- { rtfDocAttr, rtfENoteBottom, "aftnbj", 0 },\r
- { rtfDocAttr, rtfFNoteStart, "ftnstart", 0 },\r
- { rtfDocAttr, rtfENoteStart, "aftnstart", 0 },\r
- { rtfDocAttr, rtfFNoteRestartPage, "ftnrstpg", 0 },\r
- { rtfDocAttr, rtfFNoteRestart, "ftnrestart", 0 },\r
- { rtfDocAttr, rtfFNoteRestartCont, "ftnrstcont", 0 },\r
- { rtfDocAttr, rtfENoteRestart, "aftnrestart", 0 },\r
- { rtfDocAttr, rtfENoteRestartCont, "aftnrstcont", 0 },\r
- { rtfDocAttr, rtfFNoteNumArabic, "ftnnar", 0 },\r
- { rtfDocAttr, rtfFNoteNumLLetter, "ftnnalc", 0 },\r
- { rtfDocAttr, rtfFNoteNumULetter, "ftnnauc", 0 },\r
- { rtfDocAttr, rtfFNoteNumLRoman, "ftnnrlc", 0 },\r
- { rtfDocAttr, rtfFNoteNumURoman, "ftnnruc", 0 },\r
- { rtfDocAttr, rtfFNoteNumChicago, "ftnnchi", 0 },\r
- { rtfDocAttr, rtfENoteNumArabic, "aftnnar", 0 },\r
- { rtfDocAttr, rtfENoteNumLLetter, "aftnnalc", 0 },\r
- { rtfDocAttr, rtfENoteNumULetter, "aftnnauc", 0 },\r
- { rtfDocAttr, rtfENoteNumLRoman, "aftnnrlc", 0 },\r
- { rtfDocAttr, rtfENoteNumURoman, "aftnnruc", 0 },\r
- { rtfDocAttr, rtfENoteNumChicago, "aftnnchi", 0 },\r
-\r
- { rtfDocAttr, rtfPaperWidth, "paperw", 0 },\r
- { rtfDocAttr, rtfPaperHeight, "paperh", 0 },\r
- { rtfDocAttr, rtfPaperSize, "psz", 0 },\r
- { rtfDocAttr, rtfLeftMargin, "margl", 0 },\r
- { rtfDocAttr, rtfRightMargin, "margr", 0 },\r
- { rtfDocAttr, rtfTopMargin, "margt", 0 },\r
- { rtfDocAttr, rtfBottomMargin, "margb", 0 },\r
- { rtfDocAttr, rtfFacingPage, "facingp", 0 },\r
- { rtfDocAttr, rtfGutterWid, "gutter", 0 },\r
- { rtfDocAttr, rtfMirrorMargin, "margmirror", 0 },\r
- { rtfDocAttr, rtfLandscape, "landscape", 0 },\r
- { rtfDocAttr, rtfPageStart, "pgnstart", 0 },\r
- { rtfDocAttr, rtfWidowCtrl, "widowctrl", 0 },\r
-\r
- { rtfDocAttr, rtfLinkStyles, "linkstyles", 0 },\r
-\r
- { rtfDocAttr, rtfNoAutoTabIndent, "notabind", 0 },\r
- { rtfDocAttr, rtfWrapSpaces, "wraptrsp", 0 },\r
- { rtfDocAttr, rtfPrintColorsBlack, "prcolbl", 0 },\r
- { rtfDocAttr, rtfNoExtraSpaceRL, "noextrasprl", 0 },\r
- { rtfDocAttr, rtfNoColumnBalance, "nocolbal", 0 },\r
- { rtfDocAttr, rtfCvtMailMergeQuote, "cvmme", 0 },\r
- { rtfDocAttr, rtfSuppressTopSpace, "sprstsp", 0 },\r
- { rtfDocAttr, rtfSuppressPreParSpace, "sprsspbf", 0 },\r
- { rtfDocAttr, rtfCombineTblBorders, "otblrul", 0 },\r
- { rtfDocAttr, rtfTranspMetafiles, "transmf", 0 },\r
- { rtfDocAttr, rtfSwapBorders, "swpbdr", 0 },\r
- { rtfDocAttr, rtfShowHardBreaks, "brkfrm", 0 },\r
-\r
- { rtfDocAttr, rtfFormProtected, "formprot", 0 },\r
- { rtfDocAttr, rtfAllProtected, "allprot", 0 },\r
- { rtfDocAttr, rtfFormShading, "formshade", 0 },\r
- { rtfDocAttr, rtfFormDisplay, "formdisp", 0 },\r
- { rtfDocAttr, rtfPrintData, "printdata", 0 },\r
-\r
- { rtfDocAttr, rtfRevProtected, "revprot", 0 },\r
- { rtfDocAttr, rtfRevisions, "revisions", 0 },\r
- { rtfDocAttr, rtfRevDisplay, "revprop", 0 },\r
- { rtfDocAttr, rtfRevBar, "revbar", 0 },\r
-\r
- { rtfDocAttr, rtfAnnotProtected, "annotprot", 0 },\r
-\r
- { rtfDocAttr, rtfRTLDoc, "rtldoc", 0 },\r
- { rtfDocAttr, rtfLTRDoc, "ltrdoc", 0 },\r
-\r
- /*\r
- * Style attributes\r
- */\r
-\r
- { rtfStyleAttr, rtfAdditive, "additive", 0 },\r
- { rtfStyleAttr, rtfBasedOn, "sbasedon", 0 },\r
- { rtfStyleAttr, rtfNext, "snext", 0 },\r
-\r
- /*\r
- * Picture attributes\r
- */\r
-\r
- { rtfPictAttr, rtfMacQD, "macpict", 0 },\r
- { rtfPictAttr, rtfPMMetafile, "pmmetafile", 0 },\r
- { rtfPictAttr, rtfWinMetafile, "wmetafile", 0 },\r
- { rtfPictAttr, rtfDevIndBitmap, "dibitmap", 0 },\r
- { rtfPictAttr, rtfWinBitmap, "wbitmap", 0 },\r
- { rtfPictAttr, rtfPixelBits, "wbmbitspixel", 0 },\r
- { rtfPictAttr, rtfBitmapPlanes, "wbmplanes", 0 },\r
- { rtfPictAttr, rtfBitmapWid, "wbmwidthbytes", 0 },\r
-\r
- { rtfPictAttr, rtfPicWid, "picw", 0 },\r
- { rtfPictAttr, rtfPicHt, "pich", 0 },\r
- { rtfPictAttr, rtfPicGoalWid, "picwgoal", 0 },\r
- { rtfPictAttr, rtfPicGoalHt, "pichgoal", 0 },\r
- /* these two aren't in the spec, but some writers emit them */\r
- { rtfPictAttr, rtfPicGoalWid, "picwGoal", 0 },\r
- { rtfPictAttr, rtfPicGoalHt, "pichGoal", 0 },\r
- { rtfPictAttr, rtfPicScaleX, "picscalex", 0 },\r
- { rtfPictAttr, rtfPicScaleY, "picscaley", 0 },\r
- { rtfPictAttr, rtfPicScaled, "picscaled", 0 },\r
- { rtfPictAttr, rtfPicCropTop, "piccropt", 0 },\r
- { rtfPictAttr, rtfPicCropBottom, "piccropb", 0 },\r
- { rtfPictAttr, rtfPicCropLeft, "piccropl", 0 },\r
- { rtfPictAttr, rtfPicCropRight, "piccropr", 0 },\r
-\r
- { rtfPictAttr, rtfPicMFHasBitmap, "picbmp", 0 },\r
- { rtfPictAttr, rtfPicMFBitsPerPixel, "picbpp", 0 },\r
-\r
- { rtfPictAttr, rtfPicBinary, "bin", 0 },\r
-\r
- /*\r
- * NeXT graphic attributes\r
- */\r
-\r
- { rtfNeXTGrAttr, rtfNeXTGWidth, "width", 0 },\r
- { rtfNeXTGrAttr, rtfNeXTGHeight, "height", 0 },\r
-\r
- /*\r
- * Destinations\r
- */\r
-\r
- { rtfDestination, rtfFontTbl, "fonttbl", 0 },\r
- { rtfDestination, rtfFontAltName, "falt", 0 },\r
- { rtfDestination, rtfEmbeddedFont, "fonteb", 0 },\r
- { rtfDestination, rtfFontFile, "fontfile", 0 },\r
- { rtfDestination, rtfFileTbl, "filetbl", 0 },\r
- { rtfDestination, rtfFileInfo, "file", 0 },\r
- { rtfDestination, rtfColorTbl, "colortbl", 0 },\r
- { rtfDestination, rtfStyleSheet, "stylesheet", 0 },\r
- { rtfDestination, rtfKeyCode, "keycode", 0 },\r
- { rtfDestination, rtfRevisionTbl, "revtbl", 0 },\r
- { rtfDestination, rtfInfo, "info", 0 },\r
- { rtfDestination, rtfITitle, "title", 0 },\r
- { rtfDestination, rtfISubject, "subject", 0 },\r
- { rtfDestination, rtfIAuthor, "author", 0 },\r
- { rtfDestination, rtfIOperator, "operator", 0 },\r
- { rtfDestination, rtfIKeywords, "keywords", 0 },\r
- { rtfDestination, rtfIComment, "comment", 0 },\r
- { rtfDestination, rtfIVersion, "version", 0 },\r
- { rtfDestination, rtfIDoccomm, "doccomm", 0 },\r
- /* \verscomm may not exist -- was seen in earlier spec version */\r
- { rtfDestination, rtfIVerscomm, "verscomm", 0 },\r
- { rtfDestination, rtfNextFile, "nextfile", 0 },\r
- { rtfDestination, rtfTemplate, "template", 0 },\r
- { rtfDestination, rtfFNSep, "ftnsep", 0 },\r
- { rtfDestination, rtfFNContSep, "ftnsepc", 0 },\r
- { rtfDestination, rtfFNContNotice, "ftncn", 0 },\r
- { rtfDestination, rtfENSep, "aftnsep", 0 },\r
- { rtfDestination, rtfENContSep, "aftnsepc", 0 },\r
- { rtfDestination, rtfENContNotice, "aftncn", 0 },\r
- { rtfDestination, rtfPageNumLevel, "pgnhn", 0 },\r
- { rtfDestination, rtfParNumLevelStyle, "pnseclvl", 0 },\r
- { rtfDestination, rtfHeader, "header", 0 },\r
- { rtfDestination, rtfFooter, "footer", 0 },\r
- { rtfDestination, rtfHeaderLeft, "headerl", 0 },\r
- { rtfDestination, rtfHeaderRight, "headerr", 0 },\r
- { rtfDestination, rtfHeaderFirst, "headerf", 0 },\r
- { rtfDestination, rtfFooterLeft, "footerl", 0 },\r
- { rtfDestination, rtfFooterRight, "footerr", 0 },\r
- { rtfDestination, rtfFooterFirst, "footerf", 0 },\r
- { rtfDestination, rtfParNumText, "pntext", 0 },\r
- { rtfDestination, rtfParNumbering, "pn", 0 },\r
- { rtfDestination, rtfParNumTextAfter, "pntexta", 0 },\r
- { rtfDestination, rtfParNumTextBefore, "pntextb", 0 },\r
- { rtfDestination, rtfBookmarkStart, "bkmkstart", 0 },\r
- { rtfDestination, rtfBookmarkEnd, "bkmkend", 0 },\r
- { rtfDestination, rtfPict, "pict", 0 },\r
- { rtfDestination, rtfObject, "object", 0 },\r
- { rtfDestination, rtfObjClass, "objclass", 0 },\r
- { rtfDestination, rtfObjName, "objname", 0 },\r
- { rtfObjAttr, rtfObjTime, "objtime", 0 },\r
- { rtfDestination, rtfObjData, "objdata", 0 },\r
- { rtfDestination, rtfObjAlias, "objalias", 0 },\r
- { rtfDestination, rtfObjSection, "objsect", 0 },\r
- /* objitem and objtopic aren't documented in the spec! */\r
- { rtfDestination, rtfObjItem, "objitem", 0 },\r
- { rtfDestination, rtfObjTopic, "objtopic", 0 },\r
- { rtfDestination, rtfObjResult, "result", 0 },\r
- { rtfDestination, rtfDrawObject, "do", 0 },\r
- { rtfDestination, rtfFootnote, "footnote", 0 },\r
- { rtfDestination, rtfAnnotRefStart, "atrfstart", 0 },\r
- { rtfDestination, rtfAnnotRefEnd, "atrfend", 0 },\r
- { rtfDestination, rtfAnnotID, "atnid", 0 },\r
- { rtfDestination, rtfAnnotAuthor, "atnauthor", 0 },\r
- { rtfDestination, rtfAnnotation, "annotation", 0 },\r
- { rtfDestination, rtfAnnotRef, "atnref", 0 },\r
- { rtfDestination, rtfAnnotTime, "atntime", 0 },\r
- { rtfDestination, rtfAnnotIcon, "atnicn", 0 },\r
- { rtfDestination, rtfField, "field", 0 },\r
- { rtfDestination, rtfFieldInst, "fldinst", 0 },\r
- { rtfDestination, rtfFieldResult, "fldrslt", 0 },\r
- { rtfDestination, rtfDataField, "datafield", 0 },\r
- { rtfDestination, rtfIndex, "xe", 0 },\r
- { rtfDestination, rtfIndexText, "txe", 0 },\r
- { rtfDestination, rtfIndexRange, "rxe", 0 },\r
- { rtfDestination, rtfTOC, "tc", 0 },\r
- { rtfDestination, rtfNeXTGraphic, "NeXTGraphic", 0 },\r
-\r
- /*\r
- * Font families\r
- */\r
-\r
- { rtfFontFamily, rtfFFNil, "fnil", 0 },\r
- { rtfFontFamily, rtfFFRoman, "froman", 0 },\r
- { rtfFontFamily, rtfFFSwiss, "fswiss", 0 },\r
- { rtfFontFamily, rtfFFModern, "fmodern", 0 },\r
- { rtfFontFamily, rtfFFScript, "fscript", 0 },\r
- { rtfFontFamily, rtfFFDecor, "fdecor", 0 },\r
- { rtfFontFamily, rtfFFTech, "ftech", 0 },\r
- { rtfFontFamily, rtfFFBidirectional, "fbidi", 0 },\r
-\r
- /*\r
- * Font attributes\r
- */\r
-\r
- { rtfFontAttr, rtfFontCharSet, "fcharset", 0 },\r
- { rtfFontAttr, rtfFontPitch, "fprq", 0 },\r
- { rtfFontAttr, rtfFontCodePage, "cpg", 0 },\r
- { rtfFontAttr, rtfFTypeNil, "ftnil", 0 },\r
- { rtfFontAttr, rtfFTypeTrueType, "fttruetype", 0 },\r
-\r
- /*\r
- * File table attributes\r
- */\r
-\r
- { rtfFileAttr, rtfFileNum, "fid", 0 },\r
- { rtfFileAttr, rtfFileRelPath, "frelative", 0 },\r
- { rtfFileAttr, rtfFileOSNum, "fosnum", 0 },\r
-\r
- /*\r
- * File sources\r
- */\r
-\r
- { rtfFileSource, rtfSrcMacintosh, "fvalidmac", 0 },\r
- { rtfFileSource, rtfSrcDOS, "fvaliddos", 0 },\r
- { rtfFileSource, rtfSrcNTFS, "fvalidntfs", 0 },\r
- { rtfFileSource, rtfSrcHPFS, "fvalidhpfs", 0 },\r
- { rtfFileSource, rtfSrcNetwork, "fnetwork", 0 },\r
-\r
- /*\r
- * Color names\r
- */\r
-\r
- { rtfColorName, rtfRed, "red", 0 },\r
- { rtfColorName, rtfGreen, "green", 0 },\r
- { rtfColorName, rtfBlue, "blue", 0 },\r
-\r
- /*\r
- * Charset names\r
- */\r
-\r
- { rtfCharSet, rtfMacCharSet, "mac", 0 },\r
- { rtfCharSet, rtfAnsiCharSet, "ansi", 0 },\r
- { rtfCharSet, rtfPcCharSet, "pc", 0 },\r
- { rtfCharSet, rtfPcaCharSet, "pca", 0 },\r
-\r
- /*\r
- * Table attributes\r
- */\r
-\r
- { rtfTblAttr, rtfRowDef, "trowd", 0 },\r
- { rtfTblAttr, rtfRowGapH, "trgaph", 0 },\r
- { rtfTblAttr, rtfCellPos, "cellx", 0 },\r
- { rtfTblAttr, rtfMergeRngFirst, "clmgf", 0 },\r
- { rtfTblAttr, rtfMergePrevious, "clmrg", 0 },\r
-\r
- { rtfTblAttr, rtfRowLeft, "trql", 0 },\r
- { rtfTblAttr, rtfRowRight, "trqr", 0 },\r
- { rtfTblAttr, rtfRowCenter, "trqc", 0 },\r
- { rtfTblAttr, rtfRowLeftEdge, "trleft", 0 },\r
- { rtfTblAttr, rtfRowHt, "trrh", 0 },\r
- { rtfTblAttr, rtfRowHeader, "trhdr", 0 },\r
- { rtfTblAttr, rtfRowKeep, "trkeep", 0 },\r
-\r
- { rtfTblAttr, rtfRTLRow, "rtlrow", 0 },\r
- { rtfTblAttr, rtfLTRRow, "ltrrow", 0 },\r
-\r
- { rtfTblAttr, rtfRowBordTop, "trbrdrt", 0 },\r
- { rtfTblAttr, rtfRowBordLeft, "trbrdrl", 0 },\r
- { rtfTblAttr, rtfRowBordBottom, "trbrdrb", 0 },\r
- { rtfTblAttr, rtfRowBordRight, "trbrdrr", 0 },\r
- { rtfTblAttr, rtfRowBordHoriz, "trbrdrh", 0 },\r
- { rtfTblAttr, rtfRowBordVert, "trbrdrv", 0 },\r
-\r
- { rtfTblAttr, rtfCellBordBottom, "clbrdrb", 0 },\r
- { rtfTblAttr, rtfCellBordTop, "clbrdrt", 0 },\r
- { rtfTblAttr, rtfCellBordLeft, "clbrdrl", 0 },\r
- { rtfTblAttr, rtfCellBordRight, "clbrdrr", 0 },\r
-\r
- { rtfTblAttr, rtfCellShading, "clshdng", 0 },\r
- { rtfTblAttr, rtfCellBgPatH, "clbghoriz", 0 },\r
- { rtfTblAttr, rtfCellBgPatV, "clbgvert", 0 },\r
- { rtfTblAttr, rtfCellFwdDiagBgPat, "clbgfdiag", 0 },\r
- { rtfTblAttr, rtfCellBwdDiagBgPat, "clbgbdiag", 0 },\r
- { rtfTblAttr, rtfCellHatchBgPat, "clbgcross", 0 },\r
- { rtfTblAttr, rtfCellDiagHatchBgPat, "clbgdcross", 0 },\r
- /*\r
- * The spec lists "clbgdkhor", but the corresponding non-cell\r
- * control is "bgdkhoriz". At any rate Macintosh Word seems\r
- * to accept both "clbgdkhor" and "clbgdkhoriz".\r
- */\r
- { rtfTblAttr, rtfCellDarkBgPatH, "clbgdkhoriz", 0 },\r
- { rtfTblAttr, rtfCellDarkBgPatH, "clbgdkhor", 0 },\r
- { rtfTblAttr, rtfCellDarkBgPatV, "clbgdkvert", 0 },\r
- { rtfTblAttr, rtfCellFwdDarkBgPat, "clbgdkfdiag", 0 },\r
- { rtfTblAttr, rtfCellBwdDarkBgPat, "clbgdkbdiag", 0 },\r
- { rtfTblAttr, rtfCellDarkHatchBgPat, "clbgdkcross", 0 },\r
- { rtfTblAttr, rtfCellDarkDiagHatchBgPat, "clbgdkdcross", 0 },\r
- { rtfTblAttr, rtfCellBgPatLineColor, "clcfpat", 0 },\r
- { rtfTblAttr, rtfCellBgPatColor, "clcbpat", 0 },\r
-\r
- /*\r
- * Field attributes\r
- */\r
-\r
- { rtfFieldAttr, rtfFieldDirty, "flddirty", 0 },\r
- { rtfFieldAttr, rtfFieldEdited, "fldedit", 0 },\r
- { rtfFieldAttr, rtfFieldLocked, "fldlock", 0 },\r
- { rtfFieldAttr, rtfFieldPrivate, "fldpriv", 0 },\r
- { rtfFieldAttr, rtfFieldAlt, "fldalt", 0 },\r
-\r
- /*\r
- * Positioning attributes\r
- */\r
-\r
- { rtfPosAttr, rtfAbsWid, "absw", 0 },\r
- { rtfPosAttr, rtfAbsHt, "absh", 0 },\r
-\r
- { rtfPosAttr, rtfRPosMargH, "phmrg", 0 },\r
- { rtfPosAttr, rtfRPosPageH, "phpg", 0 },\r
- { rtfPosAttr, rtfRPosColH, "phcol", 0 },\r
- { rtfPosAttr, rtfPosX, "posx", 0 },\r
- { rtfPosAttr, rtfPosNegX, "posnegx", 0 },\r
- { rtfPosAttr, rtfPosXCenter, "posxc", 0 },\r
- { rtfPosAttr, rtfPosXInside, "posxi", 0 },\r
- { rtfPosAttr, rtfPosXOutSide, "posxo", 0 },\r
- { rtfPosAttr, rtfPosXRight, "posxr", 0 },\r
- { rtfPosAttr, rtfPosXLeft, "posxl", 0 },\r
-\r
- { rtfPosAttr, rtfRPosMargV, "pvmrg", 0 },\r
- { rtfPosAttr, rtfRPosPageV, "pvpg", 0 },\r
- { rtfPosAttr, rtfRPosParaV, "pvpara", 0 },\r
- { rtfPosAttr, rtfPosY, "posy", 0 },\r
- { rtfPosAttr, rtfPosNegY, "posnegy", 0 },\r
- { rtfPosAttr, rtfPosYInline, "posyil", 0 },\r
- { rtfPosAttr, rtfPosYTop, "posyt", 0 },\r
- { rtfPosAttr, rtfPosYCenter, "posyc", 0 },\r
- { rtfPosAttr, rtfPosYBottom, "posyb", 0 },\r
-\r
- { rtfPosAttr, rtfNoWrap, "nowrap", 0 },\r
- { rtfPosAttr, rtfDistFromTextAll, "dxfrtext", 0 },\r
- { rtfPosAttr, rtfDistFromTextX, "dfrmtxtx", 0 },\r
- { rtfPosAttr, rtfDistFromTextY, "dfrmtxty", 0 },\r
- /* \dyfrtext no longer exists in spec 1.2, apparently */\r
- /* replaced by \dfrmtextx and \dfrmtexty. */\r
- { rtfPosAttr, rtfTextDistY, "dyfrtext", 0 },\r
-\r
- { rtfPosAttr, rtfDropCapLines, "dropcapli", 0 },\r
- { rtfPosAttr, rtfDropCapType, "dropcapt", 0 },\r
-\r
- /*\r
- * Object controls\r
- */\r
-\r
- { rtfObjAttr, rtfObjEmb, "objemb", 0 },\r
- { rtfObjAttr, rtfObjLink, "objlink", 0 },\r
- { rtfObjAttr, rtfObjAutoLink, "objautlink", 0 },\r
- { rtfObjAttr, rtfObjSubscriber, "objsub", 0 },\r
- { rtfObjAttr, rtfObjPublisher, "objpub", 0 },\r
- { rtfObjAttr, rtfObjICEmb, "objicemb", 0 },\r
-\r
- { rtfObjAttr, rtfObjLinkSelf, "linkself", 0 },\r
- { rtfObjAttr, rtfObjLock, "objupdate", 0 },\r
- { rtfObjAttr, rtfObjUpdate, "objlock", 0 },\r
-\r
- { rtfObjAttr, rtfObjHt, "objh", 0 },\r
- { rtfObjAttr, rtfObjWid, "objw", 0 },\r
- { rtfObjAttr, rtfObjSetSize, "objsetsize", 0 },\r
- { rtfObjAttr, rtfObjAlign, "objalign", 0 },\r
- { rtfObjAttr, rtfObjTransposeY, "objtransy", 0 },\r
- { rtfObjAttr, rtfObjCropTop, "objcropt", 0 },\r
- { rtfObjAttr, rtfObjCropBottom, "objcropb", 0 },\r
- { rtfObjAttr, rtfObjCropLeft, "objcropl", 0 },\r
- { rtfObjAttr, rtfObjCropRight, "objcropr", 0 },\r
- { rtfObjAttr, rtfObjScaleX, "objscalex", 0 },\r
- { rtfObjAttr, rtfObjScaleY, "objscaley", 0 },\r
-\r
- { rtfObjAttr, rtfObjResRTF, "rsltrtf", 0 },\r
- { rtfObjAttr, rtfObjResPict, "rsltpict", 0 },\r
- { rtfObjAttr, rtfObjResBitmap, "rsltbmp", 0 },\r
- { rtfObjAttr, rtfObjResText, "rslttxt", 0 },\r
- { rtfObjAttr, rtfObjResMerge, "rsltmerge", 0 },\r
-\r
- { rtfObjAttr, rtfObjBookmarkPubObj, "bkmkpub", 0 },\r
- { rtfObjAttr, rtfObjPubAutoUpdate, "pubauto", 0 },\r
-\r
- /*\r
- * Associated character formatting attributes\r
- */\r
-\r
- { rtfACharAttr, rtfACBold, "ab", 0 },\r
- { rtfACharAttr, rtfACAllCaps, "caps", 0 },\r
- { rtfACharAttr, rtfACForeColor, "acf", 0 },\r
- { rtfACharAttr, rtfACSubScript, "adn", 0 },\r
- { rtfACharAttr, rtfACExpand, "aexpnd", 0 },\r
- { rtfACharAttr, rtfACFontNum, "af", 0 },\r
- { rtfACharAttr, rtfACFontSize, "afs", 0 },\r
- { rtfACharAttr, rtfACItalic, "ai", 0 },\r
- { rtfACharAttr, rtfACLanguage, "alang", 0 },\r
- { rtfACharAttr, rtfACOutline, "aoutl", 0 },\r
- { rtfACharAttr, rtfACSmallCaps, "ascaps", 0 },\r
- { rtfACharAttr, rtfACShadow, "ashad", 0 },\r
- { rtfACharAttr, rtfACStrikeThru, "astrike", 0 },\r
- { rtfACharAttr, rtfACUnderline, "aul", 0 },\r
- { rtfACharAttr, rtfACDotUnderline, "auld", 0 },\r
- { rtfACharAttr, rtfACDbUnderline, "auldb", 0 },\r
- { rtfACharAttr, rtfACNoUnderline, "aulnone", 0 },\r
- { rtfACharAttr, rtfACWordUnderline, "aulw", 0 },\r
- { rtfACharAttr, rtfACSuperScript, "aup", 0 },\r
-\r
- /*\r
- * Footnote attributes\r
- */\r
-\r
- { rtfFNoteAttr, rtfFNAlt, "ftnalt", 0 },\r
-\r
- /*\r
- * Key code attributes\r
- */\r
-\r
- { rtfKeyCodeAttr, rtfAltKey, "alt", 0 },\r
- { rtfKeyCodeAttr, rtfShiftKey, "shift", 0 },\r
- { rtfKeyCodeAttr, rtfControlKey, "ctrl", 0 },\r
- { rtfKeyCodeAttr, rtfFunctionKey, "fn", 0 },\r
-\r
- /*\r
- * Bookmark attributes\r
- */\r
-\r
- { rtfBookmarkAttr, rtfBookmarkFirstCol, "bkmkcolf", 0 },\r
- { rtfBookmarkAttr, rtfBookmarkLastCol, "bkmkcoll", 0 },\r
-\r
- /*\r
- * Index entry attributes\r
- */\r
-\r
- { rtfIndexAttr, rtfIndexNumber, "xef", 0 },\r
- { rtfIndexAttr, rtfIndexBold, "bxe", 0 },\r
- { rtfIndexAttr, rtfIndexItalic, "ixe", 0 },\r
-\r
- /*\r
- * Table of contents attributes\r
- */\r
-\r
- { rtfTOCAttr, rtfTOCType, "tcf", 0 },\r
- { rtfTOCAttr, rtfTOCLevel, "tcl", 0 },\r
-\r
- /*\r
- * Drawing object attributes\r
- */\r
-\r
- { rtfDrawAttr, rtfDrawLock, "dolock", 0 },\r
- { rtfDrawAttr, rtfDrawPageRelX, "doxpage", 0 },\r
- { rtfDrawAttr, rtfDrawColumnRelX, "dobxcolumn", 0 },\r
- { rtfDrawAttr, rtfDrawMarginRelX, "dobxmargin", 0 },\r
- { rtfDrawAttr, rtfDrawPageRelY, "dobypage", 0 },\r
- { rtfDrawAttr, rtfDrawColumnRelY, "dobycolumn", 0 },\r
- { rtfDrawAttr, rtfDrawMarginRelY, "dobymargin", 0 },\r
- { rtfDrawAttr, rtfDrawHeight, "dobhgt", 0 },\r
-\r
- { rtfDrawAttr, rtfDrawBeginGroup, "dpgroup", 0 },\r
- { rtfDrawAttr, rtfDrawGroupCount, "dpcount", 0 },\r
- { rtfDrawAttr, rtfDrawEndGroup, "dpendgroup", 0 },\r
- { rtfDrawAttr, rtfDrawArc, "dparc", 0 },\r
- { rtfDrawAttr, rtfDrawCallout, "dpcallout", 0 },\r
- { rtfDrawAttr, rtfDrawEllipse, "dpellipse", 0 },\r
- { rtfDrawAttr, rtfDrawLine, "dpline", 0 },\r
- { rtfDrawAttr, rtfDrawPolygon, "dppolygon", 0 },\r
- { rtfDrawAttr, rtfDrawPolyLine, "dppolyline", 0 },\r
- { rtfDrawAttr, rtfDrawRect, "dprect", 0 },\r
- { rtfDrawAttr, rtfDrawTextBox, "dptxbx", 0 },\r
-\r
- { rtfDrawAttr, rtfDrawOffsetX, "dpx", 0 },\r
- { rtfDrawAttr, rtfDrawSizeX, "dpxsize", 0 },\r
- { rtfDrawAttr, rtfDrawOffsetY, "dpy", 0 },\r
- { rtfDrawAttr, rtfDrawSizeY, "dpysize", 0 },\r
-\r
- { rtfDrawAttr, rtfCOAngle, "dpcoa", 0 },\r
- { rtfDrawAttr, rtfCOAccentBar, "dpcoaccent", 0 },\r
- { rtfDrawAttr, rtfCOBestFit, "dpcobestfit", 0 },\r
- { rtfDrawAttr, rtfCOBorder, "dpcoborder", 0 },\r
- { rtfDrawAttr, rtfCOAttachAbsDist, "dpcodabs", 0 },\r
- { rtfDrawAttr, rtfCOAttachBottom, "dpcodbottom", 0 },\r
- { rtfDrawAttr, rtfCOAttachCenter, "dpcodcenter", 0 },\r
- { rtfDrawAttr, rtfCOAttachTop, "dpcodtop", 0 },\r
- { rtfDrawAttr, rtfCOLength, "dpcolength", 0 },\r
- { rtfDrawAttr, rtfCONegXQuadrant, "dpcominusx", 0 },\r
- { rtfDrawAttr, rtfCONegYQuadrant, "dpcominusy", 0 },\r
- { rtfDrawAttr, rtfCOOffset, "dpcooffset", 0 },\r
- { rtfDrawAttr, rtfCOAttachSmart, "dpcosmarta", 0 },\r
- { rtfDrawAttr, rtfCODoubleLine, "dpcotdouble", 0 },\r
- { rtfDrawAttr, rtfCORightAngle, "dpcotright", 0 },\r
- { rtfDrawAttr, rtfCOSingleLine, "dpcotsingle", 0 },\r
- { rtfDrawAttr, rtfCOTripleLine, "dpcottriple", 0 },\r
-\r
- { rtfDrawAttr, rtfDrawTextBoxMargin, "dptxbxmar", 0 },\r
- { rtfDrawAttr, rtfDrawTextBoxText, "dptxbxtext", 0 },\r
- { rtfDrawAttr, rtfDrawRoundRect, "dproundr", 0 },\r
-\r
- { rtfDrawAttr, rtfDrawPointX, "dpptx", 0 },\r
- { rtfDrawAttr, rtfDrawPointY, "dppty", 0 },\r
- { rtfDrawAttr, rtfDrawPolyCount, "dppolycount", 0 },\r
-\r
- { rtfDrawAttr, rtfDrawArcFlipX, "dparcflipx", 0 },\r
- { rtfDrawAttr, rtfDrawArcFlipY, "dparcflipy", 0 },\r
-\r
- { rtfDrawAttr, rtfDrawLineBlue, "dplinecob", 0 },\r
- { rtfDrawAttr, rtfDrawLineGreen, "dplinecog", 0 },\r
- { rtfDrawAttr, rtfDrawLineRed, "dplinecor", 0 },\r
- { rtfDrawAttr, rtfDrawLinePalette, "dplinepal", 0 },\r
- { rtfDrawAttr, rtfDrawLineDashDot, "dplinedado", 0 },\r
- { rtfDrawAttr, rtfDrawLineDashDotDot, "dplinedadodo", 0 },\r
- { rtfDrawAttr, rtfDrawLineDash, "dplinedash", 0 },\r
- { rtfDrawAttr, rtfDrawLineDot, "dplinedot", 0 },\r
- { rtfDrawAttr, rtfDrawLineGray, "dplinegray", 0 },\r
- { rtfDrawAttr, rtfDrawLineHollow, "dplinehollow", 0 },\r
- { rtfDrawAttr, rtfDrawLineSolid, "dplinesolid", 0 },\r
- { rtfDrawAttr, rtfDrawLineWidth, "dplinew", 0 },\r
-\r
- { rtfDrawAttr, rtfDrawHollowEndArrow, "dpaendhol", 0 },\r
- { rtfDrawAttr, rtfDrawEndArrowLength, "dpaendl", 0 },\r
- { rtfDrawAttr, rtfDrawSolidEndArrow, "dpaendsol", 0 },\r
- { rtfDrawAttr, rtfDrawEndArrowWidth, "dpaendw", 0 },\r
- { rtfDrawAttr, rtfDrawHollowStartArrow,"dpastarthol", 0 },\r
- { rtfDrawAttr, rtfDrawStartArrowLength,"dpastartl", 0 },\r
- { rtfDrawAttr, rtfDrawSolidStartArrow, "dpastartsol", 0 },\r
- { rtfDrawAttr, rtfDrawStartArrowWidth, "dpastartw", 0 },\r
-\r
- { rtfDrawAttr, rtfDrawBgFillBlue, "dpfillbgcb", 0 },\r
- { rtfDrawAttr, rtfDrawBgFillGreen, "dpfillbgcg", 0 },\r
- { rtfDrawAttr, rtfDrawBgFillRed, "dpfillbgcr", 0 },\r
- { rtfDrawAttr, rtfDrawBgFillPalette, "dpfillbgpal", 0 },\r
- { rtfDrawAttr, rtfDrawBgFillGray, "dpfillbggray", 0 },\r
- { rtfDrawAttr, rtfDrawFgFillBlue, "dpfillfgcb", 0 },\r
- { rtfDrawAttr, rtfDrawFgFillGreen, "dpfillfgcg", 0 },\r
- { rtfDrawAttr, rtfDrawFgFillRed, "dpfillfgcr", 0 },\r
- { rtfDrawAttr, rtfDrawFgFillPalette, "dpfillfgpal", 0 },\r
- { rtfDrawAttr, rtfDrawFgFillGray, "dpfillfggray", 0 },\r
- { rtfDrawAttr, rtfDrawFillPatIndex, "dpfillpat", 0 },\r
-\r
- { rtfDrawAttr, rtfDrawShadow, "dpshadow", 0 },\r
- { rtfDrawAttr, rtfDrawShadowXOffset, "dpshadx", 0 },\r
- { rtfDrawAttr, rtfDrawShadowYOffset, "dpshady", 0 },\r
-\r
- { rtfVersion, -1, "rtf", 0 },\r
- { rtfDefFont, -1, "deff", 0 },\r
-\r
- { 0, -1, (char *) NULL, 0 }\r
-};\r
-\r
-\r
-/*\r
- * Initialize lookup table hash values. Only need to do this once.\r
- */\r
-\r
-static void LookupInit(void)\r
-{\r
-static int inited = 0;\r
-RTFKey *rp;\r
-\r
- if (inited == 0)\r
- {\r
- for (rp = rtfKey; rp->rtfKStr != (char *) NULL; rp++)\r
- rp->rtfKHash = Hash (rp->rtfKStr);\r
- ++inited;\r
- }\r
-}\r
-\r
-\r
-/*\r
- * Determine major and minor number of control token. If it's\r
- * not found, the class turns into rtfUnknown.\r
- */\r
-\r
-static void Lookup(RTF_Info *info, char *s)\r
-{\r
-RTFKey *rp;\r
-int hash;\r
-\r
- TRACE("\n");\r
- ++s; /* skip over the leading \ character */\r
- hash = Hash (s);\r
- for (rp = rtfKey; rp->rtfKStr != (char *) NULL; rp++)\r
- {\r
- if (hash == rp->rtfKHash && strcmp (s, rp->rtfKStr) == 0)\r
- {\r
- info->rtfClass = rtfControl;\r
- info->rtfMajor = rp->rtfKMajor;\r
- info->rtfMinor = rp->rtfKMinor;\r
- return;\r
- }\r
- }\r
- info->rtfClass = rtfUnknown;\r
-}\r
-\r
-\r
-/*\r
- * Compute hash value of symbol\r
- */\r
-\r
-static int Hash(char *s)\r
-{\r
-char c;\r
-int val = 0;\r
-\r
- while ((c = *s++) != '\0')\r
- val += (int) c;\r
- return (val);\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-/*\r
- * Memory allocation routines\r
- */\r
-\r
-\r
-/*\r
- * Return pointer to block of size bytes, or NULL if there's\r
- * not enough memory available.\r
- *\r
- * This is called through RTFAlloc(), a define which coerces the\r
- * argument to int. This avoids the persistent problem of allocation\r
- * failing under THINK C when a long is passed.\r
- */\r
-\r
-char *_RTFAlloc(int size)\r
-{\r
- return HeapAlloc(RICHED32_hHeap, 0, size);\r
-}\r
-\r
-\r
-/*\r
- * Saves a string on the heap and returns a pointer to it.\r
- */\r
-\r
-\r
-char *RTFStrSave(char *s)\r
-{\r
-char *p;\r
-\r
- if ((p = RTFAlloc ((int) (strlen (s) + 1))) == (char *) NULL)\r
- return ((char *) NULL);\r
- return (strcpy (p, s));\r
-}\r
-\r
-\r
-void RTFFree(char *p)\r
-{\r
- HeapFree(RICHED32_hHeap, 0, p);\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-\r
-/*\r
- * Token comparison routines\r
- */\r
-\r
-int RTFCheckCM(RTF_Info *info, int class, int major)\r
-{\r
- return (info->rtfClass == class && info->rtfMajor == major);\r
-}\r
-\r
-\r
-int RTFCheckCMM(RTF_Info *info, int class, int major, int minor)\r
-{\r
- return (info->rtfClass == class && info->rtfMajor == major && info->rtfMinor == minor);\r
-}\r
-\r
-\r
-int RTFCheckMM(RTF_Info *info, int major, int minor)\r
-{\r
- return (info->rtfMajor == major && info->rtfMinor == minor);\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-\r
-int RTFCharToHex(char c)\r
-{\r
- if (isupper (c))\r
- c = tolower (c);\r
- if (isdigit (c))\r
- return (c - '0'); /* '0'..'9' */\r
- return (c - 'a' + 10); /* 'a'..'f' */\r
-}\r
-\r
-\r
-int RTFHexToChar(int i)\r
-{\r
- if (i < 10)\r
- return (i + '0');\r
- return (i - 10 + 'a');\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-/*\r
- * RTFReadOutputMap() -- Read output translation map\r
- */\r
-\r
-/*\r
- * Read in an array describing the relation between the standard character set\r
- * and an RTF translator's corresponding output sequences. Each line consists\r
- * of a standard character name and the output sequence for that character.\r
- *\r
- * outMap is an array of strings into which the sequences should be placed.\r
- * It should be declared like this in the calling program:\r
- *\r
- * char *outMap[rtfSC_MaxChar];\r
- *\r
- * reinit should be non-zero if outMap should be initialized\r
- * zero otherwise.\r
- *\r
- */\r
-\r
-int RTFReadOutputMap(RTF_Info *info, char *outMap[], int reinit)\r
-{\r
- unsigned int i;\r
- int stdCode;\r
- char *name, *seq;\r
-\r
- if (reinit)\r
- {\r
- for (i = 0; i < rtfSC_MaxChar; i++)\r
- {\r
- outMap[i] = (char *) NULL;\r
- }\r
- }\r
-\r
- for (i=0 ;i< sizeof(text_map)/sizeof(char*); i+=2)\r
- {\r
- name = text_map[i];\r
- seq = text_map[i+1];\r
- stdCode = RTFStdCharCode( info, name );\r
- outMap[stdCode] = seq;\r
- }\r
-\r
- return (1);\r
-}\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-/*\r
- * Open a library file.\r
- */\r
-\r
-\r
-void RTFSetOpenLibFileProc(RTF_Info *info, FILE *(*proc)())\r
-{\r
- info->libFileOpen = proc;\r
-}\r
-\r
-\r
-FILE *RTFOpenLibFile (RTF_Info *info, char *file, char *mode)\r
-{\r
- if (info->libFileOpen == NULL)\r
- return ((FILE *) NULL);\r
- return ((*info->libFileOpen) (file, mode));\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-/*\r
- * Print message. Default is to send message to stderr\r
- * but this may be overridden with RTFSetMsgProc().\r
- *\r
- * Message should include linefeeds as necessary. If the default\r
- * function is overridden, the overriding function may want to\r
- * map linefeeds to another line ending character or sequence if\r
- * the host system doesn't use linefeeds.\r
- */\r
-\r
-\r
-void RTFMsg (RTF_Info *info, char *fmt, ...)\r
-{\r
-char buf[rtfBufSiz];\r
-\r
- va_list args;\r
- va_start (args,fmt);\r
- vsprintf (buf, fmt, args);\r
- va_end (args);\r
- MESSAGE( "%s", buf);\r
-}\r
-\r
-\r
-/* ---------------------------------------------------------------------- */\r
-\r
-\r
-/*\r
- * Process termination. Print error message and exit. Also prints\r
- * current token, and current input line number and position within\r
- * line if any input has been read from the current file. (No input\r
- * has been read if prevChar is EOF).\r
- */\r
-\r
-static void DefaultPanicProc(RTF_Info *info, char *s)\r
-{\r
- MESSAGE( "%s", s);\r
- /*exit (1);*/\r
-}\r
-\r
-\r
-\r
-void RTFPanic(RTF_Info *info, char *fmt, ...)\r
-{\r
-char buf[rtfBufSiz];\r
-\r
- va_list args;\r
- va_start (args,fmt);\r
- vsprintf (buf, fmt, args);\r
- va_end (args);\r
- (void) strcat (buf, "\n");\r
- if (info->prevChar != EOF && info->rtfTextBuf != (char *) NULL)\r
- {\r
- sprintf (buf + strlen (buf),\r
- "Last token read was \"%s\" near line %ld, position %d.\n",\r
- info->rtfTextBuf, info->rtfLineNum, info->rtfLinePos);\r
- }\r
- DefaultPanicProc(info, buf);\r
-}\r
+++ /dev/null
-#ifndef _RTF\r
-#define _RTF\r
-\r
-#include <stdarg.h>\r
-#include <stdio.h>\r
-\r
-#include "windef.h"\r
-#include "winbase.h"\r
-#include "wingdi.h"\r
-#include "winuser.h"\r
-#include "richedit.h"\r
-\r
-\r
-/* The following defines are automatically generated. Do not edit. */\r
-\r
-\r
-/* These must be sequential beginning from zero */\r
-\r
-#define rtfSC_nothing 0\r
-#define rtfSC_space 1\r
-#define rtfSC_exclam 2\r
-#define rtfSC_quotedbl 3\r
-#define rtfSC_numbersign 4\r
-#define rtfSC_dollar 5\r
-#define rtfSC_percent 6\r
-#define rtfSC_ampersand 7\r
-#define rtfSC_quoteright 8\r
-#define rtfSC_parenleft 9\r
-#define rtfSC_parenright 10\r
-#define rtfSC_asterisk 11\r
-#define rtfSC_plus 12\r
-#define rtfSC_comma 13\r
-#define rtfSC_hyphen 14\r
-#define rtfSC_period 15\r
-#define rtfSC_slash 16\r
-#define rtfSC_zero 17\r
-#define rtfSC_one 18\r
-#define rtfSC_two 19\r
-#define rtfSC_three 20\r
-#define rtfSC_four 21\r
-#define rtfSC_five 22\r
-#define rtfSC_six 23\r
-#define rtfSC_seven 24\r
-#define rtfSC_eight 25\r
-#define rtfSC_nine 26\r
-#define rtfSC_colon 27\r
-#define rtfSC_semicolon 28\r
-#define rtfSC_less 29\r
-#define rtfSC_equal 30\r
-#define rtfSC_greater 31\r
-#define rtfSC_question 32\r
-#define rtfSC_at 33\r
-#define rtfSC_A 34\r
-#define rtfSC_B 35\r
-#define rtfSC_C 36\r
-#define rtfSC_D 37\r
-#define rtfSC_E 38\r
-#define rtfSC_F 39\r
-#define rtfSC_G 40\r
-#define rtfSC_H 41\r
-#define rtfSC_I 42\r
-#define rtfSC_J 43\r
-#define rtfSC_K 44\r
-#define rtfSC_L 45\r
-#define rtfSC_M 46\r
-#define rtfSC_N 47\r
-#define rtfSC_O 48\r
-#define rtfSC_P 49\r
-#define rtfSC_Q 50\r
-#define rtfSC_R 51\r
-#define rtfSC_S 52\r
-#define rtfSC_T 53\r
-#define rtfSC_U 54\r
-#define rtfSC_V 55\r
-#define rtfSC_W 56\r
-#define rtfSC_X 57\r
-#define rtfSC_Y 58\r
-#define rtfSC_Z 59\r
-#define rtfSC_bracketleft 60\r
-#define rtfSC_backslash 61\r
-#define rtfSC_bracketright 62\r
-#define rtfSC_asciicircum 63\r
-#define rtfSC_underscore 64\r
-#define rtfSC_quoteleft 65\r
-#define rtfSC_a 66\r
-#define rtfSC_b 67\r
-#define rtfSC_c 68\r
-#define rtfSC_d 69\r
-#define rtfSC_e 70\r
-#define rtfSC_f 71\r
-#define rtfSC_g 72\r
-#define rtfSC_h 73\r
-#define rtfSC_i 74\r
-#define rtfSC_j 75\r
-#define rtfSC_k 76\r
-#define rtfSC_l 77\r
-#define rtfSC_m 78\r
-#define rtfSC_n 79\r
-#define rtfSC_o 80\r
-#define rtfSC_p 81\r
-#define rtfSC_q 82\r
-#define rtfSC_r 83\r
-#define rtfSC_s 84\r
-#define rtfSC_t 85\r
-#define rtfSC_u 86\r
-#define rtfSC_v 87\r
-#define rtfSC_w 88\r
-#define rtfSC_x 89\r
-#define rtfSC_y 90\r
-#define rtfSC_z 91\r
-#define rtfSC_braceleft 92\r
-#define rtfSC_bar 93\r
-#define rtfSC_braceright 94\r
-#define rtfSC_asciitilde 95\r
-#define rtfSC_exclamdown 96\r
-#define rtfSC_cent 97\r
-#define rtfSC_sterling 98\r
-#define rtfSC_fraction 99\r
-#define rtfSC_yen 100\r
-#define rtfSC_florin 101\r
-#define rtfSC_section 102\r
-#define rtfSC_currency 103\r
-#define rtfSC_quotedblleft 104\r
-#define rtfSC_guillemotleft 105\r
-#define rtfSC_guilsinglleft 106\r
-#define rtfSC_guilsinglright 107\r
-#define rtfSC_fi 108\r
-#define rtfSC_fl 109\r
-#define rtfSC_endash 110\r
-#define rtfSC_dagger 111\r
-#define rtfSC_daggerdbl 112\r
-#define rtfSC_periodcentered 113\r
-#define rtfSC_paragraph 114\r
-#define rtfSC_bullet 115\r
-#define rtfSC_quotesinglbase 116\r
-#define rtfSC_quotedblbase 117\r
-#define rtfSC_quotedblright 118\r
-#define rtfSC_guillemotright 119\r
-#define rtfSC_ellipsis 120\r
-#define rtfSC_perthousand 121\r
-#define rtfSC_questiondown 122\r
-#define rtfSC_grave 123\r
-#define rtfSC_acute 124\r
-#define rtfSC_circumflex 125\r
-#define rtfSC_tilde 126\r
-#define rtfSC_macron 127\r
-#define rtfSC_breve 128\r
-#define rtfSC_dotaccent 129\r
-#define rtfSC_dieresis 130\r
-#define rtfSC_ring 131\r
-#define rtfSC_cedilla 132\r
-#define rtfSC_hungarumlaut 133\r
-#define rtfSC_ogonek 134\r
-#define rtfSC_caron 135\r
-#define rtfSC_emdash 136\r
-#define rtfSC_AE 137\r
-#define rtfSC_ordfeminine 138\r
-#define rtfSC_Lslash 139\r
-#define rtfSC_Oslash 140\r
-#define rtfSC_OE 141\r
-#define rtfSC_ordmasculine 142\r
-#define rtfSC_ae 143\r
-#define rtfSC_dotlessi 144\r
-#define rtfSC_lslash 145\r
-#define rtfSC_oslash 146\r
-#define rtfSC_oe 147\r
-#define rtfSC_germandbls 148\r
-#define rtfSC_Aacute 149\r
-#define rtfSC_Acircumflex 150\r
-#define rtfSC_Adieresis 151\r
-#define rtfSC_Agrave 152\r
-#define rtfSC_Aring 153\r
-#define rtfSC_Atilde 154\r
-#define rtfSC_Ccedilla 155\r
-#define rtfSC_Eacute 156\r
-#define rtfSC_Ecircumflex 157\r
-#define rtfSC_Edieresis 158\r
-#define rtfSC_Egrave 159\r
-#define rtfSC_Eth 160\r
-#define rtfSC_Iacute 161\r
-#define rtfSC_Icircumflex 162\r
-#define rtfSC_Idieresis 163\r
-#define rtfSC_Igrave 164\r
-#define rtfSC_Ntilde 165\r
-#define rtfSC_Oacute 166\r
-#define rtfSC_Ocircumflex 167\r
-#define rtfSC_Odieresis 168\r
-#define rtfSC_Ograve 169\r
-#define rtfSC_Otilde 170\r
-#define rtfSC_Scaron 171\r
-#define rtfSC_Thorn 172\r
-#define rtfSC_Uacute 173\r
-#define rtfSC_Ucircumflex 174\r
-#define rtfSC_Udieresis 175\r
-#define rtfSC_Ugrave 176\r
-#define rtfSC_Yacute 177\r
-#define rtfSC_Ydieresis 178\r
-#define rtfSC_aacute 179\r
-#define rtfSC_acircumflex 180\r
-#define rtfSC_adieresis 181\r
-#define rtfSC_agrave 182\r
-#define rtfSC_aring 183\r
-#define rtfSC_atilde 184\r
-#define rtfSC_brokenbar 185\r
-#define rtfSC_ccedilla 186\r
-#define rtfSC_copyright 187\r
-#define rtfSC_degree 188\r
-#define rtfSC_divide 189\r
-#define rtfSC_eacute 190\r
-#define rtfSC_ecircumflex 191\r
-#define rtfSC_edieresis 192\r
-#define rtfSC_egrave 193\r
-#define rtfSC_eth 194\r
-#define rtfSC_iacute 195\r
-#define rtfSC_icircumflex 196\r
-#define rtfSC_idieresis 197\r
-#define rtfSC_igrave 198\r
-#define rtfSC_logicalnot 199\r
-#define rtfSC_minus 200\r
-#define rtfSC_multiply 201\r
-#define rtfSC_ntilde 202\r
-#define rtfSC_oacute 203\r
-#define rtfSC_ocircumflex 204\r
-#define rtfSC_odieresis 205\r
-#define rtfSC_ograve 206\r
-#define rtfSC_onehalf 207\r
-#define rtfSC_onequarter 208\r
-#define rtfSC_onesuperior 209\r
-#define rtfSC_otilde 210\r
-#define rtfSC_plusminus 211\r
-#define rtfSC_registered 212\r
-#define rtfSC_thorn 213\r
-#define rtfSC_threequarters 214\r
-#define rtfSC_threesuperior 215\r
-#define rtfSC_trademark 216\r
-#define rtfSC_twosuperior 217\r
-#define rtfSC_uacute 218\r
-#define rtfSC_ucircumflex 219\r
-#define rtfSC_udieresis 220\r
-#define rtfSC_ugrave 221\r
-#define rtfSC_yacute 222\r
-#define rtfSC_ydieresis 223\r
-#define rtfSC_Alpha 224\r
-#define rtfSC_Beta 225\r
-#define rtfSC_Chi 226\r
-#define rtfSC_Delta 227\r
-#define rtfSC_Epsilon 228\r
-#define rtfSC_Phi 229\r
-#define rtfSC_Gamma 230\r
-#define rtfSC_Eta 231\r
-#define rtfSC_Iota 232\r
-#define rtfSC_Kappa 233\r
-#define rtfSC_Lambda 234\r
-#define rtfSC_Mu 235\r
-#define rtfSC_Nu 236\r
-#define rtfSC_Omicron 237\r
-#define rtfSC_Pi 238\r
-#define rtfSC_Theta 239\r
-#define rtfSC_Rho 240\r
-#define rtfSC_Sigma 241\r
-#define rtfSC_Tau 242\r
-#define rtfSC_Upsilon 243\r
-#define rtfSC_varUpsilon 244\r
-#define rtfSC_Omega 245\r
-#define rtfSC_Xi 246\r
-#define rtfSC_Psi 247\r
-#define rtfSC_Zeta 248\r
-#define rtfSC_alpha 249\r
-#define rtfSC_beta 250\r
-#define rtfSC_chi 251\r
-#define rtfSC_delta 252\r
-#define rtfSC_epsilon 253\r
-#define rtfSC_phi 254\r
-#define rtfSC_varphi 255\r
-#define rtfSC_gamma 256\r
-#define rtfSC_eta 257\r
-#define rtfSC_iota 258\r
-#define rtfSC_kappa 259\r
-#define rtfSC_lambda 260\r
-#define rtfSC_mu 261\r
-#define rtfSC_nu 262\r
-#define rtfSC_omicron 263\r
-#define rtfSC_pi 264\r
-#define rtfSC_varpi 265\r
-#define rtfSC_theta 266\r
-#define rtfSC_vartheta 267\r
-#define rtfSC_rho 268\r
-#define rtfSC_sigma 269\r
-#define rtfSC_varsigma 270\r
-#define rtfSC_tau 271\r
-#define rtfSC_upsilon 272\r
-#define rtfSC_omega 273\r
-#define rtfSC_xi 274\r
-#define rtfSC_psi 275\r
-#define rtfSC_zeta 276\r
-#define rtfSC_nobrkspace 277\r
-#define rtfSC_nobrkhyphen 278\r
-#define rtfSC_lessequal 279\r
-#define rtfSC_greaterequal 280\r
-#define rtfSC_infinity 281\r
-#define rtfSC_integral 282\r
-#define rtfSC_notequal 283\r
-#define rtfSC_radical 284\r
-#define rtfSC_radicalex 285\r
-#define rtfSC_approxequal 286\r
-#define rtfSC_apple 287\r
-#define rtfSC_partialdiff 288\r
-#define rtfSC_opthyphen 289\r
-#define rtfSC_formula 290\r
-#define rtfSC_lozenge 291\r
-#define rtfSC_universal 292\r
-#define rtfSC_existential 293\r
-#define rtfSC_suchthat 294\r
-#define rtfSC_congruent 295\r
-#define rtfSC_therefore 296\r
-#define rtfSC_perpendicular 297\r
-#define rtfSC_minute 298\r
-#define rtfSC_club 299\r
-#define rtfSC_diamond 300\r
-#define rtfSC_heart 301\r
-#define rtfSC_spade 302\r
-#define rtfSC_arrowboth 303\r
-#define rtfSC_arrowleft 304\r
-#define rtfSC_arrowup 305\r
-#define rtfSC_arrowright 306\r
-#define rtfSC_arrowdown 307\r
-#define rtfSC_second 308\r
-#define rtfSC_proportional 309\r
-#define rtfSC_equivalence 310\r
-#define rtfSC_arrowvertex 311\r
-#define rtfSC_arrowhorizex 312\r
-#define rtfSC_carriagereturn 313\r
-#define rtfSC_aleph 314\r
-#define rtfSC_Ifraktur 315\r
-#define rtfSC_Rfraktur 316\r
-#define rtfSC_weierstrass 317\r
-#define rtfSC_circlemultiply 318\r
-#define rtfSC_circleplus 319\r
-#define rtfSC_emptyset 320\r
-#define rtfSC_intersection 321\r
-#define rtfSC_union 322\r
-#define rtfSC_propersuperset 323\r
-#define rtfSC_reflexsuperset 324\r
-#define rtfSC_notsubset 325\r
-#define rtfSC_propersubset 326\r
-#define rtfSC_reflexsubset 327\r
-#define rtfSC_element 328\r
-#define rtfSC_notelement 329\r
-#define rtfSC_angle 330\r
-#define rtfSC_gradient 331\r
-#define rtfSC_product 332\r
-#define rtfSC_logicaland 333\r
-#define rtfSC_logicalor 334\r
-#define rtfSC_arrowdblboth 335\r
-#define rtfSC_arrowdblleft 336\r
-#define rtfSC_arrowdblup 337\r
-#define rtfSC_arrowdblright 338\r
-#define rtfSC_arrowdbldown 339\r
-#define rtfSC_angleleft 340\r
-#define rtfSC_registersans 341\r
-#define rtfSC_copyrightsans 342\r
-#define rtfSC_trademarksans 343\r
-#define rtfSC_angleright 344\r
-#define rtfSC_mathplus 345\r
-#define rtfSC_mathminus 346\r
-#define rtfSC_mathasterisk 347\r
-#define rtfSC_mathnumbersign 348\r
-#define rtfSC_dotmath 349\r
-#define rtfSC_mathequal 350\r
-#define rtfSC_mathtilde 351\r
-\r
-#define rtfSC_MaxChar 352\r
-/*\r
- * rtf.h - RTF document processing stuff. Release 1.10.\r
- */\r
-\r
-\r
-/*\r
- * Twentieths of a point (twips) per inch (Many RTF measurements\r
- * are in twips per inch (tpi) units). Assumes 72 points/inch.\r
- */\r
-\r
-# define rtfTpi 1440\r
-\r
-/*\r
- * RTF buffer size (avoids BUFSIZ, which differs across systems)\r
- */\r
-\r
-# define rtfBufSiz 1024\r
-\r
-/*\r
- * Tokens are associated with up to three classification numbers:\r
- *\r
- * Class number: Broadest (least detailed) breakdown. For programs\r
- * that only care about gross token distinctions.\r
- * Major/minor numbers: Within their class, tokens have a major\r
- * number, and may also have a minor number to further\r
- * distinquish tokens with the same major number.\r
- *\r
- * *** Class, major and minor token numbers are all >= 0 ***\r
- *\r
- * Tokens that can't be classified are put in the "unknown" class.\r
- * For such, the major and minor numbers are meaningless, although\r
- * rtfTextBuf may be of interest then.\r
- *\r
- * Text tokens are a single character, and the major number indicates\r
- * the character value (note: can be non-ascii, i.e., greater than 127).\r
- * There is no minor number.\r
- *\r
- * Control symbols may have a parameter value, which will be found in\r
- * rtfParam. If no parameter was given, rtfParam = rtfNoParam.\r
- *\r
- * RTFGetToken() return value is the class number, but it sets all the\r
- * global token vars.\r
- *\r
- * rtfEOF is a fake token used by the reader; the writer never sees\r
- * it (except in the token reader hook, if it installs one).\r
- */\r
-\r
-\r
-# ifdef THINK_C\r
-# define rtfNoParam (-32768) /* 16-bit max. neg. value */\r
-# endif\r
-# ifndef rtfNoParam\r
-# define rtfNoParam (-1000000)\r
-# endif\r
-\r
-\r
-\r
-\r
-/*\r
- * For some reason, the no-style number is 222\r
- */\r
-\r
-# define rtfNoStyleNum 222\r
-# define rtfNormalStyleNum 0\r
-\r
-\r
-/*\r
- * Token classes (must be zero-based and sequential)\r
- */\r
-\r
-# define rtfUnknown 0\r
-# define rtfGroup 1\r
-# define rtfText 2\r
-# define rtfControl 3\r
-# define rtfEOF 4\r
-# define rtfMaxClass 5 /* highest class + 1 */\r
-\r
-/*\r
- * Group class major numbers\r
- */\r
-\r
-# define rtfBeginGroup 0\r
-# define rtfEndGroup 1\r
-\r
-/*\r
- * Control class major and minor numbers.\r
- */\r
-\r
-# define rtfVersion 0\r
-\r
-# define rtfDefFont 1\r
-\r
-# define rtfCharSet 2\r
-# define rtfAnsiCharSet 0\r
-# define rtfMacCharSet 1\r
-# define rtfPcCharSet 2\r
-# define rtfPcaCharSet 3\r
-\r
-\r
-/* destination minor numbers should be zero-based and sequential */\r
-\r
-# define rtfDestination 3\r
-# define rtfFontTbl 0\r
-# define rtfFontAltName 1 /* new in 1.10 */\r
-# define rtfEmbeddedFont 2 /* new in 1.10 */\r
-# define rtfFontFile 3 /* new in 1.10 */\r
-# define rtfFileTbl 4 /* new in 1.10 */\r
-# define rtfFileInfo 5 /* new in 1.10 */\r
-# define rtfColorTbl 6\r
-# define rtfStyleSheet 7\r
-# define rtfKeyCode 8\r
-# define rtfRevisionTbl 9 /* new in 1.10 */\r
-# define rtfInfo 10\r
-# define rtfITitle 11\r
-# define rtfISubject 12\r
-# define rtfIAuthor 13\r
-# define rtfIOperator 14\r
-# define rtfIKeywords 15\r
-# define rtfIComment 16\r
-# define rtfIVersion 17\r
-# define rtfIDoccomm 18\r
-# define rtfIVerscomm 19\r
-# define rtfNextFile 20 /* reclassified in 1.10 */\r
-# define rtfTemplate 21 /* reclassified in 1.10 */\r
-# define rtfFNSep 22\r
-# define rtfFNContSep 23\r
-# define rtfFNContNotice 24\r
-# define rtfENSep 25 /* new in 1.10 */\r
-# define rtfENContSep 26 /* new in 1.10 */\r
-# define rtfENContNotice 27 /* new in 1.10 */\r
-# define rtfPageNumLevel 28 /* new in 1.10 */\r
-# define rtfParNumLevelStyle 29 /* new in 1.10 */\r
-# define rtfHeader 30\r
-# define rtfFooter 31\r
-# define rtfHeaderLeft 32\r
-# define rtfHeaderRight 33\r
-# define rtfHeaderFirst 34\r
-# define rtfFooterLeft 35\r
-# define rtfFooterRight 36\r
-# define rtfFooterFirst 37\r
-# define rtfParNumText 38 /* new in 1.10 */\r
-# define rtfParNumbering 39 /* new in 1.10 */\r
-# define rtfParNumTextAfter 40 /* new in 1.10 */\r
-# define rtfParNumTextBefore 41 /* new in 1.10 */\r
-# define rtfBookmarkStart 42\r
-# define rtfBookmarkEnd 43\r
-# define rtfPict 44\r
-# define rtfObject 45\r
-# define rtfObjClass 46\r
-# define rtfObjName 47\r
-# define rtfObjTime 48 /* new in 1.10 */\r
-# define rtfObjData 49\r
-# define rtfObjAlias 50\r
-# define rtfObjSection 51\r
-# define rtfObjResult 52\r
-# define rtfObjItem 53 /* new in 1.10 */\r
-# define rtfObjTopic 54 /* new in 1.10 */\r
-# define rtfDrawObject 55 /* new in 1.10 */\r
-# define rtfFootnote 56\r
-# define rtfAnnotRefStart 57 /* new in 1.10 */\r
-# define rtfAnnotRefEnd 58 /* new in 1.10 */\r
-# define rtfAnnotID 59 /* reclassified in 1.10 */\r
-# define rtfAnnotAuthor 60 /* new in 1.10 */\r
-# define rtfAnnotation 61 /* reclassified in 1.10 */\r
-# define rtfAnnotRef 62 /* new in 1.10 */\r
-# define rtfAnnotTime 63 /* new in 1.10 */\r
-# define rtfAnnotIcon 64 /* new in 1.10 */\r
-# define rtfField 65\r
-# define rtfFieldInst 66\r
-# define rtfFieldResult 67\r
-# define rtfDataField 68 /* new in 1.10 */\r
-# define rtfIndex 69\r
-# define rtfIndexText 70\r
-# define rtfIndexRange 71\r
-# define rtfTOC 72\r
-# define rtfNeXTGraphic 73\r
-# define rtfMaxDestination 74 /* highest dest + 1 */\r
-\r
-# define rtfFontFamily 4\r
-# define rtfFFNil 0\r
-# define rtfFFRoman 1\r
-# define rtfFFSwiss 2\r
-# define rtfFFModern 3\r
-# define rtfFFScript 4\r
-# define rtfFFDecor 5\r
-# define rtfFFTech 6\r
-# define rtfFFBidirectional 7 /* new in 1.10 */\r
-\r
-# define rtfColorName 5\r
-# define rtfRed 0\r
-# define rtfGreen 1\r
-# define rtfBlue 2\r
-\r
-# define rtfSpecialChar 6\r
- /* special chars seen in \info destination */\r
-# define rtfIIntVersion 0\r
-# define rtfICreateTime 1\r
-# define rtfIRevisionTime 2\r
-# define rtfIPrintTime 3\r
-# define rtfIBackupTime 4\r
-# define rtfIEditTime 5\r
-# define rtfIYear 6\r
-# define rtfIMonth 7\r
-# define rtfIDay 8\r
-# define rtfIHour 9\r
-# define rtfIMinute 10\r
-# define rtfISecond 11 /* new in 1.10 */\r
-# define rtfINPages 12\r
-# define rtfINWords 13\r
-# define rtfINChars 14\r
-# define rtfIIntID 15\r
- /* other special chars */\r
-# define rtfCurHeadDate 16\r
-# define rtfCurHeadDateLong 17\r
-# define rtfCurHeadDateAbbrev 18\r
-# define rtfCurHeadTime 19\r
-# define rtfCurHeadPage 20\r
-# define rtfSectNum 21 /* new in 1.10 */\r
-# define rtfCurFNote 22\r
-# define rtfCurAnnotRef 23\r
-# define rtfFNoteSep 24\r
-# define rtfFNoteCont 25\r
-# define rtfCell 26\r
-# define rtfRow 27\r
-# define rtfPar 28\r
-# define rtfSect 29\r
-# define rtfPage 30\r
-# define rtfColumn 31\r
-# define rtfLine 32\r
-# define rtfSoftPage 33 /* new in 1.10 */\r
-# define rtfSoftColumn 34 /* new in 1.10 */\r
-# define rtfSoftLine 35 /* new in 1.10 */\r
-# define rtfSoftLineHt 36 /* new in 1.10 */\r
-# define rtfTab 37\r
-# define rtfEmDash 38\r
-# define rtfEnDash 39\r
-# define rtfEmSpace 40 /* new in 1.10 */\r
-# define rtfEnSpace 41 /* new in 1.10 */\r
-# define rtfBullet 42\r
-# define rtfLQuote 43\r
-# define rtfRQuote 44\r
-# define rtfLDblQuote 45\r
-# define rtfRDblQuote 46\r
-# define rtfFormula 47\r
-# define rtfNoBrkSpace 49\r
-# define rtfNoReqHyphen 50\r
-# define rtfNoBrkHyphen 51\r
-# define rtfOptDest 52\r
-# define rtfLTRMark 53 /* new in 1.10 */\r
-# define rtfRTLMark 54 /* new in 1.10 */\r
-# define rtfNoWidthJoiner 55 /* new in 1.10 */\r
-# define rtfNoWidthNonJoiner 56 /* new in 1.10 */\r
-# define rtfCurHeadPict 57 /* valid? */\r
-/*# define rtfCurAnnot 58*/ /* apparently not used */\r
-\r
-# define rtfStyleAttr 7\r
-# define rtfAdditive 0 /* new in 1.10 */\r
-# define rtfBasedOn 1\r
-# define rtfNext 2\r
-\r
-# define rtfDocAttr 8\r
-# define rtfDefTab 0\r
-# define rtfHyphHotZone 1\r
-# define rtfHyphConsecLines 2 /* new in 1.10 */\r
-# define rtfHyphCaps 3 /* new in 1.10 */\r
-# define rtfHyphAuto 4 /* new in 1.10 */\r
-# define rtfLineStart 5\r
-# define rtfFracWidth 6\r
-# define rtfMakeBackup 7\r
-# define rtfRTFDefault 8\r
-# define rtfPSOverlay 9\r
-# define rtfDocTemplate 10 /* new in 1.10 */\r
-# define rtfDefLanguage 11\r
-# define rtfFENoteType 12 /* new in 1.10 */\r
-# define rtfFNoteEndSect 13\r
-# define rtfFNoteEndDoc 14\r
-# define rtfFNoteText 15\r
-# define rtfFNoteBottom 16\r
-# define rtfENoteEndSect 17 /* new in 1.10 */\r
-# define rtfENoteEndDoc 18 /* new in 1.10 */\r
-# define rtfENoteText 19 /* new in 1.10 */\r
-# define rtfENoteBottom 20 /* new in 1.10 */\r
-# define rtfFNoteStart 21\r
-# define rtfENoteStart 22 /* new in 1.10 */\r
-# define rtfFNoteRestartPage 23 /* new in 1.10 */\r
-# define rtfFNoteRestart 24\r
-# define rtfFNoteRestartCont 25 /* new in 1.10 */\r
-# define rtfENoteRestart 26 /* new in 1.10 */\r
-# define rtfENoteRestartCont 27 /* new in 1.10 */\r
-# define rtfFNoteNumArabic 28 /* new in 1.10 */\r
-# define rtfFNoteNumLLetter 29 /* new in 1.10 */\r
-# define rtfFNoteNumULetter 30 /* new in 1.10 */\r
-# define rtfFNoteNumLRoman 31 /* new in 1.10 */\r
-# define rtfFNoteNumURoman 32 /* new in 1.10 */\r
-# define rtfFNoteNumChicago 33 /* new in 1.10 */\r
-# define rtfENoteNumArabic 34 /* new in 1.10 */\r
-# define rtfENoteNumLLetter 35 /* new in 1.10 */\r
-# define rtfENoteNumULetter 36 /* new in 1.10 */\r
-# define rtfENoteNumLRoman 37 /* new in 1.10 */\r
-# define rtfENoteNumURoman 38 /* new in 1.10 */\r
-# define rtfENoteNumChicago 39 /* new in 1.10 */\r
-# define rtfPaperWidth 40\r
-# define rtfPaperHeight 41\r
-# define rtfPaperSize 42 /* new in 1.10 */\r
-# define rtfLeftMargin 43\r
-# define rtfRightMargin 44\r
-# define rtfTopMargin 45\r
-# define rtfBottomMargin 46\r
-# define rtfFacingPage 47\r
-# define rtfGutterWid 48\r
-# define rtfMirrorMargin 49\r
-# define rtfLandscape 50\r
-# define rtfPageStart 51\r
-# define rtfWidowCtrl 52\r
-# define rtfLinkStyles 53 /* new in 1.10 */\r
-# define rtfNoAutoTabIndent 54 /* new in 1.10 */\r
-# define rtfWrapSpaces 55 /* new in 1.10 */\r
-# define rtfPrintColorsBlack 56 /* new in 1.10 */\r
-# define rtfNoExtraSpaceRL 57 /* new in 1.10 */\r
-# define rtfNoColumnBalance 58 /* new in 1.10 */\r
-# define rtfCvtMailMergeQuote 59 /* new in 1.10 */\r
-# define rtfSuppressTopSpace 60 /* new in 1.10 */\r
-# define rtfSuppressPreParSpace 61 /* new in 1.10 */\r
-# define rtfCombineTblBorders 62 /* new in 1.10 */\r
-# define rtfTranspMetafiles 63 /* new in 1.10 */\r
-# define rtfSwapBorders 64 /* new in 1.10 */\r
-# define rtfShowHardBreaks 65 /* new in 1.10 */\r
-# define rtfFormProtected 66 /* new in 1.10 */\r
-# define rtfAllProtected 67 /* new in 1.10 */\r
-# define rtfFormShading 68 /* new in 1.10 */\r
-# define rtfFormDisplay 69 /* new in 1.10 */\r
-# define rtfPrintData 70 /* new in 1.10 */\r
-# define rtfRevProtected 71 /* new in 1.10 */\r
-# define rtfRevisions 72\r
-# define rtfRevDisplay 73\r
-# define rtfRevBar 74\r
-# define rtfAnnotProtected 75 /* new in 1.10 */\r
-# define rtfRTLDoc 76 /* new in 1.10 */\r
-# define rtfLTRDoc 77 /* new in 1.10 */\r
-\r
-# define rtfSectAttr 9\r
-# define rtfSectDef 0\r
-# define rtfENoteHere 1\r
-# define rtfPrtBinFirst 2\r
-# define rtfPrtBin 3\r
-# define rtfSectStyleNum 4 /* new in 1.10 */\r
-# define rtfNoBreak 5\r
-# define rtfColBreak 6\r
-# define rtfPageBreak 7\r
-# define rtfEvenBreak 8\r
-# define rtfOddBreak 9\r
-# define rtfColumns 10\r
-# define rtfColumnSpace 11\r
-# define rtfColumnNumber 12 /* new in 1.10 */\r
-# define rtfColumnSpRight 13 /* new in 1.10 */\r
-# define rtfColumnWidth 14 /* new in 1.10 */\r
-# define rtfColumnLine 15\r
-# define rtfLineModulus 16\r
-# define rtfLineDist 17\r
-# define rtfLineStarts 18\r
-# define rtfLineRestart 19\r
-# define rtfLineRestartPg 20\r
-# define rtfLineCont 21\r
-# define rtfSectPageWid 22\r
-# define rtfSectPageHt 23\r
-# define rtfSectMarginLeft 24\r
-# define rtfSectMarginRight 25\r
-# define rtfSectMarginTop 26\r
-# define rtfSectMarginBottom 27\r
-# define rtfSectMarginGutter 28\r
-# define rtfSectLandscape 29\r
-# define rtfTitleSpecial 30\r
-# define rtfHeaderY 31\r
-# define rtfFooterY 32\r
-# define rtfPageStarts 33\r
-# define rtfPageCont 34\r
-# define rtfPageRestart 35\r
-# define rtfPageNumRight 36 /* renamed in 1.10 */\r
-# define rtfPageNumTop 37\r
-# define rtfPageDecimal 38\r
-# define rtfPageURoman 39\r
-# define rtfPageLRoman 40\r
-# define rtfPageULetter 41\r
-# define rtfPageLLetter 42\r
-# define rtfPageNumHyphSep 43 /* new in 1.10 */\r
-# define rtfPageNumSpaceSep 44 /* new in 1.10 */\r
-# define rtfPageNumColonSep 45 /* new in 1.10 */\r
-# define rtfPageNumEmdashSep 46 /* new in 1.10 */\r
-# define rtfPageNumEndashSep 47 /* new in 1.10 */\r
-# define rtfTopVAlign 48\r
-# define rtfBottomVAlign 49\r
-# define rtfCenterVAlign 50\r
-# define rtfJustVAlign 51\r
-# define rtfRTLSect 52 /* new in 1.10 */\r
-# define rtfLTRSect 53 /* new in 1.10 */\r
-\r
-# define rtfTblAttr 10\r
-# define rtfRowDef 0\r
-# define rtfRowGapH 1\r
-# define rtfCellPos 2\r
-# define rtfMergeRngFirst 3\r
-# define rtfMergePrevious 4\r
-# define rtfRowLeft 5\r
-# define rtfRowRight 6\r
-# define rtfRowCenter 7\r
-# define rtfRowLeftEdge 8\r
-# define rtfRowHt 9\r
-# define rtfRowHeader 10 /* new in 1.10 */\r
-# define rtfRowKeep 11 /* new in 1.10 */\r
-# define rtfRTLRow 12 /* new in 1.10 */\r
-# define rtfLTRRow 13 /* new in 1.10 */\r
-# define rtfRowBordTop 14 /* new in 1.10 */\r
-# define rtfRowBordLeft 15 /* new in 1.10 */\r
-# define rtfRowBordBottom 16 /* new in 1.10 */\r
-# define rtfRowBordRight 17 /* new in 1.10 */\r
-# define rtfRowBordHoriz 18 /* new in 1.10 */\r
-# define rtfRowBordVert 19 /* new in 1.10 */\r
-# define rtfCellBordBottom 20\r
-# define rtfCellBordTop 21\r
-# define rtfCellBordLeft 22\r
-# define rtfCellBordRight 23\r
-# define rtfCellShading 24\r
-# define rtfCellBgPatH 25\r
-# define rtfCellBgPatV 26\r
-# define rtfCellFwdDiagBgPat 27\r
-# define rtfCellBwdDiagBgPat 28\r
-# define rtfCellHatchBgPat 29\r
-# define rtfCellDiagHatchBgPat 30\r
-# define rtfCellDarkBgPatH 31\r
-# define rtfCellDarkBgPatV 32\r
-# define rtfCellFwdDarkBgPat 33\r
-# define rtfCellBwdDarkBgPat 34\r
-# define rtfCellDarkHatchBgPat 35\r
-# define rtfCellDarkDiagHatchBgPat 36\r
-# define rtfCellBgPatLineColor 37\r
-# define rtfCellBgPatColor 38\r
-\r
-# define rtfParAttr 11\r
-# define rtfParDef 0\r
-# define rtfStyleNum 1\r
-# define rtfHyphenate 2 /* new in 1.10 */\r
-# define rtfInTable 3\r
-# define rtfKeep 4\r
-# define rtfNoWidowControl 5 /* new in 1.10 */\r
-# define rtfKeepNext 6\r
-# define rtfOutlineLevel 7 /* new in 1.10 */\r
-# define rtfNoLineNum 8\r
-# define rtfPBBefore 9\r
-# define rtfSideBySide 10\r
-# define rtfQuadLeft 11\r
-# define rtfQuadRight 12\r
-# define rtfQuadJust 13\r
-# define rtfQuadCenter 14\r
-# define rtfFirstIndent 15\r
-# define rtfLeftIndent 16\r
-# define rtfRightIndent 17\r
-# define rtfSpaceBefore 18\r
-# define rtfSpaceAfter 19\r
-# define rtfSpaceBetween 20\r
-# define rtfSpaceMultiply 21 /* new in 1.10 */\r
-# define rtfSubDocument 22 /* new in 1.10 */\r
-# define rtfRTLPar 23 /* new in 1.10 */\r
-# define rtfLTRPar 24 /* new in 1.10 */\r
-# define rtfTabPos 25\r
-# define rtfTabLeft 26 /* new in 1.10 */\r
-# define rtfTabRight 27\r
-# define rtfTabCenter 28\r
-# define rtfTabDecimal 29\r
-# define rtfTabBar 30\r
-# define rtfLeaderDot 31\r
-# define rtfLeaderHyphen 32\r
-# define rtfLeaderUnder 33\r
-# define rtfLeaderThick 34\r
-# define rtfLeaderEqual 35\r
-# define rtfParLevel 36 /* new in 1.10 */\r
-# define rtfParBullet 37 /* new in 1.10 */\r
-# define rtfParSimple 38 /* new in 1.10 */\r
-# define rtfParNumCont 39 /* new in 1.10 */\r
-# define rtfParNumOnce 40 /* new in 1.10 */\r
-# define rtfParNumAcross 41 /* new in 1.10 */\r
-# define rtfParHangIndent 42 /* new in 1.10 */\r
-# define rtfParNumRestart 43 /* new in 1.10 */\r
-# define rtfParNumCardinal 44 /* new in 1.10 */\r
-# define rtfParNumDecimal 45 /* new in 1.10 */\r
-# define rtfParNumULetter 46 /* new in 1.10 */\r
-# define rtfParNumURoman 47 /* new in 1.10 */\r
-# define rtfParNumLLetter 48 /* new in 1.10 */\r
-# define rtfParNumLRoman 49 /* new in 1.10 */\r
-# define rtfParNumOrdinal 50 /* new in 1.10 */\r
-# define rtfParNumOrdinalText 51 /* new in 1.10 */\r
-# define rtfParNumBold 52 /* new in 1.10 */\r
-# define rtfParNumItalic 53 /* new in 1.10 */\r
-# define rtfParNumAllCaps 54 /* new in 1.10 */\r
-# define rtfParNumSmallCaps 55 /* new in 1.10 */\r
-# define rtfParNumUnder 56 /* new in 1.10 */\r
-# define rtfParNumDotUnder 57 /* new in 1.10 */\r
-# define rtfParNumDbUnder 58 /* new in 1.10 */\r
-# define rtfParNumNoUnder 59 /* new in 1.10 */\r
-# define rtfParNumWordUnder 60 /* new in 1.10 */\r
-# define rtfParNumStrikethru 61 /* new in 1.10 */\r
-# define rtfParNumForeColor 62 /* new in 1.10 */\r
-# define rtfParNumFont 63 /* new in 1.10 */\r
-# define rtfParNumFontSize 64 /* new in 1.10 */\r
-# define rtfParNumIndent 65 /* new in 1.10 */\r
-# define rtfParNumSpacing 66 /* new in 1.10 */\r
-# define rtfParNumInclPrev 67 /* new in 1.10 */\r
-# define rtfParNumCenter 68 /* new in 1.10 */\r
-# define rtfParNumLeft 69 /* new in 1.10 */\r
-# define rtfParNumRight 70 /* new in 1.10 */\r
-# define rtfParNumStartAt 71 /* new in 1.10 */\r
-# define rtfBorderTop 72\r
-# define rtfBorderBottom 73\r
-# define rtfBorderLeft 74\r
-# define rtfBorderRight 75\r
-# define rtfBorderBetween 76\r
-# define rtfBorderBar 77\r
-# define rtfBorderBox 78\r
-# define rtfBorderSingle 79\r
-# define rtfBorderThick 80\r
-# define rtfBorderShadow 81\r
-# define rtfBorderDouble 82\r
-# define rtfBorderDot 83\r
-# define rtfBorderDash 84 /* new in 1.10 */\r
-# define rtfBorderHair 85\r
-# define rtfBorderWidth 86\r
-# define rtfBorderColor 87\r
-# define rtfBorderSpace 88\r
-# define rtfShading 89\r
-# define rtfBgPatH 90\r
-# define rtfBgPatV 91\r
-# define rtfFwdDiagBgPat 92\r
-# define rtfBwdDiagBgPat 93\r
-# define rtfHatchBgPat 94\r
-# define rtfDiagHatchBgPat 95\r
-# define rtfDarkBgPatH 96\r
-# define rtfDarkBgPatV 97\r
-# define rtfFwdDarkBgPat 98\r
-# define rtfBwdDarkBgPat 99\r
-# define rtfDarkHatchBgPat 100\r
-# define rtfDarkDiagHatchBgPat 101\r
-# define rtfBgPatLineColor 102\r
-# define rtfBgPatColor 103\r
-\r
-# define rtfCharAttr 12\r
-# define rtfPlain 0\r
-# define rtfBold 1\r
-# define rtfAllCaps 2\r
-# define rtfDeleted 3\r
-# define rtfSubScript 4\r
-# define rtfSubScrShrink 5 /* new in 1.10 */\r
-# define rtfNoSuperSub 6 /* new in 1.10 */\r
-# define rtfExpand 7\r
-# define rtfExpandTwips 8 /* new in 1.10 */\r
-# define rtfKerning 9 /* new in 1.10 */\r
-# define rtfFontNum 10\r
-# define rtfFontSize 11\r
-# define rtfItalic 12\r
-# define rtfOutline 13\r
-# define rtfRevised 14\r
-# define rtfRevAuthor 15 /* new in 1.10 */\r
-# define rtfRevDTTM 16 /* new in 1.10 */\r
-# define rtfSmallCaps 17\r
-# define rtfShadow 18\r
-# define rtfStrikeThru 19\r
-# define rtfUnderline 20\r
-# define rtfDotUnderline 21 /* renamed in 1.10 */\r
-# define rtfDbUnderline 22\r
-# define rtfNoUnderline 23\r
-# define rtfWordUnderline 24 /* renamed in 1.10 */\r
-# define rtfSuperScript 25\r
-# define rtfSuperScrShrink 26 /* new in 1.10 */\r
-# define rtfInvisible 27\r
-# define rtfForeColor 28\r
-# define rtfBackColor 29\r
-# define rtfRTLChar 30 /* new in 1.10 */\r
-# define rtfLTRChar 31 /* new in 1.10 */\r
-# define rtfCharStyleNum 32 /* new in 1.10 */\r
-# define rtfCharCharSet 33 /* new in 1.10 */\r
-# define rtfLanguage 34\r
-# define rtfGray 35\r
-\r
-# define rtfPictAttr 13\r
-# define rtfMacQD 0\r
-# define rtfPMMetafile 1\r
-# define rtfWinMetafile 2\r
-# define rtfDevIndBitmap 3\r
-# define rtfWinBitmap 4\r
-# define rtfPixelBits 5\r
-# define rtfBitmapPlanes 6\r
-# define rtfBitmapWid 7\r
-# define rtfPicWid 8\r
-# define rtfPicHt 9\r
-# define rtfPicGoalWid 10\r
-# define rtfPicGoalHt 11\r
-# define rtfPicScaleX 12\r
-# define rtfPicScaleY 13\r
-# define rtfPicScaled 14\r
-# define rtfPicCropTop 15\r
-# define rtfPicCropBottom 16\r
-# define rtfPicCropLeft 17\r
-# define rtfPicCropRight 18\r
-# define rtfPicMFHasBitmap 19 /* new in 1.10 */\r
-# define rtfPicMFBitsPerPixel 20 /* new in 1.10 */\r
-# define rtfPicBinary 21\r
-\r
-# define rtfBookmarkAttr 14\r
-# define rtfBookmarkFirstCol 0\r
-# define rtfBookmarkLastCol 1\r
-\r
-# define rtfNeXTGrAttr 15\r
-# define rtfNeXTGWidth 0\r
-# define rtfNeXTGHeight 1\r
-\r
-# define rtfFieldAttr 16\r
-# define rtfFieldDirty 0\r
-# define rtfFieldEdited 1\r
-# define rtfFieldLocked 2\r
-# define rtfFieldPrivate 3\r
-# define rtfFieldAlt 4 /* new in 1.10 */\r
-\r
-# define rtfTOCAttr 17\r
-# define rtfTOCType 0\r
-# define rtfTOCLevel 1\r
-\r
-# define rtfPosAttr 18\r
-# define rtfAbsWid 0\r
-# define rtfAbsHt 1\r
-# define rtfRPosMargH 2\r
-# define rtfRPosPageH 3\r
-# define rtfRPosColH 4\r
-# define rtfPosX 5\r
-# define rtfPosNegX 6 /* new in 1.10 */\r
-# define rtfPosXCenter 7\r
-# define rtfPosXInside 8\r
-# define rtfPosXOutSide 9\r
-# define rtfPosXRight 10\r
-# define rtfPosXLeft 11\r
-# define rtfRPosMargV 12\r
-# define rtfRPosPageV 13\r
-# define rtfRPosParaV 14\r
-# define rtfPosY 15\r
-# define rtfPosNegY 16 /* new in 1.10 */\r
-# define rtfPosYInline 17\r
-# define rtfPosYTop 18\r
-# define rtfPosYCenter 19\r
-# define rtfPosYBottom 20\r
-# define rtfNoWrap 21\r
-# define rtfDistFromTextAll 22 /* renamed in 1.10 */\r
-# define rtfDistFromTextX 23 /* new in 1.10 */\r
-# define rtfDistFromTextY 24 /* new in 1.10 */\r
-# define rtfTextDistY 25\r
-# define rtfDropCapLines 26 /* new in 1.10 */\r
-# define rtfDropCapType 27 /* new in 1.10 */\r
-\r
-# define rtfObjAttr 19\r
-# define rtfObjEmb 0\r
-# define rtfObjLink 1\r
-# define rtfObjAutoLink 2\r
-# define rtfObjSubscriber 3\r
-# define rtfObjPublisher 4 /* new in 1.10 */\r
-# define rtfObjICEmb 5\r
-# define rtfObjLinkSelf 6\r
-# define rtfObjLock 7\r
-# define rtfObjUpdate 8 /* new in 1.10 */\r
-# define rtfObjHt 9\r
-# define rtfObjWid 10\r
-# define rtfObjSetSize 11\r
-# define rtfObjAlign 12 /* new in 1.10 */\r
-# define rtfObjTransposeY 13\r
-# define rtfObjCropTop 14\r
-# define rtfObjCropBottom 15\r
-# define rtfObjCropLeft 16\r
-# define rtfObjCropRight 17\r
-# define rtfObjScaleX 18\r
-# define rtfObjScaleY 19\r
-# define rtfObjResRTF 20\r
-# define rtfObjResPict 21\r
-# define rtfObjResBitmap 22\r
-# define rtfObjResText 23\r
-# define rtfObjResMerge 24\r
-# define rtfObjBookmarkPubObj 25\r
-# define rtfObjPubAutoUpdate 26\r
-\r
-# define rtfFNoteAttr 20 /* new in 1.10 */\r
-# define rtfFNAlt 0 /* new in 1.10 */\r
-\r
-# define rtfKeyCodeAttr 21 /* new in 1.10 */\r
-# define rtfAltKey 0 /* new in 1.10 */\r
-# define rtfShiftKey 1 /* new in 1.10 */\r
-# define rtfControlKey 2 /* new in 1.10 */\r
-# define rtfFunctionKey 3 /* new in 1.10 */\r
-\r
-# define rtfACharAttr 22 /* new in 1.10 */\r
-# define rtfACBold 0 /* new in 1.10 */\r
-# define rtfACAllCaps 1 /* new in 1.10 */\r
-# define rtfACForeColor 2 /* new in 1.10 */\r
-# define rtfACSubScript 3 /* new in 1.10 */\r
-# define rtfACExpand 4 /* new in 1.10 */\r
-# define rtfACFontNum 5 /* new in 1.10 */\r
-# define rtfACFontSize 6 /* new in 1.10 */\r
-# define rtfACItalic 7 /* new in 1.10 */\r
-# define rtfACLanguage 8 /* new in 1.10 */\r
-# define rtfACOutline 9 /* new in 1.10 */\r
-# define rtfACSmallCaps 10 /* new in 1.10 */\r
-# define rtfACShadow 11 /* new in 1.10 */\r
-# define rtfACStrikeThru 12 /* new in 1.10 */\r
-# define rtfACUnderline 13 /* new in 1.10 */\r
-# define rtfACDotUnderline 14 /* new in 1.10 */\r
-# define rtfACDbUnderline 15 /* new in 1.10 */\r
-# define rtfACNoUnderline 16 /* new in 1.10 */\r
-# define rtfACWordUnderline 17 /* new in 1.10 */\r
-# define rtfACSuperScript 18 /* new in 1.10 */\r
-\r
-# define rtfFontAttr 23 /* new in 1.10 */\r
-# define rtfFontCharSet 0 /* new in 1.10 */\r
-# define rtfFontPitch 1 /* new in 1.10 */\r
-# define rtfFontCodePage 2 /* new in 1.10 */\r
-# define rtfFTypeNil 3 /* new in 1.10 */\r
-# define rtfFTypeTrueType 4 /* new in 1.10 */\r
-\r
-# define rtfFileAttr 24 /* new in 1.10 */\r
-# define rtfFileNum 0 /* new in 1.10 */\r
-# define rtfFileRelPath 1 /* new in 1.10 */\r
-# define rtfFileOSNum 2 /* new in 1.10 */\r
-\r
-# define rtfFileSource 25 /* new in 1.10 */\r
-# define rtfSrcMacintosh 0 /* new in 1.10 */\r
-# define rtfSrcDOS 1 /* new in 1.10 */\r
-# define rtfSrcNTFS 2 /* new in 1.10 */\r
-# define rtfSrcHPFS 3 /* new in 1.10 */\r
-# define rtfSrcNetwork 4 /* new in 1.10 */\r
-\r
-/*\r
- * Drawing attributes\r
- */\r
-\r
-# define rtfDrawAttr 26 /* new in 1.10 */\r
-# define rtfDrawLock 0 /* new in 1.10 */\r
-# define rtfDrawPageRelX 1 /* new in 1.10 */\r
-# define rtfDrawColumnRelX 2 /* new in 1.10 */\r
-# define rtfDrawMarginRelX 3 /* new in 1.10 */\r
-# define rtfDrawPageRelY 4 /* new in 1.10 */\r
-# define rtfDrawColumnRelY 5 /* new in 1.10 */\r
-# define rtfDrawMarginRelY 6 /* new in 1.10 */\r
-# define rtfDrawHeight 7 /* new in 1.10 */\r
-\r
-# define rtfDrawBeginGroup 8 /* new in 1.10 */\r
-# define rtfDrawGroupCount 9 /* new in 1.10 */\r
-# define rtfDrawEndGroup 10 /* new in 1.10 */\r
-# define rtfDrawArc 11 /* new in 1.10 */\r
-# define rtfDrawCallout 12 /* new in 1.10 */\r
-# define rtfDrawEllipse 13 /* new in 1.10 */\r
-# define rtfDrawLine 14 /* new in 1.10 */\r
-# define rtfDrawPolygon 15 /* new in 1.10 */\r
-# define rtfDrawPolyLine 16 /* new in 1.10 */\r
-# define rtfDrawRect 17 /* new in 1.10 */\r
-# define rtfDrawTextBox 18 /* new in 1.10 */\r
-\r
-# define rtfDrawOffsetX 19 /* new in 1.10 */\r
-# define rtfDrawSizeX 20 /* new in 1.10 */\r
-# define rtfDrawOffsetY 21 /* new in 1.10 */\r
-# define rtfDrawSizeY 22 /* new in 1.10 */\r
-\r
-# define rtfCOAngle 23 /* new in 1.10 */\r
-# define rtfCOAccentBar 24 /* new in 1.10 */\r
-# define rtfCOBestFit 25 /* new in 1.10 */\r
-# define rtfCOBorder 26 /* new in 1.10 */\r
-# define rtfCOAttachAbsDist 27 /* new in 1.10 */\r
-# define rtfCOAttachBottom 28 /* new in 1.10 */\r
-# define rtfCOAttachCenter 29 /* new in 1.10 */\r
-# define rtfCOAttachTop 30 /* new in 1.10 */\r
-# define rtfCOLength 31 /* new in 1.10 */\r
-# define rtfCONegXQuadrant 32 /* new in 1.10 */\r
-# define rtfCONegYQuadrant 33 /* new in 1.10 */\r
-# define rtfCOOffset 34 /* new in 1.10 */\r
-# define rtfCOAttachSmart 35 /* new in 1.10 */\r
-# define rtfCODoubleLine 36 /* new in 1.10 */\r
-# define rtfCORightAngle 37 /* new in 1.10 */\r
-# define rtfCOSingleLine 38 /* new in 1.10 */\r
-# define rtfCOTripleLine 39 /* new in 1.10 */\r
-\r
-# define rtfDrawTextBoxMargin 40 /* new in 1.10 */\r
-# define rtfDrawTextBoxText 41 /* new in 1.10 */\r
-# define rtfDrawRoundRect 42 /* new in 1.10 */\r
-\r
-# define rtfDrawPointX 43 /* new in 1.10 */\r
-# define rtfDrawPointY 44 /* new in 1.10 */\r
-# define rtfDrawPolyCount 45 /* new in 1.10 */\r
-\r
-# define rtfDrawArcFlipX 46 /* new in 1.10 */\r
-# define rtfDrawArcFlipY 47 /* new in 1.10 */\r
-\r
-# define rtfDrawLineBlue 48 /* new in 1.10 */\r
-# define rtfDrawLineGreen 49 /* new in 1.10 */\r
-# define rtfDrawLineRed 50 /* new in 1.10 */\r
-# define rtfDrawLinePalette 51 /* new in 1.10 */\r
-# define rtfDrawLineDashDot 52 /* new in 1.10 */\r
-# define rtfDrawLineDashDotDot 53 /* new in 1.10 */\r
-# define rtfDrawLineDash 54 /* new in 1.10 */\r
-# define rtfDrawLineDot 55 /* new in 1.10 */\r
-# define rtfDrawLineGray 56 /* new in 1.10 */\r
-# define rtfDrawLineHollow 57 /* new in 1.10 */\r
-# define rtfDrawLineSolid 58 /* new in 1.10 */\r
-# define rtfDrawLineWidth 59 /* new in 1.10 */\r
-\r
-# define rtfDrawHollowEndArrow 60 /* new in 1.10 */\r
-# define rtfDrawEndArrowLength 61 /* new in 1.10 */\r
-# define rtfDrawSolidEndArrow 62 /* new in 1.10 */\r
-# define rtfDrawEndArrowWidth 63 /* new in 1.10 */\r
-# define rtfDrawHollowStartArrow 64 /* new in 1.10 */\r
-# define rtfDrawStartArrowLength 65 /* new in 1.10 */\r
-# define rtfDrawSolidStartArrow 66 /* new in 1.10 */\r
-# define rtfDrawStartArrowWidth 67 /* new in 1.10 */\r
-\r
-# define rtfDrawBgFillBlue 68 /* new in 1.10 */\r
-# define rtfDrawBgFillGreen 69 /* new in 1.10 */\r
-# define rtfDrawBgFillRed 70 /* new in 1.10 */\r
-# define rtfDrawBgFillPalette 71 /* new in 1.10 */\r
-# define rtfDrawBgFillGray 72 /* new in 1.10 */\r
-# define rtfDrawFgFillBlue 73 /* new in 1.10 */\r
-# define rtfDrawFgFillGreen 74 /* new in 1.10 */\r
-# define rtfDrawFgFillRed 75 /* new in 1.10 */\r
-# define rtfDrawFgFillPalette 76 /* new in 1.10 */\r
-# define rtfDrawFgFillGray 77 /* new in 1.10 */\r
-# define rtfDrawFillPatIndex 78 /* new in 1.10 */\r
-\r
-# define rtfDrawShadow 79 /* new in 1.10 */\r
-# define rtfDrawShadowXOffset 80 /* new in 1.10 */\r
-# define rtfDrawShadowYOffset 81 /* new in 1.10 */\r
-\r
-/*\r
- * index entry attributes\r
- */\r
-\r
-# define rtfIndexAttr 27 /* new in 1.10 */\r
-# define rtfIndexNumber 0 /* new in 1.10 */\r
-# define rtfIndexBold 1 /* reclassified in 1.10 */\r
-# define rtfIndexItalic 2 /* reclassified in 1.10 */\r
-\r
-\r
-/*\r
- * \wmetafile argument values\r
- */\r
-\r
-# define rtfWmMmText 1\r
-# define rtfWmMmLometric 2\r
-# define rtfWmMmHimetric 3\r
-# define rtfWmMmLoenglish 4\r
-# define rtfWmMmHienglish 5\r
-# define rtfWmMmTwips 6\r
-# define rtfWmMmIsotropic 7\r
-# define rtfWmMmAnisotropic 8\r
-\r
-/*\r
- * \pmmetafile argument values\r
- */\r
-\r
-# define rtfPmPuArbitrary 4\r
-# define rtfPmPuPels 8\r
-# define rtfPmPuLometric 12\r
-# define rtfPmPuHimetric 16\r
-# define rtfPmPuLoenglish 20\r
-# define rtfPmPuHienglish 24\r
-# define rtfPmPuTwips 28\r
-\r
-/*\r
- * \lang argument values\r
- */\r
-\r
-# define rtfLangNoLang 0x0400\r
-# define rtfLangAlbanian 0x041c\r
-# define rtfLangArabic 0x0401\r
-# define rtfLangBahasa 0x0421\r
-# define rtfLangBelgianDutch 0x0813\r
-# define rtfLangBelgianFrench 0x080c\r
-# define rtfLangBrazilianPortuguese 0x0416\r
-# define rtfLangBulgarian 0x0402\r
-# define rtfLangCatalan 0x0403\r
-# define rtfLangLatinCroatoSerbian 0x041a\r
-# define rtfLangCzech 0x0405\r
-# define rtfLangDanish 0x0406\r
-# define rtfLangDutch 0x0413\r
-# define rtfLangAustralianEnglish 0x0c09\r
-# define rtfLangUKEnglish 0x0809\r
-# define rtfLangUSEnglish 0x0409\r
-# define rtfLangFinnish 0x040b\r
-# define rtfLangFrench 0x040c\r
-# define rtfLangCanadianFrench 0x0c0c\r
-# define rtfLangGerman 0x0407\r
-# define rtfLangGreek 0x0408\r
-# define rtfLangHebrew 0x040d\r
-# define rtfLangHungarian 0x040e\r
-# define rtfLangIcelandic 0x040f\r
-# define rtfLangItalian 0x0410\r
-# define rtfLangJapanese 0x0411\r
-# define rtfLangKorean 0x0412\r
-# define rtfLangBokmalNorwegian 0x0414\r
-# define rtfLangNynorskNorwegian 0x0814\r
-# define rtfLangPolish 0x0415\r
-# define rtfLangPortuguese 0x0816\r
-# define rtfLangRhaetoRomanic 0x0417\r
-# define rtfLangRomanian 0x0418\r
-# define rtfLangRussian 0x0419\r
-# define rtfLangCyrillicSerboCroatian 0x081a\r
-# define rtfLangSimplifiedChinese 0x0804\r
-# define rtfLangSlovak 0x041b\r
-# define rtfLangCastilianSpanish 0x040a\r
-# define rtfLangMexicanSpanish 0x080a\r
-# define rtfLangSwedish 0x041d\r
-# define rtfLangSwissFrench 0x100c\r
-# define rtfLangSwissGerman 0x0807\r
-# define rtfLangSwissItalian 0x0810\r
-# define rtfLangThai 0x041e\r
-# define rtfLangTraditionalChinese 0x0404\r
-# define rtfLangTurkish 0x041f\r
-# define rtfLangUrdu 0x0420\r
-\r
-/*\r
- * CharSet indices\r
- */\r
-\r
-# define rtfCSGeneral 0 /* general (default) charset */\r
-# define rtfCSSymbol 1 /* symbol charset */\r
-\r
-/*\r
- * Flags for auto-charset-processing. Both are on by default.\r
- */\r
-\r
-# define rtfReadCharSet 0x01 /* auto-read charset files */\r
-# define rtfSwitchCharSet 0x02 /* auto-switch charset maps */\r
-\r
-/*\r
- * Style types\r
- */\r
-\r
-# define rtfParStyle 0 /* the default */\r
-# define rtfCharStyle 1\r
-# define rtfSectStyle 2\r
-\r
-/*\r
- * RTF font, color and style structures. Used for font table,\r
- * color table, and stylesheet processing.\r
- */\r
-\r
-typedef struct RTFFont RTFFont;\r
-typedef struct RTFColor RTFColor;\r
-typedef struct RTFStyle RTFStyle;\r
-typedef struct RTFStyleElt RTFStyleElt;\r
-\r
-\r
-struct RTFFont\r
-{\r
- char *rtfFName; /* font name */\r
- char *rtfFAltName; /* font alternate name */\r
- int rtfFNum; /* font number */\r
- int rtfFFamily; /* font family */\r
- int rtfFCharSet; /* font charset */\r
- int rtfFPitch; /* font pitch */\r
- int rtfFType; /* font type */\r
- int rtfFCodePage; /* font code page */\r
- RTFFont *rtfNextFont; /* next font in list */\r
-};\r
-\r
-\r
-/*\r
- * Color values are -1 if the default color for the the color\r
- * number should be used. The default color is writer-dependent.\r
- */\r
-\r
-struct RTFColor\r
-{\r
- int rtfCNum; /* color number */\r
- int rtfCRed; /* red value */\r
- int rtfCGreen; /* green value */\r
- int rtfCBlue; /* blue value */\r
- RTFColor *rtfNextColor; /* next color in list */\r
-};\r
-\r
-\r
-struct RTFStyle\r
-{\r
- char *rtfSName; /* style name */\r
- int rtfSType; /* style type */\r
- int rtfSAdditive; /* whether or not style is additive */\r
- int rtfSNum; /* style number */\r
- int rtfSBasedOn; /* style this one's based on */\r
- int rtfSNextPar; /* style next paragraph style */\r
- RTFStyleElt *rtfSSEList; /* list of style words */\r
- int rtfExpanding; /* non-zero = being expanded */\r
- RTFStyle *rtfNextStyle; /* next style in style list */\r
-};\r
-\r
-\r
-struct RTFStyleElt\r
-{\r
- int rtfSEClass; /* token class */\r
- int rtfSEMajor; /* token major number */\r
- int rtfSEMinor; /* token minor number */\r
- int rtfSEParam; /* control symbol parameter */\r
- char *rtfSEText; /* text of symbol */\r
- RTFStyleElt *rtfNextSE; /* next element in style */\r
-};\r
-\r
-\r
-/*\r
- * Return pointer to new element of type t, or NULL\r
- * if no memory available.\r
- */\r
-\r
-# define New(t) ((t *) RTFAlloc ((int) sizeof (t)))\r
-\r
-/* maximum number of character values representable in a byte */\r
-\r
-# define charSetSize 256\r
-\r
-/* charset stack size */\r
-\r
-# define maxCSStack 10\r
-\r
-\r
-struct _RTF_Info;\r
-typedef struct _RTF_Info RTF_Info;\r
-\r
-typedef void (*RTFFuncPtr) (RTF_Info *); /* generic function pointer */\r
-\r
-struct _RTF_Info {\r
- /*\r
- * Public variables (listed in rtf.h)\r
- */\r
-\r
- /*\r
- * Information pertaining to last token read by RTFToken. The\r
- * text is exactly as it occurs in the input file, e.g., "\{"\r
- * will be found in rtfTextBuf as "\{", even though it means "{".\r
- * These variables are also set when styles are reprocessed.\r
- */\r
-\r
- int rtfClass;\r
- int rtfMajor;\r
- int rtfMinor;\r
- int rtfParam;\r
- int rtfFormat;\r
- char *rtfTextBuf;\r
- int rtfTextLen;\r
-\r
- long rtfLineNum;\r
- int rtfLinePos;\r
-\r
-\r
- /*\r
- * Private stuff\r
- */\r
-\r
- int pushedChar; /* pushback char if read too far */\r
-\r
- int pushedClass; /* pushed token info for RTFUngetToken() */\r
- int pushedMajor;\r
- int pushedMinor;\r
- int pushedParam;\r
- char *pushedTextBuf;\r
-\r
- int prevChar;\r
- int bumpLine;\r
-\r
- RTFFont *fontList; /* these lists MUST be */\r
- RTFColor *colorList; /* initialized to NULL */\r
- RTFStyle *styleList;\r
-\r
- char *inputName;\r
- char *outputName;\r
-\r
- EDITSTREAM editstream;\r
- char InputBuffer[0x1000];\r
- DWORD dwInputSize;\r
- DWORD dwInputUsed;\r
-\r
- /* edit window to output to */\r
- HWND hwndEdit;\r
-\r
- /*\r
- * These arrays are used to map RTF input character values onto the standard\r
- * character names represented by the values. Input character values are\r
- * used as indices into the arrays to produce standard character codes.\r
- */\r
-\r
-\r
- char *genCharSetFile ;\r
- int genCharCode[charSetSize]; /* general */\r
- int haveGenCharSet;\r
-\r
- char *symCharSetFile;\r
- int symCharCode[charSetSize]; /* symbol */\r
- int haveSymCharSet;\r
-\r
- int curCharSet;\r
- int *curCharCode;\r
-\r
- /*\r
- * By default, the reader is configured to handle charset mapping invisibly,\r
- * including reading the charset files and switching charset maps as necessary\r
- * for Symbol font.\r
- */\r
-\r
- int autoCharSetFlags;\r
-\r
- /*\r
- * Stack for keeping track of charset map on group begin/end. This is\r
- * necessary because group termination reverts the font to the previous\r
- * value, which may implicitly change it.\r
- */\r
-\r
- int csStack[maxCSStack];\r
- int csTop;\r
-\r
- RTFFuncPtr ccb[rtfMaxClass]; /* class callbacks */\r
-\r
- RTFFuncPtr dcb[rtfMaxDestination]; /* destination callbacks */\r
-\r
- RTFFuncPtr readHook;\r
-\r
- RTFFuncPtr panicProc;\r
-\r
- FILE *(*libFileOpen) ();\r
-\r
- char *outMap[rtfSC_MaxChar];\r
-\r
- DWORD dwOutputCount;\r
- char OutputBuffer[0x1000];\r
-};\r
-\r
-\r
-/*\r
- * Public RTF reader routines\r
- */\r
-\r
-void RTFInit (RTF_Info *);\r
-void RTFSetInputName (RTF_Info *, char *);\r
-char *RTFGetInputName (RTF_Info *);\r
-void RTFSetOutputName (RTF_Info *, char *);\r
-char *RTFGetOutputName (RTF_Info *);\r
-void RTFSetClassCallback (RTF_Info *, int, RTFFuncPtr);\r
-RTFFuncPtr RTFGetClassCallback (RTF_Info *, int);\r
-void RTFSetDestinationCallback (RTF_Info *, int, RTFFuncPtr);\r
-RTFFuncPtr RTFGetDestinationCallback (RTF_Info *, int);\r
-void RTFRead (RTF_Info *);\r
-int RTFGetToken (RTF_Info *); /* writer should rarely need this */\r
-void RTFUngetToken (RTF_Info *);\r
-int RTFPeekToken (RTF_Info *);\r
-void RTFSetToken (RTF_Info *, int, int, int, int, char *);\r
-void RTFSetReadHook (RTF_Info *, RTFFuncPtr);\r
-RTFFuncPtr RTFGetReadHook (RTF_Info *);\r
-void RTFRouteToken (RTF_Info *);\r
-void RTFSkipGroup (RTF_Info *);\r
-void RTFExpandStyle (RTF_Info *, int);\r
-int RTFCheckCM (RTF_Info *, int, int);\r
-int RTFCheckCMM (RTF_Info *, int, int, int);\r
-int RTFCheckMM (RTF_Info *, int, int);\r
-RTFFont *RTFGetFont (RTF_Info *, int);\r
-RTFColor *RTFGetColor (RTF_Info *, int);\r
-RTFStyle *RTFGetStyle (RTF_Info *, int);\r
-# define RTFAlloc(size) _RTFAlloc ((int) size)\r
-char *_RTFAlloc (int);\r
-char *RTFStrSave (char *);\r
-void RTFFree (char *);\r
-int RTFCharToHex ( char);\r
-int RTFHexToChar ( int );\r
-void RTFSetMsgProc ( RTFFuncPtr );\r
-void RTFSetPanicProc ( RTF_Info *, RTFFuncPtr);\r
-\r
-/*\r
- * The following messing around is used to allow RTFMsg() and RTFPanic()\r
- * to be variable-argument functions that are declared publicly but\r
- * without generating prototype-mismatch errors on systems that have\r
- * stdarg.h.\r
- */\r
-\r
-void RTFMsg (RTF_Info *, char *fmt, ...);\r
-void RTFPanic (RTF_Info *, char *fmt, ...);\r
-\r
-int RTFReadOutputMap ( RTF_Info *, char *[], int);\r
-int RTFReadCharSetMap ( RTF_Info *, int);\r
-void RTFSetCharSetMap ( RTF_Info *, char *, int);\r
-int RTFStdCharCode ( RTF_Info *, char *);\r
-char *RTFStdCharName ( RTF_Info *, int);\r
-int RTFMapChar ( RTF_Info *, int);\r
-int RTFGetCharSet( RTF_Info * );\r
-void RTFSetCharSet( RTF_Info *, int);\r
-\r
-/*char *RTFGetLibPrefix();*/\r
-void RTFSetOpenLibFileProc ( RTF_Info *, FILE *(*)());\r
-FILE *RTFOpenLibFile ( RTF_Info *, char *, char *);\r
-\r
-void RTFFlushOutputBuffer( RTF_Info *info );\r
-void RTFSetEditStream(RTF_Info *, EDITSTREAM *es);\r
-\r
-#endif\r