1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski #include <precomp.h>
23*b1cdbd2cSJim Jagielski #include "cmd_run.hxx"
24*b1cdbd2cSJim Jagielski
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski // NOT FULLY DEFINED SERVICES
27*b1cdbd2cSJim Jagielski #include <cosv/file.hxx>
28*b1cdbd2cSJim Jagielski #include <cosv/x.hxx>
29*b1cdbd2cSJim Jagielski #include <ary/ary.hxx>
30*b1cdbd2cSJim Jagielski #include <ary/cpp/c_gate.hxx>
31*b1cdbd2cSJim Jagielski #include <ary/idl/i_ce.hxx>
32*b1cdbd2cSJim Jagielski #include <ary/idl/i_gate.hxx>
33*b1cdbd2cSJim Jagielski #include <ary/idl/i_module.hxx>
34*b1cdbd2cSJim Jagielski #include <ary/idl/ip_ce.hxx>
35*b1cdbd2cSJim Jagielski #include <autodoc/filecoli.hxx>
36*b1cdbd2cSJim Jagielski #include <autodoc/parsing.hxx>
37*b1cdbd2cSJim Jagielski #include <autodoc/prs_code.hxx>
38*b1cdbd2cSJim Jagielski #include <autodoc/prs_docu.hxx>
39*b1cdbd2cSJim Jagielski #include <parser/unoidl.hxx>
40*b1cdbd2cSJim Jagielski #include <adc_cl.hxx>
41*b1cdbd2cSJim Jagielski #include "adc_cmd_parse.hxx"
42*b1cdbd2cSJim Jagielski #include "adc_cmds.hxx"
43*b1cdbd2cSJim Jagielski
44*b1cdbd2cSJim Jagielski namespace autodoc
45*b1cdbd2cSJim Jagielski {
46*b1cdbd2cSJim Jagielski namespace command
47*b1cdbd2cSJim Jagielski {
48*b1cdbd2cSJim Jagielski namespace run
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski
Parser(const Parse & i_command)51*b1cdbd2cSJim Jagielski Parser::Parser( const Parse & i_command )
52*b1cdbd2cSJim Jagielski : rCommand(i_command),
53*b1cdbd2cSJim Jagielski pCppParser(),
54*b1cdbd2cSJim Jagielski pCppDocuInterpreter(),
55*b1cdbd2cSJim Jagielski pIdlParser()
56*b1cdbd2cSJim Jagielski {
57*b1cdbd2cSJim Jagielski }
58*b1cdbd2cSJim Jagielski
~Parser()59*b1cdbd2cSJim Jagielski Parser::~Parser()
60*b1cdbd2cSJim Jagielski {
61*b1cdbd2cSJim Jagielski }
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski bool
Perform()64*b1cdbd2cSJim Jagielski Parser::Perform()
65*b1cdbd2cSJim Jagielski {
66*b1cdbd2cSJim Jagielski Cout() << "Parsing the repository "
67*b1cdbd2cSJim Jagielski << rCommand.ReposyName()
68*b1cdbd2cSJim Jagielski << " ..."
69*b1cdbd2cSJim Jagielski << Endl();
70*b1cdbd2cSJim Jagielski try
71*b1cdbd2cSJim Jagielski {
72*b1cdbd2cSJim Jagielski ::ary::Repository &
73*b1cdbd2cSJim Jagielski rAry = CommandLine::Get_().TheRepository();
74*b1cdbd2cSJim Jagielski rAry.Set_Title(rCommand.ReposyName());
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski Dyn< FileCollector_Ifc >
77*b1cdbd2cSJim Jagielski pFiles( ParseToolsFactory().Create_FileCollector(6000) );
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski bool bIDL = false;
80*b1cdbd2cSJim Jagielski bool bCpp = false;
81*b1cdbd2cSJim Jagielski
82*b1cdbd2cSJim Jagielski command::Parse::ProjectIterator
83*b1cdbd2cSJim Jagielski itEnd = rCommand.ProjectsEnd();
84*b1cdbd2cSJim Jagielski for ( command::Parse::ProjectIterator it = rCommand.ProjectsBegin();
85*b1cdbd2cSJim Jagielski it != itEnd;
86*b1cdbd2cSJim Jagielski ++it )
87*b1cdbd2cSJim Jagielski {
88*b1cdbd2cSJim Jagielski uintt nCount = GatherFiles( *pFiles, *(*it) );
89*b1cdbd2cSJim Jagielski Cout() << nCount
90*b1cdbd2cSJim Jagielski << " files found to parse in project "
91*b1cdbd2cSJim Jagielski << (*it)->Name()
92*b1cdbd2cSJim Jagielski << "."
93*b1cdbd2cSJim Jagielski << Endl();
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski switch ( (*it)->Language().eLanguage )
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski case command::S_LanguageInfo::idl:
98*b1cdbd2cSJim Jagielski {
99*b1cdbd2cSJim Jagielski Get_IdlParser().Run(*pFiles);
100*b1cdbd2cSJim Jagielski bIDL = true;
101*b1cdbd2cSJim Jagielski } break;
102*b1cdbd2cSJim Jagielski case command::S_LanguageInfo::cpp:
103*b1cdbd2cSJim Jagielski {
104*b1cdbd2cSJim Jagielski Get_CppParser().Run( *pFiles );
105*b1cdbd2cSJim Jagielski bCpp = true;
106*b1cdbd2cSJim Jagielski } break;
107*b1cdbd2cSJim Jagielski default:
108*b1cdbd2cSJim Jagielski Cerr() << "Project in yet unimplemented language skipped."
109*b1cdbd2cSJim Jagielski << Endl();
110*b1cdbd2cSJim Jagielski }
111*b1cdbd2cSJim Jagielski } // end for
112*b1cdbd2cSJim Jagielski
113*b1cdbd2cSJim Jagielski if (bCpp)
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski rAry.Gate_Cpp().Calculate_AllSecondaryInformation();
116*b1cdbd2cSJim Jagielski }
117*b1cdbd2cSJim Jagielski if (bIDL)
118*b1cdbd2cSJim Jagielski {
119*b1cdbd2cSJim Jagielski rAry.Gate_Idl().Calculate_AllSecondaryInformation(
120*b1cdbd2cSJim Jagielski rCommand.DevelopersManual_RefFilePath() );
121*b1cdbd2cSJim Jagielski
122*b1cdbd2cSJim Jagielski // ::ary::idl::SecondariesPilot &
123*b1cdbd2cSJim Jagielski // rIdl2sPilot = rAry.Gate_Idl().Secondaries();
124*b1cdbd2cSJim Jagielski //
125*b1cdbd2cSJim Jagielski // rIdl2sPilot.CheckAllInterfaceBases( rAry.Gate_Idl() );
126*b1cdbd2cSJim Jagielski // rIdl2sPilot.Connect_Types2Ces();
127*b1cdbd2cSJim Jagielski // rIdl2sPilot.Gather_CrossReferences();
128*b1cdbd2cSJim Jagielski //
129*b1cdbd2cSJim Jagielski // if (NOT rCommand.DevelopersManual_RefFilePath().empty())
130*b1cdbd2cSJim Jagielski // {
131*b1cdbd2cSJim Jagielski // csv::File
132*b1cdbd2cSJim Jagielski // aFile(rCommand.DevelopersManual_RefFilePath(), csv::CFM_READ);
133*b1cdbd2cSJim Jagielski // if ( aFile.open() )
134*b1cdbd2cSJim Jagielski // {
135*b1cdbd2cSJim Jagielski // rIdl2sPilot.Read_Links2DevManual(aFile);
136*b1cdbd2cSJim Jagielski // aFile.close();
137*b1cdbd2cSJim Jagielski // }
138*b1cdbd2cSJim Jagielski // }
139*b1cdbd2cSJim Jagielski } // endif (bIDL)
140*b1cdbd2cSJim Jagielski
141*b1cdbd2cSJim Jagielski return true;
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski } // end try
144*b1cdbd2cSJim Jagielski catch (csv::Exception & xx)
145*b1cdbd2cSJim Jagielski {
146*b1cdbd2cSJim Jagielski xx.GetInfo(Cerr());
147*b1cdbd2cSJim Jagielski Cerr() << " program will exit." << Endl();
148*b1cdbd2cSJim Jagielski
149*b1cdbd2cSJim Jagielski return false;
150*b1cdbd2cSJim Jagielski }
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski CodeParser_Ifc &
Get_CppParser()154*b1cdbd2cSJim Jagielski Parser::Get_CppParser()
155*b1cdbd2cSJim Jagielski {
156*b1cdbd2cSJim Jagielski if ( NOT pCppParser )
157*b1cdbd2cSJim Jagielski Create_CppParser();
158*b1cdbd2cSJim Jagielski return *pCppParser;
159*b1cdbd2cSJim Jagielski }
160*b1cdbd2cSJim Jagielski
161*b1cdbd2cSJim Jagielski IdlParser &
Get_IdlParser()162*b1cdbd2cSJim Jagielski Parser::Get_IdlParser()
163*b1cdbd2cSJim Jagielski {
164*b1cdbd2cSJim Jagielski if ( NOT pIdlParser )
165*b1cdbd2cSJim Jagielski Create_IdlParser();
166*b1cdbd2cSJim Jagielski return *pIdlParser;
167*b1cdbd2cSJim Jagielski }
168*b1cdbd2cSJim Jagielski
169*b1cdbd2cSJim Jagielski void
Create_CppParser()170*b1cdbd2cSJim Jagielski Parser::Create_CppParser()
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski pCppParser = ParseToolsFactory().Create_Parser_Cplusplus();
173*b1cdbd2cSJim Jagielski pCppDocuInterpreter = ParseToolsFactory().Create_DocuParser_AutodocStyle();
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski pCppParser->Setup( CommandLine::Get_().TheRepository(),
176*b1cdbd2cSJim Jagielski *pCppDocuInterpreter );
177*b1cdbd2cSJim Jagielski }
178*b1cdbd2cSJim Jagielski
179*b1cdbd2cSJim Jagielski void
Create_IdlParser()180*b1cdbd2cSJim Jagielski Parser::Create_IdlParser()
181*b1cdbd2cSJim Jagielski {
182*b1cdbd2cSJim Jagielski pIdlParser = new IdlParser(CommandLine::Get_().TheRepository());
183*b1cdbd2cSJim Jagielski }
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski const ParseToolsFactory_Ifc &
ParseToolsFactory()186*b1cdbd2cSJim Jagielski Parser::ParseToolsFactory()
187*b1cdbd2cSJim Jagielski {
188*b1cdbd2cSJim Jagielski return ParseToolsFactory_Ifc::GetIt_();
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski
191*b1cdbd2cSJim Jagielski uintt
GatherFiles(FileCollector_Ifc & o_rFiles,const S_ProjectData & i_rProject)192*b1cdbd2cSJim Jagielski Parser::GatherFiles( FileCollector_Ifc & o_rFiles,
193*b1cdbd2cSJim Jagielski const S_ProjectData & i_rProject )
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski uintt ret = 0;
196*b1cdbd2cSJim Jagielski o_rFiles.EraseAll();
197*b1cdbd2cSJim Jagielski
198*b1cdbd2cSJim Jagielski typedef StringVector StrVector;
199*b1cdbd2cSJim Jagielski typedef StrVector::const_iterator StrIterator;
200*b1cdbd2cSJim Jagielski const S_Sources &
201*b1cdbd2cSJim Jagielski rSources = i_rProject.Sources();
202*b1cdbd2cSJim Jagielski const StrVector &
203*b1cdbd2cSJim Jagielski rExtensions = i_rProject.Language().aExtensions;
204*b1cdbd2cSJim Jagielski
205*b1cdbd2cSJim Jagielski StrIterator it;
206*b1cdbd2cSJim Jagielski StrIterator itTreesEnd = rSources.aTrees.end();
207*b1cdbd2cSJim Jagielski StrIterator itDirsEnd = rSources.aDirectories.end();
208*b1cdbd2cSJim Jagielski StrIterator itFilesEnd = rSources.aFiles.end();
209*b1cdbd2cSJim Jagielski StrIterator itExt;
210*b1cdbd2cSJim Jagielski StrIterator itExtEnd = rExtensions.end();
211*b1cdbd2cSJim Jagielski
212*b1cdbd2cSJim Jagielski csv::StreamStr aDir(500);
213*b1cdbd2cSJim Jagielski i_rProject.RootDirectory().Get( aDir );
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski uintt nProjectDir_AddPosition =
216*b1cdbd2cSJim Jagielski ( strcmp(aDir.c_str(),".\\") == 0 OR strcmp(aDir.c_str(),"./") == 0 )
217*b1cdbd2cSJim Jagielski ? 0
218*b1cdbd2cSJim Jagielski : uintt( aDir.tellp() );
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski for ( it = rSources.aDirectories.begin();
221*b1cdbd2cSJim Jagielski it != itDirsEnd;
222*b1cdbd2cSJim Jagielski ++it )
223*b1cdbd2cSJim Jagielski {
224*b1cdbd2cSJim Jagielski aDir.seekp( nProjectDir_AddPosition );
225*b1cdbd2cSJim Jagielski aDir << *it;
226*b1cdbd2cSJim Jagielski
227*b1cdbd2cSJim Jagielski for ( itExt = rExtensions.begin();
228*b1cdbd2cSJim Jagielski itExt != itExtEnd;
229*b1cdbd2cSJim Jagielski ++itExt )
230*b1cdbd2cSJim Jagielski {
231*b1cdbd2cSJim Jagielski ret += o_rFiles.AddFilesFrom( aDir.c_str(),
232*b1cdbd2cSJim Jagielski *itExt,
233*b1cdbd2cSJim Jagielski FileCollector_Ifc::flat );
234*b1cdbd2cSJim Jagielski } // end for itExt
235*b1cdbd2cSJim Jagielski } // end for it
236*b1cdbd2cSJim Jagielski for ( it = rSources.aTrees.begin();
237*b1cdbd2cSJim Jagielski it != itTreesEnd;
238*b1cdbd2cSJim Jagielski ++it )
239*b1cdbd2cSJim Jagielski {
240*b1cdbd2cSJim Jagielski aDir.seekp( nProjectDir_AddPosition );
241*b1cdbd2cSJim Jagielski aDir << *it;
242*b1cdbd2cSJim Jagielski
243*b1cdbd2cSJim Jagielski for ( itExt = rExtensions.begin();
244*b1cdbd2cSJim Jagielski itExt != itExtEnd;
245*b1cdbd2cSJim Jagielski ++itExt )
246*b1cdbd2cSJim Jagielski {
247*b1cdbd2cSJim Jagielski ret += o_rFiles.AddFilesFrom( aDir.c_str(),
248*b1cdbd2cSJim Jagielski *itExt,
249*b1cdbd2cSJim Jagielski FileCollector_Ifc::recursive );
250*b1cdbd2cSJim Jagielski } // end for itExt
251*b1cdbd2cSJim Jagielski } // end for it
252*b1cdbd2cSJim Jagielski for ( it = rSources.aFiles.begin();
253*b1cdbd2cSJim Jagielski it != itFilesEnd;
254*b1cdbd2cSJim Jagielski ++it )
255*b1cdbd2cSJim Jagielski {
256*b1cdbd2cSJim Jagielski aDir.seekp( nProjectDir_AddPosition );
257*b1cdbd2cSJim Jagielski aDir << *it;
258*b1cdbd2cSJim Jagielski
259*b1cdbd2cSJim Jagielski o_rFiles.AddFile( aDir.c_str() );
260*b1cdbd2cSJim Jagielski } // end for it
261*b1cdbd2cSJim Jagielski ret += rSources.aFiles.size();
262*b1cdbd2cSJim Jagielski
263*b1cdbd2cSJim Jagielski return ret;
264*b1cdbd2cSJim Jagielski }
265*b1cdbd2cSJim Jagielski
266*b1cdbd2cSJim Jagielski
267*b1cdbd2cSJim Jagielski } // namespace run
268*b1cdbd2cSJim Jagielski } // namespace command
269*b1cdbd2cSJim Jagielski
270*b1cdbd2cSJim Jagielski
271*b1cdbd2cSJim Jagielski #if 0
272*b1cdbd2cSJim Jagielski inline const ParseToolsFactory_Ifc &
273*b1cdbd2cSJim Jagielski CommandRunner::ParseToolsFactory()
274*b1cdbd2cSJim Jagielski { return ParseToolsFactory_Ifc::GetIt_(); }
275*b1cdbd2cSJim Jagielski
276*b1cdbd2cSJim Jagielski
277*b1cdbd2cSJim Jagielski inline const command::S_LanguageInfo &
278*b1cdbd2cSJim Jagielski CommandRunner::Get_ProjectLanguage( const command::Parse & i_rCommand,
279*b1cdbd2cSJim Jagielski const command::S_ProjectData & i_rProject )
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski if ( i_rProject.pLanguage )
282*b1cdbd2cSJim Jagielski return *i_rProject.pLanguage;
283*b1cdbd2cSJim Jagielski return *i_rCommand.GlobalLanguageInfo();
284*b1cdbd2cSJim Jagielski }
285*b1cdbd2cSJim Jagielski
286*b1cdbd2cSJim Jagielski inline bool
287*b1cdbd2cSJim Jagielski CommandRunner::HasParsedCpp() const
288*b1cdbd2cSJim Jagielski { return pCppParser; }
289*b1cdbd2cSJim Jagielski inline bool
290*b1cdbd2cSJim Jagielski CommandRunner::HasParsedIdl() const
291*b1cdbd2cSJim Jagielski { return pIdlParser; }
292*b1cdbd2cSJim Jagielski
293*b1cdbd2cSJim Jagielski
294*b1cdbd2cSJim Jagielski
295*b1cdbd2cSJim Jagielski
296*b1cdbd2cSJim Jagielski
297*b1cdbd2cSJim Jagielski CommandRunner::CommandRunner()
298*b1cdbd2cSJim Jagielski : pCommandLine(0),
299*b1cdbd2cSJim Jagielski pReposy(0),
300*b1cdbd2cSJim Jagielski pNewReposy(0),
301*b1cdbd2cSJim Jagielski nResultCode(0)
302*b1cdbd2cSJim Jagielski {
303*b1cdbd2cSJim Jagielski Cout() << "\nAutodoc version 2.2.1"
304*b1cdbd2cSJim Jagielski << "\n-------------------"
305*b1cdbd2cSJim Jagielski << "\n" << Endl();
306*b1cdbd2cSJim Jagielski }
307*b1cdbd2cSJim Jagielski
308*b1cdbd2cSJim Jagielski CommandRunner::~CommandRunner()
309*b1cdbd2cSJim Jagielski {
310*b1cdbd2cSJim Jagielski ary::Repository::Destroy_();
311*b1cdbd2cSJim Jagielski Cout() << "\n" << Endl();
312*b1cdbd2cSJim Jagielski }
313*b1cdbd2cSJim Jagielski
314*b1cdbd2cSJim Jagielski void
315*b1cdbd2cSJim Jagielski CommandRunner::Run( const CommandLine & i_rCL )
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski ary::Repository::Destroy_();
318*b1cdbd2cSJim Jagielski // ary::Repository::Destroy_();
319*b1cdbd2cSJim Jagielski pReposy = 0;
320*b1cdbd2cSJim Jagielski pNewReposy = 0;
321*b1cdbd2cSJim Jagielski nResultCode = 0;
322*b1cdbd2cSJim Jagielski pCommandLine = &i_rCL;
323*b1cdbd2cSJim Jagielski
324*b1cdbd2cSJim Jagielski pCommandLine->Run();
325*b1cdbd2cSJim Jagielski }
326*b1cdbd2cSJim Jagielski
327*b1cdbd2cSJim Jagielski void
328*b1cdbd2cSJim Jagielski CommandRunner::Parse()
329*b1cdbd2cSJim Jagielski {
330*b1cdbd2cSJim Jagielski try
331*b1cdbd2cSJim Jagielski {
332*b1cdbd2cSJim Jagielski
333*b1cdbd2cSJim Jagielski csv_assert( pCommandLine->Cmd_Parse() != 0 );
334*b1cdbd2cSJim Jagielski const command::Parse &
335*b1cdbd2cSJim Jagielski rCmd = *pCommandLine->Cmd_Parse();
336*b1cdbd2cSJim Jagielski
337*b1cdbd2cSJim Jagielski Cout() << "Parsing the repository "
338*b1cdbd2cSJim Jagielski << rCmd.ReposyName()
339*b1cdbd2cSJim Jagielski << " ..."
340*b1cdbd2cSJim Jagielski << Endl();
341*b1cdbd2cSJim Jagielski
342*b1cdbd2cSJim Jagielski if ( pReposy == 0 )
343*b1cdbd2cSJim Jagielski pReposy = & ary::Repository::Create_( rCmd.ReposyName(), 0 );
344*b1cdbd2cSJim Jagielski if ( pNewReposy == 0 )
345*b1cdbd2cSJim Jagielski pNewReposy = & ary::Repository::Create_( rCmd.ReposyName() );
346*b1cdbd2cSJim Jagielski
347*b1cdbd2cSJim Jagielski Dyn< FileCollector_Ifc > pFiles;
348*b1cdbd2cSJim Jagielski pFiles = ParseToolsFactory().Create_FileCollector(6000);
349*b1cdbd2cSJim Jagielski
350*b1cdbd2cSJim Jagielski bool bCpp = false;
351*b1cdbd2cSJim Jagielski bool bIDL = false;
352*b1cdbd2cSJim Jagielski
353*b1cdbd2cSJim Jagielski command::Parse::ProjectIterator itEnd = rCmd.ProjectsEnd();
354*b1cdbd2cSJim Jagielski for ( command::Parse::ProjectIterator it = rCmd.ProjectsBegin();
355*b1cdbd2cSJim Jagielski it != itEnd;
356*b1cdbd2cSJim Jagielski ++it )
357*b1cdbd2cSJim Jagielski {
358*b1cdbd2cSJim Jagielski
359*b1cdbd2cSJim Jagielski uintt nCount = GatherFiles( *pFiles, rCmd, *(*it) );
360*b1cdbd2cSJim Jagielski Cout() << nCount
361*b1cdbd2cSJim Jagielski << " files found to parse in project "
362*b1cdbd2cSJim Jagielski << (*it)->Name()
363*b1cdbd2cSJim Jagielski << "."
364*b1cdbd2cSJim Jagielski << Endl();
365*b1cdbd2cSJim Jagielski
366*b1cdbd2cSJim Jagielski
367*b1cdbd2cSJim Jagielski switch ( Get_ProjectLanguage(rCmd, *(*it)).eLanguage )
368*b1cdbd2cSJim Jagielski {
369*b1cdbd2cSJim Jagielski case command::S_LanguageInfo::cpp:
370*b1cdbd2cSJim Jagielski {
371*b1cdbd2cSJim Jagielski Get_CppParser().Run( (*it)->Name(),
372*b1cdbd2cSJim Jagielski (*it)->RootDirectory(),
373*b1cdbd2cSJim Jagielski *pFiles );
374*b1cdbd2cSJim Jagielski bCpp = true;
375*b1cdbd2cSJim Jagielski } break;
376*b1cdbd2cSJim Jagielski case command::S_LanguageInfo::idl:
377*b1cdbd2cSJim Jagielski {
378*b1cdbd2cSJim Jagielski Get_IdlParser().Run(*pFiles);
379*b1cdbd2cSJim Jagielski bIDL = true;
380*b1cdbd2cSJim Jagielski } break;
381*b1cdbd2cSJim Jagielski default:
382*b1cdbd2cSJim Jagielski Cerr() << "Project in yet unimplemented language skipped."
383*b1cdbd2cSJim Jagielski << Endl();
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski } // end for
386*b1cdbd2cSJim Jagielski
387*b1cdbd2cSJim Jagielski if (bCpp)
388*b1cdbd2cSJim Jagielski pReposy->RwGate_Cpp().Connect_AllTypes_2_TheirRelated_CodeEntites();
389*b1cdbd2cSJim Jagielski if (bIDL)
390*b1cdbd2cSJim Jagielski {
391*b1cdbd2cSJim Jagielski pNewReposy->Gate_Idl().Secondaries().Connect_Types2Ces();
392*b1cdbd2cSJim Jagielski pNewReposy->Gate_Idl().Secondaries().Gather_CrossReferences();
393*b1cdbd2cSJim Jagielski }
394*b1cdbd2cSJim Jagielski
395*b1cdbd2cSJim Jagielski } // end try
396*b1cdbd2cSJim Jagielski catch (csv::Exception & xx)
397*b1cdbd2cSJim Jagielski {
398*b1cdbd2cSJim Jagielski xx.GetInfo(Cerr());
399*b1cdbd2cSJim Jagielski Cerr() << " program will exit." << Endl();
400*b1cdbd2cSJim Jagielski nResultCode = 1;
401*b1cdbd2cSJim Jagielski }
402*b1cdbd2cSJim Jagielski catch (...)
403*b1cdbd2cSJim Jagielski {
404*b1cdbd2cSJim Jagielski Cerr() << "Unknown exception - program will exit." << Endl();
405*b1cdbd2cSJim Jagielski nResultCode = 1;
406*b1cdbd2cSJim Jagielski }
407*b1cdbd2cSJim Jagielski }
408*b1cdbd2cSJim Jagielski
409*b1cdbd2cSJim Jagielski void
410*b1cdbd2cSJim Jagielski CommandRunner::Load()
411*b1cdbd2cSJim Jagielski {
412*b1cdbd2cSJim Jagielski Cout() << "This would load the repository from the directory "
413*b1cdbd2cSJim Jagielski << pCommandLine->Cmd_Load()->ReposyDir()
414*b1cdbd2cSJim Jagielski << "."
415*b1cdbd2cSJim Jagielski << Endl();
416*b1cdbd2cSJim Jagielski }
417*b1cdbd2cSJim Jagielski
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski void
420*b1cdbd2cSJim Jagielski CommandRunner::Save()
421*b1cdbd2cSJim Jagielski {
422*b1cdbd2cSJim Jagielski Cout() << "This would save the repository into the directory "
423*b1cdbd2cSJim Jagielski << pCommandLine->Cmd_Save()->ReposyDir()
424*b1cdbd2cSJim Jagielski << "."
425*b1cdbd2cSJim Jagielski << Endl();
426*b1cdbd2cSJim Jagielski }
427*b1cdbd2cSJim Jagielski
428*b1cdbd2cSJim Jagielski
429*b1cdbd2cSJim Jagielski void
430*b1cdbd2cSJim Jagielski CommandRunner::CreateHtml()
431*b1cdbd2cSJim Jagielski {
432*b1cdbd2cSJim Jagielski Cout() << "Creating HTML-output into the directory "
433*b1cdbd2cSJim Jagielski << pCommandLine->Cmd_CreateHtml()->OutputDir()
434*b1cdbd2cSJim Jagielski << "."
435*b1cdbd2cSJim Jagielski << Endl();
436*b1cdbd2cSJim Jagielski
437*b1cdbd2cSJim Jagielski if ( HasParsedCpp() )
438*b1cdbd2cSJim Jagielski CreateHtml_NewStyle();
439*b1cdbd2cSJim Jagielski if ( HasParsedIdl() )
440*b1cdbd2cSJim Jagielski CreateHtml_OldIdlStyle();
441*b1cdbd2cSJim Jagielski }
442*b1cdbd2cSJim Jagielski
443*b1cdbd2cSJim Jagielski
444*b1cdbd2cSJim Jagielski
445*b1cdbd2cSJim Jagielski void
446*b1cdbd2cSJim Jagielski CommandRunner::CreateXml()
447*b1cdbd2cSJim Jagielski {
448*b1cdbd2cSJim Jagielski Cout() << "This would create the XML-output into the directory "
449*b1cdbd2cSJim Jagielski << pCommandLine->Cmd_CreateXml()->OutputDir()
450*b1cdbd2cSJim Jagielski << "."
451*b1cdbd2cSJim Jagielski << Endl();
452*b1cdbd2cSJim Jagielski }
453*b1cdbd2cSJim Jagielski
454*b1cdbd2cSJim Jagielski CodeParser_Ifc &
455*b1cdbd2cSJim Jagielski CommandRunner::Get_CppParser()
456*b1cdbd2cSJim Jagielski {
457*b1cdbd2cSJim Jagielski if ( NOT pCppParser )
458*b1cdbd2cSJim Jagielski Create_CppParser();
459*b1cdbd2cSJim Jagielski return *pCppParser;
460*b1cdbd2cSJim Jagielski }
461*b1cdbd2cSJim Jagielski
462*b1cdbd2cSJim Jagielski IdlParser &
463*b1cdbd2cSJim Jagielski CommandRunner::Get_IdlParser()
464*b1cdbd2cSJim Jagielski {
465*b1cdbd2cSJim Jagielski if ( NOT pIdlParser )
466*b1cdbd2cSJim Jagielski Create_IdlParser();
467*b1cdbd2cSJim Jagielski return *pIdlParser;
468*b1cdbd2cSJim Jagielski }
469*b1cdbd2cSJim Jagielski
470*b1cdbd2cSJim Jagielski void
471*b1cdbd2cSJim Jagielski CommandRunner::Create_CppParser()
472*b1cdbd2cSJim Jagielski {
473*b1cdbd2cSJim Jagielski pCppParser = ParseToolsFactory().Create_Parser_Cplusplus();
474*b1cdbd2cSJim Jagielski pCppDocuInterpreter = ParseToolsFactory().Create_DocuParser_AutodocStyle();
475*b1cdbd2cSJim Jagielski
476*b1cdbd2cSJim Jagielski pCppParser->Setup( *pReposy,
477*b1cdbd2cSJim Jagielski *pCppDocuInterpreter );
478*b1cdbd2cSJim Jagielski }
479*b1cdbd2cSJim Jagielski
480*b1cdbd2cSJim Jagielski void
481*b1cdbd2cSJim Jagielski CommandRunner::Create_IdlParser()
482*b1cdbd2cSJim Jagielski {
483*b1cdbd2cSJim Jagielski pIdlParser = new IdlParser(*pNewReposy);
484*b1cdbd2cSJim Jagielski }
485*b1cdbd2cSJim Jagielski
486*b1cdbd2cSJim Jagielski uintt
487*b1cdbd2cSJim Jagielski CommandRunner::GatherFiles( FileCollector_Ifc & o_rFiles,
488*b1cdbd2cSJim Jagielski const command::Parse & i_rCommand,
489*b1cdbd2cSJim Jagielski const command::S_ProjectData & i_rProject )
490*b1cdbd2cSJim Jagielski {
491*b1cdbd2cSJim Jagielski uintt ret = 0;
492*b1cdbd2cSJim Jagielski o_rFiles.EraseAll();
493*b1cdbd2cSJim Jagielski
494*b1cdbd2cSJim Jagielski typedef StringVector StrVector;
495*b1cdbd2cSJim Jagielski typedef StrVector::const_iterator StrIterator;
496*b1cdbd2cSJim Jagielski const command::S_Sources &
497*b1cdbd2cSJim Jagielski rSources = i_rProject.aFiles;
498*b1cdbd2cSJim Jagielski const StrVector &
499*b1cdbd2cSJim Jagielski rExtensions = Get_ProjectLanguage(i_rCommand,i_rProject).aExtensions;
500*b1cdbd2cSJim Jagielski
501*b1cdbd2cSJim Jagielski StrIterator it;
502*b1cdbd2cSJim Jagielski StrIterator itDirsEnd = rSources.aDirectories.end();
503*b1cdbd2cSJim Jagielski StrIterator itTreesEnd = i_rProject.aFiles.aTrees.end();
504*b1cdbd2cSJim Jagielski StrIterator itFilesEnd = i_rProject.aFiles.aFiles.end();
505*b1cdbd2cSJim Jagielski StrIterator itExt;
506*b1cdbd2cSJim Jagielski StrIterator itExtEnd = rExtensions.end();
507*b1cdbd2cSJim Jagielski
508*b1cdbd2cSJim Jagielski csv::StreamStr aDir(500);
509*b1cdbd2cSJim Jagielski i_rProject.aRootDirectory.Get( aDir );
510*b1cdbd2cSJim Jagielski
511*b1cdbd2cSJim Jagielski uintt nProjectDir_AddPosition =
512*b1cdbd2cSJim Jagielski ( strcmp(aDir.c_str(),".\\") == 0 OR strcmp(aDir.c_str(),"./") == 0 )
513*b1cdbd2cSJim Jagielski ? 0
514*b1cdbd2cSJim Jagielski : uintt( aDir.tellp() );
515*b1cdbd2cSJim Jagielski
516*b1cdbd2cSJim Jagielski for ( it = rSources.aDirectories.begin();
517*b1cdbd2cSJim Jagielski it != itDirsEnd;
518*b1cdbd2cSJim Jagielski ++it )
519*b1cdbd2cSJim Jagielski {
520*b1cdbd2cSJim Jagielski aDir.seekp( nProjectDir_AddPosition );
521*b1cdbd2cSJim Jagielski aDir << *it;
522*b1cdbd2cSJim Jagielski
523*b1cdbd2cSJim Jagielski for ( itExt = rExtensions.begin();
524*b1cdbd2cSJim Jagielski itExt != itExtEnd;
525*b1cdbd2cSJim Jagielski ++itExt )
526*b1cdbd2cSJim Jagielski {
527*b1cdbd2cSJim Jagielski ret += o_rFiles.AddFilesFrom( aDir.c_str(),
528*b1cdbd2cSJim Jagielski *itExt,
529*b1cdbd2cSJim Jagielski FileCollector_Ifc::flat );
530*b1cdbd2cSJim Jagielski } // end for itExt
531*b1cdbd2cSJim Jagielski } // end for it
532*b1cdbd2cSJim Jagielski for ( it = rSources.aTrees.begin();
533*b1cdbd2cSJim Jagielski it != itTreesEnd;
534*b1cdbd2cSJim Jagielski ++it )
535*b1cdbd2cSJim Jagielski {
536*b1cdbd2cSJim Jagielski aDir.seekp( nProjectDir_AddPosition );
537*b1cdbd2cSJim Jagielski aDir << *it;
538*b1cdbd2cSJim Jagielski
539*b1cdbd2cSJim Jagielski for ( itExt = rExtensions.begin();
540*b1cdbd2cSJim Jagielski itExt != itExtEnd;
541*b1cdbd2cSJim Jagielski ++itExt )
542*b1cdbd2cSJim Jagielski {
543*b1cdbd2cSJim Jagielski ret += o_rFiles.AddFilesFrom( aDir.c_str(),
544*b1cdbd2cSJim Jagielski *itExt,
545*b1cdbd2cSJim Jagielski FileCollector_Ifc::recursive );
546*b1cdbd2cSJim Jagielski } // end for itExt
547*b1cdbd2cSJim Jagielski } // end for it
548*b1cdbd2cSJim Jagielski for ( it = rSources.aFiles.begin();
549*b1cdbd2cSJim Jagielski it != itFilesEnd;
550*b1cdbd2cSJim Jagielski ++it )
551*b1cdbd2cSJim Jagielski {
552*b1cdbd2cSJim Jagielski aDir.seekp( nProjectDir_AddPosition );
553*b1cdbd2cSJim Jagielski aDir << *it;
554*b1cdbd2cSJim Jagielski
555*b1cdbd2cSJim Jagielski o_rFiles.AddFile( aDir.c_str() );
556*b1cdbd2cSJim Jagielski } // end for it
557*b1cdbd2cSJim Jagielski ret += rSources.aFiles.size();
558*b1cdbd2cSJim Jagielski
559*b1cdbd2cSJim Jagielski return ret;
560*b1cdbd2cSJim Jagielski }
561*b1cdbd2cSJim Jagielski
562*b1cdbd2cSJim Jagielski void
563*b1cdbd2cSJim Jagielski CommandRunner::CreateHtml_NewStyle()
564*b1cdbd2cSJim Jagielski {
565*b1cdbd2cSJim Jagielski const ary::cpp::DisplayGate &
566*b1cdbd2cSJim Jagielski rGate = pReposy->DisplayGate_Cpp();
567*b1cdbd2cSJim Jagielski
568*b1cdbd2cSJim Jagielski Dyn< autodoc::HtmlDisplay_UdkStd > pHtmlDisplay;
569*b1cdbd2cSJim Jagielski pHtmlDisplay = DisplayToolsFactory_Ifc::GetIt_()
570*b1cdbd2cSJim Jagielski .Create_HtmlDisplay_UdkStd();
571*b1cdbd2cSJim Jagielski
572*b1cdbd2cSJim Jagielski pHtmlDisplay->Run( pCommandLine->Cmd_CreateHtml()->OutputDir(),
573*b1cdbd2cSJim Jagielski rGate,
574*b1cdbd2cSJim Jagielski DisplayToolsFactory_Ifc::GetIt_().Create_StdFrame() );
575*b1cdbd2cSJim Jagielski }
576*b1cdbd2cSJim Jagielski
577*b1cdbd2cSJim Jagielski void
578*b1cdbd2cSJim Jagielski CommandRunner::CreateHtml_OldIdlStyle()
579*b1cdbd2cSJim Jagielski {
580*b1cdbd2cSJim Jagielski ary::idl::Gate &
581*b1cdbd2cSJim Jagielski rAryGate = pNewReposy->Gate_Idl();
582*b1cdbd2cSJim Jagielski
583*b1cdbd2cSJim Jagielski // Read DevManualLinkFile:
584*b1cdbd2cSJim Jagielski // KORR_FUTURE
585*b1cdbd2cSJim Jagielski csv::File
586*b1cdbd2cSJim Jagielski aFile("devmanref.txt", csv::CFM_READ);
587*b1cdbd2cSJim Jagielski if ( aFile.open() )
588*b1cdbd2cSJim Jagielski {
589*b1cdbd2cSJim Jagielski rAryGate.Secondaries().Read_Links2DevManual(aFile);
590*b1cdbd2cSJim Jagielski aFile.close();
591*b1cdbd2cSJim Jagielski }
592*b1cdbd2cSJim Jagielski
593*b1cdbd2cSJim Jagielski // New Style Output
594*b1cdbd2cSJim Jagielski Dyn<autodoc::HtmlDisplay_Idl_Ifc> pNewDisplay;
595*b1cdbd2cSJim Jagielski pNewDisplay = DisplayToolsFactory_Ifc::GetIt_()
596*b1cdbd2cSJim Jagielski .Create_HtmlDisplay_Idl();
597*b1cdbd2cSJim Jagielski pNewDisplay->Run( pCommandLine->Cmd_CreateHtml()->OutputDir(),
598*b1cdbd2cSJim Jagielski rAryGate,
599*b1cdbd2cSJim Jagielski DisplayToolsFactory_Ifc::GetIt_().Create_StdFrame() );
600*b1cdbd2cSJim Jagielski }
601*b1cdbd2cSJim Jagielski #endif // 0
602*b1cdbd2cSJim Jagielski
603*b1cdbd2cSJim Jagielski } // namespace autodoc
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski
606*b1cdbd2cSJim Jagielski
607*b1cdbd2cSJim Jagielski
608