Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <precomp.h>
21 : #include "cmd_run.hxx"
22 :
23 :
24 : // NOT FULLY DEFINED SERVICES
25 : #include <cosv/file.hxx>
26 : #include <cosv/x.hxx>
27 : #include <ary/ary.hxx>
28 : #include <ary/idl/i_ce.hxx>
29 : #include <ary/idl/i_gate.hxx>
30 : #include <ary/idl/i_module.hxx>
31 : #include <ary/idl/ip_ce.hxx>
32 : #include <autodoc/filecoli.hxx>
33 : #include <autodoc/parsing.hxx>
34 : #include <autodoc/prs_docu.hxx>
35 : #include <parser/unoidl.hxx>
36 : #include <adc_cl.hxx>
37 : #include "adc_cmd_parse.hxx"
38 : #include "adc_cmds.hxx"
39 :
40 : namespace autodoc
41 : {
42 : namespace command
43 : {
44 : namespace run
45 : {
46 :
47 1 : Parser::Parser( const Parse & i_command )
48 : : rCommand(i_command),
49 : pCppDocuInterpreter(),
50 1 : pIdlParser()
51 : {
52 1 : }
53 :
54 1 : Parser::~Parser()
55 : {
56 1 : }
57 :
58 : bool
59 1 : Parser::Perform()
60 : {
61 1 : Cout() << "Parsing the repository "
62 2 : << rCommand.ReposyName()
63 1 : << " ..."
64 2 : << Endl();
65 : try
66 : {
67 : ::ary::Repository &
68 1 : rAry = CommandLine::Get_().TheRepository();
69 1 : rAry.Set_Title(rCommand.ReposyName());
70 :
71 : Dyn< FileCollector_Ifc >
72 1 : pFiles( ParseToolsFactory().Create_FileCollector(6000) );
73 :
74 1 : bool bIDL = false;
75 :
76 : command::Parse::ProjectIterator
77 1 : itEnd = rCommand.ProjectsEnd();
78 2 : for ( command::Parse::ProjectIterator it = rCommand.ProjectsBegin();
79 : it != itEnd;
80 : ++it )
81 : {
82 1 : uintt nCount = GatherFiles( *pFiles, *(*it) );
83 1 : Cout() << nCount
84 1 : << " files found to parse in project "
85 2 : << (*it)->Name()
86 1 : << "."
87 2 : << Endl();
88 :
89 1 : switch ( (*it)->Language().eLanguage )
90 : {
91 : case command::S_LanguageInfo::idl:
92 : {
93 1 : Get_IdlParser().Run(*pFiles);
94 1 : bIDL = true;
95 1 : } break;
96 : default:
97 0 : Cerr() << "Project in yet unimplemented language skipped."
98 0 : << Endl();
99 : }
100 : } // end for
101 :
102 1 : if (bIDL)
103 : {
104 1 : rAry.Gate_Idl().Calculate_AllSecondaryInformation(
105 1 : rCommand.DevelopersManual_RefFilePath() );
106 :
107 : // ::ary::idl::SecondariesPilot &
108 : // rIdl2sPilot = rAry.Gate_Idl().Secondaries();
109 : //
110 : // rIdl2sPilot.CheckAllInterfaceBases( rAry.Gate_Idl() );
111 : // rIdl2sPilot.Connect_Types2Ces();
112 : // rIdl2sPilot.Gather_CrossReferences();
113 : //
114 : // if (NOT rCommand.DevelopersManual_RefFilePath().empty())
115 : // {
116 : // csv::File
117 : // aFile(rCommand.DevelopersManual_RefFilePath(), csv::CFM_READ);
118 : // if ( aFile.open() )
119 : // {
120 : // rIdl2sPilot.Read_Links2DevManual(aFile);
121 : // aFile.close();
122 : // }
123 : // }
124 : } // endif (bIDL)
125 :
126 1 : return true;
127 :
128 : } // end try
129 0 : catch (csv::Exception & xx)
130 : {
131 0 : xx.GetInfo(Cerr());
132 0 : Cerr() << " program will exit." << Endl();
133 :
134 0 : return false;
135 : }
136 : }
137 :
138 : IdlParser &
139 1 : Parser::Get_IdlParser()
140 : {
141 1 : if ( NOT pIdlParser )
142 1 : Create_IdlParser();
143 1 : return *pIdlParser;
144 : }
145 :
146 : void
147 1 : Parser::Create_IdlParser()
148 : {
149 1 : pIdlParser = new IdlParser(CommandLine::Get_().TheRepository());
150 1 : }
151 :
152 : const ParseToolsFactory_Ifc &
153 1 : Parser::ParseToolsFactory()
154 : {
155 1 : return ParseToolsFactory_Ifc::GetIt_();
156 : }
157 :
158 : uintt
159 1 : Parser::GatherFiles( FileCollector_Ifc & o_rFiles,
160 : const S_ProjectData & i_rProject )
161 : {
162 1 : uintt ret = 0;
163 1 : o_rFiles.EraseAll();
164 :
165 : typedef StringVector StrVector;
166 : typedef StrVector::const_iterator StrIterator;
167 : const S_Sources &
168 1 : rSources = i_rProject.Sources();
169 : const StrVector &
170 1 : rExtensions = i_rProject.Language().aExtensions;
171 :
172 1 : StrIterator it;
173 1 : StrIterator itTreesEnd = rSources.aTrees.end();
174 1 : StrIterator itDirsEnd = rSources.aDirectories.end();
175 1 : StrIterator itFilesEnd = rSources.aFiles.end();
176 1 : StrIterator itExt;
177 1 : StrIterator itExtEnd = rExtensions.end();
178 :
179 1 : csv::StreamStr aDir(500);
180 1 : i_rProject.RootDirectory().Get( aDir );
181 :
182 : uintt nProjectDir_AddPosition =
183 2 : ( strcmp(aDir.c_str(),".\\") == 0 OR strcmp(aDir.c_str(),"./") == 0 )
184 : ? 0
185 2 : : uintt( aDir.tellp() );
186 :
187 1 : for ( it = rSources.aDirectories.begin();
188 : it != itDirsEnd;
189 : ++it )
190 : {
191 0 : aDir.seekp( nProjectDir_AddPosition );
192 0 : aDir << *it;
193 :
194 0 : for ( itExt = rExtensions.begin();
195 : itExt != itExtEnd;
196 : ++itExt )
197 : {
198 : ret += o_rFiles.AddFilesFrom( aDir.c_str(),
199 0 : *itExt,
200 0 : FileCollector_Ifc::flat );
201 : } // end for itExt
202 : } // end for it
203 2 : for ( it = rSources.aTrees.begin();
204 : it != itTreesEnd;
205 : ++it )
206 : {
207 1 : aDir.seekp( nProjectDir_AddPosition );
208 1 : aDir << *it;
209 :
210 2 : for ( itExt = rExtensions.begin();
211 : itExt != itExtEnd;
212 : ++itExt )
213 : {
214 : ret += o_rFiles.AddFilesFrom( aDir.c_str(),
215 1 : *itExt,
216 2 : FileCollector_Ifc::recursive );
217 : } // end for itExt
218 : } // end for it
219 1 : for ( it = rSources.aFiles.begin();
220 : it != itFilesEnd;
221 : ++it )
222 : {
223 0 : aDir.seekp( nProjectDir_AddPosition );
224 0 : aDir << *it;
225 :
226 0 : o_rFiles.AddFile( aDir.c_str() );
227 : } // end for it
228 1 : ret += rSources.aFiles.size();
229 :
230 1 : return ret;
231 : }
232 :
233 :
234 : } // namespace run
235 : } // namespace command
236 3 : } // namespace autodoc
237 :
238 :
239 :
240 :
241 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|