Editor

Fri, 22 Jan 2021 16:48:43 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 22 Jan 2021 16:48:43 +0100
changeset 7998
cd41c844862f
parent 7997
2ca23396c25c
child 7999
159689297bc0

Editor
- added functionality to insert docstring templates via the context menu (cursor placed on first line of function definition) or after entering the docstring start string (e.g. """ for Python)

DTDs/Project-6.4.dtd file | annotate | diff | comparison | revisions
DTDs/Project-6.5.dtd file | annotate | diff | comparison | revisions
docs/changelog file | annotate | diff | comparison | revisions
eric6.e4p file | annotate | diff | comparison | revisions
eric6/APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
eric6/APIs/Python3/eric6.bas file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.E5XML.Config.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.Project.Project.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.EricdocGenerator.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.GoogledocGenerator.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.NumpydocGenerator.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.SphinxdocGenerator.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.__init__.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.Editor.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.QsciScintillaCompat.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/index-eric6.QScintilla.DocstringGenerator.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/index-eric6.QScintilla.html file | annotate | diff | comparison | revisions
eric6/E5XML/Config.py file | annotate | diff | comparison | revisions
eric6/E5XML/ProjectReader.py file | annotate | diff | comparison | revisions
eric6/E5XML/ProjectWriter.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/DocStyleChecker.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationPages/EditorGeneralPage.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationPages/EditorGeneralPage.ui file | annotate | diff | comparison | revisions
eric6/Preferences/__init__.py file | annotate | diff | comparison | revisions
eric6/Project/Project.py file | annotate | diff | comparison | revisions
eric6/Project/PropertiesDialog.py file | annotate | diff | comparison | revisions
eric6/Project/PropertiesDialog.ui file | annotate | diff | comparison | revisions
eric6/QScintilla/DocstringGenerator/BaseDocstringGenerator.py file | annotate | diff | comparison | revisions
eric6/QScintilla/DocstringGenerator/EricdocGenerator.py file | annotate | diff | comparison | revisions
eric6/QScintilla/DocstringGenerator/GoogledocGenerator.py file | annotate | diff | comparison | revisions
eric6/QScintilla/DocstringGenerator/NumpydocGenerator.py file | annotate | diff | comparison | revisions
eric6/QScintilla/DocstringGenerator/PyDocstringGenerator.py file | annotate | diff | comparison | revisions
eric6/QScintilla/DocstringGenerator/SphinxdocGenerator.py file | annotate | diff | comparison | revisions
eric6/QScintilla/DocstringGenerator/__init__.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Editor.py file | annotate | diff | comparison | revisions
eric6/QScintilla/QsciScintillaCompat.py file | annotate | diff | comparison | revisions
eric6/i18n/eric6_cs.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_de.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_de.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_empty.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_en.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_es.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_fr.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_it.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_pt.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_ru.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_tr.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/DTDs/Project-6.4.dtd	Fri Jan 22 14:14:15 2021 +0100
+++ b/DTDs/Project-6.4.dtd	Fri Jan 22 16:48:43 2021 +0100
@@ -1,4 +1,4 @@
-<!-- This is the DTD for eric's project file version 6.3 -->
+<!-- This is the DTD for eric's project file version 6.4 -->
 
 <!-- This is a copy of the Basic DTD -->
 <!ELEMENT   int         (#PCDATA)>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DTDs/Project-6.5.dtd	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,191 @@
+<!-- This is the DTD for eric's project file version 6.4 -->
+
+<!-- This is a copy of the Basic DTD -->
+<!ELEMENT   int         (#PCDATA)>
+<!ELEMENT   long        (#PCDATA)>
+<!ELEMENT   float       (#PCDATA)>
+<!ELEMENT   complex     (#PCDATA)>
+<!ELEMENT   bool        (#PCDATA)>
+<!ELEMENT   string      (#PCDATA)>
+<!ELEMENT   bytes       (#PCDATA)>
+<!ELEMENT   bytearray   (#PCDATA)>
+<!ELEMENT   none        EMPTY>
+
+<!ELEMENT   pickle      (#PCDATA)>
+<!ATTLIST   pickle
+    method      CDATA   #REQUIRED
+    encoding    CDATA   #REQUIRED>
+
+<!ELEMENT   key         (int | long | float | complex | string | bytes)>
+<!ELEMENT   value       (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)>
+
+<!ELEMENT   dict        (key, value)*>
+
+<!ELEMENT   tuple       (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   list        (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   set         (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   frozenset   (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+<!-- End of the Basic DTD -->
+
+<!ELEMENT   ProgLanguage        (#PCDATA)>
+<!ATTLIST   ProgLanguage
+    mixed       CDATA   #REQUIRED>
+
+<!ELEMENT   ProjectType         (#PCDATA)>
+
+<!ELEMENT   Description         (#PCDATA)>
+
+<!ELEMENT   Version             (#PCDATA)>
+
+<!ELEMENT   Author              (#PCDATA)>
+
+<!ELEMENT   Email               (#PCDATA)>
+
+<!ELEMENT   TranslationPattern  (#PCDATA)>
+
+<!ELEMENT   TranslationsBinPath (#PCDATA)>
+
+<!ELEMENT   Source              (#PCDATA)>
+
+<!ELEMENT   Sources             (Source*)>
+
+<!ELEMENT   Form                (#PCDATA)>
+
+<!ELEMENT   Forms               (Form*)>
+
+<!ELEMENT   Translation         (#PCDATA)>
+
+<!ELEMENT   Translations        (Translation*)>
+
+<!ELEMENT   TranslationException  (#PCDATA)>
+
+<!ELEMENT   TranslationExceptions (TranslationException*)>
+
+<!ELEMENT   Resource            (#PCDATA)>
+
+<!ELEMENT   Resources           (Resource*)>
+
+<!ELEMENT   Interface           (#PCDATA)>
+
+<!ELEMENT   Interfaces          (Interface*)>
+
+<!ELEMENT   Protocol            (#PCDATA)>
+
+<!ELEMENT   Protocols           (Protocol*)>
+
+<!ELEMENT   Other               (#PCDATA)>
+
+<!ELEMENT   Others              (Other*)>
+
+<!ELEMENT   MainScript          (#PCDATA)>
+
+<!ELEMENT   VcsType             (#PCDATA)>
+<!ELEMENT   VcsOptions          (dict)>
+<!ELEMENT   VcsOtherData        (dict)>
+
+<!ELEMENT   Vcs                 (VcsType?,
+                                 VcsOptions?,
+                                 VcsOtherData?)>
+
+<!ELEMENT   FiletypeAssociation EMPTY>
+<!ATTLIST   FiletypeAssociation
+    pattern     CDATA   #REQUIRED
+    type        CDATA   #REQUIRED>
+
+<!ELEMENT   FiletypeAssociations (FiletypeAssociation*)>
+
+<!ELEMENT   LexerAssociation EMPTY>
+<!ATTLIST   LexerAssociation
+    pattern     CDATA   #REQUIRED
+    lexer       CDATA   #REQUIRED>
+
+<!ELEMENT   LexerAssociations   (LexerAssociation*)>
+
+<!ELEMENT   MakeParameters      (dict)>
+
+<!ELEMENT   Make                (MakeParameters?)>
+
+<!ELEMENT   IdlCompiler         (IdlCompilerParameters?)>
+
+<!ELEMENT   UicCompiler         (UicCompilerParameters?)>
+
+<!ELEMENT   RccCompiler         (RccCompilerParameters?)>
+
+<!ELEMENT   DocstringStyle      (#PCDATA)
+
+<!ELEMENT   ProjectTypeSpecificData (dict)>
+
+<!ELEMENT   ProjectTypeSpecific (ProjectTypeSpecific?)>
+
+<!ELEMENT   DocumentationParams (dict)>
+
+<!ELEMENT   Documentation       (DocumentationParams?)>
+
+<!ELEMENT   PackagersParams     (dict)>
+
+<!ELEMENT   Packagers           (PackagersParams?)>
+
+<!ELEMENT   CheckersParams      (dict)>
+
+<!ELEMENT   Checkers            (CheckersParams?)>
+
+<!ELEMENT   OtherToolsParams    (dict)>
+
+<!ELEMENT   OtherTools          (OtherToolsParams?)>
+
+<!ELEMENT   Language            (#PCDATA)>
+
+<!ELEMENT   ProjectWordList     (#PCDATA)>
+
+<!ELEMENT   ProjectExcludeList  (#PCDATA)>
+
+<!ELEMENT   Hash                (#PCDATA)>
+
+<!ELEMENT   Eol EMPTY>
+<!ATTLIST   Eol
+    index       CDATA   #REQUIRED>
+
+<!ELEMENT   Project             (Language,
+                                 ProjectWordList?,
+                                 ProjectExcludeList?,
+                                 Hash,
+                                 ProgLanguage,
+                                 ProjectType,
+                                 Description?,
+                                 Version?,
+                                 Author?,
+                                 Email?,
+                                 TranslationPattern?,
+                                 TranslationsBinPath?,
+                                 Eol?,
+                                 Sources,
+                                 Forms,
+                                 Translations,
+                                 TranslationExceptions?,
+                                 Resources,
+                                 Interfaces,
+                                 Others,
+                                 MainScript?,
+                                 Vcs,
+                                 FiletypeAssociations,
+                                 LexerAssociations?,
+                                 Make?,
+                                 IdlCompiler?,
+                                 UicCompiler?,
+                                 RccCompiler?,
+                                 DocstringStyle?,
+                                 ProjectTypeSpecific?,
+                                 Documentation?,
+                                 Packagers?,
+                                 Checkers?,
+                                 OtherTools?)>
+<!ATTLIST   Project
+    version     CDATA   #REQUIRED>
--- a/docs/changelog	Fri Jan 22 14:14:15 2021 +0100
+++ b/docs/changelog	Fri Jan 22 16:48:43 2021 +0100
@@ -27,6 +27,9 @@
   -- added code to enclose the current selection by entering ", ' or a bracket
      ( (, ), [, ], {, }, <, > ) characters
   -- extended the exporters to support sub-styles
+  -- added functionality to insert docstring templates via the context menu
+     (cursor placed on first line of function definition) or after entering
+     the docstring start string (e.g. """ for Python)
 - Find File Dialog
   -- added option to exclude hidden files and directories
   -- changed directory tree search logic to derive the file patterns from the
--- a/eric6.e4p	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6.e4p	Fri Jan 22 16:48:43 2021 +0100
@@ -820,6 +820,13 @@
     <Source>eric6/PyUnit/UnittestDialog.py</Source>
     <Source>eric6/PyUnit/__init__.py</Source>
     <Source>eric6/QScintilla/APIsManager.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/BaseDocstringGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/EricdocGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/GoogledocGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/NumpydocGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/PyDocstringGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/SphinxdocGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/__init__.py</Source>
     <Source>eric6/QScintilla/Editor.py</Source>
     <Source>eric6/QScintilla/EditorAssembly.py</Source>
     <Source>eric6/QScintilla/EditorButtonsWidget.py</Source>
@@ -2110,6 +2117,9 @@
     <Other>eric6/APIs/MicroPython/circuitpython.api</Other>
     <Other>eric6/APIs/MicroPython/microbit.api</Other>
     <Other>eric6/APIs/MicroPython/micropython.api</Other>
+    <Other>eric6/APIs/Python/zope-2.10.7.api</Other>
+    <Other>eric6/APIs/Python/zope-2.11.2.api</Other>
+    <Other>eric6/APIs/Python/zope-3.3.1.api</Other>
     <Other>eric6/APIs/Python3/PyQt4.bas</Other>
     <Other>eric6/APIs/Python3/PyQt5.bas</Other>
     <Other>eric6/APIs/Python3/PyQtChart.bas</Other>
@@ -2117,9 +2127,6 @@
     <Other>eric6/APIs/Python3/QScintilla2.bas</Other>
     <Other>eric6/APIs/Python3/eric6.api</Other>
     <Other>eric6/APIs/Python3/eric6.bas</Other>
-    <Other>eric6/APIs/Python/zope-2.10.7.api</Other>
-    <Other>eric6/APIs/Python/zope-2.11.2.api</Other>
-    <Other>eric6/APIs/Python/zope-3.3.1.api</Other>
     <Other>eric6/APIs/QSS/qss.api</Other>
     <Other>eric6/APIs/Ruby/Ruby-1.8.7.api</Other>
     <Other>eric6/APIs/Ruby/Ruby-1.8.7.bas</Other>
--- a/eric6/APIs/Python3/eric6.api	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/APIs/Python3/eric6.api	Fri Jan 22 16:48:43 2021 +0100
@@ -1810,6 +1810,7 @@
 eric6.E5XML.Config.projectFileFormatVersionIdl?7
 eric6.E5XML.Config.projectFileFormatVersionMake?7
 eric6.E5XML.Config.projectFileFormatVersionProto?7
+eric6.E5XML.Config.projectFileFormatVersionRcc?7
 eric6.E5XML.Config.projectFileFormatVersionUic?7
 eric6.E5XML.Config.sessionFileFormatVersion?7
 eric6.E5XML.Config.shortcutsFileFormatVersion?7
@@ -6957,6 +6958,7 @@
 eric6.Project.Project.Project.getDebuggerFilters?4(language)
 eric6.Project.Project.Project.getDefaultRccCompilerParameters?4()
 eric6.Project.Project.Project.getDefaultSourceExtension?4()
+eric6.Project.Project.Project.getDocstringType?4()
 eric6.Project.Project.Project.getEditorLexerAssoc?4(filename)
 eric6.Project.Project.Project.getEolString?4()
 eric6.Project.Project.Project.getFiles?4(start)
@@ -6991,6 +6993,7 @@
 eric6.Project.Project.Project.getVcs?4()
 eric6.Project.Project.Project.handleApplicationDiagram?4()
 eric6.Project.Project.Project.handlePreferencesChanged?4()
+eric6.Project.Project.Project.hasDefaultDocstringParameter?4()
 eric6.Project.Project.Project.hasDefaultIdlCompilerParameters?4()
 eric6.Project.Project.Project.hasDefaultMakeParameters?4()
 eric6.Project.Project.Project.hasDefaultRccCompilerParameters?4()
@@ -7361,6 +7364,31 @@
 eric6.QScintilla.APIsManager.APIsManager.getAPIs?4(language, projectType="", forPreparation=False)
 eric6.QScintilla.APIsManager.APIsManager.reloadAPIs?4()
 eric6.QScintilla.APIsManager.APIsManager?1(parent=None)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator._generateDocstringList?5(functionInfo, docstringType)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.getDocstringType?4()
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.hasFunctionDefinition?4(cursorPosition)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.insertDocstring?4(cursorPosition, fromStart=True)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.isDocstringIntro?4(cursorPosition)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.isFunctionStart?4(text)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator?1(editor)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.DocstringMenuForEnterOnly.keyPressEvent?4(evt)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.DocstringMenuForEnterOnly?1(editor)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.FunctionInfo?1()
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.getIndentStr?4(text)
+eric6.QScintilla.DocstringGenerator.EricdocGenerator.generateEricDoc?4(functionInfo)
+eric6.QScintilla.DocstringGenerator.GoogledocGenerator.generateGoogleDoc?4(functionInfo, editor)
+eric6.QScintilla.DocstringGenerator.NumpydocGenerator.generateNumpyDoc?4(functionInfo, editor)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator.hasFunctionDefinition?4(cursorPosition)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator.insertDocstring?4(cursorPosition, fromStart=True)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator.isDocstringIntro?4(cursorPosition)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator.isFunctionStart?4(text)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator?1(editor)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyFunctionInfo.parseBody?4(text)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyFunctionInfo.parseDefinition?4(text, quote, quoteReplace)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyFunctionInfo?1()
+eric6.QScintilla.DocstringGenerator.SphinxdocGenerator.generateSphinxDoc?4(functionInfo)
+eric6.QScintilla.DocstringGenerator.getDocstringGenerator?4(editor)
+eric6.QScintilla.DocstringGenerator.getSupportedDocstringTypes?4()
 eric6.QScintilla.Editor.Editor.AttributeID?7
 eric6.QScintilla.Editor.Editor.AttributePrivateID?7
 eric6.QScintilla.Editor.Editor.AttributeProtectedID?7
@@ -7464,6 +7492,7 @@
 eric6.QScintilla.Editor.Editor.getCoverageLines?4()
 eric6.QScintilla.Editor.Editor.getCurrentWord?4()
 eric6.QScintilla.Editor.Editor.getCurrentWordBoundaries?4()
+eric6.QScintilla.Editor.Editor.getDocstringGenerator?4()
 eric6.QScintilla.Editor.Editor.getEditorConfig?4(option)
 eric6.QScintilla.Editor.Editor.getEncoding?4()
 eric6.QScintilla.Editor.Editor.getFileName?4()
@@ -8243,6 +8272,7 @@
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getEolIndicator?4()
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getFileName?4()
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getFoundTarget?4()
+eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getGlobalCursorPosition?4()
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getIndicatorEndPos?4(indicator, pos)
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getIndicatorStartPos?4(indicator, pos)
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getLineSeparator?4()
--- a/eric6/APIs/Python3/eric6.bas	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/APIs/Python3/eric6.bas	Fri Jan 22 16:48:43 2021 +0100
@@ -147,6 +147,7 @@
 DispositionParm str
 DispositionParmList UniqueNamespace
 DispositionType peg.List
+DocstringMenuForEnterOnly QMenu
 DocumentationViewerWidget QWidget
 DotDesktopListSelectionDialog QDialog Ui_DotDesktopListSelectionDialog
 DotDesktopWizard QObject
@@ -733,6 +734,8 @@
 PurgeProjectHelper HgExtensionProjectHelper
 PyBoardDevice MicroPythonDevice
 PyCoverageDialog QDialog Ui_PyCoverageDialog
+PyDocstringGenerator BaseDocstringGenerator
+PyFunctionInfo FunctionInfo
 PyProfile profile.Profile
 PyProfileDialog QDialog Ui_PyProfileDialog
 PyRegExpWizard QObject
Binary file eric6/Documentation/Help/source.qch has changed
--- a/eric6/Documentation/Help/source.qhp	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Documentation/Help/source.qhp	Fri Jan 22 16:48:43 2021 +0100
@@ -857,6 +857,15 @@
             <section title="eric6.PyUnit.UnittestDialog" ref="eric6.PyUnit.UnittestDialog.html" />
           </section>
           <section title="eric6.QScintilla" ref="index-eric6.QScintilla.html">
+            <section title="eric6.QScintilla.DocstringGenerator" ref="index-eric6.QScintilla.DocstringGenerator.html">
+              <section title="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html" />
+              <section title="eric6.QScintilla.DocstringGenerator.EricdocGenerator" ref="eric6.QScintilla.DocstringGenerator.EricdocGenerator.html" />
+              <section title="eric6.QScintilla.DocstringGenerator.GoogledocGenerator" ref="eric6.QScintilla.DocstringGenerator.GoogledocGenerator.html" />
+              <section title="eric6.QScintilla.DocstringGenerator.NumpydocGenerator" ref="eric6.QScintilla.DocstringGenerator.NumpydocGenerator.html" />
+              <section title="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html" />
+              <section title="eric6.QScintilla.DocstringGenerator.SphinxdocGenerator" ref="eric6.QScintilla.DocstringGenerator.SphinxdocGenerator.html" />
+              <section title="eric6.QScintilla.DocstringGenerator.__init__" ref="eric6.QScintilla.DocstringGenerator.__init__.html" />
+            </section>
             <section title="eric6.QScintilla.Exporters" ref="index-eric6.QScintilla.Exporters.html">
               <section title="eric6.QScintilla.Exporters.ExporterBase" ref="eric6.QScintilla.Exporters.ExporterBase.html" />
               <section title="eric6.QScintilla.Exporters.ExporterHTML" ref="eric6.QScintilla.Exporters.ExporterHTML.html" />
@@ -1853,6 +1862,15 @@
       <keyword name="BackgroundService.serviceConnect" id="BackgroundService.serviceConnect" ref="eric6.Utilities.BackgroundService.html#BackgroundService.serviceConnect" />
       <keyword name="BackgroundService.serviceDisconnect" id="BackgroundService.serviceDisconnect" ref="eric6.Utilities.BackgroundService.html#BackgroundService.serviceDisconnect" />
       <keyword name="BackgroundService.shutdown" id="BackgroundService.shutdown" ref="eric6.Utilities.BackgroundService.html#BackgroundService.shutdown" />
+      <keyword name="BaseDocstringGenerator" id="BaseDocstringGenerator" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#BaseDocstringGenerator" />
+      <keyword name="BaseDocstringGenerator (Constructor)" id="BaseDocstringGenerator (Constructor)" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#BaseDocstringGenerator.__init__" />
+      <keyword name="BaseDocstringGenerator (Module)" id="BaseDocstringGenerator (Module)" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html" />
+      <keyword name="BaseDocstringGenerator._generateDocstringList" id="BaseDocstringGenerator._generateDocstringList" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#BaseDocstringGenerator._generateDocstringList" />
+      <keyword name="BaseDocstringGenerator.getDocstringType" id="BaseDocstringGenerator.getDocstringType" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#BaseDocstringGenerator.getDocstringType" />
+      <keyword name="BaseDocstringGenerator.hasFunctionDefinition" id="BaseDocstringGenerator.hasFunctionDefinition" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#BaseDocstringGenerator.hasFunctionDefinition" />
+      <keyword name="BaseDocstringGenerator.insertDocstring" id="BaseDocstringGenerator.insertDocstring" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#BaseDocstringGenerator.insertDocstring" />
+      <keyword name="BaseDocstringGenerator.isDocstringIntro" id="BaseDocstringGenerator.isDocstringIntro" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#BaseDocstringGenerator.isDocstringIntro" />
+      <keyword name="BaseDocstringGenerator.isFunctionStart" id="BaseDocstringGenerator.isFunctionStart" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#BaseDocstringGenerator.isFunctionStart" />
       <keyword name="BaseReport" id="BaseReport" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport" />
       <keyword name="BaseReport (Constructor)" id="BaseReport (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.__init__" />
       <keyword name="BaseReport.error" id="BaseReport.error" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.error" />
@@ -3749,6 +3767,10 @@
       <keyword name="DocStyleContext.special" id="DocStyleContext.special" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleContext.special" />
       <keyword name="DocStyleContext.ssource" id="DocStyleContext.ssource" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleContext.ssource" />
       <keyword name="DocStyleContext.start" id="DocStyleContext.start" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleContext.start" />
+      <keyword name="DocstringGenerator (Package)" id="DocstringGenerator (Package)" ref="index-eric6.QScintilla.DocstringGenerator.html" />
+      <keyword name="DocstringMenuForEnterOnly" id="DocstringMenuForEnterOnly" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#DocstringMenuForEnterOnly" />
+      <keyword name="DocstringMenuForEnterOnly (Constructor)" id="DocstringMenuForEnterOnly (Constructor)" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#DocstringMenuForEnterOnly.__init__" />
+      <keyword name="DocstringMenuForEnterOnly.keyPressEvent" id="DocstringMenuForEnterOnly.keyPressEvent" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#DocstringMenuForEnterOnly.keyPressEvent" />
       <keyword name="DocumentationPlugins (Package)" id="DocumentationPlugins (Package)" ref="index-eric6.Plugins.DocumentationPlugins.html" />
       <keyword name="DocumentationTools (Package)" id="DocumentationTools (Package)" ref="index-eric6.DocumentationTools.html" />
       <keyword name="DocumentationViewerWidget" id="DocumentationViewerWidget" ref="eric6.UI.CodeDocumentationViewer.html#DocumentationViewerWidget" />
@@ -4823,6 +4845,7 @@
       <keyword name="Editor.__convertTabs" id="Editor.__convertTabs" ref="eric6.QScintilla.Editor.html#Editor.__convertTabs" />
       <keyword name="Editor.__createChangeMarkerPixmap" id="Editor.__createChangeMarkerPixmap" ref="eric6.QScintilla.Editor.html#Editor.__createChangeMarkerPixmap" />
       <keyword name="Editor.__cursorPositionChanged" id="Editor.__cursorPositionChanged" ref="eric6.QScintilla.Editor.html#Editor.__cursorPositionChanged" />
+      <keyword name="Editor.__delayedDocstringMenuPopup" id="Editor.__delayedDocstringMenuPopup" ref="eric6.QScintilla.Editor.html#Editor.__delayedDocstringMenuPopup" />
       <keyword name="Editor.__deleteAllChangeMarkers" id="Editor.__deleteAllChangeMarkers" ref="eric6.QScintilla.Editor.html#Editor.__deleteAllChangeMarkers" />
       <keyword name="Editor.__deleteBreakPoints" id="Editor.__deleteBreakPoints" ref="eric6.QScintilla.Editor.html#Editor.__deleteBreakPoints" />
       <keyword name="Editor.__deselectAll" id="Editor.__deselectAll" ref="eric6.QScintilla.Editor.html#Editor.__deselectAll" />
@@ -4860,6 +4883,7 @@
       <keyword name="Editor.__initContextMenuTools" id="Editor.__initContextMenuTools" ref="eric6.QScintilla.Editor.html#Editor.__initContextMenuTools" />
       <keyword name="Editor.__initOnlineChangeTrace" id="Editor.__initOnlineChangeTrace" ref="eric6.QScintilla.Editor.html#Editor.__initOnlineChangeTrace" />
       <keyword name="Editor.__initOnlineSyntaxCheck" id="Editor.__initOnlineSyntaxCheck" ref="eric6.QScintilla.Editor.html#Editor.__initOnlineSyntaxCheck" />
+      <keyword name="Editor.__insertDocstring" id="Editor.__insertDocstring" ref="eric6.QScintilla.Editor.html#Editor.__insertDocstring" />
       <keyword name="Editor.__isCommentedLine" id="Editor.__isCommentedLine" ref="eric6.QScintilla.Editor.html#Editor.__isCommentedLine" />
       <keyword name="Editor.__isStartChar" id="Editor.__isStartChar" ref="eric6.QScintilla.Editor.html#Editor.__isStartChar" />
       <keyword name="Editor.__languageChanged" id="Editor.__languageChanged" ref="eric6.QScintilla.Editor.html#Editor.__languageChanged" />
@@ -4882,6 +4906,7 @@
       <keyword name="Editor.__newViewNewSplit" id="Editor.__newViewNewSplit" ref="eric6.QScintilla.Editor.html#Editor.__newViewNewSplit" />
       <keyword name="Editor.__normalizedEncoding" id="Editor.__normalizedEncoding" ref="eric6.QScintilla.Editor.html#Editor.__normalizedEncoding" />
       <keyword name="Editor.__onlineChangeTraceTimerTimeout" id="Editor.__onlineChangeTraceTimerTimeout" ref="eric6.QScintilla.Editor.html#Editor.__onlineChangeTraceTimerTimeout" />
+      <keyword name="Editor.__popupDocstringMenu" id="Editor.__popupDocstringMenu" ref="eric6.QScintilla.Editor.html#Editor.__popupDocstringMenu" />
       <keyword name="Editor.__printPreview" id="Editor.__printPreview" ref="eric6.QScintilla.Editor.html#Editor.__printPreview" />
       <keyword name="Editor.__processEndEditCommand" id="Editor.__processEndEditCommand" ref="eric6.QScintilla.Editor.html#Editor.__processEndEditCommand" />
       <keyword name="Editor.__processFlags" id="Editor.__processFlags" ref="eric6.QScintilla.Editor.html#Editor.__processFlags" />
@@ -5021,6 +5046,7 @@
       <keyword name="Editor.getCoverageLines" id="Editor.getCoverageLines" ref="eric6.QScintilla.Editor.html#Editor.getCoverageLines" />
       <keyword name="Editor.getCurrentWord" id="Editor.getCurrentWord" ref="eric6.QScintilla.Editor.html#Editor.getCurrentWord" />
       <keyword name="Editor.getCurrentWordBoundaries" id="Editor.getCurrentWordBoundaries" ref="eric6.QScintilla.Editor.html#Editor.getCurrentWordBoundaries" />
+      <keyword name="Editor.getDocstringGenerator" id="Editor.getDocstringGenerator" ref="eric6.QScintilla.Editor.html#Editor.getDocstringGenerator" />
       <keyword name="Editor.getEditorConfig" id="Editor.getEditorConfig" ref="eric6.QScintilla.Editor.html#Editor.getEditorConfig" />
       <keyword name="Editor.getEncoding" id="Editor.getEncoding" ref="eric6.QScintilla.Editor.html#Editor.getEncoding" />
       <keyword name="Editor.getFileName" id="Editor.getFileName" ref="eric6.QScintilla.Editor.html#Editor.getFileName" />
@@ -5537,6 +5563,7 @@
       <keyword name="EricdocExecDialog.__readStdout" id="EricdocExecDialog.__readStdout" ref="eric6.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog.html#EricdocExecDialog.__readStdout" />
       <keyword name="EricdocExecDialog.on_buttonBox_clicked" id="EricdocExecDialog.on_buttonBox_clicked" ref="eric6.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog.html#EricdocExecDialog.on_buttonBox_clicked" />
       <keyword name="EricdocExecDialog.start" id="EricdocExecDialog.start" ref="eric6.Plugins.DocumentationPlugins.Ericdoc.EricdocExecDialog.html#EricdocExecDialog.start" />
+      <keyword name="EricdocGenerator (Module)" id="EricdocGenerator (Module)" ref="eric6.QScintilla.DocstringGenerator.EricdocGenerator.html" />
       <keyword name="EricdocPlugin" id="EricdocPlugin" ref="eric6.Plugins.PluginEricdoc.html#EricdocPlugin" />
       <keyword name="EricdocPlugin (Constructor)" id="EricdocPlugin (Constructor)" ref="eric6.Plugins.PluginEricdoc.html#EricdocPlugin.__init__" />
       <keyword name="EricdocPlugin.__doEricdoc" id="EricdocPlugin.__doEricdoc" ref="eric6.Plugins.PluginEricdoc.html#EricdocPlugin.__doEricdoc" />
@@ -5962,6 +5989,8 @@
       <keyword name="Function (Constructor)" id="Function (Constructor)" ref="eric6.Utilities.ModuleParser.html#Function.__init__" />
       <keyword name="Function.addDescription" id="Function.addDescription" ref="eric6.Utilities.ModuleParser.html#Function.addDescription" />
       <keyword name="Function.setEndLine" id="Function.setEndLine" ref="eric6.Utilities.ModuleParser.html#Function.setEndLine" />
+      <keyword name="FunctionInfo" id="FunctionInfo" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#FunctionInfo" />
+      <keyword name="FunctionInfo (Constructor)" id="FunctionInfo (Constructor)" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#FunctionInfo.__init__" />
       <keyword name="FunctionVisitor" id="FunctionVisitor" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#FunctionVisitor" />
       <keyword name="FunctionVisitor (Constructor)" id="FunctionVisitor (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#FunctionVisitor.__init__" />
       <keyword name="FunctionVisitor.__checkFunctionNode" id="FunctionVisitor.__checkFunctionNode" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#FunctionVisitor.__checkFunctionNode" />
@@ -6844,6 +6873,7 @@
       <keyword name="GoogleV2Engine.engineName" id="GoogleV2Engine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html#GoogleV2Engine.engineName" />
       <keyword name="GoogleV2Engine.getTranslation" id="GoogleV2Engine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html#GoogleV2Engine.getTranslation" />
       <keyword name="GoogleV2Engine.supportedLanguages" id="GoogleV2Engine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.GoogleV2Engine.html#GoogleV2Engine.supportedLanguages" />
+      <keyword name="GoogledocGenerator (Module)" id="GoogledocGenerator (Module)" ref="eric6.QScintilla.DocstringGenerator.GoogledocGenerator.html" />
       <keyword name="GotoDialog" id="GotoDialog" ref="eric6.QScintilla.GotoDialog.html#GotoDialog" />
       <keyword name="GotoDialog (Constructor)" id="GotoDialog (Constructor)" ref="eric6.QScintilla.GotoDialog.html#GotoDialog.__init__" />
       <keyword name="GotoDialog (Module)" id="GotoDialog (Module)" ref="eric6.QScintilla.GotoDialog.html" />
@@ -10456,6 +10486,7 @@
       <keyword name="NumbersWidget.on_octInButton_clicked" id="NumbersWidget.on_octInButton_clicked" ref="eric6.UI.NumbersWidget.html#NumbersWidget.on_octInButton_clicked" />
       <keyword name="NumbersWidget.on_octOutButton_clicked" id="NumbersWidget.on_octOutButton_clicked" ref="eric6.UI.NumbersWidget.html#NumbersWidget.on_octOutButton_clicked" />
       <keyword name="NumbersWidget.on_sizeBox_valueChanged" id="NumbersWidget.on_sizeBox_valueChanged" ref="eric6.UI.NumbersWidget.html#NumbersWidget.on_sizeBox_valueChanged" />
+      <keyword name="NumpydocGenerator (Module)" id="NumpydocGenerator (Module)" ref="eric6.QScintilla.DocstringGenerator.NumpydocGenerator.html" />
       <keyword name="OpenSearch (Package)" id="OpenSearch (Package)" ref="index-eric6.WebBrowser.OpenSearch.html" />
       <keyword name="OpenSearchDialog" id="OpenSearchDialog" ref="eric6.WebBrowser.OpenSearch.OpenSearchDialog.html#OpenSearchDialog" />
       <keyword name="OpenSearchDialog (Constructor)" id="OpenSearchDialog (Constructor)" ref="eric6.WebBrowser.OpenSearch.OpenSearchDialog.html#OpenSearchDialog.__init__" />
@@ -11348,6 +11379,7 @@
       <keyword name="Project.getDebuggerFilters" id="Project.getDebuggerFilters" ref="eric6.Project.Project.html#Project.getDebuggerFilters" />
       <keyword name="Project.getDefaultRccCompilerParameters" id="Project.getDefaultRccCompilerParameters" ref="eric6.Project.Project.html#Project.getDefaultRccCompilerParameters" />
       <keyword name="Project.getDefaultSourceExtension" id="Project.getDefaultSourceExtension" ref="eric6.Project.Project.html#Project.getDefaultSourceExtension" />
+      <keyword name="Project.getDocstringType" id="Project.getDocstringType" ref="eric6.Project.Project.html#Project.getDocstringType" />
       <keyword name="Project.getEditorLexerAssoc" id="Project.getEditorLexerAssoc" ref="eric6.Project.Project.html#Project.getEditorLexerAssoc" />
       <keyword name="Project.getEolString" id="Project.getEolString" ref="eric6.Project.Project.html#Project.getEolString" />
       <keyword name="Project.getFiles" id="Project.getFiles" ref="eric6.Project.Project.html#Project.getFiles" />
@@ -11382,6 +11414,7 @@
       <keyword name="Project.getVcs" id="Project.getVcs" ref="eric6.Project.Project.html#Project.getVcs" />
       <keyword name="Project.handleApplicationDiagram" id="Project.handleApplicationDiagram" ref="eric6.Project.Project.html#Project.handleApplicationDiagram" />
       <keyword name="Project.handlePreferencesChanged" id="Project.handlePreferencesChanged" ref="eric6.Project.Project.html#Project.handlePreferencesChanged" />
+      <keyword name="Project.hasDefaultDocstringParameter" id="Project.hasDefaultDocstringParameter" ref="eric6.Project.Project.html#Project.hasDefaultDocstringParameter" />
       <keyword name="Project.hasDefaultIdlCompilerParameters" id="Project.hasDefaultIdlCompilerParameters" ref="eric6.Project.Project.html#Project.hasDefaultIdlCompilerParameters" />
       <keyword name="Project.hasDefaultMakeParameters" id="Project.hasDefaultMakeParameters" ref="eric6.Project.Project.html#Project.hasDefaultMakeParameters" />
       <keyword name="Project.hasDefaultRccCompilerParameters" id="Project.hasDefaultRccCompilerParameters" ref="eric6.Project.Project.html#Project.hasDefaultRccCompilerParameters" />
@@ -11905,6 +11938,30 @@
       <keyword name="PyCoverageDialog.on_resultList_itemActivated" id="PyCoverageDialog.on_resultList_itemActivated" ref="eric6.DataViews.PyCoverageDialog.html#PyCoverageDialog.on_resultList_itemActivated" />
       <keyword name="PyCoverageDialog.start" id="PyCoverageDialog.start" ref="eric6.DataViews.PyCoverageDialog.html#PyCoverageDialog.start" />
       <keyword name="PyCoverageDialog.stringify" id="PyCoverageDialog.stringify" ref="eric6.DataViews.PyCoverageDialog.html#PyCoverageDialog.stringify" />
+      <keyword name="PyDocstringGenerator" id="PyDocstringGenerator" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator" />
+      <keyword name="PyDocstringGenerator (Constructor)" id="PyDocstringGenerator (Constructor)" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.__init__" />
+      <keyword name="PyDocstringGenerator (Module)" id="PyDocstringGenerator (Module)" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html" />
+      <keyword name="PyDocstringGenerator.__generateDocstring" id="PyDocstringGenerator.__generateDocstring" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.__generateDocstring" />
+      <keyword name="PyDocstringGenerator.__generateDocstringFromBelow" id="PyDocstringGenerator.__generateDocstringFromBelow" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.__generateDocstringFromBelow" />
+      <keyword name="PyDocstringGenerator.__generateDocstringFromStart" id="PyDocstringGenerator.__generateDocstringFromStart" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.__generateDocstringFromStart" />
+      <keyword name="PyDocstringGenerator.__getFunctionBody" id="PyDocstringGenerator.__getFunctionBody" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.__getFunctionBody" />
+      <keyword name="PyDocstringGenerator.__getFunctionDefinitionFromBelow" id="PyDocstringGenerator.__getFunctionDefinitionFromBelow" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.__getFunctionDefinitionFromBelow" />
+      <keyword name="PyDocstringGenerator.__getFunctionDefinitionFromStart" id="PyDocstringGenerator.__getFunctionDefinitionFromStart" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.__getFunctionDefinitionFromStart" />
+      <keyword name="PyDocstringGenerator.__getIndentationInsertString" id="PyDocstringGenerator.__getIndentationInsertString" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.__getIndentationInsertString" />
+      <keyword name="PyDocstringGenerator.__isTripleQuotesStart" id="PyDocstringGenerator.__isTripleQuotesStart" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.__isTripleQuotesStart" />
+      <keyword name="PyDocstringGenerator.hasFunctionDefinition" id="PyDocstringGenerator.hasFunctionDefinition" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.hasFunctionDefinition" />
+      <keyword name="PyDocstringGenerator.insertDocstring" id="PyDocstringGenerator.insertDocstring" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.insertDocstring" />
+      <keyword name="PyDocstringGenerator.isDocstringIntro" id="PyDocstringGenerator.isDocstringIntro" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.isDocstringIntro" />
+      <keyword name="PyDocstringGenerator.isFunctionStart" id="PyDocstringGenerator.isFunctionStart" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.isFunctionStart" />
+      <keyword name="PyFunctionInfo" id="PyFunctionInfo" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyFunctionInfo" />
+      <keyword name="PyFunctionInfo (Constructor)" id="PyFunctionInfo (Constructor)" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyFunctionInfo.__init__" />
+      <keyword name="PyFunctionInfo.__findBracketPosition" id="PyFunctionInfo.__findBracketPosition" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyFunctionInfo.__findBracketPosition" />
+      <keyword name="PyFunctionInfo.__findQuotePosition" id="PyFunctionInfo.__findQuotePosition" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyFunctionInfo.__findQuotePosition" />
+      <keyword name="PyFunctionInfo.__isCharInPairs" id="PyFunctionInfo.__isCharInPairs" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyFunctionInfo.__isCharInPairs" />
+      <keyword name="PyFunctionInfo.__splitArgumentToNameTypeValue" id="PyFunctionInfo.__splitArgumentToNameTypeValue" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyFunctionInfo.__splitArgumentToNameTypeValue" />
+      <keyword name="PyFunctionInfo.__splitArgumentsTextToList" id="PyFunctionInfo.__splitArgumentsTextToList" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyFunctionInfo.__splitArgumentsTextToList" />
+      <keyword name="PyFunctionInfo.parseBody" id="PyFunctionInfo.parseBody" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyFunctionInfo.parseBody" />
+      <keyword name="PyFunctionInfo.parseDefinition" id="PyFunctionInfo.parseDefinition" ref="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyFunctionInfo.parseDefinition" />
       <keyword name="PyProfile" id="PyProfile" ref="eric6.DebugClients.Python.PyProfile.html#PyProfile" />
       <keyword name="PyProfile (Constructor)" id="PyProfile (Constructor)" ref="eric6.DebugClients.Python.PyProfile.html#PyProfile.__init__" />
       <keyword name="PyProfile (Module)" id="PyProfile (Module)" ref="eric6.DebugClients.Python.PyProfile.html" />
@@ -12229,6 +12286,7 @@
       <keyword name="QsciScintillaCompat.getEolIndicator" id="QsciScintillaCompat.getEolIndicator" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getEolIndicator" />
       <keyword name="QsciScintillaCompat.getFileName" id="QsciScintillaCompat.getFileName" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getFileName" />
       <keyword name="QsciScintillaCompat.getFoundTarget" id="QsciScintillaCompat.getFoundTarget" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getFoundTarget" />
+      <keyword name="QsciScintillaCompat.getGlobalCursorPosition" id="QsciScintillaCompat.getGlobalCursorPosition" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getGlobalCursorPosition" />
       <keyword name="QsciScintillaCompat.getIndicatorEndPos" id="QsciScintillaCompat.getIndicatorEndPos" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getIndicatorEndPos" />
       <keyword name="QsciScintillaCompat.getIndicatorStartPos" id="QsciScintillaCompat.getIndicatorStartPos" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getIndicatorStartPos" />
       <keyword name="QsciScintillaCompat.getLineSeparator" id="QsciScintillaCompat.getLineSeparator" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.getLineSeparator" />
@@ -13443,6 +13501,7 @@
       <keyword name="SpellingPropertiesDialog (Module)" id="SpellingPropertiesDialog (Module)" ref="eric6.Project.SpellingPropertiesDialog.html" />
       <keyword name="SpellingPropertiesDialog.initDialog" id="SpellingPropertiesDialog.initDialog" ref="eric6.Project.SpellingPropertiesDialog.html#SpellingPropertiesDialog.initDialog" />
       <keyword name="SpellingPropertiesDialog.storeData" id="SpellingPropertiesDialog.storeData" ref="eric6.Project.SpellingPropertiesDialog.html#SpellingPropertiesDialog.storeData" />
+      <keyword name="SphinxdocGenerator (Module)" id="SphinxdocGenerator (Module)" ref="eric6.QScintilla.DocstringGenerator.SphinxdocGenerator.html" />
       <keyword name="SplashScreen" id="SplashScreen" ref="eric6.UI.SplashScreen.html#SplashScreen" />
       <keyword name="SplashScreen (Constructor)" id="SplashScreen (Constructor)" ref="eric6.UI.SplashScreen.html#SplashScreen.__init__" />
       <keyword name="SplashScreen (Module)" id="SplashScreen (Module)" ref="eric6.UI.SplashScreen.html" />
@@ -17456,10 +17515,14 @@
       <keyword name="generalHardcodedTmp (Module)" id="generalHardcodedTmp (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedTmp.html" />
       <keyword name="generateCheckersDict" id="generateCheckersDict" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.__init__.html#generateCheckersDict" />
       <keyword name="generateDistroInfo" id="generateDistroInfo" ref="eric6.Utilities.__init__.html#generateDistroInfo" />
+      <keyword name="generateEricDoc" id="generateEricDoc" ref="eric6.QScintilla.DocstringGenerator.EricdocGenerator.html#generateEricDoc" />
+      <keyword name="generateGoogleDoc" id="generateGoogleDoc" ref="eric6.QScintilla.DocstringGenerator.GoogledocGenerator.html#generateGoogleDoc" />
+      <keyword name="generateNumpyDoc" id="generateNumpyDoc" ref="eric6.QScintilla.DocstringGenerator.NumpydocGenerator.html#generateNumpyDoc" />
       <keyword name="generatePluginsVersionInfo" id="generatePluginsVersionInfo" ref="eric6.Utilities.__init__.html#generatePluginsVersionInfo" />
       <keyword name="generatePyQtToolPath" id="generatePyQtToolPath" ref="eric6.Utilities.__init__.html#generatePyQtToolPath" />
       <keyword name="generatePySideToolPath" id="generatePySideToolPath" ref="eric6.Utilities.__init__.html#generatePySideToolPath" />
       <keyword name="generateQtToolName" id="generateQtToolName" ref="eric6.Utilities.__init__.html#generateQtToolName" />
+      <keyword name="generateSphinxDoc" id="generateSphinxDoc" ref="eric6.QScintilla.DocstringGenerator.SphinxdocGenerator.html#generateSphinxDoc" />
       <keyword name="generateVersionInfo" id="generateVersionInfo" ref="eric6.Utilities.__init__.html#generateVersionInfo" />
       <keyword name="getAllImages" id="getAllImages" ref="eric6.WebBrowser.Tools.Scripts.html#getAllImages" />
       <keyword name="getAllMetaAttributes" id="getAllMetaAttributes" ref="eric6.WebBrowser.Tools.Scripts.html#getAllMetaAttributes" />
@@ -17521,6 +17584,7 @@
       <keyword name="getDeviceIcon" id="getDeviceIcon" ref="eric6.MicroPython.MicroPythonDevices.html#getDeviceIcon" />
       <keyword name="getDiffColour" id="getDiffColour" ref="eric6.Preferences.__init__.html#getDiffColour" />
       <keyword name="getDirs" id="getDirs" ref="eric6.Utilities.__init__.html#getDirs" />
+      <keyword name="getDocstringGenerator" id="getDocstringGenerator" ref="eric6.QScintilla.DocstringGenerator.__init__.html#getDocstringGenerator" />
       <keyword name="getDocuViewer" id="getDocuViewer" ref="eric6.Preferences.__init__.html#getDocuViewer" />
       <keyword name="getEditor" id="getEditor" ref="eric6.Preferences.__init__.html#getEditor" />
       <keyword name="getEditorAPI" id="getEditorAPI" ref="eric6.Preferences.__init__.html#getEditorAPI" />
@@ -17561,6 +17625,7 @@
       <keyword name="getImporterInfo" id="getImporterInfo" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.XbelImporter.html#getImporterInfo" />
       <keyword name="getImporterInfo" id="getImporterInfo" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.__init__.html#getImporterInfo" />
       <keyword name="getImporters" id="getImporters" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.__init__.html#getImporters" />
+      <keyword name="getIndentStr" id="getIndentStr" ref="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html#getIndentStr" />
       <keyword name="getInstallCommand" id="getInstallCommand" ref="eric6.E5Network.E5GoogleMailHelpers.html#getInstallCommand" />
       <keyword name="getInstallInfoFilePath" id="getInstallInfoFilePath" ref="eric6.Globals.__init__.html#getInstallInfoFilePath" />
       <keyword name="getIrc" id="getIrc" ref="eric6.Preferences.__init__.html#getIrc" />
@@ -17615,6 +17680,7 @@
       <keyword name="getShell" id="getShell" ref="eric6.Preferences.__init__.html#getShell" />
       <keyword name="getSupportedApiLanguages" id="getSupportedApiLanguages" ref="eric6.QScintilla.Lexers.__init__.html#getSupportedApiLanguages" />
       <keyword name="getSupportedDevices" id="getSupportedDevices" ref="eric6.MicroPython.MicroPythonDevices.html#getSupportedDevices" />
+      <keyword name="getSupportedDocstringTypes" id="getSupportedDocstringTypes" ref="eric6.QScintilla.DocstringGenerator.__init__.html#getSupportedDocstringTypes" />
       <keyword name="getSupportedFormats" id="getSupportedFormats" ref="eric6.QScintilla.Exporters.__init__.html#getSupportedFormats" />
       <keyword name="getSupportedLanguages" id="getSupportedLanguages" ref="eric6.QScintilla.Lexers.__init__.html#getSupportedLanguages" />
       <keyword name="getSymlinkIcon" id="getSymlinkIcon" ref="eric6.UI.PixmapCache.html#getSymlinkIcon" />
@@ -18847,6 +18913,13 @@
       <file>eric6.Project.UserPropertiesDialog.html</file>
       <file>eric6.PyUnit.UnittestDialog.html</file>
       <file>eric6.QScintilla.APIsManager.html</file>
+      <file>eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html</file>
+      <file>eric6.QScintilla.DocstringGenerator.EricdocGenerator.html</file>
+      <file>eric6.QScintilla.DocstringGenerator.GoogledocGenerator.html</file>
+      <file>eric6.QScintilla.DocstringGenerator.NumpydocGenerator.html</file>
+      <file>eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html</file>
+      <file>eric6.QScintilla.DocstringGenerator.SphinxdocGenerator.html</file>
+      <file>eric6.QScintilla.DocstringGenerator.__init__.html</file>
       <file>eric6.QScintilla.Editor.html</file>
       <file>eric6.QScintilla.EditorAssembly.html</file>
       <file>eric6.QScintilla.EditorButtonsWidget.html</file>
@@ -19326,6 +19399,7 @@
       <file>index-eric6.Preferences.html</file>
       <file>index-eric6.Project.html</file>
       <file>index-eric6.PyUnit.html</file>
+      <file>index-eric6.QScintilla.DocstringGenerator.html</file>
       <file>index-eric6.QScintilla.Exporters.html</file>
       <file>index-eric6.QScintilla.Lexers.html</file>
       <file>index-eric6.QScintilla.MarkupProviders.html</file>
--- a/eric6/Documentation/Source/eric6.E5XML.Config.html	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Documentation/Source/eric6.E5XML.Config.html	Fri Jan 22 16:48:43 2021 +0100
@@ -28,7 +28,7 @@
 <h3>Global Attributes</h3>
 
 <table>
-<tr><td>debuggerPropertiesFileFormatVersion</td></tr><tr><td>dictionariesListFileFormatVersion</td></tr><tr><td>highlightingStylesFileFormatVersion</td></tr><tr><td>multiProjectFileFormatVersion</td></tr><tr><td>pluginRepositoryFileFormatVersion</td></tr><tr><td>projectFileFormatVersion</td></tr><tr><td>projectFileFormatVersionAlt</td></tr><tr><td>projectFileFormatVersionIdl</td></tr><tr><td>projectFileFormatVersionMake</td></tr><tr><td>projectFileFormatVersionProto</td></tr><tr><td>projectFileFormatVersionUic</td></tr><tr><td>sessionFileFormatVersion</td></tr><tr><td>shortcutsFileFormatVersion</td></tr><tr><td>tasksFileFormatVersion</td></tr><tr><td>templatesFileFormatVersion</td></tr><tr><td>userProjectFileFormatVersion</td></tr>
+<tr><td>debuggerPropertiesFileFormatVersion</td></tr><tr><td>dictionariesListFileFormatVersion</td></tr><tr><td>highlightingStylesFileFormatVersion</td></tr><tr><td>multiProjectFileFormatVersion</td></tr><tr><td>pluginRepositoryFileFormatVersion</td></tr><tr><td>projectFileFormatVersion</td></tr><tr><td>projectFileFormatVersionAlt</td></tr><tr><td>projectFileFormatVersionIdl</td></tr><tr><td>projectFileFormatVersionMake</td></tr><tr><td>projectFileFormatVersionProto</td></tr><tr><td>projectFileFormatVersionRcc</td></tr><tr><td>projectFileFormatVersionUic</td></tr><tr><td>sessionFileFormatVersion</td></tr><tr><td>shortcutsFileFormatVersion</td></tr><tr><td>tasksFileFormatVersion</td></tr><tr><td>templatesFileFormatVersion</td></tr><tr><td>userProjectFileFormatVersion</td></tr>
 </table>
 <h3>Classes</h3>
 
--- a/eric6/Documentation/Source/eric6.Project.Project.html	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Documentation/Source/eric6.Project.Project.html	Fri Jan 22 16:48:43 2021 +0100
@@ -677,6 +677,10 @@
 <td>Public method to get the default extension for the project's programming language.</td>
 </tr>
 <tr>
+<td><a href="#Project.getDocstringType">getDocstringType</a></td>
+<td>Public method to get the configured docstring style.</td>
+</tr>
+<tr>
 <td><a href="#Project.getEditorLexerAssoc">getEditorLexerAssoc</a></td>
 <td>Public method to retrieve a lexer association.</td>
 </tr>
@@ -813,6 +817,10 @@
 <td>Public slot used to handle the preferencesChanged signal.</td>
 </tr>
 <tr>
+<td><a href="#Project.hasDefaultDocstringParameter">hasDefaultDocstringParameter</a></td>
+<td>Public method to test, if the project contains the default docstring parameter.</td>
+</tr>
+<tr>
 <td><a href="#Project.hasDefaultIdlCompilerParameters">hasDefaultIdlCompilerParameters</a></td>
 <td>Public method to test, if the project contains the default IDL compiler parameters.</td>
 </tr>
@@ -2404,6 +2412,25 @@
 default extension (including the dot) (string)
 </dd>
 </dl>
+<a NAME="Project.getDocstringType" ID="Project.getDocstringType"></a>
+<h4>Project.getDocstringType</h4>
+<b>getDocstringType</b>(<i></i>)
+
+<p>
+        Public method to get the configured docstring style.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+configured docstring style
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="Project.getEditorLexerAssoc" ID="Project.getEditorLexerAssoc"></a>
 <h4>Project.getEditorLexerAssoc</h4>
 <b>getEditorLexerAssoc</b>(<i>filename</i>)
@@ -2980,6 +3007,26 @@
 <p>
         Public slot used to handle the preferencesChanged signal.
 </p>
+<a NAME="Project.hasDefaultDocstringParameter" ID="Project.hasDefaultDocstringParameter"></a>
+<h4>Project.hasDefaultDocstringParameter</h4>
+<b>hasDefaultDocstringParameter</b>(<i></i>)
+
+<p>
+        Public method to test, if the project contains the default docstring
+        parameter.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating default parameter
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
 <a NAME="Project.hasDefaultIdlCompilerParameters" ID="Project.hasDefaultIdlCompilerParameters"></a>
 <h4>Project.hasDefaultIdlCompilerParameters</h4>
 <b>hasDefaultIdlCompilerParameters</b>(<i></i>)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,435 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator</h1>
+
+<p>
+Module implementing a docstring generator base class.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#BaseDocstringGenerator">BaseDocstringGenerator</a></td>
+<td>Class implementing a docstring generator base class.</td>
+</tr>
+<tr>
+<td><a href="#DocstringMenuForEnterOnly">DocstringMenuForEnterOnly</a></td>
+<td>Class implementing a special menu reacting to the enter/return keys only.</td>
+</tr>
+<tr>
+<td><a href="#FunctionInfo">FunctionInfo</a></td>
+<td>Class implementing an object to store function information.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#getIndentStr">getIndentStr</a></td>
+<td>Function to get the indentation of a text.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="BaseDocstringGenerator" ID="BaseDocstringGenerator"></a>
+<h2>BaseDocstringGenerator</h2>
+
+<p>
+    Class implementing a docstring generator base class.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#BaseDocstringGenerator.__init__">BaseDocstringGenerator</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#BaseDocstringGenerator._generateDocstringList">_generateDocstringList</a></td>
+<td>Protected method to generate type specific docstrings based on the extracted function information.</td>
+</tr>
+<tr>
+<td><a href="#BaseDocstringGenerator.getDocstringType">getDocstringType</a></td>
+<td>Public method to determine the docstring type to be generated.</td>
+</tr>
+<tr>
+<td><a href="#BaseDocstringGenerator.hasFunctionDefinition">hasFunctionDefinition</a></td>
+<td>Public method to test, if the cursor is right below a function definition.</td>
+</tr>
+<tr>
+<td><a href="#BaseDocstringGenerator.insertDocstring">insertDocstring</a></td>
+<td>Public method to insert a docstring for the function at the cursor position.</td>
+</tr>
+<tr>
+<td><a href="#BaseDocstringGenerator.isDocstringIntro">isDocstringIntro</a></td>
+<td>Public function to test, if the line up to the cursor position might be introducing a docstring.</td>
+</tr>
+<tr>
+<td><a href="#BaseDocstringGenerator.isFunctionStart">isFunctionStart</a></td>
+<td>Public method to test, if a text is the start of a function or method definition.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="BaseDocstringGenerator.__init__" ID="BaseDocstringGenerator.__init__"></a>
+<h4>BaseDocstringGenerator (Constructor)</h4>
+<b>BaseDocstringGenerator</b>(<i>editor</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+reference to the editor widget
+</dd>
+</dl>
+<a NAME="BaseDocstringGenerator._generateDocstringList" ID="BaseDocstringGenerator._generateDocstringList"></a>
+<h4>BaseDocstringGenerator._generateDocstringList</h4>
+<b>_generateDocstringList</b>(<i>functionInfo, docstringType</i>)
+
+<p>
+        Protected method to generate type specific docstrings based on the
+        extracted function information.
+</p>
+<dl>
+
+<dt><i>functionInfo</i> (FunctionInfo)</dt>
+<dd>
+reference to the function info object
+</dd>
+<dt><i>docstringType</i></dt>
+<dd>
+kind of docstring to be generated
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of docstring lines
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="BaseDocstringGenerator.getDocstringType" ID="BaseDocstringGenerator.getDocstringType"></a>
+<h4>BaseDocstringGenerator.getDocstringType</h4>
+<b>getDocstringType</b>(<i></i>)
+
+<p>
+        Public method to determine the docstring type to be generated.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+docstring type (one of 'ericdoc', 'numpydoc', 'googledoc',
+            'sphinxdoc')
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="BaseDocstringGenerator.hasFunctionDefinition" ID="BaseDocstringGenerator.hasFunctionDefinition"></a>
+<h4>BaseDocstringGenerator.hasFunctionDefinition</h4>
+<b>hasFunctionDefinition</b>(<i>cursorPosition</i>)
+
+<p>
+        Public method to test, if the cursor is right below a function
+        definition.
+</p>
+<dl>
+
+<dt><i>cursorPosition</i> (tuple of (int, int))</dt>
+<dd>
+current cursor position (line and column)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating cursor is right below a function definition
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="BaseDocstringGenerator.insertDocstring" ID="BaseDocstringGenerator.insertDocstring"></a>
+<h4>BaseDocstringGenerator.insertDocstring</h4>
+<b>insertDocstring</b>(<i>cursorPosition, fromStart=True</i>)
+
+<p>
+        Public method to insert a docstring for the function at the cursor
+        position.
+</p>
+<dl>
+
+<dt><i>cursorPosition</i> (tuple of (int, int))</dt>
+<dd>
+position of the cursor (line and index)
+</dd>
+<dt><i>fromStart</i> (bool)</dt>
+<dd>
+flag indicating that the editor text cursor is placed
+            on the line starting the function definition
+</dd>
+</dl>
+<a NAME="BaseDocstringGenerator.isDocstringIntro" ID="BaseDocstringGenerator.isDocstringIntro"></a>
+<h4>BaseDocstringGenerator.isDocstringIntro</h4>
+<b>isDocstringIntro</b>(<i>cursorPosition</i>)
+
+<p>
+        Public function to test, if the line up to the cursor position might be
+        introducing a docstring.
+</p>
+<dl>
+
+<dt><i>cursorPosition</i> (tuple of (int, int))</dt>
+<dd>
+current cursor position (line and column)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a potential start of a docstring
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="BaseDocstringGenerator.isFunctionStart" ID="BaseDocstringGenerator.isFunctionStart"></a>
+<h4>BaseDocstringGenerator.isFunctionStart</h4>
+<b>isFunctionStart</b>(<i>text</i>)
+
+<p>
+        Public method to test, if a text is the start of a function or method
+        definition.
+</p>
+<dl>
+
+<dt><i>text</i> (str)</dt>
+<dd>
+line of text to be tested
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the given text starts a function or
+            method definition (always False)
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="DocstringMenuForEnterOnly" ID="DocstringMenuForEnterOnly"></a>
+<h2>DocstringMenuForEnterOnly</h2>
+
+<p>
+    Class implementing a special menu reacting to the enter/return keys only.
+</p>
+<p>
+    If a keyboard input is not the "enter key", the menu is closed and the
+    input is inserted to the code editor.
+</p>
+<h3>Derived from</h3>
+QMenu
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#DocstringMenuForEnterOnly.__init__">DocstringMenuForEnterOnly</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#DocstringMenuForEnterOnly.keyPressEvent">keyPressEvent</a></td>
+<td>Protected method to handle key press events.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="DocstringMenuForEnterOnly.__init__" ID="DocstringMenuForEnterOnly.__init__"></a>
+<h4>DocstringMenuForEnterOnly (Constructor)</h4>
+<b>DocstringMenuForEnterOnly</b>(<i>editor</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+reference to the editor
+</dd>
+</dl>
+<a NAME="DocstringMenuForEnterOnly.keyPressEvent" ID="DocstringMenuForEnterOnly.keyPressEvent"></a>
+<h4>DocstringMenuForEnterOnly.keyPressEvent</h4>
+<b>keyPressEvent</b>(<i>evt</i>)
+
+<p>
+        Protected method to handle key press events.
+</p>
+<dl>
+
+<dt><i>evt</i> (QKeyEvent)</dt>
+<dd>
+reference to the key press event object
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="FunctionInfo" ID="FunctionInfo"></a>
+<h2>FunctionInfo</h2>
+
+<p>
+    Class implementing an object to store function information.
+</p>
+<p>
+    Methods to extract the relevant information need to be implemented in
+    language specific subclasses.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#FunctionInfo.__init__">FunctionInfo</a></td>
+<td>Constructor</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="FunctionInfo.__init__" ID="FunctionInfo.__init__"></a>
+<h4>FunctionInfo (Constructor)</h4>
+<b>FunctionInfo</b>(<i></i>)
+
+<p>
+        Constructor
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="getIndentStr" ID="getIndentStr"></a>
+<h2>getIndentStr</h2>
+<b>getIndentStr</b>(<i>text</i>)
+
+<p>
+    Function to get the indentation of a text.
+</p>
+<dl>
+
+<dt><i>text</i> (str)</dt>
+<dd>
+text to extract indentation from
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+indentation string
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.EricdocGenerator.html	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.QScintilla.DocstringGenerator.EricdocGenerator</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric6.QScintilla.DocstringGenerator.EricdocGenerator</h1>
+
+<p>
+Module implementing the docstring generator for the 'ericdoc' style.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#generateEricDoc">generateEricDoc</a></td>
+<td>Function to generate the docstring line list iaw.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="generateEricDoc" ID="generateEricDoc"></a>
+<h2>generateEricDoc</h2>
+<b>generateEricDoc</b>(<i>functionInfo</i>)
+
+<p>
+    Function to generate the docstring line list iaw. eric documentation style.
+</p>
+<p>
+    Note: Partial English text is created with DESCRIPTION placeholders
+    for descriptions and TYPE placeholders for type information
+</p>
+<dl>
+
+<dt><i>functionInfo</i> (FunctionInfo)</dt>
+<dd>
+object containing the function information to base
+        the docstring on
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of docstring lines
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.GoogledocGenerator.html	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.QScintilla.DocstringGenerator.GoogledocGenerator</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric6.QScintilla.DocstringGenerator.GoogledocGenerator</h1>
+
+<p>
+Module implementing the docstring generator for the 'sphinxdoc' style.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#generateGoogleDoc">generateGoogleDoc</a></td>
+<td>Function to generate the docstring line list iaw.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="generateGoogleDoc" ID="generateGoogleDoc"></a>
+<h2>generateGoogleDoc</h2>
+<b>generateGoogleDoc</b>(<i>functionInfo, editor</i>)
+
+<p>
+    Function to generate the docstring line list iaw. Sphinx documentation
+    style.
+</p>
+<p>
+    Note: Text is created with DESCRIPTION placeholders for descriptions and
+    TYPE placeholders for type information
+</p>
+<dl>
+
+<dt><i>functionInfo</i> (FunctionInfo)</dt>
+<dd>
+object containing the function information to base
+        the docstring on
+</dd>
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+reference to the editor
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of docstring lines
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.NumpydocGenerator.html	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.QScintilla.DocstringGenerator.NumpydocGenerator</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric6.QScintilla.DocstringGenerator.NumpydocGenerator</h1>
+
+<p>
+Module implementing the docstring generator for the 'numpydoc' style.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#generateNumpyDoc">generateNumpyDoc</a></td>
+<td>Function to generate the docstring line list iaw.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="generateNumpyDoc" ID="generateNumpyDoc"></a>
+<h2>generateNumpyDoc</h2>
+<b>generateNumpyDoc</b>(<i>functionInfo, editor</i>)
+
+<p>
+    Function to generate the docstring line list iaw. NumPy documentation
+    style.
+</p>
+<p>
+    Note: Text is created with DESCRIPTION placeholders for descriptions and
+    TYPE placeholders for type information
+</p>
+<dl>
+
+<dt><i>functionInfo</i> (FunctionInfo)</dt>
+<dd>
+object containing the function information to base
+        the docstring on
+</dd>
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+reference to the editor
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of docstring lines
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,740 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.QScintilla.DocstringGenerator.PyDocstringGenerator</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric6.QScintilla.DocstringGenerator.PyDocstringGenerator</h1>
+
+<p>
+Module implementing a docstring generator for Python.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#PyDocstringGenerator">PyDocstringGenerator</a></td>
+<td>Class implementing a docstring generator for Python.</td>
+</tr>
+<tr>
+<td><a href="#PyFunctionInfo">PyFunctionInfo</a></td>
+<td>Class implementing an object to extract and store function information.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="PyDocstringGenerator" ID="PyDocstringGenerator"></a>
+<h2>PyDocstringGenerator</h2>
+
+<p>
+    Class implementing a docstring generator for Python.
+</p>
+<h3>Derived from</h3>
+BaseDocstringGenerator
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#PyDocstringGenerator.__init__">PyDocstringGenerator</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.__generateDocstring">__generateDocstring</a></td>
+<td>Private method to generate the list of docstring lines.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.__generateDocstringFromBelow">__generateDocstringFromBelow</a></td>
+<td>Private method to generate a docstring when the gicen position is on the line below the end of the definition.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.__generateDocstringFromStart">__generateDocstringFromStart</a></td>
+<td>Private method to generate a docstring based on the cursor being placed on the first line of the definition.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.__getFunctionBody">__getFunctionBody</a></td>
+<td>Private method to get the function body.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.__getFunctionDefinitionFromBelow">__getFunctionDefinitionFromBelow</a></td>
+<td>Private method to extract the function definition based on the cursor being placed on the first line after the definition.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.__getFunctionDefinitionFromStart">__getFunctionDefinitionFromStart</a></td>
+<td>Private method to extract the function definition based on the cursor being placed on the first line of the definition.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.__getIndentationInsertString">__getIndentationInsertString</a></td>
+<td>Private method to create the indentation string for the docstring.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.__isTripleQuotesStart">__isTripleQuotesStart</a></td>
+<td>Private method to test, if the given text is the start of a triple quoted string.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.hasFunctionDefinition">hasFunctionDefinition</a></td>
+<td>Public method to test, if the cursor is right below a function definition.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.insertDocstring">insertDocstring</a></td>
+<td>Public method to insert a docstring for the function at the cursor position.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.isDocstringIntro">isDocstringIntro</a></td>
+<td>Public function to test, if the line up to the cursor position might be introducing a docstring.</td>
+</tr>
+<tr>
+<td><a href="#PyDocstringGenerator.isFunctionStart">isFunctionStart</a></td>
+<td>Public method to test, if a text is the start of a function or method definition.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="PyDocstringGenerator.__init__" ID="PyDocstringGenerator.__init__"></a>
+<h4>PyDocstringGenerator (Constructor)</h4>
+<b>PyDocstringGenerator</b>(<i>editor</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+reference to the editor widget
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.__generateDocstring" ID="PyDocstringGenerator.__generateDocstring"></a>
+<h4>PyDocstringGenerator.__generateDocstring</h4>
+<b>__generateDocstring</b>(<i>quote, functionDef, bodyStartLine</i>)
+
+<p>
+        Private method to generate the list of docstring lines.
+</p>
+<dl>
+
+<dt><i>quote</i> (str)</dt>
+<dd>
+quote string
+</dd>
+<dt><i>functionDef</i> (str)</dt>
+<dd>
+text containing the function definition
+</dd>
+<dt><i>bodyStartLine</i> (int)</dt>
+<dd>
+starting line of the function body
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of docstring lines
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.__generateDocstringFromBelow" ID="PyDocstringGenerator.__generateDocstringFromBelow"></a>
+<h4>PyDocstringGenerator.__generateDocstringFromBelow</h4>
+<b>__generateDocstringFromBelow</b>(<i>cursorPosition</i>)
+
+<p>
+        Private method to generate a docstring when the gicen position is on
+        the line below the end of the definition.
+</p>
+<dl>
+
+<dt><i>cursorPosition</i> (tuple of (int, int))</dt>
+<dd>
+position of the cursor (line and index)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing the docstring and a tuple containing the
+            insertion line and index
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (str, tuple(int, int))
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.__generateDocstringFromStart" ID="PyDocstringGenerator.__generateDocstringFromStart"></a>
+<h4>PyDocstringGenerator.__generateDocstringFromStart</h4>
+<b>__generateDocstringFromStart</b>(<i></i>)
+
+<p>
+        Private method to generate a docstring based on the cursor being
+        placed on the first line of the definition.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing the docstring and a tuple containing the
+            insertion line and index
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (str, tuple(int, int))
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.__getFunctionBody" ID="PyDocstringGenerator.__getFunctionBody"></a>
+<h4>PyDocstringGenerator.__getFunctionBody</h4>
+<b>__getFunctionBody</b>(<i>functionIndent, startLine</i>)
+
+<p>
+        Private method to get the function body.
+</p>
+<dl>
+
+<dt><i>functionIndent</i> (str)</dt>
+<dd>
+indentation string of the function definition
+</dd>
+<dt><i>startLine</i> (int)</dt>
+<dd>
+starting line for the extraction process
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+text containing the function body
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.__getFunctionDefinitionFromBelow" ID="PyDocstringGenerator.__getFunctionDefinitionFromBelow"></a>
+<h4>PyDocstringGenerator.__getFunctionDefinitionFromBelow</h4>
+<b>__getFunctionDefinitionFromBelow</b>(<i>cursorPosition</i>)
+
+<p>
+        Private method to extract the function definition based on the cursor
+        being placed on the first line after the definition.
+</p>
+<dl>
+
+<dt><i>cursorPosition</i> (tuple of (int, int))</dt>
+<dd>
+current cursor position (line and column)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+text containing the function definition
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.__getFunctionDefinitionFromStart" ID="PyDocstringGenerator.__getFunctionDefinitionFromStart"></a>
+<h4>PyDocstringGenerator.__getFunctionDefinitionFromStart</h4>
+<b>__getFunctionDefinitionFromStart</b>(<i></i>)
+
+<p>
+        Private method to extract the function definition based on the cursor
+        being placed on the first line of the definition.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+text containing the function definition
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.__getIndentationInsertString" ID="PyDocstringGenerator.__getIndentationInsertString"></a>
+<h4>PyDocstringGenerator.__getIndentationInsertString</h4>
+<b>__getIndentationInsertString</b>(<i>text</i>)
+
+<p>
+        Private method to create the indentation string for the docstring.
+</p>
+<dl>
+
+<dt><i>text</i> (str)</dt>
+<dd>
+text to based the indentation on
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+indentation string for docstring
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.__isTripleQuotesStart" ID="PyDocstringGenerator.__isTripleQuotesStart"></a>
+<h4>PyDocstringGenerator.__isTripleQuotesStart</h4>
+<b>__isTripleQuotesStart</b>(<i>text</i>)
+
+<p>
+        Private method to test, if the given text is the start of a triple
+        quoted string.
+</p>
+<dl>
+
+<dt><i>text</i> (str)</dt>
+<dd>
+text to be inspected
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a triple quote start
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.hasFunctionDefinition" ID="PyDocstringGenerator.hasFunctionDefinition"></a>
+<h4>PyDocstringGenerator.hasFunctionDefinition</h4>
+<b>hasFunctionDefinition</b>(<i>cursorPosition</i>)
+
+<p>
+        Public method to test, if the cursor is right below a function
+        definition.
+</p>
+<dl>
+
+<dt><i>cursorPosition</i> (tuple of (int, int))</dt>
+<dd>
+current cursor position (line and column)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating cursor is right below a function definition
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.insertDocstring" ID="PyDocstringGenerator.insertDocstring"></a>
+<h4>PyDocstringGenerator.insertDocstring</h4>
+<b>insertDocstring</b>(<i>cursorPosition, fromStart=True</i>)
+
+<p>
+        Public method to insert a docstring for the function at the cursor
+        position.
+</p>
+<dl>
+
+<dt><i>cursorPosition</i> (tuple of (int, int))</dt>
+<dd>
+position of the cursor (line and index)
+</dd>
+<dt><i>fromStart</i> (bool)</dt>
+<dd>
+flag indicating that the editor text cursor is placed
+            on the line starting the function definition
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.isDocstringIntro" ID="PyDocstringGenerator.isDocstringIntro"></a>
+<h4>PyDocstringGenerator.isDocstringIntro</h4>
+<b>isDocstringIntro</b>(<i>cursorPosition</i>)
+
+<p>
+        Public function to test, if the line up to the cursor position might be
+        introducing a docstring.
+</p>
+<dl>
+
+<dt><i>cursorPosition</i> (tuple of (int, int))</dt>
+<dd>
+current cursor position (line and column)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a potential start of a docstring
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="PyDocstringGenerator.isFunctionStart" ID="PyDocstringGenerator.isFunctionStart"></a>
+<h4>PyDocstringGenerator.isFunctionStart</h4>
+<b>isFunctionStart</b>(<i>text</i>)
+
+<p>
+        Public method to test, if a text is the start of a function or method
+        definition.
+</p>
+<dl>
+
+<dt><i>text</i> (str)</dt>
+<dd>
+line of text to be tested
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the given text starts a function or
+            method definition
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="PyFunctionInfo" ID="PyFunctionInfo"></a>
+<h2>PyFunctionInfo</h2>
+
+<p>
+    Class implementing an object to extract and store function information.
+</p>
+<h3>Derived from</h3>
+FunctionInfo
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#PyFunctionInfo.__init__">PyFunctionInfo</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#PyFunctionInfo.__findBracketPosition">__findBracketPosition</a></td>
+<td>Private method to find the start and end position of pairs of brackets.</td>
+</tr>
+<tr>
+<td><a href="#PyFunctionInfo.__findQuotePosition">__findQuotePosition</a></td>
+<td>Private method to find the start and end position of pairs of quotes.</td>
+</tr>
+<tr>
+<td><a href="#PyFunctionInfo.__isCharInPairs">__isCharInPairs</a></td>
+<td>Private method to test, if the given character position is between pairs of brackets or quotes.</td>
+</tr>
+<tr>
+<td><a href="#PyFunctionInfo.__splitArgumentToNameTypeValue">__splitArgumentToNameTypeValue</a></td>
+<td>Private method to split some argument text to name, type and value.</td>
+</tr>
+<tr>
+<td><a href="#PyFunctionInfo.__splitArgumentsTextToList">__splitArgumentsTextToList</a></td>
+<td>Private method to split the given arguments text into a list of arguments.</td>
+</tr>
+<tr>
+<td><a href="#PyFunctionInfo.parseBody">parseBody</a></td>
+<td>Public method to parse the function body text.</td>
+</tr>
+<tr>
+<td><a href="#PyFunctionInfo.parseDefinition">parseDefinition</a></td>
+<td>Public method to parse the function definition text.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="PyFunctionInfo.__init__" ID="PyFunctionInfo.__init__"></a>
+<h4>PyFunctionInfo (Constructor)</h4>
+<b>PyFunctionInfo</b>(<i></i>)
+
+<p>
+        Constructor
+</p>
+<a NAME="PyFunctionInfo.__findBracketPosition" ID="PyFunctionInfo.__findBracketPosition"></a>
+<h4>PyFunctionInfo.__findBracketPosition</h4>
+<b>__findBracketPosition</b>(<i>text, bracketLeft, bracketRight, posQuote</i>)
+
+<p>
+        Private method to find the start and end position of pairs of brackets.
+</p>
+<p>
+        https://stackoverflow.com/questions/29991917/
+        indices-of-matching-parentheses-in-python
+</p>
+<dl>
+
+<dt><i>text</i> (str)</dt>
+<dd>
+text to be parsed
+</dd>
+<dt><i>bracketLeft</i> (str)</dt>
+<dd>
+character of the left bracket
+</dd>
+<dt><i>bracketRight</i> (str)</dt>
+<dd>
+character of the right bracket
+</dd>
+<dt><i>posQuote</i> (list of tuple of (int, int))</dt>
+<dd>
+list of tuple with start and end position of pairs
+            of quotes
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of tuple with start and end position of pairs of brackets
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of tuple of (int, int)
+</dd>
+</dl>
+<dl>
+
+<dt>Raises <b>IndexError</b>:</dt>
+<dd>
+raised when a closing or opening bracket is
+            missing
+</dd>
+</dl>
+<a NAME="PyFunctionInfo.__findQuotePosition" ID="PyFunctionInfo.__findQuotePosition"></a>
+<h4>PyFunctionInfo.__findQuotePosition</h4>
+<b>__findQuotePosition</b>(<i>text</i>)
+
+<p>
+        Private method to find the start and end position of pairs of quotes.
+</p>
+<dl>
+
+<dt><i>text</i> (str)</dt>
+<dd>
+text to be parsed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of tuple with start and end position of pairs of quotes
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of tuple of (int, int)
+</dd>
+</dl>
+<dl>
+
+<dt>Raises <b>IndexError</b>:</dt>
+<dd>
+raised when a matching close quote is missing
+</dd>
+</dl>
+<a NAME="PyFunctionInfo.__isCharInPairs" ID="PyFunctionInfo.__isCharInPairs"></a>
+<h4>PyFunctionInfo.__isCharInPairs</h4>
+<b>__isCharInPairs</b>(<i>posChar, pairs</i>)
+
+<p>
+        Private method to test, if the given character position is between
+        pairs of brackets or quotes.
+</p>
+<dl>
+
+<dt><i>posChar</i> (int)</dt>
+<dd>
+character position to be tested
+</dd>
+<dt><i>pairs</i> (list of tuple of (int, int))</dt>
+<dd>
+list containing pairs of positions
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the position is in between
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="PyFunctionInfo.__splitArgumentToNameTypeValue" ID="PyFunctionInfo.__splitArgumentToNameTypeValue"></a>
+<h4>PyFunctionInfo.__splitArgumentToNameTypeValue</h4>
+<b>__splitArgumentToNameTypeValue</b>(<i>argumentsList, quote, quoteReplace</i>)
+
+<p>
+        Private method to split some argument text to name, type and value.
+</p>
+<dl>
+
+<dt><i>argumentsList</i> (list of str)</dt>
+<dd>
+list of function argument definitions
+</dd>
+<dt><i>quote</i> (str)</dt>
+<dd>
+quote string to be replaced
+</dd>
+<dt><i>quoteReplace</i> (str)</dt>
+<dd>
+quote string to replace the original
+</dd>
+</dl>
+<a NAME="PyFunctionInfo.__splitArgumentsTextToList" ID="PyFunctionInfo.__splitArgumentsTextToList"></a>
+<h4>PyFunctionInfo.__splitArgumentsTextToList</h4>
+<b>__splitArgumentsTextToList</b>(<i>argumentsText</i>)
+
+<p>
+        Private method to split the given arguments text into a list of
+        arguments.
+</p>
+<p>
+        This function uses a comma to separate arguments and ignores a comma in
+        brackets and quotes.
+</p>
+<dl>
+
+<dt><i>argumentsText</i> (str)</dt>
+<dd>
+text containing the list of arguments
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of individual argument texts
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<a NAME="PyFunctionInfo.parseBody" ID="PyFunctionInfo.parseBody"></a>
+<h4>PyFunctionInfo.parseBody</h4>
+<b>parseBody</b>(<i>text</i>)
+
+<p>
+        Public method to parse the function body text.
+</p>
+<dl>
+
+<dt><i>text</i> (str)</dt>
+<dd>
+function body text
+</dd>
+</dl>
+<a NAME="PyFunctionInfo.parseDefinition" ID="PyFunctionInfo.parseDefinition"></a>
+<h4>PyFunctionInfo.parseDefinition</h4>
+<b>parseDefinition</b>(<i>text, quote, quoteReplace</i>)
+
+<p>
+        Public method to parse the function definition text.
+</p>
+<dl>
+
+<dt><i>text</i> (str)</dt>
+<dd>
+text containing the function definition
+</dd>
+<dt><i>quote</i> (str)</dt>
+<dd>
+quote string to be replaced
+</dd>
+<dt><i>quoteReplace</i> (str)</dt>
+<dd>
+quote string to replace the original
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.SphinxdocGenerator.html	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.QScintilla.DocstringGenerator.SphinxdocGenerator</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric6.QScintilla.DocstringGenerator.SphinxdocGenerator</h1>
+
+<p>
+Module implementing the docstring generator for the 'sphinxdoc' style.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#generateSphinxDoc">generateSphinxDoc</a></td>
+<td>Function to generate the docstring line list iaw.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="generateSphinxDoc" ID="generateSphinxDoc"></a>
+<h2>generateSphinxDoc</h2>
+<b>generateSphinxDoc</b>(<i>functionInfo</i>)
+
+<p>
+    Function to generate the docstring line list iaw. Sphinx documentation
+    style.
+</p>
+<p>
+    Note: Text is created with DESCRIPTION placeholders for descriptions and
+    TYPE placeholders for type information
+</p>
+<dl>
+
+<dt><i>functionInfo</i> (FunctionInfo)</dt>
+<dd>
+object containing the function information to base
+        the docstring on
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of docstring lines
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/eric6.QScintilla.DocstringGenerator.__init__.html	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.QScintilla.DocstringGenerator.__init__</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric6.QScintilla.DocstringGenerator.__init__</h1>
+
+<p>
+Package containing the documentation string generator tool.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#getDocstringGenerator">getDocstringGenerator</a></td>
+<td>Function to get a docstring generator for the given editor.</td>
+</tr>
+<tr>
+<td><a href="#getSupportedDocstringTypes">getSupportedDocstringTypes</a></td>
+<td>Function to get the supported docstring types/styles.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="getDocstringGenerator" ID="getDocstringGenerator"></a>
+<h2>getDocstringGenerator</h2>
+<b>getDocstringGenerator</b>(<i>editor</i>)
+
+<p>
+    Function to get a docstring generator for the given editor.
+</p>
+<dl>
+
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+reference to the editor to create a docstring generator for
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the created docstring generator
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+BaseDocstringGenerator
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="getSupportedDocstringTypes" ID="getSupportedDocstringTypes"></a>
+<h2>getSupportedDocstringTypes</h2>
+<b>getSupportedDocstringTypes</b>(<i></i>)
+
+<p>
+    Function to get the supported docstring types/styles.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of tuples with supported docstring type/style and the
+        corresponding display string
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (str, str)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/eric6.QScintilla.Editor.html	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Documentation/Source/eric6.QScintilla.Editor.html	Fri Jan 22 16:48:43 2021 +0100
@@ -369,6 +369,10 @@
 <td>Private slot to handle the cursorPositionChanged signal.</td>
 </tr>
 <tr>
+<td><a href="#Editor.__delayedDocstringMenuPopup">__delayedDocstringMenuPopup</a></td>
+<td>Private method to test, if the user might want to insert a docstring.</td>
+</tr>
+<tr>
 <td><a href="#Editor.__deleteAllChangeMarkers">__deleteAllChangeMarkers</a></td>
 <td>Private slot to delete all change markers.</td>
 </tr>
@@ -517,6 +521,10 @@
 <td>Private slot to initialize the online syntax check.</td>
 </tr>
 <tr>
+<td><a href="#Editor.__insertDocstring">__insertDocstring</a></td>
+<td>Private slot to generate and insert a docstring for the function under the cursor.</td>
+</tr>
+<tr>
 <td><a href="#Editor.__isCommentedLine">__isCommentedLine</a></td>
 <td>Private method to check, if the given line is a comment line as produced by the configured comment rules.</td>
 </tr>
@@ -605,6 +613,10 @@
 <td>Private slot to mark added and changed lines.</td>
 </tr>
 <tr>
+<td><a href="#Editor.__popupDocstringMenu">__popupDocstringMenu</a></td>
+<td>Private slot to pop up a menu asking the user, if a docstring should be inserted.</td>
+</tr>
+<tr>
 <td><a href="#Editor.__printPreview">__printPreview</a></td>
 <td>Private slot to generate a print preview.</td>
 </tr>
@@ -1161,6 +1173,10 @@
 <td>Public method to get the word boundaries at the current position.</td>
 </tr>
 <tr>
+<td><a href="#Editor.getDocstringGenerator">getDocstringGenerator</a></td>
+<td>Public method to get a reference to the docstring generator.</td>
+</tr>
+<tr>
 <td><a href="#Editor.getEditorConfig">getEditorConfig</a></td>
 <td>Public method to get the requested option via EditorConfig.</td>
 </tr>
@@ -2287,6 +2303,20 @@
 position in line of the cursor
 </dd>
 </dl>
+<a NAME="Editor.__delayedDocstringMenuPopup" ID="Editor.__delayedDocstringMenuPopup"></a>
+<h4>Editor.__delayedDocstringMenuPopup</h4>
+<b>__delayedDocstringMenuPopup</b>(<i>cursorPosition</i>)
+
+<p>
+        Private method to test, if the user might want to insert a docstring.
+</p>
+<dl>
+
+<dt><i>cursorPosition</i> (tuple of (int, int))</dt>
+<dd>
+current cursor position (line and column)
+</dd>
+</dl>
 <a NAME="Editor.__deleteAllChangeMarkers" ID="Editor.__deleteAllChangeMarkers"></a>
 <h4>Editor.__deleteAllChangeMarkers</h4>
 <b>__deleteAllChangeMarkers</b>(<i></i>)
@@ -2811,6 +2841,14 @@
 <p>
         Private slot to initialize the online syntax check.
 </p>
+<a NAME="Editor.__insertDocstring" ID="Editor.__insertDocstring"></a>
+<h4>Editor.__insertDocstring</h4>
+<b>__insertDocstring</b>(<i></i>)
+
+<p>
+        Private slot to generate and insert a docstring for the function under
+        the cursor.
+</p>
 <a NAME="Editor.__isCommentedLine" ID="Editor.__isCommentedLine"></a>
 <h4>Editor.__isCommentedLine</h4>
 <b>__isCommentedLine</b>(<i>line, commentStr</i>)
@@ -3142,6 +3180,26 @@
 <p>
         Private slot to mark added and changed lines.
 </p>
+<a NAME="Editor.__popupDocstringMenu" ID="Editor.__popupDocstringMenu"></a>
+<h4>Editor.__popupDocstringMenu</h4>
+<b>__popupDocstringMenu</b>(<i>lastLineText, lastCursorPosition</i>)
+
+<p>
+        Private slot to pop up a menu asking the user, if a docstring should be
+        inserted.
+</p>
+<dl>
+
+<dt><i>lastLineText</i> (str)</dt>
+<dd>
+line contents when the delay timer was started
+</dd>
+<dt><i>lastCursorPosition</i> (tuple of (int, int))</dt>
+<dd>
+position of the cursor when the delay timer
+            was started (line and index)
+</dd>
+</dl>
 <a NAME="Editor.__printPreview" ID="Editor.__printPreview"></a>
 <h4>Editor.__printPreview</h4>
 <b>__printPreview</b>(<i>printer</i>)
@@ -4806,6 +4864,25 @@
             (integer, integer)
 </dd>
 </dl>
+<a NAME="Editor.getDocstringGenerator" ID="Editor.getDocstringGenerator"></a>
+<h4>Editor.getDocstringGenerator</h4>
+<b>getDocstringGenerator</b>(<i></i>)
+
+<p>
+        Public method to get a reference to the docstring generator.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the docstring generator
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+BaseDocstringGenerator
+</dd>
+</dl>
 <a NAME="Editor.getEditorConfig" ID="Editor.getEditorConfig"></a>
 <h4>Editor.getEditorConfig</h4>
 <b>getEditorConfig</b>(<i>option</i>)
--- a/eric6/Documentation/Source/eric6.QScintilla.QsciScintillaCompat.html	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Documentation/Source/eric6.QScintilla.QsciScintillaCompat.html	Fri Jan 22 16:48:43 2021 +0100
@@ -290,6 +290,10 @@
 <td>Public method to get the recently found target.</td>
 </tr>
 <tr>
+<td><a href="#QsciScintillaCompat.getGlobalCursorPosition">getGlobalCursorPosition</a></td>
+<td>Public method to determine the point of the cursor.</td>
+</tr>
+<tr>
 <td><a href="#QsciScintillaCompat.getIndicatorEndPos">getIndicatorEndPos</a></td>
 <td>Public method to get the end position of an indicator at a position.</td>
 </tr>
@@ -1319,6 +1323,25 @@
             (integer, integer)
 </dd>
 </dl>
+<a NAME="QsciScintillaCompat.getGlobalCursorPosition" ID="QsciScintillaCompat.getGlobalCursorPosition"></a>
+<h4>QsciScintillaCompat.getGlobalCursorPosition</h4>
+<b>getGlobalCursorPosition</b>(<i></i>)
+
+<p>
+            Public method to determine the point of the cursor.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+point of the cursor
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QPoint
+</dd>
+</dl>
 <a NAME="QsciScintillaCompat.getIndicatorEndPos" ID="QsciScintillaCompat.getIndicatorEndPos"></a>
 <h4>QsciScintillaCompat.getIndicatorEndPos</h4>
 <b>getIndicatorEndPos</b>(<i>indicator, pos</i>)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Documentation/Source/index-eric6.QScintilla.DocstringGenerator.html	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.QScintilla.DocstringGenerator</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body>
+<h1>eric6.QScintilla.DocstringGenerator</h1>
+
+<p>
+Package containing the documentation string generator tool.
+</p>
+
+
+<h3>Modules</h3>
+<table>
+
+<tr>
+<td><a href="eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.html">BaseDocstringGenerator</a></td>
+<td>Module implementing a docstring generator base class.</td>
+</tr>
+<tr>
+<td><a href="eric6.QScintilla.DocstringGenerator.EricdocGenerator.html">EricdocGenerator</a></td>
+<td>Module implementing the docstring generator for the 'ericdoc' style.</td>
+</tr>
+<tr>
+<td><a href="eric6.QScintilla.DocstringGenerator.GoogledocGenerator.html">GoogledocGenerator</a></td>
+<td>Module implementing the docstring generator for the 'sphinxdoc' style.</td>
+</tr>
+<tr>
+<td><a href="eric6.QScintilla.DocstringGenerator.NumpydocGenerator.html">NumpydocGenerator</a></td>
+<td>Module implementing the docstring generator for the 'numpydoc' style.</td>
+</tr>
+<tr>
+<td><a href="eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.html">PyDocstringGenerator</a></td>
+<td>Module implementing a docstring generator for Python.</td>
+</tr>
+<tr>
+<td><a href="eric6.QScintilla.DocstringGenerator.SphinxdocGenerator.html">SphinxdocGenerator</a></td>
+<td>Module implementing the docstring generator for the 'sphinxdoc' style.</td>
+</tr>
+<tr>
+<td><a href="eric6.QScintilla.DocstringGenerator.__init__.html">DocstringGenerator</a></td>
+<td>Package containing the documentation string generator tool.</td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/index-eric6.QScintilla.html	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Documentation/Source/index-eric6.QScintilla.html	Fri Jan 22 16:48:43 2021 +0100
@@ -40,6 +40,10 @@
 <table>
 
 <tr>
+<td><a href="index-eric6.QScintilla.DocstringGenerator.html">DocstringGenerator</a></td>
+<td>Package containing the documentation string generator tool.</td>
+</tr>
+<tr>
 <td><a href="index-eric6.QScintilla.Exporters.html">Exporters</a></td>
 <td>Package implementing exporters for various file formats.</td>
 </tr>
--- a/eric6/E5XML/Config.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/E5XML/Config.py	Fri Jan 22 16:48:43 2021 +0100
@@ -11,7 +11,8 @@
 multiProjectFileFormatVersion = "5.1"
 
 # version numbers of the project file
-projectFileFormatVersion = "6.4"
+projectFileFormatVersion = "6.5"
+projectFileFormatVersionRcc = "6.4"
 projectFileFormatVersionUic = "6.3"
 projectFileFormatVersionIdl = "6.2"
 projectFileFormatVersionMake = "6.1"
--- a/eric6/E5XML/ProjectReader.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/E5XML/ProjectReader.py	Fri Jan 22 16:48:43 2021 +0100
@@ -19,7 +19,7 @@
     """
     supportedVersions = ["4.6",
                          "5.0", "5.1",
-                         "6.0", "6.1", "6.2", "6.3", "6.4"]
+                         "6.0", "6.1", "6.2", "6.3", "6.4", "6.5"]
     
     def __init__(self, device, project):
         """
@@ -132,6 +132,8 @@
                 elif self.name() == "RccCompiler":
                     self.__readBasicDataField(
                         "RccCompiler", "RccCompilerParameters", "RCCPARAMS")
+                elif self.name() == "DocstringStyle":
+                    self.project.pdata["DOCSTRING"] = self.readElementText()
                 elif self.name() == "ProjectTypeSpecific":
                     self.__readBasicDataField(
                         "ProjectTypeSpecific", "ProjectTypeSpecificData",
--- a/eric6/E5XML/ProjectWriter.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/E5XML/ProjectWriter.py	Fri Jan 22 16:48:43 2021 +0100
@@ -13,9 +13,10 @@
 
 from .XMLStreamWriterBase import XMLStreamWriterBase
 from .Config import (
-    projectFileFormatVersion, projectFileFormatVersionUic,
-    projectFileFormatVersionIdl, projectFileFormatVersionMake,
-    projectFileFormatVersionProto, projectFileFormatVersionAlt
+    projectFileFormatVersion, projectFileFormatVersionRcc,
+    projectFileFormatVersionUic, projectFileFormatVersionIdl,
+    projectFileFormatVersionMake, projectFileFormatVersionProto,
+    projectFileFormatVersionAlt
 )
 
 import Preferences
@@ -45,8 +46,10 @@
         XMLStreamWriterBase.writeXML(self)
         
         project = e5App().getObject("Project")
-        if not project.hasDefaultRccCompilerParameters():
+        if not project.hasDefaultDocstringParameter():
             fileFormatVersion = projectFileFormatVersion
+        elif not project.hasDefaultRccCompilerParameters():
+            fileFormatVersion = projectFileFormatVersionRcc
         elif not project.hasDefaultUicCompilerParameters():
             fileFormatVersion = projectFileFormatVersionUic
         elif not project.hasDefaultIdlCompilerParameters():
@@ -249,6 +252,10 @@
             self.writeBasics("RccCompilerParameters", self.pdata["RCCPARAMS"])
             self.writeEndElement()
         
+        # do the 'docstring' parameter
+        if not e5App().getObject("Project").hasDefaultDocstringParameter():
+            self.writeTextElement("DocstringStyle", self.pdata["DOCSTRING"])
+        
         # do the extra project data stuff
         if len(self.pdata["PROJECTTYPESPECIFICDATA"]):
             self.writeStartElement("ProjectTypeSpecific")
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/DocStyleChecker.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/DocStyleChecker.py	Fri Jan 22 16:48:43 2021 +0100
@@ -128,7 +128,7 @@
         "D130", "D131", "D132", "D133", "D134",
         "D141", "D142", "D143", "D144", "D145",
         
-        "D203", "D205", "D206",
+        "D201", "D202.1", "D202.2", "D203", "D205", "D206",
         "D221", "D222",
         "D231", "D232", "D234r", "D234y", "D235r", "D235y", "D236", "D237",
         "D238", "D239",
@@ -216,7 +216,7 @@
         elif self.__docType == "eric":
             checkersWithCodes = {
                 "moduleDocstring": [
-                    (self.__checkModulesDocstrings, ("D101",)),
+                    (self.__checkModulesDocstrings, ("D101", "D201")),
                 ],
                 "functionDocstring": [
                 ],
@@ -230,7 +230,8 @@
                     (self.__checkEricSummary, ("D232")),
                 ],
                 "defDocstring": [
-                    (self.__checkFunctionDocstring, ("D102", "D203")),
+                    (self.__checkFunctionDocstring,
+                     ("D102", "D202.1", "D202.2", "D203")),
                     (self.__checkImperativeMood, ("D132",)),
                     (self.__checkNoSignature, ("D133",)),
                     (self.__checkEricReturn, ("D234r", "D235r")),
@@ -695,13 +696,20 @@
                 not docstring.strip('\'"')):
             self.__error(context.start(), 0, code)
         
-        if (
-            self.__docType == "eric" and
-            docstring.strip('\'"').strip() ==
-            "Function documentation goes here."
-        ):
-            self.__error(docstringContext.end(), 0, "D202")
-            return
+        if self.__docType == "eric":
+            if (
+                docstring.strip('\'"').strip() ==
+                "Function documentation goes here."
+            ):
+                self.__error(docstringContext.end(), 0, "D202.1")
+                return
+            
+            if (
+                "DESCRIPTION" in docstring or
+                "TYPE" in docstring
+            ):
+                self.__error(docstringContext.end(), 0, "D202.2")
+                return
     
     def __checkClassDocstring(self, docstringContext, context):
         """
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py	Fri Jan 22 16:48:43 2021 +0100
@@ -65,8 +65,11 @@
     
     "D201": QCoreApplication.translate(
         "DocStyleChecker", "module docstring is still a default string"),
-    "D202": QCoreApplication.translate(
+    "D202.1": QCoreApplication.translate(
         "DocStyleChecker", "function docstring is still a default string"),
+    "D202.2": QCoreApplication.translate(
+        "DocStyleChecker",
+        "function docstring still contains some placeholders"),
     "D203": QCoreApplication.translate(
         "DocStyleChecker",
         "private function/method is missing a docstring"),
--- a/eric6/Preferences/ConfigurationPages/EditorGeneralPage.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Preferences/ConfigurationPages/EditorGeneralPage.py	Fri Jan 22 16:48:43 2021 +0100
@@ -19,6 +19,8 @@
     EditorLanguageTabIndentOverrideDialog
 )
 
+from QScintilla.DocstringGenerator import getSupportedDocstringTypes
+
 import Preferences
 import UI.PixmapCache
 
@@ -39,6 +41,11 @@
         self.deleteButton.setIcon(UI.PixmapCache.getIcon("minus"))
         self.editButton.setIcon(UI.PixmapCache.getIcon("edit"))
         
+        for docstringType, docstringStyle in sorted(
+            getSupportedDocstringTypes()
+        ):
+            self.docstringStyleComboBox.addItem(docstringStyle, docstringType)
+        
         # set initial values
         self.tabwidthSlider.setValue(
             Preferences.getEditor("TabWidth"))
@@ -64,6 +71,10 @@
         self.sourceOutlineShowCodingCheckBox.setChecked(
             Preferences.getEditor("SourceOutlineShowCoding"))
         
+        index = self.docstringStyleComboBox.findData(
+            Preferences.getEditor("DocstringType"))
+        self.docstringStyleComboBox.setCurrentIndex(index)
+        
         virtualSpaceOptions = Preferences.getEditor("VirtualSpaceOptions")
         self.vsSelectionCheckBox.setChecked(
             virtualSpaceOptions & QsciScintillaBase.SCVS_RECTANGULARSELECTION)
@@ -111,6 +122,10 @@
             "SourceOutlineShowCoding",
             self.sourceOutlineShowCodingCheckBox.isChecked())
         
+        Preferences.setEditor(
+            "DocstringType",
+            self.docstringStyleComboBox.currentData())
+        
         virtualSpaceOptions = QsciScintillaBase.SCVS_NONE
         if self.vsSelectionCheckBox.isChecked():
             virtualSpaceOptions |= QsciScintillaBase.SCVS_RECTANGULARSELECTION
--- a/eric6/Preferences/ConfigurationPages/EditorGeneralPage.ui	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Preferences/ConfigurationPages/EditorGeneralPage.ui	Fri Jan 22 16:48:43 2021 +0100
@@ -7,10 +7,10 @@
     <x>0</x>
     <y>0</y>
     <width>550</width>
-    <height>700</height>
+    <height>863</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_4">
+  <layout class="QVBoxLayout" name="verticalLayout_3">
    <item>
     <widget class="QLabel" name="headerLabel">
      <property name="text">
@@ -36,9 +36,53 @@
      <property name="title">
       <string>Tabs &amp;&amp; Indentation</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout_3">
-      <item>
-       <layout class="QGridLayout">
+     <layout class="QGridLayout" name="gridLayout_5">
+      <item row="0" column="0" colspan="2">
+       <layout class="QGridLayout" name="gridLayout_2">
+        <item row="0" column="0">
+         <widget class="QCheckBox" name="autoindentCheckBox">
+          <property name="toolTip">
+           <string>Select whether autoindentation shall be enabled</string>
+          </property>
+          <property name="text">
+           <string>Auto indentation</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QCheckBox" name="tabforindentationCheckBox">
+          <property name="toolTip">
+           <string>Select whether tab characters are used for indentations.</string>
+          </property>
+          <property name="text">
+           <string>Use tabs for indentations</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QCheckBox" name="tabindentsCheckBox">
+          <property name="toolTip">
+           <string>Select whether pressing the tab key indents.</string>
+          </property>
+          <property name="text">
+           <string>Tab key indents</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <widget class="QCheckBox" name="converttabsCheckBox">
+          <property name="toolTip">
+           <string>Select whether tabs shall be converted upon opening the file</string>
+          </property>
+          <property name="text">
+           <string>Convert tabs upon open</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item row="1" column="0" colspan="2">
+       <layout class="QGridLayout" name="gridLayout_4">
         <item row="0" column="0">
          <widget class="QLabel" name="TextLabel13_3">
           <property name="text">
@@ -137,138 +181,96 @@
         </item>
        </layout>
       </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout">
+      <item row="2" column="0">
+       <widget class="QTreeWidget" name="languageOverrideWidget">
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>150</height>
+         </size>
+        </property>
+        <property name="alternatingRowColors">
+         <bool>true</bool>
+        </property>
+        <property name="selectionMode">
+         <enum>QAbstractItemView::ExtendedSelection</enum>
+        </property>
+        <property name="rootIsDecorated">
+         <bool>false</bool>
+        </property>
+        <property name="itemsExpandable">
+         <bool>false</bool>
+        </property>
+        <column>
+         <property name="text">
+          <string>Language</string>
+         </property>
+        </column>
+        <column>
+         <property name="text">
+          <string>Tab Width</string>
+         </property>
+        </column>
+        <column>
+         <property name="text">
+          <string>Indent Width</string>
+         </property>
+        </column>
+        <column>
+         <property name="text">
+          <string notr="true"/>
+         </property>
+        </column>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <layout class="QVBoxLayout" name="verticalLayout_2">
         <item>
-         <widget class="QTreeWidget" name="languageOverrideWidget">
-          <property name="alternatingRowColors">
-           <bool>true</bool>
-          </property>
-          <property name="selectionMode">
-           <enum>QAbstractItemView::ExtendedSelection</enum>
-          </property>
-          <property name="rootIsDecorated">
-           <bool>false</bool>
-          </property>
-          <property name="itemsExpandable">
-           <bool>false</bool>
+         <spacer name="verticalSpacer">
+          <property name="orientation">
+           <enum>Qt::Vertical</enum>
           </property>
-          <column>
-           <property name="text">
-            <string>Language</string>
-           </property>
-          </column>
-          <column>
-           <property name="text">
-            <string>Tab Width</string>
-           </property>
-          </column>
-          <column>
-           <property name="text">
-            <string>Indent Width</string>
-           </property>
-          </column>
-          <column>
-           <property name="text">
-            <string notr="true"/>
-           </property>
-          </column>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>20</width>
+            <height>40</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QToolButton" name="addButton">
+          <property name="toolTip">
+           <string>Press to add a language specific override</string>
+          </property>
          </widget>
         </item>
         <item>
-         <layout class="QVBoxLayout" name="verticalLayout_2">
-          <item>
-           <spacer name="verticalSpacer">
-            <property name="orientation">
-             <enum>Qt::Vertical</enum>
-            </property>
-            <property name="sizeHint" stdset="0">
-             <size>
-              <width>20</width>
-              <height>40</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-          <item>
-           <widget class="QToolButton" name="addButton">
-            <property name="toolTip">
-             <string>Press to add a language specific override</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QToolButton" name="deleteButton">
-            <property name="toolTip">
-             <string>Press to delete the selected language specific override</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QToolButton" name="editButton">
-            <property name="toolTip">
-             <string>Press to edit the selected language specific override</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <spacer name="verticalSpacer_2">
-            <property name="orientation">
-             <enum>Qt::Vertical</enum>
-            </property>
-            <property name="sizeHint" stdset="0">
-             <size>
-              <width>20</width>
-              <height>40</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-         </layout>
+         <widget class="QToolButton" name="deleteButton">
+          <property name="toolTip">
+           <string>Press to delete the selected language specific override</string>
+          </property>
+         </widget>
         </item>
-       </layout>
-      </item>
-      <item>
-       <layout class="QGridLayout" name="gridLayout_2">
-        <item row="0" column="0">
-         <widget class="QCheckBox" name="autoindentCheckBox">
+        <item>
+         <widget class="QToolButton" name="editButton">
           <property name="toolTip">
-           <string>Select whether autoindentation shall be enabled</string>
-          </property>
-          <property name="text">
-           <string>Auto indentation</string>
+           <string>Press to edit the selected language specific override</string>
           </property>
          </widget>
         </item>
-        <item row="0" column="1">
-         <widget class="QCheckBox" name="tabforindentationCheckBox">
-          <property name="toolTip">
-           <string>Select whether tab characters are used for indentations.</string>
-          </property>
-          <property name="text">
-           <string>Use tabs for indentations</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="0">
-         <widget class="QCheckBox" name="tabindentsCheckBox">
-          <property name="toolTip">
-           <string>Select whether pressing the tab key indents.</string>
+        <item>
+         <spacer name="verticalSpacer_2">
+          <property name="orientation">
+           <enum>Qt::Vertical</enum>
           </property>
-          <property name="text">
-           <string>Tab key indents</string>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>20</width>
+            <height>40</height>
+           </size>
           </property>
-         </widget>
-        </item>
-        <item row="1" column="1">
-         <widget class="QCheckBox" name="converttabsCheckBox">
-          <property name="toolTip">
-           <string>Select whether tabs shall be converted upon opening the file</string>
-          </property>
-          <property name="text">
-           <string>Convert tabs upon open</string>
-          </property>
-         </widget>
+         </spacer>
         </item>
        </layout>
       </item>
@@ -294,26 +296,6 @@
         </property>
        </widget>
       </item>
-      <item row="0" column="2">
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>345</width>
-          <height>17</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="1" column="0">
-       <widget class="QLabel" name="label_3">
-        <property name="text">
-         <string>Width Step Size:</string>
-        </property>
-       </widget>
-      </item>
       <item row="0" column="1">
        <widget class="QSpinBox" name="sourceOutlineWidthSpinBox">
         <property name="toolTip">
@@ -333,7 +315,14 @@
         </property>
        </widget>
       </item>
-      <item row="1" column="1">
+      <item row="0" column="2">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Width Step Size:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3">
        <widget class="QSpinBox" name="sourceOutlineWidthStepSpinBox">
         <property name="toolTip">
          <string>Enter the amount of pixels the width of the outline should be increased or decreased</string>
@@ -352,7 +341,20 @@
         </property>
        </widget>
       </item>
-      <item row="2" column="0" colspan="3">
+      <item row="0" column="4">
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>345</width>
+          <height>17</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="1" column="0" colspan="5">
        <widget class="QCheckBox" name="sourceOutlineShowCodingCheckBox">
         <property name="toolTip">
          <string>Select to show the source code encoding</string>
@@ -388,6 +390,35 @@
     </widget>
    </item>
    <item>
+    <widget class="QGroupBox" name="groupBox_3">
+     <property name="title">
+      <string>Docstring</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <item>
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>Docstring Style:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QComboBox" name="docstringStyleComboBox">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="toolTip">
+         <string>Select the docstring style to be used</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <widget class="QGroupBox" name="groupBox_2">
      <property name="title">
       <string>Virtual Space</string>
@@ -429,21 +460,22 @@
   </layout>
  </widget>
  <tabstops>
+  <tabstop>autoindentCheckBox</tabstop>
+  <tabstop>tabforindentationCheckBox</tabstop>
+  <tabstop>tabindentsCheckBox</tabstop>
+  <tabstop>converttabsCheckBox</tabstop>
   <tabstop>tabwidthSlider</tabstop>
   <tabstop>indentwidthSlider</tabstop>
   <tabstop>languageOverrideWidget</tabstop>
   <tabstop>addButton</tabstop>
   <tabstop>deleteButton</tabstop>
   <tabstop>editButton</tabstop>
-  <tabstop>autoindentCheckBox</tabstop>
-  <tabstop>tabforindentationCheckBox</tabstop>
-  <tabstop>tabindentsCheckBox</tabstop>
-  <tabstop>converttabsCheckBox</tabstop>
   <tabstop>sourceOutlineGroupBox</tabstop>
   <tabstop>sourceOutlineWidthSpinBox</tabstop>
   <tabstop>sourceOutlineWidthStepSpinBox</tabstop>
   <tabstop>sourceOutlineShowCodingCheckBox</tabstop>
   <tabstop>comment0CheckBox</tabstop>
+  <tabstop>docstringStyleComboBox</tabstop>
   <tabstop>vsSelectionCheckBox</tabstop>
   <tabstop>vsUserCheckBox</tabstop>
  </tabstops>
--- a/eric6/Preferences/__init__.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Preferences/__init__.py	Fri Jan 22 16:48:43 2021 +0100
@@ -502,6 +502,8 @@
         "SourceOutlineStepSize": 50,
         "SourceOutlineShowCoding": True,
         
+        "DocstringType": "ericdoc",
+        
         # All (most) lexers
         "AllFoldCompact": True,
         
@@ -2084,7 +2086,8 @@
     if key in ["DefaultEncoding", "DefaultOpenFilter", "DefaultSaveFilter",
                "SpellCheckingDefaultLanguage", "SpellCheckingPersonalWordList",
                "SpellCheckingPersonalExcludeList",
-               "PreviewMarkdownHTMLFormat", "PreviewRestDocutilsHTMLFormat"]:
+               "PreviewMarkdownHTMLFormat", "PreviewRestDocutilsHTMLFormat",
+               "DocstringType"]:
         return prefClass.settings.value(
             "Editor/" + key, prefClass.editorDefaults[key])
     elif key in ["AutosaveInterval", "TabWidth", "IndentWidth",
--- a/eric6/Project/Project.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Project/Project.py	Fri Jan 22 16:48:43 2021 +0100
@@ -499,6 +499,7 @@
                 "PathPrefix": "",
             },
             "EOL": -1,
+            "DOCSTRING": "",
         }
         
         self.__initDebugProperties()
@@ -5867,6 +5868,29 @@
             "CompressionDisable": False,
             "PathPrefix": "",
         }
+    
+    #########################################################################
+    ## Below are methods implementing some 'docstring' support functions
+    #########################################################################
+    
+    def hasDefaultDocstringParameter(self):
+        """
+        Public method to test, if the project contains the default docstring
+        parameter.
+        
+        @return flag indicating default parameter
+        @rtype bool
+        """
+        return self.pdata["DOCSTRING"] == ""
+    
+    def getDocstringType(self):
+        """
+        Public method to get the configured docstring style.
+        
+        @return configured docstring style
+        @rtype str
+        """
+        return self.pdata["DOCSTRING"]
 
 #
 # eflag: noqa = M601
--- a/eric6/Project/PropertiesDialog.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Project/PropertiesDialog.py	Fri Jan 22 16:48:43 2021 +0100
@@ -17,6 +17,8 @@
 
 from .Ui_PropertiesDialog import Ui_PropertiesDialog
 
+from QScintilla.DocstringGenerator import getSupportedDocstringTypes
+
 import Utilities
 import Preferences
 import UI.PixmapCache
@@ -45,6 +47,12 @@
         
         self.makeButton.setIcon(UI.PixmapCache.getIcon("makefile"))
         
+        self.docstringStyleComboBox.addItem(self.tr("None"), "")
+        for docstringType, docstringStyle in sorted(
+            getSupportedDocstringTypes()
+        ):
+            self.docstringStyleComboBox.addItem(docstringStyle, docstringType)
+        
         self.project = project
         self.newProject = new
         self.transPropertiesDlg = None
@@ -122,6 +130,9 @@
             self.vcsCheckBox.hide()
             self.makeCheckBox.setChecked(
                 self.project.pdata["MAKEPARAMS"]["MakeEnabled"])
+            cindex = self.docstringStyleComboBox.findData(
+                self.project.pdata["DOCSTRING"])
+            self.docstringStyleComboBox.setCurrentIndex(cindex)
         else:
             self.languageComboBox.setCurrentIndex(
                 self.languageComboBox.findText("Python3"))
@@ -318,3 +329,7 @@
         )
         if self.makePropertiesDlg is not None:
             self.makePropertiesDlg.storeData()
+        
+        self.project.pdata["DOCSTRING"] = (
+            self.docstringStyleComboBox.currentData()
+        )
--- a/eric6/Project/PropertiesDialog.ui	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/Project/PropertiesDialog.ui	Fri Jan 22 16:48:43 2021 +0100
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>600</width>
-    <height>555</height>
+    <height>650</height>
    </rect>
   </property>
   <property name="maximumSize">
@@ -29,7 +29,7 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <layout class="QGridLayout" name="gridLayout">
+    <layout class="QFormLayout" name="formLayout">
      <item row="0" column="0">
       <widget class="QLabel" name="nameLabel">
        <property name="text">
@@ -279,6 +279,20 @@
       </widget>
      </item>
      <item row="10" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Docstring Style:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="10" column="1">
+      <widget class="QComboBox" name="docstringStyleComboBox">
+       <property name="toolTip">
+        <string>Select the docstring style for the project</string>
+       </property>
+      </widget>
+     </item>
+     <item row="11" column="0">
       <widget class="QLabel" name="authorLabel">
        <property name="text">
         <string>&amp;Author:</string>
@@ -288,7 +302,7 @@
        </property>
       </widget>
      </item>
-     <item row="10" column="1">
+     <item row="11" column="1">
       <widget class="QLineEdit" name="authorEdit">
        <property name="toolTip">
         <string>Enter authors name</string>
@@ -299,7 +313,7 @@
        </property>
       </widget>
      </item>
-     <item row="11" column="0">
+     <item row="12" column="0">
       <widget class="QLabel" name="emailLabel">
        <property name="text">
         <string>&amp;Email:</string>
@@ -309,7 +323,7 @@
        </property>
       </widget>
      </item>
-     <item row="11" column="1">
+     <item row="12" column="1">
       <widget class="QLineEdit" name="emailEdit">
        <property name="toolTip">
         <string>Enter authors email</string>
@@ -320,7 +334,7 @@
        </property>
       </widget>
      </item>
-     <item row="12" column="0">
+     <item row="13" column="0">
       <widget class="QLabel" name="descriptionLabel">
        <property name="text">
         <string>&amp;Description:</string>
@@ -333,7 +347,7 @@
        </property>
       </widget>
      </item>
-     <item row="12" column="1">
+     <item row="13" column="1">
       <widget class="QTextEdit" name="descriptionEdit">
        <property name="toolTip">
         <string>Enter description</string>
@@ -426,6 +440,7 @@
   <tabstop>mainscriptPicker</tabstop>
   <tabstop>transPropertiesButton</tabstop>
   <tabstop>eolComboBox</tabstop>
+  <tabstop>docstringStyleComboBox</tabstop>
   <tabstop>authorEdit</tabstop>
   <tabstop>emailEdit</tabstop>
   <tabstop>descriptionEdit</tabstop>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/QScintilla/DocstringGenerator/BaseDocstringGenerator.py	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,221 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a docstring generator base class.
+"""
+
+import re
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QMenu
+
+from E5Gui.E5Application import e5App
+
+import Preferences
+
+
+def getIndentStr(text):
+    """
+    Function to get the indentation of a text.
+    
+    @param text text to extract indentation from
+    @type str
+    @return indentation string
+    @rtype str
+    """
+    indent = ''
+
+    ret = re.match(r'(\s*)', text)
+    if ret:
+        indent = ret.group(1)
+
+    return indent
+
+
+class BaseDocstringGenerator(object):
+    """
+    Class implementing a docstring generator base class.
+    """
+    def __init__(self, editor):
+        """
+        Constructor
+        
+        @param editor reference to the editor widget
+        @type Editor
+        """
+        self.editor = editor
+    
+    def isFunctionStart(self, text):
+        """
+        Public method to test, if a text is the start of a function or method
+        definition.
+        
+        @param text line of text to be tested
+        @type str
+        @return flag indicating that the given text starts a function or
+            method definition (always False)
+        @rtype bool
+        """
+        return False
+    
+    def hasFunctionDefinition(self, cursorPosition):
+        """
+        Public method to test, if the cursor is right below a function
+        definition.
+        
+        @param cursorPosition current cursor position (line and column)
+        @type tuple of (int, int)
+        @return flag indicating cursor is right below a function definition
+        @rtype bool
+        """
+        return False
+    
+    def isDocstringIntro(self, cursorPosition):
+        """
+        Public function to test, if the line up to the cursor position might be
+        introducing a docstring.
+        
+        @param cursorPosition current cursor position (line and column)
+        @type tuple of (int, int)
+        @return flag indicating a potential start of a docstring
+        @rtype bool
+        """
+        return False
+    
+    def insertDocstring(self, cursorPosition, fromStart=True):
+        """
+        Public method to insert a docstring for the function at the cursor
+        position.
+        
+        @param cursorPosition position of the cursor (line and index)
+        @type tuple of (int, int)
+        @param fromStart flag indicating that the editor text cursor is placed
+            on the line starting the function definition
+        @type bool
+        """
+        # just do nothing in the base class
+        return
+
+    def getDocstringType(self):
+        """
+        Public method to determine the docstring type to be generated.
+        
+        @return docstring type (one of 'ericdoc', 'numpydoc', 'googledoc',
+            'sphinxdoc')
+        @rtype str
+        """
+        docstringStyle = ""
+        
+        project = e5App().getObject("Project")
+        filename = self.editor.getFileName()
+        if (
+            filename and
+            project.isOpen() and
+            project.isProjectFile(filename)
+        ):
+            docstringStyle = project.getDocstringType().lower()
+        
+        if docstringStyle == "":
+            docstringStyle = Preferences.getEditor("DocstringType")
+        
+        return docstringStyle
+    
+    def _generateDocstringList(self, functionInfo, docstringType):
+        """
+        Protected method to generate type specific docstrings based on the
+        extracted function information.
+        
+        @param functionInfo reference to the function info object
+        @type FunctionInfo
+        @param docstringType kind of docstring to be generated
+        @return list of docstring lines
+        @rtype str
+        """
+        if docstringType == "ericdoc":
+            from .EricdocGenerator import generateEricDoc
+            return generateEricDoc(functionInfo)
+        elif docstringType == "numpydoc":
+            from .NumpydocGenerator import generateNumpyDoc
+            return generateNumpyDoc(functionInfo)
+        elif docstringType == "googledoc":
+            from .GoogledocGenerator import generateGoogleDoc
+            return generateGoogleDoc(functionInfo, self.editor)
+        elif docstringType == "sphinxdoc":
+            from .SphinxdocGenerator import generateSphinxDoc
+            return generateSphinxDoc(functionInfo)
+        else:
+            return []
+
+
+class FunctionInfo(object):
+    """
+    Class implementing an object to store function information.
+    
+    Methods to extract the relevant information need to be implemented in
+    language specific subclasses.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        self.hasInfo = False
+        self.funcionText = ""
+        self.argumentsText = ""
+        
+        self.functionIndent = ""
+        # indentation fo function definition
+        self.argumentsList = []
+        # list of tuples with name, type and value
+        self.returnTypeAnnotated = None
+        # return type extracted from type annotation
+        self.returnValueInBody = []
+        # return values extracted from function body
+        self.raiseList = None
+        # exceptions raised by function
+        self.hasYield = False
+        # function is a generator
+        self.functionType = ""
+        # function type with these values
+        # classmethod, staticmethod, qtslot, constructor or empty (i.e.
+        # standard)
+        self.isAsync = False
+        # function is an asynchronous function, i.e. async def f():
+        self.visibility = ""
+        # function visibility with allowed values:
+        # public, protected, private or special (i.e. starting and
+        # ending with '__'
+
+
+class DocstringMenuForEnterOnly(QMenu):
+    """
+    Class implementing a special menu reacting to the enter/return keys only.
+    
+    If a keyboard input is not the "enter key", the menu is closed and the
+    input is inserted to the code editor.
+    """
+    def __init__(self, editor):
+        """
+        Constructor
+        
+        @param editor reference to the editor
+        @type Editor
+        """
+        super(DocstringMenuForEnterOnly, self).__init__(editor)
+        self.__editor = editor
+
+    def keyPressEvent(self, evt):
+        """
+        Protected method to handle key press events.
+        
+        @param evt reference to the key press event object
+        @type QKeyEvent
+        """
+        key = evt.key()
+        if key not in (Qt.Key_Enter, Qt.Key_Return):
+            self.__editor.keyPressEvent(evt)
+            self.close()
+        else:
+            super(DocstringMenuForEnterOnly, self).keyPressEvent(evt)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/QScintilla/DocstringGenerator/EricdocGenerator.py	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,123 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the docstring generator for the 'ericdoc' style.
+"""
+
+
+def generateEricDoc(functionInfo):
+    """
+    Function to generate the docstring line list iaw. eric documentation style.
+    
+    Note: Partial English text is created with DESCRIPTION placeholders
+    for descriptions and TYPE placeholders for type information
+    
+    @param functionInfo object containing the function information to base
+        the docstring on
+    @type FunctionInfo
+    @return list of docstring lines
+    @rtype str
+    """
+    lines = []
+    
+    # create a basic/partial function description
+    descrComplete = False
+    if functionInfo.functionType == "classmethod":
+        descr = "Class method "
+    elif functionInfo.functionType == "staticmethod":
+        descr = "Static method "
+    elif functionInfo.functionType == "constructor":
+        descr = "Constructor"
+        descrComplete = True
+    else:
+        if functionInfo.visibility == "public":
+            descr = "Public "
+        elif functionInfo.visibility == "protected":
+            descr = "Protected "
+        elif functionInfo.visibility == "private":
+            descr = "Private "
+        elif functionInfo.visibility == "special":
+            descr = "Special "
+        else:
+            descr = ""
+        
+        if (
+            len(functionInfo.argumentsList) > 0 and
+            functionInfo.argumentsList[0][0] in ("self", "cls", "this")
+        ):
+            if functionInfo.isAsync:
+                descr += "coroutine "
+            elif functionInfo.functionType == "qtslot":
+                descr += "slot "
+            else:
+                descr += "method "
+        else:
+            if functionInfo.isAsync:
+                descr = "Coroutine "
+            elif functionInfo.functionType == "qtslot":
+                descr = "Slot "
+            else:
+                descr = "Function "
+    if not descrComplete:
+        descr += "DESCRIPTION"
+    lines.append(descr)
+    
+    # remove 'self', 'this' or 'cls' from arguments list
+    if (
+        len(functionInfo.argumentsList) > 0 and
+        functionInfo.argumentsList[0][0] in ("self", "cls", "this")
+    ):
+        del functionInfo.argumentsList[0]
+    
+    # add an empty line if there is one of the other sections
+    if (
+        functionInfo.argumentsList or
+        functionInfo.hasYield or
+        functionInfo.returnTypeAnnotated or
+        functionInfo.returnValueInBody or
+        functionInfo.raiseList
+    ):
+        lines.append("")
+    
+    # add the parameters section
+    tag = "@param"
+    for argName, argType, argValue in functionInfo.argumentsList:
+        if argName == "*":
+            tag = "@keyparam"
+            continue
+        
+        argLine = "{0} {1} DESCRIPTION".format(tag, argName)
+        if argValue:
+            argLine += " (defaults to {0})".format(argValue)
+        lines.append(argLine)
+        
+        if argType is None:
+            argType = "TYPE"
+        argLine = "@type {0}".format(argType)
+        if argValue:
+            argLine += " (optional)"
+        lines.append(argLine)
+    
+    # add return section
+    if functionInfo.hasYield or functionInfo.returnValueInBody:
+        if functionInfo.hasYield:
+            lines.append("@yield DESCRIPTION")
+            rType = "@ytype"
+        else:
+            lines.append("@return DESCRIPTION")
+            rType = "@rtype"
+        if functionInfo.returnTypeAnnotated:
+            lines.append("{0} {1}".format(
+                rType, functionInfo.returnTypeAnnotated))
+        else:
+            lines.append("{0} TYPE".format(rType))
+    
+    # add an exceptions section, if function raises something
+    if functionInfo.raiseList:
+        for exc in sorted(functionInfo.raiseList):
+            lines.append("@exception {0} DESCRIPTION".format(exc))
+    
+    return lines
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/QScintilla/DocstringGenerator/GoogledocGenerator.py	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the docstring generator for the 'sphinxdoc' style.
+"""
+
+
+def generateGoogleDoc(functionInfo, editor):
+    """
+    Function to generate the docstring line list iaw. Sphinx documentation
+    style.
+    
+    Note: Text is created with DESCRIPTION placeholders for descriptions and
+    TYPE placeholders for type information
+    
+    @param functionInfo object containing the function information to base
+        the docstring on
+    @type FunctionInfo
+    @param editor reference to the editor
+    @type Editor
+    @return list of docstring lines
+    @rtype str
+    """
+    lines = []
+    
+    # function description
+    lines.append("DESCRIPTION")
+    
+    # remove 'self', 'this' or 'cls' from arguments list
+    if (
+        len(functionInfo.argumentsList) > 0 and
+        functionInfo.argumentsList[0][0] in ("self", "cls", "this")
+    ):
+        del functionInfo.argumentsList[0]
+    
+    # determine additional indentation string
+    indentWidth = editor.indentationWidth()
+    if indentWidth == 0:
+        indentWidth = editor.tabWidth()
+    indent = indentWidth * " "
+    
+    # add the parameters section
+    if functionInfo.argumentsList:
+        lines.append("")
+        lines.append("Args:")
+        for argName, argType, argValue in functionInfo.argumentsList:
+            argLine = "{0}{1} ".format(indent, argName)
+            argLine += "("
+            if argType:
+                argLine += "{0}".format(argType)
+            else:
+                argLine += "TYPE"
+            argLine += "):"
+            lines.append(argLine)
+            argLine = "{0}".format(2 * indent)
+            if argValue:
+                argLine += "Optional; "
+            argLine += "DESCRIPTION"
+            if argValue:
+                argLine += " Defaults to {0}.".format(argValue)
+            lines.append(argLine)
+    
+    # add return section
+    lines.append("")
+    if functionInfo.hasYield:
+        lines.append("Yields:")
+    else:
+        lines.append("Returns:")
+    if functionInfo.returnTypeAnnotated:
+        lines.append("{0}{1}: DESCRIPTION".format(
+            indent, functionInfo.returnTypeAnnotated))
+    elif functionInfo.returnValueInBody:
+        lines.append("{0}TYPE: DESCRIPTION")
+    else:
+        lines.append("{0}None".format(indent))
+    
+    # add an exceptions section, if function raises something
+    if functionInfo.raiseList:
+        lines.append("")
+        lines.append("Raises:")
+        for exc in sorted(functionInfo.raiseList):
+            lines.append("{0}{1}: DESCRIPTION".format(indent, exc))
+    
+    return lines
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/QScintilla/DocstringGenerator/NumpydocGenerator.py	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the docstring generator for the 'numpydoc' style.
+"""
+
+
+def generateNumpyDoc(functionInfo, editor):
+    """
+    Function to generate the docstring line list iaw. NumPy documentation
+    style.
+    
+    Note: Text is created with DESCRIPTION placeholders for descriptions and
+    TYPE placeholders for type information
+    
+    @param functionInfo object containing the function information to base
+        the docstring on
+    @type FunctionInfo
+    @param editor reference to the editor
+    @type Editor
+    @return list of docstring lines
+    @rtype str
+    """
+    lines = []
+    
+    # function description
+    lines.append("DESCRIPTION")
+    
+    # remove 'self', 'this' or 'cls' from arguments list
+    if (
+        len(functionInfo.argumentsList) > 0 and
+        functionInfo.argumentsList[0][0] in ("self", "cls", "this")
+    ):
+        del functionInfo.argumentsList[0]
+    
+    # determine additional indentation string
+    indentWidth = editor.indentationWidth()
+    if indentWidth == 0:
+        indentWidth = editor.tabWidth()
+    indent = indentWidth * " "
+    
+    # add the parameters section
+    if functionInfo.argumentsList:
+        lines.append("")
+        lines.append("Parameters")
+        lines.append("----------")
+        for argName, argType, argValue in functionInfo.argumentsList:
+            argLine = "{0} : ".format(argName)
+            if argType:
+                argLine += "{0}".format(argType)
+            else:
+                argLine += "TYPE"
+            if argValue:
+                argLine += ", optional"
+            lines.append(argLine)
+            argLine = "{0}DESCRIPTION.".format(indent)
+            if argValue:
+                argLine += " The default is {0}".format(argValue)
+            lines.append(argLine)
+    
+    # add an exceptions section, if function raises something
+    if functionInfo.raiseList:
+        lines.append("")
+        lines.append("Raises")
+        lines.append("------")
+        for exc in sorted(functionInfo.raiseList):
+            lines.append("{0}".format(exc))
+            lines.append("{0}DESCRIPTION".format(indent))
+    
+    # add return section
+    lines.append("")
+    if functionInfo.hasYield:
+        lines.append("Yields")
+        lines.append("------")
+    else:
+        lines.append("Returns")
+        lines.append("-------")
+    if functionInfo.returnTypeAnnotated:
+        lines.append("{0}".format(functionInfo.returnTypeAnnotated))
+        lines.append("{0}DESCRIPTION.".format(indent))
+    elif functionInfo.returnValueInBody:
+        lines.append("TYPE")
+        lines.append("{0}DESCRIPTION.".format(indent))
+    else:
+        lines.append("{0}None".format(indent))
+    
+    return lines
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/QScintilla/DocstringGenerator/PyDocstringGenerator.py	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,723 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a docstring generator for Python.
+"""
+
+import re
+import collections
+
+from .BaseDocstringGenerator import (
+    BaseDocstringGenerator, FunctionInfo, getIndentStr
+)
+
+
+class PyDocstringGenerator(BaseDocstringGenerator):
+    """
+    Class implementing a docstring generator for Python.
+    """
+    def __init__(self, editor):
+        """
+        Constructor
+        
+        @param editor reference to the editor widget
+        @type Editor
+        """
+        super(PyDocstringGenerator, self).__init__(editor)
+        
+        self.__quote3 = '"""'
+        self.__quote3Alternate = "'''"
+    
+    def isFunctionStart(self, text):
+        """
+        Public method to test, if a text is the start of a function or method
+        definition.
+        
+        @param text line of text to be tested
+        @type str
+        @return flag indicating that the given text starts a function or
+            method definition
+        @rtype bool
+        """
+        if isinstance(text, str):
+            text = text.lstrip()
+            if text.startswith(("def", "async def")):
+                return True
+        
+        return False
+    
+    def hasFunctionDefinition(self, cursorPosition):
+        """
+        Public method to test, if the cursor is right below a function
+        definition.
+        
+        @param cursorPosition current cursor position (line and column)
+        @type tuple of (int, int)
+        @return flag indicating cursor is right below a function definition
+        @rtype bool
+        """
+        return (
+            self.__getFunctionDefinitionFromBelow(cursorPosition) is not None
+        )
+    
+    def isDocstringIntro(self, cursorPosition):
+        """
+        Public function to test, if the line up to the cursor position might be
+        introducing a docstring.
+        
+        @param cursorPosition current cursor position (line and column)
+        @type tuple of (int, int)
+        @return flag indicating a potential start of a docstring
+        @rtype bool
+        """
+        cline, cindex = cursorPosition
+        lineToCursor = self.editor.text(cline)[:cindex]
+        return self.__isTripleQuotesStart(lineToCursor)
+    
+    def __isTripleQuotesStart(self, text):
+        """
+        Private method to test, if the given text is the start of a triple
+        quoted string.
+        
+        @param text text to be inspected
+        @type str
+        @return flag indicating a triple quote start
+        @rtype bool
+        """
+        docstringTriggers = ('"""', 'r"""', "'''", "r'''")
+        if text.lstrip() in docstringTriggers:
+            return True
+
+        return False
+    
+    def insertDocstring(self, cursorPosition, fromStart=True):
+        """
+        Public method to insert a docstring for the function at the cursor
+        position.
+        
+        @param cursorPosition position of the cursor (line and index)
+        @type tuple of (int, int)
+        @param fromStart flag indicating that the editor text cursor is placed
+            on the line starting the function definition
+        @type bool
+        """
+        if fromStart:
+            self.__functionStartLine = cursorPosition[0]
+            docstring, insertPos = self.__generateDocstringFromStart()
+        else:
+            docstring, insertPos = self.__generateDocstringFromBelow(
+                cursorPosition)
+        
+        if docstring:
+            self.editor.beginUndoAction()
+            self.editor.insertAt(docstring, *insertPos)
+            self.editor.endUndoAction()
+    
+    def __getIndentationInsertString(self, text):
+        """
+        Private method to create the indentation string for the docstring.
+        
+        @param text text to based the indentation on
+        @type str
+        @return indentation string for docstring
+        @rtype str
+        """
+        indent = getIndentStr(text)
+        indentWidth = self.editor.indentationWidth()
+        if indentWidth == 0:
+            indentWidth = self.editor.tabWidth()
+        
+        return indent + indentWidth * " "
+    
+    #######################################################################
+    ## Methods to generate the docstring when the text cursor is on the
+    ## line starting the function definition.
+    #######################################################################
+    
+    def __generateDocstringFromStart(self):
+        """
+        Private method to generate a docstring based on the cursor being
+        placed on the first line of the definition.
+        
+        @return tuple containing the docstring and a tuple containing the
+            insertion line and index
+        @rtype tuple of (str, tuple(int, int))
+        """
+        result = self.__getFunctionDefinitionFromStart()
+        if result:
+            functionDefinition, functionDefinitionLength = result
+            
+            insertLine = self.__functionStartLine + functionDefinitionLength
+            indentation = self.__getIndentationInsertString(functionDefinition)
+            sep = self.editor.getLineSeparator()
+            bodyStart = insertLine
+            
+            docstringList = self.__generateDocstring(
+                '"', functionDefinition, bodyStart
+            )
+            if docstringList:
+                if self.getDocstringType() == "ericdoc":
+                    docstringList.insert(0, self.__quote3)
+                else:
+                    docstringList[0] = self.__quote3 + docstringList[0]
+                docstringList.append(self.__quote3)
+                return (
+                    indentation +
+                    "{0}{1}".format(sep, indentation).join(docstringList) +
+                    sep
+                ), (insertLine, 0)
+        
+        return "", (0, 0)
+    
+    def __getFunctionDefinitionFromStart(self):
+        """
+        Private method to extract the function definition based on the cursor
+        being placed on the first line of the definition.
+        
+        @return text containing the function definition
+        @rtype str
+        """
+        startLine = self.__functionStartLine
+        endLine = startLine + min(
+            self.editor.lines() - startLine,
+            20          # max. 20 lines of definition allowed
+        )
+        isFirstLine = True
+        functionIndent = ""
+        functionTextList = []
+        
+        for lineNo in range(startLine, endLine):
+            text = self.editor.text(lineNo).rstrip()
+            if isFirstLine:
+                if not self.isFunctionStart(text):
+                    return None
+                
+                functionIndent = getIndentStr(text)
+                isFirstLine = False
+            else:
+                currentIndent = getIndentStr(text)
+                if (
+                    currentIndent <= functionIndent or
+                    self.isFunctionStart(text)
+                ):
+                    # no function body exists
+                    return None
+                if text.strip() == "":
+                    # empty line, illegal/incomplete function definition
+                    return None
+            
+            if text.endswith("\\"):
+                text = text[:-1]
+            
+            functionTextList.append(text)
+            
+            if text.endswith(":"):
+                # end of function definition reached
+                functionDefinitionLength = len(functionTextList)
+                
+                # check, if function is decorated with a supported one
+                if startLine > 0:
+                    decoratorLine = self.editor.text(startLine - 1)
+                    if (
+                        "@classmethod" in decoratorLine or
+                        "@staticmethod" in decoratorLine or
+                        "pyqtSlot" in decoratorLine or          # PyQt slot
+                        "Slot" in decoratorLine                 # PySide slot
+                    ):
+                        functionTextList.insert(0, decoratorLine)
+                
+                return "".join(functionTextList), functionDefinitionLength
+        
+        return None
+    
+    #######################################################################
+    ## Methods to generate the docstring when the text cursor is on the
+    ## line after the function definition (e.g. after a triple quote).
+    #######################################################################
+    
+    def __generateDocstringFromBelow(self, cursorPosition):
+        """
+        Private method to generate a docstring when the gicen position is on
+        the line below the end of the definition.
+        
+        @param cursorPosition position of the cursor (line and index)
+        @type tuple of (int, int)
+        @return tuple containing the docstring and a tuple containing the
+            insertion line and index
+        @rtype tuple of (str, tuple(int, int))
+        """
+        functionDefinition = self.__getFunctionDefinitionFromBelow(
+            cursorPosition)
+        if functionDefinition:
+            lineTextToCursor = (
+                self.editor.text(cursorPosition[0])[:cursorPosition[1]]
+            )
+            insertLine = cursorPosition[0]
+            indentation = self.__getIndentationInsertString(functionDefinition)
+            sep = self.editor.getLineSeparator()
+            bodyStart = insertLine
+            
+            docstringList = self.__generateDocstring(
+                '"', functionDefinition, bodyStart
+            )
+            if docstringList:
+                if self.__isTripleQuotesStart(lineTextToCursor):
+                    if self.getDocstringType() == "ericdoc":
+                        docstringList.insert(0, "")
+                    docstringList.append("")
+                else:
+                    if self.getDocstringType() == "ericdoc":
+                        docstringList.insert(0, self.__quote3)
+                    else:
+                        docstringList[0] = self.__quote3 + docstringList[0]
+                    docstringList.append(self.__quote3)
+                docstring = (
+                    "{0}{1}".format(sep, indentation).join(docstringList)
+                )
+                return docstring, cursorPosition
+        
+        return "", (0, 0)
+    
+    def __getFunctionDefinitionFromBelow(self, cursorPosition):
+        """
+        Private method to extract the function definition based on the cursor
+        being placed on the first line after the definition.
+        
+        @param cursorPosition current cursor position (line and column)
+        @type tuple of (int, int)
+        @return text containing the function definition
+        @rtype str
+        """
+        startLine = cursorPosition[0] - 1
+        endLine = startLine - min(startLine, 20)
+        # max. 20 lines of definition allowed
+        isFirstLine = True
+        functionTextList = []
+        
+        for lineNo in range(startLine, endLine, -1):
+            text = self.editor.text(lineNo).rstrip()
+            if isFirstLine:
+                if not text.endswith(":"):
+                    return None
+                isFirstLine = False
+            elif text.endswith(":") or text == "":
+                return None
+            
+            if text.endswith("\\"):
+                text = text[:-1]
+            
+            functionTextList.insert(0, text)
+            
+            if self.isFunctionStart(text):
+                # start of function definition reached
+                # check, if function is decorated with a supported one
+                if lineNo > 0:
+                    decoratorLine = self.editor.text(lineNo - 1)
+                    if (
+                        "@classmethod" in decoratorLine or
+                        "@staticmethod" in decoratorLine or
+                        "pyqtSlot" in decoratorLine or          # PyQt slot
+                        "Slot" in decoratorLine                 # PySide slot
+                    ):
+                        functionTextList.insert(0, decoratorLine)
+                
+                return "".join(functionTextList)
+        
+        return None
+    
+    #######################################################################
+    ## Methods to generate the docstring contents.
+    #######################################################################
+    
+    def __getFunctionBody(self, functionIndent, startLine):
+        """
+        Private method to get the function body.
+        
+        @param functionIndent indentation string of the function definition
+        @type str
+        @param startLine starting line for the extraction process
+        @type int
+        @return text containing the function body
+        @rtype str
+        """
+        bodyList = []
+        
+        for line in range(startLine, self.editor.lines()):
+            text = self.editor.text(line)
+            textIndent = getIndentStr(text)
+            
+            if text.strip() == "":
+                pass
+            elif len(textIndent) <= len(functionIndent):
+                break
+            
+            bodyList.append(text)
+        
+        return "".join(bodyList)
+    
+    def __generateDocstring(self, quote, functionDef, bodyStartLine):
+        """
+        Private method to generate the list of docstring lines.
+        
+        @param quote quote string
+        @type str
+        @param functionDef text containing the function definition
+        @type str
+        @param bodyStartLine starting line of the function body
+        @type int
+        @return list of docstring lines
+        @rtype list of str
+        """
+        quote3 = 3 * quote
+        if quote == '"':
+            quote3replace = 3 * "'"
+        elif quote == "'":
+            quote3replace = 3 * '"'
+        functionInfo = PyFunctionInfo()
+        functionInfo.parseDefinition(functionDef, quote3, quote3replace)
+        
+        if functionInfo.hasInfo:
+            functionBody = self.__getFunctionBody(functionInfo.functionIndent,
+                                                  bodyStartLine)
+            
+            if functionBody:
+                functionInfo.parseBody(functionBody)
+            
+            docstringType = self.getDocstringType()
+            return self._generateDocstringList(functionInfo, docstringType)
+        
+        return []
+
+
+class PyFunctionInfo(FunctionInfo):
+    """
+    Class implementing an object to extract and store function information.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        super(PyFunctionInfo, self).__init__()
+    
+    def __isCharInPairs(self, posChar, pairs):
+        """
+        Private method to test, if the given character position is between
+        pairs of brackets or quotes.
+        
+        @param posChar character position to be tested
+        @type int
+        @param pairs list containing pairs of positions
+        @type list of tuple of (int, int)
+        @return flag indicating the position is in between
+        @rtype bool
+        """
+        for posLeft, posRight in pairs:
+            if posLeft < posChar < posRight:
+                return True
+        
+        return False
+    
+    def __findQuotePosition(self, text):
+        """
+        Private method to find the start and end position of pairs of quotes.
+        
+        @param text text to be parsed
+        @type str
+        @return list of tuple with start and end position of pairs of quotes
+        @rtype list of tuple of (int, int)
+        @exception IndexError raised when a matching close quote is missing
+        """
+        pos = []
+        foundLeftQuote = False
+        
+        for index, character in enumerate(text):
+            if foundLeftQuote is False:
+                if character == "'" or character == '"':
+                    foundLeftQuote = True
+                    quote = character
+                    leftPos = index
+            else:
+                if character == quote and text[index - 1] != "\\":
+                    pos.append((leftPos, index))
+                    foundLeftQuote = False
+        
+        if foundLeftQuote:
+            raise IndexError("No matching close quote at: {0}".format(leftPos))
+        
+        return pos
+    
+    def __findBracketPosition(self, text, bracketLeft, bracketRight, posQuote):
+        """
+        Private method to find the start and end position of pairs of brackets.
+
+        https://stackoverflow.com/questions/29991917/
+        indices-of-matching-parentheses-in-python
+        
+        @param text text to be parsed
+        @type str
+        @param bracketLeft character of the left bracket
+        @type str
+        @param bracketRight character of the right bracket
+        @type str
+        @param posQuote list of tuple with start and end position of pairs
+            of quotes
+        @type list of tuple of (int, int)
+        @return list of tuple with start and end position of pairs of brackets
+        @rtype list of tuple of (int, int)
+        @exception IndexError raised when a closing or opening bracket is
+            missing
+        """
+        pos = []
+        pstack = []
+        
+        for index, character in enumerate(text):
+            if (
+                character == bracketLeft and
+                not self.__isCharInPairs(index, posQuote)
+            ):
+                pstack.append(index)
+            elif (
+                character == bracketRight and
+                not self.__isCharInPairs(index, posQuote)
+            ):
+                if len(pstack) == 0:
+                    raise IndexError(
+                        "No matching closing parens at: {0}".format(index))
+                pos.append((pstack.pop(), index))
+        
+        if len(pstack) > 0:
+            raise IndexError(
+                "No matching opening parens at: {0}".format(pstack.pop()))
+        
+        return pos
+    
+    def __splitArgumentToNameTypeValue(self, argumentsList,
+                                       quote, quoteReplace):
+        """
+        Private method to split some argument text to name, type and value.
+        
+        @param argumentsList list of function argument definitions
+        @type list of str
+        @param quote quote string to be replaced
+        @type str
+        @param quoteReplace quote string to replace the original
+        @type str
+        """
+        for arg in argumentsList:
+            hasType = False
+            hasValue = False
+            
+            colonPosition = arg.find(":")
+            equalPosition = arg.find("=")
+            
+            if equalPosition > -1:
+                hasValue = True
+            
+            if colonPosition > -1:
+                if not hasValue:
+                    hasType = True
+                elif equalPosition > colonPosition:
+                    # exception for def foo(arg1=":")
+                    hasType = True
+            
+            if hasValue and hasType:
+                argName = arg[0:colonPosition].strip()
+                argType = arg[colonPosition + 1:equalPosition].strip()
+                argValue = arg[equalPosition + 1:].strip()
+            elif not hasValue and hasType:
+                argName = arg[0:colonPosition].strip()
+                argType = arg[colonPosition + 1:].strip()
+                argValue = None
+            elif hasValue and not hasType:
+                argName = arg[0:equalPosition].strip()
+                argType = None
+                argValue = arg[equalPosition + 1:].strip()
+            else:
+                argName = arg.strip()
+                argType = None
+                argValue = None
+            if argValue and quote:
+                # sanitize argValue with respect to quotes
+                argValue = argValue.replace(quote, quoteReplace)
+            
+            self.argumentsList.append((argName, argType, argValue))
+    
+    def __splitArgumentsTextToList(self, argumentsText):
+        """
+        Private method to split the given arguments text into a list of
+        arguments.
+        
+        This function uses a comma to separate arguments and ignores a comma in
+        brackets and quotes.
+        
+        @param argumentsText text containing the list of arguments
+        @type str
+        @return list of individual argument texts
+        @rtype list of str
+        """
+        argumentsList = []
+        indexFindStart = 0
+        indexArgStart = 0
+        
+        try:
+            posQuote = self.__findQuotePosition(argumentsText)
+            posRound = self.__findBracketPosition(
+                argumentsText, "(", ")", posQuote)
+            posCurly = self.__findBracketPosition(
+                argumentsText, "{", "}", posQuote)
+            posSquare = self.__findBracketPosition(
+                argumentsText, "[", "]", posQuote)
+        except IndexError:
+            return None
+        
+        while True:
+            posComma = argumentsText.find(",", indexFindStart)
+            
+            if posComma == -1:
+                break
+            
+            indexFindStart = posComma + 1
+            
+            if (
+                self.__isCharInPairs(posComma, posRound) or
+                self.__isCharInPairs(posComma, posCurly) or
+                self.__isCharInPairs(posComma, posSquare) or
+                self.__isCharInPairs(posComma, posQuote)
+            ):
+                continue
+            
+            argumentsList.append(argumentsText[indexArgStart:posComma])
+            indexArgStart = posComma + 1
+        
+        if indexArgStart < len(argumentsText):
+            argumentsList.append(argumentsText[indexArgStart:])
+        
+        return argumentsList
+    
+    def parseDefinition(self, text, quote, quoteReplace):
+        """
+        Public method to parse the function definition text.
+        
+        @param text text containing the function definition
+        @type str
+        @param quote quote string to be replaced
+        @type str
+        @param quoteReplace quote string to replace the original
+        @type str
+        """
+        self.functionIndent = getIndentStr(text)
+        
+        textList = text.splitlines()
+        if textList[0].lstrip().startswith("@"):
+            # first line of function definition is a decorator
+            decorator = textList.pop(0).strip()
+            if decorator == "@staticmethod":
+                self.functionType = "staticmethod"
+            elif decorator == "@classmethod":
+                self.functionType = "classmethod"
+            elif re.match(r"@(PyQt[456]\.)?(QtCore\.)?pyqtSlot", decorator):
+                self.functionType = "qtslot"
+            elif re.match(r"@(PySide[26]\.)?(QtCore\.)?Slot", decorator):
+                self.functionType = "qtslot"
+        
+        text = "".join(textList).strip()
+        
+        if text.startswith("async def "):
+            self.isAsync = True
+        
+        returnType = re.search(r"->[ ]*([a-zA-Z0-9_,()\[\] ]*):$", text)
+        if returnType:
+            self.returnTypeAnnotated = returnType.group(1)
+            textEnd = text.rfind(returnType.group(0))
+        else:
+            self.returnTypeAnnotated = None
+            textEnd = len(text)
+        
+        positionArgumentsStart = text.find("(") + 1
+        positionArgumentsEnd = text.rfind(")", positionArgumentsStart,
+                                          textEnd)
+        
+        self.argumentsText = text[positionArgumentsStart:positionArgumentsEnd]
+        
+        argumentsList = self.__splitArgumentsTextToList(self.argumentsText)
+        if argumentsList is not None:
+            self.hasInfo = True
+            self.__splitArgumentToNameTypeValue(
+                argumentsList, quote, quoteReplace)
+        
+        functionName = (
+            text[:positionArgumentsStart - 1]
+            .replace("async def ", "")
+            .replace("def ", "")
+        )
+        if functionName == "__init__":
+            self.functionType = "constructor"
+        elif functionName.startswith("__"):
+            if functionName.endswith("__"):
+                self.visibility = "special"
+            else:
+                self.visibility = "private"
+        elif functionName.startswith("_"):
+            self.visibility = "protected"
+        else:
+            self.visibility = "public"
+    
+    def parseBody(self, text):
+        """
+        Public method to parse the function body text.
+        
+        @param text function body text
+        @type str
+        """
+        raiseRe = re.findall(r"[ \t]raise ([a-zA-Z0-9_]*)", text)
+        if len(raiseRe) > 0:
+            self.raiseList = [x.strip() for x in raiseRe]
+            # remove duplicates from list while keeping it in the order
+            # stackoverflow.com/questions/7961363/removing-duplicates-in-lists
+            self.raiseList = list(collections.OrderedDict.fromkeys(
+                self.raiseList))
+
+        yieldRe = re.search(r"[ \t]yield ", text)
+        if yieldRe:
+            self.hasYield = True
+
+        # get return value
+        returnPattern = r"return |yield "
+        lineList = text.splitlines()
+        returnFound = False
+        returnTmpLine = ""
+
+        for line in lineList:
+            line = line.strip()
+
+            if returnFound is False:
+                if re.match(returnPattern, line):
+                    returnFound = True
+
+            if returnFound:
+                returnTmpLine += line
+                # check the integrity of line
+                try:
+                    quotePos = self.__findQuotePosition(returnTmpLine)
+
+                    if returnTmpLine.endswith("\\"):
+                        returnTmpLine = returnTmpLine[:-1]
+                        continue
+
+                    self.__findBracketPosition(
+                        returnTmpLine, "(", ")", quotePos)
+                    self.__findBracketPosition(
+                        returnTmpLine, "{", "}", quotePos)
+                    self.__findBracketPosition(
+                        returnTmpLine, "[", "]", quotePos)
+                except IndexError:
+                    continue
+
+                returnValue = re.sub(returnPattern, "", returnTmpLine)
+                self.returnValueInBody.append(returnValue)
+
+                returnFound = False
+                returnTmpLine = ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/QScintilla/DocstringGenerator/SphinxdocGenerator.py	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the docstring generator for the 'sphinxdoc' style.
+"""
+
+
+def generateSphinxDoc(functionInfo):
+    """
+    Function to generate the docstring line list iaw. Sphinx documentation
+    style.
+    
+    Note: Text is created with DESCRIPTION placeholders for descriptions and
+    TYPE placeholders for type information
+    
+    @param functionInfo object containing the function information to base
+        the docstring on
+    @type FunctionInfo
+    @return list of docstring lines
+    @rtype str
+    """
+    lines = []
+    
+    # function description
+    lines.append("DESCRIPTION")
+    
+    # remove 'self', 'this' or 'cls' from arguments list
+    if (
+        len(functionInfo.argumentsList) > 0 and
+        functionInfo.argumentsList[0][0] in ("self", "cls", "this")
+    ):
+        del functionInfo.argumentsList[0]
+    
+    # add an empty line if there is one of the other sections
+    if (
+        functionInfo.argumentsList or
+        functionInfo.hasYield or
+        functionInfo.returnTypeAnnotated or
+        functionInfo.returnValueInBody or
+        functionInfo.raiseList
+    ):
+        lines.append("")
+    
+    # add the parameters section
+    for argName, argType, argValue in functionInfo.argumentsList:
+        argLine = ":param {0}: DESCRIPTION".format(argName)
+        if argValue:
+            argLine += ", defaults to {0}".format(argValue)
+        lines.append(argLine)
+        
+        argLine = ":type {0}: ".format(argName)
+        if argType:
+            argLine += "{0}".format(argType)
+        else:
+            argLine += "TYPE"
+        if argValue:
+            argLine += ", optional"
+        lines.append(argLine)
+    
+    # add an exceptions section, if function raises something
+    if functionInfo.raiseList:
+        for exc in sorted(functionInfo.raiseList):
+            lines.append(":raises {0}: DESCRIPTION".format(exc))
+    
+    # add return section
+    if functionInfo.hasYield or functionInfo.returnValueInBody:
+        if functionInfo.hasYield:
+            lines.append(":yield: DESCRIPTION")
+        else:
+            lines.append(":return: DESCRIPTION")
+        if functionInfo.returnTypeAnnotated:
+            lines.append(":rtype: {0}".format(
+                functionInfo.returnTypeAnnotated))
+        else:
+            lines.append(":rtype: TYPE")
+    
+    lines.append("")
+    
+    return lines
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/QScintilla/DocstringGenerator/__init__.py	Fri Jan 22 16:48:43 2021 +0100
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package containing the documentation string generator tool.
+"""
+
+from PyQt5.QtCore import QCoreApplication
+
+
+def getDocstringGenerator(editor):
+    """
+    Function to get a docstring generator for the given editor.
+    
+    @param editor reference to the editor to create a docstring generator for
+    @type Editor
+    @return reference to the created docstring generator
+    @rtype BaseDocstringGenerator
+    """
+    if (
+        editor.isPyFile() or
+        editor.getFileType() in ("Python", "Python3", "MicroPython")
+    ):
+        from .PyDocstringGenerator import PyDocstringGenerator
+        return PyDocstringGenerator(editor)
+    else:
+        from .BaseDocstringGenerator import BaseDocstringGenerator
+        return BaseDocstringGenerator(editor)
+
+
+def getSupportedDocstringTypes():
+    """
+    Function to get the supported docstring types/styles.
+    
+    @return list of tuples with supported docstring type/style and the
+        corresponding display string
+    @rtype tuple of (str, str)
+    """
+    return [
+        ("ericdoc",
+         QCoreApplication.translate("DocstringGenerator", "Eric")),
+        ("numpydoc",
+         QCoreApplication.translate("DocstringGenerator", "NumPy")),
+        ("googledoc",
+         QCoreApplication.translate("DocstringGenerator", "Google")),
+        ("sphinxdoc",
+         QCoreApplication.translate("DocstringGenerator", "Sphinx")),
+    ]
--- a/eric6/QScintilla/Editor.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/QScintilla/Editor.py	Fri Jan 22 16:48:43 2021 +0100
@@ -256,6 +256,8 @@
         self.__lastEditPosition = None
         self.__annotationLines = 0
         
+        self.__docstringGenerator = None
+        
         # list of clones
         self.__clones = []
         
@@ -844,6 +846,10 @@
         self.menuActs["SpellCheckLanguages"] = self.menu.addMenu(
             self.spellLanguagesMenu)
         self.menu.addSeparator()
+        self.menuActs["Docstring"] = self.menu.addAction(
+            self.tr("Insert Docstring"),
+            self.__insertDocstring)
+        self.menu.addSeparator()
         self.menu.addAction(
             self.tr('Shorten empty lines'), self.shortenEmptyLines)
         self.menu.addSeparator()
@@ -4822,7 +4828,9 @@
             Preferences.getDocuViewer("ShowInfoOnOpenParenthesis")
         ):
             self.vm.showEditorInfo(self)
-            
+        
+        self.__delayedDocstringMenuPopup(self.getCursorPosition())
+        
         if self.isListActive():
             if self.__isStartChar(char):
                 self.cancelList()
@@ -5492,6 +5500,11 @@
         
         self.menuActs["Tools"].setEnabled(not self.toolsMenu.isEmpty())
         
+        cline = self.getCursorPosition()[0]
+        line = self.text(cline)
+        self.menuActs["Docstring"].setEnabled(
+            self.getDocstringGenerator().isFunctionStart(line))
+        
         self.showMenu.emit("Main", self.menu, self)
         
     def __showContextMenuAutocompletion(self):
@@ -7094,6 +7107,17 @@
         """
         self.vm.eventFilter(self, event)
         super(Editor, self).mousePressEvent(event)
+    
+    def mouseDoubleClickEvent(self, evt):
+        """
+        Protected method to handle mouse double click events.
+        
+        @param evt reference to the mouse event
+        @type QMouseEvent
+        """
+        super(Editor, self).mouseDoubleClickEvent(evt)
+        
+        self.mouseDoubleClick.emit(evt.pos(), evt.buttons())
         
     def wheelEvent(self, evt):
         """
@@ -8621,13 +8645,79 @@
         
         return None
     
-    def mouseDoubleClickEvent(self, evt):
-        """
-        Protected method to handle mouse double click events.
-        
-        @param evt reference to the mouse event
-        @type QMouseEvent
-        """
-        super(Editor, self).mouseDoubleClickEvent(evt)
-        
-        self.mouseDoubleClick.emit(evt.pos(), evt.buttons())
+    #######################################################################
+    ## Methods implementing the docstring generator interface
+    #######################################################################
+    
+    def getDocstringGenerator(self):
+        """
+        Public method to get a reference to the docstring generator.
+        
+        @return reference to the docstring generator
+        @rtype BaseDocstringGenerator
+        """
+        if self.__docstringGenerator is None:
+            from . import DocstringGenerator
+            self.__docstringGenerator = (
+                DocstringGenerator.getDocstringGenerator(self)
+            )
+        
+        return self.__docstringGenerator
+    
+    @pyqtSlot()
+    def __insertDocstring(self):
+        """
+        Private slot to generate and insert a docstring for the function under
+        the cursor.
+        """
+        generator = self.getDocstringGenerator()
+        generator.insertDocstring(self.getCursorPosition(), fromStart=True)
+    
+    def __delayedDocstringMenuPopup(self, cursorPosition):
+        """
+        Private method to test, if the user might want to insert a docstring.
+        
+        @param cursorPosition current cursor position (line and column)
+        @type tuple of (int, int)
+        """
+        if self.getDocstringGenerator().isDocstringIntro(cursorPosition):
+            lineText = self.text(cursorPosition[0])
+            
+            QTimer.singleShot(
+                300,
+                lambda: self.__popupDocstringMenu(lineText, cursorPosition)
+            )
+    
+    def __popupDocstringMenu(self, lastLineText, lastCursorPosition):
+        """
+        Private slot to pop up a menu asking the user, if a docstring should be
+        inserted.
+        
+        @param lastLineText line contents when the delay timer was started
+        @type str
+        @param lastCursorPosition position of the cursor when the delay timer
+            was started (line and index)
+        @type tuple of (int, int)
+        """
+        cursorPosition = self.getCursorPosition()
+        if lastCursorPosition != cursorPosition:
+            return
+        
+        if self.text(cursorPosition[0]) != lastLineText:
+            return
+        
+        generator = self.getDocstringGenerator()
+        if generator.hasFunctionDefinition(cursorPosition):
+            from .DocstringGenerator.BaseDocstringGenerator import (
+                DocstringMenuForEnterOnly
+            )
+            docstringMenu = DocstringMenuForEnterOnly(self)
+            act = docstringMenu.addAction(
+                UI.PixmapCache.getIcon("fileText"),
+                self.tr("Generate Docstring"),
+                lambda: generator.insertDocstring(cursorPosition,
+                                                  fromStart=False)
+            )
+            docstringMenu.setActiveAction(act)
+            docstringMenu.popup(
+                self.mapToGlobal(self.getGlobalCursorPosition()))
--- a/eric6/QScintilla/QsciScintillaCompat.py	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/QScintilla/QsciScintillaCompat.py	Fri Jan 22 16:48:43 2021 +0100
@@ -1534,7 +1534,7 @@
         self.updateUserListSize()
     
     ###########################################################################
-    ## work-arounds for buggy behavior
+    ## work-around for buggy behavior
     ###########################################################################
     
     def updateUserListSize(self):
@@ -1722,6 +1722,21 @@
             """
             self.SendScintilla(QsciScintilla.SCI_SETWRAPSTARTINDENT, indent)
     
+    if "getGlobalCursorPosition" not in QsciScintilla.__dict__:
+        def getGlobalCursorPosition(self):
+            """
+            Public method to determine the point of the cursor.
+            
+            @return point of the cursor
+            @rtype QPoint
+            """
+            pos = self.currentPosition()
+            x = self.SendScintilla(QsciScintilla.SCI_POINTXFROMPOSITION,
+                                   0, pos)
+            y = self.SendScintilla(QsciScintilla.SCI_POINTYFROMPOSITION,
+                                   0, pos)
+            return QPoint(x, y)
+    
 ##    #########################################################################
 ##    ## Methods below have been added to QScintilla starting with version 2.x.
 ##    #########################################################################
--- a/eric6/i18n/eric6_cs.ts	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/i18n/eric6_cs.ts	Fri Jan 22 16:48:43 2021 +0100
@@ -8795,7 +8795,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="83"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="86"/>
         <source>docstring summary does not end with a period</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8830,7 +8830,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="125"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="128"/>
         <source>docstring summary is not followed by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8840,92 +8840,92 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="70"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="73"/>
         <source>private function/method is missing a docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="73"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="76"/>
         <source>private class is missing a docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="77"/>
-        <source>leading quotes of docstring not on separate line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="80"/>
+        <source>leading quotes of docstring not on separate line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="83"/>
         <source>trailing quotes of docstring not on separate line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="87"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="90"/>
         <source>docstring does not contain a @return line but function/method returns something</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="91"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="94"/>
         <source>docstring contains a @return line but function/method doesn&apos;t return anything</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="103"/>
-        <source>docstring does not contain enough @param/@keyparam lines</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="106"/>
-        <source>docstring contains too many @param/@keyparam lines</source>
+        <source>docstring does not contain enough @param/@keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="109"/>
-        <source>keyword only arguments must be documented with @keyparam lines</source>
+        <source>docstring contains too many @param/@keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="112"/>
-        <source>order of @param/@keyparam lines does not match the function/method signature</source>
+        <source>keyword only arguments must be documented with @keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="115"/>
+        <source>order of @param/@keyparam lines does not match the function/method signature</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="118"/>
         <source>class docstring is preceded by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="117"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="120"/>
         <source>class docstring is followed by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="119"/>
-        <source>function/method docstring is preceded by a blank line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="122"/>
+        <source>function/method docstring is preceded by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="125"/>
         <source>function/method docstring is followed by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="128"/>
-        <source>last paragraph of docstring is followed by a blank line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="131"/>
+        <source>last paragraph of docstring is followed by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="134"/>
         <source>docstring does not contain a @exception line but function/method raises an exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="135"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="138"/>
         <source>docstring contains a @exception line but function/method doesn&apos;t raise an exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="158"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="161"/>
         <source>{0}: {1}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8935,42 +8935,42 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="85"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="88"/>
         <source>docstring summary does not start with &apos;{0}&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="139"/>
-        <source>raised exception &apos;{0}&apos; is not documented in docstring</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="142"/>
-        <source>documented exception &apos;{0}&apos; is not raised</source>
+        <source>raised exception &apos;{0}&apos; is not documented in docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="145"/>
-        <source>docstring does not contain a @signal line but class defines signals</source>
+        <source>documented exception &apos;{0}&apos; is not raised</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="148"/>
-        <source>docstring contains a @signal line but class doesn&apos;t define signals</source>
+        <source>docstring does not contain a @signal line but class defines signals</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="151"/>
-        <source>defined signal &apos;{0}&apos; is not documented in docstring</source>
+        <source>docstring contains a @signal line but class doesn&apos;t define signals</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="154"/>
+        <source>defined signal &apos;{0}&apos; is not documented in docstring</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="157"/>
         <source>documented signal &apos;{0}&apos; is not defined</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="75"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="78"/>
         <source>class docstring is still a default string</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8985,15 +8985,43 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="95"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="98"/>
         <source>docstring does not contain a @yield line but function/method yields something</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="99"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="102"/>
         <source>docstring contains a @yield line but function/method doesn&apos;t yield anything</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="70"/>
+        <source>function docstring still contains some placeholders</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>DocstringGenerator</name>
+    <message>
+        <location filename="../QScintilla/DocstringGenerator/__init__.py" line="42"/>
+        <source>Eric</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/DocstringGenerator/__init__.py" line="44"/>
+        <source>NumPy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/DocstringGenerator/__init__.py" line="46"/>
+        <source>Google</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/DocstringGenerator/__init__.py" line="48"/>
+        <source>Sphinx</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DotDesktopListSelectionDialog</name>
@@ -11322,812 +11350,812 @@
 <context>
     <name>Editor</name>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3110"/>
+        <location filename="../QScintilla/Editor.py" line="3116"/>
         <source>Open File</source>
         <translation>Otevřít soubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="783"/>
+        <location filename="../QScintilla/Editor.py" line="785"/>
         <source>Undo</source>
         <translation>Vrátit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="786"/>
+        <location filename="../QScintilla/Editor.py" line="788"/>
         <source>Redo</source>
         <translation>Znovu použít</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="789"/>
+        <location filename="../QScintilla/Editor.py" line="791"/>
         <source>Revert to last saved state</source>
         <translation>Vrátit k poslednímu uloženému stavu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="793"/>
+        <location filename="../QScintilla/Editor.py" line="795"/>
         <source>Cut</source>
         <translation>Vyjmout</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="796"/>
+        <location filename="../QScintilla/Editor.py" line="798"/>
         <source>Copy</source>
         <translation>Kopírovat</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="799"/>
+        <location filename="../QScintilla/Editor.py" line="801"/>
         <source>Paste</source>
         <translation>Vložit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="807"/>
+        <location filename="../QScintilla/Editor.py" line="809"/>
         <source>Indent</source>
         <translation>Odsadit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="810"/>
+        <location filename="../QScintilla/Editor.py" line="812"/>
         <source>Unindent</source>
         <translation>Zrušit odsazení</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="813"/>
+        <location filename="../QScintilla/Editor.py" line="815"/>
         <source>Comment</source>
         <translation>Vytvořit komentář</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="816"/>
+        <location filename="../QScintilla/Editor.py" line="818"/>
         <source>Uncomment</source>
         <translation>Zrušit komentář</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="819"/>
+        <location filename="../QScintilla/Editor.py" line="821"/>
         <source>Stream Comment</source>
         <translation>Proudový komentář</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="822"/>
+        <location filename="../QScintilla/Editor.py" line="824"/>
         <source>Box Comment</source>
         <translation>Obdélníkový komentář</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="826"/>
-        <source>Select to brace</source>
-        <translation>Vybrat až po závorku</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="828"/>
+        <source>Select to brace</source>
+        <translation>Vybrat až po závorku</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="830"/>
         <source>Select all</source>
         <translation>Vybrat vše</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="829"/>
+        <location filename="../QScintilla/Editor.py" line="831"/>
         <source>Deselect all</source>
         <translation>Zrušit celý výběr</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="847"/>
+        <location filename="../QScintilla/Editor.py" line="853"/>
         <source>Shorten empty lines</source>
         <translation>Zkrátit prázdné řádky</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="854"/>
+        <location filename="../QScintilla/Editor.py" line="860"/>
         <source>Use Monospaced Font</source>
         <translation>Použít neporoporcionální font</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="859"/>
+        <location filename="../QScintilla/Editor.py" line="865"/>
         <source>Autosave enabled</source>
         <translation>Zapnout autosave</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="902"/>
-        <source>Close</source>
-        <translation>Zavřít</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="908"/>
+        <source>Close</source>
+        <translation>Zavřít</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="914"/>
         <source>Save</source>
         <translation>Uložit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="911"/>
+        <location filename="../QScintilla/Editor.py" line="917"/>
         <source>Save As...</source>
         <translation>Uložit jako...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="927"/>
+        <location filename="../QScintilla/Editor.py" line="933"/>
         <source>Print</source>
         <translation>Tisk</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="956"/>
+        <location filename="../QScintilla/Editor.py" line="962"/>
         <source>Complete from Document</source>
         <translation type="unfinished">z dokumentu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="958"/>
+        <location filename="../QScintilla/Editor.py" line="964"/>
         <source>Complete from APIs</source>
         <translation type="unfinished">z API</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="960"/>
+        <location filename="../QScintilla/Editor.py" line="966"/>
         <source>Complete from Document and APIs</source>
         <translation type="unfinished">z dokumentu a API</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="974"/>
+        <location filename="../QScintilla/Editor.py" line="980"/>
         <source>Check</source>
         <translation>Zkontrolovat</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="994"/>
+        <location filename="../QScintilla/Editor.py" line="1000"/>
         <source>Show</source>
         <translation>Zobrazit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="996"/>
-        <source>Code metrics...</source>
-        <translation>Metrika kódu...</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="997"/>
-        <source>Code coverage...</source>
-        <translation>Pokrytí kódu...</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="999"/>
-        <source>Show code coverage annotations</source>
-        <translation>Zobrazit poznámky pokrytí kódu</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="1002"/>
-        <source>Hide code coverage annotations</source>
-        <translation>Skrýt poznámky pokrytí kódu</translation>
+        <source>Code metrics...</source>
+        <translation>Metrika kódu...</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1003"/>
+        <source>Code coverage...</source>
+        <translation>Pokrytí kódu...</translation>
     </message>
     <message>
         <location filename="../QScintilla/Editor.py" line="1005"/>
+        <source>Show code coverage annotations</source>
+        <translation>Zobrazit poznámky pokrytí kódu</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1008"/>
+        <source>Hide code coverage annotations</source>
+        <translation>Skrýt poznámky pokrytí kódu</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1011"/>
         <source>Profile data...</source>
         <translation>Profilovat data...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1018"/>
-        <source>Diagrams</source>
-        <translation>Diagramy</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1020"/>
-        <source>Class Diagram...</source>
-        <translation>Diagram třídy...</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1022"/>
-        <source>Package Diagram...</source>
-        <translation>Diagram balíčku...</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="1024"/>
-        <source>Imports Diagram...</source>
-        <translation>Diagram importů...</translation>
+        <source>Diagrams</source>
+        <translation>Diagramy</translation>
     </message>
     <message>
         <location filename="../QScintilla/Editor.py" line="1026"/>
+        <source>Class Diagram...</source>
+        <translation>Diagram třídy...</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1028"/>
+        <source>Package Diagram...</source>
+        <translation>Diagram balíčku...</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1030"/>
+        <source>Imports Diagram...</source>
+        <translation>Diagram importů...</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1032"/>
         <source>Application Diagram...</source>
         <translation>Diagram aplikace...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1044"/>
+        <location filename="../QScintilla/Editor.py" line="1050"/>
         <source>Languages</source>
         <translation>Jazyky</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1177"/>
+        <location filename="../QScintilla/Editor.py" line="1183"/>
         <source>No Language</source>
         <translation>Žádný jazyk</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1224"/>
-        <source>Toggle bookmark</source>
-        <translation>Přepnout záložku</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1226"/>
-        <source>Next bookmark</source>
-        <translation>Následující záložka</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1228"/>
-        <source>Previous bookmark</source>
-        <translation>Předchozí záložka</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="1230"/>
+        <source>Toggle bookmark</source>
+        <translation>Přepnout záložku</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1232"/>
+        <source>Next bookmark</source>
+        <translation>Následující záložka</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1234"/>
+        <source>Previous bookmark</source>
+        <translation>Předchozí záložka</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1236"/>
         <source>Clear all bookmarks</source>
         <translation>Zrušit všechny záložky</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1304"/>
+        <location filename="../QScintilla/Editor.py" line="1310"/>
         <source>Goto syntax error</source>
         <translation>Jít na chybu syntaxe</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1308"/>
+        <location filename="../QScintilla/Editor.py" line="1314"/>
         <source>Show syntax error message</source>
         <translation>Zobrazit hlášení syntaktické chyby</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1313"/>
+        <location filename="../QScintilla/Editor.py" line="1319"/>
         <source>Clear syntax error</source>
         <translation>Zrušit chybu syntaxe</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1239"/>
+        <location filename="../QScintilla/Editor.py" line="1245"/>
         <source>Toggle breakpoint</source>
         <translation>Přepnout breakpoint</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1241"/>
+        <location filename="../QScintilla/Editor.py" line="1247"/>
         <source>Toggle temporary breakpoint</source>
         <translation>Přepnout dočasný breakpoint</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1244"/>
+        <location filename="../QScintilla/Editor.py" line="1250"/>
         <source>Edit breakpoint...</source>
         <translation>Editovat breakpoint...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5613"/>
+        <location filename="../QScintilla/Editor.py" line="5626"/>
         <source>Enable breakpoint</source>
         <translation>Aktivovat breakpoint</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1249"/>
+        <location filename="../QScintilla/Editor.py" line="1255"/>
         <source>Next breakpoint</source>
         <translation>Následující breakpoint</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1251"/>
+        <location filename="../QScintilla/Editor.py" line="1257"/>
         <source>Previous breakpoint</source>
         <translation>Předchozí breakpoint</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1256"/>
+        <location filename="../QScintilla/Editor.py" line="1262"/>
         <source>Clear all breakpoints</source>
         <translation>Zrušit všechny breakpointy</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1335"/>
+        <location filename="../QScintilla/Editor.py" line="1341"/>
         <source>Next uncovered line</source>
         <translation>Následující odkrytá řádka</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1339"/>
+        <location filename="../QScintilla/Editor.py" line="1345"/>
         <source>Previous uncovered line</source>
         <translation>Předchozí odkrytá řádka</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1344"/>
+        <location filename="../QScintilla/Editor.py" line="1350"/>
         <source>Next task</source>
         <translation>Následující úloha</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1348"/>
+        <location filename="../QScintilla/Editor.py" line="1354"/>
         <source>Previous task</source>
         <translation>Předchozí úloha</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1965"/>
+        <location filename="../QScintilla/Editor.py" line="1971"/>
         <source>Modification of Read Only file</source>
         <translation>Modifikace souboru otevřeného jen pro čtení</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1965"/>
+        <location filename="../QScintilla/Editor.py" line="1971"/>
         <source>You are attempting to change a read only file. Please save to a different file first.</source>
         <translation>Pokoušíte se změnit soubor, který je otevřen jen pro čtení. Prosím, uložte jej nejdříve do jiného souboru.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2675"/>
+        <location filename="../QScintilla/Editor.py" line="2681"/>
         <source>Printing...</source>
         <translation>Tisk...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2692"/>
+        <location filename="../QScintilla/Editor.py" line="2698"/>
         <source>Printing completed</source>
         <translation>Tisk je hotov</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2694"/>
+        <location filename="../QScintilla/Editor.py" line="2700"/>
         <source>Error while printing</source>
         <translation>Chyba během tisku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2697"/>
+        <location filename="../QScintilla/Editor.py" line="2703"/>
         <source>Printing aborted</source>
         <translation>Tisk byl zrušen</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3297"/>
+        <location filename="../QScintilla/Editor.py" line="3303"/>
         <source>Save File</source>
         <translation>Uložit soubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3052"/>
+        <location filename="../QScintilla/Editor.py" line="3058"/>
         <source>File Modified</source>
         <translation>Soubor je modifikován</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4775"/>
+        <location filename="../QScintilla/Editor.py" line="4781"/>
         <source>Autocompletion</source>
         <translation>Autodoplňování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4775"/>
+        <location filename="../QScintilla/Editor.py" line="4781"/>
         <source>Autocompletion is not available because there is no autocompletion source set.</source>
         <translation>Autodoplňování není dostupné protože zdrojová část autodoplňování nebyla nalezena.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5616"/>
+        <location filename="../QScintilla/Editor.py" line="5629"/>
         <source>Disable breakpoint</source>
         <translation>Deaktivovat breakpoint</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5991"/>
+        <location filename="../QScintilla/Editor.py" line="6004"/>
         <source>Code Coverage</source>
         <translation>Pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5991"/>
+        <location filename="../QScintilla/Editor.py" line="6004"/>
         <source>Please select a coverage file</source>
         <translation>Prosím, vyberte soubor s pokrytím kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6054"/>
+        <location filename="../QScintilla/Editor.py" line="6067"/>
         <source>Show Code Coverage Annotations</source>
         <translation>Zobrazit poznámky pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6047"/>
+        <location filename="../QScintilla/Editor.py" line="6060"/>
         <source>All lines have been covered.</source>
         <translation>Všechny řádky byly pokryty.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6054"/>
+        <location filename="../QScintilla/Editor.py" line="6067"/>
         <source>There is no coverage file available.</source>
         <translation>Soubor s pokrytím není dostupný.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6171"/>
+        <location filename="../QScintilla/Editor.py" line="6184"/>
         <source>Profile Data</source>
         <translation>Profilovat data</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6171"/>
+        <location filename="../QScintilla/Editor.py" line="6184"/>
         <source>Please select a profile file</source>
         <translation>Prosím, vyberte soubor s profilem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6333"/>
+        <location filename="../QScintilla/Editor.py" line="6346"/>
         <source>Syntax Error</source>
         <translation>Chyba syntaxe</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6333"/>
+        <location filename="../QScintilla/Editor.py" line="6346"/>
         <source>No syntax error message available.</source>
         <translation>Hlášení syntaktické chyby není dostupné.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6722"/>
+        <location filename="../QScintilla/Editor.py" line="6735"/>
         <source>Macro Name</source>
         <translation>Název makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6722"/>
+        <location filename="../QScintilla/Editor.py" line="6735"/>
         <source>Select a macro name:</source>
         <translation>Vyberte název makra:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6750"/>
+        <location filename="../QScintilla/Editor.py" line="6763"/>
         <source>Load macro file</source>
         <translation>Načíst soubor makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6792"/>
+        <location filename="../QScintilla/Editor.py" line="6805"/>
         <source>Macro files (*.macro)</source>
         <translation>Macro soubory (*.macro)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6772"/>
+        <location filename="../QScintilla/Editor.py" line="6785"/>
         <source>Error loading macro</source>
         <translation>Chyba při načítání makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6792"/>
+        <location filename="../QScintilla/Editor.py" line="6805"/>
         <source>Save macro file</source>
         <translation>Uložit soubor s makrem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6809"/>
+        <location filename="../QScintilla/Editor.py" line="6822"/>
         <source>Save macro</source>
         <translation>Uložit makro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6824"/>
-        <source>Error saving macro</source>
-        <translation>Chyba při ukládání makra</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="6837"/>
-        <source>Start Macro Recording</source>
-        <translation>Spustit záznam makra</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="6837"/>
+        <source>Error saving macro</source>
+        <translation>Chyba při ukládání makra</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="6850"/>
+        <source>Start Macro Recording</source>
+        <translation>Spustit záznam makra</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="6850"/>
         <source>Macro recording is already active. Start new?</source>
         <translation>Nahrávání makra již probíhá. Spustit nové?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6863"/>
+        <location filename="../QScintilla/Editor.py" line="6876"/>
         <source>Macro Recording</source>
         <translation>Záznam makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6863"/>
+        <location filename="../QScintilla/Editor.py" line="6876"/>
         <source>Enter name of the macro:</source>
         <translation>Vložte název makra:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7033"/>
+        <location filename="../QScintilla/Editor.py" line="7046"/>
         <source>File changed</source>
         <translation>Soubor změněn</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7354"/>
+        <location filename="../QScintilla/Editor.py" line="7378"/>
         <source>Drop Error</source>
         <translation>Zahodit chybu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7375"/>
+        <location filename="../QScintilla/Editor.py" line="7399"/>
         <source>Resources</source>
         <translation>Zdroje</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7377"/>
+        <location filename="../QScintilla/Editor.py" line="7401"/>
         <source>Add file...</source>
         <translation>Přidat soubor...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7379"/>
+        <location filename="../QScintilla/Editor.py" line="7403"/>
         <source>Add files...</source>
         <translation>Přidat soubory...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7381"/>
+        <location filename="../QScintilla/Editor.py" line="7405"/>
         <source>Add aliased file...</source>
         <translation>Přidat zástupce souboru...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7384"/>
+        <location filename="../QScintilla/Editor.py" line="7408"/>
         <source>Add localized resource...</source>
         <translation>Přidat lokalizované resource...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7388"/>
+        <location filename="../QScintilla/Editor.py" line="7412"/>
         <source>Add resource frame</source>
         <translation>Přidat resource frame</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7407"/>
+        <location filename="../QScintilla/Editor.py" line="7431"/>
         <source>Add file resource</source>
         <translation>Přidat soubor resource</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7423"/>
+        <location filename="../QScintilla/Editor.py" line="7447"/>
         <source>Add file resources</source>
         <translation>Přidat soubory resource</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7450"/>
+        <location filename="../QScintilla/Editor.py" line="7474"/>
         <source>Add aliased file resource</source>
         <translation>Přidat zástupce souboru resource</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7516"/>
+        <location filename="../QScintilla/Editor.py" line="7540"/>
         <source>Package Diagram</source>
         <translation>Diagram balíčku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7516"/>
+        <location filename="../QScintilla/Editor.py" line="7540"/>
         <source>Include class attributes?</source>
         <translation>Včetně atributů třídy?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7552"/>
+        <location filename="../QScintilla/Editor.py" line="7576"/>
         <source>Application Diagram</source>
         <translation>Diagram aplikace</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7552"/>
+        <location filename="../QScintilla/Editor.py" line="7576"/>
         <source>Include module names?</source>
         <translation>Včetně jmen modulů?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1202"/>
+        <location filename="../QScintilla/Editor.py" line="1208"/>
         <source>Export as</source>
         <translation>Exportovat jako</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1398"/>
+        <location filename="../QScintilla/Editor.py" line="1404"/>
         <source>Export source</source>
         <translation>Export zdroj</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1398"/>
+        <location filename="../QScintilla/Editor.py" line="1404"/>
         <source>No export format given. Aborting...</source>
         <translation>Nebyl zadán forám exportu. Zrušeno....</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7538"/>
+        <location filename="../QScintilla/Editor.py" line="7562"/>
         <source>Imports Diagram</source>
         <translation>Importovat diagram</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7538"/>
+        <location filename="../QScintilla/Editor.py" line="7562"/>
         <source>Include imports from external modules?</source>
         <translation>Zahrnout importy z externích modulů?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="878"/>
+        <location filename="../QScintilla/Editor.py" line="884"/>
         <source>Calltip</source>
         <translation>Rychlé tipy</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="924"/>
+        <location filename="../QScintilla/Editor.py" line="930"/>
         <source>Print Preview</source>
         <translation>Náhled tisku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="468"/>
+        <location filename="../QScintilla/Editor.py" line="470"/>
         <source>&lt;b&gt;A Source Editor Window&lt;/b&gt;&lt;p&gt;This window is used to display and edit a source file.  You can open as many of these as you like. The name of the file is displayed in the window&apos;s titlebar.&lt;/p&gt;&lt;p&gt;In order to set breakpoints just click in the space between the line numbers and the fold markers. Via the context menu of the margins they may be edited.&lt;/p&gt;&lt;p&gt;In order to set bookmarks just Shift click in the space between the line numbers and the fold markers.&lt;/p&gt;&lt;p&gt;These actions can be reversed via the context menu.&lt;/p&gt;&lt;p&gt;Ctrl clicking on a syntax error marker shows some info about this error.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Okno editoru zdrojového kódu&lt;/b&gt;&lt;p&gt;V tomto okně se zobrazuje a edituje soubor se zdrojovým kódem. Můžete otevřít oken podle libosti. Jméno souboru se zobrazuje v titlebaru okna.&lt;/p&gt;&lt;p&gt;Kliknutím do prostoru mezi čísly řádku a značkami skládání nastavíte breakpoint. Přes kontextové menu je pak lze editovat.&lt;/p&gt;&lt;p&gt;Záložka se vkládá kliknutím na stejné místo se stisknutou klávesou Shift.&lt;/p&gt;&lt;p&gt;Tyto akce mohou být navráceny zpět i opětovným kliknutím nebo přes kontextové menu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="863"/>
+        <location filename="../QScintilla/Editor.py" line="869"/>
         <source>Typing aids enabled</source>
         <translation>Pomůcky při psaní zapnuty</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1134"/>
+        <location filename="../QScintilla/Editor.py" line="1140"/>
         <source>End-of-Line Type</source>
         <translation>Typ Konec-řádku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1138"/>
+        <location filename="../QScintilla/Editor.py" line="1144"/>
         <source>Unix</source>
         <translation>Unix</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1145"/>
+        <location filename="../QScintilla/Editor.py" line="1151"/>
         <source>Windows</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1152"/>
+        <location filename="../QScintilla/Editor.py" line="1158"/>
         <source>Macintosh</source>
         <translation>Macintosh</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1093"/>
+        <location filename="../QScintilla/Editor.py" line="1099"/>
         <source>Encodings</source>
         <translation>Kódování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1073"/>
+        <location filename="../QScintilla/Editor.py" line="1079"/>
         <source>Guessed</source>
         <translation>Odhadem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1413"/>
+        <location filename="../QScintilla/Editor.py" line="1419"/>
         <source>Alternatives</source>
         <translation>Alternativy</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1429"/>
+        <location filename="../QScintilla/Editor.py" line="1435"/>
         <source>Pygments Lexer</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1429"/>
+        <location filename="../QScintilla/Editor.py" line="1435"/>
         <source>Select the Pygments lexer to apply.</source>
         <translation>Použít Pygments lexer.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7881"/>
+        <location filename="../QScintilla/Editor.py" line="7905"/>
         <source>Check spelling...</source>
         <translation>Zatrhnout kontrolu...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="837"/>
+        <location filename="../QScintilla/Editor.py" line="839"/>
         <source>Check spelling of selection...</source>
         <translation>Zatrhnout výběr kontroly...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7884"/>
+        <location filename="../QScintilla/Editor.py" line="7908"/>
         <source>Add to dictionary</source>
         <translation>Přidat do slovníku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7886"/>
+        <location filename="../QScintilla/Editor.py" line="7910"/>
         <source>Ignore All</source>
         <translation>Ignorovat vše</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="841"/>
+        <location filename="../QScintilla/Editor.py" line="843"/>
         <source>Remove from dictionary</source>
         <translation>Odebrat ze slovníku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="379"/>
+        <location filename="../QScintilla/Editor.py" line="381"/>
         <source>&lt;p&gt;The size of the file &lt;b&gt;{0}&lt;/b&gt; is &lt;b&gt;{1} KB&lt;/b&gt;. Do you really want to load it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Velikost souboru &lt;b&gt;{0}&lt;/b&gt; je &lt;b&gt;{1} KB&lt;/b&gt;. Opravdu jej chcete načíst?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1390"/>
+        <location filename="../QScintilla/Editor.py" line="1396"/>
         <source>&lt;p&gt;No exporter available for the export format &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
         <translation>&lt;p&gt;Pro formát exportu &lt;b&gt;{0}&lt;/b&gt; není exportér dostupný. Zrušeno.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1409"/>
+        <location filename="../QScintilla/Editor.py" line="1415"/>
         <source>Alternatives ({0})</source>
         <translation>Alternativy ({0})</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3052"/>
+        <location filename="../QScintilla/Editor.py" line="3058"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has unsaved changes.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; obsahuje neuložené změny.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3110"/>
+        <location filename="../QScintilla/Editor.py" line="3116"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be opened.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nemůže být přejmenován.&lt;br /&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3234"/>
+        <location filename="../QScintilla/Editor.py" line="3240"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nemůže být přejmenován.&lt;br /&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6763"/>
+        <location filename="../QScintilla/Editor.py" line="6776"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6772"/>
+        <location filename="../QScintilla/Editor.py" line="6785"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; je poškozen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6824"/>
+        <location filename="../QScintilla/Editor.py" line="6837"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;So souboru s makrem &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7213"/>
+        <location filename="../QScintilla/Editor.py" line="7237"/>
         <source>{0} (ro)</source>
         <translation>{0} (ro)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7354"/>
+        <location filename="../QScintilla/Editor.py" line="7378"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; není soubor.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7450"/>
+        <location filename="../QScintilla/Editor.py" line="7474"/>
         <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
         <translation>Zástupce pro soubor &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1318"/>
+        <location filename="../QScintilla/Editor.py" line="1324"/>
         <source>Next warning</source>
         <translation>Následující varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1322"/>
+        <location filename="../QScintilla/Editor.py" line="1328"/>
         <source>Previous warning</source>
         <translation>Předchozí varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1326"/>
+        <location filename="../QScintilla/Editor.py" line="1332"/>
         <source>Show warning message</source>
         <translation>Zobrazit varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1330"/>
+        <location filename="../QScintilla/Editor.py" line="1336"/>
         <source>Clear warnings</source>
         <translation>Vyčistit varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3297"/>
+        <location filename="../QScintilla/Editor.py" line="3303"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6809"/>
+        <location filename="../QScintilla/Editor.py" line="6822"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6610"/>
+        <location filename="../QScintilla/Editor.py" line="6623"/>
         <source>Warning: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6617"/>
+        <location filename="../QScintilla/Editor.py" line="6630"/>
         <source>Error: {0}</source>
         <translation type="unfinished">Chyby: {0}</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7029"/>
+        <location filename="../QScintilla/Editor.py" line="7042"/>
         <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="920"/>
+        <location filename="../QScintilla/Editor.py" line="926"/>
         <source>Open &apos;rejection&apos; file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1030"/>
+        <location filename="../QScintilla/Editor.py" line="1036"/>
         <source>Load Diagram...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1353"/>
+        <location filename="../QScintilla/Editor.py" line="1359"/>
         <source>Next change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1357"/>
+        <location filename="../QScintilla/Editor.py" line="1363"/>
         <source>Previous change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="8302"/>
+        <location filename="../QScintilla/Editor.py" line="8326"/>
         <source>Sort Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="8302"/>
+        <location filename="../QScintilla/Editor.py" line="8326"/>
         <source>The selection contains illegal data for a numerical sort.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6545"/>
+        <location filename="../QScintilla/Editor.py" line="6558"/>
         <source>Warning</source>
         <translation type="unfinished">Varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6545"/>
+        <location filename="../QScintilla/Editor.py" line="6558"/>
         <source>No warning messages available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6607"/>
+        <location filename="../QScintilla/Editor.py" line="6620"/>
         <source>Style: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="894"/>
+        <location filename="../QScintilla/Editor.py" line="900"/>
         <source>New Document View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="897"/>
+        <location filename="../QScintilla/Editor.py" line="903"/>
         <source>New Document View (with new split)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="984"/>
+        <location filename="../QScintilla/Editor.py" line="990"/>
         <source>Tools</source>
         <translation type="unfinished">Nástroje</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1115"/>
+        <location filename="../QScintilla/Editor.py" line="1121"/>
         <source>Re-Open With Encoding</source>
         <translation type="unfinished"></translation>
     </message>
@@ -12137,120 +12165,130 @@
         <translation type="obsolete">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; byl změněn po té co již byl načten do eric5. Znovu načíst?&lt;/p&gt; {0}?} {6.?}</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="870"/>
+        <location filename="../QScintilla/Editor.py" line="876"/>
         <source>Automatic Completion enabled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="950"/>
+        <location filename="../QScintilla/Editor.py" line="956"/>
         <source>Complete</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4905"/>
+        <location filename="../QScintilla/Editor.py" line="4913"/>
         <source>Auto-Completion Provider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4905"/>
+        <location filename="../QScintilla/Editor.py" line="4913"/>
         <source>The completion list provider &apos;{0}&apos; was already registered. Ignoring duplicate request.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5184"/>
+        <location filename="../QScintilla/Editor.py" line="5192"/>
         <source>Call-Tips Provider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5184"/>
+        <location filename="../QScintilla/Editor.py" line="5192"/>
         <source>The call-tips provider &apos;{0}&apos; was already registered. Ignoring duplicate request.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="8391"/>
+        <location filename="../QScintilla/Editor.py" line="8415"/>
         <source>Register Mouse Click Handler</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="8391"/>
+        <location filename="../QScintilla/Editor.py" line="8415"/>
         <source>A mouse click handler for &quot;{0}&quot; was already registered by &quot;{1}&quot;. Aborting request by &quot;{2}&quot;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="914"/>
+        <location filename="../QScintilla/Editor.py" line="920"/>
         <source>Save Copy...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="953"/>
+        <location filename="../QScintilla/Editor.py" line="959"/>
         <source>Clear Completions Cache</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="880"/>
+        <location filename="../QScintilla/Editor.py" line="886"/>
         <source>Code Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1361"/>
+        <location filename="../QScintilla/Editor.py" line="1367"/>
         <source>Clear changes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="803"/>
+        <location filename="../QScintilla/Editor.py" line="805"/>
         <source>Execute Selection In Console</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="8512"/>
+        <location filename="../QScintilla/Editor.py" line="8536"/>
         <source>EditorConfig Properties</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="8512"/>
+        <location filename="../QScintilla/Editor.py" line="8536"/>
         <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1265"/>
+        <location filename="../QScintilla/Editor.py" line="1271"/>
         <source>Toggle all folds</source>
         <translation type="unfinished">Složit/rozložit všechna skládání</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1270"/>
+        <location filename="../QScintilla/Editor.py" line="1276"/>
         <source>Toggle all folds (including children)</source>
         <translation type="unfinished">Složit/rozložit všechna skládání (i s podsložkami)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1275"/>
-        <source>Toggle current fold</source>
-        <translation type="unfinished">Složit/rozložit aktuální složený blok</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="1281"/>
+        <source>Toggle current fold</source>
+        <translation type="unfinished">Složit/rozložit aktuální složený blok</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1287"/>
         <source>Expand (including children)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1286"/>
-        <source>Collapse (including children)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="1292"/>
+        <source>Collapse (including children)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1298"/>
         <source>Clear all folds</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1173"/>
+        <location filename="../QScintilla/Editor.py" line="1179"/>
         <source>Spell Check Languages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7023"/>
+        <location filename="../QScintilla/Editor.py" line="7036"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="849"/>
+        <source>Insert Docstring</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="8715"/>
+        <source>Generate Docstring</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EditorAPIsPage</name>
@@ -13515,72 +13553,72 @@
         <translation>&lt;b&gt;Konfigurace hlavních nastavení editoru&lt;/b&gt;</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="125"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="169"/>
         <source>Displays the selected indentation width.</source>
         <translation>Zobrazuje vybranou šířku odsazení.</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="103"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="147"/>
         <source>Move to set the indentation width.</source>
         <translation>Posunout pro nastavení šířky odsazení.</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="93"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="137"/>
         <source>Indentation width:</source>
         <translation>Šířka odsazení:</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="55"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="99"/>
         <source>Move to set the tab width.</source>
         <translation>Posunout pro nastavení šířky tabulátoru.</translation>
     </message>
     <message>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="89"/>
+        <source>Tab width:</source>
+        <translation>Šířka tabulátoru:</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="121"/>
+        <source>Displays the selected tab width.</source>
+        <translation>Zobrazuje vybranou šířku tabulátoru.</translation>
+    </message>
+    <message>
         <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="45"/>
-        <source>Tab width:</source>
-        <translation>Šířka tabulátoru:</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="77"/>
-        <source>Displays the selected tab width.</source>
-        <translation>Zobrazuje vybranou šířku tabulátoru.</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="236"/>
         <source>Select whether autoindentation shall be enabled</source>
         <translation type="unfinished">Vybrat, jestliže se mají zobrazovat vodítka odsazování.</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="239"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="48"/>
         <source>Auto indentation</source>
         <translation type="unfinished">Zobrazit vodítka odsazování</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="266"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="75"/>
         <source>Select whether tabs shall be converted upon opening the file</source>
         <translation>Vybrat, mají-li se při otevírání souboru konvertovat tabulátory</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="269"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="78"/>
         <source>Convert tabs upon open</source>
         <translation>Konvertovat tabulátory po otevření</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="246"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="55"/>
         <source>Select whether tab characters are used for indentations.</source>
         <translation>Vybrat, jsou-li znaky tabulátoru použity pro odsazování.</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="249"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="58"/>
         <source>Use tabs for indentations</source>
         <translation>Používat tabulátory pro odsazování</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="256"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="65"/>
         <source>Select whether pressing the tab key indents.</source>
         <translation>Vybrat, má-li stisknutí tabulátoru odsazovat.</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="259"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="68"/>
         <source>Tab key indents</source>
         <translation>Tabulátor odsazuje</translation>
     </message>
@@ -13590,135 +13628,150 @@
         <translation>Taby &amp;&amp; Odsazování</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="371"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="373"/>
         <source>Comments</source>
         <translation>Komentáře</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="377"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="379"/>
         <source>Select to insert the comment sign at column 0</source>
         <translation>Vybrat pro vložení značky komentáře do sloupce 0</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="383"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="385"/>
         <source>Insert comment at column 0</source>
         <translation>Vložit komentář do sloupce 0</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="380"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="382"/>
         <source>&lt;b&gt;Insert comment at column 0&lt;/b&gt;&lt;p&gt;Select to insert the comment sign at column 0. Otherwise, the comment sign is inserted at the first non-whitespace position.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Vložit komentář do sloupce 0&lt;/b&gt;&lt;p&gt;Vybrat pro vložení značky komentáře do sloupce 0. Jinak je značka komentáře vložena na první neprázdnou pozici.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="393"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="424"/>
         <source>Virtual Space</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="399"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="430"/>
         <source>Virtual space is the space after the last character of a line. It is not allocated unless some text is entered or copied into it. Usage of virtual space can be configured with these selections.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="409"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="440"/>
         <source>Select to enable a rectangular selection to extend into virtual space</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="412"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="443"/>
         <source>Selection may access virtual space</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="419"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="450"/>
         <source>Select to allow the cursor to be moved into virtual space</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="422"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="453"/>
         <source>Cursor can move into virtual space</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="158"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="206"/>
         <source>Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="163"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="211"/>
         <source>Tab Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="168"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="216"/>
         <source>Indent Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="196"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="244"/>
         <source>Press to add a language specific override</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="203"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="251"/>
         <source>Press to delete the selected language specific override</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="210"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="258"/>
         <source>Press to edit the selected language specific override</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.py" line="223"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.py" line="238"/>
         <source>Tab and Indent Override</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.py" line="223"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.py" line="238"/>
         <source>Shall the selected entries really be removed?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="281"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="283"/>
         <source>Select to enable the source code outline view</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="284"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="286"/>
         <source>Source Code Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="293"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="295"/>
         <source>Default Width:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="320"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="302"/>
         <source>Enter the default width of the source code outline view</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="313"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="321"/>
         <source>Width Step Size:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="339"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="328"/>
         <source>Enter the amount of pixels the width of the outline should be increased or decreased</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="358"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="360"/>
         <source>Select to show the source code encoding</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="361"/>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="363"/>
         <source>Show source file encoding</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="395"/>
+        <source>Docstring</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="401"/>
+        <source>Docstring Style:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/EditorGeneralPage.ui" line="414"/>
+        <source>Select the docstring style to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EditorHighlightersPage</name>
@@ -53390,17 +53443,17 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1627"/>
+        <location filename="../Preferences/__init__.py" line="1629"/>
         <source>Export Preferences</source>
         <translation>Předvolby exportu</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1655"/>
+        <location filename="../Preferences/__init__.py" line="1657"/>
         <source>Import Preferences</source>
         <translation>Předvolby importu</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1655"/>
+        <location filename="../Preferences/__init__.py" line="1657"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -53951,192 +54004,192 @@
         <translation>Ostatní</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="798"/>
+        <location filename="../Project/Project.py" line="799"/>
         <source>Read project file</source>
         <translation>Načíst soubor projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="901"/>
+        <location filename="../Project/Project.py" line="902"/>
         <source>Save project file</source>
         <translation>Uložit soubor projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="937"/>
+        <location filename="../Project/Project.py" line="938"/>
         <source>Read user project properties</source>
         <translation>Načíst uživatelská nastavení projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="961"/>
+        <location filename="../Project/Project.py" line="962"/>
         <source>Save user project properties</source>
         <translation>Uložit uživatelská nastavení projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1019"/>
+        <location filename="../Project/Project.py" line="1020"/>
         <source>Read project session</source>
         <translation>Načíst relaci projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1244"/>
+        <location filename="../Project/Project.py" line="1245"/>
         <source>Please save the project first.</source>
         <translation>Prosím, nejdříve uložte projekt.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1055"/>
+        <location filename="../Project/Project.py" line="1056"/>
         <source>Save project session</source>
         <translation>Uložit relaci projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1084"/>
+        <location filename="../Project/Project.py" line="1085"/>
         <source>Delete project session</source>
         <translation>Smazat relaci projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1118"/>
+        <location filename="../Project/Project.py" line="1119"/>
         <source>Read tasks</source>
         <translation>Načíst úlohy</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1138"/>
+        <location filename="../Project/Project.py" line="1139"/>
         <source>Save tasks</source>
         <translation>Uložit úlohy</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1197"/>
+        <location filename="../Project/Project.py" line="1198"/>
         <source>Read debugger properties</source>
         <translation>Načíst nastavení debuggeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1232"/>
+        <location filename="../Project/Project.py" line="1233"/>
         <source>Save debugger properties</source>
         <translation>Uložit nastavení debuggeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1258"/>
+        <location filename="../Project/Project.py" line="1259"/>
         <source>Delete debugger properties</source>
         <translation>Smazat nastavení debuggeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1386"/>
+        <location filename="../Project/Project.py" line="1387"/>
         <source>Add Language</source>
         <translation>Přidat jazyk</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1512"/>
+        <location filename="../Project/Project.py" line="1513"/>
         <source>Delete translation</source>
         <translation>Smazat překlad</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1677"/>
+        <location filename="../Project/Project.py" line="1678"/>
         <source>Add file</source>
         <translation>Přidat soubor</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1809"/>
+        <location filename="../Project/Project.py" line="1810"/>
         <source>The target directory must not be empty.</source>
         <translation>Cílový adresář nesmí být prázdný.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1820"/>
+        <location filename="../Project/Project.py" line="1821"/>
         <source>Add directory</source>
         <translation>Přidat adresář</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1820"/>
+        <location filename="../Project/Project.py" line="1821"/>
         <source>The source directory must not be empty.</source>
         <translation>Cílový adresář nesmí být prázdný.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1957"/>
+        <location filename="../Project/Project.py" line="1958"/>
         <source>Rename file</source>
         <translation>Přejmenovat soubor</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1981"/>
+        <location filename="../Project/Project.py" line="1982"/>
         <source>Rename File</source>
         <translation>Přejmenovat soubor</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2231"/>
+        <location filename="../Project/Project.py" line="2232"/>
         <source>Delete file</source>
         <translation>Smazat soubor</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2261"/>
+        <location filename="../Project/Project.py" line="2262"/>
         <source>Delete directory</source>
         <translation>Smazat adresář</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2356"/>
+        <location filename="../Project/Project.py" line="2357"/>
         <source>Create project directory</source>
         <translation>Vytvořit adresář projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2976"/>
+        <location filename="../Project/Project.py" line="2977"/>
         <source>New Project</source>
         <translation>Nový projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2476"/>
+        <location filename="../Project/Project.py" line="2477"/>
         <source>Add existing files to the project?</source>
         <translation>Přidat existující soubory do projektu?</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2603"/>
+        <location filename="../Project/Project.py" line="2604"/>
         <source>Would you like to edit the VCS command options?</source>
         <translation>Chcete editovat parametry VCS příkazu?</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3845"/>
+        <location filename="../Project/Project.py" line="3846"/>
         <source>New project</source>
         <translation>Nový projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2546"/>
+        <location filename="../Project/Project.py" line="2547"/>
         <source>Shall the project file be added to the repository?</source>
         <translation>Má být projekt přidán do repozitáře?</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2575"/>
+        <location filename="../Project/Project.py" line="2576"/>
         <source>Select version control system for the project</source>
         <translation>Výběr verzovacího systému projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3859"/>
+        <location filename="../Project/Project.py" line="3860"/>
         <source>Open project</source>
         <translation>Otevřít projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3120"/>
+        <location filename="../Project/Project.py" line="3121"/>
         <source>Project Files (*.e4p)</source>
         <translation>Soubory projektu (*.e4p)</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3896"/>
+        <location filename="../Project/Project.py" line="3897"/>
         <source>Save project as</source>
         <translation>Uložit projekt jako</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3135"/>
+        <location filename="../Project/Project.py" line="3136"/>
         <source>Save File</source>
         <translation>Uložit soubor</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3171"/>
+        <location filename="../Project/Project.py" line="3172"/>
         <source>Close Project</source>
         <translation>Zavřít projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3171"/>
+        <location filename="../Project/Project.py" line="3172"/>
         <source>The current project has unsaved changes.</source>
         <translation>Aktuální projekt obsahuje neuložené změny.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3348"/>
+        <location filename="../Project/Project.py" line="3349"/>
         <source>Syntax errors detected</source>
         <translation>Zjištěny syntaktické chyby</translation>
     </message>
     <message numerus="yes">
-        <location filename="../Project/Project.py" line="3348"/>
+        <location filename="../Project/Project.py" line="3349"/>
         <source>The project contains %n file(s) with syntax errors.</source>
         <translation>
             <numerusform>Projekt obsahuje %n soubor se syntaktickými chybami.</numerusform>
@@ -54145,582 +54198,582 @@
         </translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3845"/>
+        <location filename="../Project/Project.py" line="3846"/>
         <source>&amp;New...</source>
         <translation>&amp;Nový...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3850"/>
-        <source>Generate a new project</source>
-        <translation>Vygenerovat nový projekt</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="3851"/>
+        <source>Generate a new project</source>
+        <translation>Vygenerovat nový projekt</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3852"/>
         <source>&lt;b&gt;New...&lt;/b&gt;&lt;p&gt;This opens a dialog for entering the info for a new project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nový...&lt;/b&gt;&lt;p&gt;Otevře se dialogové okno pro zadání informací o novém projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3859"/>
+        <location filename="../Project/Project.py" line="3860"/>
         <source>&amp;Open...</source>
         <translation>&amp;Otevřít...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3864"/>
-        <source>Open an existing project</source>
-        <translation>Otevřít existující projekt</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="3865"/>
+        <source>Open an existing project</source>
+        <translation>Otevřít existující projekt</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3866"/>
         <source>&lt;b&gt;Open...&lt;/b&gt;&lt;p&gt;This opens an existing project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Otevřít....&lt;/b&gt;&lt;p&gt;Otevře existující projekt.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3872"/>
+        <location filename="../Project/Project.py" line="3873"/>
         <source>Close project</source>
         <translation>Zavřít projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3872"/>
+        <location filename="../Project/Project.py" line="3873"/>
         <source>&amp;Close</source>
         <translation>&amp;Zavřít</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3876"/>
-        <source>Close the current project</source>
-        <translation>Uzavře aktuální projekt</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="3877"/>
+        <source>Close the current project</source>
+        <translation>Uzavře aktuální projekt</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3878"/>
         <source>&lt;b&gt;Close&lt;/b&gt;&lt;p&gt;This closes the current project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zavřít&lt;/b&gt;&lt;p&gt;Aktuální projekt se uzavře.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3884"/>
+        <location filename="../Project/Project.py" line="3885"/>
         <source>Save project</source>
         <translation>Uložit projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4076"/>
+        <location filename="../Project/Project.py" line="4077"/>
         <source>&amp;Save</source>
         <translation>&amp;Uložit</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3888"/>
-        <source>Save the current project</source>
-        <translation>Uložit aktuální projekt</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="3889"/>
+        <source>Save the current project</source>
+        <translation>Uložit aktuální projekt</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3890"/>
         <source>&lt;b&gt;Save&lt;/b&gt;&lt;p&gt;This saves the current project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Uložit&lt;/b&gt;&lt;p&gt;Aktuální projekt se uloží.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3896"/>
+        <location filename="../Project/Project.py" line="3897"/>
         <source>Save &amp;as...</source>
         <translation>Uložit j&amp;ako...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3900"/>
+        <location filename="../Project/Project.py" line="3901"/>
         <source>Save the current project to a new file</source>
         <translation>Uloží aktuální projekt do nového souboru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3902"/>
+        <location filename="../Project/Project.py" line="3903"/>
         <source>&lt;b&gt;Save as&lt;/b&gt;&lt;p&gt;This saves the current project to a new file.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Uložit jako&lt;/b&gt;&lt;p&gt;Uloží aktuální projekt do nového souboru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3911"/>
+        <location filename="../Project/Project.py" line="3912"/>
         <source>Add files to project</source>
         <translation>Přidat soubory do projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3911"/>
+        <location filename="../Project/Project.py" line="3912"/>
         <source>Add &amp;files...</source>
         <translation>&amp;Přidat soubory...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3916"/>
+        <location filename="../Project/Project.py" line="3917"/>
         <source>Add files to the current project</source>
         <translation>Přidat soubory do aktuálního projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3918"/>
+        <location filename="../Project/Project.py" line="3919"/>
         <source>&lt;b&gt;Add files...&lt;/b&gt;&lt;p&gt;This opens a dialog for adding files to the current project. The place to add is determined by the file extension.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přidat soubory...&lt;/b&gt;&lt;p&gt;Otevře dialog pri přidání souborů do aktuálního projektu. Místo pro přidání je definováno extenzí souborů.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3927"/>
+        <location filename="../Project/Project.py" line="3928"/>
         <source>Add directory to project</source>
         <translation>Přidat adresář do projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3927"/>
+        <location filename="../Project/Project.py" line="3928"/>
         <source>Add directory...</source>
         <translation>Přidat adresář...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3932"/>
+        <location filename="../Project/Project.py" line="3933"/>
         <source>Add a directory to the current project</source>
         <translation>Přidat adresář do aktuálního projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3934"/>
+        <location filename="../Project/Project.py" line="3935"/>
         <source>&lt;b&gt;Add directory...&lt;/b&gt;&lt;p&gt;This opens a dialog for adding a directory to the current project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přidat adresář...&lt;/b&gt;&lt;p&gt;Otevře dialog pro přičtení adresáře do aktuálního projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3942"/>
+        <location filename="../Project/Project.py" line="3943"/>
         <source>Add translation to project</source>
         <translation>Přidat překlad do projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3942"/>
+        <location filename="../Project/Project.py" line="3943"/>
         <source>Add &amp;translation...</source>
         <translation>Přida&amp;t překlad...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3947"/>
+        <location filename="../Project/Project.py" line="3948"/>
         <source>Add a translation to the current project</source>
         <translation>Přidat překlad do aktuálního projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3949"/>
+        <location filename="../Project/Project.py" line="3950"/>
         <source>&lt;b&gt;Add translation...&lt;/b&gt;&lt;p&gt;This opens a dialog for add a translation to the current project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přidat překlad&lt;/b&gt;&lt;p&gt;Otevře dialog pro přidání překladu do aktuálního projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3957"/>
+        <location filename="../Project/Project.py" line="3958"/>
         <source>Search new files</source>
         <translation>Hledat nové soubory</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3957"/>
+        <location filename="../Project/Project.py" line="3958"/>
         <source>Searc&amp;h new files...</source>
         <translation>&amp;Hledat nové soubory...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3961"/>
+        <location filename="../Project/Project.py" line="3962"/>
         <source>Search new files in the project directory.</source>
         <translation>Hledat nové soubory v adresáři projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3987"/>
+        <location filename="../Project/Project.py" line="3988"/>
         <source>Project properties</source>
         <translation>Nastavení projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3987"/>
+        <location filename="../Project/Project.py" line="3988"/>
         <source>&amp;Properties...</source>
         <translation>&amp;Natavení...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3992"/>
-        <source>Show the project properties</source>
-        <translation>Zobrazit nastavení projektu</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="3993"/>
+        <source>Show the project properties</source>
+        <translation>Zobrazit nastavení projektu</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3994"/>
         <source>&lt;b&gt;Properties...&lt;/b&gt;&lt;p&gt;This shows a dialog to edit the project properties.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nastavení...&lt;/b&gt;&lt;p&gt;Zobrazí dialog s editací nastavení projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4000"/>
+        <location filename="../Project/Project.py" line="4001"/>
         <source>User project properties</source>
         <translation>Uživatelská nastavení projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4000"/>
+        <location filename="../Project/Project.py" line="4001"/>
         <source>&amp;User Properties...</source>
         <translation>Uživat&amp;elská nastavení...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4005"/>
+        <location filename="../Project/Project.py" line="4006"/>
         <source>Show the user specific project properties</source>
         <translation>Zobrazit uživatelem definovaná nastavení projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4007"/>
+        <location filename="../Project/Project.py" line="4008"/>
         <source>&lt;b&gt;User Properties...&lt;/b&gt;&lt;p&gt;This shows a dialog to edit the user specific project properties.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Uživatelská nastavení...&lt;/b&gt;&lt;p&gt;Zobrazí dialog s editací uživatelských nastavení projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4015"/>
+        <location filename="../Project/Project.py" line="4016"/>
         <source>Filetype Associations</source>
         <translation>Asociace typů souborů</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4015"/>
+        <location filename="../Project/Project.py" line="4016"/>
         <source>Filetype Associations...</source>
         <translation>Asociace typů souborů...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4019"/>
+        <location filename="../Project/Project.py" line="4020"/>
         <source>Show the project filetype associations</source>
         <translation>Zobrazit asociace typů souborů</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4051"/>
+        <location filename="../Project/Project.py" line="4052"/>
         <source>Debugger Properties</source>
         <translation>Nastavení debugeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4051"/>
+        <location filename="../Project/Project.py" line="4052"/>
         <source>Debugger &amp;Properties...</source>
         <translation>Nastavení &amp;debuggeru...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4055"/>
-        <source>Show the debugger properties</source>
-        <translation>Zobrazit nastavení debugeru</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4056"/>
+        <source>Show the debugger properties</source>
+        <translation>Zobrazit nastavení debugeru</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4057"/>
         <source>&lt;b&gt;Debugger Properties...&lt;/b&gt;&lt;p&gt;This shows a dialog to edit project specific debugger settings.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nastavení debugeru...&lt;/b&gt;&lt;p&gt;Zobrazí dialog s editací nastavení debugeru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4064"/>
+        <location filename="../Project/Project.py" line="4065"/>
         <source>Load</source>
         <translation>Načíst</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4064"/>
+        <location filename="../Project/Project.py" line="4065"/>
         <source>&amp;Load</source>
         <translation>&amp;Načíst</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4068"/>
-        <source>Load the debugger properties</source>
-        <translation>Načíst nastavení debugeru</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4069"/>
+        <source>Load the debugger properties</source>
+        <translation>Načíst nastavení debugeru</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4070"/>
         <source>&lt;b&gt;Load Debugger Properties&lt;/b&gt;&lt;p&gt;This loads the project specific debugger settings.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Načíst nastavení debugeru&lt;/b&gt;&lt;p&gt;Načtou se nastavení debugeru do projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4076"/>
+        <location filename="../Project/Project.py" line="4077"/>
         <source>Save</source>
         <translation>Uložit</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4080"/>
-        <source>Save the debugger properties</source>
-        <translation>Uložit nastavení debugeru</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4081"/>
+        <source>Save the debugger properties</source>
+        <translation>Uložit nastavení debugeru</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4082"/>
         <source>&lt;b&gt;Save Debugger Properties&lt;/b&gt;&lt;p&gt;This saves the project specific debugger settings.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Uložit nastavení debugeru&lt;/b&gt;&lt;p&gt;Uloží nastavení debugeru definovaná v projektu..&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4088"/>
+        <location filename="../Project/Project.py" line="4089"/>
         <source>Delete</source>
         <translation>Smazat</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4088"/>
+        <location filename="../Project/Project.py" line="4089"/>
         <source>&amp;Delete</source>
         <translation>Sma&amp;zat</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4092"/>
-        <source>Delete the debugger properties</source>
-        <translation>Smazat nastavení debugeru</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4093"/>
+        <source>Delete the debugger properties</source>
+        <translation>Smazat nastavení debugeru</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4094"/>
         <source>&lt;b&gt;Delete Debugger Properties&lt;/b&gt;&lt;p&gt;This deletes the file containing the project specific debugger settings.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Smazat nastavení debugeru&lt;/b&gt;&lt;p&gt;Smaže se soubor obsahující nastavení debugeru v daném projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4101"/>
+        <location filename="../Project/Project.py" line="4102"/>
         <source>Reset</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4101"/>
+        <location filename="../Project/Project.py" line="4102"/>
         <source>&amp;Reset</source>
         <translation>&amp;Reset</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4105"/>
-        <source>Reset the debugger properties</source>
-        <translation>Reset nastavení debugeru</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4106"/>
+        <source>Reset the debugger properties</source>
+        <translation>Reset nastavení debugeru</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4107"/>
         <source>&lt;b&gt;Reset Debugger Properties&lt;/b&gt;&lt;p&gt;This resets the project specific debugger settings.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Reset nastavení debugeru&lt;/b&gt;&lt;p&gt;Zresetuje nastavení debugeru v projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4115"/>
+        <location filename="../Project/Project.py" line="4116"/>
         <source>Load session</source>
         <translation>Načíst relaci</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4119"/>
-        <source>Load the projects session file.</source>
-        <translation>Načíst soubor s relací projektu.</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4120"/>
+        <source>Load the projects session file.</source>
+        <translation>Načíst soubor s relací projektu.</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4121"/>
         <source>&lt;b&gt;Load session&lt;/b&gt;&lt;p&gt;This loads the projects session file. The session consists of the following data.&lt;br&gt;- all open source files&lt;br&gt;- all breakpoint&lt;br&gt;- the commandline arguments&lt;br&gt;- the working directory&lt;br&gt;- the exception reporting flag&lt;/p&gt;</source>
         <translation>&lt;b&gt;Načíst relaci&lt;/b&gt;&lt;p&gt;Načte soubor s relací projektu. Relace obsahuje následující údaje:&lt;br&gt;- všechny otevřené zdrojové soubory&lt;br&gt;- všechny breakpointy&lt;br&gt;- argumenty příkazové řádky &lt;br&gt;- pracovní adresář&lt;br&gt;- příznak výjimky&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4133"/>
+        <location filename="../Project/Project.py" line="4134"/>
         <source>Save session</source>
         <translation>Uložit relaci</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4137"/>
-        <source>Save the projects session file.</source>
-        <translation>Uložit soubor s relací projektu.</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4138"/>
+        <source>Save the projects session file.</source>
+        <translation>Uložit soubor s relací projektu.</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4139"/>
         <source>&lt;b&gt;Save session&lt;/b&gt;&lt;p&gt;This saves the projects session file. The session consists of the following data.&lt;br&gt;- all open source files&lt;br&gt;- all breakpoint&lt;br&gt;- the commandline arguments&lt;br&gt;- the working directory&lt;br&gt;- the exception reporting flag&lt;/p&gt;</source>
         <translation>&lt;b&gt;Uložit relaci&lt;/b&gt;&lt;p&gt;Uloží soubor s relací projektu. Relace obsahuje následující údaje:&lt;br&gt;- všechny otevřené zdrojové soubory&lt;br&gt;- všechny breakpointy&lt;br&gt;- argumenty příkazové řádky &lt;br&gt;- pracovní adresář&lt;br&gt;- příznak výjimky&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4151"/>
+        <location filename="../Project/Project.py" line="4152"/>
         <source>Delete session</source>
         <translation>Smazat relaci</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4155"/>
-        <source>Delete the projects session file.</source>
-        <translation>Smaže soubor s relací projektu.</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4156"/>
+        <source>Delete the projects session file.</source>
+        <translation>Smaže soubor s relací projektu.</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4157"/>
         <source>&lt;b&gt;Delete session&lt;/b&gt;&lt;p&gt;This deletes the projects session file&lt;/p&gt;</source>
         <translation>&lt;b&gt;Smazat relaci&lt;/b&gt;&lt;p&gt;Smaže soubor s relací projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4165"/>
+        <location filename="../Project/Project.py" line="4166"/>
         <source>Code Metrics</source>
         <translation>Metriky kódu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4165"/>
+        <location filename="../Project/Project.py" line="4166"/>
         <source>&amp;Code Metrics...</source>
         <translation>Metriky &amp;kódu...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4169"/>
+        <location filename="../Project/Project.py" line="4170"/>
         <source>Show some code metrics for the project.</source>
         <translation>Zobrazit metriky kódu projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4171"/>
+        <location filename="../Project/Project.py" line="4172"/>
         <source>&lt;b&gt;Code Metrics...&lt;/b&gt;&lt;p&gt;This shows some code metrics for all Python files in the project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Metriky kódu...&lt;/b&gt;&lt;p&gt;Zobrazí se metriky kódu všech python souborů v projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4179"/>
+        <location filename="../Project/Project.py" line="4180"/>
         <source>Python Code Coverage</source>
         <translation>Pokrytí python kódu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4179"/>
+        <location filename="../Project/Project.py" line="4180"/>
         <source>Code Co&amp;verage...</source>
         <translation>Pokr&amp;ytí kódu...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4183"/>
+        <location filename="../Project/Project.py" line="4184"/>
         <source>Show code coverage information for the project.</source>
         <translation>Zobrazit informace pokrytí kódu projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4185"/>
+        <location filename="../Project/Project.py" line="4186"/>
         <source>&lt;b&gt;Code Coverage...&lt;/b&gt;&lt;p&gt;This shows the code coverage information for all Python files in the project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Pokrytí kódu...&lt;/b&gt;&lt;p&gt;Zobrazí informace o pokrytí kódu ve všech python souborech projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5069"/>
+        <location filename="../Project/Project.py" line="5070"/>
         <source>Profile Data</source>
         <translation>Profilovat data</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4193"/>
+        <location filename="../Project/Project.py" line="4194"/>
         <source>&amp;Profile Data...</source>
         <translation>&amp;Profilovat data...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4197"/>
+        <location filename="../Project/Project.py" line="4198"/>
         <source>Show profiling data for the project.</source>
         <translation>Zobrazit profilování dat projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4199"/>
+        <location filename="../Project/Project.py" line="4200"/>
         <source>&lt;b&gt;Profile Data...&lt;/b&gt;&lt;p&gt;This shows the profiling data for the project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Profilovat data&lt;/b&gt;&lt;p&gt;Zobrazí se profilování dat projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5123"/>
+        <location filename="../Project/Project.py" line="5124"/>
         <source>Application Diagram</source>
         <translation>Diagram aplikace</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4208"/>
+        <location filename="../Project/Project.py" line="4209"/>
         <source>&amp;Application Diagram...</source>
         <translation>Diagram &amp;aplikace...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4212"/>
+        <location filename="../Project/Project.py" line="4213"/>
         <source>Show a diagram of the project.</source>
         <translation>Zobrazit diagram projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4214"/>
+        <location filename="../Project/Project.py" line="4215"/>
         <source>&lt;b&gt;Application Diagram...&lt;/b&gt;&lt;p&gt;This shows a diagram of the project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Diagram aplikace...&lt;/b&gt;&lt;p&gt;Zobrazí diagram projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4339"/>
-        <source>&amp;Project</source>
-        <translation>&amp;Projekt</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4340"/>
+        <source>&amp;Project</source>
+        <translation>&amp;Projekt</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4341"/>
         <source>Open &amp;Recent Projects</source>
         <translation>Otevřít poslední p&amp;rojekty</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4345"/>
+        <location filename="../Project/Project.py" line="4346"/>
         <source>&amp;Version Control</source>
         <translation>Kontrola &amp;verzí</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4349"/>
+        <location filename="../Project/Project.py" line="4350"/>
         <source>Chec&amp;k</source>
         <translation>Zkontro&amp;lovat</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4351"/>
-        <source>Sho&amp;w</source>
-        <translation>Zo&amp;brazit</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4352"/>
-        <source>&amp;Diagrams</source>
-        <translation>&amp;Diagramy</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4341"/>
-        <source>Session</source>
-        <translation>Relace</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4354"/>
-        <source>Source &amp;Documentation</source>
-        <translation>Zd&amp;rojová dokumentace</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4342"/>
-        <source>Debugger</source>
-        <translation></translation>
+        <source>Sho&amp;w</source>
+        <translation>Zo&amp;brazit</translation>
     </message>
     <message>
         <location filename="../Project/Project.py" line="4353"/>
+        <source>&amp;Diagrams</source>
+        <translation>&amp;Diagramy</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4342"/>
+        <source>Session</source>
+        <translation>Relace</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4355"/>
+        <source>Source &amp;Documentation</source>
+        <translation>Zd&amp;rojová dokumentace</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4343"/>
+        <source>Debugger</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4354"/>
         <source>Pac&amp;kagers</source>
         <translation>Balíč&amp;ky</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4479"/>
+        <location filename="../Project/Project.py" line="4480"/>
         <source>Project</source>
         <translation>Projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4545"/>
+        <location filename="../Project/Project.py" line="4546"/>
         <source>&amp;Clear</source>
         <translation>&amp;Vyčistit</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4718"/>
+        <location filename="../Project/Project.py" line="4719"/>
         <source>Search New Files</source>
         <translation>Hledat nové soubory</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4718"/>
+        <location filename="../Project/Project.py" line="4719"/>
         <source>There were no new files found to be added.</source>
         <translation>Nebyly nalezeny žádné soubory, které je možné přidat.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4866"/>
+        <location filename="../Project/Project.py" line="4867"/>
         <source>Version Control System</source>
         <translation>Version Control System</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4996"/>
+        <location filename="../Project/Project.py" line="4997"/>
         <source>Coverage Data</source>
         <translation>Datové pokrytí</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5046"/>
+        <location filename="../Project/Project.py" line="5047"/>
         <source>There is no main script defined for the current project. Aborting</source>
         <translation>V aktuálním projektu nebyl určen hlavní skript. Zrušeno</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5019"/>
+        <location filename="../Project/Project.py" line="5020"/>
         <source>Code Coverage</source>
         <translation>Pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5019"/>
+        <location filename="../Project/Project.py" line="5020"/>
         <source>Please select a coverage file</source>
         <translation>Prosím, vyberte soubor pokrytí</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5069"/>
+        <location filename="../Project/Project.py" line="5070"/>
         <source>Please select a profile file</source>
         <translation>Prosím, vyberte soubor s profilem</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5123"/>
+        <location filename="../Project/Project.py" line="5124"/>
         <source>Include module names?</source>
         <translation>Včetně jmen modulů?</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5318"/>
+        <location filename="../Project/Project.py" line="5319"/>
         <source>Create Package List</source>
         <translation>Vytvořit seznam balíčků</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4237"/>
+        <location filename="../Project/Project.py" line="4238"/>
         <source>Create &amp;Package List</source>
         <translation type="unfinished">Vytvořit Plugin &amp;archiv</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5589"/>
+        <location filename="../Project/Project.py" line="5590"/>
         <source>Create Plugin Archive</source>
         <translation>Vytvořit Plugin archiv</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5267"/>
+        <location filename="../Project/Project.py" line="5268"/>
         <source>&lt;p&gt;The file &lt;b&gt;PKGLIST&lt;/b&gt; already exists.&lt;/p&gt;&lt;p&gt;Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;PKGLIST&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Přepsat jej?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5337"/>
+        <location filename="../Project/Project.py" line="5338"/>
         <source>The project does not have a main script defined. Aborting...</source>
         <translation>Projekt nemá definován hlavní skript. Zrušeno...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1708"/>
+        <location filename="../Project/Project.py" line="1709"/>
         <source>&lt;p&gt;The source directory doesn&apos;t contain any files belonging to the selected category.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Zdrojový adresář neobsahuje žádné soubory související s danou kategorií.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2976"/>
+        <location filename="../Project/Project.py" line="2977"/>
         <source>Select Version Control System</source>
         <translation>Vybrat Version Control System</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2582"/>
+        <location filename="../Project/Project.py" line="2583"/>
         <source>None</source>
         <translation>None</translation>
     </message>
@@ -54730,42 +54783,42 @@
         <translation>Zaregistrovat typ projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4253"/>
+        <location filename="../Project/Project.py" line="4254"/>
         <source>Create Plugin &amp;Archives</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1386"/>
+        <location filename="../Project/Project.py" line="1387"/>
         <source>You have to specify a translation pattern first.</source>
         <translation>Nejdříve musíte specifikovat vzor překladu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2684"/>
+        <location filename="../Project/Project.py" line="2685"/>
         <source>Translation Pattern</source>
         <translation>Vzor překladu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2684"/>
+        <location filename="../Project/Project.py" line="2685"/>
         <source>Enter the path pattern for translation files (use &apos;%language%&apos; in place of the language code):</source>
         <translation>Zadejte vzor cesty pro soubory s překlady (použijte  &apos;%language%&apos; na místě s kódem jazyka):</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4033"/>
+        <location filename="../Project/Project.py" line="4034"/>
         <source>Lexer Associations</source>
         <translation>Spojení lexeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4033"/>
+        <location filename="../Project/Project.py" line="4034"/>
         <source>Lexer Associations...</source>
         <translation>Spojení lexeru...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4037"/>
+        <location filename="../Project/Project.py" line="4038"/>
         <source>Show the project lexer associations (overriding defaults)</source>
         <translation>Zobrazit spojení lexeru projektu (přepíše výchozí)</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4039"/>
+        <location filename="../Project/Project.py" line="4040"/>
         <source>&lt;b&gt;Lexer Associations...&lt;/b&gt;&lt;p&gt;This shows a dialog to edit the lexer associations of the project. These associations override the global lexer associations. Lexers are used to highlight the editor text.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Spojení lexeru...&lt;/b&gt;&lt;p&gt;Zobrazuje dialog s editací spojení lexeru projektu. Tato spojení přepisují globální lexer spojení. Lexer je použit pro zvýraznění textu v editoru.&lt;/p&gt;</translation>
     </message>
@@ -54780,142 +54833,142 @@
         <translation>Python3 soubory (*.py *.py3);;Python3 GUI soubory (*.pyw *.pyw3);;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="798"/>
+        <location filename="../Project/Project.py" line="799"/>
         <source>&lt;p&gt;The project file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor projektu &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="901"/>
+        <location filename="../Project/Project.py" line="902"/>
         <source>&lt;p&gt;The project file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Do souboru projektu &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="937"/>
+        <location filename="../Project/Project.py" line="938"/>
         <source>&lt;p&gt;The user specific project properties file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Uživatelská nastavení projektu &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="961"/>
+        <location filename="../Project/Project.py" line="962"/>
         <source>&lt;p&gt;The user specific project properties file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Do souboru s uživatelskými nastaveními  &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1019"/>
+        <location filename="../Project/Project.py" line="1020"/>
         <source>&lt;p&gt;The project session file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s relací projektu &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1055"/>
+        <location filename="../Project/Project.py" line="1056"/>
         <source>&lt;p&gt;The project session file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Do souboru s relací projektu &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1084"/>
+        <location filename="../Project/Project.py" line="1085"/>
         <source>&lt;p&gt;The project session file &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s relací projektu &lt;b&gt;{0}&lt;/b&gt; nelze smazat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1118"/>
+        <location filename="../Project/Project.py" line="1119"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s úlohami &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1138"/>
+        <location filename="../Project/Project.py" line="1139"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Do souboru s úlohami &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1197"/>
+        <location filename="../Project/Project.py" line="1198"/>
         <source>&lt;p&gt;The project debugger properties file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s nastaveními debuggeru &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1232"/>
+        <location filename="../Project/Project.py" line="1233"/>
         <source>&lt;p&gt;The project debugger properties file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Do souboru s nastaveními debuggeru &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1258"/>
+        <location filename="../Project/Project.py" line="1259"/>
         <source>&lt;p&gt;The project debugger properties file &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s nastaveními debuggeru &lt;b&gt;{0}&lt;/b&gt; nelze smazat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1741"/>
+        <location filename="../Project/Project.py" line="1742"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists.&lt;/p&gt;&lt;p&gt;Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3135"/>
+        <location filename="../Project/Project.py" line="3136"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1981"/>
+        <location filename="../Project/Project.py" line="1982"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be renamed.&lt;br /&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nemůže být přejmenován.&lt;br /&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2356"/>
+        <location filename="../Project/Project.py" line="2357"/>
         <source>&lt;p&gt;The project directory &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Adresář projektu &lt;b&gt;{0}&lt;/b&gt; nelze vytvořit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4866"/>
+        <location filename="../Project/Project.py" line="4867"/>
         <source>&lt;p&gt;The selected VCS &lt;b&gt;{0}&lt;/b&gt; could not be found.&lt;br/&gt;Disabling version control.&lt;/p&gt;&lt;p&gt;{1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Vybrané VCS &lt;b&gt;{0}&lt;/b&gt; nebylo nalezeno.&lt;br/&gt;Kontrola verzí vypnuta.&lt;/p&gt;&lt;p&gt;{1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5318"/>
+        <location filename="../Project/Project.py" line="5319"/>
         <source>&lt;p&gt;The file &lt;b&gt;PKGLIST&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;PKGLIST&lt;/b&gt; nelze vytvořit.&lt;/p&gt;&lt;p&gt;Důvod: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5477"/>
+        <location filename="../Project/Project.py" line="5478"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be stored in the archive. Ignoring it.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nelze uložit do archivu. Ingorováno.&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5548"/>
+        <location filename="../Project/Project.py" line="5549"/>
         <source>&lt;p&gt;The plugin file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Plugin soubor &lt;b&gt;{0}&lt;/b&gt; nelze přečíst.&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1664"/>
+        <location filename="../Project/Project.py" line="1665"/>
         <source>&lt;p&gt;The selected file &lt;b&gt;{0}&lt;/b&gt; could not be added to &lt;b&gt;{1}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {2}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Vybraný soubor &lt;b&gt;{0}&lt;/b&gt; nelze přidat do &lt;b&gt;{1}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Důvod: {2}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1723"/>
+        <location filename="../Project/Project.py" line="1724"/>
         <source>&lt;p&gt;The target directory &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Cílový adresář &lt;b&gt;{0}&lt;/b&gt; nelze vytvořit.&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2442"/>
+        <location filename="../Project/Project.py" line="2443"/>
         <source>Create main script</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2442"/>
+        <location filename="../Project/Project.py" line="2443"/>
         <source>&lt;p&gt;The mainscript &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4222"/>
+        <location filename="../Project/Project.py" line="4223"/>
         <source>Load Diagram</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4222"/>
+        <location filename="../Project/Project.py" line="4223"/>
         <source>&amp;Load Diagram...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4226"/>
+        <location filename="../Project/Project.py" line="4227"/>
         <source>Load a diagram from file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4228"/>
+        <location filename="../Project/Project.py" line="4229"/>
         <source>&lt;b&gt;Load Diagram...&lt;/b&gt;&lt;p&gt;This loads a diagram from file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -54940,12 +54993,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4854"/>
+        <location filename="../Project/Project.py" line="4855"/>
         <source>&lt;p&gt;The selected VCS &lt;b&gt;{0}&lt;/b&gt; could not be found. &lt;br/&gt;Reverting override.&lt;/p&gt;&lt;p&gt;{1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5589"/>
+        <location filename="../Project/Project.py" line="5590"/>
         <source>&lt;p&gt;The plugin file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt; &lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -54970,193 +55023,193 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2946"/>
+        <location filename="../Project/Project.py" line="2947"/>
         <source>Create project management directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2946"/>
+        <location filename="../Project/Project.py" line="2947"/>
         <source>&lt;p&gt;The project directory &lt;b&gt;{0}&lt;/b&gt; is not writable.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3972"/>
+        <location filename="../Project/Project.py" line="3973"/>
         <source>Alt+Ctrl+P</source>
         <comment>Project|Search Project File</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3978"/>
+        <location filename="../Project/Project.py" line="3979"/>
         <source>Search for a file in the project list of files.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3980"/>
+        <location filename="../Project/Project.py" line="3981"/>
         <source>&lt;b&gt;Search Project File&lt;/b&gt;&lt;p&gt;This searches for a file in the project list of files.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3972"/>
+        <location filename="../Project/Project.py" line="3973"/>
         <source>Search Project File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3972"/>
+        <location filename="../Project/Project.py" line="3973"/>
         <source>Search Project File...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5373"/>
+        <location filename="../Project/Project.py" line="5374"/>
         <source>Create Plugin Archives</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4270"/>
+        <location filename="../Project/Project.py" line="4271"/>
         <source>Create Plugin Archives (Snapshot)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4270"/>
+        <location filename="../Project/Project.py" line="4271"/>
         <source>Create Plugin Archives (&amp;Snapshot)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5351"/>
+        <location filename="../Project/Project.py" line="5352"/>
         <source>Select package lists:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5369"/>
+        <location filename="../Project/Project.py" line="5370"/>
         <source>Creating plugin archives...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5369"/>
+        <location filename="../Project/Project.py" line="5370"/>
         <source>Abort</source>
         <translation type="unfinished">Přerušit</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5369"/>
+        <location filename="../Project/Project.py" line="5370"/>
         <source>%v/%m Archives</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5385"/>
+        <location filename="../Project/Project.py" line="5386"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5362"/>
+        <location filename="../Project/Project.py" line="5363"/>
         <source>&lt;p&gt;No package list files (PKGLIST*) available or selected. Aborting...&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5413"/>
+        <location filename="../Project/Project.py" line="5414"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; is not ready yet.&lt;/p&gt;&lt;p&gt;Please rework it and delete the&apos;; initial_list&apos; line of the header.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3963"/>
+        <location filename="../Project/Project.py" line="3964"/>
         <source>&lt;b&gt;Search new files...&lt;/b&gt;&lt;p&gt;This searches for new files (sources, *.ui, *.idl, *.proto) in the project directory and registered subdirectories.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4021"/>
+        <location filename="../Project/Project.py" line="4022"/>
         <source>&lt;b&gt;Filetype Associations...&lt;/b&gt;&lt;p&gt;This shows a dialog to edit the file type associations of the project. These associations determine the type (source, form, interface, protocol or others) with a filename pattern. They are used when adding a file to the project and when performing a search for new files.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="1512"/>
+        <location filename="../Project/Project.py" line="1513"/>
         <source>&lt;p&gt;The selected translation file &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2231"/>
+        <location filename="../Project/Project.py" line="2232"/>
         <source>&lt;p&gt;The selected file &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2261"/>
+        <location filename="../Project/Project.py" line="2262"/>
         <source>&lt;p&gt;The selected directory &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2757"/>
+        <location filename="../Project/Project.py" line="2758"/>
         <source>Create Makefile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2757"/>
+        <location filename="../Project/Project.py" line="2758"/>
         <source>&lt;p&gt;The makefile &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5774"/>
+        <location filename="../Project/Project.py" line="5775"/>
         <source>Execute Make</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4291"/>
+        <location filename="../Project/Project.py" line="4292"/>
         <source>&amp;Execute Make</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4295"/>
+        <location filename="../Project/Project.py" line="4296"/>
         <source>Perform a &apos;make&apos; run.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4297"/>
+        <location filename="../Project/Project.py" line="4298"/>
         <source>&lt;b&gt;Execute Make&lt;/b&gt;&lt;p&gt;This performs a &apos;make&apos; run to rebuild the configured target.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5755"/>
+        <location filename="../Project/Project.py" line="5756"/>
         <source>Test for Changes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4305"/>
+        <location filename="../Project/Project.py" line="4306"/>
         <source>&amp;Test for Changes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4309"/>
+        <location filename="../Project/Project.py" line="4310"/>
         <source>Question &apos;make&apos;, if a rebuild is needed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4311"/>
+        <location filename="../Project/Project.py" line="4312"/>
         <source>&lt;b&gt;Test for Changes&lt;/b&gt;&lt;p&gt;This questions &apos;make&apos;, if a rebuild of the configured target is necessary.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4356"/>
+        <location filename="../Project/Project.py" line="4357"/>
         <source>Make</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5703"/>
+        <location filename="../Project/Project.py" line="5704"/>
         <source>The make process did not start.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5748"/>
+        <location filename="../Project/Project.py" line="5749"/>
         <source>The make process crashed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5758"/>
+        <location filename="../Project/Project.py" line="5759"/>
         <source>&lt;p&gt;There are changes that require the configured make target &lt;b&gt;{0}&lt;/b&gt; to be rebuilt.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5763"/>
+        <location filename="../Project/Project.py" line="5764"/>
         <source>&lt;p&gt;There are changes that require the default make target to be rebuilt.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5774"/>
+        <location filename="../Project/Project.py" line="5775"/>
         <source>The makefile contains errors.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -55171,7 +55224,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4344"/>
+        <location filename="../Project/Project.py" line="4345"/>
         <source>Project-T&amp;ools</source>
         <translation type="unfinished"></translation>
     </message>
@@ -55201,47 +55254,47 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4242"/>
+        <location filename="../Project/Project.py" line="4243"/>
         <source>Create an initial PKGLIST file for an eric plugin.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4244"/>
+        <location filename="../Project/Project.py" line="4245"/>
         <source>&lt;b&gt;Create Package List&lt;/b&gt;&lt;p&gt;This creates an initial list of files to include in an eric plugin archive. The list is created from the project file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4258"/>
+        <location filename="../Project/Project.py" line="4259"/>
         <source>Create eric plugin archive files.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4260"/>
+        <location filename="../Project/Project.py" line="4261"/>
         <source>&lt;b&gt;Create Plugin Archives&lt;/b&gt;&lt;p&gt;This creates eric plugin archive files using the list of files given in a PKGLIST* file. The archive name is built from the main script name if not designated in the package list file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4275"/>
+        <location filename="../Project/Project.py" line="4276"/>
         <source>Create eric plugin archive files (snapshot releases).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4277"/>
+        <location filename="../Project/Project.py" line="4278"/>
         <source>&lt;b&gt;Create Plugin Archives (Snapshot)&lt;/b&gt;&lt;p&gt;This creates eric plugin archive files using the list of files given in the PKGLIST* file. The archive name is built from the main script name if not designated in the package list file. The version entry of the main script is modified to reflect a snapshot release.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5441"/>
+        <location filename="../Project/Project.py" line="5442"/>
         <source>&lt;p&gt;The eric plugin archive file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5496"/>
+        <location filename="../Project/Project.py" line="5497"/>
         <source>&lt;p&gt;The eric plugin archive files were created with some errors.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5504"/>
+        <location filename="../Project/Project.py" line="5505"/>
         <source>&lt;p&gt;The eric plugin archive files were created successfully.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -57027,24 +57080,24 @@
 &lt;p&gt;Pokud je projekt pod správou verzovacího systému, tak se informace o repozitáři zobrazí stisknutím tlačítka &quot;Zobrazit info o repozitáři&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="284"/>
+        <location filename="../Project/PropertiesDialog.ui" line="298"/>
         <source>&amp;Author:</source>
         <translation>&amp;Autor:</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="294"/>
+        <location filename="../Project/PropertiesDialog.ui" line="308"/>
         <source>Enter authors name</source>
         <translation>Zadejte jméno autora</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="297"/>
+        <location filename="../Project/PropertiesDialog.ui" line="311"/>
         <source>&lt;b&gt;Author&lt;/b&gt;
 &lt;p&gt;Enter the name of the author.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Autor&lt;/b&gt;
 &lt;p&gt;Zadání jmána autora.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="326"/>
+        <location filename="../Project/PropertiesDialog.ui" line="340"/>
         <source>&amp;Description:</source>
         <translation>&amp;Popis:</translation>
     </message>
@@ -57066,12 +57119,12 @@
 &lt;p&gt;Zadání čísla verze.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="339"/>
+        <location filename="../Project/PropertiesDialog.ui" line="353"/>
         <source>Enter description</source>
         <translation>Zadejte popis</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="342"/>
+        <location filename="../Project/PropertiesDialog.ui" line="356"/>
         <source>&lt;b&gt;Description&lt;/b&gt;
 &lt;p&gt;Enter a short description for the project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Popis&lt;/b&gt;
@@ -57091,17 +57144,17 @@
 &lt;p&gt;Zadání adresáře projektu. Stisknutím pravého tlačítka jej můžete vybrat i pomocí dialogu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="305"/>
+        <location filename="../Project/PropertiesDialog.ui" line="319"/>
         <source>&amp;Email:</source>
         <translation>&amp;Email:</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="315"/>
+        <location filename="../Project/PropertiesDialog.ui" line="329"/>
         <source>Enter authors email</source>
         <translation>Zadejte email autora</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="318"/>
+        <location filename="../Project/PropertiesDialog.ui" line="332"/>
         <source>&lt;b&gt;Email&lt;/b&gt;
 &lt;p&gt;Enter the email address of the author&lt;/p&gt;</source>
         <translation>&lt;b&gt;Email&lt;/b&gt;
@@ -57173,22 +57226,22 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="383"/>
+        <location filename="../Project/PropertiesDialog.ui" line="397"/>
         <source>Press to show information about the repository</source>
         <translation>Stisknout pro zobrazení informace o repozitáři</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="386"/>
+        <location filename="../Project/PropertiesDialog.ui" line="400"/>
         <source>Show &amp;Repository Info</source>
         <translation>Zobrazit info o &amp;repozitáři</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="389"/>
+        <location filename="../Project/PropertiesDialog.ui" line="403"/>
         <source>Alt+R</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.py" line="119"/>
+        <location filename="../Project/PropertiesDialog.py" line="127"/>
         <source>The project is not version controlled.</source>
         <translation>Projekt není pod správou verzovacího systému.</translation>
     </message>
@@ -57234,12 +57287,12 @@
         <translation>Nastavení kontroly pravopisu...</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.py" line="113"/>
+        <location filename="../Project/PropertiesDialog.py" line="121"/>
         <source>The project is version controlled by &lt;b&gt;{0}&lt;/b&gt;.</source>
         <translation>Projekt je pod správou verzovacího systému &lt;b&gt;{0}&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.py" line="58"/>
+        <location filename="../Project/PropertiesDialog.py" line="66"/>
         <source>Source Files ({0});;All Files (*)</source>
         <translation>Zdrojové soubory ({0});;Všechny soubory (*)</translation>
     </message>
@@ -57274,12 +57327,12 @@
         <translation>Windows/DOS</translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="358"/>
+        <location filename="../Project/PropertiesDialog.ui" line="372"/>
         <source>Select to create a version controlled project</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/PropertiesDialog.ui" line="361"/>
+        <location filename="../Project/PropertiesDialog.ui" line="375"/>
         <source>Version Controlled Project</source>
         <translation type="unfinished"></translation>
     </message>
@@ -57298,6 +57351,21 @@
         <source>Press to open a dialog to enter the &apos;make&apos; parameters</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Project/PropertiesDialog.ui" line="284"/>
+        <source>Docstring Style:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/PropertiesDialog.ui" line="291"/>
+        <source>Select the docstring style for the project</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/PropertiesDialog.py" line="50"/>
+        <source>None</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ProtobufPage</name>
Binary file eric6/i18n/eric6_de.qm has changed
--- a/eric6/i18n/eric6_de.ts	Fri Jan 22 14:14:15 2021 +0100
+++ b/eric6/i18n/eric6_de.ts	Fri Jan 22 16:48:43 2021 +0100
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="de">
+<!DOCTYPE TS><TS version="2.0" language="de" sourcelanguage="">
 <context>
     <name>AboutDialog</name>
     <message>
@@ -2053,8 +2052,8 @@
     </message>
     <message>
         <location filename="../WebBrowser/Bookmarks/BookmarksMenu.py" line="170"/>
-        <source>Open in New Tab	Ctrl+LMB</source>
-        <translation>In neuem Register öffnen	Strg+LMK</translation>
+        <source>Open in New Tab<byte value="x9"/>Ctrl+LMB</source>
+        <translation>In neuem Register öffnen<byte value="x9"/>Strg+LMK</translation>
     </message>
     <message>
         <location filename="../WebBrowser/Bookmarks/BookmarksMenu.py" line="174"/>
@@ -2122,8 +2121,8 @@
     </message>
     <message>
         <location filename="../WebBrowser/Bookmarks/BookmarksToolBar.py" line="90"/>
-        <source>Open in New Tab	Ctrl+LMB</source>
-        <translation>In neuem Register öffnen	Strg+LMK</translation>
+        <source>Open in New Tab<byte value="x9"/>Ctrl+LMB</source>
+        <translation>In neuem Register öffnen<byte value="x9"/>Strg+LMK</translation>
     </message>
     <message>
         <location filename="../WebBrowser/Bookmarks/BookmarksToolBar.py" line="94"/>
@@ -8532,7 +8531,7 @@
         <translation>Docstring hat falsche Einrückung</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="83"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="86"/>
         <source>docstring summary does not end with a period</source>
         <translation>Docstring Zusammenfassung endet nicht mit einem Punkt</translation>
     </message>
@@ -8567,7 +8566,7 @@
         <translation>Klassendocstring hat keine nachfolgende Leerzeile</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="125"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="128"/>
         <source>docstring summary is not followed by a blank line</source>
         <translation>Docstring Zusammenfassung hat keine folgende Leerzeile</translation>
     </message>
@@ -8577,92 +8576,92 @@
         <translation>letzter Abschnitt des Docstring hat keine folgende Leerzeile</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="70"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="73"/>
         <source>private function/method is missing a docstring</source>
         <translation>Private Funktion/Methode hat keinen Docstring</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="73"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="76"/>
         <source>private class is missing a docstring</source>
         <translation>Private Klasse hat keinen Docstring</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="77"/>
-        <source>leading quotes of docstring not on separate line</source>
-        <translation>einleitende Anführungszeichen nicht auf separater Zeile</translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="80"/>
+        <source>leading quotes of docstring not on separate line</source>
+        <translation>einleitende Anführungszeichen nicht auf separater Zeile</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="83"/>
         <source>trailing quotes of docstring not on separate line</source>
         <translation>schließende Anführungszeichen nicht auf separater Zeile</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="87"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="90"/>
         <source>docstring does not contain a @return line but function/method returns something</source>
         <translation>Docstring enthält keine @return Zeile obwohl die Funktion/Methode etwas zurückgibt</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="91"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="94"/>
         <source>docstring contains a @return line but function/method doesn&apos;t return anything</source>
         <translation>Docstring enthält eine @return Zeile obwohl die Funktion/Methode nichts zurückgibt</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="103"/>
-        <source>docstring does not contain enough @param/@keyparam lines</source>
-        <translation>Docstring enthält nicht genügend @param/@keyparam Zeilen</translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="106"/>
-        <source>docstring contains too many @param/@keyparam lines</source>
-        <translation>Docstring enthält zu viele @param/@keyparam Zeilen</translation>
+        <source>docstring does not contain enough @param/@keyparam lines</source>
+        <translation>Docstring enthält nicht genügend @param/@keyparam Zeilen</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="109"/>
-        <source>keyword only arguments must be documented with @keyparam lines</source>
-        <translation>&apos;keyword only&apos; Argumente müssen mit @keyparam Zeilen dokumentiert werden</translation>
+        <source>docstring contains too many @param/@keyparam lines</source>
+        <translation>Docstring enthält zu viele @param/@keyparam Zeilen</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="112"/>
-        <source>order of @param/@keyparam lines does not match the function/method signature</source>
-        <translation>Reihenfolge der @param/@keyparam Zeilen stimmt nicht mit der Funktions-/Methodensignatur überein</translation>
+        <source>keyword only arguments must be documented with @keyparam lines</source>
+        <translation>&apos;keyword only&apos; Argumente müssen mit @keyparam Zeilen dokumentiert werden</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="115"/>
+        <source>order of @param/@keyparam lines does not match the function/method signature</source>
+        <translation>Reihenfolge der @param/@keyparam Zeilen stimmt nicht mit der Funktions-/Methodensignatur überein</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="118"/>
         <source>class docstring is preceded by a blank line</source>
         <translation>Klassendocstring hat eine führende Leerzeile</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="117"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="120"/>
         <source>class docstring is followed by a blank line</source>
         <translation>Klassendocstring hat eine nachfolgende Leerzeile</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="119"/>
-        <source>function/method docstring is preceded by a blank line</source>
-        <translation>Funktions-/Methodendocstring hat eine führende Leerzeile</translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="122"/>
+        <source>function/method docstring is preceded by a blank line</source>
+        <translation>Funktions-/Methodendocstring hat eine führende Leerzeile</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="125"/>
         <source>function/method docstring is followed by a blank line</source>
         <translation>Funktions-/Methodendocstring hat eine nachfolgende Leerzeile</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="128"/>
-        <source>last paragraph of docstring is followed by a blank line</source>
-        <translation>letzter Abschnitt des Docstring hat eine folgende Leerzeile</translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="131"/>
+        <source>last paragraph of docstring is followed by a blank line</source>
+        <translation>letzter Abschnitt des Docstring hat eine folgende Leerzeile</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="134"/>
         <source>docstring does not contain a @exception line but function/method raises an exception</source>
         <translation>Docstring enthält keine @exception Zeile obwohl die Funktion/Methode eine Ausnahme erzeugt</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="135"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="138"/>
         <source>docstring contains a @exception line but function/method doesn&apos;t raise an exception</source>
         <translation>Docstring enthält eine @exception Zeile obwohl die Funktion/Methode keine Ausnahme erzeugt</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="158"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="161"/>
         <source>{0}: {1}</source>
         <translation>{0}: {1}</translation>
     </message>
@@ -8672,42 +8671,42 @@
         <translation>Docstring enthält keine Zusammenfassung</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="85"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="88"/>
         <source>docstring summary does not start with &apos;{0}&apos;</source>
         <translation>Docstring Zusammenfassung beginnt nicht mit &apos;{0}&apos;</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="139"/>
-        <source>raised exception &apos;{0}&apos; is not documented in docstring</source>
-        <translation>Ausnahme &apos;{0}&apos; wird geworfen, ist aber nicht dokumentiert</translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="142"/>
-        <source>documented exception &apos;{0}&apos; is not raised</source>
-        <translation>dokumentierte Ausnahme &apos;{0}&apos; wird nicht geworfen</translation>
+        <source>raised exception &apos;{0}&apos; is not documented in docstring</source>
+        <translation>Ausnahme &apos;{0}&apos; wird geworfen, ist aber nicht dokumentiert</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="145"/>
-        <source>docstring does not contain a @signal line but class defines signals</source>
-        <translation>Docstring enthält keine @signal Zeile obwohl die Klasse Signale definiert</translation>
+        <source>documented exception &apos;{0}&apos; is not raised</source>
+        <translation>dokumentierte Ausnahme &apos;{0}&apos; wird nicht geworfen</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="148"/>
-        <source>docstring contains a @signal line but class doesn&apos;t define signals</source>
-        <translation>Docstring enthält eine @signal Zeile obwohl die Klasse keine Signale definiert</translation>
+        <source>docstring does not contain a @signal line but class defines signals</source>
+        <translation>Docstring enthält keine @signal Zeile obwohl die Klasse Signale definiert</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="151"/>
-        <source>defined signal &apos;{0}&apos; is not documented in docstring</source>
-        <translation>definiertes Signal &apos;{0}&apos; ist nicht dokumentiert</translation>
+        <source>docstring contains a @signal line but class doesn&apos;t define signals</source>
+        <translation>Docstring enthält eine @signal Zeile obwohl die Klasse keine Signale definiert</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="154"/>
+        <source>defined signal &apos;{0}&apos; is not documented in docstring</source>
+        <translation>definiertes Signal &apos;{0}&apos; ist nicht dokumentiert</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="157"/>
         <source>documented signal &apos;{0}&apos; is not defined</source>
         <translation>dokumentiertes Signal &apos;{0}&apos; ist nicht definiert</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="75"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="78"/>
         <source>class docstring is still a default string</source>
         <translation>Klassendocstring is noch immer ein Standardstring</translation>
     </message>
@@ -8722,15 +8721,43 @@
         <translation>Moduldocstring is noch immer ein Standardstring</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py" line="95"/>
+        <location filename="../Plugins/CheckerPlugins/