KDevelop API Documentation

doxydoc.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002 *   Copyright (C) 2003 by Jonas B. Jacobi                                 *
00003 *   j.jacobi@gmx.de                                                       *
00004 *                                                                         *
00005 *   This program is free software; you can redistribute it and/or modify  *
00006 *   it under the terms of the GNU General Public License as published by  *
00007 *   the Free Software Foundation; either version 2 of the License, or     *
00008 *   (at your option) any later version.                                   *
00009 ***************************************************************************/
00010 #include "doxydoc.h"
00011 
00012 #include <list>
00013 
00014 #include <qstring.h>
00015 #include <qstringlist.h>
00016 #include <qdom.h>
00017 #include <qdir.h>
00018 #include <qfile.h>
00019 #include <qregexp.h>
00020 
00021 void DoxyDoc::formatType( QString& str ) {
00022     str.replace( QRegExp(" "),"" );
00023 }
00024 
00025 DoxyDoc::DoxyDoc( const QStringList& dir ) {
00026     for (uint i = 0; i < dir.count(); ++i)
00027         m_dirs.push_back(QDir(*(dir.at(i))));
00028 }
00029 
00030 //crappy implementation, change later
00031 QString DoxyDoc::functionDescription( const QString& tmpscope, const QString& name, const QString& tmptype, const QString& tmparguments) {
00032     QString scope = tmpscope;
00033     bool foundfile = false;
00034     //produce doxygen conform filenames
00035     QString filename = "/class" + scope.replace(QRegExp("_"), "__").replace( QRegExp("::"), "_1_1" ) + ".xml";
00036 
00037     //search for file in all directories
00038     for (std::list<QDir>::const_iterator ci = m_dirs.begin(); !foundfile && ci != m_dirs.end(); ++ci){
00039         if (QFile::exists( ci->path() + filename)){
00040             if ( m_file.name() != ci->path() + filename ) {
00041                 m_file.close();
00042                 m_file.setName( ci->path() + filename );
00043                 if ( !m_file.open( IO_ReadOnly ) ) {
00044                     m_file.setName( "" );
00045                     return "";
00046                 }
00047                 QDomDocument m_doc;
00048                 m_doc.setContent( m_file.readAll() );
00049                 m_file.close();
00050                 m_list = m_doc.elementsByTagName( "memberdef" );
00051                 foundfile = true;
00052 
00053             } else //file is already opened
00054                 foundfile = true;
00055         }
00056     }
00057     if (!foundfile)
00058         return QString::null;
00059 
00060     QString type = tmptype;
00061     formatType( type );
00062 
00063     for ( uint i = 0; i < m_list.count(); ++i ) {
00064 
00065         QDomElement elem = m_list.item(i).toElement();
00066         if ((elem.elementsByTagName("name").item(0).toElement().text() == name) && elem.elementsByTagName("type").item(0).toElement().text() == tmptype){
00067                 QDomNodeList paramnodes = elem.elementsByTagName("param");
00068                 QString nodearguments = "", arguments = tmparguments;
00069                 for (unsigned int j = 0; j < paramnodes.count(); ++j )
00070                     nodearguments += paramnodes.item( j ).childNodes().item( 0 ).toElement().text() + ",";
00071                 if ( nodearguments != "") {
00072                     nodearguments = nodearguments.left( nodearguments.length() - 1 );
00073                     formatType( nodearguments );
00074                 }
00075                 formatType(arguments);
00076                 if ( arguments == nodearguments ) {
00077                 QString brief = "";
00078                 QDomNode briefnode = elem.elementsByTagName("briefdescription").item(0);
00079                 if (briefnode.hasChildNodes())
00080                     brief = briefnode.firstChild().toElement().text();
00081 
00082                 QString detailstr = "", paramstr = "";
00083                 QDomNode detail = elem.elementsByTagName("detaileddescription").item(0);
00084                 if (detail.hasChildNodes())
00085                     detail = detail.firstChild();
00086 
00087                 QDomNode descnode = detail.firstChild();
00088                 while (!descnode.isNull()){
00089                     if (descnode.nodeName() == "parameterlist"){
00090                         int tmpcount = descnode.childNodes().count();
00091                         for (int k = 0; k < tmpcount; ++k){
00092                             //add parametername
00093                             paramstr += "<li><i>" + descnode.childNodes().item(k++).toElement().text() + "</i>\t";
00094                             //add parameterdescription
00095                             paramstr += descnode.childNodes().item(k).toElement().text() + "</li>";
00096                         }
00097                     } else
00098                     if (descnode.nodeName() == "simplesect"){
00099                     } else {
00100                         if (descnode.isText())
00101                             detailstr += descnode.toText().data();
00102                         else
00103                             detailstr += descnode.toElement().text();
00104                     }
00105                     descnode = descnode.nextSibling();
00106                 }
00107 
00108 
00109                 QString description = "";
00110                 if (brief != "")
00111                     description += brief + "<p>";
00112                 if (detailstr != "")
00113                     description += detailstr + "<p>";
00114                 if (paramstr != "")
00115                     description += "<b>Parameterlist:</b><p>" + paramstr;
00116 
00117                 if (description == "")
00118                     return QString::null;
00119                 else
00120                     return description;
00121             }
00122         }
00123 
00124     }
00125 
00126     return QString::null;
00127 }
00128 
00129 
KDE Logo
This file is part of the documentation for KDevelop Version 3.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Feb 22 09:22:30 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003