1 /************************************************************************/
2 /*									*/
3 /*  Read/Write text frame properties to/from RTF.			*/
4 /*									*/
5 /************************************************************************/
6 
7 #   include	"docRtfConfig.h"
8 
9 #   include	<stdio.h>
10 #   include	<ctype.h>
11 
12 #   include	<appDebugon.h>
13 
14 #   include	"docRtfWriterImpl.h"
15 #   include	"docRtfReaderImpl.h"
16 
17 /************************************************************************/
18 /*									*/
19 /*  Text Frame Properties.						*/
20 /*									*/
21 /************************************************************************/
22 
docRtfSaveParaFrameProperties(RtfWriter * rwc,const FrameProperties * fp)23 void docRtfSaveParaFrameProperties( RtfWriter *		rwc,
24 				const FrameProperties *		fp )
25     {
26     docRtfWriteArgTag( rwc, "absw", fp->fpWideTwips );
27     docRtfWriteArgTag( rwc, "absh", fp->fpHighTwips );
28 
29     switch( fp->fpXReference )
30 	{
31 	case FXrefCOLUMN:
32 	    docRtfWriteTag( rwc, "phcol" );
33 	    break;
34 
35 	case FXrefPAGE:
36 	    docRtfWriteTag( rwc, "phpg" );
37 	    break;
38 
39 	case FXrefMARGIN:
40 	    docRtfWriteTag( rwc, "phmrg" );
41 	    break;
42 
43 	default:
44 	    LDEB(fp->fpXReference);
45 	}
46 
47     switch( fp->fpXPosition )
48 	{
49 	case FXposXGIVEN:
50 	    if  ( fp->fpXTwips >= 0 )
51 		{ docRtfWriteArgTag( rwc, "posx", fp->fpXTwips ); }
52 	    else{
53 		docRtfWriteArgTag( rwc, "posnegx", -fp->fpXTwips );
54 		}
55 	    break;
56 
57 	case FXposXL:
58 	    docRtfWriteTag( rwc, "posxl" );
59 	    break;
60 	case FXposXR:
61 	    docRtfWriteTag( rwc, "posxr" );
62 	    break;
63 	case FXposXC:
64 	    docRtfWriteTag( rwc, "posxc" );
65 	    break;
66 	case FXposXI:
67 	    docRtfWriteTag( rwc, "posxi" );
68 	    break;
69 	case FXposXO:
70 	    docRtfWriteTag( rwc, "posxo" );
71 	    break;
72 
73 	default:
74 	    LDEB(fp->fpXPosition);
75 	}
76 
77     switch( fp->fpYReference )
78 	{
79 	case FYrefMARGIN:
80 	    docRtfWriteTag( rwc, "pvmrg" );
81 	    break;
82 
83 	case FYrefPAGE:
84 	    docRtfWriteTag( rwc, "pvpg" );
85 	    break;
86 
87 	case FYrefPARA:
88 	    docRtfWriteTag( rwc, "pvpara" );
89 	    break;
90 
91 	case FYrefLINE:
92 	    docRtfWriteTag( rwc, "posyil" );
93 	    break;
94 
95 	default:
96 	    LDEB(fp->fpYReference);
97 	}
98 
99     switch( fp->fpYPosition )
100 	{
101 	case FYposYGIVEN:
102 	    if  ( fp->fpXTwips >= 0 )
103 		{ docRtfWriteArgTag( rwc, "posy", fp->fpYTwips ); }
104 	    else{
105 		docRtfWriteArgTag( rwc, "posnegy", -fp->fpYTwips );
106 		}
107 	    break;
108 
109 	case FYposYIN:
110 	    docRtfWriteTag( rwc, "posyin" );
111 	    break;
112 	case FYposYOUT:
113 	    docRtfWriteTag( rwc, "posyout" );
114 	    break;
115 	case FYposYT:
116 	    docRtfWriteTag( rwc, "posyt" );
117 	    break;
118 	case FYposYC:
119 	    docRtfWriteTag( rwc, "posyc" );
120 	    break;
121 	case FYposYB:
122 	    docRtfWriteTag( rwc, "posyb" );
123 	    break;
124 
125 	default:
126 	    LDEB(fp->fpYPosition);
127 	}
128 
129     if  ( fp->fpLockAnchor )
130 	{ docRtfWriteTag( rwc, "abslock" );		 }
131 
132     switch( fp->fpFrameWrapStyle )
133 	{
134 	case FWSwrapWRAP:
135 	    /* LDEB(fp->fpFrameWrapStyle); */
136 	    break;
137 	case FWSwrapNOWRAP:
138 	    docRtfWriteTag( rwc, "nowrap" );
139 	    break;
140 	case FWSwrapOVERLAY:
141 	    docRtfWriteTag( rwc, "overlay" );
142 	    break;
143 
144 	default:
145 	    LDEB(fp->fpFrameWrapStyle);
146 	}
147 
148     if  ( fp->fpDistanceFromTextTwipsLeft	==
149 	  fp->fpDistanceFromTextTwipsTop	)
150 	{
151 	if  ( fp->fpDistanceFromTextTwipsLeft > 0 )
152 	    {
153 	    docRtfWriteArgTag( rwc, "dxfrtext",
154 				    fp->fpDistanceFromTextTwipsLeft );
155 	    }
156 	}
157     else{
158 	if  ( fp->fpDistanceFromTextTwipsLeft > 0 )
159 	    {
160 	    docRtfWriteArgTag( rwc, "dfrmtxtx",
161 				    fp->fpDistanceFromTextTwipsLeft );
162 	    }
163 	if  ( fp->fpDistanceFromTextTwipsTop > 0 )
164 	    {
165 	    docRtfWriteArgTag( rwc, "dfrmtxty",
166 				    fp->fpDistanceFromTextTwipsTop );
167 	    }
168 	}
169 
170     /*  No separate TFPpropDFRMTXTL for paragraph */
171     /*  No separate TFPpropDFRMTXTR for paragraph */
172     /*  No separate TFPpropDFRMTXTT for paragraph */
173     /*  No separate TFPpropDFRMTXTB for paragraph */
174 
175     switch( fp->fpTextFlowDirection )
176 	{
177 	case TXflowTXLRTB:
178 	    /*docRtfWriteTag( rwc, "frmtxlrtb" );*/
179 	    break;
180 	case TXflowTXTBRL:
181 	    docRtfWriteTag( rwc, "frmtxtbrl" );
182 	    break;
183 	case TXflowTXBTLR:
184 	    docRtfWriteTag( rwc, "frmtxbtlr" );
185 	    break;
186 	case TXflowTXLRTBV:
187 	    docRtfWriteTag( rwc, "frmtxlrtbv" );
188 	    break;
189 	case TXflowTXTBRLV:
190 	    docRtfWriteTag( rwc, "frmtxtbrlv" );
191 	    break;
192 
193 	default:
194 	    LDEB(fp->fpTextFlowDirection);
195 	}
196 
197     return;
198     }
199 
docRtfSaveRowFrameProperties(RtfWriter * rwc,const FrameProperties * fp)200 void docRtfSaveRowFrameProperties( RtfWriter *		rwc,
201 				const FrameProperties *		fp )
202     {
203     /* no TFPpropABSW for table */
204     /* no TFPpropABSH for table */
205 
206     switch( fp->fpXReference )
207 	{
208 	case FXrefCOLUMN:
209 	    docRtfWriteTag( rwc, "tphcol" );
210 	    break;
211 
212 	case FXrefPAGE:
213 	    docRtfWriteTag( rwc, "tphpg" );
214 	    break;
215 
216 	case FXrefMARGIN:
217 	    docRtfWriteTag( rwc, "tphmrg" );
218 	    break;
219 
220 	default:
221 	    LDEB(fp->fpXReference);
222 	}
223 
224     switch( fp->fpXPosition )
225 	{
226 	case FXposXGIVEN:
227 	    if  ( fp->fpXTwips >= 0 )
228 		{ docRtfWriteArgTag( rwc, "tposx", fp->fpXTwips ); }
229 	    else{
230 		docRtfWriteArgTag( rwc, "tposnegx", -fp->fpXTwips );
231 		}
232 	    break;
233 
234 	case FXposXL:
235 	    docRtfWriteTag( rwc, "tposxl" );
236 	    break;
237 	case FXposXR:
238 	    docRtfWriteTag( rwc, "tposxr" );
239 	    break;
240 	case FXposXC:
241 	    docRtfWriteTag( rwc, "tposxc" );
242 	    break;
243 	case FXposXI:
244 	    docRtfWriteTag( rwc, "tposxi" );
245 	    break;
246 	case FXposXO:
247 	    docRtfWriteTag( rwc, "tposxo" );
248 	    break;
249 
250 	default:
251 	    LDEB(fp->fpXPosition);
252 	}
253 
254     switch( fp->fpYReference )
255 	{
256 	case FYrefMARGIN:
257 	    docRtfWriteTag( rwc, "tpvmrg" );
258 	    break;
259 
260 	case FYrefPAGE:
261 	    docRtfWriteTag( rwc, "tpvpg" );
262 	    break;
263 
264 	case FYrefPARA:
265 	    docRtfWriteTag( rwc, "tpvpara" );
266 	    break;
267 
268 	case FYrefLINE:
269 	    docRtfWriteTag( rwc, "tposyil" );
270 	    break;
271 
272 	default:
273 	    LDEB(fp->fpYReference);
274 	}
275 
276     switch( fp->fpYPosition )
277 	{
278 	case FYposYGIVEN:
279 	    if  ( fp->fpXTwips >= 0 )
280 		{ docRtfWriteArgTag( rwc, "tposy", fp->fpYTwips ); }
281 	    else{
282 		docRtfWriteArgTag( rwc, "tposnegy", -fp->fpYTwips );
283 		}
284 	    break;
285 
286 	case FYposYIN:
287 	    docRtfWriteTag( rwc, "tposyin" );
288 	    break;
289 	case FYposYOUT:
290 	    docRtfWriteTag( rwc, "tposyout" );
291 	    break;
292 	case FYposYT:
293 	    docRtfWriteTag( rwc, "tposyt" );
294 	    break;
295 	case FYposYC:
296 	    docRtfWriteTag( rwc, "tposyc" );
297 	    break;
298 	case FYposYB:
299 	    docRtfWriteTag( rwc, "tposyb" );
300 	    break;
301 
302 	default:
303 	    LDEB(fp->fpYPosition);
304 	}
305 
306     /*  No TFPpropLOCK_ANCHOR for table */
307     /*  No TFPpropWRAP_STYLE, FWSwrapNOWRAP for table */
308     /*  No TFPpropWRAP_STYLE, FWSwrapOVERLAY for table */
309 
310     /*  no TFPpropDFRMTXT shorthand for table */
311     /*  no TFPpropDFRMTXTX shorthand for table */
312     /*  no TFPpropDFRMTXTY shorthand for table */
313 
314     if  ( fp->fpDistanceFromTextTwipsLeft > 0 )
315 	{
316 	docRtfWriteArgTag( rwc, "tdfrmtxtLeft",
317 				fp->fpDistanceFromTextTwipsLeft );
318 	}
319     if  ( fp->fpDistanceFromTextTwipsRight > 0 )
320 	{
321 	docRtfWriteArgTag( rwc, "tdfrmtxtRight",
322 				fp->fpDistanceFromTextTwipsRight );
323 	}
324     if  ( fp->fpDistanceFromTextTwipsTop > 0 )
325 	{
326 	docRtfWriteArgTag( rwc, "tdfrmtxtTop",
327 				fp->fpDistanceFromTextTwipsTop );
328 	}
329     if  ( fp->fpDistanceFromTextTwipsBottom > 0 )
330 	{
331 	docRtfWriteArgTag( rwc, "tdfrmtxtBottom",
332 				fp->fpDistanceFromTextTwipsBottom );
333 	}
334 
335     /*  No TFPpropTEXT_FLOW for table */
336 
337     return;
338     }
339 
340 /************************************************************************/
341 /*									*/
342 /*  Handle a frame property when reading RTF.				*/
343 /*									*/
344 /************************************************************************/
345 
346 /************************************************************************/
347 /*									*/
348 /*  Handle a paragraph frame property when reading RTF.			*/
349 /*									*/
350 /************************************************************************/
351 
docRtfRememberParaFrameProperty(const RtfControlWord * rcw,int arg,RtfReader * rrc)352 int docRtfRememberParaFrameProperty(	const RtfControlWord *	rcw,
353 					int			arg,
354 					RtfReader *	rrc )
355     {
356     RtfReadingState *	rrs= rrc->rrcState;
357     FrameProperties *	fp= &(rrs->rrsParaFrameProperties);
358 
359     if  ( docSetFrameProperty( fp, rcw->rcwID, arg ) )
360 	{ LSLDEB(rcw->rcwID,rcw->rcwWord,arg); return -1;	}
361 
362     /*
363     PROPmaskADD( &(rrc->rrcStyle.dsParaMask), rcw->rcwID );
364     */
365 
366     return 0;
367     }
368 
docRtfRememberRowFrameProperty(const RtfControlWord * rcw,int arg,RtfReader * rrc)369 int docRtfRememberRowFrameProperty(	const RtfControlWord *	rcw,
370 					int			arg,
371 					RtfReader *	rrc )
372     {
373     FrameProperties *	fp= &(rrc->rrcRowFrameProperties);
374 
375     if  ( docSetFrameProperty( fp, rcw->rcwID, arg ) )
376 	{ LSLDEB(rcw->rcwID,rcw->rcwWord,arg); return -1;	}
377 
378     /*
379     PROPmaskADD( &(rrc->rrcStyle.dsRowMask), rcw->rcwID );
380     */
381 
382     return 0;
383     }
384