1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2000, 2010 Oracle and/or its affiliates.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * This file is part of OpenOffice.org.
11 * OpenOffice.org is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
15 * OpenOffice.org is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details
19 * (a copy is included in the LICENSE file that accompanied this code).
21 * You should have received a copy of the GNU Lesser General Public License
22 * version 3 along with OpenOffice.org. If not, see
23 * <http://www.openoffice.org/license.html>
24 * for a copy of the LGPLv3 License.
26 ************************************************************************/
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_rsc.hxx"
30 /****************** I N C L U D E S **************************************/
32 // Programmuebergreifende Includes.
35 /****************** C o d e **********************************************/
36 /****************** R s c I d ********************************************/
37 sal_Bool
RscId::bNames
= sal_True
;
39 /*************************************************************************
41 |* static RscId::SetNames
42 |* static RscId::SetNoNames
45 |* Ersterstellung MM 26.06.91
46 |* Letzte Aenderung MM 26.06.91
48 *************************************************************************/
49 void RscId::SetNames( sal_Bool bSet
) { bNames
= bSet
; }
50 sal_Bool
RscId::IsSetNames() { return bNames
; }
52 /*************************************************************************
57 |* Ersterstellung MM 17.05.91
58 |* Letzte Aenderung MM 17.05.91
60 *************************************************************************/
61 sal_Int32
RscId::GetNumber() const{
63 aExp
.Evaluate( &lVal
);
67 /*************************************************************************
72 |* Ersterstellung MM 01.11.91
73 |* Letzte Aenderung MM 01.11.91
75 *************************************************************************/
76 void RscId::Create( const RscExpType
& rExpType
)
79 if( aExp
.IsDefinition() )
80 aExp
.aExp
.pDef
->IncRef();
81 else if( aExp
.IsExpression() ){
84 aExp
.Evaluate( &lValue
);
85 aExp
.SetLong( lValue
);
89 /*************************************************************************
94 |* Ersterstellung MM 01.11.91
95 |* Letzte Aenderung MM 01.11.91
97 *************************************************************************/
98 void RscId::Destroy(){
99 if( aExp
.IsDefinition() )
100 aExp
.aExp
.pDef
->DecRef();
101 aExp
.cType
= RSCEXP_NOTHING
;
104 /*************************************************************************
109 |* Ersterstellung MM 01.11.91
110 |* Letzte Aenderung MM 01.11.91
112 *************************************************************************/
113 RscId::RscId( const RscId
& rRscId
){
115 if( aExp
.IsDefinition() )
116 aExp
.aExp
.pDef
->IncRef();
119 /*************************************************************************
124 |* Ersterstellung MM 01.11.91
125 |* Letzte Aenderung MM 25.11.91
127 *************************************************************************/
128 RscId::RscId( RscDefine
* pDef
){
131 aExpType
.aExp
.pDef
= pDef
;
132 aExpType
.cType
= RSCEXP_DEF
;
136 /*************************************************************************
141 |* Ersterstellung MM 01.11.91
142 |* Letzte Aenderung MM 01.11.91
144 *************************************************************************/
145 RscId
& RscId::operator = ( const RscId
& rRscId
){
146 if( rRscId
.aExp
.IsDefinition() )
147 rRscId
.aExp
.aExp
.pDef
->IncRef();
153 /*************************************************************************
155 |* RscId::operator ==
158 |* Ersterstellung MM 16.05.91
159 |* Letzte Aenderung MM 16.05.91
161 *************************************************************************/
162 sal_Bool
RscId::operator == ( const RscId
& rRscId
) const
164 return( GetNumber() == rRscId
.GetNumber() );
167 /*************************************************************************
172 |* Ersterstellung MM 16.05.91
173 |* Letzte Aenderung MM 16.05.91
175 *************************************************************************/
176 sal_Bool
RscId::operator < ( const RscId
& rRscId
) const
178 return( GetNumber() < rRscId
.GetNumber() );
181 /*************************************************************************
186 |* Ersterstellung MM 16.05.91
187 |* Letzte Aenderung MM 16.05.91
189 *************************************************************************/
190 sal_Bool
RscId::operator > ( const RscId
& rRscId
) const
192 return( GetNumber() > rRscId
.GetNumber() );
195 /*************************************************************************
197 |* RscId::sal_Int32()
200 |* Ersterstellung MM 16.05.91
201 |* Letzte Aenderung MM 16.05.91
203 *************************************************************************/
204 RscId::operator sal_Int32() const
206 return( GetNumber() );
209 /*************************************************************************
214 |* Ersterstellung MM 16.05.91
215 |* Letzte Aenderung MM 25.11.91
217 *************************************************************************/
218 ByteString
RscId::GetName() const
222 if ( !aExp
.IsNothing() )
225 aExp
.GetMacro( aStr
);
227 aStr
= ByteString::CreateFromInt32( GetNumber() );
233 /*************************************************************************
238 |* Ersterstellung MM 01.11.91
239 |* Letzte Aenderung MM 25.11.91
241 *************************************************************************/
242 ByteString
RscId::GetMacro() const
246 if ( aExp
.IsDefinition() )
247 aStr
= aExp
.aExp
.pDef
->GetMacro();
249 aExp
.GetMacro( aStr
);
254 /****************** R s c D e f i n e ************************************/
255 /*************************************************************************
257 |* RscDefine::RscDefine()
260 |* Ersterstellung MM 01.11.91
261 |* Letzte Aenderung MM 01.11.91
263 *************************************************************************/
264 RscDefine::RscDefine( sal_uLong lKey
, const ByteString
& rDefName
, sal_Int32 lDefId
)
265 : StringNode( rDefName
)
273 RscDefine::RscDefine( sal_uLong lKey
, const ByteString
& rDefName
,
274 RscExpression
* pExpression
)
275 : StringNode( rDefName
)
279 pExpression
->Evaluate( &lId
);
283 /*************************************************************************
285 |* RscDefine::~RscDefine()
288 |* Ersterstellung MM 01.11.91
289 |* Letzte Aenderung MM 01.11.91
291 *************************************************************************/
292 RscDefine::~RscDefine(){
299 /*************************************************************************
301 |* RscDefine::DecRef()
304 |* Ersterstellung MM 01.11.91
305 |* Letzte Aenderung MM 01.11.91
307 *************************************************************************/
308 void RscDefine::DecRef(){
310 if( 0 == nRefCount
){
315 /*************************************************************************
317 |* RscDefine::DefineToNumber()
320 |* Ersterstellung MM 07.11.91
321 |* Letzte Aenderung MM 07.11.91
323 *************************************************************************/
324 void RscDefine::DefineToNumber()
329 SetName( ByteString::CreateFromInt32( lId
) );
332 /*************************************************************************
334 |* RscDefine::ChangeMacro()
337 |* Ersterstellung MM 04.11.91
338 |* Letzte Aenderung MM 04.11.91
340 *************************************************************************/
341 void RscDefine::ChangeMacro( RscExpression
* pExpression
){
345 pExp
->Evaluate( &lId
);
348 void RscDefine::ChangeMacro( sal_Int32 lIdentifier
){
356 /*************************************************************************
358 |* RscDefine::Evaluate()
361 |* Ersterstellung MM 01.11.91
362 |* Letzte Aenderung MM 01.11.91
364 *************************************************************************/
365 sal_Bool
RscDefine::Evaluate(){
366 sal_Bool bRet
= sal_True
;
369 bRet
= !pExp
->Evaluate( &lId
);
374 /*************************************************************************
376 |* RscDefine::Search()
379 |* Ersterstellung MM 11.11.91
380 |* Letzte Aenderung MM 11.11.91
382 *************************************************************************/
383 RscDefine
* RscDefine::Search( const char * pStr
){
384 return (RscDefine
*)StringNode::Search( pStr
);
387 /*************************************************************************
389 |* RscDefine::GetMacro()
392 |* Ersterstellung MM 01.11.91
393 |* Letzte Aenderung MM 01.11.91
395 *************************************************************************/
396 ByteString
RscDefine::GetMacro()
399 return pExp
->GetMacro();
400 return ByteString::CreateFromInt32( lId
);
403 /****************** R s c D e f i n e L i s t ****************************/
404 /*************************************************************************
406 |* RscDefineList::New()
409 |* Ersterstellung MM 04.11.91
410 |* Letzte Aenderung MM 04.11.91
412 *************************************************************************/
413 RscDefine
* RscDefineList::New( sal_uLong lFileKey
, const ByteString
& rDefName
,
414 sal_Int32 lDefId
, sal_uLong lPos
)
418 pDef
= new RscDefine( lFileKey
, rDefName
, lDefId
);
420 Insert( pDef
, lPos
);
424 RscDefine
* RscDefineList::New( sal_uLong lFileKey
, const ByteString
& rDefName
,
425 RscExpression
* pExpression
, sal_uLong lPos
)
429 pDef
= new RscDefine( lFileKey
, rDefName
, pExpression
);
431 Insert( pDef
, lPos
);
436 /*************************************************************************
438 |* RscDefineList::Remove()
441 |* Ersterstellung MM 04.11.91
442 |* Letzte Aenderung MM 04.11.91
444 *************************************************************************/
445 sal_Bool
RscDefineList::Remove( RscDefine
* pDef
){
446 pDef
= RscSubDefList::Remove( pDef
);
448 pDef
->DefineToNumber();
452 return( NULL
!= pDef
);
455 sal_Bool
RscDefineList::Remove( sal_uLong lIndex
){
456 RscDefine
* pDef
= RscSubDefList::Remove( lIndex
);
458 pDef
->DefineToNumber();
462 return( NULL
!= pDef
);
465 sal_Bool
RscDefineList::Remove(){
468 pDef
= RscSubDefList::Remove( (sal_uLong
)0 );
471 pDef
->DefineToNumber();
474 return( NULL
!= pDef
);
477 /*************************************************************************
479 |* RscDefineList::Befor()
482 |* Ersterstellung MM 12.11.91
483 |* Letzte Aenderung MM 12.11.91
485 *************************************************************************/
486 sal_Bool
RscDefineList::Befor( const RscDefine
* pFree
,
487 const RscDefine
* pDepend
)
496 if( pDef
== pDepend
)
506 /*************************************************************************
508 |* RscDefineList::WriteAll()
511 |* Ersterstellung MM 28.10.91
512 |* Letzte Aenderung MM 28.10.91
514 *************************************************************************/
515 void RscDefineList::WriteAll( FILE * fOutput
)
517 RscDefine
* pDefEle
= First();
521 fprintf( fOutput
, "#define %s %s\n",
522 pDefEle
->GetName().GetBuffer(),
523 pDefEle
->GetMacro().GetBuffer() );
528 /****************** R s c E x p T y p e **********************************/
529 /*************************************************************************
531 |* RscExpType::Evaluate()
534 |* Ersterstellung MM 01.11.91
535 |* Letzte Aenderung MM 01.11.91
537 *************************************************************************/
538 sal_Bool
RscExpType::Evaluate( sal_Int32
* plValue
) const{
539 if( IsDefinition() ){
540 aExp
.pDef
->Evaluate();
541 // Eventuellen Fehler ignorieren
542 *plValue
= aExp
.pDef
->GetNumber();
544 else if( IsExpression() )
545 return( aExp
.pExp
->Evaluate( plValue
) );
546 else if( IsNothing() )
549 *plValue
= GetLong();
554 /*************************************************************************
556 |* RscExpType::GetMacro()
559 |* Ersterstellung MM 01.11.91
560 |* Letzte Aenderung MM 01.11.91
562 *************************************************************************/
563 void RscExpType::GetMacro( ByteString
& rStr
) const
569 rStr
+= aExp
.pDef
->GetName();
571 else if( IsExpression() )
572 rStr
+= aExp
.pExp
->GetMacro();
573 else if( IsNumber() )
574 rStr
+= ByteString::CreateFromInt32( GetLong() );
578 /****************** R s c E x p r e s s i o n ****************************/
579 /*************************************************************************
581 |* RscExpression::RscExpression()
584 |* Ersterstellung MM 01.11.91
585 |* Letzte Aenderung MM 01.11.91
587 *************************************************************************/
588 RscExpression::RscExpression( RscExpType aLE
, char cOp
, RscExpType aRE
)
593 if( aLeftExp
.IsDefinition() )
594 aLeftExp
.aExp
.pDef
->IncRef();
595 if( aRightExp
.IsDefinition() )
596 aRightExp
.aExp
.pDef
->IncRef();
599 /*************************************************************************
601 |* RscExpression::~RscExpression()
604 |* Ersterstellung MM 01.11.91
605 |* Letzte Aenderung MM 01.11.91
607 *************************************************************************/
608 RscExpression::~RscExpression(){
609 if( aLeftExp
.IsDefinition() )
610 aLeftExp
.aExp
.pDef
->DecRef();
611 else if( aLeftExp
.IsExpression() )
612 delete aLeftExp
.aExp
.pExp
;
614 if( aRightExp
.IsDefinition() )
615 aRightExp
.aExp
.pDef
->DecRef();
616 else if( aRightExp
.IsExpression() )
617 delete aRightExp
.aExp
.pExp
;
620 /*************************************************************************
622 |* RscExpression::Evaluate()
625 |* Ersterstellung MM 01.11.91
626 |* Letzte Aenderung MM 01.11.91
628 *************************************************************************/
629 sal_Bool
RscExpression::Evaluate( sal_Int32
* plValue
){
633 // linken und rechten Zweig auswerten
634 if( aLeftExp
.Evaluate( &lLeft
) && aRightExp
.Evaluate( &lRight
) ){
635 if( cOperation
== '&' )
636 *plValue
= lLeft
& lRight
;
637 else if( cOperation
== '|' )
638 *plValue
= lLeft
| lRight
;
639 else if( cOperation
== '+' )
640 *plValue
= lLeft
+ lRight
;
641 else if( cOperation
== '-' )
642 *plValue
= lLeft
- lRight
;
643 else if( cOperation
== '*' )
644 *plValue
= lLeft
* lRight
;
645 else if( cOperation
== 'r' )
646 *plValue
= lLeft
>> lRight
;
647 else if( cOperation
== 'l' )
648 *plValue
= lLeft
<< lRight
;
652 *plValue
= lLeft
/ lRight
;
659 /*************************************************************************
661 |* RscExpression::GetMacro()
664 |* Ersterstellung MM 01.11.91
665 |* Letzte Aenderung MM 01.11.91
667 *************************************************************************/
668 ByteString
RscExpression::GetMacro()
672 // Ausgabeoptimierung
673 if( aLeftExp
.IsNothing() )
675 if ( '-' == cOperation
)
680 aRightExp
.GetMacro( aLeft
);
681 if( '-' == cOperation
)
684 else if( aRightExp
.IsNothing() )
685 aLeftExp
.GetMacro( aLeft
);
688 // linken Zweig auswerten
689 aLeftExp
.GetMacro( aLeft
);
694 // rechten Zweig auswerten
695 aRightExp
.GetMacro( aLeft
);
704 /****************** R s c F i l e ****************************************/
705 /*************************************************************************
707 |* RscFile::RscFile()
710 |* Ersterstellung MM 04.11.91
711 |* Letzte Aenderung MM 04.11.91
713 *************************************************************************/
714 RscFile :: RscFile(){
716 bIncFile
= sal_False
;
718 bScanned
= sal_False
;
721 /*************************************************************************
723 |* RscFile::~RscFile()
726 |* Ersterstellung MM 04.11.91
727 |* Letzte Aenderung MM 04.11.91
729 *************************************************************************/
730 RscFile :: ~RscFile(){
731 RscDepend
* pDep
= Remove( (sal_uLong
)0 );
735 pDep
= Remove( (sal_uLong
)0 );
738 //von hinten nach vorne ist besser wegen der Abhaengigkeiten
739 //Objekte zerstoeren sich, wenn Referenzzaehler NULL
741 while( aDefLst
.Remove() ) ;
744 /*************************************************************************
748 |* Beschreibung Diese Methode gibt sal_True zurueck, wenn lDepend
749 |* existiert und hinter lFree steht, oder wenn
750 |* lDepend nicht existiert.
751 |* Ersterstellung MM 12.11.91
752 |* Letzte Aenderung MM 12.11.91
754 *************************************************************************/
755 sal_Bool
RscFile::Depend( sal_uLong lDepend
, sal_uLong lFree
){
760 if( pDep
->GetFileKey() == lDepend
){
762 if( pDep
->GetFileKey() == lFree
)
774 /*************************************************************************
776 |* RscFile::InsertDependFile()
779 |* Ersterstellung MM 06.01.92
780 |* Letzte Aenderung MM 06.01.92
782 *************************************************************************/
783 sal_Bool
RscFile :: InsertDependFile( sal_uLong lIncFile
, sal_uLong lPos
)
789 if( pDep
->GetFileKey() == lIncFile
)
794 // Current-Zeiger steht auf letztem Element
795 if( lPos
>= Count() ){ //letztes Element muss immer letztes bleiben
796 // Abhaengigkeit vor der letzten Position eintragen
797 Insert( new RscDepend( lIncFile
) );
800 Insert( new RscDepend( lIncFile
), lPos
);
805 /*************************************************************************
807 |* RscFile::RemoveDependFile()
810 |* Ersterstellung MM 18.11.91
811 |* Letzte Aenderung MM 18.11.91
813 *************************************************************************/
814 void RscFile :: RemoveDependFile( sal_uLong lDepFile
)
817 RscDepend
* pDep
= Last();
820 if( pDep
->GetFileKey() == lDepFile
){
828 /****************** R s c D e f T r e e **********************************/
829 /*************************************************************************
831 |* RscDefTree::~RscDefTree()
834 |* Ersterstellung MM 12.11.91
835 |* Letzte Aenderung MM 12.11.91
837 *************************************************************************/
838 RscDefTree::~RscDefTree(){
842 /*************************************************************************
844 |* RscDefTree::Remove()
847 |* Ersterstellung MM 12.11.91
848 |* Letzte Aenderung MM 12.11.91
850 *************************************************************************/
851 void RscDefTree::Remove(){
855 pDefRoot
= (RscDefine
*)pDefRoot
->Remove( pDefRoot
);
860 /*************************************************************************
862 |* RscDefTree::~Search()
865 |* Ersterstellung MM 12.11.91
866 |* Letzte Aenderung MM 12.11.91
868 *************************************************************************/
869 RscDefine
* RscDefTree::Search( const char * pName
){
871 return pDefRoot
->Search( pName
);
875 /*************************************************************************
877 |* RscDefTree::Insert()
880 |* Ersterstellung MM 12.11.91
881 |* Letzte Aenderung MM 12.11.91
883 *************************************************************************/
884 void RscDefTree::Insert( RscDefine
* pDef
){
886 pDefRoot
->Insert( pDef
);
892 /*************************************************************************
894 |* RscDefTree::Remove()
897 |* Ersterstellung MM 12.11.91
898 |* Letzte Aenderung MM 12.11.91
900 *************************************************************************/
901 void RscDefTree::Remove( RscDefine
* pDef
){
903 //falls pDef == pDefRoot
904 pDefRoot
= (RscDefine
*)pDefRoot
->Remove( pDef
);
909 /*************************************************************************
911 |* RscDefTree::Evaluate()
914 |* Ersterstellung MM 12.11.91
915 |* Letzte Aenderung MM 12.11.91
917 *************************************************************************/
918 sal_Bool
RscDefTree::Evaluate( RscDefine
* pDef
){
920 if( !Evaluate( (RscDefine
*)pDef
->Left() ) )
922 if( !Evaluate( (RscDefine
*)pDef
->Right() ) )
928 sal_Bool
RscDefTree::Evaluate(){
929 return Evaluate( pDefRoot
);
932 /****************** R s c F i l e T a b **********************************/
933 /*************************************************************************
935 |* RscFileTab::RscFileTab()
938 |* Ersterstellung MM 07.11.91
939 |* Letzte Aenderung MM 07.11.91
941 *************************************************************************/
942 RscFileTab::RscFileTab(){
945 /*************************************************************************
947 |* RscFileTab::~RscFileTab()
950 |* Ersterstellung MM 04.11.91
951 |* Letzte Aenderung MM 04.11.91
953 *************************************************************************/
954 RscFileTab :: ~RscFileTab(){
961 Remove( GetIndex( pFile
) );
967 /*************************************************************************
969 |* RscFileTab::Find()
972 |* Ersterstellung MM 16.05.91
973 |* Letzte Aenderung MM 16.05.91
975 *************************************************************************/
976 sal_uLong
RscFileTab :: Find( const ByteString
& rName
)
981 while( pFName
&& (pFName
->aFileName
!= rName
) )
985 return( GetIndex( pFName
) );
987 return( NOFILE_INDEX
);
990 /*************************************************************************
992 |* RscFileTab::FindDef()
995 |* Ersterstellung MM 30.10.91
996 |* Letzte Aenderung MM 01.11.91
998 *************************************************************************/
999 RscDefine
* RscFileTab::FindDef( const char * pName
){
1000 return aDefTree
.Search( pName
);
1003 /*************************************************************************
1005 |* RscFileTab::FindDef()
1008 |* Ersterstellung MM 30.10.91
1009 |* Letzte Aenderung MM 01.11.91
1011 *************************************************************************/
1012 RscDefine
* RscFileTab::FindDef( sal_uLong lFileKey
, const ByteString
& rName
)
1014 RscDefine
* pDef
= FindDef( rName
);
1017 //befindet sich das DEFINE in einer Include-Datei in der
1019 if( Depend( lFileKey
, pDef
->GetFileKey() ) )
1024 /*************************************************************************
1026 |* RscFileTab::Depend()
1029 |* Ersterstellung MM 08.11.91
1030 |* Letzte Aenderung MM 08.11.91
1032 *************************************************************************/
1033 sal_Bool
RscFileTab::Depend( sal_uLong lDepend
, sal_uLong lFree
){
1034 if( lDepend
== lFree
)
1037 RscFile
* pFile
= First();
1039 if( !pFile
->IsIncFile() ){
1040 if( !pFile
->Depend( lDepend
, lFree
) )
1049 /*************************************************************************
1051 |* RscFileTab::TestDef()
1054 |* Ersterstellung MM 14.01.92
1055 |* Letzte Aenderung MM 14.01.92
1057 *************************************************************************/
1058 sal_Bool
RscFileTab::TestDef( sal_uLong lFileKey
, sal_uLong lPos
,
1059 const RscDefine
* pDefDec
)
1061 if( lFileKey
== pDefDec
->GetFileKey() ){
1062 RscFile
* pFile
= GetFile( pDefDec
->GetFileKey() );
1063 if( pFile
&& (lPos
<= pFile
->aDefLst
.GetPos( (RscDefine
*)pDefDec
))
1064 && (lPos
!= LIST_APPEND
) )
1067 else if( !Depend( lFileKey
, pDefDec
->GetFileKey() ) )
1070 return TestDef( lFileKey
, lPos
, pDefDec
->pExp
);
1073 /*************************************************************************
1075 |* RscFileTab::TestDef()
1078 |* Ersterstellung MM 14.01.92
1079 |* Letzte Aenderung MM 14.01.92
1081 *************************************************************************/
1082 sal_Bool
RscFileTab::TestDef( sal_uLong lFileKey
, sal_uLong lPos
,
1083 const RscExpression
* pExpDec
)
1088 if( pExpDec
->aLeftExp
.IsExpression() )
1089 if( !TestDef( lFileKey
, lPos
, pExpDec
->aLeftExp
.aExp
.pExp
) )
1092 if( pExpDec
->aLeftExp
.IsDefinition() )
1093 if( !TestDef( lFileKey
, lPos
, pExpDec
->aLeftExp
.aExp
.pDef
) )
1096 if( pExpDec
->aRightExp
.IsExpression() )
1097 if( !TestDef( lFileKey
, lPos
, pExpDec
->aRightExp
.aExp
.pExp
) )
1100 if( pExpDec
->aRightExp
.IsDefinition() )
1101 if( !TestDef( lFileKey
, lPos
, pExpDec
->aRightExp
.aExp
.pDef
) )
1107 /*************************************************************************
1109 |* RscFileTab::NewDef()
1112 |* Ersterstellung MM 04.11.91
1113 |* Letzte Aenderung MM 04.11.91
1115 *************************************************************************/
1116 RscDefine
* RscFileTab::NewDef( sal_uLong lFileKey
, const ByteString
& rDefName
,
1117 sal_Int32 lId
, sal_uLong lPos
)
1119 RscDefine
* pDef
= FindDef( rDefName
);
1122 RscFile
* pFile
= GetFile( lFileKey
);
1125 pDef
= pFile
->aDefLst
.New( lFileKey
, rDefName
, lId
, lPos
);
1126 aDefTree
.Insert( pDef
);
1135 /*************************************************************************
1137 |* RscFileTab::NewDef()
1140 |* Ersterstellung MM 04.11.91
1141 |* Letzte Aenderung MM 04.11.91
1143 *************************************************************************/
1144 RscDefine
* RscFileTab::NewDef( sal_uLong lFileKey
, const ByteString
& rDefName
,
1145 RscExpression
* pExp
, sal_uLong lPos
)
1147 RscDefine
* pDef
= FindDef( rDefName
);
1150 //Macros in den Expressions sind definiert ?
1151 if( TestDef( lFileKey
, lPos
, pExp
) ){
1152 RscFile
* pFile
= GetFile( lFileKey
);
1155 pDef
= pFile
->aDefLst
.New( lFileKey
, rDefName
, pExp
, lPos
);
1156 aDefTree
.Insert( pDef
);
1164 // pExp wird immer Eigentum und muss, wenn es nicht benoetigt wird
1171 /*************************************************************************
1173 |* RscFileTab::IsDefUsed()
1176 |* Ersterstellung MM 22.11.91
1177 |* Letzte Aenderung MM 22.11.91
1179 *************************************************************************/
1180 sal_Bool
RscFileTab::IsDefUsed( const ByteString
& rDefName
)
1182 RscDefine
* pDef
= FindDef( rDefName
);
1185 return( pDef
->GetRefCount() != 2 );
1190 /*************************************************************************
1192 |* RscFileTab::DeleteDef()
1195 |* Ersterstellung MM 11.11.91
1196 |* Letzte Aenderung MM 11.11.91
1198 *************************************************************************/
1199 void RscFileTab::DeleteDef( const ByteString
& rDefName
)
1201 RscDefine
* pDef
= FindDef( rDefName
);
1205 pFile
= GetFile( pDef
->GetFileKey() );
1207 aDefTree
.Remove( pDef
);
1208 pFile
->aDefLst
.Remove( pDef
);
1213 /*************************************************************************
1215 |* RscFileTab::ChangeDef()
1218 |* Ersterstellung MM 04.11.91
1219 |* Letzte Aenderung MM 11.11.91
1221 *************************************************************************/
1222 sal_Bool
RscFileTab::ChangeDef( const ByteString
& rDefName
, sal_Int32 lId
)
1224 RscDefine
* pDef
= FindDef( rDefName
);
1227 pDef
->ChangeMacro( lId
);
1228 //alle Macros neu bewerten
1229 return aDefTree
.Evaluate();
1231 return( sal_False
);
1234 /*************************************************************************
1236 |* RscFileTab::ChangeDef()
1239 |* Ersterstellung MM 04.11.91
1240 |* Letzte Aenderung MM 11.11.91
1242 *************************************************************************/
1243 sal_Bool
RscFileTab::ChangeDef( const ByteString
& rDefName
,
1244 RscExpression
* pExp
)
1246 RscDefine
* pDef
= FindDef( rDefName
);
1251 pFile
= GetFile( pDef
->GetFileKey() );
1253 lPos
= pFile
->aDefLst
.GetPos( pDef
);
1254 //Macros in den Expressions sind definiert ?
1255 if( TestDef( pDef
->GetFileKey(), lPos
, pExp
) ){
1256 pDef
->ChangeMacro( pExp
);
1257 //alle Macros neu bewerten
1258 return aDefTree
.Evaluate();
1262 // pExp wird immer Eigentum und muss, wenn es nicht benoetigt wird
1266 return( sal_False
);
1269 /*************************************************************************
1271 |* RscFileTab::ChangeDefName()
1274 |* Ersterstellung MM 04.11.91
1275 |* Letzte Aenderung MM 04.11.91
1277 *************************************************************************/
1278 sal_Bool
RscFileTab::ChangeDefName( const ByteString
& rDefName
,
1279 const ByteString
& rNewName
)
1281 RscDefine
* pDef
= FindDef( rDefName
);
1285 // und neuer Name noch nicht bekannt ?
1286 if( !FindDef( pDef
->GetFileKey(), rNewName
) ){
1287 aDefTree
.Remove( pDef
);
1288 pDef
->SetName( rNewName
);
1289 aDefTree
.Insert( pDef
);
1294 return( sal_False
);
1297 /*************************************************************************
1299 |* RscFileTab::DeleteFileContext()
1302 |* Ersterstellung MM 09.12.91
1303 |* Letzte Aenderung MM 09.12.91
1305 *************************************************************************/
1306 void RscFileTab :: DeleteFileContext( sal_uLong lFileKey
){
1309 pFName
= GetFile( lFileKey
);
1313 pDef
= pFName
->aDefLst
.First();
1315 aDefTree
.Remove( pDef
);
1316 pDef
= pFName
->aDefLst
.Next();
1318 while( pFName
->aDefLst
.Remove( (sal_uLong
)0 ) ) ;
1322 /*************************************************************************
1324 |* RscFileTab::DeleteFile()
1327 |* Ersterstellung MM 16.05.91
1328 |* Letzte Aenderung MM 16.05.91
1330 *************************************************************************/
1331 void RscFileTab :: DeleteFile( sal_uLong lFileKey
){
1335 DeleteFileContext( lFileKey
);
1337 //Schleife ueber alle Abhaengigkeiten
1340 pFName
->RemoveDependFile( lFileKey
);
1344 pFName
= Remove( lFileKey
);
1349 /*************************************************************************
1351 |* RscFileTab::NewCodeFile()
1354 |* Ersterstellung MM 16.05.91
1355 |* Letzte Aenderung MM 16.05.91
1357 *************************************************************************/
1358 sal_uLong
RscFileTab :: NewCodeFile( const ByteString
& rName
)
1363 lKey
= Find( rName
);
1364 if( UNIQUEINDEX_ENTRY_NOTFOUND
== lKey
)
1366 pFName
= new RscFile();
1367 pFName
->aFileName
= rName
;
1368 pFName
->aPathName
= rName
;
1369 lKey
= Insert( pFName
);
1370 pFName
->InsertDependFile( lKey
, LIST_APPEND
);
1375 /*************************************************************************
1377 |* RscFileTab::NewIncFile()
1380 |* Ersterstellung MM 16.05.91
1381 |* Letzte Aenderung MM 16.05.91
1383 *************************************************************************/
1384 sal_uLong
RscFileTab :: NewIncFile( const ByteString
& rName
,
1385 const ByteString
& rPath
)
1390 lKey
= Find( rName
);
1391 if( UNIQUEINDEX_ENTRY_NOTFOUND
== lKey
)
1393 pFName
= new RscFile();
1394 pFName
->aFileName
= rName
;
1395 pFName
->aPathName
= rPath
;
1396 pFName
->SetIncFlag();
1397 lKey
= Insert( pFName
);
1398 pFName
->InsertDependFile( lKey
, LIST_APPEND
);