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