|
|
|
/***************************************************************************
|
|
|
|
* Copyright (C) 2003 by Jonas B. Jacobi *
|
|
|
|
* j.jacobi@gmx.de *
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
***************************************************************************/
|
|
|
|
#include "doxydoc.h"
|
|
|
|
|
|
|
|
#include <list>
|
|
|
|
|
|
|
|
#include <tqstring.h>
|
|
|
|
#include <tqstringlist.h>
|
|
|
|
#include <tqdom.h>
|
|
|
|
#include <tqdir.h>
|
|
|
|
#include <tqfile.h>
|
|
|
|
#include <tqregexp.h>
|
|
|
|
|
|
|
|
void DoxyDoc::formatType( TQString& str )
|
|
|
|
{
|
|
|
|
str.replace( TQRegExp( " " ), "" );
|
|
|
|
}
|
|
|
|
|
|
|
|
DoxyDoc::DoxyDoc( const TQStringList& dir )
|
|
|
|
{
|
|
|
|
for ( uint i = 0; i < dir.count(); ++i )
|
|
|
|
m_dirs.push_back( TQDir( *( dir.at( i ) ) ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
//crappy implementation, change later
|
|
|
|
TQString DoxyDoc::functionDescription( const TQString& tmpscope, const TQString& name,
|
|
|
|
const TQString& tmptype, const TQString& tmparguments )
|
|
|
|
{
|
|
|
|
TQString scope = tmpscope;
|
|
|
|
bool foundfile = false;
|
|
|
|
//produce doxygen conform filenames
|
|
|
|
TQString filename = "/class" + scope.replace( TQRegExp( "_" ), "__" ).replace( TQRegExp( "::" ), "_1_1" ) + ".xml";
|
|
|
|
|
|
|
|
//search for file in all directories
|
|
|
|
for ( std::list<TQDir>::const_iterator ci = m_dirs.begin(); !foundfile && ci != m_dirs.end(); ++ci )
|
|
|
|
{
|
|
|
|
if ( TQFile::exists( ci->path() + filename ) )
|
|
|
|
{
|
|
|
|
if ( m_file.name() != ci->path() + filename )
|
|
|
|
{
|
|
|
|
m_file.close();
|
|
|
|
m_file.setName( ci->path() + filename );
|
|
|
|
if ( !m_file.open( IO_ReadOnly ) )
|
|
|
|
{
|
|
|
|
m_file.setName( "" );
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
TQDomDocument m_doc;
|
|
|
|
m_doc.setContent( m_file.readAll() );
|
|
|
|
m_file.close();
|
|
|
|
m_list = m_doc.elementsByTagName( "memberdef" );
|
|
|
|
foundfile = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
else //file is already opened
|
|
|
|
foundfile = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ( !foundfile )
|
|
|
|
return TQString::null;
|
|
|
|
|
|
|
|
TQString type = tmptype;
|
|
|
|
formatType( type );
|
|
|
|
|
|
|
|
for ( uint i = 0; i < m_list.count(); ++i )
|
|
|
|
{
|
|
|
|
TQDomElement elem = m_list.item( i ).toElement();
|
|
|
|
if ( elem.elementsByTagName( "name" ).item( 0 ).toElement().text() == name &&
|
|
|
|
elem.elementsByTagName( "type" ).item( 0 ).toElement().text() == tmptype )
|
|
|
|
{
|
|
|
|
TQDomNodeList paramnodes = elem.elementsByTagName( "param" );
|
|
|
|
TQString nodearguments = "", arguments = tmparguments;
|
|
|
|
for ( unsigned int j = 0; j < paramnodes.count(); ++j )
|
|
|
|
nodearguments += paramnodes.item( j ).childNodes().item( 0 ).toElement().text() + ",";
|
|
|
|
if ( nodearguments != "" )
|
|
|
|
{
|
|
|
|
nodearguments = nodearguments.left( nodearguments.length() - 1 );
|
|
|
|
formatType( nodearguments );
|
|
|
|
}
|
|
|
|
formatType( arguments );
|
|
|
|
if ( arguments == nodearguments )
|
|
|
|
{
|
|
|
|
TQString brief = "";
|
|
|
|
TQDomNode briefnode = elem.elementsByTagName( "briefdescription" ).item( 0 );
|
|
|
|
if ( briefnode.hasChildNodes() )
|
|
|
|
brief = briefnode.firstChild().toElement().text();
|
|
|
|
|
|
|
|
TQString detailstr = "", paramstr = "";
|
|
|
|
TQDomNode detail = elem.elementsByTagName( "detaileddescription" ).item( 0 );
|
|
|
|
if ( detail.hasChildNodes() )
|
|
|
|
detail = detail.firstChild();
|
|
|
|
|
|
|
|
TQDomNode descnode = detail.firstChild();
|
|
|
|
while ( !descnode.isNull() )
|
|
|
|
{
|
|
|
|
if ( descnode.nodeName() == "parameterlist" )
|
|
|
|
{
|
|
|
|
int tmpcount = descnode.childNodes().count();
|
|
|
|
for ( int k = 0; k < tmpcount; ++k )
|
|
|
|
{
|
|
|
|
//add parametername
|
|
|
|
paramstr += "<li><i>" + descnode.childNodes().item( k++ ).toElement().text() + "</i>\t";
|
|
|
|
//add parameterdescription
|
|
|
|
paramstr += descnode.childNodes().item( k ).toElement().text() + "</li>";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
if ( descnode.nodeName() == "simplesect" )
|
|
|
|
{}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( descnode.isText() )
|
|
|
|
detailstr += descnode.toText().data();
|
|
|
|
else
|
|
|
|
detailstr += descnode.toElement().text();
|
|
|
|
}
|
|
|
|
descnode = descnode.nextSibling();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
TQString description = "";
|
|
|
|
if ( brief != "" )
|
|
|
|
description += brief + "<p>";
|
|
|
|
if ( detailstr != "" )
|
|
|
|
description += detailstr + "<p>";
|
|
|
|
if ( paramstr != "" )
|
|
|
|
description += "<b>Parameterlist:</b><p>" + paramstr;
|
|
|
|
|
|
|
|
if ( description == "" )
|
|
|
|
return TQString::null;
|
|
|
|
else
|
|
|
|
return description;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return TQString::null;
|
|
|
|
}
|
|
|
|
|
|
|
|
//kate: indent-mode csands; tab-width 4; space-indent off;
|