xref: /AOO41X/main/idl/inc/database.hxx (revision 67e470dafe1997e73f56ff7ff4878983707e3e07)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _DATABASE_HXX
25 #define _DATABASE_HXX
26 
27 #include <module.hxx>
28 #include <hash.hxx>
29 #include <lex.hxx>
30 #include <tools/pstm.hxx>
31 
32 /*************************************************************************
33 *************************************************************************/
34 
35 class SvCommand;
36 
37 #ifdef IDL_COMPILER
38 /******************** class SvIdlError ***********************************/
39 class SvIdlError
40 {
41     ByteString  aText;
42 public:
43     sal_uInt32  nLine, nColumn;
44 
SvIdlError()45             SvIdlError() : nLine(0), nColumn(0) {}
SvIdlError(sal_uInt32 nL,sal_uInt32 nC)46             SvIdlError( sal_uInt32 nL, sal_uInt32 nC )
47                 : nLine(nL), nColumn(nC) {}
48 
GetText() const49     const ByteString &  GetText() const { return aText; }
SetText(const ByteString & rT)50     void            SetText( const ByteString & rT ) { aText = rT; }
IsError() const51     sal_Bool            IsError() const { return nLine != 0; }
Clear()52     void            Clear() { nLine = nColumn = 0; }
operator =(const SvIdlError & rRef)53     SvIdlError &    operator = ( const SvIdlError & rRef )
54     { aText   = rRef.aText;
55       nLine   = rRef.nLine;
56       nColumn = rRef.nColumn;
57       return *this;
58     }
59 };
60 #endif
61 
62 /******************** class SvIdlDataBase ********************************/
63 class SvIdlDataBase
64 {
65     sal_Bool                        bExport;
66     String                      aExportFile;
67     sal_uInt32                  nUniqueId;
68     sal_uInt32                  nVerbosity;
69     String                      aDataBaseFile;
70     SvFileStream *              pStm;
71     sal_Bool                        bIsModified;
72     SvPersistStream             aPersStream;
73     StringList                  aIdFileList;
74     SvStringHashTable *         pIdTable;
75 
76     SvMetaTypeMemberList        aTypeList;
77     SvMetaClassMemberList       aClassList;
78     SvMetaModuleMemberList      aModuleList;
79     SvMetaAttributeMemberList   aAttrList;
80     SvMetaTypeMemberList        aTmpTypeList; // nicht Persistent
81 
82 protected:
83 #ifdef IDL_COMPILER
84     ByteString                      aModulePrefix;
85     SvMetaObjectMemberStack     aContextStack;
86     String                      aPath;
87     SvIdlError                  aError;
WriteReset()88     void                        WriteReset()
89                                 {
90                                     aUsedTypes.Clear();
91                                     aIFaceName.Erase();
92                                 }
93 #endif
94 public:
95                 explicit SvIdlDataBase( const SvCommand& rCmd );
96                 ~SvIdlDataBase();
97     static sal_Bool IsBinaryFormat( SvStream & rInStm );
98 
99     void        Load( SvStream & rInStm );
100     void        Save( SvStream & rInStm, sal_uInt32 nContextFlags );
101 
GetAttrList()102     SvMetaAttributeMemberList&  GetAttrList() { return aAttrList; }
GetIdTable()103     SvStringHashTable *       GetIdTable() { return pIdTable; }
104     SvMetaTypeMemberList &    GetTypeList();
GetClassList()105     SvMetaClassMemberList &   GetClassList()  { return aClassList; }
GetModuleList()106     SvMetaModuleMemberList &  GetModuleList() { return aModuleList; }
107     SvMetaModule *            GetModule( const ByteString & rName );
108 
109     // Liste der benutzten Typen beim Schreiben
110     SvMetaTypeMemberList    aUsedTypes;
111     ByteString                  aIFaceName;
112     SvNumberIdentifier      aStructSlotId;
113 
114 #ifdef IDL_COMPILER
115     void                    StartNewFile( const String& rName );
SetExportFile(const String & rName)116     void                    SetExportFile( const String& rName )
117                             { aExportFile = rName; }
118     void                    AppendAttr( SvMetaAttribute *pSlot );
GetActModulePrefix() const119     const ByteString&           GetActModulePrefix() const { return aModulePrefix; }
GetError() const120     const SvIdlError &      GetError() const { return aError; }
SetError(const SvIdlError & r)121     void                    SetError( const SvIdlError & r )
122                             { aError = r; }
123 
GetPath() const124     const String &            GetPath() const { return aPath; }
GetStack()125     SvMetaObjectMemberStack & GetStack()      { return aContextStack; }
126 
127     void                    Write( const ByteString & rText );
128     void                    WriteError( const ByteString & rErrWrn,
129                                     const ByteString & rFileName,
130                                     const ByteString & rErrorText,
131                                     sal_uLong nRow = 0, sal_uLong nColumn = 0 ) const;
132     void                    WriteError( SvTokenStream & rInStm );
133     void                    SetError( const ByteString & rError, SvToken * pTok );
134     void                    Push( SvMetaObject * pObj );
Pop(sal_Bool bOk,SvTokenStream & rInStm,sal_uInt32 nTokPos)135     sal_Bool                    Pop( sal_Bool bOk, SvTokenStream & rInStm, sal_uInt32 nTokPos )
136                             {
137                                 GetStack().Pop();
138                                 if( bOk )
139                                     aError.Clear();
140                                 else
141                                     rInStm.Seek( nTokPos );
142                                 return bOk;
143                             }
GetUniqueId()144     sal_uInt32              GetUniqueId() { return ++nUniqueId; }
145     sal_Bool                    FindId( const ByteString & rIdName, sal_uLong * pVal );
146     sal_Bool                    InsertId( const ByteString & rIdName, sal_uLong nVal );
147     sal_Bool                    ReadIdFile( const String & rFileName );
148 
149     SvMetaType *            FindType( const ByteString & rName );
150     static SvMetaType *     FindType( const SvMetaType *, SvMetaTypeMemberList & );
151 
152     SvMetaType *            ReadKnownType( SvTokenStream & rInStm );
153     SvMetaAttribute *       ReadKnownAttr( SvTokenStream & rInStm,
154                                             SvMetaType * pType = NULL );
155     SvMetaAttribute *       SearchKnownAttr( const SvNumberIdentifier& );
156     SvMetaClass *           ReadKnownClass( SvTokenStream & rInStm );
157 #endif
158 };
159 
160 #ifdef IDL_COMPILER
161 class SvIdlWorkingBase : public SvIdlDataBase
162 {
163 public:
164                 explicit SvIdlWorkingBase( const SvCommand& rCmd );
165 
166     sal_Bool        ReadSvIdl( SvTokenStream &, sal_Bool bImported, const String & rPath );
167     sal_Bool        WriteSvIdl( SvStream & );
168 
169     sal_Bool        WriteSfx( SvStream & );
170     sal_Bool        WriteHelpIds( SvStream & );
171     sal_Bool        WriteSfxItem( SvStream & );
172     sal_Bool        WriteCSV( SvStream& );
173     sal_Bool        WriteDocumentation( SvStream& );
174 };
175 #endif
176 
177 #endif // _DATABASE_HXX
178 
179