1 /************************************************************************/
2 /* */
3 /* Read the various document tables of an RTF text file into a */
4 /* BufferDocument. */
5 /* */
6 /************************************************************************/
7
8 # include "docRtfConfig.h"
9
10 # include <string.h>
11 # include <stdio.h>
12 # include <ctype.h>
13
14 # include <appDebugon.h>
15
16 # include "docRtfWriterImpl.h"
17
18 /************************************************************************/
19 /* */
20 /* Write a Style Sheet. */
21 /* */
22 /************************************************************************/
23
docRtfWriteStyleSheet(RtfWriter * rwc,const DocumentStyleSheet * dss)24 void docRtfWriteStyleSheet( RtfWriter * rwc,
25 const DocumentStyleSheet * dss )
26 {
27 int i;
28
29 docRtfWriteDestinationBegin( rwc, "stylesheet" );
30 docRtfWriteNextLine( rwc );
31
32 for ( i= 0; i < dss->dssStyleCount; i++ )
33 {
34 const DocumentStyle * ds= dss->dssStyles[i];
35
36 if ( ! ds || ds->dsStyleNumber < 0 )
37 { continue; }
38
39 switch( ds->dsLevel )
40 {
41 case DOClevSPAN:
42 docRtfWriteArgDestinationBegin( rwc, "*\\cs",
43 ds->dsStyleNumber );
44 docRtfSaveTextAttribute( rwc,
45 &(ds->dsTextMask), &(ds->dsTextAttribute) );
46 break;
47
48 case DOClevPARA:
49 if ( ds->dsStyleNumber > 0 )
50 {
51 docRtfWriteArgDestinationBegin( rwc, "s",
52 ds->dsStyleNumber );
53 }
54 else{
55 docRtfWriteDestinationBegin( rwc, "" );
56 }
57
58 docRtfSaveParagraphProperties( rwc, &(ds->dsParaMask),
59 &(ds->dsParaProps) );
60 docRtfSaveTextAttribute( rwc,
61 &(ds->dsTextMask), &(ds->dsTextAttribute) );
62 break;
63
64 case DOClevSECT:
65 docRtfWriteArgDestinationBegin( rwc, "ds",
66 ds->dsStyleNumber );
67
68 docRtfSaveSectionProperties( rwc,
69 &(ds->dsSectMask), &(ds->dsSectProps) );
70 docRtfSaveParagraphProperties( rwc,
71 &(ds->dsParaMask), &(ds->dsParaProps) );
72 docRtfSaveTextAttribute( rwc,
73 &(ds->dsTextMask), &(ds->dsTextAttribute) );
74 break;
75
76 case DOClevROW:
77 docRtfWriteArgDestinationBegin( rwc, "*\\ts",
78 ds->dsStyleNumber );
79 break;
80
81 default:
82 LDEB(ds->dsLevel); continue;
83 }
84
85 if ( ds->dsBasedOn >= 0 )
86 { docRtfWriteArgTag( rwc, "sbasedon", ds->dsBasedOn ); }
87 if ( ds->dsNext >= 0 )
88 { docRtfWriteArgTag( rwc, "snext", ds->dsNext ); }
89 if ( ds->dsLink >= 0 )
90 { docRtfWriteTag( rwc, "slink" ); }
91
92 if ( ds->dsAdditive )
93 { docRtfWriteTag( rwc, "additive" ); }
94 if ( ds->dsAutoupd )
95 { docRtfWriteTag( rwc, "sautoupd" ); }
96 if ( ds->dsHidden )
97 { docRtfWriteTag( rwc, "shidden" ); }
98 if ( ds->dsLocked )
99 { docRtfWriteTag( rwc, "slocked" ); }
100 if ( ds->dsSemiHidden )
101 { docRtfWriteTag( rwc, "ssemihidden" ); }
102 if ( ds->dsPersonal )
103 { docRtfWriteTag( rwc, "spersonal" ); }
104
105 docRtfWriteDocEncodedString( rwc, ds->dsName, strlen( ds->dsName ) );
106 docRtfWriteSemicolon( rwc );
107
108 docRtfWriteDestinationEnd( rwc );
109 docRtfWriteNextLine( rwc );
110 }
111
112 docRtfWriteDestinationEnd( rwc );
113 docRtfWriteNextLine( rwc );
114
115 return;
116 }
117
118