KDevelop API Documentation

languages/python/pydoc.cpp

Go to the documentation of this file.
00001 #include "pydoc.h" 00002 00003 #include <stdio.h> 00004 #include <stdlib.h> 00005 #include <sys/stat.h> 00006 #include <unistd.h> 00007 00008 #include <qtextstream.h> 00009 #include <kstandarddirs.h> 00010 #include <kinstance.h> 00011 #include <kprocess.h> 00012 #include <kdeversion.h> 00013 #include <kglobal.h> 00014 #include <klocale.h> 00015 00016 using namespace KIO; 00017 00018 00019 PydocProtocol::PydocProtocol(const QCString &pool, const QCString &app) 00020 : SlaveBase("pydoc", pool, app), key() 00021 { 00022 python = KGlobal::dirs()->findExe("python"); 00023 script = locate("data", "kio_pydoc/kde_pydoc.py"); 00024 } 00025 00026 00027 PydocProtocol::~PydocProtocol() 00028 {} 00029 00030 00031 void PydocProtocol::get(const KURL& url) 00032 { 00033 mimeType("text/html"); 00034 key = url.path(); 00035 00036 #if (KDE_VERSION > 305) 00037 QString cmd = KProcess::quote(python); 00038 cmd += " "; 00039 cmd += KProcess::quote(script); 00040 cmd += " -w "; 00041 cmd += KProcess::quote(key); 00042 #else 00043 QString cmd = KShellProcess::quote(python); 00044 cmd += " "; 00045 cmd += KShellProcess::quote(script); 00046 cmd += " -w "; 00047 cmd += KShellProcess::quote(key); 00048 #endif 00049 00050 FILE *fd = popen(cmd.local8Bit().data(), "r"); 00051 char buffer[4096]; 00052 QByteArray array; 00053 00054 while (!feof(fd)) { 00055 int n = fread(buffer, 1, 2048, fd); 00056 if (n == -1) { 00057 pclose(fd); 00058 return; 00059 } 00060 array.setRawData(buffer, n); 00061 data(array); 00062 array.resetRawData(buffer, n); 00063 } 00064 00065 pclose(fd); 00066 finished(); 00067 } 00068 00069 00070 void PydocProtocol::mimetype(const KURL&) 00071 { 00072 mimeType( "text/html" ); 00073 finished(); 00074 } 00075 00076 00077 QCString PydocProtocol::errorMessage() 00078 { 00079 return QCString( "<html><body bgcolor=\"#FFFFFF\">" + i18n("Error in pydoc").local8Bit() + "</body></html>" ); 00080 } 00081 00082 00083 void PydocProtocol::stat(const KURL &/*url*/) 00084 { 00085 UDSAtom uds_atom; 00086 uds_atom.m_uds = KIO::UDS_FILE_TYPE; 00087 uds_atom.m_long = S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO; 00088 00089 UDSEntry uds_entry; 00090 uds_entry.append(uds_atom); 00091 00092 statEntry(uds_entry); 00093 finished(); 00094 } 00095 00096 00097 void PydocProtocol::listDir(const KURL &url) 00098 { 00099 error( KIO::ERR_CANNOT_ENTER_DIRECTORY, url.path() ); 00100 } 00101 00102 00103 extern "C" { 00104 00105 int kdemain(int argc, char **argv) 00106 { 00107 KInstance instance( "kio_pydoc" ); 00108 KGlobal::locale()->setMainCatalogue("kdevelop"); 00109 00110 if (argc != 4) { 00111 fprintf(stderr, "Usage: kio_pydoc protocol domain-socket1 domain-socket2\n"); 00112 exit(-1); 00113 } 00114 00115 PydocProtocol slave(argv[2], argv[3]); 00116 slave.dispatchLoop(); 00117 00118 return 0; 00119 } 00120 00121 }
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:46 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003