1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
/* KDevelop CMake Support
*
* Copyright 2006 Matt Rogers <mattr@kde.org>
* Copyright 2007 Aleix Pol Gonzalez <aleixpol@gmail.com>
*
* 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.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
#ifndef CMAKELISTSPARSER_H
#define CMAKELISTSPARSER_H
#include <QList>
#include <QObject>
#include <QMetaType>
#include <QStringList>
#include <QString>
#include <language/editor/simplerange.h>
#include <KUrl>
// #include "cmakemodelitems.h"
#include "cmListFileLexer.h"
#include <cmakeexport.h>
#include <language/editor/rangeinrevision.h>
struct CMakeFunctionArgument
{
CMakeFunctionArgument(): value(), quoted(false), line(0), column(0) {}
CMakeFunctionArgument(const QString& v, bool q = false,
const QString& file = QString(), quint32 l = 0, quint32 c=0);
inline bool operator == (const CMakeFunctionArgument& r) const
{
return (this->value == r.value) && (this->quoted == r.quoted);
}
inline bool operator != (const CMakeFunctionArgument& r) const
{
return (this->value != r.value) || (this->quoted != r.quoted);
}
bool operator==( const QString& rhs )
{
return ( this->value == rhs );
}
bool isCorrect() const { return column>0; }
static QString unescapeValue(const QString& value);
KDevelop::RangeInRevision range() const
{ return KDevelop::RangeInRevision(line-1, column-1, line-1, column+value.length()-1); }
bool isValid() const { return quoted || !value.isEmpty(); }
QString value;
bool quoted;
quint32 line;
quint32 column;
static const QMap<QChar, QChar> scapings;
};
Q_DECLARE_METATYPE( CMakeFunctionArgument )
class KDEVCMAKECOMMON_EXPORT CMakeFunctionDesc
{
public:
QString name;
QList<CMakeFunctionArgument> arguments;
QString filePath;
quint32 line;
quint32 column;
quint32 endLine;
quint32 endColumn;
/* int numSpacesBeforeLeftParen;
int numSpacesAfterLeftParen;
int numSpacesBeforeRightParen; */
KDevelop::RangeInRevision nameRange() const
{ return KDevelop::RangeInRevision(line-1, column-1, line-1, column-1+name.length()); }
KDevelop::RangeInRevision range() const
{ return KDevelop::RangeInRevision(line-1, column-1, endLine-1, endColumn); }
KDevelop::RangeInRevision argRange() const
{
if( !arguments.isEmpty() )
{
return KDevelop::RangeInRevision(arguments.first().range().start,
arguments.last().range().end);
} else
{
return KDevelop::RangeInRevision( line-1, column-1, endLine-1, endColumn);
}
}
bool operator==(const CMakeFunctionDesc &other) const;
void addArguments( const QStringList&, bool addEvenIfEmpty=true );
QString writeBack() const;
};
Q_DECLARE_METATYPE( CMakeFunctionDesc )
/**
* CMake files function descriptor collector
* @author Matt Rogers <mattr@kde.org>
* @author Aleix Pol <aleixpol@gmail.com>
*/
typedef QList<CMakeFunctionDesc> CMakeFileContent;
class KDEVCMAKECOMMON_EXPORT CMakeListsParser : public QObject
{
public:
CMakeListsParser(QObject *parent = 0) : QObject(parent) {}
~CMakeListsParser() {}
static CMakeFileContent readCMakeFile(const QString& fileName);
private:
static bool readCMakeFunction( cmListFileLexer*,
CMakeFunctionDesc&,
const QString& fileName);
};
#endif
|