office-gobmx/autodoc/source/exes/adc_uni/adc_cmd_parse.cxx
Jens-Heiner Rechtien 342bff51ab INTEGRATION: CWS adc18 (1.8.2); FILE MERGED
2007/10/18 15:23:15 np 1.8.2.1: #i81775#
2007-11-02 15:43:19 +00:00

347 lines
8.4 KiB
C++

/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: adc_cmd_parse.cxx,v $
*
* $Revision: 1.9 $
*
* last change: $Author: hr $ $Date: 2007-11-02 16:43:19 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
*
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2005 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library 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 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
************************************************************************/
#include <precomp.h>
#include "adc_cmd_parse.hxx"
// NOT FULLY DEFINED SERVICES
#include <cosv/tpl/tpltools.hxx>
#include <adc_cl.hxx>
#include "adc_cmds.hxx"
#include "cmd_run.hxx"
namespace autodoc
{
namespace command
{
namespace
{
const String C_FileEnding_hxx("*.hxx");
const String C_FileEnding_h("*.h");
const String C_FileEnding_idl("*.idl");
const String C_FileEnding_java("*.java");
inline void
CHECK( bool b, const String & text )
{
if (NOT b)
throw X_CommandLine( text );
}
} // anonymous namespace
//************************** S_LanguageInfo ***********************//
S_LanguageInfo::~S_LanguageInfo()
{
}
void
S_LanguageInfo::do_Init( opt_iter & it,
opt_iter itEnd )
{
++it; // Cur is language.
CHECKOPT( it != itEnd AND
( *it == C_arg_Cplusplus OR
*it == C_arg_Idl OR
*it == C_arg_Java ),
"language",
C_opt_LangAll );
if ( *it == C_arg_Cplusplus )
eLanguage = cpp;
else if ( *it == C_arg_Idl )
eLanguage = idl;
else if ( *it == C_arg_Java )
eLanguage = java;
else
csv_assert(false);
switch (eLanguage)
{
case cpp: aExtensions.push_back( C_FileEnding_hxx );
aExtensions.push_back( C_FileEnding_h );
CommandLine::Get_().Set_CppUsed();
break;
case idl: aExtensions.push_back( C_FileEnding_idl );
CommandLine::Get_().Set_IdlUsed();
break;
case java: aExtensions.push_back( C_FileEnding_java );
break;
default: // do nothing.
;
}
++it; // Cur is next option.
}
void
S_LanguageInfo::InitExtensions( opt_iter & it,
opt_iter itEnd )
{
++it;
CHECKOPT( it != itEnd AND (*it).char_at(0) == '.',
"extensions",
C_opt_ExtensionsAll );
StreamLock slCheck(150);
slCheck() << C_opt_ExtensionsAll
<< " used without previous "
<< C_opt_LangAll;
CHECK( eLanguage != none,
slCheck().c_str() );
do {
aExtensions.push_back(*it);
++it;
} while (it != itEnd AND (*it).char_at(0) == '.');
}
//************************** Parse ***********************//
Parse::Parse()
: sRepositoryName(),
aGlobalLanguage(),
aProjects(),
sDevelopersManual_RefFilePath()
{
}
Parse::~Parse()
{
csv::erase_container_of_heap_ptrs(aProjects);
}
void
Parse::do_Init( opt_iter & it,
opt_iter itEnd )
{
for ( ; it != itEnd; )
{
if (*it == C_opt_Name)
do_clName(it, itEnd);
else if (*it == C_opt_LangAll)
aGlobalLanguage.Init(it, itEnd);
else if (*it == C_opt_ExtensionsAll)
aGlobalLanguage.InitExtensions(it, itEnd);
else if (*it == C_opt_DevmanFile)
do_clDevManual(it, itEnd);
else if (*it == C_opt_Project)
do_clProject(it, itEnd);
else if ( *it == C_opt_SourceTree
OR *it == C_opt_SourceDir
OR *it == C_opt_SourceFile )
do_clDefaultProject(it, itEnd);
else
break;
} // for
}
void
Parse::do_clName( opt_iter & it,
opt_iter itEnd )
{
++it;
CHECKOPT( it != itEnd AND (*it).char_at(0) != '-',
"name",
C_opt_Name );
sRepositoryName = *it;
++it;
}
void
Parse::do_clDevManual( opt_iter & it,
opt_iter itEnd )
{
++it;
CHECKOPT( it != itEnd AND (*it).char_at(0) != '-',
"link file path",
C_opt_DevmanFile );
sDevelopersManual_RefFilePath = *it;
++it;
}
void
Parse::do_clProject( opt_iter & it,
opt_iter itEnd )
{
if ( aProjects.size() == 1 )
{
if ( aProjects.front()->IsDefault() )
throw X_CommandLine( "Both, named projects and a default project, cannot be used together." );
}
S_ProjectData * dpProject = new S_ProjectData(aGlobalLanguage);
++it;
dpProject->Init(it, itEnd);
aProjects.push_back(dpProject);
}
void
Parse::do_clDefaultProject( opt_iter & it,
opt_iter itEnd )
{
if ( aProjects.size() > 0 )
{
throw X_CommandLine( "Both, named projects and a default project, cannot be used together." );
}
S_ProjectData * dpProject = new S_ProjectData( aGlobalLanguage,
S_ProjectData::default_prj );
dpProject->Init(it, itEnd);
aProjects.push_back(dpProject);
}
bool
Parse::do_Run() const
{
run::Parser
aParser(*this);
return aParser.Perform();
}
int
Parse::inq_RunningRank() const
{
return static_cast<int>(rank_Parse);
}
//************************** S_Sources ***********************//
void
S_Sources::do_Init( opt_iter & it,
opt_iter itEnd )
{
StringVector *
pList = 0;
csv_assert((*it)[0] == '-');
for ( ; it != itEnd; ++it)
{
if ((*it)[0] == '-')
{
if (*it == C_opt_SourceTree)
pList = &aTrees;
else if (*it == C_opt_SourceDir)
pList = &aDirectories;
else if (*it == C_opt_SourceFile)
pList = &aFiles;
else
return;
}
else
pList->push_back(*it);
} // end for
}
//************************** S_ProjectData ***********************//
S_ProjectData::S_ProjectData( const S_LanguageInfo & i_globalLanguage )
: sName(),
aRootDirectory(),
aLanguage(i_globalLanguage),
aFiles(),
bIsDefault(false)
{
}
S_ProjectData::S_ProjectData( const S_LanguageInfo & i_globalLanguage,
E_Default )
: sName(),
aRootDirectory("."),
aLanguage(i_globalLanguage),
aFiles(),
bIsDefault(true)
{
}
S_ProjectData::~S_ProjectData()
{
}
void
S_ProjectData::do_Init( opt_iter & it,
opt_iter itEnd )
{
if (NOT IsDefault())
{
CHECKOPT( it != itEnd AND (*it).char_at(0) != '-',
"name",
C_opt_Project );
sName = *it;
++it;
CHECKOPT( it != itEnd AND (*it).char_at(0) != '-',
"root directory",
C_opt_Project );
aRootDirectory.Set((*it).c_str(), true);
++it;
}
for ( ; it != itEnd; )
{
if ( *it == C_opt_SourceTree
OR *it == C_opt_SourceDir
OR *it == C_opt_SourceFile )
aFiles.Init(it, itEnd);
// else if (*it == C_opt_Lang)
// aLanguage.Init(it, itEnd);
// else if (*it == C_opt_Extensions)
// aLanguage.InitExtensions(it, itEnd);
else
break;
} // for
}
} // namespace command
} // namespace autodoc