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