xref: /aoo4110/main/rsc/inc/rscrsc.hxx (revision b1cdbd2c)
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 #ifndef _RSCRSC_HXX
24 #define _RSCRSC_HXX
25 
26 #ifndef RSCALL_H
27 #include <rscall.h>
28 #endif
29 #ifndef RSCERROR_H
30 #include <rscerror.h>
31 #endif
32 #ifndef RSCTOOLS_HXX
33 #include <rsctools.hxx>
34 #endif
35 
36 #include <list>
37 
38 class RscTypCont;
39 class DirEntry;
40 
41 /****************** T Y P E S ********************************************/
42 
43 #define MAX_INPUTFILES	100
44 #define MAX_SYMBOLS 	10
45 #define MAX_INCLUDES	10
46 
47 /****************** R s c C m d L i n e **********************************/
48 class RscCmdLine
49 {
50 	void		Init();
51 
52 public:
53 
54     RscStrList			aInputList; 	// Liste der Quelldateien
55 	RscStrList			aSymbolList;	// Liste der Symbole
56 	ByteString			aPath;		    // Liste der Pfade
57 	RSCBYTEORDER_TYPE	nByteOrder;
58 	unsigned short		nCommands;		// Steuerbits
59     ByteString			aOutputLst; 	// Name der List-Ausgabedatei
60     ByteString			aOutputSrs; 	// Name der Srs-Ausgabedatei
61     ByteString			aOutputSrc; 	// Name der Src-Ausgabedatei
62     ByteString			aOutputRcCtor;	// Name der Ctor-Ausgabedatei
63     ByteString			aOutputCxx; 	// Name der Cxx-Ausgabedatei
64     ByteString			aOutputHxx; 	// Name der Hxx-Ausgabedatei
65     ByteString			aTouchFile;		// create this file when done in rsc2
66     ByteString			aILDir;
67 
68     struct OutputFile
69     {
70         ByteString			         aLangName;			// language name
71         ByteString			         aOutputRc;			// target file
72         ByteString			         aLangSearchPath;	// language specific search path
73         ::std::list< ByteString >    aSysSearchDirs;    // pathes to search for images
74 
OutputFileRscCmdLine::OutputFile75         OutputFile() {}
76     };
77 
78     std::list<OutputFile>						            m_aOutputFiles;
79     std::list< std::pair< rtl::OString, rtl::OString > >    m_aReplacements;
80 
81                     RscCmdLine( int argc, char ** argv, RscError * pEH );
82 			        RscCmdLine();
83 
84 			        ~RscCmdLine();
85 
86   ::rtl::OString     substitutePaths( const ::rtl::OString& rIn );
87 };
88 /****************** R s c ************************************************/
89 
90 struct WriteRcContext;
91 
92 class RscCompiler
93 {
94 private:
95 	RscStrList		aTmpFileList;	// Liste der Tmp-Dateien
96 	ByteString		aTmpOutputHxx;	// Name der TempHxx-Ausgabedatei
97 	ByteString		aTmpOutputCxx;	// Name der TempCxx-Ausgabedatei
98 	ByteString		aTmpOutputRcCtor; // Name der Temp Ctor-Ausgabedatei
99 	ByteString		aTmpOutputSrc;	// Name der TempSrc-Ausgabedatei
100 
101 	void			CreateResFile( const char * pRc );
102 	void			Append( const ByteString& rOutputSrs, const ByteString& rTmpFile );
103 	void			OpenInput( const ByteString& rInput );
104 
105 	bool 			GetImageFilePath( const RscCmdLine::OutputFile& rOutputFile,
106  							      	const WriteRcContext& rContext,
107 									const ByteString& rBaseFileName,
108 									ByteString& rImagePath,
109 									FILE* pSysListFile );
110 	void			PreprocessSrsFile( const RscCmdLine::OutputFile& rOutputFile,
111  							      	   const WriteRcContext& rContext,
112 								  	   const DirEntry& rSrsInPath,
113 								  	   const DirEntry& rSrsOutPath );
114 
115 public:
116 	RscTypCont* 	pTC;		// String und Id-Verwalter
117 	RscCmdLine* 	pCL;		// Kommandozeile
118 	FILE *			fListing;	// Ausgabedatei fuer Listings
119 	FILE *			fExitFile;	// bei Abbruch muss diese Datei geschlossen werden
120 
121 					RscCompiler( RscCmdLine *, RscTypCont * );
122 					~RscCompiler();
123 
124 	ERRTYPE 		Start();
125 	ByteString		GetTmpFileName();	// Die Dateien werden geloescht
126 
127 					// Include Statements lesen
128 	ERRTYPE 		IncludeParser( sal_uLong lFileKey );
129 	ERRTYPE 		ParseOneFile( sal_uLong lFileKey, const RscCmdLine::OutputFile* pOutputFile, const WriteRcContext* pContext );
130 	ERRTYPE 		Link();
131 	void			EndCompile();
132 };
133 
134 #endif //_RSCRSC_HXX
135