summaryrefslogtreecommitdiffstats
path: root/languages/python
diff options
context:
space:
mode:
Diffstat (limited to 'languages/python')
-rw-r--r--languages/python/Makefile.am31
-rw-r--r--languages/python/README.dox48
-rw-r--r--languages/python/app_templates/Makefile.am3
-rw-r--r--languages/python/app_templates/pyqt/.kdev_ignore0
-rw-r--r--languages/python/app_templates/pyqt/Makefile.am20
-rw-r--r--languages/python/app_templates/pyqt/app-Makefile.am14
-rw-r--r--languages/python/app_templates/pyqt/app-autogen.sh10
-rw-r--r--languages/python/app_templates/pyqt/app-configure.ac32
-rw-r--r--languages/python/app_templates/pyqt/app.kdevelop81
-rw-r--r--languages/python/app_templates/pyqt/app.py271
-rw-r--r--languages/python/app_templates/pyqt/documentdetails.ui80
-rw-r--r--languages/python/app_templates/pyqt/fileopen.pyxpm19
-rw-r--r--languages/python/app_templates/pyqt/fileprint.pyxpm21
-rw-r--r--languages/python/app_templates/pyqt/filesave.pyxpm19
-rw-r--r--languages/python/app_templates/pyqt/install-sh0
-rw-r--r--languages/python/app_templates/pyqt/missing0
-rw-r--r--languages/python/app_templates/pyqt/mkinstalldirs0
-rw-r--r--languages/python/app_templates/pyqt/pyqt10
-rw-r--r--languages/python/app_templates/pyqt/pyqt-am-preproc.py85
-rw-r--r--languages/python/app_templates/pyqt/pyqt.kdevtemplate168
-rw-r--r--languages/python/app_templates/pyqt/pyqt.pngbin0 -> 8800 bytes
-rw-r--r--languages/python/app_templates/pyqt/templates-ui-dialog20
-rw-r--r--languages/python/app_templates/pyqt/templates-ui-mainwin436
-rw-r--r--languages/python/app_templates/python.appwizard2
-rw-r--r--languages/python/app_templates/pythonhello/.kdev_ignore0
-rw-r--r--languages/python/app_templates/pythonhello/Makefile.am15
-rw-r--r--languages/python/app_templates/pythonhello/app.kdevelop84
-rw-r--r--languages/python/app_templates/pythonhello/app.py7
-rw-r--r--languages/python/app_templates/pythonhello/pythonhello12
-rw-r--r--languages/python/app_templates/pythonhello/pythonhello.kdevtemplate107
-rw-r--r--languages/python/app_templates/pythonhello/pythonhello.pngbin0 -> 12443 bytes
-rw-r--r--languages/python/app_templates/pytk/.kdev_ignore0
-rw-r--r--languages/python/app_templates/pytk/Makefile.am15
-rw-r--r--languages/python/app_templates/pytk/app.kdevelop82
-rw-r--r--languages/python/app_templates/pytk/app.py4
-rw-r--r--languages/python/app_templates/pytk/pytk12
-rw-r--r--languages/python/app_templates/pytk/pytk.kdevtemplate107
-rw-r--r--languages/python/app_templates/pytk/pytk.pngbin0 -> 2420 bytes
-rw-r--r--languages/python/doc/Makefile.am6
-rw-r--r--languages/python/doc/python.toc1571
-rw-r--r--languages/python/doc/python_bugs.toc7
-rw-r--r--languages/python/file_templates/Makefile.am4
-rw-r--r--languages/python/file_templates/py7
-rwxr-xr-xlanguages/python/kde_pydoc.py131
-rw-r--r--languages/python/kdevpythonsupport.desktop85
-rw-r--r--languages/python/kdevpythonsupport.rc16
-rw-r--r--languages/python/pydoc.cpp113
-rw-r--r--languages/python/pydoc.h30
-rw-r--r--languages/python/pydoc.protocol9
-rw-r--r--languages/python/pythonconfigwidget.cpp38
-rw-r--r--languages/python/pythonconfigwidget.h34
-rw-r--r--languages/python/pythonconfigwidgetbase.ui121
-rw-r--r--languages/python/pythonimplementationwidget.cpp77
-rw-r--r--languages/python/pythonimplementationwidget.h37
-rw-r--r--languages/python/pythonsupportpart.cpp410
-rw-r--r--languages/python/pythonsupportpart.h66
-rw-r--r--languages/python/qtdesignerpythonintegration.cpp97
-rw-r--r--languages/python/qtdesignerpythonintegration.h37
58 files changed, 4711 insertions, 0 deletions
diff --git a/languages/python/Makefile.am b/languages/python/Makefile.am
new file mode 100644
index 00000000..ddebc35d
--- /dev/null
+++ b/languages/python/Makefile.am
@@ -0,0 +1,31 @@
+# Here resides the Python support part.
+# Do not confuse this with the python part responsible for KDevelop scripting
+
+INCLUDES = -I$(top_srcdir)/lib/interfaces -I$(top_srcdir)/languages/lib/designer_integration \
+ -I$(top_srcdir)/lib/interfaces/extensions -I$(top_srcdir)/lib/interfaces/external -I$(top_srcdir)/lib/util -I$(top_builddir)/languages/lib/designer_integration \
+ $(all_includes)
+SUBDIRS = app_templates file_templates doc
+
+
+kde_module_LTLIBRARIES = libkdevpythonsupport.la kio_pydoc.la
+
+libkdevpythonsupport_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
+libkdevpythonsupport_la_LIBADD = $(top_builddir)/lib/libkdevelop.la \
+ $(top_builddir)/languages/lib/designer_integration/libdesignerintegration.la
+libkdevpythonsupport_la_SOURCES = pythonsupportpart.cpp pythonconfigwidget.cpp pythonconfigwidgetbase.ui \
+ pythonimplementationwidget.cpp qtdesignerpythonintegration.cpp
+
+kio_pydoc_la_SOURCES = pydoc.cpp
+kio_pydoc_la_LIBADD = $(LIB_KIO)
+kio_pydoc_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
+
+METASOURCES = AUTO
+
+slavedir = $(kde_datadir)/kio_pydoc
+slave_DATA = kde_pydoc.py
+
+servicedir = $(kde_servicesdir)
+service_DATA = kdevpythonsupport.desktop pydoc.protocol
+
+rcdir = $(kde_datadir)/kdevpythonsupport
+rc_DATA = kdevpythonsupport.rc
diff --git a/languages/python/README.dox b/languages/python/README.dox
new file mode 100644
index 00000000..77d0f44c
--- /dev/null
+++ b/languages/python/README.dox
@@ -0,0 +1,48 @@
+/** \class PythonSupportPart
+This is a Python 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>
+
+\maintainer <a href="mailto:$EMAIL$">$AUTHOR$</a>
+\maintainer <a href="mailto:2nd maintainer AT provider.com">2nd maintainer full name</a>
+...
+\maintainer <a href="mailto:nth maintainer AT provider.com">nth maintainer full name</a>
+
+\feature Python 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/python/app_templates/Makefile.am b/languages/python/app_templates/Makefile.am
new file mode 100644
index 00000000..1ca030e1
--- /dev/null
+++ b/languages/python/app_templates/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = pythonhello pytk pyqt
+profilesdir = $(kde_datadir)/kdevelop/profiles/IDE/ScriptingLanguageIDE/PythonIDE
+profiles_DATA = python.appwizard
diff --git a/languages/python/app_templates/pyqt/.kdev_ignore b/languages/python/app_templates/pyqt/.kdev_ignore
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/languages/python/app_templates/pyqt/.kdev_ignore
diff --git a/languages/python/app_templates/pyqt/Makefile.am b/languages/python/app_templates/pyqt/Makefile.am
new file mode 100644
index 00000000..ea9502cc
--- /dev/null
+++ b/languages/python/app_templates/pyqt/Makefile.am
@@ -0,0 +1,20 @@
+dataFiles = app.py app.kdevelop fileopen.pyxpm fileprint.pyxpm \
+ filesave.pyxpm app-Makefile.am app-autogen.sh app-configure.ac \
+ documentdetails.ui missing install-sh mkinstalldirs \
+ pyqt-am-preproc.py templates-ui-dialog templates-ui-mainwin \
+ pyqt.png
+templateName = pyqt
+
+### no need to change below:
+template_DATA = $(templateName).kdevtemplate
+templatedir = ${appwizarddatadir}/templates
+
+appwizarddatadir = ${kde_datadir}/kdevappwizard
+$(templateName).tar.gz: ${dataFiles}
+ $(TAR) -cf $(templateName).tar -C $(srcdir) ${dataFiles}
+ $(GZIP_COMMAND) -f9 $(templateName).tar
+
+archivedir = ${appwizarddatadir}
+archive_DATA = $(templateName).tar.gz ${templateName}.png
+
+CLEANFILES = *.tar.gz \ No newline at end of file
diff --git a/languages/python/app_templates/pyqt/app-Makefile.am b/languages/python/app_templates/pyqt/app-Makefile.am
new file mode 100644
index 00000000..78df3505
--- /dev/null
+++ b/languages/python/app_templates/pyqt/app-Makefile.am
@@ -0,0 +1,14 @@
+
+EXEEXT=
+
+pyui_files= documentdetails.py
+
+%.py : %.ui
+ pyuic $< >$@
+
+
+bin_PROGRAMS = %{APPNAMELC}
+%{APPNAMELC}_SOURCES = %{APPNAMELC}.py documentdetails.ui
+
+%{APPNAMELC}$(EXEEXT): $(pyui_files)
+ echo "Done"
diff --git a/languages/python/app_templates/pyqt/app-autogen.sh b/languages/python/app_templates/pyqt/app-autogen.sh
new file mode 100644
index 00000000..b380ddfd
--- /dev/null
+++ b/languages/python/app_templates/pyqt/app-autogen.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+echo "Running aclocal"
+aclocal
+echo "Running autoconf"
+autoconf
+echo "Processing Makefile.am"
+python pyqt-am-preproc.py
+echo "Running automake"
+automake
+echo "Done."
diff --git a/languages/python/app_templates/pyqt/app-configure.ac b/languages/python/app_templates/pyqt/app-configure.ac
new file mode 100644
index 00000000..62903c0f
--- /dev/null
+++ b/languages/python/app_templates/pyqt/app-configure.ac
@@ -0,0 +1,32 @@
+
+AC_INIT
+AM_INIT_AUTOMAKE(testprog,[0.1])
+
+AC_PROG_MAKE_SET
+
+# python interpreter check
+AC_PATH_PROG([PYTHON],[python])
+if test -z "${PYTHON}" ; then
+ AC_MSG_ERROR([you need Python to use this program])
+fi
+
+# PyQT check
+AC_MSG_CHECKING([whether PyQT can be used by Python])
+pyqt_present=no
+cat >pyqttest.py <<END
+import qt
+END
+${PYTHON} pyqttest.py >/dev/null 2>&1 && pyqt_present=yes
+AC_MSG_RESULT([$pyqt_present])
+
+# pyuic check
+AC_PATH_PROG([PYUIC],[pyuic])
+if test -z "${PYUIC}" ; then
+ AC_MSG_ERROR([cannot find pyuic (part of the PyQT package)])
+fi
+AC_SUBST([PYUIC])
+AC_SUBST([PYTHON])
+
+AC_CONFIG_FILES([Makefile])
+
+AC_OUTPUT
diff --git a/languages/python/app_templates/pyqt/app.kdevelop b/languages/python/app_templates/pyqt/app.kdevelop
new file mode 100644
index 00000000..a8fb1726
--- /dev/null
+++ b/languages/python/app_templates/pyqt/app.kdevelop
@@ -0,0 +1,81 @@
+<?xml version = '1.0'?>
+<kdevelop>
+ <general>
+ <author>%{AUTHOR}</author>
+ <email>%{EMAIL}</email>
+ <version>%{VERSION}</version>
+ <projectmanagement>KDevAutoProject</projectmanagement>
+ <primarylanguage>Python</primarylanguage>
+ <keywords>
+ <keyword>Python</keyword>
+ <keyword>qt</keyword>
+ </keywords>
+ <ignoreparts/>
+ </general>
+ <kdevautoproject>
+ <general>
+ <activedir/>
+ </general>
+ <run>
+ <mainprogram>./%{APPNAMELC}.py</mainprogram>
+ </run>
+ </kdevautoproject>
+ <kdevdoctreeview>
+ <ignoretocs>
+ <toc>ada</toc>
+ <toc>ada_bugs_gcc</toc>
+ <toc>bash</toc>
+ <toc>bash_bugs</toc>
+ <toc>c++_bugs_gcc</toc>
+ <toc>clanlib</toc>
+ <toc>w3c-dom-level2-html</toc>
+ <toc>fortran_bugs_gcc</toc>
+ <toc>gnome1</toc>
+ <toc>gnustep</toc>
+ <toc>gtk</toc>
+ <toc>gtk_bugs</toc>
+ <toc>haskell</toc>
+ <toc>haskell_bugs_ghc</toc>
+ <toc>java_bugs_gcc</toc>
+ <toc>java_bugs_sun</toc>
+ <toc>libc</toc>
+ <toc>libstdc++</toc>
+ <toc>opengl</toc>
+ <toc>pascal_bugs_fp</toc>
+ <toc>php</toc>
+ <toc>php_bugs</toc>
+ <toc>perl</toc>
+ <toc>perl_bugs</toc>
+ <toc>ruby</toc>
+ <toc>ruby_bugs</toc>
+ <toc>sdl</toc>
+ <toc>stl</toc>
+ <toc>w3c-svg</toc>
+ <toc>sw</toc>
+ <toc>w3c-uaag10</toc>
+ <toc>wxwidgets_bugs</toc>
+ </ignoretocs>
+ <ignoreqt_xml>
+ <toc>qmake User Guide</toc>
+ </ignoreqt_xml>
+ <ignoredoxygen>
+ <toc>KDE Libraries (Doxygen)</toc>
+ </ignoredoxygen>
+ </kdevdoctreeview>
+ <kdevfileview>
+ <tree>
+ <hidenonprojectfiles>false</hidenonprojectfiles>
+ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
+ </tree>
+ <groups>
+ <group pattern="*.py" name="Python files" />
+ <group pattern="*.ui" name="QT Designer files" />
+ </groups>
+ </kdevfileview>
+ <kdevfilecreate>
+ <useglobaltypes>
+ <type ext="py"/>
+ <type ext="ui"/>
+ </useglobaltypes>
+ </kdevfilecreate>
+</kdevelop>
diff --git a/languages/python/app_templates/pyqt/app.py b/languages/python/app_templates/pyqt/app.py
new file mode 100644
index 00000000..ede8dc54
--- /dev/null
+++ b/languages/python/app_templates/pyqt/app.py
@@ -0,0 +1,271 @@
+#!/usr/bin/env python
+
+#############################################################################
+# %{APPNAME} - PyQT application template for KDevelop
+#
+# Translated from C++ qmakeapp.cpp
+# (qmakeapp.cpp - Copyright (C) 1992-2002 Trolltech AS. All rights reserved.)
+#
+# This file is part of an example program for Qt. This example
+# program may be used, distributed and modified without limitation.
+#
+#############################################################################
+
+import sys
+import os.path
+from qt import *
+
+import documentdetails
+
+false = 0
+true = 1
+
+def load_QPixMap(fileName):
+ f = open(os.path.join(sys.path[0],fileName),"r")
+ result = QPixmap(f.readlines())
+ f.close()
+ return result
+
+class %{APPNAME}(QMainWindow):
+ """An application called %{APPNAME}."""
+
+ def __init__(self):
+ QMainWindow.__init__(self, None, "%{APPNAME}")
+ self.initIcons()
+ self.setup()
+ self.initPrinter()
+ self.initToolBar()
+ self.initMenu()
+ self.initMainWidget()
+ self.setCaption(self.appTitle)
+
+ def setup(self):
+
+ self.appTitle = "%{APPNAME} - PyQT Application Example"
+
+ self.menu = [
+ ('&File',
+ [('&New', self.slotNewFile),
+ ('&Open...', self.slotOpenFile, self.openIcon),
+ ('&Save', self.slotSaveFile, self.saveIcon),
+ ('Save &as...', self.slotSaveAs),
+ ('&Print...', self.slotPrint, self.printIcon),
+ ('&Edit details...', self.slotEditDetails),
+ (None,)]),
+ ('&Help',
+ [('&About', self.slotAbout),
+ ('About &QT', self.slotAboutQT),
+ (None, ),
+ ('What\'s this', self.slotWhatsThis)])
+ ]
+
+ self.toolbar = [
+ ("filetools", "file operations", "File Operations",
+ [("fileopen",
+ (self.openIcon, "open file", "Open File", self.slotOpenFile),
+ "<p>Click this button to open a <em>new file</em>. <br>" + \
+ "You can also select the <b>Open</b> command " + \
+ "from the <b>File</b> menu.</p>"),
+ ("filesave",
+ (self.saveIcon, "save file", "Save File", self.slotSaveFile),
+ "<p>Click this button to save the file you " + \
+ "are editing. You will be prompted for a file name.\n" + \
+ "You can also select the <b>Save</b> command " + \
+ "from the <b>File</b> menu.</p>"),
+ ("fileprint",
+ (self.printIcon, "print file", "Print File", self.slotPrint),
+ "Click this button to print the file you " + \
+ "are editing.\n You can also select the Print " + \
+ "command from the File menu."
+ )])]
+
+ self.fileName = ""
+
+
+ def initMainWidget(self):
+ self.editor = QTextEdit(self, "editor")
+ self.editor.setFocus()
+ self.setCentralWidget(self.editor)
+ self.statusBar().message("Ready", 2000)
+ self.resize(450,600)
+
+ def initPrinter(self):
+ self.printer = QPrinter()
+
+ def initIcons(self):
+ self.openIcon = QIconSet( load_QPixMap("fileopen.pyxpm"))
+ self.saveIcon = QIconSet( load_QPixMap("filesave.pyxpm"))
+ self.printIcon = QIconSet( load_QPixMap("fileprint.pyxpm"))
+
+ def initToolBar(self):
+
+ self.toolbars = {}
+ for (toolBarID, toolBarName, toolBarDescr, toolBarButtons) in self.toolbar:
+ self.toolbars[toolBarID] = QToolBar(self, toolBarName)
+ self.toolbars[toolBarID].setLabel(toolBarDescr)
+ for (buttonID, (buttonIcon, buttonName, buttonText, buttonSlot), whatsThisText) in toolBarButtons:
+ toolButton = QToolButton(buttonIcon, buttonText, "", buttonSlot, self.toolbars[toolBarID], buttonName)
+ QWhatsThis.add( toolButton, whatsThisText )
+ self.whatsThisButton = QWhatsThis.whatsThisButton(self.toolbars[toolBarID])
+
+
+ def initMenu(self):
+
+ for (menuName, subMenu) in self.menu:
+ menu = QPopupMenu(self)
+ self.menuBar().insertItem( menuName, menu )
+ for menuOption in subMenu:
+ if len(menuOption)==1:
+ menu.insertSeparator()
+ elif len(menuOption)==2:
+ menu.insertItem( menuOption[0], menuOption[1] )
+ elif len(menuOption)==3:
+ menu.insertItem( menuOption[2], \
+ menuOption[0], \
+ menuOption[1] )
+
+
+
+ def slotNewFile(self):
+ ed = %{APPNAME}()
+ ed.setCaption(self.appTitle)
+ ed.show()
+
+ def slotOpenFile(self):
+ fileName = str(QFileDialog.getOpenFileName("", "", self))
+ print fileName
+ if not fileName=="":
+ self.load(fileName)
+ else:
+ self.statusBar().message("Loading aborted", 2000)
+
+ def slotSaveFile(self):
+ if self.fileName=="":
+ self.saveAs()
+ return
+ self.save()
+
+
+ def slotSaveAs(self):
+ pass
+
+ def slotPrint(self):
+ margin = 10
+ pageno = 1
+ if self.printer.setup(self):
+ self.statusBar().message("Printing...");
+ p = QPainter()
+ if not p.begin(self.printer): return
+
+ p.setFont( self.editor.font() )
+ yPos = 0
+ fontMetrics = p.fontMetrics()
+ metrics = QPaintDeviceMetrics(self.printer)
+ for i in range(self.editor.lines()):
+ if margin + yPos > metrics.height() - margin:
+ pageNo += 1
+ self.statusBar().message("Printing (page " + pageNo + ")...")
+ self.printer.newPage()
+ yPos = 0
+ p.drawText( margin, margin+yPos, \
+ metrics.width(), \
+ fontMetrics.lineSpacing(), \
+ QPainter.ExpandTabs | QPainter.DontClip, \
+ self.editor.text(i) )
+ yPos += fontMetrics.lineSpacing()
+ p.end()
+ self.statusBar().message("Printing completed", 2000)
+ else:
+ self.statusBar().message("Printing aborted", 2000)
+
+ def slotClose(self):
+ pass
+
+ def slotQuit(self):
+ pass
+
+ def slotEditDetails(self):
+ docDet = documentdetails.documentDetails(self)
+ docDet.show()
+
+ def slotWhatsThis(self):
+ self.whatsThis()
+
+ def slotAbout(self):
+ QMessageBox.about(self, self.appTitle, \
+ "This example demonstrates the simple use of\n" + \
+ "QMainWindow, QMenuBar and QToolBar using QT\n" + \
+ "and Python.")
+
+ def slotAboutQT(self):
+ QMessageBox.aboutQt(self, self.appTitle)
+
+ def load(self,fileName):
+ f = open(fileName,"r")
+ if f:
+ self.editor.setText( f.read() )
+ self.editor.setModified(false)
+ self.setCaption(fileName)
+ self.statusBar().message("Loaded document " + fileName, 2000)
+ self.fileName = fileName
+ else:
+ self.statusBar().message("Could not load " + fileName, 5000)
+ return
+
+ def saveAs(self):
+ fileName = str(QFileDialog.getSaveFileName(None, None, self))
+ if fileName!="":
+ self.fileName = fileName
+ self.save()
+ else:
+ self.statusBar().message("Saving aborted", 2000)
+
+ def save(self):
+ if self.fileName=="":
+ self.saveAs()
+ return
+ text = str(self.editor.text())
+ try:
+ f = open(self.fileName, "w")
+ f.write(text)
+ except:
+ self.statusBar().message("Could not write to " + self.fileName)
+ f.close()
+ return
+ f.close()
+ self.editor.setModified(false)
+ self.setCaption(self.fileName)
+ self.statusBar().message( "File " + self.fileName + " saved", 2000)
+
+ def closeEvent(self, closeEvent):
+ if not self.editor.isModified():
+ closeEvent.accept()
+ return
+
+ yesNoCancel = QMessageBox.information(self, self.appTitle,
+ "Do you want to save the changes\n" + \
+ "to the document?", \
+ "Yes", "No", "Cancel",
+ 0, 1)
+ if yesNoCancel == 0:
+ self.save()
+ closeEvent.accept()
+ elif yesNoCancel == 1:
+ closeEvent.accept()
+ else:
+ closeEvent.ignore()
+
+
+
+
+def main(args):
+ app=QApplication(args)
+ mainWindow = %{APPNAME}()
+ mainWindow.show()
+ app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
+ app.exec_loop()
+
+
+
+if __name__ == "__main__":
+ main(sys.argv)
diff --git a/languages/python/app_templates/pyqt/documentdetails.ui b/languages/python/app_templates/pyqt/documentdetails.ui
new file mode 100644
index 00000000..130d30ef
--- /dev/null
+++ b/languages/python/app_templates/pyqt/documentdetails.ui
@@ -0,0 +1,80 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>documentDetails</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>documentDetails</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>561</width>
+ <height>555</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Document Details</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Enter details about this document below.</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Author</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>lineEdit1</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Company</string>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<includes>
+</includes>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/languages/python/app_templates/pyqt/fileopen.pyxpm b/languages/python/app_templates/pyqt/fileopen.pyxpm
new file mode 100644
index 00000000..e90fcfee
--- /dev/null
+++ b/languages/python/app_templates/pyqt/fileopen.pyxpm
@@ -0,0 +1,19 @@
+ 16 13 5 1
+. c #040404
+# c #808304
+a c None
+b c #f3f704
+c c #f3f7f3
+aaaaaaaaa...aaaa
+aaaaaaaa.aaa.a.a
+aaaaaaaaaaaaa..a
+a...aaaaaaaa...a
+.bcb.......aaaaa
+.cbcbcbcbc.aaaaa
+.bcbcbcbcb.aaaaa
+.cbcb...........
+.bcb.#########.a
+.cb.#########.aa
+.b.#########.aaa
+..#########.aaaa
+...........aaaaa
diff --git a/languages/python/app_templates/pyqt/fileprint.pyxpm b/languages/python/app_templates/pyqt/fileprint.pyxpm
new file mode 100644
index 00000000..26f3ca9d
--- /dev/null
+++ b/languages/python/app_templates/pyqt/fileprint.pyxpm
@@ -0,0 +1,21 @@
+ 16 14 6 1
+. c #000000
+# c #848284
+a c #c6c3c6
+b c #ffff00
+c c #ffffff
+d c None
+ddddd.........dd
+dddd.cccccccc.dd
+dddd.c.....c.ddd
+ddd.cccccccc.ddd
+ddd.c.....c....d
+dd.cccccccc.a.a.
+d..........a.a..
+.aaaaaaaaaa.a.a.
+.............aa.
+.aaaaaa###aa.a.d
+.aaaaaabbbaa...d
+.............a.d
+d.aaaaaaaaa.a.dd
+dd...........ddd
diff --git a/languages/python/app_templates/pyqt/filesave.pyxpm b/languages/python/app_templates/pyqt/filesave.pyxpm
new file mode 100644
index 00000000..3f28c25d
--- /dev/null
+++ b/languages/python/app_templates/pyqt/filesave.pyxpm
@@ -0,0 +1,19 @@
+ 14 14 4 1
+. c #040404
+# c #808304
+a c #bfc2bf
+b c None
+..............
+.#.aaaaaaaa.a.
+.#.aaaaaaaa...
+.#.aaaaaaaa.#.
+.#.aaaaaaaa.#.
+.#.aaaaaaaa.#.
+.#.aaaaaaaa.#.
+.##........##.
+.############.
+.##.........#.
+.##......aa.#.
+.##......aa.#.
+.##......aa.#.
+b.............
diff --git a/languages/python/app_templates/pyqt/install-sh b/languages/python/app_templates/pyqt/install-sh
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/languages/python/app_templates/pyqt/install-sh
diff --git a/languages/python/app_templates/pyqt/missing b/languages/python/app_templates/pyqt/missing
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/languages/python/app_templates/pyqt/missing
diff --git a/languages/python/app_templates/pyqt/mkinstalldirs b/languages/python/app_templates/pyqt/mkinstalldirs
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/languages/python/app_templates/pyqt/mkinstalldirs
diff --git a/languages/python/app_templates/pyqt/pyqt b/languages/python/app_templates/pyqt/pyqt
new file mode 100644
index 00000000..24b1b72f
--- /dev/null
+++ b/languages/python/app_templates/pyqt/pyqt
@@ -0,0 +1,10 @@
+# KDE Config file
+[General]
+Name=Python Qt application
+Name[fr]=Une application Qt avec PYTHON
+Icon=pyqt.png
+Category=Python
+Comment=This generates an application framework using Python and Qt
+Comment[fr]=Génère un squelette d'application Qt dans le language PYTHON.
+FileTemplates=py,ShellStyle
+ShowFilesAfterGeneration=APPNAMELC.py
diff --git a/languages/python/app_templates/pyqt/pyqt-am-preproc.py b/languages/python/app_templates/pyqt/pyqt-am-preproc.py
new file mode 100644
index 00000000..dda5e2c3
--- /dev/null
+++ b/languages/python/app_templates/pyqt/pyqt-am-preproc.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+
+# Preprocess Makefile.am for PyQT project
+# Julian Rockey 2002
+
+# TODO:
+# Test real_lines properly
+# Process Makefile.am's in sub-directories
+
+from __future__ import generators
+import sys
+import re
+
+# function to convert list of lists with continuation chars
+# (bashslashes) to list of actual lines
+def real_lines(m):
+ while len(m)>0:
+ result = ""
+ if m[0][-1]=='\\':
+ while (len(m)>0 and m[0][-1]=='\\'):
+ result += m[0][:-1]
+ m=m[1:]
+ if len(m)>0:
+ result += m[0]
+ m=m[1:]
+ yield result
+
+# check for arguments
+if len(sys.argv)<2:
+ makefile_am = "Makefile.am"
+else:
+ makefile_am = sys.argv[1]
+
+
+# read in Makefile.am
+f = open(makefile_am,"r")
+mf = f.readlines()
+f.close()
+
+# parse for variables
+re_variable = re.compile("^(#kdevelop:[ \t]*)?([A-Za-z][A-Za-z0-9_]*)[ \t]*:?=[ \t]*(.*)$")
+variables = {}
+
+
+for l in real_lines(mf):
+ m = re_variable.match(l)
+ if m!=None:
+ (nowt, lhs, rhs) = m.groups()
+ variables[lhs]=rhs
+
+# look for app sources
+for (var,data) in variables.items():
+ spl = var.split("_",1)
+ spl.append("")
+ (prefix,primary) = (spl[0], spl[1])
+ if primary=="PROGRAMS":
+ target=data
+ if variables.has_key(target + "_SOURCES"):
+ sources = variables[target+"_SOURCES"].split()
+
+# change .ui into .py
+py_sources = []
+for s in sources:
+ py_sources.append(re.sub("\.ui$",".py",s))
+
+# replace dependencies of main target with list of .py sources
+# FIXME escape target
+re_maintarget = re.compile("(" + target + ".*?:).*")
+out = []
+for l in mf:
+ m = re_maintarget.match(l)
+ if m!=None:
+ (tar,)=m.groups()
+ l=tar + " " + " ".join(py_sources) + "\n"
+ out.append(l)
+
+# backup existing Makefile.am
+f = open(makefile_am + "~", "w")
+f.writelines(mf)
+f.close()
+
+# write file
+f = open(makefile_am, "w")
+f.writelines(out)
+f.close()
diff --git a/languages/python/app_templates/pyqt/pyqt.kdevtemplate b/languages/python/app_templates/pyqt/pyqt.kdevtemplate
new file mode 100644
index 00000000..bffbcd8c
--- /dev/null
+++ b/languages/python/app_templates/pyqt/pyqt.kdevtemplate
@@ -0,0 +1,168 @@
+# KDE Config File
+[General]
+Name=Python Qt application
+Name[ca]=Aplicació per a Qt en Python
+Name[da]=Python Qt program
+Name[de]=Python/Qt-Anwendung
+Name[el]=ΕφαÏμογή Python Qt
+Name[es]=Aplicación Qt en Python
+Name[et]=Pythoni Qt rakendus
+Name[eu]=Python Qt aplikazioa
+Name[fa]=کاربرد پیتون Qt
+Name[fr]=Application Qt Python
+Name[ga]=Feidhmchlár Qt Python
+Name[gl]=Aplicación Qt en Python
+Name[hu]=Python/Qt-alapú alkalmazás
+Name[it]=Applicazione Qt Python
+Name[ja]=Python Qt アプリケーション
+Name[nds]=Python Qt-Programm
+Name[ne]=पाइथोन कà¥à¤¯à¥‚ टी अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—
+Name[nl]=Python Qt-toepassing
+Name[pl]=Program Qt w Pythonie
+Name[pt]=Aplicação Qt em Python
+Name[pt_BR]=Aplicação Qt em Python
+Name[ru]=Приложение Qt на Python
+Name[sk]=Python Qt aplikácia
+Name[sr]=Python-Qt програм
+Name[sr@Latn]=Python-Qt program
+Name[sv]=Python Qt-program
+Name[tr]=Python Qt Uygulaması
+Name[zh_CN]=Python Qt 应用程åº
+Name[zh_TW]=Python Qt 應用程å¼
+Icon=pyqt.png
+Category=Python
+Comment=This generates an application framework using Python and Qt
+Comment[ca]=Genera una infraestructura d'aplicació usant Python i Qt
+Comment[da]=Dette genererer et programskelet ved brug af Python og Qt
+Comment[de]=Hiermit wird ein Anwendungsgerüst unter Verwendung von Python und Qt erstellt
+Comment[el]=Αυτό δημιουÏγεί ένα πλαίσιο εφαÏμογής χÏησιμοποιώντας τις Python και Qt
+Comment[es]=Genera una infraestructura de aplicación que usa Python y Qt
+Comment[et]=Rakenduse raamistiku loomine Pythoni ja Qt abil
+Comment[eu]=Honek Python eta Qt darabiltzan aplikazioen lan-marko bat sortzen du
+Comment[fa]=یک چارچوب کاربرد با استÙاده از پیتون Ùˆ Qt تولید می‌کند
+Comment[fr]=Génère une infrastructure d'application utilisant Python et Qt
+Comment[ga]=Cruthaíonn sé seo creatlach feidhmchláir le Python agus Qt
+Comment[gl]=Isto xera un contorno de traballo para unha aplicación usando Python e Qt
+Comment[hu]=Létrehoz egy alkalmazás-keretrendszert Python nyelven, a Qt felhasználásával
+Comment[it]=Genera l'infrastruttura applicativa usando Python e Qt
+Comment[ja]=Python 㨠Qt を使ã£ã¦ã‚¢ãƒ—リケーションフレームワークを作æˆã—ã¾ã™
+Comment[nds]=Dit stellt mit Python un Qt en Programmrahmenwark op.
+Comment[ne]=यसले पाइथोन र कà¥à¤¯à¥‚ टी पà¥à¤°à¤¯à¥‹à¤— गरेर अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— फà¥à¤°à¥‡à¤®à¤µà¤°à¥à¤• उतà¥à¤ªà¤¨à¥à¤¨ गरà¥à¤¦à¤›
+Comment[nl]=Dit genereert een toepassingsframework met behulp van Python en Qt
+Comment[pl]=Generuje szablon programu używającego Pythona i Qt
+Comment[pt]=Isto cria a plataforma de uma aplicação que usa o Python e o Qt
+Comment[pt_BR]=Isto cria a plataforma de uma aplicação que usa o Python e o Qt
+Comment[ru]=Создание Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Qt на Python
+Comment[sk]=Vygeneruje aplikaÄný framework používajúci Python a Qt
+Comment[sr]=Прави радни оквир програма кориÑтећи Python и Qt
+Comment[sr@Latn]=Pravi radni okvir programa koristeći Python i Qt
+Comment[sv]=Detta skapar ett programramverk med användning av Python och Qt
+Comment[tr]=Bu Python ve Qt kullanan bir uygulama çatısı yaratır.
+Comment[zh_CN]=这将生æˆä¸€ä¸ªä½¿ç”¨ Python å’Œ Qt 的应用程åºæ¡†æž¶
+Comment[zh_TW]=產生一個使用 Python 與 Qt 的應用程å¼æ¡†æž¶
+FileTemplates=py,ShellStyle
+ShowFilesAfterGeneration=%{dest}/%{APPNAMELC}.py
+Archive=pyqt.tar.gz
+
+[GNU]
+Type=include
+File=%{kdevelop}/template-common/gnu.kdevtemplate
+
+[FILE1]
+Type=install
+EscapeXML=true
+Source=%{src}/app.kdevelop
+Dest=%{dest}/%{APPNAMELC}.kdevelop
+
+[FILE2]
+Type=install
+Source=%{src}/app.py
+Dest=%{dest}/%{APPNAMELC}.py
+
+[FILE3]
+Type=install
+EscapeXML=true
+Source=%{src}/documentdetails.ui
+Dest=%{dest}/documentdetails.ui
+
+[FILE4]
+Type=install
+Source=%{src}/app-Makefile.am
+Dest=%{dest}/Makefile.am
+
+[FILE5]
+Type=install
+Source=%{src}/app-configure.ac
+Dest=%{dest}/configure.ac
+
+[FILE6]
+Type=install
+Source=%{src}/app-autogen.sh
+Dest=%{dest}/autogen.sh
+
+[FILE7]
+Type=install
+Source=%{src}/mkinstalldirs
+Dest=%{dest}/mkinstalldirs
+
+[FILE8]
+Type=install
+Source=%{src}/missing
+Dest=%{dest}/missing
+
+[FILE9]
+Type=install
+Source=%{src}/install-sh
+Dest=%{dest}/install-sh
+
+[FILE10]
+Type=install
+Source=%{src}/pyqt-am-preproc.py
+Dest=%{dest}/pyqt-am-preproc.py
+
+[FILE11]
+Type=install
+Source=%{src}/fileopen.pyxpm
+Dest=%{dest}/fileopen.pyxpm
+
+[FILE12]
+Type=install
+Source=%{src}/fileprint.pyxpm
+Dest=%{dest}/fileprint.pyxpm
+
+[FILE13]
+Type=install
+Source=%{src}/filesave.pyxpm
+Dest=%{dest}/filesave.pyxpm
+
+[MSG]
+Type=message
+Comment=A Python Qt application was created in %{dest}
+Comment[ca]=Una aplicació per a Qt en Python ha estat creada en %{dest}
+Comment[da]=Et Python Qt program blev oprettet i %{dest}
+Comment[de]=Eine Python/Qt-Anwendung wurde in %{dest} erstellt.
+Comment[el]=Μια εφαÏμογή Python Qt δημιουÏγήθηκε στο %{dest}
+Comment[es]=Una aplicación Qt en Python ha sido creada en %{dest}
+Comment[et]=Pythoni Qt rakendus loodi asukohta %{dest}
+Comment[eu]=Python eta Qt darabiltzan aplikazio bat sortu da hemen: %{dest}
+Comment[fa]=یک کاربرد پیتون Qt در %{dest} ایجاد شد
+Comment[fr]=Une application Qt Python a été créée dans %{dest}
+Comment[ga]=Cruthaíodh feidhmchlár Python Qt i %{dest}
+Comment[gl]=Creouse unha aplicación Qt en Python en %{dest}
+Comment[hu]=Létrejött egy Python/Qt-alkalmazás itt: %{dest}
+Comment[it]=È stata creata un'applicazione Qt Python in %{dest}
+Comment[ja]=Python Qt アプリケーションを %{dest} ã«ä½œæˆã—ã¾ã—ãŸ
+Comment[nds]=In %{dest} wöör en Python-Qt-Programm opstellt.
+Comment[ne]=पाइथोन कà¥à¤¯à¥‚ टी अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤— %{dest} मा सिरà¥à¤œà¤¨à¤¾ गरियो
+Comment[nl]=Een Python Qt-toepassing is aangemaakt in %{dest}
+Comment[pl]=Program używający Pythona i Qt został utworzony w %{dest}
+Comment[pt]=Foi criada uma aplicação Qt em Python em %{dest}
+Comment[pt_BR]=Foi criada uma aplicação Qt em Python em %{dest}
+Comment[ru]=Приложение Qt на Python Ñоздано в %{dest}
+Comment[sk]=Python Qt aplikácia bola vytvorená v %{dest}
+Comment[sr]= Python-Qt програм је направљен у %{dest}
+Comment[sr@Latn]= Python-Qt program je napravljen u %{dest}
+Comment[sv]=Ett Python Qt-program skapades i %{dest}
+Comment[tr]=Bir Python Qt uygulaması %{dest} içinde yaratıldı.
+Comment[zh_CN]=在 %{dest} 创建了一个 Python Qt 应用程åº
+Comment[zh_TW]=一個 Python Qt 應用程å¼å·²å»ºç«‹æ–¼ %{dest}
diff --git a/languages/python/app_templates/pyqt/pyqt.png b/languages/python/app_templates/pyqt/pyqt.png
new file mode 100644
index 00000000..207b942f
--- /dev/null
+++ b/languages/python/app_templates/pyqt/pyqt.png
Binary files differ
diff --git a/languages/python/app_templates/pyqt/templates-ui-dialog b/languages/python/app_templates/pyqt/templates-ui-dialog
new file mode 100644
index 00000000..fc2aefce
--- /dev/null
+++ b/languages/python/app_templates/pyqt/templates-ui-dialog
@@ -0,0 +1,20 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>Form1</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/languages/python/app_templates/pyqt/templates-ui-mainwin b/languages/python/app_templates/pyqt/templates-ui-mainwin
new file mode 100644
index 00000000..854da009
--- /dev/null
+++ b/languages/python/app_templates/pyqt/templates-ui-mainwin
@@ -0,0 +1,436 @@
+<!DOCTYPE UI><UI version="3.1" stdsetdef="1">
+<class>Form1</class>
+<widget class="QMainWindow">
+ <property name="name">
+ <cstring>Form1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+</widget>
+<menubar>
+ <property name="name">
+ <cstring>menubar</cstring>
+ </property>
+ <item text="&amp;File" name="fileMenu">
+ <action name="fileNewAction"/>
+ <action name="fileOpenAction"/>
+ <action name="fileSaveAction"/>
+ <action name="fileSaveAsAction"/>
+ <separator/>
+ <action name="filePrintAction"/>
+ <separator/>
+ <action name="fileExitAction"/>
+ </item>
+ <item text="&amp;Edit" name="editMenu">
+ <action name="editUndoAction"/>
+ <action name="editRedoAction"/>
+ <separator/>
+ <action name="editCutAction"/>
+ <action name="editCopyAction"/>
+ <action name="editPasteAction"/>
+ <separator/>
+ <action name="editFindAction"/>
+ </item>
+ <item text="&amp;Help" name="helpMenu">
+ <action name="helpContentsAction"/>
+ <action name="helpIndexAction"/>
+ <separator/>
+ <action name="helpAboutAction"/>
+ </item>
+</menubar>
+<toolbars>
+</toolbars>
+<actions>
+ <action>
+ <property name="name">
+ <cstring>fileNewAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image0</iconset>
+ </property>
+ <property name="text">
+ <string>New</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;New</string>
+ </property>
+ <property name="accel">
+ <string>Ctrl+N</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileOpenAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image1</iconset>
+ </property>
+ <property name="text">
+ <string>Open</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Open...</string>
+ </property>
+ <property name="accel">
+ <string>Ctrl+O</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileSaveAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image2</iconset>
+ </property>
+ <property name="text">
+ <string>Save</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Save</string>
+ </property>
+ <property name="accel">
+ <string>Ctrl+S</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileSaveAsAction</cstring>
+ </property>
+ <property name="text">
+ <string>Save As</string>
+ </property>
+ <property name="menuText">
+ <string>Save &amp;As...</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>filePrintAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image3</iconset>
+ </property>
+ <property name="text">
+ <string>Print</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Print...</string>
+ </property>
+ <property name="accel">
+ <string>Ctrl+P</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>fileExitAction</cstring>
+ </property>
+ <property name="text">
+ <string>Exit</string>
+ </property>
+ <property name="menuText">
+ <string>E&amp;xit</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editUndoAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image4</iconset>
+ </property>
+ <property name="text">
+ <string>Undo</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Undo</string>
+ </property>
+ <property name="accel">
+ <string>Ctrl+Z</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editRedoAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image5</iconset>
+ </property>
+ <property name="text">
+ <string>Redo</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Redo</string>
+ </property>
+ <property name="accel">
+ <string>Ctrl+Y</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editCutAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image6</iconset>
+ </property>
+ <property name="text">
+ <string>Cut</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Cut</string>
+ </property>
+ <property name="accel">
+ <string>Ctrl+X</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editCopyAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image7</iconset>
+ </property>
+ <property name="text">
+ <string>Copy</string>
+ </property>
+ <property name="menuText">
+ <string>C&amp;opy</string>
+ </property>
+ <property name="accel">
+ <string>Ctrl+C</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editPasteAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image8</iconset>
+ </property>
+ <property name="text">
+ <string>Paste</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Paste</string>
+ </property>
+ <property name="accel">
+ <string>Ctrl+V</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>editFindAction</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>image9</iconset>
+ </property>
+ <property name="text">
+ <string>Find</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Find...</string>
+ </property>
+ <property name="accel">
+ <string>Ctrl+F</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>helpContentsAction</cstring>
+ </property>
+ <property name="text">
+ <string>Contents</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Contents...</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>helpIndexAction</cstring>
+ </property>
+ <property name="text">
+ <string>Index</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;Index...</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>helpAboutAction</cstring>
+ </property>
+ <property name="text">
+ <string>About</string>
+ </property>
+ <property name="menuText">
+ <string>&amp;About</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </action>
+</actions>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="721">789cedd2b10ac2301405d03d5ff148b62056035241fc04c5511087f425a2432b681d44fc777ba329d6b47fe07d19dee50cc9904cd376b3229d896b6deb13131fed85b4bb95e57db75f3e8434869a93d3548e841c13d3fa5c79ecaad9d52404b540351e83caa833c6a03ad4798e41f5a86c30a816f510126ee94d14d52611fb8e2ad49070a4445ca4447ca4446ca444da07fecac7ffd2956ebe64f81ff4c873215e0583a9b0</data>
+ </image>
+ <image name="image1">
+ <data format="XPM.GZ" length="691">789cad914d0ac2301085f739c5d0d915b11a140ae211149782b898448b2e5a41eb42c4bb9b9fa6a67644045f0299978f37134896c27ab5803413979aeaa3067da033a4bb6b59de36dbf95d245282d953182703910c41c3f254ed6d8da6c69193b5dada7c924b6fc9dac2c85b156c51b83eacfe41d0c89defc4dfa2dd7c37fc44b025a179043c4152a4b055f4365414ad0e8901fd94c1ae5e19441da9211c68e7f44098d3074d86019e70a0210c089958df7ffb31134fa13797a8</data>
+ </image>
+ <image name="image2">
+ <data format="XPM.GZ" length="691">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022530543251d2e253d856405bffcbc54105b19c856360003103711c4b530b13082709340dc644310047193c1dcc424d314883958015846190b80ca24262a2721012087349964a030ba69c9c9303d403e9132087b68279388ecff4414193440948c32aa71d86470bb80863258a21b9a0eb0a7905a6b2e006d59a436</data>
+ </image>
+ <image name="image3">
+ <data format="XPM.GZ" length="2509">789c7d944973db461085effa152cf54d956a932089a55239c896572d96bcc4b253390033186ea2488aa416a7f2dfd3db0cbd44e6d340f8f8def43406209e1c742ecf4f3b074ff6d69b7a33711d37ae6f3a077e3b9f3ffcf5f71fffeced675987fecab293edffb6b77fb1e9b8ced9e2ba65c08c00baf2117e2f5c86d02d99e196b9d7ed963df53f2ab3c47789258fa7c26564688d4bf30f23673de113e6ac1719ae9459e27f4d5c893f17ae126f8d2be3ebc87d9dff4e3904f317ccfd5ef23f28b3c45f26963c7e510ec1fc9570157dd81857967f883c90cd8635f3208b8c0b6596f863e17a500fd597fe8744c35afc1be33aef8bff5ad9b5e637cc7993f7f346fca571637c1fb9d0f99f9543b07ab2df453ff9723d0551a1f3d791cb8170573904f3a5bf725034e66f133be96fa44c1246799e4a573495e461a29cfcbbc8e64f8d9df96564f5519e876a1019668975fda05c593d5c25d67a6f945d6ef3bdb08b3ed491eba1e467c6561fcf229bff4ad9b5c6c7ccf530fa8089bdf8136596703fb1f800c23ee5ff548e3e7a636f3c8ddc68bd8ab91926066596b05c5fe359c285b2cf8de5f7ed7296f050b825d6f74763dc1a0f227bcdbf60f679e29789353f5666093f4facfe857208e63f156e93df8bdc16c223e358ff28b2f939735b240eca2ce1678983f0a57208e6bf150ec96f8d83f127e650b084cf85e5a32fdf9d10b0c6c6e44835c9631dfd9ff235b618925ad1e89779278af5750df7681ea40316d8111eef876a79ad977ae773d8257ec8efead629fdeb3ca4ba9ae6e11fcdbbef6aa72b7934ef695702eddf4e631a13d2f4c73cd599e115f533a639bbc173e6788d0b5cf23a314fe915dee01a37df698bb77887f7f8805ff190e64c342fb59fe2333ca2e373d30b7c89aff035bec1634a9e904ef1417faf78866ff1fc275de03b7c4fa3a1553e50fd8f78a2ef0bfcf43fe973bcc4cff805bb74d6a3de0e31b37c9f561fe090c6583a19612e9d1dd179417db1575237191eeafb172b9cd22a7d409a7bcc8f0c4e68f01900ef44090db8547f4ee9a966456732445083078f779a8756dfdf52f19b1cd59c699254e31c46d0703f30b6fa5239a5d27faabc22b78409de838316bdd51fd1377730a531a12bd363c949aa3d936f1a6821e8fda566aef8fe011d612eba860569495a9196721ebe7d7ed0c30dac491b58d2bd21c116b634bf25ddd2fd9dd9f3f6efef7bff0111915e41</data>
+ </image>
+ <image name="image4">
+ <data format="XPM.GZ" length="661">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022630543251d2e253d856405bffcbc54105b19c8563600020b13103711c4b530b1308270f5b082019251068344848c32b23808206494a1e23015890819653db8b81e44255c0659025d460fa70c6e3d78ec814b21b90d052422fb070540f50ebaf84196a9b5e6020011bc73cc</data>
+ </image>
+ <image name="image5">
+ <data format="XPM.GZ" length="661">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022630543251d2e253d856405bffcbc54103b11c8563600020b13105719c4b530b1308270f5b0027acb28278201a64c221c4084136132ca7011885c225c06c91890542256193d98a198327a386570ea49449581bb4d2f114d0624a08c230c50fd4f5cb80da04cad351700f7fd8672</data>
+ </image>
+ <image name="image6">
+ <data format="XPM.GZ" length="661">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022630543251d2e253d856405bffcbc54105b19c856360003103711c6b53002abc40a90649491482ac92863955146d6822ca387474619c9301419a03842825819245bd064129513b1cb242602512216994430d44bc4904984c8c1a5e032897a3019a8144c26518f800c92715864d0ec81ab4dc4701b924fb0850e8a4cad351700fbd07ccb</data>
+ </image>
+ <image name="image7">
+ <data format="XPM.GZ" length="706">789c9d92cb0ac2301045f7f98aa1d915b1da8214c44f505c0ae26226b1e8a20a5a1722febb9924a5af58c19b40e77238a1842431ecb66b881371afb03a2b5027bc41ac1f65f9dc1f562f11a52998bd80793411d114146cae9723cfd2cc7266c395ea9aa75c15d74c65aad05c35d79c727215b91636f6d860c689f40910b4e92147d840b3be39d8416d877c860eb9af478d23919c4b8a7a0ed68eb628e4a04521c7fd46c07138e47448dbf1f32fc767e8d43735741af287d3ced83b782fc5075b18a5a5</data>
+ </image>
+ <image name="image8">
+ <data format="XPM.GZ" length="736">789c7d92d10a82301486eff714c3dd49649984103d42d165105dcce3465d58507611d1bbb773d674aed93f85fd7efb183ab394ef771b9e66ecdecaf60c1c4ef2c6d3fad134cfc371fd62499e7373957c9e4c5832e5c0b7d78bc2b9307331a36055ae960556c05a16656e69e5aaa5355658c202965825566d62176b57b5a64da3f188c084841e0a29a5e831910ef8885e4854501922e8a6b923586a176a8e40051ec1e63b7d0267387c6738424775091d653f98565a858e26c110447107d1886350d4a1c41c3dea7864e87c37f3ce47fc3aee7cd5207ffe90f78a7d0007c6c175</data>
+ </image>
+ <image name="image9">
+ <data format="XPM.GZ" length="2798">789cb5d5594f1b491007f0773e8545bda1d53ff81a7bb4da07830103b603b92059edc34cf78c0ff0812f3051befb5677554f56c24428d2aa78e0a7aeaeea6be0dd41e9f6aa573a78b7b75c25ab91299961b2281dd8f564b2fdfb9fbfbeefed572a25fe291f46a5cafe1f7bfbd7ab9229f567d3cc81fa0caa945d785f78c72ebc2f9dabb10bef9e73ade2c21913e77ae2c28f2fc48d6a947ab7c4b169d6bc8f9ca3aa0b3fbfaf4e35ff4c5cccdf8813db34de1def34e4c3881b3cc38fb7d5a918f78525ff46dcaca9576a23a627715cd3f53e8a131b7b63edecba69fd8d3af41b1496fa6d7153f78f86b8a86f0bcbfe9ec5493d16cfc5695dfad34c6d651ca9f7cffdbd173743fd441cd64f0f85a5fe489c6a3fd4d5613c0d4eeade43b189747c1b2ce3683abbeebadf5a702ae343716c743d53313f1febc7bfa843bf1371581f9d06ebf8581df257e2b01eba57675a5fea19177e7c109cfa712271aceba58938b13a6ec4a13fba62ee27f53fa9b51fe5c1ba7f7f1f71cd85f7545cdcf73ad8f8ef137762de9fd4ef898b7e51b0d63f52877e65b10de3c785657eacced4fe7b77b763236fab36fa3e1ec5a9d5f341b0e4d3526c42bd4ab0eee7505cf4fb28ce1aea6fc146fa7f76e6d3e115fafa5d7112cebf254eeb328e6a70967b9f8b437fba13db4ceb2fc5453f7f5ffcfac2795f046bbd0fe2a2df486c42bd2bb18dd46375e89f89b99fccf7ef2dadbbf0eea8add6bf16db4cbd1067b9de8fafc7b7a1ef13cf6213e50defadd846b9acff569c3574fe833ad7fa5fc57943cfdb9f9f894cd8cf93982748fdb9386f64dee4df97c978ff52ef4c9d69ff9938cff53cfdf7ec5627f5ae576f8fdfcf0721410ac391c222fb753e720c30c408638e3bdcf31c7a3d9fb3279862c631c70316586285f5ae1e727fd8e091f3e678c216cf68e108c768e3e4957ccb2b39e5fc337470ce71814b74d143ffe59ae4ff01ae7825d7f8c0753fe213d7ff8c2ffcfb0deccefc016ef115df380e51460555d4504784069aafe48f798f87885126a04a4409a564c8be92bfc115655cb94c395a34409d8634a231afe7c58ee5ef35d7bae3dc2eddd384a634a339c7032d90efcce7bba225ad38525aa3461b7ae478da75037a5f2758d196525ec93359aedde23882a563ae95edc8cf90529b4ee894c6bcf2844f66e2ce1239cf9afc7755c5fbc9b8479fdabcc71b3aa38ee4d039d7b9a04b1ecb5ebe677ea1964712ead2f9cf8aac1ecfd10a6f79ffdc7b4d7dee92bcfd7be1bd5ff29ccedbbf2f90dbfbfffefdfef873ef5fce01d04a</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>fileNewAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>fileNew()</slot>
+ </connection>
+ <connection>
+ <sender>fileOpenAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>fileOpen()</slot>
+ </connection>
+ <connection>
+ <sender>fileSaveAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>fileSave()</slot>
+ </connection>
+ <connection>
+ <sender>fileSaveAsAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>fileSaveAs()</slot>
+ </connection>
+ <connection>
+ <sender>filePrintAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>filePrint()</slot>
+ </connection>
+ <connection>
+ <sender>fileExitAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>fileExit()</slot>
+ </connection>
+ <connection>
+ <sender>editUndoAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>editUndo()</slot>
+ </connection>
+ <connection>
+ <sender>editRedoAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>editRedo()</slot>
+ </connection>
+ <connection>
+ <sender>editCutAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>editCut()</slot>
+ </connection>
+ <connection>
+ <sender>editCopyAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>editCopy()</slot>
+ </connection>
+ <connection>
+ <sender>editPasteAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>editPaste()</slot>
+ </connection>
+ <connection>
+ <sender>editFindAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>editFind()</slot>
+ </connection>
+ <connection>
+ <sender>helpIndexAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>helpIndex()</slot>
+ </connection>
+ <connection>
+ <sender>helpContentsAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>helpContents()</slot>
+ </connection>
+ <connection>
+ <sender>helpAboutAction</sender>
+ <signal>activated()</signal>
+ <receiver>Form1</receiver>
+ <slot>helpAbout()</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>fileNew()</slot>
+ <slot>fileOpen()</slot>
+ <slot>fileSave()</slot>
+ <slot>fileSaveAs()</slot>
+ <slot>filePrint()</slot>
+ <slot>fileExit()</slot>
+ <slot>editUndo()</slot>
+ <slot>editRedo()</slot>
+ <slot>editCut()</slot>
+ <slot>editCopy()</slot>
+ <slot>editPaste()</slot>
+ <slot>editFind()</slot>
+ <slot>helpIndex()</slot>
+ <slot>helpContents()</slot>
+ <slot>helpAbout()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/languages/python/app_templates/python.appwizard b/languages/python/app_templates/python.appwizard
new file mode 100644
index 00000000..82c13adf
--- /dev/null
+++ b/languages/python/app_templates/python.appwizard
@@ -0,0 +1,2 @@
+[General]
+List=pythonhello,pytk,pyqt
diff --git a/languages/python/app_templates/pythonhello/.kdev_ignore b/languages/python/app_templates/pythonhello/.kdev_ignore
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/languages/python/app_templates/pythonhello/.kdev_ignore
diff --git a/languages/python/app_templates/pythonhello/Makefile.am b/languages/python/app_templates/pythonhello/Makefile.am
new file mode 100644
index 00000000..3d66b1a7
--- /dev/null
+++ b/languages/python/app_templates/pythonhello/Makefile.am
@@ -0,0 +1,15 @@
+dataFiles = app.py app.kdevelop pythonhello.png
+templateName = pythonhello
+### no need to change below:
+template_DATA = $(templateName).kdevtemplate
+templatedir = ${appwizarddatadir}/templates
+
+appwizarddatadir = ${kde_datadir}/kdevappwizard
+$(templateName).tar.gz: ${dataFiles}
+ $(TAR) -cf $(templateName).tar -C $(srcdir) ${dataFiles}
+ $(GZIP_COMMAND) -f9 $(templateName).tar
+
+archivedir = ${appwizarddatadir}
+archive_DATA = $(templateName).tar.gz ${templateName}.png
+
+CLEANFILES = *.tar.gz \ No newline at end of file
diff --git a/languages/python/app_templates/pythonhello/app.kdevelop b/languages/python/app_templates/pythonhello/app.kdevelop
new file mode 100644
index 00000000..2c494d6a
--- /dev/null
+++ b/languages/python/app_templates/pythonhello/app.kdevelop
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<kdevelop>
+ <general>
+ <author>%{AUTHOR}</author>
+ <email>%{EMAIL}</email>
+ <version>%{VERSION}</version>
+ <projectmanagement>KDevScriptProject</projectmanagement>
+ <primarylanguage>Python</primarylanguage>
+ <keywords>
+ <keyword>Python</keyword>
+ </keywords>
+ <ignoreparts/>
+ </general>
+ <kdevscriptproject>
+ <general>
+ <activedir></activedir>
+ </general>
+ <run>
+ <mainprogram>%{APPNAMELC}.py</mainprogram>
+ </run>
+ </kdevscriptproject>
+ <kdevdoctreeview>
+ <ignoretocs>
+ <toc>ada</toc>
+ <toc>ada_bugs_gcc</toc>
+ <toc>bash</toc>
+ <toc>bash_bugs</toc>
+ <toc>c++_bugs_gcc</toc>
+ <toc>clanlib</toc>
+ <toc>w3c-dom-level2-html</toc>
+ <toc>fortran_bugs_gcc</toc>
+ <toc>gnome1</toc>
+ <toc>gnustep</toc>
+ <toc>gtk</toc>
+ <toc>gtk_bugs</toc>
+ <toc>haskell</toc>
+ <toc>haskell_bugs_ghc</toc>
+ <toc>java_bugs_gcc</toc>
+ <toc>java_bugs_sun</toc>
+ <toc>kde2book</toc>
+ <toc>libc</toc>
+ <toc>libstdc++</toc>
+ <toc>opengl</toc>
+ <toc>pascal_bugs_fp</toc>
+ <toc>php</toc>
+ <toc>php_bugs</toc>
+ <toc>perl</toc>
+ <toc>perl_bugs</toc>
+ <toc>qt-kdev3</toc>
+ <toc>ruby</toc>
+ <toc>ruby_bugs</toc>
+ <toc>sdl</toc>
+ <toc>stl</toc>
+ <toc>w3c-svg</toc>
+ <toc>sw</toc>
+ <toc>w3c-uaag10</toc>
+ <toc>wxwidgets_bugs</toc>
+ </ignoretocs>
+ <ignoreqt_xml>
+ <toc>Guide to the Qt Translation Tools</toc>
+ <toc>Qt Assistant Manual</toc>
+ <toc>Qt Designer Manual</toc>
+ <toc>Qt Reference Documentation</toc>
+ <toc>qmake User Guide</toc>
+ </ignoreqt_xml>
+ <ignoredoxygen>
+ <toc>KDE Libraries (Doxygen)</toc>
+ </ignoredoxygen>
+ </kdevdoctreeview>
+ <kdevfileview>
+ <tree>
+ <hidenonprojectfiles>false</hidenonprojectfiles>
+ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
+ </tree>
+ <groups>
+ <group pattern="*.py" name="Python files" />
+ </groups>
+ </kdevfileview>
+ <kdevfilecreate>
+ <useglobaltypes>
+ <type ext="py"/>
+ </useglobaltypes>
+ </kdevfilecreate>
+</kdevelop>
diff --git a/languages/python/app_templates/pythonhello/app.py b/languages/python/app_templates/pythonhello/app.py
new file mode 100644
index 00000000..3257ce62
--- /dev/null
+++ b/languages/python/app_templates/pythonhello/app.py
@@ -0,0 +1,7 @@
+#!/usr/bin/env python
+
+def main():
+ print 'Hello world!'
+
+main()
+
diff --git a/languages/python/app_templates/pythonhello/pythonhello b/languages/python/app_templates/pythonhello/pythonhello
new file mode 100644
index 00000000..f1a4f86b
--- /dev/null
+++ b/languages/python/app_templates/pythonhello/pythonhello
@@ -0,0 +1,12 @@
+# KDE Config File
+[General]
+Name=Simple Python script
+Name[fr]=Un simple script de test "Hello world"
+Name[de]=Ein einfaches Python-Script "Hello world"
+Icon=pythonhello.png
+Category=Python
+Comment=This generates a simplistic "Hello world" program in Python
+Comment[fr]=Génère un simple script de test du type "Hello world" dans le language PYTHON.
+Comment[de]=Es wird ein einfaches "Hello world"-Programm in Python erzeugt.
+FileTemplates=py,ShellStyle
+ShowFilesAfterGeneration=APPNAMELC.py
diff --git a/languages/python/app_templates/pythonhello/pythonhello.kdevtemplate b/languages/python/app_templates/pythonhello/pythonhello.kdevtemplate
new file mode 100644
index 00000000..6d52cf8a
--- /dev/null
+++ b/languages/python/app_templates/pythonhello/pythonhello.kdevtemplate
@@ -0,0 +1,107 @@
+# KDE Config File
+[General]
+Name=Simple Python script
+Name[ca]=Simple script en Python
+Name[da]=Simpelt Python script
+Name[de]=Einfaches Python-Skript
+Name[el]=Απλό σενάÏιο Python
+Name[es]=Guión sencillo en Python
+Name[et]=Lihtne Pythoni skript
+Name[eu]=Python script sinplea
+Name[fa]=دست‌نوشتۀ سادۀ پیتون
+Name[fr]=Script Python simple
+Name[ga]=Script shimplí Python
+Name[gl]=Script sinxelo en Python
+Name[hu]=Egyszerű Python-szkript
+Name[it]=Semplice script Python
+Name[ja]=ç°¡å˜ãª Python スクリプト
+Name[nds]=Eenfach Python-Skript
+Name[ne]=साधारण पाइथोन सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ
+Name[nl]=Eenvoudig Python-script
+Name[pl]=Prosty skrypt w Pythonie
+Name[pt]=Programa simples em Python
+Name[pt_BR]=Programa simples em Python
+Name[ru]=ПроÑтой Ñкрипт Python
+Name[sk]=Jednoduchý Python skript
+Name[sr]=ЈедноÑтавна Python Ñкрипта
+Name[sr@Latn]=Jednostavna Python skripta
+Name[sv]=Enkelt Python-skript
+Name[tr]=Basit Python betiÄŸi
+Name[zh_CN]=简å•çš„ Python 脚本
+Name[zh_TW]=簡單的 Python 文稿
+Icon=pythonhello.png
+Category=Python
+Comment=This generates a simplistic "Hello world" program in Python
+Comment[ca]=Genera un simple programa de "Hello world" en Python
+Comment[da]=Dette genererer et simplistisk "Goddag verden" program i Python
+Comment[de]=Erstellt ein einfaches "Hello World"-Programm in Python
+Comment[el]=Αυτό δημιουÏγεί ένα απλό Ï€ÏόγÏαμμα "Γεια σου κόσμε" σε Python
+Comment[es]=Genera un sencillo programa «Hola mundo» en Python
+Comment[et]=Lihtsa "Tere, maailm" programmi loomine Pythonis
+Comment[eu]=Honek "Kaixo mundua" programa sinple bat sortzen du Python lengoaian
+Comment[fa]=یک برنامۀ سادۀ «Hello world» در پیتون تولید می‌کند
+Comment[fr]=Génère un programme « Bonjour monde » simple en Python
+Comment[gl]=Isto xera un programa sinxelo "Ola mundo" en Python
+Comment[hu]=Létrehoz egy egyszerű Hello world programot Python nyelven
+Comment[it]=Genera un semplice programma di "Hello world" in Python
+Comment[ja]=ç°¡å˜ãª Hello world プログラムを Python ã§ä½œæˆã—ã¾ã™
+Comment[nds]=Dit stellt en eenfach "Moin Welt"-Programm mit Python op.
+Comment[ne]=यसले पाइथोनमा साधारण "हेलà¥à¤²à¥‹ वोलà¥à¤¡" कारà¥à¤¯à¤•à¥à¤°à¤® उतà¥à¤ªà¤¨à¥à¤¨ गरà¥à¤¦à¤›
+Comment[nl]=Dit genereert een eenvoudig "Hello World"-programma in Python
+Comment[pl]=Generuje prosty program "Witaj świecie" w Pythonie
+Comment[pt]=Isto gera um programa simples "Olá mundo" em Python
+Comment[pt_BR]=Isto gera um programa simples "Olá mundo" em Python
+Comment[ru]=Создание проÑтой программы "Hello world" на Python
+Comment[sk]=Vygeneruje jednoduchý "Ahoj svet" program v Python
+Comment[sr]=Прави једноÑтаван „Здраво Ñвете“ програм у Python-у
+Comment[sr@Latn]=Pravi jednostavan „Zdravo svete“ program u Python-u
+Comment[sv]=Detta skapar ett förenklat "Hello world"-program i Python
+Comment[tr]=Bu, Python'da basit bir "Merhaba Dünya" programı yaratır.
+Comment[zh_CN]=这将生æˆä¸€ä¸ªç®€å•çš„ Python 语言“Hello worldâ€ç¨‹åº
+Comment[zh_TW]=產生一個 Python çš„ç°¡å–® Hello world 程å¼
+FileTemplates=py,ShellStyle
+ShowFilesAfterGeneration=%{dest}/%{APPNAMELC}.py
+Archive=pythonhello.tar.gz
+
+[FILE1]
+Type=install
+EscapeXML=true
+Source=%{src}/app.kdevelop
+Dest=%{dest}/%{APPNAMELC}.kdevelop
+
+[FILE2]
+Type=install
+Source=%{src}/app.py
+Dest=%{dest}/%{APPNAMELC}.py
+
+[MSG]
+Type=message
+Comment=A simple python script was created in %{dest}
+Comment[ca]=Un simple script en Python ha estat creat en %{dest}
+Comment[da]=Et simpelt python script blev oprettet i %{dest}
+Comment[de]=Ein einfaches Python-Skript wurde in %{dest} erstellt.
+Comment[el]=Ένα απλό σενάÏιο python δημιουÏγήθηκε στο %{dest}
+Comment[es]=Un sencillo programa en Python ha sido creado en %{dest}
+Comment[et]=Lihtne Pythoni skript loodi asukohta %{dest}
+Comment[eu]=Python programa sinple bat sortu da hemen: %{dest}
+Comment[fa]=یک دست‌نوشتۀ سادۀ پیتون در %{dest} ایجاد شد
+Comment[fr]=Un script Python simple a été créé dans %{dest}
+Comment[ga]=Cruthaíodh script shimplí Python i %{dest}
+Comment[gl]=Creouse un script sinxelo en python en %{dest}
+Comment[hu]=Létrejött egy egyszerű Python-szkript itt: %{dest}
+Comment[it]=È stato creato un semplice script python in %{dest}
+Comment[ja]=ç°¡å˜ãª python スクリプトを %{dest} ã«ä½œæˆã—ã¾ã—ãŸ
+Comment[nds]=In %{dest} wöör en eenfach Python-Skript opstellt.
+Comment[ne]=साधारण पाइथोन सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ %{dest} मा सिरà¥à¤œà¤¨à¤¾ गरियो
+Comment[nl]=Een eenvoudig Python-script is aangemaakt in %{dest}
+Comment[pl]=Prosty skrypt w Pythonie został utworzony w %{dest}
+Comment[pt]=Foi criado um programa simples em Python em %{dest}
+Comment[pt_BR]=Foi criado um programa simples em Python em %{dest}
+Comment[ru]=ПроÑтой Ñкрипт Python Ñоздан в %{dest}
+Comment[sk]=Jednoduchý Python skript bol vytvorený v %{dest}
+Comment[sr]=ЈедноÑтавна python Ñкрипта направљена је у %{dest}
+Comment[sr@Latn]=Jednostavna python skripta napravljena je u %{dest}
+Comment[sv]=Ett enkelt Python-skript skapades i %{dest}
+Comment[tr]=Basit bir python betiği %{dest} içinde yaratıldı.
+Comment[zh_CN]=在 %{dest} 创建了一个简å•çš„ Python 语言脚本
+Comment[zh_TW]=一個簡單的 python 文稿框架已建立於 %{dest}
diff --git a/languages/python/app_templates/pythonhello/pythonhello.png b/languages/python/app_templates/pythonhello/pythonhello.png
new file mode 100644
index 00000000..c27ab24d
--- /dev/null
+++ b/languages/python/app_templates/pythonhello/pythonhello.png
Binary files differ
diff --git a/languages/python/app_templates/pytk/.kdev_ignore b/languages/python/app_templates/pytk/.kdev_ignore
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/languages/python/app_templates/pytk/.kdev_ignore
diff --git a/languages/python/app_templates/pytk/Makefile.am b/languages/python/app_templates/pytk/Makefile.am
new file mode 100644
index 00000000..0639ee15
--- /dev/null
+++ b/languages/python/app_templates/pytk/Makefile.am
@@ -0,0 +1,15 @@
+dataFiles = app.py app.kdevelop pytk.png
+templateName = pytk
+### no need to change below:
+template_DATA = $(templateName).kdevtemplate
+templatedir = ${appwizarddatadir}/templates
+
+appwizarddatadir = ${kde_datadir}/kdevappwizard
+$(templateName).tar.gz: ${dataFiles}
+ $(TAR) -cf $(templateName).tar -C $(srcdir) ${dataFiles}
+ $(GZIP_COMMAND) -f9 $(templateName).tar
+
+archivedir = ${appwizarddatadir}
+archive_DATA = $(templateName).tar.gz ${templateName}.png
+
+CLEANFILES = *.tar.gz \ No newline at end of file
diff --git a/languages/python/app_templates/pytk/app.kdevelop b/languages/python/app_templates/pytk/app.kdevelop
new file mode 100644
index 00000000..044ea0b7
--- /dev/null
+++ b/languages/python/app_templates/pytk/app.kdevelop
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+<kdevelop>
+ <general>
+ <author>%{AUTHOR}</author>
+ <email>%{EMAIL}</email>
+ <version>%{VERSION}</version>
+ <projectmanagement>KDevScriptProject</projectmanagement>
+ <primarylanguage>Python</primarylanguage>
+ <keywords>
+ <keyword>Python</keyword>
+ </keywords>
+ <ignoreparts/>
+ </general>
+ <kdevscriptproject>
+ <general>
+ <activedir></activedir>
+ </general>
+ <run>
+ <mainprogram>%{APPNAMELC}.py</mainprogram>
+ </run>
+ </kdevscriptproject>
+ <kdevdoctreeview>
+ <ignoretocs>
+ <toc>ada</toc>
+ <toc>ada_bugs_gcc</toc>
+ <toc>bash</toc>
+ <toc>bash_bugs</toc>
+ <toc>c++_bugs_gcc</toc>
+ <toc>clanlib</toc>
+ <toc>w3c-dom-level2-html</toc>
+ <toc>fortran_bugs_gcc</toc>
+ <toc>gnome1</toc>
+ <toc>gnustep</toc>
+ <toc>haskell</toc>
+ <toc>haskell_bugs_ghc</toc>
+ <toc>java_bugs_gcc</toc>
+ <toc>java_bugs_sun</toc>
+ <toc>kde2book</toc>
+ <toc>libc</toc>
+ <toc>libstdc++</toc>
+ <toc>opengl</toc>
+ <toc>pascal_bugs_fp</toc>
+ <toc>php</toc>
+ <toc>php_bugs</toc>
+ <toc>perl</toc>
+ <toc>perl_bugs</toc>
+ <toc>qt-kdev3</toc>
+ <toc>ruby</toc>
+ <toc>ruby_bugs</toc>
+ <toc>sdl</toc>
+ <toc>stl</toc>
+ <toc>w3c-svg</toc>
+ <toc>sw</toc>
+ <toc>w3c-uaag10</toc>
+ <toc>wxwidgets_bugs</toc>
+ </ignoretocs>
+ <ignoreqt_xml>
+ <toc>Guide to the Qt Translation Tools</toc>
+ <toc>Qt Assistant Manual</toc>
+ <toc>Qt Designer Manual</toc>
+ <toc>Qt Reference Documentation</toc>
+ <toc>qmake User Guide</toc>
+ </ignoreqt_xml>
+ <ignoredoxygen>
+ <toc>KDE Libraries (Doxygen)</toc>
+ </ignoredoxygen>
+ </kdevdoctreeview>
+ <kdevfileview>
+ <tree>
+ <hidenonprojectfiles>false</hidenonprojectfiles>
+ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
+ </tree>
+ <groups>
+ <group pattern="*.py" name="Python files" />
+ </groups>
+ </kdevfileview>
+ <kdevfilecreate>
+ <useglobaltypes>
+ <type ext="py"/>
+ </useglobaltypes>
+ </kdevfilecreate>
+</kdevelop>
diff --git a/languages/python/app_templates/pytk/app.py b/languages/python/app_templates/pytk/app.py
new file mode 100644
index 00000000..39f4aa84
--- /dev/null
+++ b/languages/python/app_templates/pytk/app.py
@@ -0,0 +1,4 @@
+from Tkinter import *
+widget = Label(None, text='Hello world!')
+widget.pack()
+widget.mainloop()
diff --git a/languages/python/app_templates/pytk/pytk b/languages/python/app_templates/pytk/pytk
new file mode 100644
index 00000000..36a92c47
--- /dev/null
+++ b/languages/python/app_templates/pytk/pytk
@@ -0,0 +1,12 @@
+# KDE Config File
+[General]
+Name=Simple Python/Tkinter script
+Name[fr]=Un simple Python/Tkinter script de test "Hello world"
+Name[de]=Ein einfaches Python/Tkinter Script « Hello world »
+Icon=pytk.png
+Category=Python
+Comment=This generates a simplistic "Hello world" program in Python/Tkinter
+Comment[fr]=Génère un simple script de test du type "Hello world" dans le language PYTHON/Tkinter.
+Comment[de]=Es wird ein einfaches "Hello world"-Programm in Python/Tkinter erzeugt.
+FileTemplates=py,ShellStyle
+ShowFilesAfterGeneration=APPNAMELC.py
diff --git a/languages/python/app_templates/pytk/pytk.kdevtemplate b/languages/python/app_templates/pytk/pytk.kdevtemplate
new file mode 100644
index 00000000..3756df01
--- /dev/null
+++ b/languages/python/app_templates/pytk/pytk.kdevtemplate
@@ -0,0 +1,107 @@
+# KDE Config File
+[General]
+Name=Simple Python/Tkinter script
+Name[ca]=Simple script en Python/Tkinter
+Name[da]=Simpelt Python/Tkinter script
+Name[de]=Einfaches Python/Tkinter-Skript
+Name[el]=Απλό σενάÏιο Python/Tkinter
+Name[es]=Guión sencillo en Python/Tkinter
+Name[et]=Lihtne Pythoni/Tkinteri skript
+Name[eu]=Python/Tkinter script sinplea
+Name[fa]=دست‌نوشتۀ سادۀ پیتون/Tkinter
+Name[fr]=Script Python / Tkinter simple
+Name[ga]=Script shimplí Python/Tkinter
+Name[gl]=Script sinxelo Python/Tkinter
+Name[hu]=Egyszerű Python/Tkinter-szkript
+Name[it]=Semplice script Python/Tkinter
+Name[ja]=ç°¡å˜ãª Python/Tkinter スクリプト
+Name[nds]=Eenfach Python/Tkinter-Skript
+Name[ne]=साधारण पाइथोन/Tkinter सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ
+Name[nl]=Eenvoudig Python/Tkinter-script
+Name[pl]=Prosty skrypt Python/Tkinter
+Name[pt]=Programa simples em Python/Tkinter
+Name[pt_BR]=Programa simples em Python/Tkinter
+Name[ru]=ПроÑтой Ñкрипт Python/Tkinter
+Name[sk]=Jednoduchý Python/Tkinter skript
+Name[sr]=ЈедноÑтавна Python/Tkinter Ñкрипта
+Name[sr@Latn]=Jednostavna Python/Tkinter skripta
+Name[sv]=Enkelt Python/Tkinter-skript
+Name[tr]=Basit Python/Tkinter betiÄŸi
+Name[zh_CN]=简å•çš„ Python/Tkinter 脚本
+Name[zh_TW]=簡單的 Python/Tkinter 文稿
+Icon=pytk.png
+Category=Python
+Comment=This generates a simplistic "Hello world" program in Python/Tkinter
+Comment[ca]=Genera un simple programa de "Hello world" en Python/Tkinter
+Comment[da]=Dette genererer et simplistisk "Goddag verden" program i Python/Tkinter
+Comment[de]=Erstellt ein einfaches "Hello World"-Programm in Python/Tkinter
+Comment[el]=Αυτό δημιουÏγεί ένα απλό Ï€ÏόγÏαμμα "Γεια σου κόσμε" σε Python/Tkinter
+Comment[es]=Genera un sencillo programa «Hola mundo» en Python/Tkinter
+Comment[et]=Lihtsa "Tere, maailm" programmi loomine Pythonis/Tkinteris
+Comment[eu]="Kaixo mundua" programa sinple bat sortzen du Python/Tkinter-en
+Comment[fa]=یک برنامۀ سادۀ «Hello world» در پیتون/Tkinter تولید می‌کند
+Comment[fr]=Génère un programme « Bonjour monde » simple en Python / Tkinter
+Comment[gl]=Isto xera un programa sinxelo "Ola mundo" en Python/Tkinter
+Comment[hu]=Létrehoz egy egyszerű Hello world programot Python/Tkinter nyelven
+Comment[it]=Genera un semplice programma di "Hello world" in Python/Tkinter
+Comment[ja]=ç°¡å˜ãª Hello world プログラムを Python/Tkinter ã§ä½œæˆã—ã¾ã™
+Comment[nds]=Dit stellt en eenfach "Moin Welt"-Programm in Python/Tkinter op.
+Comment[ne]=यसले पाइथोन/Tkinter मा साधारण "हेलà¥à¤²à¥‹ वोलà¥à¤¡" कारà¥à¤¯à¤•à¥à¤°à¤® उतà¥à¤ªà¤¨à¥à¤¨ गरà¥à¤¦à¤›
+Comment[nl]=Dit genereert een eenvoudig "Hallo Wereld"-programma in Python/Tkinter
+Comment[pl]=Generuje prosty skrypt "Witaj świecie" w Pythonie/Tkinterze
+Comment[pt]=Isto gera um programa simples "Olá mundo" em Python/Tkinter
+Comment[pt_BR]=Isto gera um programa simples "Olá mundo" em Python/Tkinter
+Comment[ru]=Создание проÑтой программы "Hello world" на Python и Tkinter
+Comment[sk]=Vygeneruje jednoduchý "Ahoj svet" program v Python/Tkinter
+Comment[sr]=Прави једноÑтаван „Здраво Ñвете“ у Python/Tkinter-у
+Comment[sr@Latn]=Pravi jednostavan „Zdravo svete“ u Python/Tkinter-u
+Comment[sv]=Detta skapar ett förenklat "Hello world"-program i Python/Tkinter
+Comment[tr]=Bu Python/Tkinter'da basit bir "Merhaba Dünya" programı yaratır.
+Comment[zh_CN]=这将生æˆä¸€ä¸ªç®€å•çš„ Python/Tkinter 语言“Hello worldâ€ç¨‹åº
+Comment[zh_TW]=產生一個簡單的 Python/Tkinter çš„ Hello World 程å¼
+FileTemplates=py,ShellStyle
+ShowFilesAfterGeneration=%{dest}/%{APPNAMELC}.py
+Archive=pytk.tar.gz
+
+[FILE1]
+Type=install
+EscapeXML=true
+Source=%{src}/app.kdevelop
+Dest=%{dest}/%{APPNAMELC}.kdevelop
+
+[FILE2]
+Type=install
+Source=%{src}/app.py
+Dest=%{dest}/%{APPNAMELC}.py
+
+[MSG]
+Type=message
+Comment=A simple Python/Tkinter script was created in %{dest}
+Comment[ca]=Un simple script en Python/Tkinter ha estat creat en %{dest}
+Comment[da]=Et simpelt Python/Tkinter script blev oprettet i %{dest}
+Comment[de]=Ein einfaches Python/Tkinter-Skript wurde in %{dest} erstellt.
+Comment[el]=Ένα απλό σενάÏιο Python/Tkinter δημιουÏγήθηκε στο %{dest}
+Comment[es]=Un sencillo guión en Python/Tkinter ha sido creado en %{dest}
+Comment[et]=Lihtne Pythoni/Tkinteri skript loodi asukohta %{dest}
+Comment[eu]=Python/Tkinter script sinple bat sortu da hemen: %{dest}
+Comment[fa]=یک دست‌نوشتۀ سادۀ پیتون/Tkinter در %{dest} ایجاد شد
+Comment[fr]=Un script Python / Tkinter simple a été créé dans %{dest}
+Comment[ga]=Cruthaíodh script shimplí Python/Tkinter i %{dest}
+Comment[gl]=Creouse un script sinxelo Python/Tkinter en %{dest}
+Comment[hu]=Létrejött egy egyszerű Python/Tkinter-szkript itt: %{dest}
+Comment[it]=È stato creato un semplice script Python/Tkinter in %{dest}
+Comment[ja]=ç°¡å˜ãª Python/Tkinter スクリプトを %{dest} ã«ä½œæˆã—ã¾ã—ãŸ
+Comment[nds]=In %{dest} wöör en eenfach Python-/Tkinter-Skript opstellt.
+Comment[ne]=साधारण पाइथोन/Tkinter सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ %{dest} मा सिरà¥à¤œà¤¨à¤¾ गरियो
+Comment[nl]=Een eenvoudig Python/Tkinter-script is aangemaakt in %{dest}
+Comment[pl]=Prosty skrypt Python/Tkinter został utworzony w %{dest}
+Comment[pt]=Foi criado um programa simples em Python/Tkinter em %{dest}
+Comment[pt_BR]=Foi criado um programa simples em Python/Tkinter em %{dest}
+Comment[ru]=ПроÑтой Ñкрипт Python/Tkinter Ñоздан в %{dest}
+Comment[sk]=Jednoduchý Python/Tkinter skript bol vytvorený v %{dest}
+Comment[sr]=ЈедноÑтавна Python/Tkinter Ñкрипта направљена је у %{dest}
+Comment[sr@Latn]=Jednostavna Python/Tkinter skripta napravljena je u %{dest}
+Comment[sv]=Ett enkelt Python/Tkinter-skript skapades i %{dest}
+Comment[tr]=Basit Python/Tkinter betiği %{dest} içinde yaratıldı.
+Comment[zh_CN]=在 %{dest} 创建了一个简å•çš„ Python/Tkinter 脚本
+Comment[zh_TW]=一個簡單的 Python/Tkinter 文稿已建立於 %{dest}
diff --git a/languages/python/app_templates/pytk/pytk.png b/languages/python/app_templates/pytk/pytk.png
new file mode 100644
index 00000000..c8c28f8d
--- /dev/null
+++ b/languages/python/app_templates/pytk/pytk.png
Binary files differ
diff --git a/languages/python/doc/Makefile.am b/languages/python/doc/Makefile.am
new file mode 100644
index 00000000..5159f5f0
--- /dev/null
+++ b/languages/python/doc/Makefile.am
@@ -0,0 +1,6 @@
+tocdir = ${kde_datadir}/kdevdocumentation/tocs
+toc_DATA = python.toc python_bugs.toc
+
+#indexdir = ${kde_datadir}/devdoctreeview/indices
+#index_DATA = python.index
+
diff --git a/languages/python/doc/python.toc b/languages/python/doc/python.toc
new file mode 100644
index 00000000..e5c67dda
--- /dev/null
+++ b/languages/python/doc/python.toc
@@ -0,0 +1,1571 @@
+<!DOCTYPE kdeveloptoc>
+<kdeveloptoc>
+<title>Python</title>
+<base href="http://docs.python.org"/>
+<tocsect1 name="Tutorial" url="tut/tut.html">
+<tocsect2 name="Front Matter" url="tut/node1.html"/>
+<tocsect2 name="Contents" url="tut/node2.html"/>
+<tocsect2 name="1. Whetting Your Appetite " url="tut/node3.html">
+<tocsect3 name="1.1 Where From Here " url="tut/node3.html#SECTION003100000000000000000"/>
+</tocsect2>
+<tocsect2 name="2. Using the Python Interpreter " url="tut/node4.html">
+<tocsect3 name="2.1 Invoking the Interpreter " url="tut/node4.html#SECTION004100000000000000000">
+<tocsect4 name="2.1.1 Argument Passing " url="tut/node4.html#SECTION004110000000000000000"/>
+<tocsect4 name="2.1.2 Interactive Mode " url="tut/node4.html#SECTION004120000000000000000"/>
+</tocsect3>
+<tocsect3 name="2.2 The Interpreter and Its Environment " url="tut/node4.html#SECTION004200000000000000000">
+<tocsect4 name="2.2.1 Error Handling " url="tut/node4.html#SECTION004210000000000000000"/>
+<tocsect4 name="2.2.2 Executable Python Scripts " url="tut/node4.html#SECTION004220000000000000000"/>
+<tocsect4 name="2.2.3 The Interactive Startup File " url="tut/node4.html#SECTION004230000000000000000"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="3. An Informal Introduction to Python " url="tut/node5.html">
+<tocsect3 name="3.1 Using Python as a Calculator " url="tut/node5.html#SECTION005100000000000000000">
+<tocsect4 name="3.1.1 Numbers " url="tut/node5.html#SECTION005110000000000000000"/>
+<tocsect4 name="3.1.2 Strings " url="tut/node5.html#SECTION005120000000000000000"/>
+<tocsect4 name="3.1.3 Unicode Strings " url="tut/node5.html#SECTION005130000000000000000"/>
+<tocsect4 name="3.1.4 Lists " url="tut/node5.html#SECTION005140000000000000000"/>
+</tocsect3>
+<tocsect3 name="3.2 First Steps Towards Programming " url="tut/node5.html#SECTION005200000000000000000"/>
+</tocsect2>
+<tocsect2 name="4. More Control Flow Tools " url="tut/node6.html">
+<tocsect3 name="4.1 if Statements " url="tut/node6.html#SECTION006100000000000000000"/>
+<tocsect3 name="4.2 for Statements " url="tut/node6.html#SECTION006200000000000000000"/>
+<tocsect3 name="4.3 The range() Function " url="tut/node6.html#SECTION006300000000000000000"/>
+<tocsect3 name="4.5 pass Statements " url="tut/node6.html#SECTION006500000000000000000"/>
+<tocsect3 name="4.6 Defining Functions " url="tut/node6.html#SECTION006600000000000000000"/>
+<tocsect3 name="4.7 More on Defining Functions " url="tut/node6.html#SECTION006700000000000000000">
+<tocsect4 name="4.7.1 Default Argument Values " url="tut/node6.html#SECTION006710000000000000000"/>
+<tocsect4 name="4.7.2 Keyword Arguments " url="tut/node6.html#SECTION006720000000000000000"/>
+<tocsect4 name="4.7.3 Arbitrary Argument Lists " url="tut/node6.html#SECTION006730000000000000000"/>
+<tocsect4 name="4.7.4 Lambda Forms " url="tut/node6.html#SECTION006740000000000000000"/>
+<tocsect4 name="4.7.5 Documentation Strings " url="tut/node6.html#SECTION006750000000000000000"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="5. Data Structures " url="tut/node7.html">
+<tocsect3 name="5.1 More on Lists " url="tut/node7.html#SECTION007100000000000000000">
+<tocsect4 name="5.1.1 Using Lists as Stacks " url="tut/node7.html#SECTION007110000000000000000"/>
+<tocsect4 name="5.1.2 Using Lists as Queues " url="tut/node7.html#SECTION007120000000000000000"/>
+<tocsect4 name="5.1.3 Functional Programming Tools " url="tut/node7.html#SECTION007130000000000000000"/>
+<tocsect4 name="5.1.4 List Comprehensions" url="tut/node7.html#SECTION007140000000000000000"/>
+</tocsect3>
+<tocsect3 name="5.2 The del statement " url="tut/node7.html#SECTION007200000000000000000"/>
+<tocsect3 name="5.3 Tuples and Sequences " url="tut/node7.html#SECTION007300000000000000000"/>
+<tocsect3 name="5.4 Dictionaries " url="tut/node7.html#SECTION007400000000000000000"/>
+<tocsect3 name="5.5 More on Conditions " url="tut/node7.html#SECTION007500000000000000000"/>
+<tocsect3 name="5.6 Comparing Sequences and Other Types " url="tut/node7.html#SECTION007600000000000000000"/>
+</tocsect2>
+<tocsect2 name="6. Modules " url="tut/node8.html">
+<tocsect3 name="6.1 More on Modules " url="tut/node8.html#SECTION008100000000000000000">
+<tocsect4 name="6.1.1 The Module Search Path " url="tut/node8.html#SECTION008110000000000000000"/>
+<tocsect4 name="6.1.2 ``Compiled'' Python files" url="tut/node8.html#SECTION008120000000000000000"/>
+</tocsect3>
+<tocsect3 name="6.2 Standard Modules " url="tut/node8.html#SECTION008200000000000000000"/>
+<tocsect3 name="6.3 The dir() Function " url="tut/node8.html#SECTION008300000000000000000"/>
+<tocsect3 name="6.4 Packages " url="tut/node8.html#SECTION008400000000000000000">
+<tocsect4 name="6.4.1 Importing * From a Package " url="tut/node8.html#SECTION008410000000000000000"/>
+<tocsect4 name="6.4.2 Intra-package References" url="tut/node8.html#SECTION008420000000000000000"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="7. Input and Output " url="tut/node9.html">
+<tocsect3 name="7.1 Fancier Output Formatting " url="tut/node9.html#SECTION009100000000000000000"/>
+<tocsect3 name="7.2 Reading and Writing Files " url="tut/node9.html#SECTION009200000000000000000">
+<tocsect4 name="7.2.1 Methods of File Objects " url="tut/node9.html#SECTION009210000000000000000"/>
+<tocsect4 name="7.2.2 The pickle Module " url="tut/node9.html#SECTION009220000000000000000"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="8. Errors and Exceptions " url="tut/node10.html">
+<tocsect3 name="8.1 Syntax Errors " url="tut/node10.html#SECTION0010100000000000000000"/>
+<tocsect3 name="8.2 Exceptions " url="tut/node10.html#SECTION0010200000000000000000"/>
+<tocsect3 name="8.3 Handling Exceptions " url="tut/node10.html#SECTION0010300000000000000000"/>
+<tocsect3 name="8.4 Raising Exceptions " url="tut/node10.html#SECTION0010400000000000000000"/>
+<tocsect3 name="8.5 User-defined Exceptions " url="tut/node10.html#SECTION0010500000000000000000"/>
+<tocsect3 name="8.6 Defining Clean-up Actions " url="tut/node10.html#SECTION0010600000000000000000"/>
+</tocsect2>
+<tocsect2 name="9. Classes " url="tut/node11.html">
+<tocsect3 name="9.1 A Word About Terminology " url="tut/node11.html#SECTION0011100000000000000000"/>
+<tocsect3 name="9.2 Python Scopes and Name Spaces " url="tut/node11.html#SECTION0011200000000000000000"/>
+<tocsect3 name="9.3 A First Look at Classes " url="tut/node11.html#SECTION0011300000000000000000">
+<tocsect4 name="9.3.1 Class Definition Syntax " url="tut/node11.html#SECTION0011310000000000000000"/>
+<tocsect4 name="9.3.2 Class Objects " url="tut/node11.html#SECTION0011320000000000000000"/>
+<tocsect4 name="9.3.3 Instance Objects " url="tut/node11.html#SECTION0011330000000000000000"/>
+<tocsect4 name="9.3.4 Method Objects " url="tut/node11.html#SECTION0011340000000000000000"/>
+</tocsect3>
+<tocsect3 name="9.4 Random Remarks " url="tut/node11.html#SECTION0011400000000000000000"/>
+<tocsect3 name="9.5 Inheritance " url="tut/node11.html#SECTION0011500000000000000000">
+<tocsect4 name="9.5.1 Multiple Inheritance " url="tut/node11.html#SECTION0011510000000000000000"/>
+</tocsect3>
+<tocsect3 name="9.6 Private Variables " url="tut/node11.html#SECTION0011600000000000000000"/>
+<tocsect3 name="9.7 Odds and Ends " url="tut/node11.html#SECTION0011700000000000000000">
+<tocsect4 name="9.7.1 Exceptions Can Be Classes " url="tut/node11.html#SECTION0011710000000000000000"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="10. What Now? " url="tut/node12.html">
+<tocsect3 name="A.1 Line Editing " url="tut/node13.html#SECTION0013100000000000000000"/>
+<tocsect3 name="A.2 History Substitution " url="tut/node13.html#SECTION0013200000000000000000"/>
+<tocsect3 name="A.3 Key Bindings " url="tut/node13.html#SECTION0013300000000000000000"/>
+<tocsect3 name="A.4 Commentary " url="tut/node13.html#SECTION0013400000000000000000"/>
+</tocsect2>
+<tocsect2 name="About this document ..." url="tut/node14.html"/>
+</tocsect1>
+<tocsect1 name="Language Reference" url="ref/ref.html">
+<tocsect2 name="Front Matter" url="ref/front.html"/>
+<tocsect2 name="Contents" url="ref/contents.html"/>
+<tocsect2 name="1. Introduction" url="ref/introduction.html">
+<tocsect3 name="1.1 Notation" url="ref/notation.html"/>
+</tocsect2>
+<tocsect2 name="2. Lexical analysis" url="ref/lexical.html">
+<tocsect3 name="2.1 Line structure" url="ref/line-structure.html">
+<tocsect4 name="2.1.1 Logical lines" url="ref/logical.html"/>
+<tocsect4 name="2.1.2 Physical lines" url="ref/physical.html"/>
+<tocsect4 name="2.1.3 Comments" url="ref/comments.html"/>
+<tocsect4 name="2.1.4 Explicit line joining" url="ref/explicit-joining.html"/>
+<tocsect4 name="2.1.5 Implicit line joining" url="ref/implicit-joining.html"/>
+<tocsect4 name="2.1.6 Blank lines " url="ref/blank-lines.html"/>
+<tocsect4 name="2.1.7 Indentation" url="ref/indentation.html"/>
+<tocsect4 name="2.1.8 Whitespace between tokens" url="ref/whitespace.html"/>
+</tocsect3>
+<tocsect3 name="2.2 Other tokens" url="ref/other-tokens.html"/>
+<tocsect3 name="2.3 Identifiers and keywords" url="ref/identifiers.html">
+<tocsect4 name="2.3.1 Keywords" url="ref/keywords.html"/>
+<tocsect4 name="2.3.2 Reserved classes of identifiers" url="ref/id-classes.html"/>
+</tocsect3>
+<tocsect3 name="2.4 Literals" url="ref/literals.html">
+<tocsect4 name="2.4.1 String literals" url="ref/strings.html"/>
+<tocsect4 name="2.4.2 String literal concatenation" url="ref/string-catenation.html"/>
+<tocsect4 name="2.4.3 Numeric literals" url="ref/numbers.html"/>
+<tocsect4 name="2.4.4 Integer and long integer literals" url="ref/integers.html"/>
+<tocsect4 name="2.4.5 Floating point literals" url="ref/floating.html"/>
+<tocsect4 name="2.4.6 Imaginary literals" url="ref/imaginary.html"/>
+</tocsect3>
+<tocsect3 name="2.5 Operators" url="ref/operators.html"/>
+<tocsect3 name="2.6 Delimiters" url="ref/delimiters.html"/>
+</tocsect2>
+<tocsect2 name="3. Data model" url="ref/datamodel.html">
+<tocsect3 name="3.1 Objects, values and types" url="ref/objects.html"/>
+<tocsect3 name="3.2 The standard type hierarchy" url="ref/types.html"/>
+<tocsect3 name="3.3 Special method names" url="ref/specialnames.html">
+<tocsect4 name="3.3.1 Basic customization" url="ref/customization.html"/>
+<tocsect4 name="3.3.2 Customizing attribute access" url="ref/attribute-access.html"/>
+<tocsect4 name="3.3.3 Emulating callable objects" url="ref/callable-types.html"/>
+<tocsect4 name="3.3.4 Emulating sequence and mapping types" url="ref/sequence-types.html"/>
+<tocsect4 name="3.3.5 Additional methods for emulation of sequence types " url="ref/sequence-methods.html"/>
+<tocsect4 name="3.3.6 Emulating numeric types" url="ref/numeric-types.html"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="4. Execution model " url="ref/execmodel.html">
+<tocsect3 name="4.1 Code blocks, execution frames, and namespaces " url="ref/execframes.html"/>
+<tocsect3 name="4.2 Exceptions " url="ref/exceptions.html"/>
+</tocsect2>
+<tocsect2 name="5. Expressions" url="ref/expressions.html">
+<tocsect3 name="5.1 Arithmetic conversions" url="ref/conversions.html"/>
+<tocsect3 name="5.2 Atoms" url="ref/atoms.html">
+<tocsect4 name="5.2.1 Identifiers (Names)" url="ref/atom-identifiers.html"/>
+<tocsect4 name="5.2.2 Literals" url="ref/atom-literals.html"/>
+<tocsect4 name="5.2.3 Parenthesized forms" url="ref/parenthesized.html"/>
+<tocsect4 name="5.2.4 List displays" url="ref/lists.html"/>
+<tocsect4 name="5.2.5 Dictionary displays" url="ref/dict.html"/>
+<tocsect4 name="5.2.6 String conversions" url="ref/string-conversions.html"/>
+</tocsect3>
+<tocsect3 name="5.3 Primaries" url="ref/primaries.html">
+<tocsect4 name="5.3.1 Attribute references" url="ref/attribute-references.html"/>
+<tocsect4 name="5.3.2 Subscriptions" url="ref/subscriptions.html"/>
+<tocsect4 name="5.3.3 Slicings" url="ref/slicings.html"/>
+<tocsect4 name="5.3.4 Calls" url="ref/calls.html"/>
+</tocsect3>
+<tocsect3 name="5.4 The power operator" url="ref/power.html"/>
+<tocsect3 name="5.5 Unary arithmetic operations " url="ref/unary.html"/>
+<tocsect3 name="5.6 Binary arithmetic operations" url="ref/binary.html"/>
+<tocsect3 name="5.7 Shifting operations" url="ref/shifting.html"/>
+<tocsect3 name="5.8 Binary bit-wise operations" url="ref/bitwise.html"/>
+<tocsect3 name="5.9 Comparisons" url="ref/comparisons.html"/>
+<tocsect3 name="5.10 Boolean operations" url="ref/lambda.html"/>
+<tocsect3 name="5.11 Expression lists" url="ref/exprlists.html"/>
+<tocsect3 name="5.12 Summary" url="ref/summary.html"/>
+</tocsect2>
+<tocsect2 name="6. Simple statements " url="ref/simple.html">
+<tocsect3 name="6.1 Expression statements " url="ref/exprstmts.html"/>
+<tocsect3 name="6.2 Assert statements " url="ref/assert.html"/>
+<tocsect3 name="6.3 Assignment statements " url="ref/assignment.html">
+<tocsect4 name="6.3.1 Augmented Assignment statements " url="ref/augassign.html"/>
+</tocsect3>
+<tocsect3 name="6.4 The pass statement " url="ref/pass.html"/>
+<tocsect3 name="6.5 The del statement " url="ref/del.html"/>
+<tocsect3 name="6.6 The print statement " url="ref/print.html"/>
+<tocsect3 name="6.7 The return statement " url="ref/return.html"/>
+<tocsect3 name="6.8 The raise statement " url="ref/raise.html"/>
+<tocsect3 name="6.9 The break statement " url="ref/break.html"/>
+<tocsect3 name="6.10 The continue statement " url="ref/continue.html"/>
+<tocsect3 name="6.11 The import statement " url="ref/import.html"/>
+<tocsect3 name="6.12 The global statement " url="ref/global.html"/>
+<tocsect3 name="6.13 The exec statement " url="ref/exec.html"/>
+</tocsect2>
+<tocsect2 name="7. Compound statements" url="ref/compound.html">
+<tocsect3 name="7.1 The if statement" url="ref/if.html"/>
+<tocsect3 name="7.2 The while statement" url="ref/while.html"/>
+<tocsect3 name="7.3 The for statement" url="ref/for.html"/>
+<tocsect3 name="7.4 The try statement" url="ref/try.html"/>
+<tocsect3 name="7.5 Function definitions" url="ref/function.html"/>
+<tocsect3 name="7.6 Class definitions" url="ref/class.html"/>
+</tocsect2>
+<tocsect2 name="8. Top-level components" url="ref/top-level.html">
+<tocsect3 name="8.1 Complete Python programs" url="ref/programs.html"/>
+<tocsect3 name="8.2 File input" url="ref/file-input.html"/>
+<tocsect3 name="8.3 Interactive input" url="ref/interactive.html"/>
+<tocsect3 name="8.4 Expression input" url="ref/expression-input.html"/>
+</tocsect2>
+<tocsect2 name="Index" url="ref/genindex.html"/>
+<tocsect2 name="About this document ..." url="ref/about.html"/>
+</tocsect1>
+<tocsect1 name="Extending and Embedding" url="ext/ext.html">
+<tocsect2 name="Front Matter" url="ext/front.html"/>
+<tocsect2 name="Contents" url="ext/contents.html"/>
+<tocsect2 name="1. Extending Python with C or C++ " url="ext/intro.html">
+<tocsect3 name="1.1 A Simple Example " url="ext/simpleExample.html"/>
+<tocsect3 name="1.2 Intermezzo: Errors and Exceptions " url="ext/errors.html"/>
+<tocsect3 name="1.3 Back to the Example " url="ext/backToExample.html"/>
+<tocsect3 name="1.4 The Module's Method Table and Initialization Function " url="ext/methodTable.html"/>
+<tocsect3 name="1.5 Compilation and Linkage " url="ext/compilation.html"/>
+<tocsect3 name="1.6 Calling Python Functions from C " url="ext/callingPython.html"/>
+<tocsect3 name="1.7 Format Strings for PyArg_ParseTuple() " url="ext/parseTuple.html"/>
+<tocsect3 name="1.8 Keyword Parsing with PyArg_ParseTupleAndKeywords() " url="ext/parseTupleAndKeywords.html"/>
+<tocsect3 name="1.9 The Py_BuildValue() Function " url="ext/buildValue.html"/>
+<tocsect3 name="1.10 Reference Counts " url="ext/refcounts.html">
+<tocsect4 name="1.10.1 Reference Counting in Python " url="ext/refcountsInPython.html"/>
+<tocsect4 name="1.10.2 Ownership Rules " url="ext/ownershipRules.html"/>
+<tocsect4 name="1.10.3 Thin Ice " url="ext/thinIce.html"/>
+<tocsect4 name="1.10.4 NULL Pointers " url="ext/nullPointers.html"/>
+</tocsect3>
+<tocsect3 name="1.11 Writing Extensions in C++ " url="ext/cplusplus.html"/>
+<tocsect3 name="1.12 Providing a C API for an Extension Module " url="ext/using-cobjects.html"/>
+</tocsect2>
+<tocsect2 name="2. Building C and C++ Extensions on Unix " url="ext/building-on-unix.html">
+<tocsect3 name="2.1 Building Custom Interpreters " url="ext/custom-interps.html"/>
+<tocsect3 name="2.2 Module Definition Options " url="ext/module-defn-options.html"/>
+<tocsect3 name="2.3 Example " url="ext/module-defn-example.html"/>
+<tocsect3 name="2.4 Distributing your extension modules " url="ext/distributing.html"/>
+</tocsect2>
+<tocsect2 name="3. Building C and C++ Extensions on Windows " url="ext/building-on-windows.html">
+<tocsect3 name="3.1 A Cookbook Approach " url="ext/win-cookbook.html"/>
+<tocsect3 name="3.2 Differences Between Unix and Windows " url="ext/dynamic-linking.html"/>
+<tocsect3 name="3.3 Using DLLs in Practice " url="ext/win-dlls.html"/>
+</tocsect2>
+<tocsect2 name="4. Embedding Python in Another Application " url="ext/embedding.html">
+<tocsect3 name="4.1 Embedding Python in C++ " url="ext/embeddingInCplusplus.html"/>
+<tocsect3 name="4.2 Linking Requirements " url="ext/link-reqs.html"/>
+</tocsect2>
+<tocsect2 name="A. Reporting Bugs" url="ext/reporting-bugs.html"/>
+<tocsect2 name="About this document ..." url="ext/about.html"/>
+</tocsect1>
+<tocsect1 name="Python/C API Reference" url="api/api.html">
+<tocsect2 name="Front Matter" url="api/front.html"/>
+<tocsect2 name="Contents" url="api/contents.html"/>
+<tocsect2 name="1. Introduction " url="api/intro.html">
+<tocsect3 name="1.1 Include Files " url="api/includes.html"/>
+<tocsect3 name="1.2 Objects, Types and Reference Counts " url="api/objects.html">
+<tocsect4 name="1.2.1 Reference Counts " url="api/refcounts.html"/>
+<tocsect4 name="1.2.2 Types " url="api/types.html"/>
+</tocsect3>
+<tocsect3 name="1.3 Exceptions " url="api/exceptions.html"/>
+<tocsect3 name="1.4 Embedding Python " url="api/embedding.html"/>
+</tocsect2>
+<tocsect2 name="2. The Very High Level Layer " url="api/veryhigh.html"/>
+<tocsect2 name="3. Reference Counting " url="api/countingRefs.html"/>
+<tocsect2 name="4. Exception Handling " url="api/exceptionHandling.html">
+<tocsect3 name="4.1 Standard Exceptions " url="api/standardExceptions.html"/>
+<tocsect3 name="4.2 Deprecation of String Exceptions" url="api/node15.html"/>
+</tocsect2>
+<tocsect2 name="5. Utilities " url="api/utilities.html">
+<tocsect3 name="5.1 OS Utilities " url="api/os.html"/>
+<tocsect3 name="5.2 Process Control " url="api/processControl.html"/>
+<tocsect3 name="5.3 Importing Modules " url="api/importing.html"/>
+</tocsect2>
+<tocsect2 name="6. Abstract Objects Layer " url="api/abstract.html">
+<tocsect3 name="6.1 Object Protocol " url="api/object.html"/>
+<tocsect3 name="6.2 Number Protocol " url="api/number.html"/>
+<tocsect3 name="6.3 Sequence Protocol " url="api/sequence.html"/>
+<tocsect3 name="6.4 Mapping Protocol " url="api/mapping.html"/>
+</tocsect2>
+<tocsect2 name="7. Concrete Objects Layer " url="api/concrete.html">
+<tocsect3 name="7.1 Fundamental Objects " url="api/fundamental.html">
+<tocsect4 name="7.1.1 Type Objects " url="api/typeObjects.html"/>
+<tocsect4 name="7.1.2 The None Object " url="api/noneObject.html"/>
+</tocsect3>
+<tocsect3 name="7.2 Sequence Objects " url="api/sequenceObjects.html">
+<tocsect4 name="7.2.1 String Objects " url="api/stringObjects.html"/>
+<tocsect4 name="7.2.2 Unicode Objects " url="api/unicodeObjects.html"/>
+<tocsect4 name="7.2.3 Buffer Objects " url="api/bufferObjects.html"/>
+<tocsect4 name="7.2.4 Tuple Objects " url="api/tupleObjects.html"/>
+<tocsect4 name="7.2.5 List Objects " url="api/listObjects.html"/>
+</tocsect3>
+<tocsect3 name="7.3 Mapping Objects " url="api/mapObjects.html">
+<tocsect4 name="7.3.1 Dictionary Objects " url="api/dictObjects.html"/>
+</tocsect3>
+<tocsect3 name="7.4 Numeric Objects " url="api/numericObjects.html">
+<tocsect4 name="7.4.1 Plain Integer Objects " url="api/intObjects.html"/>
+<tocsect4 name="7.4.2 Long Integer Objects " url="api/longObjects.html"/>
+<tocsect4 name="7.4.3 Floating Point Objects " url="api/floatObjects.html"/>
+<tocsect4 name="7.4.4 Complex Number Objects " url="api/complexObjects.html"/>
+</tocsect3>
+<tocsect3 name="7.5 Other Objects " url="api/otherObjects.html">
+<tocsect4 name="7.5.1 File Objects " url="api/fileObjects.html"/>
+<tocsect4 name="7.5.2 Module Objects " url="api/moduleObjects.html"/>
+<tocsect4 name="7.5.3 CObjects " url="api/cObjects.html"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="8. Initialization, Finalization, and Threads " url="api/initialization.html">
+<tocsect3 name="8.1 Thread State and the Global Interpreter Lock " url="api/threads.html"/>
+</tocsect2>
+<tocsect2 name="9. Memory Management " url="api/memory.html">
+<tocsect3 name="9.1 Overview " url="api/memoryOverview.html"/>
+<tocsect3 name="9.2 Memory Interface " url="api/memoryInterface.html"/>
+<tocsect3 name="9.3 Examples " url="api/memoryExamples.html"/>
+</tocsect2>
+<tocsect2 name="10. Defining New Object Types " url="api/newTypes.html">
+<tocsect3 name="10.1 Common Object Structures " url="api/common-structs.html"/>
+<tocsect3 name="10.2 Mapping Object Structures " url="api/mapping-structs.html"/>
+<tocsect3 name="10.3 Number Object Structures " url="api/number-structs.html"/>
+<tocsect3 name="10.4 Sequence Object Structures " url="api/sequence-structs.html"/>
+<tocsect3 name="10.5 Buffer Object Structures " url="api/buffer-structs.html"/>
+</tocsect2>
+<tocsect2 name="A. Reporting Bugs" url="api/reporting-bugs.html"/>
+<tocsect2 name="Index" url="api/genindex.html"/>
+<tocsect2 name="About this document ..." url="api/about.html"/>
+</tocsect1>
+<tocsect1 name="Library" url="lib/lib.html">
+<tocsect2 name="Front Matter" url="lib/front.html"/>
+<tocsect2 name="Contents" url="lib/contents.html"/>
+<tocsect2 name="1. Introduction" url="lib/intro.html"/>
+<tocsect2 name="2. Built-in Types, Exceptions and Functions" url="lib/builtin.html">
+<tocsect3 name="2.1 Built-in Types " url="lib/types.html">
+<tocsect4 name="2.1.1 Truth Value Testing " url="lib/truth.html"/>
+<tocsect4 name="2.1.2 Boolean Operations " url="lib/boolean.html"/>
+<tocsect4 name="2.1.3 Comparisons " url="lib/comparisons.html"/>
+<tocsect4 name="2.1.4 Numeric Types " url="lib/typesnumeric.html"/>
+<tocsect4 name="2.1.5 Sequence Types " url="lib/typesseq.html"/>
+<tocsect4 name="2.1.6 Mapping Types " url="lib/typesmapping.html"/>
+<tocsect4 name="2.1.7 Other Built-in Types " url="lib/typesother.html"/>
+<tocsect4 name="2.1.8 Special Attributes " url="lib/specialattrs.html"/>
+</tocsect3>
+<tocsect3 name="2.2 Built-in Exceptions" url="lib/module-exceptions.html"/>
+<tocsect3 name="2.3 Built-in Functions " url="lib/built-in-funcs.html"/>
+</tocsect2>
+<tocsect2 name="3. Python Runtime Services " url="lib/python.html">
+<tocsect3 name="3.1 sys -- System-specific parameters and functions" url="lib/module-sys.html"/>
+<tocsect3 name="3.2 gc -- Garbage Collector interface" url="lib/module-gc.html"/>
+<tocsect3 name="3.3 atexit -- Exit handlers" url="lib/module-atexit.html">
+<tocsect4 name="3.3.1 atexit Example " url="lib/atexit-example.html"/>
+</tocsect3>
+<tocsect3 name="3.4 types -- Names for all built-in types" url="lib/module-types.html"/>
+<tocsect3 name="3.5 UserDict -- Class wrapper for dictionary objects" url="lib/module-UserDict.html"/>
+<tocsect3 name="3.6 UserList -- Class wrapper for list objects" url="lib/module-UserList.html"/>
+<tocsect3 name="3.7 UserString -- Class wrapper for string objects" url="lib/module-UserString.html"/>
+<tocsect3 name="3.8 operator -- Standard operators as functions." url="lib/module-operator.html"/>
+<tocsect3 name="3.9 traceback -- Print or retrieve a stack traceback" url="lib/module-traceback.html">
+<tocsect4 name="3.9.1 Traceback Example " url="lib/traceback-example.html"/>
+</tocsect3>
+<tocsect3 name="3.10 linecache -- Random access to text lines" url="lib/module-linecache.html"/>
+<tocsect3 name="3.11 pickle -- Python object serialization" url="lib/module-pickle.html">
+<tocsect4 name="3.11.1 Example " url="lib/pickle-example.html"/>
+</tocsect3>
+<tocsect3 name="3.12 cPickle -- Alternate implementation of pickle" url="lib/module-cPickle.html"/>
+<tocsect3 name="3.13 copy_reg -- Register pickle support functions" url="lib/module-copyreg.html"/>
+<tocsect3 name="3.14 shelve -- Python object persistence" url="lib/module-shelve.html"/>
+<tocsect3 name="3.15 copy -- Shallow and deep copy operations" url="lib/module-copy.html"/>
+<tocsect3 name="3.16 marshal -- Alternate Python object serialization" url="lib/module-marshal.html"/>
+<tocsect3 name="3.17 imp -- Access the import internals" url="lib/module-imp.html">
+<tocsect4 name="3.17.1 Examples" url="lib/examples-imp.html"/>
+</tocsect3>
+<tocsect3 name="3.18 code -- Interpreter base classes" url="lib/module-code.html">
+<tocsect4 name="3.18.1 Interactive Interpreter Objects " url="lib/interpreter-objects.html"/>
+<tocsect4 name="3.18.2 Interactive Console Objects " url="lib/console-objects.html"/>
+</tocsect3>
+<tocsect3 name="3.19 codeop -- Compile Python code" url="lib/module-codeop.html"/>
+<tocsect3 name="3.20 pprint -- Data pretty printer" url="lib/module-pprint.html">
+<tocsect4 name="3.20.1 PrettyPrinter Objects" url="lib/PrettyPrinter_Objects.html"/>
+</tocsect3>
+<tocsect3 name="3.21 repr -- Alternate repr() implementation" url="lib/module-repr.html">
+<tocsect4 name="3.21.1 Repr Objects " url="lib/Repr-objects.html"/>
+<tocsect4 name="3.21.2 Subclassing Repr Objects " url="lib/subclassing-reprs.html"/>
+</tocsect3>
+<tocsect3 name="3.22 new -- Creation of runtime internal objects" url="lib/module-new.html"/>
+<tocsect3 name="3.23 site -- Site-specific configuration hook" url="lib/module-site.html"/>
+<tocsect3 name="3.24 user -- User-specific configuration hook" url="lib/module-user.html"/>
+<tocsect3 name="3.25 __builtin__ -- Built-in functions" url="lib/module-builtin.html"/>
+<tocsect3 name="3.26 __main__ -- Top-level script environment" url="lib/module-main.html"/>
+</tocsect2>
+<tocsect2 name="4. String Services" url="lib/strings.html">
+<tocsect3 name="4.1 string -- Common string operations" url="lib/module-string.html"/>
+<tocsect3 name="4.2 re -- Regular expression operations" url="lib/module-re.html">
+<tocsect4 name="4.2.1 Regular Expression Syntax " url="lib/re-syntax.html"/>
+<tocsect4 name="4.2.2 Matching vs. Searching " url="lib/matching-searching.html"/>
+<tocsect4 name="4.2.3 Module Contents" url="lib/Contents_of_Module_re.html"/>
+<tocsect4 name="4.2.4 Regular Expression Objects " url="lib/re-objects.html"/>
+<tocsect4 name="4.2.5 Match Objects " url="lib/match-objects.html"/>
+</tocsect3>
+<tocsect3 name="4.3 struct -- Interpret strings as packed binary data" url="lib/module-struct.html"/>
+<tocsect3 name="4.4 fpformat -- Floating point conversions" url="lib/module-fpformat.html"/>
+<tocsect3 name="4.5 StringIO -- Read and write strings as files" url="lib/module-StringIO.html"/>
+<tocsect3 name="4.6 cStringIO -- Faster version of StringIO" url="lib/module-cStringIO.html"/>
+<tocsect3 name="4.7 codecs -- Codec registry and base classes" url="lib/module-codecs.html">
+<tocsect4 name="4.7.1 Codec Base Classes" url="lib/node80.html"/>
+</tocsect3>
+<tocsect3 name="4.8 unicodedata -- Unicode Database" url="lib/module-unicodedata.html"/>
+</tocsect2>
+<tocsect2 name="5. Miscellaneous Services" url="lib/misc.html">
+<tocsect3 name="5.1 math -- Mathematical functions" url="lib/module-math.html"/>
+<tocsect3 name="5.2 cmath -- Mathematical functions for complex numbers" url="lib/module-cmath.html"/>
+<tocsect3 name="5.3 random -- Generate pseudo-random numbers" url="lib/module-random.html">
+<tocsect4 name="5.3.1 The Random Number Generator Interface " url="lib/rng-objects.html"/>
+</tocsect3>
+<tocsect3 name="5.4 whrandom -- Pseudo-random number generator" url="lib/module-whrandom.html"/>
+<tocsect3 name="5.5 bisect -- Array bisection algorithm" url="lib/module-bisect.html">
+<tocsect4 name="5.5.1 Example" url="lib/bisect-example.html"/>
+</tocsect3>
+<tocsect3 name="5.6 array -- Efficient arrays of numeric values" url="lib/module-array.html"/>
+<tocsect3 name="5.7 ConfigParser -- Configuration file parser" url="lib/module-ConfigParser.html">
+<tocsect4 name="5.7.1 ConfigParser Objects " url="lib/ConfigParser-objects.html"/>
+</tocsect3>
+<tocsect3 name="5.8 fileinput -- Iterate over lines from multiple input streams" url="lib/module-fileinput.html"/>
+<tocsect3 name="5.9 calendar -- General calendar-related functions" url="lib/module-calendar.html"/>
+<tocsect3 name="5.10 cmd -- Support for line-oriented command interpreters" url="lib/module-cmd.html">
+<tocsect4 name="5.10.1 Cmd Objects" url="lib/Cmd-objects.html"/>
+</tocsect3>
+<tocsect3 name="5.11 shlex -- Simple lexical analysis" url="lib/module-shlex.html">
+<tocsect4 name="5.11.1 shlex Objects " url="lib/shlex-objects.html"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="6. Generic Operating System Services " url="lib/allos.html">
+<tocsect3 name="6.1 os -- Miscellaneous OS interfaces" url="lib/module-os.html">
+<tocsect4 name="6.1.1 Process Parameters " url="lib/os-procinfo.html"/>
+<tocsect4 name="6.1.2 File Object Creation " url="lib/os-newstreams.html"/>
+<tocsect4 name="6.1.3 File Descriptor Operations " url="lib/os-fd-ops.html"/>
+<tocsect4 name="6.1.4 Files and Directories " url="lib/os-file-dir.html"/>
+<tocsect4 name="6.1.5 Process Management " url="lib/os-process.html"/>
+<tocsect4 name="6.1.6 Miscellaneous System Information " url="lib/os-path.html"/>
+</tocsect3>
+<tocsect3 name="6.2 os.path -- Common pathname manipulations" url="lib/module-os.path.html"/>
+<tocsect3 name="6.3 dircache -- Cached directory listings" url="lib/module-dircache.html"/>
+<tocsect3 name="6.4 stat -- Interpreting stat() results" url="lib/module-stat.html"/>
+<tocsect3 name="6.5 statcache -- An optimization of os.stat()" url="lib/module-statcache.html"/>
+<tocsect3 name="6.6 statvfs -- Constants used with os.statvfs()" url="lib/module-statvfs.html"/>
+<tocsect3 name="6.7 filecmp -- File and Directory Comparisons" url="lib/module-filecmp.html">
+<tocsect4 name="6.7.1 The dircmp class " url="lib/dircmp-objects.html"/>
+</tocsect3>
+<tocsect3 name="6.8 popen2 -- Subprocesses with accessible I/O streams" url="lib/module-popen2.html">
+<tocsect4 name="6.8.1 Popen3 and Popen4 Objects " url="lib/popen3-objects.html"/>
+</tocsect3>
+<tocsect3 name="6.9 time -- Time access and conversions" url="lib/module-time.html"/>
+<tocsect3 name="6.10 sched -- Event scheduler" url="lib/module-sched.html">
+<tocsect4 name="6.10.1 Scheduler Objects " url="lib/scheduler-objects.html"/>
+</tocsect3>
+<tocsect3 name="6.11 getpass -- Portable password input" url="lib/module-getpass.html"/>
+<tocsect3 name="6.12 curses -- Terminal handling for character-cell displays" url="lib/module-curses.html">
+<tocsect4 name="6.12.1 Functions " url="lib/curses-functions.html"/>
+<tocsect4 name="6.12.2 Window Objects " url="lib/curses-window-objects.html"/>
+<tocsect4 name="6.12.3 Constants" url="lib/node128.html"/>
+</tocsect3>
+<tocsect3 name="6.13 curses.textpad -- Text input widget for curses programs" url="lib/module-curses.textpad.html">
+<tocsect4 name="6.13.1 Textbox objects " url="lib/curses-textpad-objects.html"/>
+</tocsect3>
+<tocsect3 name="6.14 curses.wrapper -- Terminal handler for curses programs" url="lib/module-curses.wrapper.html"/>
+<tocsect3 name="6.15 curses.ascii -- Utilities for ASCII characters" url="lib/module-curses.ascii.html"/>
+<tocsect3 name="6.16 getopt -- Parser for command line options" url="lib/module-getopt.html"/>
+<tocsect3 name="6.17 tempfile -- Generate temporary file names" url="lib/module-tempfile.html"/>
+<tocsect3 name="6.18 errno -- Standard errno system symbols" url="lib/module-errno.html"/>
+<tocsect3 name="6.19 glob -- Unix style pathname pattern expansion" url="lib/module-glob.html"/>
+<tocsect3 name="6.20 fnmatch -- Unix filename pattern matching" url="lib/module-fnmatch.html"/>
+<tocsect3 name="6.21 shutil -- High-level file operations" url="lib/module-shutil.html">
+<tocsect4 name="6.21.1 Example " url="lib/shutil-example.html"/>
+</tocsect3>
+<tocsect3 name="6.22 locale -- Internationalization services" url="lib/module-locale.html">
+<tocsect4 name="6.22.1 Background, details, hints, tips and caveats" url="lib/node141.html"/>
+<tocsect4 name="6.22.2 For extension writers and programs that embed Python" url="lib/embedding-locale.html"/>
+</tocsect3>
+<tocsect3 name="6.23 gettext -- Multilingual internationalization services" url="lib/module-gettext.html">
+<tocsect4 name="6.23.1 GNU gettext API" url="lib/node144.html"/>
+<tocsect4 name="6.23.2 Class-based API" url="lib/node145.html"/>
+<tocsect4 name="6.23.3 Internationalizing your programs and modules" url="lib/node150.html"/>
+<tocsect4 name="6.23.4 Acknowledgments" url="lib/node155.html"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="7. Optional Operating System Services" url="lib/someos.html">
+<tocsect3 name="7.1 signal -- Set handlers for asynchronous events" url="lib/module-signal.html">
+<tocsect4 name="7.1.1 Example" url="lib/Signal_Example.html"/>
+</tocsect3>
+<tocsect3 name="7.2 socket -- Low-level networking interface" url="lib/module-socket.html">
+<tocsect4 name="7.2.1 Socket Objects " url="lib/socket-objects.html"/>
+<tocsect4 name="7.2.2 Example " url="lib/socket-example.html"/>
+</tocsect3>
+<tocsect3 name="7.3 select -- Waiting for I/O completion" url="lib/module-select.html">
+<tocsect4 name="7.3.1 Polling Objects " url="lib/poll-objects.html"/>
+</tocsect3>
+<tocsect3 name="7.4 thread -- Multiple threads of control" url="lib/module-thread.html"/>
+<tocsect3 name="7.5 threading -- Higher-level threading interface" url="lib/module-threading.html">
+<tocsect4 name="7.5.1 Lock Objects " url="lib/lock-objects.html"/>
+<tocsect4 name="7.5.2 RLock Objects " url="lib/rlock-objects.html"/>
+<tocsect4 name="7.5.3 Condition Objects " url="lib/condition-objects.html"/>
+<tocsect4 name="7.5.4 Semaphore Objects " url="lib/semaphore-objects.html"/>
+<tocsect4 name="7.5.5 Event Objects " url="lib/event-objects.html"/>
+<tocsect4 name="7.5.6 Thread Objects " url="lib/thread-objects.html"/>
+</tocsect3>
+<tocsect3 name="7.6 mutex -- Mutual exclusion support" url="lib/module-mutex.html">
+<tocsect4 name="7.6.1 Mutex Objects " url="lib/mutex-objects.html"/>
+</tocsect3>
+<tocsect3 name="7.7 Queue -- A synchronized queue class" url="lib/module-Queue.html">
+<tocsect4 name="7.7.1 Queue Objects" url="lib/QueueObjects.html"/>
+</tocsect3>
+<tocsect3 name="7.8 mmap -- Memory-mapped file support" url="lib/module-mmap.html"/>
+<tocsect3 name="7.9 anydbm -- Generic access to DBM-style databases" url="lib/module-anydbm.html"/>
+<tocsect3 name="7.10 dumbdbm -- Portable DBM implementation" url="lib/module-dumbdbm.html"/>
+<tocsect3 name="7.11 dbhash -- DBM-style interface to the BSD database library" url="lib/module-dbhash.html">
+<tocsect4 name="7.11.1 Database Objects " url="lib/dbhash-objects.html"/>
+</tocsect3>
+<tocsect3 name="7.12 whichdb -- Guess which DBM module created a database" url="lib/module-whichdb.html"/>
+<tocsect3 name="7.13 bsddb -- Interface to Berkeley DB library" url="lib/module-bsddb.html">
+<tocsect4 name="7.13.1 Hash, BTree and Record Objects " url="lib/bsddb-objects.html"/>
+</tocsect3>
+<tocsect3 name="7.14 zlib -- Compression compatible with gzip" url="lib/module-zlib.html"/>
+<tocsect3 name="7.15 gzip -- Support for gzip files" url="lib/module-gzip.html"/>
+<tocsect3 name="7.16 zipfile -- Work with ZIP archives" url="lib/module-zipfile.html">
+<tocsect4 name="7.16.1 ZipFile Objects " url="lib/zipfile-objects.html"/>
+<tocsect4 name="7.16.2 PyZipFile Objects " url="lib/pyzipfile-objects.html"/>
+<tocsect4 name="7.16.3 ZipInfo Objects " url="lib/zipinfo-objects.html"/>
+</tocsect3>
+<tocsect3 name="7.17 readline -- GNU readline interface" url="lib/module-readline.html">
+<tocsect4 name="7.17.1 Example " url="lib/readline-example.html"/>
+</tocsect3>
+<tocsect3 name="7.18 rlcompleter -- Completion function for GNU readline" url="lib/module-rlcompleter.html">
+<tocsect4 name="7.18.1 Completer Objects " url="lib/completer-objects.html"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="8. Unix Specific Services" url="lib/unix.html">
+<tocsect3 name="8.1 posix -- The most common POSIX system calls" url="lib/module-posix.html">
+<tocsect4 name="8.1.1 Large File Support " url="lib/posix-large-files.html"/>
+<tocsect4 name="8.1.2 Module Contents " url="lib/posix-contents.html"/>
+</tocsect3>
+<tocsect3 name="8.2 pwd -- The password database" url="lib/module-pwd.html"/>
+<tocsect3 name="8.3 grp -- The group database" url="lib/module-grp.html"/>
+<tocsect3 name="8.4 crypt -- Function to check Unix passwords" url="lib/module-crypt.html"/>
+<tocsect3 name="8.5 dl -- Call C functions in shared objects" url="lib/module-dl.html">
+<tocsect4 name="8.5.1 Dl Objects " url="lib/dl-objects.html"/>
+</tocsect3>
+<tocsect3 name="8.6 dbm -- Simple ``database'' interface" url="lib/module-dbm.html"/>
+<tocsect3 name="8.7 gdbm -- GNU's reinterpretation of dbm" url="lib/module-gdbm.html"/>
+<tocsect3 name="8.8 termios -- POSIX style tty control" url="lib/module-termios.html">
+<tocsect4 name="8.8.1 Example" url="lib/termios_Example.html"/>
+</tocsect3>
+<tocsect3 name="8.9 TERMIOS -- Constants used with the termios module" url="lib/module-TERMIOSuppercase.html"/>
+<tocsect3 name="8.10 tty -- Terminal control functions" url="lib/module-tty.html"/>
+<tocsect3 name="8.11 pty -- Pseudo-terminal utilities" url="lib/module-pty.html"/>
+<tocsect3 name="8.12 fcntl -- The fcntl() and ioctl() system calls" url="lib/module-fcntl.html"/>
+<tocsect3 name="8.13 pipes -- Interface to shell pipelines" url="lib/module-pipes.html">
+<tocsect4 name="8.13.1 Template Objects " url="lib/template-objects.html"/>
+</tocsect3>
+<tocsect3 name="8.14 posixfile -- File-like objects with locking support" url="lib/module-posixfile.html"/>
+<tocsect3 name="8.15 resource -- Resource usage information" url="lib/module-resource.html">
+<tocsect4 name="8.15.1 Resource Limits" url="lib/node215.html"/>
+<tocsect4 name="8.15.2 Resource Usage" url="lib/node216.html"/>
+</tocsect3>
+<tocsect3 name="8.16 nis -- Interface to Sun's NIS (Yellow Pages)" url="lib/module-nis.html"/>
+<tocsect3 name="8.17 syslog -- Unix syslog library routines" url="lib/module-syslog.html"/>
+<tocsect3 name="8.18 commands -- Utilities for running commands" url="lib/module-commands.html"/>
+</tocsect2>
+<tocsect2 name="9. The Python Debugger" url="lib/module-pdb.html">
+<tocsect3 name="9.1 Debugger Commands " url="lib/debugger-commands.html"/>
+<tocsect3 name="9.2 How It Works" url="lib/node222.html"/>
+</tocsect2>
+<tocsect2 name="10. The Python Profiler " url="lib/profile.html">
+<tocsect3 name="10.1 Introduction to the profiler" url="lib/Profiler_Introduction.html"/>
+<tocsect3 name="10.2 How Is This Profiler Different From The Old Profiler?" url="lib/Profiler_Changes.html"/>
+<tocsect3 name="10.3 Instant Users Manual " url="lib/profile-instant.html"/>
+<tocsect3 name="10.4 What Is Deterministic Profiling?" url="lib/Deterministic_Profiling.html"/>
+<tocsect3 name="10.5 Reference Manual" url="lib/module-profile.html">
+<tocsect4 name="10.5.1 The Stats Class " url="lib/profile-stats.html"/>
+</tocsect3>
+<tocsect3 name="10.6 Limitations " url="lib/profile-limits.html"/>
+<tocsect3 name="10.7 Calibration " url="lib/profile-calibration.html"/>
+<tocsect3 name="10.8 Extensions -- Deriving Better Profilers" url="lib/Profiler_Extensions.html">
+<tocsect4 name="10.8.1 OldProfile Class " url="lib/profile-old.html"/>
+<tocsect4 name="10.8.2 HotProfile Class " url="lib/profile-HotProfile.html"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="11. Internet Protocols and Support " url="lib/internet.html">
+<tocsect3 name="11.1 webbrowser -- Convenient Web-browser controller" url="lib/module-webbrowser.html">
+<tocsect4 name="11.1.1 Browser Controller Objects " url="lib/browser-controllers.html"/>
+</tocsect3>
+<tocsect3 name="11.2 cgi -- Common Gateway Interface support." url="lib/module-cgi.html">
+<tocsect4 name="11.2.1 Introduction" url="lib/cgi-intro.html"/>
+<tocsect4 name="11.2.2 Using the cgi module" url="lib/Using_the_cgi_module.html"/>
+<tocsect4 name="11.2.3 Old classes" url="lib/node241.html"/>
+<tocsect4 name="11.2.4 Functions" url="lib/Functions_in_cgi_module.html"/>
+<tocsect4 name="11.2.5 Caring about security" url="lib/node243.html"/>
+<tocsect4 name="11.2.6 Installing your CGI script on a Unix system" url="lib/node244.html"/>
+<tocsect4 name="11.2.7 Testing your CGI script" url="lib/node245.html"/>
+<tocsect4 name="11.2.8 Debugging CGI scripts" url="lib/node246.html"/>
+<tocsect4 name="11.2.9 Common problems and solutions" url="lib/node247.html"/>
+</tocsect3>
+<tocsect3 name="11.3 urllib -- Open arbitrary resources by URL" url="lib/module-urllib.html">
+<tocsect4 name="11.3.1 URLopener Objects " url="lib/urlopener-objs.html"/>
+<tocsect4 name="11.3.2 Examples" url="lib/Urllib_Examples.html"/>
+</tocsect3>
+<tocsect3 name="11.4 httplib -- HTTP protocol client" url="lib/module-httplib.html">
+<tocsect4 name="11.4.1 HTTP Objects" url="lib/node252.html"/>
+<tocsect4 name="11.4.2 Examples" url="lib/HTTP_Examples.html"/>
+</tocsect3>
+<tocsect3 name="11.5 ftplib -- FTP protocol client" url="lib/module-ftplib.html">
+<tocsect4 name="11.5.1 FTP Objects " url="lib/ftp-objects.html"/>
+</tocsect3>
+<tocsect3 name="11.6 gopherlib -- Gopher protocol client" url="lib/module-gopherlib.html"/>
+<tocsect3 name="11.7 poplib -- POP3 protocol client" url="lib/module-poplib.html">
+<tocsect4 name="11.7.1 POP3 Objects " url="lib/pop3-objects.html"/>
+<tocsect4 name="11.7.2 POP3 Example " url="lib/pop3-example.html"/>
+</tocsect3>
+<tocsect3 name="11.8 imaplib -- IMAP4 protocol client" url="lib/module-imaplib.html">
+<tocsect4 name="11.8.1 IMAP4 Objects " url="lib/imap4-objects.html"/>
+<tocsect4 name="11.8.2 IMAP4 Example " url="lib/imap4-example.html"/>
+</tocsect3>
+<tocsect3 name="11.9 nntplib -- NNTP protocol client" url="lib/module-nntplib.html">
+<tocsect4 name="11.9.1 NNTP Objects " url="lib/nntp-objects.html"/>
+</tocsect3>
+<tocsect3 name="11.10 smtplib -- SMTP protocol client" url="lib/module-smtplib.html">
+<tocsect4 name="11.10.1 SMTP Objects " url="lib/SMTP-objects.html"/>
+<tocsect4 name="11.10.2 SMTP Example " url="lib/SMTP-example.html"/>
+</tocsect3>
+<tocsect3 name="11.11 telnetlib -- Telnet client" url="lib/module-telnetlib.html">
+<tocsect4 name="11.11.1 Telnet Objects " url="lib/telnet-objects.html"/>
+<tocsect4 name="11.11.2 Telnet Example " url="lib/telnet-example.html"/>
+</tocsect3>
+<tocsect3 name="11.12 urlparse -- Parse URLs into components" url="lib/module-urlparse.html"/>
+<tocsect3 name="11.13 SocketServer -- A framework for network servers" url="lib/module-SocketServer.html"/>
+<tocsect3 name="11.14 BaseHTTPServer -- Basic HTTP server" url="lib/module-BaseHTTPServer.html"/>
+<tocsect3 name="11.15 SimpleHTTPServer -- Simple HTTP request handler" url="lib/module-SimpleHTTPServer.html"/>
+<tocsect3 name="11.16 CGIHTTPServer -- CGI-capable HTTP request handler" url="lib/module-CGIHTTPServer.html"/>
+<tocsect3 name="11.17 Cookie -- HTTP state management" url="lib/module-Cookie.html">
+<tocsect4 name="11.17.1 Cookie Objects " url="lib/cookie-objects.html"/>
+<tocsect4 name="11.17.2 Morsel Objects " url="lib/morsel-objects.html"/>
+<tocsect4 name="11.17.3 Example " url="lib/cookie-example.html"/>
+</tocsect3>
+<tocsect3 name="11.18 asyncore -- Asynchronous socket handler" url="lib/module-asyncore.html">
+<tocsect4 name="11.18.1 Example basic HTTP client " url="lib/asyncore-example.html"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="12. Internet Data Handling " url="lib/netdata.html">
+<tocsect3 name="12.1 formatter -- Generic output formatting" url="lib/module-formatter.html">
+<tocsect4 name="12.1.1 The Formatter Interface " url="lib/formatter-interface.html"/>
+<tocsect4 name="12.1.2 Formatter Implementations " url="lib/formatter-impls.html"/>
+<tocsect4 name="12.1.3 The Writer Interface " url="lib/writer-interface.html"/>
+<tocsect4 name="12.1.4 Writer Implementations " url="lib/writer-impls.html"/>
+</tocsect3>
+<tocsect3 name="12.2 rfc822 -- Parse RFC 822 mail headers" url="lib/module-rfc822.html">
+<tocsect4 name="12.2.1 Message Objects " url="lib/message-objects.html"/>
+<tocsect4 name="12.2.2 AddressList Objects " url="lib/addresslist-objects.html"/>
+</tocsect3>
+<tocsect3 name="12.3 mimetools -- Tools for parsing MIME messages" url="lib/module-mimetools.html">
+<tocsect4 name="12.3.1 Additional Methods of Message Objects " url="lib/mimetools-message-objects.html"/>
+</tocsect3>
+<tocsect3 name="12.4 MimeWriter -- Generic MIME file writer" url="lib/module-MimeWriter.html">
+<tocsect4 name="12.4.1 MimeWriter Objects " url="lib/MimeWriter-objects.html"/>
+</tocsect3>
+<tocsect3 name="12.5 multifile -- Support for files containing distinct parts" url="lib/module-multifile.html">
+<tocsect4 name="12.5.1 MultiFile Objects " url="lib/MultiFile-objects.html"/>
+<tocsect4 name="12.5.2 MultiFile Example " url="lib/multifile-example.html"/>
+</tocsect3>
+<tocsect3 name="12.6 binhex -- Encode and decode binhex4 files" url="lib/module-binhex.html">
+<tocsect4 name="12.6.1 Notes " url="lib/binhex-notes.html"/>
+</tocsect3>
+<tocsect3 name="12.7 uu -- Encode and decode uuencode files" url="lib/module-uu.html"/>
+<tocsect3 name="12.8 binascii -- Convert between binary and ASCII" url="lib/module-binascii.html"/>
+<tocsect3 name="12.9 xdrlib -- Encode and decode XDR data" url="lib/module-xdrlib.html">
+<tocsect4 name="12.9.1 Packer Objects " url="lib/xdr-packer-objects.html"/>
+<tocsect4 name="12.9.2 Unpacker Objects " url="lib/xdr-unpacker-objects.html"/>
+<tocsect4 name="12.9.3 Exceptions " url="lib/xdr-exceptions.html"/>
+</tocsect3>
+<tocsect3 name="12.10 mailcap -- Mailcap file handling." url="lib/module-mailcap.html"/>
+<tocsect3 name="12.11 mimetypes -- Map filenames to MIME types" url="lib/module-mimetypes.html"/>
+<tocsect3 name="12.12 base64 -- Encode and decode MIME base64 data" url="lib/module-base64.html"/>
+<tocsect3 name="12.13 quopri -- Encode and decode MIME quoted-printable data" url="lib/module-quopri.html"/>
+<tocsect3 name="12.14 mailbox -- Read various mailbox formats" url="lib/module-mailbox.html">
+<tocsect4 name="12.14.1 Mailbox Objects " url="lib/mailbox-objects.html"/>
+</tocsect3>
+<tocsect3 name="12.15 mhlib -- Access to MH mailboxes" url="lib/module-mhlib.html">
+<tocsect4 name="12.15.1 MH Objects " url="lib/mh-objects.html"/>
+<tocsect4 name="12.15.2 Folder Objects " url="lib/mh-folder-objects.html"/>
+<tocsect4 name="12.15.3 Message Objects " url="lib/mh-message-objects.html"/>
+</tocsect3>
+<tocsect3 name="12.16 mimify -- MIME processing of mail messages" url="lib/module-mimify.html"/>
+<tocsect3 name="12.17 netrc -- netrc file processing" url="lib/module-netrc.html">
+<tocsect4 name="12.17.1 netrc Objects " url="lib/netrc-objects.html"/>
+</tocsect3>
+<tocsect3 name="12.18 robotparser -- Parser for robots.txt" url="lib/module-robotparser.html"/>
+</tocsect2>
+<tocsect2 name="13. Structured Markup Processing Tools " url="lib/markup.html">
+<tocsect3 name="13.1 sgmllib -- Simple SGML parser" url="lib/module-sgmllib.html"/>
+<tocsect3 name="13.2 htmllib -- A parser for HTML documents" url="lib/module-htmllib.html">
+<tocsect4 name="13.2.1 HTMLParser Objects " url="lib/html-parser-objects.html"/>
+</tocsect3>
+<tocsect3 name="13.3 htmlentitydefs -- Definitions of HTML general entities" url="lib/module-htmlentitydefs.html"/>
+<tocsect3 name="13.4 xml.parsers.expat -- Fast XML parsing using the Expat library" url="lib/module-xml.parsers.expat.html">
+<tocsect4 name="13.4.1 Example " url="lib/expat-example.html"/>
+<tocsect4 name="13.4.2 Expat error constants " url="lib/expat-errors.html"/>
+</tocsect3>
+<tocsect3 name="13.5 xml.sax -- Support for SAX2 parsers" url="lib/module-xml.sax.html">
+<tocsect4 name="13.5.1 SAXException Objects " url="lib/sax-exception-objects.html"/>
+</tocsect3>
+<tocsect3 name="13.6 xml.sax.handler -- Base classes for SAX handlers" url="lib/module-xml.sax.handler.html">
+<tocsect4 name="13.6.1 ContentHandler Objects " url="lib/content-handler-objects.html"/>
+<tocsect4 name="13.6.2 DTDHandler Objects " url="lib/dtd-handler-objects.html"/>
+<tocsect4 name="13.6.3 EntityResolver Objects " url="lib/entity-resolver-objects.html"/>
+</tocsect3>
+<tocsect3 name="13.7 xml.sax.saxutils -- SAX Utilities" url="lib/module-xml.sax.saxutils.html"/>
+<tocsect3 name="13.8 xml.sax.xmlreader -- Interface for XML parsers" url="lib/module-xml.sax.xmlreader.html">
+<tocsect4 name="13.8.1 XMLReader Objects " url="lib/xmlreader-objects.html"/>
+<tocsect4 name="13.8.2 IncrementalParser Objects " url="lib/incremental-parser-objects.html"/>
+<tocsect4 name="13.8.3 Locator Objects " url="lib/locator-objects.html"/>
+<tocsect4 name="13.8.4 InputSource Objects " url="lib/input-source-objects.html"/>
+<tocsect4 name="13.8.5 AttributesImpl Objects " url="lib/attributes-impl-objects.html"/>
+<tocsect4 name="13.8.6 AttributesNSImpl Objects " url="lib/attributes-ns-impl-objects.html"/>
+</tocsect3>
+<tocsect3 name="13.9 xmllib -- A parser for XML documents" url="lib/module-xmllib.html">
+<tocsect4 name="13.9.1 XML Namespaces " url="lib/xml-namespace.html"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="14. Multimedia Services" url="lib/mmedia.html">
+<tocsect3 name="14.1 audioop -- Manipulate raw audio data" url="lib/module-audioop.html"/>
+<tocsect3 name="14.2 imageop -- Manipulate raw image data" url="lib/module-imageop.html"/>
+<tocsect3 name="14.3 aifc -- Read and write AIFF and AIFC files" url="lib/module-aifc.html"/>
+<tocsect3 name="14.4 sunau -- Read and write Sun AU files" url="lib/module-sunau.html">
+<tocsect4 name="14.4.1 AU_read Objects " url="lib/au-read-objects.html"/>
+<tocsect4 name="14.4.2 AU_write Objects " url="lib/au-write-objects.html"/>
+</tocsect3>
+<tocsect3 name="14.5 wave -- Read and write WAV files" url="lib/module-wave.html">
+<tocsect4 name="14.5.1 Wave_read Objects " url="lib/Wave-read-objects.html"/>
+<tocsect4 name="14.5.2 Wave_write Objects " url="lib/Wave-write-objects.html"/>
+</tocsect3>
+<tocsect3 name="14.6 chunk -- Read IFF chunked data" url="lib/module-chunk.html"/>
+<tocsect3 name="14.7 colorsys -- Conversions between color systems" url="lib/module-colorsys.html"/>
+<tocsect3 name="14.8 rgbimg -- Read and write ``SGI RGB'' files" url="lib/module-rgbimg.html"/>
+<tocsect3 name="14.9 imghdr -- Determine the type of an image" url="lib/module-imghdr.html"/>
+<tocsect3 name="14.10 sndhdr -- Determine type of sound file" url="lib/module-sndhdr.html"/>
+</tocsect2>
+<tocsect2 name="15. Cryptographic Services" url="lib/crypto.html">
+<tocsect3 name="15.1 md5 -- MD5 message digest algorithm" url="lib/module-md5.html"/>
+<tocsect3 name="15.2 sha -- SHA message digest algorithm" url="lib/module-sha.html"/>
+<tocsect3 name="15.3 mpz -- GNU arbitrary magnitude integers" url="lib/module-mpz.html"/>
+<tocsect3 name="15.4 rotor -- Enigma-like encryption and decryption" url="lib/module-rotor.html"/>
+</tocsect2>
+<tocsect2 name="16. Restricted Execution " url="lib/restricted.html">
+<tocsect3 name="16.1 rexec -- Restricted execution framework" url="lib/module-rexec.html">
+<tocsect4 name="16.1.1 An example" url="lib/node366.html"/>
+</tocsect3>
+<tocsect3 name="16.2 Bastion -- Restricting access to objects" url="lib/module-Bastion.html"/>
+</tocsect2>
+<tocsect2 name="17. Python Language Services " url="lib/language.html">
+<tocsect3 name="17.1 parser -- Access Python parse trees" url="lib/module-parser.html">
+<tocsect4 name="17.1.1 Creating AST Objects " url="lib/Creating_ASTs.html"/>
+<tocsect4 name="17.1.2 Converting AST Objects " url="lib/Converting_ASTs.html"/>
+<tocsect4 name="17.1.3 Queries on AST Objects " url="lib/Querying_ASTs.html"/>
+<tocsect4 name="17.1.4 Exceptions and Error Handling " url="lib/AST_Errors.html"/>
+<tocsect4 name="17.1.5 AST Objects " url="lib/AST_Objects.html"/>
+<tocsect4 name="17.1.6 Examples " url="lib/AST_Examples.html"/>
+</tocsect3>
+<tocsect3 name="17.2 symbol -- Constants used with Python parse trees" url="lib/module-symbol.html"/>
+<tocsect3 name="17.3 token -- Constants used with Python parse trees" url="lib/module-token.html"/>
+<tocsect3 name="17.4 keyword -- Testing for Python keywords" url="lib/module-keyword.html"/>
+<tocsect3 name="17.5 tokenize -- Tokenizer for Python source" url="lib/module-tokenize.html"/>
+<tocsect3 name="17.6 tabnanny -- Detection of ambiguous indentation" url="lib/module-tabnanny.html"/>
+<tocsect3 name="17.7 pyclbr -- Python class browser support" url="lib/module-pyclbr.html">
+<tocsect4 name="17.7.1 Class Descriptor Objects " url="lib/pyclbr-class-objects.html"/>
+</tocsect3>
+<tocsect3 name="17.8 py_compile -- Compile Python source files" url="lib/module-pycompile.html"/>
+<tocsect3 name="17.9 compileall -- Byte-compile Python libraries" url="lib/module-compileall.html"/>
+<tocsect3 name="17.10 dis -- Disassembler for Python byte code" url="lib/module-dis.html">
+<tocsect4 name="17.10.1 Python Byte Code Instructions" url="lib/bytecodes.html"/>
+</tocsect3>
+</tocsect2>
+<tocsect2 name="18. SGI IRIX Specific Services" url="lib/sgi.html">
+<tocsect3 name="18.1 al -- Audio functions on the SGI" url="lib/module-al.html">
+<tocsect4 name="18.1.1 Configuration Objects " url="lib/al-config-objects.html"/>
+<tocsect4 name="18.1.2 Port Objects " url="lib/al-port-objects.html"/>
+</tocsect3>
+<tocsect3 name="18.2 AL -- Constants used with the al module" url="lib/module-al-constants.html"/>
+<tocsect3 name="18.3 cd -- CD-ROM access on SGI systems" url="lib/module-cd.html">
+<tocsect4 name="18.3.1 Player Objects" url="lib/player-objects.html"/>
+<tocsect4 name="18.3.2 Parser Objects" url="lib/cd-parser-objects.html"/>
+</tocsect3>
+<tocsect3 name="18.4 fl -- FORMS library interface for GUI applications" url="lib/module-fl.html">
+<tocsect4 name="18.4.1 Functions Defined in Module fl" url="lib/FL_Functions.html"/>
+<tocsect4 name="18.4.2 Form Objects" url="lib/form-objects.html"/>
+<tocsect4 name="18.4.3 FORMS Objects" url="lib/forms-objects.html"/>
+</tocsect3>
+<tocsect3 name="18.5 FL -- Constants used with the fl module" url="lib/module-fl-constants.html"/>
+<tocsect3 name="18.6 flp -- Functions for loading stored FORMS designs" url="lib/module-flp.html"/>
+<tocsect3 name="18.7 fm -- Font Manager interface" url="lib/module-fm.html"/>
+<tocsect3 name="18.8 gl -- Graphics Library interface" url="lib/module-gl.html"/>
+<tocsect3 name="18.9 DEVICE -- Constants used with the gl module" url="lib/module-DEVICE.html"/>
+<tocsect3 name="18.10 GL -- Constants used with the gl module" url="lib/module-gl-constants.html"/>
+<tocsect3 name="18.11 imgfile -- Support for SGI imglib files" url="lib/module-imgfile.html"/>
+<tocsect3 name="18.12 jpeg -- Read and write JPEG files" url="lib/module-jpeg.html"/>
+</tocsect2>
+<tocsect2 name="19. SunOS Specific Services" url="lib/sunos.html">
+<tocsect3 name="19.1 sunaudiodev -- Access to Sun audio hardware" url="lib/module-sunaudiodev.html">
+<tocsect4 name="19.1.1 Audio Device Objects " url="lib/audio-device-objects.html"/>
+</tocsect3>
+<tocsect3 name="19.2 SUNAUDIODEV -- Constants used with sunaudiodev" url="lib/module-sunaudiodev-constants.html"/>
+</tocsect2>
+<tocsect2 name="20. MS Windows Specific Services" url="lib/node413.html">
+<tocsect3 name="20.1 msvcrt - Useful routines from the MS VC++ runtime" url="lib/module-msvcrt.html">
+<tocsect4 name="20.1.1 File Operations " url="lib/msvcrt-files.html"/>
+<tocsect4 name="20.1.2 Console I/O " url="lib/msvcrt-console.html"/>
+<tocsect4 name="20.1.3 Other Functions " url="lib/msvcrt-other.html"/>
+</tocsect3>
+<tocsect3 name="20.2 _winreg - Windows registry access" url="lib/module--winreg.html">
+<tocsect4 name="20.2.1 Registry handle objects " url="lib/handle-object.html"/>
+</tocsect3>
+<tocsect3 name="20.3 winsound -- Sound-playing interface for Windows" url="lib/module-winsound.html"/>
+</tocsect2>
+<tocsect2 name="A. Undocumented Modules " url="lib/undoc.html">
+<tocsect3 name="A.1 Frameworks" url="lib/node422.html"/>
+<tocsect3 name="A.2 Miscellaneous useful utilities" url="lib/node423.html"/>
+<tocsect3 name="A.3 Platform specific modules" url="lib/node424.html"/>
+<tocsect3 name="A.4 Multimedia" url="lib/node425.html"/>
+<tocsect3 name="A.5 Obsolete " url="lib/obsolete-modules.html"/>
+<tocsect3 name="A.6 SGI-specific Extension modules" url="lib/node427.html"/>
+</tocsect2>
+<tocsect2 name="B. Reporting Bugs" url="lib/reporting-bugs.html"/>
+<tocsect2 name="Module Index" url="lib/modindex.html"/>
+<tocsect2 name="Index" url="lib/genindex.html"/>
+<tocsect2 name="About this document ..." url="lib/about.html"/>
+</tocsect1>
+
+<index>
+<entry name="__abs__() (numeric object method)" url="ref/numeric-types.html#l2h-209"/>
+<entry name="__add__() (numeric object method)" url="ref/numeric-types.html#l2h-183"/>
+<entry name="__add__() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="__and__() (numeric object method)" url="ref/numeric-types.html#l2h-192"/>
+<entry name="__bases__ (class attribute)" url="ref/types.html#l2h-47"/>
+<entry name="__builtin__ (built-in module)" url="ref/execframes.html#l2h-247"/>
+<entry name="__builtins__" url="ref/exec.html#l2h-399"/>
+<entry name="__call__() (object method)" url="ref/callable-types.html#l2h-163"/>
+<entry name="__class__ (instance attribute)" url="ref/types.html#l2h-49"/>
+<entry name="__cmp__() (object method)" url="ref/customization.html#l2h-137"/>
+<entry name="__coerce__() (numeric object method)" url="ref/sequence-types.html#l2h-170"/>
+<entry name="__complex__() (numeric object method)" url="ref/numeric-types.html#l2h-211"/>
+<entry name="__contains__() (sequence object method)" url="ref/sequence-methods.html#l2h-182"/>
+<entry name="__debug__" url="ref/assert.html#l2h-340"/>
+<entry name="__del__() (object method)" url="ref/customization.html#l2h-134"/>
+<entry name="__delattr__() (object method)" url="ref/attribute-access.html#l2h-162"/>
+<entry name="__delitem__() (mapping object method)" url="ref/sequence-types.html#l2h-176"/>
+<entry name="__delslice__() (sequence object method)" url="ref/sequence-methods.html#l2h-181"/>
+<entry name="__dict__ (class attribute)" url="ref/types.html#l2h-47"/>
+<entry name="__dict__ (instance attribute)" url="ref/types.html#l2h-49"/>
+<entry name="__dict__ (module attribute)" url="ref/types.html#l2h-43"/>
+<entry name="__div__() (numeric object method)" url="ref/numeric-types.html#l2h-186"/>
+<entry name="__divmod__() (numeric object method)" url="ref/numeric-types.html#l2h-188"/>
+<entry name="__doc__ (class attribute)" url="ref/types.html#l2h-47"/>
+<entry name="__doc__ (function attribute)" url="ref/types.html#l2h-35"/>
+<entry name="__doc__ (module attribute)" url="ref/types.html#l2h-45"/>
+<entry name="__file__ (module attribute)" url="ref/types.html#l2h-45"/>
+<entry name="__float__() (numeric object method)" url="ref/numeric-types.html#l2h-214"/>
+<entry name="__getattr__() (object method)" url="ref/attribute-access.html#l2h-156"/>
+<entry name="__getitem__() (mapping object method)" url="ref/specialnames.html#l2h-132"/>
+<entry name="__getslice__() (sequence object method)" url="ref/sequence-methods.html#l2h-179"/>
+<entry name="__hash__() (object method)" url="ref/customization.html#l2h-139"/>
+<entry name="__hex__() (numeric object method)" url="ref/numeric-types.html#l2h-216"/>
+<entry name="__iadd__() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="__import__() (built-in function)" url="ref/import.html#l2h-394"/>
+<entry name="__imul__() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="__init__() (object method)" url="ref/types.html#l2h-41"/>
+<entry name="__init__.py" url="ref/import.html#l2h-393"/>
+<entry name="__int__() (numeric object method)" url="ref/numeric-types.html#l2h-212"/>
+<entry name="__invert__() (numeric object method)" url="ref/numeric-types.html#l2h-210"/>
+<entry name="__len__() (mapping object method)" url="ref/customization.html#l2h-144"/>
+<entry name="__long__() (numeric object method)" url="ref/numeric-types.html#l2h-213"/>
+<entry name="__lshift__() (numeric object method)" url="ref/numeric-types.html#l2h-190"/>
+<entry name="__main__ (built-in module)" url="ref/execframes.html#l2h-235"/>
+<entry name="__members__ (built-in object attribute)" url="ref/types.html#l2h-31"/>
+<entry name="__methods__ (built-in object attribute)" url="ref/types.html#l2h-31"/>
+<entry name="__mod__() (numeric object method)" url="ref/numeric-types.html#l2h-187"/>
+<entry name="__module__ (class attribute)" url="ref/types.html#l2h-47"/>
+<entry name="__mul__() (numeric object method)" url="ref/numeric-types.html#l2h-185"/>
+<entry name="__mul__() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="__name__ (class attribute)" url="ref/types.html#l2h-47"/>
+<entry name="__name__ (function attribute)" url="ref/types.html#l2h-35"/>
+<entry name="__name__ (module attribute)" url="ref/types.html#l2h-45"/>
+<entry name="__neg__() (numeric object method)" url="ref/numeric-types.html#l2h-207"/>
+<entry name="__nonzero__() (object method)" url="ref/customization.html#l2h-142"/>
+<entry name="__oct__() (numeric object method)" url="ref/numeric-types.html#l2h-215"/>
+<entry name="__or__() (numeric object method)" url="ref/numeric-types.html#l2h-194"/>
+<entry name="__pos__() (numeric object method)" url="ref/numeric-types.html#l2h-208"/>
+<entry name="__pow__() (numeric object method)" url="ref/numeric-types.html#l2h-189"/>
+<entry name="__radd__() (numeric object method)" url="ref/numeric-types.html#l2h-195"/>
+<entry name="__radd__() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="__rand__() (numeric object method)" url="ref/numeric-types.html#l2h-204"/>
+<entry name="__rcmp__() (object method)" url="ref/customization.html#l2h-138"/>
+<entry name="__rdiv__() (numeric object method)" url="ref/numeric-types.html#l2h-198"/>
+<entry name="__rdivmod__() (numeric object method)" url="ref/numeric-types.html#l2h-200"/>
+<entry name="__repr__() (object method)" url="ref/customization.html#l2h-135"/>
+<entry name="__rlshift__() (numeric object method)" url="ref/numeric-types.html#l2h-202"/>
+<entry name="__rmod__() (numeric object method)" url="ref/numeric-types.html#l2h-199"/>
+<entry name="__rmul__() (numeric object method)" url="ref/numeric-types.html#l2h-197"/>
+<entry name="__rmul__() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="__ror__() (numeric object method)" url="ref/numeric-types.html#l2h-206"/>
+<entry name="__rpow__() (numeric object method)" url="ref/numeric-types.html#l2h-201"/>
+<entry name="__rrshift__() (numeric object method)" url="ref/numeric-types.html#l2h-203"/>
+<entry name="__rshift__() (numeric object method)" url="ref/numeric-types.html#l2h-191"/>
+<entry name="__rsub__() (numeric object method)" url="ref/numeric-types.html#l2h-196"/>
+<entry name="__rxor__() (numeric object method)" url="ref/numeric-types.html#l2h-205"/>
+<entry name="__setattr__() (object method)" url="ref/attribute-access.html#l2h-158"/>
+<entry name="__setitem__() (mapping object method)" url="ref/sequence-types.html#l2h-175"/>
+<entry name="__setslice__() (sequence object method)" url="ref/sequence-methods.html#l2h-180"/>
+<entry name="__str__() (object method)" url="ref/customization.html#l2h-136"/>
+<entry name="__sub__() (numeric object method)" url="ref/numeric-types.html#l2h-184"/>
+<entry name="__xor__() (numeric object method)" url="ref/numeric-types.html#l2h-193"/>
+<entry name="abs() (built-in function)" url="ref/numeric-types.html#l2h-224"/>
+<entry name="addition" url="ref/binary.html#l2h-311"/>
+<entry name="and, bit-wise" url="ref/bitwise.html#l2h-316"/>
+<entry name="and operator" url="ref/lambda.html#l2h-326"/>
+<entry name="anonmymous, function" url="ref/lambda.html#l2h-328"/>
+<entry name="append() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="argument, function" url="ref/types.html#l2h-102"/>
+<entry name="arithmetic, conversion" url="ref/conversions.html#l2h-260"/>
+<entry name="arithmetic, operation, binary" url="ref/binary.html#l2h-307"/>
+<entry name="arithmetic, operation, unary" url="ref/unary.html#l2h-302"/>
+<entry name="array (standard module)" url="ref/types.html#l2h-94"/>
+<entry name="ASCII" url="ref/notation.html#l2h-2"/>
+<entry name="assert statement" url="ref/assert.html#l2h-338"/>
+<entry name="AssertionError exception" url="ref/assert.html#l2h-341"/>
+<entry name="assertions, debugging" url="ref/assert.html#l2h-339"/>
+<entry name="assignment, attribute" url="ref/assignment.html#l2h-343"/>
+<entry name="assignment, augmented" url="ref/augassign.html#l2h-354"/>
+<entry name="assignment, class attribute" url="ref/types.html#l2h-112"/>
+<entry name="assignment (continued), class instance attribute" url="ref/types.html#l2h-115"/>
+<entry name="assignment (continued), slicing" url="ref/assignment.html#l2h-353"/>
+<entry name="assignment (continued), statement" url="ref/types.html#l2h-92"/>
+<entry name="assignment (continued), subscription" url="ref/assignment.html#l2h-350"/>
+<entry name="assignment (continued), target list" url="ref/assignment.html#l2h-346"/>
+<entry name="atom" url="ref/atoms.html#l2h-261"/>
+<entry name="attribute" url="ref/types.html#l2h-69"/>
+<entry name="assignment" url="ref/assignment.html#l2h-343"/>
+<entry name="assignment, class" url="ref/types.html#l2h-112"/>
+<entry name="assignment, class instance" url="ref/types.html#l2h-115"/>
+<entry name="class" url="ref/types.html#l2h-111"/>
+<entry name="class instance" url="ref/types.html#l2h-114"/>
+<entry name="deletion" url="ref/del.html#l2h-360"/>
+<entry name="generic special" url="ref/types.html#l2h-69"/>
+<entry name="reference" url="ref/attribute-references.html#l2h-282"/>
+<entry name="special" url="ref/types.html#l2h-69"/>
+<entry name="AttributeError exception" url="ref/attribute-references.html#l2h-283"/>
+<entry name="augmented, assignment" url="ref/augassign.html#l2h-354"/>
+<entry name="augmented, back-quotes" url="ref/customization.html#l2h-149"/>
+<entry name="augmented, backslash character" url="ref/explicit-joining.html#l2h-7"/>
+<entry name="backward, quotes" url="ref/customization.html#l2h-149"/>
+<entry name="binary, arithmetic operation" url="ref/binary.html#l2h-307"/>
+<entry name="binary, bit-wise operation" url="ref/bitwise.html#l2h-315"/>
+<entry name="binding, global name" url="ref/global.html#l2h-396"/>
+<entry name="binding, name" url="ref/execframes.html#l2h-241"/>
+<entry name="bit-wise, and" url="ref/bitwise.html#l2h-316"/>
+<entry name="bit-wise, operation, binary" url="ref/bitwise.html#l2h-315"/>
+<entry name="bit-wise, operation, unary" url="ref/unary.html#l2h-302"/>
+<entry name="bit-wise, or" url="ref/bitwise.html#l2h-318"/>
+<entry name="bit-wise, xor" url="ref/bitwise.html#l2h-317"/>
+<entry name="blank line" url="ref/blank-lines.html#l2h-8"/>
+<entry name="block, code" url="ref/execframes.html#l2h-238"/>
+<entry name="block, BNF" url="ref/notation.html#l2h-1"/>
+<entry name="Boolean, operation" url="ref/lambda.html#l2h-324"/>
+<entry name="break statement" url="ref/break.html#l2h-375"/>
+<entry name="bsddb (standard module)" url="ref/types.html#l2h-100"/>
+<entry name="built-in, method" url="ref/types.html#l2h-107"/>
+<entry name="built-in, module" url="ref/import.html#l2h-386"/>
+<entry name="built-in, name" url="ref/atom-identifiers.html#l2h-263"/>
+<entry name="built-in function, call" url="ref/calls.html#l2h-298"/>
+<entry name="built-in function object" url="ref/types.html#l2h-106"/>
+<entry name="built-in method, call" url="ref/calls.html#l2h-298"/>
+<entry name="built-in method object" url="ref/types.html#l2h-107"/>
+<entry name="byte" url="ref/types.html#l2h-85"/>
+<entry name="bytecode" url="ref/types.html#l2h-124"/>
+<entry name="C" url="ref/strings.html#l2h-17"/>
+<entry name="language" url="ref/types.html#l2h-68"/>
+<entry name="call" url="ref/calls.html#l2h-293"/>
+<entry name="built-in function" url="ref/calls.html#l2h-298"/>
+<entry name="built-in method" url="ref/calls.html#l2h-298"/>
+<entry name="class instance" url="ref/calls.html#l2h-300"/>
+<entry name="class object" url="ref/types.html#l2h-108"/>
+<entry name="function" url="ref/types.html#l2h-102"/>
+<entry name="instance" url="ref/callable-types.html#l2h-164"/>
+<entry name="method" url="ref/calls.html#l2h-298"/>
+<entry name="procedure" url="ref/exprstmts.html#l2h-337"/>
+<entry name="user-defined function" url="ref/calls.html#l2h-297"/>
+<entry name="callable object" url="ref/types.html#l2h-101"/>
+<entry name="chaining, comparisons" url="ref/comparisons.html#l2h-321"/>
+<entry name="character" url="ref/types.html#l2h-85"/>
+<entry name="character set" url="ref/types.html#l2h-86"/>
+<entry name="chr() (built-in function)" url="ref/types.html#l2h-83"/>
+<entry name="class, attribute" url="ref/types.html#l2h-111"/>
+<entry name="class, attribute assignment" url="ref/types.html#l2h-112"/>
+<entry name="class, constructor" url="ref/customization.html#l2h-145"/>
+<entry name="class, definition" url="ref/return.html#l2h-370"/>
+<entry name="class, instance" url="ref/types.html#l2h-114"/>
+<entry name="class, name" url="ref/class.html#l2h-434"/>
+<entry name="class instance, attribute" url="ref/types.html#l2h-114"/>
+<entry name="class instance, attribute assignment" url="ref/types.html#l2h-115"/>
+<entry name="class instance, call" url="ref/calls.html#l2h-300"/>
+<entry name="class instance object" url="ref/types.html#l2h-108"/>
+<entry name="class object" url="ref/types.html#l2h-108"/>
+<entry name="call" url="ref/types.html#l2h-108"/>
+<entry name="clause" url="ref/compound.html#l2h-403"/>
+<entry name="clear() (mapping object method)" url="ref/sequence-types.html#l2h-166"/>
+<entry name="cmp() (built-in function)" url="ref/customization.html#l2h-152"/>
+<entry name="co_argcount (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_code (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_consts (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_filename (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_firstlineno (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_flags (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_lnotab (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_name (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_names (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_nlocals (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_stacksize (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="co_varnames (code object attribute)" url="ref/types.html#l2h-57"/>
+<entry name="code, block" url="ref/execframes.html#l2h-238"/>
+<entry name="code block" url="ref/execframes.html#l2h-232"/>
+<entry name="code object" url="ref/types.html#l2h-124"/>
+<entry name="comma" url="ref/parenthesized.html#l2h-270"/>
+<entry name="trailing" url="ref/exprlists.html#l2h-331"/>
+<entry name="command line" url="ref/programs.html#l2h-439"/>
+<entry name="comment" url="ref/comments.html#l2h-6"/>
+<entry name="comparison" url="ref/comparisons.html#l2h-319"/>
+<entry name="string" url="ref/types.html#l2h-86"/>
+<entry name="comparisons" url="ref/customization.html#l2h-152"/>
+<entry name="chaining" url="ref/comparisons.html#l2h-321"/>
+<entry name="compile() (built-in function)" url="ref/global.html#l2h-397"/>
+<entry name="complex, number" url="ref/types.html#l2h-78"/>
+<entry name="complex() (built-in function)" url="ref/numeric-types.html#l2h-225"/>
+<entry name="complex literal" url="ref/numbers.html#l2h-20"/>
+<entry name="complex object" url="ref/types.html#l2h-78"/>
+<entry name="compound, statement" url="ref/compound.html#l2h-402"/>
+<entry name="comprehensions, list" url="ref/lists.html#l2h-271"/>
+<entry name="constant" url="ref/literals.html#l2h-13"/>
+<entry name="constructor, class" url="ref/customization.html#l2h-145"/>
+<entry name="container" url="ref/objects.html#l2h-29"/>
+<entry name="continue statement" url="ref/continue.html#l2h-380"/>
+<entry name="conversion, arithmetic" url="ref/conversions.html#l2h-260"/>
+<entry name="conversion, string" url="ref/customization.html#l2h-149"/>
+<entry name="copy() (mapping object method)" url="ref/sequence-types.html#l2h-166"/>
+<entry name="count() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="dangling, else" url="ref/compound.html#l2h-406"/>
+<entry name="data" url="ref/objects.html#l2h-24"/>
+<entry name="type" url="ref/types.html#l2h-68"/>
+<entry name="type, immutable" url="ref/atom-literals.html#l2h-267"/>
+<entry name="datum" url="ref/dict.html#l2h-275"/>
+<entry name="dbm (standard module)" url="ref/types.html#l2h-98"/>
+<entry name="debugging, assertions" url="ref/assert.html#l2h-339"/>
+<entry name="decimal literal" url="ref/numbers.html#l2h-20"/>
+<entry name="DEDENT token" url="ref/indentation.html#l2h-10"/>
+<entry name="default, parameter value" url="ref/function.html#l2h-430"/>
+<entry name="definition, class" url="ref/return.html#l2h-370"/>
+<entry name="definition, function" url="ref/return.html#l2h-370"/>
+<entry name="del statement" url="ref/types.html#l2h-92"/>
+<entry name="delete" url="ref/types.html#l2h-92"/>
+<entry name="deletion, attribute" url="ref/del.html#l2h-360"/>
+<entry name="deletion, target" url="ref/del.html#l2h-358"/>
+<entry name="deletion, target list" url="ref/del.html#l2h-358"/>
+<entry name="delimiters" url="ref/delimiters.html#l2h-22"/>
+<entry name="destructor" url="ref/customization.html#l2h-146"/>
+<entry name="dictionary, display" url="ref/dict.html#l2h-274"/>
+<entry name="dictionary object" url="ref/types.html#l2h-96"/>
+<entry name="display, dictionary" url="ref/dict.html#l2h-274"/>
+<entry name="display, list" url="ref/lists.html#l2h-271"/>
+<entry name="display, tuple" url="ref/parenthesized.html#l2h-270"/>
+<entry name="division" url="ref/binary.html#l2h-309"/>
+<entry name="divmod() (built-in function)" url="ref/numeric-types.html#l2h-218"/>
+<entry name="documentation string" url="ref/types.html#l2h-125"/>
+<entry name="EBCDIC" url="ref/types.html#l2h-86"/>
+<entry name="elif, keyword" url="ref/if.html#l2h-408"/>
+<entry name="Ellipsis" url="ref/types.html#l2h-71"/>
+<entry name="Ellipsis object" url="ref/types.html#l2h-71"/>
+<entry name="else, dangling" url="ref/compound.html#l2h-406"/>
+<entry name="else, keyword" url="ref/break.html#l2h-377"/>
+<entry name="empty, list" url="ref/lists.html#l2h-273"/>
+<entry name="empty, tuple" url="ref/types.html#l2h-91"/>
+<entry name="error handling" url="ref/exceptions.html#l2h-255"/>
+<entry name="errors" url="ref/exceptions.html#l2h-255"/>
+<entry name="escape sequence" url="ref/strings.html#l2h-17"/>
+<entry name="eval() (built-in function)" url="ref/global.html#l2h-397"/>
+<entry name="exc_info (in module sys)" url="ref/types.html#l2h-63"/>
+<entry name="exc_traceback (in module sys)" url="ref/types.html#l2h-63"/>
+<entry name="exc_type (in module sys)" url="ref/try.html#l2h-419"/>
+<entry name="exc_value (in module sys)" url="ref/try.html#l2h-419"/>
+<entry name="except, keyword" url="ref/try.html#l2h-421"/>
+<entry name="exception" url="ref/exceptions.html#l2h-250"/>
+<entry name="AssertionError" url="ref/assert.html#l2h-341"/>
+<entry name="AttributeError" url="ref/attribute-references.html#l2h-283"/>
+<entry name="handler" url="ref/types.html#l2h-127"/>
+<entry name="ImportError" url="ref/import.html#l2h-387"/>
+<entry name="NameError" url="ref/atom-identifiers.html#l2h-264"/>
+<entry name="exception (continued), raising" url="ref/raise.html#l2h-373"/>
+<entry name="exception (continued), RuntimeError" url="ref/print.html#l2h-367"/>
+<entry name="exception (continued), SyntaxError" url="ref/import.html#l2h-387"/>
+<entry name="exception (continued), TypeError" url="ref/unary.html#l2h-306"/>
+<entry name="exception (continued), ValueError" url="ref/shifting.html#l2h-314"/>
+<entry name="exception (continued), ZeroDivisionError" url="ref/binary.html#l2h-309"/>
+<entry name="exception handler" url="ref/exceptions.html#l2h-255"/>
+<entry name="exclusive, or" url="ref/bitwise.html#l2h-317"/>
+<entry name="exec statement" url="ref/execframes.html#l2h-249"/>
+<entry name="execfile() (built-in function)" url="ref/global.html#l2h-397"/>
+<entry name="execution, frame" url="ref/execframes.html#l2h-237"/>
+<entry name="execution, restricted" url="ref/execframes.html#l2h-248"/>
+<entry name="execution, stack" url="ref/types.html#l2h-127"/>
+<entry name="execution model" url="ref/execmodel.html#l2h-231"/>
+<entry name="expression" url="ref/expressions.html#l2h-257"/>
+<entry name="lambda" url="ref/lambda.html#l2h-328"/>
+<entry name="list" url="ref/exprlists.html#l2h-329"/>
+<entry name="statement" url="ref/exprstmts.html#l2h-334"/>
+<entry name="extended, slicing" url="ref/slicings.html#l2h-292"/>
+<entry name="extended print statement" url="ref/print.html#l2h-368"/>
+<entry name="extension, filename" url="ref/import.html#l2h-386"/>
+<entry name="extension, module" url="ref/types.html#l2h-68"/>
+<entry name="extension, f_back (frame attribute)" url="ref/types.html#l2h-59"/>
+<entry name="extension, f_builtins (frame attribute)" url="ref/types.html#l2h-59"/>
+<entry name="extension, f_code (frame attribute)" url="ref/types.html#l2h-59"/>
+<entry name="extension, f_exc_traceback (frame attribute)" url="ref/types.html#l2h-61"/>
+<entry name="extension, f_exc_type (frame attribute)" url="ref/types.html#l2h-61"/>
+<entry name="extension, f_exc_value (frame attribute)" url="ref/types.html#l2h-61"/>
+<entry name="extension, f_globals (frame attribute)" url="ref/types.html#l2h-59"/>
+<entry name="extension, f_lasti (frame attribute)" url="ref/types.html#l2h-59"/>
+<entry name="extension, f_lineno (frame attribute)" url="ref/types.html#l2h-59"/>
+<entry name="extension, f_locals (frame attribute)" url="ref/types.html#l2h-59"/>
+<entry name="extension, f_restricted (frame attribute)" url="ref/types.html#l2h-59"/>
+<entry name="extension, f_trace (frame attribute)" url="ref/types.html#l2h-61"/>
+<entry name="extension, file object" url="ref/types.html#l2h-117"/>
+<entry name="filename, extension" url="ref/import.html#l2h-386"/>
+<entry name="finally, keyword" url="ref/return.html#l2h-371"/>
+<entry name="float() (built-in function)" url="ref/numeric-types.html#l2h-228"/>
+<entry name="floating point, number" url="ref/types.html#l2h-77"/>
+<entry name="floating point literal" url="ref/numbers.html#l2h-20"/>
+<entry name="floating point object" url="ref/types.html#l2h-77"/>
+<entry name="for statement" url="ref/break.html#l2h-376"/>
+<entry name="form, lambda" url="ref/lambda.html#l2h-328"/>
+<entry name="frame, execution" url="ref/execframes.html#l2h-237"/>
+<entry name="frame object" url="ref/types.html#l2h-126"/>
+<entry name="from, keyword" url="ref/import.html#l2h-385"/>
+<entry name="from statement" url="ref/execframes.html#l2h-249"/>
+<entry name="func_code (function attribute)" url="ref/types.html#l2h-35"/>
+<entry name="func_defaults (function attribute)" url="ref/types.html#l2h-35"/>
+<entry name="func_doc (function attribute)" url="ref/types.html#l2h-35"/>
+<entry name="func_globals (function attribute)" url="ref/types.html#l2h-35"/>
+<entry name="function, anonmymous" url="ref/lambda.html#l2h-328"/>
+<entry name="function, argument" url="ref/types.html#l2h-102"/>
+<entry name="function, call" url="ref/types.html#l2h-102"/>
+<entry name="function, call, user-defined" url="ref/calls.html#l2h-297"/>
+<entry name="function, definition" url="ref/return.html#l2h-370"/>
+<entry name="function, name" url="ref/function.html#l2h-429"/>
+<entry name="function, user-defined" url="ref/types.html#l2h-103"/>
+<entry name="function object" url="ref/types.html#l2h-103"/>
+<entry name="garbage collection" url="ref/objects.html#l2h-28"/>
+<entry name="gdbm (standard module)" url="ref/types.html#l2h-99"/>
+<entry name="generic, special attribute" url="ref/types.html#l2h-69"/>
+<entry name="get() (mapping object method)" url="ref/sequence-types.html#l2h-166"/>
+<entry name="global, name" url="ref/atom-identifiers.html#l2h-263"/>
+<entry name="global, name binding" url="ref/global.html#l2h-396"/>
+<entry name="global (continued), namespace" url="ref/types.html#l2h-104"/>
+<entry name="global statement" url="ref/execframes.html#l2h-246"/>
+<entry name="globals() (built-in function)" url="ref/exec.html#l2h-400"/>
+<entry name="grammar" url="ref/notation.html#l2h-1"/>
+<entry name="grouping" url="ref/indentation.html#l2h-9"/>
+<entry name="handle an exception" url="ref/exceptions.html#l2h-254"/>
+<entry name="handler, exception" url="ref/types.html#l2h-127"/>
+<entry name="has_key() (mapping object method)" url="ref/sequence-types.html#l2h-166"/>
+<entry name="hash() (built-in function)" url="ref/customization.html#l2h-155"/>
+<entry name="hash character" url="ref/comments.html#l2h-6"/>
+<entry name="hex() (built-in function)" url="ref/numeric-types.html#l2h-230"/>
+<entry name="hexadecimal literal" url="ref/numbers.html#l2h-20"/>
+<entry name="hierarchical, module names" url="ref/import.html#l2h-391"/>
+<entry name="hierarchy, type" url="ref/types.html#l2h-68"/>
+<entry name="hierarchy, id() (built-in function)" url="ref/objects.html#l2h-25"/>
+<entry name="hierarchy, identifier" url="ref/identifiers.html#l2h-11"/>
+<entry name="identity, test" url="ref/comparisons.html#l2h-323"/>
+<entry name="identity of an object" url="ref/objects.html#l2h-27"/>
+<entry name="if statement" url="ref/if.html#l2h-407"/>
+<entry name="im_class (method attribute)" url="ref/types.html#l2h-39"/>
+<entry name="im_func (method attribute)" url="ref/types.html#l2h-37"/>
+<entry name="im_self (method attribute)" url="ref/types.html#l2h-37"/>
+<entry name="imaginary literal" url="ref/numbers.html#l2h-20"/>
+<entry name="immutable, data type" url="ref/atom-literals.html#l2h-267"/>
+<entry name="immutable, object" url="ref/atom-literals.html#l2h-267"/>
+<entry name="immutable object" url="ref/objects.html#l2h-27"/>
+<entry name="immutable sequence object" url="ref/types.html#l2h-82"/>
+<entry name="import statement" url="ref/types.html#l2h-109"/>
+<entry name="ImportError exception" url="ref/import.html#l2h-387"/>
+<entry name="importing, module" url="ref/import.html#l2h-385"/>
+<entry name="in, keyword" url="ref/for.html#l2h-414"/>
+<entry name="in operator" url="ref/comparisons.html#l2h-322"/>
+<entry name="inclusive, or" url="ref/bitwise.html#l2h-318"/>
+<entry name="INDENT token" url="ref/indentation.html#l2h-10"/>
+<entry name="indentation" url="ref/indentation.html#l2h-9"/>
+<entry name="index() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="index operation" url="ref/types.html#l2h-80"/>
+<entry name="inheritance" url="ref/class.html#l2h-434"/>
+<entry name="initialization, module" url="ref/import.html#l2h-387"/>
+<entry name="input" url="ref/expression-input.html#l2h-440"/>
+<entry name="raw" url="ref/expression-input.html#l2h-445"/>
+<entry name="input() (built-in function)" url="ref/expression-input.html#l2h-444"/>
+<entry name="insert() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="instance, call" url="ref/callable-types.html#l2h-164"/>
+<entry name="instance, class" url="ref/types.html#l2h-114"/>
+<entry name="instance object" url="ref/types.html#l2h-108"/>
+<entry name="int() (built-in function)" url="ref/numeric-types.html#l2h-226"/>
+<entry name="integer" url="ref/types.html#l2h-90"/>
+<entry name="representation" url="ref/types.html#l2h-76"/>
+<entry name="integer literal" url="ref/numbers.html#l2h-20"/>
+<entry name="integer object" url="ref/types.html#l2h-73"/>
+<entry name="interactive mode" url="ref/programs.html#l2h-438"/>
+<entry name="internal type" url="ref/types.html#l2h-123"/>
+<entry name="interpreter" url="ref/top-level.html#l2h-435"/>
+<entry name="inversion" url="ref/unary.html#l2h-305"/>
+<entry name="invocation" url="ref/types.html#l2h-102"/>
+<entry name="is not operator" url="ref/comparisons.html#l2h-323"/>
+<entry name="is operator" url="ref/comparisons.html#l2h-323"/>
+<entry name="item, sequence" url="ref/subscriptions.html#l2h-286"/>
+<entry name="item, string" url="ref/subscriptions.html#l2h-287"/>
+<entry name="item selection" url="ref/types.html#l2h-80"/>
+<entry name="items() (mapping object method)" url="ref/sequence-types.html#l2h-166"/>
+<entry name="key" url="ref/dict.html#l2h-275"/>
+<entry name="key/datum pair" url="ref/dict.html#l2h-275"/>
+<entry name="keys() (mapping object method)" url="ref/sequence-types.html#l2h-166"/>
+<entry name="keyword" url="ref/keywords.html#l2h-12"/>
+<entry name="elif" url="ref/if.html#l2h-408"/>
+<entry name="keyword (continued), else" url="ref/break.html#l2h-377"/>
+<entry name="keyword (continued), except" url="ref/try.html#l2h-421"/>
+<entry name="keyword (continued), finally" url="ref/return.html#l2h-371"/>
+<entry name="keyword (continued), from" url="ref/import.html#l2h-385"/>
+<entry name="keyword (continued), in" url="ref/for.html#l2h-414"/>
+<entry name="lambda, expression" url="ref/lambda.html#l2h-328"/>
+<entry name="lambda, form" url="ref/lambda.html#l2h-328"/>
+<entry name="language, C" url="ref/types.html#l2h-68"/>
+<entry name="language, Pascal" url="ref/for.html#l2h-416"/>
+<entry name="last_traceback (in module sys)" url="ref/types.html#l2h-63"/>
+<entry name="leading whitespace" url="ref/indentation.html#l2h-9"/>
+<entry name="len() (built-in function)" url="ref/types.html#l2h-79"/>
+<entry name="lexical analysis" url="ref/lexical.html#l2h-3"/>
+<entry name="lexical definitions" url="ref/notation.html#l2h-2"/>
+<entry name="line continuation" url="ref/explicit-joining.html#l2h-7"/>
+<entry name="line joining" url="ref/logical.html#l2h-5"/>
+<entry name="line structure" url="ref/line-structure.html#l2h-4"/>
+<entry name="list, assignment, target" url="ref/assignment.html#l2h-346"/>
+<entry name="list, comprehensions" url="ref/lists.html#l2h-271"/>
+<entry name="list, deletion target" url="ref/del.html#l2h-358"/>
+<entry name="list (continued), display" url="ref/lists.html#l2h-271"/>
+<entry name="list (continued), empty" url="ref/lists.html#l2h-273"/>
+<entry name="list (continued), expression" url="ref/exprlists.html#l2h-329"/>
+<entry name="list (continued), target" url="ref/assignment.html#l2h-345"/>
+<entry name="list object" url="ref/types.html#l2h-93"/>
+<entry name="literal" url="ref/literals.html#l2h-13"/>
+<entry name="local, namespace" url="ref/execframes.html#l2h-244"/>
+<entry name="locals() (built-in function)" url="ref/exec.html#l2h-400"/>
+<entry name="logical line" url="ref/logical.html#l2h-5"/>
+<entry name="long() (built-in function)" url="ref/numeric-types.html#l2h-227"/>
+<entry name="long integer literal" url="ref/numbers.html#l2h-20"/>
+<entry name="long integer object" url="ref/types.html#l2h-75"/>
+<entry name="loop, over mutable sequence" url="ref/for.html#l2h-417"/>
+<entry name="loop, statement" url="ref/break.html#l2h-376"/>
+<entry name="loop control, target" url="ref/break.html#l2h-378"/>
+<entry name="loop control, makefile() (socket method)" url="ref/types.html#l2h-53"/>
+<entry name="mangling, name" url="ref/atom-identifiers.html#l2h-265"/>
+<entry name="mapping object" url="ref/types.html#l2h-95"/>
+<entry name="membership, test" url="ref/comparisons.html#l2h-322"/>
+<entry name="method, built-in" url="ref/types.html#l2h-107"/>
+<entry name="method, call" url="ref/calls.html#l2h-298"/>
+<entry name="method, user-defined" url="ref/types.html#l2h-105"/>
+<entry name="method object" url="ref/types.html#l2h-105"/>
+<entry name="minus" url="ref/unary.html#l2h-303"/>
+<entry name="module, built-in" url="ref/import.html#l2h-386"/>
+<entry name="module, extension" url="ref/types.html#l2h-68"/>
+<entry name="module, importing" url="ref/import.html#l2h-385"/>
+<entry name="module, initialization" url="ref/import.html#l2h-387"/>
+<entry name="module (continued), name" url="ref/import.html#l2h-386"/>
+<entry name="module (continued), names, hierarchical" url="ref/import.html#l2h-391"/>
+<entry name="module (continued), namespace" url="ref/types.html#l2h-110"/>
+<entry name="module (continued), search path" url="ref/import.html#l2h-386"/>
+<entry name="module (continued), user-defined" url="ref/import.html#l2h-386"/>
+<entry name="module object" url="ref/types.html#l2h-109"/>
+<entry name="modules (in module sys)" url="ref/import.html#l2h-383"/>
+<entry name="modulo" url="ref/binary.html#l2h-310"/>
+<entry name="multiplication" url="ref/binary.html#l2h-308"/>
+<entry name="mutable object" url="ref/objects.html#l2h-27"/>
+<entry name="mutable sequence, loop over" url="ref/for.html#l2h-417"/>
+<entry name="mutable sequence object" url="ref/types.html#l2h-92"/>
+<entry name="name" url="ref/identifiers.html#l2h-11"/>
+<entry name="binding" url="ref/execframes.html#l2h-241"/>
+<entry name="binding, global" url="ref/global.html#l2h-396"/>
+<entry name="built-in" url="ref/atom-identifiers.html#l2h-263"/>
+<entry name="class" url="ref/class.html#l2h-434"/>
+<entry name="function" url="ref/function.html#l2h-429"/>
+<entry name="global" url="ref/atom-identifiers.html#l2h-263"/>
+<entry name="mangling" url="ref/atom-identifiers.html#l2h-265"/>
+<entry name="module" url="ref/import.html#l2h-386"/>
+<entry name="rebinding" url="ref/execframes.html#l2h-242"/>
+<entry name="unbinding" url="ref/execframes.html#l2h-243"/>
+<entry name="NameError exception" url="ref/atom-identifiers.html#l2h-264"/>
+<entry name="names, hierarchical module" url="ref/import.html#l2h-391"/>
+<entry name="names, private" url="ref/atom-identifiers.html#l2h-265"/>
+<entry name="namespace" url="ref/execframes.html#l2h-232"/>
+<entry name="global" url="ref/types.html#l2h-104"/>
+<entry name="namespace (continued), local" url="ref/execframes.html#l2h-244"/>
+<entry name="namespace (continued), module" url="ref/types.html#l2h-110"/>
+<entry name="negation" url="ref/unary.html#l2h-303"/>
+<entry name="newline, suppression" url="ref/print.html#l2h-365"/>
+<entry name="NEWLINE token" url="ref/logical.html#l2h-5"/>
+<entry name="None" url="ref/types.html#l2h-70"/>
+<entry name="None object" url="ref/types.html#l2h-70"/>
+<entry name="not in operator" url="ref/comparisons.html#l2h-322"/>
+<entry name="not operator" url="ref/lambda.html#l2h-325"/>
+<entry name="notation" url="ref/notation.html#l2h-1"/>
+<entry name="null, operation" url="ref/pass.html#l2h-356"/>
+<entry name="number" url="ref/numbers.html#l2h-20"/>
+<entry name="complex" url="ref/types.html#l2h-78"/>
+<entry name="floating point" url="ref/types.html#l2h-77"/>
+<entry name="numeric literal" url="ref/numbers.html#l2h-20"/>
+<entry name="numeric object" url="ref/types.html#l2h-72"/>
+<entry name="object" url="ref/objects.html#l2h-24"/>
+<entry name="built-in function" url="ref/types.html#l2h-106"/>
+<entry name="built-in method" url="ref/types.html#l2h-107"/>
+<entry name="callable" url="ref/types.html#l2h-101"/>
+<entry name="class" url="ref/types.html#l2h-108"/>
+<entry name="class instance" url="ref/types.html#l2h-108"/>
+<entry name="code" url="ref/types.html#l2h-124"/>
+<entry name="complex" url="ref/types.html#l2h-78"/>
+<entry name="dictionary" url="ref/types.html#l2h-96"/>
+<entry name="Ellipsis" url="ref/types.html#l2h-71"/>
+<entry name="file" url="ref/types.html#l2h-117"/>
+<entry name="floating point" url="ref/types.html#l2h-77"/>
+<entry name="frame" url="ref/types.html#l2h-126"/>
+<entry name="function" url="ref/types.html#l2h-103"/>
+<entry name="immutable" url="ref/types.html#l2h-82"/>
+<entry name="immutable sequence" url="ref/types.html#l2h-82"/>
+<entry name="instance" url="ref/types.html#l2h-108"/>
+<entry name="integer" url="ref/types.html#l2h-73"/>
+<entry name="list" url="ref/types.html#l2h-93"/>
+<entry name="long integer" url="ref/types.html#l2h-75"/>
+<entry name="mapping" url="ref/types.html#l2h-95"/>
+<entry name="method" url="ref/types.html#l2h-105"/>
+<entry name="module" url="ref/types.html#l2h-109"/>
+<entry name="mutable" url="ref/types.html#l2h-92"/>
+<entry name="mutable sequence" url="ref/types.html#l2h-92"/>
+<entry name="None" url="ref/types.html#l2h-70"/>
+<entry name="numeric" url="ref/types.html#l2h-72"/>
+<entry name="plain integer" url="ref/types.html#l2h-74"/>
+<entry name="recursive" url="ref/string-conversions.html#l2h-279"/>
+<entry name="sequence" url="ref/types.html#l2h-80"/>
+<entry name="slice" url="ref/sequence-types.html#l2h-178"/>
+<entry name="string" url="ref/types.html#l2h-85"/>
+<entry name="object (continued), traceback" url="ref/types.html#l2h-127"/>
+<entry name="object (continued), tuple" url="ref/types.html#l2h-91"/>
+<entry name="object (continued), unicode" url="ref/types.html#l2h-90"/>
+<entry name="object (continued), user-defined function" url="ref/types.html#l2h-103"/>
+<entry name="object (continued), user-defined method" url="ref/types.html#l2h-105"/>
+<entry name="oct() (built-in function)" url="ref/numeric-types.html#l2h-229"/>
+<entry name="octal literal" url="ref/numbers.html#l2h-20"/>
+<entry name="open() (built-in function)" url="ref/types.html#l2h-118"/>
+<entry name="operation, binary arithmetic" url="ref/binary.html#l2h-307"/>
+<entry name="operation, binary bit-wise" url="ref/bitwise.html#l2h-315"/>
+<entry name="operation, Boolean" url="ref/lambda.html#l2h-324"/>
+<entry name="operation, null" url="ref/pass.html#l2h-356"/>
+<entry name="operation, shifting" url="ref/shifting.html#l2h-313"/>
+<entry name="operation, unary arithmetic" url="ref/unary.html#l2h-302"/>
+<entry name="operation, unary bit-wise" url="ref/unary.html#l2h-302"/>
+<entry name="operator, and" url="ref/lambda.html#l2h-326"/>
+<entry name="operator, in" url="ref/comparisons.html#l2h-322"/>
+<entry name="operator, is" url="ref/comparisons.html#l2h-323"/>
+<entry name="operator, is not" url="ref/comparisons.html#l2h-323"/>
+<entry name="operator, not" url="ref/lambda.html#l2h-325"/>
+<entry name="operator, not in" url="ref/comparisons.html#l2h-322"/>
+<entry name="operator, or" url="ref/lambda.html#l2h-327"/>
+<entry name="operator, precedence" url="ref/summary.html#l2h-332"/>
+<entry name="operators" url="ref/operators.html#l2h-21"/>
+<entry name="or, bit-wise" url="ref/bitwise.html#l2h-318"/>
+<entry name="or, exclusive" url="ref/bitwise.html#l2h-317"/>
+<entry name="or, inclusive" url="ref/bitwise.html#l2h-318"/>
+<entry name="or operator" url="ref/lambda.html#l2h-327"/>
+<entry name="ord() (built-in function)" url="ref/types.html#l2h-84"/>
+<entry name="output" url="ref/exprstmts.html#l2h-337"/>
+<entry name="standard" url="ref/exprstmts.html#l2h-337"/>
+<entry name="OverflowError (built-in exception)" url="ref/types.html#l2h-33"/>
+<entry name="packages" url="ref/import.html#l2h-392"/>
+<entry name="parameter, value, default" url="ref/function.html#l2h-430"/>
+<entry name="parenthesized form" url="ref/parenthesized.html#l2h-268"/>
+<entry name="parser" url="ref/lexical.html#l2h-3"/>
+<entry name="Pascal, language" url="ref/for.html#l2h-416"/>
+<entry name="pass statement" url="ref/pass.html#l2h-355"/>
+<entry name="path, module search" url="ref/import.html#l2h-386"/>
+<entry name="physical line" url="ref/logical.html#l2h-5"/>
+<entry name="plain integer literal" url="ref/numbers.html#l2h-20"/>
+<entry name="plain integer object" url="ref/types.html#l2h-74"/>
+<entry name="plus" url="ref/unary.html#l2h-304"/>
+<entry name="pop() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="popen() (in module os)" url="ref/types.html#l2h-51"/>
+<entry name="pow() (built-in function)" url="ref/numeric-types.html#l2h-219"/>
+<entry name="precedence, operator" url="ref/summary.html#l2h-332"/>
+<entry name="primary" url="ref/primaries.html#l2h-281"/>
+<entry name="print statement" url="ref/customization.html#l2h-151"/>
+<entry name="private, names" url="ref/atom-identifiers.html#l2h-265"/>
+<entry name="procedure, call" url="ref/exprstmts.html#l2h-337"/>
+<entry name="program" url="ref/programs.html#l2h-436"/>
+<entry name="quotes, backward" url="ref/customization.html#l2h-149"/>
+<entry name="quotes (continued), reverse" url="ref/customization.html#l2h-149"/>
+<entry name="quotes (continued), raise an exception" url="ref/exceptions.html#l2h-253"/>
+<entry name="quotes (continued), raise statement" url="ref/raise.html#l2h-372"/>
+<entry name="raising, exception" url="ref/raise.html#l2h-373"/>
+<entry name="range() (built-in function)" url="ref/for.html#l2h-416"/>
+<entry name="raw input" url="ref/expression-input.html#l2h-445"/>
+<entry name="raw string" url="ref/strings.html#l2h-16"/>
+<entry name="raw_input() (built-in function)" url="ref/expression-input.html#l2h-445"/>
+<entry name="readline() (file method)" url="ref/expression-input.html#l2h-442"/>
+<entry name="rebinding, name" url="ref/execframes.html#l2h-242"/>
+<entry name="recursive object" url="ref/string-conversions.html#l2h-279"/>
+<entry name="reference, attribute" url="ref/attribute-references.html#l2h-282"/>
+<entry name="reference, reference counting" url="ref/objects.html#l2h-28"/>
+<entry name="reference, remove() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="reference, repr() (built-in function)" url="ref/customization.html#l2h-148"/>
+<entry name="representation, integer" url="ref/types.html#l2h-76"/>
+<entry name="reserved word" url="ref/keywords.html#l2h-12"/>
+<entry name="restricted, execution" url="ref/execframes.html#l2h-248"/>
+<entry name="return statement" url="ref/return.html#l2h-369"/>
+<entry name="reverse, quotes" url="ref/customization.html#l2h-149"/>
+<entry name="reverse() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="RuntimeError exception" url="ref/print.html#l2h-367"/>
+<entry name="search, path, module" url="ref/import.html#l2h-386"/>
+<entry name="sequence, item" url="ref/subscriptions.html#l2h-286"/>
+<entry name="sequence object" url="ref/types.html#l2h-80"/>
+<entry name="shifting, operation" url="ref/shifting.html#l2h-313"/>
+<entry name="simple, statement" url="ref/simple.html#l2h-333"/>
+<entry name="singleton, tuple" url="ref/types.html#l2h-91"/>
+<entry name="slice" url="ref/slicings.html#l2h-288"/>
+<entry name="slice() (built-in function)" url="ref/types.html#l2h-130"/>
+<entry name="slice object" url="ref/sequence-types.html#l2h-178"/>
+<entry name="slicing" url="ref/types.html#l2h-81"/>
+<entry name="assignment" url="ref/assignment.html#l2h-353"/>
+<entry name="extended" url="ref/slicings.html#l2h-292"/>
+<entry name="sort() (sequence object method)" url="ref/sequence-types.html#l2h-168"/>
+<entry name="space" url="ref/indentation.html#l2h-9"/>
+<entry name="special, attribute" url="ref/types.html#l2h-69"/>
+<entry name="special, attribute, generic" url="ref/types.html#l2h-69"/>
+<entry name="stack, execution" url="ref/types.html#l2h-127"/>
+<entry name="stack, trace" url="ref/types.html#l2h-127"/>
+<entry name="standard, output" url="ref/exprstmts.html#l2h-337"/>
+<entry name="Standard C" url="ref/strings.html#l2h-17"/>
+<entry name="standard input" url="ref/programs.html#l2h-439"/>
+<entry name="start (slice object attribute)" url="ref/types.html#l2h-67"/>
+<entry name="statement, assert" url="ref/assert.html#l2h-338"/>
+<entry name="statement, assignment" url="ref/types.html#l2h-92"/>
+<entry name="statement, assignment, augmented" url="ref/augassign.html#l2h-354"/>
+<entry name="statement, break" url="ref/break.html#l2h-375"/>
+<entry name="statement, compound" url="ref/compound.html#l2h-402"/>
+<entry name="statement, continue" url="ref/continue.html#l2h-380"/>
+<entry name="statement, del" url="ref/types.html#l2h-92"/>
+<entry name="statement, exec" url="ref/execframes.html#l2h-249"/>
+<entry name="statement, expression" url="ref/exprstmts.html#l2h-334"/>
+<entry name="statement, for" url="ref/break.html#l2h-376"/>
+<entry name="statement, from" url="ref/execframes.html#l2h-249"/>
+<entry name="statement, global" url="ref/execframes.html#l2h-246"/>
+<entry name="statement, if" url="ref/if.html#l2h-407"/>
+<entry name="statement, import" url="ref/types.html#l2h-109"/>
+<entry name="statement (continued), loop" url="ref/break.html#l2h-376"/>
+<entry name="statement (continued), pass" url="ref/pass.html#l2h-355"/>
+<entry name="statement (continued), print" url="ref/customization.html#l2h-151"/>
+<entry name="statement (continued), raise" url="ref/raise.html#l2h-372"/>
+<entry name="statement (continued), return" url="ref/return.html#l2h-369"/>
+<entry name="statement (continued), simple" url="ref/simple.html#l2h-333"/>
+<entry name="statement (continued), try" url="ref/types.html#l2h-129"/>
+<entry name="statement (continued), while" url="ref/break.html#l2h-376"/>
+<entry name="statement grouping" url="ref/indentation.html#l2h-9"/>
+<entry name="stderr (in module sys)" url="ref/types.html#l2h-55"/>
+<entry name="stdin (in module sys)" url="ref/types.html#l2h-55"/>
+<entry name="stdio" url="ref/types.html#l2h-122"/>
+<entry name="stdout (in module sys)" url="ref/types.html#l2h-55"/>
+<entry name="step (slice object attribute)" url="ref/types.html#l2h-67"/>
+<entry name="stop (slice object attribute)" url="ref/types.html#l2h-67"/>
+<entry name="str() (built-in function)" url="ref/customization.html#l2h-150"/>
+<entry name="string, comparison" url="ref/types.html#l2h-86"/>
+<entry name="string, conversion" url="ref/customization.html#l2h-149"/>
+<entry name="string, item" url="ref/subscriptions.html#l2h-287"/>
+<entry name="string literal" url="ref/strings.html#l2h-14"/>
+<entry name="string object" url="ref/types.html#l2h-85"/>
+<entry name="subscription" url="ref/types.html#l2h-80"/>
+<entry name="assignment" url="ref/assignment.html#l2h-350"/>
+<entry name="subtraction" url="ref/binary.html#l2h-312"/>
+<entry name="suite" url="ref/compound.html#l2h-403"/>
+<entry name="suppression, newline" url="ref/print.html#l2h-365"/>
+<entry name="syntax" url="ref/notation.html#l2h-1"/>
+<entry name="SyntaxError exception" url="ref/import.html#l2h-387"/>
+<entry name="sys (built-in module)" url="ref/print.html#l2h-366"/>
+<entry name="sys.exc_info" url="ref/types.html#l2h-128"/>
+<entry name="sys.exc_traceback" url="ref/types.html#l2h-128"/>
+<entry name="sys.last_traceback" url="ref/types.html#l2h-128"/>
+<entry name="sys.modules" url="ref/import.html#l2h-386"/>
+<entry name="sys.stderr" url="ref/types.html#l2h-121"/>
+<entry name="sys.stdin" url="ref/types.html#l2h-119"/>
+<entry name="sys.stdout" url="ref/types.html#l2h-120"/>
+<entry name="tab" url="ref/indentation.html#l2h-9"/>
+<entry name="target" url="ref/assignment.html#l2h-345"/>
+<entry name="deletion" url="ref/del.html#l2h-358"/>
+<entry name="list" url="ref/assignment.html#l2h-345"/>
+<entry name="list assignment" url="ref/assignment.html#l2h-346"/>
+<entry name="list, deletion" url="ref/del.html#l2h-358"/>
+<entry name="loop control" url="ref/break.html#l2h-378"/>
+<entry name="tb_frame (traceback attribute)" url="ref/types.html#l2h-65"/>
+<entry name="tb_lasti (traceback attribute)" url="ref/types.html#l2h-65"/>
+<entry name="tb_lineno (traceback attribute)" url="ref/types.html#l2h-65"/>
+<entry name="tb_next (traceback attribute)" url="ref/types.html#l2h-65"/>
+<entry name="termination model" url="ref/exceptions.html#l2h-256"/>
+<entry name="test, identity" url="ref/comparisons.html#l2h-323"/>
+<entry name="test, membership" url="ref/comparisons.html#l2h-322"/>
+<entry name="token" url="ref/lexical.html#l2h-3"/>
+<entry name="trace, stack" url="ref/types.html#l2h-127"/>
+<entry name="trace, traceback object" url="ref/types.html#l2h-127"/>
+<entry name="trailing, comma" url="ref/exprlists.html#l2h-331"/>
+<entry name="triple-quoted string" url="ref/strings.html#l2h-16"/>
+<entry name="try statement" url="ref/types.html#l2h-129"/>
+<entry name="tuple, display" url="ref/parenthesized.html#l2h-270"/>
+<entry name="tuple, empty" url="ref/types.html#l2h-91"/>
+<entry name="tuple, singleton" url="ref/types.html#l2h-91"/>
+<entry name="tuple object" url="ref/types.html#l2h-91"/>
+<entry name="type" url="ref/types.html#l2h-68"/>
+<entry name="data" url="ref/types.html#l2h-68"/>
+<entry name="hierarchy" url="ref/types.html#l2h-68"/>
+<entry name="immutable data" url="ref/atom-literals.html#l2h-267"/>
+<entry name="type() (built-in function)" url="ref/objects.html#l2h-26"/>
+<entry name="type of an object" url="ref/objects.html#l2h-27"/>
+<entry name="TypeError exception" url="ref/unary.html#l2h-306"/>
+<entry name="types, internal" url="ref/types.html#l2h-123"/>
+<entry name="unary, arithmetic operation" url="ref/unary.html#l2h-302"/>
+<entry name="unary, bit-wise operation" url="ref/unary.html#l2h-302"/>
+<entry name="unbinding, name" url="ref/execframes.html#l2h-243"/>
+<entry name="unichr() (built-in function)" url="ref/types.html#l2h-87"/>
+<entry name="Unicode" url="ref/types.html#l2h-90"/>
+<entry name="unicode() (built-in function)" url="ref/types.html#l2h-89"/>
+<entry name="unicode object" url="ref/types.html#l2h-90"/>
+<entry name="UNIX" url="ref/programs.html#l2h-439"/>
+<entry name="unreachable object" url="ref/objects.html#l2h-28"/>
+<entry name="unrecognized escape sequence" url="ref/strings.html#l2h-19"/>
+<entry name="update() (mapping object method)" url="ref/sequence-types.html#l2h-166"/>
+<entry name="user-defined, function" url="ref/types.html#l2h-103"/>
+<entry name="user-defined, function call" url="ref/calls.html#l2h-297"/>
+<entry name="user-defined, method" url="ref/types.html#l2h-105"/>
+<entry name="user-defined, module" url="ref/import.html#l2h-386"/>
+<entry name="user-defined function object" url="ref/types.html#l2h-103"/>
+<entry name="user-defined method object" url="ref/types.html#l2h-105"/>
+<entry name="value, default parameter" url="ref/function.html#l2h-430"/>
+<entry name="value of an object" url="ref/objects.html#l2h-27"/>
+<entry name="ValueError exception" url="ref/shifting.html#l2h-314"/>
+<entry name="values, writing" url="ref/exprstmts.html#l2h-337"/>
+<entry name="values() (mapping object method)" url="ref/sequence-types.html#l2h-166"/>
+<entry name="while statement" url="ref/break.html#l2h-376"/>
+<entry name="whitespace" url="ref/indentation.html#l2h-9"/>
+<entry name="writing, values" url="ref/exprstmts.html#l2h-337"/>
+<entry name="xor, bit-wise" url="ref/bitwise.html#l2h-317"/>
+<entry name="xor, ZeroDivisionError exception" url="ref/binary.html#l2h-309"/>
+</index>
+</kdeveloptoc>
+
diff --git a/languages/python/doc/python_bugs.toc b/languages/python/doc/python_bugs.toc
new file mode 100644
index 00000000..0b2a5196
--- /dev/null
+++ b/languages/python/doc/python_bugs.toc
@@ -0,0 +1,7 @@
+<!DOCTYPE kdeveloptoc>
+<kdeveloptoc>
+<title>Python bugs</title>
+<base href="http://sourceforge.net/"/>
+<tocsect1 name="Query" url="tracker/?group_id=5470&amp;atid=105470">
+</tocsect1>
+</kdeveloptoc>
diff --git a/languages/python/file_templates/Makefile.am b/languages/python/file_templates/Makefile.am
new file mode 100644
index 00000000..0846fdf2
--- /dev/null
+++ b/languages/python/file_templates/Makefile.am
@@ -0,0 +1,4 @@
+templatedir = $(kde_datadir)/kdevfilecreate/file-templates
+template_DATA = py
+
+
diff --git a/languages/python/file_templates/py b/languages/python/file_templates/py
new file mode 100644
index 00000000..64192c64
--- /dev/null
+++ b/languages/python/file_templates/py
@@ -0,0 +1,7 @@
+###########################################################################
+# Copyright (C) $YEAR$ by $AUTHOR$
+# <$EMAIL$>
+#
+# Copyright: See COPYING file that comes with this distribution
+#
+###########################################################################
diff --git a/languages/python/kde_pydoc.py b/languages/python/kde_pydoc.py
new file mode 100755
index 00000000..0516f172
--- /dev/null
+++ b/languages/python/kde_pydoc.py
@@ -0,0 +1,131 @@
+#!/usr/bin/env python
+"""
+"""
+
+__author__ = "David Nolden<david.kde@art-master.de>, Ka-Ping Yee <ping@lfw.org>"
+__version__ = "6 April 2006"
+
+import sys, imp, os, stat, re, types, cgi
+from repr import Repr
+from string import expandtabs, find, join, lower, split, strip, rstrip
+import pydoc
+
+
+
+
+def cleanlinks(string):
+ """Changes the links to work with the pydoc:-notation"""
+ finalstring = ""
+ string = str(string).replace(".html","")
+ pos = 0
+ mark = "<a href=\""
+ l = len(mark)
+ while(pos != -1):
+ opos = pos
+ pos = string.find(mark, pos)
+ if(pos == -1):
+ finalstring += string[opos:]
+ break
+ finalstring += string[opos:pos+l]
+ pos+=l
+ if(string[pos] == '#' or string.find(":/",pos, pos+10) != -1): #leave local jumps or external references untouched
+ continue
+ finalstring += "pydoc:"
+ if(string[pos] == "." and string[pos+1] == "\""):
+ pos += 1
+ finalstring += "modules"
+
+ return finalstring
+
+
+#This maximum depth was introduced because the program needs a very long time to
+#complete the task in big file-system-trees(like my home), and can be invoked by a simple pydoc:.
+#and cannot be stopped through the browser(just by killing python)
+__maxdepth = 4
+
+def writedocs(path, pkgpath='', depth=0, notprocessed=[]):
+ if(path == "/."):
+ writedoc(path)
+ return
+ depth+=1
+
+ if os.path.isdir(path):
+ if(depth > __maxdepth):
+ notprocessed.append(path)
+ return
+ dir = path
+ for file in os.listdir(dir):
+ path = os.path.join(dir, file)
+ if os.path.isdir(path):
+ writedocs(path, file + '.' + pkgpath, depth)
+ if os.path.isfile(path):
+ writedocs(path, pkgpath, depth)
+ if os.path.isfile(path):
+ modname = pydoc.inspect.getmodulename(path)
+ if modname:
+ writedoc(pkgpath + modname)
+
+ if(depth == 1):
+ if(len(notprocessed) != 0):
+ print "<br> the following paths were not processed because they are deeper than the maximum depth of " + str(__maxdepth) + ":<br>"
+ for x in notprocessed:
+ print cgi.escape(x) + " <br>"
+
+def writedoc(key,top=False):
+ """Write HTML documentation to a file in the current directory."""
+ if(type(key) == str and (key == "modules" or key == "/.")):
+ heading = pydoc.html.heading(
+ '<br><big><big><strong>&nbsp;'
+ 'Python: Index of Modules'
+ '</strong></big></big>',
+ '#ffffff', '#7799ee')
+ builtins = []
+ for name in sys.builtin_module_names:
+ builtins.append('<a href="%s">%s</a>' % (cgi.escape(name,quote=True), cgi.escape(name)))
+ indices = ['<p>Built-in modules: ' + cgi.escape(join(builtins, ', '))]
+ seen = {}
+ for dir in pydoc.pathdirs():
+ indices.append(pydoc.html.index(dir, seen))
+ print cleanlinks(heading + join(indices))
+ return
+
+ if(type(key) != types.ModuleType):
+ object = pydoc.locate(key)
+ if(object == None and top):
+ print "could not locate module/object for key " + \
+ cgi.escape(key) + "<br><a href=\"pydoc:modules\">go to index</a>";
+ else:
+ object = key
+
+ if object:
+ print cleanlinks(pydoc.html.page(pydoc.describe(object), pydoc.html.document(object)))
+
+
+
+if __name__ == '__main__':
+ import getopt
+ class BadUsage: pass
+
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], 'k:p:w')
+
+ print "<html>"
+ print "<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
+ print "</head><body>"
+
+ if args:
+ for arg in args:
+ try:
+ if os.path.isdir(arg): writedocs(arg)
+
+ if os.path.isfile(arg):
+ arg = pydoc.importfile(arg)
+ writedoc(arg, True)
+ except pydoc.ErrorDuringImport, value:
+ print 'problem in %s - %s' % (
+ cgi.escape(value.filename), cgi.escape(value.exc))
+ else:
+ raise BadUsage
+
+ except (getopt.error, BadUsage):
+ print "need parameters\n"
diff --git a/languages/python/kdevpythonsupport.desktop b/languages/python/kdevpythonsupport.desktop
new file mode 100644
index 00000000..9f15e39f
--- /dev/null
+++ b/languages/python/kdevpythonsupport.desktop
@@ -0,0 +1,85 @@
+[Desktop Entry]
+Type=Service
+Exec=blubb
+Comment=Python Support
+Comment[ca]=Suport per a Python
+Comment[da]=Python-understøttelse
+Comment[de]=Unterstützung für Python
+Comment[el]=ΥποστήÏιξη Python
+Comment[es]=Soporte para Python
+Comment[et]=Pythoni toetus
+Comment[eu]=Python euskarria
+Comment[fa]=پشتیبانی پیتون
+Comment[fr]=Prise en charge du langage PYTHON
+Comment[ga]=Tacaíocht Python
+Comment[gl]=Soporte para Python
+Comment[hi]=पायथन समरà¥à¤¥à¤¨
+Comment[hu]=Python-támogatás
+Comment[is]=Python stuðningur
+Comment[it]=Supporto per Python
+Comment[ja]=Python サãƒãƒ¼ãƒˆ
+Comment[nds]=Ünnerstütten för Python
+Comment[ne]=पाइथोन समरà¥à¤¥à¤¨
+Comment[nl]=Ondersteuning voor Python
+Comment[pl]=Obsługa Pythona
+Comment[pt]=Suporte a Python
+Comment[pt_BR]=Suporte ao Python
+Comment[ru]=Поддержка Ñзыка Python
+Comment[sk]=Python podpora
+Comment[sl]=Podpora za Python
+Comment[sr]=Подршка за Python
+Comment[sr@Latn]=Podrška za Python
+Comment[sv]=Python-stöd
+Comment[ta]=பைதான௠ஆதரவà¯
+Comment[tg]=ÐÑ€Ó£ намудани забони Python
+Comment[tr]=Python DesteÄŸi
+Comment[zh_CN]=Python 支æŒ
+Comment[zh_TW]=Python 支æ´
+Name=KDevPythonSupport
+Name[da]=KDevelop Python-understøttelse
+Name[de]=Unterstützung für Python (KDevelop)
+Name[hi]=के-डेव-पायथन-समरà¥à¤¥à¤¨
+Name[nds]=Python-Ünnerstütten för KDevelop
+Name[pl]=KDevObsługaPythona
+Name[sk]=KDev Python podpora
+Name[sv]=KDevelop Python-stöd
+Name[ta]=கெடெவ௠பைதான௠ஆதரவà¯
+Name[tg]=ÐÑ€Ó£ намудани забони Python
+Name[zh_TW]=KDevelop Python 支æ´
+GenericName=Python Support
+GenericName[ca]=Suport per a Python
+GenericName[da]=Python-understøttelse
+GenericName[de]=Unterstützung für Python
+GenericName[el]=ΥποστήÏιξη Python
+GenericName[es]=Soporte para Python
+GenericName[et]=Pythoni toetus
+GenericName[eu]=Python euskarria
+GenericName[fa]=پشتیبانی پیتون
+GenericName[fr]=Prise en charge du langage PYTHON
+GenericName[ga]=Tacaíocht Python
+GenericName[gl]=Soporte para Python
+GenericName[hi]=पायथन समरà¥à¤¥à¤¨
+GenericName[hu]=Python-támogatás
+GenericName[it]=Supporto per Python
+GenericName[ja]=Python サãƒãƒ¼ãƒˆ
+GenericName[nds]=Ünnerstütten för Python
+GenericName[ne]=पाइथोन समरà¥à¤¥à¤¨
+GenericName[nl]=Ondersteuning voor Python
+GenericName[pl]=Obsługa Pythona
+GenericName[pt]=Suporte a Python
+GenericName[pt_BR]=Suporte ao Python
+GenericName[ru]=Поддержка Ñзыка Python
+GenericName[sk]=Python podpora
+GenericName[sl]=Podpora za Python
+GenericName[sr]=Подршка за Python
+GenericName[sr@Latn]=Podrška za Python
+GenericName[sv]=Python-stöd
+GenericName[ta]=பைதான௠ஆதரவà¯
+GenericName[tg]=ÐÑ€Ó£ намудани забони Python
+GenericName[tr]=Python DesteÄŸi
+GenericName[zh_CN]=Python 支æŒ
+GenericName[zh_TW]=Python 支æ´
+ServiceTypes=KDevelop/LanguageSupport
+X-KDE-Library=libkdevpythonsupport
+X-KDevelop-Version=5
+X-KDevelop-Language=Python
diff --git a/languages/python/kdevpythonsupport.rc b/languages/python/kdevpythonsupport.rc
new file mode 100644
index 00000000..d19011b8
--- /dev/null
+++ b/languages/python/kdevpythonsupport.rc
@@ -0,0 +1,16 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui name="KDevPythonSupport" version="3">
+<MenuBar>
+ <Menu name="build" >
+ <Action name="build_exec" />
+ <Action name="build_runinterpreter" />
+ <Action name="build_execstring" />
+ </Menu>
+ <Menu name="help">
+ <Action name="help_pydoc"/>
+ </Menu>
+</MenuBar>
+<ToolBar name="buildToolBar">
+ <Action name="build_exec" group="build_operations" />
+</ToolBar>
+</kpartgui>
diff --git a/languages/python/pydoc.cpp b/languages/python/pydoc.cpp
new file mode 100644
index 00000000..79f184d7
--- /dev/null
+++ b/languages/python/pydoc.cpp
@@ -0,0 +1,113 @@
+#include "pydoc.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <qtextstream.h>
+#include <kstandarddirs.h>
+#include <kinstance.h>
+#include <kprocess.h>
+#include <kdeversion.h>
+#include <kglobal.h>
+#include <klocale.h>
+
+using namespace KIO;
+
+
+PydocProtocol::PydocProtocol(const QCString &pool, const QCString &app)
+ : SlaveBase("pydoc", pool, app), key()
+{
+ python = KGlobal::dirs()->findExe("python");
+ script = locate("data", "kio_pydoc/kde_pydoc.py");
+}
+
+
+PydocProtocol::~PydocProtocol()
+{}
+
+
+void PydocProtocol::get(const KURL& url)
+{
+ mimeType("text/html");
+ key = url.path();
+
+ QString cmd = KProcess::quote(python);
+ cmd += " ";
+ cmd += KProcess::quote(script);
+ cmd += " -w ";
+ cmd += KProcess::quote(key);
+
+ FILE *fd = popen(cmd.local8Bit().data(), "r");
+ char buffer[4096];
+ 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);
+ finished();
+}
+
+
+void PydocProtocol::mimetype(const KURL&)
+{
+ mimeType( "text/html" );
+ finished();
+}
+
+
+QCString PydocProtocol::errorMessage()
+{
+ return QCString( "<html><body bgcolor=\"#FFFFFF\">" + i18n("Error in pydoc").local8Bit() + "</body></html>" );
+}
+
+
+void PydocProtocol::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 PydocProtocol::listDir(const KURL &url)
+{
+ error( KIO::ERR_CANNOT_ENTER_DIRECTORY, url.path() );
+}
+
+
+extern "C" {
+
+ int kdemain(int argc, char **argv)
+ {
+ KInstance instance( "kio_pydoc" );
+ KGlobal::locale()->setMainCatalogue("kdevelop");
+
+ if (argc != 4) {
+ fprintf(stderr, "Usage: kio_pydoc protocol domain-socket1 domain-socket2\n");
+ exit(-1);
+ }
+
+ PydocProtocol slave(argv[2], argv[3]);
+ slave.dispatchLoop();
+
+ return 0;
+ }
+
+}
diff --git a/languages/python/pydoc.h b/languages/python/pydoc.h
new file mode 100644
index 00000000..e17a257a
--- /dev/null
+++ b/languages/python/pydoc.h
@@ -0,0 +1,30 @@
+#ifndef _PYDOC_H_
+#define _PYDOC_H_
+
+#include <qobject.h>
+#include <kio/slavebase.h>
+
+
+class PydocProtocol : public KIO::SlaveBase
+{
+public:
+ PydocProtocol(const QCString &pool, const QCString &app);
+ virtual ~PydocProtocol();
+
+ 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();
+
+private:
+ QString python;
+ QString script;
+ QString key;
+};
+
+#endif
diff --git a/languages/python/pydoc.protocol b/languages/python/pydoc.protocol
new file mode 100644
index 00000000..4801357f
--- /dev/null
+++ b/languages/python/pydoc.protocol
@@ -0,0 +1,9 @@
+[Protocol]
+exec=kio_pydoc
+protocol=pydoc
+input=none
+output=filesystem
+reading=true
+listing=Name
+determineMimetypeFromExtension=false
+Icon=help
diff --git a/languages/python/pythonconfigwidget.cpp b/languages/python/pythonconfigwidget.cpp
new file mode 100644
index 00000000..87472477
--- /dev/null
+++ b/languages/python/pythonconfigwidget.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 "pythonconfigwidget.h"
+
+#include <qcheckbox.h>
+#include <klineedit.h>
+#include "domutil.h"
+
+
+PythonConfigWidget::PythonConfigWidget(QDomDocument &projectDom,
+ QWidget *parent, const char *name)
+ : PythonConfigWidgetBase(parent, name), dom(projectDom)
+{
+ interpreter_edit->setText(DomUtil::readEntry(dom, "/kdevpythonsupport/run/interpreter"));
+ terminal_box->setChecked(DomUtil::readBoolEntry(dom, "/kdevpythonsupport/run/terminal"));
+}
+
+
+PythonConfigWidget::~PythonConfigWidget()
+{}
+
+
+void PythonConfigWidget::accept()
+{
+ DomUtil::writeEntry(dom, "/kdevpythonsupport/run/interpreter", interpreter_edit->text());
+ DomUtil::writeBoolEntry(dom, "/kdevpythonsupport/run/terminal", terminal_box->isChecked());
+}
+
+#include "pythonconfigwidget.moc"
diff --git a/languages/python/pythonconfigwidget.h b/languages/python/pythonconfigwidget.h
new file mode 100644
index 00000000..22708c29
--- /dev/null
+++ b/languages/python/pythonconfigwidget.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 _PYTHONCONFIGWIDGET_H_
+#define _PYTHONCONFIGWIDGET_H_
+
+#include "pythonconfigwidgetbase.h"
+#include <qdom.h>
+
+
+class PythonConfigWidget : public PythonConfigWidgetBase
+{
+ Q_OBJECT
+
+public:
+ PythonConfigWidget( QDomDocument &projectDom, QWidget *parent=0, const char *name=0 );
+ ~PythonConfigWidget();
+
+public slots:
+ void accept();
+
+private:
+ QDomDocument &dom;
+};
+
+#endif
diff --git a/languages/python/pythonconfigwidgetbase.ui b/languages/python/pythonconfigwidgetbase.ui
new file mode 100644
index 00000000..d3228822
--- /dev/null
+++ b/languages/python/pythonconfigwidgetbase.ui
@@ -0,0 +1,121 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>PythonConfigWidgetBase</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>python_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>Python</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>Python &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" stdset="0">
+ <cstring>Spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name" stdset="0">
+ <cstring>Spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Minimum</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </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" stdset="0">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </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"/>
+<includehints>
+ <includehint>klineedit.h</includehint>
+</includehints>
+</UI>
diff --git a/languages/python/pythonimplementationwidget.cpp b/languages/python/pythonimplementationwidget.cpp
new file mode 100644
index 00000000..151fe9c3
--- /dev/null
+++ b/languages/python/pythonimplementationwidget.cpp
@@ -0,0 +1,77 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Alexander Dymo *
+ * adymo@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. *
+ * *
+ * 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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#include "pythonimplementationwidget.h"
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qregexp.h>
+#include <qfileinfo.h>
+#include <qtextstream.h>
+
+#include <klineedit.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+#include <filetemplate.h>
+#include <kdevlanguagesupport.h>
+#include <kdevproject.h>
+
+PythonImplementationWidget::PythonImplementationWidget(KDevLanguageSupport* part,
+ QWidget* parent, const char* name, bool modal)
+ : ImplementationWidget(part, parent, name, modal)
+{
+}
+
+
+PythonImplementationWidget::~PythonImplementationWidget()
+{
+}
+
+
+QStringList PythonImplementationWidget::createClassFiles()
+{
+// QString template_py = "require '$BASEFILENAME$'\n\nclass $CLASSNAME$ < $BASECLASSNAME$\n\n def initialize(*k)\n super(*k)\n end\n\nend\n";
+ QString template_py = "from qt import *\nfrom $BASEFILENAME$ import *\nclass $CLASSNAME$($BASECLASSNAME$):\n\n def __init__(self,parent,name):\n $BASECLASSNAME$.__init__(self,parent,name)\n \n\n\n";
+
+ QFileInfo formInfo(m_formName);
+ template_py.replace(QRegExp("\\$BASEFILENAME\\$"), formInfo.baseName()+".py");
+ template_py.replace(QRegExp("\\$CLASSNAME\\$"), classNameEdit->text());
+ template_py.replace(QRegExp("\\$BASECLASSNAME\\$"), m_baseClassName);
+
+ template_py = FileTemplate::read(m_part, "py") + template_py;
+
+ QString file_py = fileNameEdit->text() + ".py";
+ if (!m_part->project()->activeDirectory().isEmpty())
+ file_py = m_part->project()->activeDirectory() + "/" + file_py;
+ QFile file(QDir::cleanDirPath(m_part->project()->projectDirectory() + "/" + file_py));
+ if (!file.open(IO_WriteOnly)) {
+ KMessageBox::error(0, i18n("Cannot write to file"));
+ return QStringList();
+ }
+ QTextStream stream(&file);
+ stream << template_py;
+ file.close();
+
+ QStringList files;
+ files.append(file_py);
+ return files;
+}
+
+#include "pythonimplementationwidget.moc"
diff --git a/languages/python/pythonimplementationwidget.h b/languages/python/pythonimplementationwidget.h
new file mode 100644
index 00000000..abae4a4c
--- /dev/null
+++ b/languages/python/pythonimplementationwidget.h
@@ -0,0 +1,37 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Alexander Dymo *
+ * adymo@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. *
+ * *
+ * 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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#ifndef PYTHONIMPLEMENTATIONWIDGET_H
+#define PYTHONIMPLEMENTATIONWIDGET_H
+
+#include <implementationwidget.h>
+
+class PythonImplementationWidget : public ImplementationWidget
+{
+Q_OBJECT
+public:
+ PythonImplementationWidget(KDevLanguageSupport* part, QWidget* parent = 0, const char* name = 0, bool modal = true);
+
+ ~PythonImplementationWidget();
+
+ virtual QStringList createClassFiles();
+
+};
+
+#endif
diff --git a/languages/python/pythonsupportpart.cpp b/languages/python/pythonsupportpart.cpp
new file mode 100644
index 00000000..1b0e76da
--- /dev/null
+++ b/languages/python/pythonsupportpart.cpp
@@ -0,0 +1,410 @@
+/***************************************************************************
+ * 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 "pythonsupportpart.h"
+#include "pythonconfigwidget.h"
+
+#include <kdevcore.h>
+#include <kdevproject.h>
+#include <kdevappfrontend.h>
+#include <kdevpartcontroller.h>
+#include <codemodel.h>
+#include <domutil.h>
+
+#include <qfileinfo.h>
+#include <qpopupmenu.h>
+#include <qstringlist.h>
+#include <qtextstream.h>
+#include <qtimer.h>
+#include <qvbox.h>
+#include <kaction.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kdialogbase.h>
+#include <kdevgenericfactory.h>
+#include <kdevplugininfo.h>
+#include <kinputdialog.h>
+#include <klocale.h>
+#include <qregexp.h>
+
+#include "qtdesignerpythonintegration.h"
+#include "pythonimplementationwidget.h"
+
+typedef KDevGenericFactory<PythonSupportPart> PythonSupportFactory;
+static const KDevPluginInfo data("kdevpythonsupport");
+K_EXPORT_COMPONENT_FACTORY( libkdevpythonsupport, PythonSupportFactory( data ) )
+
+PythonSupportPart::PythonSupportPart(QObject *parent, const char *name, const QStringList &)
+ : KDevLanguageSupport(&data, parent, name ? name : "PythonSupportPart")
+{
+ setInstance(PythonSupportFactory::instance());
+
+ setXMLFile("kdevpythonsupport.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&)) );
+ connect( core(), SIGNAL(projectConfigWidget(KDialogBase*)),
+ this, SLOT(projectConfigWidget(KDialogBase*)) );
+ connect( core(), SIGNAL(contextMenu(QPopupMenu *, const Context *)),
+ this, SLOT(contextMenu(QPopupMenu *, const Context *)) );
+
+ KAction *action;
+
+ action = new KAction( i18n("Execute Program"), "exec", 0,
+ this, SLOT(slotExecute()),
+ actionCollection(), "build_exec" );
+ action->setToolTip( i18n("Execute program") );
+ action->setWhatsThis(i18n("<b>Execute program</b><p>Runs the Python program."));
+
+ action = new KAction( i18n("Execute String..."), "exec", 0,
+ this, SLOT(slotExecuteString()),
+ actionCollection(), "build_execstring" );
+ action->setToolTip( i18n("Execute string") );
+ action->setWhatsThis(i18n("<b>Execute String</b><p>Executes a string as Python code."));
+
+ action = new KAction( i18n("Start Python Interpreter"), "exec", 0,
+ this, SLOT(slotStartInterpreter()),
+ actionCollection(), "build_runinterpreter" );
+ action->setToolTip( i18n("Start Python interpreter") );
+ action->setWhatsThis(i18n("<b>Start python interpreter</b><p>Starts the Python interpreter without a program"));
+
+ action = new KAction( i18n("Python Documentation..."), 0,
+ this, SLOT(slotPydoc()),
+ actionCollection(), "help_pydoc" );
+ action->setToolTip( i18n("Python documentation") );
+ action->setWhatsThis(i18n("<b>Python documentation</b><p>Shows a Python documentation page."));
+}
+
+
+PythonSupportPart::~PythonSupportPart()
+{}
+
+
+void PythonSupportPart::contextMenu(QPopupMenu *popup, const Context *context)
+{
+ if (context->hasType(Context::FileContext)){
+ const FileContext *fc = static_cast<const FileContext*>(context);
+ //this is a .ui file and only selection contains only one such file
+ KURL url = fc->urls().first();
+ if (url.fileName().endsWith(".ui"))
+ {
+ m_contextFileName = url.fileName();
+ int id = popup->insertItem(i18n("Create or Select Implementation..."), this, SLOT(slotCreateSubclass()));
+ popup->setWhatsThis(id, i18n("<b>Create or select implementation</b><p>Creates or selects a subclass of selected form for use with integrated KDevDesigner."));
+ }
+ }
+}
+
+
+void PythonSupportPart::projectConfigWidget(KDialogBase *dlg)
+{
+ QVBox *vbox = dlg->addVBoxPage(i18n("Python"));
+ PythonConfigWidget *w = new PythonConfigWidget(*projectDom(), vbox, "python config widget");
+ connect( dlg, SIGNAL(okClicked()), w, SLOT(accept()) );
+}
+
+
+void PythonSupportPart::projectOpened()
+{
+ kdDebug(9014) << "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
+ // properly initialized
+ QTimer::singleShot(0, this, SLOT(initialParse()));
+}
+
+
+void PythonSupportPart::projectClosed()
+{
+}
+
+
+void PythonSupportPart::maybeParse(const QString fileName)
+{
+ QFileInfo fi(fileName);
+ if (fi.extension() == "py") {
+
+ if( codeModel()->hasFile(fileName) ){
+ emit aboutToRemoveSourceInfo( fileName );
+ codeModel()->removeFile( codeModel()->fileByName(fileName) );
+ }
+
+ parse( fileName );
+ }
+}
+
+
+void PythonSupportPart::initialParse()
+{
+ kdDebug(9014) << "initialParse()" << endl;
+
+ if (project()) {
+ kapp->setOverrideCursor(waitCursor);
+ QStringList files = project()->allFiles();
+ for (QStringList::Iterator it = files.begin(); it != files.end() ;++it) {
+ kdDebug(9014) << "maybe parse " << project()->projectDirectory() + "/" + (*it) << endl;
+ maybeParse(project()->projectDirectory() + "/" + *it);
+ }
+
+ emit updatedSourceInfo();
+ kapp->restoreOverrideCursor();
+ } else {
+ kdDebug(9014) << "No project" << endl;
+ }
+}
+
+
+void PythonSupportPart::addedFilesToProject(const QStringList &fileList)
+{
+ kdDebug(9014) << "addedFilesToProject()" << endl;
+
+ QStringList::ConstIterator it;
+
+ for ( it = fileList.begin(); it != fileList.end(); ++it )
+ {
+ QString fileName = project()->projectDirectory() + "/" + ( *it );
+ maybeParse( fileName );
+ emit addedSourceInfo( fileName );
+ }
+
+ //emit updatedSourceInfo();
+}
+
+
+void PythonSupportPart::removedFilesFromProject(const QStringList &fileList)
+{
+ kdDebug(9014) << "removedFilesFromProject()" << endl;
+
+ QStringList::ConstIterator it;
+
+ for ( it = fileList.begin(); it != fileList.end(); ++it )
+ {
+ QString fileName = project()->projectDirectory() + "/" + ( *it );
+
+ if( codeModel()->hasFile(fileName) ){
+ emit aboutToRemoveSourceInfo( fileName );
+ codeModel()->removeFile( codeModel()->fileByName(fileName) );
+ }
+ }
+
+ //emit updatedSourceInfo();
+}
+
+
+void PythonSupportPart::savedFile(const KURL &fileName)
+{
+ kdDebug(9014) << "savedFile()" << endl;
+
+ if (project()->allFiles().contains(fileName.path().mid ( project()->projectDirectory().length() + 1 ))) {
+ maybeParse(fileName.path());
+ emit addedSourceInfo( fileName.path() );
+ }
+}
+
+
+KDevLanguageSupport::Features PythonSupportPart::features()
+{
+ return Features(Classes | Functions);
+}
+
+
+KMimeType::List PythonSupportPart::mimeTypes( )
+{
+ KMimeType::List list;
+ KMimeType::Ptr mime = KMimeType::mimeType( "text/x-python" );
+ if( mime )
+ list << mime;
+
+ mime = KMimeType::mimeType( "application/x-python" );
+ if( mime )
+ list << mime;
+
+ return list;
+}
+
+void PythonSupportPart::parse(const QString &fileName)
+{
+ QFile f(QFile::encodeName(fileName));
+ if (!f.open(IO_ReadOnly))
+ return;
+ QTextStream stream(&f);
+
+ QRegExp classre("^[ \t]*class[ \t]+([A-Za-z0-9_]+)[ \t]*(\\(([A-Za-z0-9_, \t]+)\\))?.*$");
+ QRegExp methodre("^[ \t]*def[ \t]+([A-Za-z0-9_]+).*$");
+
+ FileDom m_file = codeModel()->create<FileModel>();
+ m_file->setName( fileName );
+
+ ClassDom lastClass;
+ QString rawline;
+ QCString line;
+ int lineNo = 0;
+ while (!stream.atEnd()) {
+ rawline = stream.readLine();
+ line = rawline.stripWhiteSpace().local8Bit();
+ if (classre.search(line) != -1) {
+
+ lastClass = codeModel()->create<ClassModel>();
+ lastClass->setName(classre.cap(1));
+ lastClass->setFileName( fileName );
+ lastClass->setStartPosition( lineNo, 0 );
+
+ QStringList parentList = QStringList::split(",", classre.cap(3));
+ QStringList::ConstIterator it;
+ for (it = parentList.begin(); it != parentList.end(); ++it) {
+ QString baseName = (*it).stripWhiteSpace();
+ kdDebug(9014) << "Add parent" << baseName << endl;
+ lastClass->addBaseClass( baseName );
+ }
+
+ if (m_file->hasClass(lastClass->name())) {
+ ClassDom old = m_file->classByName( lastClass->name() )[ 0 ];
+ old->setFileName( lastClass->fileName() );
+
+ int line, col;
+ lastClass->getStartPosition( &line, &col );
+ old->setStartPosition( line, col );
+
+ lastClass = old;
+ } else {
+ kdDebug(9014) << "Add class " << lastClass->name() << endl;
+ m_file->addClass( lastClass );
+ }
+
+ } else if (methodre.search(line) != -1 ) {
+
+ FunctionDom method = codeModel()->create<FunctionModel>();
+ method->setName(methodre.cap(1));
+ method->setFileName( fileName );
+ method->setStartPosition( lineNo, 0 );
+
+ if (lastClass && rawline.left(3) != "def") {
+ if( !lastClass->hasFunction(method->name()) )
+ lastClass->addFunction( method );
+ QStringList scope;
+ scope << lastClass->name();
+ method->setScope( scope );
+
+ } else if( !m_file->hasFunction(method->name()) ){
+ m_file->addFunction( method );
+ lastClass = 0;
+ }
+ }
+ ++lineNo;
+ }
+
+ f.close();
+
+ codeModel()->addFile( m_file );
+}
+
+
+QString PythonSupportPart::interpreter()
+{
+ QString prog = DomUtil::readEntry(*projectDom(), "/kdevpythonsupport/run/interpreter");
+ if (prog.isEmpty())
+ prog = "python";
+
+ return prog;
+}
+
+
+void PythonSupportPart::startApplication(const QString &program)
+{
+ bool inTerminal = DomUtil::readBoolEntry(*projectDom(), "/kdevpythonsupport/run/terminal");
+ if (KDevAppFrontend *appFrontend = extension<KDevAppFrontend>("KDevelop/AppFrontend"))
+ appFrontend->startAppCommand(QString::QString(), program, inTerminal);
+}
+
+
+void PythonSupportPart::slotExecute()
+{
+ QString program = project()->mainProgram();
+ QString cmd = interpreter() + " " + program;
+ startApplication(cmd);
+}
+
+
+void PythonSupportPart::slotStartInterpreter()
+{
+ startApplication(interpreter());
+}
+
+
+void PythonSupportPart::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 PythonSupportPart::slotPydoc()
+{
+ bool ok;
+ QString key = KInputDialog::getText(i18n("Show Python Documentation"), i18n("Show Python documentation on keyword:"), "", &ok, 0);
+ if (ok && !key.isEmpty()) {
+ QString url = "pydoc:";
+ url += key;
+ partController()->showDocument(KURL(url));
+ }
+}
+
+KDevDesignerIntegration *PythonSupportPart::designer(KInterfaceDesigner::DesignerType type)
+{
+ KDevDesignerIntegration *des = 0;
+ switch (type)
+ {
+ case KInterfaceDesigner::QtDesigner:
+ des = m_designers[type];
+ if (des == 0)
+ {
+ PythonImplementationWidget *impl = new PythonImplementationWidget(this);
+ des = new QtDesignerPythonIntegration(this, impl);
+ des->loadSettings(*project()->projectDom(),
+ "kdevpythonsupport/designerintegration");
+ m_designers[type] = des;
+ }
+ break;
+ case KInterfaceDesigner::Glade:
+ break;
+ }
+ return des;
+
+}
+
+void PythonSupportPart::slotCreateSubclass()
+{
+ QFileInfo fi(m_contextFileName);
+ kdDebug(9014) << k_funcinfo << " file: " << m_contextFileName << " ext: " << fi.extension(false) << endl;
+ if (fi.extension(false) != "ui")
+ return;
+ QtDesignerPythonIntegration *des = dynamic_cast<QtDesignerPythonIntegration*>(designer(KInterfaceDesigner::QtDesigner));
+ if (des)
+ {
+ kdDebug(9014) << "ok: " << des << endl;
+ kdDebug(9014) << "have impl: " << des->selectImplementation(m_contextFileName);
+ }
+ kdDebug(9014) << "end: " << des << endl;
+}
+
+#include "pythonsupportpart.moc"
diff --git a/languages/python/pythonsupportpart.h b/languages/python/pythonsupportpart.h
new file mode 100644
index 00000000..ad2085e5
--- /dev/null
+++ b/languages/python/pythonsupportpart.h
@@ -0,0 +1,66 @@
+/***************************************************************************
+ * 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 _PYTHONSUPPORTPART_H_
+#define _PYTHONSUPPORTPART_H_
+
+
+#include "kdevlanguagesupport.h"
+
+class KDialogBase;
+class QStringList;
+class QPopupMenu;
+class Context;
+
+class PythonSupportPart : public KDevLanguageSupport
+{
+ Q_OBJECT
+
+public:
+ PythonSupportPart( QObject *parent, const char *name, const QStringList & );
+ ~PythonSupportPart();
+
+ virtual KDevDesignerIntegration *designer(KInterfaceDesigner::DesignerType type);
+
+public slots:
+ void contextMenu(QPopupMenu *popup, const Context *context);
+ void slotCreateSubclass();
+
+protected:
+ virtual Features features();
+ virtual KMimeType::List mimeTypes();
+
+private slots:
+ void projectConfigWidget(KDialogBase *dlg);
+ 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 slotPydoc();
+
+private:
+ QString interpreter();
+ void startApplication(const QString &program);
+ void maybeParse(const QString fileName);
+ void parse(const QString &fileName);
+
+ QMap<KInterfaceDesigner::DesignerType, KDevDesignerIntegration*> m_designers;
+ QString m_contextFileName;
+};
+
+#endif
diff --git a/languages/python/qtdesignerpythonintegration.cpp b/languages/python/qtdesignerpythonintegration.cpp
new file mode 100644
index 00000000..5a47d810
--- /dev/null
+++ b/languages/python/qtdesignerpythonintegration.cpp
@@ -0,0 +1,97 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Alexander Dymo *
+ * adymo@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. *
+ * *
+ * 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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#include "qtdesignerpythonintegration.h"
+
+#include <qpair.h>
+#include <qregexp.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <kurl.h>
+#include <ktexteditor/editinterface.h>
+#include <ktexteditor/view.h>
+#include <ktexteditor/viewcursorinterface.h>
+
+#include <domutil.h>
+#include <kdevpartcontroller.h>
+#include <kdevcreatefile.h>
+#include <kdevlanguagesupport.h>
+
+#include "codemodel_utils.h"
+#include "implementationwidget.h"
+
+QtDesignerPythonIntegration::QtDesignerPythonIntegration(KDevLanguageSupport* part, ImplementationWidget* impl)
+ :QtDesignerIntegration(part, impl, false, 0)
+{
+}
+
+
+QtDesignerPythonIntegration::~QtDesignerPythonIntegration()
+{
+}
+
+
+void QtDesignerPythonIntegration::addFunctionToClass(KInterfaceDesigner::Function function, ClassDom klass)
+{
+ m_part->partController()->editDocument( KURL( klass->fileName() ) );
+ KTextEditor::EditInterface* editIface = dynamic_cast<KTextEditor::EditInterface*>( m_part->partController()->activePart() );
+ if( !editIface ){
+ /// @todo show messagebox
+// QDialog::accept();
+ return;
+ }
+
+ kdDebug(9014) << "===============" << endl;
+
+ int line, column;
+ klass->getStartPosition( &line, &column );
+
+ // compute the insertion point
+ QPair<int,int> point;
+ point.first = line + 1;
+ point.second = column;
+
+ const FunctionList functionList = klass->functionList();
+ if (functionList.count() > 0)
+ {
+ int funEndLine, funEndColumn;
+ functionList.first()->getEndPosition(&funEndLine, &funEndColumn);
+ point.second = funEndColumn;
+ }
+
+ QString func = function.function;
+ func.replace("()", "");
+ QString str = " def " + func + "(self):\n\n";
+
+ kdDebug(9014) << "insert " << str << " into " << point.first << endl;
+
+ editIface->insertText(point.first, 0 /*pt.second*/, str );
+
+ KTextEditor::View *activeView = dynamic_cast<KTextEditor::View*>( m_part->partController()->activePart()->widget() );
+ if (activeView)
+ {
+ KTextEditor::ViewCursorInterface* cursor = dynamic_cast<KTextEditor::ViewCursorInterface*>(activeView );
+ if (cursor)
+ cursor->setCursorPositionReal(point.first, 4);
+ }
+}
+
+#include "qtdesignerpythonintegration.moc"
diff --git a/languages/python/qtdesignerpythonintegration.h b/languages/python/qtdesignerpythonintegration.h
new file mode 100644
index 00000000..8ac5d5be
--- /dev/null
+++ b/languages/python/qtdesignerpythonintegration.h
@@ -0,0 +1,37 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Alexander Dymo *
+ * adymo@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. *
+ * *
+ * 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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#ifndef QTDESIGNERPYTHONINTEGRATION_H
+#define QTDESIGNERPYTHONINTEGRATION_H
+
+#include <qtdesignerintegration.h>
+
+class QtDesignerPythonIntegration : public QtDesignerIntegration
+{
+Q_OBJECT
+public:
+ QtDesignerPythonIntegration(KDevLanguageSupport* part, ImplementationWidget* impl);
+
+ ~QtDesignerPythonIntegration();
+
+ virtual void addFunctionToClass(KInterfaceDesigner::Function function, ClassDom klass);
+
+};
+
+#endif