summaryrefslogtreecommitdiffstats
path: root/languages/csharp
diff options
context:
space:
mode:
Diffstat (limited to 'languages/csharp')
-rw-r--r--languages/csharp/Makefile.am25
-rw-r--r--languages/csharp/README.dox46
-rw-r--r--languages/csharp/app_templates/Makefile.am3
-rw-r--r--languages/csharp/app_templates/csharp.appwizard2
-rw-r--r--languages/csharp/csharpconfigwidget.cpp38
-rw-r--r--languages/csharp/csharpconfigwidget.h34
-rw-r--r--languages/csharp/csharpconfigwidgetbase.ui101
-rw-r--r--languages/csharp/csharpdoc.cpp133
-rw-r--r--languages/csharp/csharpdoc.h25
-rw-r--r--languages/csharp/csharpdoc.protocol9
-rw-r--r--languages/csharp/csharpsupportpart.cpp331
-rw-r--r--languages/csharp/csharpsupportpart.h59
-rw-r--r--languages/csharp/doc/Makefile.am6
-rw-r--r--languages/csharp/file_templates/Makefile.am4
-rw-r--r--languages/csharp/kdevcsharpsupport.desktop57
-rw-r--r--languages/csharp/kdevcsharpsupport.rc14
16 files changed, 887 insertions, 0 deletions
diff --git a/languages/csharp/Makefile.am b/languages/csharp/Makefile.am
new file mode 100644
index 00000000..51d0c110
--- /dev/null
+++ b/languages/csharp/Makefile.am
@@ -0,0 +1,25 @@
+# Here resides the CSharp support part.
+
+INCLUDES = -I$(top_srcdir)/lib/interfaces \
+ -I$(top_srcdir)/lib/interfaces/extensions -I$(top_srcdir)/lib/interfaces/external -I$(top_srcdir)/lib/util \
+ $(all_includes)
+SUBDIRS = app_templates file_templates doc
+
+
+kde_module_LTLIBRARIES = libkdevcsharpsupport.la kio_csharpdoc.la
+libkdevcsharpsupport_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
+libkdevcsharpsupport_la_LIBADD = $(top_builddir)/lib/libkdevelop.la
+
+libkdevcsharpsupport_la_SOURCES = csharpsupportpart.cpp csharpconfigwidget.cpp csharpconfigwidgetbase.ui
+
+kio_csharpdoc_la_SOURCES = csharpdoc.cpp
+kio_csharpdoc_la_LIBADD = $(LIB_KIO)
+kio_csharpdoc_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
+
+METASOURCES = AUTO
+
+servicedir = $(kde_servicesdir)
+service_DATA = kdevcsharpsupport.desktop csharpdoc.protocol
+
+rcdir = $(kde_datadir)/kdevcsharpsupport
+rc_DATA = kdevcsharpsupport.rc
diff --git a/languages/csharp/README.dox b/languages/csharp/README.dox
new file mode 100644
index 00000000..6d256b08
--- /dev/null
+++ b/languages/csharp/README.dox
@@ -0,0 +1,46 @@
+/** \class CSharpSupportPart
+This is csharp language support plugin.
+
+Put a more detailed description of your part in these lines. It can span
+over several lines. You can even use some html commands in these lines like:
+<code>This is code</code>, html links <a href="http://somelocation">link text</a>,
+and images.
+
+\authors <a href="mailto:bernd AT kdevelop.org">Bernd Gehrmann</a>
+\authors <a href="mailto:willems.luc AT pandora.be">Luc Willems</a>
+
+\maintainer <a href="mailto:willems.luc AT pandora.be">Luc Willems</a>
+
+\feature csharp programming language support
+\feature Consult \ref LangSupportStatus for a up to date features/status of this programming language support part.
+
+\bug Describe a the 1st bug that you know of, but probably hasn't been reported yet.
+..
+\bug Describe a the nth bug that you know of, but probably hasn't been reported yet.
+
+\requirement Describe a the 1st requirement of your part.
+\requirement Describe a the 2nd requirement of your part.
+...
+\requirement Describe a the nth requirement of your part.
+
+\todo Describe a the 1st TODO of your part.
+\todo Describe a the 2nd TODO of your part.
+...
+\todo Describe a the nth TODO of your part.
+
+\faq <b>First frequenly asked question about your part ?</b> Answer.
+\faq <b>Second frequenly asked question about your part ?</b> Answer.
+...
+\faq <b>Last frequenly asked question about your part ?</b> Answer.
+
+\note First note text.
+\note Second note text.
+...
+\note Last note text.
+
+\warning First warning text.
+\warning Second warning text.
+...
+\warning Last warning text.
+
+*/
diff --git a/languages/csharp/app_templates/Makefile.am b/languages/csharp/app_templates/Makefile.am
new file mode 100644
index 00000000..14608ada
--- /dev/null
+++ b/languages/csharp/app_templates/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS =
+profilesdir = $(kde_datadir)/kdevelop/profiles/IDE/ScriptingLanguageIDE/CSharpIDE
+profiles_DATA = csharp.appwizard
diff --git a/languages/csharp/app_templates/csharp.appwizard b/languages/csharp/app_templates/csharp.appwizard
new file mode 100644
index 00000000..44c9faf9
--- /dev/null
+++ b/languages/csharp/app_templates/csharp.appwizard
@@ -0,0 +1,2 @@
+[General]
+List=perlhello
diff --git a/languages/csharp/csharpconfigwidget.cpp b/languages/csharp/csharpconfigwidget.cpp
new file mode 100644
index 00000000..b18d3e69
--- /dev/null
+++ b/languages/csharp/csharpconfigwidget.cpp
@@ -0,0 +1,38 @@
+/***************************************************************************
+ * Copyright (C) 2002 by Bernd Gehrmann *
+ * bernd@kdevelop.org *
+ * *
+ * 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 "csharpconfigwidget.h"
+
+#include <qcheckbox.h>
+#include <klineedit.h>
+#include "domutil.h"
+
+
+CSharpConfigWidget::CSharpConfigWidget(QDomDocument &projectDom,
+ QWidget *parent, const char *name)
+ : CSharpConfigWidgetBase(parent, name), dom(projectDom)
+{
+ interpreter_edit->setText(DomUtil::readEntry(dom, "/kdevcsharpsupport/run/interpreter"));
+ terminal_box->setChecked(DomUtil::readBoolEntry(dom, "/kdevcsharpsupport/run/terminal"));
+}
+
+
+CSharpConfigWidget::~CSharpConfigWidget()
+{}
+
+
+void CSharpConfigWidget::accept()
+{
+ DomUtil::writeEntry(dom, "/kdevcsharpsupport/run/interpreter", interpreter_edit->text());
+ DomUtil::writeBoolEntry(dom, "/kdevcsharpsupport/run/terminal", terminal_box->isChecked());
+}
+
+#include "csharpconfigwidget.moc"
diff --git a/languages/csharp/csharpconfigwidget.h b/languages/csharp/csharpconfigwidget.h
new file mode 100644
index 00000000..bf1b063e
--- /dev/null
+++ b/languages/csharp/csharpconfigwidget.h
@@ -0,0 +1,34 @@
+/***************************************************************************
+ * Copyright (C) 2002 by Bernd Gehrmann *
+ * bernd@kdevelop.org *
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef _CSHARPCONFIGWIDGET_H_
+#define _CSHARPCONFIGWIDGET_H_
+
+#include "csharpconfigwidgetbase.h"
+#include <qdom.h>
+
+
+class CSharpConfigWidget : public CSharpConfigWidgetBase
+{
+ Q_OBJECT
+
+public:
+ CSharpConfigWidget( QDomDocument &projectDom, QWidget *parent=0, const char *name=0 );
+ ~CSharpConfigWidget();
+
+public slots:
+ void accept();
+
+private:
+ QDomDocument &dom;
+};
+
+#endif
diff --git a/languages/csharp/csharpconfigwidgetbase.ui b/languages/csharp/csharpconfigwidgetbase.ui
new file mode 100644
index 00000000..dbf4d3ae
--- /dev/null
+++ b/languages/csharp/csharpconfigwidgetbase.ui
@@ -0,0 +1,101 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>CSharpConfigWidgetBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>csharp_config_widget</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>CSharp</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>interpreter_label</cstring>
+ </property>
+ <property name="text">
+ <string>CSharp &amp;interpreter:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>interpreter_edit</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>interpreter_edit</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Minimum</enum>
+ </property>
+ </spacer>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>terminal_box</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Execute programs in a terminal</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<includes>
+ <include location="global" impldecl="in implementation">kdialog.h</include>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+<layoutfunctions spacing="KDialog::spacingHint" margin="KDialog::marginHint"/>
+</UI>
diff --git a/languages/csharp/csharpdoc.cpp b/languages/csharp/csharpdoc.cpp
new file mode 100644
index 00000000..8755be2b
--- /dev/null
+++ b/languages/csharp/csharpdoc.cpp
@@ -0,0 +1,133 @@
+#include "csharpdoc.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <qtextstream.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kinstance.h>
+#include <kprocess.h>
+#include <kdeversion.h>
+#include <kglobal.h>
+
+using namespace KIO;
+
+
+CSharpdocProtocol::CSharpdocProtocol(const QCString &pool, const QCString &app)
+ : SlaveBase("csharpdoc", pool, app)
+{}
+
+
+CSharpdocProtocol::~CSharpdocProtocol()
+{}
+
+
+void CSharpdocProtocol::get(const KURL& url)
+{
+ QStringList l = QStringList::split('/', url.path());
+
+ mimeType("text/html");
+
+ bool plain = false;
+ QString cmd = "csharpdoc ";
+ if (l[0] == "functions") {
+ plain = true;
+ cmd += "-t -f ";
+ cmd += KProcess::quote(l[1]);
+ } else if (l[0] == "faq") {
+ cmd += "-u -q ";
+ cmd += KProcess::quote(l[1]);
+ cmd += " | pod2html";
+ } else {
+ QCString errstr(i18n("The only existing directories are functions and faq.").local8Bit());
+ data(errstr);
+ finished();
+ return;
+ }
+
+ kdDebug() << "Command: " << cmd << endl;
+
+ if (plain)
+ data(QCString("<blockquote>"));
+
+ FILE *fd = popen(cmd.local8Bit().data(), "r");
+ char buffer[4090];
+ QByteArray array;
+
+ while (!feof(fd)) {
+ int n = fread(buffer, 1, 2048, fd);
+ if (n == -1) {
+ pclose(fd);
+ return;
+ }
+ array.setRawData(buffer, n);
+ data(array);
+ array.resetRawData(buffer, n);
+ }
+
+ pclose(fd);
+
+ if (plain)
+ data(QCString("</blockquote>"));
+
+ finished();
+}
+
+
+void CSharpdocProtocol::mimetype(const KURL &url)
+{
+ QStringList l = QStringList::split('/', url.path());
+ mimeType((l[0] == "faq")? "text/html" : "text/plain");
+ finished();
+}
+
+
+QCString CSharpdocProtocol::errorMessage()
+{
+ return QCString( "<html><body bgcolor=\"#FFFFFF\">" + i18n("Error in csharpdoc").local8Bit() + "</body></html>" );
+}
+
+
+void CSharpdocProtocol::stat(const KURL &/*url*/)
+{
+ UDSAtom uds_atom;
+ uds_atom.m_uds = KIO::UDS_FILE_TYPE;
+ uds_atom.m_long = S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO;
+
+ UDSEntry uds_entry;
+ uds_entry.append(uds_atom);
+
+ statEntry(uds_entry);
+ finished();
+}
+
+
+void CSharpdocProtocol::listDir(const KURL &url)
+{
+ error( KIO::ERR_CANNOT_ENTER_DIRECTORY, url.path() );
+}
+
+
+extern "C" {
+
+ int kdemain(int argc, char **argv)
+ {
+ KInstance instance( "kio_csharpdoc" );
+ KGlobal::locale()->setMainCatalogue("kdevelop");
+
+ if (argc != 4) {
+ fprintf(stderr, "Usage: kio_csharpdoc protocol domain-socket1 domain-socket2\n");
+ exit(-1);
+ }
+
+ CSharpdocProtocol slave(argv[2], argv[3]);
+ slave.dispatchLoop();
+
+ return 0;
+ }
+
+}
diff --git a/languages/csharp/csharpdoc.h b/languages/csharp/csharpdoc.h
new file mode 100644
index 00000000..85fa8cf5
--- /dev/null
+++ b/languages/csharp/csharpdoc.h
@@ -0,0 +1,25 @@
+#ifndef _CSHARPDOC_H_
+#define _CSHARPDOC_H_
+
+#include <qobject.h>
+#include <kio/slavebase.h>
+
+
+class CSharpdocProtocol : public KIO::SlaveBase
+{
+public:
+ CSharpdocProtocol(const QCString &pool, const QCString &app);
+ virtual ~CSharpdocProtocol();
+
+ virtual void get(const KURL& url);
+ virtual void stat(const KURL& url);
+ virtual void mimetype(const KURL& url);
+ virtual void listDir(const KURL& url);
+
+protected:
+ void decodeURL(const KURL &url);
+ void decodePath(QString path);
+ QCString errorMessage();
+};
+
+#endif
diff --git a/languages/csharp/csharpdoc.protocol b/languages/csharp/csharpdoc.protocol
new file mode 100644
index 00000000..9b813b02
--- /dev/null
+++ b/languages/csharp/csharpdoc.protocol
@@ -0,0 +1,9 @@
+[Protocol]
+exec=kio_csharpdoc
+protocol=csharpdoc
+input=none
+output=filesystem
+reading=true
+listing=Name
+determineMimetypeFromExtension=false
+Icon=help
diff --git a/languages/csharp/csharpsupportpart.cpp b/languages/csharp/csharpsupportpart.cpp
new file mode 100644
index 00000000..01a21ffb
--- /dev/null
+++ b/languages/csharp/csharpsupportpart.cpp
@@ -0,0 +1,331 @@
+/***************************************************************************
+ * Copyright (C) 2001-2002 by Bernd Gehrmann *
+ * bernd@kdevelop.org *
+ * *
+ * 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 "csharpsupportpart.h"
+
+#include <qfileinfo.h>
+#include <qpopupmenu.h>
+#include <qstringlist.h>
+#include <qtextstream.h>
+#include <qtimer.h>
+#include <kaction.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kdevgenericfactory.h>
+#include <kinputdialog.h>
+#include <klocale.h>
+#include <qregexp.h>
+#include <codemodel.h>
+#include <qprogressbar.h>
+#include <kstatusbar.h>
+#include "kdevmainwindow.h"
+
+#include <kprocess.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "kdevcore.h"
+#include "kdevproject.h"
+#include "kdevpartcontroller.h"
+#include "kdevplugininfo.h"
+#include "kdevappfrontend.h"
+//#include "classstore.h"
+//#include "parsedclass.h"
+//#include "parsedmethod.h"
+//#include "parsedscript.h"
+#include "domutil.h"
+//#include "programmingbycontract.h"
+
+typedef KDevGenericFactory<CSharpSupportPart> CSharpSupportFactory;
+static const KDevPluginInfo data("kdevcsharpsupport");
+K_EXPORT_COMPONENT_FACTORY( libkdevcsharpsupport, CSharpSupportFactory( data ) )
+
+CSharpSupportPart::CSharpSupportPart(QObject *parent, const char *name, const QStringList &)
+ : KDevLanguageSupport(&data, parent, name ? name : "CSharpSupportPart")
+{
+ setInstance(CSharpSupportFactory::instance());
+
+ setXMLFile("kdevcsharpsupport.rc");
+
+ connect( core(), SIGNAL(projectOpened()), this, SLOT(projectOpened()) );
+ connect( core(), SIGNAL(projectClosed()), this, SLOT(projectClosed()) );
+ connect( partController(), SIGNAL(savedFile(const KURL&)),
+ this, SLOT(savedFile(const KURL&)) );
+
+ KAction *action;
+
+ action = new KAction( i18n("Execute Main Program"), "exec", 0,
+ this, SLOT(slotExecute()),
+ actionCollection(), "build_exec" );
+ action->setToolTip( i18n("Runs the CSharp program") );
+
+ action = new KAction( i18n("Execute String..."), "exec", 0,
+ this, SLOT(slotExecuteString()),
+ actionCollection(), "build_execstring" );
+ action->setToolTip( i18n("Executes a string as CSharp code") );
+
+ action = new KAction( i18n("Start CSharp Interpreter"), "exec", 0,
+ this, SLOT(slotStartInterpreter()),
+ actionCollection(), "build_runinterpreter" );
+ action->setToolTip( i18n("Starts the CSharp interpreter without a program") );
+
+ action = new KAction( i18n("Find CSharp Function Documentation..."), 0,
+ this, SLOT(slotCSharpdocFunction()),
+ actionCollection(), "help_csharpdocfunction" );
+ action->setToolTip( i18n("Show the documentation page of a CSharp function") );
+
+ action = new KAction( i18n("Find CSharp FAQ Entry..."), 0,
+ this, SLOT(slotCSharpdocFAQ()),
+ actionCollection(), "help_csharpdocfaq" );
+ action->setToolTip( i18n("Show the FAQ entry for a keyword") );
+
+ //csharp parser for codemodel
+ // m_parser = new csharpparser(core(),codeModel(),interpreter());
+}
+
+
+CSharpSupportPart::~CSharpSupportPart()
+{
+ if (project())
+ projectClosed();
+
+ // delete m_parser;
+ // m_parser=0;
+}
+
+
+void CSharpSupportPart::projectOpened()
+{
+ kdDebug(9007) << "projectOpened()" << endl;
+
+ connect( project(), SIGNAL(addedFilesToProject(const QStringList &)),
+ this, SLOT(addedFilesToProject(const QStringList &)) );
+ connect( project(), SIGNAL(removedFilesFromProject(const QStringList &)),
+ this, SLOT(removedFilesFromProject(const QStringList &)) );
+
+ // We want to parse only after all components have been
+ // procsharpy initialized
+ QTimer::singleShot(0, this, SLOT(initialParse()));
+}
+
+
+void CSharpSupportPart::projectClosed()
+{
+}
+
+void CSharpSupportPart::maybeParse(const QString fileName)
+{
+ QFileInfo fi(fileName);
+ QString path = fi.filePath();
+ QString extension = fi.extension();
+ if (extension == "cs") {
+ kdDebug(9016) << "maybe " << fileName << endl;
+ removeWithReference(fileName);
+ // m_parser->parse(fileName);
+ emit addedSourceInfo( fileName);
+ }
+}
+
+void CSharpSupportPart::addedFilesToProject(const QStringList &fileList)
+{
+ kdDebug(9016) << "addedFilesToProject()" << endl;
+
+ QStringList::ConstIterator it;
+
+ for ( it = fileList.begin(); it != fileList.end(); ++it )
+ {
+ maybeParse(project()->projectDirectory() + "/" + ( *it ));
+ }
+}
+
+
+void CSharpSupportPart::removedFilesFromProject(const QStringList &fileList)
+{
+ kdDebug(9016) << "removedFilesFromProject()" << endl;
+ QStringList::ConstIterator it;
+ for ( it = fileList.begin(); it != fileList.end(); ++it )
+ {
+ QString fileName = project()->projectDirectory() + "/" + ( *it );
+ removeWithReference(fileName);
+ }
+ emit updatedSourceInfo();
+}
+
+
+void CSharpSupportPart::savedFile(const KURL &fileName)
+{
+ Q_UNUSED( fileName.path() );
+#if 0 // not needed anymore
+ kdDebug(9016) << "savedFile()" << endl;
+
+ if (project()->allFiles().contains(fileName.mid ( project()->projectDirectory().length() + 1 ))) {
+ maybeParse(fileName);
+ emit updatedSourceInfo();
+ }
+#endif
+}
+
+
+KDevLanguageSupport::Features CSharpSupportPart::features()
+{
+ return KDevLanguageSupport::Features(Classes | Functions | Variables | Namespaces | /*Scripts | */NewClass | AddMethod | AddAttribute /*| NewScript*/);
+// return Functions;
+}
+
+QString CSharpSupportPart::interpreter()
+{
+ QString prog = DomUtil::readEntry(*projectDom(), "/kdevcsharpsupport/run/interpreter");
+ if (prog.isEmpty())
+ prog = "csharp";
+
+ return prog;
+}
+
+
+void CSharpSupportPart::startApplication(const QString &program)
+{
+ bool inTerminal = DomUtil::readBoolEntry(*projectDom(), "/kdevcsharpsupport/run/terminal");
+ if (KDevAppFrontend *appFrontend = extension<KDevAppFrontend>("KDevelop/AppFrontend"))
+ appFrontend->startAppCommand(QString::QString(), program, inTerminal);
+}
+
+
+void CSharpSupportPart::slotExecute()
+{
+ QString program = project()->mainProgram();
+ QString cmd = interpreter() + " " + program;
+ startApplication(cmd);
+}
+
+
+void CSharpSupportPart::slotStartInterpreter()
+{
+ startApplication(interpreter());
+}
+
+
+void CSharpSupportPart::slotExecuteString()
+{
+ bool ok;
+ QString cmd = KInputDialog::getText(i18n("String to Execute"), i18n("String to execute:"), QString::null, &ok, 0);
+ if (ok) {
+ cmd.prepend("'");
+ cmd.append("'");
+ startApplication(cmd);
+ }
+}
+
+
+void CSharpSupportPart::slotCSharpdocFunction()
+{
+ bool ok;
+ QString key = KInputDialog::getText(i18n("Show CSharp Documentation"), i18n("Show CSharp documentation for function:"), "", &ok, 0);
+ if (ok && !key.isEmpty()) {
+ QString url = "csharpdoc:functions/";
+ url += key;
+ partController()->showDocument(KURL(url));
+ }
+}
+
+
+void CSharpSupportPart::slotCSharpdocFAQ()
+{
+ bool ok;
+ QString key = KInputDialog::getText(i18n("Show FAQ Entry"), i18n("Show FAQ entry for keyword:"), "", &ok, 0);
+ if (ok && !key.isEmpty()) {
+ QString url = "csharpdoc:faq/";
+ url += key;
+ partController()->showDocument(KURL(url));
+ }
+}
+KMimeType::List CSharpSupportPart::mimeTypes( )
+{
+ KMimeType::List list;
+ KMimeType::Ptr mime = KMimeType::mimeType( "application/x-csharp" );
+ if( mime )
+ list << mime;
+ return list;
+}
+
+void CSharpSupportPart::initialParse()
+{
+ kdDebug(9016) << "initialParse()" << endl;
+
+ if (project()) {
+ //copy from cpp support : give user some feedback
+ mainWindow()->statusBar()->message( i18n("Updating...") );
+ kapp->processEvents( );
+
+ kapp->setOverrideCursor(waitCursor);
+ QStringList files = project()->allFiles();
+ // m_parser->initialParse();
+
+ //progress bar
+ QProgressBar* bar = new QProgressBar( files.count( ), mainWindow( )->statusBar( ) );
+ bar->setMinimumWidth( 120 );
+ bar->setCenterIndicator( true );
+ mainWindow( )->statusBar( )->addWidget( bar );
+ bar->show( );
+ int n = 0;
+ for (QStringList::Iterator it = files.begin(); it != files.end() ;++it) {
+// kdDebug(9016) << "maybe parse " << project()->projectDirectory() + "/" + (*it) << endl;
+ maybeParse(project()->projectDirectory() + "/" + *it);
+ //update progress bar
+ bar->setProgress( n++ );
+ if( (n%5) == 0 )
+ kapp->processEvents();
+ }
+ parseUseFiles();
+ emit updatedSourceInfo();
+
+ //remove progressbar
+ mainWindow( )->statusBar( )->removeWidget( bar );
+ delete bar;
+ kapp->restoreOverrideCursor();
+ mainWindow()->statusBar()->message( i18n("Done") );
+
+ } else {
+ kdDebug(9016) << "No project" << endl;
+ }
+}
+
+void CSharpSupportPart::removeWithReference( const QString & fileName )
+{
+ kdDebug(9016) << "remove with references: " << fileName << endl;
+ //m_timestamp.remove( fileName );
+ if( !codeModel()->hasFile(fileName) )
+ return;
+
+ emit aboutToRemoveSourceInfo( fileName );
+ codeModel()->removeFile( codeModel()->fileByName(fileName) );
+}
+
+void CSharpSupportPart::parseUseFiles()
+{
+ kdDebug(9016) << "parse addional libs" << endl;
+ return;
+ QString filename;
+ QStringList m_usefiles;
+ // QStringList m_usefiles = m_parser->UseFiles();
+
+ //parse addional use files
+ for (QStringList::Iterator it = m_usefiles.begin(); it != m_usefiles.end() ;++it)
+ {
+ // filename = m_parser->findLib(*it);
+ //if something found , parse it
+ if (!filename.isEmpty()) {
+ //kdDebug(9016) << "found " << filename << endl;
+ maybeParse(filename);
+ }
+ }
+}
+
+#include "csharpsupportpart.moc"
diff --git a/languages/csharp/csharpsupportpart.h b/languages/csharp/csharpsupportpart.h
new file mode 100644
index 00000000..166285a6
--- /dev/null
+++ b/languages/csharp/csharpsupportpart.h
@@ -0,0 +1,59 @@
+/***************************************************************************
+ * Copyright (C) 2001-2002 by Bernd Gehrmann *
+ * bernd@kdevelop.org *
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef _CSHARPSUPPORTPART_H_
+#define _CSHARPSUPPORTPART_H_
+
+#include "kdevlanguagesupport.h"
+#include <codemodel.h>
+// #include "csharpparser.h"
+
+class CSharpSupportPart : public KDevLanguageSupport
+{
+ Q_OBJECT
+
+public:
+ CSharpSupportPart( QObject *parent, const char *name, const QStringList & );
+ ~CSharpSupportPart();
+
+protected:
+ virtual Features features();
+ virtual KMimeType::List mimeTypes();
+
+private slots:
+ void projectOpened();
+ void projectClosed();
+ void savedFile(const KURL &fileName);
+ void addedFilesToProject(const QStringList &fileList);
+ void removedFilesFromProject(const QStringList &fileList);
+ void slotExecute();
+ void slotExecuteString();
+ void slotStartInterpreter();
+
+ // Internal
+ void initialParse();
+ void slotCSharpdocFunction();
+ void slotCSharpdocFAQ();
+
+private:
+ QString interpreter();
+ void startApplication(const QString &program);
+ void maybeParse(const QString fileName);
+ void parse(const QString &fileName);
+ void parseLines(QStringList* lines,const QString& fileName);
+ void removeWithReference( const QString & fileName );
+ void parseUseFiles();
+ //CSharp Parser
+// csharpparser* m_parser;
+
+};
+
+#endif
diff --git a/languages/csharp/doc/Makefile.am b/languages/csharp/doc/Makefile.am
new file mode 100644
index 00000000..e0dfb9eb
--- /dev/null
+++ b/languages/csharp/doc/Makefile.am
@@ -0,0 +1,6 @@
+tocdir = ${kde_datadir}/kdevdocumentation/tocs
+toc_DATA =
+
+#indexdir = ${kde_datadir}/devdoctreeview/indices
+#index_DATA =
+
diff --git a/languages/csharp/file_templates/Makefile.am b/languages/csharp/file_templates/Makefile.am
new file mode 100644
index 00000000..b4f0a30c
--- /dev/null
+++ b/languages/csharp/file_templates/Makefile.am
@@ -0,0 +1,4 @@
+templatedir = $(kde_datadir)/kdevfilecreate/file-templates
+template_DATA =
+
+
diff --git a/languages/csharp/kdevcsharpsupport.desktop b/languages/csharp/kdevcsharpsupport.desktop
new file mode 100644
index 00000000..dbd9492b
--- /dev/null
+++ b/languages/csharp/kdevcsharpsupport.desktop
@@ -0,0 +1,57 @@
+[Desktop Entry]
+Type=Service
+Exec=blubb
+Comment=CSharp Support
+Comment[ca]=Suport per a CSharp
+Comment[da]=Csharp understøttelse
+Comment[de]=CSharp-Unterstützung für KDevelop
+Comment[el]=Υποστήριξη CSharp
+Comment[es]=Soporte para CSharp
+Comment[et]=CSharp'i toetus
+Comment[fr]=Prise en charge du langage CSharp
+Comment[hu]=CSharp-támogatás
+Comment[it]=Supporto per CSharp
+Comment[ja]=CSharp サポート
+Comment[nds]=Ünnerstütten för CSharp
+Comment[nl]=Ondersteuning voor CSharp
+Comment[pl]=Obsługa CSharp
+Comment[pt]=Suporte a C#
+Comment[pt_BR]=Suporte a C#
+Comment[ru]=Поддержка CSharp
+Comment[sk]=CSharp podpora
+Comment[sr]=Подршка за CSharp
+Comment[sr@Latn]=Podrška za CSharp
+Comment[sv]=C#-stöd
+Comment[zh_TW]=C# 支援
+Name=KDevCSharpSupport
+Name[de]=Unterstützung für CSharp (KDevelop)
+Name[nds]=CSharp-Ünnerstütten för KDevelop
+Name[sv]=KDevelop C#-stöd
+Name[zh_TW]=KDevelop C# 支援
+GenericName=CSharp Support
+GenericName[ca]=Suport per a CSharp
+GenericName[da]=CSharp understøttelse
+GenericName[de]=Unterstützung für CSharp
+GenericName[el]=Υποστήριξη CSharp
+GenericName[es]=Soporte para CSharp
+GenericName[et]=CSharp'i toetus
+GenericName[fr]=Prise en charge du langage CSharp
+GenericName[hu]=CSharp-támogatás
+GenericName[it]=Supporto CSharp
+GenericName[ja]=CSharp サポート
+GenericName[nds]=Ünnerstütten för CSharp
+GenericName[nl]=Ondersteuning voor CSharp
+GenericName[pl]=Obsługa CSharp
+GenericName[pt]=Suporte a C#
+GenericName[pt_BR]=Suporte a C#
+GenericName[ru]=Поддержка CSharp
+GenericName[sk]=CSharp podpora
+GenericName[sr]=Подршка за CSharp
+GenericName[sr@Latn]=Podrška za CSharp
+GenericName[sv]=C#-stöd
+GenericName[zh_TW]=C# 支援
+ServiceTypes=KDevelop/LanguageSupport
+X-KDE-Library=libkdevcsharpsupport
+X-KDevelop-Version=5
+X-KDevelop-Language=CSharp
+
diff --git a/languages/csharp/kdevcsharpsupport.rc b/languages/csharp/kdevcsharpsupport.rc
new file mode 100644
index 00000000..b5f735e2
--- /dev/null
+++ b/languages/csharp/kdevcsharpsupport.rc
@@ -0,0 +1,14 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui name="KDevCSharpSupport" version="1">
+<MenuBar>
+ <Menu name="build" >
+ <Action name="build_exec" />
+ <Action name="build_runinterpreter" />
+ <Action name="build_execstring" />
+ </Menu>
+ <Menu name="help">
+ <Action name="help_csharpdocfunction"/>
+ <Action name="help_csharpdocfaq"/>
+ </Menu>
+</MenuBar>
+</kpartgui>