1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
24 #include <rsccont.hxx>
26 #include <tools/rcid.h>
28 void ENTRY_STRUCT::Destroy()
33 aInst
.pClass
->Destroy( aInst
);
34 rtl_freeMemory( aInst
.pData
);
38 RscBaseCont::RscBaseCont( Atom nId
, sal_uInt32 nTypeId
, RscTop
* pSuper
,
40 : RscTop( nId
, nTypeId
, pSuper
)
46 nOffInstData
= RscTop::Size();
47 nSize
= nOffInstData
+ ALIGNED_SIZE( sizeof( RscBaseContInst
) );
50 RscBaseCont::~RscBaseCont()
54 RSCCLASS_TYPE
RscBaseCont::GetClassType() const
56 return RSCCLASS_COMPLEX
;
59 void RscBaseCont::DestroyElements( RscBaseContInst
* pClassData
)
61 if( pClassData
->nEntries
)
63 for (sal_uInt32 i
= 0; i
< pClassData
->nEntries
; i
++ )
65 pClassData
->pEntries
[ i
].Destroy();
67 rtl_freeMemory( pClassData
->pEntries
);
68 pClassData
->pEntries
= NULL
;
69 pClassData
->nEntries
= 0;
73 RSCINST
RscBaseCont::Create( RSCINST
* pInst
, const RSCINST
& rDflt
,
77 RscBaseContInst
* pClassData
;
82 aInst
.pData
= static_cast<CLASS_DATA
>(rtl_allocateMemory( Size() ));
87 if( !bOwnClass
&& rDflt
.IsInst() )
88 bOwnClass
= rDflt
.pClass
->InHierarchy( this );
90 RscTop::Create( &aInst
, rDflt
, bOwnClass
);
92 pClassData
= reinterpret_cast<RscBaseContInst
*>(aInst
.pData
+ nOffInstData
);
93 pClassData
->nEntries
= 0;
94 pClassData
->pEntries
= NULL
;
95 pClassData
->bDflt
= true;
99 RscBaseContInst
* pDfltClassData
;
102 pDfltClassData
= reinterpret_cast<RscBaseContInst
*>(rDflt
.pData
+ nOffInstData
);
104 if( 0 != pDfltClassData
->nEntries
)
106 *pClassData
= *pDfltClassData
;
107 pClassData
->pEntries
=
108 static_cast<ENTRY_STRUCT
*>(rtl_allocateMemory( sizeof( ENTRY_STRUCT
)
109 * pClassData
->nEntries
));
110 for (sal_uInt32 i
= 0; i
< pClassData
->nEntries
; i
++ )
112 pClassData
->pEntries
[ i
].Create();
113 pClassData
->pEntries
[ i
].aName
=
114 pDfltClassData
->pEntries
[ i
].aName
;
115 aDfltI
= pDfltClassData
->pEntries
[ i
].aInst
;
116 pClassData
->pEntries
[ i
].aInst
=
117 aDfltI
.pClass
->Create( NULL
, aDfltI
);
125 void RscBaseCont::Destroy( const RSCINST
& rInst
)
127 RscBaseContInst
* pClassData
;
129 RscTop::Destroy( rInst
);
131 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
132 DestroyElements( pClassData
);
135 RSCINST
RscBaseCont::SearchElePos( const RSCINST
& rInst
, const RscId
& rEleName
,
136 RscTop
* pClass
, sal_uInt32 nPos
)
138 RscBaseContInst
* pClassData
;
140 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
144 if( rEleName
.IsId() )
146 for (sal_uInt32 i
= nPos
; i
< pClassData
->nEntries
; i
++ )
148 if( pClassData
->pEntries
[ i
].aName
== rEleName
&&
149 pClassData
->pEntries
[ i
].aInst
.pClass
== pClass
)
151 return pClassData
->pEntries
[ i
].aInst
;
158 RSCINST
RscBaseCont::SearchEle( const RSCINST
& rInst
, const RscId
& rEleName
,
161 return SearchElePos( rInst
, rEleName
, pClass
, 0 );
164 ERRTYPE
RscBaseCont::GetElement( const RSCINST
& rInst
, const RscId
& rEleName
,
165 RscTop
* pCreateClass
,
166 const RSCINST
& rCreateInst
, RSCINST
* pGetInst
)
168 RscBaseContInst
* pClassData
;
172 if( !bNoId
&& !rEleName
.IsId() )
173 aError
= WRN_CONT_NOID
;
175 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
179 if( !pCreateClass
->InHierarchy( pTypeClass
) )
183 if( !pCreateClass
->InHierarchy( pTypeClass1
) )
185 return ERR_CONT_INVALIDTYPE
;
190 return ERR_CONT_INVALIDTYPE
;
195 pCreateClass
= pTypeClass
;
197 pClassData
->bDflt
= false;
200 aTmpI
= SearchEle( rInst
, rEleName
, pCreateClass
);
204 aError
= WRN_CONT_DOUBLEID
;
205 if( rCreateInst
.IsInst() )
207 aTmpI
.pClass
->Destroy( aTmpI
);
208 aTmpI
.pClass
->Create( &aTmpI
, rCreateInst
);
213 if( pClassData
->pEntries
)
215 pClassData
->pEntries
=
216 static_cast<ENTRY_STRUCT
*>(rtl_reallocateMemory( pClassData
->pEntries
,
217 sizeof( ENTRY_STRUCT
) * (pClassData
->nEntries
+1) ));
221 pClassData
->pEntries
=
222 static_cast<ENTRY_STRUCT
*>(rtl_allocateMemory( sizeof( ENTRY_STRUCT
)
223 * (pClassData
->nEntries
+1) ));
226 pClassData
->pEntries
[ pClassData
->nEntries
].Create();
227 pClassData
->pEntries
[ pClassData
->nEntries
].aName
= rEleName
;
229 if( rCreateInst
.IsInst() )
231 // Instanz mit CreateInst-Daten initialisieren
232 pClassData
->pEntries
[ pClassData
->nEntries
].aInst
=
233 pCreateClass
->Create( NULL
, rCreateInst
);
237 pClassData
->pEntries
[ pClassData
->nEntries
].aInst
=
238 pCreateClass
->Create( NULL
, RSCINST() );
241 pClassData
->nEntries
++;
242 aTmpI
= pClassData
->pEntries
[ pClassData
->nEntries
-1 ].aInst
;
249 sal_uInt32
RscBaseCont::GetCount( const RSCINST
& rInst
)
251 RscBaseContInst
* pClassData
;
253 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
254 return pClassData
->nEntries
;
257 RSCINST
RscBaseCont::GetPosEle( const RSCINST
& rInst
, sal_uInt32 nPos
)
259 RscBaseContInst
* pClassData
;
261 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
263 if( nPos
< pClassData
->nEntries
)
264 return pClassData
->pEntries
[ nPos
].aInst
;
268 ERRTYPE
RscBaseCont::MovePosEle( const RSCINST
& rInst
, sal_uInt32 nDestPos
,
269 sal_uInt32 nSourcePos
)
272 RscBaseContInst
* pClassData
;
274 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
276 if( (nDestPos
< pClassData
->nEntries
) && (nSourcePos
< pClassData
->nEntries
) )
283 aEntry
= pClassData
->pEntries
[ nSourcePos
];
284 // Richtung der for-Schleife bestimmen
285 if( nDestPos
< nSourcePos
)
288 for( i
= nSourcePos
; i
!= nDestPos
; i
+= nInc
)
289 pClassData
->pEntries
[ i
] = pClassData
->pEntries
[ i
+ nInc
];
291 // Zuweisung Quelle auf Ziel
292 pClassData
->pEntries
[ nDestPos
] = aEntry
;
295 aError
= ERR_RSCCONT
;
300 ERRTYPE
RscBaseCont::SetPosRscId( const RSCINST
& rInst
, sal_uInt32 nPos
,
303 RscBaseContInst
* pClassData
;
307 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
309 if( nPos
< pClassData
->nEntries
)
311 if( ! (rId
== pClassData
->pEntries
[ nPos
].aName
) )
312 aTmpI
= SearchEle( rInst
, rId
,
313 pClassData
->pEntries
[ nPos
].aInst
.pClass
);
314 if( !aTmpI
.IsInst() )
315 pClassData
->pEntries
[ nPos
].aName
= rId
;
317 aError
= ERR_RSCCONT
;
320 aError
= ERR_RSCCONT
;
325 SUBINFO_STRUCT
RscBaseCont::GetInfoEle( const RSCINST
& rInst
, sal_uInt32 nPos
)
327 RscBaseContInst
* pClassData
;
328 SUBINFO_STRUCT aInfo
;
330 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
332 if( nPos
< pClassData
->nEntries
)
334 aInfo
.aId
= pClassData
->pEntries
[ nPos
].aName
;
336 aInfo
.pClass
= pClassData
->pEntries
[ nPos
].aInst
.pClass
;
341 ERRTYPE
RscBaseCont::SetString( const RSCINST
& rInst
, const char * pStr
)
343 RscBaseContInst
* pClassData
;
348 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
350 // otherwise infinite recursion is possible
351 if( RSC_NOTYPE
== pTypeClass
->GetTypId() )
353 aError
= GetElement( rInst
, RscId(), pTypeClass
, RSCINST(), &aTmpI
);
354 aError
= aTmpI
.pClass
->GetString( aTmpI
, &pTmpStr
);
357 aError
= aTmpI
.pClass
->SetString( aTmpI
, pStr
);
361 DeletePos( rInst
, pClassData
->nEntries
-1 );
362 aError
= GetElement( rInst
, RscId(), pTypeClass1
, RSCINST(), &aTmpI
);
363 aError
= aTmpI
.pClass
->GetString( aTmpI
, &pTmpStr
);
365 aError
= aTmpI
.pClass
->SetString( aTmpI
, pStr
);
368 if( aError
.IsError() )
369 DeletePos( rInst
, pClassData
->nEntries
-1 );
372 aError
= ERR_UNKNOWN_METHOD
;
377 ERRTYPE
RscBaseCont::SetNumber( const RSCINST
& rInst
, sal_Int32 lValue
)
379 RscBaseContInst
* pClassData
;
384 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
386 // otherwise infinite recursion is possible
387 if( RSC_NOTYPE
== pTypeClass
->GetTypId() )
389 aError
= GetElement( rInst
, RscId(), pTypeClass
, RSCINST(), &aTmpI
);
390 aError
= aTmpI
.pClass
->GetNumber( aTmpI
, &lNumber
);
393 aError
= aTmpI
.pClass
->SetNumber( aTmpI
, lValue
);
397 DeletePos( rInst
, pClassData
->nEntries
-1 );
398 aError
= GetElement( rInst
, RscId(), pTypeClass1
, RSCINST(), &aTmpI
);
399 aError
= aTmpI
.pClass
->GetNumber( aTmpI
, &lNumber
);
401 aError
= aTmpI
.pClass
->SetNumber( aTmpI
, lValue
);
403 if( aError
.IsError() )
404 DeletePos( rInst
, pClassData
->nEntries
-1 );
407 aError
= ERR_UNKNOWN_METHOD
;
412 ERRTYPE
RscBaseCont::SetBool( const RSCINST
& rInst
,
415 RscBaseContInst
* pClassData
;
420 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
422 // otherwise infinite recursion is possible
423 if( RSC_NOTYPE
== pTypeClass
->GetTypId() )
425 aError
= GetElement( rInst
, RscId(), pTypeClass
, RSCINST(), &aTmpI
);
426 aError
= aTmpI
.pClass
->GetBool( aTmpI
, &bBool
);
429 aError
= aTmpI
.pClass
->SetBool( aTmpI
, bValue
);
433 DeletePos( rInst
, pClassData
->nEntries
-1 );
434 aError
= GetElement( rInst
, RscId(), pTypeClass1
, RSCINST(), &aTmpI
);
435 aError
= aTmpI
.pClass
->GetBool( aTmpI
, &bBool
);
437 aError
= aTmpI
.pClass
->SetBool( aTmpI
, bValue
);
440 if( aError
.IsError() )
441 DeletePos( rInst
, pClassData
->nEntries
-1 );
444 aError
= ERR_UNKNOWN_METHOD
;
449 ERRTYPE
RscBaseCont::SetConst( const RSCINST
& rInst
,
453 RscBaseContInst
* pClassData
;
458 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
460 // otherwise infinite recursion is possible
461 if( RSC_NOTYPE
== pTypeClass
->GetTypId() )
463 aError
= GetElement( rInst
, RscId(), pTypeClass
, RSCINST(), &aTmpI
);
464 aError
= aTmpI
.pClass
->GetConst( aTmpI
, &nConst
);
467 aError
= aTmpI
.pClass
->SetConst( aTmpI
, nValueId
, lValue
);
471 DeletePos( rInst
, pClassData
->nEntries
-1 );
472 aError
= GetElement( rInst
, RscId(), pTypeClass1
, RSCINST(), &aTmpI
);
473 aError
= aTmpI
.pClass
->GetConst( aTmpI
, &nConst
);
475 aError
= aTmpI
.pClass
->SetConst( aTmpI
, nValueId
, lValue
);
478 if( aError
.IsError() )
479 DeletePos( rInst
, pClassData
->nEntries
-1 );
482 aError
= ERR_UNKNOWN_METHOD
;
487 ERRTYPE
RscBaseCont::SetRef( const RSCINST
& rInst
, const RscId
& rRefId
)
489 RscBaseContInst
* pClassData
;
494 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
496 // otherwise infinite recursion is possible
497 if( RSC_NOTYPE
== pTypeClass
->GetTypId() )
499 aError
= GetElement( rInst
, RscId(), pTypeClass
, RSCINST(), &aTmpI
);
500 aError
= aTmpI
.pClass
->GetRef( aTmpI
, &aId
);
503 aError
= aTmpI
.pClass
->SetRef( aTmpI
, rRefId
);
507 DeletePos( rInst
, pClassData
->nEntries
-1 );
508 aError
= GetElement( rInst
, RscId(), pTypeClass1
, RSCINST(), &aTmpI
);
509 aError
= aTmpI
.pClass
->GetRef( aTmpI
, &aId
);
511 aError
= aTmpI
.pClass
->SetNumber( aTmpI
, rRefId
);
514 if( aError
.IsError() )
515 DeletePos( rInst
, pClassData
->nEntries
-1 );
518 aError
= ERR_UNKNOWN_METHOD
;
523 bool RscBaseCont::IsConsistent( const RSCINST
& rInst
)
526 RscBaseContInst
* pClassData
;
529 bRet
= RscTop::IsConsistent( rInst
);
531 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
533 // auf doppelten Id Testen und Reihenfolge beibehalten
534 // Komplexitaet = n^2 / 2
535 for( i
= 0; i
< pClassData
->nEntries
; i
++ )
539 if( (sal_Int32
)pClassData
->pEntries
[ i
].aName
> 0x7FFF ||
540 (sal_Int32
)pClassData
->pEntries
[ i
].aName
< 1 )
544 else if( SearchElePos( rInst
, pClassData
->pEntries
[ i
].aName
,
545 pClassData
->pEntries
[ i
].aInst
.pClass
, i
+1 ).IsInst() )
550 if( ! pClassData
->pEntries
[ i
].aInst
.pClass
->
551 IsConsistent( pClassData
->pEntries
[ i
].aInst
) )
560 void RscBaseCont::SetToDefault( const RSCINST
& rInst
)
563 RscBaseContInst
* pClassData
;
565 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
567 for( i
= 0; i
< pClassData
->nEntries
; i
++ )
569 pClassData
->pEntries
[ i
].aInst
.pClass
->
570 SetToDefault( pClassData
->pEntries
[ i
].aInst
);
573 RscTop::SetToDefault( rInst
);
576 bool RscBaseCont::IsDefault( const RSCINST
& rInst
)
579 RscBaseContInst
* pClassData
;
581 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
583 if( !pClassData
->bDflt
)
586 for( i
= 0; i
< pClassData
->nEntries
; i
++ )
588 if( ! pClassData
->pEntries
[ i
].aInst
.pClass
->
589 IsDefault( pClassData
->pEntries
[ i
].aInst
) )
595 return RscTop::IsDefault( rInst
);
598 bool RscBaseCont::IsValueDefault( const RSCINST
& rInst
, CLASS_DATA pDef
)
600 RscBaseContInst
* pClassData
;
602 if( !RscTop::IsValueDefault( rInst
, pDef
) )
605 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
607 if( pClassData
->nEntries
)
613 void RscBaseCont::Delete( const RSCINST
& rInst
, RscTop
* pClass
,
617 RscBaseContInst
* pClassData
;
619 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
623 for( i
= 0; i
< pClassData
->nEntries
; i
++ )
625 if( pClassData
->pEntries
[ i
].aName
== rId
)
627 if( pClassData
->pEntries
[ i
].aInst
.pClass
== pClass
|| !pClass
)
629 DeletePos( rInst
, i
);
637 void RscBaseCont::DeletePos( const RSCINST
& rInst
, sal_uInt32 nPos
)
639 RscBaseContInst
* pClassData
;
641 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
643 if( nPos
< pClassData
->nEntries
)
645 if( 1 == pClassData
->nEntries
)
646 DestroyElements( pClassData
);
649 pClassData
->pEntries
[ nPos
].Destroy();
650 pClassData
->nEntries
--;
652 for (sal_uInt32 i
= nPos
; i
< pClassData
->nEntries
; i
++ )
653 pClassData
->pEntries
[ i
] = pClassData
->pEntries
[ i
+ 1 ];
659 void RscBaseCont::ContWriteSrc( const RSCINST
& rInst
, FILE * fOutput
,
660 RscTypCont
* pTC
, sal_uInt32 nTab
,
661 const char * pVarName
)
663 sal_uInt32 i
= 0, t
= 0;
664 RscBaseContInst
* pClassData
;
666 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
668 for( i
= 0; i
< pClassData
->nEntries
; i
++ )
670 for( t
= 0; t
< nTab
; t
++ )
671 fputc( '\t', fOutput
);
673 pClassData
->pEntries
[ i
].aInst
.pClass
->
674 WriteSrcHeader( pClassData
->pEntries
[ i
].aInst
,
676 pClassData
->pEntries
[ i
].aName
, pVarName
);
677 fprintf( fOutput
, ";\n" );
681 ERRTYPE
RscBaseCont::ContWriteRc( const RSCINST
& rInst
, RscWriteRc
& rMem
,
682 RscTypCont
* pTC
, sal_uInt32 nDeep
, bool bExtra
)
684 RscBaseContInst
* pClassData
;
687 if( bExtra
|| bNoId
)
688 { // Nur Subresourcen schreiben, wenn bExtra == true
689 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
691 for (sal_uInt32 i
= 0; i
< pClassData
->nEntries
&& aError
.IsOk(); i
++ )
693 aError
= pClassData
->pEntries
[ i
].aInst
.pClass
->
694 WriteRcHeader( pClassData
->pEntries
[ i
].aInst
,
696 pClassData
->pEntries
[ i
].aName
,
704 void RscBaseCont::WriteSrc( const RSCINST
& rInst
, FILE * fOutput
,
705 RscTypCont
* pTC
, sal_uInt32 nTab
,
706 const char * pVarName
)
708 RscTop::WriteSrc( rInst
, fOutput
, pTC
, nTab
, pVarName
);
709 ContWriteSrc( rInst
, fOutput
, pTC
, nTab
, pVarName
);
712 ERRTYPE
RscBaseCont::WriteRc( const RSCINST
& rInst
, RscWriteRc
& rMem
,
713 RscTypCont
* pTC
, sal_uInt32 nDeep
, bool bExtra
)
717 aError
= RscTop::WriteRc( rInst
, rMem
, pTC
, nDeep
, bExtra
);
719 aError
= ContWriteRc( rInst
, rMem
, pTC
, nDeep
, bExtra
);
724 RscContWriteSrc::RscContWriteSrc( Atom nId
, sal_uInt32 nTypeId
,
725 RscTop
* pSuper
, bool bNoIdent
)
726 : RscBaseCont( nId
, nTypeId
, pSuper
, bNoIdent
)
730 void RscContWriteSrc::WriteSrc( const RSCINST
& rInst
, FILE * fOutput
,
731 RscTypCont
* pTC
, sal_uInt32 nTab
,
732 const char * pVarName
)
736 RscTop::WriteSrc( rInst
, fOutput
, pTC
, nTab
, pVarName
);
738 fprintf( fOutput
, "\n" );
739 for( i
= 0; i
< nTab
; i
++ )
740 fputc( '\t', fOutput
);
742 fprintf( fOutput
, "{\n" );
744 ContWriteSrc( rInst
, fOutput
, pTC
, nTab
+1, pVarName
);
746 for( i
= 0; i
< nTab
; i
++ )
747 fputc( '\t', fOutput
);
749 fprintf( fOutput
, "}" );
752 RscCont::RscCont( Atom nId
, sal_uInt32 nTypeId
, RscTop
* pSuper
, bool bNoIdent
)
753 : RscContWriteSrc( nId
, nTypeId
, pSuper
, bNoIdent
)
757 ERRTYPE
RscCont::WriteRc( const RSCINST
& rInst
, RscWriteRc
& rMem
,
758 RscTypCont
* pTC
, sal_uInt32 nDeep
, bool bExtra
)
760 RscBaseContInst
* pClassData
;
763 aError
= RscTop::WriteRc( rInst
, rMem
, pTC
, nDeep
, bExtra
);
765 pClassData
= reinterpret_cast<RscBaseContInst
*>(rInst
.pData
+ nOffInstData
);
767 rMem
.Put( pClassData
->nEntries
);
770 aError
= ContWriteRc( rInst
, rMem
, pTC
, nDeep
, bExtra
);
775 RscContExtraData::RscContExtraData( Atom nId
, sal_uInt32 nTypeId
,
776 RscTop
* pSuper
, bool bNoIdent
)
777 : RscContWriteSrc( nId
, nTypeId
, pSuper
, bNoIdent
)
781 ERRTYPE
RscContExtraData::WriteRc( const RSCINST
& rInst
, RscWriteRc
& rMem
,
782 RscTypCont
* pTC
, sal_uInt32 nDeep
, bool bExtra
)
787 aError
= RscContWriteSrc::WriteRc( rInst
, rMem
, pTC
, nDeep
, bExtra
);
789 aError
= RscTop::WriteRc( rInst
, rMem
, pTC
, nDeep
, bExtra
);
794 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */