1 
2 /*									*/
3 /*  Table of rtf tags that are not treated as an exception.		*/
4 /*									*/
5 /************************************************************************/
6 
7 #   include	"docRtfConfig.h"
8 
9 #   include	<stdlib.h>
10 #   include	<string.h>
11 #   include	<stdio.h>
12 #   include	<ctype.h>
13 
14 #   include	<charnames.h>
15 #   include	<uniSpecials.h>
16 #   include	<utilJenkinsPerfectHash.h>
17 #   include	<textOfficeCharset.h>
18 
19 #   include	"docRtfReaderImpl.h"
20 #   include	"docRtfTagHash.h"
21 #   include	"docRtfTraceImpl.h"
22 #   include	"docRtfTagEnum.h"
23 #   include	"docRtfTags.h"
24 #   include	<docTreeType.h>
25 #   include	<docItemShading.h>
26 #   include	<docDrawingObject.h>
27 #   include	<docTextParticule.h>
28 #   include	<docObjectProperties.h>
29 #   include	<docShape.h>
30 #   include	<psShading.h>
31 #   include	<psDocumentFontStyle.h>
32 
33 #   include	<appDebugon.h>
34 
35 #   define	BUILD_NO_HASH				/*  for sed */
36 
37 #   ifdef	BUILD_HASH
38 
39 #	define		docRtfBrdrProperty			0
40 #	define		docRtfBeginBorder			0
41 #	define		docRtfRememberProperty			0
42 #	define		docRtfRememberDocProperty		0
43 #	define		docRtfRememberStyleProperty		0
44 #	define		docRtfRememberSectionProperty		0
45 #	define		docRtfRememberRowProperty		0
46 #	define		docRtfRememberCellProperty		0
47 #	define		docRtfRememberCellInstanceProperty	0
48 #	define		docRtfRememberParagraphProperty		0
49 #	define		docRtfRememberTextProperty		0
50 #	define		docRtfRememberListLevelProperty		0
51 #	define		docRtfRememberListProperty		0
52 #	define		docRtfRememberListOverrideProperty	0
53 #	define		docRtfRememberListOverrideLevelProperty	0
54 #	define		docRtfRememberTabStopProperty		0
55 #	define		docRtfRememberParaFrameProperty		0
56 #	define		docRtfRememberRowFrameProperty		0
57 #	define		docRtfFontProperty			0
58 #	define		docRtfRememberPntextProperty		0
59 #	define		docRtfObjectProperty			0
60 #	define		docRtfPictureProperty			0
61 #	define		docRtfTextSpecialChar			0
62 #	define		docRtfTextUnicode			0
63 #	define		docRtfTextSpecialParticule		0
64 #	define		docRtfTextBidiMark			0
65 #	define		docRtfTextSpecialToField		0
66 #	define		docRtfDrawingObjectProperty		0
67 #	define		docRtfDrawingObjectCoordinate		0
68 #	define		docRtfShpProperty			0
69 #	define		docRtfPnProperty			0
70 #	define		docRtfLookupWord			0
71 #	define		docRtfColorComp				0
72 #	define		docRtfColorIgnored			0
73 #	define		docRtfHierarchy				0
74 #	define		docRtfRememberFieldProperty		0
75 #	define		docRtfRememberNoteProperty		0
76 #	define		docRtfIgnoreWord			0
77 #	define		docRtfReadTimeField			0
78 
79 #	define		docRtfFontTable				0
80 #	define		docRtfColorTable			0
81 #	define		docRtfStylesheet			0
82 #	define		docRtfListTable				0
83 #	define		docRtfCommitListLevelText		0
84 #	define		docRtfCommitListLevelNumbers		0
85 #	define		docRtfCommitListName			0
86 #	define		docRtfCommitListStyleName		0
87 #	define		docRtfRememberList			0
88 #	define		docRtfRememberListLevel			0
89 #	define		docRtfApplyDocEncodedTextGroup		0
90 #	define		docRtfBkmkEnd				0
91 #	define		docRtfBkmkStart				0
92 #	define		docRtfListOverrideTable			0
93 #	define		docRtfLookupEntry			0
94 #	define		docRtfReadDrawingObject			0
95 #	define		docRtfReadExtTree			0
96 #	define		docRtfReadField				0
97 #	define		docRtfReadFootnote			0
98 #	define		docRtfReadInfo				0
99 #	define		docRtfReadObject			0
100 #	define		docRtfReadPict				0
101 #	define		docRtfReadPnseclvl			0
102 #	define		docRtfReadRowProperties			0
103 #	define		docRtfReadShape				0
104 #	define		docRtfReadShpXPict			0
105 #	define		docRtfReadTextField			0
106 #	define		docRtfRevisionTable			0
107 #	define		docRtfShapeProperty			0
108 #	define		docRtfShapePropertyName			0
109 #	define		docRtfShapePropertyValue		0
110 #	define		docRtfSkipGroup				0
111 #	define		docRtfSkipPn				0
112 
113 #	define		docRtfCommitDocPropText			0
114 #	define		docRtfDocTimeGroup			0
115 
116 #	define		docRtfRememberTextShadingProperty	0
117 #	define		docRtfRememberParaShadingProperty	0
118 #	define		docRtfRememberCellShadingProperty	0
119 #	define		docRtfRememberRowShadingProperty	0
120 
121 #	define		docRtfSelectionScopeProperty		0
122 #	define		docRtfEditRangeProperty			0
123 #	define		docRtfSelectionOpen			0
124 
docRtfApplyRawBytesGroup(const RtfControlWord * rcw,int arg,RtfReader * rrc)125 int docRtfApplyRawBytesGroup(	const RtfControlWord *	rcw,
126 				int			arg,
127 				RtfReader *		rrc )
128     { return 0;	}
129 
130 #   endif
131 
132 /************************************************************************/
133 /*									*/
134 /*  Control words to remember border properties.			*/
135 /*									*/
136 /************************************************************************/
137 
138 # define RTF_BORDER_PROP( s, id ) \
139 		{ s, id, RTCtypeVALUE, docRtfBrdrProperty, }
140 # define RTF_BORDER_STYLE(s,v) \
141 		{ s, BRDRpropSTYLE, RTCtypeENUM, docRtfBrdrProperty, v, }
142 
143 static RtfControlWord	docRtfBorderWords[]=
144     {
145 	RTF_BORDER_PROP( "brdrw",		BRDRpropPEN_WIDE ),
146 	RTF_BORDER_PROP( "brdrcf",		BRDRpropCOLOR ),
147 	RTF_BORDER_PROP( "brsp",		BRDRpropSPACING ),
148 	RTF_BORDER_PROP( "brdrart",		BRDRpropART ),
149 
150 	/**/
151 
152 	RTF_BORDER_STYLE( "brdrnone",		DOCbsNONE ),
153 	RTF_BORDER_STYLE( "brdrs",		DOCbsS ),
154 	RTF_BORDER_STYLE( "brdrth",		DOCbsTH ),
155 	RTF_BORDER_STYLE( "brdrsh",		DOCbsSH ),
156 
157 	RTF_BORDER_STYLE( "brdrdb",		DOCbsDB ),
158 	RTF_BORDER_STYLE( "brdrhair",		DOCbsHAIR ),
159 	RTF_BORDER_STYLE( "brdrdot",		DOCbsDOT ),
160 	RTF_BORDER_STYLE( "brdrdash",		DOCbsDASH  ),
161 	RTF_BORDER_STYLE( "brdrdashd",		DOCbsDASHD ),
162 	RTF_BORDER_STYLE( "brdrdashdd",		DOCbsDASHDD ),
163 	RTF_BORDER_STYLE( "brdrtriple",		DOCbsTRIPLE ),
164 
165 	RTF_BORDER_STYLE( "brdrtnthsg",		DOCbsTNTHSG ),
166 	RTF_BORDER_STYLE( "brdrthtnsg",		DOCbsTHTNSG ),
167 	RTF_BORDER_STYLE( "brdrtnthtnsg",	DOCbsTNTHTNSG ),
168 	RTF_BORDER_STYLE( "brdrtnthmg",		DOCbsTNTHMG ),
169 	RTF_BORDER_STYLE( "brdrthtnmg",		DOCbsTHTNMG ),
170 	RTF_BORDER_STYLE( "brdrtnthtnmg",	DOCbsTNTHTNMG ),
171 	RTF_BORDER_STYLE( "brdrtnthlg",		DOCbsTNTHLG ),
172 	RTF_BORDER_STYLE( "brdrthtnlg",		DOCbsTHTNLG ),
173 	RTF_BORDER_STYLE( "brdrtnthtnlg",	DOCbsTNTHTNLG ),
174 
175 	RTF_BORDER_STYLE( "brdrwavy",		DOCbsWAVY ),
176 	RTF_BORDER_STYLE( "brdrwavydb",		DOCbsWAVYDB ),
177 	RTF_BORDER_STYLE( "brdrdashsm",		DOCbsDASHSM ),
178 	RTF_BORDER_STYLE( "brdrdashdotstr",	DOCbsDASHDOTSTR ),
179 	RTF_BORDER_STYLE( "brdremboss",		DOCbsEMBOSS ),
180 	RTF_BORDER_STYLE( "brdrengrave",	DOCbsENGRAVE ),
181 	RTF_BORDER_STYLE( "brdrframe",		DOCbsFRAME ),
182 	RTF_BORDER_STYLE( "brdroutset",		DOCbsOUTSET ),
183 
184 	RTF_BORDER_STYLE( "brdrtbl",		DOCbsTBL ),
185 	RTF_BORDER_STYLE( "brdrnil",		DOCbsNIL ),
186 
187 	/**/
188 
189 	{ (char *)0, 0, 0 }
190     };
191 
192 # define	RTF_BORDER(s,id,sp) \
193 		{ s, id, RTCtypeANY, sp, 0, \
194 			docRtfBeginBorder, \
195 			(RtfCommitGroup)0, \
196 			docRtfBorderWords, }
197 
198 /************************************************************************/
199 /*									*/
200 /*  Table of common rtf tags.						*/
201 /*									*/
202 /************************************************************************/
203 
204 # define	RTF_REMEMBER(s,id) \
205 		{ s, id, RTCtypeANY, docRtfRememberProperty, }
206 
207 
208 # define	RTF_LISTOVERR_NUMBER(s,id) \
209 		{ s, id, RTCtypeVALUE, docRtfRememberListOverrideProperty, }
210 
211 # define	RTF_LISTOVERRLEV_FLAG(s,id) \
212 		{ s, id, RTCtypeFLAG, docRtfRememberListOverrideLevelProperty, }
213 
214 static RtfControlWord	docRtfPropertyWords[]=
215 {
216 				/****************************************/
217 				/*  Hierarchy/Structure tags.		*/
218 				/****************************************/
219 # define			RTF_HIERARCHY(s,id) \
220 				    { s, id, RTCtypeANY, docRtfHierarchy, }
221 
222 	RTF_HIERARCHY( RTFtag_par ,	DOClevPARA ),
223 	RTF_HIERARCHY( "cell",		DOClevCELL ),
224 	RTF_HIERARCHY( "row",		DOClevROW ),
225 	RTF_HIERARCHY( "sect",		DOClevSECT ),
226 	RTF_HIERARCHY( "nestcell",	DOClevNESTCELL ), /**/
227 	RTF_HIERARCHY( "nestrow",	DOClevNESTROW ), /**/
228 	RTF_HIERARCHY( "nonesttables",	DOClevNONESTTABLES ), /**/
229 
230 				/****************************************/
231 				/*  Text properties.			*/
232 				/*  Character Formatting Properties	*/
233 				/****************************************/
234 
235 # define	RTF_TEXT_DEFAULT(s) \
236 		{ s, TAprop_NONE, RTCtypeANY, docRtfRememberTextProperty, }
237 # define	RTF_TEXT_NUMBER(s,id) \
238 		{ s, id, RTCtypeVALUE, docRtfRememberTextProperty, }
239 # define	RTF_TEXT_ENUM(s,id,v) \
240 		{ s, id, RTCtypeENUM, docRtfRememberTextProperty, v, }
241 # define	RTF_TEXT_FLAG(s,id) \
242 		{ s, id, RTCtypeFLAG, docRtfRememberTextProperty, }
243 
244 # define	RTF_TEXT_SHD_ENUM(s,id,v) \
245 		{ s, id, RTCtypeENUM, docRtfRememberTextShadingProperty, }
246 # define	RTF_TEXT_SHD_NUMBER(s,id) \
247 		{ s, id, RTCtypeVALUE, docRtfRememberTextShadingProperty, }
248 
249 # define	RTF_TEXT_BORDER(s,id)  \
250 			RTF_BORDER(s,id,docRtfRememberTextProperty)
251 
252     RTF_TEXT_DEFAULT( RTFtag_plain ),
253 
254     RTF_TEXT_NUMBER( "f",		TApropFONT_NUMBER ),
255     RTF_TEXT_NUMBER( "fs",		TApropFONTSIZE ),
256     RTF_TEXT_NUMBER( "cf",		TApropTEXT_COLOR ),
257     RTF_TEXT_NUMBER( "fc",		TApropTEXT_COLOR ), /* typo NextStep */
258     RTF_TEXT_NUMBER( "cs",		TApropTEXT_STYLE ),
259 
260     RTF_TEXT_NUMBER( "up",		TApropBASELINE_SHIFT ),
261     RTF_TEXT_NUMBER( "dn",		TAprop_BASELINE_SHIFT_DOWN ),
262 
263     RTF_TEXT_BORDER( "chbrdr",		TApropBORDER ),
264 
265     RTF_TEXT_SHD_NUMBER( "chcfpat",	ISpropFORE_COLOR ),
266     RTF_TEXT_SHD_NUMBER( "chcbpat",	ISpropBACK_COLOR ),
267     RTF_TEXT_SHD_NUMBER( "chshdng",	ISpropLEVEL ),
268     RTF_TEXT_SHD_NUMBER( "cb",		ISpropBACK_SOLID ),
269 
270     RTF_TEXT_SHD_ENUM( "chbghoriz",	ISpropPATTERN, PSshdHORIZ ),
271     RTF_TEXT_SHD_ENUM( "chbgvert",	ISpropPATTERN, PSshdVERT ),
272     RTF_TEXT_SHD_ENUM( "chbgfdiag",	ISpropPATTERN, PSshdFDIAG ),
273     RTF_TEXT_SHD_ENUM( "chbgbdiag",	ISpropPATTERN, PSshdBDIAG ),
274     RTF_TEXT_SHD_ENUM( "chbgcross",	ISpropPATTERN, PSshdCROSS ),
275     RTF_TEXT_SHD_ENUM( "chbgdcross",	ISpropPATTERN, PSshdDCROSS ),
276     RTF_TEXT_SHD_ENUM( "chbgdkhoriz",	ISpropPATTERN, PSshdDKHORIZ ),
277     RTF_TEXT_SHD_ENUM( "chbgdkvert",	ISpropPATTERN, PSshdDKVERT ),
278     RTF_TEXT_SHD_ENUM( "chbgdkfdiag",	ISpropPATTERN, PSshdDKFDIAG ),
279     RTF_TEXT_SHD_ENUM( "chbgdkbdiag",	ISpropPATTERN, PSshdDKBDIAG ),
280     RTF_TEXT_SHD_ENUM( "chbgdkcross",	ISpropPATTERN, PSshdDKCROSS ),
281     RTF_TEXT_SHD_ENUM( "chbgdkdcross",	ISpropPATTERN, PSshdDKDCROSS ),
282 
283     RTF_TEXT_FLAG( "b",			TApropFONTBOLD ),
284     RTF_TEXT_FLAG( "i",			TApropFONTSLANTED ),
285     RTF_TEXT_FLAG( "ul",		TApropTEXTUNDERLINED ),
286 
287     RTF_TEXT_ENUM( RTFtag_nosupersub,	TApropSUPERSUB, TEXTvaREGULAR ),
288     RTF_TEXT_ENUM( RTFtag_super,	TApropSUPERSUB, TEXTvaSUPERSCRIPT ),
289     RTF_TEXT_ENUM( RTFtag_sub,		TApropSUPERSUB, TEXTvaSUBSCRIPT ),
290 
291     RTF_TEXT_FLAG( "caps",		TApropCAPITALS ),
292     RTF_TEXT_FLAG( "scaps",		TApropSMALLCAPS ),
293     RTF_TEXT_FLAG( "strike",		TApropSTRIKETHROUGH ),
294     RTF_TEXT_NUMBER( "striked",		TApropSTRIKETHROUGH ), /* HACK ! */
295 
296     RTF_REMEMBER( "ulc",		RTFid_NOT_SUPPORTED ),
297     RTF_REMEMBER( "embo",		RTFid_NOT_SUPPORTED ),
298     RTF_REMEMBER( "impr",		RTFid_NOT_SUPPORTED ),
299 
300     /**/
301 
302 				/****************************************/
303 				/*  Paragraph number text attributes.	*/
304 				/*  Should eventually be mapped to list	*/
305 				/*  functionality.			*/
306 				/****************************************/
307 # define	RTF_PNTEXT_NUMBER(s,id) \
308 		{ s, id, RTCtypeVALUE, docRtfRememberPntextProperty, }
309 # define	RTF_PNTEXT_FLAG(s,id) \
310 		{ s, id, RTCtypeFLAG, docRtfRememberPntextProperty, }
311 
312     RTF_PNTEXT_NUMBER( "pnf",		TApropFONT_NUMBER ),
313     RTF_PNTEXT_NUMBER( "pnfs",		TApropFONTSIZE ),
314     RTF_PNTEXT_NUMBER( "pncf",		TApropTEXT_COLOR ),
315 
316     RTF_PNTEXT_FLAG( "pnb",		TApropFONTBOLD ),
317     RTF_PNTEXT_FLAG( "pni",		TApropFONTSLANTED ),
318     RTF_PNTEXT_FLAG( "pnul",		TApropTEXTUNDERLINED ),
319 
320     RTF_PNTEXT_FLAG( "pncaps",		TApropCAPITALS ),
321     RTF_PNTEXT_FLAG( "pnscaps",		TApropSMALLCAPS ),
322     RTF_PNTEXT_FLAG( "pnstrike",	TApropSTRIKETHROUGH ),
323 
324     /*
325     RTF_REMEMBER( "pnuld",		RTFidPNULD ),
326     RTF_REMEMBER( "pnuldb",		RTFidPNULDB ),
327     RTF_REMEMBER( "pnulnone",		RTFidPNULNONE ),
328     */
329 
330 				/****************************************/
331 				/*  Paragraph number attributes.	*/
332 				/*  Should eventually be mapped to list	*/
333 				/*  functionality.			*/
334 				/****************************************/
335 # define	RTF_PN_FLAG(s,id) \
336 		{ s, id, RTCtypeFLAG, docRtfPnProperty }
337 # define	RTF_PN_NUMBER(s,id) \
338 		{ s, id, RTCtypeVALUE, docRtfPnProperty }
339 # define	RTF_PN_ENUM(s,id,v) \
340 		{ s, id, RTCtypeENUM, docRtfPnProperty, v }
341 # define	RTF_PN_IGNORE(s,id) \
342 		{ s, id, RTCtypeANY, docRtfIgnoreWord }
343 
344     RTF_PN_NUMBER( "pnstart",	LLpropSTARTAT ),
345 
346     RTF_PN_ENUM( "pndec",	LLpropSTYLE,	DOCpnDEC ),
347     RTF_PN_ENUM( "pnucrm",	LLpropSTYLE,	DOCpnUCRM ),
348     RTF_PN_ENUM( "pnlcrm",	LLpropSTYLE,	DOCpnLCRM ),
349     RTF_PN_ENUM( "pnucltr",	LLpropSTYLE,	DOCpnUCLTR ),
350     RTF_PN_ENUM( "pnlcltr",	LLpropSTYLE,	DOCpnLCLTR ),
351     RTF_PN_ENUM( "pnord",	LLpropSTYLE,	DOCpnORD ),
352     RTF_PN_ENUM( "pncard",	LLpropSTYLE,	DOCpnCARD ),
353     RTF_PN_ENUM( "pnordt",	LLpropSTYLE,	DOCpnORDT ),
354 
355     RTF_PN_ENUM( "pndbnum",	LLpropSTYLE,	DOCpnDBNUM ),
356     RTF_PN_ENUM( "pndbnumd",	LLpropSTYLE,	DOCpnDBNUMD ),
357     RTF_PN_ENUM( "pnaiu",	LLpropSTYLE,	DOCpnAIU ),
358     RTF_PN_ENUM( "pniroha",	LLpropSTYLE,	DOCpnIROHA ),
359     RTF_PN_ENUM( "pndbnuml",	LLpropSTYLE,	DOCpnDBNUML ),
360     RTF_PN_ENUM( "pndbnumt",	LLpropSTYLE,	DOCpnDBNUMT ),
361     RTF_PN_ENUM( "pndbnumk",	LLpropSTYLE,	DOCpnDBNUMK ),
362     RTF_PN_ENUM( "pncnum",	LLpropSTYLE,	DOCpnCNUM ),
363     RTF_PN_ENUM( "pndecd",	LLpropSTYLE,	DOCpnDECD ),
364     RTF_PN_ENUM( "pnaiud",	LLpropSTYLE,	DOCpnAIUD ),
365     RTF_PN_ENUM( "pnirohad",	LLpropSTYLE,	DOCpnIROHAD ),
366     RTF_PN_ENUM( "pnganada",	LLpropSTYLE,	DOCpnGANADA ),
367     RTF_PN_ENUM( "pngbnum",	LLpropSTYLE,	DOCpnGBNUM ),
368     RTF_PN_ENUM( "pngbnumd",	LLpropSTYLE,	DOCpnGBNUMD ),
369     RTF_PN_ENUM( "pngbnuml",	LLpropSTYLE,	DOCpnGBNUML ),
370     RTF_PN_ENUM( "pngbnumk",	LLpropSTYLE,	DOCpnGBNUMK ),
371     RTF_PN_ENUM( "pnzodiac",	LLpropSTYLE,	DOCpnZODIAC ),
372     RTF_PN_ENUM( "pnzodiacd",	LLpropSTYLE,	DOCpnZODIACD ),
373     RTF_PN_ENUM( "pnzodiacl",	LLpropSTYLE,	DOCpnZODIACL ),
374     RTF_PN_ENUM( "pnchosung",	LLpropSTYLE,	DOCpnCHOSUNG ),
375     RTF_PN_ENUM( "pnaiueo",	LLpropSTYLE,	DOCpnAIUEO ),
376     RTF_PN_ENUM( "pnaiueod",	LLpropSTYLE,	DOCpnAIUEOD ),
377     RTF_PN_ENUM( "pnbidia",	LLpropSTYLE,	DOCpnBIDIA ),
378     RTF_PN_ENUM( "pnbidib",	LLpropSTYLE,	DOCpnBIDIB ),
379 
380     RTF_PN_ENUM( "pnql",	LLpropJUSTIFY,	0 ),
381     RTF_PN_ENUM( "pnqc",	LLpropJUSTIFY,	1 ),
382     RTF_PN_ENUM( "pnqr",	LLpropJUSTIFY,	2 ),
383 
384     RTF_PN_NUMBER( "pnindent",	LLpropINDENT ),
385     RTF_PN_NUMBER( "pnsp",	LLpropSPACE ),
386     RTF_PN_FLAG( "pnprev",	LLpropPREV ),
387 
388     RTF_PN_IGNORE( "pnacross",	RTFid_NOT_SUPPORTED ),
389     RTF_PN_IGNORE( "pnlvl",	RTFid_NOT_SUPPORTED ),
390     RTF_PN_IGNORE( "pnlvlblt",	RTFid_NOT_SUPPORTED ),
391     RTF_PN_IGNORE( "pnlvlbody",	RTFid_NOT_SUPPORTED ),
392     RTF_PN_IGNORE( "pnlvlcont",	RTFid_NOT_SUPPORTED ),
393     RTF_PN_IGNORE( "pnnumonce",	RTFid_NOT_SUPPORTED ),
394     RTF_PN_IGNORE( "pnrestart",	RTFid_NOT_SUPPORTED ),
395     RTF_PN_IGNORE( "pnrnot",	RTFid_NOT_SUPPORTED ),
396 
397     /**/
398 
399     RTF_REMEMBER( "ulnone",		RTFidULNONE ),
400     RTF_REMEMBER( "cgrid",		RTFid_NOT_SUPPORTED ),
401 
402     RTF_REMEMBER( "cchs",		RTFid_NOT_SUPPORTED ),
403     RTF_REMEMBER( "outl",		RTFid_NOT_SUPPORTED ),
404     RTF_REMEMBER( "revauth",		RTFid_NOT_SUPPORTED ),
405     RTF_REMEMBER( "crauth",		RTFid_NOT_SUPPORTED ),
406     RTF_REMEMBER( "crdate",		RTFid_NOT_SUPPORTED ),
407     RTF_REMEMBER( "revauthdel",		RTFid_NOT_SUPPORTED ),
408     RTF_REMEMBER( "revdttm",		RTFid_NOT_SUPPORTED ),
409     RTF_REMEMBER( "revdttmdel",		RTFid_NOT_SUPPORTED ),
410     RTF_REMEMBER( "revised",		RTFid_NOT_SUPPORTED ),
411     RTF_REMEMBER( "shad",		RTFid_NOT_SUPPORTED ),
412 
413     RTF_REMEMBER( "fcs",		RTFid_NOT_SUPPORTED ),
414 
415     RTF_REMEMBER( "uld",		RTFid_NOT_SUPPORTED ),
416     RTF_REMEMBER( "uldb",		RTFid_NOT_SUPPORTED ),
417     RTF_REMEMBER( "ulw",		RTFid_NOT_SUPPORTED ),
418     RTF_REMEMBER( "v",			RTFidV ),
419     RTF_REMEMBER( "webhidden",		RTFid_NOT_SUPPORTED ),
420     RTF_REMEMBER( "kerning",		RTFid_NOT_SUPPORTED ),
421     RTF_REMEMBER( "expnd",		RTFid_NOT_SUPPORTED ),
422     RTF_REMEMBER( "expndtw",		RTFid_NOT_SUPPORTED ),
423     RTF_REMEMBER( "charscalex",		RTFid_NOT_SUPPORTED ),
424     RTF_REMEMBER( "highlight",		RTFid_NOT_SUPPORTED ),
425 
426     RTF_REMEMBER( "faauto",		RTFid_NOT_SUPPORTED ),
427     RTF_REMEMBER( "fahang",		RTFid_NOT_SUPPORTED ),
428     RTF_REMEMBER( "facenter",		RTFid_NOT_SUPPORTED ),
429     RTF_REMEMBER( "faroman",		RTFid_NOT_SUPPORTED ),
430     RTF_REMEMBER( "favar",		RTFid_NOT_SUPPORTED ),
431     RTF_REMEMBER( "fafixed",		RTFid_NOT_SUPPORTED ),
432 
433 				/****************************************/
434 				/*  Paragraph properties.		*/
435 				/****************************************/
436 
437 # define	RTF_PARA_DEFAULT(s) \
438 		{ s, PPprop_NONE, RTCtypeANY, docRtfRememberParagraphProperty, }
439 # define	RTF_PARA_NUMBER(s,id) \
440 		{ s, id, RTCtypeVALUE, docRtfRememberParagraphProperty, }
441 # define	RTF_PARA_ENUM(s,id,v) \
442 		{ s, id, RTCtypeENUM, docRtfRememberParagraphProperty, v, }
443 # define	RTF_PARA_FLAG(s,id) \
444 		{ s, id, RTCtypeFLAG, docRtfRememberParagraphProperty, }
445 # define	RTF_PARA_BORDER(s,id) \
446 			RTF_BORDER(s,id,docRtfRememberParagraphProperty)
447 
448 # define	RTF_PARA_SHD_NUMBER(s,id) \
449 		{ s, id, RTCtypeVALUE, docRtfRememberParaShadingProperty, }
450 # define	RTF_PARA_SHD_ENUM(s,id,v) \
451 		{ s, id, RTCtypeENUM, docRtfRememberParaShadingProperty, v, }
452 
453     RTF_PARA_DEFAULT( RTFtag_pard ),
454 
455     RTF_PARA_NUMBER( "s",		PPpropSTYLE ),
456     RTF_PARA_NUMBER( "ls",		PPpropLISTOVERRIDE ),
457 
458     RTF_PARA_NUMBER( "li",		PPpropLEFT_INDENT ),
459     RTF_PARA_NUMBER( "fi",		PPpropFIRST_INDENT ),
460     RTF_PARA_NUMBER( "ri",		PPpropRIGHT_INDENT ),
461 
462     RTF_PARA_ENUM( "ql",		PPpropALIGNMENT, DOCthaLEFT ),
463     RTF_PARA_ENUM( "qr",		PPpropALIGNMENT, DOCthaRIGHT ),
464     RTF_PARA_ENUM( "qj",		PPpropALIGNMENT, DOCthaJUSTIFIED ),
465     RTF_PARA_ENUM( "qc",		PPpropALIGNMENT, DOCthaCENTERED ),
466 
467     RTF_PARA_ENUM( "nopagebb",		PPpropBREAK_KIND, DOCibkNONE ), /*!*/
468     RTF_PARA_ENUM( "pagebb",		PPpropBREAK_KIND, DOCibkPAGE ),
469 
470     RTF_PARA_ENUM( "nowidctlpar", 	PPpropWIDCTLPAR, 0 ),
471     RTF_PARA_ENUM( "widctlpar",		PPpropWIDCTLPAR, 1 ),
472 
473     RTF_PARA_FLAG( "keep",		PPpropKEEP ),
474     RTF_PARA_FLAG( "keepn",		PPpropKEEPN ),
475 
476     RTF_PARA_NUMBER( "sb",		PPpropSPACE_BEFORE ),
477     RTF_PARA_NUMBER( "sa",		PPpropSPACE_AFTER ),
478     RTF_PARA_NUMBER( "sl",		PPpropLINE_SPACING_DIST ),
479 
480     RTF_PARA_NUMBER( "lisb",		PPprop_LISB ),
481     RTF_PARA_NUMBER( "lisa",		PPprop_LISA ),
482 
483     RTF_PARA_FLAG( "slmult", 		PPpropLINE_SPACING_MULT ),
484 
485     RTF_PARA_NUMBER( "outlinelevel",	PPpropOUTLINELEVEL ),
486     RTF_PARA_NUMBER( "ilvl",		PPpropLISTLEVEL ),
487 
488     RTF_PARA_FLAG( "hyphpar",		PPpropHYPHPAR ),
489     RTF_PARA_FLAG( "intbl",		PPprop_IN_TABLE ),
490     RTF_PARA_NUMBER( "itap",		PPpropTABLE_NESTING ),
491 
492     RTF_PARA_SHD_ENUM( "bghoriz",	ISpropPATTERN, PSshdHORIZ ),
493     RTF_PARA_SHD_ENUM( "bgvert",	ISpropPATTERN, PSshdVERT ),
494     RTF_PARA_SHD_ENUM( "bgfdiag",	ISpropPATTERN, PSshdFDIAG ),
495     RTF_PARA_SHD_ENUM( "bgbdiag",	ISpropPATTERN, PSshdBDIAG ),
496     RTF_PARA_SHD_ENUM( "bgcross",	ISpropPATTERN, PSshdCROSS ),
497     RTF_PARA_SHD_ENUM( "bgdcross",	ISpropPATTERN, PSshdDCROSS ),
498     RTF_PARA_SHD_ENUM( "bgdkhoriz",	ISpropPATTERN, PSshdDKHORIZ ),
499     RTF_PARA_SHD_ENUM( "bgdkvert",	ISpropPATTERN, PSshdDKVERT ),
500     RTF_PARA_SHD_ENUM( "bgdkfdiag",	ISpropPATTERN, PSshdDKFDIAG ),
501     RTF_PARA_SHD_ENUM( "bgdkbdiag",	ISpropPATTERN, PSshdDKBDIAG ),
502     RTF_PARA_SHD_ENUM( "bgdkcross",	ISpropPATTERN, PSshdDKCROSS ),
503     RTF_PARA_SHD_ENUM( "bgdkdcross",	ISpropPATTERN, PSshdDKDCROSS ),
504 
505     RTF_PARA_SHD_NUMBER( "cfpat",	ISpropFORE_COLOR ),
506     RTF_PARA_SHD_NUMBER( "cbpat",	ISpropBACK_COLOR ),
507     RTF_PARA_SHD_NUMBER( "shading",	ISpropLEVEL ),
508 
509     RTF_PARA_BORDER( "brdrt",		PPpropTOP_BORDER ),
510     RTF_PARA_BORDER( "brdrb",		PPpropBOTTOM_BORDER ),
511     RTF_PARA_BORDER( "brdrl",		PPpropLEFT_BORDER ),
512     RTF_PARA_BORDER( "brdrr",		PPpropRIGHT_BORDER ),
513     RTF_PARA_BORDER( "brdrbtw",		PPpropBETWEEN_BORDER ),
514     RTF_PARA_BORDER( "brdrbar",		PPpropBAR_BORDER ),
515     RTF_PARA_BORDER( "box",		PPprop_BOX_BORDER ),
516 
517     RTF_PARA_ENUM( "ltrpar",		PPpropRTOL, 0 ),
518     RTF_PARA_ENUM( "rtlpar",		PPpropRTOL, 1 ),
519 
520 					/**/
521 
522     RTF_PARA_FLAG( "nosnaplinegrid",	PPprop_IGNORED ),
523     RTF_PARA_FLAG( "wrapdefault",	PPprop_IGNORED ),
524 
525     RTF_PARA_FLAG( "adjustright",	PPprop_IGNORED ),
526     RTF_PARA_FLAG( "adjustleft",	PPprop_IGNORED ),
527 
528     RTF_PARA_NUMBER( "sbauto",		PPprop_IGNORED ),
529     RTF_PARA_NUMBER( "saauto",		PPprop_IGNORED ),
530 
531     RTF_PARA_FLAG( "nooverflow",	PPprop_IGNORED ),
532 
533     RTF_PARA_FLAG( "aspalpha",		PPprop_IGNORED ),
534     RTF_PARA_FLAG( "aspnum",		PPprop_IGNORED ),
535     RTF_PARA_FLAG( "contextualspace",	PPprop_IGNORED ),
536 
537 				/****************************************/
538 				/*  Positioned Objects and Frames:	*/
539 				/*  (Row properties.)			*/
540 				/****************************************/
541 # define	RTF_ROW_FRAME_NUMBER(s,id) \
542 		{ s, id, RTCtypeVALUE, docRtfRememberRowFrameProperty, }
543 # define	RTF_ROW_FRAME_ENUM(s,id,v) \
544 		{ s, id, RTCtypeENUM, docRtfRememberRowFrameProperty, v, }
545 # define	RTF_ROW_FRAME_FLAG(s,id) \
546 		{ s, id, RTCtypeFLAG, docRtfRememberRowFrameProperty, }
547 
548     /* no TFPpropABSW */
549     /* no TFPpropABSH */
550 
551     /* no TFPpropLOCKED_TO_PARA */
552 
553     /* no TFPpropWRAP_STYLE, FWSwrapNOWRAP */
554     /* no TFPpropWRAP_STYLE, FWSwrapOVERLAY */
555 
556     RTF_ROW_FRAME_FLAG( "tabsnoovrlp",	TFPpropNO_OVERLAP ),
557 
558     RTF_ROW_FRAME_ENUM( "tphmrg",	TFPpropHORIZONTAL_REF, FXrefMARGIN ),
559     RTF_ROW_FRAME_ENUM( "tphpg",	TFPpropHORIZONTAL_REF, FXrefPAGE ),
560     RTF_ROW_FRAME_ENUM( "tphcol",	TFPpropHORIZONTAL_REF, FXrefCOLUMN ),
561 
562     RTF_ROW_FRAME_NUMBER( "tposx",	TFPpropHORIZONTAL_POS ),
563     RTF_ROW_FRAME_NUMBER( "tposnegx",	TFPpropHORIZONTAL_POS ),
564 
565     RTF_ROW_FRAME_ENUM( "tposxl",	TFPpropHORIZONTAL_ALIGN, FXposXL ),
566     RTF_ROW_FRAME_ENUM( "tposxr",	TFPpropHORIZONTAL_ALIGN, FXposXR ),
567     RTF_ROW_FRAME_ENUM( "tposxc",	TFPpropHORIZONTAL_ALIGN, FXposXC ),
568     RTF_ROW_FRAME_ENUM( "tposxi",	TFPpropHORIZONTAL_ALIGN, FXposXI ),
569     RTF_ROW_FRAME_ENUM( "tposxo",	TFPpropHORIZONTAL_ALIGN, FXposXO ),
570 
571     RTF_ROW_FRAME_ENUM( "tpvmrg",	TFPpropVERTICAL_REF, FYrefMARGIN ),
572     RTF_ROW_FRAME_ENUM( "tpvpara",	TFPpropVERTICAL_REF, FYrefPARA ),
573     RTF_ROW_FRAME_ENUM( "tpvpg",	TFPpropVERTICAL_REF, FYrefPAGE ),
574     RTF_ROW_FRAME_ENUM( "tposyil",	TFPpropVERTICAL_REF, FYrefLINE ),
575 
576     RTF_ROW_FRAME_NUMBER( "tposy",	TFPpropVERTICAL_POS ),
577     RTF_ROW_FRAME_NUMBER( "tposnegy",	TFPpropVERTICAL_POS ),
578 
579     RTF_ROW_FRAME_ENUM( "tposyb",	TFPpropVERTICAL_ALIGN, FYposYB ),
580     RTF_ROW_FRAME_ENUM( "tposyc",	TFPpropVERTICAL_ALIGN, FYposYC ),
581     RTF_ROW_FRAME_ENUM( "tposyin",	TFPpropVERTICAL_ALIGN, FYposYIN ),
582     RTF_ROW_FRAME_ENUM( "tposyout",	TFPpropVERTICAL_ALIGN, FYposYOUT ),
583     RTF_ROW_FRAME_ENUM( "tposyt",	TFPpropVERTICAL_ALIGN, FYposYT ),
584 
585     /*  no TFPpropDFRMTXT */
586     /*  no TFPpropDFRMTXTX */
587     /*  no TFPpropDFRMTXTY */
588 
589     RTF_ROW_FRAME_NUMBER( "tdfrmtxtLeft",	TFPpropDFRMTXTL ),
590     RTF_ROW_FRAME_NUMBER( "tdfrmtxtRight",	TFPpropDFRMTXTR ),
591     RTF_ROW_FRAME_NUMBER( "tdfrmtxtTop",	TFPpropDFRMTXTT ),
592     RTF_ROW_FRAME_NUMBER( "tdfrmtxtBottom",	TFPpropDFRMTXTB ),
593 
594 				/****************************************/
595 				/*  Positioned Objects and Frames:	*/
596 				/*  (Paragraph properties.)		*/
597 				/****************************************/
598 # define	RTF_PARA_FRAME_NUMBER(s,id) \
599 		{ s, id, RTCtypeVALUE, docRtfRememberParaFrameProperty, }
600 # define	RTF_PARA_FRAME_ENUM(s,id,v) \
601 		{ s, id, RTCtypeENUM, docRtfRememberParaFrameProperty, v, }
602 # define	RTF_PARA_FRAME_FLAG(s,id) \
603 		{ s, id, RTCtypeFLAG, docRtfRememberParaFrameProperty, }
604 
605     RTF_PARA_FRAME_NUMBER( "absw",	TFPpropABSW ),
606     RTF_PARA_FRAME_NUMBER( "absh",	TFPpropABSH ),
607 
608     RTF_PARA_FRAME_FLAG( "abslock",	TFPpropLOCK_ANCHOR ),
609 
610     RTF_PARA_FRAME_ENUM( "nowrap",	TFPpropWRAP_STYLE, FWSwrapNOWRAP ),
611     RTF_PARA_FRAME_ENUM( "overlay",	TFPpropWRAP_STYLE, FWSwrapOVERLAY ),
612 
613     RTF_PARA_FRAME_FLAG( "absnoovrlp",	TFPpropNO_OVERLAP ),
614 
615     RTF_PARA_FRAME_ENUM( "phmrg",	TFPpropHORIZONTAL_REF, FXrefMARGIN ),
616     RTF_PARA_FRAME_ENUM( "phpg",	TFPpropHORIZONTAL_REF, FXrefPAGE ),
617     RTF_PARA_FRAME_ENUM( "phcol",	TFPpropHORIZONTAL_REF, FXrefCOLUMN ),
618 
619     RTF_PARA_FRAME_NUMBER( "posx",	TFPpropHORIZONTAL_POS ),
620     RTF_PARA_FRAME_NUMBER( "posnegx",	TFPpropHORIZONTAL_POS ),
621 
622     RTF_PARA_FRAME_ENUM( "posxl",	TFPpropHORIZONTAL_ALIGN, FXposXL ),
623     RTF_PARA_FRAME_ENUM( "posxr",	TFPpropHORIZONTAL_ALIGN, FXposXR ),
624     RTF_PARA_FRAME_ENUM( "posxc",	TFPpropHORIZONTAL_ALIGN, FXposXC ),
625     RTF_PARA_FRAME_ENUM( "posxi",	TFPpropHORIZONTAL_ALIGN, FXposXI ),
626     RTF_PARA_FRAME_ENUM( "posxo",	TFPpropHORIZONTAL_ALIGN, FXposXO ),
627 
628     RTF_PARA_FRAME_ENUM( "pvmrg",	TFPpropVERTICAL_REF, FYrefMARGIN ),
629     RTF_PARA_FRAME_ENUM( "pvpara",	TFPpropVERTICAL_REF, FYrefPARA ),
630     RTF_PARA_FRAME_ENUM( "pvpg",	TFPpropVERTICAL_REF, FYrefPAGE ),
631     RTF_PARA_FRAME_ENUM( "posyil",	TFPpropVERTICAL_REF, FYrefLINE ),
632 
633     RTF_PARA_FRAME_NUMBER( "posy",	TFPpropVERTICAL_POS ),
634     RTF_PARA_FRAME_NUMBER( "posnegy",	TFPpropVERTICAL_POS ),
635 
636     RTF_PARA_FRAME_ENUM( "posyb",	TFPpropVERTICAL_ALIGN, FYposYB ),
637     RTF_PARA_FRAME_ENUM( "posyc",	TFPpropVERTICAL_ALIGN, FYposYC ),
638     RTF_PARA_FRAME_ENUM( "posyin",	TFPpropVERTICAL_ALIGN, FYposYIN ),
639     RTF_PARA_FRAME_ENUM( "posyout",	TFPpropVERTICAL_ALIGN, FYposYOUT ),
640     RTF_PARA_FRAME_ENUM( "posyt",	TFPpropVERTICAL_ALIGN, FYposYT ),
641 
642     RTF_PARA_FRAME_NUMBER( "dxfrtext",	TFPprop_DFRMTXT ),
643     RTF_PARA_FRAME_NUMBER( "dfrmtxtx",	TFPprop_DFRMTXTX ),
644     RTF_PARA_FRAME_NUMBER( "dfrmtxty",	TFPprop_DFRMTXTY ),
645 
646     RTF_PARA_FRAME_ENUM( "frmtxlrtb",	TFPpropTEXT_FLOW, TXflowTXLRTB ),
647     RTF_PARA_FRAME_ENUM( "frmtxtbrl",	TFPpropTEXT_FLOW, TXflowTXTBRL ),
648     RTF_PARA_FRAME_ENUM( "frmtxbtlr",	TFPpropTEXT_FLOW, TXflowTXBTLR ),
649     RTF_PARA_FRAME_ENUM( "frmtxlrtbv",	TFPpropTEXT_FLOW, TXflowTXLRTBV ),
650     RTF_PARA_FRAME_ENUM( "frmtxtbrlv",	TFPpropTEXT_FLOW, TXflowTXTBRLV ),
651 
652     /*  no TFPpropDFRMTXTL */
653     /*  no TFPpropDFRMTXTR */
654     /*  no TFPpropDFRMTXTT */
655     /*  no TFPpropDFRMTXTB */
656 
657     /**/
658     RTF_REMEMBER( "dropcapli",		TFPprop_IGNORED ),
659     RTF_REMEMBER( "dropcapt",		TFPprop_IGNORED ),
660     RTF_REMEMBER( "wraparound",		TFPprop_IGNORED ),
661 				/****************************************/
662 				/*  Revision marks for paragraph	*/
663 				/*  numbers.				*/
664 				/****************************************/
665     RTF_REMEMBER( "pnrauth",		RTFid_NOT_SUPPORTED ),
666     RTF_REMEMBER( "pnrdate",		RTFid_NOT_SUPPORTED ),
667     RTF_REMEMBER( "pnrnfc",		RTFid_NOT_SUPPORTED ),
668     RTF_REMEMBER( "pnrpnbr",		RTFid_NOT_SUPPORTED ),
669     RTF_REMEMBER( "pnrrgb",		RTFid_NOT_SUPPORTED ),
670     RTF_REMEMBER( "pnrstart",		RTFid_NOT_SUPPORTED ),
671     RTF_REMEMBER( "pnrstop",		RTFid_NOT_SUPPORTED ),
672     RTF_REMEMBER( "pnrxst",		RTFid_NOT_SUPPORTED ),
673 
674 				/****************************************/
675 				/*  Associated Character Properties	*/
676 				/****************************************/
677     RTF_REMEMBER( "ab",			RTFid_NOT_SUPPORTED ),
678     RTF_REMEMBER( "acaps",		RTFid_NOT_SUPPORTED ),
679     RTF_REMEMBER( "acf",		RTFid_NOT_SUPPORTED ),
680     RTF_REMEMBER( "adn",		RTFid_NOT_SUPPORTED ),
681     RTF_REMEMBER( "aexpnd",		RTFid_NOT_SUPPORTED ),
682     RTF_REMEMBER( "af",			RTFid_NOT_SUPPORTED ),
683     RTF_REMEMBER( "afs",		RTFid_NOT_SUPPORTED ),
684     RTF_REMEMBER( "ai",			RTFid_NOT_SUPPORTED ),
685     RTF_REMEMBER( "alang",		RTFid_NOT_SUPPORTED ),
686     RTF_REMEMBER( "aoutl",		RTFid_NOT_SUPPORTED ),
687     RTF_REMEMBER( "ascaps",		RTFid_NOT_SUPPORTED ),
688     RTF_REMEMBER( "ashad",		RTFid_NOT_SUPPORTED ),
689     RTF_REMEMBER( "astrike",		RTFid_NOT_SUPPORTED ),
690     RTF_REMEMBER( "aul",		RTFid_NOT_SUPPORTED ),
691     RTF_REMEMBER( "auld",		RTFid_NOT_SUPPORTED ),
692     RTF_REMEMBER( "auldb",		RTFid_NOT_SUPPORTED ),
693     RTF_REMEMBER( "aulnone",		RTFid_NOT_SUPPORTED ),
694     RTF_REMEMBER( "aulw",		RTFid_NOT_SUPPORTED ),
695     RTF_REMEMBER( "aup",		RTFid_NOT_SUPPORTED ),
696     RTF_REMEMBER( "loch",		RTFid_NOT_SUPPORTED ),
697     RTF_REMEMBER( "hich",		RTFid_NOT_SUPPORTED ),
698     RTF_REMEMBER( "dbch",		RTFid_NOT_SUPPORTED ),
699 
700 				/****************************************/
701 				/*  Row, Cell/Column properties.	*/
702 				/****************************************/
703 # define	RTF_CELL_DEFAULT(s) \
704 		{ s, CLprop_NONE, RTCtypeANY, docRtfRememberCellProperty, }
705 # define	RTF_CELL_NUMBER(s,id) \
706 		{ s, id, RTCtypeVALUE, docRtfRememberCellProperty, }
707 # define	RTF_CELL_ENUM(s,id,v) \
708 		{ s, id, RTCtypeENUM, docRtfRememberCellProperty, v, }
709 # define	RTF_CELL_FLAG(s,id) \
710 		{ s, id, RTCtypeFLAG, docRtfRememberCellProperty, }
711 # define	RTF_CELL_BORDER(s,id) \
712 			RTF_BORDER(s,id,docRtfRememberCellProperty)
713 
714 # define	RTF_CELL_SHD_ENUM(s,id,v) \
715 		{ s, id, RTCtypeENUM, docRtfRememberCellShadingProperty, v, }
716 # define	RTF_CELL_SHD_NUMBER(s,id) \
717 		{ s, id, RTCtypeVALUE, docRtfRememberCellShadingProperty, }
718 
719     RTF_CELL_NUMBER( "cellx",		CLpropCELLX ),
720 
721     RTF_CELL_DEFAULT( "celld" ),
722 
723     RTF_CELL_BORDER( "clbrdrt",		CLpropTOP_BORDER ),
724     RTF_CELL_BORDER( "clbrdrb",		CLpropBOTTOM_BORDER ),
725     RTF_CELL_BORDER( "clbrdrl",		CLpropLEFT_BORDER ),
726     RTF_CELL_BORDER( "clbrdrr",		CLpropRIGHT_BORDER ),
727 
728     RTF_CELL_SHD_ENUM( "clbghoriz",	ISpropPATTERN, PSshdHORIZ ),
729     RTF_CELL_SHD_ENUM( "clbgvert",	ISpropPATTERN, PSshdVERT ),
730     RTF_CELL_SHD_ENUM( "clbgfdiag",	ISpropPATTERN, PSshdFDIAG ),
731     RTF_CELL_SHD_ENUM( "clbgbdiag",	ISpropPATTERN, PSshdBDIAG ),
732     RTF_CELL_SHD_ENUM( "clbgcross",	ISpropPATTERN, PSshdCROSS ),
733     RTF_CELL_SHD_ENUM( "clbgdcross",	ISpropPATTERN, PSshdDCROSS ),
734     RTF_CELL_SHD_ENUM( "clbgdkhor",	ISpropPATTERN, PSshdDKHORIZ ),
735     RTF_CELL_SHD_ENUM( "clbgdkvert",	ISpropPATTERN, PSshdDKVERT ),
736     RTF_CELL_SHD_ENUM( "clbgdkfdiag",	ISpropPATTERN, PSshdDKFDIAG ),
737     RTF_CELL_SHD_ENUM( "clbgdkbdiag",	ISpropPATTERN, PSshdDKBDIAG ),
738     RTF_CELL_SHD_ENUM( "clbgdkcross",	ISpropPATTERN, PSshdDKCROSS ),
739     RTF_CELL_SHD_ENUM( "clbgdkdcross",	ISpropPATTERN, PSshdDKDCROSS ),
740 
741     RTF_CELL_SHD_NUMBER( "clcfpat",	ISpropFORE_COLOR ),
742     RTF_CELL_SHD_NUMBER( "clcbpat",	ISpropBACK_COLOR ),
743     RTF_CELL_SHD_NUMBER( "clshdng",	ISpropLEVEL ),
744 
745     RTF_CELL_SHD_NUMBER( "clcfpatraw",	ISpropFORE_COLOR ), /*?*/
746     RTF_CELL_SHD_NUMBER( "clcbpatraw",	ISpropBACK_COLOR ), /*?*/
747     RTF_CELL_SHD_NUMBER( "clshdngraw",	ISpropLEVEL ), /*?*/
748 
749     RTF_CELL_ENUM( "clvertalt",		CLpropVALIGN, DOCtvaTOP ),
750     RTF_CELL_ENUM( "clvertalc",		CLpropVALIGN, DOCtvaCENTERED ),
751     RTF_CELL_ENUM( "clvertalb",		CLpropVALIGN, DOCtvaBOTTOM ),
752 
753 					/* In table styles */
754     RTF_CELL_ENUM( "tsvertalt",		CLpropVALIGN, DOCtvaTOP ),
755     RTF_CELL_ENUM( "tsvertalc",		CLpropVALIGN, DOCtvaCENTERED ),
756     RTF_CELL_ENUM( "tsvertalb",		CLpropVALIGN, DOCtvaBOTTOM ),
757 
758     RTF_CELL_ENUM( "cltxlrtb",		CLpropTEXT_FLOW, TXflowTXLRTB ),
759     RTF_CELL_ENUM( "cltxtbrl",		CLpropTEXT_FLOW, TXflowTXTBRL ),
760     RTF_CELL_ENUM( "cltxbtlr",		CLpropTEXT_FLOW, TXflowTXBTLR ),
761     RTF_CELL_ENUM( "cltxlrtbv",		CLpropTEXT_FLOW, TXflowTXLRTBV ),
762     RTF_CELL_ENUM( "cltxtbrlv",		CLpropTEXT_FLOW, TXflowTXTBRLV ),
763 
764     RTF_CELL_ENUM( "ClmNone",		CLpropHOR_MERGE, CELLmergeNONE ),
765     RTF_CELL_ENUM( "clmgf",		CLpropHOR_MERGE, CELLmergeHEAD ),
766     RTF_CELL_ENUM( "clmrg",		CLpropHOR_MERGE, CELLmergeFOLLOW ),
767 
768     RTF_CELL_ENUM( "ClvmNone",		CLpropVERT_MERGE, CELLmergeNONE ),
769     RTF_CELL_ENUM( "clvmgf",		CLpropVERT_MERGE, CELLmergeHEAD ),
770     RTF_CELL_ENUM( "clvmrg",		CLpropVERT_MERGE, CELLmergeFOLLOW ),
771 
772     RTF_CELL_FLAG( "clNoWrap",		CLpropNO_WRAP ),
773 
774     RTF_CELL_FLAG( "clshdrawnil",	CLpropNO_SHADING ),
775 
776     RTF_CELL_NUMBER( "clwWidth",	CLpropCLW_WIDTH ),
777     RTF_CELL_NUMBER( "clftsWidth",	CLpropCLFTS_WIDTH ),
778     RTF_CELL_NUMBER( "tscellwidthfts",	RTFid_NOT_SUPPORTED ),
779     RTF_CELL_NUMBER( "tscellpct",	RTFid_NOT_SUPPORTED ),
780     RTF_CELL_NUMBER( "tscbandsh",	RTFid_NOT_SUPPORTED ),
781     RTF_CELL_NUMBER( "tscbandsv",	RTFid_NOT_SUPPORTED ),
782 
783 					/********************************/
784 					/* NOTE: Word 2003 swaps left	*/
785 					/*       and top.		*/
786 					/********************************/
787     RTF_CELL_NUMBER( "clpadt",		CLpropLEFT_PADDING ), /* !!! */
788     RTF_CELL_NUMBER( "clpadb",		CLpropBOTTOM_PADDING ),
789     RTF_CELL_NUMBER( "clpadl",		CLpropTOP_PADDING ), /* !!! */
790     RTF_CELL_NUMBER( "clpadr",		CLpropRIGHT_PADDING ),
791 
792     RTF_CELL_NUMBER( "clpadft",		CLpropLEFT_PADDING_UNIT ), /* !!! */
793     RTF_CELL_NUMBER( "clpadfb",		CLpropBOTTOM_PADDING_UNIT ),
794     RTF_CELL_NUMBER( "clpadfl",		CLpropTOP_PADDING_UNIT ), /* !!! */
795     RTF_CELL_NUMBER( "clpadfr",		CLpropRIGHT_PADDING_UNIT ),
796 
797 				/****************************************/
798 				/*  Application of table styles.	*/
799 				/****************************************/
800 
801 # define	RTF_CELLI_NUMBER(s,id) \
802 		{ s, id, RTCtypeVALUE, docRtfRememberCellInstanceProperty, }
803 # define	RTF_CELLI_FLAG(s,id) \
804 		{ s, id, RTCtypeFLAG, docRtfRememberCellInstanceProperty, }
805 
806     RTF_CELLI_NUMBER( "yts",		CIpropYTS ),
807 
808     RTF_CELLI_FLAG(   "tscfirstrow",	CIpropFIRST_ROW ),
809     RTF_CELLI_FLAG(   "tsclastrow",	CIpropLAST_ROW ),
810     RTF_CELLI_FLAG(   "tscfirstcol",	CIpropFIRST_COLUMN ),
811     RTF_CELLI_FLAG(   "tsclastcol",	CIpropLAST_COLUMN ),
812 
813     RTF_CELLI_FLAG(   "tscbandhorzodd",	CIpropODD_ROW_BAND ),
814     RTF_CELLI_FLAG(   "tscbandhorzeven",CIpropEVEN_ROW_BAND ),
815     RTF_CELLI_FLAG(   "tscbandvertodd",	CIpropODD_COLUMN_BAND ),
816     RTF_CELLI_FLAG(   "tscbandverteven",CIpropEVEN_COLUMN_BAND ),
817 
818     RTF_CELLI_FLAG(   "tscnwcell",	CIpropNW_CELL ),
819     RTF_CELLI_FLAG(   "tscnecell",	CIpropNE_CELL ),
820     RTF_CELLI_FLAG(   "tscswcell",	CIpropSW_CELL ),
821     RTF_CELLI_FLAG(   "tscsecell",	CIpropSE_CELL ),
822 
823 				/****************************************/
824 				/*  Row properties.			*/
825 				/****************************************/
826 
827 # define	RTF_ROW_DEFAULT(s) \
828 		{ s, RPprop_NONE, RTCtypeANY, docRtfRememberRowProperty, }
829 # define	RTF_ROW_NUMBER(s,id) \
830 		{ s, id, RTCtypeVALUE, docRtfRememberRowProperty, }
831 # define	RTF_ROW_ENUM(s,id,v) \
832 		{ s, id, RTCtypeENUM, docRtfRememberRowProperty, v, }
833 # define	RTF_ROW_FLAG(s,id) \
834 		{ s, id, RTCtypeFLAG, docRtfRememberRowProperty, }
835 # define	RTF_ROW_BORDER(s,id) \
836 			RTF_BORDER(s,id,docRtfRememberRowProperty)
837 
838 # define	RTF_ROW_SHD_NUMBER(s,id) \
839 		{ s, id, RTCtypeVALUE, docRtfRememberRowShadingProperty, }
840 # define	RTF_ROW_SHD_ENUM(s,id,v) \
841 		{ s, id, RTCtypeENUM, docRtfRememberRowShadingProperty, v, }
842 
843     RTF_ROW_DEFAULT( "trowd" ),
844 					/* In table styles */
845     RTF_ROW_DEFAULT( "tsrowd" ),
846 
847     RTF_ROW_NUMBER( "trgaph",		RPpropGAP_WIDTH ),
848     RTF_ROW_NUMBER( "trleft",		RPpropLEFT_INDENT ),
849     RTF_ROW_NUMBER( "trrh",		RPpropHEIGHT ),
850 
851     RTF_ROW_FLAG( "trhdr",		RPpropIS_TABLE_HEADER ),
852     RTF_ROW_FLAG( "trkeep",		RPpropKEEP_ON_ONE_PAGE ),
853     RTF_ROW_FLAG( "trkeepfollow",	RPprop_KEEPFOLLOW ),
854     RTF_ROW_FLAG( "trautofit",		RPpropAUTOFIT ),
855 
856     RTF_ROW_ENUM( "trql",		RPpropALIGNMENT, DOCthaLEFT ),
857     RTF_ROW_ENUM( "trqr",		RPpropALIGNMENT, DOCthaRIGHT ),
858     RTF_ROW_ENUM( "trqc",		RPpropALIGNMENT, DOCthaCENTERED ),
859 
860     RTF_ROW_ENUM( "rtlrow",		RPpropRTOL, 1 ),
861     RTF_ROW_ENUM( "ltrrow",		RPpropRTOL, 0 ),
862 
863     /**/
864     RTF_ROW_BORDER( "trbrdrt",		RPpropTOP_BORDER ),
865     RTF_ROW_BORDER( "trbrdrb",		RPpropBOTTOM_BORDER ),
866     RTF_ROW_BORDER( "trbrdrl",		RPpropLEFT_BORDER ),
867     RTF_ROW_BORDER( "trbrdrr",		RPpropRIGHT_BORDER ),
868     RTF_ROW_BORDER( "trbrdrh",		RPpropHORIZ_BORDER ),
869     RTF_ROW_BORDER( "trbrdrv",		RPpropVERT_BORDER ),
870 
871 					/* In table styles */
872     RTF_ROW_BORDER( "tsbrdrt",		RPpropTOP_BORDER ),
873     RTF_ROW_BORDER( "tsbrdrb",		RPpropBOTTOM_BORDER ),
874     RTF_ROW_BORDER( "tsbrdrl",		RPpropLEFT_BORDER ),
875     RTF_ROW_BORDER( "tsbrdrr",		RPpropRIGHT_BORDER ),
876     RTF_ROW_BORDER( "tsbrdrh",		RPpropHORIZ_BORDER ),
877     RTF_ROW_BORDER( "tsbrdrv",		RPpropVERT_BORDER ),
878 
879     RTF_ROW_BORDER( "tsbrdrdgl",	RPprop_IGNORED ),
880     RTF_ROW_BORDER( "tsbrdrdgr",	RPprop_IGNORED ),
881 
882     /**/
883     RTF_ROW_NUMBER( "trwWidth",		RPpropTRW_WIDTH ),
884     RTF_ROW_NUMBER( "trftsWidth",	RPpropTRFTS_WIDTH ),
885 
886     /**/
887     RTF_ROW_NUMBER( "trspdl",		RPpropTRSPDL ),
888     RTF_ROW_NUMBER( "trspdr",		RPpropTRSPDR ),
889     RTF_ROW_NUMBER( "trspdt",		RPpropTRSPDT ),
890     RTF_ROW_NUMBER( "trspdb",		RPpropTRSPDB ),
891 
892     RTF_ROW_NUMBER( "trspdfl",		RPpropTRSPDFL ),
893     RTF_ROW_NUMBER( "trspdfr",		RPpropTRSPDFR ),
894     RTF_ROW_NUMBER( "trspdft",		RPpropTRSPDFT ),
895     RTF_ROW_NUMBER( "trspdfb",		RPpropTRSPDFB ),
896 
897     /**/
898     RTF_ROW_NUMBER( "trpaddl",		RPpropTRPADDL ),
899     RTF_ROW_NUMBER( "trpaddr",		RPpropTRPADDR ),
900     RTF_ROW_NUMBER( "trpaddt",		RPpropTRPADDT ),
901     RTF_ROW_NUMBER( "trpaddb",		RPpropTRPADDB ),
902 
903     RTF_ROW_NUMBER( "trpaddfl",		RPpropTRPADDFL ),
904     RTF_ROW_NUMBER( "trpaddfr",		RPpropTRPADDFR ),
905     RTF_ROW_NUMBER( "trpaddft",		RPpropTRPADDFT ),
906     RTF_ROW_NUMBER( "trpaddfb",		RPpropTRPADDFB ),
907 
908 					/* In table styles */
909     RTF_ROW_NUMBER( "tscellpaddl",	RPpropTRPADDL ),
910     RTF_ROW_NUMBER( "tscellpaddr",	RPpropTRPADDR ),
911     RTF_ROW_NUMBER( "tscellpaddt",	RPpropTRPADDT ),
912     RTF_ROW_NUMBER( "tscellpaddb",	RPpropTRPADDB ),
913 
914 					/* In table styles */
915     RTF_ROW_NUMBER( "tscellpaddfl",	RPpropTRPADDFL ),
916     RTF_ROW_NUMBER( "tscellpaddfr",	RPpropTRPADDFR ),
917     RTF_ROW_NUMBER( "tscellpaddft",	RPpropTRPADDFT ),
918     RTF_ROW_NUMBER( "tscellpaddfb",	RPpropTRPADDFB ),
919 
920     /**/
921     RTF_ROW_NUMBER( "trwWidthB",	RPpropTRW_WIDTHB ),
922     RTF_ROW_NUMBER( "trwWidthA",	RPpropTRW_WIDTHA ),
923 
924     RTF_ROW_NUMBER( "trftsWidthB",	RPpropTRFTS_WIDTHB ),
925     RTF_ROW_NUMBER( "trftsWidthA",	RPpropTRFTS_WIDTHA ),
926 
927     /**/
928     RTF_ROW_SHD_ENUM( "trbghoriz",	ISpropPATTERN, PSshdHORIZ ),
929     RTF_ROW_SHD_ENUM( "trbgvert",	ISpropPATTERN, PSshdVERT ),
930     RTF_ROW_SHD_ENUM( "trbgfdiag",	ISpropPATTERN, PSshdFDIAG ),
931     RTF_ROW_SHD_ENUM( "trbgbdiag",	ISpropPATTERN, PSshdBDIAG ),
932     RTF_ROW_SHD_ENUM( "trbgcross",	ISpropPATTERN, PSshdCROSS ),
933     RTF_ROW_SHD_ENUM( "trbgdcross",	ISpropPATTERN, PSshdDCROSS ),
934     RTF_ROW_SHD_ENUM( "trbgdkhor",	ISpropPATTERN, PSshdDKHORIZ ),
935     RTF_ROW_SHD_ENUM( "trbgdkvert",	ISpropPATTERN, PSshdDKVERT ),
936     RTF_ROW_SHD_ENUM( "trbgdkfdiag",	ISpropPATTERN, PSshdDKFDIAG ),
937     RTF_ROW_SHD_ENUM( "trbgdkbdiag",	ISpropPATTERN, PSshdDKBDIAG ),
938     RTF_ROW_SHD_ENUM( "trbgdkcross",	ISpropPATTERN, PSshdDKCROSS ),
939     RTF_ROW_SHD_ENUM( "trbgdkdcross",	ISpropPATTERN, PSshdDKDCROSS ),
940 
941     RTF_ROW_SHD_NUMBER( "trcfpat",	ISpropFORE_COLOR ),
942     RTF_ROW_SHD_NUMBER( "trcbpat",	ISpropBACK_COLOR ),
943     RTF_ROW_SHD_NUMBER( "trshdng",	ISpropLEVEL ),
944 
945 					/* In table styles */
946     RTF_ROW_SHD_ENUM( "tsbghoriz",	ISpropPATTERN, PSshdHORIZ ),
947     RTF_ROW_SHD_ENUM( "tsbgvert",	ISpropPATTERN, PSshdVERT ),
948     RTF_ROW_SHD_ENUM( "tsbgfdiag",	ISpropPATTERN, PSshdFDIAG ),
949     RTF_ROW_SHD_ENUM( "tsbgbdiag",	ISpropPATTERN, PSshdBDIAG ),
950     RTF_ROW_SHD_ENUM( "tsbgcross",	ISpropPATTERN, PSshdCROSS ),
951     RTF_ROW_SHD_ENUM( "tsbgdcross",	ISpropPATTERN, PSshdDCROSS ),
952     RTF_ROW_SHD_ENUM( "tsbgdkhor",	ISpropPATTERN, PSshdDKHORIZ ),
953     RTF_ROW_SHD_ENUM( "tsbgdkvert",	ISpropPATTERN, PSshdDKVERT ),
954     RTF_ROW_SHD_ENUM( "tsbgdkfdiag",	ISpropPATTERN, PSshdDKFDIAG ),
955     RTF_ROW_SHD_ENUM( "tsbgdkbdiag",	ISpropPATTERN, PSshdDKBDIAG ),
956     RTF_ROW_SHD_ENUM( "tsbgdkcross",	ISpropPATTERN, PSshdDKCROSS ),
957     RTF_ROW_SHD_ENUM( "tsbgdkdcross",	ISpropPATTERN, PSshdDKDCROSS ),
958 
959 					/* In table styles */
960     RTF_ROW_SHD_NUMBER( "tscellcfpat",	ISpropFORE_COLOR ),
961     RTF_ROW_SHD_NUMBER( "tscellcbpat",	ISpropBACK_COLOR ),
962 
963     RTF_ROW_FLAG( "tbllkborder",	RPpropAUTOFORMAT_BORDERS ),
964     RTF_ROW_FLAG( "tbllkshading",	RPpropAUTOFORMAT_SHADING ),
965     RTF_ROW_FLAG( "tbllkfont",		RPpropAUTOFORMAT_FONT ),
966     RTF_ROW_FLAG( "tbllkcolor",		RPpropAUTOFORMAT_COLOR ),
967     RTF_ROW_FLAG( "tbllkbestfit",	RPpropAUTOFORMAT_APPLY_BEST_FIT ),
968     RTF_ROW_FLAG( "tbllkhdrrows",	RPpropAUTOFORMAT_FIRST_ROW ),
969     RTF_ROW_FLAG( "tbllklastrow",	RPpropAUTOFORMAT_LAST_ROW ),
970     RTF_ROW_FLAG( "tbllkhdrcols",	RPpropAUTOFORMAT_FIRST_COLUMN ),
971     RTF_ROW_FLAG( "tbllklastcol",	RPpropAUTOFORMAT_LAST_COLUMN ),
972 
973     RTF_ROW_NUMBER( "irow",		RPpropROW_NUMBER ),
974     RTF_ROW_NUMBER( "irowband",		RPpropROW_BAND_NUMBER ),
975     RTF_ROW_NUMBER( "ts",		RPpropROW_STYLE ),
976 
977     RTF_ROW_FLAG( "lastrow",		RPpropIS_LAST_ROW ),
978     RTF_ROW_FLAG( "trauth",		RPpropTRAUTH ),
979 
980     RTF_ROW_FLAG( "tbllknocolband",	RPpropTRAUTH ),
981     RTF_ROW_NUMBER( "tblind",		RPprop_IGNORED ),
982     RTF_ROW_NUMBER( "tblindtype",	RPprop_IGNORED ),
983 
984 				/****************************************/
985 				/*  Document formatting.		*/
986 				/****************************************/
987 
988 # define	RTF_DOC_NUMBER(s,id) \
989 		{ s, id, RTCtypeVALUE, docRtfRememberDocProperty, }
990 # define	RTF_DOC_FLAG(s,id) \
991 		{ s, id, RTCtypeFLAG, docRtfRememberDocProperty, }
992 # define	RTF_DOC_ENUM(s,id,v) \
993 		{ s, id, RTCtypeENUM, docRtfRememberDocProperty, v }
994 # define	RTF_DOC_BORDER(s,id) \
995 			RTF_BORDER(s,id,docRtfRememberDocProperty)
996 
997     RTF_DOC_NUMBER( "margl",		DGpropLEFT_MARGIN ),
998     RTF_DOC_NUMBER( "margr",		DGpropRIGHT_MARGIN ),
999     RTF_DOC_NUMBER( "margt",		DGpropTOP_MARGIN ),
1000     RTF_DOC_NUMBER( "margb",		DGpropBOTTOM_MARGIN ),
1001     RTF_DOC_NUMBER( "paperh",		DGpropPAGE_HEIGHT ),
1002     RTF_DOC_NUMBER( "paperw",		DGpropPAGE_WIDTH ),
1003     RTF_DOC_NUMBER( "gutter",		DGpropGUTTER ),
1004     RTF_DOC_FLAG( "margmirror",		DGpropMARGMIR ),
1005 
1006     RTF_DOC_FLAG( "facingp",		DPpropFACING_PAGES ),
1007     RTF_DOC_FLAG( "gutterprl",		DPpropGUTTER_HORIZONTAL ),
1008     RTF_DOC_FLAG( "widowctrl",		DPpropWIDOWCTRL ),
1009     RTF_DOC_FLAG( "twoonone",		DPpropTWO_ON_ONE ),
1010     RTF_DOC_FLAG( "doctemp",		DPpropDOCTEMP ),
1011 
1012     RTF_DOC_ENUM( "rtldoc",		DPpropRTOL, 1 ),
1013     RTF_DOC_ENUM( "ltrdoc",		DPpropRTOL, 0 ),
1014 
1015     RTF_REMEMBER( "psz",		RTFid_NOT_SUPPORTED ),
1016 
1017     RTF_REMEMBER( "jcompress",		RTFid_NOT_SUPPORTED),
1018     RTF_REMEMBER( "jexpand",		RTFid_NOT_SUPPORTED),
1019     RTF_REMEMBER( "noqfpromote",	RTFid_NOT_SUPPORTED),
1020     RTF_REMEMBER( "trackmoves",		RTFid_NOT_SUPPORTED),
1021     RTF_REMEMBER( "trackformatting",	RTFid_NOT_SUPPORTED),
1022     RTF_REMEMBER( "relyonvml",		RTFid_NOT_SUPPORTED),
1023     RTF_REMEMBER( "viewbksp",		RTFid_NOT_SUPPORTED),
1024     RTF_REMEMBER( "remdttm",		RTFid_NOT_SUPPORTED),
1025     RTF_REMEMBER( "utinl",		RTFid_NOT_SUPPORTED),
1026     RTF_REMEMBER( "readonlyrecommended",RTFid_NOT_SUPPORTED),
1027 
1028     RTF_REMEMBER( "horzdoc",		RTFid_NOT_SUPPORTED),
1029     RTF_REMEMBER( "dghspace",		RTFid_NOT_SUPPORTED),
1030     RTF_REMEMBER( "dgvspace",		RTFid_NOT_SUPPORTED),
1031     RTF_REMEMBER( "dghorigin",		RTFid_NOT_SUPPORTED),
1032     RTF_REMEMBER( "dgvorigin",		RTFid_NOT_SUPPORTED),
1033     RTF_REMEMBER( "dghshow",		RTFid_NOT_SUPPORTED),
1034     RTF_REMEMBER( "dgvshow",		RTFid_NOT_SUPPORTED),
1035     RTF_REMEMBER( "dgmargin",		RTFid_NOT_SUPPORTED),
1036 
1037     RTF_REMEMBER( "hres",		RTFid_NOT_SUPPORTED),
1038     RTF_REMEMBER( "chhres",		RTFid_NOT_SUPPORTED),
1039 
1040     RTF_DOC_NUMBER( "pgnstart",		DPpropSTART_PAGE ),
1041     RTF_DOC_NUMBER( "deftab",		DPpropDEFTAB ),
1042 
1043     RTF_DOC_NUMBER( "deff",		DPpropDEFF ),
1044     RTF_DOC_NUMBER( "stshfdbch",	DPpropSTSHFDBCH ),
1045     RTF_DOC_NUMBER( "stshfloch",	DPpropSTSHFLOCH ),
1046     RTF_DOC_NUMBER( "stshfhich",	DPpropSTSHFHICH ),
1047     RTF_DOC_NUMBER( "stshfbi",		DPpropSTSHFBI ),
1048 
1049     RTF_DOC_BORDER( "pgbrdrt",		DPpropTOP_BORDER ),
1050     RTF_DOC_BORDER( "pgbrdrb",		DPpropBOTTOM_BORDER ),
1051     RTF_DOC_BORDER( "pgbrdrl",		DPpropLEFT_BORDER ),
1052     RTF_DOC_BORDER( "pgbrdrr",		DPpropRIGHT_BORDER ),
1053     RTF_DOC_BORDER( "pgbrdrhead",	DPpropHEAD_BORDER ),
1054     RTF_DOC_BORDER( "pgbrdrfoot",	DPpropFOOT_BORDER ),
1055 
1056     RTF_REMEMBER( "truncex",		RTFid_NOT_SUPPORTED ),
1057     RTF_REMEMBER( "nolead",		RTFid_NOT_SUPPORTED ),
1058     RTF_REMEMBER( "msmcap",		RTFid_NOT_SUPPORTED ),
1059     RTF_REMEMBER( "splytwnine",		RTFid_NOT_SUPPORTED ),
1060     RTF_REMEMBER( "ftnlytwnine",	RTFid_NOT_SUPPORTED ),
1061     RTF_REMEMBER( "htmautsp",		RTFid_NOT_SUPPORTED ),
1062     RTF_REMEMBER( "useltbaln",		RTFid_NOT_SUPPORTED ),
1063     RTF_REMEMBER( "alntblind",		RTFid_NOT_SUPPORTED ),
1064     RTF_REMEMBER( "lytcalctblwd",	RTFid_NOT_SUPPORTED ),
1065     RTF_REMEMBER( "lyttblrtgr",		RTFid_NOT_SUPPORTED ),
1066     RTF_REMEMBER( "lnbrkrule",		RTFid_NOT_SUPPORTED ),
1067 
1068     RTF_REMEMBER( "bdrrlswsix",		RTFid_NOT_SUPPORTED ),
1069     RTF_REMEMBER( "oldas",		RTFid_NOT_SUPPORTED ),
1070 
1071     RTF_DOC_FLAG( "sprstsm",		DPprop_IGNORED ),
1072     RTF_DOC_FLAG( "pgbrdropt",		DPprop_IGNORED ),
1073     RTF_DOC_FLAG( "pgbrdrsnap",		DPprop_IGNORED ),
1074     RTF_DOC_FLAG( "allowfieldendsel",	DPprop_IGNORED ),
1075     RTF_DOC_FLAG( "nobrkwrptbl",	DPprop_IGNORED ),
1076     RTF_DOC_FLAG( "snaptogridincell",	DPprop_IGNORED ),
1077     RTF_DOC_FLAG( "wrppunct",		DPprop_IGNORED ),
1078     RTF_DOC_FLAG( "asianbrkrule",	DPprop_IGNORED ),
1079     RTF_DOC_FLAG( "newtblstyruls",	DPprop_IGNORED ),
1080     RTF_DOC_FLAG( "nogrowautofit",	DPprop_IGNORED ),
1081     RTF_DOC_FLAG( "rempersonalinfo",	DPprop_IGNORED ),
1082     RTF_DOC_FLAG( "nojkernpunct",	DPprop_IGNORED ),
1083     RTF_DOC_FLAG( "doctype",		DPprop_IGNORED ),
1084 
1085     RTF_DOC_FLAG( "usenormstyforlist",	DPprop_IGNORED ),
1086     RTF_DOC_FLAG( "noindnmbrts",	DPprop_IGNORED ),
1087     RTF_DOC_FLAG( "felnbrelev",		DPprop_IGNORED ),
1088     RTF_DOC_FLAG( "nocxsptable",	DPprop_IGNORED ),
1089     RTF_DOC_FLAG( "indrlsweleven",	DPprop_IGNORED ),
1090     RTF_DOC_FLAG( "noafcnsttbl",	DPprop_IGNORED ),
1091     RTF_DOC_FLAG( "afelev",		DPprop_IGNORED ),
1092     RTF_DOC_FLAG( "hwelev",		DPprop_IGNORED ),
1093     RTF_DOC_FLAG( "spltpgpar",		DPprop_IGNORED ),
1094     RTF_DOC_FLAG( "notcvasp",		DPprop_IGNORED ),
1095     RTF_DOC_FLAG( "notbrkcnstfrctbl",	DPprop_IGNORED ),
1096     RTF_DOC_FLAG( "notvatxbx",		DPprop_IGNORED ),
1097     RTF_DOC_FLAG( "krnprsnet",		DPprop_IGNORED ),
1098     RTF_DOC_FLAG( "cachedcolbal",	DPprop_IGNORED ),
1099     RTF_DOC_FLAG( "nouicompat",		DPprop_IGNORED ),
1100     RTF_DOC_FLAG( "nofeaturethrottle",	DPprop_IGNORED ),
1101 
1102     RTF_DOC_NUMBER( "adeflang",		DPprop_IGNORED ),
1103     RTF_DOC_NUMBER( "adeff",		DPprop_IGNORED ),
1104 
1105 				/****************************************/
1106 				/*  Additional properties for lookup	*/
1107 				/*  entries.				*/
1108 				/****************************************/
1109 
1110 # define	RTF_LOOKUP_FIELD(s,id) \
1111 		{ s, id, RTCtypeANY, docRtfLookupWord, }
1112 # define	RTF_LOOKUP_FLAG(s,id) \
1113 		{ s, id, RTCtypeFLAG, docRtfLookupWord, }
1114 
1115     RTF_LOOKUP_FIELD( "tc",		RTFlookupTC ),
1116     RTF_LOOKUP_FIELD( "tcn",		RTFlookupTCN ),
1117 
1118     RTF_LOOKUP_FLAG( "xef",		RTFlookupXEF ),
1119     RTF_LOOKUP_FLAG( "bxe",		RTFlookupBXE ),
1120     RTF_LOOKUP_FLAG( "ixe",		RTFlookupIXE ),
1121 
1122     RTF_LOOKUP_FLAG( "tcf",		RTFlookupTCF ),
1123     RTF_LOOKUP_FLAG( "tcl",		RTFlookupTCL ),
1124 
1125 				/****************************************/
1126 				/*  Document properties.		*/
1127 				/****************************************/
1128     RTF_REMEMBER( "noxlattoyen",	RTFid_NOT_SUPPORTED ),
1129     RTF_REMEMBER( "expshrtn",		RTFid_NOT_SUPPORTED ),
1130     RTF_REMEMBER( "noultrlspc",		RTFid_NOT_SUPPORTED ),
1131     RTF_REMEMBER( "dntblnsbdb",		RTFid_NOT_SUPPORTED ),
1132     RTF_REMEMBER( "nospaceforul",	RTFid_NOT_SUPPORTED ),
1133 
1134 				/****************************************/
1135 				/*  Paragraph Numbering.		*/
1136 				/****************************************/
1137     RTF_REMEMBER( "pnhang",		RTFidPNHANG ),
1138 
1139     RTF_REMEMBER( "pnuld",		RTFid_NOT_SUPPORTED ),
1140     RTF_REMEMBER( "pnuldb",		RTFid_NOT_SUPPORTED ),
1141     RTF_REMEMBER( "pnulnone",		RTFidPNULNONE ),
1142 
1143 				/****************************************/
1144 				/*  Section properties.			*/
1145 				/****************************************/
1146 # define	RTF_SECT_DEFAULT(s) \
1147 		{ s, SPprop_NONE, RTCtypeANY, docRtfRememberSectionProperty, }
1148 # define	RTF_SECT_NUMBER(s,id) \
1149 		{ s, id, RTCtypeVALUE, docRtfRememberSectionProperty, }
1150 # define	RTF_SECT_ENUM(s,id,v) \
1151 		{ s, id, RTCtypeENUM, docRtfRememberSectionProperty, v, }
1152 # define	RTF_SECT_FLAG(s,id) \
1153 		{ s, id, RTCtypeFLAG, docRtfRememberSectionProperty, }
1154 
1155     RTF_SECT_DEFAULT( "sectd" ),
1156 
1157     RTF_SECT_NUMBER( "headery",		DGpropHEADER_POSITION ),
1158     RTF_SECT_NUMBER( "footery",		DGpropFOOTER_POSITION ),
1159     RTF_SECT_NUMBER( "pgwsxn",		DGpropPAGE_WIDTH ),
1160     RTF_SECT_NUMBER( "pghsxn",		DGpropPAGE_HEIGHT ),
1161     RTF_SECT_NUMBER( "marglsxn",	DGpropLEFT_MARGIN ),
1162     RTF_SECT_NUMBER( "margtsxn",	DGpropTOP_MARGIN ),
1163     RTF_SECT_NUMBER( "margrsxn",	DGpropRIGHT_MARGIN ),
1164     RTF_SECT_NUMBER( "margbsxn",	DGpropBOTTOM_MARGIN ),
1165     RTF_SECT_NUMBER( "guttersxn",	DGpropGUTTER ),
1166     RTF_SECT_FLAG( "margmirsxn",	DGpropMARGMIR ),
1167 
1168     RTF_SECT_NUMBER( "ds",		SPpropSTYLE ),
1169 
1170     RTF_SECT_FLAG( "titlepg",		SPpropTITLEPG ),
1171 
1172     RTF_SECT_ENUM( "sbknone",		SPpropBREAK_KIND, DOCibkNONE ),
1173     RTF_SECT_ENUM( "sbkcol",		SPpropBREAK_KIND, DOCibkCOL ),
1174     RTF_SECT_ENUM( "sbkpage",		SPpropBREAK_KIND, DOCibkPAGE ),
1175     RTF_SECT_ENUM( "sbkeven",		SPpropBREAK_KIND, DOCibkEVEN ),
1176     RTF_SECT_ENUM( "sbkodd",		SPpropBREAK_KIND, DOCibkODD ),
1177 
1178     RTF_SECT_ENUM( "pgndec",		SPpropNUMBER_STYLE, DOCpgnDEC ),
1179     RTF_SECT_ENUM( "pgnucrm",		SPpropNUMBER_STYLE, DOCpgnUCRM ),
1180     RTF_SECT_ENUM( "pgnlcrm",		SPpropNUMBER_STYLE, DOCpgnLCRM ),
1181     RTF_SECT_ENUM( "pgnucltr",		SPpropNUMBER_STYLE, DOCpgnUCLTR ),
1182     RTF_SECT_ENUM( "pgnlcltr",		SPpropNUMBER_STYLE, DOCpgnLCLTR ),
1183 
1184     RTF_SECT_ENUM( "pgncont",		SPpropPAGE_RESTART, 0 ),
1185     RTF_SECT_ENUM( "pgnrestart",	SPpropPAGE_RESTART, 1 ),
1186 
1187     RTF_SECT_ENUM( "rtlsect",		SPpropRTOL, 1 ),
1188     RTF_SECT_ENUM( "ltrsect",		SPpropRTOL, 0 ),
1189 
1190     RTF_SECT_NUMBER( "pgnstarts",	SPpropSTART_PAGE ),
1191 
1192     RTF_SECT_NUMBER( "cols",		SPpropCOLUMN_COUNT ),
1193     RTF_SECT_NUMBER( "colsx",		SPpropCOLUMN_SPACING ),
1194 
1195     RTF_SECT_NUMBER( "colno",		SPprop_COLUMN_NUMBER ),
1196     RTF_SECT_NUMBER( "colsr",		SPprop_COLUMN_RIGHT ),
1197     RTF_SECT_NUMBER( "colw",		SPprop_COLUMN_WIDTH ),
1198 
1199     RTF_SECT_FLAG(   "linebetcol",	SPpropLINEBETCOL ),
1200 
1201     RTF_SECT_ENUM( "pgnhnsh",		SPpropNUMBER_HYPHEN, DOCpgnhPGNHNSH ),
1202     RTF_SECT_ENUM( "pgnhnsp",		SPpropNUMBER_HYPHEN, DOCpgnhPGNHNSP ),
1203     RTF_SECT_ENUM( "pgnhnsc",		SPpropNUMBER_HYPHEN, DOCpgnhPGNHNSC ),
1204     RTF_SECT_ENUM( "pgnhnsm",		SPpropNUMBER_HYPHEN, DOCpgnhPGNHNSM ),
1205     RTF_SECT_ENUM( "pgnhnsn",		SPpropNUMBER_HYPHEN, DOCpgnhPGNHNSN ),
1206 
1207     /**/
1208 
1209     RTF_REMEMBER( "sectdefaultcl",	RTFid_NOT_SUPPORTED ),
1210 
1211     RTF_REMEMBER( "pgnhn",		RTFid_NOT_SUPPORTED ),
1212 
1213     RTF_REMEMBER( "pgnx",		RTFid_NOT_SUPPORTED ),
1214     RTF_REMEMBER( "pgny",		RTFid_NOT_SUPPORTED ),
1215 
1216     RTF_REMEMBER( "linex",		RTFid_NOT_SUPPORTED ),
1217 
1218     RTF_REMEMBER( "vertalb",		RTFid_NOT_SUPPORTED ),
1219     RTF_REMEMBER( "vertalc",		RTFid_NOT_SUPPORTED ),
1220     RTF_REMEMBER( "vertalj",		RTFid_NOT_SUPPORTED ),
1221     RTF_REMEMBER( "vertalt",		RTFid_NOT_SUPPORTED ),
1222 
1223     RTF_REMEMBER( "sectlinegrid",	RTFid_NOT_SUPPORTED ),
1224 
1225     RTF_REMEMBER( "endnhere",		RTFid_NOT_SUPPORTED ),
1226     RTF_REMEMBER( "binfsxn",		RTFid_NOT_SUPPORTED ),
1227     RTF_REMEMBER( "binsxn",		RTFid_NOT_SUPPORTED ),
1228     RTF_REMEMBER( "linecont",		RTFid_NOT_SUPPORTED ),
1229     RTF_REMEMBER( "linemod",		RTFid_NOT_SUPPORTED ),
1230     RTF_REMEMBER( "lineppage",		RTFid_NOT_SUPPORTED ),
1231     RTF_REMEMBER( "linerestart",	RTFid_NOT_SUPPORTED ),
1232     RTF_REMEMBER( "linestarts",		RTFid_NOT_SUPPORTED ),
1233     RTF_REMEMBER( "lndscpsxn",		RTFid_NOT_SUPPORTED ),
1234     RTF_REMEMBER( "sectunlocked",	RTFid_NOT_SUPPORTED ),
1235 
1236 				/****************************************/
1237 				/*  Section properties: (Notes)		*/
1238 				/****************************************/
1239 
1240     RTF_SECT_ENUM( "sftntj",		SPpropFOOTNOTE_JUSTIFICATION,
1241 						    FTNjustifyBELOW_TEXT ),
1242     RTF_SECT_ENUM( "sftnbj",		SPpropFOOTNOTE_JUSTIFICATION,
1243 						    FTNjustifyPAGE_BOTTOM ),
1244 
1245     RTF_SECT_NUMBER( "sftnstart",	SPpropFOOTNOTE_STARTNR ),
1246     RTF_SECT_NUMBER( "saftnstart",	SPpropENDNOTE_STARTNR ),
1247 
1248     RTF_SECT_ENUM( "sftnrstpg",		SPpropFOOTNOTE_RESTART,
1249 						    FTN_RST_PER_PAGE ),
1250     RTF_SECT_ENUM( "sftnrestart",	SPpropFOOTNOTE_RESTART,
1251 						    FTN_RST_PER_SECTION ),
1252     RTF_SECT_ENUM( "sftnrstcont",	SPpropFOOTNOTE_RESTART,
1253 						    FTN_RST_CONTINUOUS ),
1254 
1255     RTF_SECT_ENUM( "saftnrstcont",	SPpropENDNOTE_RESTART,
1256 						    FTN_RST_CONTINUOUS ),
1257     RTF_SECT_ENUM( "saftnrestart",	SPpropENDNOTE_RESTART,
1258 						    FTN_RST_PER_SECTION ),
1259 
1260     RTF_SECT_ENUM( "sftnnar",		SPpropFOOTNOTE_STYLE, FTNstyleNAR ),
1261     RTF_SECT_ENUM( "sftnnalc",		SPpropFOOTNOTE_STYLE, FTNstyleNALC ),
1262     RTF_SECT_ENUM( "sftnnauc",		SPpropFOOTNOTE_STYLE, FTNstyleNAUC ),
1263     RTF_SECT_ENUM( "sftnnrlc",		SPpropFOOTNOTE_STYLE, FTNstyleNRLC ),
1264     RTF_SECT_ENUM( "sftnnruc",		SPpropFOOTNOTE_STYLE, FTNstyleNRUC ),
1265     RTF_SECT_ENUM( "sftnnchi",		SPpropFOOTNOTE_STYLE, FTNstyleNCHI ),
1266 
1267     RTF_SECT_ENUM( "saftnnar",		SPpropENDNOTE_STYLE, FTNstyleNAR ),
1268     RTF_SECT_ENUM( "saftnnalc",		SPpropENDNOTE_STYLE, FTNstyleNALC ),
1269     RTF_SECT_ENUM( "saftnnauc",		SPpropENDNOTE_STYLE, FTNstyleNAUC ),
1270     RTF_SECT_ENUM( "saftnnrlc",		SPpropENDNOTE_STYLE, FTNstyleNRLC ),
1271     RTF_SECT_ENUM( "saftnnruc",		SPpropENDNOTE_STYLE, FTNstyleNRUC ),
1272     RTF_SECT_ENUM( "saftnnchi",		SPpropENDNOTE_STYLE, FTNstyleNCHI ),
1273 
1274 				/****************************************/
1275 				/*  Document properties: (Notes)	*/
1276 				/****************************************/
1277 
1278     RTF_DOC_NUMBER( RTFtag_fet,		DPpropNOTETYPES ),
1279 
1280     RTF_DOC_ENUM( "endnotes",		DPpropFOOTNOTE_PLACEMENT,
1281 						    FTNplaceSECT_END ),
1282     RTF_DOC_ENUM( "enddoc",		DPpropFOOTNOTE_PLACEMENT,
1283 						    FTNplaceDOC_END ),
1284     RTF_DOC_ENUM( "ftntj",		DPpropFOOTNOTE_JUSTIFICATION,
1285 						    FTNjustifyBELOW_TEXT ),
1286     RTF_DOC_ENUM( "ftnbj",		DPpropFOOTNOTE_JUSTIFICATION,
1287 						    FTNjustifyPAGE_BOTTOM ),
1288 
1289     RTF_DOC_ENUM( "aendnotes",		DPpropENDNOTE_PLACEMENT,
1290 						    FTNplaceSECT_END ),
1291     RTF_DOC_ENUM( "aenddoc",		DPpropENDNOTE_PLACEMENT,
1292 						    FTNplaceDOC_END ),
1293     RTF_DOC_ENUM( "aftntj",		DPpropENDNOTE_JUSTIFICATION,
1294 						    FTNjustifyBELOW_TEXT ),
1295     RTF_DOC_ENUM( "aftnbj",		DPpropENDNOTE_JUSTIFICATION,
1296 						    FTNjustifyPAGE_BOTTOM ),
1297 
1298     RTF_DOC_NUMBER( "ftnstart",		DPpropFOOTNOTE_STARTNR ),
1299     RTF_DOC_NUMBER( "aftnstart",	DPpropENDNOTE_STARTNR ),
1300 
1301     RTF_DOC_ENUM( "ftnrstpg",		DPpropFOOTNOTE_RESTART,
1302 						    FTN_RST_PER_PAGE ),
1303     RTF_DOC_ENUM( "ftnrestart",		DPpropFOOTNOTE_RESTART,
1304 						    FTN_RST_PER_SECTION ),
1305     RTF_DOC_ENUM( "ftnrstcont",		DPpropFOOTNOTE_RESTART,
1306 						    FTN_RST_CONTINUOUS ),
1307 
1308     RTF_DOC_ENUM( "aftnrstcont",	DPpropENDNOTE_RESTART,
1309 						    FTN_RST_CONTINUOUS ),
1310     RTF_DOC_ENUM( "aftnrestart",	DPpropENDNOTE_RESTART,
1311 						    FTN_RST_PER_SECTION ),
1312 
1313     RTF_DOC_ENUM( "ftnnar",		DPpropFOOTNOTE_STYLE, FTNstyleNAR ),
1314     RTF_DOC_ENUM( "ftnnalc",		DPpropFOOTNOTE_STYLE, FTNstyleNALC ),
1315     RTF_DOC_ENUM( "ftnnauc",		DPpropFOOTNOTE_STYLE, FTNstyleNAUC ),
1316     RTF_DOC_ENUM( "ftnnrlc",		DPpropFOOTNOTE_STYLE, FTNstyleNRLC ),
1317     RTF_DOC_ENUM( "ftnnruc",		DPpropFOOTNOTE_STYLE, FTNstyleNRUC ),
1318     RTF_DOC_ENUM( "ftnnchi",		DPpropFOOTNOTE_STYLE, FTNstyleNCHI ),
1319 
1320     RTF_DOC_ENUM( "aftnnar",		DPpropENDNOTE_STYLE, FTNstyleNAR ),
1321     RTF_DOC_ENUM( "aftnnalc",		DPpropENDNOTE_STYLE, FTNstyleNALC ),
1322     RTF_DOC_ENUM( "aftnnauc",		DPpropENDNOTE_STYLE, FTNstyleNAUC ),
1323     RTF_DOC_ENUM( "aftnnrlc",		DPpropENDNOTE_STYLE, FTNstyleNRLC ),
1324     RTF_DOC_ENUM( "aftnnruc",		DPpropENDNOTE_STYLE, FTNstyleNRUC ),
1325     RTF_DOC_ENUM( "aftnnchi",		DPpropENDNOTE_STYLE, FTNstyleNCHI ),
1326 
1327 				/****************************************/
1328 				/*  Footnotes/Endnotes.			*/
1329 				/****************************************/
1330 # define	RTF_NOTE_ENUM(s,id,v) \
1331 		{ s, id, RTCtypeENUM, docRtfRememberNoteProperty, v, }
1332 # define	RTF_NOTE_FLAG(s,id) \
1333 		{ s, id, RTCtypeFLAG, docRtfRememberNoteProperty, }
1334 
1335     RTF_NOTE_ENUM( "ftnalt",	NOTEpropTREE_TYPE,	DOCinENDNOTE ),
1336 						/**
1337 						 * For undo/redo only:
1338 						 * Cause the masks to be set.
1339 						 */
1340     RTF_NOTE_ENUM( "NoFtnalt",		NOTEpropTREE_TYPE,	DOCinFOOTNOTE ),
1341     RTF_NOTE_FLAG( "FtnAuto",		NOTEpropAUTO_NUMBER ),
1342 
1343 				/****************************************/
1344 				/*  StyleSheet.				*/
1345 				/****************************************/
1346 # define	RTF_STYLE_FLAG(s,id) \
1347 		{ s, id, RTCtypeFLAG, docRtfRememberStyleProperty, }
1348 # define	RTF_STYLE_NUMBER(s,id) \
1349 		{ s, id, RTCtypeVALUE, docRtfRememberStyleProperty, }
1350 
1351     RTF_STYLE_FLAG( "additive",		DSpropADDITIVE ),
1352     RTF_STYLE_NUMBER( "sbasedon",	DSpropBASED_ON ),
1353     RTF_STYLE_NUMBER( "snext",		DSpropNEXT ),
1354     RTF_STYLE_NUMBER( "slink",		DSpropLINK ),
1355 
1356     /*
1357 
1358     Handeled for the style where the reference to the style is handeled.
1359 
1360     RTF_STYLE_VAL_ENUM( "ds",		DSpropSTYLE_NUMBER, DOClevSECT ),
1361     RTF_STYLE_VAL_ENUM( "ts",		DSpropSTYLE_NUMBER, DOClevROW ),
1362     RTF_STYLE_VAL_ENUM( "s",		DSpropSTYLE_NUMBER, DOClevPARA ),
1363     RTF_STYLE_VAL_ENUM( "cs",		DSpropSTYLE_NUMBER, DOClevSPAN ),
1364     */
1365 
1366     RTF_STYLE_FLAG( "sautoupd",		DSpropAUTO_UPD ),
1367     RTF_STYLE_FLAG( "shidden",		DSpropHIDDEN ),
1368     RTF_STYLE_FLAG( "slocked",		DSpropLOCKED ),
1369     RTF_STYLE_FLAG( "ssemihidden",	DSpropSEMI_HIDDEN ),
1370     RTF_STYLE_FLAG( "spersonal",	DSpropPERSONAL ),
1371 
1372     RTF_STYLE_NUMBER( "spriority",	DSpropIGNORED ),
1373     RTF_STYLE_NUMBER( "sqformat",	DSpropIGNORED ),
1374     RTF_STYLE_NUMBER( "sunhideused",	DSpropIGNORED ),
1375 				/****************************************/
1376 				/*  Encoding.				*/
1377 				/****************************************/
1378     RTF_DOC_ENUM( "ansi",		DPpropDOC_CHARSET, DOCcharsetANSI ),
1379     RTF_DOC_ENUM( "mac",		DPpropDOC_CHARSET, DOCcharsetMAC ),
1380     RTF_DOC_ENUM( "pc",			DPpropDOC_CHARSET, DOCcharsetPC ),
1381     RTF_DOC_ENUM( "pca",		DPpropDOC_CHARSET, DOCcharsetPCA ),
1382     RTF_DOC_NUMBER( "ansicpg",		DPpropANSICPG ),
1383 
1384     RTF_DOC_NUMBER( "deflang",		DPpropDEFLANG ),
1385 
1386 				/****************************************/
1387 				/*  Colors in the color table.		*/
1388 				/****************************************/
1389 # define	RTF_COLOR_NUMBER(s,id) \
1390 				{ s, id, RTCtypeVALUE, docRtfColorComp, }
1391 # define	RTF_COLOR_IGNORED(s,id) \
1392 				{ s, id, RTCtypeANY, docRtfColorIgnored, }
1393 
1394     RTF_COLOR_NUMBER( "red",		RGBAcompRED ),
1395     RTF_COLOR_NUMBER( "green",		RGBAcompGREEN ),
1396     RTF_COLOR_NUMBER( "blue",		RGBAcompBLUE ),
1397 
1398     RTF_COLOR_IGNORED( "caccentone",		1 ),
1399     RTF_COLOR_IGNORED( "caccenttwo",		1 ),
1400     RTF_COLOR_IGNORED( "caccentthree",		1 ),
1401     RTF_COLOR_IGNORED( "caccentfour",		1 ),
1402     RTF_COLOR_IGNORED( "caccentfive",		1 ),
1403     RTF_COLOR_IGNORED( "caccentsix",		1 ),
1404     RTF_COLOR_IGNORED( "chyperlink",		1 ),
1405     RTF_COLOR_IGNORED( "cfollowedhyperlink",	1 ),
1406     RTF_COLOR_IGNORED( "cbackgroundone",	1 ),
1407     RTF_COLOR_IGNORED( "ctextone",		1 ),
1408     RTF_COLOR_IGNORED( "cbackgroundtwo",	1 ),
1409     RTF_COLOR_IGNORED( "ctexttwo",		1 ),
1410     RTF_COLOR_IGNORED( "ctint",			1 ),
1411     RTF_COLOR_IGNORED( "cshade",		1 ),
1412 
1413 				/****************************************/
1414 				/*  Fields.				*/
1415 				/****************************************/
1416 
1417 # define	RTF_FIELD_FLAG(s,id) \
1418 		{ s, id, RTCtypeFLAG, docRtfRememberFieldProperty, }
1419 # define	RTF_FIELD_NUMBER(s,id) \
1420 		{ s, id, RTCtypeVALUE, docRtfRememberFieldProperty, }
1421 
1422     RTF_FIELD_FLAG( "flddirty",		FPpropDIRTY ),
1423     RTF_FIELD_FLAG( "fldedit",		FPpropEDITED ),
1424     RTF_FIELD_FLAG( "fldlock",		FPpropLOCKED ),
1425     RTF_FIELD_FLAG( "fldpriv",		FPpropPRIVATE ),
1426 
1427     RTF_FIELD_NUMBER( "bkmkcolf",	FPpropFIRST_COLUMN ),
1428     RTF_FIELD_NUMBER( "bkmkcoll",	FPpropLAST_COLUMN ),
1429 
1430 				/****************************************/
1431 				/*  Unknown				*/
1432 				/****************************************/
1433     RTF_REMEMBER( "lin",		RTFid_NOT_SUPPORTED ),
1434     RTF_REMEMBER( "rin",		RTFid_NOT_SUPPORTED ),
1435     RTF_REMEMBER( "lang",		RTFid_NOT_SUPPORTED ),
1436     RTF_REMEMBER( "noproof",		RTFid_NOT_SUPPORTED ),
1437     RTF_REMEMBER( "langnp",		RTFid_NOT_SUPPORTED ),
1438     RTF_REMEMBER( "langfe",		RTFid_NOT_SUPPORTED ),
1439     RTF_REMEMBER( "langfenp",		RTFid_NOT_SUPPORTED ),
1440     RTF_REMEMBER( "langf",		RTFid_NOT_SUPPORTED ), /* ? */
1441     RTF_REMEMBER( "nopro",		RTFid_NOT_SUPPORTED ), /* ? */
1442     RTF_REMEMBER( "nolnhtadjtbl",	RTFid_NOT_SUPPORTED ),
1443     RTF_REMEMBER( "themelang",		RTFid_NOT_SUPPORTED ),
1444     RTF_REMEMBER( "themelangfe",	RTFid_NOT_SUPPORTED ),
1445     RTF_REMEMBER( "themelangcs",	RTFid_NOT_SUPPORTED ),
1446 
1447 				/****************************************/
1448 				/*  Document Formatting properties.	*/
1449 				/****************************************/
1450     RTF_REMEMBER( "allprot",		RTFid_NOT_SUPPORTED ),
1451     RTF_REMEMBER( "annotprot",		RTFid_NOT_SUPPORTED ),
1452     RTF_REMEMBER( "brkfrm",		RTFid_NOT_SUPPORTED ),
1453     RTF_REMEMBER( "cvmme",		RTFid_NOT_SUPPORTED ),
1454     RTF_REMEMBER( "defformat",		RTFid_NOT_SUPPORTED ),
1455     RTF_REMEMBER( "fldalt",		RTFid_NOT_SUPPORTED ),
1456     RTF_REMEMBER( "formdisp",		RTFid_NOT_SUPPORTED ),
1457     RTF_REMEMBER( "formprot",		RTFid_NOT_SUPPORTED ),
1458     RTF_REMEMBER( "formshade",		RTFid_NOT_SUPPORTED ),
1459     RTF_REMEMBER( "fracwidth",		RTFid_NOT_SUPPORTED ),
1460     RTF_REMEMBER( "hyphauto",		RTFid_NOT_SUPPORTED ),
1461     RTF_REMEMBER( "hyphcaps",		RTFid_NOT_SUPPORTED ),
1462     RTF_REMEMBER( "hyphconsec",		RTFid_NOT_SUPPORTED ),
1463     RTF_REMEMBER( "hyphhotz",		RTFid_NOT_SUPPORTED ),
1464     RTF_REMEMBER( "landscape",		RTFid_NOT_SUPPORTED ),
1465     RTF_REMEMBER( "linestart",		RTFid_NOT_SUPPORTED ),
1466     RTF_REMEMBER( "linkstyles",		RTFid_NOT_SUPPORTED ),
1467     RTF_REMEMBER( "makebackup",		RTFid_NOT_SUPPORTED ),
1468     RTF_REMEMBER( "nocolbal",		RTFid_NOT_SUPPORTED ),
1469     RTF_REMEMBER( "noextrasprl",	RTFid_NOT_SUPPORTED ),
1470     RTF_REMEMBER( "notabind",		RTFid_NOT_SUPPORTED ),
1471     RTF_REMEMBER( "otblrul",		RTFid_NOT_SUPPORTED ),
1472     RTF_REMEMBER( "prcolbl",		RTFid_NOT_SUPPORTED ),
1473     RTF_REMEMBER( "printdata",		RTFid_NOT_SUPPORTED ),
1474     RTF_REMEMBER( "psover",		RTFid_NOT_SUPPORTED ),
1475     RTF_REMEMBER( "revbar",		RTFid_NOT_SUPPORTED ),
1476     RTF_REMEMBER( "revisions",		RTFid_NOT_SUPPORTED ),
1477     RTF_REMEMBER( "revprop",		RTFid_NOT_SUPPORTED ),
1478     RTF_REMEMBER( "revprot",		RTFid_NOT_SUPPORTED ),
1479     RTF_REMEMBER( "sprslnsp",		RTFid_NOT_SUPPORTED ),
1480     RTF_REMEMBER( "sprsspbf",		RTFid_NOT_SUPPORTED ),
1481     RTF_REMEMBER( "sprstsp",		RTFid_NOT_SUPPORTED ),
1482     RTF_REMEMBER( "subfontbysize",	RTFid_NOT_SUPPORTED ),
1483     RTF_REMEMBER( "swpbdr",		RTFid_NOT_SUPPORTED ),
1484     RTF_REMEMBER( "transmf",		RTFid_NOT_SUPPORTED ),
1485     RTF_REMEMBER( "ight",		RTFid_NOT_SUPPORTED ),
1486     RTF_REMEMBER( "wraptrsp",		RTFid_NOT_SUPPORTED ),
1487     RTF_REMEMBER( "viewzk",		RTFid_NOT_SUPPORTED ),
1488     RTF_REMEMBER( "viewkind",		RTFid_NOT_SUPPORTED ),
1489     RTF_REMEMBER( "viewscale",		RTFid_NOT_SUPPORTED ),
1490     RTF_REMEMBER( "lytprtmet",		RTFid_NOT_SUPPORTED ),
1491     RTF_REMEMBER( "ogutter",		RTFid_NOT_SUPPORTED ),
1492     RTF_REMEMBER( "rtlgutter",		RTFid_NOT_SUPPORTED ),
1493     RTF_REMEMBER( "deflangfe",		RTFid_NOT_SUPPORTED ),
1494     RTF_REMEMBER( "uc",			RTFidUC ),
1495     RTF_REMEMBER( "level",		RTFid_NOT_SUPPORTED ),
1496     RTF_REMEMBER( "noline",		RTFid_NOT_SUPPORTED ),
1497     RTF_REMEMBER( "sbys",		RTFid_NOT_SUPPORTED ),
1498     RTF_REMEMBER( "subdocument",	RTFid_NOT_SUPPORTED ),
1499 
1500     RTF_REMEMBER( "donotembedsysfont",	RTFid_NOT_SUPPORTED ),
1501     RTF_REMEMBER( "donotembedlingdata",	RTFid_NOT_SUPPORTED ),
1502     RTF_REMEMBER( "grfdocevents",	RTFid_NOT_SUPPORTED ),
1503     RTF_REMEMBER( "validatexml",	RTFid_NOT_SUPPORTED ),
1504     RTF_REMEMBER( "showplaceholdtext",	RTFid_NOT_SUPPORTED ),
1505     RTF_REMEMBER( "ignoremixedcontent",	RTFid_NOT_SUPPORTED ),
1506     RTF_REMEMBER( "saveinvalidxml",	RTFid_NOT_SUPPORTED ),
1507     RTF_REMEMBER( "showxmlerrors",	RTFid_NOT_SUPPORTED ),
1508     RTF_REMEMBER( "ilfomacatclnup",	RTFid_NOT_SUPPORTED ),
1509 
1510 				/****************************************/
1511 				/*  Fields in dates and times.		*/
1512 				/****************************************/
1513 # define	RTF_TIME_NUMBER(s,id) \
1514 		{ s, id, RTCtypeVALUE, docRtfReadTimeField, }
1515 
1516     RTF_TIME_NUMBER( "hr",		RTFidHR ),
1517     RTF_TIME_NUMBER( "min",		RTFidMIN ),
1518     RTF_TIME_NUMBER( "sec",		RTFidSEC ),
1519     RTF_TIME_NUMBER( "dy",		RTFidDY ),
1520     RTF_TIME_NUMBER( "mo",		RTFidMO ),
1521     RTF_TIME_NUMBER( "yr",		RTFidYR ),
1522 
1523 				/****************************************/
1524 				/*  Unsupported W2002 revision		*/
1525 				/*  control.				*/
1526 				/****************************************/
1527     RTF_REMEMBER( "insrsid",		RTFid_NOT_SUPPORTED ),
1528     RTF_REMEMBER( "rsidroot",		RTFid_NOT_SUPPORTED ),
1529     RTF_REMEMBER( "delrsid",		RTFid_NOT_SUPPORTED ),
1530     RTF_REMEMBER( "charrsid",		RTFid_NOT_SUPPORTED ),
1531     RTF_REMEMBER( "sectrsid",		RTFid_NOT_SUPPORTED ),
1532     RTF_REMEMBER( "pararsid",		RTFid_NOT_SUPPORTED ),
1533     RTF_REMEMBER( "tblrsid",		RTFid_NOT_SUPPORTED ),
1534     RTF_REMEMBER( "styrsid",		RTFid_NOT_SUPPORTED ),
1535 
1536 				/****************************************/
1537 				/*  List table &c.			*/
1538 				/****************************************/
1539 # define	RTF_LISTLEV_NUMBER(s,id) \
1540 		{ s, id, RTCtypeVALUE, docRtfRememberListLevelProperty, }
1541 
1542 # define	RTF_LIST_NUMBER(s,id) \
1543 		{ s, id, RTCtypeVALUE, docRtfRememberListProperty, }
1544 # define	RTF_LIST_ENUM(s,id,v) \
1545 		{ s, id, RTCtypeENUM, docRtfRememberListProperty, v, }
1546 # define	RTF_LIST_FLAG(s,id) \
1547 		{ s, id, RTCtypeFLAG, docRtfRememberListProperty, }
1548 
1549     RTF_DEST_XX( "list",		DPpropLISTTABLE,
1550 					    docRtfRememberList ),
1551     RTF_DEST_XX( "listlevel",		DLpropLEVELS,
1552 					    docRtfRememberListLevel ),
1553 
1554     RTF_TEXT_GROUP( "leveltext",	LLpropTEXT,
1555 					    docRtfCommitListLevelText ),
1556     RTF_BYTE_GROUP( "levelnumbers",	LLpropNUMBERS,
1557 					    docRtfCommitListLevelNumbers ),
1558     RTF_TEXT_GROUP( "listname",		DLpropNAME,
1559 					    docRtfCommitListName ),
1560     RTF_TEXT_GROUP( "liststylename",	DLpropSTYLENAME,
1561 					    docRtfCommitListStyleName ),
1562 
1563     RTF_LISTLEV_NUMBER( "levelstartat",		LLpropSTARTAT ),
1564     RTF_LISTLEV_NUMBER( "levelnfcn",		LLpropSTYLE ),
1565     RTF_LISTLEV_NUMBER( "levelnfc",		LLpropSTYLE ),		/**/
1566     RTF_LISTLEV_NUMBER( "leveljcn",		LLpropJUSTIFY ),
1567     RTF_LISTLEV_NUMBER( "leveljc",		LLpropJUSTIFY ),	/**/
1568     RTF_LISTLEV_NUMBER( "levelfollow",		LLpropFOLLOW ),
1569     RTF_LISTLEV_NUMBER( "levellegal",		LLpropLEGAL ),
1570     RTF_LISTLEV_NUMBER( "levelnorestart",	LLpropNORESTART ),
1571     RTF_LISTLEV_NUMBER( "levelpicture",		LLpropPICTURE ),
1572     RTF_LISTLEV_NUMBER( "fbias",		LLpropFBIAS ),
1573 
1574     RTF_LIST_FLAG( "lvltentative",		RTFid_NOT_SUPPORTED ),
1575 
1576     RTF_LISTLEV_NUMBER( "leveltemplateid",	LLpropTEMPLATEID ),
1577 
1578     RTF_LISTLEV_NUMBER( "levelold",		LLpropOLD ),		/**/
1579     RTF_LISTLEV_NUMBER( "levelprev",		LLpropPREV ),		/**/
1580     RTF_LISTLEV_NUMBER( "levelprevspace",	LLpropPREVSPACE ),	/**/
1581     RTF_LISTLEV_NUMBER( "levelindent",		LLpropINDENT ),		/**/
1582     RTF_LISTLEV_NUMBER( "levelspace",		LLpropSPACE ),		/**/
1583 
1584     RTF_LIST_NUMBER( "listid",			DLpropLISTID ),
1585     RTF_LIST_NUMBER( "listtemplateid",		DLpropTEMPLATEID ),
1586     RTF_LIST_ENUM( "listsimple",		DLpropHYBRID, 0 ),
1587     RTF_LIST_ENUM( "listhybrid",		DLpropHYBRID, 1 ),
1588     RTF_LIST_FLAG( "listrestarthdn",		DLpropRESTARTHDN ),
1589     RTF_LIST_NUMBER( "liststyleid",		DLpropSTYLEID ),
1590 
1591     RTF_LISTOVERR_NUMBER( "listoverridecount",	LOpropOVERRIDECOUNT ),
1592     /* "listid" ->	LOpropLISTID used via list */
1593     /* "ls" ->		LOpropINDEX  used via paragraph properties */
1594 
1595     RTF_LISTOVERRLEV_FLAG( "listoverridestartat",	LOLpropSTARTAT ),
1596     RTF_LISTOVERRLEV_FLAG( "listoverrideformat",	LOLpropFORMAT ),
1597 
1598 				/****************************************/
1599 				/*  Tab stops.				*/
1600 				/*					*/
1601 				/*  "tql" is not part of the rtf spec	*/
1602 				/*  but it can be found in some		*/
1603 				/*  documents.				*/
1604 				/*					*/
1605 				/*  "tx" is handeled differently.	*/
1606 				/*					*/
1607 				/****************************************/
1608 # define	RTF_TAB_ENUM(s,id,v) \
1609 		{ s, id, RTCtypeENUM, docRtfRememberTabStopProperty, v }
1610 # define	RTF_TAB_FLAG(s,id) \
1611 		{ s, id, RTCtypeFLAG, docRtfRememberTabStopProperty }
1612 # define	RTF_TAB_NUMBER(s,id) \
1613 		{ s, id, RTCtypeVALUE, docRtfRememberTabStopProperty, }
1614 
1615     RTF_TAB_ENUM( RTFtag_tql,	TABpropALIGN,	DOCtaLEFT ),
1616     RTF_TAB_ENUM( RTFtag_tqr,	TABpropALIGN,	DOCtaRIGHT ),
1617     RTF_TAB_ENUM( RTFtag_tqc,	TABpropALIGN,	DOCtaCENTER ),
1618     RTF_TAB_ENUM( RTFtag_tqdec,	TABpropALIGN,	DOCtaDECIMAL ),
1619 
1620     RTF_TAB_ENUM( "tldot",	TABpropLEADER,	DOCtlDOTS ),
1621     RTF_TAB_ENUM( "tlul",	TABpropLEADER,	DOCtlUNDERLINE ),
1622     RTF_TAB_ENUM( "tlhyph",	TABpropLEADER,	DOCtlHYPH ),
1623     RTF_TAB_ENUM( "tlth",	TABpropLEADER,	DOCtlTHICK ),
1624     RTF_TAB_ENUM( "tleq",	TABpropLEADER,	DOCtlEQUAL ),
1625 
1626     RTF_TAB_FLAG( "jclisttab",	TABpropFROM_STYLE ),
1627 
1628     RTF_TAB_NUMBER( "tx",	TABpropX ),
1629 
1630     RTF_REMEMBER( "tb",		RTFid_NOT_SUPPORTED ),
1631 
1632 				/****************************************/
1633 				/*  Font table.				*/
1634 				/****************************************/
1635 # define	RTF_FONT_ENUM(s,id,v) \
1636 		{ s, id, RTCtypeENUM, docRtfFontProperty, v }
1637 # define	RTF_FONT_NUMBER(s,id) \
1638 		{ s, id, RTCtypeVALUE, docRtfFontProperty, }
1639 
1640     RTF_FONT_ENUM( "fnil",	DFpropFAMILY_STYLE,	DFstyleFNIL ),
1641     RTF_FONT_ENUM( "froman",	DFpropFAMILY_STYLE,	DFstyleFROMAN ),
1642     RTF_FONT_ENUM( "fswiss",	DFpropFAMILY_STYLE,	DFstyleFSWISS ),
1643     RTF_FONT_ENUM( "fmodern",	DFpropFAMILY_STYLE,	DFstyleFMODERN ),
1644     RTF_FONT_ENUM( "fscript",	DFpropFAMILY_STYLE,	DFstyleFSCRIPT ),
1645     RTF_FONT_ENUM( "fdecor",	DFpropFAMILY_STYLE,	DFstyleFDECOR ),
1646     RTF_FONT_ENUM( "ftech",	DFpropFAMILY_STYLE,	DFstyleFTECH ),
1647     RTF_FONT_ENUM( "fbidi",	DFpropFAMILY_STYLE,	DFstyleFBIDI ),
1648 
1649     RTF_FONT_NUMBER( "fcharset", DFpropCHARSET ),
1650     RTF_FONT_NUMBER( "cpg",	DFpropCODEPAGE ),
1651     RTF_FONT_NUMBER( "fprq",	DFpropPITCH ),
1652 
1653 				/****************************************/
1654 				/*  Pictures/Objects			*/
1655 				/****************************************/
1656 
1657 # define	RTF_PICT_TYPE(s,id,v) \
1658 		{ s, id, RTCtypeANY, docRtfPictureProperty, v }
1659 # define	RTF_PICT_NUMBER(s,id) \
1660 		{ s, id, RTCtypeVALUE, docRtfPictureProperty, }
1661 # define	RTF_PICT_FLAG(s,id) \
1662 		{ s, id, RTCtypeFLAG, docRtfPictureProperty, }
1663 
1664     RTF_PICT_TYPE( "macpict",	PIPpropTYPE,	DOCokMACPICT ),
1665     RTF_PICT_TYPE( "wmetafile",	PIPpropTYPE,	DOCokPICTWMETAFILE ),
1666     RTF_PICT_TYPE( "pngblip",	PIPpropTYPE,	DOCokPICTPNGBLIP ),
1667     RTF_PICT_TYPE( "jpegblip",	PIPpropTYPE,	DOCokPICTJPEGBLIP ),
1668     RTF_PICT_TYPE( "emfblip",	PIPpropTYPE,	DOCokPICTEMFBLIP ),
1669     RTF_PICT_TYPE( "dibitmap",	PIPpropTYPE,	DOCokDIBITMAP ),
1670     RTF_PICT_TYPE( "wbitmap",	PIPpropTYPE,	DOCokWBITMAP ),
1671     RTF_PICT_TYPE( "pmmetafile",PIPpropTYPE,	DOCokPMMETAFILE ),
1672 
1673     RTF_PICT_NUMBER( "wbmbitspixel",	PIPpropWBMBITSPIXEL ),
1674     RTF_PICT_NUMBER( "wbmplanes",	PIPpropWBMPLANES ),
1675     RTF_PICT_NUMBER( "wbmwidthbytes",	PIPpropWBMWIDTHBYTES ),
1676 
1677     RTF_PICT_NUMBER( "picw",		PIPpropPICX_WIN_EXT ),
1678     RTF_PICT_NUMBER( "pich",		PIPpropPICY_WIN_EXT ),
1679 
1680     RTF_PICT_NUMBER( "picwgoal",	PIPpropPICTWIPS_WIDE ),
1681     RTF_PICT_NUMBER( "pichgoal",	PIPpropPICTWIPS_HIGH ),
1682 
1683     RTF_PICT_NUMBER( "picscalex",	PIPpropPICSCALE_X ),
1684     RTF_PICT_NUMBER( "picscaley",	PIPpropPICSCALE_Y ),
1685 
1686     RTF_PICT_NUMBER( "piccropt",	PIPpropPICCROP_TOP ),
1687     RTF_PICT_NUMBER( "piccropb",	PIPpropPICCROP_BOTTOM ),
1688     RTF_PICT_NUMBER( "piccropl",	PIPpropPICCROP_LEFT ),
1689     RTF_PICT_NUMBER( "piccropr",	PIPpropPICCROP_RIGHT ),
1690 
1691     RTF_PICT_FLAG( "defshp",		PIPpropDEFSHP ),
1692 
1693     RTF_PICT_FLAG( "picscaled",		PIPpropPICSCALED ),
1694 
1695     RTF_PICT_NUMBER( "bliptag",		PIPpropBLIPTAG ),
1696 
1697     RTF_PICT_FLAG( "picbmp",		PIPpropPICBMP ),
1698     RTF_PICT_NUMBER( "picbpp",		PIPpropPICBPP ),
1699     RTF_PICT_NUMBER( "blipupi",		PIPpropBLIPUPI ),
1700 
1701 # define	RTF_OBJ_ENUM(s,id,v) \
1702 		{ s, id, RTCtypeENUM, docRtfObjectProperty, v }
1703 # define	RTF_OBJ_NUMBER(s,id) \
1704 		{ s, id, RTCtypeVALUE, docRtfObjectProperty, }
1705 # define	RTF_OBJ_FLAG(s,id) \
1706 		{ s, id, RTCtypeFLAG, docRtfObjectProperty, }
1707 
1708     RTF_OBJ_ENUM( "rsltrtf",	IOpropRESULT_KIND,	RESULTkindRTF ),
1709     RTF_OBJ_ENUM( "rslttxt",	IOpropRESULT_KIND,	RESULTkindTXT ),
1710     RTF_OBJ_ENUM( "rsltpict",	IOpropRESULT_KIND,	RESULTkindPICT ),
1711     RTF_OBJ_ENUM( "rsltbmp",	IOpropRESULT_KIND,	RESULTkindBMP ),
1712     RTF_OBJ_ENUM( "rslthtml",	IOpropRESULT_KIND,	RESULTkindHTML ),
1713 
1714     RTF_OBJ_ENUM( "objemb",	IOpropEMBED_KIND, EMBEDkindOBJEMB ),
1715     RTF_OBJ_ENUM( "objlink",	IOpropEMBED_KIND, EMBEDkindOBJLINK ),
1716     RTF_OBJ_ENUM( "objautlink",	IOpropEMBED_KIND, EMBEDkindOBJAUTLINK ),
1717     RTF_OBJ_ENUM( "objsub",	IOpropEMBED_KIND, EMBEDkindOBJSUB ),
1718     RTF_OBJ_ENUM( "objpub",	IOpropEMBED_KIND, EMBEDkindOBJPUB ),
1719     RTF_OBJ_ENUM( "objicemb",	IOpropEMBED_KIND, EMBEDkindOBJICEMB ),
1720     RTF_OBJ_ENUM( "objhtml",	IOpropEMBED_KIND, EMBEDkindOBJHTML ),
1721     RTF_OBJ_ENUM( "objocx",	IOpropEMBED_KIND, EMBEDkindOBJOCX ),
1722 
1723     RTF_OBJ_NUMBER( "objw",		IOpropOBJTWIPS_WIDE ),
1724     RTF_OBJ_NUMBER( "objh",		IOpropOBJTWIPS_HIGH ),
1725 
1726     RTF_OBJ_NUMBER( "objscalex",	IOpropOBJSCALE_X ),
1727     RTF_OBJ_NUMBER( "objscaley",	IOpropOBJSCALE_Y ),
1728 
1729     RTF_OBJ_NUMBER( "objcropt",		IOpropOBJCROP_TOP ),
1730     RTF_OBJ_NUMBER( "objcropb",		IOpropOBJCROP_BOTTOM ),
1731     RTF_OBJ_NUMBER( "objcropl",		IOpropOBJCROP_LEFT ),
1732     RTF_OBJ_NUMBER( "objcropr",		IOpropOBJCROP_RIGHT ),
1733 
1734     RTF_OBJ_NUMBER( "objsetsize",	IOprop_UNSUPPORTED ),
1735     RTF_OBJ_NUMBER( "rsltmerge",	IOprop_UNSUPPORTED ),
1736 
1737 				/****************************************/
1738 				/*  Special characters (mostly ignored)	*/
1739 				/****************************************/
1740 # define	RTF_SPECIAL_CHAR(s,id) \
1741 		{ s, id, RTCtypeSYMBOL, docRtfTextSpecialChar, }
1742 
1743     RTF_SPECIAL_CHAR( "bullet",		ISO1_periodcentered ),
1744     RTF_SPECIAL_CHAR( "emdash",		ISO1_hyphen ),
1745     RTF_SPECIAL_CHAR( "emspace",	ISO1_space ),
1746     RTF_SPECIAL_CHAR( "endash",		ISO1_hyphen ),
1747     RTF_SPECIAL_CHAR( "enspace",	ISO1_space ),
1748     RTF_SPECIAL_CHAR( "ldblquote",	ISO1_quotedbl ),
1749     RTF_SPECIAL_CHAR( "lquote",		ASCII_quoteleft ),
1750     RTF_SPECIAL_CHAR( "rdblquote",	ISO1_quotedbl ),
1751     RTF_SPECIAL_CHAR( "rquote",		ISO1_quotesingle ),
1752 
1753     RTF_SPECIAL_CHAR( "softcol",	ISO1_space ),
1754     RTF_SPECIAL_CHAR( "softlheight",	ISO1_space ),
1755     RTF_SPECIAL_CHAR( "softline",	ISO1_space ),
1756     RTF_SPECIAL_CHAR( "softpage",	ISO1_space ),
1757     RTF_SPECIAL_CHAR( "zwj",		ISO1_space ),
1758     RTF_SPECIAL_CHAR( "zwnj",		ISO1_space ),
1759 
1760 # define	RTF_UNICODE(s,id) \
1761 		{ s, id, RTCtypeVALUE, docRtfTextUnicode, }
1762 
1763     RTF_UNICODE( "u",			ISO1_space ),
1764 
1765 # define	RTF_SPECIAL_PART(s,id) \
1766 		{ s, id, RTCtypeANY, docRtfTextSpecialParticule, }
1767 # define	RTF_BIDI_MARK(s,id) \
1768 		{ s, id, RTCtypeANY, docRtfTextBidiMark, }
1769 
1770     RTF_SPECIAL_PART( "-",		DOCkindOPT_HYPH ),
1771     RTF_SPECIAL_PART( "tab",		DOCkindTAB ),
1772     RTF_SPECIAL_PART( "line",		DOCkindLINEBREAK ),
1773     RTF_SPECIAL_PART( "lbr",		DOCkindLINEBREAK ),
1774     RTF_SPECIAL_PART( "page",		DOCkindPAGEBREAK ),
1775     RTF_SPECIAL_PART( "column",		DOCkindCOLUMNBREAK ),
1776     RTF_SPECIAL_PART( "chftnsep",	DOCkindCHFTNSEP ),
1777     RTF_SPECIAL_PART( "chftnsepc",	DOCkindCHFTNSEPC ),
1778     RTF_SPECIAL_PART( "ltrmark",	DOCkindLTR_MARK ),
1779     RTF_SPECIAL_PART( "rtlmark",	DOCkindRTL_MARK ),
1780 
1781     RTF_BIDI_MARK( "ltrch",		UNI_LEFT_TO_RIGHT_EMBEDDING ),
1782     RTF_BIDI_MARK( "rtlch",		UNI_RIGHT_TO_LEFT_EMBEDDING ),
1783 
1784 # define	RTF_SPECIAL_FIELD(s,id) \
1785 		{ s, id, RTCtypeANY, docRtfTextSpecialToField, }
1786 
1787     RTF_SPECIAL_FIELD( "chdate",	DOCfkDATE ),
1788     RTF_SPECIAL_FIELD( "chpgn",		DOCfkPAGE ),
1789     RTF_SPECIAL_FIELD( "chtime",	DOCfkTIME ),
1790     RTF_SPECIAL_FIELD( RTFtag_chftn,	DOCfkCHFTN ),
1791     RTF_SPECIAL_FIELD( "chatn",		DOCfkCHATN ),
1792     RTF_SPECIAL_FIELD( "sectnum",	DOCfkSECTION ),
1793 
1794     RTF_SPECIAL_FIELD( "chdpa",		DOCfkDATE ),
1795     RTF_SPECIAL_FIELD( "chdpl",		DOCfkDATE ),
1796 
1797 				/****************************************/
1798 				/*  Word 95 drawing objects.		*/
1799 				/****************************************/
1800 # define	RTF_DO_FLAG(s,id) \
1801 		{ s, id, RTCtypeFLAG, docRtfDrawingObjectProperty }
1802 # define	RTF_DO_ENUM(s,id,v) \
1803 		{ s, id, RTCtypeENUM, docRtfDrawingObjectProperty, v }
1804 # define	RTF_DO_NUMBER(s,id) \
1805 		{ s, id, RTCtypeVALUE, docRtfDrawingObjectProperty }
1806 # define	RTF_DO_COORD(s,id) \
1807 		{ s, id, RTCtypeVALUE, docRtfDrawingObjectCoordinate }
1808 
1809     RTF_DO_FLAG( "dolock",	DOpropANCHOR_LOCKED ),
1810 
1811     RTF_DO_ENUM( "dobxpage",	DOpropX_ATTACH,		FXrefPAGE ),
1812     RTF_DO_ENUM( "dobxcolumn",	DOpropX_ATTACH,		FXrefCOLUMN ),
1813     RTF_DO_ENUM( "dobxmargin",	DOpropX_ATTACH,		FXrefMARGIN ),
1814 
1815     RTF_DO_ENUM( "dobypage",	DOpropY_ATTACH,		FYrefPAGE ),
1816     RTF_DO_ENUM( "dobypara",	DOpropY_ATTACH,		FYrefPARA ),
1817     RTF_DO_ENUM( "dobymargin",	DOpropY_ATTACH,		FYrefMARGIN ),
1818 
1819     RTF_DO_ENUM( "dparc",	DOpropKIND, SHPtyARC ),
1820     RTF_DO_ENUM( "dpcallout",	DOpropKIND, SHPtyCALLOUT_1 ),
1821     RTF_DO_ENUM( "dpellipse",	DOpropKIND, SHPtyELLIPSE ),
1822     RTF_DO_ENUM( "dpline",	DOpropKIND, SHPtyLINE ),
1823     RTF_DO_ENUM( "dppolygon",	DOpropKIND, SHPtyFREEFORM_OR_NON_AUTOSHAPE ),
1824     RTF_DO_ENUM( "dppolyline",	DOpropKIND, SHPtyFREEFORM_OR_NON_AUTOSHAPE ),
1825     RTF_DO_ENUM( "dprect",	DOpropKIND, SHPtyRECTANGLE ),
1826     RTF_DO_ENUM( "dptxbx",	DOpropKIND, SHPtyTEXT_BOX ),
1827 
1828     RTF_DO_ENUM( "dplinesolid",	DOpropLINE_STYLE,	DSdashSOLID ),
1829     RTF_DO_ENUM( "dplinehollow",DOpropLINE_STYLE,	DSdashHOLLOW ),
1830     RTF_DO_ENUM( "dplinedash",	DOpropLINE_STYLE,	DSdashDASHED ),
1831     RTF_DO_ENUM( "dplinedot",	DOpropLINE_STYLE,	DSdashDOT ),
1832     RTF_DO_ENUM( "dplinedado",	DOpropLINE_STYLE,	DSdashDASHDOT ),
1833     RTF_DO_ENUM( "dplinedadodo",DOpropLINE_STYLE,	DSdashDASHDOTDOT ),
1834 
1835     RTF_DO_ENUM( "dpaendhol",	DOpropEND_ARROW_HEAD,	DSarrowOPEN_ARROW ),
1836     RTF_DO_ENUM( "dpaendsol",	DOpropEND_ARROW_HEAD,	DSarrowARROW ),
1837     RTF_DO_ENUM( "dpastarthol",	DOpropSTART_ARROW_HEAD,	DSarrowOPEN_ARROW ),
1838     RTF_DO_ENUM( "dpastartsol",	DOpropSTART_ARROW_HEAD,	DSarrowARROW ),
1839 
1840     RTF_DO_NUMBER( "dpaendl",	DOpropEND_ARROW_LENGTH ),
1841     RTF_DO_NUMBER( "dpastartl",	DOpropSTART_ARROW_LENGTH ),
1842     RTF_DO_NUMBER( "dpaendw",	DOpropEND_ARROW_WIDTH ),
1843     RTF_DO_NUMBER( "dpastartw",	DOpropSTART_ARROW_WIDTH ),
1844 
1845     RTF_DO_NUMBER( "dpfillpat",	DOpropFILL_PATTERN ),
1846 
1847     RTF_DO_FLAG( "dparcflipx",	DOpropARC_FLIP_X ),
1848     RTF_DO_FLAG( "dparcflipy",	DOpropARC_FLIP_Y ),
1849 
1850     RTF_DO_NUMBER( "dpx",	DOpropX ),
1851     RTF_DO_NUMBER( "dpy",	DOpropY ),
1852     RTF_DO_NUMBER( "dodhgt",	DOpropZ ),
1853     RTF_DO_NUMBER( "dpxsize",	DOpropWIDE ),
1854     RTF_DO_NUMBER( "dpysize",	DOpropHIGH ),
1855 
1856     RTF_DO_NUMBER( "dptxbxmar",	DOpropTEXT_BOX_MARGIN ),
1857 
1858     RTF_DO_NUMBER( "dplinew",	DOpropLINE_WIDTH ),
1859     RTF_DO_NUMBER( "dppolycount",DOpropPOINT_COUNT ),
1860 
1861     RTF_DO_NUMBER( "dplinecor",	DOpropLINE_RED ),
1862     RTF_DO_NUMBER( "dplinecog",	DOpropLINE_GREEN ),
1863     RTF_DO_NUMBER( "dplinecob",	DOpropLINE_BLUE ),
1864     RTF_DO_NUMBER( "dplinegray",	DOpropLINE_GRAY ),
1865 
1866     RTF_DO_NUMBER( "dpfillfgcr",	DOpropFILL_FORE_RED ),
1867     RTF_DO_NUMBER( "dpfillfgcg",	DOpropFILL_FORE_GREEN ),
1868     RTF_DO_NUMBER( "dpfillfgcb",	DOpropFILL_FORE_BLUE ),
1869     RTF_DO_NUMBER( "dpfillfggray",	DOpropFILL_FORE_GRAY ),
1870 
1871     RTF_DO_NUMBER( "dpfillbgcr",	DOpropFILL_BACK_RED ),
1872     RTF_DO_NUMBER( "dpfillbgcg",	DOpropFILL_BACK_GREEN ),
1873     RTF_DO_NUMBER( "dpfillbgcb",	DOpropFILL_BACK_BLUE ),
1874     RTF_DO_NUMBER( "dpfillbggray",	DOpropFILL_BACK_GRAY ),
1875 
1876     RTF_DO_COORD( "dpptx",	DOpropX ),
1877     RTF_DO_COORD( "dppty",	DOpropY ),
1878 
1879     RTF_DO_ENUM( "dptxlrtb",	DOpropTEXT_FLOW, TXflowTXLRTB ),
1880     RTF_DO_ENUM( "dptxtbrl",	DOpropTEXT_FLOW, TXflowTXTBRL ),
1881     RTF_DO_ENUM( "dptxbtlr",	DOpropTEXT_FLOW, TXflowTXBTLR ),
1882     RTF_DO_ENUM( "dptxlrtbv",	DOpropTEXT_FLOW, TXflowTXLRTBV ),
1883     RTF_DO_ENUM( "dptxtbrlv",	DOpropTEXT_FLOW, TXflowTXTBRLV ),
1884 
1885 				/****************************************/
1886 				/*  Shapes.				*/
1887 				/****************************************/
1888 
1889 # define	RTF_SHAPE_NUMBER(s,id) \
1890 		{ s, id, RTCtypeVALUE, docRtfShpProperty, }
1891 # define	RTF_SHAPE_FLAG(s,id) \
1892 		{ s, id, RTCtypeFLAG, docRtfShpProperty, }
1893 # define	RTF_SHAPE_ENUM(s,id,v) \
1894 		{ s, id, RTCtypeENUM, docRtfShpProperty, v, }
1895 
1896     RTF_SHAPE_NUMBER( "shpleft",	SHPpropLEFT ),
1897     RTF_SHAPE_NUMBER( "shptop",		SHPpropTOP ),
1898     RTF_SHAPE_NUMBER( "shpbottom",	SHPpropBOTTOM ),
1899     RTF_SHAPE_NUMBER( "shpright",	SHPpropRIGHT ),
1900 
1901     RTF_SHAPE_NUMBER( "shplid",		SHPpropLID ),
1902     RTF_SHAPE_NUMBER( "shpz",		SHPpropZ ),
1903 
1904     RTF_SHAPE_FLAG( "shpfhdr",		SHPpropFHDR ),
1905 
1906     RTF_SHAPE_ENUM( "shpbxmargin",	SHPpropBX,	FXrefMARGIN ),
1907     RTF_SHAPE_ENUM( "shpbxpage",	SHPpropBX,	FXrefPAGE ),
1908     RTF_SHAPE_ENUM( "shpbxcolumn",	SHPpropBX,	FXrefCOLUMN ),
1909     /*RTF_SHAPE_ENUM( "shpbx?",		SHPpropBX,	FXrefCHARACTER ),*/
1910     RTF_SHAPE_ENUM( "shpbxignore",	SHPpropBX,	FXrefIGNORE ),
1911 
1912     RTF_SHAPE_ENUM( "shpbymargin",	SHPpropBY,	FYrefMARGIN ),
1913     RTF_SHAPE_ENUM( "shpbypage",	SHPpropBY,	FYrefPAGE ),
1914     RTF_SHAPE_ENUM( "shpbypara",	SHPpropBY,	FYrefPARA ),
1915     /*RTF_SHAPE_ENUM( "shpby?",		SHPpropBY,	FYrefLINE ),*/
1916     RTF_SHAPE_ENUM( "shpbyignore",	SHPpropBY,	FYrefIGNORE ),
1917 
1918     RTF_SHAPE_NUMBER( "shpwr",		SHPpropWR ),
1919     RTF_SHAPE_NUMBER( "shpwrk",		SHPpropWRK ),
1920     RTF_SHAPE_NUMBER( "shpfblwtxt",	SHPpropFBLWTXT ),
1921 
1922     RTF_SHAPE_FLAG( "shplockanchor",	SHPpropLOCKANCHOR ),
1923 
1924 				/****************************************/
1925 				/*  Silently ignore \upr.		*/
1926 				/****************************************/
1927     RTF_REMEMBER( "upr",	RTFid_NOT_SUPPORTED ),
1928 
1929 				/****************************************/
1930 				/*  Various destinations without a	*/
1931 				/*  dedicated scope.			*/
1932 				/****************************************/
1933 
1934     RTF_DEST_XX( "fonttbl",	DPpropFONTTABLE,	docRtfFontTable ),
1935     RTF_DEST_XX( "colortbl",	DPpropCOLORTABLE,	docRtfColorTable ),
1936     RTF_DEST_XX( "stylesheet",	DPpropSTYLESHEET,	docRtfStylesheet ),
1937     RTF_DEST_XX( "listtable",	DPpropLISTTABLE,	docRtfListTable ),
1938     RTF_DEST_XX( "listoverridetable",
1939 				DPpropLISTOVERRIDETABLE,
1940 						docRtfListOverrideTable ),
1941     RTF_DEST_XX( "info",	DPprop_INFO,	docRtfReadInfo ),
1942     RTF_DEST_XX( "revtbl",	0,		docRtfSkipGroup ),
1943     RTF_DEST_XX( "pn",		RTFidPN,	docRtfSkipPn ),
1944     RTF_DEST_XX( "pntext",	DOCfkLISTTEXT,	docRtfReadTextField ),
1945     RTF_DEST_XX( RTFtag_pict,	PICshpPICT,	docRtfReadPict ),
1946     RTF_DEST_XX( "do",		RTFidDO,	docRtfReadDrawingObject ),
1947     RTF_DEST_XX( "nonshppict",	PICshpNONSHPPICT, docRtfReadShpXPict ),
1948     RTF_DEST_XX( "shppict",	PICshpSHPPICT,	docRtfReadShpXPict ),
1949     RTF_DEST_XX( "object",	DOCokOLEOBJECT,	docRtfReadObject ),
1950     RTF_DEST_XX( "field",	RTFidFIELD,	docRtfReadField ),
1951     RTF_DEST_XX( "shp",		SHPtyUNKNOWN,	docRtfReadShape ),
1952     RTF_DEST_XX( "shpgrp",	SHPtyGROUP,	docRtfReadShape ),
1953 
1954     RTF_DEST_XX( "xe",		DOCfkXE,	docRtfLookupEntry ),
1955     /*
1956     RTF_DEST_XX( "tc",		DOCfkTC,	docRtfLookupEntry ),
1957     RTF_DEST_XX( "tcn",		DOCfkTCN,	docRtfLookupEntry ),
1958 
1959     RTF_DEST_XX( "nonesttables", 1,		docRtfSkipGroup ),
1960     */
1961 
1962 			    /****************************************/
1963 			    /*  Headers and Footers.		*/
1964 			    /****************************************/
1965     RTF_DEST_XX( "footer",	DOCinRIGHT_FOOTER, docRtfReadExtTree ),
1966     RTF_DEST_XX( "footerf",	DOCinFIRST_FOOTER, docRtfReadExtTree ),
1967     RTF_DEST_XX( "footerl",	DOCinLEFT_FOOTER,  docRtfReadExtTree ),
1968     RTF_DEST_XX( "footerr",	DOCinRIGHT_FOOTER, docRtfReadExtTree ),
1969 
1970     RTF_DEST_XX( "header",	DOCinRIGHT_HEADER, docRtfReadExtTree ),
1971     RTF_DEST_XX( "headerf",	DOCinFIRST_HEADER, docRtfReadExtTree ),
1972     RTF_DEST_XX( "headerl",	DOCinLEFT_HEADER,  docRtfReadExtTree ),
1973     RTF_DEST_XX( "headerr",	DOCinRIGHT_HEADER, docRtfReadExtTree ),
1974 
1975     RTF_DEST_XX( "ftnsep",	DOCinFTNSEP,	docRtfReadExtTree ),
1976     RTF_DEST_XX( "ftnsepc",	DOCinFTNSEPC,	docRtfReadExtTree ),
1977     RTF_DEST_XX( "ftncn",	DOCinFTNCN,	docRtfReadExtTree ),
1978 
1979     RTF_DEST_XX( "aftnsep",	DOCinAFTNSEP,	docRtfReadExtTree ),
1980     RTF_DEST_XX( "aftnsepc",	DOCinAFTNSEPC,	docRtfReadExtTree ),
1981     RTF_DEST_XX( "aftncn",	DOCinAFTNCN,	docRtfReadExtTree ),
1982 
1983     RTF_DEST_XX( RTFtag_footnote, DOCinFOOTNOTE, docRtfReadFootnote ),
1984     RTF_DEST_XX( "annotation",	DOCinANNOTATION, docRtfReadFootnote ),
1985 
1986 			    /****************************************/
1987 			    /*  Multilevel Lists.			*/
1988 			    /****************************************/
1989     RTF_DEST_XX( "pnseclvl",	RTFidPNSECLVL,	docRtfReadPnseclvl ),
1990 			    /****************************************/
1991 			    /*  Lists.				*/
1992 			    /****************************************/
1993     RTF_DEST_XX( "listtext",	DOCfkLISTTEXT,	docRtfReadTextField ),
1994 			    /****************************************/
1995 			    /*  Bookmarks				*/
1996 			    /****************************************/
1997     RTF_DEST_XX( "bkmkstart",	RTFidBKMKSTART,	docRtfBkmkStart ),
1998     RTF_DEST_XX( "bkmkend",	RTFidBKMKEND,	docRtfBkmkEnd ),
1999 			    /********************************************/
2000 			    /*  Shape Properties.			*/
2001 			    /********************************************/
2002     RTF_DEST_XX( "sp",		1,		docRtfShapeProperty ),
2003     RTF_DEST_XX( "sn",		1,		docRtfShapePropertyName ),
2004     RTF_DEST_XX( "sv",		1,		docRtfShapePropertyValue ),
2005 			    /****************************************/
2006 			    /*  To deal with faulty documents.		*/
2007 			    /****************************************/
2008     /*
2009     RTF_DEST_XX( "trowd",	DOClevROW,	docRtfReadRowProperties ),
2010     */
2011     RTF_DEST_XX( "nesttableprops", DOClevROW,	docRtfReadRowProperties ),
2012 
2013 				/****************************************/
2014 				/*  Inside the \info destination.	*/
2015 				/****************************************/
2016     RTF_TEXT_GROUP( "title",	DPpropTITLE,	docRtfCommitDocPropText ),
2017     RTF_TEXT_GROUP( "author",	DPpropAUTHOR,	docRtfCommitDocPropText ),
2018     RTF_TEXT_GROUP( "company",	DPpropCOMPANY,	docRtfCommitDocPropText ),
2019     RTF_TEXT_GROUP( "subject",	DPpropSUBJECT,	docRtfCommitDocPropText ),
2020     RTF_TEXT_GROUP( "keywords",	DPpropKEYWORDS,	docRtfCommitDocPropText ),
2021     RTF_TEXT_GROUP( "comment",	DPpropDOCCOMM,	docRtfCommitDocPropText ),
2022     RTF_TEXT_GROUP( "doccomm",	DPpropDOCCOMM,	docRtfCommitDocPropText ),
2023     RTF_TEXT_GROUP( RTFtag_hlinkbase, DPpropHLINKBASE,docRtfCommitDocPropText ),
2024 				/****************************************/
2025 				/*  Outside the \info destination.	*/
2026 				/****************************************/
2027     RTF_TEXT_GROUP( "generator",DPpropGENERATOR,docRtfCommitDocPropText ),
2028 
2029 
2030     RTF_DEST_XX( "creatim",	DPpropCREATIM,	docRtfDocTimeGroup ),
2031     RTF_DEST_XX( RTFtag_revtim,	DPpropREVTIM,	docRtfDocTimeGroup ),
2032     RTF_DEST_XX( "printim",	DPpropPRINTIM,	docRtfDocTimeGroup ),
2033 
2034     RTF_DEST_XX( "operator",	RTFidOPERATOR,	docRtfSkipGroup ),
2035     RTF_DEST_XX( "version",	RTFidVERSION,	docRtfSkipGroup ),
2036     RTF_DEST_XX( "edmins",	RTFidEDMINS,	docRtfSkipGroup ),
2037     RTF_DEST_XX( "nofpages",	RTFidNOFPAGES,	docRtfSkipGroup ),
2038     RTF_DEST_XX( "nofwords",	RTFidNOFWORDS,	docRtfSkipGroup ),
2039     RTF_DEST_XX( "nofchars",	RTFidNOFCHARS,	docRtfSkipGroup ),
2040     RTF_DEST_XX( "nofcharsws",	RTFidNOFCHARSWS,docRtfSkipGroup ),
2041     RTF_DEST_XX( "vern",	RTFidVERN,	docRtfSkipGroup ),
2042 
2043 				/****************************************/
2044 				/*  The Undo/Redo/Repeat trace.		*/
2045 				/****************************************/
2046 # define	RTF_OLD_SCOPE_NUMBER(s,id) \
2047 		{ s, id, RTCtypeVALUE, docRtfSelectionScopeProperty, }
2048 # define	RTF_NEW_SCOPE_NUMBER(s,id) \
2049 		{ s, SSprop_COUNT+ id, RTCtypeVALUE, docRtfSelectionScopeProperty, }
2050 # define	RTF_RANGE_NUMBER(s,id) \
2051 		{ s, id, RTCtypeVALUE, docRtfEditRangeProperty, }
2052 # define	RTF_RANGE_ENUM(s,id,v) \
2053 		{ s, id, RTCtypeENUM, docRtfEditRangeProperty, v, }
2054 
2055     RTF_OLD_SCOPE_NUMBER( RTFtag_OTT, SSpropTREE_TYPE ),
2056     RTF_OLD_SCOPE_NUMBER( RTFtag_OSN, SSpropSECT_NR ),
2057     RTF_OLD_SCOPE_NUMBER( RTFtag_OOSN, SSpropOWNER_SECT_NR ),
2058     RTF_OLD_SCOPE_NUMBER( RTFtag_OON, SSpropOWNER_NR ),
2059     RTF_OLD_SCOPE_NUMBER( RTFtag_OPG, SSpropPAGE ),
2060     RTF_OLD_SCOPE_NUMBER( RTFtag_OCO, SSpropCOLUMN ),
2061 
2062     RTF_NEW_SCOPE_NUMBER( RTFtag_NTT, SSpropTREE_TYPE ),
2063     RTF_NEW_SCOPE_NUMBER( RTFtag_NSN, SSpropSECT_NR ),
2064     RTF_NEW_SCOPE_NUMBER( RTFtag_NOSN, SSpropOWNER_SECT_NR ),
2065     RTF_NEW_SCOPE_NUMBER( RTFtag_NON, SSpropOWNER_NR ),
2066     RTF_NEW_SCOPE_NUMBER( RTFtag_NPG, SSpropPAGE ),
2067     RTF_NEW_SCOPE_NUMBER( RTFtag_NCO, SSpropCOLUMN ),
2068 
2069     RTF_RANGE_NUMBER( RTFtag_OHC, TRACEposOLD_HEAD_COL ),
2070     RTF_RANGE_NUMBER( RTFtag_OHP, TRACEposOLD_HEAD_PARA ),
2071     RTF_RANGE_NUMBER( RTFtag_OHS, TRACEposOLD_HEAD_STROFF ),
2072     RTF_RANGE_NUMBER( RTFtag_OTC, TRACEposOLD_TAIL_COL ),
2073     RTF_RANGE_NUMBER( RTFtag_OTP, TRACEposOLD_TAIL_PARA ),
2074     RTF_RANGE_NUMBER( RTFtag_OTS, TRACEposOLD_TAIL_STROFF ),
2075 
2076     RTF_RANGE_NUMBER( RTFtag_NHP, TRACEposNEW_HEAD_PARA ),
2077     RTF_RANGE_NUMBER( RTFtag_NHS, TRACEposNEW_HEAD_STROFF ),
2078     RTF_RANGE_NUMBER( RTFtag_NTP, TRACEposNEW_TAIL_PARA ),
2079     RTF_RANGE_NUMBER( RTFtag_NTS, TRACEposNEW_TAIL_STROFF ),
2080 
2081     RTF_RANGE_ENUM( RTFtag_SEH, TRACEposSELECTED, SELposHEAD ),
2082     RTF_RANGE_ENUM( RTFtag_SEN, TRACEposSELECTED, SELposNEXT ),
2083     RTF_RANGE_ENUM( RTFtag_SAL, TRACEposSELECTED, SELposALL ),
2084     RTF_RANGE_ENUM( RTFtag_SET, TRACEposSELECTED, SELposTAIL ),
2085     RTF_RANGE_ENUM( RTFtag_SEB, TRACEposSELECTED, SELposBEFORE ),
2086     RTF_RANGE_ENUM( RTFtag_SEA, TRACEposSELECTED, SELposAFTER ),
2087 
2088     RTF_RANGE_NUMBER( RTFtag_FLK, TRACEposFIELD_KIND ),
2089 
2090     RTF_RANGE_NUMBER( RTFtag_PRL, TRACEposPROP_LEVEL ),
2091 
2092 				/****************************************/
2093     RTF_DEST_XX( RTFtag__SelOpen+ 2,	1,	docRtfSelectionOpen ),
2094 
2095 				/****************************************/
2096 				/*  End.				*/
2097 				/****************************************/
2098     { (char *)0, 0, 0 }
2099 };
2100 
2101 /************************************************************************/
2102 /*									*/
2103 /*  String constants.							*/
2104 /*									*/
2105 /************************************************************************/
2106 
2107 const char RTFtag__SelOpen[]= "*\\SelOpen";
2108 
2109 const char RTFtag_FLK[]= "FLK";
2110 
2111 const char RTFtag_OTX[]= "OTX";
2112 const char RTFtag_NTX[]= "NTX";
2113 const char RTFtag_NPR[]= "NPR";
2114 
2115 const char RTFtag_SLI[]= "SLI";
2116 const char RTFtag_SBK[]= "SBK";
2117 const char RTFtag_DFL[]= "DFL";
2118 const char RTFtag_UFL[]= "UFL";
2119 const char RTFtag_ULI[]= "ULI";
2120 const char RTFtag_NLI[]= "NLI";
2121 const char RTFtag_NNO[]= "NNO";
2122 const char RTFtag_UNO[]= "UNO";
2123 const char RTFtag_UTA[]= "UTA";
2124 const char RTFtag_UPP[]= "UPP";
2125 const char RTFtag_UTP[]= "UTP";
2126 const char RTFtag_USP[]= "USP";
2127 const char RTFtag_USDP[]= "USDP";
2128 const char RTFtag_UDP[]= "UDP";
2129 const char RTFtag_REP[]= "REP";
2130 const char RTFtag_REPF[]= "REPF";
2131 const char RTFtag_REPB[]= "REPB";
2132 const char RTFtag_DELS[]= "DELS";
2133 const char RTFtag_DELF[]= "DELF";
2134 const char RTFtag_DELB[]= "DELB";
2135 const char RTFtag_REX[]= "REX";
2136 const char RTFtag_MPA[]= "MPA";
2137 
2138 const char RTFtag_DPA[]= "DPA";
2139 const char RTFtag_DSE[]= "DSE";
2140 const char RTFtag_DRW[]= "DRW";
2141 const char RTFtag_DTB[]= "DTB";
2142 const char RTFtag_DCO[]= "DCO";
2143 const char RTFtag_DHD[]= "DHD";
2144 const char RTFtag_DFT[]= "DFT";
2145 
2146 const char RTFtag_IPA[]= "IPA";
2147 const char RTFtag_APA[]= "APA";
2148 const char RTFtag_ITB[]= "ITB";
2149 const char RTFtag_ISE[]= "ISE";
2150 const char RTFtag_ASE[]= "ASE";
2151 const char RTFtag_SSE[]= "SSE";
2152 const char RTFtag_IRW[]= "IRW";
2153 const char RTFtag_ARW[]= "ARW";
2154 const char RTFtag_ICO[]= "ICO";
2155 const char RTFtag_ACO[]= "ACO";
2156 const char RTFtag_IHD[]= "IHD";
2157 const char RTFtag_IFT[]= "IFT";
2158 
2159 const char RTFtag_UOB[]= "UOB";
2160 const char RTFtag_SRWD[]= "SRWD";
2161 const char RTFtag_SRWU[]= "SRWU";
2162 
2163 const char RTFtag_SPR[]= "SPR";
2164 const char RTFtag_SPL[]= "SPL";
2165 const char RTFtag_Open[]= "Open";
2166 const char RTFtag_Save[]= "Save";
2167 const char RTFtag_New[]= "New";
2168 
2169 const char RTFtag_OTT[]= "OTT";
2170 const char RTFtag_OSN[]= "OSN";
2171 const char RTFtag_OOSN[]= "OOSN";
2172 const char RTFtag_OON[]= "OON";
2173 const char RTFtag_OPG[]= "OPG";
2174 const char RTFtag_OCO[]= "OCO";
2175 
2176 const char RTFtag_NTT[]= "NTT";
2177 const char RTFtag_NSN[]= "NSN";
2178 const char RTFtag_NOSN[]= "NOSN";
2179 const char RTFtag_NON[]= "NON";
2180 const char RTFtag_NPG[]= "NPG";
2181 const char RTFtag_NCO[]= "NCO";
2182 
2183 const char RTFtag_OHC[]= "OHC";
2184 const char RTFtag_OHP[]= "OHP";
2185 const char RTFtag_OHS[]= "OHS";
2186 
2187 const char RTFtag_OTC[]= "OTC";
2188 const char RTFtag_OTP[]= "OTP";
2189 const char RTFtag_OTS[]= "OTS";
2190 const char RTFtag_PRL[]= "PRL";
2191 
2192 const char RTFtag_NHP[]= "NHP";
2193 const char RTFtag_NHS[]= "NHS";
2194 const char RTFtag_NTP[]= "NTP";
2195 const char RTFtag_NTS[]= "NTS";
2196 
2197 const char RTFtag_SEH[]= "SEH";
2198 const char RTFtag_SEN[]= "SEN";
2199 const char RTFtag_SAL[]= "SAL";
2200 const char RTFtag_SET[]= "SET";
2201 const char RTFtag_SEB[]= "SEB";
2202 const char RTFtag_SEA[]= "SEA";
2203 
2204 /* Regular tags */
2205 
2206 const char RTFtag_pict[]= "pict";
2207 const char RTFtag_result[]= "result";
2208 
2209 const char RTFtag_par[]= "par";
2210 const char RTFtag_pard[]= "pard";
2211 const char RTFtag_plain[]= "plain";
2212 
2213 const char RTFtag_footnote[]= "footnote";
2214 const char RTFtag_chftn[]= "chftn";
2215 const char RTFtag_fet[]= "fet";
2216 
2217 const char RTFtag_revtim[]= "revtim";
2218 const char RTFtag_hlinkbase[]= "hlinkbase";
2219 const char RTFtag__generator[]= "*\\generator";
2220 
2221 const char RTFtag_nosupersub[]= "nosupersub";
2222 const char RTFtag_super[]= "super";
2223 const char RTFtag_sub[]= "sub";
2224 
2225 const char RTFtag_tql[]= "tql";
2226 const char RTFtag_tqr[]= "tqr";
2227 const char RTFtag_tqc[]= "tqc";
2228 const char RTFtag_tqdec[]= "tqdec";
2229 
2230 const char * const DOCrtf_DocFootNotesJustificationTags[]=
2231     {
2232     "ftntj",
2233     "ftnbj",
2234     };
2235 
2236 const int DOCrtf_DocFootNotesJustificationTagCount=
2237 	    sizeof(DOCrtf_DocFootNotesJustificationTags)/sizeof(const char *);
2238 
2239 const char * const DOCrtf_DocFootNotesPlacementTags[]=
2240     {
2241     (char *)0,
2242     "endnotes",
2243     "enddoc",
2244     };
2245 
2246 const int DOCrtf_DocFootNotesPlacementTagCount=
2247 	    sizeof(DOCrtf_DocFootNotesPlacementTags)/sizeof(const char *);
2248 
2249 const char * const DOCrtf_DocEndNotesJustificationTags[]=
2250     {
2251     "aftntj",
2252     "aftnbj",
2253     };
2254 
2255 const int DOCrtf_DocEndNotesJustificationTagCount=
2256 	    sizeof(DOCrtf_DocEndNotesJustificationTags)/sizeof(const char *);
2257 
2258 const char * const DOCrtf_DocEndNotesPlacementTags[]=
2259     {
2260     (char *)0,
2261     "aendnotes",
2262     "aenddoc",
2263     };
2264 
2265 const int DOCrtf_DocEndNotesPlacementTagCount=
2266 	    sizeof(DOCrtf_DocEndNotesPlacementTags)/sizeof(const char *);
2267 
2268 const char * const DOCrtf_SectFootNotesJustificationTags[]=
2269     {
2270     "sftntj",
2271     "sftnbj",
2272     };
2273 
2274 const int DOCrtf_SectFootNotesJustificationTagCount=
2275 	    sizeof(DOCrtf_SectFootNotesJustificationTags)/sizeof(const char *);
2276 
2277 const char * const DOCrtf_SectEndNotesJustificationTags[]=
2278     {
2279     "saftntj",
2280     "saftnbj",
2281     };
2282 
2283 const int DOCrtf_SectEndNotesJustificationTagCount=
2284 	    sizeof(DOCrtf_SectEndNotesJustificationTags)/sizeof(const char *);
2285 
2286 const char * const DOCrtf_DocFootNotesRestartTags[]=
2287     {
2288     "ftnrstcont",
2289     "ftnrestart",
2290     "ftnrstpg",
2291     };
2292 
2293 const int DOCrtf_DocFootNotesRestartTagCount=
2294 		sizeof(DOCrtf_DocFootNotesRestartTags)/sizeof(const char *);
2295 
2296 const char * const DOCrtf_SectFootNotesRestartTags[]=
2297     {
2298     "sftnrstcont",
2299     "sftnrestart",
2300     "sftnrstpg",
2301     };
2302 
2303 const int DOCrtf_SectFootNotesRestartTagCount=
2304 		sizeof(DOCrtf_SectFootNotesRestartTags)/sizeof(const char *);
2305 
2306 const char * const DOCrtf_DocEndNotesRestartTags[]=
2307     {
2308     "aftnrstcont",
2309     "aftnrestart",
2310     "aftnrstpg",	/*  UNUSED: Effectively makes them footnotes	*/
2311     };
2312 
2313 const int DOCrtf_DocEndNotesRestartTagCount=
2314 		sizeof(DOCrtf_DocEndNotesRestartTags)/sizeof(const char *);
2315 
2316 const char * const DOCrtf_SectEndNotesRestartTags[]=
2317     {
2318     "saftnrstcont",
2319     "saftnrestart",
2320     "saftnrstpg",	/*  UNUSED: Effectively makes them footnotes	*/
2321     };
2322 
2323 const int DOCrtf_SectEndNotesRestartTagCount=
2324 		sizeof(DOCrtf_SectEndNotesRestartTags)/sizeof(const char *);
2325 
2326 const char * const DOCrtf_DocFootNotesNumberStyleTags[]=
2327     {
2328     "ftnnar",
2329     "ftnnalc",
2330     "ftnnauc",
2331     "ftnnrlc",
2332     "ftnnruc",
2333     "ftnnchi",
2334     };
2335 
2336 const int DOCrtf_DocFootNotesNumberStyleTagCount=
2337 		sizeof(DOCrtf_DocFootNotesNumberStyleTags)/sizeof(const char *);
2338 
2339 const char * const DOCrtf_DocEndNotesNumberStyleTags[]=
2340     {
2341     "aftnnar",
2342     "aftnnalc",
2343     "aftnnauc",
2344     "aftnnrlc",
2345     "aftnnruc",
2346     "aftnnchi",
2347     };
2348 
2349 const int DOCrtf_DocEndNotesNumberStyleTagCount=
2350 		sizeof(DOCrtf_DocEndNotesNumberStyleTags)/sizeof(const char *);
2351 
2352 const char * const DOCrtf_SectFootNotesNumberStyleTags[]=
2353     {
2354     "sftnnar",
2355     "sftnnalc",
2356     "sftnnauc",
2357     "sftnnrlc",
2358     "sftnnruc",
2359     "sftnnchi",
2360     };
2361 
2362 const int DOCrtf_SectFootNotesNumberStyleTagCount=
2363 	    sizeof(DOCrtf_SectFootNotesNumberStyleTags)/sizeof(const char *);
2364 
2365 const char * const DOCrtf_SectEndNotesNumberStyleTags[]=
2366     {
2367     "saftnnar",
2368     "saftnnalc",
2369     "saftnnauc",
2370     "saftnnrlc",
2371     "saftnnruc",
2372     "saftnnchi",
2373     };
2374 
2375 const int DOCrtf_SectEndNotesNumberStyleTagCount=
2376 	    sizeof(DOCrtf_SectEndNotesNumberStyleTags)/sizeof(const char *);
2377 
2378 const char * const DOCrtf_BorderStyleTags[]=
2379     {
2380     "brdrnone",
2381     "brdrs",
2382     "brdrth",
2383     "brdrsh",
2384     "brdrdb",
2385     "brdrhair",
2386     "brdrdot",
2387     "brdrdash",
2388     "brdrdashd",
2389     "brdrdashdd",
2390     "brdrtriple",
2391     "brdrtnthsg",
2392     "brdrthtnsg",
2393     "brdrtnthtnsg",
2394     "brdrtnthmg",
2395     "brdrthtnmg",
2396     "brdrtnthtnmg",
2397     "brdrtnthlg",
2398     "brdrthtnlg",
2399     "brdrtnthtnlg",
2400     "brdrwavy",
2401     "brdrwavydb",
2402     "brdrdashsm",
2403     "brdrdashdotstr",
2404     "brdremboss",
2405     "brdrengrave",
2406     "brdrframe",
2407     "brdroutset",
2408     "brdrtbl",
2409     "brdrnil",
2410     };
2411 
2412 const int DOCrtf_BorderStyleTagCount=
2413 		sizeof(DOCrtf_BorderStyleTags)/sizeof(const char *);
2414 
2415 const char * const DOCrtf_ParaShadingTags[]=
2416     {
2417     (const char *)0,	/*  solid	*/
2418     "bghoriz",
2419     "bgvert",
2420     "bgfdiag",
2421     "bgbdiag",
2422     "bgcross",
2423     "bgdcross",
2424     "bgdkhoriz",
2425     "bgdkvert",
2426     "bgdkfdiag",
2427     "bgdkbdiag",
2428     "bgdkcross",
2429     "bgdkdcross",
2430     };
2431 
2432 const int DOCrtf_ParaShadingTagCount=
2433 		sizeof(DOCrtf_ParaShadingTags)/sizeof(const char *);
2434 
2435 const char * const DOCrtf_TextShadingTags[]=
2436     {
2437     (const char *)0,	/*  solid	*/
2438     "chbghoriz",
2439     "chbgvert",
2440     "chbgfdiag",
2441     "chbgbdiag",
2442     "chbgcross",
2443     "chbgdcross",
2444     "chbgdkhoriz",
2445     "chbgdkvert",
2446     "chbgdkfdiag",
2447     "chbgdkbdiag",
2448     "chbgdkcross",
2449     "chbgdkdcross",
2450     };
2451 
2452 const int DOCrtf_TextShadingTagCount=
2453 		sizeof(DOCrtf_TextShadingTags)/sizeof(const char *);
2454 
2455 const char * const DOCrtf_RowShadingTags[]=
2456     {
2457     (const char *)0,	/*  solid	*/
2458     "trbghoriz",
2459     "trbgvert",
2460     "trbgfdiag",
2461     "trbgbdiag",
2462     "trbgcross",
2463     "trbgdcross",
2464     "trbgdkhor",
2465     "trbgdkvert",
2466     "trbgdkfdiag",
2467     "trbgdkbdiag",
2468     "trbgdkcross",
2469     "trbgdkdcross",
2470     };
2471 
2472 const int DOCrtf_RowShadingTagCount=
2473 		sizeof(DOCrtf_RowShadingTags)/sizeof(const char *);
2474 
2475 const char * const DOCrtf_CellShadingTags[]=
2476     {
2477     (const char *)0,	/*  solid	*/
2478     "clbghoriz",
2479     "clbgvert",
2480     "clbgfdiag",
2481     "clbgbdiag",
2482     "clbgcross",
2483     "clbgdcross",
2484     "clbgdkhor",
2485     "clbgdkvert",
2486     "clbgdkfdiag",
2487     "clbgdkbdiag",
2488     "clbgdkcross",
2489     "clbgdkdcross",
2490     };
2491 
2492 const int DOCrtf_CellShadingTagCount=
2493 		sizeof(DOCrtf_CellShadingTags)/sizeof(const char *);
2494 
2495 const char * const DOCrtf_SectBreakTags[]=
2496     {
2497     "sbknone",
2498     "sbkcol",
2499     "sbkpage",
2500     "sbkeven",
2501     "sbkodd",
2502     };
2503 
2504 const int DOCrtf_SectBreakTagCount=
2505 		sizeof(DOCrtf_SectBreakTags)/sizeof(const char *);
2506 
2507 const char * const DOCrtf_ParaBreakTags[]=
2508     {
2509     "nopagebb",		/*  NOT part of RTF. Should never show up in docs */
2510     "column",		/*  Works as this is the last para prop to write */
2511     "pagebb",
2512     };
2513 
2514 const int DOCrtf_ParaBreakTagCount=
2515 		sizeof(DOCrtf_ParaBreakTags)/sizeof(const char *);
2516 
2517 const char * const DOCrtf_PageNumberStyleTags[]=
2518     {
2519     "pgndec",
2520     "pgnucrm",
2521     "pgnlcrm",
2522     "pgnucltr",
2523     "pgnlcltr",
2524     };
2525 
2526 const int DOCrtf_PageNumberStyleTagCount=
2527 		sizeof(DOCrtf_PageNumberStyleTags)/sizeof(const char *);
2528 
2529 const char * const DOCrtf_PageNumberHyphenTags[]=
2530     {
2531     "pgnhnsh",
2532     "pgnhnsp",
2533     "pgnhnsc",
2534     "pgnhnsm",
2535     "pgnhnsn",
2536     };
2537 
2538 const int DOCrtf_PageNumberHyphenTagCount=
2539 		sizeof(DOCrtf_PageNumberHyphenTags)/sizeof(const char *);
2540 
2541 const char * const DOCrtf_CellValignTags[]=
2542     {
2543     "clvertalt",
2544     "clvertalc",
2545     "clvertalb",
2546     };
2547 
2548 const int DOCrtf_CellValignTagCount=
2549 		sizeof(DOCrtf_CellValignTags)/sizeof(const char *);
2550 
2551 const char * const DOCrtf_CellTextFlowTags[]=
2552     {
2553     "cltxlrtb",
2554     "cltxtbrl",
2555     "cltxbtlr",
2556     "cltxlrtbv",
2557     "cltxtbrlv",
2558     };
2559 
2560 const int DOCrtf_CellTextFlowTagCount=
2561 		sizeof(DOCrtf_CellTextFlowTags)/sizeof(const char *);
2562 
2563 const char * const DOCrtf_CellHorMergeTags[]=
2564     {
2565     "ClmNone",
2566     "clmgf",
2567     "clmrg",
2568     };
2569 
2570 const int DOCrtf_CellHorMergeTagCount=
2571 		sizeof(DOCrtf_CellHorMergeTags)/sizeof(const char *);
2572 
2573 const char * const DOCrtf_CellVerMergeTags[]=
2574     {
2575     "ClvmNone",
2576     "clvmgf",
2577     "clvmrg",
2578     };
2579 
2580 const int DOCrtf_CellVerMergeTagCount=
2581 		sizeof(DOCrtf_CellVerMergeTags)/sizeof(const char *);
2582 
2583 const char * const DOCrtf_ParaAlignTags[]=
2584     {
2585     "ql",
2586     "qr",
2587     "qc",
2588     "qj",
2589     };
2590 
2591 const int DOCrtf_ParaAlignTagCount=
2592 		sizeof(DOCrtf_ParaAlignTags)/sizeof(const char *);
2593 
2594 const char * const DOCrtf_TabAlignTags[]=
2595     {
2596     RTFtag_tql,
2597     RTFtag_tqr,
2598     RTFtag_tqc,
2599     RTFtag_tqdec,
2600     };
2601 
2602 const int DOCrtf_TabAlignTagCount=
2603 		sizeof(DOCrtf_TabAlignTags)/sizeof(const char *);
2604 
2605 const char * const DOCrtf_TabLeaderTags[]=
2606     {
2607     (const char *)0,
2608     "tldot",
2609     "tlul",
2610     "tlhyph",
2611     "tlth",
2612     "tleq",
2613     };
2614 
2615 const int DOCrtf_TabLeaderTagCount=
2616 		sizeof(DOCrtf_TabLeaderTags)/sizeof(const char *);
2617 
2618 const char * const DOCrtf_SupersubTags[]=
2619     {
2620     RTFtag_nosupersub,
2621     RTFtag_super,
2622     RTFtag_sub,
2623     };
2624 
2625 const int DOCrtf_SupersubTagCount=
2626 		sizeof(DOCrtf_SupersubTags)/sizeof(const char *);
2627 
docRtfMakeTagHash(void)2628 static int docRtfMakeTagHash( void )
2629     {
2630     int				rval= 0;
2631     int				i;
2632 
2633     const unsigned char **	keyStrings= (const unsigned char **)0;
2634     int				keyStringCount;
2635 
2636     keyStringCount= sizeof(docRtfPropertyWords)/sizeof(RtfControlWord)- 1;
2637 
2638     keyStrings= (const unsigned char **)malloc( keyStringCount* sizeof(const unsigned char *) );
2639     if  ( ! keyStrings )
2640 	{ LXDEB(keyStringCount,keyStrings); rval= -1; goto ready;	}
2641 
2642     for ( i= 0; i < keyStringCount; i++ )
2643 	{
2644 	keyStrings[i]= (const unsigned char *)docRtfPropertyWords[i].rcwWord;
2645 	}
2646 
2647     if  ( utilJenkinsPerfectHash( keyStrings, keyStringCount,
2648 						    "docRtfTagHash.c",
2649 						    "\"docRtfTagHash.h\"",
2650 						    "docRtfTagHash",
2651 						    "docRtfTagIndex" ) )
2652 	{ LDEB(keyStringCount); rval= 0;	}
2653 
2654   ready:
2655 
2656     if  ( keyStrings )
2657 	{ free( keyStrings );	}
2658 
2659     return rval;
2660     }
2661 
2662 #   ifndef	BUILD_HASH
2663 
docRtfCheckTagHash(void)2664 static int docRtfCheckTagHash( void )
2665     {
2666     int			rval= 0;
2667     int			i;
2668 
2669     int			keyStringCount;
2670 
2671     keyStringCount= sizeof(docRtfPropertyWords)/sizeof(RtfControlWord)- 1;
2672 
2673     for ( i= 0; i < keyStringCount; i++ )
2674 	{
2675 	const unsigned char *	tagkey;
2676 	int			taglen;
2677 	int			idx;
2678 
2679 	tagkey= (const unsigned char *)docRtfPropertyWords[i].rcwWord;
2680 	taglen= strlen( docRtfPropertyWords[i].rcwWord );
2681 
2682 	idx= docRtfTagIndex( tagkey, taglen );
2683 
2684 	if  ( idx != i )
2685 	    {
2686 	    long hash= docRtfTagHash( tagkey, taglen );
2687 
2688 	    LSLLDEB(i,docRtfPropertyWords[i].rcwWord,idx,hash); rval= -1;
2689 	    }
2690 	}
2691 
2692     return rval;
2693     }
2694 
docRtfFindPropertyWord(const char * controlWord)2695 const RtfControlWord * docRtfFindPropertyWord(
2696 					const char *	controlWord )
2697     {
2698     const RtfControlWord *	rcw;
2699 
2700     static int			checked= 1;
2701 
2702     if  ( ! checked )
2703 	{
2704 	checked= 1;
2705 
2706 	if  ( docRtfCheckTagHash() )
2707 	    {
2708 	    checked= -1;
2709 
2710 	    LDEB(1);
2711 	    if  ( docRtfMakeTagHash() )
2712 		{ LDEB(1);	}
2713 	    }
2714 	}
2715 
2716     if  ( checked > 0 )
2717 	{
2718 	int			idx;
2719 	int			keyStringCount;
2720 
2721 	keyStringCount= sizeof(docRtfPropertyWords)/sizeof(RtfControlWord)- 1;
2722 
2723 	idx= docRtfTagIndex( (const unsigned char *)controlWord,
2724 							strlen( controlWord ) );
2725 
2726 	if  ( idx >= 0 && idx < keyStringCount )
2727 	    {
2728 	    rcw= docRtfPropertyWords+ idx;
2729 
2730 	    if  ( ! strcmp( controlWord, rcw->rcwWord ) )
2731 		{ return rcw;	}
2732 	    }
2733 
2734 	return (const RtfControlWord *)0;
2735 	}
2736     else{
2737 	rcw= docRtfPropertyWords;
2738 
2739 	while( rcw->rcwWord )
2740 	    {
2741 	    if  ( ! strcmp( rcw->rcwWord, controlWord ) )
2742 		{ return rcw;	}
2743 
2744 	    rcw++;
2745 	    }
2746 
2747 	return (const RtfControlWord *)0;
2748 	}
2749     }
2750 
2751 #   endif
2752 
2753 #   ifdef	BUILD_HASH
2754 
main(int argc,char ** argcv)2755     int main(	int	argc,
2756 		char **	argcv )
2757 	{
2758 	if  ( docRtfMakeTagHash() )
2759 	    { LDEB(1); return 1;	}
2760 
2761 	return 0;
2762 	}
2763 
2764 #   endif
2765 
2766