summaryrefslogtreecommitdiff
path: root/autodoc/source/exes/adc_uni/cmd_run.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'autodoc/source/exes/adc_uni/cmd_run.cxx')
-rw-r--r--autodoc/source/exes/adc_uni/cmd_run.cxx613
1 files changed, 613 insertions, 0 deletions
diff --git a/autodoc/source/exes/adc_uni/cmd_run.cxx b/autodoc/source/exes/adc_uni/cmd_run.cxx
new file mode 100644
index 000000000000..d20d9646d3d3
--- /dev/null
+++ b/autodoc/source/exes/adc_uni/cmd_run.cxx
@@ -0,0 +1,613 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <precomp.h>
+#include "cmd_run.hxx"
+
+
+// NOT FULLY DEFINED SERVICES
+#include <cosv/file.hxx>
+#include <cosv/x.hxx>
+#include <ary/ary.hxx>
+#include <ary/cpp/c_gate.hxx>
+#include <ary/idl/i_ce.hxx>
+#include <ary/idl/i_gate.hxx>
+#include <ary/idl/i_module.hxx>
+#include <ary/idl/ip_ce.hxx>
+#include <autodoc/filecoli.hxx>
+#include <autodoc/parsing.hxx>
+#include <autodoc/prs_code.hxx>
+#include <autodoc/prs_docu.hxx>
+#include <parser/unoidl.hxx>
+#include <adc_cl.hxx>
+#include "adc_cmd_parse.hxx"
+#include "adc_cmds.hxx"
+
+namespace autodoc
+{
+namespace command
+{
+namespace run
+{
+
+Parser::Parser( const Parse & i_command )
+ : rCommand(i_command),
+ pCppParser(),
+ pCppDocuInterpreter(),
+ pIdlParser()
+{
+}
+
+Parser::~Parser()
+{
+}
+
+bool
+Parser::Perform()
+{
+ Cout() << "Parsing the repository "
+ << rCommand.ReposyName()
+ << " ..."
+ << Endl();
+ try
+ {
+ ::ary::Repository &
+ rAry = CommandLine::Get_().TheRepository();
+ rAry.Set_Title(rCommand.ReposyName());
+
+ Dyn< FileCollector_Ifc >
+ pFiles( ParseToolsFactory().Create_FileCollector(6000) );
+
+ bool bIDL = false;
+ bool bCpp = false;
+
+ command::Parse::ProjectIterator
+ itEnd = rCommand.ProjectsEnd();
+ for ( command::Parse::ProjectIterator it = rCommand.ProjectsBegin();
+ it != itEnd;
+ ++it )
+ {
+ uintt nCount = GatherFiles( *pFiles, *(*it) );
+ Cout() << nCount
+ << " files found to parse in project "
+ << (*it)->Name()
+ << "."
+ << Endl();
+
+ switch ( (*it)->Language().eLanguage )
+ {
+ case command::S_LanguageInfo::idl:
+ {
+ Get_IdlParser().Run(*pFiles);
+ bIDL = true;
+ } break;
+ case command::S_LanguageInfo::cpp:
+ {
+ Get_CppParser().Run( *pFiles );
+ bCpp = true;
+ } break;
+ default:
+ Cerr() << "Project in yet unimplemented language skipped."
+ << Endl();
+ }
+ } // end for
+
+ if (bCpp)
+ {
+ rAry.Gate_Cpp().Calculate_AllSecondaryInformation();
+ }
+ if (bIDL)
+ {
+ rAry.Gate_Idl().Calculate_AllSecondaryInformation(
+ rCommand.DevelopersManual_RefFilePath() );
+
+// ::ary::idl::SecondariesPilot &
+// rIdl2sPilot = rAry.Gate_Idl().Secondaries();
+//
+// rIdl2sPilot.CheckAllInterfaceBases( rAry.Gate_Idl() );
+// rIdl2sPilot.Connect_Types2Ces();
+// rIdl2sPilot.Gather_CrossReferences();
+//
+// if (NOT rCommand.DevelopersManual_RefFilePath().empty())
+// {
+// csv::File
+// aFile(rCommand.DevelopersManual_RefFilePath(), csv::CFM_READ);
+// if ( aFile.open() )
+// {
+// rIdl2sPilot.Read_Links2DevManual(aFile);
+// aFile.close();
+// }
+// }
+ } // endif (bIDL)
+
+ return true;
+
+ } // end try
+ catch (csv::Exception & xx)
+ {
+ xx.GetInfo(Cerr());
+ Cerr() << " program will exit." << Endl();
+
+ return false;
+ }
+}
+
+CodeParser_Ifc &
+Parser::Get_CppParser()
+{
+ if ( NOT pCppParser )
+ Create_CppParser();
+ return *pCppParser;
+}
+
+IdlParser &
+Parser::Get_IdlParser()
+{
+ if ( NOT pIdlParser )
+ Create_IdlParser();
+ return *pIdlParser;
+}
+
+void
+Parser::Create_CppParser()
+{
+ pCppParser = ParseToolsFactory().Create_Parser_Cplusplus();
+ pCppDocuInterpreter = ParseToolsFactory().Create_DocuParser_AutodocStyle();
+
+ pCppParser->Setup( CommandLine::Get_().TheRepository(),
+ *pCppDocuInterpreter );
+}
+
+void
+Parser::Create_IdlParser()
+{
+ pIdlParser = new IdlParser(CommandLine::Get_().TheRepository());
+}
+
+const ParseToolsFactory_Ifc &
+Parser::ParseToolsFactory()
+{
+ return ParseToolsFactory_Ifc::GetIt_();
+}
+
+uintt
+Parser::GatherFiles( FileCollector_Ifc & o_rFiles,
+ const S_ProjectData & i_rProject )
+{
+ uintt ret = 0;
+ o_rFiles.EraseAll();
+
+ typedef StringVector StrVector;
+ typedef StrVector::const_iterator StrIterator;
+ const S_Sources &
+ rSources = i_rProject.Sources();
+ const StrVector &
+ rExtensions = i_rProject.Language().aExtensions;
+
+ StrIterator it;
+ StrIterator itTreesEnd = rSources.aTrees.end();
+ StrIterator itDirsEnd = rSources.aDirectories.end();
+ StrIterator itFilesEnd = rSources.aFiles.end();
+ StrIterator itExt;
+ StrIterator itExtEnd = rExtensions.end();
+
+ csv::StreamStr aDir(500);
+ i_rProject.RootDirectory().Get( aDir );
+
+ uintt nProjectDir_AddPosition =
+ ( strcmp(aDir.c_str(),".\\") == 0 OR strcmp(aDir.c_str(),"./") == 0 )
+ ? 0
+ : uintt( aDir.tellp() );
+
+ for ( it = rSources.aDirectories.begin();
+ it != itDirsEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ for ( itExt = rExtensions.begin();
+ itExt != itExtEnd;
+ ++itExt )
+ {
+ ret += o_rFiles.AddFilesFrom( aDir.c_str(),
+ *itExt,
+ FileCollector_Ifc::flat );
+ } // end for itExt
+ } // end for it
+ for ( it = rSources.aTrees.begin();
+ it != itTreesEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ for ( itExt = rExtensions.begin();
+ itExt != itExtEnd;
+ ++itExt )
+ {
+ ret += o_rFiles.AddFilesFrom( aDir.c_str(),
+ *itExt,
+ FileCollector_Ifc::recursive );
+ } // end for itExt
+ } // end for it
+ for ( it = rSources.aFiles.begin();
+ it != itFilesEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ o_rFiles.AddFile( aDir.c_str() );
+ } // end for it
+ ret += rSources.aFiles.size();
+
+ return ret;
+}
+
+
+} // namespace run
+} // namespace command
+
+
+#if 0
+inline const ParseToolsFactory_Ifc &
+CommandRunner::ParseToolsFactory()
+ { return ParseToolsFactory_Ifc::GetIt_(); }
+
+
+inline const command::S_LanguageInfo &
+CommandRunner::Get_ProjectLanguage( const command::Parse & i_rCommand,
+ const command::S_ProjectData & i_rProject )
+{
+ if ( i_rProject.pLanguage )
+ return *i_rProject.pLanguage;
+ return *i_rCommand.GlobalLanguageInfo();
+}
+
+inline bool
+CommandRunner::HasParsedCpp() const
+ { return pCppParser; }
+inline bool
+CommandRunner::HasParsedIdl() const
+ { return pIdlParser; }
+
+
+
+
+
+CommandRunner::CommandRunner()
+ : pCommandLine(0),
+ pReposy(0),
+ pNewReposy(0),
+ nResultCode(0)
+{
+ Cout() << "\nAutodoc version 2.2.1"
+ << "\n-------------------"
+ << "\n" << Endl();
+}
+
+CommandRunner::~CommandRunner()
+{
+ ary::Repository::Destroy_();
+ Cout() << "\n" << Endl();
+}
+
+void
+CommandRunner::Run( const CommandLine & i_rCL )
+{
+ ary::Repository::Destroy_();
+// ary::Repository::Destroy_();
+ pReposy = 0;
+ pNewReposy = 0;
+ nResultCode = 0;
+ pCommandLine = &i_rCL;
+
+ pCommandLine->Run();
+}
+
+void
+CommandRunner::Parse()
+{
+ try
+ {
+
+ csv_assert( pCommandLine->Cmd_Parse() != 0 );
+ const command::Parse &
+ rCmd = *pCommandLine->Cmd_Parse();
+
+ Cout() << "Parsing the repository "
+ << rCmd.ReposyName()
+ << " ..."
+ << Endl();
+
+ if ( pReposy == 0 )
+ pReposy = & ary::Repository::Create_( rCmd.ReposyName(), 0 );
+ if ( pNewReposy == 0 )
+ pNewReposy = & ary::Repository::Create_( rCmd.ReposyName() );
+
+ Dyn< FileCollector_Ifc > pFiles;
+ pFiles = ParseToolsFactory().Create_FileCollector(6000);
+
+ bool bCpp = false;
+ bool bIDL = false;
+
+ command::Parse::ProjectIterator itEnd = rCmd.ProjectsEnd();
+ for ( command::Parse::ProjectIterator it = rCmd.ProjectsBegin();
+ it != itEnd;
+ ++it )
+ {
+
+ uintt nCount = GatherFiles( *pFiles, rCmd, *(*it) );
+ Cout() << nCount
+ << " files found to parse in project "
+ << (*it)->Name()
+ << "."
+ << Endl();
+
+
+ switch ( Get_ProjectLanguage(rCmd, *(*it)).eLanguage )
+ {
+ case command::S_LanguageInfo::cpp:
+ {
+ Get_CppParser().Run( (*it)->Name(),
+ (*it)->RootDirectory(),
+ *pFiles );
+ bCpp = true;
+ } break;
+ case command::S_LanguageInfo::idl:
+ {
+ Get_IdlParser().Run(*pFiles);
+ bIDL = true;
+ } break;
+ default:
+ Cerr() << "Project in yet unimplemented language skipped."
+ << Endl();
+ }
+ } // end for
+
+ if (bCpp)
+ pReposy->RwGate_Cpp().Connect_AllTypes_2_TheirRelated_CodeEntites();
+ if (bIDL)
+ {
+ pNewReposy->Gate_Idl().Secondaries().Connect_Types2Ces();
+ pNewReposy->Gate_Idl().Secondaries().Gather_CrossReferences();
+ }
+
+ } // end try
+ catch (csv::Exception & xx)
+ {
+ xx.GetInfo(Cerr());
+ Cerr() << " program will exit." << Endl();
+ nResultCode = 1;
+ }
+ catch (...)
+ {
+ Cerr() << "Unknown exception - program will exit." << Endl();
+ nResultCode = 1;
+ }
+}
+
+void
+CommandRunner::Load()
+{
+ Cout() << "This would load the repository from the directory "
+ << pCommandLine->Cmd_Load()->ReposyDir()
+ << "."
+ << Endl();
+}
+
+
+void
+CommandRunner::Save()
+{
+ Cout() << "This would save the repository into the directory "
+ << pCommandLine->Cmd_Save()->ReposyDir()
+ << "."
+ << Endl();
+}
+
+
+void
+CommandRunner::CreateHtml()
+{
+ Cout() << "Creating HTML-output into the directory "
+ << pCommandLine->Cmd_CreateHtml()->OutputDir()
+ << "."
+ << Endl();
+
+ if ( HasParsedCpp() )
+ CreateHtml_NewStyle();
+ if ( HasParsedIdl() )
+ CreateHtml_OldIdlStyle();
+}
+
+
+
+void
+CommandRunner::CreateXml()
+{
+ Cout() << "This would create the XML-output into the directory "
+ << pCommandLine->Cmd_CreateXml()->OutputDir()
+ << "."
+ << Endl();
+}
+
+CodeParser_Ifc &
+CommandRunner::Get_CppParser()
+{
+ if ( NOT pCppParser )
+ Create_CppParser();
+ return *pCppParser;
+}
+
+IdlParser &
+CommandRunner::Get_IdlParser()
+{
+ if ( NOT pIdlParser )
+ Create_IdlParser();
+ return *pIdlParser;
+}
+
+void
+CommandRunner::Create_CppParser()
+{
+ pCppParser = ParseToolsFactory().Create_Parser_Cplusplus();
+ pCppDocuInterpreter = ParseToolsFactory().Create_DocuParser_AutodocStyle();
+
+ pCppParser->Setup( *pReposy,
+ *pCppDocuInterpreter );
+}
+
+void
+CommandRunner::Create_IdlParser()
+{
+ pIdlParser = new IdlParser(*pNewReposy);
+}
+
+uintt
+CommandRunner::GatherFiles( FileCollector_Ifc & o_rFiles,
+ const command::Parse & i_rCommand,
+ const command::S_ProjectData & i_rProject )
+{
+ uintt ret = 0;
+ o_rFiles.EraseAll();
+
+ typedef StringVector StrVector;
+ typedef StrVector::const_iterator StrIterator;
+ const command::S_Sources &
+ rSources = i_rProject.aFiles;
+ const StrVector &
+ rExtensions = Get_ProjectLanguage(i_rCommand,i_rProject).aExtensions;
+
+ StrIterator it;
+ StrIterator itDirsEnd = rSources.aDirectories.end();
+ StrIterator itTreesEnd = i_rProject.aFiles.aTrees.end();
+ StrIterator itFilesEnd = i_rProject.aFiles.aFiles.end();
+ StrIterator itExt;
+ StrIterator itExtEnd = rExtensions.end();
+
+ csv::StreamStr aDir(500);
+ i_rProject.aRootDirectory.Get( aDir );
+
+ uintt nProjectDir_AddPosition =
+ ( strcmp(aDir.c_str(),".\\") == 0 OR strcmp(aDir.c_str(),"./") == 0 )
+ ? 0
+ : uintt( aDir.tellp() );
+
+ for ( it = rSources.aDirectories.begin();
+ it != itDirsEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ for ( itExt = rExtensions.begin();
+ itExt != itExtEnd;
+ ++itExt )
+ {
+ ret += o_rFiles.AddFilesFrom( aDir.c_str(),
+ *itExt,
+ FileCollector_Ifc::flat );
+ } // end for itExt
+ } // end for it
+ for ( it = rSources.aTrees.begin();
+ it != itTreesEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ for ( itExt = rExtensions.begin();
+ itExt != itExtEnd;
+ ++itExt )
+ {
+ ret += o_rFiles.AddFilesFrom( aDir.c_str(),
+ *itExt,
+ FileCollector_Ifc::recursive );
+ } // end for itExt
+ } // end for it
+ for ( it = rSources.aFiles.begin();
+ it != itFilesEnd;
+ ++it )
+ {
+ aDir.seekp( nProjectDir_AddPosition );
+ aDir << *it;
+
+ o_rFiles.AddFile( aDir.c_str() );
+ } // end for it
+ ret += rSources.aFiles.size();
+
+ return ret;
+}
+
+void
+CommandRunner::CreateHtml_NewStyle()
+{
+ const ary::cpp::DisplayGate &
+ rGate = pReposy->DisplayGate_Cpp();
+
+ Dyn< autodoc::HtmlDisplay_UdkStd > pHtmlDisplay;
+ pHtmlDisplay = DisplayToolsFactory_Ifc::GetIt_()
+ .Create_HtmlDisplay_UdkStd();
+
+ pHtmlDisplay->Run( pCommandLine->Cmd_CreateHtml()->OutputDir(),
+ rGate,
+ DisplayToolsFactory_Ifc::GetIt_().Create_StdFrame() );
+}
+
+void
+CommandRunner::CreateHtml_OldIdlStyle()
+{
+ ary::idl::Gate &
+ rAryGate = pNewReposy->Gate_Idl();
+
+ // Read DevManualLinkFile:
+ // KORR_FUTURE
+ csv::File
+ aFile("devmanref.txt", csv::CFM_READ);
+ if ( aFile.open() )
+ {
+ rAryGate.Secondaries().Read_Links2DevManual(aFile);
+ aFile.close();
+ }
+
+ // New Style Output
+ Dyn<autodoc::HtmlDisplay_Idl_Ifc> pNewDisplay;
+ pNewDisplay = DisplayToolsFactory_Ifc::GetIt_()
+ .Create_HtmlDisplay_Idl();
+ pNewDisplay->Run( pCommandLine->Cmd_CreateHtml()->OutputDir(),
+ rAryGate,
+ DisplayToolsFactory_Ifc::GetIt_().Create_StdFrame() );
+}
+#endif // 0
+
+} // namespace autodoc
+
+
+
+