summaryrefslogtreecommitdiffstats
path: root/languages/php/phpparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'languages/php/phpparser.cpp')
-rw-r--r--languages/php/phpparser.cpp160
1 files changed, 160 insertions, 0 deletions
diff --git a/languages/php/phpparser.cpp b/languages/php/phpparser.cpp
new file mode 100644
index 00000000..b13c5479
--- /dev/null
+++ b/languages/php/phpparser.cpp
@@ -0,0 +1,160 @@
+/*
+ Copyright (C) 2005 by Nicolas Escuder <[email protected]>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ version 2, License 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "phpparser.h"
+#include "phpsupportpart.h"
+#include <urlutil.h>
+
+#include <kapplication.h>
+#include <kdevcore.h>
+#include <kdevproject.h>
+#include <codemodel.h>
+
+#include <qregexp.h>
+#include <kdebug.h>
+
+#include <qfileinfo.h>
+#include <qtextstream.h>
+
+#include <iostream>
+
+#include "phpsupport_event.h"
+
+using namespace std;
+
+PHPParser::PHPParser(PHPSupportPart *part){
+ m_part = part;
+ m_close = false;
+}
+
+PHPParser::~PHPParser(){
+ removeAllFiles();
+}
+
+bool PHPParser::hasFile( const QString& fileName )
+{
+// kdDebug(9018) << "hasFile " << fileName.latin1() << endl;
+ QString abso = URLUtil::canonicalPath(fileName);
+ QMap<QString, PHPFile *>::Iterator it = m_files.find(abso);
+
+ if ( it == m_files.end() )
+ return false;
+ return true;
+}
+
+void PHPParser::addFile( const QString& fileName )
+{
+ QString abso = URLUtil::canonicalPath(fileName);
+
+ if ( hasFile(abso) )
+ return;
+
+ kdDebug(9018) << "addFile " << fileName.latin1() << endl;
+
+ QFileInfo fi( abso );
+ if ((fi.extension().contains("inc") || fi.extension().contains("php") || fi.extension().contains("html") || fi.extension().contains("php3") || !fi.extension()) && !fi.extension().contains("~")) {
+ m_files.insert(abso, new PHPFile(m_part, abso));
+ }
+}
+
+void PHPParser::removeFile( const QString& fileName )
+{
+// kdDebug(9018) << "removeFile " << fileName.latin1() << endl;
+ QString abso = URLUtil::canonicalPath(fileName);
+ QMap<QString, PHPFile *>::Iterator it = m_files.find(abso);
+
+ if ( it != m_files.end()) {
+ PHPFile *file = it.data();
+ m_files.remove( abso );
+ delete( file );
+ file = 0;
+ }
+}
+
+void PHPParser::removeAllFiles()
+{
+ kdDebug(9018) << "removeAllFiles" << endl;
+ QMap<QString, PHPFile *>::Iterator it = m_files.begin();
+
+ while( it != m_files.end() ){
+ PHPFile * file = it.data();
+ ++it;
+ delete( file );
+ file = 0;
+ }
+ m_files.clear();
+}
+
+void PHPParser::reparseFile( const QString& fileName )
+{
+ kdDebug(9018) << "reparseFile" << endl;
+ QString abso = URLUtil::canonicalPath(fileName);
+ QMap<QString, PHPFile *>::Iterator it = m_files.find(abso);
+
+ if ( it != m_files.end()) {
+ PHPFile *file = it.data();
+ file->setModified(true);
+ file = 0;
+ }
+ m_canParse.wakeAll();
+}
+
+void PHPParser::run() {
+ kdDebug(9018) << "run thread " << QThread::currentThread() << endl;
+ QMap<QString, PHPFile *>::Iterator it;
+
+ while ( !m_close ) {
+ m_canParse.wait();
+
+ if ( m_close )
+ break;
+
+ it = m_files.begin();
+
+ while( it != m_files.end() ){
+ PHPFile * file = it.data();
+ if (!m_close) {
+ if ( file->isModified() ) {
+ file->Analyse();
+ it = m_files.begin();
+ } else {
+ ++it;
+ }
+ file = 0;
+ } else {
+ it = m_files.end();
+ }
+ }
+ }
+}
+
+void PHPParser::close()
+{
+ kdDebug(9018) << "closing thread" << endl;
+ m_close = true;
+ m_canParse.wakeAll();
+
+ while (running()) {
+ kapp->processEvents();
+ }
+}
+
+void PHPParser::startParse() {
+ kdDebug(9018) << "startParse" << endl;
+ m_canParse.wakeAll();
+}