Merge with default branch. Py2 comp.

Tue, 15 Apr 2014 22:41:08 +0200

author
T.Rzepka <Tobias.Rzepka@gmail.com>
date
Tue, 15 Apr 2014 22:41:08 +0200
branch
Py2 comp.
changeset 3515
1b8381afe38f
parent 3506
d85fadb263a0 (current diff)
parent 3510
31d7e522ecb2 (diff)
child 3520
bfcefbb1633c

Merge with default branch.

APIs/Python3/eric5.api file | annotate | diff | comparison | revisions
APIs/Python3/eric5.bas file | annotate | diff | comparison | revisions
DataViews/PyCoverageDialog.py file | annotate | diff | comparison | revisions
DebugClients/Python/DebugClientBase.py file | annotate | diff | comparison | revisions
DebugClients/Python/coverage/fullcoverage/encodings.py file | annotate | diff | comparison | revisions
DebugClients/Python/coverage/parser.py file | annotate | diff | comparison | revisions
DebugClients/Python/coverage/tracer.c file | annotate | diff | comparison | revisions
DebugClients/Python3/coverage/fullcoverage/encodings.py file | annotate | diff | comparison | revisions
DebugClients/Python3/coverage/tracer.c file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Utilities.BackgroundService.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.install.html file | annotate | diff | comparison | revisions
E5XML/ProjectWriter.py file | annotate | diff | comparison | revisions
Graphics/ApplicationDiagramBuilder.py file | annotate | diff | comparison | revisions
Graphics/ImportsDiagramBuilder.py file | annotate | diff | comparison | revisions
Graphics/PackageDiagramBuilder.py file | annotate | diff | comparison | revisions
Graphics/UMLClassDiagramBuilder.py file | annotate | diff | comparison | revisions
Helpviewer/Passwords/PasswordManager.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheck.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Tabnanny/Tabnanny.py file | annotate | diff | comparison | revisions
Plugins/PluginCodeStyleChecker.py file | annotate | diff | comparison | revisions
Plugins/PluginSyntaxChecker.py file | annotate | diff | comparison | revisions
Plugins/PluginTabnanny.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/hg.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorFilePage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/TemplatesPage.py file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
Project/ProjectBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectFormsBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectInterfacesBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectResourcesBrowser.py file | annotate | diff | comparison | revisions
Project/ProjectSourcesBrowser.py file | annotate | diff | comparison | revisions
QScintilla/APIsManager.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/Lexer.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerBash.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerBatch.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerCMake.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerCPP.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerCSS.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerCSharp.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerContainer.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerD.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerDiff.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerFortran.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerFortran77.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerHTML.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerIDL.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerJava.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerJavaScript.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerLua.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerMakefile.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerMatlab.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerOctave.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPOV.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPascal.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPerl.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPostScript.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerProperties.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerPython.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerQSS.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerRuby.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerSQL.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerTCL.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerTeX.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerVHDL.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerXML.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/LexerYAML.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/__init__.py file | annotate | diff | comparison | revisions
QScintilla/QsciScintillaCompat.py file | annotate | diff | comparison | revisions
README-PyXML.txt file | annotate | diff | comparison | revisions
Tasks/TaskViewer.py file | annotate | diff | comparison | revisions
Templates/TemplatePropertiesDialog.py file | annotate | diff | comparison | revisions
UI/Browser.py file | annotate | diff | comparison | revisions
UI/Previewer.py file | annotate | diff | comparison | revisions
UI/Previewer.ui file | annotate | diff | comparison | revisions
UI/Previewers/PreviewerHTML.py file | annotate | diff | comparison | revisions
UI/Previewers/PreviewerQSS.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
Utilities/__init__.py file | annotate | diff | comparison | revisions
Utilities/compatibility_fixes.py file | annotate | diff | comparison | revisions
eric5.e4p file | annotate | diff | comparison | revisions
i18n/eric5_cs.ts file | annotate | diff | comparison | revisions
i18n/eric5_de.qm file | annotate | diff | comparison | revisions
i18n/eric5_de.ts file | annotate | diff | comparison | revisions
i18n/eric5_en.ts file | annotate | diff | comparison | revisions
i18n/eric5_es.ts file | annotate | diff | comparison | revisions
i18n/eric5_fr.ts file | annotate | diff | comparison | revisions
i18n/eric5_it.ts file | annotate | diff | comparison | revisions
i18n/eric5_ru.ts file | annotate | diff | comparison | revisions
i18n/eric5_tr.ts file | annotate | diff | comparison | revisions
i18n/eric5_zh_CN.GB2312.ts file | annotate | diff | comparison | revisions
install.py file | annotate | diff | comparison | revisions
uninstall.py file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric5.api	Sun Apr 13 15:45:57 2014 +0200
+++ b/APIs/Python3/eric5.api	Tue Apr 15 22:41:08 2014 +0200
@@ -3780,6 +3780,7 @@
 eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.codeRole?7
 eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.filenameRole?7
 eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.fixableRole?7
+eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.ignoredRole?7
 eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.lineRole?7
 eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.messageRole?7
 eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_buttonBox_clicked?4(button)
@@ -5125,6 +5126,7 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBisect?4(name, subcommand)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBranch?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBundle?4(name)
+eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgCancelMerge?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgCopy?4(name, project)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgCreateIgnoreFile?4(name, autoAdd=False)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgEditConfig?4(name, withLargefiles=True, largefilesData=None)
@@ -6271,6 +6273,7 @@
 eric5.Preferences.ConfigurationPages.TasksPage.TasksPage.save?4()
 eric5.Preferences.ConfigurationPages.TasksPage.TasksPage?1()
 eric5.Preferences.ConfigurationPages.TasksPage.create?4(dlg)
+eric5.Preferences.ConfigurationPages.TemplatesPage.TemplatesPage.on_editorFontButton_clicked?4()
 eric5.Preferences.ConfigurationPages.TemplatesPage.TemplatesPage.save?4()
 eric5.Preferences.ConfigurationPages.TemplatesPage.TemplatesPage?1()
 eric5.Preferences.ConfigurationPages.TemplatesPage.create?4(dlg)
@@ -7226,6 +7229,7 @@
 eric5.QScintilla.Lexers.Lexer.Lexer.isCommentStyle?4(style)
 eric5.QScintilla.Lexers.Lexer.Lexer.isStringStyle?4(style)
 eric5.QScintilla.Lexers.Lexer.Lexer.keywords?4(kwSet)
+eric5.QScintilla.Lexers.Lexer.Lexer.lexerName?4()
 eric5.QScintilla.Lexers.Lexer.Lexer.smartIndentLine?4(editor)
 eric5.QScintilla.Lexers.Lexer.Lexer.smartIndentSelection?4(editor)
 eric5.QScintilla.Lexers.Lexer.Lexer.streamCommentStr?4()
@@ -7421,6 +7425,13 @@
 eric5.QScintilla.Lexers.LexerPython.LexerPython.isStringStyle?4(style)
 eric5.QScintilla.Lexers.LexerPython.LexerPython.language?4()
 eric5.QScintilla.Lexers.LexerPython.LexerPython?1(variant="", parent=None)
+eric5.QScintilla.Lexers.LexerQSS.LexerQSS.defaultKeywords?4(kwSet)
+eric5.QScintilla.Lexers.LexerQSS.LexerQSS.initProperties?4()
+eric5.QScintilla.Lexers.LexerQSS.LexerQSS.isCommentStyle?4(style)
+eric5.QScintilla.Lexers.LexerQSS.LexerQSS.isStringStyle?4(style)
+eric5.QScintilla.Lexers.LexerQSS.LexerQSS.language?4()
+eric5.QScintilla.Lexers.LexerQSS.LexerQSS.lexerName?4()
+eric5.QScintilla.Lexers.LexerQSS.LexerQSS?1(parent=None)
 eric5.QScintilla.Lexers.LexerRegistry?7
 eric5.QScintilla.Lexers.LexerRuby.LexerRuby.autoCompletionWordSeparators?4()
 eric5.QScintilla.Lexers.LexerRuby.LexerRuby.defaultKeywords?4(kwSet)
@@ -8234,20 +8245,25 @@
 eric5.UI.PixmapCache.getPixmap?4(key, cache=pixCache)
 eric5.UI.PixmapCache.getSymlinkIcon?4(key, cache=pixCache)
 eric5.UI.PixmapCache.pixCache?7
-eric5.UI.Previewer.PreviewProcessingThread.htmlReady?7
-eric5.UI.Previewer.PreviewProcessingThread.process?4(filePath, language, text, ssiEnabled, rootPath)
-eric5.UI.Previewer.PreviewProcessingThread.run?4()
-eric5.UI.Previewer.PreviewProcessingThread?1(parent=None)
 eric5.UI.Previewer.Previewer.hide?4()
-eric5.UI.Previewer.Previewer.on_jsCheckBox_clicked?4(checked)
-eric5.UI.Previewer.Previewer.on_previewView_linkClicked?4(url)
-eric5.UI.Previewer.Previewer.on_previewView_titleChanged?4(title)
-eric5.UI.Previewer.Previewer.on_ssiCheckBox_clicked?4(checked)
 eric5.UI.Previewer.Previewer.show?4()
 eric5.UI.Previewer.Previewer.shutdown?4()
 eric5.UI.Previewer.Previewer?1(viewmanager, splitter, parent=None)
-eric5.UI.Previewer._StrikeThroughExtension.DEL_RE?7
-eric5.UI.Previewer._StrikeThroughExtension.extendMarkdown?4(md, md_globals)
+eric5.UI.Previewers.PreviewerHTML.PreviewProcessingThread.htmlReady?7
+eric5.UI.Previewers.PreviewerHTML.PreviewProcessingThread.process?4(filePath, language, text, ssiEnabled, rootPath)
+eric5.UI.Previewers.PreviewerHTML.PreviewProcessingThread.run?4()
+eric5.UI.Previewers.PreviewerHTML.PreviewProcessingThread?1(parent=None)
+eric5.UI.Previewers.PreviewerHTML.PreviewerHTML.on_jsCheckBox_clicked?4(checked)
+eric5.UI.Previewers.PreviewerHTML.PreviewerHTML.on_previewView_linkClicked?4(url)
+eric5.UI.Previewers.PreviewerHTML.PreviewerHTML.on_previewView_titleChanged?4(title)
+eric5.UI.Previewers.PreviewerHTML.PreviewerHTML.on_ssiCheckBox_clicked?4(checked)
+eric5.UI.Previewers.PreviewerHTML.PreviewerHTML.processEditor?4(editor=None)
+eric5.UI.Previewers.PreviewerHTML.PreviewerHTML.shutdown?4()
+eric5.UI.Previewers.PreviewerHTML.PreviewerHTML?1(parent=None)
+eric5.UI.Previewers.PreviewerHTML._StrikeThroughExtension.DEL_RE?7
+eric5.UI.Previewers.PreviewerHTML._StrikeThroughExtension.extendMarkdown?4(md, md_globals)
+eric5.UI.Previewers.PreviewerQSS.PreviewerQSS.processEditor?4(editor=None)
+eric5.UI.Previewers.PreviewerQSS.PreviewerQSS?1(parent=None)
 eric5.UI.SearchWidget.SearchWidget.keyPressEvent?4(event)
 eric5.UI.SearchWidget.SearchWidget.on_closeButton_clicked?4()
 eric5.UI.SearchWidget.SearchWidget.on_findNextButton_clicked?4()
@@ -9049,6 +9065,7 @@
 eric5.install.initGlobals?4()
 eric5.install.installEric?4()
 eric5.install.macAppBundleName?7
+eric5.install.macAppBundlePath?7
 eric5.install.macPythonExe?7
 eric5.install.main?4(argv)
 eric5.install.modDir?7
--- a/APIs/Python3/eric5.bas	Sun Apr 13 15:45:57 2014 +0200
+++ b/APIs/Python3/eric5.bas	Tue Apr 15 22:41:08 2014 +0200
@@ -438,6 +438,7 @@
 LexerProperties Lexer QsciLexerProperties
 LexerPygments LexerContainer
 LexerPython Lexer QsciLexerPython
+LexerQSS Lexer QsciLexerCSS
 LexerRuby Lexer QsciLexerRuby
 LexerSQL Lexer QsciLexerSQL
 LexerTCL Lexer QsciLexerTCL
@@ -529,7 +530,9 @@
 PreferencesLexerError Exception
 PreferencesLexerLanguageError PreferencesLexerError
 PreviewProcessingThread QThread
-Previewer QWidget Ui_Previewer
+Previewer QStackedWidget
+PreviewerHTML QWidget Ui_PreviewerHTML
+PreviewerQSS QWidget Ui_PreviewerQSS
 Printer QsciPrinter
 PrinterPage ConfigurationPageBase Ui_PrinterPage
 ProfileTreeWidgetItem QTreeWidgetItem
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/APIs/QSS/qss.api	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,95 @@
+QAbstractScrollArea
+QCheckBox
+QColumnView
+QComboBox
+QDateEdit
+QDateTimeEdit
+QDialog
+QDialogButtonBox
+QDockWidget
+QDoubleSpinBox
+QFrame
+QGroupBox
+QHeaderView
+QLabel
+QLineEdit
+QListView
+QListWidget
+QMainWindow
+QMenu
+QMenuBar
+QMessageBox
+QProgressBar
+QPushButton
+QRadioButton
+QScrollBar
+QSizeGrip
+QSlider
+QSpinBox
+QSplitter
+QStatusBar
+QTabBar
+QTabWidget
+QTableView
+QTableWidget
+QTextEdit
+QTimeEdit
+QToolBar
+QToolButton
+QToolBox
+QToolTip
+QTreeView
+QTreeWidget
+QWidget
+top
+bottom
+left
+right
+center
+scroll
+fixed
+none
+stretch
+repeat
+dashed
+dot-dash
+dot-dot-dash
+dotted
+double
+inset
+outset
+ridge
+solid
+none
+normal
+italic
+oblique
+bold
+qlineargradient
+qradialgradient
+qconicalgradient
+margin
+border
+padding
+content
+alternate-base
+base
+bright-text
+button
+button-text
+dark
+highlight
+highlighted-text
+light
+link
+link-visited
+mid
+midlight
+shadow
+text
+window
+window-text
+repeat
+repeat-x
+repeat-y
+no-repeat
--- a/DataViews/PyCoverageDialog.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DataViews/PyCoverageDialog.py	Tue Apr 15 22:41:08 2014 +0200
@@ -348,6 +348,7 @@
             self.tr("Annotating files..."), self.tr("Abort"),
             0, len(files), self.tr("%v/%m Files"), self)
         progress.setMinimumDuration(0)
+        progress.setWindowTitle(self.tr("Coverage"))
         count = 0
         
         for file in files:
--- a/DebugClients/Python/DebugClientBase.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/DebugClientBase.py	Tue Apr 15 22:41:08 2014 +0200
@@ -1430,7 +1430,7 @@
                         try:
                             exec 'mcdict = dict%s.__class__.__dict__' % access
                             ndict.update(mcdict)     # __IGNORE_WARNING__
-                            if mdict and not "sipThis" in mdict.keys(): # __IGNORE_WARNING__
+                            if mdict and not "sipThis" in mdict.keys():  # __IGNORE_WARNING__
                                 del rvar[0:2]
                                 access = ""
                         except:
--- a/DebugClients/Python/coverage/__init__.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/__init__.py	Tue Apr 15 22:41:08 2014 +0200
@@ -118,3 +118,6 @@
 # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
 # DAMAGE.
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/__main__.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/__main__.py	Tue Apr 15 22:41:08 2014 +0200
@@ -2,3 +2,6 @@
 import sys
 from .cmdline import main
 sys.exit(main())
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/annotate.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/annotate.py	Tue Apr 15 22:41:08 2014 +0200
@@ -100,3 +100,6 @@
             dest.write(line)
         source.close()
         dest.close()
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/backward.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/backward.py	Tue Apr 15 22:41:08 2014 +0200
@@ -182,3 +182,6 @@
 except ImportError:
     import md5
     md5 = md5.new
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/bytecode.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/bytecode.py	Tue Apr 15 22:41:08 2014 +0200
@@ -73,3 +73,6 @@
                 if isinstance(c, types.CodeType):
                     self.stack.append(c)
             yield code
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/cmdline.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/cmdline.py	Tue Apr 15 22:41:08 2014 +0200
@@ -742,3 +742,6 @@
         else:
             status = None
     return status
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/codeunit.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/codeunit.py	Tue Apr 15 22:41:08 2014 +0200
@@ -143,3 +143,6 @@
             return True
         # Everything else is probably not Python.
         return False
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/collector.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/collector.py	Tue Apr 15 22:41:08 2014 +0200
@@ -289,7 +289,9 @@
 
     def stop(self):
         """Stop collecting trace information."""
-        #print >>sys.stderr, "Stopping: %r" % self._collectors
+        #print("Stopping: %r" % self._collectors, file=sys.stderr)
+        if not self._collectors:
+            return
         assert self._collectors
         assert self._collectors[-1] is self
 
@@ -351,3 +353,6 @@
             return self.data
         else:
             return {}
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/config.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/config.py	Tue Apr 15 22:41:08 2014 +0200
@@ -211,3 +211,6 @@
         if cp.has_option(section, option):
             method = getattr(cp, 'get'+type_)
             setattr(self, attr, method(section, option))
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/control.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/control.py	Tue Apr 15 22:41:08 2014 +0200
@@ -777,3 +777,6 @@
 
 # A hack for debugging testing in subprocesses.
 _TEST_NAME_FILE = "" #"/tmp/covtest.txt"
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/data.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/data.py	Tue Apr 15 22:41:08 2014 +0200
@@ -276,3 +276,6 @@
     else:
         fname = covdata.filename
     pprint.pprint(covdata.raw_data(fname))
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/debug.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/debug.py	Tue Apr 15 22:41:08 2014 +0200
@@ -52,3 +52,6 @@
                 prefix = ""
         else:
             yield "%*s: %s" % (label_len, label, data)
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/execfile.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/execfile.py	Tue Apr 15 22:41:08 2014 +0200
@@ -169,3 +169,6 @@
         fpyc.close()
 
     return code
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/files.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/files.py	Tue Apr 15 22:41:08 2014 +0200
@@ -307,3 +307,6 @@
             # characters that probably mean they are editor junk.
             if re.match(r"^[^.#~!$@%^&*()+=,]+\.pyw?$", filename):
                 yield os.path.join(dirpath, filename)
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/fullcoverage/encodings.py	Sun Apr 13 15:45:57 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-"""Imposter encodings module that installs a coverage-style tracer.
-
-This is NOT the encodings module; it is an imposter that sets up tracing
-instrumentation and then replaces itself with the real encodings module.
-
-If the directory that holds this file is placed first in the PYTHONPATH when
-using "coverage" to run Python's tests, then this file will become the very
-first module imported by the internals of Python 3.  It installs a
-coverage-compatible trace function that can watch Standard Library modules
-execute from the very earliest stages of Python's own boot process.  This fixes
-a problem with coverage - that it starts too late to trace the coverage of many
-of the most fundamental modules in the Standard Library.
-
-"""
-
-import sys
-
-class FullCoverageTracer(object):
-    def __init__(self):
-        # `traces` is a list of trace events.  Frames are tricky: the same
-        # frame object is used for a whole scope, with new line numbers
-        # written into it.  So in one scope, all the frame objects are the
-        # same object, and will eventually all will point to the last line
-        # executed.  So we keep the line numbers alongside the frames.
-        # The list looks like:
-        #
-        #   traces = [
-        #       ((frame, event, arg), lineno), ...
-        #       ]
-        #
-        self.traces = []
-
-    def fullcoverage_trace(self, *args):
-        frame, event, arg = args
-        self.traces.append((args, frame.f_lineno))
-        return self.fullcoverage_trace
-
-sys.settrace(FullCoverageTracer().fullcoverage_trace)
-
-# In coverage/files.py is actual_filename(), which uses glob.glob.  I don't
-# understand why, but that use of glob borks everything if fullcoverage is in
-# effect.  So here we make an ugly hail-mary pass to switch off glob.glob over
-# there.  This means when using fullcoverage, Windows path names will not be
-# their actual case.
-
-#sys.fullcoverage = True
-
-# Finally, remove our own directory from sys.path; remove ourselves from
-# sys.modules; and re-import "encodings", which will be the real package
-# this time.  Note that the delete from sys.modules dictionary has to
-# happen last, since all of the symbols in this module will become None
-# at that exact moment, including "sys".
-
-parentdir = max(filter(__file__.startswith, sys.path), key=len)
-sys.path.remove(parentdir)
-del sys.modules['encodings']
-import encodings
--- a/DebugClients/Python/coverage/html.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/html.py	Tue Apr 15 22:41:08 2014 +0200
@@ -394,3 +394,6 @@
     """
     html = re.sub(r">\s+<p ", ">\n<p ", html)
     return html
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/misc.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/misc.py	Tue Apr 15 22:41:08 2014 +0200
@@ -165,3 +165,6 @@
 
     """
     pass
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/parser.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/parser.py	Tue Apr 15 22:41:08 2014 +0200
@@ -670,8 +670,6 @@
         return "<%d+%d @%d%s %r>" % (
             self.byte, self.length, self.line, bang, list(self.exits)
             )
-
-
 class CachedTokenizer(object):
     """A one-element cache around tokenize.generate_tokens.
 
@@ -698,3 +696,6 @@
 
 # Create our generate_tokens cache as a callable replacement function.
 generate_tokens = CachedTokenizer().generate_tokens
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/phystokens.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/phystokens.py	Tue Apr 15 22:41:08 2014 +0200
@@ -208,3 +208,6 @@
         return encoding
 
     return default
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/report.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/report.py	Tue Apr 15 22:41:08 2014 +0200
@@ -90,3 +90,6 @@
                 # explicitly suppress those errors.
                 if cu.should_be_python() and not self.config.ignore_errors:
                     raise
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/results.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/results.py	Tue Apr 15 22:41:08 2014 +0200
@@ -284,3 +284,6 @@
         if other == 0:
             return self
         return NotImplemented
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/summary.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/summary.py	Tue Apr 15 22:41:08 2014 +0200
@@ -84,3 +84,6 @@
             outfile.write(fmt_coverage % args)
 
         return total.pc_covered
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/templite.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/templite.py	Tue Apr 15 22:41:08 2014 +0200
@@ -206,3 +206,6 @@
             if hasattr(value, '__call__'):
                 value = value()
         return value
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/tracer.c	Sun Apr 13 15:45:57 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,730 +0,0 @@
-/* C-based Tracer for Coverage. */
-
-#include "Python.h"
-#include "compile.h"        /* in 2.3, this wasn't part of Python.h */
-#include "eval.h"           /* or this. */
-#include "structmember.h"
-#include "frameobject.h"
-
-/* Compile-time debugging helpers */
-#undef WHAT_LOG         /* Define to log the WHAT params in the trace function. */
-#undef TRACE_LOG        /* Define to log our bookkeeping. */
-#undef COLLECT_STATS    /* Collect counters: stats are printed when tracer is stopped. */
-
-#if COLLECT_STATS
-#define STATS(x)        x
-#else
-#define STATS(x)
-#endif
-
-/* Py 2.x and 3.x compatibility */
-
-#ifndef Py_TYPE
-#define Py_TYPE(o)    (((PyObject*)(o))->ob_type)
-#endif
-
-#if PY_MAJOR_VERSION >= 3
-
-#define MyText_Type         PyUnicode_Type
-#define MyText_Check(o)     PyUnicode_Check(o)
-#define MyText_AS_BYTES(o)  PyUnicode_AsASCIIString(o)
-#define MyText_AS_STRING(o) PyBytes_AS_STRING(o)
-#define MyInt_FromLong(l)   PyLong_FromLong(l)
-
-#define MyType_HEAD_INIT    PyVarObject_HEAD_INIT(NULL, 0)
-
-#else
-
-#define MyText_Type         PyString_Type
-#define MyText_Check(o)     PyString_Check(o)
-#define MyText_AS_BYTES(o)  (Py_INCREF(o), o)
-#define MyText_AS_STRING(o) PyString_AS_STRING(o)
-#define MyInt_FromLong(l)   PyInt_FromLong(l)
-
-#define MyType_HEAD_INIT    PyObject_HEAD_INIT(NULL)  0,
-
-#endif /* Py3k */
-
-/* The values returned to indicate ok or error. */
-#define RET_OK      0
-#define RET_ERROR   -1
-
-/* An entry on the data stack.  For each call frame, we need to record the
-    dictionary to capture data, and the last line number executed in that
-    frame.
-*/
-typedef struct {
-    PyObject * file_data;  /* PyMem_Malloc'ed, a borrowed ref. */
-    int last_line;
-} DataStackEntry;
-
-/* The CTracer type. */
-
-typedef struct {
-    PyObject_HEAD
-
-    /* Python objects manipulated directly by the Collector class. */
-    PyObject * should_trace;
-    PyObject * warn;
-    PyObject * data;
-    PyObject * should_trace_cache;
-    PyObject * arcs;
-
-    /* Has the tracer been started? */
-    int started;
-    /* Are we tracing arcs, or just lines? */
-    int tracing_arcs;
-
-    /*
-        The data stack is a stack of dictionaries.  Each dictionary collects
-        data for a single source file.  The data stack parallels the call stack:
-        each call pushes the new frame's file data onto the data stack, and each
-        return pops file data off.
-
-        The file data is a dictionary whose form depends on the tracing options.
-        If tracing arcs, the keys are line number pairs.  If not tracing arcs,
-        the keys are line numbers.  In both cases, the value is irrelevant
-        (None).
-    */
-    /* The index of the last-used entry in data_stack. */
-    int depth;
-    /* The file data at each level, or NULL if not recording. */
-    DataStackEntry * data_stack;
-    int data_stack_alloc;       /* number of entries allocated at data_stack. */
-
-    /* The current file_data dictionary.  Borrowed. */
-    PyObject * cur_file_data;
-
-    /* The line number of the last line recorded, for tracing arcs.
-        -1 means there was no previous line, as when entering a code object.
-    */
-    int last_line;
-
-    /* The parent frame for the last exception event, to fix missing returns. */
-    PyFrameObject * last_exc_back;
-    int last_exc_firstlineno;
-
-#if COLLECT_STATS
-    struct {
-        unsigned int calls;
-        unsigned int lines;
-        unsigned int returns;
-        unsigned int exceptions;
-        unsigned int others;
-        unsigned int new_files;
-        unsigned int missed_returns;
-        unsigned int stack_reallocs;
-        unsigned int errors;
-    } stats;
-#endif /* COLLECT_STATS */
-} CTracer;
-
-#define STACK_DELTA    100
-
-static int
-CTracer_init(CTracer *self, PyObject *args_unused, PyObject *kwds_unused)
-{
-#if COLLECT_STATS
-    self->stats.calls = 0;
-    self->stats.lines = 0;
-    self->stats.returns = 0;
-    self->stats.exceptions = 0;
-    self->stats.others = 0;
-    self->stats.new_files = 0;
-    self->stats.missed_returns = 0;
-    self->stats.stack_reallocs = 0;
-    self->stats.errors = 0;
-#endif /* COLLECT_STATS */
-
-    self->should_trace = NULL;
-    self->warn = NULL;
-    self->data = NULL;
-    self->should_trace_cache = NULL;
-    self->arcs = NULL;
-
-    self->started = 0;
-    self->tracing_arcs = 0;
-
-    self->depth = -1;
-    self->data_stack = PyMem_Malloc(STACK_DELTA*sizeof(DataStackEntry));
-    if (self->data_stack == NULL) {
-        STATS( self->stats.errors++; )
-        PyErr_NoMemory();
-        return RET_ERROR;
-    }
-    self->data_stack_alloc = STACK_DELTA;
-
-    self->cur_file_data = NULL;
-    self->last_line = -1;
-
-    self->last_exc_back = NULL;
-
-    return RET_OK;
-}
-
-static void
-CTracer_dealloc(CTracer *self)
-{
-    if (self->started) {
-        PyEval_SetTrace(NULL, NULL);
-    }
-
-    Py_XDECREF(self->should_trace);
-    Py_XDECREF(self->warn);
-    Py_XDECREF(self->data);
-    Py_XDECREF(self->should_trace_cache);
-
-    PyMem_Free(self->data_stack);
-
-    Py_TYPE(self)->tp_free((PyObject*)self);
-}
-
-#if TRACE_LOG
-static const char *
-indent(int n)
-{
-    static const char * spaces =
-        "                                                                    "
-        "                                                                    "
-        "                                                                    "
-        "                                                                    "
-        ;
-    return spaces + strlen(spaces) - n*2;
-}
-
-static int logging = 0;
-/* Set these constants to be a file substring and line number to start logging. */
-static const char * start_file = "tests/views";
-static int start_line = 27;
-
-static void
-showlog(int depth, int lineno, PyObject * filename, const char * msg)
-{
-    if (logging) {
-        printf("%s%3d ", indent(depth), depth);
-        if (lineno) {
-            printf("%4d", lineno);
-        }
-        else {
-            printf("    ");
-        }
-        if (filename) {
-            PyObject *ascii = MyText_AS_BYTES(filename);
-            printf(" %s", MyText_AS_STRING(ascii));
-            Py_DECREF(ascii);
-        }
-        if (msg) {
-            printf(" %s", msg);
-        }
-        printf("\n");
-    }
-}
-
-#define SHOWLOG(a,b,c,d)    showlog(a,b,c,d)
-#else
-#define SHOWLOG(a,b,c,d)
-#endif /* TRACE_LOG */
-
-#if WHAT_LOG
-static const char * what_sym[] = {"CALL", "EXC ", "LINE", "RET "};
-#endif
-
-/* Record a pair of integers in self->cur_file_data. */
-static int
-CTracer_record_pair(CTracer *self, int l1, int l2)
-{
-    int ret = RET_OK;
-
-    PyObject * t = Py_BuildValue("(ii)", l1, l2);
-    if (t != NULL) {
-        if (PyDict_SetItem(self->cur_file_data, t, Py_None) < 0) {
-            STATS( self->stats.errors++; )
-            ret = RET_ERROR;
-        }
-        Py_DECREF(t);
-    }
-    else {
-        STATS( self->stats.errors++; )
-        ret = RET_ERROR;
-    }
-    return ret;
-}
-
-/*
- * The Trace Function
- */
-static int
-CTracer_trace(CTracer *self, PyFrameObject *frame, int what, PyObject *arg_unused)
-{
-    int ret = RET_OK;
-    PyObject * filename = NULL;
-    PyObject * tracename = NULL;
-    #if WHAT_LOG || TRACE_LOG
-    PyObject * ascii = NULL;
-    #endif
-
-    #if WHAT_LOG
-    if (what <= sizeof(what_sym)/sizeof(const char *)) {
-        ascii = MyText_AS_BYTES(frame->f_code->co_filename);
-        printf("trace: %s @ %s %d\n", what_sym[what], MyText_AS_STRING(ascii), frame->f_lineno);
-        Py_DECREF(ascii);
-    }
-    #endif
-
-    #if TRACE_LOG
-    ascii = MyText_AS_BYTES(frame->f_code->co_filename);
-    if (strstr(MyText_AS_STRING(ascii), start_file) && frame->f_lineno == start_line) {
-        logging = 1;
-    }
-    Py_DECREF(ascii);
-    #endif
-
-    /* See below for details on missing-return detection. */
-    if (self->last_exc_back) {
-        if (frame == self->last_exc_back) {
-            /* Looks like someone forgot to send a return event. We'll clear
-               the exception state and do the RETURN code here.  Notice that the
-               frame we have in hand here is not the correct frame for the RETURN,
-               that frame is gone.  Our handling for RETURN doesn't need the
-               actual frame, but we do log it, so that will look a little off if
-               you're looking at the detailed log.
-
-               If someday we need to examine the frame when doing RETURN, then
-               we'll need to keep more of the missed frame's state.
-            */
-            STATS( self->stats.missed_returns++; )
-            if (self->depth >= 0) {
-                if (self->tracing_arcs && self->cur_file_data) {
-                    if (CTracer_record_pair(self, self->last_line, -self->last_exc_firstlineno) < 0) {
-                        return RET_ERROR;
-                    }
-                }
-                SHOWLOG(self->depth, frame->f_lineno, frame->f_code->co_filename, "missedreturn");
-                self->cur_file_data = self->data_stack[self->depth].file_data;
-                self->last_line = self->data_stack[self->depth].last_line;
-                self->depth--;
-            }
-        }
-        self->last_exc_back = NULL;
-    }
-
-
-    switch (what) {
-    case PyTrace_CALL:      /* 0 */
-        STATS( self->stats.calls++; )
-        /* Grow the stack. */
-        self->depth++;
-        if (self->depth >= self->data_stack_alloc) {
-            STATS( self->stats.stack_reallocs++; )
-            /* We've outgrown our data_stack array: make it bigger. */
-            int bigger = self->data_stack_alloc + STACK_DELTA;
-            DataStackEntry * bigger_data_stack = PyMem_Realloc(self->data_stack, bigger * sizeof(DataStackEntry));
-            if (bigger_data_stack == NULL) {
-                STATS( self->stats.errors++; )
-                PyErr_NoMemory();
-                self->depth--;
-                return RET_ERROR;
-            }
-            self->data_stack = bigger_data_stack;
-            self->data_stack_alloc = bigger;
-        }
-
-        /* Push the current state on the stack. */
-        self->data_stack[self->depth].file_data = self->cur_file_data;
-        self->data_stack[self->depth].last_line = self->last_line;
-
-        /* Check if we should trace this line. */
-        filename = frame->f_code->co_filename;
-        tracename = PyDict_GetItem(self->should_trace_cache, filename);
-        if (tracename == NULL) {
-            STATS( self->stats.new_files++; )
-            /* We've never considered this file before. */
-            /* Ask should_trace about it. */
-            PyObject * args = Py_BuildValue("(OO)", filename, frame);
-            tracename = PyObject_Call(self->should_trace, args, NULL);
-            Py_DECREF(args);
-            if (tracename == NULL) {
-                /* An error occurred inside should_trace. */
-                STATS( self->stats.errors++; )
-                return RET_ERROR;
-            }
-            if (PyDict_SetItem(self->should_trace_cache, filename, tracename) < 0) {
-                STATS( self->stats.errors++; )
-                return RET_ERROR;
-            }
-        }
-        else {
-            Py_INCREF(tracename);
-        }
-
-        /* If tracename is a string, then we're supposed to trace. */
-        if (MyText_Check(tracename)) {
-            PyObject * file_data = PyDict_GetItem(self->data, tracename);
-            if (file_data == NULL) {
-                file_data = PyDict_New();
-                if (file_data == NULL) {
-                    STATS( self->stats.errors++; )
-                    return RET_ERROR;
-                }
-                ret = PyDict_SetItem(self->data, tracename, file_data);
-                Py_DECREF(file_data);
-                if (ret < 0) {
-                    STATS( self->stats.errors++; )
-                    return RET_ERROR;
-                }
-            }
-            self->cur_file_data = file_data;
-            /* Make the frame right in case settrace(gettrace()) happens. */
-            Py_INCREF(self);
-            frame->f_trace = (PyObject*)self;
-            SHOWLOG(self->depth, frame->f_lineno, filename, "traced");
-        }
-        else {
-            self->cur_file_data = NULL;
-            SHOWLOG(self->depth, frame->f_lineno, filename, "skipped");
-        }
-
-        Py_DECREF(tracename);
-
-        self->last_line = -1;
-        break;
-
-    case PyTrace_RETURN:    /* 3 */
-        STATS( self->stats.returns++; )
-        /* A near-copy of this code is above in the missing-return handler. */
-        if (self->depth >= 0) {
-            if (self->tracing_arcs && self->cur_file_data) {
-                int first = frame->f_code->co_firstlineno;
-                if (CTracer_record_pair(self, self->last_line, -first) < 0) {
-                    return RET_ERROR;
-                }
-            }
-
-            SHOWLOG(self->depth, frame->f_lineno, frame->f_code->co_filename, "return");
-            self->cur_file_data = self->data_stack[self->depth].file_data;
-            self->last_line = self->data_stack[self->depth].last_line;
-            self->depth--;
-        }
-        break;
-
-    case PyTrace_LINE:      /* 2 */
-        STATS( self->stats.lines++; )
-        if (self->depth >= 0) {
-            SHOWLOG(self->depth, frame->f_lineno, frame->f_code->co_filename, "line");
-            if (self->cur_file_data) {
-                /* We're tracing in this frame: record something. */
-                if (self->tracing_arcs) {
-                    /* Tracing arcs: key is (last_line,this_line). */
-                    if (CTracer_record_pair(self, self->last_line, frame->f_lineno) < 0) {
-                        return RET_ERROR;
-                    }
-                }
-                else {
-                    /* Tracing lines: key is simply this_line. */
-                    PyObject * this_line = MyInt_FromLong(frame->f_lineno);
-                    if (this_line == NULL) {
-                        STATS( self->stats.errors++; )
-                        return RET_ERROR;
-                    }
-                    ret = PyDict_SetItem(self->cur_file_data, this_line, Py_None);
-                    Py_DECREF(this_line);
-                    if (ret < 0) {
-                        STATS( self->stats.errors++; )
-                        return RET_ERROR;
-                    }
-                }
-            }
-            self->last_line = frame->f_lineno;
-        }
-        break;
-
-    case PyTrace_EXCEPTION:
-        /* Some code (Python 2.3, and pyexpat anywhere) fires an exception event
-           without a return event.  To detect that, we'll keep a copy of the
-           parent frame for an exception event.  If the next event is in that
-           frame, then we must have returned without a return event.  We can
-           synthesize the missing event then.
-
-           Python itself fixed this problem in 2.4.  Pyexpat still has the bug.
-           I've reported the problem with pyexpat as http://bugs.python.org/issue6359 .
-           If it gets fixed, this code should still work properly.  Maybe some day
-           the bug will be fixed everywhere coverage.py is supported, and we can
-           remove this missing-return detection.
-
-           More about this fix: http://nedbatchelder.com/blog/200907/a_nasty_little_bug.html
-        */
-        STATS( self->stats.exceptions++; )
-        self->last_exc_back = frame->f_back;
-        self->last_exc_firstlineno = frame->f_code->co_firstlineno;
-        break;
-
-    default:
-        STATS( self->stats.others++; )
-        break;
-    }
-
-    return RET_OK;
-}
-
-/*
- * Python has two ways to set the trace function: sys.settrace(fn), which
- * takes a Python callable, and PyEval_SetTrace(func, obj), which takes
- * a C function and a Python object.  The way these work together is that
- * sys.settrace(pyfn) calls PyEval_SetTrace(builtin_func, pyfn), using the
- * Python callable as the object in PyEval_SetTrace.  So sys.gettrace()
- * simply returns the Python object used as the second argument to
- * PyEval_SetTrace.  So sys.gettrace() will return our self parameter, which
- * means it must be callable to be used in sys.settrace().
- *
- * So we make our self callable, equivalent to invoking our trace function.
- *
- * To help with the process of replaying stored frames, this function has an
- * optional keyword argument:
- *
- *      def CTracer_call(frame, event, arg, lineno=0)
- *
- * If provided, the lineno argument is used as the line number, and the
- * frame's f_lineno member is ignored.
- */
-static PyObject *
-CTracer_call(CTracer *self, PyObject *args, PyObject *kwds)
-{
-    PyFrameObject *frame;
-    PyObject *what_str;
-    PyObject *arg;
-    int lineno = 0;
-    int what;
-    int orig_lineno;
-    PyObject *ret = NULL;
-
-    static char *what_names[] = {
-        "call", "exception", "line", "return",
-        "c_call", "c_exception", "c_return",
-        NULL
-        };
-
-    #if WHAT_LOG
-    printf("pytrace\n");
-    #endif
-
-    static char *kwlist[] = {"frame", "event", "arg", "lineno", NULL};
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!O!O|i:Tracer_call", kwlist,
-            &PyFrame_Type, &frame, &MyText_Type, &what_str, &arg, &lineno)) {
-        goto done;
-    }
-
-    /* In Python, the what argument is a string, we need to find an int
-       for the C function. */
-    for (what = 0; what_names[what]; what++) {
-        PyObject *ascii = MyText_AS_BYTES(what_str);
-        int should_break = !strcmp(MyText_AS_STRING(ascii), what_names[what]);
-        Py_DECREF(ascii);
-        if (should_break) {
-            break;
-        }
-    }
-
-    /* Save off the frame's lineno, and use the forced one, if provided. */
-    orig_lineno = frame->f_lineno;
-    if (lineno > 0) {
-        frame->f_lineno = lineno;
-    }
-
-    /* Invoke the C function, and return ourselves. */
-    if (CTracer_trace(self, frame, what, arg) == RET_OK) {
-        Py_INCREF(self);
-        ret = (PyObject *)self;
-    }
-
-    /* Clean up. */
-    frame->f_lineno = orig_lineno;
-
-done:
-    return ret;
-}
-
-static PyObject *
-CTracer_start(CTracer *self, PyObject *args_unused)
-{
-    PyEval_SetTrace((Py_tracefunc)CTracer_trace, (PyObject*)self);
-    self->started = 1;
-    self->tracing_arcs = self->arcs && PyObject_IsTrue(self->arcs);
-    self->last_line = -1;
-
-    /* start() returns a trace function usable with sys.settrace() */
-    Py_INCREF(self);
-    return (PyObject *)self;
-}
-
-static PyObject *
-CTracer_stop(CTracer *self, PyObject *args_unused)
-{
-    if (self->started) {
-        PyEval_SetTrace(NULL, NULL);
-        self->started = 0;
-    }
-
-    return Py_BuildValue("");
-}
-
-static PyObject *
-CTracer_get_stats(CTracer *self)
-{
-#if COLLECT_STATS
-    return Py_BuildValue(
-        "{sI,sI,sI,sI,sI,sI,sI,sI,si,sI}",
-        "calls", self->stats.calls,
-        "lines", self->stats.lines,
-        "returns", self->stats.returns,
-        "exceptions", self->stats.exceptions,
-        "others", self->stats.others,
-        "new_files", self->stats.new_files,
-        "missed_returns", self->stats.missed_returns,
-        "stack_reallocs", self->stats.stack_reallocs,
-        "stack_alloc", self->data_stack_alloc,
-        "errors", self->stats.errors
-        );
-#else
-    return Py_BuildValue("");
-#endif /* COLLECT_STATS */
-}
-
-static PyMemberDef
-CTracer_members[] = {
-    { "should_trace",       T_OBJECT, offsetof(CTracer, should_trace), 0,
-            PyDoc_STR("Function indicating whether to trace a file.") },
-
-    { "warn",               T_OBJECT, offsetof(CTracer, warn), 0,
-            PyDoc_STR("Function for issuing warnings.") },
-
-    { "data",               T_OBJECT, offsetof(CTracer, data), 0,
-            PyDoc_STR("The raw dictionary of trace data.") },
-
-    { "should_trace_cache", T_OBJECT, offsetof(CTracer, should_trace_cache), 0,
-            PyDoc_STR("Dictionary caching should_trace results.") },
-
-    { "arcs",               T_OBJECT, offsetof(CTracer, arcs), 0,
-            PyDoc_STR("Should we trace arcs, or just lines?") },
-
-    { NULL }
-};
-
-static PyMethodDef
-CTracer_methods[] = {
-    { "start",      (PyCFunction) CTracer_start,        METH_VARARGS,
-            PyDoc_STR("Start the tracer") },
-
-    { "stop",       (PyCFunction) CTracer_stop,         METH_VARARGS,
-            PyDoc_STR("Stop the tracer") },
-
-    { "get_stats",  (PyCFunction) CTracer_get_stats,    METH_VARARGS,
-            PyDoc_STR("Get statistics about the tracing") },
-
-    { NULL }
-};
-
-static PyTypeObject
-CTracerType = {
-    MyType_HEAD_INIT
-    "coverage.CTracer",        /*tp_name*/
-    sizeof(CTracer),           /*tp_basicsize*/
-    0,                         /*tp_itemsize*/
-    (destructor)CTracer_dealloc, /*tp_dealloc*/
-    0,                         /*tp_print*/
-    0,                         /*tp_getattr*/
-    0,                         /*tp_setattr*/
-    0,                         /*tp_compare*/
-    0,                         /*tp_repr*/
-    0,                         /*tp_as_number*/
-    0,                         /*tp_as_sequence*/
-    0,                         /*tp_as_mapping*/
-    0,                         /*tp_hash */
-    (ternaryfunc)CTracer_call, /*tp_call*/
-    0,                         /*tp_str*/
-    0,                         /*tp_getattro*/
-    0,                         /*tp_setattro*/
-    0,                         /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
-    "CTracer objects",         /* tp_doc */
-    0,                         /* tp_traverse */
-    0,                         /* tp_clear */
-    0,                         /* tp_richcompare */
-    0,                         /* tp_weaklistoffset */
-    0,                         /* tp_iter */
-    0,                         /* tp_iternext */
-    CTracer_methods,           /* tp_methods */
-    CTracer_members,           /* tp_members */
-    0,                         /* tp_getset */
-    0,                         /* tp_base */
-    0,                         /* tp_dict */
-    0,                         /* tp_descr_get */
-    0,                         /* tp_descr_set */
-    0,                         /* tp_dictoffset */
-    (initproc)CTracer_init,    /* tp_init */
-    0,                         /* tp_alloc */
-    0,                         /* tp_new */
-};
-
-/* Module definition */
-
-#define MODULE_DOC PyDoc_STR("Fast coverage tracer.")
-
-#if PY_MAJOR_VERSION >= 3
-
-static PyModuleDef
-moduledef = {
-    PyModuleDef_HEAD_INIT,
-    "coverage.tracer",
-    MODULE_DOC,
-    -1,
-    NULL,       /* methods */
-    NULL,
-    NULL,       /* traverse */
-    NULL,       /* clear */
-    NULL
-};
-
-
-PyObject *
-PyInit_tracer(void)
-{
-    PyObject * mod = PyModule_Create(&moduledef);
-    if (mod == NULL) {
-        return NULL;
-    }
-
-    CTracerType.tp_new = PyType_GenericNew;
-    if (PyType_Ready(&CTracerType) < 0) {
-        Py_DECREF(mod);
-        return NULL;
-    }
-
-    Py_INCREF(&CTracerType);
-    PyModule_AddObject(mod, "CTracer", (PyObject *)&CTracerType);
-
-    return mod;
-}
-
-#else
-
-void
-inittracer(void)
-{
-    PyObject * mod;
-
-    mod = Py_InitModule3("coverage.tracer", NULL, MODULE_DOC);
-    if (mod == NULL) {
-        return;
-    }
-
-    CTracerType.tp_new = PyType_GenericNew;
-    if (PyType_Ready(&CTracerType) < 0) {
-        return;
-    }
-
-    Py_INCREF(&CTracerType);
-    PyModule_AddObject(mod, "CTracer", (PyObject *)&CTracerType);
-}
-
-#endif /* Py3k */
--- a/DebugClients/Python/coverage/version.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/version.py	Tue Apr 15 22:41:08 2014 +0200
@@ -7,3 +7,6 @@
 if max(__version__).isalpha():
     # For pre-releases, use a version-specific URL.
     __url__ += "/" + __version__
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python/coverage/xmlreport.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python/coverage/xmlreport.py	Tue Apr 15 22:41:08 2014 +0200
@@ -153,3 +153,6 @@
         package[2] += class_lines
         package[3] += class_br_hits
         package[4] += class_branches
+
+#
+# eflag: FileType = Python2
--- a/DebugClients/Python3/coverage/collector.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/DebugClients/Python3/coverage/collector.py	Tue Apr 15 22:41:08 2014 +0200
@@ -289,7 +289,9 @@
 
     def stop(self):
         """Stop collecting trace information."""
-        #print >>sys.stderr, "Stopping: %r" % self._collectors
+        #print("Stopping: %r" % self._collectors, file=sys.stderr)
+        if not self._collectors:
+            return
         assert self._collectors
         assert self._collectors[-1] is self
 
--- a/DebugClients/Python3/coverage/fullcoverage/encodings.py	Sun Apr 13 15:45:57 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-"""Imposter encodings module that installs a coverage-style tracer.
-
-This is NOT the encodings module; it is an imposter that sets up tracing
-instrumentation and then replaces itself with the real encodings module.
-
-If the directory that holds this file is placed first in the PYTHONPATH when
-using "coverage" to run Python's tests, then this file will become the very
-first module imported by the internals of Python 3.  It installs a
-coverage-compatible trace function that can watch Standard Library modules
-execute from the very earliest stages of Python's own boot process.  This fixes
-a problem with coverage - that it starts too late to trace the coverage of many
-of the most fundamental modules in the Standard Library.
-
-"""
-
-import sys
-
-class FullCoverageTracer(object):
-    def __init__(self):
-        # `traces` is a list of trace events.  Frames are tricky: the same
-        # frame object is used for a whole scope, with new line numbers
-        # written into it.  So in one scope, all the frame objects are the
-        # same object, and will eventually all will point to the last line
-        # executed.  So we keep the line numbers alongside the frames.
-        # The list looks like:
-        #
-        #   traces = [
-        #       ((frame, event, arg), lineno), ...
-        #       ]
-        #
-        self.traces = []
-
-    def fullcoverage_trace(self, *args):
-        frame, event, arg = args
-        self.traces.append((args, frame.f_lineno))
-        return self.fullcoverage_trace
-
-sys.settrace(FullCoverageTracer().fullcoverage_trace)
-
-# In coverage/files.py is actual_filename(), which uses glob.glob.  I don't
-# understand why, but that use of glob borks everything if fullcoverage is in
-# effect.  So here we make an ugly hail-mary pass to switch off glob.glob over
-# there.  This means when using fullcoverage, Windows path names will not be
-# their actual case.
-
-#sys.fullcoverage = True
-
-# Finally, remove our own directory from sys.path; remove ourselves from
-# sys.modules; and re-import "encodings", which will be the real package
-# this time.  Note that the delete from sys.modules dictionary has to
-# happen last, since all of the symbols in this module will become None
-# at that exact moment, including "sys".
-
-parentdir = max(filter(__file__.startswith, sys.path), key=len)
-sys.path.remove(parentdir)
-del sys.modules['encodings']
-import encodings
--- a/DebugClients/Python3/coverage/tracer.c	Sun Apr 13 15:45:57 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,730 +0,0 @@
-/* C-based Tracer for Coverage. */
-
-#include "Python.h"
-#include "compile.h"        /* in 2.3, this wasn't part of Python.h */
-#include "eval.h"           /* or this. */
-#include "structmember.h"
-#include "frameobject.h"
-
-/* Compile-time debugging helpers */
-#undef WHAT_LOG         /* Define to log the WHAT params in the trace function. */
-#undef TRACE_LOG        /* Define to log our bookkeeping. */
-#undef COLLECT_STATS    /* Collect counters: stats are printed when tracer is stopped. */
-
-#if COLLECT_STATS
-#define STATS(x)        x
-#else
-#define STATS(x)
-#endif
-
-/* Py 2.x and 3.x compatibility */
-
-#ifndef Py_TYPE
-#define Py_TYPE(o)    (((PyObject*)(o))->ob_type)
-#endif
-
-#if PY_MAJOR_VERSION >= 3
-
-#define MyText_Type         PyUnicode_Type
-#define MyText_Check(o)     PyUnicode_Check(o)
-#define MyText_AS_BYTES(o)  PyUnicode_AsASCIIString(o)
-#define MyText_AS_STRING(o) PyBytes_AS_STRING(o)
-#define MyInt_FromLong(l)   PyLong_FromLong(l)
-
-#define MyType_HEAD_INIT    PyVarObject_HEAD_INIT(NULL, 0)
-
-#else
-
-#define MyText_Type         PyString_Type
-#define MyText_Check(o)     PyString_Check(o)
-#define MyText_AS_BYTES(o)  (Py_INCREF(o), o)
-#define MyText_AS_STRING(o) PyString_AS_STRING(o)
-#define MyInt_FromLong(l)   PyInt_FromLong(l)
-
-#define MyType_HEAD_INIT    PyObject_HEAD_INIT(NULL)  0,
-
-#endif /* Py3k */
-
-/* The values returned to indicate ok or error. */
-#define RET_OK      0
-#define RET_ERROR   -1
-
-/* An entry on the data stack.  For each call frame, we need to record the
-    dictionary to capture data, and the last line number executed in that
-    frame.
-*/
-typedef struct {
-    PyObject * file_data;  /* PyMem_Malloc'ed, a borrowed ref. */
-    int last_line;
-} DataStackEntry;
-
-/* The CTracer type. */
-
-typedef struct {
-    PyObject_HEAD
-
-    /* Python objects manipulated directly by the Collector class. */
-    PyObject * should_trace;
-    PyObject * warn;
-    PyObject * data;
-    PyObject * should_trace_cache;
-    PyObject * arcs;
-
-    /* Has the tracer been started? */
-    int started;
-    /* Are we tracing arcs, or just lines? */
-    int tracing_arcs;
-
-    /*
-        The data stack is a stack of dictionaries.  Each dictionary collects
-        data for a single source file.  The data stack parallels the call stack:
-        each call pushes the new frame's file data onto the data stack, and each
-        return pops file data off.
-
-        The file data is a dictionary whose form depends on the tracing options.
-        If tracing arcs, the keys are line number pairs.  If not tracing arcs,
-        the keys are line numbers.  In both cases, the value is irrelevant
-        (None).
-    */
-    /* The index of the last-used entry in data_stack. */
-    int depth;
-    /* The file data at each level, or NULL if not recording. */
-    DataStackEntry * data_stack;
-    int data_stack_alloc;       /* number of entries allocated at data_stack. */
-
-    /* The current file_data dictionary.  Borrowed. */
-    PyObject * cur_file_data;
-
-    /* The line number of the last line recorded, for tracing arcs.
-        -1 means there was no previous line, as when entering a code object.
-    */
-    int last_line;
-
-    /* The parent frame for the last exception event, to fix missing returns. */
-    PyFrameObject * last_exc_back;
-    int last_exc_firstlineno;
-
-#if COLLECT_STATS
-    struct {
-        unsigned int calls;
-        unsigned int lines;
-        unsigned int returns;
-        unsigned int exceptions;
-        unsigned int others;
-        unsigned int new_files;
-        unsigned int missed_returns;
-        unsigned int stack_reallocs;
-        unsigned int errors;
-    } stats;
-#endif /* COLLECT_STATS */
-} CTracer;
-
-#define STACK_DELTA    100
-
-static int
-CTracer_init(CTracer *self, PyObject *args_unused, PyObject *kwds_unused)
-{
-#if COLLECT_STATS
-    self->stats.calls = 0;
-    self->stats.lines = 0;
-    self->stats.returns = 0;
-    self->stats.exceptions = 0;
-    self->stats.others = 0;
-    self->stats.new_files = 0;
-    self->stats.missed_returns = 0;
-    self->stats.stack_reallocs = 0;
-    self->stats.errors = 0;
-#endif /* COLLECT_STATS */
-
-    self->should_trace = NULL;
-    self->warn = NULL;
-    self->data = NULL;
-    self->should_trace_cache = NULL;
-    self->arcs = NULL;
-
-    self->started = 0;
-    self->tracing_arcs = 0;
-
-    self->depth = -1;
-    self->data_stack = PyMem_Malloc(STACK_DELTA*sizeof(DataStackEntry));
-    if (self->data_stack == NULL) {
-        STATS( self->stats.errors++; )
-        PyErr_NoMemory();
-        return RET_ERROR;
-    }
-    self->data_stack_alloc = STACK_DELTA;
-
-    self->cur_file_data = NULL;
-    self->last_line = -1;
-
-    self->last_exc_back = NULL;
-
-    return RET_OK;
-}
-
-static void
-CTracer_dealloc(CTracer *self)
-{
-    if (self->started) {
-        PyEval_SetTrace(NULL, NULL);
-    }
-
-    Py_XDECREF(self->should_trace);
-    Py_XDECREF(self->warn);
-    Py_XDECREF(self->data);
-    Py_XDECREF(self->should_trace_cache);
-
-    PyMem_Free(self->data_stack);
-
-    Py_TYPE(self)->tp_free((PyObject*)self);
-}
-
-#if TRACE_LOG
-static const char *
-indent(int n)
-{
-    static const char * spaces =
-        "                                                                    "
-        "                                                                    "
-        "                                                                    "
-        "                                                                    "
-        ;
-    return spaces + strlen(spaces) - n*2;
-}
-
-static int logging = 0;
-/* Set these constants to be a file substring and line number to start logging. */
-static const char * start_file = "tests/views";
-static int start_line = 27;
-
-static void
-showlog(int depth, int lineno, PyObject * filename, const char * msg)
-{
-    if (logging) {
-        printf("%s%3d ", indent(depth), depth);
-        if (lineno) {
-            printf("%4d", lineno);
-        }
-        else {
-            printf("    ");
-        }
-        if (filename) {
-            PyObject *ascii = MyText_AS_BYTES(filename);
-            printf(" %s", MyText_AS_STRING(ascii));
-            Py_DECREF(ascii);
-        }
-        if (msg) {
-            printf(" %s", msg);
-        }
-        printf("\n");
-    }
-}
-
-#define SHOWLOG(a,b,c,d)    showlog(a,b,c,d)
-#else
-#define SHOWLOG(a,b,c,d)
-#endif /* TRACE_LOG */
-
-#if WHAT_LOG
-static const char * what_sym[] = {"CALL", "EXC ", "LINE", "RET "};
-#endif
-
-/* Record a pair of integers in self->cur_file_data. */
-static int
-CTracer_record_pair(CTracer *self, int l1, int l2)
-{
-    int ret = RET_OK;
-
-    PyObject * t = Py_BuildValue("(ii)", l1, l2);
-    if (t != NULL) {
-        if (PyDict_SetItem(self->cur_file_data, t, Py_None) < 0) {
-            STATS( self->stats.errors++; )
-            ret = RET_ERROR;
-        }
-        Py_DECREF(t);
-    }
-    else {
-        STATS( self->stats.errors++; )
-        ret = RET_ERROR;
-    }
-    return ret;
-}
-
-/*
- * The Trace Function
- */
-static int
-CTracer_trace(CTracer *self, PyFrameObject *frame, int what, PyObject *arg_unused)
-{
-    int ret = RET_OK;
-    PyObject * filename = NULL;
-    PyObject * tracename = NULL;
-    #if WHAT_LOG || TRACE_LOG
-    PyObject * ascii = NULL;
-    #endif
-
-    #if WHAT_LOG
-    if (what <= sizeof(what_sym)/sizeof(const char *)) {
-        ascii = MyText_AS_BYTES(frame->f_code->co_filename);
-        printf("trace: %s @ %s %d\n", what_sym[what], MyText_AS_STRING(ascii), frame->f_lineno);
-        Py_DECREF(ascii);
-    }
-    #endif
-
-    #if TRACE_LOG
-    ascii = MyText_AS_BYTES(frame->f_code->co_filename);
-    if (strstr(MyText_AS_STRING(ascii), start_file) && frame->f_lineno == start_line) {
-        logging = 1;
-    }
-    Py_DECREF(ascii);
-    #endif
-
-    /* See below for details on missing-return detection. */
-    if (self->last_exc_back) {
-        if (frame == self->last_exc_back) {
-            /* Looks like someone forgot to send a return event. We'll clear
-               the exception state and do the RETURN code here.  Notice that the
-               frame we have in hand here is not the correct frame for the RETURN,
-               that frame is gone.  Our handling for RETURN doesn't need the
-               actual frame, but we do log it, so that will look a little off if
-               you're looking at the detailed log.
-
-               If someday we need to examine the frame when doing RETURN, then
-               we'll need to keep more of the missed frame's state.
-            */
-            STATS( self->stats.missed_returns++; )
-            if (self->depth >= 0) {
-                if (self->tracing_arcs && self->cur_file_data) {
-                    if (CTracer_record_pair(self, self->last_line, -self->last_exc_firstlineno) < 0) {
-                        return RET_ERROR;
-                    }
-                }
-                SHOWLOG(self->depth, frame->f_lineno, frame->f_code->co_filename, "missedreturn");
-                self->cur_file_data = self->data_stack[self->depth].file_data;
-                self->last_line = self->data_stack[self->depth].last_line;
-                self->depth--;
-            }
-        }
-        self->last_exc_back = NULL;
-    }
-
-
-    switch (what) {
-    case PyTrace_CALL:      /* 0 */
-        STATS( self->stats.calls++; )
-        /* Grow the stack. */
-        self->depth++;
-        if (self->depth >= self->data_stack_alloc) {
-            STATS( self->stats.stack_reallocs++; )
-            /* We've outgrown our data_stack array: make it bigger. */
-            int bigger = self->data_stack_alloc + STACK_DELTA;
-            DataStackEntry * bigger_data_stack = PyMem_Realloc(self->data_stack, bigger * sizeof(DataStackEntry));
-            if (bigger_data_stack == NULL) {
-                STATS( self->stats.errors++; )
-                PyErr_NoMemory();
-                self->depth--;
-                return RET_ERROR;
-            }
-            self->data_stack = bigger_data_stack;
-            self->data_stack_alloc = bigger;
-        }
-
-        /* Push the current state on the stack. */
-        self->data_stack[self->depth].file_data = self->cur_file_data;
-        self->data_stack[self->depth].last_line = self->last_line;
-
-        /* Check if we should trace this line. */
-        filename = frame->f_code->co_filename;
-        tracename = PyDict_GetItem(self->should_trace_cache, filename);
-        if (tracename == NULL) {
-            STATS( self->stats.new_files++; )
-            /* We've never considered this file before. */
-            /* Ask should_trace about it. */
-            PyObject * args = Py_BuildValue("(OO)", filename, frame);
-            tracename = PyObject_Call(self->should_trace, args, NULL);
-            Py_DECREF(args);
-            if (tracename == NULL) {
-                /* An error occurred inside should_trace. */
-                STATS( self->stats.errors++; )
-                return RET_ERROR;
-            }
-            if (PyDict_SetItem(self->should_trace_cache, filename, tracename) < 0) {
-                STATS( self->stats.errors++; )
-                return RET_ERROR;
-            }
-        }
-        else {
-            Py_INCREF(tracename);
-        }
-
-        /* If tracename is a string, then we're supposed to trace. */
-        if (MyText_Check(tracename)) {
-            PyObject * file_data = PyDict_GetItem(self->data, tracename);
-            if (file_data == NULL) {
-                file_data = PyDict_New();
-                if (file_data == NULL) {
-                    STATS( self->stats.errors++; )
-                    return RET_ERROR;
-                }
-                ret = PyDict_SetItem(self->data, tracename, file_data);
-                Py_DECREF(file_data);
-                if (ret < 0) {
-                    STATS( self->stats.errors++; )
-                    return RET_ERROR;
-                }
-            }
-            self->cur_file_data = file_data;
-            /* Make the frame right in case settrace(gettrace()) happens. */
-            Py_INCREF(self);
-            frame->f_trace = (PyObject*)self;
-            SHOWLOG(self->depth, frame->f_lineno, filename, "traced");
-        }
-        else {
-            self->cur_file_data = NULL;
-            SHOWLOG(self->depth, frame->f_lineno, filename, "skipped");
-        }
-
-        Py_DECREF(tracename);
-
-        self->last_line = -1;
-        break;
-
-    case PyTrace_RETURN:    /* 3 */
-        STATS( self->stats.returns++; )
-        /* A near-copy of this code is above in the missing-return handler. */
-        if (self->depth >= 0) {
-            if (self->tracing_arcs && self->cur_file_data) {
-                int first = frame->f_code->co_firstlineno;
-                if (CTracer_record_pair(self, self->last_line, -first) < 0) {
-                    return RET_ERROR;
-                }
-            }
-
-            SHOWLOG(self->depth, frame->f_lineno, frame->f_code->co_filename, "return");
-            self->cur_file_data = self->data_stack[self->depth].file_data;
-            self->last_line = self->data_stack[self->depth].last_line;
-            self->depth--;
-        }
-        break;
-
-    case PyTrace_LINE:      /* 2 */
-        STATS( self->stats.lines++; )
-        if (self->depth >= 0) {
-            SHOWLOG(self->depth, frame->f_lineno, frame->f_code->co_filename, "line");
-            if (self->cur_file_data) {
-                /* We're tracing in this frame: record something. */
-                if (self->tracing_arcs) {
-                    /* Tracing arcs: key is (last_line,this_line). */
-                    if (CTracer_record_pair(self, self->last_line, frame->f_lineno) < 0) {
-                        return RET_ERROR;
-                    }
-                }
-                else {
-                    /* Tracing lines: key is simply this_line. */
-                    PyObject * this_line = MyInt_FromLong(frame->f_lineno);
-                    if (this_line == NULL) {
-                        STATS( self->stats.errors++; )
-                        return RET_ERROR;
-                    }
-                    ret = PyDict_SetItem(self->cur_file_data, this_line, Py_None);
-                    Py_DECREF(this_line);
-                    if (ret < 0) {
-                        STATS( self->stats.errors++; )
-                        return RET_ERROR;
-                    }
-                }
-            }
-            self->last_line = frame->f_lineno;
-        }
-        break;
-
-    case PyTrace_EXCEPTION:
-        /* Some code (Python 2.3, and pyexpat anywhere) fires an exception event
-           without a return event.  To detect that, we'll keep a copy of the
-           parent frame for an exception event.  If the next event is in that
-           frame, then we must have returned without a return event.  We can
-           synthesize the missing event then.
-
-           Python itself fixed this problem in 2.4.  Pyexpat still has the bug.
-           I've reported the problem with pyexpat as http://bugs.python.org/issue6359 .
-           If it gets fixed, this code should still work properly.  Maybe some day
-           the bug will be fixed everywhere coverage.py is supported, and we can
-           remove this missing-return detection.
-
-           More about this fix: http://nedbatchelder.com/blog/200907/a_nasty_little_bug.html
-        */
-        STATS( self->stats.exceptions++; )
-        self->last_exc_back = frame->f_back;
-        self->last_exc_firstlineno = frame->f_code->co_firstlineno;
-        break;
-
-    default:
-        STATS( self->stats.others++; )
-        break;
-    }
-
-    return RET_OK;
-}
-
-/*
- * Python has two ways to set the trace function: sys.settrace(fn), which
- * takes a Python callable, and PyEval_SetTrace(func, obj), which takes
- * a C function and a Python object.  The way these work together is that
- * sys.settrace(pyfn) calls PyEval_SetTrace(builtin_func, pyfn), using the
- * Python callable as the object in PyEval_SetTrace.  So sys.gettrace()
- * simply returns the Python object used as the second argument to
- * PyEval_SetTrace.  So sys.gettrace() will return our self parameter, which
- * means it must be callable to be used in sys.settrace().
- *
- * So we make our self callable, equivalent to invoking our trace function.
- *
- * To help with the process of replaying stored frames, this function has an
- * optional keyword argument:
- *
- *      def CTracer_call(frame, event, arg, lineno=0)
- *
- * If provided, the lineno argument is used as the line number, and the
- * frame's f_lineno member is ignored.
- */
-static PyObject *
-CTracer_call(CTracer *self, PyObject *args, PyObject *kwds)
-{
-    PyFrameObject *frame;
-    PyObject *what_str;
-    PyObject *arg;
-    int lineno = 0;
-    int what;
-    int orig_lineno;
-    PyObject *ret = NULL;
-
-    static char *what_names[] = {
-        "call", "exception", "line", "return",
-        "c_call", "c_exception", "c_return",
-        NULL
-        };
-
-    #if WHAT_LOG
-    printf("pytrace\n");
-    #endif
-
-    static char *kwlist[] = {"frame", "event", "arg", "lineno", NULL};
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!O!O|i:Tracer_call", kwlist,
-            &PyFrame_Type, &frame, &MyText_Type, &what_str, &arg, &lineno)) {
-        goto done;
-    }
-
-    /* In Python, the what argument is a string, we need to find an int
-       for the C function. */
-    for (what = 0; what_names[what]; what++) {
-        PyObject *ascii = MyText_AS_BYTES(what_str);
-        int should_break = !strcmp(MyText_AS_STRING(ascii), what_names[what]);
-        Py_DECREF(ascii);
-        if (should_break) {
-            break;
-        }
-    }
-
-    /* Save off the frame's lineno, and use the forced one, if provided. */
-    orig_lineno = frame->f_lineno;
-    if (lineno > 0) {
-        frame->f_lineno = lineno;
-    }
-
-    /* Invoke the C function, and return ourselves. */
-    if (CTracer_trace(self, frame, what, arg) == RET_OK) {
-        Py_INCREF(self);
-        ret = (PyObject *)self;
-    }
-
-    /* Clean up. */
-    frame->f_lineno = orig_lineno;
-
-done:
-    return ret;
-}
-
-static PyObject *
-CTracer_start(CTracer *self, PyObject *args_unused)
-{
-    PyEval_SetTrace((Py_tracefunc)CTracer_trace, (PyObject*)self);
-    self->started = 1;
-    self->tracing_arcs = self->arcs && PyObject_IsTrue(self->arcs);
-    self->last_line = -1;
-
-    /* start() returns a trace function usable with sys.settrace() */
-    Py_INCREF(self);
-    return (PyObject *)self;
-}
-
-static PyObject *
-CTracer_stop(CTracer *self, PyObject *args_unused)
-{
-    if (self->started) {
-        PyEval_SetTrace(NULL, NULL);
-        self->started = 0;
-    }
-
-    return Py_BuildValue("");
-}
-
-static PyObject *
-CTracer_get_stats(CTracer *self)
-{
-#if COLLECT_STATS
-    return Py_BuildValue(
-        "{sI,sI,sI,sI,sI,sI,sI,sI,si,sI}",
-        "calls", self->stats.calls,
-        "lines", self->stats.lines,
-        "returns", self->stats.returns,
-        "exceptions", self->stats.exceptions,
-        "others", self->stats.others,
-        "new_files", self->stats.new_files,
-        "missed_returns", self->stats.missed_returns,
-        "stack_reallocs", self->stats.stack_reallocs,
-        "stack_alloc", self->data_stack_alloc,
-        "errors", self->stats.errors
-        );
-#else
-    return Py_BuildValue("");
-#endif /* COLLECT_STATS */
-}
-
-static PyMemberDef
-CTracer_members[] = {
-    { "should_trace",       T_OBJECT, offsetof(CTracer, should_trace), 0,
-            PyDoc_STR("Function indicating whether to trace a file.") },
-
-    { "warn",               T_OBJECT, offsetof(CTracer, warn), 0,
-            PyDoc_STR("Function for issuing warnings.") },
-
-    { "data",               T_OBJECT, offsetof(CTracer, data), 0,
-            PyDoc_STR("The raw dictionary of trace data.") },
-
-    { "should_trace_cache", T_OBJECT, offsetof(CTracer, should_trace_cache), 0,
-            PyDoc_STR("Dictionary caching should_trace results.") },
-
-    { "arcs",               T_OBJECT, offsetof(CTracer, arcs), 0,
-            PyDoc_STR("Should we trace arcs, or just lines?") },
-
-    { NULL }
-};
-
-static PyMethodDef
-CTracer_methods[] = {
-    { "start",      (PyCFunction) CTracer_start,        METH_VARARGS,
-            PyDoc_STR("Start the tracer") },
-
-    { "stop",       (PyCFunction) CTracer_stop,         METH_VARARGS,
-            PyDoc_STR("Stop the tracer") },
-
-    { "get_stats",  (PyCFunction) CTracer_get_stats,    METH_VARARGS,
-            PyDoc_STR("Get statistics about the tracing") },
-
-    { NULL }
-};
-
-static PyTypeObject
-CTracerType = {
-    MyType_HEAD_INIT
-    "coverage.CTracer",        /*tp_name*/
-    sizeof(CTracer),           /*tp_basicsize*/
-    0,                         /*tp_itemsize*/
-    (destructor)CTracer_dealloc, /*tp_dealloc*/
-    0,                         /*tp_print*/
-    0,                         /*tp_getattr*/
-    0,                         /*tp_setattr*/
-    0,                         /*tp_compare*/
-    0,                         /*tp_repr*/
-    0,                         /*tp_as_number*/
-    0,                         /*tp_as_sequence*/
-    0,                         /*tp_as_mapping*/
-    0,                         /*tp_hash */
-    (ternaryfunc)CTracer_call, /*tp_call*/
-    0,                         /*tp_str*/
-    0,                         /*tp_getattro*/
-    0,                         /*tp_setattro*/
-    0,                         /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
-    "CTracer objects",         /* tp_doc */
-    0,                         /* tp_traverse */
-    0,                         /* tp_clear */
-    0,                         /* tp_richcompare */
-    0,                         /* tp_weaklistoffset */
-    0,                         /* tp_iter */
-    0,                         /* tp_iternext */
-    CTracer_methods,           /* tp_methods */
-    CTracer_members,           /* tp_members */
-    0,                         /* tp_getset */
-    0,                         /* tp_base */
-    0,                         /* tp_dict */
-    0,                         /* tp_descr_get */
-    0,                         /* tp_descr_set */
-    0,                         /* tp_dictoffset */
-    (initproc)CTracer_init,    /* tp_init */
-    0,                         /* tp_alloc */
-    0,                         /* tp_new */
-};
-
-/* Module definition */
-
-#define MODULE_DOC PyDoc_STR("Fast coverage tracer.")
-
-#if PY_MAJOR_VERSION >= 3
-
-static PyModuleDef
-moduledef = {
-    PyModuleDef_HEAD_INIT,
-    "coverage.tracer",
-    MODULE_DOC,
-    -1,
-    NULL,       /* methods */
-    NULL,
-    NULL,       /* traverse */
-    NULL,       /* clear */
-    NULL
-};
-
-
-PyObject *
-PyInit_tracer(void)
-{
-    PyObject * mod = PyModule_Create(&moduledef);
-    if (mod == NULL) {
-        return NULL;
-    }
-
-    CTracerType.tp_new = PyType_GenericNew;
-    if (PyType_Ready(&CTracerType) < 0) {
-        Py_DECREF(mod);
-        return NULL;
-    }
-
-    Py_INCREF(&CTracerType);
-    PyModule_AddObject(mod, "CTracer", (PyObject *)&CTracerType);
-
-    return mod;
-}
-
-#else
-
-void
-inittracer(void)
-{
-    PyObject * mod;
-
-    mod = Py_InitModule3("coverage.tracer", NULL, MODULE_DOC);
-    if (mod == NULL) {
-        return;
-    }
-
-    CTracerType.tp_new = PyType_GenericNew;
-    if (PyType_Ready(&CTracerType) < 0) {
-        return;
-    }
-
-    Py_INCREF(&CTracerType);
-    PyModule_AddObject(mod, "CTracer", (PyObject *)&CTracerType);
-}
-
-#endif /* Py3k */
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Help/source.qhp	Tue Apr 15 22:41:08 2014 +0200
@@ -877,6 +877,7 @@
               <section title="eric5.QScintilla.Lexers.LexerProperties" ref="eric5.QScintilla.Lexers.LexerProperties.html" />
               <section title="eric5.QScintilla.Lexers.LexerPygments" ref="eric5.QScintilla.Lexers.LexerPygments.html" />
               <section title="eric5.QScintilla.Lexers.LexerPython" ref="eric5.QScintilla.Lexers.LexerPython.html" />
+              <section title="eric5.QScintilla.Lexers.LexerQSS" ref="eric5.QScintilla.Lexers.LexerQSS.html" />
               <section title="eric5.QScintilla.Lexers.LexerRuby" ref="eric5.QScintilla.Lexers.LexerRuby.html" />
               <section title="eric5.QScintilla.Lexers.LexerSQL" ref="eric5.QScintilla.Lexers.LexerSQL.html" />
               <section title="eric5.QScintilla.Lexers.LexerTCL" ref="eric5.QScintilla.Lexers.LexerTCL.html" />
@@ -946,6 +947,10 @@
             <section title="eric5.Tools.UIPreviewer" ref="eric5.Tools.UIPreviewer.html" />
           </section>
           <section title="eric5.UI" ref="index-eric5.UI.html">
+            <section title="eric5.UI.Previewers" ref="index-eric5.UI.Previewers.html">
+              <section title="eric5.UI.Previewers.PreviewerHTML" ref="eric5.UI.Previewers.PreviewerHTML.html" />
+              <section title="eric5.UI.Previewers.PreviewerQSS" ref="eric5.UI.Previewers.PreviewerQSS.html" />
+            </section>
             <section title="eric5.UI.AuthenticationDialog" ref="eric5.UI.AuthenticationDialog.html" />
             <section title="eric5.UI.Browser" ref="eric5.UI.Browser.html" />
             <section title="eric5.UI.BrowserModel" ref="eric5.UI.BrowserModel.html" />
@@ -1492,7 +1497,6 @@
       <keyword name="BackgroundService.__receive" id="BackgroundService.__receive" ref="eric5.Utilities.BackgroundService.html#BackgroundService.__receive" />
       <keyword name="BackgroundService.__send" id="BackgroundService.__send" ref="eric5.Utilities.BackgroundService.html#BackgroundService.__send" />
       <keyword name="BackgroundService.__startExternalClient" id="BackgroundService.__startExternalClient" ref="eric5.Utilities.BackgroundService.html#BackgroundService.__startExternalClient" />
-      <keyword name="BackgroundService.__startInternalClient" id="BackgroundService.__startInternalClient" ref="eric5.Utilities.BackgroundService.html#BackgroundService.__startInternalClient" />
       <keyword name="BackgroundService.enqueueRequest" id="BackgroundService.enqueueRequest" ref="eric5.Utilities.BackgroundService.html#BackgroundService.enqueueRequest" />
       <keyword name="BackgroundService.on_disconnectSocket" id="BackgroundService.on_disconnectSocket" ref="eric5.Utilities.BackgroundService.html#BackgroundService.on_disconnectSocket" />
       <keyword name="BackgroundService.on_newConnection" id="BackgroundService.on_newConnection" ref="eric5.Utilities.BackgroundService.html#BackgroundService.on_newConnection" />
@@ -5690,6 +5694,7 @@
       <keyword name="Hg.hgBisect" id="Hg.hgBisect" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgBisect" />
       <keyword name="Hg.hgBranch" id="Hg.hgBranch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgBranch" />
       <keyword name="Hg.hgBundle" id="Hg.hgBundle" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgBundle" />
+      <keyword name="Hg.hgCancelMerge" id="Hg.hgCancelMerge" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgCancelMerge" />
       <keyword name="Hg.hgCopy" id="Hg.hgCopy" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgCopy" />
       <keyword name="Hg.hgCreateIgnoreFile" id="Hg.hgCreateIgnoreFile" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgCreateIgnoreFile" />
       <keyword name="Hg.hgEditConfig" id="Hg.hgEditConfig" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgEditConfig" />
@@ -6214,6 +6219,7 @@
       <keyword name="HgProjectHelper.__hgBranch" id="HgProjectHelper.__hgBranch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgBranch" />
       <keyword name="HgProjectHelper.__hgBranchList" id="HgProjectHelper.__hgBranchList" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgBranchList" />
       <keyword name="HgProjectHelper.__hgBundle" id="HgProjectHelper.__hgBundle" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgBundle" />
+      <keyword name="HgProjectHelper.__hgCancelMerge" id="HgProjectHelper.__hgCancelMerge" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgCancelMerge" />
       <keyword name="HgProjectHelper.__hgCloseBranch" id="HgProjectHelper.__hgCloseBranch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgCloseBranch" />
       <keyword name="HgProjectHelper.__hgConfigure" id="HgProjectHelper.__hgConfigure" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgConfigure" />
       <keyword name="HgProjectHelper.__hgCreateIgnore" id="HgProjectHelper.__hgCreateIgnore" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgCreateIgnore" />
@@ -7306,6 +7312,7 @@
       <keyword name="Lexer.isCommentStyle" id="Lexer.isCommentStyle" ref="eric5.QScintilla.Lexers.Lexer.html#Lexer.isCommentStyle" />
       <keyword name="Lexer.isStringStyle" id="Lexer.isStringStyle" ref="eric5.QScintilla.Lexers.Lexer.html#Lexer.isStringStyle" />
       <keyword name="Lexer.keywords" id="Lexer.keywords" ref="eric5.QScintilla.Lexers.Lexer.html#Lexer.keywords" />
+      <keyword name="Lexer.lexerName" id="Lexer.lexerName" ref="eric5.QScintilla.Lexers.Lexer.html#Lexer.lexerName" />
       <keyword name="Lexer.smartIndentLine" id="Lexer.smartIndentLine" ref="eric5.QScintilla.Lexers.Lexer.html#Lexer.smartIndentLine" />
       <keyword name="Lexer.smartIndentSelection" id="Lexer.smartIndentSelection" ref="eric5.QScintilla.Lexers.Lexer.html#Lexer.smartIndentSelection" />
       <keyword name="Lexer.streamCommentStr" id="Lexer.streamCommentStr" ref="eric5.QScintilla.Lexers.Lexer.html#Lexer.streamCommentStr" />
@@ -7517,6 +7524,15 @@
       <keyword name="LexerPython.isCommentStyle" id="LexerPython.isCommentStyle" ref="eric5.QScintilla.Lexers.LexerPython.html#LexerPython.isCommentStyle" />
       <keyword name="LexerPython.isStringStyle" id="LexerPython.isStringStyle" ref="eric5.QScintilla.Lexers.LexerPython.html#LexerPython.isStringStyle" />
       <keyword name="LexerPython.language" id="LexerPython.language" ref="eric5.QScintilla.Lexers.LexerPython.html#LexerPython.language" />
+      <keyword name="LexerQSS" id="LexerQSS" ref="eric5.QScintilla.Lexers.LexerQSS.html#LexerQSS" />
+      <keyword name="LexerQSS (Constructor)" id="LexerQSS (Constructor)" ref="eric5.QScintilla.Lexers.LexerQSS.html#LexerQSS.__init__" />
+      <keyword name="LexerQSS (Module)" id="LexerQSS (Module)" ref="eric5.QScintilla.Lexers.LexerQSS.html" />
+      <keyword name="LexerQSS.defaultKeywords" id="LexerQSS.defaultKeywords" ref="eric5.QScintilla.Lexers.LexerQSS.html#LexerQSS.defaultKeywords" />
+      <keyword name="LexerQSS.initProperties" id="LexerQSS.initProperties" ref="eric5.QScintilla.Lexers.LexerQSS.html#LexerQSS.initProperties" />
+      <keyword name="LexerQSS.isCommentStyle" id="LexerQSS.isCommentStyle" ref="eric5.QScintilla.Lexers.LexerQSS.html#LexerQSS.isCommentStyle" />
+      <keyword name="LexerQSS.isStringStyle" id="LexerQSS.isStringStyle" ref="eric5.QScintilla.Lexers.LexerQSS.html#LexerQSS.isStringStyle" />
+      <keyword name="LexerQSS.language" id="LexerQSS.language" ref="eric5.QScintilla.Lexers.LexerQSS.html#LexerQSS.language" />
+      <keyword name="LexerQSS.lexerName" id="LexerQSS.lexerName" ref="eric5.QScintilla.Lexers.LexerQSS.html#LexerQSS.lexerName" />
       <keyword name="LexerRuby" id="LexerRuby" ref="eric5.QScintilla.Lexers.LexerRuby.html#LexerRuby" />
       <keyword name="LexerRuby (Constructor)" id="LexerRuby (Constructor)" ref="eric5.QScintilla.Lexers.LexerRuby.html#LexerRuby.__init__" />
       <keyword name="LexerRuby (Module)" id="LexerRuby (Module)" ref="eric5.QScintilla.Lexers.LexerRuby.html" />
@@ -8595,14 +8611,14 @@
       <keyword name="PreferencesLexerLanguageError (Constructor)" id="PreferencesLexerLanguageError (Constructor)" ref="eric5.Preferences.PreferencesLexer.html#PreferencesLexerLanguageError.__init__" />
       <keyword name="Prefs" id="Prefs" ref="eric5.Preferences.__init__.html#Prefs" />
       <keyword name="Prefs.initWebSettingsDefaults" id="Prefs.initWebSettingsDefaults" ref="eric5.Preferences.__init__.html#Prefs.initWebSettingsDefaults" />
-      <keyword name="PreviewProcessingThread" id="PreviewProcessingThread" ref="eric5.UI.Previewer.html#PreviewProcessingThread" />
-      <keyword name="PreviewProcessingThread (Constructor)" id="PreviewProcessingThread (Constructor)" ref="eric5.UI.Previewer.html#PreviewProcessingThread.__init__" />
-      <keyword name="PreviewProcessingThread.__convertMarkdown" id="PreviewProcessingThread.__convertMarkdown" ref="eric5.UI.Previewer.html#PreviewProcessingThread.__convertMarkdown" />
-      <keyword name="PreviewProcessingThread.__convertReST" id="PreviewProcessingThread.__convertReST" ref="eric5.UI.Previewer.html#PreviewProcessingThread.__convertReST" />
-      <keyword name="PreviewProcessingThread.__getHtml" id="PreviewProcessingThread.__getHtml" ref="eric5.UI.Previewer.html#PreviewProcessingThread.__getHtml" />
-      <keyword name="PreviewProcessingThread.__processSSI" id="PreviewProcessingThread.__processSSI" ref="eric5.UI.Previewer.html#PreviewProcessingThread.__processSSI" />
-      <keyword name="PreviewProcessingThread.process" id="PreviewProcessingThread.process" ref="eric5.UI.Previewer.html#PreviewProcessingThread.process" />
-      <keyword name="PreviewProcessingThread.run" id="PreviewProcessingThread.run" ref="eric5.UI.Previewer.html#PreviewProcessingThread.run" />
+      <keyword name="PreviewProcessingThread" id="PreviewProcessingThread" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread" />
+      <keyword name="PreviewProcessingThread (Constructor)" id="PreviewProcessingThread (Constructor)" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread.__init__" />
+      <keyword name="PreviewProcessingThread.__convertMarkdown" id="PreviewProcessingThread.__convertMarkdown" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread.__convertMarkdown" />
+      <keyword name="PreviewProcessingThread.__convertReST" id="PreviewProcessingThread.__convertReST" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread.__convertReST" />
+      <keyword name="PreviewProcessingThread.__getHtml" id="PreviewProcessingThread.__getHtml" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread.__getHtml" />
+      <keyword name="PreviewProcessingThread.__processSSI" id="PreviewProcessingThread.__processSSI" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread.__processSSI" />
+      <keyword name="PreviewProcessingThread.process" id="PreviewProcessingThread.process" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread.process" />
+      <keyword name="PreviewProcessingThread.run" id="PreviewProcessingThread.run" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewProcessingThread.run" />
       <keyword name="Previewer" id="Previewer" ref="eric5.UI.Previewer.html#Previewer" />
       <keyword name="Previewer (Constructor)" id="Previewer (Constructor)" ref="eric5.UI.Previewer.html#Previewer.__init__" />
       <keyword name="Previewer (Module)" id="Previewer (Module)" ref="eric5.UI.Previewer.html" />
@@ -8611,19 +8627,29 @@
       <keyword name="Previewer.__editorTextChanged" id="Previewer.__editorTextChanged" ref="eric5.UI.Previewer.html#Previewer.__editorTextChanged" />
       <keyword name="Previewer.__isPreviewable" id="Previewer.__isPreviewable" ref="eric5.UI.Previewer.html#Previewer.__isPreviewable" />
       <keyword name="Previewer.__previewStateChanged" id="Previewer.__previewStateChanged" ref="eric5.UI.Previewer.html#Previewer.__previewStateChanged" />
-      <keyword name="Previewer.__restoreScrollBarPositions" id="Previewer.__restoreScrollBarPositions" ref="eric5.UI.Previewer.html#Previewer.__restoreScrollBarPositions" />
-      <keyword name="Previewer.__runProcessingThread" id="Previewer.__runProcessingThread" ref="eric5.UI.Previewer.html#Previewer.__runProcessingThread" />
-      <keyword name="Previewer.__saveScrollBarPositions" id="Previewer.__saveScrollBarPositions" ref="eric5.UI.Previewer.html#Previewer.__saveScrollBarPositions" />
-      <keyword name="Previewer.__setHtml" id="Previewer.__setHtml" ref="eric5.UI.Previewer.html#Previewer.__setHtml" />
-      <keyword name="Previewer.__setJavaScriptEnabled" id="Previewer.__setJavaScriptEnabled" ref="eric5.UI.Previewer.html#Previewer.__setJavaScriptEnabled" />
+      <keyword name="Previewer.__processEditor" id="Previewer.__processEditor" ref="eric5.UI.Previewer.html#Previewer.__processEditor" />
       <keyword name="Previewer.__splitterMoved" id="Previewer.__splitterMoved" ref="eric5.UI.Previewer.html#Previewer.__splitterMoved" />
       <keyword name="Previewer.hide" id="Previewer.hide" ref="eric5.UI.Previewer.html#Previewer.hide" />
-      <keyword name="Previewer.on_jsCheckBox_clicked" id="Previewer.on_jsCheckBox_clicked" ref="eric5.UI.Previewer.html#Previewer.on_jsCheckBox_clicked" />
-      <keyword name="Previewer.on_previewView_linkClicked" id="Previewer.on_previewView_linkClicked" ref="eric5.UI.Previewer.html#Previewer.on_previewView_linkClicked" />
-      <keyword name="Previewer.on_previewView_titleChanged" id="Previewer.on_previewView_titleChanged" ref="eric5.UI.Previewer.html#Previewer.on_previewView_titleChanged" />
-      <keyword name="Previewer.on_ssiCheckBox_clicked" id="Previewer.on_ssiCheckBox_clicked" ref="eric5.UI.Previewer.html#Previewer.on_ssiCheckBox_clicked" />
       <keyword name="Previewer.show" id="Previewer.show" ref="eric5.UI.Previewer.html#Previewer.show" />
       <keyword name="Previewer.shutdown" id="Previewer.shutdown" ref="eric5.UI.Previewer.html#Previewer.shutdown" />
+      <keyword name="PreviewerHTML" id="PreviewerHTML" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML" />
+      <keyword name="PreviewerHTML (Constructor)" id="PreviewerHTML (Constructor)" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.__init__" />
+      <keyword name="PreviewerHTML (Module)" id="PreviewerHTML (Module)" ref="eric5.UI.Previewers.PreviewerHTML.html" />
+      <keyword name="PreviewerHTML.__restoreScrollBarPositions" id="PreviewerHTML.__restoreScrollBarPositions" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.__restoreScrollBarPositions" />
+      <keyword name="PreviewerHTML.__saveScrollBarPositions" id="PreviewerHTML.__saveScrollBarPositions" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.__saveScrollBarPositions" />
+      <keyword name="PreviewerHTML.__setHtml" id="PreviewerHTML.__setHtml" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.__setHtml" />
+      <keyword name="PreviewerHTML.__setJavaScriptEnabled" id="PreviewerHTML.__setJavaScriptEnabled" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.__setJavaScriptEnabled" />
+      <keyword name="PreviewerHTML.on_jsCheckBox_clicked" id="PreviewerHTML.on_jsCheckBox_clicked" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.on_jsCheckBox_clicked" />
+      <keyword name="PreviewerHTML.on_previewView_linkClicked" id="PreviewerHTML.on_previewView_linkClicked" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.on_previewView_linkClicked" />
+      <keyword name="PreviewerHTML.on_previewView_titleChanged" id="PreviewerHTML.on_previewView_titleChanged" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.on_previewView_titleChanged" />
+      <keyword name="PreviewerHTML.on_ssiCheckBox_clicked" id="PreviewerHTML.on_ssiCheckBox_clicked" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.on_ssiCheckBox_clicked" />
+      <keyword name="PreviewerHTML.processEditor" id="PreviewerHTML.processEditor" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.processEditor" />
+      <keyword name="PreviewerHTML.shutdown" id="PreviewerHTML.shutdown" ref="eric5.UI.Previewers.PreviewerHTML.html#PreviewerHTML.shutdown" />
+      <keyword name="PreviewerQSS" id="PreviewerQSS" ref="eric5.UI.Previewers.PreviewerQSS.html#PreviewerQSS" />
+      <keyword name="PreviewerQSS (Constructor)" id="PreviewerQSS (Constructor)" ref="eric5.UI.Previewers.PreviewerQSS.html#PreviewerQSS.__init__" />
+      <keyword name="PreviewerQSS (Module)" id="PreviewerQSS (Module)" ref="eric5.UI.Previewers.PreviewerQSS.html" />
+      <keyword name="PreviewerQSS.processEditor" id="PreviewerQSS.processEditor" ref="eric5.UI.Previewers.PreviewerQSS.html#PreviewerQSS.processEditor" />
+      <keyword name="Previewers (Package)" id="Previewers (Package)" ref="index-eric5.UI.Previewers.html" />
       <keyword name="Printer" id="Printer" ref="eric5.QScintilla.Printer.html#Printer" />
       <keyword name="Printer (Constructor)" id="Printer (Constructor)" ref="eric5.QScintilla.Printer.html#Printer.__init__" />
       <keyword name="Printer (Module)" id="Printer (Module)" ref="eric5.QScintilla.Printer.html" />
@@ -11589,6 +11615,7 @@
       <keyword name="TemplatesPage" id="TemplatesPage" ref="eric5.Preferences.ConfigurationPages.TemplatesPage.html#TemplatesPage" />
       <keyword name="TemplatesPage (Constructor)" id="TemplatesPage (Constructor)" ref="eric5.Preferences.ConfigurationPages.TemplatesPage.html#TemplatesPage.__init__" />
       <keyword name="TemplatesPage (Module)" id="TemplatesPage (Module)" ref="eric5.Preferences.ConfigurationPages.TemplatesPage.html" />
+      <keyword name="TemplatesPage.on_editorFontButton_clicked" id="TemplatesPage.on_editorFontButton_clicked" ref="eric5.Preferences.ConfigurationPages.TemplatesPage.html#TemplatesPage.on_editorFontButton_clicked" />
       <keyword name="TemplatesPage.save" id="TemplatesPage.save" ref="eric5.Preferences.ConfigurationPages.TemplatesPage.html#TemplatesPage.save" />
       <keyword name="TemplatesReader" id="TemplatesReader" ref="eric5.E5XML.TemplatesReader.html#TemplatesReader" />
       <keyword name="TemplatesReader (Constructor)" id="TemplatesReader (Constructor)" ref="eric5.E5XML.TemplatesReader.html#TemplatesReader.__init__" />
@@ -12844,8 +12871,8 @@
       <keyword name="_ClbrBase" id="_ClbrBase" ref="eric5.Utilities.ClassBrowsers.ClbrBaseClasses.html#_ClbrBase" />
       <keyword name="_ClbrBase (Constructor)" id="_ClbrBase (Constructor)" ref="eric5.Utilities.ClassBrowsers.ClbrBaseClasses.html#_ClbrBase.__init__" />
       <keyword name="_ClbrBase.setEndLine" id="_ClbrBase.setEndLine" ref="eric5.Utilities.ClassBrowsers.ClbrBaseClasses.html#_ClbrBase.setEndLine" />
-      <keyword name="_StrikeThroughExtension" id="_StrikeThroughExtension" ref="eric5.UI.Previewer.html#_StrikeThroughExtension" />
-      <keyword name="_StrikeThroughExtension.extendMarkdown" id="_StrikeThroughExtension.extendMarkdown" ref="eric5.UI.Previewer.html#_StrikeThroughExtension.extendMarkdown" />
+      <keyword name="_StrikeThroughExtension" id="_StrikeThroughExtension" ref="eric5.UI.Previewers.PreviewerHTML.html#_StrikeThroughExtension" />
+      <keyword name="_StrikeThroughExtension.extendMarkdown" id="_StrikeThroughExtension.extendMarkdown" ref="eric5.UI.Previewers.PreviewerHTML.html#_StrikeThroughExtension.extendMarkdown" />
       <keyword name="__getMasterPassword" id="__getMasterPassword" ref="eric5.Utilities.crypto.__init__.html#__getMasterPassword" />
       <keyword name="__getPygmentsLexer" id="__getPygmentsLexer" ref="eric5.QScintilla.Lexers.__init__.html#__getPygmentsLexer" />
       <keyword name="__initChannelModesDict" id="__initChannelModesDict" ref="eric5.Network.IRC.IrcUtilities.html#__initChannelModesDict" />
@@ -14210,6 +14237,7 @@
       <file>eric5.QScintilla.Lexers.LexerProperties.html</file>
       <file>eric5.QScintilla.Lexers.LexerPygments.html</file>
       <file>eric5.QScintilla.Lexers.LexerPython.html</file>
+      <file>eric5.QScintilla.Lexers.LexerQSS.html</file>
       <file>eric5.QScintilla.Lexers.LexerRuby.html</file>
       <file>eric5.QScintilla.Lexers.LexerSQL.html</file>
       <file>eric5.QScintilla.Lexers.LexerTCL.html</file>
@@ -14275,6 +14303,8 @@
       <file>eric5.UI.NumbersWidget.html</file>
       <file>eric5.UI.PixmapCache.html</file>
       <file>eric5.UI.Previewer.html</file>
+      <file>eric5.UI.Previewers.PreviewerHTML.html</file>
+      <file>eric5.UI.Previewers.PreviewerQSS.html</file>
       <file>eric5.UI.SearchWidget.html</file>
       <file>eric5.UI.SplashScreen.html</file>
       <file>eric5.UI.SymbolsWidget.html</file>
@@ -14434,6 +14464,7 @@
       <file>index-eric5.Templates.html</file>
       <file>index-eric5.Toolbox.html</file>
       <file>index-eric5.Tools.html</file>
+      <file>index-eric5.UI.Previewers.html</file>
       <file>index-eric5.UI.html</file>
       <file>index-eric5.Utilities.ClassBrowsers.html</file>
       <file>index-eric5.Utilities.crypto.html</file>
--- a/Documentation/Source/eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html	Tue Apr 15 22:41:08 2014 +0200
@@ -141,8 +141,8 @@
 <dt>Returns:</dt>
 <dd>
 tuple of stats (dict) and results (tuple for each found violation
-        of style (tuple of lineno (int), position (int), text (str), fixed
-            (bool), autofixing (bool), fixedMsg (str)))
+        of style (tuple of lineno (int), position (int), text (str), ignored
+            (bool), fixed (bool), autofixing (bool), fixedMsg (str)))
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html	Tue Apr 15 22:41:08 2014 +0200
@@ -48,7 +48,7 @@
 QDialog, Ui_CodeStyleCheckerDialog
 <h3>Class Attributes</h3>
 <table>
-<tr><td>codeRole</td></tr><tr><td>filenameRole</td></tr><tr><td>fixableRole</td></tr><tr><td>lineRole</td></tr><tr><td>messageRole</td></tr><tr><td>positionRole</td></tr>
+<tr><td>codeRole</td></tr><tr><td>filenameRole</td></tr><tr><td>fixableRole</td></tr><tr><td>ignoredRole</td></tr><tr><td>lineRole</td></tr><tr><td>messageRole</td></tr><tr><td>positionRole</td></tr>
 </table>
 <h3>Class Methods</h3>
 <table>
@@ -182,7 +182,7 @@
 </dd>
 </dl><a NAME="CodeStyleCheckerDialog.__createResultItem" ID="CodeStyleCheckerDialog.__createResultItem"></a>
 <h4>CodeStyleCheckerDialog.__createResultItem</h4>
-<b>__createResultItem</b>(<i>file, line, pos, message, fixed, autofixing</i>)
+<b>__createResultItem</b>(<i>file, line, pos, message, fixed, autofixing, ignored</i>)
 <p>
         Private method to create an entry in the result list.
 </p><dl>
@@ -205,6 +205,9 @@
 <dd>
 flag indicating, that we are fixing issues
             automatically (boolean)
+</dd><dt><i>ignored</i></dt>
+<dd>
+flag indicating an ignored issue (boolean)
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
@@ -292,8 +295,8 @@
 </dd><dt><i>results</i></dt>
 <dd>
 tuple for each found violation of style (tuple of
-            lineno (int), position (int), text (str), fixed (bool),
-            autofixing (bool))
+            lineno (int), position (int), text (str), ignored (bool),
+            fixed (bool), autofixing (bool))
 </dd>
 </dl><a NAME="CodeStyleCheckerDialog.__resetStatistics" ID="CodeStyleCheckerDialog.__resetStatistics"></a>
 <h4>CodeStyleCheckerDialog.__resetStatistics</h4>
@@ -331,7 +334,7 @@
 </dd>
 </dl><a NAME="CodeStyleCheckerDialog.__updateStatistics" ID="CodeStyleCheckerDialog.__updateStatistics"></a>
 <h4>CodeStyleCheckerDialog.__updateStatistics</h4>
-<b>__updateStatistics</b>(<i>statistics, fixer</i>)
+<b>__updateStatistics</b>(<i>statistics, fixer, ignoredErrors</i>)
 <p>
         Private method to update the collected statistics.
 </p><dl>
@@ -342,6 +345,9 @@
 </dd><dt><i>fixer</i></dt>
 <dd>
 reference to the code style fixer (CodeStyleFixer)
+</dd><dt><i>ignoredErrors</i></dt>
+<dd>
+number of ignored errors (integer)
 </dd>
 </dl><a NAME="CodeStyleCheckerDialog.check" ID="CodeStyleCheckerDialog.check"></a>
 <h4>CodeStyleCheckerDialog.check</h4>
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html	Tue Apr 15 22:41:08 2014 +0200
@@ -93,6 +93,9 @@
 <td><a href="#HgProjectHelper.__hgBundle">__hgBundle</a></td>
 <td>Private slot used to create a changegroup file.</td>
 </tr><tr>
+<td><a href="#HgProjectHelper.__hgCancelMerge">__hgCancelMerge</a></td>
+<td>Private slot used to cancel an uncommitted merge.</td>
+</tr><tr>
 <td><a href="#HgProjectHelper.__hgCloseBranch">__hgCloseBranch</a></td>
 <td>Private slot used to close the current branch of the local project.</td>
 </tr><tr>
@@ -301,6 +304,11 @@
 <b>__hgBundle</b>(<i></i>)
 <p>
         Private slot used to create a changegroup file.
+</p><a NAME="HgProjectHelper.__hgCancelMerge" ID="HgProjectHelper.__hgCancelMerge"></a>
+<h4>HgProjectHelper.__hgCancelMerge</h4>
+<b>__hgCancelMerge</b>(<i></i>)
+<p>
+        Private slot used to cancel an uncommitted merge.
 </p><a NAME="HgProjectHelper.__hgCloseBranch" ID="HgProjectHelper.__hgCloseBranch"></a>
 <h4>HgProjectHelper.__hgCloseBranch</h4>
 <b>__hgCloseBranch</b>(<i></i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html	Tue Apr 15 22:41:08 2014 +0200
@@ -146,6 +146,9 @@
 <td><a href="#Hg.hgBundle">hgBundle</a></td>
 <td>Public method to create a changegroup file.</td>
 </tr><tr>
+<td><a href="#Hg.hgCancelMerge">hgCancelMerge</a></td>
+<td>Public method to cancel an uncommitted merge.</td>
+</tr><tr>
 <td><a href="#Hg.hgCopy">hgCopy</a></td>
 <td>Public method used to copy a file/directory.</td>
 </tr><tr>
@@ -629,6 +632,22 @@
 <dd>
 file/directory name (string)
 </dd>
+</dl><a NAME="Hg.hgCancelMerge" ID="Hg.hgCancelMerge"></a>
+<h4>Hg.hgCancelMerge</h4>
+<b>hgCancelMerge</b>(<i>name</i>)
+<p>
+        Public method to cancel an uncommitted merge.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+file/directory name (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating, that the cancellation contained an add
+            or delete (boolean)
+</dd>
 </dl><a NAME="Hg.hgCopy" ID="Hg.hgCopy"></a>
 <h4>Hg.hgCopy</h4>
 <b>hgCopy</b>(<i>name, project</i>)
--- a/Documentation/Source/eric5.Preferences.ConfigurationPages.TemplatesPage.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.Preferences.ConfigurationPages.TemplatesPage.html	Tue Apr 15 22:41:08 2014 +0200
@@ -63,6 +63,9 @@
 <td><a href="#TemplatesPage.__init__">TemplatesPage</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#TemplatesPage.on_editorFontButton_clicked">on_editorFontButton_clicked</a></td>
+<td>Private method used to select the font to be used by the code editor.</td>
+</tr><tr>
 <td><a href="#TemplatesPage.save">save</a></td>
 <td>Public slot to save the Templates configuration.</td>
 </tr>
@@ -76,6 +79,11 @@
 <b>TemplatesPage</b>(<i></i>)
 <p>
         Constructor
+</p><a NAME="TemplatesPage.on_editorFontButton_clicked" ID="TemplatesPage.on_editorFontButton_clicked"></a>
+<h4>TemplatesPage.on_editorFontButton_clicked</h4>
+<b>on_editorFontButton_clicked</b>(<i></i>)
+<p>
+        Private method used to select the font to be used by the code editor.
 </p><a NAME="TemplatesPage.save" ID="TemplatesPage.save"></a>
 <h4>TemplatesPage.save</h4>
 <b>save</b>(<i></i>)
--- a/Documentation/Source/eric5.QScintilla.Lexers.Lexer.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.Lexer.html	Tue Apr 15 22:41:08 2014 +0200
@@ -96,6 +96,9 @@
 <td><a href="#Lexer.keywords">keywords</a></td>
 <td>Public method to get the keywords.</td>
 </tr><tr>
+<td><a href="#Lexer.lexerName">lexerName</a></td>
+<td>Public method to return the lexer name.</td>
+</tr><tr>
 <td><a href="#Lexer.smartIndentLine">smartIndentLine</a></td>
 <td>Public method to handle smart indentation for a line.</td>
 </tr><tr>
@@ -249,6 +252,16 @@
 <dd>
 string giving the keywords (string) or None
 </dd>
+</dl><a NAME="Lexer.lexerName" ID="Lexer.lexerName"></a>
+<h4>Lexer.lexerName</h4>
+<b>lexerName</b>(<i></i>)
+<p>
+        Public method to return the lexer name.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+lexer name (string)
+</dd>
 </dl><a NAME="Lexer.smartIndentLine" ID="Lexer.smartIndentLine"></a>
 <h4>Lexer.smartIndentLine</h4>
 <b>smartIndentLine</b>(<i>editor</i>)
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerBash.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerBash.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerBash, Lexer
+Lexer, QsciLexerBash
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerBatch.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerBatch.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerBatch, Lexer
+Lexer, QsciLexerBatch
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerCMake.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerCMake.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerCMake, Lexer
+Lexer, QsciLexerCMake
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerCPP.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerCPP.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerCPP, Lexer
+Lexer, QsciLexerCPP
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerCSS.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerCSS.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerCSS, Lexer
+Lexer, QsciLexerCSS
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerCSharp.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerCSharp.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerCSharp, Lexer
+Lexer, QsciLexerCSharp
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerContainer.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerContainer.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass as a base for the implementation of custom lexers.
 </p>
 <h3>Derived from</h3>
-QsciLexer, Lexer
+Lexer, QsciLexer
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerD.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerD.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerD, Lexer
+Lexer, QsciLexerD
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerDiff.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerDiff.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerDiff, Lexer
+Lexer, QsciLexerDiff
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerFortran.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerFortran.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerFortran, Lexer
+Lexer, QsciLexerFortran
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerFortran77.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerFortran77.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerFortran77, Lexer
+Lexer, QsciLexerFortran77
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerHTML.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerHTML.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerHTML, Lexer
+Lexer, QsciLexerHTML
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerIDL.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerIDL.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerIDL, Lexer
+Lexer, QsciLexerIDL
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerJava.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerJava.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerJava, Lexer
+Lexer, QsciLexerJava
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerJavaScript.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerJavaScript.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerJavaScript, Lexer
+Lexer, QsciLexerJavaScript
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerLua.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerLua.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerLua, Lexer
+Lexer, QsciLexerLua
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerMakefile.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerMakefile.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerMakefile, Lexer
+Lexer, QsciLexerMakefile
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerMatlab.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerMatlab.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependent methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerMatlab, Lexer
+Lexer, QsciLexerMatlab
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerOctave.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerOctave.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependent methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerOctave, Lexer
+Lexer, QsciLexerOctave
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerPOV.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerPOV.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerPOV, Lexer
+Lexer, QsciLexerPOV
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerPascal.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerPascal.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerPascal, Lexer
+Lexer, QsciLexerPascal
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerPerl.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerPerl.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerPerl, Lexer
+Lexer, QsciLexerPerl
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerPostScript.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerPostScript.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerPostScript, Lexer
+Lexer, QsciLexerPostScript
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerProperties.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerProperties.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerProperties, Lexer
+Lexer, QsciLexerProperties
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerPython.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerPython.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerPython, Lexer
+Lexer, QsciLexerPython
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerQSS.html	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric5.QScintilla.Lexers.LexerQSS</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>eric5.QScintilla.Lexers.LexerQSS</h1>
+<p>
+Module implementing a QSS lexer with some additional methods.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#LexerQSS">LexerQSS</a></td>
+<td>Subclass to implement some additional lexer dependent methods.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="LexerQSS" ID="LexerQSS"></a>
+<h2>LexerQSS</h2>
+<p>
+    Subclass to implement some additional lexer dependent methods.
+</p>
+<h3>Derived from</h3>
+Lexer, QsciLexerCSS
+<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="#LexerQSS.__init__">LexerQSS</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#LexerQSS.defaultKeywords">defaultKeywords</a></td>
+<td>Public method to get the default keywords.</td>
+</tr><tr>
+<td><a href="#LexerQSS.initProperties">initProperties</a></td>
+<td>Public slot to initialize the properties.</td>
+</tr><tr>
+<td><a href="#LexerQSS.isCommentStyle">isCommentStyle</a></td>
+<td>Public method to check, if a style is a comment style.</td>
+</tr><tr>
+<td><a href="#LexerQSS.isStringStyle">isStringStyle</a></td>
+<td>Public method to check, if a style is a string style.</td>
+</tr><tr>
+<td><a href="#LexerQSS.language">language</a></td>
+<td>Public method to return the lexer language.</td>
+</tr><tr>
+<td><a href="#LexerQSS.lexerName">lexerName</a></td>
+<td>Public method to return the lexer name.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="LexerQSS.__init__" ID="LexerQSS.__init__"></a>
+<h4>LexerQSS (Constructor)</h4>
+<b>LexerQSS</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+parent widget of this lexer
+</dd>
+</dl><a NAME="LexerQSS.defaultKeywords" ID="LexerQSS.defaultKeywords"></a>
+<h4>LexerQSS.defaultKeywords</h4>
+<b>defaultKeywords</b>(<i>kwSet</i>)
+<p>
+        Public method to get the default keywords.
+</p><dl>
+<dt><i>kwSet</i></dt>
+<dd>
+number of the keyword set (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+string giving the keywords (string) or None
+</dd>
+</dl><a NAME="LexerQSS.initProperties" ID="LexerQSS.initProperties"></a>
+<h4>LexerQSS.initProperties</h4>
+<b>initProperties</b>(<i></i>)
+<p>
+        Public slot to initialize the properties.
+</p><a NAME="LexerQSS.isCommentStyle" ID="LexerQSS.isCommentStyle"></a>
+<h4>LexerQSS.isCommentStyle</h4>
+<b>isCommentStyle</b>(<i>style</i>)
+<p>
+        Public method to check, if a style is a comment style.
+</p><dl>
+<dt><i>style</i></dt>
+<dd>
+style to check (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a comment style (boolean)
+</dd>
+</dl><a NAME="LexerQSS.isStringStyle" ID="LexerQSS.isStringStyle"></a>
+<h4>LexerQSS.isStringStyle</h4>
+<b>isStringStyle</b>(<i>style</i>)
+<p>
+        Public method to check, if a style is a string style.
+</p><dl>
+<dt><i>style</i></dt>
+<dd>
+style to check (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a string style (boolean)
+</dd>
+</dl><a NAME="LexerQSS.language" ID="LexerQSS.language"></a>
+<h4>LexerQSS.language</h4>
+<b>language</b>(<i></i>)
+<p>
+        Public method to return the lexer language.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+lexer language (string)
+</dd>
+</dl><a NAME="LexerQSS.lexerName" ID="LexerQSS.lexerName"></a>
+<h4>LexerQSS.lexerName</h4>
+<b>lexerName</b>(<i></i>)
+<p>
+        Public method to return the lexer name.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+lexer name (string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerRuby.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerRuby.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerRuby, Lexer
+Lexer, QsciLexerRuby
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerSQL.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerSQL.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerSQL, Lexer
+Lexer, QsciLexerSQL
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerTCL.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerTCL.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerTCL, Lexer
+Lexer, QsciLexerTCL
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerTeX.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerTeX.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerTeX, Lexer
+Lexer, QsciLexerTeX
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerVHDL.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerVHDL.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerVHDL, Lexer
+Lexer, QsciLexerVHDL
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerXML.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerXML.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerXML, Lexer
+Lexer, QsciLexerXML
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.QScintilla.Lexers.LexerYAML.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.QScintilla.Lexers.LexerYAML.html	Tue Apr 15 22:41:08 2014 +0200
@@ -45,7 +45,7 @@
     Subclass to implement some additional lexer dependant methods.
 </p>
 <h3>Derived from</h3>
-QsciLexerYAML, Lexer
+Lexer, QsciLexerYAML
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric5.UI.Browser.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.UI.Browser.html	Tue Apr 15 22:41:08 2014 +0200
@@ -344,8 +344,8 @@
 <dd>
 a dictionary containing the counts of items belonging
             to the individual filter classes. The keys of the dictionary
-            are the unicode representation of the classes given in the
-            filter (i.e. unicode(filterClass)). The dictionary contains
+            are the string representation of the classes given in the
+            filter (i.e. str(filterClass)). The dictionary contains
             an additional entry with key "sum", that stores the sum of
             all selected entries fulfilling the filter criteria.
 </dd>
--- a/Documentation/Source/eric5.UI.Previewer.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.UI.Previewer.html	Tue Apr 15 22:41:08 2014 +0200
@@ -30,14 +30,8 @@
 <h3>Classes</h3>
 <table>
 <tr>
-<td><a href="#PreviewProcessingThread">PreviewProcessingThread</a></td>
-<td>Class implementing a thread to process some text into HTML usable by the previewer view.</td>
-</tr><tr>
 <td><a href="#Previewer">Previewer</a></td>
-<td>Class implementing a previewer widget for HTML, Markdown and ReST files.</td>
-</tr><tr>
-<td><a href="#_StrikeThroughExtension">_StrikeThroughExtension</a></td>
-<td>Class is placed here, because it depends on imported markdown, and markdown import is lazy.</td>
+<td>Class implementing a previewer widget containing a stack of specialized previewers.</td>
 </tr>
 </table>
 <h3>Functions</h3>
@@ -45,189 +39,14 @@
 <tr><td>None</td></tr>
 </table>
 <hr /><hr />
-<a NAME="PreviewProcessingThread" ID="PreviewProcessingThread"></a>
-<h2>PreviewProcessingThread</h2>
-<p>
-    Class implementing a thread to process some text into HTML usable by the
-    previewer view.
-</p><h3>Signals</h3>
-<dl>
-<dt>htmlReady(str,str)</dt>
-<dd>
-emitted with the file name and processed HTML
-        to signal the availability of the processed HTML
-</dd>
-</dl>
-<h3>Derived from</h3>
-QThread
-<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="#PreviewProcessingThread.__init__">PreviewProcessingThread</a></td>
-<td>Constructor</td>
-</tr><tr>
-<td><a href="#PreviewProcessingThread.__convertMarkdown">__convertMarkdown</a></td>
-<td>Private method to convert Markdown text into HTML.</td>
-</tr><tr>
-<td><a href="#PreviewProcessingThread.__convertReST">__convertReST</a></td>
-<td>Private method to convert ReST text into HTML.</td>
-</tr><tr>
-<td><a href="#PreviewProcessingThread.__getHtml">__getHtml</a></td>
-<td>Private method to process the given text depending upon the given language.</td>
-</tr><tr>
-<td><a href="#PreviewProcessingThread.__processSSI">__processSSI</a></td>
-<td>Private method to process the given text for SSI statements.</td>
-</tr><tr>
-<td><a href="#PreviewProcessingThread.process">process</a></td>
-<td>Convert the given text to HTML.</td>
-</tr><tr>
-<td><a href="#PreviewProcessingThread.run">run</a></td>
-<td>Thread function to convert the stored data.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-<a NAME="PreviewProcessingThread.__init__" ID="PreviewProcessingThread.__init__"></a>
-<h4>PreviewProcessingThread (Constructor)</h4>
-<b>PreviewProcessingThread</b>(<i>parent=None</i>)
-<p>
-        Constructor
-</p><dl>
-<dt><i>parent</i></dt>
-<dd>
-reference to the parent object (QObject)
-</dd>
-</dl><a NAME="PreviewProcessingThread.__convertMarkdown" ID="PreviewProcessingThread.__convertMarkdown"></a>
-<h4>PreviewProcessingThread.__convertMarkdown</h4>
-<b>__convertMarkdown</b>(<i>text</i>)
-<p>
-        Private method to convert Markdown text into HTML.
-</p><dl>
-<dt><i>text</i></dt>
-<dd>
-text to be processed (string)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-processed HTML (string)
-</dd>
-</dl><a NAME="PreviewProcessingThread.__convertReST" ID="PreviewProcessingThread.__convertReST"></a>
-<h4>PreviewProcessingThread.__convertReST</h4>
-<b>__convertReST</b>(<i>text</i>)
-<p>
-        Private method to convert ReST text into HTML.
-</p><dl>
-<dt><i>text</i></dt>
-<dd>
-text to be processed (string)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-processed HTML (string)
-</dd>
-</dl><a NAME="PreviewProcessingThread.__getHtml" ID="PreviewProcessingThread.__getHtml"></a>
-<h4>PreviewProcessingThread.__getHtml</h4>
-<b>__getHtml</b>(<i>language, text, ssiEnabled, filePath, rootPath</i>)
-<p>
-        Private method to process the given text depending upon the given
-        language.
-</p><dl>
-<dt><i>language</i></dt>
-<dd>
-language of the text (string)
-</dd><dt><i>text</i></dt>
-<dd>
-to be processed (string)
-</dd><dt><i>ssiEnabled</i></dt>
-<dd>
-flag indicating to do some (limited) SSI processing
-            (boolean)
-</dd><dt><i>filePath</i></dt>
-<dd>
-file path of the text (string)
-</dd><dt><i>rootPath</i></dt>
-<dd>
-root path to be used for SSI processing (str)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-processed HTML text (string)
-</dd>
-</dl><a NAME="PreviewProcessingThread.__processSSI" ID="PreviewProcessingThread.__processSSI"></a>
-<h4>PreviewProcessingThread.__processSSI</h4>
-<b>__processSSI</b>(<i>txt, filename, root</i>)
-<p>
-        Private method to process the given text for SSI statements.
-</p><p>
-        Note: Only a limited subset of SSI statements are supported.
-</p><dl>
-<dt><i>txt</i></dt>
-<dd>
-text to be processed (string)
-</dd><dt><i>filename</i></dt>
-<dd>
-name of the file associated with the given text
-            (string)
-</dd><dt><i>root</i></dt>
-<dd>
-directory of the document root (string)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-processed HTML (string)
-</dd>
-</dl><a NAME="PreviewProcessingThread.process" ID="PreviewProcessingThread.process"></a>
-<h4>PreviewProcessingThread.process</h4>
-<b>process</b>(<i>filePath, language, text, ssiEnabled, rootPath</i>)
-<p>
-        Convert the given text to HTML.
-</p><dl>
-<dt><i>filePath</i></dt>
-<dd>
-file path of the text (string)
-</dd><dt><i>language</i></dt>
-<dd>
-language of the text (string)
-</dd><dt><i>text</i></dt>
-<dd>
-text to be processed (string)
-</dd><dt><i>ssiEnabled</i></dt>
-<dd>
-flag indicating to do some (limited) SSI processing
-            (boolean)
-</dd><dt><i>rootPath</i></dt>
-<dd>
-root path to be used for SSI processing (str)
-</dd>
-</dl><a NAME="PreviewProcessingThread.run" ID="PreviewProcessingThread.run"></a>
-<h4>PreviewProcessingThread.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Thread function to convert the stored data.
-</p>
-<div align="right"><a href="#top">Up</a></div>
-<hr /><hr />
 <a NAME="Previewer" ID="Previewer"></a>
 <h2>Previewer</h2>
 <p>
-    Class implementing a previewer widget for HTML, Markdown and ReST files.
+    Class implementing a previewer widget containing a stack of
+    specialized previewers.
 </p>
 <h3>Derived from</h3>
-QWidget, Ui_Previewer
+QStackedWidget
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
@@ -257,39 +76,15 @@
 <td><a href="#Previewer.__previewStateChanged">__previewStateChanged</a></td>
 <td>Public slot to toggle the display of the preview.</td>
 </tr><tr>
-<td><a href="#Previewer.__restoreScrollBarPositions">__restoreScrollBarPositions</a></td>
-<td>Private method to restore scroll bar positions for a previewed editor.</td>
-</tr><tr>
-<td><a href="#Previewer.__runProcessingThread">__runProcessingThread</a></td>
+<td><a href="#Previewer.__processEditor">__processEditor</a></td>
 <td>Private slot to schedule the processing of the current editor's text.</td>
 </tr><tr>
-<td><a href="#Previewer.__saveScrollBarPositions">__saveScrollBarPositions</a></td>
-<td>Private method to save scroll bar positions for a previewed editor.</td>
-</tr><tr>
-<td><a href="#Previewer.__setHtml">__setHtml</a></td>
-<td>Private method to set the HTML to the view and restore the scroll bars positions.</td>
-</tr><tr>
-<td><a href="#Previewer.__setJavaScriptEnabled">__setJavaScriptEnabled</a></td>
-<td>Private method to enable/disable JavaScript.</td>
-</tr><tr>
 <td><a href="#Previewer.__splitterMoved">__splitterMoved</a></td>
 <td>Private slot to handle the movement of the embedding splitter's handle.</td>
 </tr><tr>
 <td><a href="#Previewer.hide">hide</a></td>
 <td>Public method to hide the preview widget.</td>
 </tr><tr>
-<td><a href="#Previewer.on_jsCheckBox_clicked">on_jsCheckBox_clicked</a></td>
-<td>Private slot to enable/disable JavaScript.</td>
-</tr><tr>
-<td><a href="#Previewer.on_previewView_linkClicked">on_previewView_linkClicked</a></td>
-<td>Private slot handling the clicking of a link.</td>
-</tr><tr>
-<td><a href="#Previewer.on_previewView_titleChanged">on_previewView_titleChanged</a></td>
-<td>Private slot to handle a change of the title.</td>
-</tr><tr>
-<td><a href="#Previewer.on_ssiCheckBox_clicked">on_ssiCheckBox_clicked</a></td>
-<td>Private slot to enable/disable SSI.</td>
-</tr><tr>
 <td><a href="#Previewer.show">show</a></td>
 <td>Public method to show the preview widget.</td>
 </tr><tr>
@@ -373,46 +168,12 @@
 <dd>
 flag indicating to show a preview (boolean)
 </dd>
-</dl><a NAME="Previewer.__restoreScrollBarPositions" ID="Previewer.__restoreScrollBarPositions"></a>
-<h4>Previewer.__restoreScrollBarPositions</h4>
-<b>__restoreScrollBarPositions</b>(<i></i>)
-<p>
-        Private method to restore scroll bar positions for a previewed editor.
-</p><a NAME="Previewer.__runProcessingThread" ID="Previewer.__runProcessingThread"></a>
-<h4>Previewer.__runProcessingThread</h4>
-<b>__runProcessingThread</b>(<i></i>)
+</dl><a NAME="Previewer.__processEditor" ID="Previewer.__processEditor"></a>
+<h4>Previewer.__processEditor</h4>
+<b>__processEditor</b>(<i></i>)
 <p>
         Private slot to schedule the processing of the current editor's text.
-</p><a NAME="Previewer.__saveScrollBarPositions" ID="Previewer.__saveScrollBarPositions"></a>
-<h4>Previewer.__saveScrollBarPositions</h4>
-<b>__saveScrollBarPositions</b>(<i></i>)
-<p>
-        Private method to save scroll bar positions for a previewed editor.
-</p><a NAME="Previewer.__setHtml" ID="Previewer.__setHtml"></a>
-<h4>Previewer.__setHtml</h4>
-<b>__setHtml</b>(<i>filePath, html</i>)
-<p>
-        Private method to set the HTML to the view and restore the scroll bars
-        positions.
-</p><dl>
-<dt><i>filePath</i></dt>
-<dd>
-file path of the previewed editor (string)
-</dd><dt><i>html</i></dt>
-<dd>
-processed HTML text ready to be shown (string)
-</dd>
-</dl><a NAME="Previewer.__setJavaScriptEnabled" ID="Previewer.__setJavaScriptEnabled"></a>
-<h4>Previewer.__setJavaScriptEnabled</h4>
-<b>__setJavaScriptEnabled</b>(<i>enable</i>)
-<p>
-        Private method to enable/disable JavaScript.
-</p><dl>
-<dt><i>enable</i></dt>
-<dd>
-flag indicating the enable state (boolean)
-</dd>
-</dl><a NAME="Previewer.__splitterMoved" ID="Previewer.__splitterMoved"></a>
+</p><a NAME="Previewer.__splitterMoved" ID="Previewer.__splitterMoved"></a>
 <h4>Previewer.__splitterMoved</h4>
 <b>__splitterMoved</b>(<i></i>)
 <p>
@@ -422,47 +183,7 @@
 <b>hide</b>(<i></i>)
 <p>
         Public method to hide the preview widget.
-</p><a NAME="Previewer.on_jsCheckBox_clicked" ID="Previewer.on_jsCheckBox_clicked"></a>
-<h4>Previewer.on_jsCheckBox_clicked</h4>
-<b>on_jsCheckBox_clicked</b>(<i>checked</i>)
-<p>
-        Private slot to enable/disable JavaScript.
-</p><dl>
-<dt><i>checked</i></dt>
-<dd>
-state of the checkbox (boolean)
-</dd>
-</dl><a NAME="Previewer.on_previewView_linkClicked" ID="Previewer.on_previewView_linkClicked"></a>
-<h4>Previewer.on_previewView_linkClicked</h4>
-<b>on_previewView_linkClicked</b>(<i>url</i>)
-<p>
-        Private slot handling the clicking of a link.
-</p><dl>
-<dt><i>url</i></dt>
-<dd>
-url of the clicked link (QUrl)
-</dd>
-</dl><a NAME="Previewer.on_previewView_titleChanged" ID="Previewer.on_previewView_titleChanged"></a>
-<h4>Previewer.on_previewView_titleChanged</h4>
-<b>on_previewView_titleChanged</b>(<i>title</i>)
-<p>
-        Private slot to handle a change of the title.
-</p><dl>
-<dt><i>title</i></dt>
-<dd>
-new title (string)
-</dd>
-</dl><a NAME="Previewer.on_ssiCheckBox_clicked" ID="Previewer.on_ssiCheckBox_clicked"></a>
-<h4>Previewer.on_ssiCheckBox_clicked</h4>
-<b>on_ssiCheckBox_clicked</b>(<i>checked</i>)
-<p>
-        Private slot to enable/disable SSI.
-</p><dl>
-<dt><i>checked</i></dt>
-<dd>
-state of the checkbox (boolean)
-</dd>
-</dl><a NAME="Previewer.show" ID="Previewer.show"></a>
+</p><a NAME="Previewer.show" ID="Previewer.show"></a>
 <h4>Previewer.show</h4>
 <b>show</b>(<i></i>)
 <p>
@@ -474,42 +195,5 @@
         Public method to perform shutdown actions.
 </p>
 <div align="right"><a href="#top">Up</a></div>
-<hr /><hr />
-<a NAME="_StrikeThroughExtension" ID="_StrikeThroughExtension"></a>
-<h2>_StrikeThroughExtension</h2>
-<p>
-                Class is placed here, because it depends on imported markdown,
-                and markdown import is lazy.
-</p><p>
-                (see http://achinghead.com/
-                python-markdown-adding-insert-delete.html this page for
-                details)
-</p>
-<h3>Derived from</h3>
-markdown.Extension
-<h3>Class Attributes</h3>
-<table>
-<tr><td>DEL_RE</td></tr>
-</table>
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#_StrikeThroughExtension.extendMarkdown">extendMarkdown</a></td>
-<td></td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-<a NAME="_StrikeThroughExtension.extendMarkdown" ID="_StrikeThroughExtension.extendMarkdown"></a>
-<h4>_StrikeThroughExtension.extendMarkdown</h4>
-<b>extendMarkdown</b>(<i>md, md_globals</i>)
-
-<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/Documentation/Source/eric5.UI.Previewers.PreviewerHTML.html	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,419 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric5.UI.Previewers.PreviewerHTML</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>eric5.UI.Previewers.PreviewerHTML</h1>
+<p>
+Module implementing a previewer widget for HTML, Markdown and ReST files.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#PreviewProcessingThread">PreviewProcessingThread</a></td>
+<td>Class implementing a thread to process some text into HTML usable by the previewer view.</td>
+</tr><tr>
+<td><a href="#PreviewerHTML">PreviewerHTML</a></td>
+<td>Class implementing a previewer widget for HTML, Markdown and ReST files.</td>
+</tr><tr>
+<td><a href="#_StrikeThroughExtension">_StrikeThroughExtension</a></td>
+<td>Class is placed here, because it depends on imported markdown, and markdown import is lazy.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="PreviewProcessingThread" ID="PreviewProcessingThread"></a>
+<h2>PreviewProcessingThread</h2>
+<p>
+    Class implementing a thread to process some text into HTML usable by the
+    previewer view.
+</p><h3>Signals</h3>
+<dl>
+<dt>htmlReady(str,str)</dt>
+<dd>
+emitted with the file name and processed HTML
+        to signal the availability of the processed HTML
+</dd>
+</dl>
+<h3>Derived from</h3>
+QThread
+<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="#PreviewProcessingThread.__init__">PreviewProcessingThread</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#PreviewProcessingThread.__convertMarkdown">__convertMarkdown</a></td>
+<td>Private method to convert Markdown text into HTML.</td>
+</tr><tr>
+<td><a href="#PreviewProcessingThread.__convertReST">__convertReST</a></td>
+<td>Private method to convert ReST text into HTML.</td>
+</tr><tr>
+<td><a href="#PreviewProcessingThread.__getHtml">__getHtml</a></td>
+<td>Private method to process the given text depending upon the given language.</td>
+</tr><tr>
+<td><a href="#PreviewProcessingThread.__processSSI">__processSSI</a></td>
+<td>Private method to process the given text for SSI statements.</td>
+</tr><tr>
+<td><a href="#PreviewProcessingThread.process">process</a></td>
+<td>Convert the given text to HTML.</td>
+</tr><tr>
+<td><a href="#PreviewProcessingThread.run">run</a></td>
+<td>Thread function to convert the stored data.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="PreviewProcessingThread.__init__" ID="PreviewProcessingThread.__init__"></a>
+<h4>PreviewProcessingThread (Constructor)</h4>
+<b>PreviewProcessingThread</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+reference to the parent object (QObject)
+</dd>
+</dl><a NAME="PreviewProcessingThread.__convertMarkdown" ID="PreviewProcessingThread.__convertMarkdown"></a>
+<h4>PreviewProcessingThread.__convertMarkdown</h4>
+<b>__convertMarkdown</b>(<i>text</i>)
+<p>
+        Private method to convert Markdown text into HTML.
+</p><dl>
+<dt><i>text</i></dt>
+<dd>
+text to be processed (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+processed HTML (string)
+</dd>
+</dl><a NAME="PreviewProcessingThread.__convertReST" ID="PreviewProcessingThread.__convertReST"></a>
+<h4>PreviewProcessingThread.__convertReST</h4>
+<b>__convertReST</b>(<i>text</i>)
+<p>
+        Private method to convert ReST text into HTML.
+</p><dl>
+<dt><i>text</i></dt>
+<dd>
+text to be processed (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+processed HTML (string)
+</dd>
+</dl><a NAME="PreviewProcessingThread.__getHtml" ID="PreviewProcessingThread.__getHtml"></a>
+<h4>PreviewProcessingThread.__getHtml</h4>
+<b>__getHtml</b>(<i>language, text, ssiEnabled, filePath, rootPath</i>)
+<p>
+        Private method to process the given text depending upon the given
+        language.
+</p><dl>
+<dt><i>language</i></dt>
+<dd>
+language of the text (string)
+</dd><dt><i>text</i></dt>
+<dd>
+to be processed (string)
+</dd><dt><i>ssiEnabled</i></dt>
+<dd>
+flag indicating to do some (limited) SSI processing
+            (boolean)
+</dd><dt><i>filePath</i></dt>
+<dd>
+file path of the text (string)
+</dd><dt><i>rootPath</i></dt>
+<dd>
+root path to be used for SSI processing (str)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+processed HTML text (string)
+</dd>
+</dl><a NAME="PreviewProcessingThread.__processSSI" ID="PreviewProcessingThread.__processSSI"></a>
+<h4>PreviewProcessingThread.__processSSI</h4>
+<b>__processSSI</b>(<i>txt, filename, root</i>)
+<p>
+        Private method to process the given text for SSI statements.
+</p><p>
+        Note: Only a limited subset of SSI statements are supported.
+</p><dl>
+<dt><i>txt</i></dt>
+<dd>
+text to be processed (string)
+</dd><dt><i>filename</i></dt>
+<dd>
+name of the file associated with the given text
+            (string)
+</dd><dt><i>root</i></dt>
+<dd>
+directory of the document root (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+processed HTML (string)
+</dd>
+</dl><a NAME="PreviewProcessingThread.process" ID="PreviewProcessingThread.process"></a>
+<h4>PreviewProcessingThread.process</h4>
+<b>process</b>(<i>filePath, language, text, ssiEnabled, rootPath</i>)
+<p>
+        Convert the given text to HTML.
+</p><dl>
+<dt><i>filePath</i></dt>
+<dd>
+file path of the text (string)
+</dd><dt><i>language</i></dt>
+<dd>
+language of the text (string)
+</dd><dt><i>text</i></dt>
+<dd>
+text to be processed (string)
+</dd><dt><i>ssiEnabled</i></dt>
+<dd>
+flag indicating to do some (limited) SSI processing
+            (boolean)
+</dd><dt><i>rootPath</i></dt>
+<dd>
+root path to be used for SSI processing (str)
+</dd>
+</dl><a NAME="PreviewProcessingThread.run" ID="PreviewProcessingThread.run"></a>
+<h4>PreviewProcessingThread.run</h4>
+<b>run</b>(<i></i>)
+<p>
+        Thread function to convert the stored data.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="PreviewerHTML" ID="PreviewerHTML"></a>
+<h2>PreviewerHTML</h2>
+<p>
+    Class implementing a previewer widget for HTML, Markdown and ReST files.
+</p>
+<h3>Derived from</h3>
+QWidget, Ui_PreviewerHTML
+<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="#PreviewerHTML.__init__">PreviewerHTML</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#PreviewerHTML.__restoreScrollBarPositions">__restoreScrollBarPositions</a></td>
+<td>Private method to restore scroll bar positions for a previewed editor.</td>
+</tr><tr>
+<td><a href="#PreviewerHTML.__saveScrollBarPositions">__saveScrollBarPositions</a></td>
+<td>Private method to save scroll bar positions for a previewed editor.</td>
+</tr><tr>
+<td><a href="#PreviewerHTML.__setHtml">__setHtml</a></td>
+<td>Private method to set the HTML to the view and restore the scroll bars positions.</td>
+</tr><tr>
+<td><a href="#PreviewerHTML.__setJavaScriptEnabled">__setJavaScriptEnabled</a></td>
+<td>Private method to enable/disable JavaScript.</td>
+</tr><tr>
+<td><a href="#PreviewerHTML.on_jsCheckBox_clicked">on_jsCheckBox_clicked</a></td>
+<td>Private slot to enable/disable JavaScript.</td>
+</tr><tr>
+<td><a href="#PreviewerHTML.on_previewView_linkClicked">on_previewView_linkClicked</a></td>
+<td>Private slot handling the clicking of a link.</td>
+</tr><tr>
+<td><a href="#PreviewerHTML.on_previewView_titleChanged">on_previewView_titleChanged</a></td>
+<td>Private slot to handle a change of the title.</td>
+</tr><tr>
+<td><a href="#PreviewerHTML.on_ssiCheckBox_clicked">on_ssiCheckBox_clicked</a></td>
+<td>Private slot to enable/disable SSI.</td>
+</tr><tr>
+<td><a href="#PreviewerHTML.processEditor">processEditor</a></td>
+<td>Private slot to process an editor's text.</td>
+</tr><tr>
+<td><a href="#PreviewerHTML.shutdown">shutdown</a></td>
+<td>Public method to perform shutdown actions.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="PreviewerHTML.__init__" ID="PreviewerHTML.__init__"></a>
+<h4>PreviewerHTML (Constructor)</h4>
+<b>PreviewerHTML</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+reference to the parent widget (QWidget)
+</dd>
+</dl><a NAME="PreviewerHTML.__restoreScrollBarPositions" ID="PreviewerHTML.__restoreScrollBarPositions"></a>
+<h4>PreviewerHTML.__restoreScrollBarPositions</h4>
+<b>__restoreScrollBarPositions</b>(<i></i>)
+<p>
+        Private method to restore scroll bar positions for a previewed editor.
+</p><a NAME="PreviewerHTML.__saveScrollBarPositions" ID="PreviewerHTML.__saveScrollBarPositions"></a>
+<h4>PreviewerHTML.__saveScrollBarPositions</h4>
+<b>__saveScrollBarPositions</b>(<i></i>)
+<p>
+        Private method to save scroll bar positions for a previewed editor.
+</p><a NAME="PreviewerHTML.__setHtml" ID="PreviewerHTML.__setHtml"></a>
+<h4>PreviewerHTML.__setHtml</h4>
+<b>__setHtml</b>(<i>filePath, html</i>)
+<p>
+        Private method to set the HTML to the view and restore the scroll bars
+        positions.
+</p><dl>
+<dt><i>filePath</i></dt>
+<dd>
+file path of the previewed editor (string)
+</dd><dt><i>html</i></dt>
+<dd>
+processed HTML text ready to be shown (string)
+</dd>
+</dl><a NAME="PreviewerHTML.__setJavaScriptEnabled" ID="PreviewerHTML.__setJavaScriptEnabled"></a>
+<h4>PreviewerHTML.__setJavaScriptEnabled</h4>
+<b>__setJavaScriptEnabled</b>(<i>enable</i>)
+<p>
+        Private method to enable/disable JavaScript.
+</p><dl>
+<dt><i>enable</i></dt>
+<dd>
+flag indicating the enable state (boolean)
+</dd>
+</dl><a NAME="PreviewerHTML.on_jsCheckBox_clicked" ID="PreviewerHTML.on_jsCheckBox_clicked"></a>
+<h4>PreviewerHTML.on_jsCheckBox_clicked</h4>
+<b>on_jsCheckBox_clicked</b>(<i>checked</i>)
+<p>
+        Private slot to enable/disable JavaScript.
+</p><dl>
+<dt><i>checked</i></dt>
+<dd>
+state of the checkbox (boolean)
+</dd>
+</dl><a NAME="PreviewerHTML.on_previewView_linkClicked" ID="PreviewerHTML.on_previewView_linkClicked"></a>
+<h4>PreviewerHTML.on_previewView_linkClicked</h4>
+<b>on_previewView_linkClicked</b>(<i>url</i>)
+<p>
+        Private slot handling the clicking of a link.
+</p><dl>
+<dt><i>url</i></dt>
+<dd>
+url of the clicked link (QUrl)
+</dd>
+</dl><a NAME="PreviewerHTML.on_previewView_titleChanged" ID="PreviewerHTML.on_previewView_titleChanged"></a>
+<h4>PreviewerHTML.on_previewView_titleChanged</h4>
+<b>on_previewView_titleChanged</b>(<i>title</i>)
+<p>
+        Private slot to handle a change of the title.
+</p><dl>
+<dt><i>title</i></dt>
+<dd>
+new title (string)
+</dd>
+</dl><a NAME="PreviewerHTML.on_ssiCheckBox_clicked" ID="PreviewerHTML.on_ssiCheckBox_clicked"></a>
+<h4>PreviewerHTML.on_ssiCheckBox_clicked</h4>
+<b>on_ssiCheckBox_clicked</b>(<i>checked</i>)
+<p>
+        Private slot to enable/disable SSI.
+</p><dl>
+<dt><i>checked</i></dt>
+<dd>
+state of the checkbox (boolean)
+</dd>
+</dl><a NAME="PreviewerHTML.processEditor" ID="PreviewerHTML.processEditor"></a>
+<h4>PreviewerHTML.processEditor</h4>
+<b>processEditor</b>(<i>editor=None</i>)
+<p>
+        Private slot to process an editor's text.
+</p><dl>
+<dt><i>editor</i></dt>
+<dd>
+editor to be processed (Editor)
+</dd>
+</dl><a NAME="PreviewerHTML.shutdown" ID="PreviewerHTML.shutdown"></a>
+<h4>PreviewerHTML.shutdown</h4>
+<b>shutdown</b>(<i></i>)
+<p>
+        Public method to perform shutdown actions.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="_StrikeThroughExtension" ID="_StrikeThroughExtension"></a>
+<h2>_StrikeThroughExtension</h2>
+<p>
+                Class is placed here, because it depends on imported markdown,
+                and markdown import is lazy.
+</p><p>
+                (see http://achinghead.com/
+                python-markdown-adding-insert-delete.html this page for
+                details)
+</p>
+<h3>Derived from</h3>
+markdown.Extension
+<h3>Class Attributes</h3>
+<table>
+<tr><td>DEL_RE</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#_StrikeThroughExtension.extendMarkdown">extendMarkdown</a></td>
+<td></td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="_StrikeThroughExtension.extendMarkdown" ID="_StrikeThroughExtension.extendMarkdown"></a>
+<h4>_StrikeThroughExtension.extendMarkdown</h4>
+<b>extendMarkdown</b>(<i>md, md_globals</i>)
+
+<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/Documentation/Source/eric5.UI.Previewers.PreviewerQSS.html	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric5.UI.Previewers.PreviewerQSS</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>eric5.UI.Previewers.PreviewerQSS</h1>
+<p>
+Module implementing a previewer widget for Qt style sheet files.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#PreviewerQSS">PreviewerQSS</a></td>
+<td>Class implementing a previewer widget for Qt style sheet files.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="PreviewerQSS" ID="PreviewerQSS"></a>
+<h2>PreviewerQSS</h2>
+<p>
+    Class implementing a previewer widget for Qt style sheet files.
+</p>
+<h3>Derived from</h3>
+QWidget, Ui_PreviewerQSS
+<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="#PreviewerQSS.__init__">PreviewerQSS</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#PreviewerQSS.processEditor">processEditor</a></td>
+<td>Private slot to process an editor's text.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="PreviewerQSS.__init__" ID="PreviewerQSS.__init__"></a>
+<h4>PreviewerQSS (Constructor)</h4>
+<b>PreviewerQSS</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+reference to the parent widget (QWidget)
+</dd>
+</dl><a NAME="PreviewerQSS.processEditor" ID="PreviewerQSS.processEditor"></a>
+<h4>PreviewerQSS.processEditor</h4>
+<b>processEditor</b>(<i>editor=None</i>)
+<p>
+        Private slot to process an editor's text.
+</p><dl>
+<dt><i>editor</i></dt>
+<dd>
+editor to be processed (Editor)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric5.Utilities.BackgroundService.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.Utilities.BackgroundService.html	Tue Apr 15 22:41:08 2014 +0200
@@ -73,9 +73,6 @@
 <td><a href="#BackgroundService.__startExternalClient">__startExternalClient</a></td>
 <td>Private method to start the background client as external process.</td>
 </tr><tr>
-<td><a href="#BackgroundService.__startInternalClient">__startInternalClient</a></td>
-<td>Private method to start the background client as internal thread.</td>
-</tr><tr>
 <td><a href="#BackgroundService.enqueueRequest">enqueueRequest</a></td>
 <td>Implement a queued processing of incomming events.</td>
 </tr><tr>
@@ -157,21 +154,6 @@
 <dd>
 the process object (QProcess or None)
 </dd>
-</dl><a NAME="BackgroundService.__startInternalClient" ID="BackgroundService.__startInternalClient"></a>
-<h4>BackgroundService.__startInternalClient</h4>
-<b>__startInternalClient</b>(<i>port</i>)
-<p>
-        Private method to start the background client as internal thread.
-</p><dl>
-<dt><i>port</i></dt>
-<dd>
-socket port to which the interpreter should connect (int)
-</dd>
-</dl><dl>
-<dt>Returns:</dt>
-<dd>
-the thread object (Thread) or None
-</dd>
 </dl><a NAME="BackgroundService.enqueueRequest" ID="BackgroundService.enqueueRequest"></a>
 <h4>BackgroundService.enqueueRequest</h4>
 <b>enqueueRequest</b>(<i>fx, lang, fn, data</i>)
--- a/Documentation/Source/eric5.install.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/eric5.install.html	Tue Apr 15 22:41:08 2014 +0200
@@ -25,7 +25,7 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>BlackLists</td></tr><tr><td>PlatformsBlackLists</td></tr><tr><td>apisDir</td></tr><tr><td>cfg</td></tr><tr><td>configLength</td></tr><tr><td>configName</td></tr><tr><td>currDir</td></tr><tr><td>defaultMacAppBundleName</td></tr><tr><td>distDir</td></tr><tr><td>doCleanup</td></tr><tr><td>doCompile</td></tr><tr><td>macAppBundleName</td></tr><tr><td>macPythonExe</td></tr><tr><td>modDir</td></tr><tr><td>platBinDir</td></tr><tr><td>progLanguages</td></tr><tr><td>progName</td></tr><tr><td>pyModDir</td></tr><tr><td>sourceDir</td></tr>
+<tr><td>BlackLists</td></tr><tr><td>PlatformsBlackLists</td></tr><tr><td>apisDir</td></tr><tr><td>cfg</td></tr><tr><td>configLength</td></tr><tr><td>configName</td></tr><tr><td>currDir</td></tr><tr><td>defaultMacAppBundleName</td></tr><tr><td>distDir</td></tr><tr><td>doCleanup</td></tr><tr><td>doCompile</td></tr><tr><td>macAppBundleName</td></tr><tr><td>macAppBundlePath</td></tr><tr><td>macPythonExe</td></tr><tr><td>modDir</td></tr><tr><td>platBinDir</td></tr><tr><td>progLanguages</td></tr><tr><td>progName</td></tr><tr><td>pyModDir</td></tr><tr><td>sourceDir</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
--- a/Documentation/Source/index-eric5.QScintilla.Lexers.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/index-eric5.QScintilla.Lexers.html	Tue Apr 15 22:41:08 2014 +0200
@@ -109,6 +109,9 @@
 <td><a href="eric5.QScintilla.Lexers.LexerPython.html">LexerPython</a></td>
 <td>Module implementing a Python lexer with some additional methods.</td>
 </tr><tr>
+<td><a href="eric5.QScintilla.Lexers.LexerQSS.html">LexerQSS</a></td>
+<td>Module implementing a QSS lexer with some additional methods.</td>
+</tr><tr>
 <td><a href="eric5.QScintilla.Lexers.LexerRuby.html">LexerRuby</a></td>
 <td>Module implementing a Ruby lexer with some additional methods.</td>
 </tr><tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/index-eric5.UI.Previewers.html	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric5.UI.Previewers</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>eric5.UI.Previewers</h1>
+<p>
+Package containing the various previewer modules.
+</p>
+
+
+<h3>Modules</h3>
+<table>
+<tr>
+<td><a href="eric5.UI.Previewers.PreviewerHTML.html">PreviewerHTML</a></td>
+<td>Module implementing a previewer widget for HTML, Markdown and ReST files.</td>
+</tr><tr>
+<td><a href="eric5.UI.Previewers.PreviewerQSS.html">PreviewerQSS</a></td>
+<td>Module implementing a previewer widget for Qt style sheet files.</td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/index-eric5.UI.html	Sun Apr 13 15:45:57 2014 +0200
+++ b/Documentation/Source/index-eric5.UI.html	Tue Apr 15 22:41:08 2014 +0200
@@ -27,6 +27,13 @@
 dialogs as well as dialogs not fitting the other more specific categories.
 </p>
 
+<h3>Packages</h3>
+<table>
+<tr>
+<td><a href="index-eric5.UI.Previewers.html">Previewers</a></td>
+<td>Package containing the various previewer modules.</td>
+</tr>
+</table>
 
 <h3>Modules</h3>
 <table>
--- a/E5XML/ProjectWriter.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/E5XML/ProjectWriter.py	Tue Apr 15 22:41:08 2014 +0200
@@ -51,10 +51,10 @@
         if Preferences.getProject("XMLTimestamp"):
             self.writeComment(
                 " Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S')))
-            self.writeComment(" Copyright (C) {0} {1}, {2} ".format(
-                time.strftime('%Y'),
-                self.pdata["AUTHOR"][0],
-                self.pdata["EMAIL"][0]))
+        self.writeComment(" Copyright (C) {0} {1}, {2} ".format(
+            time.strftime('%Y'),
+            self.pdata["AUTHOR"][0],
+            self.pdata["EMAIL"][0]))
         
         # add the main tag
         self.writeStartElement("Project")
--- a/Graphics/ApplicationDiagramBuilder.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Graphics/ApplicationDiagramBuilder.py	Tue Apr 15 22:41:08 2014 +0200
@@ -66,6 +66,7 @@
         progress = E5ProgressDialog(
             self.tr("Parsing modules..."),
             None, 0, tot, self.tr("%v/%m Modules"), self.parent())
+        progress.setWindowTitle(self.tr("Application Diagram"))
         try:
             prog = 0
             progress.show()
--- a/Graphics/ImportsDiagramBuilder.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Graphics/ImportsDiagramBuilder.py	Tue Apr 15 22:41:08 2014 +0200
@@ -92,6 +92,7 @@
         progress = E5ProgressDialog(
             self.tr("Parsing modules..."),
             None, 0, tot, self.tr("%v/%m Modules"), self.parent())
+        progress.setWindowTitle(self.tr("Imports Diagramm"))
         try:
             prog = 0
             progress.show()
--- a/Graphics/PackageDiagramBuilder.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Graphics/PackageDiagramBuilder.py	Tue Apr 15 22:41:08 2014 +0200
@@ -14,7 +14,7 @@
 try:  # Py3
     from itertools import zip_longest
 except ImportError:
-    from itertools import izip_longest as zip_longest    #__IGNORE_WARNING__
+    from itertools import izip_longest as zip_longest    # __IGNORE_WARNING__
 
 from PyQt4.QtGui import QApplication, QGraphicsTextItem
 
@@ -95,6 +95,7 @@
         progress = E5ProgressDialog(
             self.tr("Parsing modules..."),
             None, 0, tot, self.tr("%v/%m Modules"), self.parent())
+        progress.setWindowTitle(self.tr("Package Diagram"))
         try:
             prog = 0
             progress.show()
@@ -154,6 +155,7 @@
         progress = E5ProgressDialog(
             self.tr("Parsing modules..."),
             None, 0, tot, self.tr("%v/%m Modules"), self.parent())
+        progress.setWindowTitle(self.tr("Package Diagram"))
         try:
             prog = 0
             progress.show()
--- a/Graphics/UMLClassDiagramBuilder.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Graphics/UMLClassDiagramBuilder.py	Tue Apr 15 22:41:08 2014 +0200
@@ -11,7 +11,7 @@
 try:  # Py3
     from itertools import zip_longest
 except ImportError:
-    from itertools import izip_longest as zip_longest    #__IGNORE_WARNING__
+    from itertools import izip_longest as zip_longest    # __IGNORE_WARNING__
 
 from PyQt4.QtGui import QGraphicsTextItem
 
--- a/Helpviewer/Passwords/PasswordManager.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Helpviewer/Passwords/PasswordManager.py	Tue Apr 15 22:41:08 2014 +0200
@@ -610,6 +610,7 @@
             None, 0, len(self.__logins), self.tr("%v/%m Passwords"),
             QApplication.activeModalWidget())
         progress.setMinimumDuration(0)
+        progress.setWindowTitle(self.tr("Passwords"))
         count = 0
         
         for key in self.__logins:
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py	Tue Apr 15 22:41:08 2014 +0200
@@ -96,8 +96,8 @@
         maxLineLength (int), hangClosing (bool), docType (str), errors
         (list of str), eol (str), encoding (str))
     @return tuple of stats (dict) and results (tuple for each found violation
-        of style (tuple of lineno (int), position (int), text (str), fixed
-            (bool), autofixing (bool), fixedMsg (str)))
+        of style (tuple of lineno (int), position (int), text (str), ignored
+            (bool), fixed (bool), autofixing (bool), fixedMsg (str)))
     """
     excludeMessages, includeMessages, \
         repeatMessages, fixCodes, noFixCodes, fixIssues, maxLineLength, \
@@ -166,10 +166,12 @@
                     itm = [lineno, position, text]
                     deferredFixes[id_] = itm
                 else:
-                    itm = [lineno, position, text, res == 1, True, msg]
+                    itm = [lineno, position, text, False, res == 1, True, msg]
             else:
-                itm = [lineno, position, text, False, False, '']
+                itm = [lineno, position, text, False, False, False, '']
             results.append(itm)
+        else:
+            results.append([lineno, position, text, True, False, False, ''])
     
     if fixer:
         deferredResults = fixer.finalize()
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Tue Apr 15 22:41:08 2014 +0200
@@ -37,6 +37,7 @@
     messageRole = Qt.UserRole + 4
     fixableRole = Qt.UserRole + 5
     codeRole = Qt.UserRole + 6
+    ignoredRole = Qt.UserRole + 7
     
     def __init__(self, styleCheckService, parent=None):
         """
@@ -105,7 +106,8 @@
                                   self.resultList.header().sortIndicatorOrder()
                                   )
     
-    def __createResultItem(self, file, line, pos, message, fixed, autofixing):
+    def __createResultItem(self, file, line, pos, message, fixed, autofixing,
+                           ignored):
         """
         Private method to create an entry in the result list.
         
@@ -116,6 +118,7 @@
         @param fixed flag indicating a fixed issue (boolean)
         @param autofixing flag indicating, that we are fixing issues
             automatically (boolean)
+        @param ignored flag indicating an ignored issue (boolean)
         @return reference to the created item (QTreeWidgetItem)
         """
         from .CodeStyleFixer import FixableCodeStyleIssues
@@ -159,6 +162,13 @@
         itm.setData(0, self.messageRole, message)
         itm.setData(0, self.fixableRole, fixable)
         itm.setData(0, self.codeRole, code)
+        itm.setData(0, self.ignoredRole, ignored)
+        
+        if ignored:
+            font = itm.font(0)
+            font.setItalic(True)
+            for col in range(itm.columnCount()):
+                itm.setFont(col, font)
         
         return itm
     
@@ -181,13 +191,14 @@
             itm.setIcon(0, QIcon())
         itm.setData(0, self.fixableRole, False)
     
-    def __updateStatistics(self, statistics, fixer):
+    def __updateStatistics(self, statistics, fixer, ignoredErrors):
         """
         Private method to update the collected statistics.
         
         @param statistics dictionary of statistical data with
             message code as key and message count as value
         @param fixer reference to the code style fixer (CodeStyleFixer)
+        @param ignoredErrors number of ignored errors (integer)
         """
         self.__statistics["_FilesCount"] += 1
         stats = [k for k in statistics.keys() if k[0].isupper()]
@@ -199,6 +210,7 @@
                 else:
                     self.__statistics[key] = statistics[key]
         self.__statistics["_IssuesFixed"] += fixer
+        self.__statistics["_IgnoredErrors"] += ignoredErrors
     
     def __updateFixerStatistics(self, fixer):
         """
@@ -216,6 +228,7 @@
         self.__statistics["_FilesCount"] = 0
         self.__statistics["_FilesIssues"] = 0
         self.__statistics["_IssuesFixed"] = 0
+        self.__statistics["_IgnoredErrors"] = 0
     
     def prepare(self, fileList, project):
         """
@@ -252,6 +265,8 @@
             self.__data["NoFixCodes"] = "E501"
         if "DocstringType" not in self.__data:
             self.__data["DocstringType"] = "pep257"
+        if "ShowIgnored" not in self.__data:
+            self.__data["ShowIgnored"] = False
         
         self.excludeFilesEdit.setText(self.__data["ExcludeFiles"])
         self.excludeMessagesEdit.setText(self.__data["ExcludeMessages"])
@@ -260,6 +275,7 @@
         self.fixIssuesEdit.setText(self.__data["FixCodes"])
         self.noFixIssuesEdit.setText(self.__data["NoFixCodes"])
         self.fixIssuesCheckBox.setChecked(self.__data["FixIssues"])
+        self.ignoredCheckBox.setChecked(self.__data["ShowIgnored"])
         self.lineLengthSpinBox.setValue(self.__data["MaxLineLength"])
         self.hangClosingCheckBox.setChecked(self.__data["HangClosing"])
         self.docTypeComboBox.setCurrentIndex(
@@ -333,6 +349,8 @@
             fixCodes = self.fixIssuesEdit.text()
             noFixCodes = self.noFixIssuesEdit.text()
             fixIssues = self.fixIssuesCheckBox.isChecked() and repeatMessages
+            self.showIgnored = self.ignoredCheckBox.isChecked() and \
+                repeatMessages
             maxLineLength = self.lineLengthSpinBox.value()
             hangClosing = self.hangClosingCheckBox.isChecked()
             docType = self.docTypeComboBox.itemData(
@@ -389,7 +407,7 @@
                 self.__createResultItem(
                     self.filename, 1, 1,
                     self.tr("Error: {0}").format(str(msg))
-                    .rstrip()[1:-1], False, False)
+                        .rstrip()[1:-1], False, False, False)
                 self.progress += 1
                 # Continue with next file
                 self.check()
@@ -414,8 +432,8 @@
         @param codeStyleCheckerStats stats of style and name check (dict)
         @param fixes number of applied fixes (int)
         @param results tuple for each found violation of style (tuple of
-            lineno (int), position (int), text (str), fixed (bool),
-            autofixing (bool))
+            lineno (int), position (int), text (str), ignored (bool),
+            fixed (bool), autofixing (bool))
         """
         # Check if it's the requested file, otherwise ignore signal
         if fn != self.filename:
@@ -424,20 +442,28 @@
         # disable updates of the list for speed
         self.resultList.setUpdatesEnabled(False)
         self.resultList.setSortingEnabled(False)
-
+        
         fixed = None
+        ignoredErrors = 0
         if self.__itms:
-            for itm, (lineno, position, text, fixed, autofixing) in zip(
-                    self.__itms, results):
+            for itm, (lineno, position, text, ignored, fixed, autofixing) in \
+                    zip(self.__itms, results):
                 self.__modifyFixedResultItem(itm, text, fixed)
                 self.__updateFixerStatistics(fixes)
         else:
-            for lineno, position, text, fixed, autofixing in results:
+            for lineno, position, text, ignored, fixed, autofixing in results:
+                if ignored:
+                    ignoredErrors += 1
+                    if self.showIgnored:
+                        text = self.tr("{0} (ignored)").format(text)
+                    else:
+                        continue
                 self.noResults = False
                 self.__createResultItem(
-                    fn, lineno, position, text, fixed, autofixing)
+                    fn, lineno, position, text, fixed, autofixing, ignored)
 
-            self.__updateStatistics(codeStyleCheckerStats, fixes)
+            self.__updateStatistics(
+                codeStyleCheckerStats, fixes, ignoredErrors)
         
         if fixed:
             vm = e5App().getObject("ViewManager")
@@ -511,6 +537,7 @@
                 "FixCodes": self.fixIssuesEdit.text(),
                 "NoFixCodes": self.noFixIssuesEdit.text(),
                 "FixIssues": self.fixIssuesCheckBox.isChecked(),
+                "ShowIgnored": self.ignoredCheckBox.isChecked(),
                 "MaxLineLength": self.lineLengthSpinBox.value(),
                 "HangClosing": self.hangClosingCheckBox.isChecked(),
                 "DocstringType": self.docTypeComboBox.itemData(
@@ -673,6 +700,8 @@
             "PEP8/NoFixCodes", "E501"))
         self.fixIssuesCheckBox.setChecked(Preferences.toBool(
             Preferences.Prefs.settings.value("PEP8/FixIssues")))
+        self.ignoredCheckBox.setChecked(Preferences.toBool(
+            Preferences.Prefs.settings.value("PEP8/ShowIgnored")))
         self.lineLengthSpinBox.setValue(int(Preferences.Prefs.settings.value(
             "PEP8/MaxLineLength", pep8.MAX_LINE_LENGTH)))
         self.hangClosingCheckBox.setChecked(Preferences.toBool(
@@ -701,6 +730,8 @@
         Preferences.Prefs.settings.setValue(
             "PEP8/FixIssues", self.fixIssuesCheckBox.isChecked())
         Preferences.Prefs.settings.setValue(
+            "PEP8/ShowIgnored", self.ignoredCheckBox.isChecked())
+        Preferences.Prefs.settings.setValue(
             "PEP8/MaxLineLength", self.lineLengthSpinBox.value())
         Preferences.Prefs.settings.setValue(
             "PEP8/HangClosing", self.hangClosingCheckBox.isChecked())
@@ -721,6 +752,7 @@
         Preferences.Prefs.settings.setValue("PEP8/FixCodes", "")
         Preferences.Prefs.settings.setValue("PEP8/NoFixCodes", "E501")
         Preferences.Prefs.settings.setValue("PEP8/FixIssues", False)
+        Preferences.Prefs.settings.setValue("PEP8/ShowIgnored", False)
         Preferences.Prefs.settings.setValue(
             "PEP8/MaxLineLength", pep8.MAX_LINE_LENGTH)
         Preferences.Prefs.settings.setValue("PEP8/HangClosing", False)
@@ -777,7 +809,7 @@
                                   itm.data(0, self.messageRole))),
                 itm
             ))
-        
+        ##!
         # update the configuration values (3: fixCodes, 4: noFixCodes,
         # 5: fixIssues, 6: maxLineLength)
         self.__options[3] = self.fixIssuesEdit.text()
@@ -817,4 +849,5 @@
         @param itm item to be checked (QTreeWidgetItem)
         @return flag indicating a fixable issue (boolean)
         """
-        return itm.data(0, self.fixableRole)
+        return (itm.data(0, self.fixableRole) and
+                not itm.data(0, self.ignoredRole))
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui	Tue Apr 15 22:41:08 2014 +0200
@@ -342,6 +342,19 @@
          </widget>
         </item>
         <item>
+         <widget class="QCheckBox" name="ignoredCheckBox">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="toolTip">
+           <string>Select to show ignored issues</string>
+          </property>
+          <property name="text">
+           <string>Show ignored</string>
+          </property>
+         </widget>
+        </item>
+        <item>
          <spacer name="horizontalSpacer">
           <property name="orientation">
            <enum>Qt::Horizontal</enum>
@@ -479,12 +492,14 @@
   <tabstop>noFixIssuesEdit</tabstop>
   <tabstop>noFixIssuesSelectButton</tabstop>
   <tabstop>lineLengthSpinBox</tabstop>
+  <tabstop>docTypeComboBox</tabstop>
   <tabstop>hangClosingCheckBox</tabstop>
   <tabstop>repeatCheckBox</tabstop>
   <tabstop>fixIssuesCheckBox</tabstop>
-  <tabstop>storeDefaultButton</tabstop>
+  <tabstop>ignoredCheckBox</tabstop>
   <tabstop>resultList</tabstop>
   <tabstop>fixButton</tabstop>
+  <tabstop>storeDefaultButton</tabstop>
   <tabstop>resetDefaultButton</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
@@ -497,12 +512,28 @@
    <slot>setEnabled(bool)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>121</x>
-     <y>153</y>
+     <x>132</x>
+     <y>286</y>
     </hint>
     <hint type="destinationlabel">
-     <x>186</x>
-     <y>160</y>
+     <x>343</x>
+     <y>286</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>repeatCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>ignoredCheckBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>138</x>
+     <y>269</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>380</x>
+     <y>271</y>
     </hint>
    </hints>
   </connection>
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.py	Tue Apr 15 22:41:08 2014 +0200
@@ -39,9 +39,11 @@
         filesCount = stats["_FilesCount"]
         filesIssues = stats["_FilesIssues"]
         fixesCount = stats["_IssuesFixed"]
+        ignoresCount = stats["_IgnoredErrors"]
         del stats["_FilesCount"]
         del stats["_FilesIssues"]
         del stats["_IssuesFixed"]
+        del stats["_IgnoredErrors"]
         
         totalIssues = 0
         
@@ -58,6 +60,8 @@
         
         self.totalIssues.setText(
             self.tr("%n issue(s) found", "", totalIssues))
+        self.ignoredIssues.setText(
+            self.tr("%n issue(s) ignored", "", ignoresCount))
         self.fixedIssues.setText(
             self.tr("%n issue(s) fixed", "", fixesCount))
         self.filesChecked.setText(
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.ui	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.ui	Tue Apr 15 22:41:08 2014 +0200
@@ -45,32 +45,19 @@
    <item>
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="0">
-      <widget class="QLabel" name="filesChecked">
-       <property name="text">
-        <string/>
-       </property>
-      </widget>
+      <widget class="QLabel" name="filesChecked"/>
      </item>
      <item row="0" column="1">
-      <widget class="QLabel" name="filesIssues">
-       <property name="text">
-        <string/>
-       </property>
-      </widget>
+      <widget class="QLabel" name="filesIssues"/>
      </item>
      <item row="1" column="0">
-      <widget class="QLabel" name="totalIssues">
-       <property name="text">
-        <string/>
-       </property>
-      </widget>
+      <widget class="QLabel" name="totalIssues"/>
      </item>
      <item row="1" column="1">
-      <widget class="QLabel" name="fixedIssues">
-       <property name="text">
-        <string/>
-       </property>
-      </widget>
+      <widget class="QLabel" name="ignoredIssues"/>
+     </item>
+     <item row="2" column="0">
+      <widget class="QLabel" name="fixedIssues"/>
      </item>
     </layout>
    </item>
--- a/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheck.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheck.py	Tue Apr 15 22:41:08 2014 +0200
@@ -90,7 +90,7 @@
     try:
         import builtins
     except ImportError:
-        import __builtin__ as builtins        #__IGNORE_WARNING__
+        import __builtin__ as builtins        # __IGNORE_WARNING__
     
     try:
         if sys.version_info[0] == 2:
--- a/Plugins/CheckerPlugins/Tabnanny/Tabnanny.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/CheckerPlugins/Tabnanny/Tabnanny.py	Tue Apr 15 22:41:08 2014 +0200
@@ -47,7 +47,7 @@
 try:
     import StringIO as io
 except (ImportError):
-    import io    # __IGNORE_WARNING__    
+    import io    # __IGNORE_WARNING__
 
 if not hasattr(tokenize, 'NL'):
     raise ValueError("tokenize.NL doesn't exist -- tokenize module too old")
--- a/Plugins/PluginCodeStyleChecker.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/PluginCodeStyleChecker.py	Tue Apr 15 22:41:08 2014 +0200
@@ -16,8 +16,9 @@
 
 from E5Gui.E5Application import e5App
 from E5Gui.E5Action import E5Action
+from Project.ProjectBrowserModel import ProjectBrowserFileItem
+from Utilities import determinePythonVersion
 
-from Utilities import determinePythonVersion
 import Preferences
 
 # Start-Of-Header
@@ -282,13 +283,19 @@
         """
         browser = e5App().getObject("ProjectBrowser")\
             .getProjectBrowser("sources")
-        itm = browser.model().item(browser.currentIndex())
-        try:
-            fn = itm.fileName()
+        if browser.getSelectedItemsCount([ProjectBrowserFileItem]) > 1:
+            fn = []
+            for itm in browser.getSelectedItems([ProjectBrowserFileItem]):
+                fn.append(itm.fileName())
             isDir = False
-        except AttributeError:
-            fn = itm.dirName()
-            isDir = True
+        else:
+            itm = browser.model().item(browser.currentIndex())
+            try:
+                fn = itm.fileName()
+                isDir = False
+            except AttributeError:
+                fn = itm.dirName()
+                isDir = True
         
         from CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog import \
             CodeStyleCheckerDialog
--- a/Plugins/PluginSyntaxChecker.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/PluginSyntaxChecker.py	Tue Apr 15 22:41:08 2014 +0200
@@ -17,6 +17,8 @@
 from E5Gui.E5Application import e5App
 from eric5config import getConfig
 
+from Project.ProjectBrowserModel import ProjectBrowserFileItem
+
 import Preferences
 
 # Start-Of-Header
@@ -268,11 +270,16 @@
         """
         browser = e5App().getObject("ProjectBrowser").getProjectBrowser(
             "sources")
-        itm = browser.model().item(browser.currentIndex())
-        try:
-            fn = itm.fileName()
-        except AttributeError:
-            fn = itm.dirName()
+        if browser.getSelectedItemsCount([ProjectBrowserFileItem]) > 1:
+            fn = []
+            for itm in browser.getSelectedItems([ProjectBrowserFileItem]):
+                fn.append(itm.fileName())
+        else:
+            itm = browser.model().item(browser.currentIndex())
+            try:
+                fn = itm.fileName()
+            except AttributeError:
+                fn = itm.dirName()
         
         from CheckerPlugins.SyntaxChecker.SyntaxCheckerDialog import \
             SyntaxCheckerDialog
--- a/Plugins/PluginTabnanny.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/PluginTabnanny.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,8 +15,9 @@
 
 from E5Gui.E5Application import e5App
 from E5Gui.E5Action import E5Action
+from Project.ProjectBrowserModel import ProjectBrowserFileItem
+from Utilities import determinePythonVersion
 
-from Utilities import determinePythonVersion
 import Preferences
 
 # Start-Of-Header
@@ -242,11 +243,16 @@
         """
         browser = e5App().getObject("ProjectBrowser").getProjectBrowser(
             "sources")
-        itm = browser.model().item(browser.currentIndex())
-        try:
-            fn = itm.fileName()
-        except AttributeError:
-            fn = itm.dirName()
+        if browser.getSelectedItemsCount([ProjectBrowserFileItem]) > 1:
+            fn = []
+            for itm in browser.getSelectedItems([ProjectBrowserFileItem]):
+                fn.append(itm.fileName())
+        else:
+            itm = browser.model().item(browser.currentIndex())
+            try:
+                fn = itm.fileName()
+            except AttributeError:
+                fn = itm.dirName()
         
         from CheckerPlugins.Tabnanny.TabnannyDialog import TabnannyDialog
         self.__projectBrowserTabnannyDialog = TabnannyDialog(self)
--- a/Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.py	Tue Apr 15 22:41:08 2014 +0200
@@ -14,6 +14,7 @@
     pass
 
 import os
+import re
 
 from PyQt4.QtCore import pyqtSlot, QProcess, QTimer, Qt, QCoreApplication
 from PyQt4.QtGui import QDialog, QDialogButtonBox, QHeaderView, QLineEdit, \
@@ -46,6 +47,9 @@
         self.vcs = vcs
         self.__hgClient = vcs.getClient()
         
+        self.__annotateRe = re.compile(
+            r"""(.+)\s+(\d+)\s+([0-9a-fA-F]+)\s+([0-9-]+)\s+(.+)""")
+        
         self.annotateList.headerItem().setText(
             self.annotateList.columnCount(), "")
         font = Preferences.getEditorOtherFonts("MonospacedFont")
@@ -238,8 +242,10 @@
         except ValueError:
             info = line[:-2]
             text = ""
-        author, rev, changeset, date, file = info.split()
-        self.__generateItem(rev, changeset, author, date, text)
+        match = self.__annotateRe.match(info)
+        author, rev, changeset, date, file = match.groups()
+        self.__generateItem(rev.strip(), changeset.strip(), author.strip(),
+                            date.strip(), text)
     
     def __readStderr(self):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py	Tue Apr 15 22:41:08 2014 +0200
@@ -325,20 +325,20 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsSbsDiff.png"),
-            self.tr('Show difference side-by-side'), self.__HgSbsDiff)
+            self.tr('Show differences side-by-side'), self.__HgSbsDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__HgExtendedDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsSbsDiff.png"),
-            self.tr('Show difference side-by-side (extended)'),
+            self.tr('Show differences side-by-side (extended)'),
             self.__HgSbsExtendedDiff)
         self.vcsMenuActions.append(act)
         self.annotateAct = menu.addAction(
@@ -351,7 +351,7 @@
             self.tr('Revert changes'), self.__HgRevert)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__HgResolve)
+            self.tr('Conflicts resolved'), self.__HgResolve)
         self.vcsMenuActions.append(act)
         menu.addSeparator()
         menu.addAction(self.tr('Select all local file entries'),
@@ -419,11 +419,11 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsMultiMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__HgExtendedDiff)
         self.vcsMultiMenuActions.append(act)
         menu.addSeparator()
@@ -432,7 +432,7 @@
             self.tr('Revert changes'), self.__HgRevert)
         self.vcsMultiMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__HgResolve)
+            self.tr('Conflicts resolved'), self.__HgResolve)
         self.vcsMultiMenuActions.append(act)
         menu.addSeparator()
         menu.addAction(self.tr('Select all local file entries'),
@@ -543,11 +543,11 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsDirMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__HgExtendedDiff)
         self.vcsDirMenuActions.append(act)
         menu.addSeparator()
@@ -556,7 +556,7 @@
             self.tr('Revert changes'), self.__HgRevert)
         self.vcsDirMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__HgResolve)
+            self.tr('Conflicts resolved'), self.__HgResolve)
         self.vcsDirMenuActions.append(act)
         menu.addSeparator()
         menu.addAction(self.tr('Select all local file entries'),
@@ -621,11 +621,11 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsDirMultiMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__HgExtendedDiff)
         self.vcsDirMultiMenuActions.append(act)
         menu.addSeparator()
@@ -634,7 +634,7 @@
             self.tr('Revert changes'), self.__HgRevert)
         self.vcsDirMultiMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__HgResolve)
+            self.tr('Conflicts resolved'), self.__HgResolve)
         self.vcsDirMultiMenuActions.append(act)
         menu.addSeparator()
         menu.addAction(self.tr('Select all local file entries'),
--- a/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Tue Apr 15 22:41:08 2014 +0200
@@ -280,7 +280,7 @@
         self.actions.append(self.hgLogBrowserAct)
         
         self.vcsDiffAct = E5Action(
-            self.tr('Show difference'),
+            self.tr('Show differences'),
             UI.PixmapCache.getIcon("vcsDiff.png"),
             self.tr('Show &difference'),
             0, 0, self, 'mercurial_diff')
@@ -288,24 +288,24 @@
             'Show the difference of the local project to the repository'
         ))
         self.vcsDiffAct.setWhatsThis(self.tr(
-            """<b>Show difference</b>"""
-            """<p>This shows the difference of the local project to the"""
+            """<b>Show differences</b>"""
+            """<p>This shows differences of the local project to the"""
             """ repository.</p>"""
         ))
         self.vcsDiffAct.triggered.connect(self._vcsDiff)
         self.actions.append(self.vcsDiffAct)
         
         self.hgExtDiffAct = E5Action(
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             0, 0, self, 'mercurial_extendeddiff')
         self.hgExtDiffAct.setStatusTip(self.tr(
             'Show the difference of revisions of the project to the repository'
         ))
         self.hgExtDiffAct.setWhatsThis(self.tr(
-            """<b>Show difference (extended)</b>"""
-            """<p>This shows the difference of selectable revisions of the"""
+            """<b>Show differences (extended)</b>"""
+            """<p>This shows differences of selectable revisions of the"""
             """ project.</p>"""
         ))
         self.hgExtDiffAct.triggered.connect(self.__hgExtendedDiff)
@@ -415,6 +415,21 @@
         self.vcsMergeAct.triggered.connect(self._vcsMerge)
         self.actions.append(self.vcsMergeAct)
         
+        self.hgCancelMergeAct = E5Action(
+            self.tr('Cancel uncommitted merge'),
+            self.tr('Cancel uncommitted merge'),
+            0, 0, self, 'mercurial_cancel_merge')
+        self.hgCancelMergeAct.setStatusTip(self.tr(
+            'Cancel an uncommitted merge and lose all changes'
+        ))
+        self.hgCancelMergeAct.setWhatsThis(self.tr(
+            """<b>Cancel uncommitted merge</b>"""
+            """<p>This cancels an uncommitted merge causing all changes"""
+            """ to be lost.</p>"""
+        ))
+        self.hgCancelMergeAct.triggered.connect(self.__hgCancelMerge)
+        self.actions.append(self.hgCancelMergeAct)
+        
         self.vcsResolveAct = E5Action(
             self.tr('Conflicts resolved'),
             self.tr('Con&flicts resolved'),
@@ -1141,6 +1156,7 @@
         menu.addAction(self.vcsRevertAct)
         menu.addAction(self.vcsMergeAct)
         menu.addAction(self.vcsResolveAct)
+        menu.addAction(self.hgCancelMergeAct)
         menu.addSeparator()
         menu.addAction(self.vcsSwitchAct)
         menu.addSeparator()
@@ -1272,6 +1288,12 @@
         """
         self.vcs.hgResolve(self.project.ppath)
     
+    def __hgCancelMerge(self):
+        """
+        Private slot used to cancel an uncommitted merge.
+        """
+        self.vcs.hgCancelMerge(self.project.ppath)
+    
     def __hgTagList(self):
         """
         Private slot used to list the tags of the project.
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/hg.py	Tue Apr 15 22:41:08 2014 +0200
@@ -2110,6 +2110,36 @@
             dia.exec_()
         self.checkVCSStatus()
     
+    def hgCancelMerge(self, name):
+        """
+        Public method to cancel an uncommitted merge.
+        
+        @param name file/directory name (string)
+        @return flag indicating, that the cancellation contained an add
+            or delete (boolean)
+        """
+        dname, fname = self.splitPath(name)
+        
+        # find the root of the repo
+        repodir = dname
+        while not os.path.isdir(os.path.join(repodir, self.adminDir)):
+            repodir = os.path.dirname(repodir)
+            if os.path.splitdrive(repodir)[1] == os.sep:
+                return
+        
+        args = self.initCommand("update")
+        args.append("--clean")
+        
+        dia = HgDialog(
+            self.tr('Cancelling uncommitted merge'),
+            self)
+        res = dia.startProcess(args, repodir, False)
+        if res:
+            dia.exec_()
+            res = dia.hasAddOrDelete()
+        self.checkVCSStatus()
+        return res
+    
     def hgBranch(self, name):
         """
         Public method used to create a branch in the Mercurial repository.
--- a/Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py	Tue Apr 15 22:41:08 2014 +0200
@@ -271,25 +271,25 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsSbsDiff.png"),
-            self.tr('Show difference side-by-side'), self.__SVNSbsDiff)
+            self.tr('Show differences side-by-side'), self.__SVNSbsDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__SVNExtendedDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsSbsDiff.png"),
-            self.tr('Show difference side-by-side (extended)'),
+            self.tr('Show differences side-by-side (extended)'),
             self.__SVNSbsExtendedDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             self.__SVNUrlDiff)
         self.vcsMenuActions.append(act)
         self.blameAct = menu.addAction(
@@ -306,7 +306,7 @@
             self.tr('Merge changes'), self._VCSMerge)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__SVNResolve)
+            self.tr('Conflicts resolved'), self.__SVNResolve)
         self.vcsMenuActions.append(act)
         menu.addSeparator()
         act = menu.addAction(
@@ -412,16 +412,16 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsMultiMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__SVNExtendedDiff)
         self.vcsMultiMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             self.__SVNUrlDiff)
         self.vcsMultiMenuActions.append(act)
         menu.addSeparator()
@@ -430,7 +430,7 @@
             self.tr('Revert changes'), self._VCSRevert)
         self.vcsMultiMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__SVNResolve)
+            self.tr('Conflicts resolved'), self.__SVNResolve)
         self.vcsMultiMenuActions.append(act)
         menu.addSeparator()
         act = menu.addAction(
@@ -583,16 +583,16 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsDirMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__SVNExtendedDiff)
         self.vcsDirMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             self.__SVNUrlDiff)
         self.vcsDirMenuActions.append(act)
         menu.addSeparator()
@@ -605,7 +605,7 @@
             self.tr('Merge changes'), self._VCSMerge)
         self.vcsDirMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__SVNResolve)
+            self.tr('Conflicts resolved'), self.__SVNResolve)
         self.vcsDirMenuActions.append(act)
         menu.addSeparator()
         act = menu.addAction(self.tr('Set Property'), self.__SVNSetProp)
@@ -691,16 +691,16 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsDirMultiMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__SVNExtendedDiff)
         self.vcsDirMultiMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             self.__SVNUrlDiff)
         self.vcsDirMultiMenuActions.append(act)
         menu.addSeparator()
@@ -713,7 +713,7 @@
             self.tr('Merge changes'), self._VCSMerge)
         self.vcsDirMultiMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__SVNResolve)
+            self.tr('Conflicts resolved'), self.__SVNResolve)
         self.vcsDirMultiMenuActions.append(act)
         menu.addSeparator()
         act = menu.addAction(self.tr('Set Property'), self.__SVNSetProp)
--- a/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py	Tue Apr 15 22:41:08 2014 +0200
@@ -128,7 +128,7 @@
         self.actions.append(self.svnLogBrowserAct)
         
         self.vcsDiffAct = E5Action(
-            self.tr('Show difference'),
+            self.tr('Show differences'),
             UI.PixmapCache.getIcon("vcsDiff.png"),
             self.tr('Show &difference'),
             0, 0, self, 'subversion_diff')
@@ -136,40 +136,40 @@
             'Show the difference of the local project to the repository'
         ))
         self.vcsDiffAct.setWhatsThis(self.tr(
-            """<b>Show difference</b>"""
-            """<p>This shows the difference of the local project to the"""
+            """<b>Show differences</b>"""
+            """<p>This shows differences of the local project to the"""
             """ repository.</p>"""
         ))
         self.vcsDiffAct.triggered.connect(self._vcsDiff)
         self.actions.append(self.vcsDiffAct)
         
         self.svnExtDiffAct = E5Action(
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             0, 0, self, 'subversion_extendeddiff')
         self.svnExtDiffAct.setStatusTip(self.tr(
             'Show the difference of revisions of the project to the repository'
         ))
         self.svnExtDiffAct.setWhatsThis(self.tr(
-            """<b>Show difference (extended)</b>"""
-            """<p>This shows the difference of selectable revisions of"""
+            """<b>Show differences (extended)</b>"""
+            """<p>This shows differences of selectable revisions of"""
             """ the project.</p>"""
         ))
         self.svnExtDiffAct.triggered.connect(self.__svnExtendedDiff)
         self.actions.append(self.svnExtDiffAct)
         
         self.svnUrlDiffAct = E5Action(
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             0, 0, self, 'subversion_urldiff')
         self.svnUrlDiffAct.setStatusTip(self.tr(
             'Show the difference of the project between two repository URLs'
         ))
         self.svnUrlDiffAct.setWhatsThis(self.tr(
-            """<b>Show difference (URLs)</b>"""
-            """<p>This shows the difference of the project between"""
+            """<b>Show differences (URLs)</b>"""
+            """<p>This shows differences of the project between"""
             """ two repository URLs.</p>"""
         ))
         self.svnUrlDiffAct.triggered.connect(self.__svnUrlDiff)
--- a/Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py	Tue Apr 15 22:41:08 2014 +0200
@@ -265,25 +265,25 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsSbsDiff.png"),
-            self.tr('Show difference side-by-side'), self.__SVNSbsDiff)
+            self.tr('Show differences side-by-side'), self.__SVNSbsDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__SVNExtendedDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsSbsDiff.png"),
-            self.tr('Show difference side-by-side (extended)'),
+            self.tr('Show differences side-by-side (extended)'),
             self.__SVNSbsExtendedDiff)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             self.__SVNUrlDiff)
         self.vcsMenuActions.append(act)
         self.blameAct = menu.addAction(
@@ -300,7 +300,7 @@
             self.tr('Merge changes'), self._VCSMerge)
         self.vcsMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__SVNResolve)
+            self.tr('Conflicts resolved'), self.__SVNResolve)
         self.vcsMenuActions.append(act)
         if self.vcs.version >= (1, 2, 0):
             menu.addSeparator()
@@ -408,16 +408,16 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsMultiMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__SVNExtendedDiff)
         self.vcsMultiMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             self.__SVNUrlDiff)
         self.vcsMultiMenuActions.append(act)
         menu.addSeparator()
@@ -426,7 +426,7 @@
             self.tr('Revert changes'), self._VCSRevert)
         self.vcsMultiMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__SVNResolve)
+            self.tr('Conflicts resolved'), self.__SVNResolve)
         self.vcsMultiMenuActions.append(act)
         if self.vcs.version >= (1, 2, 0):
             menu.addSeparator()
@@ -578,16 +578,16 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsDirMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__SVNExtendedDiff)
         self.vcsDirMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             self.__SVNUrlDiff)
         self.vcsDirMenuActions.append(act)
         menu.addSeparator()
@@ -600,7 +600,7 @@
             self.tr('Merge changes'), self._VCSMerge)
         self.vcsDirMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__SVNResolve)
+            self.tr('Conflicts resolved'), self.__SVNResolve)
         self.vcsDirMenuActions.append(act)
         menu.addSeparator()
         act = menu.addAction(self.tr('Set Property'), self.__SVNSetProp)
@@ -687,16 +687,16 @@
         menu.addSeparator()
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference'), self._VCSDiff)
+            self.tr('Show differences'), self._VCSDiff)
         self.vcsDirMultiMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             self.__SVNExtendedDiff)
         self.vcsDirMultiMenuActions.append(act)
         act = menu.addAction(
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             self.__SVNUrlDiff)
         self.vcsDirMultiMenuActions.append(act)
         menu.addSeparator()
@@ -709,7 +709,7 @@
             self.tr('Merge changes'), self._VCSMerge)
         self.vcsDirMultiMenuActions.append(act)
         act = menu.addAction(
-            self.tr('Conflict resolved'), self.__SVNResolve)
+            self.tr('Conflicts resolved'), self.__SVNResolve)
         self.vcsDirMultiMenuActions.append(act)
         menu.addSeparator()
         act = menu.addAction(self.tr('Set Property'), self.__SVNSetProp)
--- a/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py	Tue Apr 15 22:41:08 2014 +0200
@@ -128,7 +128,7 @@
         self.actions.append(self.svnLogBrowserAct)
         
         self.vcsDiffAct = E5Action(
-            self.tr('Show difference'),
+            self.tr('Show differences'),
             UI.PixmapCache.getIcon("vcsDiff.png"),
             self.tr('Show &difference'),
             0, 0, self, 'subversion_diff')
@@ -136,40 +136,40 @@
             'Show the difference of the local project to the repository'
         ))
         self.vcsDiffAct.setWhatsThis(self.tr(
-            """<b>Show difference</b>"""
-            """<p>This shows the difference of the local project to the"""
+            """<b>Show differences</b>"""
+            """<p>This shows differences of the local project to the"""
             """ repository.</p>"""
         ))
         self.vcsDiffAct.triggered.connect(self._vcsDiff)
         self.actions.append(self.vcsDiffAct)
         
         self.svnExtDiffAct = E5Action(
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (extended)'),
+            self.tr('Show differences (extended)'),
             0, 0, self, 'subversion_extendeddiff')
         self.svnExtDiffAct.setStatusTip(self.tr(
             'Show the difference of revisions of the project to the repository'
         ))
         self.svnExtDiffAct.setWhatsThis(self.tr(
-            """<b>Show difference (extended)</b>"""
-            """<p>This shows the difference of selectable revisions of"""
+            """<b>Show differences (extended)</b>"""
+            """<p>This shows differences of selectable revisions of"""
             """ the project.</p>"""
         ))
         self.svnExtDiffAct.triggered.connect(self.__svnExtendedDiff)
         self.actions.append(self.svnExtDiffAct)
         
         self.svnUrlDiffAct = E5Action(
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             UI.PixmapCache.getIcon("vcsDiff.png"),
-            self.tr('Show difference (URLs)'),
+            self.tr('Show differences (URLs)'),
             0, 0, self, 'subversion_urldiff')
         self.svnUrlDiffAct.setStatusTip(self.tr(
             'Show the difference of the project between two repository URLs'
         ))
         self.svnUrlDiffAct.setWhatsThis(self.tr(
-            """<b>Show difference (URLs)</b>"""
-            """<p>This shows the difference of the project between"""
+            """<b>Show differences (URLs)</b>"""
+            """<p>This shows differences of the project between"""
             """ two repository URLs.</p>"""
         ))
         self.svnUrlDiffAct.triggered.connect(self.__svnUrlDiff)
--- a/Preferences/ConfigurationPages/EditorFilePage.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Preferences/ConfigurationPages/EditorFilePage.py	Tue Apr 15 22:41:08 2014 +0200
@@ -87,6 +87,8 @@
                 Preferences.getEditor("PreviewMarkdownFileNameExtensions")))
         self.previewRestExtensionsEdit.setText(
             " ".join(Preferences.getEditor("PreviewRestFileNameExtensions")))
+        self.previewQssExtensionsEdit.setText(
+            " ".join(Preferences.getEditor("PreviewQssFileNameExtensions")))
         
     def save(self):
         """
@@ -150,6 +152,10 @@
             "PreviewRestFileNameExtensions",
             [ext.strip() for ext in
              self.previewRestExtensionsEdit.text().split()])
+        Preferences.setEditor(
+            "PreviewQssFileNameExtensions",
+            [ext.strip() for ext in
+             self.previewQssExtensionsEdit.text().split()])
     
     def __setDefaultFiltersLists(self, keepSelection=False):
         """
--- a/Preferences/ConfigurationPages/EditorFilePage.ui	Sun Apr 13 15:45:57 2014 +0200
+++ b/Preferences/ConfigurationPages/EditorFilePage.ui	Tue Apr 15 22:41:08 2014 +0200
@@ -487,6 +487,20 @@
         </property>
        </widget>
       </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label_9">
+        <property name="text">
+         <string>Extensions of QSS files:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QLineEdit" name="previewQssExtensionsEdit">
+        <property name="toolTip">
+         <string>Enter the filename extensions of Qt Stylesheet files that may be previewed (separated by a space)</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
--- a/Preferences/ConfigurationPages/TemplatesPage.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Preferences/ConfigurationPages/TemplatesPage.py	Tue Apr 15 22:41:08 2014 +0200
@@ -9,6 +9,8 @@
 
 from __future__ import unicode_literals
 
+from PyQt4.QtCore import pyqtSlot
+
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_TemplatesPage import Ui_TemplatesPage
 
@@ -38,6 +40,8 @@
             self.templatesMultiDialogButton.setChecked(True)
         self.templatesToolTipCheckBox.setChecked(
             Preferences.getTemplates("ShowTooltip"))
+        self.editorFont = Preferences.getTemplates("EditorFont")
+        self.editorFontSample.setFont(self.editorFont)
         
     def save(self):
         """
@@ -55,6 +59,15 @@
         Preferences.setTemplates(
             "ShowTooltip",
             self.templatesToolTipCheckBox.isChecked())
+        Preferences.setTemplates("EditorFont", self.editorFont)
+    
+    @pyqtSlot()
+    def on_editorFontButton_clicked(self):
+        """
+        Private method used to select the font to be used by the code editor.
+        """
+        self.editorFont = self.selectFont(
+            self.editorFontSample, self.editorFont)
     
 
 def create(dlg):
--- a/Preferences/ConfigurationPages/TemplatesPage.ui	Sun Apr 13 15:45:57 2014 +0200
+++ b/Preferences/ConfigurationPages/TemplatesPage.ui	Tue Apr 15 22:41:08 2014 +0200
@@ -1,47 +1,48 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>TemplatesPage</class>
- <widget class="QWidget" name="TemplatesPage" >
-  <property name="geometry" >
+ <widget class="QWidget" name="TemplatesPage">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>532</width>
-    <height>374</height>
+    <height>541</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" >
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QLabel" name="headerLabel" >
-     <property name="text" >
-      <string>&lt;b>Configure Templates&lt;/b></string>
+    <widget class="QLabel" name="headerLabel">
+     <property name="text">
+      <string>&lt;b&gt;Configure Templates&lt;/b&gt;</string>
      </property>
     </widget>
    </item>
    <item>
-    <widget class="Line" name="line11_2_2_2_2_2" >
-     <property name="frameShape" >
+    <widget class="Line" name="line11_2_2_2_2_2">
+     <property name="frameShape">
       <enum>QFrame::HLine</enum>
      </property>
-     <property name="frameShadow" >
+     <property name="frameShadow">
       <enum>QFrame::Sunken</enum>
      </property>
-     <property name="orientation" >
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="groupBox" >
-     <property name="title" >
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
       <string>Groups</string>
      </property>
-     <layout class="QVBoxLayout" >
+     <layout class="QVBoxLayout">
       <item>
-       <widget class="QCheckBox" name="templatesAutoOpenGroupsCheckBox" >
-        <property name="toolTip" >
+       <widget class="QCheckBox" name="templatesAutoOpenGroupsCheckBox">
+        <property name="toolTip">
          <string>Select, if groups having entries should be opened automatically</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Expand groups automatically</string>
         </property>
        </widget>
@@ -50,45 +51,45 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="groupBox_2" >
-     <property name="title" >
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
       <string>Variables</string>
      </property>
-     <layout class="QVBoxLayout" >
+     <layout class="QVBoxLayout">
       <item>
-       <layout class="QHBoxLayout" >
+       <layout class="QHBoxLayout">
         <item>
-         <widget class="QLabel" name="textLabel1_19" >
-          <property name="text" >
+         <widget class="QLabel" name="textLabel1_19">
+          <property name="text">
            <string>Separator:</string>
           </property>
          </widget>
         </item>
         <item>
-         <widget class="QLineEdit" name="templatesSeparatorCharEdit" >
-          <property name="sizePolicy" >
-           <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+         <widget class="QLineEdit" name="templatesSeparatorCharEdit">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
             <horstretch>0</horstretch>
             <verstretch>0</verstretch>
            </sizepolicy>
           </property>
-          <property name="toolTip" >
+          <property name="toolTip">
            <string>Enter the character that encloses variables</string>
           </property>
-          <property name="maxLength" >
+          <property name="maxLength">
            <number>1</number>
           </property>
          </widget>
         </item>
         <item>
          <spacer>
-          <property name="orientation" >
+          <property name="orientation">
            <enum>Qt::Horizontal</enum>
           </property>
-          <property name="sizeType" >
+          <property name="sizeType">
            <enum>QSizePolicy::Expanding</enum>
           </property>
-          <property name="sizeHint" stdset="0" >
+          <property name="sizeHint" stdset="0">
            <size>
             <width>40</width>
             <height>20</height>
@@ -99,27 +100,27 @@
        </layout>
       </item>
       <item>
-       <widget class="QGroupBox" name="groupBox_3" >
-        <property name="title" >
+       <widget class="QGroupBox" name="groupBox_3">
+        <property name="title">
          <string>Input method for variables</string>
         </property>
-        <layout class="QVBoxLayout" >
+        <layout class="QVBoxLayout">
          <item>
-          <widget class="QRadioButton" name="templatesMultiDialogButton" >
-           <property name="toolTip" >
+          <widget class="QRadioButton" name="templatesMultiDialogButton">
+           <property name="toolTip">
             <string>Select, if a new dialog should be opened for every template variable</string>
            </property>
-           <property name="text" >
+           <property name="text">
             <string>One dialog per template variable</string>
            </property>
           </widget>
          </item>
          <item>
-          <widget class="QRadioButton" name="templatesSingleDialogButton" >
-           <property name="toolTip" >
+          <widget class="QRadioButton" name="templatesSingleDialogButton">
+           <property name="toolTip">
             <string>Select, if only one dialog for all template variables should be shown</string>
            </property>
-           <property name="text" >
+           <property name="text">
             <string>One dialog for all template variables</string>
            </property>
           </widget>
@@ -131,17 +132,17 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="groupBox_4" >
-     <property name="title" >
+    <widget class="QGroupBox" name="groupBox_4">
+     <property name="title">
       <string>Tooltips</string>
      </property>
-     <layout class="QVBoxLayout" >
+     <layout class="QVBoxLayout">
       <item>
-       <widget class="QCheckBox" name="templatesToolTipCheckBox" >
-        <property name="toolTip" >
+       <widget class="QCheckBox" name="templatesToolTipCheckBox">
+        <property name="toolTip">
          <string>Select, if the template text should be shown in a tooltip</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Show template text in tooltip</string>
         </property>
        </widget>
@@ -150,11 +151,46 @@
     </widget>
    </item>
    <item>
+    <widget class="QGroupBox" name="groupBox_5">
+     <property name="title">
+      <string>Template Editor</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QPushButton" name="editorFontButton">
+        <property name="toolTip">
+         <string>Press to select the font to be used for the code editor</string>
+        </property>
+        <property name="text">
+         <string>Editor Font</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="editorFontSample">
+        <property name="focusPolicy">
+         <enum>Qt::NoFocus</enum>
+        </property>
+        <property name="text">
+         <string>Template Code Editor</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignHCenter</set>
+        </property>
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <spacer>
-     <property name="orientation" >
+     <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
-     <property name="sizeHint" stdset="0" >
+     <property name="sizeHint" stdset="0">
       <size>
        <width>20</width>
        <height>40</height>
--- a/Preferences/__init__.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Preferences/__init__.py	Tue Apr 15 22:41:08 2014 +0200
@@ -323,6 +323,7 @@
         "PreviewHtmlFileNameExtensions": ["html", "htm", "svg", "asp", "kid"],
         "PreviewMarkdownFileNameExtensions": ["md", "markdown"],
         "PreviewRestFileNameExtensions": ["rst"],
+        "PreviewQssFileNameExtensions": ["qss"],
         
         "VirtualSpaceOptions": QsciScintilla.SCVS_NONE,
         
@@ -908,6 +909,7 @@
         "SingleDialog": False,
         "ShowTooltip": False,
         "SeparatorChar": "$",
+        "EditorFont": "Monospace,9,-1,5,50,0,0,0,0,0",
     }
     
     # defaults for plugin manager related stuff
@@ -1635,7 +1637,8 @@
     elif key in ["AdditionalOpenFilters", "AdditionalSaveFilters",
                  "PreviewMarkdownFileNameExtensions",
                  "PreviewRestFileNameExtensions",
-                 "PreviewHtmlFileNameExtensions"]:
+                 "PreviewHtmlFileNameExtensions",
+                 "PreviewQssFileNameExtensions"]:
         return toList(prefClass.settings.value(
             "Editor/" + key, prefClass.editorDefaults[key]))
     else:
@@ -2531,6 +2534,11 @@
     if key in ["SeparatorChar"]:
         return prefClass.settings.value(
             "Templates/" + key, prefClass.templatesDefaults[key])
+    elif key in ["EditorFont"]:
+        f = QFont()
+        f.fromString(prefClass.settings.value(
+            "Templates/" + key, prefClass.templatesDefaults[key]))
+        return f
     else:
         return toBool(prefClass.settings.value(
             "Templates/" + key, prefClass.templatesDefaults[key]))
@@ -2544,7 +2552,10 @@
     @param value the value to be set
     @param prefClass preferences class used as the storage area
     """
-    prefClass.settings.setValue("Templates/" + key, value)
+    if key in ["EditorFont"]:
+        prefClass.settings.setValue("Templates/" + key, value.toString())
+    else:
+        prefClass.settings.setValue("Templates/" + key, value)
     
 
 def getPluginManager(key, prefClass=Prefs):
--- a/Project/ProjectBrowser.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Project/ProjectBrowser.py	Tue Apr 15 22:41:08 2014 +0200
@@ -299,7 +299,8 @@
                     icon = UI.PixmapCache.getIcon("projectSourcesRbMixed.png")
                 else:
                     icon = UI.PixmapCache.getIcon("projectSourcesRb.png")
-            # TODO: add icon for JavaScript
+            elif self.project.pdata["PROGLANGUAGE"][0] == "JavaScript":
+                icon = UI.PixmapCache.getIcon("projectSourcesJavaScript.png")
             else:
                 icon = UI.PixmapCache.getIcon("projectSources.png")
         self.setTabIcon(self.indexOf(self.psBrowser), icon)
--- a/Project/ProjectFormsBrowser.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Project/ProjectFormsBrowser.py	Tue Apr 15 22:41:08 2014 +0200
@@ -864,6 +864,7 @@
                 self.tr("%v/%m Forms"), self)
             progress.setModal(True)
             progress.setMinimumDuration(0)
+            progress.setWindowTitle(self.tr("Forms"))
             i = 0
             
             for fn in self.project.pdata["FORMS"]:
@@ -901,6 +902,7 @@
                 self.tr("%v/%m Forms"), self)
             progress.setModal(True)
             progress.setMinimumDuration(0)
+            progress.setWindowTitle(self.tr("Forms"))
             i = 0
             
             for fn in files:
@@ -936,6 +938,7 @@
                 self.tr("Determining changed forms..."),
                 None, 0, 100, self.tr("%v/%m Forms"))
             progress.setMinimumDuration(0)
+            progress.setWindowTitle(self.tr("Forms"))
             i = 0
             
             # get list of changed forms
--- a/Project/ProjectInterfacesBrowser.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Project/ProjectInterfacesBrowser.py	Tue Apr 15 22:41:08 2014 +0200
@@ -584,6 +584,7 @@
                 self.tr("%v/%m Interfaces"), self)
             progress.setModal(True)
             progress.setMinimumDuration(0)
+            progress.setWindowTitle(self.tr("Interfaces"))
             i = 0
             
             for fn in self.project.pdata["INTERFACES"]:
@@ -618,6 +619,7 @@
                 self.tr("%v/%m Interfaces"), self)
             progress.setModal(True)
             progress.setMinimumDuration(0)
+            progress.setWindowTitle(self.tr("Interfaces"))
             i = 0
             
             for fn in files:
--- a/Project/ProjectResourcesBrowser.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Project/ProjectResourcesBrowser.py	Tue Apr 15 22:41:08 2014 +0200
@@ -731,6 +731,7 @@
                 self.tr("%v/%m Resources"), self)
             progress.setModal(True)
             progress.setMinimumDuration(0)
+            progress.setWindowTitle(self.tr("Resources"))
             i = 0
             
             for fn in self.project.pdata["RESOURCES"]:
@@ -767,6 +768,7 @@
                 self.tr("%v/%m Resources"), self)
             progress.setModal(True)
             progress.setMinimumDuration(0)
+            progress.setWindowTitle(self.tr("Resources"))
             i = 0
             
             for fn in files:
@@ -835,6 +837,7 @@
                 self.tr("Determining changed resources..."),
                 None, 0, 100, self.tr("%v/%m Resources"))
             progress.setMinimumDuration(0)
+            progress.setWindowTitle(self.tr("Resources"))
             i = 0
             
             # get list of changed resources
--- a/Project/ProjectSourcesBrowser.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Project/ProjectSourcesBrowser.py	Tue Apr 15 22:41:08 2014 +0200
@@ -117,7 +117,6 @@
         """
         Privat method to generate the popup menus for a Python project.
         """
-        # TODO: add this to the multi files menu
         self.checksMenu = QMenu(self.tr('Check'))
         self.checksMenu.aboutToShow.connect(self.__showContextMenuCheck)
         
@@ -244,6 +243,8 @@
             self.tr('Delete'), self.__deleteFile)
         self.multiMenuActions.append(act)
         self.multiMenu.addSeparator()
+        self.multiMenu.addMenu(self.checksMenu)
+        self.multiMenu.addSeparator()
         self.multiMenu.addAction(
             self.tr('Expand all directories'), self._expandAllDirs)
         self.multiMenu.addAction(
@@ -442,7 +443,6 @@
         """
         Privat method to generate the popup menus for a Python project.
         """
-        # TODO: add this to the multi files menu
         self.checksMenu = QMenu(self.tr('Check'))
         self.checksMenu.aboutToShow.connect(self.__showContextMenuCheck)
         
@@ -530,6 +530,8 @@
             self.tr('Delete'), self.__deleteFile)
         self.multiMenuActions.append(act)
         self.multiMenu.addSeparator()
+        self.multiMenu.addMenu(self.checksMenu)
+        self.multiMenu.addSeparator()
         self.multiMenu.addAction(
             self.tr('Expand all directories'), self._expandAllDirs)
         self.multiMenu.addAction(
--- a/QScintilla/APIsManager.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/APIsManager.py	Tue Apr 15 22:41:08 2014 +0200
@@ -185,9 +185,9 @@
                     Globals.getPyQt4ModulesDirectory(), "qsci")
                 if os.path.exists(qsciPath):
                     # it's the installer
-                    if self.__lexer.lexer() is not None:
+                    if self.__lexer.lexerName() is not None:
                         apidir = os.path.join(qsciPath, "api",
-                                              self.__lexer.lexer())
+                                              self.__lexer.lexerName())
                         fnames = []
                         filist = QDir(apidir).entryInfoList(
                             ["*.api"], QDir.Files, QDir.IgnoreCase)
--- a/QScintilla/Lexers/Lexer.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/Lexer.py	Tue Apr 15 22:41:08 2014 +0200
@@ -225,3 +225,11 @@
                 return kw
         else:
             return self.defaultKeywords(kwSet)
+    
+    def lexerName(self):
+        """
+        Public method to return the lexer name.
+        
+        @return lexer name (string)
+        """
+        return self.lexer()
--- a/QScintilla/Lexers/LexerBash.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerBash.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerBash(QsciLexerBash, Lexer):
+class LexerBash(Lexer, QsciLexerBash):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerBash, self).__init__(parent)
+        QsciLexerBash.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "#"
--- a/QScintilla/Lexers/LexerBatch.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerBatch.py	Tue Apr 15 22:41:08 2014 +0200
@@ -14,7 +14,7 @@
 from .Lexer import Lexer
 
 
-class LexerBatch(QsciLexerBatch, Lexer):
+class LexerBatch(Lexer, QsciLexerBatch):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -24,7 +24,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerBatch, self).__init__(parent)
+        QsciLexerBatch.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "REM "
--- a/QScintilla/Lexers/LexerCMake.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerCMake.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerCMake(QsciLexerCMake, Lexer):
+class LexerCMake(Lexer, QsciLexerCMake):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerCMake, self).__init__(parent)
+        QsciLexerCMake.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "#"
--- a/QScintilla/Lexers/LexerCPP.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerCPP.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerCPP(QsciLexerCPP, Lexer):
+class LexerCPP(Lexer, QsciLexerCPP):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -27,7 +27,7 @@
         @param caseInsensitiveKeywords flag indicating keywords are case
             insensitive (boolean)
         """
-        super(LexerCPP, self).__init__(parent, caseInsensitiveKeywords)
+        QsciLexerCPP.__init__(self, parent, caseInsensitiveKeywords)
         Lexer.__init__(self)
         
         self.commentString = "//"
--- a/QScintilla/Lexers/LexerCSS.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerCSS.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerCSS(QsciLexerCSS, Lexer):
+class LexerCSS(Lexer, QsciLexerCSS):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerCSS, self).__init__(parent)
+        QsciLexerCSS.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "#"
--- a/QScintilla/Lexers/LexerCSharp.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerCSharp.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerCSharp(QsciLexerCSharp, Lexer):
+class LexerCSharp(Lexer, QsciLexerCSharp):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerCSharp, self).__init__(parent)
+        QsciLexerCSharp.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "//"
--- a/QScintilla/Lexers/LexerContainer.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerContainer.py	Tue Apr 15 22:41:08 2014 +0200
@@ -14,7 +14,7 @@
 from .Lexer import Lexer
 
 
-class LexerContainer(QsciLexer, Lexer):
+class LexerContainer(Lexer, QsciLexer):
     """
     Subclass as a base for the implementation of custom lexers.
     """
@@ -24,7 +24,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerContainer, self).__init__(parent)
+        QsciLexer.__init__(self, parent)
         Lexer.__init__(self)
         
         self.editor = parent
--- a/QScintilla/Lexers/LexerD.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerD.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerD(QsciLexerD, Lexer):
+class LexerD(Lexer, QsciLexerD):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerD, self).__init__(parent)
+        QsciLexerD.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "//"
--- a/QScintilla/Lexers/LexerDiff.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerDiff.py	Tue Apr 15 22:41:08 2014 +0200
@@ -14,7 +14,7 @@
 from .Lexer import Lexer
 
 
-class LexerDiff(QsciLexerDiff, Lexer):
+class LexerDiff(Lexer, QsciLexerDiff):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -24,7 +24,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerDiff, self).__init__(parent)
+        QsciLexerDiff.__init__(self, parent)
         Lexer.__init__(self)
     
     def isCommentStyle(self, style):
--- a/QScintilla/Lexers/LexerFortran.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerFortran.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerFortran(QsciLexerFortran, Lexer):
+class LexerFortran(Lexer, QsciLexerFortran):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerFortran, self).__init__(parent)
+        QsciLexerFortran.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "!"
--- a/QScintilla/Lexers/LexerFortran77.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerFortran77.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerFortran77(QsciLexerFortran77, Lexer):
+class LexerFortran77(Lexer, QsciLexerFortran77):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerFortran77, self).__init__(parent)
+        QsciLexerFortran77.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "c"
--- a/QScintilla/Lexers/LexerHTML.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerHTML.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerHTML(QsciLexerHTML, Lexer):
+class LexerHTML(Lexer, QsciLexerHTML):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerHTML, self).__init__(parent)
+        QsciLexerHTML.__init__(self, parent)
         Lexer.__init__(self)
         
         self.streamCommentString = {
--- a/QScintilla/Lexers/LexerIDL.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerIDL.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerIDL(QsciLexerIDL, Lexer):
+class LexerIDL(Lexer, QsciLexerIDL):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerIDL, self).__init__(parent)
+        QsciLexerIDL.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "//"
--- a/QScintilla/Lexers/LexerJava.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerJava.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerJava(QsciLexerJava, Lexer):
+class LexerJava(Lexer, QsciLexerJava):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerJava, self).__init__(parent)
+        QsciLexerJava.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "//"
--- a/QScintilla/Lexers/LexerJavaScript.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerJavaScript.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerJavaScript(QsciLexerJavaScript, Lexer):
+class LexerJavaScript(Lexer, QsciLexerJavaScript):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerJavaScript, self).__init__(parent)
+        QsciLexerJavaScript.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "//"
--- a/QScintilla/Lexers/LexerLua.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerLua.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerLua(QsciLexerLua, Lexer):
+class LexerLua(Lexer, QsciLexerLua):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerLua, self).__init__(parent)
+        QsciLexerLua.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "--"
--- a/QScintilla/Lexers/LexerMakefile.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerMakefile.py	Tue Apr 15 22:41:08 2014 +0200
@@ -14,7 +14,7 @@
 from .Lexer import Lexer
 
 
-class LexerMakefile(QsciLexerMakefile, Lexer):
+class LexerMakefile(Lexer, QsciLexerMakefile):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -24,7 +24,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerMakefile, self).__init__(parent)
+        QsciLexerMakefile.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "#"
--- a/QScintilla/Lexers/LexerMatlab.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerMatlab.py	Tue Apr 15 22:41:08 2014 +0200
@@ -14,7 +14,7 @@
 from .Lexer import Lexer
 
 
-class LexerMatlab(QsciLexerMatlab, Lexer):
+class LexerMatlab(Lexer, QsciLexerMatlab):
     """
     Subclass to implement some additional lexer dependent methods.
     """
@@ -24,7 +24,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerMatlab, self).__init__(parent)
+        QsciLexerMatlab.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "%~"
--- a/QScintilla/Lexers/LexerOctave.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerOctave.py	Tue Apr 15 22:41:08 2014 +0200
@@ -14,7 +14,7 @@
 from .Lexer import Lexer
 
 
-class LexerOctave(QsciLexerOctave, Lexer):
+class LexerOctave(Lexer, QsciLexerOctave):
     """
     Subclass to implement some additional lexer dependent methods.
     """
@@ -24,7 +24,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerOctave, self).__init__(parent)
+        QsciLexerOctave.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "#"
--- a/QScintilla/Lexers/LexerPOV.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerPOV.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerPOV(QsciLexerPOV, Lexer):
+class LexerPOV(Lexer, QsciLexerPOV):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerPOV, self).__init__(parent)
+        QsciLexerPOV.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "//"
--- a/QScintilla/Lexers/LexerPascal.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerPascal.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerPascal(QsciLexerPascal, Lexer):
+class LexerPascal(Lexer, QsciLexerPascal):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerPascal, self).__init__(parent)
+        QsciLexerPascal.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "//"
--- a/QScintilla/Lexers/LexerPerl.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerPerl.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerPerl(QsciLexerPerl, Lexer):
+class LexerPerl(Lexer, QsciLexerPerl):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerPerl, self).__init__(parent)
+        QsciLexerPerl.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "#"
--- a/QScintilla/Lexers/LexerPostScript.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerPostScript.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerPostScript(QsciLexerPostScript, Lexer):
+class LexerPostScript(Lexer, QsciLexerPostScript):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerPostScript, self).__init__(parent)
+        QsciLexerPostScript.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "%"
--- a/QScintilla/Lexers/LexerProperties.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerProperties.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerProperties(QsciLexerProperties, Lexer):
+class LexerProperties(Lexer, QsciLexerProperties):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerProperties, self).__init__(parent)
+        QsciLexerProperties.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "#"
--- a/QScintilla/Lexers/LexerPython.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerPython.py	Tue Apr 15 22:41:08 2014 +0200
@@ -17,7 +17,7 @@
 import Preferences
 
 
-class LexerPython(QsciLexerPython, Lexer):
+class LexerPython(Lexer, QsciLexerPython):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -28,7 +28,7 @@
         @param variant name of the language variant (string)
         @param parent parent widget of this lexer
         """
-        super(LexerPython, self).__init__(parent)
+        QsciLexerPython.__init__(self, parent)
         Lexer.__init__(self)
         
         self.variant = variant
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QScintilla/Lexers/LexerQSS.py	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,160 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2005 - 2014 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a QSS lexer with some additional methods.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt4.Qsci import QsciLexerCSS
+
+from .Lexer import Lexer
+import Preferences
+
+
+class LexerQSS(Lexer, QsciLexerCSS):
+    """
+    Subclass to implement some additional lexer dependent methods.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent parent widget of this lexer
+        """
+        QsciLexerCSS.__init__(self, parent)
+        Lexer.__init__(self)
+        
+        self.commentString = "#"
+        self.streamCommentString = {
+            'start': '/* ',
+            'end': ' */'
+        }
+    
+    def initProperties(self):
+        """
+        Public slot to initialize the properties.
+        """
+        self.setFoldComments(Preferences.getEditor("CssFoldComment"))
+        self.setFoldCompact(Preferences.getEditor("AllFoldCompact"))
+        try:
+            self.setHSSLanguage(
+                Preferences.getEditor("CssHssSupport"))
+            self.setLessLanguage(
+                Preferences.getEditor("CssLessSupport"))
+            self.setSCSSLanguage(
+                Preferences.getEditor("CssSassySupport"))
+        except AttributeError:
+            pass
+    
+    def isCommentStyle(self, style):
+        """
+        Public method to check, if a style is a comment style.
+        
+        @param style style to check (integer)
+        @return flag indicating a comment style (boolean)
+        """
+        return style in [QsciLexerCSS.Comment]
+    
+    def isStringStyle(self, style):
+        """
+        Public method to check, if a style is a string style.
+        
+        @param style style to check (integer)
+        @return flag indicating a string style (boolean)
+        """
+        return style in [QsciLexerCSS.DoubleQuotedString,
+                         QsciLexerCSS.SingleQuotedString]
+    
+    def defaultKeywords(self, kwSet):
+        """
+        Public method to get the default keywords.
+        
+        @param kwSet number of the keyword set (integer)
+        @return string giving the keywords (string) or None
+        """
+        if kwSet == 1:
+            return "alternate-background-color background background-color" \
+                " background-image background-repeat background-position" \
+                " background-attachment background-clip background-origin" \
+                " border border-top border-right border-bottom border-left" \
+                " border-color border-top-color border-right-color" \
+                " border-bottom-color border-left-color border-image" \
+                " border-radius border-top-left-radius" \
+                " border-top-right-radius border-bottom-right-radius" \
+                " border-bottom-left-radius border-style border-top-style" \
+                " border-right-style border-bottom-style border-left-style" \
+                " border-width border-top-width border-right-width" \
+                " border-bottom-width border-left-width bottom button-layout" \
+                " color dialogbuttonbox-buttons-have-icons font font-family" \
+                " font-size font-style font-weight gridline-color" \
+                " height icon-size image image-position left" \
+                " lineedit-password-character margin margin-top margin-right" \
+                " margin-bottom margin-left max-height max-width" \
+                " messagebox-text-interaction-flags min-height min-width" \
+                " opacity outline padding padding-top padding-right" \
+                " padding-bottom padding-left" \
+                " paint-alternating-row-colors-for-empty-area" \
+                " position right selection-background-color selection-color" \
+                " show-decoration-selected spacing subcontrol-origin" \
+                " subcontrol-position text-align text-decoration" \
+                " top width" \
+                "" \
+                " backward-icon cd-icon computer-icon desktop-icon" \
+                " dialog-apply-icon dialog-cancel-icon dialog-close-icon" \
+                " dialog-discard-icon dialog-help-icon dialog-no-icon" \
+                " dialog-ok-icon dialog-open-icon dialog-reset-icon" \
+                " dialog-save-icon dialog-yes-icon directory-closed-icon" \
+                " directory-icon directory-link-icon directory-open-icon" \
+                " dockwidget-close-icon downarrow-icon dvd-icon file-icon" \
+                " file-link-icon filedialog-contentsview-icon" \
+                " filedialog-detailedview-icon filedialog-end-icon" \
+                " filedialog-infoview-icon filedialog-listview-icon" \
+                " filedialog-new-directory-icon" \
+                " filedialog-parent-directory-icon filedialog-start-icon" \
+                " floppy-icon forward-icon harddisk-icon home-icon" \
+                " leftarrow-icon messagebox-critical-icon" \
+                " messagebox-information-icon messagebox-question-icon" \
+                " messagebox-warning-icon network-icon rightarrow-icon" \
+                " titlebar-contexthelp-icon titlebar-maximize-icon" \
+                " titlebar-menu-icon titlebar-minimize-icon" \
+                " titlebar-normal-icon titlebar-shade-icon" \
+                " titlebar-unshade-icon trash-icon uparrow-icon"
+        elif kwSet == 2:
+            return "active adjoins-item alternate bottom checked closable" \
+                " closed default disabled editable edit-focus enabled" \
+                " exclusive first flat floatable focus has-children" \
+                " has-siblings horizontal hover indeterminate last left" \
+                " maximized middle minimized movable no-frame" \
+                " non-exclusive off on only-one open next-selected" \
+                " pressed previous-selected read-only right selected top" \
+                " unchecked vertical window" \
+                "" \
+                " add-line add-page branch chunk close-button corner" \
+                " down-arrow down-button drop-down float-button groove" \
+                " indicator handle icon item left-arrow left-corner" \
+                " menu-arrow menu-button menu-indicator right-arrow" \
+                " pane right-corner scroller section separator sub-line" \
+                " sub-page tab tab-bar tear tearoff text title up-arrow" \
+                " up-button"
+        
+        return None
+    
+    def language(self):
+        """
+        Public method to return the lexer language.
+        
+        @return lexer language (string)
+        """
+        return "QSS"
+    
+    def lexerName(self):
+        """
+        Public method to return the lexer name.
+        
+        @return lexer name (string)
+        """
+        return "QSS"
--- a/QScintilla/Lexers/LexerRuby.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerRuby.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerRuby(QsciLexerRuby, Lexer):
+class LexerRuby(Lexer, QsciLexerRuby):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerRuby, self).__init__(parent)
+        QsciLexerRuby.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "#"
--- a/QScintilla/Lexers/LexerSQL.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerSQL.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerSQL(QsciLexerSQL, Lexer):
+class LexerSQL(Lexer, QsciLexerSQL):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerSQL, self).__init__(parent)
+        QsciLexerSQL.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "--"
--- a/QScintilla/Lexers/LexerTCL.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerTCL.py	Tue Apr 15 22:41:08 2014 +0200
@@ -16,7 +16,7 @@
 import Preferences
 
 
-class LexerTCL(QsciLexerTCL, Lexer):
+class LexerTCL(Lexer, QsciLexerTCL):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -26,7 +26,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerTCL, self).__init__(parent)
+        QsciLexerTCL.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "#"
--- a/QScintilla/Lexers/LexerTeX.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerTeX.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerTeX(QsciLexerTeX, Lexer):
+class LexerTeX(Lexer, QsciLexerTeX):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerTeX, self).__init__(parent)
+        QsciLexerTeX.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "%"
--- a/QScintilla/Lexers/LexerVHDL.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerVHDL.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerVHDL(QsciLexerVHDL, Lexer):
+class LexerVHDL(Lexer, QsciLexerVHDL):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerVHDL, self).__init__(parent)
+        QsciLexerVHDL.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "--"
--- a/QScintilla/Lexers/LexerXML.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerXML.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerXML(QsciLexerXML, Lexer):
+class LexerXML(Lexer, QsciLexerXML):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerXML, self).__init__(parent)
+        QsciLexerXML.__init__(self, parent)
         Lexer.__init__(self)
         
         self.streamCommentString = {
--- a/QScintilla/Lexers/LexerYAML.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/LexerYAML.py	Tue Apr 15 22:41:08 2014 +0200
@@ -15,7 +15,7 @@
 import Preferences
 
 
-class LexerYAML(QsciLexerYAML, Lexer):
+class LexerYAML(Lexer, QsciLexerYAML):
     """
     Subclass to implement some additional lexer dependant methods.
     """
@@ -25,7 +25,7 @@
         
         @param parent parent widget of this lexer
         """
-        super(LexerYAML, self).__init__(parent)
+        QsciLexerYAML.__init__(self, parent)
         Lexer.__init__(self)
         
         self.commentString = "---"
--- a/QScintilla/Lexers/__init__.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/Lexers/__init__.py	Tue Apr 15 22:41:08 2014 +0200
@@ -126,6 +126,8 @@
                     "lexerPython.png"],
         "Python3": [QApplication.translate('Lexers', "Python3"), 'dummy.py',
                     "lexerPython3.png"],
+        "QSS": [QApplication.translate('Lexers', "QSS"), 'dummy.qss',
+                "lexerCSS.png"],
         "Ruby": [QApplication.translate('Lexers', "Ruby"), 'dummy.rb',
                  "lexerRuby.png"],
         "SQL": [QApplication.translate('Lexers', "SQL"), 'dummy.sql',
@@ -286,6 +288,9 @@
             elif language == "Octave":
                 from .LexerOctave import LexerOctave
                 return LexerOctave(parent)
+            elif language == "QSS":
+                from .LexerQSS import LexerQSS
+                return LexerQSS(parent)
             
             elif language in LexerRegistry:
                 return LexerRegistry[language][2](parent)
@@ -687,7 +692,7 @@
         '*.ctest': "CMake",
         '*.ctest.in': "CMake",
         '*.css': "CSS",
-        '*.qss': "CSS",
+        '*.qss': "QSS",
         "*.d": "D",
         "*.di": "D",
         "*.diff": "Diff",
--- a/QScintilla/QsciScintillaCompat.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/QScintilla/QsciScintillaCompat.py	Tue Apr 15 22:41:08 2014 +0200
@@ -266,6 +266,8 @@
                 utf8Len = 3
             elif (ch[0] & 0xC0) == 0xC0:
                 utf8Len = 2
+            else:
+                utf8Len = 1
             while len(ch) < utf8Len:
                 pos += 1
                 ch += self.byteAt(pos)
--- a/README-PyXML.txt	Sun Apr 13 15:45:57 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-PyXML has a problem calculating the datasize of the data read from an XML file.
-In order to correct this, make the adjustment shown below.
-
-Near the end of method parse_xml_decl (in PyXML 0.8.3 this is at line
-723) in _xmlplus.parsers.xmlproc.xmlutils:
-
-        try:
-            self.data = self.charset_converter(self.data)
-            self.datasize = len(self.data)  ### ADD THIS LINE
-        except UnicodeError, e:
-            self._handle_decoding_error(self.data, e)
-        self.input_encoding = enc1
-
-Here is the change as a diff.
-
---- _xmlplus/parsers/xmlproc/xmlutils.py.orig        2006-11-13 11:30:07.768059659 +0100
-+++ _xmlplus/parsers/xmlproc/xmlutils.py     2006-11-13 11:30:38.871925067 +0100
-@@ -720,6 +720,7 @@ class XMLCommonParser(EntityParser):
-             # to the recoding.
-             try:
-                 self.data = self.charset_converter(self.data)
-+                self.datasize = len(self.data)
-             except UnicodeError, e:
-                 self._handle_decoding_error(self.data, e)
-             self.input_encoding = enc1
--- a/Tasks/TaskViewer.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Tasks/TaskViewer.py	Tue Apr 15 22:41:08 2014 +0200
@@ -548,6 +548,7 @@
             self.tr("Extracting project tasks..."),
             self.tr("Abort"), 0, len(files), self.tr("%v/%m Files"))
         progress.setMinimumDuration(0)
+        progress.setWindowTitle(self.tr("Tasks"))
         count = 0
         
         for file in files:
--- a/Templates/TemplatePropertiesDialog.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/Templates/TemplatePropertiesDialog.py	Tue Apr 15 22:41:08 2014 +0200
@@ -16,6 +16,8 @@
 
 from E5Gui import E5MessageBox
 
+import Preferences
+
 
 class TemplatePropertiesDialog(QDialog, Ui_TemplatePropertiesDialog):
     """
@@ -33,6 +35,8 @@
         super(TemplatePropertiesDialog, self).__init__(parent)
         self.setupUi(self)
         
+        self.templateEdit.setFont(Preferences.getTemplates("EditorFont"))
+        
         if not groupMode:
             self.nameEdit.setWhatsThis(self.tr(
                 """<b>Template name<b><p>Enter the name of the template."""
--- a/Templates/TemplatePropertiesDialog.ui	Sun Apr 13 15:45:57 2014 +0200
+++ b/Templates/TemplatePropertiesDialog.ui	Tue Apr 15 22:41:08 2014 +0200
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>TemplatePropertiesDialog</class>
- <widget class="QDialog" name="TemplatePropertiesDialog" >
-  <property name="geometry" >
+ <widget class="QDialog" name="TemplatePropertiesDialog">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
@@ -9,106 +10,112 @@
     <height>323</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Template Properties</string>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout" >
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <layout class="QGridLayout" name="gridLayout" >
-     <item row="0" column="0" >
-      <widget class="QLabel" name="textLabel1" >
-       <property name="text" >
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <widget class="QLabel" name="textLabel1">
+       <property name="text">
         <string>Name:</string>
        </property>
       </widget>
      </item>
-     <item row="0" column="1" >
-      <widget class="QLineEdit" name="nameEdit" >
-       <property name="toolTip" >
+     <item row="0" column="1">
+      <widget class="QLineEdit" name="nameEdit">
+       <property name="toolTip">
         <string>Enter the name of the template/group. Templates are autocompleted upon this name.</string>
        </property>
       </widget>
      </item>
-     <item row="1" column="0" >
-      <widget class="QLabel" name="descriptionLabel" >
-       <property name="text" >
+     <item row="1" column="0">
+      <widget class="QLabel" name="descriptionLabel">
+       <property name="text">
         <string>Description:</string>
        </property>
       </widget>
      </item>
-     <item row="1" column="1" >
-      <widget class="QLineEdit" name="descriptionEdit" >
-       <property name="toolTip" >
+     <item row="1" column="1">
+      <widget class="QLineEdit" name="descriptionEdit">
+       <property name="toolTip">
         <string>Enter a description for the template</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="0" >
-      <widget class="QLabel" name="groupLabel" >
-       <property name="text" >
+     <item row="2" column="0">
+      <widget class="QLabel" name="groupLabel">
+       <property name="text">
         <string>Group:</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="1" >
-      <widget class="QComboBox" name="groupCombo" >
-       <property name="toolTip" >
+     <item row="2" column="1">
+      <widget class="QComboBox" name="groupCombo">
+       <property name="toolTip">
         <string/>
        </property>
       </widget>
      </item>
-     <item row="3" column="0" >
-      <widget class="QLabel" name="templateLabel" >
-       <property name="text" >
+     <item row="3" column="0">
+      <widget class="QLabel" name="templateLabel">
+       <property name="text">
         <string>Template:</string>
        </property>
-       <property name="alignment" >
+       <property name="alignment">
         <set>Qt::AlignTop</set>
        </property>
       </widget>
      </item>
-     <item rowspan="3" row="3" column="1" >
-      <widget class="QTextEdit" name="templateEdit" >
-       <property name="toolTip" >
+     <item row="3" column="1" rowspan="3">
+      <widget class="QTextEdit" name="templateEdit">
+       <property name="font">
+        <font>
+         <family>Monospace</family>
+         <pointsize>9</pointsize>
+        </font>
+       </property>
+       <property name="toolTip">
         <string>Enter the text of the template</string>
        </property>
-       <property name="whatsThis" >
-        <string>&lt;b>Template Text&lt;/b>
-&lt;p>Enter the template text in this area. Every occurrence of $VAR$ will be replaced
+       <property name="whatsThis">
+        <string>&lt;b&gt;Template Text&lt;/b&gt;
+&lt;p&gt;Enter the template text in this area. Every occurrence of $VAR$ will be replaced
 by the associated text when the template is applied.  Predefined variables may be used in the template. The separator character might
-be changed via the preferences dialog.&lt;/p>
-&lt;p>Press the help button for more information.&lt;/p></string>
+be changed via the preferences dialog.&lt;/p&gt;
+&lt;p&gt;Press the help button for more information.&lt;/p&gt;</string>
        </property>
-       <property name="lineWrapMode" >
+       <property name="lineWrapMode">
         <enum>QTextEdit::NoWrap</enum>
        </property>
-       <property name="acceptRichText" >
+       <property name="acceptRichText">
         <bool>false</bool>
        </property>
       </widget>
      </item>
-     <item row="4" column="0" >
-      <widget class="QPushButton" name="helpButton" >
-       <property name="text" >
+     <item row="4" column="0">
+      <widget class="QPushButton" name="helpButton">
+       <property name="text">
         <string>&amp;Help</string>
        </property>
-       <property name="shortcut" >
+       <property name="shortcut">
         <string>Alt+H</string>
        </property>
       </widget>
      </item>
-     <item row="5" column="0" >
+     <item row="5" column="0">
       <spacer>
-       <property name="orientation" >
+       <property name="orientation">
         <enum>Qt::Vertical</enum>
        </property>
-       <property name="sizeType" >
+       <property name="sizeType">
         <enum>QSizePolicy::Expanding</enum>
        </property>
-       <property name="sizeHint" stdset="0" >
+       <property name="sizeHint" stdset="0">
         <size>
          <width>84</width>
          <height>98</height>
@@ -119,18 +126,18 @@
     </layout>
    </item>
    <item>
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
+     <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
+ <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>nameEdit</tabstop>
@@ -148,11 +155,11 @@
    <receiver>TemplatePropertiesDialog</receiver>
    <slot>reject()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>80</x>
      <y>307</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>80</x>
      <y>319</y>
     </hint>
@@ -164,11 +171,11 @@
    <receiver>TemplatePropertiesDialog</receiver>
    <slot>accept()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>45</x>
      <y>300</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>41</x>
      <y>324</y>
     </hint>
--- a/UI/Browser.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/UI/Browser.py	Tue Apr 15 22:41:08 2014 +0200
@@ -608,8 +608,8 @@
         @param filter list of classes to check against
         @return a dictionary containing the counts of items belonging
             to the individual filter classes. The keys of the dictionary
-            are the unicode representation of the classes given in the
-            filter (i.e. unicode(filterClass)). The dictionary contains
+            are the string representation of the classes given in the
+            filter (i.e. str(filterClass)). The dictionary contains
             an additional entry with key "sum", that stores the sum of
             all selected entries fulfilling the filter criteria.
         """
--- a/UI/NotificationWidget.ui	Sun Apr 13 15:45:57 2014 +0200
+++ b/UI/NotificationWidget.ui	Tue Apr 15 22:41:08 2014 +0200
@@ -52,6 +52,12 @@
             <verstretch>0</verstretch>
            </sizepolicy>
           </property>
+          <property name="minimumSize">
+           <size>
+            <width>335</width>
+            <height>0</height>
+           </size>
+          </property>
           <property name="font">
            <font>
             <weight>75</weight>
@@ -65,6 +71,12 @@
         </item>
         <item>
          <widget class="QLabel" name="text">
+          <property name="minimumSize">
+           <size>
+            <width>335</width>
+            <height>0</height>
+           </size>
+          </property>
           <property name="text">
            <string/>
           </property>
--- a/UI/Previewer.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/UI/Previewer.py	Tue Apr 15 22:41:08 2014 +0200
@@ -10,24 +10,17 @@
 from __future__ import unicode_literals
 
 import os
-import threading
-import re
 
-from PyQt4.QtCore import pyqtSlot, pyqtSignal, Qt, QTimer, QSize, QUrl, QThread
-from PyQt4.QtGui import QWidget
-from PyQt4.QtWebKit import QWebPage
-
-from E5Gui.E5Application import e5App
-
-from .Ui_Previewer import Ui_Previewer
+from PyQt4.QtCore import QTimer
+from PyQt4.QtGui import QStackedWidget
 
 import Preferences
-import Utilities
 
 
-class Previewer(QWidget, Ui_Previewer):
+class Previewer(QStackedWidget):
     """
-    Class implementing a previewer widget for HTML, Markdown and ReST files.
+    Class implementing a previewer widget containing a stack of
+    specialized previewers.
     """
     def __init__(self, viewmanager, splitter, parent=None):
         """
@@ -38,29 +31,19 @@
         @param parent reference to the parent widget (QWidget)
         """
         super(Previewer, self).__init__(parent)
-        self.setupUi(self)
         
         self.__vm = viewmanager
         self.__splitter = splitter
         
         self.__firstShow = True
         
-        self.previewView.page().setLinkDelegationPolicy(
-            QWebPage.DelegateAllLinks)
+        self.__htmlPreviewer = None
+        self.__qssPreviewer = None
         
         # Don't update too often because the UI might become sluggish
         self.__typingTimer = QTimer()
         self.__typingTimer.setInterval(500)     # 500ms
-        self.__typingTimer.timeout.connect(self.__runProcessingThread)
-        
-        self.__scrollBarPositions = {}
-        self.__vScrollBarAtEnd = {}
-        self.__hScrollBarAtEnd = {}
-        
-        self.__processingThread = PreviewProcessingThread()
-        self.__processingThread.htmlReady.connect(self.__setHtml)
-
-        self.__previewedPath = None
+        self.__typingTimer.timeout.connect(self.__processEditor)
         
         self.__vm.editorChangedEd.connect(self.__editorChanged)
         self.__vm.editorLanguageChanged.connect(self.__editorLanguageChanged)
@@ -80,10 +63,6 @@
         if self.__firstShow:
             self.__splitter.restoreState(
                 Preferences.getUI("PreviewSplitterState"))
-            self.jsCheckBox.setChecked(
-                Preferences.getUI("ShowFilePreviewJS"))
-            self.ssiCheckBox.setChecked(
-                Preferences.getUI("ShowFilePreviewSSI"))
             self.__firstShow = False
         self.__typingTimer.start()
     
@@ -99,7 +78,7 @@
         Public method to perform shutdown actions.
         """
         self.__typingTimer.stop()
-        self.__processingThread.wait()
+        self.__htmlPreviewer and self.__htmlPreviewer.shutdown()
     
     def __splitterMoved(self):
         """
@@ -108,39 +87,6 @@
         state = self.__splitter.saveState()
         Preferences.setUI("PreviewSplitterState", state)
     
-    @pyqtSlot(bool)
-    def on_jsCheckBox_clicked(self, checked):
-        """
-        Private slot to enable/disable JavaScript.
-        
-        @param checked state of the checkbox (boolean)
-        """
-        Preferences.setUI("ShowFilePreviewJS", checked)
-        self.__setJavaScriptEnabled(checked)
-    
-    def __setJavaScriptEnabled(self, enable):
-        """
-        Private method to enable/disable JavaScript.
-        
-        @param enable flag indicating the enable state (boolean)
-        """
-        self.jsCheckBox.setChecked(enable)
-        
-        settings = self.previewView.settings()
-        settings.setAttribute(settings.JavascriptEnabled, enable)
-        
-        self.__runProcessingThread()
-    
-    @pyqtSlot(bool)
-    def on_ssiCheckBox_clicked(self, checked):
-        """
-        Private slot to enable/disable SSI.
-        
-        @param checked state of the checkbox (boolean)
-        """
-        Preferences.setUI("ShowFilePreviewSSI", checked)
-        self.__runProcessingThread()
-    
     def __editorChanged(self, editor):
         """
         Private slot to handle a change of the current editor.
@@ -154,7 +100,7 @@
         if Preferences.getUI("ShowFilePreview") and \
                 self.__isPreviewable(editor):
             self.show()
-            self.__runProcessingThread()
+            self.__processEditor()
         else:
             self.hide()
     
@@ -204,13 +150,14 @@
                     Preferences.getEditor("PreviewHtmlFileNameExtensions") + \
                     Preferences.getEditor(
                         "PreviewMarkdownFileNameExtensions") + \
-                    Preferences.getEditor("PreviewRestFileNameExtensions")
-            elif editor.getLanguage() == "HTML":
+                    Preferences.getEditor("PreviewRestFileNameExtensions") + \
+                    Preferences.getEditor("PreviewQssFileNameExtensions")
+            elif editor.getLanguage() in ["HTML", "QSS"]:
                 return True
         
         return False
     
-    def __runProcessingThread(self):
+    def __processEditor(self):
         """
         Private slot to schedule the processing of the current editor's text.
         """
@@ -234,311 +181,23 @@
             elif extension in \
                     Preferences.getEditor("PreviewRestFileNameExtensions"):
                 language = "ReST"
-            else:
-                self.__setHtml(fn, self.tr(
-                    "<p>No preview available for this type of file.</p>"))
-                return
-            
-            if fn:
-                project = e5App().getObject("Project")
-                if project.isProjectFile(fn):
-                    rootPath = project.getProjectPath()
-                else:
-                    rootPath = os.path.dirname(os.path.abspath(fn))
+            elif extension in \
+                    Preferences.getEditor("PreviewQssFileNameExtensions"):
+                language = "QSS"
             else:
-                rootPath = ""
-            
-            self.__processingThread.process(
-                fn, language, editor.text(),
-                self.ssiCheckBox.isChecked(), rootPath)
-
-    def __setHtml(self, filePath, html):
-        """
-        Private method to set the HTML to the view and restore the scroll bars
-        positions.
-        
-        @param filePath file path of the previewed editor (string)
-        @param html processed HTML text ready to be shown (string)
-        """
-        self.__saveScrollBarPositions()
-        self.__previewedPath = Utilities.normcasepath(
-            Utilities.fromNativeSeparators(filePath))
-        self.previewView.page().mainFrame().contentsSizeChanged.connect(
-            self.__restoreScrollBarPositions)
-        self.previewView.setHtml(html, baseUrl=QUrl.fromLocalFile(filePath))
-    
-    @pyqtSlot(str)
-    def on_previewView_titleChanged(self, title):
-        """
-        Private slot to handle a change of the title.
-        
-        @param title new title (string)
-        """
-        if title:
-            self.titleLabel.setText(self.tr("Preview - {0}").format(title))
-        else:
-            self.titleLabel.setText(self.tr("Preview"))
-    
-    def __saveScrollBarPositions(self):
-        """
-        Private method to save scroll bar positions for a previewed editor.
-        """
-        frame = self.previewView.page().mainFrame()
-        if frame.contentsSize() == QSize(0, 0):
-            return  # no valid data, nothing to save
-        
-        pos = frame.scrollPosition()
-        self.__scrollBarPositions[self.__previewedPath] = pos
-        self.__hScrollBarAtEnd[self.__previewedPath] = \
-            frame.scrollBarMaximum(Qt.Horizontal) == pos.x()
-        self.__vScrollBarAtEnd[self.__previewedPath] = \
-            frame.scrollBarMaximum(Qt.Vertical) == pos.y()
-
-    def __restoreScrollBarPositions(self):
-        """
-        Private method to restore scroll bar positions for a previewed editor.
-        """
-        try:
-            self.previewView.page().mainFrame().contentsSizeChanged.disconnect(
-                self.__restoreScrollBarPositions)
-        except TypeError:
-            # not connected, simply ignore it
-            pass
-        
-        if self.__previewedPath not in self.__scrollBarPositions:
-            return
-        
-        frame = self.previewView.page().mainFrame()
-        frame.setScrollPosition(
-            self.__scrollBarPositions[self.__previewedPath])
-        
-        if self.__hScrollBarAtEnd[self.__previewedPath]:
-            frame.setScrollBarValue(
-                Qt.Horizontal, frame.scrollBarMaximum(Qt.Horizontal))
-        
-        if self.__vScrollBarAtEnd[self.__previewedPath]:
-            frame.setScrollBarValue(
-                Qt.Vertical, frame.scrollBarMaximum(Qt.Vertical))
-    
-    @pyqtSlot(QUrl)
-    def on_previewView_linkClicked(self, url):
-        """
-        Private slot handling the clicking of a link.
-        
-        @param url url of the clicked link (QUrl)
-        """
-        e5App().getObject("UserInterface").launchHelpViewer(url.toString())
-
-
-class PreviewProcessingThread(QThread):
-    """
-    Class implementing a thread to process some text into HTML usable by the
-    previewer view.
-    
-    @signal htmlReady(str,str) emitted with the file name and processed HTML
-        to signal the availability of the processed HTML
-    """
-    htmlReady = pyqtSignal(str, str)
-    
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent object (QObject)
-        """
-        super(PreviewProcessingThread, self).__init__()
-        
-        self.__lock = threading.Lock()
-    
-    def process(self, filePath, language, text, ssiEnabled, rootPath):
-        """
-        Convert the given text to HTML.
-        
-        @param filePath file path of the text (string)
-        @param language language of the text (string)
-        @param text text to be processed (string)
-        @param ssiEnabled flag indicating to do some (limited) SSI processing
-            (boolean)
-        @param rootPath root path to be used for SSI processing (str)
-        """
-        with self.__lock:
-            self.__filePath = filePath
-            self.__language = language
-            self.__text = text
-            self.__ssiEnabled = ssiEnabled
-            self.__rootPath = rootPath
-            self.__haveData = True
-            if not self.isRunning():
-                self.start(QThread.LowPriority)
-    
-    def run(self):
-        """
-        Thread function to convert the stored data.
-        """
-        while True:
-            # exits with break
-            with self.__lock:
-                filePath = self.__filePath
-                language = self.__language
-                text = self.__text
-                ssiEnabled = self.__ssiEnabled
-                rootPath = self.__rootPath
-                self.__haveData = False
-            
-            html = self.__getHtml(language, text, ssiEnabled, filePath,
-                                  rootPath)
+                language = ""
             
-            with self.__lock:
-                if not self.__haveData:
-                    self.htmlReady.emit(filePath, html)
-                    break
-                # else - next iteration
-    
-    def __getHtml(self, language, text, ssiEnabled, filePath, rootPath):
-        """
-        Private method to process the given text depending upon the given
-        language.
-        
-        @param language language of the text (string)
-        @param text to be processed (string)
-        @param ssiEnabled flag indicating to do some (limited) SSI processing
-            (boolean)
-        @param filePath file path of the text (string)
-        @param rootPath root path to be used for SSI processing (str)
-        @return processed HTML text (string)
-        """
-        if language == "HTML":
-            if ssiEnabled:
-                return self.__processSSI(text, filePath, rootPath)
-            else:
-                return text
-        elif language == "Markdown":
-            return self.__convertMarkdown(text)
-        elif language == "ReST":
-            return self.__convertReST(text)
-        else:
-            return self.tr(
-                "<p>No preview available for this type of file.</p>")
-    
-    def __processSSI(self, txt, filename, root):
-        """
-        Private method to process the given text for SSI statements.
-        
-        Note: Only a limited subset of SSI statements are supported.
-        
-        @param txt text to be processed (string)
-        @param filename name of the file associated with the given text
-            (string)
-        @param root directory of the document root (string)
-        @return processed HTML (string)
-        """
-        if not filename:
-            return txt
-        
-        # SSI include
-        incRe = re.compile(
-            r"""<!--#include[ \t]+(virtual|file)=[\"']([^\"']+)[\"']\s*-->""",
-            re.IGNORECASE)
-        baseDir = os.path.dirname(os.path.abspath(filename))
-        docRoot = root if root != "" else baseDir
-        while True:
-            incMatch = incRe.search(txt)
-            if incMatch is None:
-                break
-            
-            if incMatch.group(1) == "virtual":
-                incFile = Utilities.normjoinpath(docRoot, incMatch.group(2))
-            elif incMatch.group(1) == "file":
-                incFile = Utilities.normjoinpath(baseDir, incMatch.group(2))
-            else:
-                incFile = ""
-            if os.path.exists(incFile):
-                try:
-                    f = open(incFile, "r")
-                    incTxt = f.read()
-                    f.close()
-                except (IOError, OSError):
-                    # remove SSI include
-                    incTxt = ""
-            else:
-                # remove SSI include
-                incTxt = ""
-            txt = txt[:incMatch.start(0)] + incTxt + txt[incMatch.end(0):]
-        
-        return txt
-    
-    def __convertReST(self, text):
-        """
-        Private method to convert ReST text into HTML.
-        
-        @param text text to be processed (string)
-        @return processed HTML (string)
-        """
-        try:
-            import docutils.core    # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
-        except ImportError:
-            return self.tr(
-                """<p>ReStructuredText preview requires the"""
-                """ <b>python-docutils</b> package.<br/>Install it with"""
-                """ your package manager or see"""
-                """ <a href="http://pypi.python.org/pypi/docutils">"""
-                """this page.</a></p>""")
-        
-        return docutils.core.publish_string(text, writer_name='html')\
-            .decode("utf-8")
-    
-    def __convertMarkdown(self, text):
-        """
-        Private method to convert Markdown text into HTML.
-        
-        @param text text to be processed (string)
-        @return processed HTML (string)
-        """
-        try:
-            import markdown     # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
-        except ImportError:
-            return self.tr(
-                """<p>Markdown preview requires the <b>python-markdown</b> """
-                """package.<br/>Install it with your package manager or see """
-                """<a href="http://pythonhosted.org/Markdown/install.html">"""
-                """installation instructions.</a></p>""")
-        
-        try:
-            import mdx_mathjax  # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
-        except ImportError:
-            #mathjax doesn't require import statement if installed as extension
-            pass
-
-        extensions = ['fenced_code', 'nl2br', 'extra']
-        
-        # version 2.0 supports only extension names, not instances
-        if markdown.version_info[0] > 2 or \
-                (markdown.version_info[0] == 2 and
-                 markdown.version_info[1] > 0):
-            class _StrikeThroughExtension(markdown.Extension):
-                """
-                Class is placed here, because it depends on imported markdown,
-                and markdown import is lazy.
-                
-                (see http://achinghead.com/
-                python-markdown-adding-insert-delete.html this page for
-                details)
-                """
-                DEL_RE = r'(~~)(.*?)~~'
-
-                def extendMarkdown(self, md, md_globals):
-                    # Create the del pattern
-                    del_tag = markdown.inlinepatterns.SimpleTagPattern(
-                        self.DEL_RE, 'del')
-                    # Insert del pattern into markdown parser
-                    md.inlinePatterns.add('del', del_tag, '>not_strong')
-            
-            extensions.append(_StrikeThroughExtension())
-
-        try:
-            return markdown.markdown(text,  extensions + ['mathjax'])
-        except (ImportError, ValueError):
-            # markdown raises ValueError or ImportError, depends on version
-            # It is not clear, how to distinguish missing mathjax from other
-            # errors. So keep going without mathjax.
-            return markdown.markdown(text, extensions)
+            if language in ["HTML", "Markdown", "ReST"]:
+                if self.__htmlPreviewer is None:
+                    from .Previewers.PreviewerHTML import PreviewerHTML
+                    self.__htmlPreviewer = PreviewerHTML()
+                    self.addWidget(self.__htmlPreviewer)
+                self.setCurrentWidget(self.__htmlPreviewer)
+                self.__htmlPreviewer.processEditor(editor)
+            elif language == "QSS":
+                if self.__qssPreviewer is None:
+                    from .Previewers.PreviewerQSS import PreviewerQSS
+                    self.__qssPreviewer = PreviewerQSS()
+                    self.addWidget(self.__qssPreviewer)
+                self.setCurrentWidget(self.__qssPreviewer)
+                self.__qssPreviewer.processEditor(editor)
--- a/UI/Previewer.ui	Sun Apr 13 15:45:57 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>Previewer</class>
- <widget class="QWidget" name="Previewer">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>400</width>
-    <height>400</height>
-   </rect>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QLabel" name="titleLabel">
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-     <property name="textInteractionFlags">
-      <set>Qt::NoTextInteraction</set>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QWebView" name="previewView">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="contextMenuPolicy">
-      <enum>Qt::NoContextMenu</enum>
-     </property>
-     <property name="url">
-      <url>
-       <string>about:blank</string>
-      </url>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QCheckBox" name="jsCheckBox">
-     <property name="toolTip">
-      <string>Select to enable JavaScript for HTML previews</string>
-     </property>
-     <property name="text">
-      <string>Enable JavaScript</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QCheckBox" name="ssiCheckBox">
-     <property name="toolTip">
-      <string>Select to enable support for Server Side Includes</string>
-     </property>
-     <property name="text">
-      <string>Enable Server Side Includes</string>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>QWebView</class>
-   <extends>QWidget</extends>
-   <header>QtWebKit/QWebView</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UI/Previewers/PreviewerHTML.py	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,433 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a previewer widget for HTML, Markdown and ReST files.
+"""
+
+from __future__ import unicode_literals
+
+import os
+import threading
+import re
+
+from PyQt4.QtCore import pyqtSlot, pyqtSignal, Qt, QUrl, QSize, QThread
+from PyQt4.QtGui import QWidget
+from PyQt4.QtWebKit import QWebPage
+
+from E5Gui.E5Application import e5App
+
+from .Ui_PreviewerHTML import Ui_PreviewerHTML
+
+import Utilities
+import Preferences
+
+
+class PreviewerHTML(QWidget, Ui_PreviewerHTML):
+    """
+    Class implementing a previewer widget for HTML, Markdown and ReST files.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super(PreviewerHTML, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.jsCheckBox.setChecked(
+            Preferences.getUI("ShowFilePreviewJS"))
+        self.ssiCheckBox.setChecked(
+            Preferences.getUI("ShowFilePreviewSSI"))
+        
+        self.previewView.page().setLinkDelegationPolicy(
+            QWebPage.DelegateAllLinks)
+        
+        self.__scrollBarPositions = {}
+        self.__vScrollBarAtEnd = {}
+        self.__hScrollBarAtEnd = {}
+        
+        self.__processingThread = PreviewProcessingThread()
+        self.__processingThread.htmlReady.connect(self.__setHtml)
+
+        self.__previewedPath = None
+        self.__previewedEditor = None
+    
+    def shutdown(self):
+        """
+        Public method to perform shutdown actions.
+        """
+        self.__processingThread.wait()
+    
+    @pyqtSlot(bool)
+    def on_jsCheckBox_clicked(self, checked):
+        """
+        Private slot to enable/disable JavaScript.
+        
+        @param checked state of the checkbox (boolean)
+        """
+        Preferences.setUI("ShowFilePreviewJS", checked)
+        self.__setJavaScriptEnabled(checked)
+    
+    def __setJavaScriptEnabled(self, enable):
+        """
+        Private method to enable/disable JavaScript.
+        
+        @param enable flag indicating the enable state (boolean)
+        """
+        self.jsCheckBox.setChecked(enable)
+        
+        settings = self.previewView.settings()
+        settings.setAttribute(settings.JavascriptEnabled, enable)
+        
+        self.processEditor()
+    
+    @pyqtSlot(bool)
+    def on_ssiCheckBox_clicked(self, checked):
+        """
+        Private slot to enable/disable SSI.
+        
+        @param checked state of the checkbox (boolean)
+        """
+        Preferences.setUI("ShowFilePreviewSSI", checked)
+        self.processEditor()
+    
+    def processEditor(self, editor=None):
+        """
+        Private slot to process an editor's text.
+        
+        @param editor editor to be processed (Editor)
+        """
+        if editor is None:
+            editor = self.__previewedEditor
+        else:
+            self.__previewedEditor = editor
+        
+        if editor is not None:
+            fn = editor.getFileName()
+            
+            if fn:
+                extension = os.path.normcase(os.path.splitext(fn)[1][1:])
+            else:
+                extension = ""
+            if extension in \
+                Preferences.getEditor("PreviewHtmlFileNameExtensions") or \
+               editor.getLanguage() == "HTML":
+                language = "HTML"
+            elif extension in \
+                    Preferences.getEditor("PreviewMarkdownFileNameExtensions"):
+                language = "Markdown"
+            elif extension in \
+                    Preferences.getEditor("PreviewRestFileNameExtensions"):
+                language = "ReST"
+            else:
+                self.__setHtml(fn, self.tr(
+                    "<p>No preview available for this type of file.</p>"))
+                return
+            
+            if fn:
+                project = e5App().getObject("Project")
+                if project.isProjectFile(fn):
+                    rootPath = project.getProjectPath()
+                else:
+                    rootPath = os.path.dirname(os.path.abspath(fn))
+            else:
+                rootPath = ""
+            
+            self.__processingThread.process(
+                fn, language, editor.text(),
+                self.ssiCheckBox.isChecked(), rootPath)
+
+    def __setHtml(self, filePath, html):
+        """
+        Private method to set the HTML to the view and restore the scroll bars
+        positions.
+        
+        @param filePath file path of the previewed editor (string)
+        @param html processed HTML text ready to be shown (string)
+        """
+        self.__saveScrollBarPositions()
+        self.__previewedPath = Utilities.normcasepath(
+            Utilities.fromNativeSeparators(filePath))
+        self.previewView.page().mainFrame().contentsSizeChanged.connect(
+            self.__restoreScrollBarPositions)
+        self.previewView.setHtml(html, baseUrl=QUrl.fromLocalFile(filePath))
+    
+    @pyqtSlot(str)
+    def on_previewView_titleChanged(self, title):
+        """
+        Private slot to handle a change of the title.
+        
+        @param title new title (string)
+        """
+        if title:
+            self.titleLabel.setText(self.tr("Preview - {0}").format(title))
+        else:
+            self.titleLabel.setText(self.tr("Preview"))
+    
+    def __saveScrollBarPositions(self):
+        """
+        Private method to save scroll bar positions for a previewed editor.
+        """
+        frame = self.previewView.page().mainFrame()
+        if frame.contentsSize() == QSize(0, 0):
+            return  # no valid data, nothing to save
+        
+        pos = frame.scrollPosition()
+        self.__scrollBarPositions[self.__previewedPath] = pos
+        self.__hScrollBarAtEnd[self.__previewedPath] = \
+            frame.scrollBarMaximum(Qt.Horizontal) == pos.x()
+        self.__vScrollBarAtEnd[self.__previewedPath] = \
+            frame.scrollBarMaximum(Qt.Vertical) == pos.y()
+
+    def __restoreScrollBarPositions(self):
+        """
+        Private method to restore scroll bar positions for a previewed editor.
+        """
+        try:
+            self.previewView.page().mainFrame().contentsSizeChanged.disconnect(
+                self.__restoreScrollBarPositions)
+        except TypeError:
+            # not connected, simply ignore it
+            pass
+        
+        if self.__previewedPath not in self.__scrollBarPositions:
+            return
+        
+        frame = self.previewView.page().mainFrame()
+        frame.setScrollPosition(
+            self.__scrollBarPositions[self.__previewedPath])
+        
+        if self.__hScrollBarAtEnd[self.__previewedPath]:
+            frame.setScrollBarValue(
+                Qt.Horizontal, frame.scrollBarMaximum(Qt.Horizontal))
+        
+        if self.__vScrollBarAtEnd[self.__previewedPath]:
+            frame.setScrollBarValue(
+                Qt.Vertical, frame.scrollBarMaximum(Qt.Vertical))
+    
+    @pyqtSlot(QUrl)
+    def on_previewView_linkClicked(self, url):
+        """
+        Private slot handling the clicking of a link.
+        
+        @param url url of the clicked link (QUrl)
+        """
+        e5App().getObject("UserInterface").launchHelpViewer(url.toString())
+
+
+class PreviewProcessingThread(QThread):
+    """
+    Class implementing a thread to process some text into HTML usable by the
+    previewer view.
+    
+    @signal htmlReady(str,str) emitted with the file name and processed HTML
+        to signal the availability of the processed HTML
+    """
+    htmlReady = pyqtSignal(str, str)
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent object (QObject)
+        """
+        super(PreviewProcessingThread, self).__init__()
+        
+        self.__lock = threading.Lock()
+    
+    def process(self, filePath, language, text, ssiEnabled, rootPath):
+        """
+        Convert the given text to HTML.
+        
+        @param filePath file path of the text (string)
+        @param language language of the text (string)
+        @param text text to be processed (string)
+        @param ssiEnabled flag indicating to do some (limited) SSI processing
+            (boolean)
+        @param rootPath root path to be used for SSI processing (str)
+        """
+        with self.__lock:
+            self.__filePath = filePath
+            self.__language = language
+            self.__text = text
+            self.__ssiEnabled = ssiEnabled
+            self.__rootPath = rootPath
+            self.__haveData = True
+            if not self.isRunning():
+                self.start(QThread.LowPriority)
+    
+    def run(self):
+        """
+        Thread function to convert the stored data.
+        """
+        while True:
+            # exits with break
+            with self.__lock:
+                filePath = self.__filePath
+                language = self.__language
+                text = self.__text
+                ssiEnabled = self.__ssiEnabled
+                rootPath = self.__rootPath
+                self.__haveData = False
+            
+            html = self.__getHtml(language, text, ssiEnabled, filePath,
+                                  rootPath)
+            
+            with self.__lock:
+                if not self.__haveData:
+                    self.htmlReady.emit(filePath, html)
+                    break
+                # else - next iteration
+    
+    def __getHtml(self, language, text, ssiEnabled, filePath, rootPath):
+        """
+        Private method to process the given text depending upon the given
+        language.
+        
+        @param language language of the text (string)
+        @param text to be processed (string)
+        @param ssiEnabled flag indicating to do some (limited) SSI processing
+            (boolean)
+        @param filePath file path of the text (string)
+        @param rootPath root path to be used for SSI processing (str)
+        @return processed HTML text (string)
+        """
+        if language == "HTML":
+            if ssiEnabled:
+                return self.__processSSI(text, filePath, rootPath)
+            else:
+                return text
+        elif language == "Markdown":
+            return self.__convertMarkdown(text)
+        elif language == "ReST":
+            return self.__convertReST(text)
+        else:
+            return self.tr(
+                "<p>No preview available for this type of file.</p>")
+    
+    def __processSSI(self, txt, filename, root):
+        """
+        Private method to process the given text for SSI statements.
+        
+        Note: Only a limited subset of SSI statements are supported.
+        
+        @param txt text to be processed (string)
+        @param filename name of the file associated with the given text
+            (string)
+        @param root directory of the document root (string)
+        @return processed HTML (string)
+        """
+        if not filename:
+            return txt
+        
+        # SSI include
+        incRe = re.compile(
+            r"""<!--#include[ \t]+(virtual|file)=[\"']([^\"']+)[\"']\s*-->""",
+            re.IGNORECASE)
+        baseDir = os.path.dirname(os.path.abspath(filename))
+        docRoot = root if root != "" else baseDir
+        while True:
+            incMatch = incRe.search(txt)
+            if incMatch is None:
+                break
+            
+            if incMatch.group(1) == "virtual":
+                incFile = Utilities.normjoinpath(docRoot, incMatch.group(2))
+            elif incMatch.group(1) == "file":
+                incFile = Utilities.normjoinpath(baseDir, incMatch.group(2))
+            else:
+                incFile = ""
+            if os.path.exists(incFile):
+                try:
+                    f = open(incFile, "r")
+                    incTxt = f.read()
+                    f.close()
+                except (IOError, OSError):
+                    # remove SSI include
+                    incTxt = ""
+            else:
+                # remove SSI include
+                incTxt = ""
+            txt = txt[:incMatch.start(0)] + incTxt + txt[incMatch.end(0):]
+        
+        return txt
+    
+    def __convertReST(self, text):
+        """
+        Private method to convert ReST text into HTML.
+        
+        @param text text to be processed (string)
+        @return processed HTML (string)
+        """
+        try:
+            import docutils.core    # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
+        except ImportError:
+            return self.tr(
+                """<p>ReStructuredText preview requires the"""
+                """ <b>python-docutils</b> package.<br/>Install it with"""
+                """ your package manager or see"""
+                """ <a href="http://pypi.python.org/pypi/docutils">"""
+                """this page.</a></p>""")
+        
+        return docutils.core.publish_string(text, writer_name='html')\
+            .decode("utf-8")
+    
+    def __convertMarkdown(self, text):
+        """
+        Private method to convert Markdown text into HTML.
+        
+        @param text text to be processed (string)
+        @return processed HTML (string)
+        """
+        try:
+            import markdown     # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
+        except ImportError:
+            return self.tr(
+                """<p>Markdown preview requires the <b>python-markdown</b> """
+                """package.<br/>Install it with your package manager or see """
+                """<a href="http://pythonhosted.org/Markdown/install.html">"""
+                """installation instructions.</a></p>""")
+        
+        try:
+            import mdx_mathjax  # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
+        except ImportError:
+            #mathjax doesn't require import statement if installed as extension
+            pass
+
+        extensions = ['fenced_code', 'nl2br', 'extra']
+        
+        # version 2.0 supports only extension names, not instances
+        if markdown.version_info[0] > 2 or \
+                (markdown.version_info[0] == 2 and
+                 markdown.version_info[1] > 0):
+            class _StrikeThroughExtension(markdown.Extension):
+                """
+                Class is placed here, because it depends on imported markdown,
+                and markdown import is lazy.
+                
+                (see http://achinghead.com/
+                python-markdown-adding-insert-delete.html this page for
+                details)
+                """
+                DEL_RE = r'(~~)(.*?)~~'
+
+                def extendMarkdown(self, md, md_globals):
+                    # Create the del pattern
+                    del_tag = markdown.inlinepatterns.SimpleTagPattern(
+                        self.DEL_RE, 'del')
+                    # Insert del pattern into markdown parser
+                    md.inlinePatterns.add('del', del_tag, '>not_strong')
+            
+            extensions.append(_StrikeThroughExtension())
+
+        try:
+            return markdown.markdown(text,  extensions + ['mathjax'])
+        except (ImportError, ValueError):
+            # markdown raises ValueError or ImportError, depends on version
+            # It is not clear, how to distinguish missing mathjax from other
+            # errors. So keep going without mathjax.
+            return markdown.markdown(text, extensions)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UI/Previewers/PreviewerHTML.ui	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PreviewerHTML</class>
+ <widget class="QWidget" name="PreviewerHTML">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>400</height>
+   </rect>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="titleLabel">
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+     <property name="textInteractionFlags">
+      <set>Qt::NoTextInteraction</set>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QWebView" name="previewView">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="contextMenuPolicy">
+      <enum>Qt::NoContextMenu</enum>
+     </property>
+     <property name="url">
+      <url>
+       <string>about:blank</string>
+      </url>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="jsCheckBox">
+     <property name="toolTip">
+      <string>Select to enable JavaScript for HTML previews</string>
+     </property>
+     <property name="text">
+      <string>Enable JavaScript</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="ssiCheckBox">
+     <property name="toolTip">
+      <string>Select to enable support for Server Side Includes</string>
+     </property>
+     <property name="text">
+      <string>Enable Server Side Includes</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QWebView</class>
+   <extends>QWidget</extends>
+   <header>QtWebKitWidgets/QWebView</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UI/Previewers/PreviewerQSS.py	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a previewer widget for Qt style sheet files.
+"""
+
+from __future__ import unicode_literals
+
+import os
+
+from PyQt4.QtCore import qVersion
+from PyQt4.QtGui import QWidget, QMenu, QLabel, QHeaderView, QListWidgetItem
+
+from .Ui_PreviewerQSS import Ui_PreviewerQSS
+
+import Preferences
+import UI.PixmapCache
+
+
+class PreviewerQSS(QWidget, Ui_PreviewerQSS):
+    """
+    Class implementing a previewer widget for Qt style sheet files.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super(PreviewerQSS, self).__init__(parent)
+        self.setupUi(self)
+        
+        # menu for the tool button
+        self.__toolButtonMenu = QMenu(self)
+        self.__toolButtonMenu.addAction(self.tr("Action 1"))
+        self.__toolButtonMenu.addSeparator()
+        self.__toolButtonMenu.addAction(self.tr("Action 2"))
+        self.toolButton.setMenu(self.__toolButtonMenu)
+        
+        # a MDI window
+        self.__mdi = self.mdiArea.addSubWindow(QLabel(self.tr("MDI")))
+        self.__mdi.resize(160, 80)
+        
+        # tree and table widgets
+        if qVersion() >= "5.0.0":
+            self.tree.header().setSectionResizeMode(
+                QHeaderView.ResizeToContents)
+            self.table.horizontalHeader().setSectionResizeMode(
+                QHeaderView.ResizeToContents)
+        else:
+            self.tree.header().setResizeMode(
+                QHeaderView.ResizeToContents)
+            self.table.horizontalHeader().setResizeMode(
+                QHeaderView.ResizeToContents)
+        self.tree.topLevelItem(0).setExpanded(True)
+        
+        # icon list widget
+        for iconName, labelText in (
+            ("filePython.png", self.tr("Python")),
+            ("fileRuby.png", self.tr("Ruby")),
+            ("fileJavascript.png", self.tr("JavaScript")),
+        ):
+            self.iconsListWidget.addItem(QListWidgetItem(
+                UI.PixmapCache.getIcon(iconName), labelText))
+    
+    def processEditor(self, editor=None):
+        """
+        Private slot to process an editor's text.
+        
+        @param editor editor to be processed (Editor)
+        """
+        if editor is not None:
+            fn = editor.getFileName()
+            
+            if fn:
+                extension = os.path.normcase(os.path.splitext(fn)[1][1:])
+            else:
+                extension = ""
+            if extension in \
+                    Preferences.getEditor("PreviewQssFileNameExtensions"):
+                styleSheet = editor.text()
+                if styleSheet:
+                    self.scrollAreaWidgetContents.setStyleSheet(styleSheet)
+                else:
+                    self.scrollAreaWidgetContents.setStyleSheet("")
+                self.toolButton.menu().setStyleSheet(
+                    self.scrollAreaWidgetContents.styleSheet())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UI/Previewers/PreviewerQSS.ui	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,826 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PreviewerQSS</class>
+ <widget class="QWidget" name="PreviewerQSS">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>500</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="previewLabel">
+     <property name="font">
+      <font>
+       <pointsize>12</pointsize>
+       <weight>75</weight>
+       <bold>true</bold>
+      </font>
+     </property>
+     <property name="text">
+      <string>Preview Style</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QScrollArea" name="scrollArea">
+     <property name="verticalScrollBarPolicy">
+      <enum>Qt::ScrollBarAlwaysOn</enum>
+     </property>
+     <property name="horizontalScrollBarPolicy">
+      <enum>Qt::ScrollBarAlwaysOn</enum>
+     </property>
+     <property name="widgetResizable">
+      <bool>true</bool>
+     </property>
+     <widget class="QWidget" name="scrollAreaWidgetContents">
+      <property name="geometry">
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>463</width>
+        <height>538</height>
+       </rect>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <widget class="QTabWidget" name="tabWidget">
+         <property name="currentIndex">
+          <number>0</number>
+         </property>
+         <property name="tabsClosable">
+          <bool>true</bool>
+         </property>
+         <widget class="QWidget" name="tab_1">
+          <attribute name="title">
+           <string notr="true">Tab 1</string>
+          </attribute>
+          <layout class="QVBoxLayout" name="verticalLayout_4">
+           <item>
+            <layout class="QGridLayout" name="gridLayout_4">
+             <item row="0" column="0">
+              <widget class="QRadioButton" name="radioButton">
+               <property name="text">
+                <string notr="true">RadioButton</string>
+               </property>
+              </widget>
+             </item>
+             <item row="0" column="1">
+              <widget class="QCheckBox" name="checkBox">
+               <property name="text">
+                <string notr="true">CheckBox</string>
+               </property>
+               <property name="tristate">
+                <bool>true</bool>
+               </property>
+              </widget>
+             </item>
+             <item row="1" column="0">
+              <widget class="QPushButton" name="pushButton">
+               <property name="sizePolicy">
+                <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+                 <horstretch>0</horstretch>
+                 <verstretch>0</verstretch>
+                </sizepolicy>
+               </property>
+               <property name="text">
+                <string notr="true">PushButton</string>
+               </property>
+              </widget>
+             </item>
+             <item row="1" column="1">
+              <widget class="QToolButton" name="toolButton">
+               <property name="sizePolicy">
+                <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+                 <horstretch>0</horstretch>
+                 <verstretch>0</verstretch>
+                </sizepolicy>
+               </property>
+               <property name="text">
+                <string notr="true">ToolButton</string>
+               </property>
+               <property name="popupMode">
+                <enum>QToolButton::InstantPopup</enum>
+               </property>
+              </widget>
+             </item>
+             <item row="2" column="0">
+              <widget class="QSpinBox" name="spinBox"/>
+             </item>
+             <item row="2" column="1">
+              <widget class="QDoubleSpinBox" name="doubleSpinBox"/>
+             </item>
+             <item row="3" column="0">
+              <widget class="QTimeEdit" name="timeEdit"/>
+             </item>
+             <item row="3" column="1">
+              <widget class="QDateEdit" name="dateEdit"/>
+             </item>
+             <item row="4" column="0">
+              <widget class="QLCDNumber" name="lcdNumber">
+               <property name="digitCount">
+                <number>10</number>
+               </property>
+               <property name="intValue" stdset="0">
+                <number>1234567890</number>
+               </property>
+              </widget>
+             </item>
+             <item row="4" column="1">
+              <widget class="QLabel" name="label">
+               <property name="text">
+                <string notr="true">Label with &lt;a href=&quot;http://google.com&quot;&gt;link&lt;/a&gt;</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+           <item>
+            <layout class="QVBoxLayout" name="verticalLayout_3">
+             <item>
+              <widget class="QProgressBar" name="progressBar">
+               <property name="maximum">
+                <number>20</number>
+               </property>
+               <property name="value">
+                <number>10</number>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <layout class="QHBoxLayout" name="horizontalLayout">
+               <item>
+                <widget class="QComboBox" name="readOnlyComboBox">
+                 <property name="sizePolicy">
+                  <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+                   <horstretch>0</horstretch>
+                   <verstretch>0</verstretch>
+                  </sizepolicy>
+                 </property>
+                 <item>
+                  <property name="text">
+                   <string notr="true">1</string>
+                  </property>
+                 </item>
+                 <item>
+                  <property name="text">
+                   <string notr="true">2</string>
+                  </property>
+                 </item>
+                 <item>
+                  <property name="text">
+                   <string notr="true">3</string>
+                  </property>
+                 </item>
+                </widget>
+               </item>
+               <item>
+                <widget class="QComboBox" name="editableComboBox">
+                 <property name="sizePolicy">
+                  <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+                   <horstretch>0</horstretch>
+                   <verstretch>0</verstretch>
+                  </sizepolicy>
+                 </property>
+                 <property name="editable">
+                  <bool>true</bool>
+                 </property>
+                 <item>
+                  <property name="text">
+                   <string notr="true">1</string>
+                  </property>
+                 </item>
+                 <item>
+                  <property name="text">
+                   <string notr="true">2</string>
+                  </property>
+                 </item>
+                 <item>
+                  <property name="text">
+                   <string notr="true">3</string>
+                  </property>
+                 </item>
+                </widget>
+               </item>
+              </layout>
+             </item>
+             <item>
+              <layout class="QHBoxLayout" name="horizontalLayout_4">
+               <item>
+                <widget class="QLineEdit" name="lineEdit">
+                 <property name="text">
+                  <string notr="true">Line edit</string>
+                 </property>
+                </widget>
+               </item>
+               <item>
+                <widget class="QLineEdit" name="passwordEdit">
+                 <property name="text">
+                  <string notr="true">Password</string>
+                 </property>
+                 <property name="echoMode">
+                  <enum>QLineEdit::Password</enum>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+             </item>
+             <item>
+              <widget class="QDateTimeEdit" name="dateTimeEdit"/>
+             </item>
+             <item>
+              <widget class="QCommandLinkButton" name="commandLinkButton">
+               <property name="text">
+                <string notr="true">CommandLinkButton</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </item>
+           <item>
+            <layout class="QHBoxLayout" name="horizontalLayout_2">
+             <item>
+              <spacer name="horizontalSpacer">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>40</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+             <item>
+              <layout class="QGridLayout" name="gridLayout">
+               <item row="0" column="2">
+                <widget class="Line" name="horizontalLine">
+                 <property name="orientation">
+                  <enum>Qt::Horizontal</enum>
+                 </property>
+                </widget>
+               </item>
+               <item row="1" column="0" rowspan="2">
+                <widget class="Line" name="verticalLine">
+                 <property name="orientation">
+                  <enum>Qt::Vertical</enum>
+                 </property>
+                </widget>
+               </item>
+               <item row="1" column="1" rowspan="2">
+                <widget class="QSlider" name="verticalSlider">
+                 <property name="value">
+                  <number>30</number>
+                 </property>
+                 <property name="orientation">
+                  <enum>Qt::Vertical</enum>
+                 </property>
+                 <property name="tickPosition">
+                  <enum>QSlider::TicksAbove</enum>
+                 </property>
+                </widget>
+               </item>
+               <item row="1" column="2">
+                <widget class="QSlider" name="horizontalSlider">
+                 <property name="sizePolicy">
+                  <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                   <horstretch>0</horstretch>
+                   <verstretch>0</verstretch>
+                  </sizepolicy>
+                 </property>
+                 <property name="value">
+                  <number>30</number>
+                 </property>
+                 <property name="orientation">
+                  <enum>Qt::Horizontal</enum>
+                 </property>
+                 <property name="tickPosition">
+                  <enum>QSlider::TicksAbove</enum>
+                 </property>
+                </widget>
+               </item>
+               <item row="2" column="2">
+                <widget class="QDial" name="dial">
+                 <property name="notchesVisible">
+                  <bool>true</bool>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+             </item>
+             <item>
+              <spacer name="horizontalSpacer_2">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>0</width>
+                 <height>20</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+            </layout>
+           </item>
+           <item>
+            <spacer name="verticalSpacer">
+             <property name="orientation">
+              <enum>Qt::Vertical</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>20</width>
+               <height>0</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+          </layout>
+         </widget>
+         <widget class="QWidget" name="tab_2">
+          <attribute name="title">
+           <string notr="true">Tab 2</string>
+          </attribute>
+          <layout class="QGridLayout" name="gridLayout_2">
+           <item row="0" column="0">
+            <widget class="QListWidget" name="listWidget">
+             <property name="alternatingRowColors">
+              <bool>true</bool>
+             </property>
+             <property name="selectionMode">
+              <enum>QAbstractItemView::ExtendedSelection</enum>
+             </property>
+             <item>
+              <property name="text">
+               <string notr="true">I1</string>
+              </property>
+              <property name="icon">
+               <iconset>
+                <normaloff>:/images/battery.png</normaloff>:/images/battery.png</iconset>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I2</string>
+              </property>
+              <property name="icon">
+               <iconset>
+                <normaloff>:/images/image-sunset.png</normaloff>:/images/image-sunset.png</iconset>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I3</string>
+              </property>
+              <property name="icon">
+               <iconset>
+                <normaloff>:/images/user.png</normaloff>:/images/user.png</iconset>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I4</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I5</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I6</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I7</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I8</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I9</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I10</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I11</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I12</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I14</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I15</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I16</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I17</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I18</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I19</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">I20</string>
+              </property>
+             </item>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QListWidget" name="iconsListWidget">
+             <property name="alternatingRowColors">
+              <bool>true</bool>
+             </property>
+             <property name="selectionMode">
+              <enum>QAbstractItemView::ExtendedSelection</enum>
+             </property>
+             <property name="viewMode">
+              <enum>QListView::IconMode</enum>
+             </property>
+             <property name="sortingEnabled">
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="0">
+            <widget class="QTableWidget" name="table">
+             <property name="alternatingRowColors">
+              <bool>true</bool>
+             </property>
+             <property name="sortingEnabled">
+              <bool>true</bool>
+             </property>
+             <attribute name="horizontalHeaderShowSortIndicator" stdset="0">
+              <bool>true</bool>
+             </attribute>
+             <attribute name="verticalHeaderShowSortIndicator" stdset="0">
+              <bool>true</bool>
+             </attribute>
+             <row>
+              <property name="text">
+               <string notr="true">R1</string>
+              </property>
+             </row>
+             <row>
+              <property name="text">
+               <string notr="true">R2</string>
+              </property>
+             </row>
+             <row>
+              <property name="text">
+               <string notr="true">R3</string>
+              </property>
+             </row>
+             <column>
+              <property name="text">
+               <string notr="true">C1</string>
+              </property>
+             </column>
+             <column>
+              <property name="text">
+               <string notr="true">C2</string>
+              </property>
+             </column>
+             <item row="0" column="0">
+              <property name="text">
+               <string notr="true">1,1</string>
+              </property>
+             </item>
+             <item row="0" column="1">
+              <property name="text">
+               <string notr="true">1,2</string>
+              </property>
+             </item>
+             <item row="1" column="0">
+              <property name="text">
+               <string notr="true">2,1</string>
+              </property>
+             </item>
+             <item row="1" column="1">
+              <property name="text">
+               <string notr="true">2,2</string>
+              </property>
+             </item>
+             <item row="2" column="0">
+              <property name="text">
+               <string notr="true">3,1</string>
+              </property>
+              <property name="flags">
+               <set>ItemIsSelectable|ItemIsDragEnabled|ItemIsUserCheckable</set>
+              </property>
+             </item>
+             <item row="2" column="1">
+              <property name="text">
+               <string notr="true">2,3</string>
+              </property>
+              <property name="flags">
+               <set>ItemIsSelectable|ItemIsDragEnabled|ItemIsUserCheckable</set>
+              </property>
+             </item>
+            </widget>
+           </item>
+           <item row="1" column="1">
+            <widget class="QTreeWidget" name="tree">
+             <property name="alternatingRowColors">
+              <bool>true</bool>
+             </property>
+             <property name="selectionMode">
+              <enum>QAbstractItemView::ExtendedSelection</enum>
+             </property>
+             <property name="allColumnsShowFocus">
+              <bool>true</bool>
+             </property>
+             <attribute name="headerShowSortIndicator" stdset="0">
+              <bool>true</bool>
+             </attribute>
+             <column>
+              <property name="text">
+               <string notr="true">C1</string>
+              </property>
+             </column>
+             <column>
+              <property name="text">
+               <string notr="true">C2</string>
+              </property>
+             </column>
+             <item>
+              <property name="text">
+               <string notr="true">R1</string>
+              </property>
+              <property name="text">
+               <string notr="true"/>
+              </property>
+              <item>
+               <property name="text">
+                <string notr="true">C1</string>
+               </property>
+               <property name="checkState">
+                <enum>Checked</enum>
+               </property>
+               <property name="text">
+                <string notr="true">X1</string>
+               </property>
+               <property name="checkState">
+                <enum>Checked</enum>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string notr="true">C2</string>
+               </property>
+               <property name="checkState">
+                <enum>PartiallyChecked</enum>
+               </property>
+               <property name="text">
+                <string notr="true">X2</string>
+               </property>
+               <property name="checkState">
+                <enum>PartiallyChecked</enum>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string notr="true">C3</string>
+               </property>
+               <property name="text">
+                <string notr="true">X3</string>
+               </property>
+               <property name="flags">
+                <set>ItemIsSelectable|ItemIsDragEnabled|ItemIsUserCheckable</set>
+               </property>
+              </item>
+             </item>
+             <item>
+              <property name="text">
+               <string notr="true">R2</string>
+              </property>
+              <property name="flags">
+               <set>ItemIsSelectable|ItemIsDragEnabled|ItemIsUserCheckable</set>
+              </property>
+             </item>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+         <widget class="QWidget" name="tab_3">
+          <attribute name="title">
+           <string notr="true">Tab 3</string>
+          </attribute>
+          <layout class="QGridLayout" name="gridLayout_8">
+           <item row="0" column="0">
+            <widget class="QTextBrowser" name="textBrowser">
+             <property name="undoRedoEnabled">
+              <bool>true</bool>
+             </property>
+             <property name="html">
+              <string notr="true">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Text &lt;/span&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;browser&lt;/span&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-size:10pt; font-style:italic;&quot;&gt;with&lt;/span&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline;&quot;&gt;some&lt;/span&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-size:10pt; font-weight:600; font-style:italic;&quot;&gt;text &lt;/span&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;and &lt;/span&gt;&lt;a href=&quot;http://google.com&quot;&gt;&lt;span style=&quot; font-size:10pt; text-decoration: underline; color:#0000ff;&quot;&gt;links&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+             </property>
+             <property name="openLinks">
+              <bool>false</bool>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QTextEdit" name="textEdit">
+             <property name="html">
+              <string notr="true">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Text edit&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="2">
+            <widget class="QCalendarWidget" name="calendarWidget"/>
+           </item>
+           <item row="1" column="0" colspan="3">
+            <widget class="QGroupBox" name="groupBox">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+               <horstretch>1</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="title">
+              <string notr="true">GroupBox</string>
+             </property>
+             <layout class="QGridLayout" name="gridLayout_3">
+              <item row="0" column="0">
+               <widget class="QScrollArea" name="scrollArea_2">
+                <property name="widgetResizable">
+                 <bool>true</bool>
+                </property>
+                <widget class="QWidget" name="scrollAreaWidgetContents_2">
+                 <property name="geometry">
+                  <rect>
+                   <x>0</x>
+                   <y>0</y>
+                   <width>399</width>
+                   <height>275</height>
+                  </rect>
+                 </property>
+                 <layout class="QGridLayout" name="gridLayout_9">
+                  <item row="0" column="1">
+                   <widget class="QFrame" name="frame">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                      <horstretch>1</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="frameShape">
+                     <enum>QFrame::StyledPanel</enum>
+                    </property>
+                    <property name="frameShadow">
+                     <enum>QFrame::Raised</enum>
+                    </property>
+                    <layout class="QGridLayout" name="gridLayout_10">
+                     <item row="0" column="0">
+                      <widget class="QLabel" name="label_2">
+                       <property name="text">
+                        <string notr="true">Frame</string>
+                       </property>
+                      </widget>
+                     </item>
+                     <item row="1" column="0">
+                      <spacer name="verticalSpacer_2">
+                       <property name="orientation">
+                        <enum>Qt::Vertical</enum>
+                       </property>
+                       <property name="sizeHint" stdset="0">
+                        <size>
+                         <width>20</width>
+                         <height>46</height>
+                        </size>
+                       </property>
+                      </spacer>
+                     </item>
+                    </layout>
+                   </widget>
+                  </item>
+                  <item row="0" column="0" rowspan="2">
+                   <widget class="QToolBox" name="toolBox">
+                    <property name="currentIndex">
+                     <number>0</number>
+                    </property>
+                    <widget class="QWidget" name="page">
+                     <property name="geometry">
+                      <rect>
+                       <x>0</x>
+                       <y>0</y>
+                       <width>69</width>
+                       <height>203</height>
+                      </rect>
+                     </property>
+                     <attribute name="label">
+                      <string notr="true">Toolbox1</string>
+                     </attribute>
+                    </widget>
+                    <widget class="QWidget" name="page_2">
+                     <property name="geometry">
+                      <rect>
+                       <x>0</x>
+                       <y>0</y>
+                       <width>100</width>
+                       <height>30</height>
+                      </rect>
+                     </property>
+                     <attribute name="label">
+                      <string notr="true">Toolbox2</string>
+                     </attribute>
+                    </widget>
+                   </widget>
+                  </item>
+                  <item row="0" column="2">
+                   <widget class="QDockWidget" name="dockWidget">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+                      <horstretch>1</horstretch>
+                      <verstretch>1</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="windowTitle">
+                     <string notr="true">Dock widget</string>
+                    </property>
+                    <widget class="QWidget" name="dockWidgetContents_3"/>
+                   </widget>
+                  </item>
+                  <item row="1" column="1" colspan="2">
+                   <widget class="QMdiArea" name="mdiArea">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+                      <horstretch>0</horstretch>
+                      <verstretch>2</verstretch>
+                     </sizepolicy>
+                    </property>
+                   </widget>
+                  </item>
+                 </layout>
+                </widget>
+               </widget>
+              </item>
+             </layout>
+            </widget>
+           </item>
+          </layout>
+         </widget>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UI/Previewers/__init__.py	Tue Apr 15 22:41:08 2014 +0200
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package containing the various previewer modules.
+"""
--- a/UI/UserInterface.py	Sun Apr 13 15:45:57 2014 +0200
+++ b/UI/UserInterface.py	Tue Apr 15 22:41:08 2014 +0200
@@ -5850,6 +5850,8 @@
                     "",