Merged the Safe Browsing extension into the default branch for further processing.

Fri, 04 Aug 2017 18:41:50 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 04 Aug 2017 18:41:50 +0200
changeset 5830
e91a1a8c0a5d
parent 5828
c8deff89c20c (diff)
parent 5829
d3448873ced3 (current diff)
child 5831
536d97e3f1a1

Merged the Safe Browsing extension into the default branch for further processing.

--- a/APIs/Python3/eric6.api	Fri Aug 04 18:38:45 2017 +0200
+++ b/APIs/Python3/eric6.api	Fri Aug 04 18:41:50 2017 +0200
@@ -4018,7 +4018,9 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.contextType?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.end?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.indent?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.setSpecial?4(special)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.source?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.special?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.ssource?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.start?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext?1(source, startLine, contextType)
--- a/DebugClients/Python/BreakpointWatch.py	Fri Aug 04 18:38:45 2017 +0200
+++ b/DebugClients/Python/BreakpointWatch.py	Fri Aug 04 18:41:50 2017 +0200
@@ -83,7 +83,7 @@
     @staticmethod
     def clear_break(filename, lineno):
         """
-        Public method reimplemented from bdb.py to clear a breakpoint.
+        Static method reimplemented from bdb.py to clear a breakpoint.
         
         @param filename file name of the bp to retrieve
         @type str
@@ -98,7 +98,7 @@
     @staticmethod
     def clear_all_breaks():
         """
-        Public method to clear all breakpoints.
+        Static method to clear all breakpoints.
         """
         Breakpoint.breaks.clear()
         Breakpoint.breakInFile.clear()
@@ -107,7 +107,7 @@
     @staticmethod
     def get_break(filename, lineno):
         """
-        Public method to get the breakpoint of a particular line.
+        Static method to get the breakpoint of a particular line.
         
         Because eric6 supports only one breakpoint per line, this
         method will return only one breakpoint.
@@ -124,7 +124,7 @@
     @staticmethod
     def effectiveBreak(filename, lineno, frame):
         """
-        Public method to determine which breakpoint for this filename:lineno
+        Static method to determine which breakpoint for this filename:lineno
         is to be acted upon.
 
         Called only if we know there is a bpt at this
@@ -248,7 +248,7 @@
     @staticmethod
     def clear_watch(cond):
         """
-        Public method to clear a watch expression.
+        Static method to clear a watch expression.
         
         @param cond expression of the watch expression to be cleared
         @type str
@@ -261,14 +261,14 @@
     @staticmethod
     def clear_all_watches():
         """
-        Public method to clear all watch expressions.
+        Static method to clear all watch expressions.
         """
         del Watch.watches[:]
 
     @staticmethod
     def get_watch(cond):
         """
-        Public method to get a watch expression.
+        Static method to get a watch expression.
         
         @param cond expression of the watch expression to be cleared
         @type str
@@ -282,7 +282,7 @@
     @staticmethod
     def effectiveWatch(frame):
         """
-        Public method to determine, if a watch expression is effective.
+        Static method to determine, if a watch expression is effective.
         
         @param frame the current execution frame
         @type frame object
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Fri Aug 04 18:38:45 2017 +0200
+++ b/Documentation/Help/source.qhp	Fri Aug 04 18:41:50 2017 +0200
@@ -3932,7 +3932,9 @@
       <keyword name="DocStyleContext.contextType" id="DocStyleContext.contextType" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.contextType" />
       <keyword name="DocStyleContext.end" id="DocStyleContext.end" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.end" />
       <keyword name="DocStyleContext.indent" id="DocStyleContext.indent" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.indent" />
+      <keyword name="DocStyleContext.setSpecial" id="DocStyleContext.setSpecial" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.setSpecial" />
       <keyword name="DocStyleContext.source" id="DocStyleContext.source" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.source" />
+      <keyword name="DocStyleContext.special" id="DocStyleContext.special" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.special" />
       <keyword name="DocStyleContext.ssource" id="DocStyleContext.ssource" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.ssource" />
       <keyword name="DocStyleContext.start" id="DocStyleContext.start" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html#DocStyleContext.start" />
       <keyword name="DocumentationPlugins (Package)" id="DocumentationPlugins (Package)" ref="index-eric6.Plugins.DocumentationPlugins.html" />
--- a/Documentation/Source/eric6.DebugClients.Python.BreakpointWatch.html	Fri Aug 04 18:38:45 2017 +0200
+++ b/Documentation/Source/eric6.DebugClients.Python.BreakpointWatch.html	Fri Aug 04 18:41:50 2017 +0200
@@ -88,16 +88,16 @@
 <table>
 <tr>
 <td><a href="#Breakpoint.clear_all_breaks">clear_all_breaks</a></td>
-<td>Public method to clear all breakpoints.</td>
+<td>Static method to clear all breakpoints.</td>
 </tr><tr>
 <td><a href="#Breakpoint.clear_break">clear_break</a></td>
-<td>Public method reimplemented from bdb.py to clear a breakpoint.</td>
+<td>Static method reimplemented from bdb.py to clear a breakpoint.</td>
 </tr><tr>
 <td><a href="#Breakpoint.effectiveBreak">effectiveBreak</a></td>
-<td>Public method to determine which breakpoint for this filename:lineno is to be acted upon.</td>
+<td>Static method to determine which breakpoint for this filename:lineno is to be acted upon.</td>
 </tr><tr>
 <td><a href="#Breakpoint.get_break">get_break</a></td>
-<td>Public method to get the breakpoint of a particular line.</td>
+<td>Static method to get the breakpoint of a particular line.</td>
 </tr>
 </table>
 <a NAME="Breakpoint.__init__" ID="Breakpoint.__init__"></a>
@@ -138,12 +138,12 @@
 <h4>Breakpoint.clear_all_breaks (static)</h4>
 <b>clear_all_breaks</b>(<i></i>)
 <p>
-        Public method to clear all breakpoints.
+        Static method to clear all breakpoints.
 </p><a NAME="Breakpoint.clear_break" ID="Breakpoint.clear_break"></a>
 <h4>Breakpoint.clear_break (static)</h4>
 <b>clear_break</b>(<i>lineno</i>)
 <p>
-        Public method reimplemented from bdb.py to clear a breakpoint.
+        Static method reimplemented from bdb.py to clear a breakpoint.
 </p><dl>
 <dt><i>filename</i> (str)</dt>
 <dd>
@@ -156,7 +156,7 @@
 <h4>Breakpoint.effectiveBreak (static)</h4>
 <b>effectiveBreak</b>(<i>lineno, frame</i>)
 <p>
-        Public method to determine which breakpoint for this filename:lineno
+        Static method to determine which breakpoint for this filename:lineno
         is to be acted upon.
 </p><p>
         Called only if we know there is a bpt at this
@@ -188,7 +188,7 @@
 <h4>Breakpoint.get_break (static)</h4>
 <b>get_break</b>(<i>lineno</i>)
 <p>
-        Public method to get the breakpoint of a particular line.
+        Static method to get the breakpoint of a particular line.
 </p><p>
         Because eric6 supports only one breakpoint per line, this
         method will return only one breakpoint.
@@ -251,16 +251,16 @@
 <table>
 <tr>
 <td><a href="#Watch.clear_all_watches">clear_all_watches</a></td>
-<td>Public method to clear all watch expressions.</td>
+<td>Static method to clear all watch expressions.</td>
 </tr><tr>
 <td><a href="#Watch.clear_watch">clear_watch</a></td>
-<td>Public method to clear a watch expression.</td>
+<td>Static method to clear a watch expression.</td>
 </tr><tr>
 <td><a href="#Watch.effectiveWatch">effectiveWatch</a></td>
-<td>Public method to determine, if a watch expression is effective.</td>
+<td>Static method to determine, if a watch expression is effective.</td>
 </tr><tr>
 <td><a href="#Watch.get_watch">get_watch</a></td>
-<td>Public method to get a watch expression.</td>
+<td>Static method to get a watch expression.</td>
 </tr>
 </table>
 <a NAME="Watch.__init__" ID="Watch.__init__"></a>
@@ -301,12 +301,12 @@
 <h4>Watch.clear_all_watches (static)</h4>
 <b>clear_all_watches</b>(<i></i>)
 <p>
-        Public method to clear all watch expressions.
+        Static method to clear all watch expressions.
 </p><a NAME="Watch.clear_watch" ID="Watch.clear_watch"></a>
 <h4>Watch.clear_watch (static)</h4>
 <b>clear_watch</b>(<i></i>)
 <p>
-        Public method to clear a watch expression.
+        Static method to clear a watch expression.
 </p><dl>
 <dt><i>cond</i> (str)</dt>
 <dd>
@@ -316,7 +316,7 @@
 <h4>Watch.effectiveWatch (static)</h4>
 <b>effectiveWatch</b>(<i></i>)
 <p>
-        Public method to determine, if a watch expression is effective.
+        Static method to determine, if a watch expression is effective.
 </p><dl>
 <dt><i>frame</i> (frame object)</dt>
 <dd>
@@ -337,7 +337,7 @@
 <h4>Watch.get_watch (static)</h4>
 <b>get_watch</b>(<i></i>)
 <p>
-        Public method to get a watch expression.
+        Static method to get a watch expression.
 </p><dl>
 <dt><i>cond</i> (str)</dt>
 <dd>
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html	Fri Aug 04 18:38:45 2017 +0200
+++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.html	Fri Aug 04 18:41:50 2017 +0200
@@ -866,9 +866,15 @@
 <td><a href="#DocStyleContext.indent">indent</a></td>
 <td>Public method to get the indentation of the first line.</td>
 </tr><tr>
+<td><a href="#DocStyleContext.setSpecial">setSpecial</a></td>
+<td>Public method to set a special attribute for the context.</td>
+</tr><tr>
 <td><a href="#DocStyleContext.source">source</a></td>
 <td>Public method to get the source.</td>
 </tr><tr>
+<td><a href="#DocStyleContext.special">special</a></td>
+<td>Public method to get the special context attribute string.</td>
+</tr><tr>
 <td><a href="#DocStyleContext.ssource">ssource</a></td>
 <td>Public method to get the joined source lines.</td>
 </tr><tr>
@@ -926,6 +932,16 @@
 <dd>
 indentation string (string)
 </dd>
+</dl><a NAME="DocStyleContext.setSpecial" ID="DocStyleContext.setSpecial"></a>
+<h4>DocStyleContext.setSpecial</h4>
+<b>setSpecial</b>(<i>special</i>)
+<p>
+        Public method to set a special attribute for the context.
+</p><dl>
+<dt><i>special</i> (str)</dt>
+<dd>
+attribute string
+</dd>
 </dl><a NAME="DocStyleContext.source" ID="DocStyleContext.source"></a>
 <h4>DocStyleContext.source</h4>
 <b>source</b>(<i></i>)
@@ -936,6 +952,21 @@
 <dd>
 source (list of string)
 </dd>
+</dl><a NAME="DocStyleContext.special" ID="DocStyleContext.special"></a>
+<h4>DocStyleContext.special</h4>
+<b>special</b>(<i></i>)
+<p>
+        Public method to get the special context attribute string.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+attribute string
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
 </dl><a NAME="DocStyleContext.ssource" ID="DocStyleContext.ssource"></a>
 <h4>DocStyleContext.ssource</h4>
 <b>ssource</b>(<i></i>)
--- a/Documentation/Source/eric6.QScintilla.SpellChecker.html	Fri Aug 04 18:38:45 2017 +0200
+++ b/Documentation/Source/eric6.QScintilla.SpellChecker.html	Fri Aug 04 18:41:50 2017 +0200
@@ -56,7 +56,7 @@
 <table>
 <tr>
 <td><a href="#SpellChecker._getDict">_getDict</a></td>
-<td>Protected classmethod to get a new dictionary.</td>
+<td>Protected class method to get a new dictionary.</td>
 </tr><tr>
 <td><a href="#SpellChecker.getAvailableLanguages">getAvailableLanguages</a></td>
 <td>Class method to get all available languages.</td>
@@ -167,7 +167,7 @@
 <h4>SpellChecker._getDict (class method)</h4>
 <b>_getDict</b>(<i>lang, pwl="", pel=""</i>)
 <p>
-        Protected classmethod to get a new dictionary.
+        Protected class method to get a new dictionary.
 </p><dl>
 <dt><i>lang</i></dt>
 <dd>
--- a/Documentation/Source/eric6.Toolbox.PyQt4ImportHook.html	Fri Aug 04 18:38:45 2017 +0200
+++ b/Documentation/Source/eric6.Toolbox.PyQt4ImportHook.html	Fri Aug 04 18:41:50 2017 +0200
@@ -42,8 +42,8 @@
 <a NAME="PyQt4Importer" ID="PyQt4Importer"></a>
 <h2>PyQt4Importer</h2>
 <p>
-        Class implementing an importer converting PyQt5 imports to PyQt4
-        imports.
+    Class implementing an importer converting PyQt5 imports to PyQt4
+    imports.
 </p>
 <h3>Derived from</h3>
 object
@@ -72,19 +72,19 @@
 <table>
 <tr>
 <td><a href="#PyQt4Importer.QComboBox_currentData">QComboBox_currentData</a></td>
-<td>Public method to emulate the currentData method of Qt5.</td>
+<td>Static method to emulate the currentData method of Qt5.</td>
 </tr>
 </table>
 <a NAME="PyQt4Importer.__init__" ID="PyQt4Importer.__init__"></a>
 <h4>PyQt4Importer (Constructor)</h4>
 <b>PyQt4Importer</b>(<i></i>)
 <p>
-            Constructor
+        Constructor
 </p><a NAME="PyQt4Importer.find_module" ID="PyQt4Importer.find_module"></a>
 <h4>PyQt4Importer.find_module</h4>
 <b>find_module</b>(<i>fullname, path=None</i>)
 <p>
-            Public method returning the module loader.
+        Public method returning the module loader.
 </p><dl>
 <dt><i>fullname</i></dt>
 <dd>
@@ -102,7 +102,7 @@
 <h4>PyQt4Importer.load_module</h4>
 <b>load_module</b>(<i>fullname</i>)
 <p>
-            Public method to load a module.
+        Public method to load a module.
 </p><dl>
 <dt><i>fullname</i></dt>
 <dd>
@@ -117,17 +117,25 @@
 <h4>PyQt4Importer.QComboBox_currentData (static)</h4>
 <b>QComboBox_currentData</b>(<i>role=None</i>)
 <p>
-            Public method to emulate the currentData method of Qt5.
+        Static method to emulate the currentData method of Qt5.
 </p><dl>
-<dt><i>role</i></dt>
+<dt><i>other</i> (QComboBox)</dt>
 <dd>
-role of which data should be retrived
+reference to the combo box to get the user data of
+</dd><dt><i>role</i> (int)</dt>
+<dd>
+role of which data should be retrieved
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
 stored data at current selection
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+any
+</dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
--- a/Globals/__init__.py	Fri Aug 04 18:38:45 2017 +0200
+++ b/Globals/__init__.py	Fri Aug 04 18:41:50 2017 +0200
@@ -141,11 +141,10 @@
         else:
             cdn = ".eric6"
             
-        hp = QDir.homePath()
-        dn = QDir(hp)
-        dn.mkdir(cdn)
-        hp += "/" + cdn
-    return QDir.toNativeSeparators(hp)
+        hp = os.path.join(os.path.expanduser("~"), cdn)
+        if not os.path.exists(hp):
+            os.mkdir(hp)
+    return hp
 
 
 def setConfigDir(d):
--- a/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py	Fri Aug 04 18:38:45 2017 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py	Fri Aug 04 18:41:50 2017 +0200
@@ -51,6 +51,7 @@
         self.__start = startLine
         self.__indent = ""
         self.__type = contextType
+        self.__special = ""
         
         # ensure first line is left justified
         if self.__source:
@@ -105,6 +106,24 @@
         @return context type (string)
         """
         return self.__type
+    
+    def setSpecial(self, special):
+        """
+        Public method to set a special attribute for the context.
+        
+        @param special attribute string
+        @type str
+        """
+        self.__special = special
+    
+    def special(self):
+        """
+        Public method to get the special context attribute string.
+        
+        @return attribute string
+        @rtype str
+        """
+        return self.__special
 
 
 class DocStyleChecker(object):
@@ -619,9 +638,17 @@
                         end = line - 1, char
                         startLine = classContext.start() + start[0]
                         endLine = classContext.start() + end[0]
-                        contexts.append(DocStyleContext(
+                        context = DocStyleContext(
                             self.__source[startLine:endLine],
-                            startLine, "def"))
+                            startLine, "def")
+                        if startLine > 0:
+                            if self.__source[startLine - 1].strip() == \
+                                    "@staticmethod":
+                                context.setSpecial("staticmethod")
+                            elif self.__source[startLine - 1].strip() == \
+                                    "@classmethod":
+                                context.setSpecial("classmethod")
+                        contexts.append(context)
                 except StopIteration:
                     pass
             self.__methodsCache = contexts
@@ -1356,6 +1383,45 @@
                 if firstWord != 'special':
                     self.__error(docstringContext.start() + lineNumber, 0,
                                  "D232", 'special')
+            elif context.special() == "staticmethod":
+                secondWord = summary.strip().split(None, 2)[1].lower()
+                if firstWord != 'static' and secondWord != 'static':
+                    self.__error(docstringContext.start() + lineNumber, 0,
+                                 "D232", 'static')
+                elif secondWord == 'static':
+                    if functionName.startswith(('__', 'on_')):
+                        if firstWord != 'private':
+                            self.__error(docstringContext.start() + lineNumber,
+                                         0, "D232", 'private static')
+                    elif functionName.startswith('_') or \
+                            functionName.endswith('Event'):
+                        if firstWord != 'protected':
+                            self.__error(docstringContext.start() + lineNumber,
+                                         0, "D232", 'protected static')
+                    else:
+                        if firstWord != 'public':
+                            self.__error(docstringContext.start() + lineNumber,
+                                         0, "D232", 'public static')
+            elif arguments.startswith(('cls,', 'cls)')) or \
+                    context.special() == "classmethod":
+                secondWord = summary.strip().split(None, 2)[1].lower()
+                if firstWord != 'class' and secondWord != 'class':
+                    self.__error(docstringContext.start() + lineNumber, 0,
+                                 "D232", 'class')
+                elif secondWord == 'class':
+                    if functionName.startswith(('__', 'on_')):
+                        if firstWord != 'private':
+                            self.__error(docstringContext.start() + lineNumber,
+                                         0, "D232", 'private class')
+                    elif functionName.startswith('_') or \
+                            functionName.endswith('Event'):
+                        if firstWord != 'protected':
+                            self.__error(docstringContext.start() + lineNumber,
+                                         0, "D232", 'protected class')
+                    else:
+                        if firstWord != 'public':
+                            self.__error(docstringContext.start() + lineNumber,
+                                         0, "D232", 'public class')
             elif functionName.startswith(('__', 'on_')):
                 if firstWord != 'private':
                     self.__error(docstringContext.start() + lineNumber, 0,
@@ -1365,10 +1431,6 @@
                 if firstWord != 'protected':
                     self.__error(docstringContext.start() + lineNumber, 0,
                                  "D232", 'protected')
-            elif arguments.startswith(('cls,', 'cls)')):
-                if firstWord != 'class':
-                    self.__error(docstringContext.start() + lineNumber, 0,
-                                 "D232", 'class')
             else:
                 if firstWord != 'public':
                     self.__error(docstringContext.start() + lineNumber, 0,
--- a/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py	Fri Aug 04 18:38:45 2017 +0200
+++ b/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py	Fri Aug 04 18:41:50 2017 +0200
@@ -183,6 +183,7 @@
             self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
             self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True)
             self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
+            self.showButton.setEnabled(False)
             self.checkProgress.setVisible(True)
             QApplication.processEvents()
             
--- a/QScintilla/SearchReplaceWidget.py	Fri Aug 04 18:38:45 2017 +0200
+++ b/QScintilla/SearchReplaceWidget.py	Fri Aug 04 18:41:50 2017 +0200
@@ -337,7 +337,7 @@
             if self.__replace:
                 self.__setReplaceSelectionEnabled(False)
                 self.__setReplaceAndSearchEnabled(False)
-                self.__setReplaceAllEnabled(False)
+                self.__setReplaceAllEnabled(True)
 
     @pyqtSlot()
     def on_findNextButton_clicked(self):
--- a/QScintilla/SpellChecker.py	Fri Aug 04 18:38:45 2017 +0200
+++ b/QScintilla/SpellChecker.py	Fri Aug 04 18:41:50 2017 +0200
@@ -129,7 +129,7 @@
     @classmethod
     def _getDict(cls, lang, pwl="", pel=""):
         """
-        Protected classmethod to get a new dictionary.
+        Protected class method to get a new dictionary.
         
         @param lang the language to be used as the default (string).
             The string should be in language locale format (e.g. en_US, de).
--- a/Toolbox/PyQt4ImportHook.py	Fri Aug 04 18:38:45 2017 +0200
+++ b/Toolbox/PyQt4ImportHook.py	Fri Aug 04 18:41:50 2017 +0200
@@ -10,6 +10,82 @@
 from __future__ import unicode_literals
 
 import sys
+import importlib
+
+
+class PyQt4Importer(object):
+    """
+    Class implementing an importer converting PyQt5 imports to PyQt4
+    imports.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        self.__path = None
+    
+    def find_module(self, fullname, path=None):
+        """
+        Public method returning the module loader.
+        
+        @param fullname name of the module to be loaded (string)
+        @param path path to resolve the module name (string)
+        @return module loader object
+        """
+        if fullname.startswith("PyQt5"):
+            self.__path = path
+            return self
+        
+        return None
+    
+    @staticmethod
+    def QComboBox_currentData(other, role=None):
+        """
+        Static method to emulate the currentData method of Qt5.
+        
+        @param other reference to the combo box to get the user data of
+        @type QComboBox
+        @param role role of which data should be retrieved
+        @type int
+        @return stored data at current selection
+        @rtype any
+        """
+        import PyQt4.Qt
+        if role is None:
+            role = PyQt4.Qt.Qt.UserRole
+        
+        idx = other.currentIndex()
+        return other.itemData(idx, role)
+    
+    def load_module(self, fullname):
+        """
+        Public method to load a module.
+        
+        @param fullname name of the module to be loaded (string)
+        @return reference to the loaded module (module)
+        """
+        if fullname in ["PyQt5.QtWidgets", "PyQt5.QtPrintSupport"]:
+            newname = "PyQt4.QtGui"
+        elif fullname in ["PyQt5.QtWebKitWidgets"]:
+            newname = "PyQt4.QtWebKit"
+        else:
+            newname = fullname.replace("PyQt5", "PyQt4")
+        
+        module = importlib.import_module(newname)
+        sys.modules[fullname] = module
+        if fullname == "PyQt5.QtCore":
+            import PyQt4.QtGui
+            module.qInstallMessageHandler = module.qInstallMsgHandler
+            module.QItemSelectionModel = PyQt4.QtGui.QItemSelectionModel
+            module.QItemSelection = PyQt4.QtGui.QItemSelection
+            module.QSortFilterProxyModel = \
+                PyQt4.QtGui.QSortFilterProxyModel
+            module.QAbstractProxyModel = PyQt4.QtGui.QAbstractProxyModel
+            module.QStringListModel = PyQt4.QtGui.QStringListModel
+            
+            PyQt4.QtGui.QComboBox.currentData = self.QComboBox_currentData
+        return module
+
 try:
     if "--pyqt4" in sys.argv:
         sys.argv.remove("--pyqt4")
@@ -17,77 +93,6 @@
         raise ImportError
     import PyQt5    # __IGNORE_WARNING__
 except ImportError:
-    import importlib
-
-    class PyQt4Importer(object):
-        """
-        Class implementing an importer converting PyQt5 imports to PyQt4
-        imports.
-        """
-        def __init__(self):
-            """
-            Constructor
-            """
-            self.__path = None
-        
-        def find_module(self, fullname, path=None):
-            """
-            Public method returning the module loader.
-            
-            @param fullname name of the module to be loaded (string)
-            @param path path to resolve the module name (string)
-            @return module loader object
-            """
-            if fullname.startswith("PyQt5"):
-                self.__path = path
-                return self
-            
-            return None
-        
-        @staticmethod
-        def QComboBox_currentData(other, role=None):
-            """
-            Public method to emulate the currentData method of Qt5.
-            
-            @param role role of which data should be retrived
-            @return stored data at current selection
-            """
-            import PyQt4.Qt
-            if role is None:
-                role = PyQt4.Qt.Qt.UserRole
-            
-            idx = other.currentIndex()
-            return other.itemData(idx, role)
-        
-        def load_module(self, fullname):
-            """
-            Public method to load a module.
-            
-            @param fullname name of the module to be loaded (string)
-            @return reference to the loaded module (module)
-            """
-            if fullname in ["PyQt5.QtWidgets", "PyQt5.QtPrintSupport"]:
-                newname = "PyQt4.QtGui"
-            elif fullname in ["PyQt5.QtWebKitWidgets"]:
-                newname = "PyQt4.QtWebKit"
-            else:
-                newname = fullname.replace("PyQt5", "PyQt4")
-            
-            module = importlib.import_module(newname)
-            sys.modules[fullname] = module
-            if fullname == "PyQt5.QtCore":
-                import PyQt4.QtGui
-                module.qInstallMessageHandler = module.qInstallMsgHandler
-                module.QItemSelectionModel = PyQt4.QtGui.QItemSelectionModel
-                module.QItemSelection = PyQt4.QtGui.QItemSelection
-                module.QSortFilterProxyModel = \
-                    PyQt4.QtGui.QSortFilterProxyModel
-                module.QAbstractProxyModel = PyQt4.QtGui.QAbstractProxyModel
-                module.QStringListModel = PyQt4.QtGui.QStringListModel
-                
-                PyQt4.QtGui.QComboBox.currentData = self.QComboBox_currentData
-            return module
-
     sys.meta_path.insert(0, PyQt4Importer())
     
     if sys.version_info[0] == 2:
--- a/changelog	Fri Aug 04 18:38:45 2017 +0200
+++ b/changelog	Fri Aug 04 18:41:50 2017 +0200
@@ -1,14 +1,17 @@
 Change Log
 ----------
+Version 17.09:
+- bug fixes
+
 Version 17.08:
 - bug fixes
 - Shell
-  -- added support for dfferent history navigation styles (disabled, Linux,
+  -- added support for different history navigation styles (disabled, Linux,
      Windows)
   -- improved shell history dialog
 - Templates
-  - added some new predefined template variables (time, path_name_rel,
-    dir_name_rel)
+  -- added some new predefined template variables (time, path_name_rel,
+     dir_name_rel)
 - Web Browser (NG)
   -- added support for sessions
 
--- a/i18n/eric6_cs.ts	Fri Aug 04 18:38:45 2017 +0200
+++ b/i18n/eric6_cs.ts	Fri Aug 04 18:41:50 2017 +0200
@@ -41062,22 +41062,22 @@
 <context>
     <name>PreviewProcessingThread</name>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="434"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="436"/>
         <source>&lt;p&gt;No preview available for this type of file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="566"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="568"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;python-docutils&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="511"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="513"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;sphinx&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager,&apos;pip install Sphinx&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="591"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="593"/>
         <source>&lt;p&gt;Markdown preview requires the &lt;b&gt;python-markdown&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;installation instructions.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
--- a/i18n/eric6_de.ts	Fri Aug 04 18:38:45 2017 +0200
+++ b/i18n/eric6_de.ts	Fri Aug 04 18:41:50 2017 +0200
@@ -40151,22 +40151,22 @@
 <context>
     <name>PreviewProcessingThread</name>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="434"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="436"/>
         <source>&lt;p&gt;No preview available for this type of file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Für diesen Dateityp ist keine Vorschau verfügbar.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="566"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="568"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;python-docutils&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die ReStructuredText-Vorschau erfordert das &lt;b&gt;python-docutils&lt;/b&gt;-Paket.&lt;br/&gt;Installiere es mit dem Paketmanager,&apos;pip install docutils&apos; oder siehe &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;diese Seite.&lt;/a&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="511"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="513"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;sphinx&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager,&apos;pip install Sphinx&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die ReStructuredText-Vorschau erfordert das &lt;b&gt;sphinx&lt;/b&gt;-Paket.&lt;br/&gt;Installiere es mit dem Paketmanager,&apos;pip install Sphinx&apos; oder siehe &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;diese Seite.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternativ kann die Verwendung von Sphinx auf der Konfigurationsseite Editor, Dateibehandlung deaktiviert werden.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="591"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="593"/>
         <source>&lt;p&gt;Markdown preview requires the &lt;b&gt;python-markdown&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;installation instructions.&lt;/a&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die Markdown-Vorschau erfordert das &lt;b&gt;python-markdown&lt;/b&gt;-Paket.&lt;br/&gt;Installiere es mit dem Paketmanager, &apos;pip install docutils&apos; oder siehe &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;die Installationsanleitung.&lt;/a&gt;&lt;/p&gt;</translation>
     </message>
--- a/i18n/eric6_empty.ts	Fri Aug 04 18:38:45 2017 +0200
+++ b/i18n/eric6_empty.ts	Fri Aug 04 18:41:50 2017 +0200
@@ -39945,22 +39945,22 @@
 <context>
     <name>PreviewProcessingThread</name>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="434"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="436"/>
         <source>&lt;p&gt;No preview available for this type of file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="511"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="513"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;sphinx&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager,&apos;pip install Sphinx&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="566"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="568"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;python-docutils&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="591"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="593"/>
         <source>&lt;p&gt;Markdown preview requires the &lt;b&gt;python-markdown&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;installation instructions.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
--- a/i18n/eric6_en.ts	Fri Aug 04 18:38:45 2017 +0200
+++ b/i18n/eric6_en.ts	Fri Aug 04 18:41:50 2017 +0200
@@ -39984,22 +39984,22 @@
 <context>
     <name>PreviewProcessingThread</name>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="434"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="436"/>
         <source>&lt;p&gt;No preview available for this type of file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="566"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="568"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;python-docutils&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="511"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="513"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;sphinx&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager,&apos;pip install Sphinx&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="591"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="593"/>
         <source>&lt;p&gt;Markdown preview requires the &lt;b&gt;python-markdown&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;installation instructions.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
Binary file i18n/eric6_es.qm has changed
--- a/i18n/eric6_es.ts	Fri Aug 04 18:38:45 2017 +0200
+++ b/i18n/eric6_es.ts	Fri Aug 04 18:41:50 2017 +0200
@@ -94,7 +94,7 @@
     <message>
         <location filename="../WebBrowser/AdBlock/AdBlockDialog.ui" line="14"/>
         <source>AdBlock Configuration</source>
-        <translation>Configuración de AdBlock </translation>
+        <translation>Configuración de AdBlock</translation>
     </message>
     <message>
         <location filename="../WebBrowser/AdBlock/AdBlockDialog.ui" line="23"/>
@@ -477,7 +477,7 @@
     <message>
         <location filename="../Project/AddDirectoryDialog.ui" line="105"/>
         <source>Select, whether a recursive add should be performed</source>
-        <translation>Seleccione, si debe realizarse un agregado recursivo </translation>
+        <translation>Seleccione, si debe realizarse un agregado recursivo</translation>
     </message>
     <message>
         <location filename="../Project/AddDirectoryDialog.ui" line="108"/>
@@ -1174,7 +1174,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="37"/>
         <source>Select, if only one instance of the application should be running</source>
-        <translation>Seleccione, si se desea ejecutar una única instancia de la aplicación </translation>
+        <translation>Seleccione, si se desea ejecutar una única instancia de la aplicación</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="40"/>
@@ -1339,7 +1339,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="251"/>
         <source> ms</source>
-        <translation>ms</translation>
+        <translation> ms</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="126"/>
@@ -2127,7 +2127,7 @@
     <message>
         <location filename="../Debugger/BreakPointModel.py" line="39"/>
         <source>Ignore Count</source>
-        <translation>Conteo Ignorar </translation>
+        <translation>Conteo Ignorar</translation>
     </message>
 </context>
 <context>
@@ -3273,7 +3273,7 @@
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui" line="318"/>
         <source>Select to allow hanging closing brackets</source>
-        <translation>Seleccionar para permitir hanging closing brackets </translation>
+        <translation>Seleccionar para permitir hanging closing brackets</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui" line="321"/>
@@ -3373,7 +3373,7 @@
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui" line="779"/>
         <source>Shows the progress of the code style check</source>
-        <translation>Muestra el progreso de la revisión de estilo de código </translation>
+        <translation>Muestra el progreso de la revisión de estilo de código</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui" line="788"/>
@@ -3863,7 +3863,7 @@
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="779"/>
         <source> no message defined for code &apos;{0}&apos;</source>
-        <translation>sin mensaje definido para el código &apos;{0}&apos;</translation>
+        <translation> sin mensaje definido para el código &apos;{0}&apos;</translation>
     </message>
 </context>
 <context>
@@ -4524,7 +4524,7 @@
     <message>
         <location filename="../Preferences/ConfigurationDialog.py" line="717"/>
         <source>Configuration Page Error</source>
-        <translation> Error de Configuración de Página</translation>
+        <translation>Error de Configuración de Página</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationDialog.py" line="244"/>
@@ -5411,7 +5411,9 @@
         <source>
 Not connected
 </source>
-        <translation>No conectado</translation>
+        <translation>
+No conectado
+</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugServer.py" line="733"/>
@@ -6065,7 +6067,8 @@
 {1}
 </source>
         <translation>El programa ha terminado con estado de salida {0}.
-{1}</translation>
+{1}
+</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugUI.py" line="1071"/>
@@ -6073,7 +6076,8 @@
 {2}
 </source>
         <translation>&quot;{0}&quot; ha terminado con estado de salida {1}.
-{2}</translation>
+{2}
+</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugUI.py" line="362"/>
@@ -6101,7 +6105,7 @@
     <message>
         <location filename="../Debugger/DebugViewer.py" line="174"/>
         <source>Enter regular expression patterns separated by &apos;;&apos; to define variable filters. </source>
-        <translation>Para definir filtros de variables introduzca patrones de expresión regular separados por &apos;;&apos;.</translation>
+        <translation>Para definir filtros de variables introduzca patrones de expresión regular separados por &apos;;&apos;. </translation>
     </message>
     <message>
         <location filename="../Debugger/DebugViewer.py" line="178"/>
@@ -7019,7 +7023,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/DebuggerPythonPage.ui" line="46"/>
         <source>Enter the path of the Python interpreter to be used by the debug client.</source>
-        <translation>Introduzca la ruta del intérprete Python que debe utilizar el cliente de depuración. </translation>
+        <translation>Introduzca la ruta del intérprete Python que debe utilizar el cliente de depuración.</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/DebuggerPythonPage.ui" line="120"/>
@@ -7380,7 +7384,7 @@
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359"/>
         <source>docstring summary is not followed by a blank line</source>
-        <translation>docstring de resumen no seguido de línea en blanco </translation>
+        <translation>docstring de resumen no seguido de línea en blanco</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310"/>
@@ -7410,7 +7414,7 @@
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329"/>
         <source>docstring does not contain a @return line but function/method returns something</source>
-        <translation>docstring no contiene una línea @return pero la función/método retorna algo </translation>
+        <translation>docstring no contiene una línea @return pero la función/método retorna algo</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="333"/>
@@ -7677,8 +7681,7 @@
     <message>
         <location filename="../WebBrowser/Download/DownloadItem.py" line="214"/>
         <source>Web Archive (*.mhtml *.mht)</source>
-        <translation>
-Archivo Web (*.mhtml *.mht)</translation>
+        <translation>Archivo Web (*.mhtml *.mht)</translation>
     </message>
     <message>
         <location filename="../WebBrowser/Download/DownloadItem.py" line="215"/>
@@ -8432,7 +8435,7 @@
     <message>
         <location filename="../E5Network/E5NetworkProxyFactory.py" line="224"/>
         <source>Proxy Configuration Error</source>
-        <translation> Error de Configuración de Proxy</translation>
+        <translation>Error de Configuración de Proxy</translation>
     </message>
     <message>
         <location filename="../E5Network/E5NetworkProxyFactory.py" line="53"/>
@@ -10717,7 +10720,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorExportersPage.ui" line="393"/>
         <source>Use WYSIWYG mode</source>
-        <translation>Utilizar modo WYSIWYG </translation>
+        <translation>Utilizar modo WYSIWYG</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorExportersPage.ui" line="97"/>
@@ -10890,7 +10893,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="69"/>
         <source>Warn, if file is greater than</source>
-        <translation>Avisar si un archivo es mayor que </translation>
+        <translation>Avisar si un archivo es mayor que</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="76"/>
@@ -10900,7 +10903,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="79"/>
         <source> KB</source>
-        <translation>KB</translation>
+        <translation> KB</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="174"/>
@@ -11020,7 +11023,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="258"/>
         <source>Select to use the advanced encoding detection </source>
-        <translation>Seleccionar para utilizar la detección avanzada de codificación</translation>
+        <translation>Seleccionar para utilizar la detección avanzada de codificación </translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorFilePage.ui" line="261"/>
@@ -12366,7 +12369,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorSearchPage.ui" line="93"/>
         <source> ms</source>
-        <translation>ms</translation>
+        <translation> ms</translation>
     </message>
 </context>
 <context>
@@ -13042,7 +13045,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorStylesPage.ui" line="1290"/>
         <source>Press to select the background colour</source>
-        <translation>Pulse para seleccionar el color de fondo </translation>
+        <translation>Pulse para seleccionar el color de fondo</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorStylesPage.ui" line="1293"/>
@@ -13152,7 +13155,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorStylesPage.ui" line="1359"/>
         <source> ms</source>
-        <translation>ms</translation>
+        <translation> ms</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/EditorStylesPage.ui" line="1392"/>
@@ -14371,7 +14374,9 @@
         <source>
 {0} finished.
 </source>
-        <translation>{0} ha terminado.</translation>
+        <translation>
+{0} ha terminado.
+</translation>
     </message>
 </context>
 <context>
@@ -14537,7 +14542,7 @@
     <message>
         <location filename="../Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui" line="271"/>
         <source>Class/Function Header Background</source>
-        <translation>Color de fondo para Clase/Encabezamiento de Función </translation>
+        <translation>Color de fondo para Clase/Encabezamiento de Función</translation>
     </message>
     <message>
         <location filename="../Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui" line="278"/>
@@ -14547,7 +14552,7 @@
     <message>
         <location filename="../Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui" line="281"/>
         <source>Class/Function Header Foreground</source>
-        <translation>Color de primer plano para Clase/Encabezamiento de Función </translation>
+        <translation>Color de primer plano para Clase/Encabezamiento de Función</translation>
     </message>
     <message>
         <location filename="../Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui" line="288"/>
@@ -14756,14 +14761,18 @@
         <source>
 {0} finished.
 </source>
-        <translation>{0} ha terminado.</translation>
+        <translation>
+{0} ha terminado.
+</translation>
     </message>
     <message>
         <location filename="../Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py" line="126"/>
         <source>
 {0} crashed.
 </source>
-        <translation>{0} ha dejado de funcionar.</translation>
+        <translation>
+{0} ha dejado de funcionar.
+</translation>
     </message>
 </context>
 <context>
@@ -14887,7 +14896,7 @@
     <message>
         <location filename="../Debugger/ExceptionLogger.py" line="101"/>
         <source>An unhandled exception occured. See the shell window for details.</source>
-        <translation>Ha ocurrido una excepción no controlada. Consulte la ventana de shell para detalles. </translation>
+        <translation>Ha ocurrido una excepción no controlada. Consulte la ventana de shell para detalles.</translation>
     </message>
     <message>
         <location filename="../Debugger/ExceptionLogger.py" line="68"/>
@@ -16012,7 +16021,7 @@
     <message>
         <location filename="../UI/FindFileDialog.ui" line="279"/>
         <source>Search in open files only </source>
-        <translation>Buscar solamente en archivos abiertos</translation>
+        <translation>Buscar solamente en archivos abiertos </translation>
     </message>
     <message>
         <location filename="../UI/FindFileDialog.ui" line="282"/>
@@ -17447,7 +17456,7 @@
     <message>
         <location filename="../Helpviewer/HelpClearPrivateDataDialog.ui" line="23"/>
         <source>Select to clear the browsing history</source>
-        <translation>Seleccionar para limpiar el historial de navegación </translation>
+        <translation>Seleccionar para limpiar el historial de navegación</translation>
     </message>
     <message>
         <location filename="../Helpviewer/HelpClearPrivateDataDialog.ui" line="26"/>
@@ -19571,7 +19580,7 @@
     <message>
         <location filename="../Helpviewer/HelpWindow.py" line="1818"/>
         <source>Filtered by: </source>
-        <translation>Filtrado por:</translation>
+        <translation>Filtrado por: </translation>
     </message>
     <message>
         <location filename="../Helpviewer/HelpWindow.py" line="2709"/>
@@ -25401,7 +25410,7 @@
     <message>
         <location filename="../Plugins/VcsPlugins/vcsMercurial/HgMergeDialog.ui" line="182"/>
         <source>Enforce merge</source>
-        <translation>Imponer merge </translation>
+        <translation>Imponer merge</translation>
     </message>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsMercurial/HgMergeDialog.ui" line="111"/>
@@ -27401,7 +27410,7 @@
     <message>
         <location filename="../Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesHeaderDialog.py" line="198"/>
         <source>Error: </source>
-        <translation>Error:</translation>
+        <translation>Error: </translation>
     </message>
 </context>
 <context>
@@ -32509,7 +32518,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/InterfacePage.ui" line="343"/>
         <source> ms</source>
-        <translation>ms</translation>
+        <translation> ms</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/InterfacePage.ui" line="193"/>
@@ -32951,7 +32960,7 @@
     <message>
         <location filename="../Network/IRC/IrcChannelWidget.py" line="1449"/>
         <source> (Away)</source>
-        <translation>.(No está)</translation>
+        <translation> (No está)</translation>
     </message>
     <message>
         <location filename="../Network/IRC/IrcChannelWidget.py" line="1452"/>
@@ -39476,7 +39485,7 @@
     <message>
         <location filename="../PluginManager/PluginInstallDialog.py" line="234"/>
         <source>  ok</source>
-        <translation>Aceptar</translation>
+        <translation>  Aceptar</translation>
     </message>
     <message>
         <location filename="../PluginManager/PluginInstallDialog.py" line="241"/>
@@ -39759,7 +39768,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="110"/>
         <source>Keep generations of hidden plugins</source>
-        <translation>Mantener </translation>
+        <translation>Mantener</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="166"/>
@@ -40143,22 +40152,22 @@
 <context>
     <name>PreviewProcessingThread</name>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="434"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="436"/>
         <source>&lt;p&gt;No preview available for this type of file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;No hay vista previa disponible para este tipo de archivo.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="566"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="568"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;python-docutils&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;La previsualización de ReStructuredText requiere el package &lt;b&gt;python-docutils&lt;/b&gt; .&lt;br/&gt;Installar con el gestor de paquetes, &apos;pip install docutils&apos; o ver &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;esta página .&lt;/a&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="511"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="513"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;sphinx&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager,&apos;pip install Sphinx&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.&lt;/p&gt;</source>
         <translation>&lt;p&gt;La previsualización de ReStructuredText requiere el package &lt;b&gt;sphinx&lt;/b&gt; .&lt;br/&gt;Installar con el gestor de paquetes, &apos;pip install sphinx&apos; o ver &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;esta página .&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Como alternativa, se puede deshabilitar el uso de Sphinx en el Editor, página de configuración de Gestión de Archivos.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="591"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="593"/>
         <source>&lt;p&gt;Markdown preview requires the &lt;b&gt;python-markdown&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;installation instructions.&lt;/a&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;La previsualización de Markdown requiere el package &lt;b&gt;python-markdown&lt;/b&gt;.&lt;br/&gt;Instalar con el gestor de paquetes o ver en &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;las instrucciones de instalación.&lt;/a&gt;&lt;/p&gt;</translation>
     </message>
@@ -40371,7 +40380,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/PrinterPage.ui" line="310"/>
         <source> cm</source>
-        <translation>cm</translation>
+        <translation> cm</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/PrinterPage.ui" line="269"/>
@@ -40396,7 +40405,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/PrinterPage.ui" line="182"/>
         <source>Select the printer resolution </source>
-        <translation>Seleccionar la resolución de la impresora</translation>
+        <translation>Seleccionar la resolución de la impresora </translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/PrinterPage.ui" line="188"/>
@@ -41260,7 +41269,7 @@
     <message>
         <location filename="../Project/Project.py" line="4016"/>
         <source>Source &amp;Documentation</source>
-        <translation>Origen de &amp;Documentación </translation>
+        <translation>Origen de &amp;Documentación</translation>
     </message>
     <message>
         <location filename="../Project/Project.py" line="4018"/>
@@ -48276,7 +48285,7 @@
     <message>
         <location filename="../Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py" line="701"/>
         <source>Communication Error</source>
-        <translation> Error de Comunicación</translation>
+        <translation>Error de Comunicación</translation>
     </message>
     <message>
         <location filename="../Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py" line="168"/>
@@ -50462,7 +50471,8 @@
         <location filename="../QScintilla/Shell.py" line="787"/>
         <source>
 Not connected</source>
-        <translation>No conectado</translation>
+        <translation>
+No conectado</translation>
     </message>
     <message>
         <location filename="../QScintilla/Shell.py" line="293"/>
@@ -50521,7 +50531,8 @@
         <location filename="../QScintilla/Shell.py" line="867"/>
         <source>Unspecified syntax error.
 </source>
-        <translation>Error de sintaxis sin especificar.</translation>
+        <translation>Error de sintaxis sin especificar.
+</translation>
     </message>
     <message>
         <location filename="../QScintilla/Shell.py" line="844"/>
@@ -52926,7 +52937,7 @@
     <message>
         <location filename="../Debugger/StartDebugDialog.ui" line="207"/>
         <source>Don&apos;t stop at first line</source>
-        <translation>No detener en la primera línea </translation>
+        <translation>No detener en la primera línea</translation>
     </message>
     <message>
         <location filename="../Debugger/StartDebugDialog.ui" line="174"/>
@@ -53875,7 +53886,8 @@
         <location filename="../Plugins/VcsPlugins/vcsPySvn/subversion.py" line="318"/>
         <source>Imported revision {0}.
 </source>
-        <translation>Importada revisión {0}.</translation>
+        <translation>Importada revisión {0}.
+</translation>
     </message>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsPySvn/subversion.py" line="588"/>
@@ -53886,7 +53898,8 @@
         <location filename="../Plugins/VcsPlugins/vcsPySvn/subversion.py" line="1234"/>
         <source>Revision {0}.
 </source>
-        <translation>Revisión {0}.</translation>
+        <translation>Revisión {0}.
+</translation>
     </message>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsSubversion/subversion.py" line="503"/>
@@ -54442,7 +54455,7 @@
     <message>
         <location filename="../Plugins/VcsPlugins/vcsPySvn/SvnDialog.py" line="87"/>
         <source> (binary)</source>
-        <translation>(binario)</translation>
+        <translation> (binario)</translation>
     </message>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnDialog.py" line="156"/>
@@ -54453,7 +54466,8 @@
         <location filename="../Plugins/VcsPlugins/vcsPySvn/SvnDialog.py" line="81"/>
         <source>Revision {0}.
 </source>
-        <translation>Revisión {0}.</translation>
+        <translation>Revisión {0}.
+</translation>
     </message>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsPySvn/SvnDialog.py" line="89"/>
@@ -54468,7 +54482,7 @@
     <message>
         <location filename="../Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py" line="98"/>
         <source>Subversion SSL Server Certificate</source>
-        <translation>Certificado de Servidor de Subversion  SSL </translation>
+        <translation>Certificado de Servidor de Subversion  SSL</translation>
     </message>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py" line="117"/>
@@ -55050,7 +55064,7 @@
     <message>
         <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.ui" line="25"/>
         <source>Enforce merge</source>
-        <translation>Imponer merge </translation>
+        <translation>Imponer merge</translation>
     </message>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.ui" line="42"/>
@@ -57572,7 +57586,7 @@
     <message>
         <location filename="../UI/SymbolsWidget.py" line="145"/>
         <source>Dingbats</source>
-        <translation>Habilitar </translation>
+        <translation>Habilitar</translation>
     </message>
     <message>
         <location filename="../UI/SymbolsWidget.py" line="148"/>
@@ -59299,7 +59313,7 @@
     <message>
         <location filename="../Tools/TRPreviewer.py" line="269"/>
         <source>Close all windows</source>
-        <translation>Cerrar todas las ventanas </translation>
+        <translation>Cerrar todas las ventanas</translation>
     </message>
     <message>
         <location filename="../Tools/TRPreviewer.py" line="270"/>
@@ -61623,7 +61637,7 @@
     <message>
         <location filename="../Tools/UIPreviewer.py" line="362"/>
         <source>Load UI File</source>
-        <translation>Cargar archivo UI </translation>
+        <translation>Cargar archivo UI</translation>
     </message>
     <message>
         <location filename="../Tools/UIPreviewer.py" line="497"/>
@@ -62105,12 +62119,12 @@
     <message>
         <location filename="../PyUnit/UnittestDialog.py" line="121"/>
         <source>^Failure: </source>
-        <translation>^Fallido:</translation>
+        <translation>^Fallido: </translation>
     </message>
     <message>
         <location filename="../PyUnit/UnittestDialog.py" line="122"/>
         <source>^Error: </source>
-        <translation>^Error:</translation>
+        <translation>^Error: </translation>
     </message>
     <message>
         <location filename="../PyUnit/UnittestDialog.py" line="269"/>
@@ -62509,7 +62523,7 @@
     <message>
         <location filename="../UI/UserInterface.py" line="1348"/>
         <source>Activate the edit view profile</source>
-        <translation>Activar el perfil de vista de edición  </translation>
+        <translation>Activar el perfil de vista de edición</translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="1350"/>
@@ -62524,7 +62538,7 @@
     <message>
         <location filename="../UI/UserInterface.py" line="1365"/>
         <source>Activate the debug view profile</source>
-        <translation>Activar el perfil de vista de depuración  </translation>
+        <translation>Activar el perfil de vista de depuración</translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="1367"/>
@@ -63697,7 +63711,8 @@
         <location filename="../UI/UserInterface.py" line="4916"/>
         <source>Process &apos;{0}&apos; has exited.
 </source>
-        <translation>El proceso &apos;{0}&apos; ha finalizado.</translation>
+        <translation>El proceso &apos;{0}&apos; ha finalizado.
+</translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="5314"/>
@@ -64313,7 +64328,7 @@
     <message>
         <location filename="../UI/UserInterface.py" line="2421"/>
         <source>&lt;b&gt;PyQt5 Documentation&lt;/b&gt;&lt;p&gt;Display the PyQt5 Documentation. Dependent upon your settings, this will either show the help in Eric&apos;s internal help viewer, or execute a web browser or Qt Assistant. &lt;/p&gt;</source>
-        <translation>&lt;b&gt;Documentación de PyQt5&lt;/b&gt;&lt;p&gt;Muestra la Documentación de PyQt5. Dependiendo de la configuración, esta documentación será mostrará en el visor de ayuda interno de Eric,en un navegador web, o se ejecutará Qt Assistant.&lt;/p&gt; </translation>
+        <translation>&lt;b&gt;Documentación de PyQt5&lt;/b&gt;&lt;p&gt;Muestra la Documentación de PyQt5. Dependiendo de la configuración, esta documentación será mostrará en el visor de ayuda interno de Eric,en un navegador web, o se ejecutará Qt Assistant.&lt;/p&gt;</translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="2444"/>
@@ -64413,7 +64428,7 @@
     <message>
         <location filename="../UI/UserInterface.py" line="2486"/>
         <source>&lt;b&gt;Eric API Documentation&lt;/b&gt;&lt;p&gt;Display the Eric API documentation. The location for the documentation is the Documentation/Source subdirectory of the eric6 installation directory.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Documentación de API de Eric&lt;/b&gt;&lt;p&gt;Muestra la documentación de API de Eric. La ubicación de la documentación es el subdirectorio Documentation/Source del directorio de instalación de eric6.&lt;/p&gt; </translation>
+        <translation>&lt;b&gt;Documentación de API de Eric&lt;/b&gt;&lt;p&gt;Muestra la documentación de API de Eric. La ubicación de la documentación es el subdirectorio Documentation/Source del directorio de instalación de eric6.&lt;/p&gt;</translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="4474"/>
@@ -64578,7 +64593,7 @@
     <message>
         <location filename="../Project/UserPropertiesDialog.ui" line="36"/>
         <source> sec</source>
-        <translation>seg</translation>
+        <translation> seg</translation>
     </message>
     <message>
         <location filename="../Project/UserPropertiesDialog.ui" line="62"/>
@@ -65212,7 +65227,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/VcsPage.ui" line="82"/>
         <source> sec</source>
-        <translation>seg</translation>
+        <translation> seg</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/VcsPage.ui" line="105"/>
@@ -69178,7 +69193,7 @@
     <message>
         <location filename="../Debugger/WatchPointModel.py" line="38"/>
         <source>Ignore Count</source>
-        <translation>Conteo Ignorar </translation>
+        <translation>Conteo Ignorar</translation>
     </message>
 </context>
 <context>
@@ -70091,7 +70106,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/WebBrowserPage.ui" line="873"/>
         <source>Enter the port to be used by the web inspector</source>
-        <translation>Introducir el puerto para ser utilizado por el web inspector </translation>
+        <translation>Introducir el puerto para ser utilizado por el web inspector</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/WebBrowserPage.ui" line="902"/>
@@ -70256,7 +70271,7 @@
     <message>
         <location filename="../Preferences/ConfigurationPages/WebBrowserPage.ui" line="308"/>
         <source> s</source>
-        <translation type="unfinished"> s</translation>
+        <translation> s</translation>
     </message>
 </context>
 <context>
@@ -72439,7 +72454,7 @@
     <message>
         <location filename="../WebBrowser/WebBrowserWindow.py" line="2347"/>
         <source>Filtered by: </source>
-        <translation>Filtrado por:</translation>
+        <translation>Filtrado por: </translation>
     </message>
     <message>
         <location filename="../WebBrowser/WebBrowserWindow.py" line="2355"/>
@@ -72876,7 +72891,7 @@
     <message>
         <location filename="../Tools/TRPreviewer.py" line="785"/>
         <source>Load UI File</source>
-        <translation>Cargar archivo UI </translation>
+        <translation>Cargar archivo UI</translation>
     </message>
     <message>
         <location filename="../Tools/TRPreviewer.py" line="785"/>
@@ -72889,7 +72904,7 @@
     <message>
         <location filename="../Tools/TRPreviewer.py" line="728"/>
         <source>Load UI File</source>
-        <translation>Cargar archivo UI </translation>
+        <translation>Cargar archivo UI</translation>
     </message>
     <message>
         <location filename="../Tools/TRPreviewer.py" line="728"/>
@@ -73551,7 +73566,7 @@
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158"/>
         <source>blank line contains whitespace</source>
-        <translation> línea en blanco contiene espacio en blanco</translation>
+        <translation>línea en blanco contiene espacio en blanco</translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161"/>
--- a/i18n/eric6_fr.ts	Fri Aug 04 18:38:45 2017 +0200
+++ b/i18n/eric6_fr.ts	Fri Aug 04 18:41:50 2017 +0200
@@ -40843,22 +40843,22 @@
 <context>
     <name>PreviewProcessingThread</name>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="434"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="436"/>
         <source>&lt;p&gt;No preview available for this type of file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="566"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="568"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;python-docutils&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="511"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="513"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;sphinx&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager,&apos;pip install Sphinx&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="591"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="593"/>
         <source>&lt;p&gt;Markdown preview requires the &lt;b&gt;python-markdown&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;installation instructions.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
--- a/i18n/eric6_it.ts	Fri Aug 04 18:38:45 2017 +0200
+++ b/i18n/eric6_it.ts	Fri Aug 04 18:41:50 2017 +0200
@@ -41302,7 +41302,7 @@
 <context>
     <name>PreviewProcessingThread</name>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="434"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="436"/>
         <source>&lt;p&gt;No preview available for this type of file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Non è prevista la visualizzazione per questo tipo di flusso.&lt;/p&gt;</translation>
     </message>
@@ -41317,17 +41317,17 @@
         <translation type="obsolete">&lt;p&gt;La visualizzazione ReStructuredText richiede &lt;b&gt;il pacchetto&lt;/b&gt; python-docutils.&lt;br/&gt;Installarlo con il vostro gestore di pacchetti o vedere &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt; questa pagina.&lt;/a&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="566"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="568"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;python-docutils&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="511"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="513"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;sphinx&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager,&apos;pip install Sphinx&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="591"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="593"/>
         <source>&lt;p&gt;Markdown preview requires the &lt;b&gt;python-markdown&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;installation instructions.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
--- a/i18n/eric6_pt.ts	Fri Aug 04 18:38:45 2017 +0200
+++ b/i18n/eric6_pt.ts	Fri Aug 04 18:41:50 2017 +0200
@@ -41437,22 +41437,22 @@
 <context>
     <name>PreviewProcessingThread</name>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="434"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="436"/>
         <source>&lt;p&gt;No preview available for this type of file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;A antevisão para este tipo de ficheiro não está disponível.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="511"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="513"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;sphinx&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager,&apos;pip install Sphinx&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="566"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="568"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;python-docutils&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="591"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="593"/>
         <source>&lt;p&gt;Markdown preview requires the &lt;b&gt;python-markdown&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;installation instructions.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
--- a/i18n/eric6_tr.ts	Fri Aug 04 18:38:45 2017 +0200
+++ b/i18n/eric6_tr.ts	Fri Aug 04 18:41:50 2017 +0200
@@ -40893,22 +40893,22 @@
 <context>
     <name>PreviewProcessingThread</name>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="434"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="436"/>
         <source>&lt;p&gt;No preview available for this type of file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="566"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="568"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;python-docutils&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="511"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="513"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;sphinx&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager,&apos;pip install Sphinx&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="591"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="593"/>
         <source>&lt;p&gt;Markdown preview requires the &lt;b&gt;python-markdown&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;installation instructions.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
--- a/i18n/eric6_zh_CN.ts	Fri Aug 04 18:38:45 2017 +0200
+++ b/i18n/eric6_zh_CN.ts	Fri Aug 04 18:41:50 2017 +0200
@@ -40890,22 +40890,22 @@
 <context>
     <name>PreviewProcessingThread</name>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="434"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="436"/>
         <source>&lt;p&gt;No preview available for this type of file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="566"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="568"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;python-docutils&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/docutils&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="511"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="513"/>
         <source>&lt;p&gt;ReStructuredText preview requires the &lt;b&gt;sphinx&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager,&apos;pip install Sphinx&apos; or see &lt;a href=&quot;http://pypi.python.org/pypi/Sphinx&quot;&gt;this page.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alternatively you may disable Sphinx usage on the Editor, Filehandling configuration page.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Previewers/PreviewerHTML.py" line="591"/>
+        <location filename="../UI/Previewers/PreviewerHTML.py" line="593"/>
         <source>&lt;p&gt;Markdown preview requires the &lt;b&gt;python-markdown&lt;/b&gt; package.&lt;br/&gt;Install it with your package manager, &apos;pip install docutils&apos; or see &lt;a href=&quot;http://pythonhosted.org/Markdown/install.html&quot;&gt;installation instructions.&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
--- a/install-i18n.py	Fri Aug 04 18:38:45 2017 +0200
+++ b/install-i18n.py	Fri Aug 04 18:41:50 2017 +0200
@@ -34,8 +34,7 @@
     else:
         cdn = ".eric6"
         
-    hp = os.path.expanduser("~")
-    hp = os.path.join(hp, cdn)
+    hp = os.path.join(os.path.expanduser("~"), cdn)
     if not os.path.exists(hp):
         os.mkdir(hp)
     return hp
--- a/install.py	Fri Aug 04 18:38:45 2017 +0200
+++ b/install.py	Fri Aug 04 18:41:50 2017 +0200
@@ -1052,13 +1052,13 @@
     apis = []
     if installApis:
         for progLanguage in progLanguages:
-            for apiName in glob.glob(
-                    os.path.join(sourceDir, "APIs", progLanguage, "*.api")):
+            for apiName in sorted(glob.glob(
+                    os.path.join(sourceDir, "APIs", progLanguage, "*.api"))):
                 apis.append(os.path.basename(apiName))
             if progLanguage == "Python":
                 # treat Python3 API files the same as Python API files
-                for apiName in glob.glob(
-                        os.path.join(sourceDir, "APIs", "Python3", "*.api")):
+                for apiName in sorted(glob.glob(
+                        os.path.join(sourceDir, "APIs", "Python3", "*.api"))):
                     apis.append(os.path.basename(apiName))
     
     fn = 'eric6config.py'
--- a/uninstall.py	Fri Aug 04 18:38:45 2017 +0200
+++ b/uninstall.py	Fri Aug 04 18:41:50 2017 +0200
@@ -314,11 +314,9 @@
     """
     if sys.platform.startswith("win"):
         cdn = "_eric6"
-        return os.path.join(os.path.expanduser("~"), cdn)
     else:
         cdn = ".eric6"
-        return os.path.join(
-            os.path.expanduser("~{0}".format(os.getlogin())), cdn)
+    return os.path.join(os.path.expanduser("~"), cdn)
 
 
 def main(argv):

eric ide

mercurial