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